@sabstravtech/obtservices 0.2.2504251220 → 0.2.2505201645
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/bundles/sabstravtech-obtservices-base.umd.js +34 -17
- package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +4 -4
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +7 -3
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +29 -13
- package/fesm2015/sabstravtech-obtservices-base.js +35 -15
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import moment from 'moment';
|
|
3
3
|
import Ajv from 'ajv';
|
|
4
|
-
import { BehaviorSubject, forkJoin, of, Subject,
|
|
4
|
+
import { BehaviorSubject, forkJoin, of, Subject, } from 'rxjs';
|
|
5
5
|
import { switchMap, take, map, debounceTime } from 'rxjs/operators';
|
|
6
6
|
import { BasketItemStatus, BasketStatus, LeadPassengerType, PassengerType, ServiceType, DraftBasketType } from '../types/graphql.types';
|
|
7
7
|
import { DifferentInvokdedUserReasons, DifferentTraveller, MenuSlideEnum } from '../types/types';
|
|
@@ -291,7 +291,7 @@ export class BaseEnterpriseBasketService {
|
|
|
291
291
|
for (const basket of this.currentBaskets) {
|
|
292
292
|
const basketValue = basket.subject.value;
|
|
293
293
|
if (basketValue.invokedUser) {
|
|
294
|
-
yield
|
|
294
|
+
yield this.removeBasket(basketValue.id).toPromise();
|
|
295
295
|
}
|
|
296
296
|
}
|
|
297
297
|
});
|
|
@@ -603,7 +603,6 @@ export class BaseEnterpriseBasketService {
|
|
|
603
603
|
return __awaiter(this, void 0, void 0, function* () {
|
|
604
604
|
this.removingFromBasket.next(true);
|
|
605
605
|
let intBasket = this.findBasket(basketId);
|
|
606
|
-
// if it's a hotel remove all linked items
|
|
607
606
|
if (((_a = item === null || item === void 0 ? void 0 : item.service) === null || _a === void 0 ? void 0 : _a.type) === ServiceType.Hotel) {
|
|
608
607
|
const hotelItems = intBasket === null || intBasket === void 0 ? void 0 : intBasket.subject.value.basketItems.filter((basketItem) => {
|
|
609
608
|
return (item.detail.hotelId === basketItem.detail.hotelId &&
|
|
@@ -612,15 +611,17 @@ export class BaseEnterpriseBasketService {
|
|
|
612
611
|
item.detail.rooms[0].checkOut === basketItem.detail.rooms[0].checkOut);
|
|
613
612
|
});
|
|
614
613
|
if ((hotelItems === null || hotelItems === void 0 ? void 0 : hotelItems.length) > 1) {
|
|
615
|
-
// ENT-2447 new modal made in LU, needs to be made in all obts and app or will get error
|
|
616
614
|
yield this.modalService.open(ModalTypes.WarningRemoveModalComponent, {
|
|
617
615
|
backdrop: 'static'
|
|
618
616
|
});
|
|
619
617
|
for (const item of hotelItems) {
|
|
620
|
-
const newBasket = yield
|
|
618
|
+
const newBasket = yield this.removeItemFromBasketUpdater
|
|
619
|
+
.updateOne({
|
|
621
620
|
convertCurrencyTo: this.userCurrency,
|
|
622
621
|
basketItem: item.id
|
|
623
|
-
})
|
|
622
|
+
})
|
|
623
|
+
.pipe(take(1))
|
|
624
|
+
.toPromise();
|
|
624
625
|
if (newBasket) {
|
|
625
626
|
this.miViewed = false;
|
|
626
627
|
intBasket === null || intBasket === void 0 ? void 0 : intBasket.next(Object.assign(Object.assign({}, intBasket.subject.value), newBasket));
|
|
@@ -630,10 +631,13 @@ export class BaseEnterpriseBasketService {
|
|
|
630
631
|
}
|
|
631
632
|
}
|
|
632
633
|
else {
|
|
633
|
-
const newBasket = yield
|
|
634
|
+
const newBasket = yield this.removeItemFromBasketUpdater
|
|
635
|
+
.updateOne({
|
|
634
636
|
convertCurrencyTo: this.userCurrency,
|
|
635
637
|
basketItem: item.id
|
|
636
|
-
})
|
|
638
|
+
})
|
|
639
|
+
.pipe(take(1))
|
|
640
|
+
.toPromise();
|
|
637
641
|
if (newBasket) {
|
|
638
642
|
this.miViewed = false;
|
|
639
643
|
intBasket === null || intBasket === void 0 ? void 0 : intBasket.next(Object.assign(Object.assign({}, intBasket.subject.value), newBasket));
|
|
@@ -643,10 +647,13 @@ export class BaseEnterpriseBasketService {
|
|
|
643
647
|
}
|
|
644
648
|
}
|
|
645
649
|
else {
|
|
646
|
-
const newBasket = yield
|
|
650
|
+
const newBasket = yield this.removeItemFromBasketUpdater
|
|
651
|
+
.updateOne({
|
|
647
652
|
convertCurrencyTo: this.userCurrency,
|
|
648
653
|
basketItem: item.id
|
|
649
|
-
})
|
|
654
|
+
})
|
|
655
|
+
.pipe(take(1))
|
|
656
|
+
.toPromise();
|
|
650
657
|
if (newBasket) {
|
|
651
658
|
this.miViewed = false;
|
|
652
659
|
intBasket === null || intBasket === void 0 ? void 0 : intBasket.next(Object.assign(Object.assign({}, intBasket.subject.value), newBasket));
|
|
@@ -1040,10 +1047,19 @@ export class BaseEnterpriseBasketService {
|
|
|
1040
1047
|
this.validateBasketItemMiFetcher.fetchOne(query);
|
|
1041
1048
|
});
|
|
1042
1049
|
}
|
|
1050
|
+
// async validateMiBasket(basketId: string): Promise<void> {
|
|
1051
|
+
// const query = { basketId };
|
|
1052
|
+
// return firstValueFrom(this.validateBasketMiFetcher.fetchOne(query)).then(data => {
|
|
1053
|
+
// this.miViewed = true;
|
|
1054
|
+
// this.missingMIs = data;
|
|
1055
|
+
// });
|
|
1056
|
+
// }
|
|
1043
1057
|
validateMiBasket(basketId) {
|
|
1044
1058
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1045
|
-
const query = {
|
|
1046
|
-
|
|
1059
|
+
const query = {
|
|
1060
|
+
basketId
|
|
1061
|
+
};
|
|
1062
|
+
this.validateBasketMiFetcher.fetchOne(query).subscribe(data => {
|
|
1047
1063
|
this.miViewed = true;
|
|
1048
1064
|
this.missingMIs = data;
|
|
1049
1065
|
});
|
|
@@ -1606,4 +1622,4 @@ export class BaseEnterpriseBasketService {
|
|
|
1606
1622
|
});
|
|
1607
1623
|
}
|
|
1608
1624
|
}
|
|
1609
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3Ivc2VydmljZXMvZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUV0QixPQUFPLEVBQ0wsZUFBZSxFQUNmLFFBQVEsRUFHUixFQUFFLEVBQ0YsT0FBTyxFQUVQLGNBQWMsRUFDZCxhQUFhLEVBQ2QsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUtMLGdCQUFnQixFQUdoQixZQUFZLEVBSVosaUJBQWlCLEVBRWpCLGFBQWEsRUFFYixXQUFXLEVBTVgsZUFBZSxFQVNoQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsa0JBQWtCLEVBR2xCLGFBQWEsRUFFZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMxRixPQUFPLEVBQ0wsdUJBQXVCLEdBQ3hCLE1BQU0sd0NBQXdDLENBQUM7QUFvRGhELE9BQU8sRUFBYSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQThCeEUsT0FBTyxFQUNMLHlCQUF5QixFQUUxQixNQUFNLDJCQUEyQixDQUFDO0FBMEVuQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9C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TSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ25FO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ25DO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTs7WUFDMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsMENBQUUsT0FBTywwQ0FBRSxLQUFLLDBDQUFFLFdBQVcsQ0FDaEUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFDOUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsMENBQUUsT0FBTywwQ0FBRSxLQUFLLDBDQUFFLFdBQVcsQ0FDOUQsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFDOUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FDcEUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxH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Q0FBQywyQkFBMkIsQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUNELHNCQUFzQixDQUFDLGFBQXFCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELHdCQUF3QixDQUN0QixVQUFrQixFQUNsQixjQUF1QixFQUN2QixlQUF3QjtRQUV4QixPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxTQUFTLENBQUM7WUFDcEQsVUFBVTtZQUNWLGNBQWM7WUFDZCxlQUFlO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCBBanYgZnJvbSAnYWp2JztcbmltcG9ydCBhZGRGb3JtYXRzIGZyb20gJ2Fqdi1mb3JtYXRzJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgZm9ya0pvaW4sXG4gIE9ic2VydmFibGUsXG4gIE9ic2VydmVyLFxuICBvZixcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxuICBmaXJzdFZhbHVlRnJvbSxcbiAgbGFzdFZhbHVlRnJvbVxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZSwgbWFwLCBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gIEFkZEl0ZW1Ub0Jhc2tldCxcbiAgQmFza2V0LFxuICBCYXNrZXRJdGVtLFxuICBCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrLFxuICBCYXNrZXRJdGVtU3RhdHVzLFxuICBCYXNrZXROb3RlLFxuICBCYXNrZXRRdW90ZSxcbiAgQmFza2V0U3RhdHVzLFxuICBCZWZvcmVDYW5jZWxsYXRpb25JbmZvLFxuICBDcmVhdGVCYXNrZXRNdXRhdGlvblZhcmlhYmxlcyxcbiAgRHJhZnRCYXNrZXQsXG4gIExlYWRQYXNzZW5nZXJUeXBlLFxuICBNYW5hZ2VtZW50SW5mb1ZhbHVlLFxuICBQYXNzZW5nZXJUeXBlLFxuICBTZXJ2aWNlLFxuICBTZXJ2aWNlVHlwZSxcbiAgU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvLFxuICBVc2VySW5mb0lucHV0LFxuICBVc2VyLFxuICBCZWZvcmVBbWVuZEluZm8sXG4gIEJhc2tldEFwcHJvdmFsVGltZXN0YW1wLFxuICBEcmFmdEJhc2tldFR5cGUsXG4gIFRyYWluU2VhdE1hcCxcbiAgQ2FiSGlyZVF1b3RlLFxuICBTZXRNaVZhbHVlSW5wdXQsXG4gIFNldE1pVmFsdWVzTXV0YXRpb25WYXJpYWJsZXMsXG4gIFZhbGlkYXRpb25SZXNwb25zZSxcbiAgQ29weUluZm9JbnB1dCxcbiAgQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvLFxuICBDYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eVxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7XG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXG4gIERpZmZlcmVudFRyYXZlbGxlcixcbiAgR2V0VXNlckJhc2tldEl0ZW1SZXN1bHQsXG4gIEdldFVzZXJCYXNrZXRSZXN1bHQsXG4gIE1lbnVTbGlkZUVudW0sXG4gIFVzZXJCYXNrZXRSZXN1bHRcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHsgTW9kYWxUeXBlcyB9IGZyb20gJy4uL2NsYXNzZXMvbW9kYWwtdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbXBsIH0gZnJvbSAnLi4vY2xhc3Nlcy9zdXBwbGVtZW50YXJ5LWJvb2tpbmctaW5mby1pbXBsJztcbmltcG9ydCB7XG4gIEJhc2tldEluZm9NaURldGFpbHNJbXBsLFxufSBmcm9tICcuLi9jbGFzc2VzL2Jhc2tldC1pbmZvLW1pLWRldGFpbHMuaW1wbCc7XG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuLi9jbGFzc2VzL2hlbHBlcnMnO1xuaW1wb3J0IHsgQmFzZU1vZGFsT3BlbmVyU2VydmljZSB9IGZyb20gJy4vbW9kYWwtb3BlbmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUdldFVzZXJGZXRjaGVyLCBTZWFyY2hHZXRVc2VyRmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy91c2VyLWZldGNoZXInO1xuaW1wb3J0IHtcbiAgQWNjZXB0TmV3UHJpY2VGZXRjaGVyVHlwZSxcbiAgQmFzZUFjY2VwdE5ld1ByaWNlVXBkYXRlclxufSBmcm9tICcuLi91cGRhdGVycy9hY2NlcHQtbmV3LXByaWNlLnVwZGF0ZXInO1xuaW1wb3J0IHsgQmFzZUdldEJhc2tldEZldGNoZXIsIEdldEJhc2tldEZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvYmFza2V0LWZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldFVzZXJCYXNrZXRzRmV0Y2hlcixcbiAgR2V0VXNlckJhc2tldHNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlcnMtYmFza2V0cy1mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQWRkSXRlbVRvQmFza2V0RmV0Y2hlclR5cGUsXG4gIEJhc2VBZGRJdGVtVG9CYXNrZXRVcGRhdGVyXG59IGZyb20gJy4uL3VwZGF0ZXJzL2FkZC1pdGVtLXRvLWJhc2tldC51cGRhdGVyJztcbmltcG9ydCB7XG4gIEFkZFVzZXJCYXNrZXRGZXRjaGVyVHlwZSxcbiAgQmFzZUFkZFVzZXJUb0Jhc2tldEl0ZW1VcGRhdGVyXG59IGZyb20gJy4uL3VwZGF0ZXJzL2FkZFVzZXJUb0Jhc2tldEl0ZW0nO1xuaW1wb3J0IHtcbiAgQWRkR3Vlc3RCYXNrZXRGZXRjaGVyVHlwZSxcbiAgQmFzZUFkZEd1ZXN0VG9CYXNrZXRJdGVtVXBkYXRlclxufSBmcm9tICcuLi91cGRhdGVycy9hZGRHdWVzdFRvQmFza2V0SXRlbSc7XG5pbXBvcnQge1xuICBTZXRCYXNrZXRJdGVtTGVhZFBhc3NlbmdlckZldGNoZXJUeXBlLFxuICBCYXNlU2V0QmFza2V0SXRlbUxlYWRQYXNzZW5nZXJVcGRhdGVyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NldC1iYXNrZXQtaXRlbS1sZWFkLXBhc3Nlbmdlci51cGRhdGVyJztcbmltcG9ydCB7IEJhc2VCb29rQmFza2V0VXBkYXRlciwgQm9va0Jhc2tldEZldGNoZXJUeXBlIH0gZnJvbSAnLi4vdXBkYXRlcnMvYm9vay1iYXNrZXQtdXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlQ3JlYXRlQmFza2V0VXBkYXRlcixcbiAgQ3JlYXRlQmFza2V0RmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvY3JlYXRlLWJhc2tldC11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VEZWxldGVCYXNrZXRVcGRhdGVyLFxuICBEZWxldGVCYXNrZXRGZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtYmFza2V0LXVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZVJlbW92ZUl0ZW1Gcm9tQmFza2V0VXBkYXRlcixcbiAgRGVsZXRlQmFza2V0SXRlbUZldGNoZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS1pdGVtLWZyb20tYmFza2V0LnVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZVJldmFsaWRhdGVCYXNrZXRVcGRhdGVyLFxuICBSZXZhbGlkYXRlQmFza2V0RmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvcmV2YWxpZGF0ZS1iYXNrZXQtdXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlQWRkVXBkYXRlZEl0ZW1Ub0Jhc2tldFVwZGF0ZXIsXG4gIEFkZFVwZGF0ZWRJdGVtVG9CYXNrZXRVcGRhdGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy91cGRhdGUtYmFza2V0LWl0ZW0udXBkYXRlcic7XG5cbmltcG9ydCB7IFRyYXZlbGxlciwgVHJhdmVsbGVyT2JqZWN0IH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xuaW1wb3J0IHsgU2VhcmNoT2JqZWN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWFyY2gtb2JqZWN0cy5pbnRlcmZhY2UnO1xuXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXN1cHBsZW1lbnRhcnktYm9va2luZy1pbmZvLWltcGwnO1xuaW1wb3J0IHtcbiAgQmFzZW1vdmVCYXNrZXRJdGVtVG9CYXNrZXQsXG4gIE1vdmVJdGVtVG9BRGlmZmVyZW50QmFza2V0VHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9tb3ZlLWJhc2tldC1pdGVtLXRvLWJhc2tldCc7XG5pbXBvcnQge1xuICBCYXNlVXBkYXRlQmFza2V0Tm90ZXNUeXBlLFxuICBCYXNlVXBkYXRlQmFza2V0Tm90ZVVwZGF0ZXJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvdXBkYXRlLWJhc2tldC1ub3Rlcy11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VVcGRhdGVCYXNrZXRUaXRsZVR5cGUsXG4gIEJhc2VVcGRhdGVCYXNrZXRUaXRsZVVwZGF0ZXJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvdXBkYXRlLWJhc2tldC10aXRsZS11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VTZXRQYXltZW50T3B0aW9uVXBkYXRlcixcbiAgU2V0QmFza2V0SXRlbVBheW1lbnRNZXRob2RUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NldC1iYXNrZXQtaXRlbS1wYXltZW5yLW9wdGlvbi51cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRDYW5jZWxsYXRpb25JbmZvRmV0Y2hlcixcbiAgR2V0Q2FuY2VsbGF0aW9uSW5mb1R5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWNhbmNlbGxhdGlvbi1pbmZvLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZVJlcXVpcmVzUmVhc29uU2VydmljZSxcbiAgUmVxdWlyZXNSZWFzb25TZXJ2aWNlSW50ZXJmYWNlXG59IGZyb20gJy4vcmVxdWlyZXMtcmVhc29uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQmFzZUNyZWF0ZUJhc2tldE5vdGVVcGRhdGVyLFxuICBDcmVhdGVCYXNrZXROb3RlVXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvY3JlYXRlLWJhc2tldC1ub3RlLXVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZUFkZEJhc2tldEl0ZW1NYXJrdXBVcGRhdGVyLFxuICBBZGRCYXNrZXRJdGVtTWFya3VwVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9hZGQtYmFza2V0LWl0ZW0tbWFya3VwLnVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZUFkZEJhc2tldEl0ZW1DdXN0b21SZW1hcmtVcGRhdGVyLFxuICBBZGRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrVXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvYWRkLWJhc2tldC1pdGVtLWN1c3RvbS1yZW1hcmstdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrc0ZldGNoZXIsXG4gIEdldEJhc2tldEl0ZW1DdXN0b21SZW1hcmtzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWJhc2tldC1pdGVtLWN1c3RvbS1yZW1hcmtzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlQ2hhbmdlQmFza2V0T3duZXJzaGlwVXBkYXRlcixcbiAgQ2hhbmdlQmFza2V0T3duZXJzaGlwVXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvY2hhbmdlLWJhc2tldC1vd25lcnNoaXAtdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRCYXNrZXRRdW90ZUZldGNoZXIsXG4gIEdldEJhc2tldFF1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWJhc2tldC1xdW90ZS5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldEJhc2tldE5vdGVzRmV0Y2hlcixcbiAgR2V0QmFza2V0Tm90ZXNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtYmFza2V0LW5vdGVzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0QmFza2V0QXBwcm92YWxUaW1lc3RhbXBzRmV0Y2hlcixcbiAgR2V0QmFza2V0QXBwcm92YWxUaW1lc3RhbXBzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWJhc2tldC1hcHByb3ZhbC10aW1lc3RhbXBzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlUmVzZW5kQXBwcm92ZXJFbWFpbEZldGNoZXIsXG4gIFJlc2VuZEFwcHJvdmVyRW1haWxRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL3Jlc2VuZC1hcHByb3ZhbC1lbWFpbC5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUNoZWNrSWZCYXNrZXRSZXF1aXJlc0FwcHJvdmFsRmV0Y2hlcixcbiAgQ2hlY2tJZkJhc2tldFJlcXVpcmVzQXBwcm92YWxGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9jaGVjay1pZi1iYXNrZXQtcmVxdWlyZXMtYXBwcm92YWwnO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0RHJhZnRCYXNrZXRzRmV0Y2hlcixcbiAgRHJhZnRCYXNrZXRzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWRyYWZ0LWJhc2tldHMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VDcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyLFxuICBDcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9jcmVhdGUtYmFza2V0LWZyb20tZHJhZnQtdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRPZmZpY2VBcHByb3ZlcnNGZXRjaGVyLFxuICBHZXRPZmZpY2VBcHByb3ZlcnNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtb2ZmaWNlLWFwcHJvdmVycy5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVNlbGVjdEJhc2tldEFwcHJvdmVyVXBkYXRlcixcbiAgU2VsZWN0QmFza2V0QXBwcm92ZXJNdXRhdGlvblR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2VsZWN0LWJhc2tldC1hcHByb3Zlci51cGRhdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldFVzZXJBcHByb3ZlcnNGZXRjaGVyLFxuICBHZXRVc2VyQXBwcm92ZXJzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItYXBwcm92ZXJzLmZldGNoZXInO1xuXG5pbXBvcnQgeyBVc2VyRmF2b3J1cml0ZSB9IGZyb20gJy4uL2NsYXNzZXMvdXNlci1mYXZvdXJpdGUuZW51bSc7XG5pbXBvcnQgeyBNaUNvbW1hbmQgfSBmcm9tICcuLi9kYXRhL21pLWNvbW1hbmQnO1xuaW1wb3J0IHtcbiAgQmFzZVNlbGVjdEJhc2tldE5vdGlmeUFwcHJvdmVyVXBkYXRlcixcbiAgU2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJNdXRhdGlvblR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2VsZWN0LWJhc2tldC1ub3RpZnktYXBwcm92ZXIudXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VSZXF1aXJlc092ZXJyaWRlUmVhc29uU2VydmljZSxcbiAgUmVxdWlyZXNPdmVycmlkZVJlYXNvblNlcnZpY2VJbnRlcmZhY2Vcbn0gZnJvbSAnLi9yZXF1aXJlcy1vdmVycmlkZS1yZWFzb24uc2VydmljZSc7XG5cbmltcG9ydCB7XG4gIEJhc2VDYW5BbWVuZEJvb2tpbmdGZXRjaGVyLFxuICBDYW5BbWVuZEJvb2tpbmdUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2Nhbi1hbWVuZC1ib29raW5nLmZldGNoZXInO1xuXG5pbXBvcnQgeyBCYXNlU2hhcmVCYXNrZXRVcGRhdGVyLCBTaGFyZUJhc2tldFVwZGF0ZXJUeXBlIH0gZnJvbSAnLi4vdXBkYXRlcnMvc2hhcmUtYmFza2V0LnVwZGF0ZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0VXNlclNoYXJlZEJhc2tldHNGZXRjaGVyLFxuICBHZXRVc2VyU2hhcmVkQmFza2V0c0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLXNoYXJlZC1iYXNrZXRzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0VHJhaW5TZWF0bWFwRmV0Y2hlcixcbiAgR2V0VHJhaW5TZWF0bWFwRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXRyYWluLXNlYXRtYXAuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VTZWxlY3RCYXNrZXRNdWx0aUxldmVsQXBwcm92ZXJzVXBkYXRlcixcbiAgU2VsZWN0QmFza2V0TXVsdGlMZXZlbEFwcHJvdmVyc011dGF0aW9uVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9zZWxlY3QtYmFza2V0LW11bHRpLWxldmVsLWFwcHJvdmVycy51cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VTZWFyY2hNSUF1dG9TdWdnZXN0VmFsdWVzRmV0Y2hlcixcbiAgU2VhcmNoTUlBdXRvU3VnZ2VzdFZhbHVlc0ZldGNoZXJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLW1pLWF1dG8tc3VnZ2VzdC12YWx1ZXMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VWYWxpZGF0ZUJhc2tldE1pRmV0Y2hlcixcbiAgVmFsaWRhdGVCYXNrZXRNaUZldGNoZXJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvdmFsaWRhdGUtYmFza2V0LW1pLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlVmFsaWRhdGVCYXNrZXRJdGVtTWlGZXRjaGVyLFxuICBWYWxpZGF0ZUJhc2tldEl0ZW1NaUZldGNoZXJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvdmFsaWRhdGUtYmFza2V0LWl0ZW0tbWkuZmV0Y2hlcic7XG5cbmltcG9ydCB7IEJhc2VTZXRNSVZhbHVlc1VwZGF0ZXIsIFNldE1JVmFsdWVzVXBkYXRlciB9IGZyb20gJy4uL3VwZGF0ZXJzL3NldC1taS12YWx1ZXMudXBkYXRlcic7XG5cbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcbi8vIGltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmFzZUJlZm9yZUFtZW5kQ2FiU2VhcmNoUXVvdGVGZXRjaGVyLFxuICBCZWZvcmVBbWVuZENhYlNlYXJjaFF1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYmVmb3JlLWFtZW5kLWNhYi1zZWFyY2gtcXVvdGUtZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlU2VuZEJhY2tUb1F1ZXVlVXBkYXRlcixcbiAgU2VuZEJhY2tUb1F1ZXVlTXV0YXRpb25UeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NlbmQtYmFjay10by1xdWV1ZS11cGRhdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldEJhc2tldENvMkluZm9GZXRjaGVyLFxuICBHZXRCYXNrZXRDbzJGZXRjaGVySW5mb1R5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYmFza2V0LWNvMi5mZXRjaGVyJztcbmltcG9ydCB7IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZCB9IGZyb20gJy4uL2NsYXNzZXMvbWFuYWdlbWVudC1pbmZvLWFuZC12YWxpZCc7XG5pbXBvcnQgeyBGbGlnaHRKb3VybmV5VHlwZSB9IGZyb20gJy4uL2NsYXNzZXMvZmxpZ2h0LWpvdXJuZXktdHlwZS10eXBlLmVudW0nO1xuaW1wb3J0IHtcbiAgQmFzZUJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaEZldGNoZXIsXG4gIEJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaEZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2JlZm9yZS1hbWVuZC1jYXItaGlyZS1zZWFyY2guZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlR2V0TUlBcHByb3ZlcnNGZXRjaGVyLFxuICBHZXRNSUFwcHJvdmVyc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1taS1hcHByb3ZlcnMuZmV0Y2hlcic7XG5cbmNvbnN0IFRFTVBJRCA9ICdURU1QSURfJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXNrZXRBbmRJdGVtIHtcbiAgYmFza2V0SWQ6IHN0cmluZztcbiAgaXRlbTogQmFza2V0SXRlbTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWlHcm91cERldGFpbCB7XG4gIHR5cGU6IFNlcnZpY2VUeXBlO1xuICBvcHRpb25zOiBzdHJpbmdbXTtcbiAgYmFza2V0SXRlbTogQmFza2V0SXRlbTtcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNrZXRJbmZvcm1hdGlvbiB7XG4gIHByaWNlczogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfTtcbiAgbWl4ZWRDdXJyZW5jeTogYm9vbGVhbjtcbiAgY291bnQ6IG51bWJlcjtcbiAgbWlHcm91cHM6IE1pR3JvdXBEZXRhaWxbXTtcbiAgYmFza2V0SW5mb01pRGV0YWlsczogQmFza2V0SW5mb01pRGV0YWlsc0ltcGxbXTtcbiAgc3VwcEluZm86IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZVtdO1xuICByZXF1aXJlc1NlbGVjdGVkQXBwcm92ZXI/OiBib29sZWFuO1xuICByZXF1aXJlc1NlbGVjdGVkTWlBcHByb3Zlcj86IGJvb2xlYW47XG4gIHJlcXVpcmVzU2VsZWN0ZWROb3RpZnlBcHByb3Zlcj86IGJvb2xlYW47XG4gIHJlcXVpcmVzU2VsZWN0ZWROb3RpZnlBcHByb3ZlclBlck1pPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNrZXRQcmljZXNMaXN0IHtcbiAgdHlwZTogU2VydmljZVR5cGU7XG4gIHByaWNlOiBudW1iZXI7XG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGNvMjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2tldFByaWNlcyB7XG4gIHRvdGFsOiBudW1iZXI7XG4gIHRvdGFsQ28yOiBudW1iZXI7XG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xuICBsaXN0OiBCYXNrZXRQcmljZXNMaXN0W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFza2V0U2VsZWN0ZWRBcHByb3ZlciB7XG4gIHNlbGVjdGVkQXBwcm92ZXI/OiBVc2VyO1xuICBzZWxlY3RlZE5vdGlmeUFwcHJvdmVyPzogVXNlcjtcbiAgYXBwcm92ZXJzPzogYW55W107XG59XG5cbmV4cG9ydCB0eXBlIEJhc2tldERldGFpbHMgPSBVc2VyQmFza2V0UmVzdWx0ICYgQmFza2V0SW5mb3JtYXRpb247XG5leHBvcnQgY2xhc3MgSW50ZXJuYWxCYXNrZXQ8USBleHRlbmRzIFNlYXJjaEdldFVzZXJGZXRjaGVyVHlwZT5cbiAgaW1wbGVtZW50cyBCYXNrZXRJbmZvcm1hdGlvbiwgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2VcbntcbiAgc3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PEJhc2tldERldGFpbHM+O1xuICBwcml2YXRlIF9iYXNrZXRTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8QmFza2V0RGV0YWlscz47XG4gIGlkPzogc3RyaW5nO1xuICB0ZW1waWQ/OiBzdHJpbmc7XG4gIHJlcXVpcmVzU2VsZWN0ZWRBcHByb3Zlcj86IGJvb2xlYW47XG4gIHJlcXVpcmVzU2VsZWN0ZWRNaUFwcHJvdmVyPzogYm9vbGVhbjtcbiAgcmVxdWlyZXNTZWxlY3RlZE5vdGlmeUFwcHJvdmVyPzogYm9vbGVhbjtcbiAgcmVxdWlyZXNTZWxlY3RlZE5vdGlmeUFwcHJvdmVyUGVyTWk/OiBib29sZWFuO1xuICB0aXRsZTogc3RyaW5nO1xuICBwcmljZXM6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH07XG4gIG1peGVkQ3VycmVuY3k6IGJvb2xlYW47XG4gIGxvd2VzdFByaWNlOiBudW1iZXI7XG4gIGNvdW50OiBudW1iZXI7XG4gIG1pR3JvdXBzOiBNaUdyb3VwRGV0YWlsW107XG4gIGJhc2tldEluZm9NaURldGFpbHM6IGFueVtdO1xuICBzdXBwSW5mbzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlW107XG4gIGdyYW5kVG90YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH07XG4gIG5lZWRzVG9WaWV3TWk6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhc2tldDogVXNlckJhc2tldFJlc3VsdCxcbiAgICBwcml2YXRlIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgZ2V0VXNlckZldGNoZXI6IEJhc2VHZXRVc2VyRmV0Y2hlcjxRPixcbiAgICBwcml2YXRlIHJlcXVpcmVzU2VydmljZTogQmFzZVJlcXVpcmVzUmVhc29uU2VydmljZSxcbiAgICBwcml2YXRlIHJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlOiBCYXNlUmVxdWlyZXNPdmVycmlkZVJlYXNvblNlcnZpY2VcbiAgKSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7XG4gICAgICBzdWJqZWN0OiBuZXcgQmVoYXZpb3JTdWJqZWN0PEJhc2tldERldGFpbHM+KHtcbiAgICAgICAgLi4uYmFza2V0LFxuICAgICAgICBwcmljZXM6IHt9LFxuICAgICAgICBtaXhlZEN1cnJlbmN5OiBmYWxzZSxcbiAgICAgICAgY291bnQ6IDAsXG4gICAgICAgIG1pR3JvdXBzOiBbXSxcbiAgICAgICAgYmFza2V0SW5mb01pRGV0YWlsczogW10sXG4gICAgICAgIHN1cHBJbmZvOiBbXVxuICAgICAgfSksXG4gICAgICBfYmFza2V0U3ViamVjdDogbmV3IEJlaGF2aW9yU3ViamVjdDxCYXNrZXREZXRhaWxzPih7XG4gICAgICAgIC4uLmJhc2tldCxcbiAgICAgICAgcHJpY2VzOiB7fSxcbiAgICAgICAgbWl4ZWRDdXJyZW5jeTogZmFsc2UsXG4gICAgICAgIGNvdW50OiAwLFxuICAgICAgICBtaUdyb3VwczogW10sXG4gICAgICAgIGJhc2tldEluZm9NaURldGFpbHM6IFtdLFxuICAgICAgICBzdXBwSW5mbzogW11cbiAgICAgIH0pLFxuICAgICAgdGVtcGlkOiBiYXNrZXQuaWQsXG4gICAgICBpZDogYmFza2V0LmlkLFxuICAgICAgdGl0bGU6IGJhc2tldC50aXRsZSxcbiAgICAgIHByaWNlczoge30sXG4gICAgICBtaXhlZEN1cnJlbmN5OiBmYWxzZSxcbiAgICAgIGNvdW50OiAwLFxuICAgICAgbWlHcm91cHM6IFtdLFxuICAgICAgYmFza2V0SW5mb01pRGV0YWlsczogW10sXG4gICAgICBzdXBwSW5mbzogW11cbiAgICB9KTtcblxuICAgIHRoaXMuX2Jhc2tldFN1YmplY3QucGlwZShkZWJvdW5jZVRpbWUoNTAwKSkuc3Vic2NyaWJlKFxuICAgICAgZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuc3ViamVjdC5uZXh0KGRhdGEpO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRoaXMuc3ViamVjdC5lcnJvcihlcnIpO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLm5leHQoYmFza2V0KTtcbiAgfVxuXG4gIGRlc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gIH1cblxuICBuZXh0KGJhc2tldDogVXNlckJhc2tldFJlc3VsdCwgaXNBZ2VudDogYm9vbGVhbiA9IG51bGwsIGJhc2tldEl0ZW1JZDogc3RyaW5nID0gJycpIHtcbiAgICAvLyByZXBsYWNpbmcgd2l0aCBhIHNoYWxsb3cgY2xvbmUgZm9yIEVOVC04NTM0LCBtaWdodCBXb3JrZXIsIG1pZ2h0IGJyZWFrIHNvbWV0aGluZyBlbHNlLiBJIHdhbnQgdG8gdXNlIF8uY2xvbmVEZWVwV2l0aFxuICAgIC8vIGJhc2tldCA9IF8uY2xvbmUoYmFza2V0KTtcblxuICAgIGlmIChiYXNrZXQuc3RhdHVzID09PSBCYXNrZXRTdGF0dXMuQm9va2VkIHx8IGJhc2tldC5zdGF0dXMgPT09IEJhc2tldFN0YXR1cy5Bd2FpdGluZ0FwcHJvdmFsKSB7XG4gICAgICBiYXNrZXQgPSB0aGlzLmhlbHBlcnMuY2xvbmUoYmFza2V0KTtcbiAgICAgIGJhc2tldCA9IHRoaXMuaGVscGVycy5tZXJnZU9iamVjdHModGhpcy5fYmFza2V0U3ViamVjdC52YWx1ZSwgYmFza2V0KTtcbiAgICB9XG4gICAgdGhpcy5pZCA9IGJhc2tldC5pZDtcbiAgICB0aGlzLnRpdGxlID0gYmFza2V0LnRpdGxlO1xuICAgIGNvbnN0IHRvU2VuZDogQmFza2V0RGV0YWlscyA9IHtcbiAgICAgIC4uLmJhc2tldCwgLy8gU3ByZWFkIHRoZSBleGlzdGluZyBwcm9wZXJ0aWVzIG9mIGJhc2tldFxuICAgICAgLi4uKGJhc2tldC5iYXNrZXRJdGVtcyB8fCBbXSkucmVkdWNlKFxuICAgICAgICAoYWNjdW06IEJhc2tldEluZm9ybWF0aW9uLCBpdGVtOiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKCFhY2N1bS5wcmljZXNbaXRlbS5jdXJyZW5jeV0pIHtcbiAgICAgICAgICAgIGFjY3VtLnByaWNlc1tpdGVtLmN1cnJlbmN5XSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vICEgLSBOZWVkcyB0byBiZSBpdGVtLnByaWNlIGFzIHRoYXQgY29udGFpbnMgYW55IG1hcmt1cHNcbiAgICAgICAgICBhY2N1bS5wcmljZXNbaXRlbS5jdXJyZW5jeV0gKz0gaXRlbS5wcmljZTtcbiAgICAgICAgICBhY2N1bS5zdXBwSW5mby5wdXNoKFxuICAgICAgICAgICAgbmV3IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ltcGwoXG4gICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIHRoaXMuYmFza2V0U2VydmljZSxcbiAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLFxuICAgICAgICAgICAgICB0aGlzLmdldFVzZXJGZXRjaGVyXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChpdGVtLm1hbmFnZW1lbnRJbmZvPy5sZW5ndGggPiAwICYmIChpdGVtLnVzZXJzPy5sZW5ndGggPiAwIHx8IGl0ZW0uZ3Vlc3RzPy5sZW5ndGgpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnKysrIENyZWF0aW5nIE1JIEltcGxlbWVudGF0aW9uICsrKycpO1xuICAgICAgICAgICAgYWNjdW0uYmFza2V0SW5mb01pRGV0YWlscy5wdXNoKG5ldyBCYXNrZXRJbmZvTWlEZXRhaWxzSW1wbChpdGVtLCB0aGlzLmJhc2tldFNlcnZpY2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJpY2VzOiB7fSxcbiAgICAgICAgICBtaXhlZEN1cnJlbmN5OiBmYWxzZSxcbiAgICAgICAgICBjb3VudDogYmFza2V0LmJhc2tldEl0ZW1zPy5sZW5ndGggfHwgMCxcbiAgICAgICAgICBtaUdyb3VwczogW10sXG4gICAgICAgICAgYmFza2V0SW5mb01pRGV0YWlsczogW10sXG4gICAgICAgICAgc3VwcEluZm86IFtdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9O1xuICAgIHRvU2VuZC5taXhlZEN1cnJlbmN5ID0gT2JqZWN0LmtleXModG9TZW5kLnByaWNlcykubGVuZ3RoID4gMTtcbiAgICB0aGlzLl9iYXNrZXRTdWJqZWN0Lm5leHQodG9TZW5kKTtcblxuICAgIGlmIChiYXNrZXQuYmFza2V0SXRlbXMuZXZlcnkoaXRlbSA9PiBpdGVtPy5kZXRhaWw/Lm91dHdhcmREZXRhaWw/LnNwbGl0SUQpKSB7XG4gICAgICBpZiAoIShiYXNrZXQuYmFza2V0SXRlbXMubGVuZ3RoICUgMikpIHtcbiAgICAgICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UuYWRkQmFza2V0SXRlbShiYXNrZXQsIGJhc2tldEl0ZW1JZCk7XG4gICAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2UuYWRkQmFza2V0SXRlbShiYXNrZXQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlcXVpcmVzU2VydmljZS5hZGRCYXNrZXRJdGVtKGJhc2tldCwgYmFza2V0SXRlbUlkKTtcbiAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2UuYWRkQmFza2V0SXRlbShiYXNrZXQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUVudGVycHJpc2VCYXNrZXRTZXJ2aWNlPFxuICBBTlBVX1EgZXh0ZW5kcyBBY2NlcHROZXdQcmljZUZldGNoZXJUeXBlLFxuICBBSVRCX1EgZXh0ZW5kcyBBZGRJdGVtVG9CYXNrZXRGZXRjaGVyVHlwZSxcbiAgQVVUQl9RIGV4dGVuZHMgQWRkVXNlckJhc2tldEZldGNoZXJUeXBlLFxuICBDQl9RIGV4dGVuZHMgQ3JlYXRlQmFza2V0RmV0Y2hlclR5cGUsXG4gIEdCX1EgZXh0ZW5kcyBHZXRCYXNrZXRGZXRjaGVyVHlwZSxcbiAgQkJfUSBleHRlbmRzIEJvb2tCYXNrZXRGZXRjaGVyVHlwZSxcbiAgREJfUSBleHRlbmRzIERlbGV0ZUJhc2tldEZldGNoZXJUeXBlLFxuICBSSUJfUSBleHRlbmRzIERlbGV0ZUJhc2tldEl0ZW1GZXRjaGVyVHlwZSxcbiAgUlZCX1EgZXh0ZW5kcyBSZXZhbGlkYXRlQmFza2V0RmV0Y2hlclR5cGUsXG4gIEdVX1EgZXh0ZW5kcyBTZWFyY2hHZXRVc2VyRmV0Y2hlclR5cGUsXG4gIEdVQl9RIGV4dGVuZHMgR2V0VXNlckJhc2tldHNGZXRjaGVyVHlwZSxcbiAgU0JMUF9RIGV4dGVuZHMgU2V0QmFza2V0SXRlbUxlYWRQYXNzZW5nZXJGZXRjaGVyVHlwZSxcbiAgTUlUREJfUSBleHRlbmRzIE1vdmVJdGVtVG9BRGlmZmVyZW50QmFza2V0VHlwZSxcbiAgVUJOX1EgZXh0ZW5kcyBCYXNlVXBkYXRlQmFza2V0Tm90ZXNUeXBlLFxuICBVQlRfUSBleHRlbmRzIEJhc2VVcGRhdGVCYXNrZXRUaXRsZVR5cGUsXG4gIFNCTV9RIGV4dGVuZHMgU2V0QmFza2V0SXRlbVBheW1lbnRNZXRob2RUeXBlLFxuICBHQ0lfUSBleHRlbmRzIEdldENhbmNlbGxhdGlvbkluZm9UeXBlLFxuICBBR1RCX1EgZXh0ZW5kcyBBZGRHdWVzdEJhc2tldEZldGNoZXJUeXBlLFxuICBBVUlCX1EgZXh0ZW5kcyBBZGRVcGRhdGVkSXRlbVRvQmFza2V0VXBkYXRlclR5cGUsXG4gIENCTl9RIGV4dGVuZHMgQ3JlYXRlQmFza2V0Tm90ZVVwZGF0ZXJUeXBlLFxuICBHQk5GX1EgZXh0ZW5kcyBHZXRCYXNrZXROb3Rlc0ZldGNoZXJUeXBlLFxuICBHQkFUX1EgZXh0ZW5kcyBHZXRCYXNrZXRBcHByb3ZhbFRpbWVzdGFtcHNGZXRjaGVyVHlwZSxcbiAgQU1fUSBleHRlbmRzIEFkZEJhc2tldEl0ZW1NYXJrdXBUeXBlLFxuICBBQklDUl9RIGV4dGVuZHMgQWRkQmFza2V0SXRlbUN1c3RvbVJlbWFya1VwZGF0ZXJUeXBlLFxuICBHQklDX1EgZXh0ZW5kcyBHZXRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrc0ZldGNoZXJUeXBlLFxuICBDQk9VX1EgZXh0ZW5kcyBDaGFuZ2VCYXNrZXRPd25lcnNoaXBVcGRhdGVyVHlwZSxcbiAgR0JRRl9RIGV4dGVuZHMgR2V0QmFza2V0UXVvdGVGZXRjaGVyVHlwZSxcbiAgUkFFX1EgZXh0ZW5kcyBSZXNlbmRBcHByb3ZlckVtYWlsUXVvdGVGZXRjaGVyVHlwZSxcbiAgQ0lCUkFfUSBleHRlbmRzIENoZWNrSWZCYXNrZXRSZXF1aXJlc0FwcHJvdmFsRmV0Y2hlclR5cGUsXG4gIEdPQUZfUSBleHRlbmRzIEdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXJUeXBlLFxuICBTQkFfVSBleHRlbmRzIFNlbGVjdEJhc2tldEFwcHJvdmVyTXV0YXRpb25UeXBlLFxuICBHREJfUSBleHRlbmRzIERyYWZ0QmFza2V0c0ZldGNoZXJUeXBlLFxuICBDQkZEX1EgZXh0ZW5kcyBDcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyVHlwZSxcbiAgU0JOQV9VIGV4dGVuZHMgU2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJNdXRhdGlvblR5cGUsXG4gIENBQl9RIGV4dGVuZHMgQ2FuQW1lbmRCb29raW5nVHlwZSxcbiAgR1VBRl9RIGV4dGVuZHMgR2V0VXNlckFwcHJvdmVyc0ZldGNoZXJUeXBlLFxuICBHTUFGX1EgZXh0ZW5kcyBHZXRNSUFwcHJvdmVyc0ZldGNoZXJUeXBlLFxuICBTQlVfUSBleHRlbmRzIFNoYXJlQmFza2V0VXBkYXRlclR5cGUsXG4gIEdVU0JfUSBleHRlbmRzIEdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlclR5cGUsXG4gIEdUU01fUSBleHRlbmRzIEdldFRyYWluU2VhdG1hcEZldGNoZXJUeXBlLFxuICBCQVNfUSBleHRlbmRzIEJlZm9yZUFtZW5kQ2FiU2VhcmNoUXVvdGVGZXRjaGVyVHlwZSxcbiAgQkFDSFNfUSBleHRlbmRzIEJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaEZldGNoZXJUeXBlLFxuICBTQlRRX1UgZXh0ZW5kcyBTZW5kQmFja1RvUXVldWVNdXRhdGlvblR5cGUsXG4gIEdCQ19GIGV4dGVuZHMgR2V0QmFza2V0Q28yRmV0Y2hlckluZm9UeXBlLFxuICBTQk1MQV9VIGV4dGVuZHMgU2VsZWN0QmFza2V0TXVsdGlMZXZlbEFwcHJvdmVyc011dGF0aW9uVHlwZSxcbiAgVkJNX0YgZXh0ZW5kcyBWYWxpZGF0ZUJhc2tldE1pRmV0Y2hlcixcbiAgVkJJTV9GIGV4dGVuZHMgVmFsaWRhdGVCYXNrZXRJdGVtTWlGZXRjaGVyLFxuICBTTVZfVSBleHRlbmRzIFNldE1JVmFsdWVzVXBkYXRlcixcbiAgU01BU19GIGV4dGVuZHMgU2VhcmNoTUlBdXRvU3VnZ2VzdFZhbHVlc0ZldGNoZXJcbj4gaW1wbGVtZW50cyBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZVxue1xuICBwdWJsaWMgYmFza2V0VXBkYXRpbmcgPSBmYWxzZTtcblxuICBwcml2YXRlIGN1cnJlbnRCYXNrZXRzOiBJbnRlcm5hbEJhc2tldDxHVV9RPltdID0gW107XG4gIGF3YWl0aW5nQXBwcm92YWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBoaWdobGlnaHRCYXNrZXRJdGVtc0VtaXR0ZXI6IFN1YmplY3Q8R2V0VXNlckJhc2tldEl0ZW1SZXN1bHRbXT4gPSBuZXcgU3ViamVjdDxcbiAgICBHZXRVc2VyQmFza2V0SXRlbVJlc3VsdFtdXG4gID4oKTtcbiAgbG9hZGluZ1N1cHBsZW1lbnRhcnlCb29raW5nSW5mbzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGJhc2tldENoYW5nZUVtaXR0ZXI6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgYWRkaW5nVG9CYXNrZXQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZW1vdmluZ0Zyb21CYXNrZXQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBkZWxldGluZ0Jhc2tldDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGF1dG9TdWdnZXN0RGVmYXVsdHNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgY3JlYXRpbmdOZXdCYXNrZXQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc0RpYWxvZ09wZW46IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBtaVVwZGF0aW5nOiBCZWhhdmlvclN1YmplY3Q8Qm9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVxdWlyZU5ld0dVVEJhc2tldDogQmVoYXZpb3JTdWJqZWN0PEJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGNsZWFyUmFpbFNlYXRzOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICBzZWxlY3RlZEJhc2tldElkOiBzdHJpbmcgPSAnJztcbiAgbmV3SW52b2tlZEJhc2tldElkOiBzdHJpbmc7XG4gIHVwZGF0aW5nQmFza2V0ID0gZmFsc2U7XG4gIF9pc0FwcHJvdmVkQmFza2V0OiBib29sZWFuID0gZmFsc2U7XG4gIF9taXNzaW5nTUlzOiBWYWxpZGF0aW9uUmVzcG9uc2VbXSA9IFtdO1xuICBtaVZpZXdlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBsb2FkaW5nQ2FuY2VsbGVkSW5mbyA9IGZhbHNlO1xuICBnZXQgaXNBcHByb3ZlZEJhc2tldCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNBcHByb3ZlZEJhc2tldDtcbiAgfVxuXG4gIHNldCBpc0FwcHJvdmVkQmFza2V0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNBcHByb3ZlZEJhc2tldCA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgZ2V0IGN1cnJlbnRCYXNrZXRJRCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2tldENoYW5nZUVtaXR0ZXIudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHNldCBjdXJyZW50QmFza2V0SUQodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5jdXJyZW50QmFza2V0SUQpIHtcbiAgICAgIC8vIHRoaXMgcHJldmVudHMgdGhlIGVtaXR0ZXIgZ2V0dGluZyBzdHVjayBpbiBhIGxvb3AgIC0gY2FzdWluZyBicm93c2VyIG92ZXJsb2Fkc1xuICAgICAgdGhpcy5taVZpZXdlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5iYXNrZXRDaGFuZ2VFbWl0dGVyLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtaXNzaW5nTUlzKCk6IFZhbGlkYXRpb25SZXNwb25zZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fbWlzc2luZ01JcztcbiAgfVxuXG4gIHNldCBtaXNzaW5nTUlzKGRhdGE6IFZhbGlkYXRpb25SZXNwb25zZVtdKSB7XG4gICAgdGhpcy5fbWlzc2luZ01JcyA9IGRhdGE7XG4gIH1cblxuICBiYXNrZXRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJbnRlcm5hbEJhc2tldDxHVV9RPltdPihbXSk7XG5cbiAgYmFza2V0TGlzdDogQmFza2V0UHJpY2VzTGlzdFtdID0gW1xuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkZsaWdodCxcbiAgICAgIHRleHQ6ICdGTElHSFRTJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5SYWlsLFxuICAgICAgdGV4dDogJ1JBSUwnLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkhvdGVsLFxuICAgICAgdGV4dDogJ0hPVEVMUycsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuQ2FiLFxuICAgICAgdGV4dDogJ1RBWElTJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5DYXIsXG4gICAgICB0ZXh0OiAnQ0FSUycsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuRXVyb3N0YXIsXG4gICAgICB0ZXh0OiAnRVVST1NUQVInLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsLFxuICAgICAgdGV4dDogJ0lOVEVSTkFUSU9OQUwgUkFJTCcsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuUGFya2luZyxcbiAgICAgIHRleHQ6ICdQQVJLSU5HJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5Mb3VuZ2UsXG4gICAgICB0ZXh0OiAnTE9VTkdFUycsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuQ29hY2gsXG4gICAgICB0ZXh0OiAnQ09BQ0gnLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkZhc3RUcmFjayxcbiAgICAgIHRleHQ6ICdGQVNUX1RSQUNLJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfVxuICBdO1xuXG4gIGJhc2tldFByaWNlczogQmVoYXZpb3JTdWJqZWN0PEJhc2tldFByaWNlcz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJhc2tldFByaWNlcz4oe1xuICAgIHRvdGFsOiBudWxsLFxuICAgIHRvdGFsQ28yOiBudWxsLFxuICAgIGxpc3Q6IHRoaXMuYmFza2V0TGlzdFxuICB9KTtcblxuICBtZW51U3RhdGUgPSBNZW51U2xpZGVFbnVtLk9VVDtcbiAgLy8gY2hlY2tBcHByb3Zlck1vZGFsQ2xvc2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHJpdmF0ZSByZXF1aXJlc1NlcnZpY2U6IEJhc2VSZXF1aXJlc1JlYXNvblNlcnZpY2U7XG4gIHByaXZhdGUgcmVxdWlyZXNPdmVycmlkZVNlcnZpY2U6IEJhc2VSZXF1aXJlc092ZXJyaWRlUmVhc29uU2VydmljZTtcbiAgcHJpdmF0ZSB1c2VyQ3VycmVuY3kgPSAnR0JQJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjY2VwdE5ld1ByaWNlVXBkYXRlcjogQmFzZUFjY2VwdE5ld1ByaWNlVXBkYXRlcjxBTlBVX1E+LFxuICAgIHByaXZhdGUgYWRkSXRlbVRvQmFza2V0VXBkYXRlcjogQmFzZUFkZEl0ZW1Ub0Jhc2tldFVwZGF0ZXI8QUlUQl9RPixcbiAgICBwcml2YXRlIGFkZFVzZXJUb0Jhc2tldEl0ZW06IEJhc2VBZGRVc2VyVG9CYXNrZXRJdGVtVXBkYXRlcjxBVVRCX1E+LFxuICAgIHByaXZhdGUgYmFza2V0Q3JlYXRvcjogQmFzZUNyZWF0ZUJhc2tldFVwZGF0ZXI8Q0JfUT4sXG4gICAgcHVibGljIGJhc2tldEZldGNoZXI6IEJhc2VHZXRCYXNrZXRGZXRjaGVyPEdCX1E+LFxuICAgIHByaXZhdGUgYm9va0Jhc2tldFVwZGF0ZXI6IEJhc2VCb29rQmFza2V0VXBkYXRlcjxCQl9RPixcbiAgICBwcml2YXRlIGRlbGV0ZUJhc2tldFVwZGF0ZXI6IEJhc2VEZWxldGVCYXNrZXRVcGRhdGVyPERCX1E+LFxuICAgIHByaXZhdGUgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxuICAgIHByaXZhdGUgcmVtb3ZlSXRlbUZyb21CYXNrZXRVcGRhdGVyOiBCYXNlUmVtb3ZlSXRlbUZyb21CYXNrZXRVcGRhdGVyPFJJQl9RPixcbiAgICBwcml2YXRlIHJldmFsaWRhdGVCYXNrZXRVcGRhdGVyOiBCYXNlUmV2YWxpZGF0ZUJhc2tldFVwZGF0ZXI8UlZCX1E+LFxuICAgIHByaXZhdGUgZ2V0VXNlckZldGNoZXI6IEJhc2VHZXRVc2VyRmV0Y2hlcjxHVV9RPixcbiAgICBwcml2YXRlIGdldFVzZXJCYXNrZXRzRmV0Y2hlcjogQmFzZUdldFVzZXJCYXNrZXRzRmV0Y2hlcjxHVUJfUT4sXG4gICAgcHJpdmF0ZSBTZXRCYXNrZXRJdGVtTGVhZFBhc3NlbmdlcjogQmFzZVNldEJhc2tldEl0ZW1MZWFkUGFzc2VuZ2VyVXBkYXRlcjxTQkxQX1E+LFxuICAgIHByaXZhdGUgbW92ZUl0ZW1Ub0FEaWZmZXJlbnRCYXNrZXQ6IEJhc2Vtb3ZlQmFza2V0SXRlbVRvQmFza2V0PE1JVERCX1E+LFxuICAgIHByaXZhdGUgdXBkYXRlQmFza2V0Tm90ZXNVcGRhdGVyOiBCYXNlVXBkYXRlQmFza2V0Tm90ZVVwZGF0ZXI8VUJOX1E+LFxuICAgIHByaXZhdGUgdXBkYXRlQmFza2V0VGl0bGVVcGRhdGVyOiBCYXNlVXBkYXRlQmFza2V0VGl0bGVVcGRhdGVyPFVCVF9RPixcbiAgICBwcml2YXRlIHNldFBheW1lbnRNZXRob2RVcGRhdGVyOiBCYXNlU2V0UGF5bWVudE9wdGlvblVwZGF0ZXI8U0JNX1E+LFxuICAgIHByaXZhdGUgZ2V0Q2FuY2VsbGF0aW9uSW5mb0ZldGNoZXI6IEJhc2VHZXRDYW5jZWxsYXRpb25JbmZvRmV0Y2hlcjxHQ0lfUT4sXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhZGRHdWVzdFRvQmFza2V0SXRlbTogQmFzZUFkZEd1ZXN0VG9CYXNrZXRJdGVtVXBkYXRlcjxBR1RCX1E+LFxuICAgIHByaXZhdGUgYWRkVXBkYXRlZEl0ZW1Ub0Jhc2tldFVwZGF0ZXI6IEJhc2VBZGRVcGRhdGVkSXRlbVRvQmFza2V0VXBkYXRlcjxBVUlCX1E+LFxuICAgIHByaXZhdGUgY3JlYXRlQmFza2V0Tm90ZTogQmFzZUNyZWF0ZUJhc2tldE5vdGVVcGRhdGVyPENCTl9RPixcbiAgICBwcml2YXRlIGdldEJhc2tldE5vdGVzOiBCYXNlR2V0QmFza2V0Tm90ZXNGZXRjaGVyPEdCTkZfUT4sXG4gICAgcHJpdmF0ZSBnZXRCYXNrZXRBcHByb3ZhbFRpbWVzdGFtcHNGZXRjaGVyOiBCYXNlR2V0QmFza2V0QXBwcm92YWxUaW1lc3RhbXBzRmV0Y2hlcjxHQkFUX1E+LFxuICAgIHByaXZhdGUgYWRkQmFza2V0SXRlbU1hcmt1cFVwZGF0ZXI6IEJhc2VBZGRCYXNrZXRJdGVtTWFya3VwVXBkYXRlcjxBTV9RPixcbiAgICBwcml2YXRlIGFkZEJhc2tldEl0ZW1DdXN0b21SZW1hcms6IEJhc2VBZGRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrVXBkYXRlcjxBQklDUl9RPixcbiAgICBwcml2YXRlIGdldEJhc2tldEl0ZW1DdXN0b21SZW1hcmtzOiBCYXNlR2V0QmFza2V0SXRlbUN1c3RvbVJlbWFya3NGZXRjaGVyPEdCSUNfUT4sXG4gICAgcHJpdmF0ZSBjaGFuZ2VCYXNrZXRPd25lcnNoaXBVcGRhdGVyOiBCYXNlQ2hhbmdlQmFza2V0T3duZXJzaGlwVXBkYXRlcjxDQk9VX1E+LFxuICAgIHByaXZhdGUgZ2V0QmFza2V0UXVvdGVGZXRjaGVyOiBCYXNlR2V0QmFza2V0UXVvdGVGZXRjaGVyPEdCUUZfUT4sXG4gICAgcHJpdmF0ZSByZXNlbmRBcHByb3ZlckVtYWlsOiBCYXNlUmVzZW5kQXBwcm92ZXJFbWFpbEZldGNoZXI8UkFFX1E+LFxuICAgIHByaXZhdGUgYmFza2V0UmVxdWlyZXNBcHByb3ZhbDogQmFzZUNoZWNrSWZCYXNrZXRSZXF1aXJlc0FwcHJvdmFsRmV0Y2hlcjxDSUJSQV9RPixcbiAgICBwcml2YXRlIGdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXI6IEJhc2VHZXRPZmZpY2VBcHByb3ZlcnNGZXRjaGVyPEdPQUZfUT4sXG4gICAgcHJpdmF0ZSBzZWxlY3RCYXNrZXRBcHByb3ZlclVwZGF0ZXI6IEJhc2VTZWxlY3RCYXNrZXRBcHByb3ZlclVwZGF0ZXI8U0JBX1U+LFxuICAgIHByaXZhdGUgZ2V0RHJhZnRCYXNrZXRzRmV0Y2hlcjogQmFzZUdldERyYWZ0QmFza2V0c0ZldGNoZXI8R0RCX1E+LFxuICAgIHByaXZhdGUgY3JlYXRlQmFza2V0RnJvbURyYWZ0VXBkYXRlcjogQmFzZUNyZWF0ZUJhc2tldEZyb21EcmFmdFVwZGF0ZXI8Q0JGRF9RPixcbiAgICBwcml2YXRlIHNlbGVjdEJhc2tldE5vdGlmeUFwcHJvdmVyVXBkYXRlcjogQmFzZVNlbGVjdEJhc2tldE5vdGlmeUFwcHJvdmVyVXBkYXRlcjxTQk5BX1U+LFxuICAgIHByaXZhdGUgY2FuQW1lbmRCb29raW5nSW5mb0ZldGNoZXI6IEJhc2VDYW5BbWVuZEJvb2tpbmdGZXRjaGVyPENBQl9RPixcbiAgICBwcml2YXRlIGdldFVzZXJBcHByb3ZlcnNGZXRjaGVyOiBCYXNlR2V0VXNlckFwcHJvdmVyc0ZldGNoZXI8R1VBRl9RPixcbiAgICBwcml2YXRlIGdldE1JQXBwcm92ZXJzRmV0Y2hlcjogQmFzZUdldE1JQXBwcm92ZXJzRmV0Y2hlcjxHTUFGX1E+LFxuICAgIHByaXZhdGUgc2hhcmVCYXNrZXRVcGRhdGVyOiBCYXNlU2hhcmVCYXNrZXRVcGRhdGVyPFNCVV9RPixcbiAgICBwcml2YXRlIGdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlcjogQmFzZUdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlcjxHVVNCX1E+LFxuICAgIHByaXZhdGUgZ2V0VHJhaW5TZWF0TWFwRmV0Y2hlcjogQmFzZUdldFRyYWluU2VhdG1hcEZldGNoZXI8R1RTTV9RPixcbiAgICBwcml2YXRlIGJlZm9yZUFtZW5kQ2FiU2VhcmNoZmV0Y2hlcjogQmFzZUJlZm9yZUFtZW5kQ2FiU2VhcmNoUXVvdGVGZXRjaGVyPEJBU19RPixcbiAgICBwcml2YXRlIGJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaGZldGNoZXI6IEJhc2VCZWZvcmVBbWVuZENhckhpcmVTZWFyY2hGZXRjaGVyPEJBQ0hTX1E+LFxuICAgIHByb3RlY3RlZCBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VuZEJhY2tUb1F1ZXVlVXBkYXRlcjogQmFzZVNlbmRCYWNrVG9RdWV1ZVVwZGF0ZXI8U0JUUV9VPixcbiAgICBwcml2YXRlIGJhc2tldENvMkZldGNoZXI6IEJhc2VHZXRCYXNrZXRDbzJJbmZvRmV0Y2hlcjxHQkNfRj4sXG4gICAgcHJpdmF0ZSBzZWxlY3RCYXNrZXRNdWx0aUxldmVsQXBwcm92ZXJzVXBkYXRlcjogQmFzZVNlbGVjdEJhc2tldE11bHRpTGV2ZWxBcHByb3ZlcnNVcGRhdGVyPFNCTUxBX1U+LFxuICAgIHByaXZhdGUgdmFsaWRhdGVCYXNrZXRNaUZldGNoZXI6IEJhc2VWYWxpZGF0ZUJhc2tldE1pRmV0Y2hlcjxWQk1fRj4sXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUJhc2tldEl0ZW1NaUZldGNoZXI6IEJhc2VWYWxpZGF0ZUJhc2tldEl0ZW1NaUZldGNoZXI8VkJJTV9GPixcbiAgICBwcml2YXRlIHNldE1JVmFsdWVzVXBkYXRlcjogQmFzZVNldE1JVmFsdWVzVXBkYXRlcjxTTVZfVT4sXG4gICAgcHJpdmF0ZSBzZWFyY2hNSUF1dG9TdWdnZXN0VmFsdWVzRmV0Y2hlcjogQmFzZVNlYXJjaE1JQXV0b1N1Z2dlc3RWYWx1ZXNGZXRjaGVyPFNNQVNfRj5cbiAgKSB7XG4gICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UgPSBuZXcgQmFzZVJlcXVpcmVzUmVhc29uU2VydmljZShtb2RhbFNlcnZpY2UsIHRoaXMpO1xuICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2UgPSBuZXcgQmFzZVJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlKG1vZGFsU2VydmljZSwgdGhpcyk7XG4gICAgdGhpcy51c2VyU2VydmljZS5jaGFuZ2VVc2VyLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLmNoYW5nZUJvYm8uc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGFzeW5jICh2YWx1ZTogVHJhdmVsbGVyKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJc0FnZW50KCkgJiYgdGhpcy5jdXJyZW50QmFza2V0cy5sZW5ndGggJiYgIXZhbHVlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVPcGVuSW52b2tlZEJhc2tldHMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2MgLSBkZWxldGVzIGFsbCBvcGVuIGludm9rZWQgYmFza2V0c1xuICAgKi9cbiAgYXN5bmMgZGVsZXRlT3Blbkludm9rZWRCYXNrZXRzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgYmFza2V0IG9mIHRoaXMuY3VycmVudEJhc2tldHMpIHtcbiAgICAgIGNvbnN0IGJhc2tldFZhbHVlID0gYmFza2V0LnN1YmplY3QudmFsdWU7XG4gICAgICBpZiAoYmFza2V0VmFsdWUuaW52b2tlZFVzZXIpIHtcbiAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5yZW1vdmVCYXNrZXQoYmFza2V0VmFsdWUuaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRSZXF1aXJlc1JlYXNvblNlcnZpY2UoKTogUmVxdWlyZXNSZWFzb25TZXJ2aWNlSW50ZXJmYWNlIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlc1NlcnZpY2U7XG4gIH1cblxuICBnZXRSZXF1aXJlc092ZXJyaWRlUmVhc29uU2VydmljZSgpOiBSZXF1aXJlc092ZXJyaWRlUmVhc29uU2VydmljZUludGVyZmFjZSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2U7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgLy8gY29uc29sZS53YXJuKCcrKysgQmFza2V0IFJlc2V0IENhbGxlZCArKysnKTtcblxuICAgIGlmICh0aGlzLnVzZXJTZXJ2aWNlLmdldGZ1bGxVc2VyRGV0YWlscyhmYWxzZSkudXNlckRhdGEudmFsdWUpIHtcbiAgICAgIC8vIGNvbnNvbGUud2FybignKysrIEZFVENISU5HIEJBU0tFVCBGUk9NIFJFU0VUICsrKycpO1xuICAgICAgdGhpcy5nZXRVc2VyQmFza2V0c0ZldGNoZXJcbiAgICAgICAgLmZldGNoTGlzdCh7XG4gICAgICAgICAgYmFza2V0U3RhdHVzZXM6IFtCYXNrZXRTdGF0dXMuT3Blbl0sXG4gICAgICAgICAgdXNlcjogdGhpcy51c2VyU2VydmljZS5nZXRmdWxsVXNlckRldGFpbHModHJ1ZSkudXNlckRhdGEudmFsdWUudXNlcl9pZC50b1N0cmluZygpXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGJhc2tldHM6IFVzZXJCYXNrZXRSZXN1bHRbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0cyA9IHRoaXMuY3VycmVudEJhc2tldHMuZmlsdGVyKFxuICAgICAgICAgICAgICAoYmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPikgPT5cbiAgICAgICAgICAgICAgICBiYXNrZXQuc3ViamVjdC52YWx1ZS5zdGF0dXMgPT09IEJhc2tldFN0YXR1cy5PcGVuIHx8XG4gICAgICAgICAgICAgICAgIWJhc2tldC5zdWJqZWN0LnZhbHVlLnN0YXR1cyB8fFxuICAgICAgICAgICAgICAgIGJhc2tldC5pZCA9PT0gdGhpcy5jdXJyZW50QmFza2V0SUQgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmlzQXBwcm92ZWRCYXNrZXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgY3VycmVudEJhc2tldHMgPSBiYXNrZXRzLm1hcCgoYmFza2V0OiBVc2VyQmFza2V0UmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChiYXNrZXQpIHtcbiAgICAgICAgICAgICAgICBsZXQgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KGJhc2tldC5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpbnRCYXNrZXQpIHtcbiAgICAgICAgICAgICAgICAgIGludEJhc2tldCA9IHRoaXMuY3JlYXRlSW50QmFza2V0KGJhc2tldCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLnB1c2goaW50QmFza2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludEJhc2tldDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGxldCBjdXJyZW50QmFza2V0c0NvcHkgPSB0aGlzLmhlbHBlcnMuY2xvbmUoY3VycmVudEJhc2tldHMpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnVzZXJTZXJ2aWNlLmJvYm8pIHtcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIGJhc2tlc3Qgd2l0aCBpbnZva2VkIHVzZXIgaWYgd2UgYXJlIG5vdCBjdXJyZW50bHkgaW52b2tpbmcgYSB1c2VyIC8vID8gLSBzaG91bGQgd2UgZG8gdGhlIG9wcG9zaXRlIGFzIHdlbGw/XG4gICAgICAgICAgICAgIGN1cnJlbnRCYXNrZXRzQ29weSA9IGN1cnJlbnRCYXNrZXRzQ29weS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgYmFza2V0ID0+ICFiYXNrZXQuc3ViamVjdC52YWx1ZS5pbnZva2VkVXNlclxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHRoaXMuYmFza2V0cy5uZXh0KGN1cnJlbnRCYXNrZXRzKTsgLy8gdXBkYXRlIGJhc2tldCBiZWZvcmUgY3VycmVudEJhc2tldElEIHVwZGF0ZSBiYXNrZXRDaGFuZ2VFbWl0dGVyIHdpdGggdGhlIG9sZCBiYXNrZXRcblxuICAgICAgICAgICAgICBpZiAoY3VycmVudEJhc2tldHNDb3B5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBjdXJyZW50QmFza2V0SUQgZXhpc3RzIC0gZG9uJ3QgcmVwbGFjZSBjdXJyZW50QmFza2V0SUQgd2l0aCBjdXJyZW50QmFza2V0c0NvcHlbMF0uaWQgKGlmIG11bHRpcGxlIHNlcnZpY2VzLCB3ZSBtdXN0IGhhdmUgYSBzcGVjaWZpYyBjdXJyZW50QmFza2V0SUQpXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSB0aGlzLmN1cnJlbnRCYXNrZXRJRCB8fCBjdXJyZW50QmFza2V0c0NvcHlbMF0uaWQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSBudWxsO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCYXNrZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBjdXJyZW50QmFza2V0cyBpdGVtcyBkb24ndCBoYXZlIGN1cnJlbnRCYXNrZXRJRCByZXNldCBjdXJyZW50QmFza2V0SUQgRU5ULTQ5NTlcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBjdXJyZW50QmFza2V0cy5ldmVyeShiYXNrZXQgPT4gYmFza2V0LmlkICE9PSB0aGlzLmN1cnJlbnRCYXNrZXRJRCkgJiZcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldHMuZXZlcnkoYmFza2V0ID0+IGJhc2tldC5pZCAhPT0gdGhpcy5jdXJyZW50QmFza2V0SUQpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IGN1cnJlbnRCYXNrZXRzWzBdLmlkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiBjdXJyZW50QmFza2V0SUQgZXhpc3RzIC0gZG9uJ3QgcmVwbGFjZSBjdXJyZW50QmFza2V0SUQgd2l0aCBjdXJyZW50QmFza2V0c0NvcHlbMF0uaWQgKGlmIG11bHRpcGxlIHNlcnZpY2VzLCB3ZSBtdXN0IGhhdmUgYSBzcGVjaWZpYyBjdXJyZW50QmFza2V0SUQgRU5ULTQ2NjEpXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSB0aGlzLmN1cnJlbnRCYXNrZXRJRCB8fCBjdXJyZW50QmFza2V0c1swXS5pZDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IG51bGw7XG4gICAgICAgICAgICAgIH0gLy8gd2FudCB0byBrZWVwIHRoZSBpbnZva2VkIGJhc2tldHNcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5iYXNrZXRzLm5leHQoY3VycmVudEJhc2tldHMpO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudEJhc2tldHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAvLyBpZiBjdXJyZW50QmFza2V0cyBpdGVtcyBkb24ndCBoYXZlIGN1cnJlbnRCYXNrZXRJRCByZXNldCBjdXJyZW50QmFza2V0SUQgRU5ULTQ5NTlcbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCYXNrZXRzLmV2ZXJ5KGJhc2tldCA9PiBiYXNrZXQuaWQgIT09IHRoaXMuY3VycmVudEJhc2tldElEKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gY3VycmVudEJhc2tldHNbMF0uaWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gaWYgY3VycmVudEJhc2tldElEIGV4aXN0cyAtIGRvbid0IHJlcGxhY2UgY3VycmVudEJhc2tldElEIHdpdGggY3VycmVudEJhc2tldHNDb3B5WzBdLmlkIChpZiBtdWx0aXBsZSBzZXJ2aWNlcywgd2UgbXVzdCBoYXZlIGEgc3BlY2lmaWMgY3VycmVudEJhc2tldElEIEVOVC00NjYxKVxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IHRoaXMuY3VycmVudEJhc2tldElEIHx8IGN1cnJlbnRCYXNrZXRzWzBdLmlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50QmFza2V0cy5mb3JFYWNoKChiYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlKSA9PlxuICAgICAgICBiYXNrZXQuc3ViamVjdC51bnN1YnNjcmliZSgpXG4gICAgICApO1xuICAgICAgdGhpcy5jdXJyZW50QmFza2V0cyA9IFtdO1xuICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSBudWxsO1xuICAgICAgdGhpcy5iYXNrZXRzLm5leHQodGhpcy5jdXJyZW50QmFza2V0cyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFsbE9wZW5CYXNrZXRzKHVzZXJfaWQ6IHN0cmluZyk6IFByb21pc2U8VXNlckJhc2tldFJlc3VsdFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VXNlckJhc2tldHNGZXRjaGVyXG4gICAgICAuZmV0Y2hMaXN0KHsgYmFza2V0U3RhdHVzZXM6IFtCYXNrZXRTdGF0dXMuT3Blbl0sIHVzZXI6IHVzZXJfaWQgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBtYXAoKHJlc3VsdHM6IFVzZXJCYXNrZXRSZXN1bHRbXSkgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQ6IFVzZXJCYXNrZXRSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpbmRCYXNrZXQocmVzdWx0LmlkKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IG5ldyBJbnRlcm5hbEJhc2tldChcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgIHRoaXMuaGVscGVycyxcbiAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldFVzZXJGZXRjaGVyLFxuICAgICAgICAgICAgICAgICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLnB1c2goaW50QmFza2V0KTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnRGFuNScsdGhpcy5jdXJyZW50QmFza2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkVG9CYXNrZXQoXG4gICAgaXRlbTogQWRkSXRlbVRvQmFza2V0LlZhcmlhYmxlcyxcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0PEdVX1E+LFxuICAgIHNlYXJjaFNlcnZpY2U6IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gW10sXG4gICAgcmVxdWlyZXNSZWFzb25LZXlzOiBzdHJpbmdbXSxcbiAgICBpbnZva2VkU3BsaXQ/OiBib29sZWFuLFxuICAgIGlnbm9yZUludm9rZWRDaGVjaz86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XG4gICAgY29uc29sZS53YXJuKCcrKysgQXR0ZW1wdGluZyB0byBhZGQgaXRlbSB0byBiYXNrZXQ6ICcsIGl0ZW0sICcgKysrJyk7XG5cbiAgICBpZiAoaW52b2tlZFNwbGl0KSB7XG4gICAgICAvLyBFTlQtNjk0MyBkbyB0aGlzIHNvIHdlIHVzZSB0aGUgaW50QmFza2V0IGlmIHdlIGhhdmUgb25lLCBoYWQgYW4gaXNzdWUgYWRkaW5nIHRvIGJhc2tldCB3aXRoIG5vIGN1cnJlbnRCYWtldElEIGJ1dCB3ZSBkaWQgaGF2ZSBpbnRiYXNrZXRcbiAgICAgIGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldCh0aGlzLmN1cnJlbnRCYXNrZXRJRCkgfHwgaW50QmFza2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQodGhpcy5jdXJyZW50QmFza2V0SUQpIHx8IGludEJhc2tldDtcbiAgICAgIHN3aXRjaCAoXG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tCYXNrZXRGb3JJbnZva2VkKGludEJhc2tldCwgdGhpcy51c2VyU2VydmljZS5ib2JvLCBpZ25vcmVJbnZva2VkQ2hlY2spXG4gICAgICApIHtcbiAgICAgICAgY2FzZSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNvbnRpbnVlOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsOlxuICAgICAgICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbDtcbiAgICAgICAgY2FzZSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLm5ld0Jhc2tldDpcbiAgICAgICAgICBpbnRCYXNrZXQgPSBhd2FpdCB0aGlzLmNyZWF0ZUJhc2tldCgpO1xuICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gaW50QmFza2V0LmlkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2g6XG4gICAgICAgICAgaWYgKGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmludm9rZWRVc2VyKSB7XG4gICAgICAgICAgICBjb25zdCBpbnZva2VkVXNlciA9IGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmJhc2tldEl0ZW1zWzBdLnVzZXJzLmZpbmQoXG4gICAgICAgICAgICAgIHVzZXIgPT4gdXNlci5pZCA9PT0gaW50QmFza2V0LnN1YmplY3QudmFsdWUuaW52b2tlZFVzZXIuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnNldEJvYm8oVHJhdmVsbGVyT2JqZWN0Lm1ha2VUcmF2ZWxsZXJPYmplY3RGcm9tVXNlcihpbnZva2VkVXNlcikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgYm9ib1xuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5zZXRCb2JvKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzYW1lVHJhdmVsbGVzclBlckJhc2tldDogYW55ID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3QoXG4gICAgICBVc2VyRmF2b3J1cml0ZS5BbGxvd1NhbWVUcmF2ZWxsZXNyUGVyQmFza2V0XG4gICAgKVxuICAgICAgPyB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChVc2VyRmF2b3J1cml0ZS5BbGxvd1NhbWVUcmF2ZWxsZXNyUGVyQmFza2V0KVxuICAgICAgOiBbXTtcblxuICAgIGNvbnNvbGUubG9nKHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0KTtcblxuICAgIGlmIChcbiAgICAgICFpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5jcmVhdGVkQnlHdXQgJiZcbiAgICAgIHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0ICYmXG4gICAgICBzYW1lVHJhdmVsbGVzclBlckJhc2tldFsnc2FtZVRyYXZlbGxlcnMnXSAmJlxuICAgICAgdHJhdmVsbGVycyAmJlxuICAgICAgdHJhdmVsbGVycy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZygnKysrIFNhbWUgVHJhdmVsbGVycyBpcyBFbmFibGVkICsrKycpO1xuICAgICAgc3dpdGNoIChcbiAgICAgICAgYXdhaXQgdGhpcy5pc1NhbWVUcmF2ZWxsZXNyUGVyQmFza2V0KFxuICAgICAgICAgIGludEJhc2tldCxcbiAgICAgICAgICB0cmF2ZWxsZXJzLFxuICAgICAgICAgIHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0WydzYW1lVHJhdmVsbGVycyddXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBjYXNlIERpZmZlcmVudFRyYXZlbGxlci5jb250aW51ZTpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBEaWZmZXJlbnRUcmF2ZWxsZXIuY2FuY2VsOlxuICAgICAgICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbDtcbiAgICAgICAgY2FzZSBEaWZmZXJlbnRUcmF2ZWxsZXIubmV3QmFza2V0OlxuICAgICAgICAgIGludEJhc2tldCA9IGF3YWl0IHRoaXMuY3JlYXRlQmFza2V0KCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSBpbnRCYXNrZXQuaWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaXRlbS5iYXNrZXQgPSBpbnRCYXNrZXQuaWQ7XG4gICAgaWYgKHRyYXZlbGxlcnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGl0ZW0udXNlcnMgPSB0aGlzLmhlbHBlcnMubWFrZVVzZXJzKHRyYXZlbGxlcnMuZmlsdGVyKHRyYXYgPT4gIXRyYXYuZ3Vlc3QpKTtcbiAgICAgIGl0ZW0uZ3Vlc3RzID0gdGhpcy5oZWxwZXJzLm1ha2VVc2Vycyh0cmF2ZWxsZXJzLmZpbHRlcih0cmF2ID0+IHRyYXYuZ3Vlc3QpKTtcbiAgICAgIGl0ZW0ubGVhZFBhc3NlbmdlciA9IHRyYXZlbGxlcnNbMF0uaWQ7XG4gICAgICBpdGVtLmxlYWRQYXNzZW5nZXJUeXBlID0gdHJhdmVsbGVyc1swXS5ndWVzdFxuICAgICAgICA/IExlYWRQYXNzZW5nZXJUeXBlLkd1ZXN0XG4gICAgICAgIDogTGVhZFBhc3NlbmdlclR5cGUuVXNlcjtcbiAgICB9XG4gICAgaXRlbS5vdXRib3VuZERhdGUgPSBpdGVtLm91dGJvdW5kRGF0ZVxuICAgICAgPyBuZXcgRGF0ZSh0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZVRpbWUoaXRlbS5vdXRib3VuZERhdGUpKVxuICAgICAgOiBpdGVtLm91dGJvdW5kRGF0ZTtcbiAgICBpdGVtLmluYm91bmREYXRlID0gaXRlbS5pbmJvdW5kRGF0ZVxuICAgICAgPyBuZXcgRGF0ZSh0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZVRpbWUoaXRlbS5pbmJvdW5kRGF0ZSkpXG4gICAgICA6IGl0ZW0uaW5ib3VuZERhdGU7XG5cbiAgICAvLyBpdGVtLnJlcXVpcmVzUmVhc29uID0gcmVxdWlyZXNSZWFzb247XG4gICAgaXRlbSA9IHRoaXMuY2hlY2tEZXRhaWxzKGl0ZW0pO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IHRoaXMudXNlclNlcnZpY2UuZmluZFNlcnZpY2UoaXRlbS5zZXJ2aWNlKS50eXBlO1xuICAgIHN3aXRjaCAoc2VydmljZSkge1xuICAgICAgY2FzZSAnQ0FSJzpcbiAgICAgICAgY29uc3QgY2FyUHJlZmVycmVkQ3VyZW5jeU9iamVjdCA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0PHtcbiAgICAgICAgICBjYXJoaXJlOiB7IGVuYWJsZTogYm9vbGVhbiB9O1xuICAgICAgICAgIGN1cnJlbmN5OiBzdHJpbmc7XG4gICAgICAgIH0+KFVzZXJGYXZvcnVyaXRlLlByZWZlcnJlZEN1cnJlbmN5KTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNhclByZWZlcnJlZEN1cmVuY3lPYmplY3QgJiZcbiAgICAgICAgICBjYXJQcmVmZXJyZWRDdXJlbmN5T2JqZWN0LmNhcmhpcmU/LmVuYWJsZSAmJlxuICAgICAgICAgIGNhclByZWZlcnJlZEN1cmVuY3lPYmplY3QuY3VycmVuY3lcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy51c2VyQ3VycmVuY3kgPSBjYXJQcmVmZXJyZWRDdXJlbmN5T2JqZWN0LmN1cnJlbmN5O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSE9URUwnOlxuICAgICAgICBjb25zdCBob3RlbFByZWZlcnJlZEN1cmVuY3lPYmplY3QgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdDx7XG4gICAgICAgICAgaG90ZWw6IHsgZW5hYmxlOiBib29sZWFuIH07XG4gICAgICAgICAgY3VycmVuY3k6IHN0cmluZztcbiAgICAgICAgfT4oVXNlckZhdm9ydXJpdGUuUHJlZmVycmVkQ3VycmVuY3kpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaG90ZWxQcmVmZXJyZWRDdXJlbmN5T2JqZWN0ICYmXG4gICAgICAgICAgaG90ZWxQcmVmZXJyZWRDdXJlbmN5T2JqZWN0LmhvdGVsPy5lbmFibGUgJiZcbiAgICAgICAgICBob3RlbFByZWZlcnJlZEN1cmVuY3lPYmplY3QuY3VycmVuY3lcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy51c2VyQ3VycmVuY3kgPSBob3RlbFByZWZlcnJlZEN1cmVuY3lPYmplY3QuY3VycmVuY3k7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGl0ZW0uY29udmVydEN1cnJlbmN5VG8gPSB0aGlzLnVzZXJDdXJyZW5jeTtcbiAgICB0aGlzLnJlbW92ZUJvb2tlZEJhc2tldCgpO1xuXG4gICAgaWYgKGl0ZW0gJiYgaW50QmFza2V0KSB7XG4gICAgICB0aGlzLmFkZGluZ1RvQmFza2V0Lm5leHQodHJ1ZSk7XG4gICAgICAvLyB0aGlzIGlzIHRoZSBsYXN0IHBvaW50XG4gICAgICBhd2FpdCB0aGlzLmFkZEl0ZW1Ub0Jhc2tldFVwZGF0ZXJcbiAgICAgICAgLnVwZGF0ZU9uZShpdGVtKVxuICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgLnRoZW4oXG4gICAgICAgICAgKG5ld0Jhc2tldDogUGFydGlhbDxVc2VyQmFza2V0UmVzdWx0PikgPT4ge1xuICAgICAgICAgICAgdGhpcy5taVZpZXdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gaGVyZSBJIHdhbnQgdGhlIG5ldyBiYXNrZXRJdGVtIElkXG4gICAgICAgICAgICBjb25zdCBvbGRJdGVtSWRzID0gaW50QmFza2V0LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG4gICAgICAgICAgICBjb25zdCBuZXdCYXNrZXRJdGVtSWRzID0gbmV3QmFza2V0LmJhc2tldEl0ZW1zLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuICAgICAgICAgICAgLy8gZG9uJ3QgbmVlZCBtaSBoZXJlXG4gICAgICAgICAgICBjb25zdCBuZXdJZCA9IG5ld0Jhc2tldEl0ZW1JZHMuZmluZChpZCA9PiAhb2xkSXRlbUlkcy5pbmNsdWRlcyhpZCkpO1xuXG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLmludEJhc2tldC5zdWJqZWN0LnZhbHVlLFxuICAgICAgICAgICAgICAgIC4uLm5ld0Jhc2tldFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICBuZXdJZFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tzZXJ2aWNlXS5ib29raW5nX2Nob3NlbiA9IHRydWU7XG4gICAgICAgICAgICBzZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW3NlcnZpY2VdLmNob3NlbiA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgYmk6IEdldFVzZXJCYXNrZXRJdGVtUmVzdWx0W10gPSBuZXdCYXNrZXQuYmFza2V0SXRlbXM7XG4gICAgICAgICAgICB0aGlzLmhpZ2hsaWdodEJhc2tldEl0ZW1zRW1pdHRlci5uZXh0KGJpKTtcbiAgICAgICAgICAgIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci5uZXh0KG5ld0Jhc2tldC5pZCk7XG4gICAgICAgICAgICB0aGlzLmFkZGluZ1RvQmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYCsrKyBDdXJyZW50bHkgQWRkaW5nOiAke3RoaXMuaXRlbXNDdXJyZW50bHlCZWluZ0FkZGVkfSBpdGVtcyArKytgKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcrKysgQWRkIEl0ZW0gdG8gQmFza2V0IENhbGwgRmluaXNoZWQhICsrKycpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgaW50QmFza2V0Lm5leHQoaW50QmFza2V0LnN1YmplY3QudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5hZGRpbmdUb0Jhc2tldC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNvbnRpbnVlO1xuICB9XG5cbiAgY2hlY2tCYXNrZXRGb3JJbnZva2VkKFxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4sXG4gICAgYm9ibzogVHJhdmVsbGVyLFxuICAgIGlnbm9yZUludm9rZWRDaGVjazogYm9vbGVhblxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcbiAgICAvLyB0aGlzIGNoYW5nZSBpcyBwb3RlbnRpYWxseSB0aGUgcmVhc29uIHdoeSB3ZSBzb21ldGltZXMgZ2V0IGFuIGVycm9yIGFkZGluZyB0byBiYXNrZXQsIG5vIGludEJhc2tldFxuICAgIGlmIChpbnRCYXNrZXQgJiYgaW50QmFza2V0LnN1YmplY3QudmFsdWU/Lmludm9rZWRVc2VyPy5pZCAhPT0gYm9ibz8uaWQpIHtcbiAgICAgIGlmIChpZ25vcmVJbnZva2VkQ2hlY2spIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLm5ld0Jhc2tldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICBNb2RhbFR5cGVzLkRpZmZlcmVudEludm9rZGVkVXNlckNvbXBvbmVudCxcbiAgICAgICAgeyBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJhc2tldEJvYm86IGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmludm9rZWRVc2VyLFxuICAgICAgICAgIGN1cnJlbnRCb2JvOiBib2JvXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jb250aW51ZSk7XG4gIH1cblxuICBpc1NhbWVUcmF2ZWxsZXNyUGVyQmFza2V0KFxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4sXG4gICAgdHJhdmVsbGVyczogVHJhdmVsbGVyW10sXG4gICAgc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQ6IG51bWJlclxuICApOiBQcm9taXNlPERpZmZlcmVudFRyYXZlbGxlcj4ge1xuICAgIGxldCBzYW1lVHJhdmVsbGVyczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGxldCB1bmlxdWVVc2VyczogVXNlcltdID0gW107XG4gICAgbGV0IHVuaXF1ZVVzZXJzSWRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmJhc2tldEl0ZW1zLmZvckVhY2goKGJhc2tldDogQmFza2V0SXRlbSkgPT4ge1xuICAgICAgYmFza2V0LnVzZXJzLmZvckVhY2goKHVzZXI6IFVzZXIpID0+IHtcbiAgICAgICAgY29uc3QgaXNEdXBsaWNhdGUgPSB1bmlxdWVVc2Vycy5zb21lKChleGlzdGluZ1VzZXI6IFVzZXIpID0+IGV4aXN0aW5nVXNlci5pZCA9PT0gdXNlci5pZCk7XG5cbiAgICAgICAgaWYgKCFpc0R1cGxpY2F0ZSkge1xuICAgICAgICAgIHVuaXF1ZVVzZXJzLnB1c2godXNlcik7XG4gICAgICAgICAgdW5pcXVlVXNlcnNJZHMucHVzaCh1c2VyLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0cmF2ZWxsZXJzLmZvckVhY2goKHRyYXZlbGxlcjogVHJhdmVsbGVyKSA9PiB7XG4gICAgICBpZiAoIXVuaXF1ZVVzZXJzSWRzLnNvbWUoKGlkOiBzdHJpbmcpID0+IGlkID09PSB0cmF2ZWxsZXIuaWQpKSB7XG4gICAgICAgIHVuaXF1ZVVzZXJzSWRzLnB1c2godHJhdmVsbGVyLmlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBzYW1lVHJhdmVsbGVycyA9IHVuaXF1ZVVzZXJzSWRzLmxlbmd0aCA8PSBzYW1lVHJhdmVsbGVzclBlckJhc2tldDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgKysrIEVycm9yIGRldGVybWVuaW5nIHNhbWUgdHJhdmVsbGVyczogJHtlcnJvcn0gKysrYCk7XG4gICAgfVxuXG4gICAgaWYgKGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmJhc2tldEl0ZW1zLmxlbmd0aCA+IDAgJiYgIXNhbWVUcmF2ZWxsZXJzKSB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgTW9kYWxUeXBlcy5EaWZmZXJlbnRUcmF2ZWxsZXJQZXJCYXNrZXRDb21wb25lbnQsXG4gICAgICAgIHsgYmFja2Ryb3A6ICdzdGF0aWMnIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB1c2VySW5CYXNrZXQ6IHVuaXF1ZVVzZXJzLFxuICAgICAgICAgIHRyYXZlbGxlcnM6IHRyYXZlbGxlcnNcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRUcmF2ZWxsZXIuY29udGludWUpO1xuICB9XG5cbiAgbG9hZEJhc2tldChpZDogc3RyaW5nLCBmb3JjZWxvYWQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIGxldCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoaWQpO1xuICAgIGlmICghaW50QmFza2V0IHx8IGZvcmNlbG9hZCkge1xuICAgICAgaW50QmFza2V0ID0gbmV3IEludGVybmFsQmFza2V0KFxuICAgICAgICB7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAgYmFza2V0SXRlbXM6IFtdXG4gICAgICAgIH0gYXMgQmFza2V0RGV0YWlscyxcbiAgICAgICAgdGhpcy5oZWxwZXJzLFxuICAgICAgICB0aGlzLFxuICAgICAgICB0aGlzLmdldFVzZXJGZXRjaGVyLFxuICAgICAgICB0aGlzLnJlcXVpcmVzU2VydmljZSxcbiAgICAgICAgdGhpcy5yZXF1aXJlc092ZXJyaWRlU2VydmljZVxuICAgICAgKTtcbiAgICAgIHRoaXMuY3VycmVudEJhc2tldHMucHVzaChpbnRCYXNrZXQpO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW5jeU9iamVjdCA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0PHtcbiAgICAgIGN1cnJlbmN5OiBzdHJpbmc7XG4gICAgICBob3RlbDoge1xuICAgICAgICBlbmFibGU6IGJvb2xlYW47XG4gICAgICB9O1xuICAgICAgY2FyaGlyZToge1xuICAgICAgICBlbmFibGU6IGJvb2xlYW47XG4gICAgICB9O1xuICAgIH0+KFVzZXJGYXZvcnVyaXRlLlByZWZlcnJlZEN1cnJlbmN5KTtcbiAgICBpZiAoY3VycmVuY3lPYmplY3Q/LmhvdGVsPy5lbmFibGUgfHwgY3VycmVuY3lPYmplY3Q/LmNhcmhpcmU/LmVuYWJsZSkge1xuICAgICAgdGhpcy51c2VyQ3VycmVuY3kgPSBjdXJyZW5jeU9iamVjdC5jdXJyZW5jeTtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2tldEZldGNoZXJcbiAgICAgIC5mZXRjaE9uZSh7IGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSwgaWQsIHdpdGhTdXBwbGVtZW50YWw6IHRydWUgfSlcbiAgICAgIC5zdWJzY3JpYmUoKG5ld0Jhc2tldDogVXNlckJhc2tldFJlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUJhc2tldChpZCwgb2YoPEJhc2tldERldGFpbHM+bmV3QmFza2V0KSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHN1YnNyaWJlVG9CYXNrZXQoaWQ6IHN0cmluZywgb2JzZXJ2ZXI6IE9ic2VydmVyPEJhc2tldERldGFpbHM+KTogdm9pZCB7XG4gICAgY29uc3QgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KGlkKTtcbiAgICBpZiAoaW50QmFza2V0KSB7XG4gICAgICBpbnRCYXNrZXQuc3ViamVjdC5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUV4cGlyZWRJdGVtcyhpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KGlkKTtcbiAgICBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5iYXNrZXRJdGVtc1xuICAgICAgLmZpbHRlcigoYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICByZXR1cm4gYmFza2V0SXRlbS5sYXRlc3RWYWxpZGF0aW9uUHJpY2VEaWZmZXJlbmNlICE9PSAwIHx8IGJhc2tldEl0ZW0uZXhwaXJlZDtcbiAgICAgIH0pXG4gICAgICAuZm9yRWFjaCgoYmFza2V0SXRlbTogQmFza2V0SXRlbSkgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZUJhc2tldEl0ZW0oaWQsIGJhc2tldEl0ZW0pO1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyByZW1vdmVCYXNrZXRJdGVtKGJhc2tldElkOiBzdHJpbmcsIGl0ZW06IEdldFVzZXJCYXNrZXRJdGVtUmVzdWx0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZW1vdmluZ0Zyb21CYXNrZXQubmV4dCh0cnVlKTtcbiAgICBsZXQgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPiA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRJZCk7XG4gICAgLy8gaWYgaXQncyBhIGhvdGVsIHJlbW92ZSBhbGwgbGlua2VkIGl0ZW1zXG4gICAgaWYgKGl0ZW0/LnNlcnZpY2U/LnR5cGUgPT09IFNlcnZpY2VUeXBlLkhvdGVsKSB7XG4gICAgICBjb25zdCBob3RlbEl0ZW1zID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlLmJhc2tldEl0ZW1zLmZpbHRlcigoYmFza2V0SXRlbTogQmFza2V0SXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGl0ZW0uZGV0YWlsLmhvdGVsSWQgPT09IGJhc2tldEl0ZW0uZGV0YWlsLmhvdGVsSWQgJiZcbiAgICAgICAgICBpdGVtLmRldGFpbC5yb29tc1swXS5pZCA9PT0gYmFza2V0SXRlbS5kZXRhaWwucm9vbXNbMF0uaWQgJiZcbiAgICAgICAgICBpdGVtLmRldGFpbC5yb29tc1swXS5jaGVja0luID09PSBiYXNrZXRJdGVtLmRldGFpbC5yb29tc1swXS5jaGVja0luICYmXG4gICAgICAgICAgaXRlbS5kZXRhaWwucm9vbXNbMF0uY2hlY2tPdXQgPT09IGJhc2tldEl0ZW0uZGV0YWlsLnJvb21zWzBdLmNoZWNrT3V0XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGlmIChob3RlbEl0ZW1zPy5sZW5ndGggPiAxKSB7XG4gICAgICAgIC8vIEVOVC0yNDQ3IG5ldyBtb2RhbCBtYWRlIGluIExVLCBuZWVkcyB0byBiZSBtYWRlIGluIGFsbCBvYnRzIGFuZCBhcHAgb3Igd2lsbCBnZXQgZXJyb3JcbiAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLldhcm5pbmdSZW1vdmVNb2RhbENvbXBvbmVudCwge1xuICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xuICAgICAgICB9KTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGhvdGVsSXRlbXMpIHtcbiAgICAgICAgICBjb25zdCBuZXdCYXNrZXQgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtRnJvbUJhc2tldFVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgICAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICAgICAgICBiYXNrZXRJdGVtOiBpdGVtLmlkXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAobmV3QmFza2V0KSB7XG4gICAgICAgICAgICB0aGlzLm1pVmlld2VkID0gZmFsc2U7XG4gICAgICAgICAgICBpbnRCYXNrZXQ/Lm5leHQoe1xuICAgICAgICAgICAgICAuLi5pbnRCYXNrZXQuc3ViamVjdC52YWx1ZSxcbiAgICAgICAgICAgICAgLi4ubmV3QmFza2V0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZpbmdGcm9tQmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5iYXNrZXRDaGFuZ2VFbWl0dGVyLm5leHQoYmFza2V0SWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3QmFza2V0ID0gYXdhaXQgbGFzdFZhbHVlRnJvbShcbiAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW1Gcm9tQmFza2V0VXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICAgICAgYmFza2V0SXRlbTogaXRlbS5pZFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG5ld0Jhc2tldCkge1xuICAgICAgICAgIHRoaXMubWlWaWV3ZWQgPSBmYWxzZTtcbiAgICAgICAgICBpbnRCYXNrZXQ/Lm5leHQoe1xuICAgICAgICAgICAgLi4uaW50QmFza2V0LnN1YmplY3QudmFsdWUsXG4gICAgICAgICAgICAuLi5uZXdCYXNrZXRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnJlbW92aW5nRnJvbUJhc2tldC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmJhc2tldENoYW5nZUVtaXR0ZXIubmV4dChiYXNrZXRJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3QmFza2V0ID0gYXdhaXQgbGFzdFZhbHVlRnJvbShcbiAgICAgICAgdGhpcy5yZW1vdmVJdGVtRnJvbUJhc2tldFVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgYmFza2V0SXRlbTogaXRlbS5pZFxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgaWYgKG5ld0Jhc2tldCkge1xuICAgICAgICB0aGlzLm1pVmlld2VkID0gZmFsc2U7XG4gICAgICAgIGludEJhc2tldD8ubmV4dCh7XG4gICAgICAgICAgLi4uaW50QmFza2V0LnN1YmplY3QudmFsdWUsXG4gICAgICAgICAgLi4ubmV3QmFza2V0XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlbW92aW5nRnJvbUJhc2tldC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5iYXNrZXRDaGFuZ2VFbWl0dGVyLm5leHQoYmFza2V0SWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWZhdWx0QmFza2V0KFxuICAgIGdldEJvb2tlZEJhc2tldDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGluaXRpYWw6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBjcmVhdGVkQnlHdXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPEludGVybmFsQmFza2V0PEdVX1E+PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZE9yQ3JlYXRlQmFza2V0KHRoaXMuY3VycmVudEJhc2tldElELCBnZXRCb29rZWRCYXNrZXQsIGNyZWF0ZWRCeUd1dCkudGhlbihcbiAgICAgIGRhdGEgPT4ge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQmFza2V0KGlkOiBzdHJpbmcpOiBJbnRlcm5hbEJhc2tldDxHVV9RPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEJhc2tldHMuZmluZCgoYmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPikgPT4ge1xuICAgICAgcmV0dXJuIGJhc2tldC5pZCA9PT0gaWQgfHwgYmFza2V0LnRlbXBpZCA9PT0gaWQ7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmRPckNyZWF0ZUJhc2tldChcbiAgICBpZD86IHN0cmluZyxcbiAgICBnZXRCb29rZWRCYXNrZXQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBjcmVhdGVkQnlHdXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPEludGVybmFsQmFza2V0PEdVX1E+PiB7XG4gICAgbGV0IGJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4gPSBudWxsO1xuXG4gICAgaWYgKCFpZCkge1xuICAgICAgbGV0IGFsbE9wZW5CYXNrZXRzID0gYXdhaXQgdGhpcy5nZXRBbGxPcGVuQmFza2V0cyhcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRmdWxsVXNlckRldGFpbHModHJ1ZSkudXNlckRhdGEudmFsdWUudXNlcl9pZC50b1N0cmluZygpXG4gICAgICApO1xuXG4gICAgICBpZiAoIXRoaXMudXNlclNlcnZpY2UuYm9ibykge1xuICAgICAgICAvLyBFTlQtMzI3NiByZW1vdmUgYmFza2VzdCB3aXRoIGludm9rZWQgdXNlciBpZiB3ZSBhcmUgbm90IGN1cnJlbnRseSBpbnZva2luZyBhIHVzZXIgLy8gPyAtIHNob3VsZCB3ZSBkbyB0aGUgb3Bwb3NpdGUgYXMgd2VsbD9cbiAgICAgICAgYWxsT3BlbkJhc2tldHMgPSBhbGxPcGVuQmFza2V0cy5maWx0ZXIoYmFza2V0ID0+ICFiYXNrZXQuaW52b2tlZFVzZXIpO1xuICAgICAgfVxuICAgICAgLy8gY29uc29sZS5sb2coJ29wZW4gYmFza2V0czogJywgYWxsT3BlbkJhc2tldHMpO1xuICAgICAgLy8gZmluZCB0aGUgbGFzdCB1cGRhdGVkIGJhc2tldFxuICAgICAgaWYgKCFhbGxPcGVuQmFza2V0cz8ubGVuZ3RoKSB7XG4gICAgICAgIC8vIEVOVC0yNjE2IHJlbW92ZWQgYWRkaW5nIHRvIGN1cnJlbnQgYmFza2V0IGFzIHRoaXMgd2FzIGEgZHVwZVxuICAgICAgICBiYXNrZXQgPSBhd2FpdCB0aGlzLmNyZWF0ZUJhc2tldChmYWxzZSwgY3JlYXRlZEJ5R3V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGJhc2tldHMgYXJlIGFscmVhZHkgc29ydGVkIGJ5IGxhc3QgdXBkYXRlZCAtIHJldHVybiB0aGUgbGFzdCB1cGRhdGVkIGJhc2tldFxuICAgICAgICBiYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYWxsT3BlbkJhc2tldHNbMF0uaWQpO1xuXG4gICAgICAgIGlmIChiYXNrZXQuc3ViamVjdC52YWx1ZS5zdGF0dXMgPT09ICdCT09LRUQnICYmICFnZXRCb29rZWRCYXNrZXQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJysrKyBSZXRyaWV2ZWQgYmFza2V0IGlzIGluIGJvb2tlZCBzdGF0dXMgLSBjcmVhdGluZyBhIG5ldyBvbmUgKysrJyk7XG4gICAgICAgICAgYmFza2V0ID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXQoKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLnB1c2goYmFza2V0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJhc2tldHMubmV4dCh0aGlzLmN1cnJlbnRCYXNrZXRzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY3JlYXRlIG5ldyBiYXNrZXQgZm9yIGd1dCB1c2VycyBldmVuIGlmIG90aGVyIG9wZW4gZ3V0IGJhc2tldCBleGlzdFxuICAgICAgaWYgKGNyZWF0ZWRCeUd1dCAmJiB0aGlzLnJlcXVpcmVOZXdHVVRCYXNrZXQudmFsdWUpIHtcbiAgICAgICAgYmFza2V0ID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXQoZmFsc2UsIGNyZWF0ZWRCeUd1dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTaG93IGJhc2tldHMgd2l0aCBPcGVuIEJhc2tldFN0YXR1cyBvbmx5IEVOVC01MjU5XG4gICAgICAgIHRoaXMuY3VycmVudEJhc2tldHMgPSB0aGlzLmN1cnJlbnRCYXNrZXRzLmZpbHRlcihcbiAgICAgICAgICBpbnRCYSA9PiBpbnRCYS5zdWJqZWN0Py52YWx1ZT8uc3RhdHVzID09PSBCYXNrZXRTdGF0dXMuT3BlblxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuYmFza2V0cy5uZXh0KHRoaXMuY3VycmVudEJhc2tldHMpO1xuICAgICAgICBiYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoaWQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnKysrIEZvdW5kIEJhc2tldDogJywgYmFza2V0LCAnICsrKycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBiYXNrZXQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlQmFza2V0KFxuICAgIGNyZWF0ZWRCeUJvbHQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBjcmVhdGVkQnlHdXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPEludGVybmFsQmFza2V0PEdVX1E+PiB7XG4gICAgdGhpcy5jcmVhdGluZ05ld0Jhc2tldC5uZXh0KHRydWUpO1xuICAgIGNvbnN0IGJhc2tldDogVXNlckJhc2tldFJlc3VsdCA9IHtcbiAgICAgIGlkOiBURU1QSUQgKyBtb21lbnQoKS51bml4KCkudG9TdHJpbmcoKSxcbiAgICAgIG93bmVyOiBudWxsLFxuICAgICAgcmVmZXJlbmNlOiBudWxsLFxuICAgICAgdGl0bGU6IG51bGwsXG4gICAgICBub3RlczogbnVsbCxcbiAgICAgIGNyZWF0ZWRBdDogbnVsbCxcbiAgICAgIHVwZGF0ZWRBdDogbnVsbCxcbiAgICAgIGJhc2tldEl0ZW1zOiBbXSxcbiAgICAgIHN0YXR1czogbnVsbCxcbiAgICAgIHZhbGlkYXRlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgY29uc3QgaW50QmFza2V0ID0gbmV3IEludGVybmFsQmFza2V0PEdVX1E+KFxuICAgICAgYmFza2V0LFxuICAgICAgdGhpcy5oZWxwZXJzLFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuZ2V0VXNlckZldGNoZXIsXG4gICAgICB0aGlzLnJlcXVpcmVzU2VydmljZSxcbiAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2VcbiAgICApO1xuICAgIC8vIHsgc3ViamVjdDogbmV3IEJlaGF2aW9yU3ViamVjdDxCYXNrZXQ+KGJhc2tldCksIHRlbXBpZDogYmFza2V0LmlkLCBpZDogYmFza2V0LmlkLCB0aXRsZTogYmFza2V0LmlkIH07XG5cbiAgICAvLyBlbnQtMjYxNiBvbmx5IHBsYWNlIHdlIG5lZWQgdG8gYWRkIGEgYmFza2V0IHRvIGN1cnJlbnQgYmFza2V0c1xuICAgIGNvbnN0IHRvUmV0dXJuID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXRPbkRCKGludEJhc2tldCwgY3JlYXRlZEJ5Qm9sdCwgY3JlYXRlZEJ5R3V0KTtcbiAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLnB1c2godG9SZXR1cm4pO1xuICAgIC8vIGNvbnNvbGUubG9nKCdEYW45Jyx0aGlzLmN1cnJlbnRCYXNrZXRzKVxuXG4gICAgdGhpcy5iYXNrZXRzLm5leHQodGhpcy5jdXJyZW50QmFza2V0cyk7XG4gICAgdGhpcy5iYXNrZXRDaGFuZ2VFbWl0dGVyLm5leHQodG9SZXR1cm4uaWQpO1xuICAgIHJldHVybiB0b1JldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQmFza2V0T25EQihcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0PEdVX1E+LFxuICAgIGNyZWF0ZWRCeUJvbHQ6IGJvb2xlYW4sXG4gICAgY3JlYXRlZEJ5R1VUOiBib29sZWFuXG4gICk6IFByb21pc2U8SW50ZXJuYWxCYXNrZXQ8R1VfUT4+IHtcbiAgICBjb25zdCBpbnZva2VkVXNlcjogc3RyaW5nIHwge30gPSB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8/LmlkXG4gICAgICA/IHsgaW52b2tlZFVzZXI6IHRoaXMudXNlclNlcnZpY2UuYm9ibz8uaWQgfVxuICAgICAgOiB7fTtcblxuICAgIGNvbnN0IG11dGF0aW9uOiBDcmVhdGVCYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHsgLi4uaW52b2tlZFVzZXIsIGNyZWF0ZWRCeUJvbHQsIGNyZWF0ZWRCeUdVVCB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuYmFza2V0Q3JlYXRvclxuICAgICAgICAudXBkYXRlT25lKG11dGF0aW9uKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChiYXNrZXQ6IFVzZXJCYXNrZXRSZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRpbmdOZXdCYXNrZXQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICBpbnRCYXNrZXQuaWQgPSBiYXNrZXQuaWQ7XG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChiYXNrZXQpO1xuICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIHRoZSBzdWJqZWN0IHRvIGxpc3RlbiBmb3IgZW1pdHRlZCB2YWx1ZXNcbiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGludEJhc2tldC5zdWJqZWN0LnN1YnNjcmliZSgodmFsdWU6IEJhc2tldERldGFpbHMpID0+IHtcbiAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGVtaXR0ZWQgdmFsdWUgaXMgbm90IG51bGwgYW5kIGhhcyBhIHN0YXR1cyBwcm9wZXJ0eVxuICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIHRoZSBpbnRCYXNrZXQgb2JqZWN0XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShpbnRCYXNrZXQpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0aW5nTmV3QmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHt9XG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVNZW51KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1lbnVTdGF0ZSA9PT0gTWVudVNsaWRlRW51bS5JTiB8fCB0aGlzLm1lbnVTdGF0ZSA9PT0gTWVudVNsaWRlRW51bS5GTEFUKSB7XG4gICAgICB0aGlzLm1lbnVTdGF0ZSA9IE1lbnVTbGlkZUVudW0uT1VUO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lbnVTdGF0ZSA9IE1lbnVTbGlkZUVudW0uSU47XG4gICAgfVxuICB9XG5cbiAgY2xvc2VNZW51KCk6IHZvaWQge1xuICAgIHRoaXMubWVudVN0YXRlID0gTWVudVNsaWRlRW51bS5PVVQ7XG4gIH1cblxuICBmaW5kTGF0ZXN0RmxpZ2h0SXRlbXMoYmFza2V0SXRlbXM6IEJhc2tldEl0ZW1bXSk6IEJhc2tldEl0ZW0gfCBudWxsIHtcbiAgICBsZXQgbGFzdEZsaWdodEl0ZW06IEJhc2tldEl0ZW0gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgc2Vjb25kTGFzdEZsaWdodEl0ZW06IEJhc2tldEl0ZW0gfCBudWxsID0gbnVsbDtcblxuICAgIChiYXNrZXRJdGVtcyB8fCBbXSkuZm9yRWFjaChiYXNrZXRJdGVtID0+IHtcbiAgICAgIGlmIChiYXNrZXRJdGVtLnNlcnZpY2UudHlwZSA9PT0gU2VydmljZVR5cGUuRmxpZ2h0KSB7XG4gICAgICAgIHNlY29uZExhc3RGbGlnaHRJdGVtID0gbGFzdEZsaWdodEl0ZW07XG4gICAgICAgIGxhc3RGbGlnaHRJdGVtID0gYmFza2V0SXRlbTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGlmIGR1YWwgc2luZ2xlIGFuZCByZXR1cm5UcmlwIHNldCBvdXRib3VuZCBkdWFsIHNpbmdsZSBmbGlnaHRcbiAgICBpZiAoXG4gICAgICBsYXN0RmxpZ2h0SXRlbSAmJlxuICAgICAgbGFzdEZsaWdodEl0ZW0uc2VhcmNoUXVlcnkucmV0dXJuVHJpcCAmJlxuICAgICAgbGFzdEZsaWdodEl0ZW0uZGV0YWlsLmpvdXJuZXlUeXBlID09PSBGbGlnaHRKb3VybmV5VHlwZS5TaW5nbGVcbiAgICApIHtcbiAgICAgIHJldHVybiBzZWNvbmRMYXN0RmxpZ2h0SXRlbSB8fCBsYXN0RmxpZ2h0SXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdEZsaWdodEl0ZW07XG4gIH1cblxuICBnZXRMYXRlc3RCYXNrZXRJdGVtRm9yVHlwZXMoYmFza2V0SXRlbXM6IEJhc2tldEl0ZW1bXSk6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT4ge1xuICAgIGNvbnN0IGxhdGVzdEZsaWdodEl0ZW0gPSB0aGlzLmZpbmRMYXRlc3RGbGlnaHRJdGVtcyhiYXNrZXRJdGVtcyk7XG4gICAgcmV0dXJuIChiYXNrZXRJdGVtcyB8fCBbXSkucmVkdWNlKFxuICAgICAgKGxhdGVzdEl0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+LCBiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICAgIGlmIChiYXNrZXRJdGVtLnNlcnZpY2UudHlwZSAhPT0gU2VydmljZVR5cGUuRmxpZ2h0KSB7XG4gICAgICAgICAgbGF0ZXN0SXRlbXNbYmFza2V0SXRlbS5zZXJ2aWNlLnR5cGVdID0gYmFza2V0SXRlbTtcbiAgICAgICAgfSBlbHNlIGlmIChsYXRlc3RGbGlnaHRJdGVtKSB7XG4gICAgICAgICAgbGF0ZXN0SXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XSA9IGxhdGVzdEZsaWdodEl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhdGVzdEl0ZW1zO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0RldGFpbHMoaXRlbTogQWRkSXRlbVRvQmFza2V0LlZhcmlhYmxlcyk6IEFkZEl0ZW1Ub0Jhc2tldC5WYXJpYWJsZXMge1xuICAgIGNvbnN0IHNlcnZpY2VUb0NoZWNrOiBTZXJ2aWNlID0gdGhpcy51c2VyU2VydmljZS5maW5kU2VydmljZShpdGVtLnNlcnZpY2UpO1xuICAgIGlmICghc2VydmljZVRvQ2hlY2spIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBmaW5kIHNlcnZpY2UgZm9yIGJhc2tldCBpdGVtIDogJyArIGl0ZW0uc2VydmljZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayB0aGUgaXRlbS5kZXRhaWwgb2JqZWN0IGFnYWluc3QgdGhlIHJlbGV2YW50IHNlcnZpY2UgZGV0YWlsU2NoZW1hIHVzaW5nIEFqdlxuICAgIGNvbnN0IGFqdiA9IG5ldyBBanYoKTtcbiAgICAvLyBhZGRGb3JtYXRzKGFqdik7Ly8gPC0tLS0tLS0gVEhJUyBJUyBPVVIgUFJPQkxFTVxuXG4gICAgLy8gQ3VzdG9tIEphdmFzY3JpcHQgSVNPIERhdGUgVGltZSBmb3JtYXRcbiAgICBhanYuYWRkRm9ybWF0KCdqcy1kYXRlLXRpbWUnLCAoZGF0ZVRpbWVTdHJpbmc6IGFueSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBkYXRlVGltZVN0cmluZyA9PT0gJ29iamVjdCcgJiYgZGF0ZVRpbWVTdHJpbmcuaGFzT3duUHJvcGVydHkoJ3RvSVNPU3RyaW5nJykpIHtcbiAgICAgICAgZGF0ZVRpbWVTdHJpbmcgPSBkYXRlVGltZVN0cmluZy50b0lTT1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTmFOKERhdGUucGFyc2UoZGF0ZVRpbWVTdHJpbmcpKTsgLy8gYW55IHRlc3QgdGhhdCByZXR1cm5zIHRydWUvZmFsc2VcbiAgICB9KTtcblxuICAgIGFqdi5hZGRGb3JtYXQoJ3JhaWxTZWF0aW5nJywgKCkgPT4ge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBhanYuYWRkRm9ybWF0KCdwYXNzcG9ydCcsICgpID0+IHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgYWp2LmFkZEZvcm1hdCgnc3BlY2lhbFJlcXVlc3QnLCAoKSA9PiB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGFqdi5hZGRGb3JtYXQoJ2RhdGUtdGltZScsICgpID0+IHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdmFsaWRhdGVEZXRhaWxTY2hlbWEgPSBhanYuY29tcGlsZShzZXJ2aWNlVG9DaGVjay5kZXRhaWxTY2hlbWEpO1xuICAgIGNvbnN0IHZhbGlkYXRlU2VhcmNoU2NoZW1hID0gYWp2LmNvbXBpbGUoc2VydmljZVRvQ2hlY2suc2VhcmNoUXVlcnlTY2hlbWEpO1xuXG4gICAgLy8gaWYgdGhlcmUgYXJlIGFueSBtb21lbnQgZGF0ZSBvYmplY3RzIGluIHRoZSBzZWFyY2hRdWVyeSBvYmplY3QgY29udmVydCB0aGVzZSB0byBkYXRlLXRpbWUgc3RyaW5nc1xuICAgIGl0ZW0uc2VhcmNoUXVlcnkgPSB0aGlzLmhlbHBlcnMuc2FuaXRpemVNb21lbnREYXRlcyhpdGVtLnNlYXJjaFF1ZXJ5KTtcbiAgICBpdGVtLmRldGFpbCA9IHRoaXMuaGVscGVycy5yZW1vdmVOdWxscyhpdGVtLmRldGFpbCk7XG5cbiAgICBpZiAoIXZhbGlkYXRlU2VhcmNoU2NoZW1hKGl0ZW0uc2VhcmNoUXVlcnkpKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGBJdGVtIHNlYXJjaFF1ZXJ5IGlzIG5vdCB2YWxpZCBmb3IgJHtzZXJ2aWNlVG9DaGVjay5uYW1lfSBzZWFyY2ggc2NoZW1hLmA7XG4gICAgICBjb25zb2xlLndhcm4oJ3NlYXJjaFNjaGVtYScsIHNlcnZpY2VUb0NoZWNrLnNlYXJjaFF1ZXJ5U2NoZW1hKTtcbiAgICAgIGNvbnNvbGUud2FybignaXRlbS5zZWFyY2hRdWVyeScsIGl0ZW0uc2VhcmNoUXVlcnkpO1xuICAgICAgY29uc29sZS53YXJuKCdTZWFyY2ggUXVlcnkgVmFsaWRhdGlvbiBlcnJvcnMnLCB2YWxpZGF0ZVNlYXJjaFNjaGVtYS5lcnJvcnMpO1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk1vZGFsRXJyb3JDb21wb25lbnQsIHsgYmFja2Ryb3A6ICdzdGF0aWMnIH0sIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXZhbGlkYXRlRGV0YWlsU2NoZW1hKGl0ZW0uZGV0YWlsKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBgSXRlbSBkZXRhaWwgaXMgbm90IHZhbGlkIGZvciAke3NlcnZpY2VUb0NoZWNrLm5hbWV9IGRldGFpbCBzY2hlbWEuYDtcbiAgICAgIGNvbnNvbGUud2FybignZGV0YWlsU2NoZW1hJywgc2VydmljZVRvQ2hlY2suZGV0YWlsU2NoZW1hKTtcbiAgICAgIGNvbnNvbGUud2FybignaXRlbS5kZXRhaWwnLCBpdGVtLmRldGFpbCk7XG4gICAgICBjb25zb2xlLndhcm4oJ0RldGFpbCBlcnJvcnMnLCB2YWxpZGF0ZURldGFpbFNjaGVtYS5lcnJvcnMpO1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk1vZGFsRXJyb3JDb21wb25lbnQsIHsgYmFja2Ryb3A6ICdzdGF0aWMnIH0sIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGl0ZW0ubG93ZXN0UHJpY2UpIGl0ZW0ubG93ZXN0UHJpY2UgPSAraXRlbS5sb3dlc3RQcmljZS50b0ZpeGVkKDIpO1xuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgZ2V0TnVtYmVySXRlbXNGb3JCYXNrZXQoYmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPiA9IG51bGwpOiBudW1iZXIge1xuICAgIGJhc2tldCA9IGJhc2tldCB8fCB0aGlzLmZpbmRCYXNrZXQodGhpcy5jdXJyZW50QmFza2V0SUQpO1xuICAgIHJldHVybiBiYXNrZXQ/LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMubGVuZ3RoIHx8IDA7XG4gIH1cblxuICByZW1vdmVCYXNrZXQoYmFza2V0aWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIGlmIChiYXNrZXRpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQmFza2V0VXBkYXRlci51cGRhdGVPbmUoeyBpZDogYmFza2V0aWQgfSkucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKChkYXRhOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICAgIHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk/LmRlc3RydWN0b3IoKTtcbiAgICAgICAgICB0aGlzLmZpbHRlclJlbW92ZUJhc2tldEJ5SWQoYmFza2V0aWQpO1xuICAgICAgICAgIGlmIChiYXNrZXRpZCA9PT0gdGhpcy5zZWxlY3RlZEJhc2tldElkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQmFza2V0SWQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gdGhpcy5jdXJyZW50QmFza2V0cy5maWx0ZXIoYmFza2V0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBiYXNrZXQuc3ViamVjdC52YWx1ZS5zdGF0dXMgPT09IEJhc2tldFN0YXR1cy5PcGVuO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdEYW4xMCcsdGhpcy5jdXJyZW50QmFza2V0cylcblxuICAgICAgICAgIHRoaXMuYmFza2V0cy5uZXh0KHRoaXMuY3VycmVudEJhc2tldHMpO1xuXG4gICAgICAgICAgaWYgKGJhc2tldGlkID09PSB0aGlzLmN1cnJlbnRCYXNrZXRJRCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSB0aGlzLmN1cnJlbnRCYXNrZXRzWzBdPy5pZCB8fCBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRlbGV0aW5nQmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHJldHVybiBvZihkYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29udGludWVTZWFyY2hBbmRCb29rKFxuICAgIGJhc2tldEl0ZW1zOiBhbnlbXSxcbiAgICBpdGluaWFyeVVybDogc3RyaW5nW10sXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2VcbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhdGVzdEJhc2tldEl0ZW1zID0gdGhpcy5nZXRMYXRlc3RCYXNrZXRJdGVtRm9yVHlwZXMoYmFza2V0SXRlbXMpO1xuICAgIGNvbnN0IG5leHRTZWFyY2g6IFNlYXJjaE9iamVjdCA9XG4gICAgICBzZWFyY2hTZXJ2aWNlLmdldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChsYXRlc3RCYXNrZXRJdGVtcyk7XG4gICAgY29uc3QgcGF0aCA9IHdpbmRvdz8ubG9jYXRpb24/Lmhhc2g7XG4gICAgY29uc3QgaGFzaFBhdGggPSBwYXRoPy5zcGxpdCgnIycpPy5bMV07XG4gICAgaWYgKFxuICAgICAgbmV4dFNlYXJjaCAmJlxuICAgICAgIShoYXNoUGF0aCA9PT0gbmV4dFNlYXJjaC5yZXN1bHRVcmwgJiYgbmV4dFNlYXJjaC50eXBlID09PSBTZXJ2aWNlVHlwZS5Ib3RlbClcbiAgICApIHtcbiAgICAgIGlmIChzZWFyY2hTZXJ2aWNlLmlzQ2xvbmluZy52YWx1ZSkge1xuICAgICAgICByZXR1cm4gW25leHRTZWFyY2gucmVzdWx0VXJsXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIChzZWFyY2hTZXJ2aWNlLnNlYXJjaGVzIGFzIGFueSlbbmV4dFNlYXJjaC50eXBlXS51cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcbiAgICAgICAgICBsYXRlc3RCYXNrZXRJdGVtc1xuICAgICAgICApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbmV4dFNlYXJjaC50eXBlID09PSBTZXJ2aWNlVHlwZS5Ib3RlbCAmJlxuICAgICAgICAgIHNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdPy5jaGVhcGVzdFByaWNlPy5hbW91bnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy9JZiBob3RlbHMgYXJlIG5leHQgYW5kIHRoZSBob3RlbCBzZWFyY2ggaGFzIGFscmVhZHkgYmVlbiBkb25lIGluIHRoZSBiYWNrZ3JvdW5kIGdvIHN0cmFpZ2h0IHRvIHRoZSByZXN1bHRzXG4gICAgICAgICAgcmV0dXJuIFtuZXh0U2VhcmNoLnJlc3VsdFVybF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFtuZXh0U2VhcmNoLnNlYXJjaFVybF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGl0aW5pYXJ5VXJsO1xuICAgIH1cbiAgfVxuXG4gIGFkZFRyYXZlbGxlcnMoXG4gICAgYmFza2V0aWQ6IHN0cmluZyxcbiAgICBiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLFxuICAgIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLFxuICAgIGluZGV4OiBudW1iZXIgPSAwXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgaWYgKGluZGV4IDwgdHJhdmVsbGVycy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHRyYXZlbGxlciA9IHRyYXZlbGxlcnNbaW5kZXhdO1xuICAgICAgY29uc3QgcGFzc2VuZ2VyVHlwZTogUGFzc2VuZ2VyVHlwZSA9IHRyYXZlbGxlci5pc0NoaWxkXG4gICAgICAgID8gUGFzc2VuZ2VyVHlwZS5DaGlsZFxuICAgICAgICA6IHRyYXZlbGxlci5pc0luZmFudFxuICAgICAgICA/IFBhc3NlbmdlclR5cGUuSW5mYW50XG4gICAgICAgIDogUGFzc2VuZ2VyVHlwZS5BZHVsdDtcblxuICAgICAgaWYgKHRyYXZlbGxlci5ndWVzdCkge1xuICAgICAgICB0aGlzLmFkZEd1ZXN0VG9CYXNrZXRJdGVtXG4gICAgICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgICAgICAgZ3Vlc3RzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogdHJhdmVsbGVyLmlkLFxuICAgICAgICAgICAgICAgIHBhc3NlbmdlclR5cGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZFRyYXZlbGxlcnMoYmFza2V0LmlkLCBiYXNrZXRJdGVtLCB0cmF2ZWxsZXJzLCBpbmRleCArIDEpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hZGRVc2VyVG9CYXNrZXRJdGVtXG4gICAgICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgICAgICAgdXNlcnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiB0cmF2ZWxsZXIuaWQsXG4gICAgICAgICAgICAgICAgcGFzc2VuZ2VyVHlwZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgd2l0aFN1cHBsZW1lbnRhbDogZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRUcmF2ZWxsZXJzKGJhc2tldC5pZCwgYmFza2V0SXRlbSwgdHJhdmVsbGVycywgaW5kZXggKyAxKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYXNrZXRGZXRjaGVyXG4gICAgICAgIC5mZXRjaE9uZSh7IGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSwgaWQ6IGJhc2tldC5pZCB9KVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChiYXNrZXQxOiBHZXRVc2VyQmFza2V0UmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBiYXNrZXQuc3ViamVjdC5uZXh0KHsgLi4uYmFza2V0LnN1YmplY3QudmFsdWUsIC4uLmJhc2tldDEgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBfID0+IHt9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIGJhc2tldC5uZXh0KGJhc2tldC5zdWJqZWN0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2V0TGVhZFBhc3NlbmdlcihcbiAgICBiYXNrZXRpZDogc3RyaW5nLFxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXG4gICAgdHJhdmVsbGVyczogVHJhdmVsbGVyLFxuICAgIGluZGV4OiBudW1iZXIgPSAwLFxuICAgIGxlYWRQYXNzZW5nZXJUeXBlOiBMZWFkUGFzc2VuZ2VyVHlwZSA9IExlYWRQYXNzZW5nZXJUeXBlLlVzZXJcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgYmFza2V0ID0gdGhpcy5maW5kQmFza2V0KGJhc2tldGlkKTtcbiAgICBpZiAoaW5kZXggPCAxKSB7XG4gICAgICB0aGlzLlNldEJhc2tldEl0ZW1MZWFkUGFzc2VuZ2VyLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGJhc2tldEl0ZW0uaWQsXG4gICAgICAgIHVzZXJPckd1ZXN0OiB0cmF2ZWxsZXJzLmlkLFxuICAgICAgICB3aXRoU3VwcGxlbWVudGFsOiBmYWxzZSxcbiAgICAgICAgbGVhZFBhc3NlbmdlclR5cGU6IGxlYWRQYXNzZW5nZXJUeXBlXG4gICAgICB9KS5zdWJzY3JpYmUoXG4gICAgICAgICgpID0+IHt9LFxuICAgICAgICAoKSA9PiB7fSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0TGVhZFBhc3NlbmdlcihiYXNrZXQuaWQsIGJhc2tldEl0ZW0sIHRyYXZlbGxlcnMsIGluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmFza2V0RmV0Y2hlclxuICAgICAgICAuZmV0Y2hPbmUoeyBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksIGlkOiBiYXNrZXQuaWQgfSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoYmFza2V0MTogR2V0VXNlckJhc2tldFJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgYmFza2V0LnN1YmplY3QubmV4dCh7IC4uLmJhc2tldC5zdWJqZWN0LnZhbHVlLCAuLi5iYXNrZXQxIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXyA9PiB7fSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBiYXNrZXQubmV4dChiYXNrZXQuc3ViamVjdC52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUJhc2tldChiYXNrZXRpZDogc3RyaW5nLCBvYnM6IE9ic2VydmFibGU8QmFza2V0RGV0YWlscz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnVwZGF0aW5nQmFza2V0ID0gdHJ1ZTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgb2JzLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxuICAgICAgICAoYmFza2V0OiBCYXNrZXREZXRhaWxzKSA9PiB7XG4gICAgICAgICAgLy8gRU5ULTc4MjcgYWRkZWQgdGhpcyB0aW1lb3V0IGFzIHdlIHdlcmUgdHJ5aW5nIHRvIGdyYWIgdGhlIGN1cnJlbnQgYmFza2V0cyBzb21ldGltZXMgYW5kIHdlIHdlcmUgc3RpbGwgd2FpdGluZyBmb3IgYW4gdXBkYXRlLCB0YmggaSB3b3VsZCBoYXZlIHJhdGhlciBmb3VuZCB3aGljaCBjYWxsIHdhcyBjYXVzaW5nIHRoZSBkZWxheVxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGluZ0Jhc2tldCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jdXJyZW50QmFza2V0cywgdGhpcy5jdXJyZW50QmFza2V0SUQsIGJhc2tldGlkKTtcbiAgICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgICAgICAgICAvLyBwYXNzaW5nIGFnZW50IGZvciBtaSBjaGVja1xuICAgICAgICAgICAgaW50QmFza2V0Py5uZXh0KGJhc2tldCwgdGhpcy5pc1VzZXJBZ2VudCgpKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRpbmdCYXNrZXQgPSBmYWxzZTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0aWQpO1xuICAgICAgICAgIGludEJhc2tldC5uZXh0KGludEJhc2tldC5zdWJqZWN0LnZhbHVlKTtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGluZ0Jhc2tldCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmV2YWxpZGF0ZShiYXNrZXRpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVCYXNrZXQoXG4gICAgICBiYXNrZXRpZCxcbiAgICAgIHRoaXMucmV2YWxpZGF0ZUJhc2tldFVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICBpZDogYmFza2V0aWQsXG4gICAgICAgIHdpdGhTdXBwbGVtZW50YWw6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmJhc2tldENoYW5nZUVtaXR0ZXIubmV4dChiYXNrZXRpZCk7XG4gIH1cblxuICAvLyB2YWxpZGF0ZUZyZWVWYWxlTWkobWlJdGVtOiBNYW5hZ2VtZW50SW5mbywgZnJlZVZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgLy8gICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAvLyAgICAgdGhpcy52YWxpZGF0ZU1pRnJlZVZhbHVlLnRlc3QoeyBtaTogbWlJdGVtLmlkLCBmcmVlVmFsdWUgfSkuc3Vic2NyaWJlKHJlc29sdmUsIHJlamVjdCk7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICBhY2NlcHROZXdQcmljZShiYXNrZXRpZDogc3RyaW5nLCBpdGVtOiBCYXNrZXRJdGVtKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVCYXNrZXQoXG4gICAgICBiYXNrZXRpZCxcbiAgICAgIHRoaXMuYWNjZXB0TmV3UHJpY2VVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGl0ZW0uaWRcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHZhbGlkYXRlTWlCYXNrZXRJdGVtKGJhc2tldEl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0ge1xuICAgICAgICBiYXNrZXRJdGVtSWRcbiAgICAgIH07XG4gICAgICB0aGlzLnZhbGlkYXRlQmFza2V0SXRlbU1pRmV0Y2hlci5mZXRjaE9uZShxdWVyeSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZU1pQmFza2V0KGJhc2tldElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBxdWVyeSA9IHsgYmFza2V0SWQgfTtcbiAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy52YWxpZGF0ZUJhc2tldE1pRmV0Y2hlci5mZXRjaE9uZShxdWVyeSkpLnRoZW4oZGF0YSA9PiB7XG4gICAgICB0aGlzLm1pVmlld2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMubWlzc2luZ01JcyA9IGRhdGE7XG4gICAgfSk7XG4gIH1cblxuICBnZXRNaUF1dG9TdWdlc3Rpb25zKFxuICAgIG1pSWQ6IHN0cmluZyxcbiAgICB0ZXJtOiBzdHJpbmcsXG4gICAgaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXG4gICAgc2VydmljZUlkPzogc3RyaW5nLFxuICAgIG1pVmFsdWVHcm91cElkPzogc3RyaW5nLFxuICAgIHRyaWdnZXJNSVZhbHVlSWQ/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxNYW5hZ2VtZW50SW5mb1ZhbHVlW10+IHtcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XG5cbiAgICBjb25zdCBnZXRNaUF1dG9CeVZhbHVlOiBPYnNlcnZhYmxlPE1hbmFnZW1lbnRJbmZvVmFsdWVbXT4gPVxuICAgICAgdGhpcy5zZWFyY2hNSUF1dG9TdWdnZXN0VmFsdWVzRmV0Y2hlci5mZXRjaE9uZSh7XG4gICAgICAgIG1hbmFnZW1lbnRJbmZvSWQ6IG1pSWQsXG4gICAgICAgIHF1ZXJ5OiB0ZXJtLFxuICAgICAgICBtYW5hZ2VtZW50SW5mb1ZhbHVlR3JvdXBJZDogbWlWYWx1ZUdyb3VwSWQsXG4gICAgICAgIHRyaWdnZXJNSVZhbHVlSWRcbiAgICAgIH0pO1xuICAgIGNvbnN0IGdldE1pQXV0b0J5TGFiZWw6IE9ic2VydmFibGU8TWFuYWdlbWVudEluZm9WYWx1ZVtdPiA9XG4gICAgICB0aGlzLnNlYXJjaE1JQXV0b1N1Z2dlc3RWYWx1ZXNGZXRjaGVyLmZldGNoT25lKHtcbiAgICAgICAgbWFuYWdlbWVudEluZm9JZDogbWlJZCxcbiAgICAgICAgcXVlcnk6IHRlcm0sXG4gICAgICAgIG1hbmFnZW1lbnRJbmZvVmFsdWVHcm91cElkOiBtaVZhbHVlR3JvdXBJZCxcbiAgICAgICAgdHJpZ2dlck1JVmFsdWVJZFxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gZm9ya0pvaW4oW2dldE1pQXV0b0J5VmFsdWUsIGdldE1pQXV0b0J5TGFiZWxdKS5waXBlKFxuICAgICAgbWFwKChbbWlCeVZhbHVlLCBtaUJ5TGFiZWxdKSA9PiB7XG4gICAgICAgIGxldCBtaUJ5VmFsdWVMYWJlbCA9IFsuLi5taUJ5VmFsdWUsIC4uLm1pQnlMYWJlbF07XG4gICAgICAgIG1pQnlWYWx1ZUxhYmVsID0gbWlCeVZhbHVlTGFiZWwuZmlsdGVyKFxuICAgICAgICAgIChtaUl0ZW0sIGluZGV4KSA9PiBtaUJ5VmFsdWVMYWJlbC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09IG1pSXRlbS5pZCkgPT09IGluZGV4XG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKG1pQnlWYWx1ZUxhYmVsKTtcblxuICAgICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xuICAgICAgICByZXR1cm4gbWlCeVZhbHVlTGFiZWw7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBmb3JtYXRTYXZlZE1pKG1pOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSk6IFNldE1pVmFsdWVJbnB1dFtdIHtcbiAgICByZXR1cm4gbWkucmVkdWNlKChhY2MsIGl0ZW06IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZCkgPT4ge1xuICAgICAgaWYgKGl0ZW0uc2VsZWN0ZWRWYWx1ZSAmJiBpdGVtLnZhbHVlRWRpdGFibGUgJiYgKGl0ZW0ucmVxdWlyZWQgfHwgaXRlbS5jb25kaXRpb25hbCkpIHtcbiAgICAgICAgLy8gaWYgKGl0ZW0uc2VsZWN0ZWRWYWx1ZS5mcmVlVmFsdWUpIHtcbiAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgIG1pSWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgbWlWYWx1ZUlkOlxuICAgICAgICAgICAgaXRlbS51aVByZXNlbnRhdGlvbiAhPT0gJ0xPT0tVUCcgPyBpdGVtLnNlbGVjdGVkVmFsdWUubWFuYWdlbWVudEluZm9WYWx1ZT8uaWQgOiAnJyxcbiAgICAgICAgICBtaUZyZWVWYWx1ZTpcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWRWYWx1ZS5mcmVlVmFsdWUgfHwgaXRlbS5zZWxlY3RlZFZhbHVlLm1hbmFnZW1lbnRJbmZvVmFsdWU/LnZhbHVlLFxuICAgICAgICAgIG51bGxpZnlTZWxlY3RlZFZhbHVlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSBhcyBTZXRNaVZhbHVlSW5wdXRbXSk7XG4gIH1cblxuICBmaWx0ZXJQcmVTZWxlY3RlZE1JKFxuICAgIGl0ZW1MaXN0OiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSxcbiAgICB2YWx1ZTogQmFza2V0SW5mb01pRGV0YWlsc0ltcGxcbiAgKTogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10ge1xuICAgIHJldHVybiBpdGVtTGlzdC5maWx0ZXIoKGxpc3RJdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWQpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nTUkgPSB2YWx1ZS5iYXNrZXRJdGVtLm1hbmFnZW1lbnRJbmZvLmZpbmQoXG4gICAgICAgIChtaTogQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvKSA9PiBtaS5tYW5hZ2VtZW50SW5mby5pZCA9PT0gbGlzdEl0ZW0uaWRcbiAgICAgICk7XG4gICAgICBpZiAoIW1hdGNoaW5nTUkuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtYXRjaGluZ01JLnNlbGVjdGVkVmFsdWU/LmZyZWVWYWx1ZSAhPT0gbGlzdEl0ZW0uc2VsZWN0ZWRWYWx1ZT8uZnJlZVZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2F2ZU1pRGF0YShcbiAgICBiYXNrZXRJZDogc3RyaW5nLFxuICAgIHJlc3VsdHM6IHsgYmFza2V0SW5mb01pRGV0YWlsczogQmFza2V0SW5mb01pRGV0YWlsc0ltcGxbXTsgY29weUluZm86IENvcHlJbmZvSW5wdXRbXSB9XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJhc2tldEl0ZW1NSSA9IHJlc3VsdHMuYmFza2V0SW5mb01pRGV0YWlscztcbiAgICBjb25zdCBxdWVyeTogU2V0TWlWYWx1ZXNNdXRhdGlvblZhcmlhYmxlcyA9IHtcbiAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiBiYXNrZXRJdGVtTUlbMF0uYmFza2V0SXRlbS5jb252ZXJ0ZWRDdXJyZW5jeUNvZGUsXG4gICAgICBiYXNrZXRJdGVtTUlWYWx1ZXM6IFtdLFxuICAgICAgY29weUluZm86IHJlc3VsdHMuY29weUluZm9cbiAgICB9O1xuICAgIGNvbnN0IHBlckl0ZW1NaTogU2V0TWlWYWx1ZUlucHV0W10gPSBbXTtcbiAgICBjb25zdCBwZXJVc2VyTWk6IFNldE1pVmFsdWVJbnB1dFtdID0gW107XG4gICAgY29uc3QgcGVyR3Vlc3RNaTogU2V0TWlWYWx1ZUlucHV0W10gPSBbXTtcblxuICAgIGJhc2tldEl0ZW1NSS5mb3JFYWNoKCh2YWx1ZTogQmFza2V0SW5mb01pRGV0YWlsc0ltcGwpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkTGlzdEl0ZW0gPSB0aGlzLmZpbHRlclByZVNlbGVjdGVkTUkoXG4gICAgICAgIHZhbHVlLm1pUGVySXRlbSBhcyBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSxcbiAgICAgICAgdmFsdWVcbiAgICAgICk7XG4gICAgICBwZXJJdGVtTWkucHVzaCguLi50aGlzLmZvcm1hdFNhdmVkTWkoZmlsdGVyZWRMaXN0SXRlbSkpO1xuXG4gICAgICBPYmplY3QudmFsdWVzKHZhbHVlLm1pUGVyVXNlcikuZm9yRWFjaCh1c2VyTUlMaXN0ID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRMaXN0ID0gdGhpcy5maWx0ZXJQcmVTZWxlY3RlZE1JKFxuICAgICAgICAgIHVzZXJNSUxpc3QubWFuYWdlbWVudEluZm8gYXMgTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10sXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgcGVyVXNlck1pLnB1c2goLi4udGhpcy5mb3JtYXRTYXZlZE1pKGZpbHRlcmVkTGlzdCkpO1xuICAgICAgfSk7XG5cbiAgICAgIE9iamVjdC52YWx1ZXModmFsdWUubWlQZXJHdWVzdCkuZm9yRWFjaChcbiAgICAgICAgKHVzZXJNSUxpc3Q6IHsgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZExpc3QgPSB0aGlzLmZpbHRlclByZVNlbGVjdGVkTUkoXG4gICAgICAgICAgICB1c2VyTUlMaXN0Lm1hbmFnZW1lbnRJbmZvIGFzIE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIHBlckd1ZXN0TWkucHVzaCguLi50aGlzLmZvcm1hdFNhdmVkTWkoZmlsdGVyZWRMaXN0KSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gICAgcXVlcnkuYmFza2V0SXRlbU1JVmFsdWVzID0gWy4uLnBlckl0ZW1NaSwgLi4ucGVyVXNlck1pLCAuLi5wZXJHdWVzdE1pXTtcbiAgICBpZiAocXVlcnkuYmFza2V0SXRlbU1JVmFsdWVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZXRCYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlKGJhc2tldElkLCBxdWVyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRJZCk7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlTWlCYXNrZXQodGhpcy5jdXJyZW50QmFza2V0SUQpO1xuICAgICAgaW50QmFza2V0Lm5leHQoaW50QmFza2V0LnN1YmplY3QudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHNldEJhc2tldEl0ZW1NdWx0aXBsZU1JVmFsdWUoXG4gICAgYmFza2V0SWQ6IHN0cmluZyxcbiAgICBiYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlOiBTZXRNaVZhbHVlc011dGF0aW9uVmFyaWFibGVzXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KHRydWUpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0SWQpO1xuICAgICAgdGhpcy5zZXRNSVZhbHVlc1VwZGF0ZXJcbiAgICAgICAgLnVwZGF0ZU9uZShiYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiBhc3luYyAoYmFza2V0OiBCYXNrZXQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVNaUJhc2tldChiYXNrZXQuaWQpO1xuICAgICAgICAgICAgaW50QmFza2V0Lm5leHQoYmFza2V0KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLm1pVXBkYXRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0TWlWYWx1ZXMoXG4gICAgaXNSZWFzc2lnbjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGJhc2tldEl0ZW1NSVZhbHVlczogU2V0TWlWYWx1ZUlucHV0IHwgU2V0TWlWYWx1ZUlucHV0W11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcXVlcnkgPSB7XG4gICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICBiYXNrZXRJdGVtTUlWYWx1ZXMsXG4gICAgICB3aXRoU3VwcGxlbWVudGFsOiBpc1JlYXNzaWduXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KHRoaXMuY3VycmVudEJhc2tldElEKTtcbiAgICAgIHRoaXMuc2V0TUlWYWx1ZXNVcGRhdGVyXG4gICAgICAgIC51cGRhdGVPbmUocXVlcnkpXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGJhc2tldDogQmFza2V0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1pVXBkYXRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChiYXNrZXQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5taVVwZGF0aW5nLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRCYXNrZXRJdGVtUGF5bWVudE9wdGlvbihcbiAgICBiYXNrZXQ6IEJhc2tldERldGFpbHMsXG4gICAgYmFza2V0SXRlbTogQmFza2V0SXRlbSxcbiAgICBwYXltZW50TWV0aG9kOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlQmFza2V0KFxuICAgICAgYmFza2V0LmlkLFxuICAgICAgdGhpcy5zZXRQYXltZW50TWV0aG9kVXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW0uaWQsXG4gICAgICAgIHBheW1lbnRNZXRob2RcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBzZXRCYXNrZXRJdGVtUGF5bWVudE9wdGlvbk5vVXBkYXRlKFxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXG4gICAgcGF5bWVudE1ldGhvZDogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8QmFza2V0RGV0YWlscz4ge1xuICAgIHJldHVybiB0aGlzLnNldFBheW1lbnRNZXRob2RVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgcGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICB9XG4gIGJvb2tCYXNrZXQoXG4gICAgYmFza2V0aWQ6IHN0cmluZyxcbiAgICBzdXBwbGVtZW50YXJ5SW5mbzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvW10sXG4gICAgYWRkaXRpb25hbEVtYWlsOiBzdHJpbmdbXSxcbiAgICBhcHByb3Zlck5vdGVzPzogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNBcHByb3ZlZEJhc2tldCA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmJvb2tCYXNrZXRVcGRhdGVyXG4gICAgICAudXBkYXRlT25lKHtcbiAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICBpZDogYmFza2V0aWQsXG4gICAgICAgIHN1cHBsZW1lbnRhcnlJbmZvLFxuICAgICAgICBhZGRpdGlvbmFsRW1haWwsXG4gICAgICAgIGFwcHJvdmVyTm90ZXNcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihcbiAgICAgICAgKGJhc2tldDogQmFza2V0RGV0YWlscykgPT4ge1xuICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgYmFza2V0LmJhc2tldEl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5ib29raW5nRGV0YWlsPy5zdXBwbGllclJlc3A/LmJvb2s/LmRldGFpbHM/LnNlYXRTZWxlY3Rpb25Cb29rZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBXZSBoYXZlIGEgc2VhdCBzZWxlY3Rpb24gZXJyb3IgLSB0aHJvdyB1cCBhIHdhcm5pbmcgbW9kYWwgKysrYCk7XG4gICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5SYWlsU2VhdEF1dG9XYXJuaW5nTW9kYWxDb21wb25lbnQpO1xuICAgICAgICAgICAgICB0aGlzLmNsZWFyUmFpbFNlYXRzLm5leHQoaXRlbS5pZCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgICAgICAgaW50QmFza2V0LnN1YmplY3QudmFsdWUuc3RhdHVzID0gYmFza2V0LnN0YXR1cztcbiAgICAgICAgICBjb25zdCBpbnRCYXNrZXRJdGVtcyA9IGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmJhc2tldEl0ZW1zO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFza2V0LmJhc2tldEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUJhc2tldEl0ZW1zID0gYmFza2V0LmJhc2tldEl0ZW1zW2ldO1xuICAgICAgICAgICAgY29uc3QgaW50QmFza2V0SXRlbSA9IGludEJhc2tldEl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSByZXNwb25zZUJhc2tldEl0ZW1zLmlkKTtcblxuICAgICAgICAgICAgaWYgKGludEJhc2tldEl0ZW0pIHtcbiAgICAgICAgICAgICAgaW50QmFza2V0SXRlbS5zdGF0dXMgPSBiYXNrZXQuYmFza2V0SXRlbXNbaV0uc3RhdHVzO1xuICAgICAgICAgICAgICBpbnRCYXNrZXRJdGVtLmJvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlID1cbiAgICAgICAgICAgICAgICBiYXNrZXQuYmFza2V0SXRlbXNbaV0uYm9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2U7XG4gICAgICAgICAgICAgIGludEJhc2tldEl0ZW0ucG5yTG9jYXRvciA9IGJhc2tldC5iYXNrZXRJdGVtc1tpXS5wbnJMb2NhdG9yO1xuICAgICAgICAgICAgICBpbnRCYXNrZXRJdGVtLmJvb2tpbmdEZXRhaWwgPVxuICAgICAgICAgICAgICAgIGJhc2tldC5iYXNrZXRJdGVtc1tpXT8uYm9va2luZ0RldGFpbCB8fCBpbnRCYXNrZXRJdGVtLmJvb2tpbmdEZXRhaWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIGArKysgVW5hYmxlIHRvIGZpbmQgYmFza2V0IGl0ZW0gd2l0aCBpZDogJHtyZXNwb25zZUJhc2tldEl0ZW1zLmlkfSArKytgXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSAnJztcbiAgICAgICAgICBpbnRCYXNrZXQubmV4dChpbnRCYXNrZXQuc3ViamVjdC52YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgY29uc3QgYmFza2V0VXBkYXRlID0gYXdhaXQgdGhpcy5nZXRCYXNrZXQoe1xuICAgICAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICAgICAgaWQ6IGJhc2tldGlkLFxuICAgICAgICAgICAgd2l0aFN1cHBsZW1lbnRhbDogdHJ1ZVxuICAgICAgICAgIH0pLnRvUHJvbWlzZSgpO1xuICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgICAgICAgaW50QmFza2V0Lm5leHQoYmFza2V0VXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIG1vdmVCYXNrZXRJdGVtKG9yaWdpbmFsQmFza2V0SWQ6IHN0cmluZywgYmFza2V0SXRlbTogQmFza2V0SXRlbSwgYmFza2V0SWRUb01vdmVUbzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tb3ZlSXRlbVRvQURpZmZlcmVudEJhc2tldFxuICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgYmFza2V0SXRlbTogYmFza2V0SXRlbS5pZCxcbiAgICAgICAgbmV3QmFza2V0OiBiYXNrZXRJZFRvTW92ZVRvXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZEJhc2tldChvcmlnaW5hbEJhc2tldElkKTtcbiAgICAgICAgdGhpcy5sb2FkQmFza2V0KGJhc2tldElkVG9Nb3ZlVG8pO1xuICAgICAgfSk7XG4gIH1cblxuICB1cGRhdGVCYXNrZXROb3RlcyhiYXNrZXRJZDogc3RyaW5nLCBub3Rlczogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVCYXNrZXQoXG4gICAgICBiYXNrZXRJZCxcbiAgICAgIHRoaXMudXBkYXRlQmFza2V0Tm90ZXNVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGJhc2tldElkLFxuICAgICAgICBub3Rlc1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlQmFza2V0VGl0bGUoYmFza2V0SWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQmFza2V0KFxuICAgICAgYmFza2V0SWQsXG4gICAgICB0aGlzLnVwZGF0ZUJhc2tldFRpdGxlVXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGlkOiBiYXNrZXRJZCxcbiAgICAgICAgbmV3VGl0bGU6IHRpdGxlXG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgZ2V0QmFza2V0KHF1ZXJ5OiB7XG4gICAgY29udmVydEN1cnJlbmN5VG86IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIHdpdGhTdXBwbGVtZW50YWw6IGJvb2xlYW47XG4gIH0pOiBPYnNlcnZhYmxlPEdldFVzZXJCYXNrZXRSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNrZXRGZXRjaGVyLmZldGNoT25lKHF1ZXJ5KTtcbiAgfVxuXG4gIGdldEJhc2tldENvMkluZm8ocXVlcnk6IHtcbiAgICBjb252ZXJ0Q3VycmVuY3lUbzogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgd2l0aFN1cHBsZW1lbnRhbDogYm9vbGVhbjtcbiAgfSk6IE9ic2VydmFibGU8R2V0VXNlckJhc2tldFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmJhc2tldENvMkZldGNoZXIuZmV0Y2hPbmUocXVlcnkpO1xuICB9XG5cbiAgYWRkQmFza2V0SXRlbU1hcmt1cChcbiAgICBiYXNrZXRJdGVtSWQ6IHN0cmluZyxcbiAgICBhbW91bnQ6IG51bWJlcixcbiAgICBhZ2VudElkOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXREZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQmFza2V0SXRlbU1hcmt1cFVwZGF0ZXJcbiAgICAgIC51cGRhdGVPbmUoe1xuICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtSWQsXG4gICAgICAgIG1hcmt1cDogJycsXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgICAgYWdlbnQ6IGFnZW50SWQsXG4gICAgICAgIHRpdGxlOiAnQWdlbnQgTWFya3VwJ1xuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoYmFza2V0ID0+IHtcbiAgICAgICAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0LmlkKTtcbiAgICAgICAgICBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5iYXNrZXRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgbWFya3VwSW5mbyA9IGJhc2tldC5iYXNrZXRJdGVtcy5maW5kKG1hcmtVcEl0ZW0gPT4gbWFya1VwSXRlbS5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgICBpdGVtLnByaWNlID0gbWFya3VwSW5mby5wcmljZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpbnRCYXNrZXQubmV4dChpbnRCYXNrZXQuc3ViamVjdC52YWx1ZSwgdGhpcy5pc1VzZXJBZ2VudCgpKTtcblxuICAgICAgICAgIHJldHVybiBiYXNrZXQ7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgYXRMZWFzdE9uZVNlYXJjaENob3NlbigpOiBib29sZWFuIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGFueSBpdGVtIG9uIGFueSBiYXNrZXQgd2Ugc2hvdyBiYXNrZXRzIGluIHNlYXJjaCBzY3JlZW5cbiAgICByZXR1cm4gISF0aGlzLmN1cnJlbnRCYXNrZXRzLmZpbHRlcihiYXNrZXQgPT4gYmFza2V0LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMubGVuZ3RoKS5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgZ2V0QmFza2V0U3RhdHMoaW5kZXg6IG51bWJlcik6IEJlaGF2aW9yU3ViamVjdDxCYXNrZXRQcmljZXM+IHtcbiAgICBjb25zdCBiYXNrZXRQcmljZXNPYmogPSB0aGlzLmJhc2tldHMudmFsdWVbaW5kZXhdPy5zdWJqZWN0Py52YWx1ZT8ucHJpY2VzIHx8IHt9O1xuICAgIGNvbnN0IGJhc2tldFByaWNlc0tleSA9IE9iamVjdC5rZXlzKGJhc2tldFByaWNlc09iailbMF07XG4gICAgaWYgKGJhc2tldFByaWNlc0tleSkge1xuICAgICAgdGhpcy5iYXNrZXRQcmljZXMudmFsdWUuY3VycmVuY3kgPSBiYXNrZXRQcmljZXNLZXk7XG4gICAgICB0aGlzLmJhc2tldFByaWNlcy52YWx1ZS50b3RhbCA9XG4gICAgICAgIHRoaXMuYmFza2V0cy52YWx1ZVtpbmRleF0uc3ViamVjdC52YWx1ZS5wcmljZXNbYmFza2V0UHJpY2VzS2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYXNrZXRQcmljZXMudmFsdWUudG90YWwgPSAwO1xuICAgIH1cblxuICAgIHRoaXMuYmFza2V0UHJpY2VzLnZhbHVlLmxpc3QuZm9yRWFjaChrZXlzID0+IHtcbiAgICAgIGtleXMucHJpY2UgPSB0aGlzLmJhc2tldHMudmFsdWVbaW5kZXhdPy5zdWJqZWN0Py52YWx1ZT8uYmFza2V0SXRlbXNcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VydmljZS50eXBlID09PSBrZXlzLnR5cGUpXG4gICAgICAgIC5yZWR1Y2UoKHN1bSwgY3VycmVudCkgPT4gc3VtICsgY3VycmVudC5wcmljZSwgMCk7XG4gICAgICBrZXlzLmNvMiA9IHRoaXMuYmFza2V0cy52YWx1ZVtpbmRleF0/LnN1YmplY3Q/LnZhbHVlPy5iYXNrZXRJdGVtc1xuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZXJ2aWNlLnR5cGUgPT09IGtleXMudHlwZSlcbiAgICAgICAgLnJlZHVjZSgoc3VtLCBjdXJyZW50KSA9PiBzdW0gKyBjdXJyZW50LmNvMlBlckl0ZW0sIDApO1xuICAgIH0pO1xuXG4gICAgdGhpcy5iYXNrZXRQcmljZXMudmFsdWUudG90YWxDbzIgPSB0aGlzLmJhc2tldFByaWNlcy52YWx1ZS5saXN0LnJlZHVjZShcbiAgICAgIChzdW0sIGN1cnJlbnQpID0+IHN1bSArIGN1cnJlbnQuY28yLFxuICAgICAgMFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuYmFza2V0UHJpY2VzO1xuICB9XG5cbiAgY2FuQ2FuY2VsKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiBPYnNlcnZhYmxlPEJlZm9yZUNhbmNlbGxhdGlvbkluZm8+IHtcbiAgICAvLyBOb3QgY2FuY2VsbGFibGUgaWYgdGhlIG91dGJvdW5kIGRhdGUgcGFzc2VkIGZvciBhbGwgaXRlbSB0eXBlcyBvdGhlciB0aGFuIGhvdGVsLCBmb3IgaG90ZWwgaWYgaXQgaXMgdGhlIHNhbWUgZGF5IHRoZW4gd2UgbmVlZCB0byBjaGVjayBCRVxuICAgIGlmIChcbiAgICAgIChtb21lbnQoYmFza2V0SXRlbS5vdXRib3VuZERhdGUpLmRpZmYobW9tZW50KG5ldyBEYXRlKCkpLCAnbWludXRlcycpIDw9IDAgJiZcbiAgICAgICAgYmFza2V0SXRlbS5zZXJ2aWNlLnR5cGUgIT09IFNlcnZpY2VUeXBlLkhvdGVsKSB8fFxuICAgICAgKGJhc2tldEl0ZW0uc2VydmljZS50eXBlID09PSBTZXJ2aWNlVHlwZS5Ib3RlbCAmJlxuICAgICAgICBtb21lbnQoYmFza2V0SXRlbS5vdXRib3VuZERhdGUpLmRpZmYobW9tZW50KG5ldyBEYXRlKCkpLCAnbWludXRlcycpIDw9IDAgJiZcbiAgICAgICAgIW1vbWVudChiYXNrZXRJdGVtLm91dGJvdW5kRGF0ZSkuaXNTYW1lKG1vbWVudChuZXcgRGF0ZSgpKSwgJ2RhdGUnKSlcbiAgICApIHtcbiAgICAgIHJldHVybiBvZih7XG4gICAgICAgIGNhbmNlbGxhYmxlOiBmYWxzZSxcbiAgICAgICAgY2FuY2VsbGF0aW9uRmVlOiAwLFxuICAgICAgICBpbmZvOiAnT3V0Ym91bmQgZGF0ZXRpbWUgcGFzc2VkLidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGJhc2tldEl0ZW0uc3RhdHVzID09PSBCYXNrZXRJdGVtU3RhdHVzLkJvb2tlZCB8fFxuICAgICAgYmFza2V0SXRlbS5zdGF0dXMgPT09IEJhc2tldEl0ZW1TdGF0dXMuUGFydGlhbGx5Q2FuY2VsbGVkXG4gICAgKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDYW5jZWxsZWRJbmZvID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGNhbkJlQ2FuY2VsbGVkID0gdGhpcy5nZXRDYW5jZWxsYXRpb25JbmZvRmV0Y2hlci5mZXRjaE9uZSh7XG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW0uaWRcbiAgICAgIH0pO1xuICAgICAgY2FuQmVDYW5jZWxsZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nQ2FuY2VsbGVkSW5mbyA9IGZhbHNlO1xuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ0NhbmNlbGxlZEluZm8gPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgfSApO1xuICAgICAgcmV0dXJuIGNhbkJlQ2FuY2VsbGVkO1xuICAgIH1cblxuICAgIHJldHVybiBvZih7XG4gICAgICBjYW5jZWxsYWJsZTogZmFsc2UsXG4gICAgICBjYW5jZWxsYXRpb25GZWU6IDAsXG4gICAgICBpbmZvOiBcIkl0ZW0gaXNuJ3QgYm9va2VkXCJcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUJvb2tlZEJhc2tldCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gdGhpcy5jdXJyZW50QmFza2V0cy5yZWR1Y2UoKGFjYywgYmFza2V0KSA9PiB7XG4gICAgICBpZiAoYmFza2V0LnN1YmplY3QudmFsdWUuc3RhdHVzICE9PSBCYXNrZXRTdGF0dXMuQm9va2VkKSB7XG4gICAgICAgIGFjYy5wdXNoKGJhc2tldCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgICAvLyBjb25zb2xlLmxvZygnRGFuMTEnLHRoaXMuY3VycmVudEJhc2tldHMpXG5cbiAgICB0aGlzLmJhc2tldHMubmV4dCh0aGlzLmN1cnJlbnRCYXNrZXRzKTtcbiAgfVxuXG4gIHNob3dFcnJvck1vZGFsKCkge1xuICAgIGNvbnN0IG9mZmljZSA9IHRoaXMudXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLmFsbERldGFpbHMudmFsdWUub2ZmaWNlO1xuICAgIGNvbnN0IGVtYWlsID0gb2ZmaWNlPy5zdXBwb3J0RW1haWwgfHwgJyc7XG4gICAgY29uc3QgY291bnRyeUNvZGUgPSBvZmZpY2U/LnN1cHBvcnRQaG9uZU51bWJlcj8uY291bnRyeUNvZGVcbiAgICAgID8gJysnICsgb2ZmaWNlPy5zdXBwb3J0UGhvbmVOdW1iZXI/LmNvdW50cnlDb2RlXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IG51bWJlciA9IG9mZmljZT8uc3VwcG9ydFBob25lTnVtYmVyPy5udW1iZXIgPyBvZmZpY2U/LnN1cHBvcnRQaG9uZU51bWJlcj8ubnVtYmVyIDogJyc7XG4gICAgY29uc3QgYXJlYUNvZGUgPSBvZmZpY2U/LnN1cHBvcnRQaG9uZU51bWJlcj8uYXJlYUNvZGVcbiAgICAgID8gb2ZmaWNlPy5zdXBwb3J0UGhvbmVOdW1iZXI/LmFyZWFDb2RlXG4gICAgICA6ICcnO1xuXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgIE1vZGFsVHlwZXMuTW9kYWxFcnJvckNvbXBvbmVudCxcbiAgICAgIHsgYmFja2Ryb3A6ICdzdGF0aWMnIH0sXG4gICAgICB7XG4gICAgICAgIGVycm9yOlxuICAgICAgICAgICdUaGVyZSBhcmUgbWlzc2luZyB2YWx1ZXMgaW4gdGhlIE1hbmFnZW1lbnQgSW5mb3JtYXRpb24gc2VjdGlvbiB3aXRoaW4geW91ciBjb25maWd1cmF0aW9uLicsXG4gICAgICAgIG1pRXJyb3I6IHRydWUsXG4gICAgICAgIGVtYWlsLFxuICAgICAgICBudW1iZXI6IGAke2NvdW50cnlDb2RlfSAke2FyZWFDb2RlfSAke251bWJlcn1gXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHNob3dFcnJvck1vZGFsQXBwcm92ZXJzKCkge1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICBNb2RhbFR5cGVzLk1vZGFsRXJyb3JDb21wb25lbnQsXG4gICAgICB7IGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAge1xuICAgICAgICBlcnJvcjpcbiAgICAgICAgICAnWW91IGNhbm5vdCBjb250aW51ZSBhcyB5b3VyIHByb2ZpbGUgaXMgY29uZmlndXJlZCB0byBnbyBmb3IgYXBwcm92YWwgYnV0IHlvdSBoYXZlIG5vIGFwcHJvdmVycyBhc3NpZ25lZC4nXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVCYXNrZXRTY3JhdGNocGFkTm90ZShiYXNrZXRJZDogc3RyaW5nLCBub3RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEJhc2tldE5vdGU+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVCYXNrZXROb3RlLnVwZGF0ZU9uZSh7IGJhc2tldElkLCBub3RlIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEJhc2tldFNjcmF0Y2hwYWROb3RlcyhiYXNrZXRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXROb3RlW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNrZXROb3Rlcy5mZXRjaExpc3QoeyBiYXNrZXRJZCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZW1hcmtzKHNlcnZpY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIHJldHVybiBvZihNaUNvbW1hbmQpO1xuICB9XG5cbiAgcHVibGljIGdldEJhc2tldEl0ZW1SZW1hcmtzKGJhc2tldEl0ZW1JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrcy5mZXRjaExpc3QoeyBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtSWQgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkQmFza2V0SXRlbVJlbWFyayhcbiAgICBiYXNrZXRJdGVtSWQ6IHN0cmluZyxcbiAgICByZW1hcmtUeXBlOiBzdHJpbmcsXG4gICAgdGV4dDogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8QmFza2V0SXRlbUN1c3RvbVJlbWFyaz4ge1xuICAgIHJldHVybiB0aGlzLmFkZEJhc2tldEl0ZW1DdXN0b21SZW1hcmsudXBkYXRlT25lKHtcbiAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW1JZCxcbiAgICAgIHJlbWFya190eXBlOiByZW1hcmtUeXBlLFxuICAgICAgdGV4dFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEJhc2tldFF1b3RlKGJhc2tldElkOiBzdHJpbmcsIHJlc2VuZDogYm9vbGVhbiwgbm90ZT86IHN0cmluZyk6IE9ic2VydmFibGU8QmFza2V0UXVvdGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNrZXRRdW90ZUZldGNoZXIuZmV0Y2hMaXN0KHsgYmFza2V0OiBiYXNrZXRJZCwgcmVzZW5kLCBub3RlIH0pO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZUJhc2tldE93bmVyc2hpcChcbiAgICBiYXNrZXRJZDogc3RyaW5nLFxuICAgIHVzZXJJZDogc3RyaW5nLFxuICAgIG5vdGU/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXRRdW90ZT4ge1xuICAgIHJldHVybiB0aGlzLmNoYW5nZUJhc2tldE93bmVyc2hpcFVwZGF0ZXIudXBkYXRlT25lKHsgYmFza2V0OiBiYXNrZXRJZCwgdXNlcjogdXNlcklkLCBub3RlIH0pO1xuICB9XG5cbiAgcHVibGljIGdldERyYWZ0QmFza2V0cyhcbiAgICBkcmFmdEJhc2tldFR5cGU6IERyYWZ0QmFza2V0VHlwZSA9IERyYWZ0QmFza2V0VHlwZS5BbGxcbiAgKTogT2JzZXJ2YWJsZTxEcmFmdEJhc2tldD4ge1xuICAgIHJldHVybiB0aGlzLmdldERyYWZ0QmFza2V0c0ZldGNoZXIuZmV0Y2hMaXN0KHsgZHJhZnRCYXNrZXRUeXBlIH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2VuZEFwcHJvdmFsKGlkOiBzdHJpbmcsIGFwcHJvdmVyQ2hhbmdlZCA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5yZXNlbmRBcHByb3ZlckVtYWlsLmZldGNoTGlzdCh7IGlkLCBhcHByb3ZlckNoYW5nZWQgfSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgTW9kYWxUeXBlcy5SZXNlbmRBcHByb3ZhbEVtYWlsQ29tcG9uZW50LFxuICAgICAgICB7IGNlbnRlcmVkOiB0cnVlLCBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgICAgeyBkYXRhOiAhIWRhdGEgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0lmQmFza2V0UmVxdWlyZXNBcHByb3ZhbChiYXNrZXQ6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmJhc2tldFJlcXVpcmVzQXBwcm92YWwuZmV0Y2hMaXN0KHsgYmFza2V0IH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2V0QmFza2V0cygpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gW107XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyUmVtb3ZlQmFza2V0QnlJZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50QmFza2V0cyA9IHRoaXMuY3VycmVudEJhc2tldHMuZmlsdGVyKGJhc2tldCA9PiBiYXNrZXQuaWQgIT09IGlkKTtcbiAgfVxuXG4gIGNyZWF0ZUludEJhc2tldChiYXNrZXQ6IFVzZXJCYXNrZXRSZXN1bHQpOiBJbnRlcm5hbEJhc2tldDxHVV9RPiB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcm5hbEJhc2tldChcbiAgICAgIGJhc2tldCxcbiAgICAgIHRoaXMuaGVscGVycyxcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLmdldFVzZXJGZXRjaGVyLFxuICAgICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UsXG4gICAgICB0aGlzLnJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZUJhc2tldEZyb21EcmFmdChcbiAgICBkcmFmdEJhc2tldElkOiBzdHJpbmcsXG4gICAgbGVhZFBhc3NlbmdlcklkOiBzdHJpbmcsXG4gICAgbWFuYWdlbWVudEluZm86IFNldE1pVmFsdWVJbnB1dFtdLFxuICAgIHVzZXJJbmZvOiBVc2VySW5mb0lucHV0W10sXG4gICAgYW1lbmQ6IGJvb2xlYW5cbiAgKTogT2JzZXJ2YWJsZTxHZXRVc2VyQmFza2V0UmVzdWx0PiB7XG4gICAgLy8gY29uc3QgdXBkYXRlZE1pRm9ybWF0ID0gdGhpcy5mb3JtYXRTYXZlZE1pKG1hbmFnZW1lbnRJbmZvKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICBkcmFmdEJhc2tldElkLFxuICAgICAgbGVhZFBhc3NlbmdlcklkLFxuICAgICAgdXNlckluZm8sIC8vIFVTRVJJTkZvSW5wdXRbXVxuICAgICAgbWFuYWdlbWVudEluZm8sIC8vIFNldE1JVmFsdWVJbnB1dFtdXG4gICAgICBhbWVuZFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0QXBwcm92ZXJMaXN0QW5kVXBkYXRlKGJhc2tldDogc3RyaW5nKTogUHJvbWlzZTxTdWJzY3JpcHRpb24+IHtcbiAgICAvLyByYW4gb3V0IG9mIHdpbGwgdG8gZ2V0IHRoaXMgd29ya2luZywgd2lsbCBuZWVkIHRvIGdldCB0aGlzIHdvcmtpbmcgZm9yIG90aGVyIE9CVHNcbiAgICBjb25zdCBvZmZpY2UgPSB0aGlzLmdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0VXNlckFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgcmV0dXJuIGZvcmtKb2luKFtvZmZpY2UsIHVzZXJdKS5zdWJzY3JpYmUoYXN5bmMgKGFwcHJvdmVyczogYW55KSA9PiB7XG4gICAgICBjb25zdCBhbGxBcHByb3ZlcnMgPSBhcHByb3ZlcnNbMF0uY29uY2F0KGFwcHJvdmVyc1sxXSk7XG4gICAgICBjb25zdCBlbWFpbHMgPSBhbGxBcHByb3ZlcnMubWFwKCh7IGVtYWlsIH06IFVzZXIpID0+IGVtYWlsKTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQXBwcm92ZXJzID0gYWxsQXBwcm92ZXJzLmZpbHRlcihcbiAgICAgICAgKHsgZW1haWwgfTogVXNlciwgaW5kZXg6IG51bWJlcikgPT4gIWVtYWlscy5pbmNsdWRlcyhlbWFpbCwgaW5kZXggKyAxKVxuICAgICAgKTtcbiAgICAgIGlmIChmaWx0ZXJlZEFwcHJvdmVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYXBwcm92ZXIgPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICAgIE1vZGFsVHlwZXMuQXBwcm92ZXJzTW9kYWxDb21wb25lbnQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxuICAgICAgICAgICAgd2luZG93Q2xhc3M6ICdyZXF1aXJlcy1yZWFzb24tZGlhbG9nJyxcbiAgICAgICAgICAgIGNlbnRlcmVkOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGZpbHRlcmVkQXBwcm92ZXJzIH1cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoYXBwcm92ZXIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RCYXNrZXRBcHByb3ZlclVwZGF0ZXJcbiAgICAgICAgICAgIC51cGRhdGVPbmUoe1xuICAgICAgICAgICAgICBiYXNrZXQsXG4gICAgICAgICAgICAgIGFwcHJvdmVyXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0QXBwcm92ZXJzTGlzdCgpOiBPYnNlcnZhYmxlPFtVc2VyW10sIFVzZXJbXV0+IHtcbiAgICBjb25zdCBvZmZpY2UgPSB0aGlzLmdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0VXNlckFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgcmV0dXJuIGZvcmtKb2luKFtvZmZpY2UsIHVzZXJdKTtcbiAgfVxuXG4gIGdldEFwcHJvdmVyc1Blck1JTGlzdChiYXNrZXQ6IHN0cmluZyk6IE9ic2VydmFibGU8VXNlcltdPiB7XG4gICAgY29uc3QgYXBwcm92ZXJzID0gdGhpcy5nZXRNSUFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KHsgYmFza2V0SWQ6IGJhc2tldCB9KTtcbiAgICByZXR1cm4gYXBwcm92ZXJzO1xuICB9XG5cbiAgdXBkYXRlQXBwcm92ZXIoXG4gICAgYmFza2V0OiBzdHJpbmcsXG4gICAgYXBwcm92ZXI6IHN0cmluZyxcbiAgICBjb252ZXJ0Q3VycmVuY3lUbz86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEJhc2tldERldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RCYXNrZXRBcHByb3ZlclVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgIGJhc2tldCxcbiAgICAgIGFwcHJvdmVyLFxuICAgICAgY29udmVydEN1cnJlbmN5VG9cbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZU11bHRpTGV2ZWxBcHByb3ZlcnMoXG4gICAgYmFza2V0OiBzdHJpbmcsXG4gICAgbXVsdGlMZXZlbEFwcHJvdmVyczogc3RyaW5nW11cbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXREZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0QmFza2V0TXVsdGlMZXZlbEFwcHJvdmVyc1VwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgIGJhc2tldCxcbiAgICAgIG11bHRpTGV2ZWxBcHByb3ZlcnNcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZU5vdGlmeUFwcHJvdmVyKFxuICAgIGJhc2tldDogc3RyaW5nLFxuICAgIGFwcHJvdmVyOiBzdHJpbmcsXG4gICAgY29udmVydEN1cnJlbmN5VG8/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXREZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICBiYXNrZXQsXG4gICAgICBhcHByb3ZlcixcbiAgICAgIGNvbnZlcnRDdXJyZW5jeVRvXG4gICAgfSk7XG4gIH1cblxuICBvcGVuQXBwcm92ZXJNb2RhbChcbiAgICBhcHByb3ZlcnM6IFVzZXJbXSxcbiAgICBpc1NlbGVjdGVkQXBwcm92ZXI6IGJvb2xlYW4sXG4gICAgaXNTZWxlY3RlZE1JQXBwcm92ZXI6IGJvb2xlYW4sXG4gICAgaXNTZWxlY3RlZE5vdGlmeUFwcHJvdmVyOiBib29sZWFuLFxuICAgIGlzU2VsZWN0ZWROb3RpZnlBcHByb3ZlclBlck1JOiBib29sZWFuLFxuICAgIGJhc2tldFVzZXI6IFVzZXIsXG4gICAgYXBwcm92YWxMZXZlbDogbnVtYmVyXG4gICk6IFByb21pc2U8QmFza2V0U2VsZWN0ZWRBcHByb3Zlcj4ge1xuICAgIGNvbnNvbGUud2FybihgKysrIE9wZW5pbmcgYXBwcm92YWwgbW9kYWwgYXQgbGV2ZWw6ICR7YXBwcm92YWxMZXZlbH0gKysrYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgIE1vZGFsVHlwZXMuQXBwcm92ZXJzTW9kYWxDb21wb25lbnQsXG4gICAgICB7XG4gICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcbiAgICAgICAgd2luZG93Q2xhc3M6ICdyZXF1aXJlcy1yZWFzb24tZGlhbG9nJyxcbiAgICAgICAgY2VudGVyZWQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFwcHJvdmVycyxcbiAgICAgICAgaXNTZWxlY3RlZEFwcHJvdmVyLFxuICAgICAgICBpc1NlbGVjdGVkTm90aWZ5QXBwcm92ZXIsXG4gICAgICAgIGlzU2VsZWN0ZWROb3RpZnlBcHByb3ZlclBlck1JLFxuICAgICAgICBiYXNrZXRVc2VyLFxuICAgICAgICBhcHByb3ZhbExldmVsLFxuICAgICAgICBpc1NlbGVjdGVkTUlBcHByb3ZlclxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzaGFyZUJhc2tldChiYXNrZXRJZDogc3RyaW5nLCBzaGFyZWRVc2Vyczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPEJhc2tldD4ge1xuICAgIHJldHVybiB0aGlzLnNoYXJlQmFza2V0VXBkYXRlci51cGRhdGVPbmUoeyBiYXNrZXRJZCwgc2hhcmVkVXNlcnMgfSk7XG4gIH1cblxuICBnZXRVc2VyU2hhcmVkQmFza2V0cyhsb2dnZWRJblVzZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXRbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlci5mZXRjaExpc3QoeyBsb2dnZWRJblVzZXJJZCB9KTtcbiAgfVxuXG4gIC8vICEgLSBVc2UgbG9jYWxzdG9yYWdlIHRvIHRyYWNrIHRoZSBzaXplIG9mIHNoYXJlZCBiYXNrZXRzIGZvciBlYWNoIHVzZXJcbiAgLy8gISAtIHRha2VzIG9ubHkgYSBmZXcgYnl0ZXMgLSB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBhbW91bnQgdXNlZFxuICAvLyAtIHNvbWUgaGVscGZ1bCBjb2RlIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiBsb2NhbCBzdG9yYWdlIC0gdXNlIGl0IGluIHRoZSBicm93c2VyIGNvbnNvbGVcbiAgLy8gdmFyIF9sc1RvdGFsPTAsX3hMZW4sX3g7Zm9yKF94IGluIGxvY2FsU3RvcmFnZSl7IGlmKCFsb2NhbFN0b3JhZ2UuaGFzT3duUHJvcGVydHkoX3gpKXtjb250aW51ZTt9IF94TGVuPSAoKGxvY2FsU3RvcmFnZVtfeF0ubGVuZ3RoICsgX3gubGVuZ3RoKSogMik7X2xzVG90YWwrPV94TGVuOyBjb25zb2xlLmxvZyhfeC5zdWJzdHIoMCw1MCkrXCIgPSBcIisgKF94TGVuLzEwMjQpLnRvRml4ZWQoMikrXCIgS0JcIil9O2NvbnNvbGUubG9nKFwiVG90YWwgPSBcIiArIChfbHNUb3RhbCAvIDEwMjQpLnRvRml4ZWQoMikgKyBcIiBLQlwiKTtcblxuICB1cGRhdGVTaGFyZWRCYXNrZXRDb3VudChzaGFyZWRCYXNrZXRzOiBCYXNrZXRbXSwgdXNlcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldExvY2FsSXRlbShgJHt1c2VySWR9X3NoYXJlZF9iYXNrZXRfY291bnRgLCBzaGFyZWRCYXNrZXRzLmxlbmd0aCk7XG4gIH1cblxuICBnZXRTaGFyZWRCYXNrZXRDb3VudCh1c2VySWQ6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3Qgc3RvcmVkID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRMb2NhbEl0ZW0oYCR7dXNlcklkfV9zaGFyZWRfYmFza2V0X2NvdW50YCk7XG5cbiAgICByZXR1cm4gc3RvcmVkO1xuICB9XG5cbiAgY2FuQW1lbmRCb29raW5nKFxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXG4gICAgYXJyaXZhbERhdGU/OiBzdHJpbmcsXG4gICAgZGVwYXJ0dXJlRGF0ZT86IHN0cmluZyxcbiAgICBmaXJzdENoZWNrID0gZmFsc2VcbiAgKTogT2JzZXJ2YWJsZTxCZWZvcmVBbWVuZEluZm8+IHtcbiAgICBpZiAoYmFza2V0SXRlbS5zdGF0dXMgPT09IEJhc2tldEl0ZW1TdGF0dXMuQm9va2VkKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYW5BbWVuZEJvb2tpbmdJbmZvRmV0Y2hlci5mZXRjaE9uZSh7XG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW0uaWQsXG4gICAgICAgIGFycml2YWxEYXRlOiBhcnJpdmFsRGF0ZSxcbiAgICAgICAgZGVwYXJ0dXJlRGF0ZTogZGVwYXJ0dXJlRGF0ZSxcbiAgICAgICAgZmlyc3RDaGVja1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHtcbiAgICAgIGNhbkFtZW5kOiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgY2hlY2tGb3JTZWxmQXBwcm92ZShiYXNrZXQ6IEJhc2tldERldGFpbHMpOiBib29sZWFuIHtcbiAgICBjb25zdCBiYXNrZXRVc2VyID0gYmFza2V0Lmludm9rZWRVc2VyID8gYmFza2V0Lmludm9rZWRVc2VyIDogYmFza2V0Lm93bmVyO1xuICAgIGNvbnN0IGlzQWxsb3dTZWxmQXBwcm92ZSA9IGJhc2tldFVzZXIub2ZmaWNlLmFsbG93U2VsZkFwcHJvdmU7XG4gICAgY29uc3QgdXNlckFwcHJvdmVycyA9IGJhc2tldFVzZXIudXNlckFwcHJvdmVycztcbiAgICBpZiAoaXNBbGxvd1NlbGZBcHByb3ZlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgaXNTZWxmQXBwcm92ZXIgPVxuICAgICAgdXNlckFwcHJvdmVycy5sZW5ndGggPT09IDEgJiYgdXNlckFwcHJvdmVyc1swXT8uYXBwcm92ZXIuaWQgPT09IGJhc2tldFVzZXIuaWQ7XG4gICAgcmV0dXJuICFpc1NlbGZBcHByb3ZlcjtcbiAgfVxuXG4gIGFzeW5jIG9wZW5BcHByb3ZlV2FybmluZyh3YXJuaW5nTWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgIE1vZGFsVHlwZXMuQmFzaWNNb2RhbENvbXBvbmVudCxcbiAgICAgIHsgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcsIGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJycsXG4gICAgICAgIGJvZHk6IHdhcm5pbmdNZXNzYWdlLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYnV0dG9uT2s6IHRydWUsXG4gICAgICAgICAgYnV0dG9uT2tUZXh0OiAnT2snLFxuICAgICAgICAgIGJ1dHRvbkNhbmNlbDogZmFsc2UsXG4gICAgICAgICAgYnV0dG9uT2tBY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBnZXRUcmFpblNlYXRNYXAoaWQ6IHN0cmluZyk6IFByb21pc2U8VHJhaW5TZWF0TWFwPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHJhaW5TZWF0TWFwRmV0Y2hlci5mZXRjaExpc3QoeyBpdGluZXJhcnlJZDogaWQgfSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBzZXRSZXF1aXJlc1JlYXNvbkJvb2tpbmcoaXNCb29raW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UuaXNCb29raW5nID0gaXNCb29raW5nO1xuICB9XG5cbiAgaXNVc2VyQWdlbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UudXNlcklzQWdlbnQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCYXNrZXRBcHByb3ZhbFRpbWVzdGFtcHMoYmFza2V0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QmFza2V0QXBwcm92YWxUaW1lc3RhbXBbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2tldEFwcHJvdmFsVGltZXN0YW1wc0ZldGNoZXIuZmV0Y2hMaXN0KHsgYmFza2V0SWQgfSk7XG4gIH1cblxuICBiZWZvcmVUYXhpQW1lbmRTZWFyY2goYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IE9ic2VydmFibGU8Q2FiSGlyZVF1b3RlW10+IHtcbiAgICByZXR1cm4gdGhpcy5iZWZvcmVBbWVuZENhYlNlYXJjaGZldGNoZXIuZmV0Y2hMaXN0KHsgYmFza2V0SXRlbTogYmFza2V0SXRlbS5pZCB9KTtcbiAgfVxuICBzZW50QmFza2V0c0JhY2tUb1F1ZXVlKGRyYWZ0QmFza2V0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNlbmRCYWNrVG9RdWV1ZVVwZGF0ZXIudXBkYXRlT25lKHsgZHJhZnRCYXNrZXRJZCB9KTtcbiAgfVxuXG4gIGJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaChcbiAgICBiYXNrZXRJdGVtOiBzdHJpbmcsXG4gICAgcGlja1VwRGF0ZVRpbWU/OiBzdHJpbmcsXG4gICAgZHJvcE9mZkRhdGVUaW1lPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8Q2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHlbXT4ge1xuICAgIHJldHVybiB0aGlzLmJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaGZldGNoZXIuZmV0Y2hMaXN0KHtcbiAgICAgIGJhc2tldEl0ZW0sXG4gICAgICBwaWNrVXBEYXRlVGltZSxcbiAgICAgIGRyb3BPZmZEYXRlVGltZVxuICAgIH0pO1xuICB9XG59XG5cbiJdfQ==
|
|
1625
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3Ivc2VydmljZXMvZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUV0QixPQUFPLEVBQ0wsZUFBZSxFQUNmLFFBQVEsRUFHUixFQUFFLEVBQ0YsT0FBTyxHQUVSLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFLTCxnQkFBZ0IsRUFHaEIsWUFBWSxFQUlaLGlCQUFpQixFQUVqQixhQUFhLEVBRWIsV0FBVyxFQU1YLGVBQWUsRUFTaEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLGtCQUFrQixFQUdsQixhQUFhLEVBRWQsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDMUYsT0FBTyxFQUNMLHVCQUF1QixHQUN4QixNQUFNLHdDQUF3QyxDQUFDO0FBb0RoRCxPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUE4QnhFLE9BQU8sRUFDTCx5QkFBeUIsRUFFMUIsTUFBTSwyQkFBMkIsQ0FBQztBQTBFbkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU0vQyxPQUFP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QUssQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDO1lBQ25ELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUs7Z0JBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ25FO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ25DO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTs7WUFDMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsMENBQUUsT0FBTywwQ0FBRSxLQUFLLDBDQUFFLFdBQVcsQ0FDaEUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFDOUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsMENBQUUsT0FBTywwQ0FBRSxLQUFLLDBDQUFFLFdBQVcsQ0FDOUQsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFDOUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0QsQ0FB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QUM7SUFFTSwyQkFBMkIsQ0FBQyxRQUFnQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxVQUFzQjtRQUMxQyxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUNELHNCQUFzQixDQUFDLGFBQXFCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELHdCQUF3QixDQUN0QixVQUFrQixFQUNsQixjQUF1QixFQUN2QixlQUF3QjtRQUV4QixPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxTQUFTLENBQUM7WUFDcEQsVUFBVTtZQUNWLGNBQWM7WUFDZCxlQUFlO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCBBanYgZnJvbSAnYWp2JztcbmltcG9ydCBhZGRGb3JtYXRzIGZyb20gJ2Fqdi1mb3JtYXRzJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgZm9ya0pvaW4sXG4gIE9ic2VydmFibGUsXG4gIE9ic2VydmVyLFxuICBvZixcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZSwgbWFwLCBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gIEFkZEl0ZW1Ub0Jhc2tldCxcbiAgQmFza2V0LFxuICBCYXNrZXRJdGVtLFxuICBCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrLFxuICBCYXNrZXRJdGVtU3RhdHVzLFxuICBCYXNrZXROb3RlLFxuICBCYXNrZXRRdW90ZSxcbiAgQmFza2V0U3RhdHVzLFxuICBCZWZvcmVDYW5jZWxsYXRpb25JbmZvLFxuICBDcmVhdGVCYXNrZXRNdXRhdGlvblZhcmlhYmxlcyxcbiAgRHJhZnRCYXNrZXQsXG4gIExlYWRQYXNzZW5nZXJUeXBlLFxuICBNYW5hZ2VtZW50SW5mb1ZhbHVlLFxuICBQYXNzZW5nZXJUeXBlLFxuICBTZXJ2aWNlLFxuICBTZXJ2aWNlVHlwZSxcbiAgU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvLFxuICBVc2VySW5mb0lucHV0LFxuICBVc2VyLFxuICBCZWZvcmVBbWVuZEluZm8sXG4gIEJhc2tldEFwcHJvdmFsVGltZXN0YW1wLFxuICBEcmFmdEJhc2tldFR5cGUsXG4gIFRyYWluU2VhdE1hcCxcbiAgQ2FiSGlyZVF1b3RlLFxuICBTZXRNaVZhbHVlSW5wdXQsXG4gIFNldE1pVmFsdWVzTXV0YXRpb25WYXJpYWJsZXMsXG4gIFZhbGlkYXRpb25SZXNwb25zZSxcbiAgQ29weUluZm9JbnB1dCxcbiAgQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvLFxuICBDYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eVxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7XG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXG4gIERpZmZlcmVudFRyYXZlbGxlcixcbiAgR2V0VXNlckJhc2tldEl0ZW1SZXN1bHQsXG4gIEdldFVzZXJCYXNrZXRSZXN1bHQsXG4gIE1lbnVTbGlkZUVudW0sXG4gIFVzZXJCYXNrZXRSZXN1bHRcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHsgTW9kYWxUeXBlcyB9IGZyb20gJy4uL2NsYXNzZXMvbW9kYWwtdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbXBsIH0gZnJvbSAnLi4vY2xhc3Nlcy9zdXBwbGVtZW50YXJ5LWJvb2tpbmctaW5mby1pbXBsJztcbmltcG9ydCB7XG4gIEJhc2tldEluZm9NaURldGFpbHNJbXBsLFxufSBmcm9tICcuLi9jbGFzc2VzL2Jhc2tldC1pbmZvLW1pLWRldGFpbHMuaW1wbCc7XG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuLi9jbGFzc2VzL2hlbHBlcnMnO1xuaW1wb3J0IHsgQmFzZU1vZGFsT3BlbmVyU2VydmljZSB9IGZyb20gJy4vbW9kYWwtb3BlbmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUdldFVzZXJGZXRjaGVyLCBTZWFyY2hHZXRVc2VyRmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy91c2VyLWZldGNoZXInO1xuaW1wb3J0IHtcbiAgQWNjZXB0TmV3UHJpY2VGZXRjaGVyVHlwZSxcbiAgQmFzZUFjY2VwdE5ld1ByaWNlVXBkYXRlclxufSBmcm9tICcuLi91cGRhdGVycy9hY2NlcHQtbmV3LXByaWNlLnVwZGF0ZXInO1xuaW1wb3J0IHsgQmFzZUdldEJhc2tldEZldGNoZXIsIEdldEJhc2tldEZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvYmFza2V0LWZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldFVzZXJCYXNrZXRzRmV0Y2hlcixcbiAgR2V0VXNlckJhc2tldHNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlcnMtYmFza2V0cy1mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQWRkSXRlbVRvQmFza2V0RmV0Y2hlclR5cGUsXG4gIEJhc2VBZGRJdGVtVG9CYXNrZXRVcGRhdGVyXG59IGZyb20gJy4uL3VwZGF0ZXJzL2FkZC1pdGVtLXRvLWJhc2tldC51cGRhdGVyJztcbmltcG9ydCB7XG4gIEFkZFVzZXJCYXNrZXRGZXRjaGVyVHlwZSxcbiAgQmFzZUFkZFVzZXJUb0Jhc2tldEl0ZW1VcGRhdGVyXG59IGZyb20gJy4uL3VwZGF0ZXJzL2FkZFVzZXJUb0Jhc2tldEl0ZW0nO1xuaW1wb3J0IHtcbiAgQWRkR3Vlc3RCYXNrZXRGZXRjaGVyVHlwZSxcbiAgQmFzZUFkZEd1ZXN0VG9CYXNrZXRJdGVtVXBkYXRlclxufSBmcm9tICcuLi91cGRhdGVycy9hZGRHdWVzdFRvQmFza2V0SXRlbSc7XG5pbXBvcnQge1xuICBTZXRCYXNrZXRJdGVtTGVhZFBhc3NlbmdlckZldGNoZXJUeXBlLFxuICBCYXNlU2V0QmFza2V0SXRlbUxlYWRQYXNzZW5nZXJVcGRhdGVyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NldC1iYXNrZXQtaXRlbS1sZWFkLXBhc3Nlbmdlci51cGRhdGVyJztcbmltcG9ydCB7IEJhc2VCb29rQmFza2V0VXBkYXRlciwgQm9va0Jhc2tldEZldGNoZXJUeXBlIH0gZnJvbSAnLi4vdXBkYXRlcnMvYm9vay1iYXNrZXQtdXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlQ3JlYXRlQmFza2V0VXBkYXRlcixcbiAgQ3JlYXRlQmFza2V0RmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvY3JlYXRlLWJhc2tldC11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VEZWxldGVCYXNrZXRVcGRhdGVyLFxuICBEZWxldGVCYXNrZXRGZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtYmFza2V0LXVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZVJlbW92ZUl0ZW1Gcm9tQmFza2V0VXBkYXRlcixcbiAgRGVsZXRlQmFza2V0SXRlbUZldGNoZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS1pdGVtLWZyb20tYmFza2V0LnVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZVJldmFsaWRhdGVCYXNrZXRVcGRhdGVyLFxuICBSZXZhbGlkYXRlQmFza2V0RmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvcmV2YWxpZGF0ZS1iYXNrZXQtdXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlQWRkVXBkYXRlZEl0ZW1Ub0Jhc2tldFVwZGF0ZXIsXG4gIEFkZFVwZGF0ZWRJdGVtVG9CYXNrZXRVcGRhdGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy91cGRhdGUtYmFza2V0LWl0ZW0udXBkYXRlcic7XG5cbmltcG9ydCB7IFRyYXZlbGxlciwgVHJhdmVsbGVyT2JqZWN0IH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xuaW1wb3J0IHsgU2VhcmNoT2JqZWN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWFyY2gtb2JqZWN0cy5pbnRlcmZhY2UnO1xuXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXN1cHBsZW1lbnRhcnktYm9va2luZy1pbmZvLWltcGwnO1xuaW1wb3J0IHtcbiAgQmFzZW1vdmVCYXNrZXRJdGVtVG9CYXNrZXQsXG4gIE1vdmVJdGVtVG9BRGlmZmVyZW50QmFza2V0VHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9tb3ZlLWJhc2tldC1pdGVtLXRvLWJhc2tldCc7XG5pbXBvcnQge1xuICBCYXNlVXBkYXRlQmFza2V0Tm90ZXNUeXBlLFxuICBCYXNlVXBkYXRlQmFza2V0Tm90ZVVwZGF0ZXJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvdXBkYXRlLWJhc2tldC1ub3Rlcy11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VVcGRhdGVCYXNrZXRUaXRsZVR5cGUsXG4gIEJhc2VVcGRhdGVCYXNrZXRUaXRsZVVwZGF0ZXJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvdXBkYXRlLWJhc2tldC10aXRsZS11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VTZXRQYXltZW50T3B0aW9uVXBkYXRlcixcbiAgU2V0QmFza2V0SXRlbVBheW1lbnRNZXRob2RUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NldC1iYXNrZXQtaXRlbS1wYXltZW5yLW9wdGlvbi51cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRDYW5jZWxsYXRpb25JbmZvRmV0Y2hlcixcbiAgR2V0Q2FuY2VsbGF0aW9uSW5mb1R5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWNhbmNlbGxhdGlvbi1pbmZvLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZVJlcXVpcmVzUmVhc29uU2VydmljZSxcbiAgUmVxdWlyZXNSZWFzb25TZXJ2aWNlSW50ZXJmYWNlXG59IGZyb20gJy4vcmVxdWlyZXMtcmVhc29uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQmFzZUNyZWF0ZUJhc2tldE5vdGVVcGRhdGVyLFxuICBDcmVhdGVCYXNrZXROb3RlVXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvY3JlYXRlLWJhc2tldC1ub3RlLXVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZUFkZEJhc2tldEl0ZW1NYXJrdXBVcGRhdGVyLFxuICBBZGRCYXNrZXRJdGVtTWFya3VwVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9hZGQtYmFza2V0LWl0ZW0tbWFya3VwLnVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZUFkZEJhc2tldEl0ZW1DdXN0b21SZW1hcmtVcGRhdGVyLFxuICBBZGRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrVXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvYWRkLWJhc2tldC1pdGVtLWN1c3RvbS1yZW1hcmstdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrc0ZldGNoZXIsXG4gIEdldEJhc2tldEl0ZW1DdXN0b21SZW1hcmtzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWJhc2tldC1pdGVtLWN1c3RvbS1yZW1hcmtzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlQ2hhbmdlQmFza2V0T3duZXJzaGlwVXBkYXRlcixcbiAgQ2hhbmdlQmFza2V0T3duZXJzaGlwVXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvY2hhbmdlLWJhc2tldC1vd25lcnNoaXAtdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRCYXNrZXRRdW90ZUZldGNoZXIsXG4gIEdldEJhc2tldFF1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWJhc2tldC1xdW90ZS5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldEJhc2tldE5vdGVzRmV0Y2hlcixcbiAgR2V0QmFza2V0Tm90ZXNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtYmFza2V0LW5vdGVzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0QmFza2V0QXBwcm92YWxUaW1lc3RhbXBzRmV0Y2hlcixcbiAgR2V0QmFza2V0QXBwcm92YWxUaW1lc3RhbXBzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWJhc2tldC1hcHByb3ZhbC10aW1lc3RhbXBzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlUmVzZW5kQXBwcm92ZXJFbWFpbEZldGNoZXIsXG4gIFJlc2VuZEFwcHJvdmVyRW1haWxRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL3Jlc2VuZC1hcHByb3ZhbC1lbWFpbC5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUNoZWNrSWZCYXNrZXRSZXF1aXJlc0FwcHJvdmFsRmV0Y2hlcixcbiAgQ2hlY2tJZkJhc2tldFJlcXVpcmVzQXBwcm92YWxGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9jaGVjay1pZi1iYXNrZXQtcmVxdWlyZXMtYXBwcm92YWwnO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0RHJhZnRCYXNrZXRzRmV0Y2hlcixcbiAgRHJhZnRCYXNrZXRzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWRyYWZ0LWJhc2tldHMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VDcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyLFxuICBDcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9jcmVhdGUtYmFza2V0LWZyb20tZHJhZnQtdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRPZmZpY2VBcHByb3ZlcnNGZXRjaGVyLFxuICBHZXRPZmZpY2VBcHByb3ZlcnNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtb2ZmaWNlLWFwcHJvdmVycy5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVNlbGVjdEJhc2tldEFwcHJvdmVyVXBkYXRlcixcbiAgU2VsZWN0QmFza2V0QXBwcm92ZXJNdXRhdGlvblR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2VsZWN0LWJhc2tldC1hcHByb3Zlci51cGRhdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldFVzZXJBcHByb3ZlcnNGZXRjaGVyLFxuICBHZXRVc2VyQXBwcm92ZXJzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItYXBwcm92ZXJzLmZldGNoZXInO1xuXG5pbXBvcnQgeyBVc2VyRmF2b3J1cml0ZSB9IGZyb20gJy4uL2NsYXNzZXMvdXNlci1mYXZvdXJpdGUuZW51bSc7XG5pbXBvcnQgeyBNaUNvbW1hbmQgfSBmcm9tICcuLi9kYXRhL21pLWNvbW1hbmQnO1xuaW1wb3J0IHtcbiAgQmFzZVNlbGVjdEJhc2tldE5vdGlmeUFwcHJvdmVyVXBkYXRlcixcbiAgU2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJNdXRhdGlvblR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2VsZWN0LWJhc2tldC1ub3RpZnktYXBwcm92ZXIudXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VSZXF1aXJlc092ZXJyaWRlUmVhc29uU2VydmljZSxcbiAgUmVxdWlyZXNPdmVycmlkZVJlYXNvblNlcnZpY2VJbnRlcmZhY2Vcbn0gZnJvbSAnLi9yZXF1aXJlcy1vdmVycmlkZS1yZWFzb24uc2VydmljZSc7XG5cbmltcG9ydCB7XG4gIEJhc2VDYW5BbWVuZEJvb2tpbmdGZXRjaGVyLFxuICBDYW5BbWVuZEJvb2tpbmdUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2Nhbi1hbWVuZC1ib29raW5nLmZldGNoZXInO1xuXG5pbXBvcnQgeyBCYXNlU2hhcmVCYXNrZXRVcGRhdGVyLCBTaGFyZUJhc2tldFVwZGF0ZXJUeXBlIH0gZnJvbSAnLi4vdXBkYXRlcnMvc2hhcmUtYmFza2V0LnVwZGF0ZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0VXNlclNoYXJlZEJhc2tldHNGZXRjaGVyLFxuICBHZXRVc2VyU2hhcmVkQmFza2V0c0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLXNoYXJlZC1iYXNrZXRzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0VHJhaW5TZWF0bWFwRmV0Y2hlcixcbiAgR2V0VHJhaW5TZWF0bWFwRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXRyYWluLXNlYXRtYXAuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VTZWxlY3RCYXNrZXRNdWx0aUxldmVsQXBwcm92ZXJzVXBkYXRlcixcbiAgU2VsZWN0QmFza2V0TXVsdGlMZXZlbEFwcHJvdmVyc011dGF0aW9uVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9zZWxlY3QtYmFza2V0LW11bHRpLWxldmVsLWFwcHJvdmVycy51cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VTZWFyY2hNSUF1dG9TdWdnZXN0VmFsdWVzRmV0Y2hlcixcbiAgU2VhcmNoTUlBdXRvU3VnZ2VzdFZhbHVlc0ZldGNoZXJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLW1pLWF1dG8tc3VnZ2VzdC12YWx1ZXMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VWYWxpZGF0ZUJhc2tldE1pRmV0Y2hlcixcbiAgVmFsaWRhdGVCYXNrZXRNaUZldGNoZXJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvdmFsaWRhdGUtYmFza2V0LW1pLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlVmFsaWRhdGVCYXNrZXRJdGVtTWlGZXRjaGVyLFxuICBWYWxpZGF0ZUJhc2tldEl0ZW1NaUZldGNoZXJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvdmFsaWRhdGUtYmFza2V0LWl0ZW0tbWkuZmV0Y2hlcic7XG5cbmltcG9ydCB7IEJhc2VTZXRNSVZhbHVlc1VwZGF0ZXIsIFNldE1JVmFsdWVzVXBkYXRlciB9IGZyb20gJy4uL3VwZGF0ZXJzL3NldC1taS12YWx1ZXMudXBkYXRlcic7XG5cbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcbi8vIGltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmFzZUJlZm9yZUFtZW5kQ2FiU2VhcmNoUXVvdGVGZXRjaGVyLFxuICBCZWZvcmVBbWVuZENhYlNlYXJjaFF1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYmVmb3JlLWFtZW5kLWNhYi1zZWFyY2gtcXVvdGUtZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlU2VuZEJhY2tUb1F1ZXVlVXBkYXRlcixcbiAgU2VuZEJhY2tUb1F1ZXVlTXV0YXRpb25UeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NlbmQtYmFjay10by1xdWV1ZS11cGRhdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldEJhc2tldENvMkluZm9GZXRjaGVyLFxuICBHZXRCYXNrZXRDbzJGZXRjaGVySW5mb1R5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYmFza2V0LWNvMi5mZXRjaGVyJztcbmltcG9ydCB7IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZCB9IGZyb20gJy4uL2NsYXNzZXMvbWFuYWdlbWVudC1pbmZvLWFuZC12YWxpZCc7XG5pbXBvcnQgeyBGbGlnaHRKb3VybmV5VHlwZSB9IGZyb20gJy4uL2NsYXNzZXMvZmxpZ2h0LWpvdXJuZXktdHlwZS10eXBlLmVudW0nO1xuaW1wb3J0IHtcbiAgQmFzZUJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaEZldGNoZXIsXG4gIEJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaEZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2JlZm9yZS1hbWVuZC1jYXItaGlyZS1zZWFyY2guZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlR2V0TUlBcHByb3ZlcnNGZXRjaGVyLFxuICBHZXRNSUFwcHJvdmVyc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1taS1hcHByb3ZlcnMuZmV0Y2hlcic7XG5cbmNvbnN0IFRFTVBJRCA9ICdURU1QSURfJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXNrZXRBbmRJdGVtIHtcbiAgYmFza2V0SWQ6IHN0cmluZztcbiAgaXRlbTogQmFza2V0SXRlbTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWlHcm91cERldGFpbCB7XG4gIHR5cGU6IFNlcnZpY2VUeXBlO1xuICBvcHRpb25zOiBzdHJpbmdbXTtcbiAgYmFza2V0SXRlbTogQmFza2V0SXRlbTtcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNrZXRJbmZvcm1hdGlvbiB7XG4gIHByaWNlczogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfTtcbiAgbWl4ZWRDdXJyZW5jeTogYm9vbGVhbjtcbiAgY291bnQ6IG51bWJlcjtcbiAgbWlHcm91cHM6IE1pR3JvdXBEZXRhaWxbXTtcbiAgYmFza2V0SW5mb01pRGV0YWlsczogQmFza2V0SW5mb01pRGV0YWlsc0ltcGxbXTtcbiAgc3VwcEluZm86IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZVtdO1xuICByZXF1aXJlc1NlbGVjdGVkQXBwcm92ZXI/OiBib29sZWFuO1xuICByZXF1aXJlc1NlbGVjdGVkTWlBcHByb3Zlcj86IGJvb2xlYW47XG4gIHJlcXVpcmVzU2VsZWN0ZWROb3RpZnlBcHByb3Zlcj86IGJvb2xlYW47XG4gIHJlcXVpcmVzU2VsZWN0ZWROb3RpZnlBcHByb3ZlclBlck1pPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNrZXRQcmljZXNMaXN0IHtcbiAgdHlwZTogU2VydmljZVR5cGU7XG4gIHByaWNlOiBudW1iZXI7XG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGNvMjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2tldFByaWNlcyB7XG4gIHRvdGFsOiBudW1iZXI7XG4gIHRvdGFsQ28yOiBudW1iZXI7XG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xuICBsaXN0OiBCYXNrZXRQcmljZXNMaXN0W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFza2V0U2VsZWN0ZWRBcHByb3ZlciB7XG4gIHNlbGVjdGVkQXBwcm92ZXI/OiBVc2VyO1xuICBzZWxlY3RlZE5vdGlmeUFwcHJvdmVyPzogVXNlcjtcbiAgYXBwcm92ZXJzPzogYW55W107XG59XG5cbmV4cG9ydCB0eXBlIEJhc2tldERldGFpbHMgPSBVc2VyQmFza2V0UmVzdWx0ICYgQmFza2V0SW5mb3JtYXRpb247XG5leHBvcnQgY2xhc3MgSW50ZXJuYWxCYXNrZXQ8USBleHRlbmRzIFNlYXJjaEdldFVzZXJGZXRjaGVyVHlwZT5cbiAgaW1wbGVtZW50cyBCYXNrZXRJbmZvcm1hdGlvbiwgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2VcbntcbiAgc3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PEJhc2tldERldGFpbHM+O1xuICBwcml2YXRlIF9iYXNrZXRTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8QmFza2V0RGV0YWlscz47XG4gIGlkPzogc3RyaW5nO1xuICB0ZW1waWQ/OiBzdHJpbmc7XG4gIHJlcXVpcmVzU2VsZWN0ZWRBcHByb3Zlcj86IGJvb2xlYW47XG4gIHJlcXVpcmVzU2VsZWN0ZWRNaUFwcHJvdmVyPzogYm9vbGVhbjtcbiAgcmVxdWlyZXNTZWxlY3RlZE5vdGlmeUFwcHJvdmVyPzogYm9vbGVhbjtcbiAgcmVxdWlyZXNTZWxlY3RlZE5vdGlmeUFwcHJvdmVyUGVyTWk/OiBib29sZWFuO1xuICB0aXRsZTogc3RyaW5nO1xuICBwcmljZXM6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH07XG4gIG1peGVkQ3VycmVuY3k6IGJvb2xlYW47XG4gIGxvd2VzdFByaWNlOiBudW1iZXI7XG4gIGNvdW50OiBudW1iZXI7XG4gIG1pR3JvdXBzOiBNaUdyb3VwRGV0YWlsW107XG4gIGJhc2tldEluZm9NaURldGFpbHM6IGFueVtdO1xuICBzdXBwSW5mbzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlW107XG4gIGdyYW5kVG90YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH07XG4gIG5lZWRzVG9WaWV3TWk6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhc2tldDogVXNlckJhc2tldFJlc3VsdCxcbiAgICBwcml2YXRlIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgZ2V0VXNlckZldGNoZXI6IEJhc2VHZXRVc2VyRmV0Y2hlcjxRPixcbiAgICBwcml2YXRlIHJlcXVpcmVzU2VydmljZTogQmFzZVJlcXVpcmVzUmVhc29uU2VydmljZSxcbiAgICBwcml2YXRlIHJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlOiBCYXNlUmVxdWlyZXNPdmVycmlkZVJlYXNvblNlcnZpY2VcbiAgKSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7XG4gICAgICBzdWJqZWN0OiBuZXcgQmVoYXZpb3JTdWJqZWN0PEJhc2tldERldGFpbHM+KHtcbiAgICAgICAgLi4uYmFza2V0LFxuICAgICAgICBwcmljZXM6IHt9LFxuICAgICAgICBtaXhlZEN1cnJlbmN5OiBmYWxzZSxcbiAgICAgICAgY291bnQ6IDAsXG4gICAgICAgIG1pR3JvdXBzOiBbXSxcbiAgICAgICAgYmFza2V0SW5mb01pRGV0YWlsczogW10sXG4gICAgICAgIHN1cHBJbmZvOiBbXVxuICAgICAgfSksXG4gICAgICBfYmFza2V0U3ViamVjdDogbmV3IEJlaGF2aW9yU3ViamVjdDxCYXNrZXREZXRhaWxzPih7XG4gICAgICAgIC4uLmJhc2tldCxcbiAgICAgICAgcHJpY2VzOiB7fSxcbiAgICAgICAgbWl4ZWRDdXJyZW5jeTogZmFsc2UsXG4gICAgICAgIGNvdW50OiAwLFxuICAgICAgICBtaUdyb3VwczogW10sXG4gICAgICAgIGJhc2tldEluZm9NaURldGFpbHM6IFtdLFxuICAgICAgICBzdXBwSW5mbzogW11cbiAgICAgIH0pLFxuICAgICAgdGVtcGlkOiBiYXNrZXQuaWQsXG4gICAgICBpZDogYmFza2V0LmlkLFxuICAgICAgdGl0bGU6IGJhc2tldC50aXRsZSxcbiAgICAgIHByaWNlczoge30sXG4gICAgICBtaXhlZEN1cnJlbmN5OiBmYWxzZSxcbiAgICAgIGNvdW50OiAwLFxuICAgICAgbWlHcm91cHM6IFtdLFxuICAgICAgYmFza2V0SW5mb01pRGV0YWlsczogW10sXG4gICAgICBzdXBwSW5mbzogW11cbiAgICB9KTtcblxuICAgIHRoaXMuX2Jhc2tldFN1YmplY3QucGlwZShkZWJvdW5jZVRpbWUoNTAwKSkuc3Vic2NyaWJlKFxuICAgICAgZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuc3ViamVjdC5uZXh0KGRhdGEpO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRoaXMuc3ViamVjdC5lcnJvcihlcnIpO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLm5leHQoYmFza2V0KTtcbiAgfVxuXG4gIGRlc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gIH1cblxuICBuZXh0KGJhc2tldDogVXNlckJhc2tldFJlc3VsdCwgaXNBZ2VudDogYm9vbGVhbiA9IG51bGwsIGJhc2tldEl0ZW1JZDogc3RyaW5nID0gJycpIHtcbiAgICAvLyByZXBsYWNpbmcgd2l0aCBhIHNoYWxsb3cgY2xvbmUgZm9yIEVOVC04NTM0LCBtaWdodCBXb3JrZXIsIG1pZ2h0IGJyZWFrIHNvbWV0aGluZyBlbHNlLiBJIHdhbnQgdG8gdXNlIF8uY2xvbmVEZWVwV2l0aFxuICAgIC8vIGJhc2tldCA9IF8uY2xvbmUoYmFza2V0KTtcblxuICAgIGlmIChiYXNrZXQuc3RhdHVzID09PSBCYXNrZXRTdGF0dXMuQm9va2VkIHx8IGJhc2tldC5zdGF0dXMgPT09IEJhc2tldFN0YXR1cy5Bd2FpdGluZ0FwcHJvdmFsKSB7XG4gICAgICBiYXNrZXQgPSB0aGlzLmhlbHBlcnMuY2xvbmUoYmFza2V0KTtcbiAgICAgIGJhc2tldCA9IHRoaXMuaGVscGVycy5tZXJnZU9iamVjdHModGhpcy5fYmFza2V0U3ViamVjdC52YWx1ZSwgYmFza2V0KTtcbiAgICB9XG4gICAgdGhpcy5pZCA9IGJhc2tldC5pZDtcbiAgICB0aGlzLnRpdGxlID0gYmFza2V0LnRpdGxlO1xuICAgIGNvbnN0IHRvU2VuZDogQmFza2V0RGV0YWlscyA9IHtcbiAgICAgIC4uLmJhc2tldCwgLy8gU3ByZWFkIHRoZSBleGlzdGluZyBwcm9wZXJ0aWVzIG9mIGJhc2tldFxuICAgICAgLi4uKGJhc2tldC5iYXNrZXRJdGVtcyB8fCBbXSkucmVkdWNlKFxuICAgICAgICAoYWNjdW06IEJhc2tldEluZm9ybWF0aW9uLCBpdGVtOiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKCFhY2N1bS5wcmljZXNbaXRlbS5jdXJyZW5jeV0pIHtcbiAgICAgICAgICAgIGFjY3VtLnByaWNlc1tpdGVtLmN1cnJlbmN5XSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vICEgLSBOZWVkcyB0byBiZSBpdGVtLnByaWNlIGFzIHRoYXQgY29udGFpbnMgYW55IG1hcmt1cHNcbiAgICAgICAgICBhY2N1bS5wcmljZXNbaXRlbS5jdXJyZW5jeV0gKz0gaXRlbS5wcmljZTtcbiAgICAgICAgICBhY2N1bS5zdXBwSW5mby5wdXNoKFxuICAgICAgICAgICAgbmV3IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ltcGwoXG4gICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIHRoaXMuYmFza2V0U2VydmljZSxcbiAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLFxuICAgICAgICAgICAgICB0aGlzLmdldFVzZXJGZXRjaGVyXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChpdGVtLm1hbmFnZW1lbnRJbmZvPy5sZW5ndGggPiAwICYmIChpdGVtLnVzZXJzPy5sZW5ndGggPiAwIHx8IGl0ZW0uZ3Vlc3RzPy5sZW5ndGgpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnKysrIENyZWF0aW5nIE1JIEltcGxlbWVudGF0aW9uICsrKycpO1xuICAgICAgICAgICAgYWNjdW0uYmFza2V0SW5mb01pRGV0YWlscy5wdXNoKG5ldyBCYXNrZXRJbmZvTWlEZXRhaWxzSW1wbChpdGVtLCB0aGlzLmJhc2tldFNlcnZpY2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJpY2VzOiB7fSxcbiAgICAgICAgICBtaXhlZEN1cnJlbmN5OiBmYWxzZSxcbiAgICAgICAgICBjb3VudDogYmFza2V0LmJhc2tldEl0ZW1zPy5sZW5ndGggfHwgMCxcbiAgICAgICAgICBtaUdyb3VwczogW10sXG4gICAgICAgICAgYmFza2V0SW5mb01pRGV0YWlsczogW10sXG4gICAgICAgICAgc3VwcEluZm86IFtdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9O1xuICAgIHRvU2VuZC5taXhlZEN1cnJlbmN5ID0gT2JqZWN0LmtleXModG9TZW5kLnByaWNlcykubGVuZ3RoID4gMTtcbiAgICB0aGlzLl9iYXNrZXRTdWJqZWN0Lm5leHQodG9TZW5kKTtcblxuICAgIGlmIChiYXNrZXQuYmFza2V0SXRlbXMuZXZlcnkoaXRlbSA9PiBpdGVtPy5kZXRhaWw/Lm91dHdhcmREZXRhaWw/LnNwbGl0SUQpKSB7XG4gICAgICBpZiAoIShiYXNrZXQuYmFza2V0SXRlbXMubGVuZ3RoICUgMikpIHtcbiAgICAgICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UuYWRkQmFza2V0SXRlbShiYXNrZXQsIGJhc2tldEl0ZW1JZCk7XG4gICAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2UuYWRkQmFza2V0SXRlbShiYXNrZXQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlcXVpcmVzU2VydmljZS5hZGRCYXNrZXRJdGVtKGJhc2tldCwgYmFza2V0SXRlbUlkKTtcbiAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2UuYWRkQmFza2V0SXRlbShiYXNrZXQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUVudGVycHJpc2VCYXNrZXRTZXJ2aWNlPFxuICBBTlBVX1EgZXh0ZW5kcyBBY2NlcHROZXdQcmljZUZldGNoZXJUeXBlLFxuICBBSVRCX1EgZXh0ZW5kcyBBZGRJdGVtVG9CYXNrZXRGZXRjaGVyVHlwZSxcbiAgQVVUQl9RIGV4dGVuZHMgQWRkVXNlckJhc2tldEZldGNoZXJUeXBlLFxuICBDQl9RIGV4dGVuZHMgQ3JlYXRlQmFza2V0RmV0Y2hlclR5cGUsXG4gIEdCX1EgZXh0ZW5kcyBHZXRCYXNrZXRGZXRjaGVyVHlwZSxcbiAgQkJfUSBleHRlbmRzIEJvb2tCYXNrZXRGZXRjaGVyVHlwZSxcbiAgREJfUSBleHRlbmRzIERlbGV0ZUJhc2tldEZldGNoZXJUeXBlLFxuICBSSUJfUSBleHRlbmRzIERlbGV0ZUJhc2tldEl0ZW1GZXRjaGVyVHlwZSxcbiAgUlZCX1EgZXh0ZW5kcyBSZXZhbGlkYXRlQmFza2V0RmV0Y2hlclR5cGUsXG4gIEdVX1EgZXh0ZW5kcyBTZWFyY2hHZXRVc2VyRmV0Y2hlclR5cGUsXG4gIEdVQl9RIGV4dGVuZHMgR2V0VXNlckJhc2tldHNGZXRjaGVyVHlwZSxcbiAgU0JMUF9RIGV4dGVuZHMgU2V0QmFza2V0SXRlbUxlYWRQYXNzZW5nZXJGZXRjaGVyVHlwZSxcbiAgTUlUREJfUSBleHRlbmRzIE1vdmVJdGVtVG9BRGlmZmVyZW50QmFza2V0VHlwZSxcbiAgVUJOX1EgZXh0ZW5kcyBCYXNlVXBkYXRlQmFza2V0Tm90ZXNUeXBlLFxuICBVQlRfUSBleHRlbmRzIEJhc2VVcGRhdGVCYXNrZXRUaXRsZVR5cGUsXG4gIFNCTV9RIGV4dGVuZHMgU2V0QmFza2V0SXRlbVBheW1lbnRNZXRob2RUeXBlLFxuICBHQ0lfUSBleHRlbmRzIEdldENhbmNlbGxhdGlvbkluZm9UeXBlLFxuICBBR1RCX1EgZXh0ZW5kcyBBZGRHdWVzdEJhc2tldEZldGNoZXJUeXBlLFxuICBBVUlCX1EgZXh0ZW5kcyBBZGRVcGRhdGVkSXRlbVRvQmFza2V0VXBkYXRlclR5cGUsXG4gIENCTl9RIGV4dGVuZHMgQ3JlYXRlQmFza2V0Tm90ZVVwZGF0ZXJUeXBlLFxuICBHQk5GX1EgZXh0ZW5kcyBHZXRCYXNrZXROb3Rlc0ZldGNoZXJUeXBlLFxuICBHQkFUX1EgZXh0ZW5kcyBHZXRCYXNrZXRBcHByb3ZhbFRpbWVzdGFtcHNGZXRjaGVyVHlwZSxcbiAgQU1fUSBleHRlbmRzIEFkZEJhc2tldEl0ZW1NYXJrdXBUeXBlLFxuICBBQklDUl9RIGV4dGVuZHMgQWRkQmFza2V0SXRlbUN1c3RvbVJlbWFya1VwZGF0ZXJUeXBlLFxuICBHQklDX1EgZXh0ZW5kcyBHZXRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrc0ZldGNoZXJUeXBlLFxuICBDQk9VX1EgZXh0ZW5kcyBDaGFuZ2VCYXNrZXRPd25lcnNoaXBVcGRhdGVyVHlwZSxcbiAgR0JRRl9RIGV4dGVuZHMgR2V0QmFza2V0UXVvdGVGZXRjaGVyVHlwZSxcbiAgUkFFX1EgZXh0ZW5kcyBSZXNlbmRBcHByb3ZlckVtYWlsUXVvdGVGZXRjaGVyVHlwZSxcbiAgQ0lCUkFfUSBleHRlbmRzIENoZWNrSWZCYXNrZXRSZXF1aXJlc0FwcHJvdmFsRmV0Y2hlclR5cGUsXG4gIEdPQUZfUSBleHRlbmRzIEdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXJUeXBlLFxuICBTQkFfVSBleHRlbmRzIFNlbGVjdEJhc2tldEFwcHJvdmVyTXV0YXRpb25UeXBlLFxuICBHREJfUSBleHRlbmRzIERyYWZ0QmFza2V0c0ZldGNoZXJUeXBlLFxuICBDQkZEX1EgZXh0ZW5kcyBDcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyVHlwZSxcbiAgU0JOQV9VIGV4dGVuZHMgU2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJNdXRhdGlvblR5cGUsXG4gIENBQl9RIGV4dGVuZHMgQ2FuQW1lbmRCb29raW5nVHlwZSxcbiAgR1VBRl9RIGV4dGVuZHMgR2V0VXNlckFwcHJvdmVyc0ZldGNoZXJUeXBlLFxuICBHTUFGX1EgZXh0ZW5kcyBHZXRNSUFwcHJvdmVyc0ZldGNoZXJUeXBlLFxuICBTQlVfUSBleHRlbmRzIFNoYXJlQmFza2V0VXBkYXRlclR5cGUsXG4gIEdVU0JfUSBleHRlbmRzIEdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlclR5cGUsXG4gIEdUU01fUSBleHRlbmRzIEdldFRyYWluU2VhdG1hcEZldGNoZXJUeXBlLFxuICBCQVNfUSBleHRlbmRzIEJlZm9yZUFtZW5kQ2FiU2VhcmNoUXVvdGVGZXRjaGVyVHlwZSxcbiAgQkFDSFNfUSBleHRlbmRzIEJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaEZldGNoZXJUeXBlLFxuICBTQlRRX1UgZXh0ZW5kcyBTZW5kQmFja1RvUXVldWVNdXRhdGlvblR5cGUsXG4gIEdCQ19GIGV4dGVuZHMgR2V0QmFza2V0Q28yRmV0Y2hlckluZm9UeXBlLFxuICBTQk1MQV9VIGV4dGVuZHMgU2VsZWN0QmFza2V0TXVsdGlMZXZlbEFwcHJvdmVyc011dGF0aW9uVHlwZSxcbiAgVkJNX0YgZXh0ZW5kcyBWYWxpZGF0ZUJhc2tldE1pRmV0Y2hlcixcbiAgVkJJTV9GIGV4dGVuZHMgVmFsaWRhdGVCYXNrZXRJdGVtTWlGZXRjaGVyLFxuICBTTVZfVSBleHRlbmRzIFNldE1JVmFsdWVzVXBkYXRlcixcbiAgU01BU19GIGV4dGVuZHMgU2VhcmNoTUlBdXRvU3VnZ2VzdFZhbHVlc0ZldGNoZXJcbj4gaW1wbGVtZW50cyBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZVxue1xuICBwdWJsaWMgYmFza2V0VXBkYXRpbmcgPSBmYWxzZTtcblxuICBwcml2YXRlIGN1cnJlbnRCYXNrZXRzOiBJbnRlcm5hbEJhc2tldDxHVV9RPltdID0gW107XG4gIGF3YWl0aW5nQXBwcm92YWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBoaWdobGlnaHRCYXNrZXRJdGVtc0VtaXR0ZXI6IFN1YmplY3Q8R2V0VXNlckJhc2tldEl0ZW1SZXN1bHRbXT4gPSBuZXcgU3ViamVjdDxcbiAgICBHZXRVc2VyQmFza2V0SXRlbVJlc3VsdFtdXG4gID4oKTtcbiAgbG9hZGluZ1N1cHBsZW1lbnRhcnlCb29raW5nSW5mbzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGJhc2tldENoYW5nZUVtaXR0ZXI6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgYWRkaW5nVG9CYXNrZXQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZW1vdmluZ0Zyb21CYXNrZXQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBkZWxldGluZ0Jhc2tldDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGF1dG9TdWdnZXN0RGVmYXVsdHNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgY3JlYXRpbmdOZXdCYXNrZXQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc0RpYWxvZ09wZW46IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBtaVVwZGF0aW5nOiBCZWhhdmlvclN1YmplY3Q8Qm9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVxdWlyZU5ld0dVVEJhc2tldDogQmVoYXZpb3JTdWJqZWN0PEJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGNsZWFyUmFpbFNlYXRzOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICBzZWxlY3RlZEJhc2tldElkOiBzdHJpbmcgPSAnJztcbiAgbmV3SW52b2tlZEJhc2tldElkOiBzdHJpbmc7XG4gIHVwZGF0aW5nQmFza2V0ID0gZmFsc2U7XG4gIF9pc0FwcHJvdmVkQmFza2V0OiBib29sZWFuID0gZmFsc2U7XG4gIF9taXNzaW5nTUlzOiBWYWxpZGF0aW9uUmVzcG9uc2VbXSA9IFtdO1xuICBtaVZpZXdlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBsb2FkaW5nQ2FuY2VsbGVkSW5mbyA9IGZhbHNlO1xuICBnZXQgaXNBcHByb3ZlZEJhc2tldCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNBcHByb3ZlZEJhc2tldDtcbiAgfVxuXG4gIHNldCBpc0FwcHJvdmVkQmFza2V0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNBcHByb3ZlZEJhc2tldCA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgZ2V0IGN1cnJlbnRCYXNrZXRJRCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2tldENoYW5nZUVtaXR0ZXIudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHNldCBjdXJyZW50QmFza2V0SUQodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5jdXJyZW50QmFza2V0SUQpIHtcbiAgICAgIC8vIHRoaXMgcHJldmVudHMgdGhlIGVtaXR0ZXIgZ2V0dGluZyBzdHVjayBpbiBhIGxvb3AgIC0gY2FzdWluZyBicm93c2VyIG92ZXJsb2Fkc1xuICAgICAgdGhpcy5taVZpZXdlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5iYXNrZXRDaGFuZ2VFbWl0dGVyLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtaXNzaW5nTUlzKCk6IFZhbGlkYXRpb25SZXNwb25zZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fbWlzc2luZ01JcztcbiAgfVxuXG4gIHNldCBtaXNzaW5nTUlzKGRhdGE6IFZhbGlkYXRpb25SZXNwb25zZVtdKSB7XG4gICAgdGhpcy5fbWlzc2luZ01JcyA9IGRhdGE7XG4gIH1cblxuICBiYXNrZXRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJbnRlcm5hbEJhc2tldDxHVV9RPltdPihbXSk7XG5cbiAgYmFza2V0TGlzdDogQmFza2V0UHJpY2VzTGlzdFtdID0gW1xuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkZsaWdodCxcbiAgICAgIHRleHQ6ICdGTElHSFRTJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5SYWlsLFxuICAgICAgdGV4dDogJ1JBSUwnLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkhvdGVsLFxuICAgICAgdGV4dDogJ0hPVEVMUycsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuQ2FiLFxuICAgICAgdGV4dDogJ1RBWElTJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5DYXIsXG4gICAgICB0ZXh0OiAnQ0FSUycsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuRXVyb3N0YXIsXG4gICAgICB0ZXh0OiAnRVVST1NUQVInLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsLFxuICAgICAgdGV4dDogJ0lOVEVSTkFUSU9OQUwgUkFJTCcsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuUGFya2luZyxcbiAgICAgIHRleHQ6ICdQQVJLSU5HJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5Mb3VuZ2UsXG4gICAgICB0ZXh0OiAnTE9VTkdFUycsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuQ29hY2gsXG4gICAgICB0ZXh0OiAnQ09BQ0gnLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkZhc3RUcmFjayxcbiAgICAgIHRleHQ6ICdGQVNUX1RSQUNLJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfVxuICBdO1xuXG4gIGJhc2tldFByaWNlczogQmVoYXZpb3JTdWJqZWN0PEJhc2tldFByaWNlcz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJhc2tldFByaWNlcz4oe1xuICAgIHRvdGFsOiBudWxsLFxuICAgIHRvdGFsQ28yOiBudWxsLFxuICAgIGxpc3Q6IHRoaXMuYmFza2V0TGlzdFxuICB9KTtcblxuICBtZW51U3RhdGUgPSBNZW51U2xpZGVFbnVtLk9VVDtcbiAgLy8gY2hlY2tBcHByb3Zlck1vZGFsQ2xvc2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHJpdmF0ZSByZXF1aXJlc1NlcnZpY2U6IEJhc2VSZXF1aXJlc1JlYXNvblNlcnZpY2U7XG4gIHByaXZhdGUgcmVxdWlyZXNPdmVycmlkZVNlcnZpY2U6IEJhc2VSZXF1aXJlc092ZXJyaWRlUmVhc29uU2VydmljZTtcbiAgcHJpdmF0ZSB1c2VyQ3VycmVuY3kgPSAnR0JQJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjY2VwdE5ld1ByaWNlVXBkYXRlcjogQmFzZUFjY2VwdE5ld1ByaWNlVXBkYXRlcjxBTlBVX1E+LFxuICAgIHByaXZhdGUgYWRkSXRlbVRvQmFza2V0VXBkYXRlcjogQmFzZUFkZEl0ZW1Ub0Jhc2tldFVwZGF0ZXI8QUlUQl9RPixcbiAgICBwcml2YXRlIGFkZFVzZXJUb0Jhc2tldEl0ZW06IEJhc2VBZGRVc2VyVG9CYXNrZXRJdGVtVXBkYXRlcjxBVVRCX1E+LFxuICAgIHByaXZhdGUgYmFza2V0Q3JlYXRvcjogQmFzZUNyZWF0ZUJhc2tldFVwZGF0ZXI8Q0JfUT4sXG4gICAgcHVibGljIGJhc2tldEZldGNoZXI6IEJhc2VHZXRCYXNrZXRGZXRjaGVyPEdCX1E+LFxuICAgIHByaXZhdGUgYm9va0Jhc2tldFVwZGF0ZXI6IEJhc2VCb29rQmFza2V0VXBkYXRlcjxCQl9RPixcbiAgICBwcml2YXRlIGRlbGV0ZUJhc2tldFVwZGF0ZXI6IEJhc2VEZWxldGVCYXNrZXRVcGRhdGVyPERCX1E+LFxuICAgIHByaXZhdGUgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxuICAgIHByaXZhdGUgcmVtb3ZlSXRlbUZyb21CYXNrZXRVcGRhdGVyOiBCYXNlUmVtb3ZlSXRlbUZyb21CYXNrZXRVcGRhdGVyPFJJQl9RPixcbiAgICBwcml2YXRlIHJldmFsaWRhdGVCYXNrZXRVcGRhdGVyOiBCYXNlUmV2YWxpZGF0ZUJhc2tldFVwZGF0ZXI8UlZCX1E+LFxuICAgIHByaXZhdGUgZ2V0VXNlckZldGNoZXI6IEJhc2VHZXRVc2VyRmV0Y2hlcjxHVV9RPixcbiAgICBwcml2YXRlIGdldFVzZXJCYXNrZXRzRmV0Y2hlcjogQmFzZUdldFVzZXJCYXNrZXRzRmV0Y2hlcjxHVUJfUT4sXG4gICAgcHJpdmF0ZSBTZXRCYXNrZXRJdGVtTGVhZFBhc3NlbmdlcjogQmFzZVNldEJhc2tldEl0ZW1MZWFkUGFzc2VuZ2VyVXBkYXRlcjxTQkxQX1E+LFxuICAgIHByaXZhdGUgbW92ZUl0ZW1Ub0FEaWZmZXJlbnRCYXNrZXQ6IEJhc2Vtb3ZlQmFza2V0SXRlbVRvQmFza2V0PE1JVERCX1E+LFxuICAgIHByaXZhdGUgdXBkYXRlQmFza2V0Tm90ZXNVcGRhdGVyOiBCYXNlVXBkYXRlQmFza2V0Tm90ZVVwZGF0ZXI8VUJOX1E+LFxuICAgIHByaXZhdGUgdXBkYXRlQmFza2V0VGl0bGVVcGRhdGVyOiBCYXNlVXBkYXRlQmFza2V0VGl0bGVVcGRhdGVyPFVCVF9RPixcbiAgICBwcml2YXRlIHNldFBheW1lbnRNZXRob2RVcGRhdGVyOiBCYXNlU2V0UGF5bWVudE9wdGlvblVwZGF0ZXI8U0JNX1E+LFxuICAgIHByaXZhdGUgZ2V0Q2FuY2VsbGF0aW9uSW5mb0ZldGNoZXI6IEJhc2VHZXRDYW5jZWxsYXRpb25JbmZvRmV0Y2hlcjxHQ0lfUT4sXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhZGRHdWVzdFRvQmFza2V0SXRlbTogQmFzZUFkZEd1ZXN0VG9CYXNrZXRJdGVtVXBkYXRlcjxBR1RCX1E+LFxuICAgIHByaXZhdGUgYWRkVXBkYXRlZEl0ZW1Ub0Jhc2tldFVwZGF0ZXI6IEJhc2VBZGRVcGRhdGVkSXRlbVRvQmFza2V0VXBkYXRlcjxBVUlCX1E+LFxuICAgIHByaXZhdGUgY3JlYXRlQmFza2V0Tm90ZTogQmFzZUNyZWF0ZUJhc2tldE5vdGVVcGRhdGVyPENCTl9RPixcbiAgICBwcml2YXRlIGdldEJhc2tldE5vdGVzOiBCYXNlR2V0QmFza2V0Tm90ZXNGZXRjaGVyPEdCTkZfUT4sXG4gICAgcHJpdmF0ZSBnZXRCYXNrZXRBcHByb3ZhbFRpbWVzdGFtcHNGZXRjaGVyOiBCYXNlR2V0QmFza2V0QXBwcm92YWxUaW1lc3RhbXBzRmV0Y2hlcjxHQkFUX1E+LFxuICAgIHByaXZhdGUgYWRkQmFza2V0SXRlbU1hcmt1cFVwZGF0ZXI6IEJhc2VBZGRCYXNrZXRJdGVtTWFya3VwVXBkYXRlcjxBTV9RPixcbiAgICBwcml2YXRlIGFkZEJhc2tldEl0ZW1DdXN0b21SZW1hcms6IEJhc2VBZGRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrVXBkYXRlcjxBQklDUl9RPixcbiAgICBwcml2YXRlIGdldEJhc2tldEl0ZW1DdXN0b21SZW1hcmtzOiBCYXNlR2V0QmFza2V0SXRlbUN1c3RvbVJlbWFya3NGZXRjaGVyPEdCSUNfUT4sXG4gICAgcHJpdmF0ZSBjaGFuZ2VCYXNrZXRPd25lcnNoaXBVcGRhdGVyOiBCYXNlQ2hhbmdlQmFza2V0T3duZXJzaGlwVXBkYXRlcjxDQk9VX1E+LFxuICAgIHByaXZhdGUgZ2V0QmFza2V0UXVvdGVGZXRjaGVyOiBCYXNlR2V0QmFza2V0UXVvdGVGZXRjaGVyPEdCUUZfUT4sXG4gICAgcHJpdmF0ZSByZXNlbmRBcHByb3ZlckVtYWlsOiBCYXNlUmVzZW5kQXBwcm92ZXJFbWFpbEZldGNoZXI8UkFFX1E+LFxuICAgIHByaXZhdGUgYmFza2V0UmVxdWlyZXNBcHByb3ZhbDogQmFzZUNoZWNrSWZCYXNrZXRSZXF1aXJlc0FwcHJvdmFsRmV0Y2hlcjxDSUJSQV9RPixcbiAgICBwcml2YXRlIGdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXI6IEJhc2VHZXRPZmZpY2VBcHByb3ZlcnNGZXRjaGVyPEdPQUZfUT4sXG4gICAgcHJpdmF0ZSBzZWxlY3RCYXNrZXRBcHByb3ZlclVwZGF0ZXI6IEJhc2VTZWxlY3RCYXNrZXRBcHByb3ZlclVwZGF0ZXI8U0JBX1U+LFxuICAgIHByaXZhdGUgZ2V0RHJhZnRCYXNrZXRzRmV0Y2hlcjogQmFzZUdldERyYWZ0QmFza2V0c0ZldGNoZXI8R0RCX1E+LFxuICAgIHByaXZhdGUgY3JlYXRlQmFza2V0RnJvbURyYWZ0VXBkYXRlcjogQmFzZUNyZWF0ZUJhc2tldEZyb21EcmFmdFVwZGF0ZXI8Q0JGRF9RPixcbiAgICBwcml2YXRlIHNlbGVjdEJhc2tldE5vdGlmeUFwcHJvdmVyVXBkYXRlcjogQmFzZVNlbGVjdEJhc2tldE5vdGlmeUFwcHJvdmVyVXBkYXRlcjxTQk5BX1U+LFxuICAgIHByaXZhdGUgY2FuQW1lbmRCb29raW5nSW5mb0ZldGNoZXI6IEJhc2VDYW5BbWVuZEJvb2tpbmdGZXRjaGVyPENBQl9RPixcbiAgICBwcml2YXRlIGdldFVzZXJBcHByb3ZlcnNGZXRjaGVyOiBCYXNlR2V0VXNlckFwcHJvdmVyc0ZldGNoZXI8R1VBRl9RPixcbiAgICBwcml2YXRlIGdldE1JQXBwcm92ZXJzRmV0Y2hlcjogQmFzZUdldE1JQXBwcm92ZXJzRmV0Y2hlcjxHTUFGX1E+LFxuICAgIHByaXZhdGUgc2hhcmVCYXNrZXRVcGRhdGVyOiBCYXNlU2hhcmVCYXNrZXRVcGRhdGVyPFNCVV9RPixcbiAgICBwcml2YXRlIGdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlcjogQmFzZUdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlcjxHVVNCX1E+LFxuICAgIHByaXZhdGUgZ2V0VHJhaW5TZWF0TWFwRmV0Y2hlcjogQmFzZUdldFRyYWluU2VhdG1hcEZldGNoZXI8R1RTTV9RPixcbiAgICBwcml2YXRlIGJlZm9yZUFtZW5kQ2FiU2VhcmNoZmV0Y2hlcjogQmFzZUJlZm9yZUFtZW5kQ2FiU2VhcmNoUXVvdGVGZXRjaGVyPEJBU19RPixcbiAgICBwcml2YXRlIGJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaGZldGNoZXI6IEJhc2VCZWZvcmVBbWVuZENhckhpcmVTZWFyY2hGZXRjaGVyPEJBQ0hTX1E+LFxuICAgIHByb3RlY3RlZCBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VuZEJhY2tUb1F1ZXVlVXBkYXRlcjogQmFzZVNlbmRCYWNrVG9RdWV1ZVVwZGF0ZXI8U0JUUV9VPixcbiAgICBwcml2YXRlIGJhc2tldENvMkZldGNoZXI6IEJhc2VHZXRCYXNrZXRDbzJJbmZvRmV0Y2hlcjxHQkNfRj4sXG4gICAgcHJpdmF0ZSBzZWxlY3RCYXNrZXRNdWx0aUxldmVsQXBwcm92ZXJzVXBkYXRlcjogQmFzZVNlbGVjdEJhc2tldE11bHRpTGV2ZWxBcHByb3ZlcnNVcGRhdGVyPFNCTUxBX1U+LFxuICAgIHByaXZhdGUgdmFsaWRhdGVCYXNrZXRNaUZldGNoZXI6IEJhc2VWYWxpZGF0ZUJhc2tldE1pRmV0Y2hlcjxWQk1fRj4sXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUJhc2tldEl0ZW1NaUZldGNoZXI6IEJhc2VWYWxpZGF0ZUJhc2tldEl0ZW1NaUZldGNoZXI8VkJJTV9GPixcbiAgICBwcml2YXRlIHNldE1JVmFsdWVzVXBkYXRlcjogQmFzZVNldE1JVmFsdWVzVXBkYXRlcjxTTVZfVT4sXG4gICAgcHJpdmF0ZSBzZWFyY2hNSUF1dG9TdWdnZXN0VmFsdWVzRmV0Y2hlcjogQmFzZVNlYXJjaE1JQXV0b1N1Z2dlc3RWYWx1ZXNGZXRjaGVyPFNNQVNfRj5cbiAgKSB7XG4gICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UgPSBuZXcgQmFzZVJlcXVpcmVzUmVhc29uU2VydmljZShtb2RhbFNlcnZpY2UsIHRoaXMpO1xuICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2UgPSBuZXcgQmFzZVJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlKG1vZGFsU2VydmljZSwgdGhpcyk7XG4gICAgdGhpcy51c2VyU2VydmljZS5jaGFuZ2VVc2VyLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLmNoYW5nZUJvYm8uc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGFzeW5jICh2YWx1ZTogVHJhdmVsbGVyKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJc0FnZW50KCkgJiYgdGhpcy5jdXJyZW50QmFza2V0cy5sZW5ndGggJiYgIXZhbHVlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVPcGVuSW52b2tlZEJhc2tldHMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2MgLSBkZWxldGVzIGFsbCBvcGVuIGludm9rZWQgYmFza2V0c1xuICAgKi9cbiAgYXN5bmMgZGVsZXRlT3Blbkludm9rZWRCYXNrZXRzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgYmFza2V0IG9mIHRoaXMuY3VycmVudEJhc2tldHMpIHtcbiAgICAgIGNvbnN0IGJhc2tldFZhbHVlID0gYmFza2V0LnN1YmplY3QudmFsdWU7XG4gICAgICBpZiAoYmFza2V0VmFsdWUuaW52b2tlZFVzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVCYXNrZXQoYmFza2V0VmFsdWUuaWQpLnRvUHJvbWlzZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFJlcXVpcmVzUmVhc29uU2VydmljZSgpOiBSZXF1aXJlc1JlYXNvblNlcnZpY2VJbnRlcmZhY2Uge1xuICAgIHJldHVybiB0aGlzLnJlcXVpcmVzU2VydmljZTtcbiAgfVxuXG4gIGdldFJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlKCk6IFJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlSW50ZXJmYWNlIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlc092ZXJyaWRlU2VydmljZTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICAvLyBjb25zb2xlLndhcm4oJysrKyBCYXNrZXQgUmVzZXQgQ2FsbGVkICsrKycpO1xuXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UuZ2V0ZnVsbFVzZXJEZXRhaWxzKGZhbHNlKS51c2VyRGF0YS52YWx1ZSkge1xuICAgICAgLy8gY29uc29sZS53YXJuKCcrKysgRkVUQ0hJTkcgQkFTS0VUIEZST00gUkVTRVQgKysrJyk7XG4gICAgICB0aGlzLmdldFVzZXJCYXNrZXRzRmV0Y2hlclxuICAgICAgICAuZmV0Y2hMaXN0KHtcbiAgICAgICAgICBiYXNrZXRTdGF0dXNlczogW0Jhc2tldFN0YXR1cy5PcGVuXSxcbiAgICAgICAgICB1c2VyOiB0aGlzLnVzZXJTZXJ2aWNlLmdldGZ1bGxVc2VyRGV0YWlscyh0cnVlKS51c2VyRGF0YS52YWx1ZS51c2VyX2lkLnRvU3RyaW5nKClcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoYmFza2V0czogVXNlckJhc2tldFJlc3VsdFtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gdGhpcy5jdXJyZW50QmFza2V0cy5maWx0ZXIoXG4gICAgICAgICAgICAgIChiYXNrZXQ6IEludGVybmFsQmFza2V0PEdVX1E+KSA9PlxuICAgICAgICAgICAgICAgIGJhc2tldC5zdWJqZWN0LnZhbHVlLnN0YXR1cyA9PT0gQmFza2V0U3RhdHVzLk9wZW4gfHxcbiAgICAgICAgICAgICAgICAhYmFza2V0LnN1YmplY3QudmFsdWUuc3RhdHVzIHx8XG4gICAgICAgICAgICAgICAgYmFza2V0LmlkID09PSB0aGlzLmN1cnJlbnRCYXNrZXRJRCB8fFxuICAgICAgICAgICAgICAgIHRoaXMuaXNBcHByb3ZlZEJhc2tldFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50QmFza2V0cyA9IGJhc2tldHMubWFwKChiYXNrZXQ6IFVzZXJCYXNrZXRSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGJhc2tldCkge1xuICAgICAgICAgICAgICAgIGxldCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0LmlkKTtcbiAgICAgICAgICAgICAgICBpZiAoIWludEJhc2tldCkge1xuICAgICAgICAgICAgICAgICAgaW50QmFza2V0ID0gdGhpcy5jcmVhdGVJbnRCYXNrZXQoYmFza2V0KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldHMucHVzaChpbnRCYXNrZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaW50QmFza2V0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGV0IGN1cnJlbnRCYXNrZXRzQ29weSA9IHRoaXMuaGVscGVycy5jbG9uZShjdXJyZW50QmFza2V0cyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMudXNlclNlcnZpY2UuYm9ibykge1xuICAgICAgICAgICAgICAvLyByZW1vdmUgYmFza2VzdCB3aXRoIGludm9rZWQgdXNlciBpZiB3ZSBhcmUgbm90IGN1cnJlbnRseSBpbnZva2luZyBhIHVzZXIgLy8gPyAtIHNob3VsZCB3ZSBkbyB0aGUgb3Bwb3NpdGUgYXMgd2VsbD9cbiAgICAgICAgICAgICAgY3VycmVudEJhc2tldHNDb3B5ID0gY3VycmVudEJhc2tldHNDb3B5LmZpbHRlcihcbiAgICAgICAgICAgICAgICBiYXNrZXQgPT4gIWJhc2tldC5zdWJqZWN0LnZhbHVlLmludm9rZWRVc2VyXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgdGhpcy5iYXNrZXRzLm5leHQoY3VycmVudEJhc2tldHMpOyAvLyB1cGRhdGUgYmFza2V0IGJlZm9yZSBjdXJyZW50QmFza2V0SUQgdXBkYXRlIGJhc2tldENoYW5nZUVtaXR0ZXIgd2l0aCB0aGUgb2xkIGJhc2tldFxuXG4gICAgICAgICAgICAgIGlmIChjdXJyZW50QmFza2V0c0NvcHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnRCYXNrZXRJRCBleGlzdHMgLSBkb24ndCByZXBsYWNlIGN1cnJlbnRCYXNrZXRJRCB3aXRoIGN1cnJlbnRCYXNrZXRzQ29weVswXS5pZCAoaWYgbXVsdGlwbGUgc2VydmljZXMsIHdlIG11c3QgaGF2ZSBhIHNwZWNpZmljIGN1cnJlbnRCYXNrZXRJRClcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IHRoaXMuY3VycmVudEJhc2tldElEIHx8IGN1cnJlbnRCYXNrZXRzQ29weVswXS5pZDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IG51bGw7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY3VycmVudEJhc2tldHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnRCYXNrZXRzIGl0ZW1zIGRvbid0IGhhdmUgY3VycmVudEJhc2tldElEIHJlc2V0IGN1cnJlbnRCYXNrZXRJRCBFTlQtNDk1OVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRCYXNrZXRzLmV2ZXJ5KGJhc2tldCA9PiBiYXNrZXQuaWQgIT09IHRoaXMuY3VycmVudEJhc2tldElEKSAmJlxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0cy5ldmVyeShiYXNrZXQgPT4gYmFza2V0LmlkICE9PSB0aGlzLmN1cnJlbnRCYXNrZXRJRClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gY3VycmVudEJhc2tldHNbMF0uaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnRCYXNrZXRJRCBleGlzdHMgLSBkb24ndCByZXBsYWNlIGN1cnJlbnRCYXNrZXRJRCB3aXRoIGN1cnJlbnRCYXNrZXRzQ29weVswXS5pZCAoaWYgbXVsdGlwbGUgc2VydmljZXMsIHdlIG11c3QgaGF2ZSBhIHNwZWNpZmljIGN1cnJlbnRCYXNrZXRJRCBFTlQtNDY2MSlcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IHRoaXMuY3VycmVudEJhc2tldElEIHx8IGN1cnJlbnRCYXNrZXRzWzBdLmlkO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gbnVsbDtcbiAgICAgICAgICAgICAgfSAvLyB3YW50IHRvIGtlZXAgdGhlIGludm9rZWQgYmFza2V0c1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmJhc2tldHMubmV4dChjdXJyZW50QmFza2V0cyk7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50QmFza2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnRCYXNrZXRzIGl0ZW1zIGRvbid0IGhhdmUgY3VycmVudEJhc2tldElEIHJlc2V0IGN1cnJlbnRCYXNrZXRJRCBFTlQtNDk1OVxuICAgICAgICAgICAgICBpZiAoY3VycmVudEJhc2tldHMuZXZlcnkoYmFza2V0ID0+IGJhc2tldC5pZCAhPT0gdGhpcy5jdXJyZW50QmFza2V0SUQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSBjdXJyZW50QmFza2V0c1swXS5pZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBpZiBjdXJyZW50QmFza2V0SUQgZXhpc3RzIC0gZG9uJ3QgcmVwbGFjZSBjdXJyZW50QmFza2V0SUQgd2l0aCBjdXJyZW50QmFza2V0c0NvcHlbMF0uaWQgKGlmIG11bHRpcGxlIHNlcnZpY2VzLCB3ZSBtdXN0IGhhdmUgYSBzcGVjaWZpYyBjdXJyZW50QmFza2V0SUQgRU5ULTQ2NjEpXG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gdGhpcy5jdXJyZW50QmFza2V0SUQgfHwgY3VycmVudEJhc2tldHNbMF0uaWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLmZvckVhY2goKGJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UpID0+XG4gICAgICAgIGJhc2tldC5zdWJqZWN0LnVuc3Vic2NyaWJlKClcbiAgICAgICk7XG4gICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gW107XG4gICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IG51bGw7XG4gICAgICB0aGlzLmJhc2tldHMubmV4dCh0aGlzLmN1cnJlbnRCYXNrZXRzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWxsT3BlbkJhc2tldHModXNlcl9pZDogc3RyaW5nKTogUHJvbWlzZTxVc2VyQmFza2V0UmVzdWx0W10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VyQmFza2V0c0ZldGNoZXJcbiAgICAgIC5mZXRjaExpc3QoeyBiYXNrZXRTdGF0dXNlczogW0Jhc2tldFN0YXR1cy5PcGVuXSwgdXNlcjogdXNlcl9pZCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcCgocmVzdWx0czogVXNlckJhc2tldFJlc3VsdFtdKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdDogVXNlckJhc2tldFJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuZmluZEJhc2tldChyZXN1bHQuaWQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50QmFza2V0ID0gbmV3IEludGVybmFsQmFza2V0KFxuICAgICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLFxuICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VXNlckZldGNoZXIsXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlcXVpcmVzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldHMucHVzaChpbnRCYXNrZXQpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdEYW41Jyx0aGlzLmN1cnJlbnRCYXNrZXRzKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRUb0Jhc2tldChcbiAgICBpdGVtOiBBZGRJdGVtVG9CYXNrZXQuVmFyaWFibGVzLFxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4sXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgdHJhdmVsbGVyczogVHJhdmVsbGVyW10gPSBbXSxcbiAgICByZXF1aXJlc1JlYXNvbktleXM6IHN0cmluZ1tdLFxuICAgIGludm9rZWRTcGxpdD86IGJvb2xlYW4sXG4gICAgaWdub3JlSW52b2tlZENoZWNrPzogYm9vbGVhblxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcbiAgICBjb25zb2xlLndhcm4oJysrKyBBdHRlbXB0aW5nIHRvIGFkZCBpdGVtIHRvIGJhc2tldDogJywgaXRlbSwgJyArKysnKTtcblxuICAgIGlmIChpbnZva2VkU3BsaXQpIHtcbiAgICAgIC8vIEVOVC02OTQzIGRvIHRoaXMgc28gd2UgdXNlIHRoZSBpbnRCYXNrZXQgaWYgd2UgaGF2ZSBvbmUsIGhhZCBhbiBpc3N1ZSBhZGRpbmcgdG8gYmFza2V0IHdpdGggbm8gY3VycmVudEJha2V0SUQgYnV0IHdlIGRpZCBoYXZlIGludGJhc2tldFxuICAgICAgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KHRoaXMuY3VycmVudEJhc2tldElEKSB8fCBpbnRCYXNrZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldCh0aGlzLmN1cnJlbnRCYXNrZXRJRCkgfHwgaW50QmFza2V0O1xuICAgICAgc3dpdGNoIChcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Jhc2tldEZvckludm9rZWQoaW50QmFza2V0LCB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8sIGlnbm9yZUludm9rZWRDaGVjaylcbiAgICAgICkge1xuICAgICAgICBjYXNlIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY29udGludWU6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw6XG4gICAgICAgICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xuICAgICAgICBjYXNlIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMubmV3QmFza2V0OlxuICAgICAgICAgIGludEJhc2tldCA9IGF3YWl0IHRoaXMuY3JlYXRlQmFza2V0KCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSBpbnRCYXNrZXQuaWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaDpcbiAgICAgICAgICBpZiAoaW50QmFza2V0LnN1YmplY3QudmFsdWUuaW52b2tlZFVzZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGludm9rZWRVc2VyID0gaW50QmFza2V0LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXNbMF0udXNlcnMuZmluZChcbiAgICAgICAgICAgICAgdXNlciA9PiB1c2VyLmlkID09PSBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5pbnZva2VkVXNlci5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2Uuc2V0Qm9ibyhUcmF2ZWxsZXJPYmplY3QubWFrZVRyYXZlbGxlck9iamVjdEZyb21Vc2VyKGludm9rZWRVc2VyKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBib2JvXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnNldEJvYm8obnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0OiBhbnkgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChcbiAgICAgIFVzZXJGYXZvcnVyaXRlLkFsbG93U2FtZVRyYXZlbGxlc3JQZXJCYXNrZXRcbiAgICApXG4gICAgICA/IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0KFVzZXJGYXZvcnVyaXRlLkFsbG93U2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQpXG4gICAgICA6IFtdO1xuXG4gICAgY29uc29sZS5sb2coc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQpO1xuXG4gICAgaWYgKFxuICAgICAgIWludEJhc2tldC5zdWJqZWN0LnZhbHVlLmNyZWF0ZWRCeUd1dCAmJlxuICAgICAgc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQgJiZcbiAgICAgIHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0WydzYW1lVHJhdmVsbGVycyddICYmXG4gICAgICB0cmF2ZWxsZXJzICYmXG4gICAgICB0cmF2ZWxsZXJzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKCcrKysgU2FtZSBUcmF2ZWxsZXJzIGlzIEVuYWJsZWQgKysrJyk7XG4gICAgICBzd2l0Y2ggKFxuICAgICAgICBhd2FpdCB0aGlzLmlzU2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQoXG4gICAgICAgICAgaW50QmFza2V0LFxuICAgICAgICAgIHRyYXZlbGxlcnMsXG4gICAgICAgICAgc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXRbJ3NhbWVUcmF2ZWxsZXJzJ11cbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGNhc2UgRGlmZmVyZW50VHJhdmVsbGVyLmNvbnRpbnVlOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIERpZmZlcmVudFRyYXZlbGxlci5jYW5jZWw6XG4gICAgICAgICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xuICAgICAgICBjYXNlIERpZmZlcmVudFRyYXZlbGxlci5uZXdCYXNrZXQ6XG4gICAgICAgICAgaW50QmFza2V0ID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXQoKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IGludEJhc2tldC5pZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpdGVtLmJhc2tldCA9IGludEJhc2tldC5pZDtcbiAgICBpZiAodHJhdmVsbGVycz8ubGVuZ3RoID4gMCkge1xuICAgICAgaXRlbS51c2VycyA9IHRoaXMuaGVscGVycy5tYWtlVXNlcnModHJhdmVsbGVycy5maWx0ZXIodHJhdiA9PiAhdHJhdi5ndWVzdCkpO1xuICAgICAgaXRlbS5ndWVzdHMgPSB0aGlzLmhlbHBlcnMubWFrZVVzZXJzKHRyYXZlbGxlcnMuZmlsdGVyKHRyYXYgPT4gdHJhdi5ndWVzdCkpO1xuICAgICAgaXRlbS5sZWFkUGFzc2VuZ2VyID0gdHJhdmVsbGVyc1swXS5pZDtcbiAgICAgIGl0ZW0ubGVhZFBhc3NlbmdlclR5cGUgPSB0cmF2ZWxsZXJzWzBdLmd1ZXN0XG4gICAgICAgID8gTGVhZFBhc3NlbmdlclR5cGUuR3Vlc3RcbiAgICAgICAgOiBMZWFkUGFzc2VuZ2VyVHlwZS5Vc2VyO1xuICAgIH1cbiAgICBpdGVtLm91dGJvdW5kRGF0ZSA9IGl0ZW0ub3V0Ym91bmREYXRlXG4gICAgICA/IG5ldyBEYXRlKHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlVGltZShpdGVtLm91dGJvdW5kRGF0ZSkpXG4gICAgICA6IGl0ZW0ub3V0Ym91bmREYXRlO1xuICAgIGl0ZW0uaW5ib3VuZERhdGUgPSBpdGVtLmluYm91bmREYXRlXG4gICAgICA/IG5ldyBEYXRlKHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlVGltZShpdGVtLmluYm91bmREYXRlKSlcbiAgICAgIDogaXRlbS5pbmJvdW5kRGF0ZTtcblxuICAgIC8vIGl0ZW0ucmVxdWlyZXNSZWFzb24gPSByZXF1aXJlc1JlYXNvbjtcbiAgICBpdGVtID0gdGhpcy5jaGVja0RldGFpbHMoaXRlbSk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy51c2VyU2VydmljZS5maW5kU2VydmljZShpdGVtLnNlcnZpY2UpLnR5cGU7XG4gICAgc3dpdGNoIChzZXJ2aWNlKSB7XG4gICAgICBjYXNlICdDQVInOlxuICAgICAgICBjb25zdCBjYXJQcmVmZXJyZWRDdXJlbmN5T2JqZWN0ID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8e1xuICAgICAgICAgIGNhcmhpcmU6IHsgZW5hYmxlOiBib29sZWFuIH07XG4gICAgICAgICAgY3VycmVuY3k6IHN0cmluZztcbiAgICAgICAgfT4oVXNlckZhdm9ydXJpdGUuUHJlZmVycmVkQ3VycmVuY3kpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2FyUHJlZmVycmVkQ3VyZW5jeU9iamVjdCAmJlxuICAgICAgICAgIGNhclByZWZlcnJlZEN1cmVuY3lPYmplY3QuY2FyaGlyZT8uZW5hYmxlICYmXG4gICAgICAgICAgY2FyUHJlZmVycmVkQ3VyZW5jeU9iamVjdC5jdXJyZW5jeVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVzZXJDdXJyZW5jeSA9IGNhclByZWZlcnJlZEN1cmVuY3lPYmplY3QuY3VycmVuY3k7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdIT1RFTCc6XG4gICAgICAgIGNvbnN0IGhvdGVsUHJlZmVycmVkQ3VyZW5jeU9iamVjdCA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0PHtcbiAgICAgICAgICBob3RlbDogeyBlbmFibGU6IGJvb2xlYW4gfTtcbiAgICAgICAgICBjdXJyZW5jeTogc3RyaW5nO1xuICAgICAgICB9PihVc2VyRmF2b3J1cml0ZS5QcmVmZXJyZWRDdXJyZW5jeSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBob3RlbFByZWZlcnJlZEN1cmVuY3lPYmplY3QgJiZcbiAgICAgICAgICBob3RlbFByZWZlcnJlZEN1cmVuY3lPYmplY3QuaG90ZWw/LmVuYWJsZSAmJlxuICAgICAgICAgIGhvdGVsUHJlZmVycmVkQ3VyZW5jeU9iamVjdC5jdXJyZW5jeVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVzZXJDdXJyZW5jeSA9IGhvdGVsUHJlZmVycmVkQ3VyZW5jeU9iamVjdC5jdXJyZW5jeTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaXRlbS5jb252ZXJ0Q3VycmVuY3lUbyA9IHRoaXMudXNlckN1cnJlbmN5O1xuICAgIHRoaXMucmVtb3ZlQm9va2VkQmFza2V0KCk7XG5cbiAgICBpZiAoaXRlbSAmJiBpbnRCYXNrZXQpIHtcbiAgICAgIHRoaXMuYWRkaW5nVG9CYXNrZXQubmV4dCh0cnVlKTtcbiAgICAgIC8vIHRoaXMgaXMgdGhlIGxhc3QgcG9pbnRcbiAgICAgIGF3YWl0IHRoaXMuYWRkSXRlbVRvQmFza2V0VXBkYXRlclxuICAgICAgICAudXBkYXRlT25lKGl0ZW0pXG4gICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAudGhlbihcbiAgICAgICAgICAobmV3QmFza2V0OiBQYXJ0aWFsPFVzZXJCYXNrZXRSZXN1bHQ+KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1pVmlld2VkID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBoZXJlIEkgd2FudCB0aGUgbmV3IGJhc2tldEl0ZW0gSWRcbiAgICAgICAgICAgIGNvbnN0IG9sZEl0ZW1JZHMgPSBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5iYXNrZXRJdGVtcy5tYXAoaXRlbSA9PiBpdGVtLmlkKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0Jhc2tldEl0ZW1JZHMgPSBuZXdCYXNrZXQuYmFza2V0SXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG4gICAgICAgICAgICAvLyBkb24ndCBuZWVkIG1pIGhlcmVcbiAgICAgICAgICAgIGNvbnN0IG5ld0lkID0gbmV3QmFza2V0SXRlbUlkcy5maW5kKGlkID0+ICFvbGRJdGVtSWRzLmluY2x1ZGVzKGlkKSk7XG5cbiAgICAgICAgICAgIGludEJhc2tldC5uZXh0KFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uaW50QmFza2V0LnN1YmplY3QudmFsdWUsXG4gICAgICAgICAgICAgICAgLi4ubmV3QmFza2V0XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIG5ld0lkXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBzZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW3NlcnZpY2VdLmJvb2tpbmdfY2hvc2VuID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlYXJjaFNlcnZpY2Uuc2VhcmNoX29iamVjdHNbc2VydmljZV0uY2hvc2VuID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBiaTogR2V0VXNlckJhc2tldEl0ZW1SZXN1bHRbXSA9IG5ld0Jhc2tldC5iYXNrZXRJdGVtcztcbiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0QmFza2V0SXRlbXNFbWl0dGVyLm5leHQoYmkpO1xuICAgICAgICAgICAgdGhpcy5iYXNrZXRDaGFuZ2VFbWl0dGVyLm5leHQobmV3QmFza2V0LmlkKTtcbiAgICAgICAgICAgIHRoaXMuYWRkaW5nVG9CYXNrZXQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgKysrIEN1cnJlbnRseSBBZGRpbmc6ICR7dGhpcy5pdGVtc0N1cnJlbnRseUJlaW5nQWRkZWR9IGl0ZW1zICsrK2ApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJysrKyBBZGQgSXRlbSB0byBCYXNrZXQgQ2FsbCBGaW5pc2hlZCEgKysrJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChpbnRCYXNrZXQuc3ViamVjdC52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmFkZGluZ1RvQmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY29udGludWU7XG4gIH1cblxuICBjaGVja0Jhc2tldEZvckludm9rZWQoXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPixcbiAgICBib2JvOiBUcmF2ZWxsZXIsXG4gICAgaWdub3JlSW52b2tlZENoZWNrOiBib29sZWFuXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIC8vIHRoaXMgY2hhbmdlIGlzIHBvdGVudGlhbGx5IHRoZSByZWFzb24gd2h5IHdlIHNvbWV0aW1lcyBnZXQgYW4gZXJyb3IgYWRkaW5nIHRvIGJhc2tldCwgbm8gaW50QmFza2V0XG4gICAgaWYgKGludEJhc2tldCAmJiBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZT8uaW52b2tlZFVzZXI/LmlkICE9PSBib2JvPy5pZCkge1xuICAgICAgaWYgKGlnbm9yZUludm9rZWRDaGVjaykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMubmV3QmFza2V0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICAgIE1vZGFsVHlwZXMuRGlmZmVyZW50SW52b2tkZWRVc2VyQ29tcG9uZW50LFxuICAgICAgICB7IGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmFza2V0Qm9ibzogaW50QmFza2V0LnN1YmplY3QudmFsdWUuaW52b2tlZFVzZXIsXG4gICAgICAgICAgY3VycmVudEJvYm86IGJvYm9cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNvbnRpbnVlKTtcbiAgfVxuXG4gIGlzU2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQoXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPixcbiAgICB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSxcbiAgICBzYW1lVHJhdmVsbGVzclBlckJhc2tldDogbnVtYmVyXG4gICk6IFByb21pc2U8RGlmZmVyZW50VHJhdmVsbGVyPiB7XG4gICAgbGV0IHNhbWVUcmF2ZWxsZXJzOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGV0IHVuaXF1ZVVzZXJzOiBVc2VyW10gPSBbXTtcbiAgICBsZXQgdW5pcXVlVXNlcnNJZHM6IHN0cmluZ1tdID0gW107XG4gICAgaW50QmFza2V0LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMuZm9yRWFjaCgoYmFza2V0OiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICBiYXNrZXQudXNlcnMuZm9yRWFjaCgodXNlcjogVXNlcikgPT4ge1xuICAgICAgICBjb25zdCBpc0R1cGxpY2F0ZSA9IHVuaXF1ZVVzZXJzLnNvbWUoKGV4aXN0aW5nVXNlcjogVXNlcikgPT4gZXhpc3RpbmdVc2VyLmlkID09PSB1c2VyLmlkKTtcblxuICAgICAgICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgICAgICAgdW5pcXVlVXNlcnMucHVzaCh1c2VyKTtcbiAgICAgICAgICB1bmlxdWVVc2Vyc0lkcy5wdXNoKHVzZXIuaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRyYXZlbGxlcnMuZm9yRWFjaCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcbiAgICAgIGlmICghdW5pcXVlVXNlcnNJZHMuc29tZSgoaWQ6IHN0cmluZykgPT4gaWQgPT09IHRyYXZlbGxlci5pZCkpIHtcbiAgICAgICAgdW5pcXVlVXNlcnNJZHMucHVzaCh0cmF2ZWxsZXIuaWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNhbWVUcmF2ZWxsZXJzID0gdW5pcXVlVXNlcnNJZHMubGVuZ3RoIDw9IHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGArKysgRXJyb3IgZGV0ZXJtZW5pbmcgc2FtZSB0cmF2ZWxsZXJzOiAke2Vycm9yfSArKytgKTtcbiAgICB9XG5cbiAgICBpZiAoaW50QmFza2V0LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMubGVuZ3RoID4gMCAmJiAhc2FtZVRyYXZlbGxlcnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICBNb2RhbFR5cGVzLkRpZmZlcmVudFRyYXZlbGxlclBlckJhc2tldENvbXBvbmVudCxcbiAgICAgICAgeyBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJJbkJhc2tldDogdW5pcXVlVXNlcnMsXG4gICAgICAgICAgdHJhdmVsbGVyczogdHJhdmVsbGVyc1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudFRyYXZlbGxlci5jb250aW51ZSk7XG4gIH1cblxuICBsb2FkQmFza2V0KGlkOiBzdHJpbmcsIGZvcmNlbG9hZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgbGV0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChpZCk7XG4gICAgaWYgKCFpbnRCYXNrZXQgfHwgZm9yY2Vsb2FkKSB7XG4gICAgICBpbnRCYXNrZXQgPSBuZXcgSW50ZXJuYWxCYXNrZXQoXG4gICAgICAgIHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBiYXNrZXRJdGVtczogW11cbiAgICAgICAgfSBhcyBCYXNrZXREZXRhaWxzLFxuICAgICAgICB0aGlzLmhlbHBlcnMsXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHRoaXMuZ2V0VXNlckZldGNoZXIsXG4gICAgICAgIHRoaXMucmVxdWlyZXNTZXJ2aWNlLFxuICAgICAgICB0aGlzLnJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlXG4gICAgICApO1xuICAgICAgdGhpcy5jdXJyZW50QmFza2V0cy5wdXNoKGludEJhc2tldCk7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbmN5T2JqZWN0ID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8e1xuICAgICAgY3VycmVuY3k6IHN0cmluZztcbiAgICAgIGhvdGVsOiB7XG4gICAgICAgIGVuYWJsZTogYm9vbGVhbjtcbiAgICAgIH07XG4gICAgICBjYXJoaXJlOiB7XG4gICAgICAgIGVuYWJsZTogYm9vbGVhbjtcbiAgICAgIH07XG4gICAgfT4oVXNlckZhdm9ydXJpdGUuUHJlZmVycmVkQ3VycmVuY3kpO1xuICAgIGlmIChjdXJyZW5jeU9iamVjdD8uaG90ZWw/LmVuYWJsZSB8fCBjdXJyZW5jeU9iamVjdD8uY2FyaGlyZT8uZW5hYmxlKSB7XG4gICAgICB0aGlzLnVzZXJDdXJyZW5jeSA9IGN1cnJlbmN5T2JqZWN0LmN1cnJlbmN5O1xuICAgIH1cblxuICAgIHRoaXMuYmFza2V0RmV0Y2hlclxuICAgICAgLmZldGNoT25lKHsgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LCBpZCwgd2l0aFN1cHBsZW1lbnRhbDogdHJ1ZSB9KVxuICAgICAgLnN1YnNjcmliZSgobmV3QmFza2V0OiBVc2VyQmFza2V0UmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlQmFza2V0KGlkLCBvZig8QmFza2V0RGV0YWlscz5uZXdCYXNrZXQpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc3Vic3JpYmVUb0Jhc2tldChpZDogc3RyaW5nLCBvYnNlcnZlcjogT2JzZXJ2ZXI8QmFza2V0RGV0YWlscz4pOiB2b2lkIHtcbiAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoaWQpO1xuICAgIGlmIChpbnRCYXNrZXQpIHtcbiAgICAgIGludEJhc2tldC5zdWJqZWN0LnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRXhwaXJlZEl0ZW1zKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoaWQpO1xuICAgIGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmJhc2tldEl0ZW1zXG4gICAgICAuZmlsdGVyKChiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiBiYXNrZXRJdGVtLmxhdGVzdFZhbGlkYXRpb25QcmljZURpZmZlcmVuY2UgIT09IDAgfHwgYmFza2V0SXRlbS5leHBpcmVkO1xuICAgICAgfSlcbiAgICAgIC5mb3JFYWNoKChiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlQmFza2V0SXRlbShpZCwgYmFza2V0SXRlbSk7XG4gICAgICB9KTtcbiAgfVxuXG5cbmFzeW5jIHJlbW92ZUJhc2tldEl0ZW0oYmFza2V0SWQ6IHN0cmluZywgaXRlbTogR2V0VXNlckJhc2tldEl0ZW1SZXN1bHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdGhpcy5yZW1vdmluZ0Zyb21CYXNrZXQubmV4dCh0cnVlKTtcbiAgbGV0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4gPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0SWQpO1xuXG4gIGlmIChpdGVtPy5zZXJ2aWNlPy50eXBlID09PSBTZXJ2aWNlVHlwZS5Ib3RlbCkge1xuICAgIGNvbnN0IGhvdGVsSXRlbXMgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMuZmlsdGVyKChiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpdGVtLmRldGFpbC5ob3RlbElkID09PSBiYXNrZXRJdGVtLmRldGFpbC5ob3RlbElkICYmXG4gICAgICAgIGl0ZW0uZGV0YWlsLnJvb21zWzBdLmlkID09PSBiYXNrZXRJdGVtLmRldGFpbC5yb29tc1swXS5pZCAmJlxuICAgICAgICBpdGVtLmRldGFpbC5yb29tc1swXS5jaGVja0luID09PSBiYXNrZXRJdGVtLmRldGFpbC5yb29tc1swXS5jaGVja0luICYmXG4gICAgICAgIGl0ZW0uZGV0YWlsLnJvb21zWzBdLmNoZWNrT3V0ID09PSBiYXNrZXRJdGVtLmRldGFpbC5yb29tc1swXS5jaGVja091dFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmIChob3RlbEl0ZW1zPy5sZW5ndGggPiAxKSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuV2FybmluZ1JlbW92ZU1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xuICAgICAgfSk7XG5cbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBob3RlbEl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IG5ld0Jhc2tldCA9IGF3YWl0IHRoaXMucmVtb3ZlSXRlbUZyb21CYXNrZXRVcGRhdGVyXG4gICAgICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgICBiYXNrZXRJdGVtOiBpdGVtLmlkXG4gICAgICAgICAgfSlcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgIC50b1Byb21pc2UoKTtcblxuICAgICAgICBpZiAobmV3QmFza2V0KSB7XG4gICAgICAgICAgdGhpcy5taVZpZXdlZCA9IGZhbHNlO1xuICAgICAgICAgIGludEJhc2tldD8ubmV4dCh7XG4gICAgICAgICAgICAuLi5pbnRCYXNrZXQuc3ViamVjdC52YWx1ZSxcbiAgICAgICAgICAgIC4uLm5ld0Jhc2tldFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucmVtb3ZpbmdGcm9tQmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci5uZXh0KGJhc2tldElkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdCYXNrZXQgPSBhd2FpdCB0aGlzLnJlbW92ZUl0ZW1Gcm9tQmFza2V0VXBkYXRlclxuICAgICAgICAudXBkYXRlT25lKHtcbiAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgYmFza2V0SXRlbTogaXRlbS5pZFxuICAgICAgICB9KVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAudG9Qcm9taXNlKCk7XG5cbiAgICAgIGlmIChuZXdCYXNrZXQpIHtcbiAgICAgICAgdGhpcy5taVZpZXdlZCA9IGZhbHNlO1xuICAgICAgICBpbnRCYXNrZXQ/Lm5leHQoe1xuICAgICAgICAgIC4uLmludEJhc2tldC5zdWJqZWN0LnZhbHVlLFxuICAgICAgICAgIC4uLm5ld0Jhc2tldFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZW1vdmluZ0Zyb21CYXNrZXQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci5uZXh0KGJhc2tldElkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbmV3QmFza2V0ID0gYXdhaXQgdGhpcy5yZW1vdmVJdGVtRnJvbUJhc2tldFVwZGF0ZXJcbiAgICAgIC51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGJhc2tldEl0ZW06IGl0ZW0uaWRcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuXG4gICAgaWYgKG5ld0Jhc2tldCkge1xuICAgICAgdGhpcy5taVZpZXdlZCA9IGZhbHNlO1xuICAgICAgaW50QmFza2V0Py5uZXh0KHtcbiAgICAgICAgLi4uaW50QmFza2V0LnN1YmplY3QudmFsdWUsXG4gICAgICAgIC4uLm5ld0Jhc2tldFxuICAgICAgfSk7XG4gICAgICB0aGlzLnJlbW92aW5nRnJvbUJhc2tldC5uZXh0KGZhbHNlKTtcbiAgICAgIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci5uZXh0KGJhc2tldElkKTtcbiAgICB9XG4gIH1cbn1cblxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWZhdWx0QmFza2V0KFxuICAgIGdldEJvb2tlZEJhc2tldDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGluaXRpYWw6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBjcmVhdGVkQnlHdXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPEludGVybmFsQmFza2V0PEdVX1E+PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZE9yQ3JlYXRlQmFza2V0KHRoaXMuY3VycmVudEJhc2tldElELCBnZXRCb29rZWRCYXNrZXQsIGNyZWF0ZWRCeUd1dCkudGhlbihcbiAgICAgIGRhdGEgPT4ge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQmFza2V0KGlkOiBzdHJpbmcpOiBJbnRlcm5hbEJhc2tldDxHVV9RPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEJhc2tldHMuZmluZCgoYmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPikgPT4ge1xuICAgICAgcmV0dXJuIGJhc2tldC5pZCA9PT0gaWQgfHwgYmFza2V0LnRlbXBpZCA9PT0gaWQ7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmRPckNyZWF0ZUJhc2tldChcbiAgICBpZD86IHN0cmluZyxcbiAgICBnZXRCb29rZWRCYXNrZXQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBjcmVhdGVkQnlHdXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPEludGVybmFsQmFza2V0PEdVX1E+PiB7XG4gICAgbGV0IGJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4gPSBudWxsO1xuXG4gICAgaWYgKCFpZCkge1xuICAgICAgbGV0IGFsbE9wZW5CYXNrZXRzID0gYXdhaXQgdGhpcy5nZXRBbGxPcGVuQmFza2V0cyhcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRmdWxsVXNlckRldGFpbHModHJ1ZSkudXNlckRhdGEudmFsdWUudXNlcl9pZC50b1N0cmluZygpXG4gICAgICApO1xuXG4gICAgICBpZiAoIXRoaXMudXNlclNlcnZpY2UuYm9ibykge1xuICAgICAgICAvLyBFTlQtMzI3NiByZW1vdmUgYmFza2VzdCB3aXRoIGludm9rZWQgdXNlciBpZiB3ZSBhcmUgbm90IGN1cnJlbnRseSBpbnZva2luZyBhIHVzZXIgLy8gPyAtIHNob3VsZCB3ZSBkbyB0aGUgb3Bwb3NpdGUgYXMgd2VsbD9cbiAgICAgICAgYWxsT3BlbkJhc2tldHMgPSBhbGxPcGVuQmFza2V0cy5maWx0ZXIoYmFza2V0ID0+ICFiYXNrZXQuaW52b2tlZFVzZXIpO1xuICAgICAgfVxuICAgICAgLy8gY29uc29sZS5sb2coJ29wZW4gYmFza2V0czogJywgYWxsT3BlbkJhc2tldHMpO1xuICAgICAgLy8gZmluZCB0aGUgbGFzdCB1cGRhdGVkIGJhc2tldFxuICAgICAgaWYgKCFhbGxPcGVuQmFza2V0cz8ubGVuZ3RoKSB7XG4gICAgICAgIC8vIEVOVC0yNjE2IHJlbW92ZWQgYWRkaW5nIHRvIGN1cnJlbnQgYmFza2V0IGFzIHRoaXMgd2FzIGEgZHVwZVxuICAgICAgICBiYXNrZXQgPSBhd2FpdCB0aGlzLmNyZWF0ZUJhc2tldChmYWxzZSwgY3JlYXRlZEJ5R3V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGJhc2tldHMgYXJlIGFscmVhZHkgc29ydGVkIGJ5IGxhc3QgdXBkYXRlZCAtIHJldHVybiB0aGUgbGFzdCB1cGRhdGVkIGJhc2tldFxuICAgICAgICBiYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYWxsT3BlbkJhc2tldHNbMF0uaWQpO1xuXG4gICAgICAgIGlmIChiYXNrZXQuc3ViamVjdC52YWx1ZS5zdGF0dXMgPT09ICdCT09LRUQnICYmICFnZXRCb29rZWRCYXNrZXQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJysrKyBSZXRyaWV2ZWQgYmFza2V0IGlzIGluIGJvb2tlZCBzdGF0dXMgLSBjcmVhdGluZyBhIG5ldyBvbmUgKysrJyk7XG4gICAgICAgICAgYmFza2V0ID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXQoKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLnB1c2goYmFza2V0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJhc2tldHMubmV4dCh0aGlzLmN1cnJlbnRCYXNrZXRzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY3JlYXRlIG5ldyBiYXNrZXQgZm9yIGd1dCB1c2VycyBldmVuIGlmIG90aGVyIG9wZW4gZ3V0IGJhc2tldCBleGlzdFxuICAgICAgaWYgKGNyZWF0ZWRCeUd1dCAmJiB0aGlzLnJlcXVpcmVOZXdHVVRCYXNrZXQudmFsdWUpIHtcbiAgICAgICAgYmFza2V0ID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXQoZmFsc2UsIGNyZWF0ZWRCeUd1dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTaG93IGJhc2tldHMgd2l0aCBPcGVuIEJhc2tldFN0YXR1cyBvbmx5IEVOVC01MjU5XG4gICAgICAgIHRoaXMuY3VycmVudEJhc2tldHMgPSB0aGlzLmN1cnJlbnRCYXNrZXRzLmZpbHRlcihcbiAgICAgICAgICBpbnRCYSA9PiBpbnRCYS5zdWJqZWN0Py52YWx1ZT8uc3RhdHVzID09PSBCYXNrZXRTdGF0dXMuT3BlblxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuYmFza2V0cy5uZXh0KHRoaXMuY3VycmVudEJhc2tldHMpO1xuICAgICAgICBiYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoaWQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnKysrIEZvdW5kIEJhc2tldDogJywgYmFza2V0LCAnICsrKycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBiYXNrZXQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlQmFza2V0KFxuICAgIGNyZWF0ZWRCeUJvbHQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBjcmVhdGVkQnlHdXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPEludGVybmFsQmFza2V0PEdVX1E+PiB7XG4gICAgdGhpcy5jcmVhdGluZ05ld0Jhc2tldC5uZXh0KHRydWUpO1xuICAgIGNvbnN0IGJhc2tldDogVXNlckJhc2tldFJlc3VsdCA9IHtcbiAgICAgIGlkOiBURU1QSUQgKyBtb21lbnQoKS51bml4KCkudG9TdHJpbmcoKSxcbiAgICAgIG93bmVyOiBudWxsLFxuICAgICAgcmVmZXJlbmNlOiBudWxsLFxuICAgICAgdGl0bGU6IG51bGwsXG4gICAgICBub3RlczogbnVsbCxcbiAgICAgIGNyZWF0ZWRBdDogbnVsbCxcbiAgICAgIHVwZGF0ZWRBdDogbnVsbCxcbiAgICAgIGJhc2tldEl0ZW1zOiBbXSxcbiAgICAgIHN0YXR1czogbnVsbCxcbiAgICAgIHZhbGlkYXRlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgY29uc3QgaW50QmFza2V0ID0gbmV3IEludGVybmFsQmFza2V0PEdVX1E+KFxuICAgICAgYmFza2V0LFxuICAgICAgdGhpcy5oZWxwZXJzLFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuZ2V0VXNlckZldGNoZXIsXG4gICAgICB0aGlzLnJlcXVpcmVzU2VydmljZSxcbiAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2VcbiAgICApO1xuICAgIC8vIHsgc3ViamVjdDogbmV3IEJlaGF2aW9yU3ViamVjdDxCYXNrZXQ+KGJhc2tldCksIHRlbXBpZDogYmFza2V0LmlkLCBpZDogYmFza2V0LmlkLCB0aXRsZTogYmFza2V0LmlkIH07XG5cbiAgICAvLyBlbnQtMjYxNiBvbmx5IHBsYWNlIHdlIG5lZWQgdG8gYWRkIGEgYmFza2V0IHRvIGN1cnJlbnQgYmFza2V0c1xuICAgIGNvbnN0IHRvUmV0dXJuID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXRPbkRCKGludEJhc2tldCwgY3JlYXRlZEJ5Qm9sdCwgY3JlYXRlZEJ5R3V0KTtcbiAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLnB1c2godG9SZXR1cm4pO1xuICAgIC8vIGNvbnNvbGUubG9nKCdEYW45Jyx0aGlzLmN1cnJlbnRCYXNrZXRzKVxuXG4gICAgdGhpcy5iYXNrZXRzLm5leHQodGhpcy5jdXJyZW50QmFza2V0cyk7XG4gICAgdGhpcy5iYXNrZXRDaGFuZ2VFbWl0dGVyLm5leHQodG9SZXR1cm4uaWQpO1xuICAgIHJldHVybiB0b1JldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQmFza2V0T25EQihcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0PEdVX1E+LFxuICAgIGNyZWF0ZWRCeUJvbHQ6IGJvb2xlYW4sXG4gICAgY3JlYXRlZEJ5R1VUOiBib29sZWFuXG4gICk6IFByb21pc2U8SW50ZXJuYWxCYXNrZXQ8R1VfUT4+IHtcbiAgICBjb25zdCBpbnZva2VkVXNlcjogc3RyaW5nIHwge30gPSB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8/LmlkXG4gICAgICA/IHsgaW52b2tlZFVzZXI6IHRoaXMudXNlclNlcnZpY2UuYm9ibz8uaWQgfVxuICAgICAgOiB7fTtcblxuICAgIGNvbnN0IG11dGF0aW9uOiBDcmVhdGVCYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHsgLi4uaW52b2tlZFVzZXIsIGNyZWF0ZWRCeUJvbHQsIGNyZWF0ZWRCeUdVVCB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuYmFza2V0Q3JlYXRvclxuICAgICAgICAudXBkYXRlT25lKG11dGF0aW9uKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChiYXNrZXQ6IFVzZXJCYXNrZXRSZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRpbmdOZXdCYXNrZXQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICBpbnRCYXNrZXQuaWQgPSBiYXNrZXQuaWQ7XG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChiYXNrZXQpO1xuICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIHRoZSBzdWJqZWN0IHRvIGxpc3RlbiBmb3IgZW1pdHRlZCB2YWx1ZXNcbiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGludEJhc2tldC5zdWJqZWN0LnN1YnNjcmliZSgodmFsdWU6IEJhc2tldERldGFpbHMpID0+IHtcbiAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGVtaXR0ZWQgdmFsdWUgaXMgbm90IG51bGwgYW5kIGhhcyBhIHN0YXR1cyBwcm9wZXJ0eVxuICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIHRoZSBpbnRCYXNrZXQgb2JqZWN0XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShpbnRCYXNrZXQpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0aW5nTmV3QmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHt9XG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVNZW51KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1lbnVTdGF0ZSA9PT0gTWVudVNsaWRlRW51bS5JTiB8fCB0aGlzLm1lbnVTdGF0ZSA9PT0gTWVudVNsaWRlRW51bS5GTEFUKSB7XG4gICAgICB0aGlzLm1lbnVTdGF0ZSA9IE1lbnVTbGlkZUVudW0uT1VUO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lbnVTdGF0ZSA9IE1lbnVTbGlkZUVudW0uSU47XG4gICAgfVxuICB9XG5cbiAgY2xvc2VNZW51KCk6IHZvaWQge1xuICAgIHRoaXMubWVudVN0YXRlID0gTWVudVNsaWRlRW51bS5PVVQ7XG4gIH1cblxuICBmaW5kTGF0ZXN0RmxpZ2h0SXRlbXMoYmFza2V0SXRlbXM6IEJhc2tldEl0ZW1bXSk6IEJhc2tldEl0ZW0gfCBudWxsIHtcbiAgICBsZXQgbGFzdEZsaWdodEl0ZW06IEJhc2tldEl0ZW0gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgc2Vjb25kTGFzdEZsaWdodEl0ZW06IEJhc2tldEl0ZW0gfCBudWxsID0gbnVsbDtcblxuICAgIChiYXNrZXRJdGVtcyB8fCBbXSkuZm9yRWFjaChiYXNrZXRJdGVtID0+IHtcbiAgICAgIGlmIChiYXNrZXRJdGVtLnNlcnZpY2UudHlwZSA9PT0gU2VydmljZVR5cGUuRmxpZ2h0KSB7XG4gICAgICAgIHNlY29uZExhc3RGbGlnaHRJdGVtID0gbGFzdEZsaWdodEl0ZW07XG4gICAgICAgIGxhc3RGbGlnaHRJdGVtID0gYmFza2V0SXRlbTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGlmIGR1YWwgc2luZ2xlIGFuZCByZXR1cm5UcmlwIHNldCBvdXRib3VuZCBkdWFsIHNpbmdsZSBmbGlnaHRcbiAgICBpZiAoXG4gICAgICBsYXN0RmxpZ2h0SXRlbSAmJlxuICAgICAgbGFzdEZsaWdodEl0ZW0uc2VhcmNoUXVlcnkucmV0dXJuVHJpcCAmJlxuICAgICAgbGFzdEZsaWdodEl0ZW0uZGV0YWlsLmpvdXJuZXlUeXBlID09PSBGbGlnaHRKb3VybmV5VHlwZS5TaW5nbGVcbiAgICApIHtcbiAgICAgIHJldHVybiBzZWNvbmRMYXN0RmxpZ2h0SXRlbSB8fCBsYXN0RmxpZ2h0SXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdEZsaWdodEl0ZW07XG4gIH1cblxuICBnZXRMYXRlc3RCYXNrZXRJdGVtRm9yVHlwZXMoYmFza2V0SXRlbXM6IEJhc2tldEl0ZW1bXSk6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT4ge1xuICAgIGNvbnN0IGxhdGVzdEZsaWdodEl0ZW0gPSB0aGlzLmZpbmRMYXRlc3RGbGlnaHRJdGVtcyhiYXNrZXRJdGVtcyk7XG4gICAgcmV0dXJuIChiYXNrZXRJdGVtcyB8fCBbXSkucmVkdWNlKFxuICAgICAgKGxhdGVzdEl0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+LCBiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICAgIGlmIChiYXNrZXRJdGVtLnNlcnZpY2UudHlwZSAhPT0gU2VydmljZVR5cGUuRmxpZ2h0KSB7XG4gICAgICAgICAgbGF0ZXN0SXRlbXNbYmFza2V0SXRlbS5zZXJ2aWNlLnR5cGVdID0gYmFza2V0SXRlbTtcbiAgICAgICAgfSBlbHNlIGlmIChsYXRlc3RGbGlnaHRJdGVtKSB7XG4gICAgICAgICAgbGF0ZXN0SXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XSA9IGxhdGVzdEZsaWdodEl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhdGVzdEl0ZW1zO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0RldGFpbHMoaXRlbTogQWRkSXRlbVRvQmFza2V0LlZhcmlhYmxlcyk6IEFkZEl0ZW1Ub0Jhc2tldC5WYXJpYWJsZXMge1xuICAgIGNvbnN0IHNlcnZpY2VUb0NoZWNrOiBTZXJ2aWNlID0gdGhpcy51c2VyU2VydmljZS5maW5kU2VydmljZShpdGVtLnNlcnZpY2UpO1xuICAgIGlmICghc2VydmljZVRvQ2hlY2spIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBmaW5kIHNlcnZpY2UgZm9yIGJhc2tldCBpdGVtIDogJyArIGl0ZW0uc2VydmljZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayB0aGUgaXRlbS5kZXRhaWwgb2JqZWN0IGFnYWluc3QgdGhlIHJlbGV2YW50IHNlcnZpY2UgZGV0YWlsU2NoZW1hIHVzaW5nIEFqdlxuICAgIGNvbnN0IGFqdiA9IG5ldyBBanYoKTtcbiAgICAvLyBhZGRGb3JtYXRzKGFqdik7Ly8gPC0tLS0tLS0gVEhJUyBJUyBPVVIgUFJPQkxFTVxuXG4gICAgLy8gQ3VzdG9tIEphdmFzY3JpcHQgSVNPIERhdGUgVGltZSBmb3JtYXRcbiAgICBhanYuYWRkRm9ybWF0KCdqcy1kYXRlLXRpbWUnLCAoZGF0ZVRpbWVTdHJpbmc6IGFueSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBkYXRlVGltZVN0cmluZyA9PT0gJ29iamVjdCcgJiYgZGF0ZVRpbWVTdHJpbmcuaGFzT3duUHJvcGVydHkoJ3RvSVNPU3RyaW5nJykpIHtcbiAgICAgICAgZGF0ZVRpbWVTdHJpbmcgPSBkYXRlVGltZVN0cmluZy50b0lTT1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTmFOKERhdGUucGFyc2UoZGF0ZVRpbWVTdHJpbmcpKTsgLy8gYW55IHRlc3QgdGhhdCByZXR1cm5zIHRydWUvZmFsc2VcbiAgICB9KTtcblxuICAgIGFqdi5hZGRGb3JtYXQoJ3JhaWxTZWF0aW5nJywgKCkgPT4ge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBhanYuYWRkRm9ybWF0KCdwYXNzcG9ydCcsICgpID0+IHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgYWp2LmFkZEZvcm1hdCgnc3BlY2lhbFJlcXVlc3QnLCAoKSA9PiB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGFqdi5hZGRGb3JtYXQoJ2RhdGUtdGltZScsICgpID0+IHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdmFsaWRhdGVEZXRhaWxTY2hlbWEgPSBhanYuY29tcGlsZShzZXJ2aWNlVG9DaGVjay5kZXRhaWxTY2hlbWEpO1xuICAgIGNvbnN0IHZhbGlkYXRlU2VhcmNoU2NoZW1hID0gYWp2LmNvbXBpbGUoc2VydmljZVRvQ2hlY2suc2VhcmNoUXVlcnlTY2hlbWEpO1xuXG4gICAgLy8gaWYgdGhlcmUgYXJlIGFueSBtb21lbnQgZGF0ZSBvYmplY3RzIGluIHRoZSBzZWFyY2hRdWVyeSBvYmplY3QgY29udmVydCB0aGVzZSB0byBkYXRlLXRpbWUgc3RyaW5nc1xuICAgIGl0ZW0uc2VhcmNoUXVlcnkgPSB0aGlzLmhlbHBlcnMuc2FuaXRpemVNb21lbnREYXRlcyhpdGVtLnNlYXJjaFF1ZXJ5KTtcbiAgICBpdGVtLmRldGFpbCA9IHRoaXMuaGVscGVycy5yZW1vdmVOdWxscyhpdGVtLmRldGFpbCk7XG5cbiAgICBpZiAoIXZhbGlkYXRlU2VhcmNoU2NoZW1hKGl0ZW0uc2VhcmNoUXVlcnkpKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGBJdGVtIHNlYXJjaFF1ZXJ5IGlzIG5vdCB2YWxpZCBmb3IgJHtzZXJ2aWNlVG9DaGVjay5uYW1lfSBzZWFyY2ggc2NoZW1hLmA7XG4gICAgICBjb25zb2xlLndhcm4oJ3NlYXJjaFNjaGVtYScsIHNlcnZpY2VUb0NoZWNrLnNlYXJjaFF1ZXJ5U2NoZW1hKTtcbiAgICAgIGNvbnNvbGUud2FybignaXRlbS5zZWFyY2hRdWVyeScsIGl0ZW0uc2VhcmNoUXVlcnkpO1xuICAgICAgY29uc29sZS53YXJuKCdTZWFyY2ggUXVlcnkgVmFsaWRhdGlvbiBlcnJvcnMnLCB2YWxpZGF0ZVNlYXJjaFNjaGVtYS5lcnJvcnMpO1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk1vZGFsRXJyb3JDb21wb25lbnQsIHsgYmFja2Ryb3A6ICdzdGF0aWMnIH0sIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXZhbGlkYXRlRGV0YWlsU2NoZW1hKGl0ZW0uZGV0YWlsKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBgSXRlbSBkZXRhaWwgaXMgbm90IHZhbGlkIGZvciAke3NlcnZpY2VUb0NoZWNrLm5hbWV9IGRldGFpbCBzY2hlbWEuYDtcbiAgICAgIGNvbnNvbGUud2FybignZGV0YWlsU2NoZW1hJywgc2VydmljZVRvQ2hlY2suZGV0YWlsU2NoZW1hKTtcbiAgICAgIGNvbnNvbGUud2FybignaXRlbS5kZXRhaWwnLCBpdGVtLmRldGFpbCk7XG4gICAgICBjb25zb2xlLndhcm4oJ0RldGFpbCBlcnJvcnMnLCB2YWxpZGF0ZURldGFpbFNjaGVtYS5lcnJvcnMpO1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk1vZGFsRXJyb3JDb21wb25lbnQsIHsgYmFja2Ryb3A6ICdzdGF0aWMnIH0sIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGl0ZW0ubG93ZXN0UHJpY2UpIGl0ZW0ubG93ZXN0UHJpY2UgPSAraXRlbS5sb3dlc3RQcmljZS50b0ZpeGVkKDIpO1xuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgZ2V0TnVtYmVySXRlbXNGb3JCYXNrZXQoYmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPiA9IG51bGwpOiBudW1iZXIge1xuICAgIGJhc2tldCA9IGJhc2tldCB8fCB0aGlzLmZpbmRCYXNrZXQodGhpcy5jdXJyZW50QmFza2V0SUQpO1xuICAgIHJldHVybiBiYXNrZXQ/LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMubGVuZ3RoIHx8IDA7XG4gIH1cblxuICByZW1vdmVCYXNrZXQoYmFza2V0aWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIGlmIChiYXNrZXRpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQmFza2V0VXBkYXRlci51cGRhdGVPbmUoeyBpZDogYmFza2V0aWQgfSkucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKChkYXRhOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICAgIHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk/LmRlc3RydWN0b3IoKTtcbiAgICAgICAgICB0aGlzLmZpbHRlclJlbW92ZUJhc2tldEJ5SWQoYmFza2V0aWQpO1xuICAgICAgICAgIGlmIChiYXNrZXRpZCA9PT0gdGhpcy5zZWxlY3RlZEJhc2tldElkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQmFza2V0SWQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gdGhpcy5jdXJyZW50QmFza2V0cy5maWx0ZXIoYmFza2V0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBiYXNrZXQuc3ViamVjdC52YWx1ZS5zdGF0dXMgPT09IEJhc2tldFN0YXR1cy5PcGVuO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdEYW4xMCcsdGhpcy5jdXJyZW50QmFza2V0cylcblxuICAgICAgICAgIHRoaXMuYmFza2V0cy5uZXh0KHRoaXMuY3VycmVudEJhc2tldHMpO1xuXG4gICAgICAgICAgaWYgKGJhc2tldGlkID09PSB0aGlzLmN1cnJlbnRCYXNrZXRJRCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSB0aGlzLmN1cnJlbnRCYXNrZXRzWzBdPy5pZCB8fCBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRlbGV0aW5nQmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHJldHVybiBvZihkYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29udGludWVTZWFyY2hBbmRCb29rKFxuICAgIGJhc2tldEl0ZW1zOiBhbnlbXSxcbiAgICBpdGluaWFyeVVybDogc3RyaW5nW10sXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2VcbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhdGVzdEJhc2tldEl0ZW1zID0gdGhpcy5nZXRMYXRlc3RCYXNrZXRJdGVtRm9yVHlwZXMoYmFza2V0SXRlbXMpO1xuICAgIGNvbnN0IG5leHRTZWFyY2g6IFNlYXJjaE9iamVjdCA9XG4gICAgICBzZWFyY2hTZXJ2aWNlLmdldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChsYXRlc3RCYXNrZXRJdGVtcyk7XG4gICAgY29uc3QgcGF0aCA9IHdpbmRvdz8ubG9jYXRpb24/Lmhhc2g7XG4gICAgY29uc3QgaGFzaFBhdGggPSBwYXRoPy5zcGxpdCgnIycpPy5bMV07XG4gICAgaWYgKFxuICAgICAgbmV4dFNlYXJjaCAmJlxuICAgICAgIShoYXNoUGF0aCA9PT0gbmV4dFNlYXJjaC5yZXN1bHRVcmwgJiYgbmV4dFNlYXJjaC50eXBlID09PSBTZXJ2aWNlVHlwZS5Ib3RlbClcbiAgICApIHtcbiAgICAgIGlmIChzZWFyY2hTZXJ2aWNlLmlzQ2xvbmluZy52YWx1ZSkge1xuICAgICAgICByZXR1cm4gW25leHRTZWFyY2gucmVzdWx0VXJsXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIChzZWFyY2hTZXJ2aWNlLnNlYXJjaGVzIGFzIGFueSlbbmV4dFNlYXJjaC50eXBlXS51cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcbiAgICAgICAgICBsYXRlc3RCYXNrZXRJdGVtc1xuICAgICAgICApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbmV4dFNlYXJjaC50eXBlID09PSBTZXJ2aWNlVHlwZS5Ib3RlbCAmJlxuICAgICAgICAgIHNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdPy5jaGVhcGVzdFByaWNlPy5hbW91bnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy9JZiBob3RlbHMgYXJlIG5leHQgYW5kIHRoZSBob3RlbCBzZWFyY2ggaGFzIGFscmVhZHkgYmVlbiBkb25lIGluIHRoZSBiYWNrZ3JvdW5kIGdvIHN0cmFpZ2h0IHRvIHRoZSByZXN1bHRzXG4gICAgICAgICAgcmV0dXJuIFtuZXh0U2VhcmNoLnJlc3VsdFVybF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFtuZXh0U2VhcmNoLnNlYXJjaFVybF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGl0aW5pYXJ5VXJsO1xuICAgIH1cbiAgfVxuXG4gIGFkZFRyYXZlbGxlcnMoXG4gICAgYmFza2V0aWQ6IHN0cmluZyxcbiAgICBiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLFxuICAgIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLFxuICAgIGluZGV4OiBudW1iZXIgPSAwXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgaWYgKGluZGV4IDwgdHJhdmVsbGVycy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHRyYXZlbGxlciA9IHRyYXZlbGxlcnNbaW5kZXhdO1xuICAgICAgY29uc3QgcGFzc2VuZ2VyVHlwZTogUGFzc2VuZ2VyVHlwZSA9IHRyYXZlbGxlci5pc0NoaWxkXG4gICAgICAgID8gUGFzc2VuZ2VyVHlwZS5DaGlsZFxuICAgICAgICA6IHRyYXZlbGxlci5pc0luZmFudFxuICAgICAgICA/IFBhc3NlbmdlclR5cGUuSW5mYW50XG4gICAgICAgIDogUGFzc2VuZ2VyVHlwZS5BZHVsdDtcblxuICAgICAgaWYgKHRyYXZlbGxlci5ndWVzdCkge1xuICAgICAgICB0aGlzLmFkZEd1ZXN0VG9CYXNrZXRJdGVtXG4gICAgICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgICAgICAgZ3Vlc3RzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogdHJhdmVsbGVyLmlkLFxuICAgICAgICAgICAgICAgIHBhc3NlbmdlclR5cGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZFRyYXZlbGxlcnMoYmFza2V0LmlkLCBiYXNrZXRJdGVtLCB0cmF2ZWxsZXJzLCBpbmRleCArIDEpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hZGRVc2VyVG9CYXNrZXRJdGVtXG4gICAgICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgICAgICAgdXNlcnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiB0cmF2ZWxsZXIuaWQsXG4gICAgICAgICAgICAgICAgcGFzc2VuZ2VyVHlwZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgd2l0aFN1cHBsZW1lbnRhbDogZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRUcmF2ZWxsZXJzKGJhc2tldC5pZCwgYmFza2V0SXRlbSwgdHJhdmVsbGVycywgaW5kZXggKyAxKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYXNrZXRGZXRjaGVyXG4gICAgICAgIC5mZXRjaE9uZSh7IGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSwgaWQ6IGJhc2tldC5pZCB9KVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChiYXNrZXQxOiBHZXRVc2VyQmFza2V0UmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBiYXNrZXQuc3ViamVjdC5uZXh0KHsgLi4uYmFza2V0LnN1YmplY3QudmFsdWUsIC4uLmJhc2tldDEgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBfID0+IHt9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIGJhc2tldC5uZXh0KGJhc2tldC5zdWJqZWN0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2V0TGVhZFBhc3NlbmdlcihcbiAgICBiYXNrZXRpZDogc3RyaW5nLFxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXG4gICAgdHJhdmVsbGVyczogVHJhdmVsbGVyLFxuICAgIGluZGV4OiBudW1iZXIgPSAwLFxuICAgIGxlYWRQYXNzZW5nZXJUeXBlOiBMZWFkUGFzc2VuZ2VyVHlwZSA9IExlYWRQYXNzZW5nZXJUeXBlLlVzZXJcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgYmFza2V0ID0gdGhpcy5maW5kQmFza2V0KGJhc2tldGlkKTtcbiAgICBpZiAoaW5kZXggPCAxKSB7XG4gICAgICB0aGlzLlNldEJhc2tldEl0ZW1MZWFkUGFzc2VuZ2VyLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGJhc2tldEl0ZW0uaWQsXG4gICAgICAgIHVzZXJPckd1ZXN0OiB0cmF2ZWxsZXJzLmlkLFxuICAgICAgICB3aXRoU3VwcGxlbWVudGFsOiBmYWxzZSxcbiAgICAgICAgbGVhZFBhc3NlbmdlclR5cGU6IGxlYWRQYXNzZW5nZXJUeXBlXG4gICAgICB9KS5zdWJzY3JpYmUoXG4gICAgICAgICgpID0+IHt9LFxuICAgICAgICAoKSA9PiB7fSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0TGVhZFBhc3NlbmdlcihiYXNrZXQuaWQsIGJhc2tldEl0ZW0sIHRyYXZlbGxlcnMsIGluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmFza2V0RmV0Y2hlclxuICAgICAgICAuZmV0Y2hPbmUoeyBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksIGlkOiBiYXNrZXQuaWQgfSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoYmFza2V0MTogR2V0VXNlckJhc2tldFJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgYmFza2V0LnN1YmplY3QubmV4dCh7IC4uLmJhc2tldC5zdWJqZWN0LnZhbHVlLCAuLi5iYXNrZXQxIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXyA9PiB7fSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBiYXNrZXQubmV4dChiYXNrZXQuc3ViamVjdC52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUJhc2tldChiYXNrZXRpZDogc3RyaW5nLCBvYnM6IE9ic2VydmFibGU8QmFza2V0RGV0YWlscz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnVwZGF0aW5nQmFza2V0ID0gdHJ1ZTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgb2JzLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxuICAgICAgICAoYmFza2V0OiBCYXNrZXREZXRhaWxzKSA9PiB7XG4gICAgICAgICAgLy8gRU5ULTc4MjcgYWRkZWQgdGhpcyB0aW1lb3V0IGFzIHdlIHdlcmUgdHJ5aW5nIHRvIGdyYWIgdGhlIGN1cnJlbnQgYmFza2V0cyBzb21ldGltZXMgYW5kIHdlIHdlcmUgc3RpbGwgd2FpdGluZyBmb3IgYW4gdXBkYXRlLCB0YmggaSB3b3VsZCBoYXZlIHJhdGhlciBmb3VuZCB3aGljaCBjYWxsIHdhcyBjYXVzaW5nIHRoZSBkZWxheVxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGluZ0Jhc2tldCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jdXJyZW50QmFza2V0cywgdGhpcy5jdXJyZW50QmFza2V0SUQsIGJhc2tldGlkKTtcbiAgICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgICAgICAgICAvLyBwYXNzaW5nIGFnZW50IGZvciBtaSBjaGVja1xuICAgICAgICAgICAgaW50QmFza2V0Py5uZXh0KGJhc2tldCwgdGhpcy5pc1VzZXJBZ2VudCgpKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRpbmdCYXNrZXQgPSBmYWxzZTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0aWQpO1xuICAgICAgICAgIGludEJhc2tldC5uZXh0KGludEJhc2tldC5zdWJqZWN0LnZhbHVlKTtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGluZ0Jhc2tldCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmV2YWxpZGF0ZShiYXNrZXRpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVCYXNrZXQoXG4gICAgICBiYXNrZXRpZCxcbiAgICAgIHRoaXMucmV2YWxpZGF0ZUJhc2tldFVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICBpZDogYmFza2V0aWQsXG4gICAgICAgIHdpdGhTdXBwbGVtZW50YWw6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmJhc2tldENoYW5nZUVtaXR0ZXIubmV4dChiYXNrZXRpZCk7XG4gIH1cblxuICAvLyB2YWxpZGF0ZUZyZWVWYWxlTWkobWlJdGVtOiBNYW5hZ2VtZW50SW5mbywgZnJlZVZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgLy8gICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAvLyAgICAgdGhpcy52YWxpZGF0ZU1pRnJlZVZhbHVlLnRlc3QoeyBtaTogbWlJdGVtLmlkLCBmcmVlVmFsdWUgfSkuc3Vic2NyaWJlKHJlc29sdmUsIHJlamVjdCk7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICBhY2NlcHROZXdQcmljZShiYXNrZXRpZDogc3RyaW5nLCBpdGVtOiBCYXNrZXRJdGVtKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVCYXNrZXQoXG4gICAgICBiYXNrZXRpZCxcbiAgICAgIHRoaXMuYWNjZXB0TmV3UHJpY2VVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGl0ZW0uaWRcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHZhbGlkYXRlTWlCYXNrZXRJdGVtKGJhc2tldEl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0ge1xuICAgICAgICBiYXNrZXRJdGVtSWRcbiAgICAgIH07XG4gICAgICB0aGlzLnZhbGlkYXRlQmFza2V0SXRlbU1pRmV0Y2hlci5mZXRjaE9uZShxdWVyeSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBhc3luYyB2YWxpZGF0ZU1pQmFza2V0KGJhc2tldElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gICBjb25zdCBxdWVyeSA9IHsgYmFza2V0SWQgfTtcbiAgLy8gICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy52YWxpZGF0ZUJhc2tldE1pRmV0Y2hlci5mZXRjaE9uZShxdWVyeSkpLnRoZW4oZGF0YSA9PiB7XG4gIC8vICAgICB0aGlzLm1pVmlld2VkID0gdHJ1ZTtcbiAgLy8gICAgIHRoaXMubWlzc2luZ01JcyA9IGRhdGE7XG4gIC8vICAgfSk7XG4gIC8vIH1cbiAgXG4gIGFzeW5jIHZhbGlkYXRlTWlCYXNrZXQoYmFza2V0SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0ge1xuICAgICAgYmFza2V0SWRcbiAgICB9O1xuICAgIHRoaXMudmFsaWRhdGVCYXNrZXRNaUZldGNoZXIuZmV0Y2hPbmUocXVlcnkpLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIHRoaXMubWlWaWV3ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5taXNzaW5nTUlzID0gZGF0YTtcbiAgICB9KTtcbiAgfVxuIFxuICBnZXRNaUF1dG9TdWdlc3Rpb25zKFxuICAgIG1pSWQ6IHN0cmluZyxcbiAgICB0ZXJtOiBzdHJpbmcsXG4gICAgaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXG4gICAgc2VydmljZUlkPzogc3RyaW5nLFxuICAgIG1pVmFsdWVHcm91cElkPzogc3RyaW5nLFxuICAgIHRyaWdnZXJNSVZhbHVlSWQ/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxNYW5hZ2VtZW50SW5mb1ZhbHVlW10+IHtcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XG5cbiAgICBjb25zdCBnZXRNaUF1dG9CeVZhbHVlOiBPYnNlcnZhYmxlPE1hbmFnZW1lbnRJbmZvVmFsdWVbXT4gPVxuICAgICAgdGhpcy5zZWFyY2hNSUF1dG9TdWdnZXN0VmFsdWVzRmV0Y2hlci5mZXRjaE9uZSh7XG4gICAgICAgIG1hbmFnZW1lbnRJbmZvSWQ6IG1pSWQsXG4gICAgICAgIHF1ZXJ5OiB0ZXJtLFxuICAgICAgICBtYW5hZ2VtZW50SW5mb1ZhbHVlR3JvdXBJZDogbWlWYWx1ZUdyb3VwSWQsXG4gICAgICAgIHRyaWdnZXJNSVZhbHVlSWRcbiAgICAgIH0pO1xuICAgIGNvbnN0IGdldE1pQXV0b0J5TGFiZWw6IE9ic2VydmFibGU8TWFuYWdlbWVudEluZm9WYWx1ZVtdPiA9XG4gICAgICB0aGlzLnNlYXJjaE1JQXV0b1N1Z2dlc3RWYWx1ZXNGZXRjaGVyLmZldGNoT25lKHtcbiAgICAgICAgbWFuYWdlbWVudEluZm9JZDogbWlJZCxcbiAgICAgICAgcXVlcnk6IHRlcm0sXG4gICAgICAgIG1hbmFnZW1lbnRJbmZvVmFsdWVHcm91cElkOiBtaVZhbHVlR3JvdXBJZCxcbiAgICAgICAgdHJpZ2dlck1JVmFsdWVJZFxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gZm9ya0pvaW4oW2dldE1pQXV0b0J5VmFsdWUsIGdldE1pQXV0b0J5TGFiZWxdKS5waXBlKFxuICAgICAgbWFwKChbbWlCeVZhbHVlLCBtaUJ5TGFiZWxdKSA9PiB7XG4gICAgICAgIGxldCBtaUJ5VmFsdWVMYWJlbCA9IFsuLi5taUJ5VmFsdWUsIC4uLm1pQnlMYWJlbF07XG4gICAgICAgIG1pQnlWYWx1ZUxhYmVsID0gbWlCeVZhbHVlTGFiZWwuZmlsdGVyKFxuICAgICAgICAgIChtaUl0ZW0sIGluZGV4KSA9PiBtaUJ5VmFsdWVMYWJlbC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09IG1pSXRlbS5pZCkgPT09IGluZGV4XG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKG1pQnlWYWx1ZUxhYmVsKTtcblxuICAgICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xuICAgICAgICByZXR1cm4gbWlCeVZhbHVlTGFiZWw7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBmb3JtYXRTYXZlZE1pKG1pOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSk6IFNldE1pVmFsdWVJbnB1dFtdIHtcbiAgICByZXR1cm4gbWkucmVkdWNlKChhY2MsIGl0ZW06IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZCkgPT4ge1xuICAgICAgaWYgKGl0ZW0uc2VsZWN0ZWRWYWx1ZSAmJiBpdGVtLnZhbHVlRWRpdGFibGUgJiYgKGl0ZW0ucmVxdWlyZWQgfHwgaXRlbS5jb25kaXRpb25hbCkpIHtcbiAgICAgICAgLy8gaWYgKGl0ZW0uc2VsZWN0ZWRWYWx1ZS5mcmVlVmFsdWUpIHtcbiAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgIG1pSWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgbWlWYWx1ZUlkOlxuICAgICAgICAgICAgaXRlbS51aVByZXNlbnRhdGlvbiAhPT0gJ0xPT0tVUCcgPyBpdGVtLnNlbGVjdGVkVmFsdWUubWFuYWdlbWVudEluZm9WYWx1ZT8uaWQgOiAnJyxcbiAgICAgICAgICBtaUZyZWVWYWx1ZTpcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWRWYWx1ZS5mcmVlVmFsdWUgfHwgaXRlbS5zZWxlY3RlZFZhbHVlLm1hbmFnZW1lbnRJbmZvVmFsdWU/LnZhbHVlLFxuICAgICAgICAgIG51bGxpZnlTZWxlY3RlZFZhbHVlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSBhcyBTZXRNaVZhbHVlSW5wdXRbXSk7XG4gIH1cblxuICBmaWx0ZXJQcmVTZWxlY3RlZE1JKFxuICAgIGl0ZW1MaXN0OiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSxcbiAgICB2YWx1ZTogQmFza2V0SW5mb01pRGV0YWlsc0ltcGxcbiAgKTogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10ge1xuICAgIHJldHVybiBpdGVtTGlzdC5maWx0ZXIoKGxpc3RJdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWQpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nTUkgPSB2YWx1ZS5iYXNrZXRJdGVtLm1hbmFnZW1lbnRJbmZvLmZpbmQoXG4gICAgICAgIChtaTogQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvKSA9PiBtaS5tYW5hZ2VtZW50SW5mby5pZCA9PT0gbGlzdEl0ZW0uaWRcbiAgICAgICk7XG4gICAgICBpZiAoIW1hdGNoaW5nTUkuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtYXRjaGluZ01JLnNlbGVjdGVkVmFsdWU/LmZyZWVWYWx1ZSAhPT0gbGlzdEl0ZW0uc2VsZWN0ZWRWYWx1ZT8uZnJlZVZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2F2ZU1pRGF0YShcbiAgICBiYXNrZXRJZDogc3RyaW5nLFxuICAgIHJlc3VsdHM6IHsgYmFza2V0SW5mb01pRGV0YWlsczogQmFza2V0SW5mb01pRGV0YWlsc0ltcGxbXTsgY29weUluZm86IENvcHlJbmZvSW5wdXRbXSB9XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJhc2tldEl0ZW1NSSA9IHJlc3VsdHMuYmFza2V0SW5mb01pRGV0YWlscztcbiAgICBjb25zdCBxdWVyeTogU2V0TWlWYWx1ZXNNdXRhdGlvblZhcmlhYmxlcyA9IHtcbiAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiBiYXNrZXRJdGVtTUlbMF0uYmFza2V0SXRlbS5jb252ZXJ0ZWRDdXJyZW5jeUNvZGUsXG4gICAgICBiYXNrZXRJdGVtTUlWYWx1ZXM6IFtdLFxuICAgICAgY29weUluZm86IHJlc3VsdHMuY29weUluZm9cbiAgICB9O1xuICAgIGNvbnN0IHBlckl0ZW1NaTogU2V0TWlWYWx1ZUlucHV0W10gPSBbXTtcbiAgICBjb25zdCBwZXJVc2VyTWk6IFNldE1pVmFsdWVJbnB1dFtdID0gW107XG4gICAgY29uc3QgcGVyR3Vlc3RNaTogU2V0TWlWYWx1ZUlucHV0W10gPSBbXTtcblxuICAgIGJhc2tldEl0ZW1NSS5mb3JFYWNoKCh2YWx1ZTogQmFza2V0SW5mb01pRGV0YWlsc0ltcGwpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkTGlzdEl0ZW0gPSB0aGlzLmZpbHRlclByZVNlbGVjdGVkTUkoXG4gICAgICAgIHZhbHVlLm1pUGVySXRlbSBhcyBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSxcbiAgICAgICAgdmFsdWVcbiAgICAgICk7XG4gICAgICBwZXJJdGVtTWkucHVzaCguLi50aGlzLmZvcm1hdFNhdmVkTWkoZmlsdGVyZWRMaXN0SXRlbSkpO1xuXG4gICAgICBPYmplY3QudmFsdWVzKHZhbHVlLm1pUGVyVXNlcikuZm9yRWFjaCh1c2VyTUlMaXN0ID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRMaXN0ID0gdGhpcy5maWx0ZXJQcmVTZWxlY3RlZE1JKFxuICAgICAgICAgIHVzZXJNSUxpc3QubWFuYWdlbWVudEluZm8gYXMgTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10sXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgcGVyVXNlck1pLnB1c2goLi4udGhpcy5mb3JtYXRTYXZlZE1pKGZpbHRlcmVkTGlzdCkpO1xuICAgICAgfSk7XG5cbiAgICAgIE9iamVjdC52YWx1ZXModmFsdWUubWlQZXJHdWVzdCkuZm9yRWFjaChcbiAgICAgICAgKHVzZXJNSUxpc3Q6IHsgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZExpc3QgPSB0aGlzLmZpbHRlclByZVNlbGVjdGVkTUkoXG4gICAgICAgICAgICB1c2VyTUlMaXN0Lm1hbmFnZW1lbnRJbmZvIGFzIE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIHBlckd1ZXN0TWkucHVzaCguLi50aGlzLmZvcm1hdFNhdmVkTWkoZmlsdGVyZWRMaXN0KSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gICAgcXVlcnkuYmFza2V0SXRlbU1JVmFsdWVzID0gWy4uLnBlckl0ZW1NaSwgLi4ucGVyVXNlck1pLCAuLi5wZXJHdWVzdE1pXTtcbiAgICBpZiAocXVlcnkuYmFza2V0SXRlbU1JVmFsdWVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZXRCYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlKGJhc2tldElkLCBxdWVyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRJZCk7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlTWlCYXNrZXQodGhpcy5jdXJyZW50QmFza2V0SUQpO1xuICAgICAgaW50QmFza2V0Lm5leHQoaW50QmFza2V0LnN1YmplY3QudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHNldEJhc2tldEl0ZW1NdWx0aXBsZU1JVmFsdWUoXG4gICAgYmFza2V0SWQ6IHN0cmluZyxcbiAgICBiYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlOiBTZXRNaVZhbHVlc011dGF0aW9uVmFyaWFibGVzXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KHRydWUpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0SWQpO1xuICAgICAgdGhpcy5zZXRNSVZhbHVlc1VwZGF0ZXJcbiAgICAgICAgLnVwZGF0ZU9uZShiYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiBhc3luYyAoYmFza2V0OiBCYXNrZXQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVNaUJhc2tldChiYXNrZXQuaWQpO1xuICAgICAgICAgICAgaW50QmFza2V0Lm5leHQoYmFza2V0KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLm1pVXBkYXRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0TWlWYWx1ZXMoXG4gICAgaXNSZWFzc2lnbjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGJhc2tldEl0ZW1NSVZhbHVlczogU2V0TWlWYWx1ZUlucHV0IHwgU2V0TWlWYWx1ZUlucHV0W11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcXVlcnkgPSB7XG4gICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICBiYXNrZXRJdGVtTUlWYWx1ZXMsXG4gICAgICB3aXRoU3VwcGxlbWVudGFsOiBpc1JlYXNzaWduXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KHRoaXMuY3VycmVudEJhc2tldElEKTtcbiAgICAgIHRoaXMuc2V0TUlWYWx1ZXNVcGRhdGVyXG4gICAgICAgIC51cGRhdGVPbmUocXVlcnkpXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGJhc2tldDogQmFza2V0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1pVXBkYXRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChiYXNrZXQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5taVVwZGF0aW5nLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRCYXNrZXRJdGVtUGF5bWVudE9wdGlvbihcbiAgICBiYXNrZXQ6IEJhc2tldERldGFpbHMsXG4gICAgYmFza2V0SXRlbTogQmFza2V0SXRlbSxcbiAgICBwYXltZW50TWV0aG9kOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlQmFza2V0KFxuICAgICAgYmFza2V0LmlkLFxuICAgICAgdGhpcy5zZXRQYXltZW50TWV0aG9kVXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW0uaWQsXG4gICAgICAgIHBheW1lbnRNZXRob2RcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBzZXRCYXNrZXRJdGVtUGF5bWVudE9wdGlvbk5vVXBkYXRlKFxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXG4gICAgcGF5bWVudE1ldGhvZDogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8QmFza2V0RGV0YWlscz4ge1xuICAgIHJldHVybiB0aGlzLnNldFBheW1lbnRNZXRob2RVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgcGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICB9XG4gIGJvb2tCYXNrZXQoXG4gICAgYmFza2V0aWQ6IHN0cmluZyxcbiAgICBzdXBwbGVtZW50YXJ5SW5mbzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvW10sXG4gICAgYWRkaXRpb25hbEVtYWlsOiBzdHJpbmdbXSxcbiAgICBhcHByb3Zlck5vdGVzPzogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNBcHByb3ZlZEJhc2tldCA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmJvb2tCYXNrZXRVcGRhdGVyXG4gICAgICAudXBkYXRlT25lKHtcbiAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICBpZDogYmFza2V0aWQsXG4gICAgICAgIHN1cHBsZW1lbnRhcnlJbmZvLFxuICAgICAgICBhZGRpdGlvbmFsRW1haWwsXG4gICAgICAgIGFwcHJvdmVyTm90ZXNcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihcbiAgICAgICAgKGJhc2tldDogQmFza2V0RGV0YWlscykgPT4ge1xuICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgYmFza2V0LmJhc2tldEl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5ib29raW5nRGV0YWlsPy5zdXBwbGllclJlc3A/LmJvb2s/LmRldGFpbHM/LnNlYXRTZWxlY3Rpb25Cb29rZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBXZSBoYXZlIGEgc2VhdCBzZWxlY3Rpb24gZXJyb3IgLSB0aHJvdyB1cCBhIHdhcm5pbmcgbW9kYWwgKysrYCk7XG4gICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5SYWlsU2VhdEF1dG9XYXJuaW5nTW9kYWxDb21wb25lbnQpO1xuICAgICAgICAgICAgICB0aGlzLmNsZWFyUmFpbFNlYXRzLm5leHQoaXRlbS5pZCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgICAgICAgaW50QmFza2V0LnN1YmplY3QudmFsdWUuc3RhdHVzID0gYmFza2V0LnN0YXR1cztcbiAgICAgICAgICBjb25zdCBpbnRCYXNrZXRJdGVtcyA9IGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmJhc2tldEl0ZW1zO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFza2V0LmJhc2tldEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUJhc2tldEl0ZW1zID0gYmFza2V0LmJhc2tldEl0ZW1zW2ldO1xuICAgICAgICAgICAgY29uc3QgaW50QmFza2V0SXRlbSA9IGludEJhc2tldEl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSByZXNwb25zZUJhc2tldEl0ZW1zLmlkKTtcblxuICAgICAgICAgICAgaWYgKGludEJhc2tldEl0ZW0pIHtcbiAgICAgICAgICAgICAgaW50QmFza2V0SXRlbS5zdGF0dXMgPSBiYXNrZXQuYmFza2V0SXRlbXNbaV0uc3RhdHVzO1xuICAgICAgICAgICAgICBpbnRCYXNrZXRJdGVtLmJvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlID1cbiAgICAgICAgICAgICAgICBiYXNrZXQuYmFza2V0SXRlbXNbaV0uYm9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2U7XG4gICAgICAgICAgICAgIGludEJhc2tldEl0ZW0ucG5yTG9jYXRvciA9IGJhc2tldC5iYXNrZXRJdGVtc1tpXS5wbnJMb2NhdG9yO1xuICAgICAgICAgICAgICBpbnRCYXNrZXRJdGVtLmJvb2tpbmdEZXRhaWwgPVxuICAgICAgICAgICAgICAgIGJhc2tldC5iYXNrZXRJdGVtc1tpXT8uYm9va2luZ0RldGFpbCB8fCBpbnRCYXNrZXRJdGVtLmJvb2tpbmdEZXRhaWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIGArKysgVW5hYmxlIHRvIGZpbmQgYmFza2V0IGl0ZW0gd2l0aCBpZDogJHtyZXNwb25zZUJhc2tldEl0ZW1zLmlkfSArKytgXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSAnJztcbiAgICAgICAgICBpbnRCYXNrZXQubmV4dChpbnRCYXNrZXQuc3ViamVjdC52YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgY29uc3QgYmFza2V0VXBkYXRlID0gYXdhaXQgdGhpcy5nZXRCYXNrZXQoe1xuICAgICAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICAgICAgaWQ6IGJhc2tldGlkLFxuICAgICAgICAgICAgd2l0aFN1cHBsZW1lbnRhbDogdHJ1ZVxuICAgICAgICAgIH0pLnRvUHJvbWlzZSgpO1xuICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgICAgICAgaW50QmFza2V0Lm5leHQoYmFza2V0VXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIG1vdmVCYXNrZXRJdGVtKG9yaWdpbmFsQmFza2V0SWQ6IHN0cmluZywgYmFza2V0SXRlbTogQmFza2V0SXRlbSwgYmFza2V0SWRUb01vdmVUbzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tb3ZlSXRlbVRvQURpZmZlcmVudEJhc2tldFxuICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgYmFza2V0SXRlbTogYmFza2V0SXRlbS5pZCxcbiAgICAgICAgbmV3QmFza2V0OiBiYXNrZXRJZFRvTW92ZVRvXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZEJhc2tldChvcmlnaW5hbEJhc2tldElkKTtcbiAgICAgICAgdGhpcy5sb2FkQmFza2V0KGJhc2tldElkVG9Nb3ZlVG8pO1xuICAgICAgfSk7XG4gIH1cblxuICB1cGRhdGVCYXNrZXROb3RlcyhiYXNrZXRJZDogc3RyaW5nLCBub3Rlczogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVCYXNrZXQoXG4gICAgICBiYXNrZXRJZCxcbiAgICAgIHRoaXMudXBkYXRlQmFza2V0Tm90ZXNVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGJhc2tldElkLFxuICAgICAgICBub3Rlc1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlQmFza2V0VGl0bGUoYmFza2V0SWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQmFza2V0KFxuICAgICAgYmFza2V0SWQsXG4gICAgICB0aGlzLnVwZGF0ZUJhc2tldFRpdGxlVXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGlkOiBiYXNrZXRJZCxcbiAgICAgICAgbmV3VGl0bGU6IHRpdGxlXG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgZ2V0QmFza2V0KHF1ZXJ5OiB7XG4gICAgY29udmVydEN1cnJlbmN5VG86IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIHdpdGhTdXBwbGVtZW50YWw6IGJvb2xlYW47XG4gIH0pOiBPYnNlcnZhYmxlPEdldFVzZXJCYXNrZXRSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNrZXRGZXRjaGVyLmZldGNoT25lKHF1ZXJ5KTtcbiAgfVxuXG4gIGdldEJhc2tldENvMkluZm8ocXVlcnk6IHtcbiAgICBjb252ZXJ0Q3VycmVuY3lUbzogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgd2l0aFN1cHBsZW1lbnRhbDogYm9vbGVhbjtcbiAgfSk6IE9ic2VydmFibGU8R2V0VXNlckJhc2tldFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmJhc2tldENvMkZldGNoZXIuZmV0Y2hPbmUocXVlcnkpO1xuICB9XG5cbiAgYWRkQmFza2V0SXRlbU1hcmt1cChcbiAgICBiYXNrZXRJdGVtSWQ6IHN0cmluZyxcbiAgICBhbW91bnQ6IG51bWJlcixcbiAgICBhZ2VudElkOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXREZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQmFza2V0SXRlbU1hcmt1cFVwZGF0ZXJcbiAgICAgIC51cGRhdGVPbmUoe1xuICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtSWQsXG4gICAgICAgIG1hcmt1cDogJycsXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgICAgYWdlbnQ6IGFnZW50SWQsXG4gICAgICAgIHRpdGxlOiAnQWdlbnQgTWFya3VwJ1xuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoYmFza2V0ID0+IHtcbiAgICAgICAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0LmlkKTtcbiAgICAgICAgICBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5iYXNrZXRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgbWFya3VwSW5mbyA9IGJhc2tldC5iYXNrZXRJdGVtcy5maW5kKG1hcmtVcEl0ZW0gPT4gbWFya1VwSXRlbS5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgICBpdGVtLnByaWNlID0gbWFya3VwSW5mby5wcmljZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpbnRCYXNrZXQubmV4dChpbnRCYXNrZXQuc3ViamVjdC52YWx1ZSwgdGhpcy5pc1VzZXJBZ2VudCgpKTtcblxuICAgICAgICAgIHJldHVybiBiYXNrZXQ7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgYXRMZWFzdE9uZVNlYXJjaENob3NlbigpOiBib29sZWFuIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGFueSBpdGVtIG9uIGFueSBiYXNrZXQgd2Ugc2hvdyBiYXNrZXRzIGluIHNlYXJjaCBzY3JlZW5cbiAgICByZXR1cm4gISF0aGlzLmN1cnJlbnRCYXNrZXRzLmZpbHRlcihiYXNrZXQgPT4gYmFza2V0LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMubGVuZ3RoKS5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgZ2V0QmFza2V0U3RhdHMoaW5kZXg6IG51bWJlcik6IEJlaGF2aW9yU3ViamVjdDxCYXNrZXRQcmljZXM+IHtcbiAgICBjb25zdCBiYXNrZXRQcmljZXNPYmogPSB0aGlzLmJhc2tldHMudmFsdWVbaW5kZXhdPy5zdWJqZWN0Py52YWx1ZT8ucHJpY2VzIHx8IHt9O1xuICAgIGNvbnN0IGJhc2tldFByaWNlc0tleSA9IE9iamVjdC5rZXlzKGJhc2tldFByaWNlc09iailbMF07XG4gICAgaWYgKGJhc2tldFByaWNlc0tleSkge1xuICAgICAgdGhpcy5iYXNrZXRQcmljZXMudmFsdWUuY3VycmVuY3kgPSBiYXNrZXRQcmljZXNLZXk7XG4gICAgICB0aGlzLmJhc2tldFByaWNlcy52YWx1ZS50b3RhbCA9XG4gICAgICAgIHRoaXMuYmFza2V0cy52YWx1ZVtpbmRleF0uc3ViamVjdC52YWx1ZS5wcmljZXNbYmFza2V0UHJpY2VzS2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYXNrZXRQcmljZXMudmFsdWUudG90YWwgPSAwO1xuICAgIH1cblxuICAgIHRoaXMuYmFza2V0UHJpY2VzLnZhbHVlLmxpc3QuZm9yRWFjaChrZXlzID0+IHtcbiAgICAgIGtleXMucHJpY2UgPSB0aGlzLmJhc2tldHMudmFsdWVbaW5kZXhdPy5zdWJqZWN0Py52YWx1ZT8uYmFza2V0SXRlbXNcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VydmljZS50eXBlID09PSBrZXlzLnR5cGUpXG4gICAgICAgIC5yZWR1Y2UoKHN1bSwgY3VycmVudCkgPT4gc3VtICsgY3VycmVudC5wcmljZSwgMCk7XG4gICAgICBrZXlzLmNvMiA9IHRoaXMuYmFza2V0cy52YWx1ZVtpbmRleF0/LnN1YmplY3Q/LnZhbHVlPy5iYXNrZXRJdGVtc1xuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZXJ2aWNlLnR5cGUgPT09IGtleXMudHlwZSlcbiAgICAgICAgLnJlZHVjZSgoc3VtLCBjdXJyZW50KSA9PiBzdW0gKyBjdXJyZW50LmNvMlBlckl0ZW0sIDApO1xuICAgIH0pO1xuXG4gICAgdGhpcy5iYXNrZXRQcmljZXMudmFsdWUudG90YWxDbzIgPSB0aGlzLmJhc2tldFByaWNlcy52YWx1ZS5saXN0LnJlZHVjZShcbiAgICAgIChzdW0sIGN1cnJlbnQpID0+IHN1bSArIGN1cnJlbnQuY28yLFxuICAgICAgMFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuYmFza2V0UHJpY2VzO1xuICB9XG5cbiAgY2FuQ2FuY2VsKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiBPYnNlcnZhYmxlPEJlZm9yZUNhbmNlbGxhdGlvbkluZm8+IHtcbiAgICAvLyBOb3QgY2FuY2VsbGFibGUgaWYgdGhlIG91dGJvdW5kIGRhdGUgcGFzc2VkIGZvciBhbGwgaXRlbSB0eXBlcyBvdGhlciB0aGFuIGhvdGVsLCBmb3IgaG90ZWwgaWYgaXQgaXMgdGhlIHNhbWUgZGF5IHRoZW4gd2UgbmVlZCB0byBjaGVjayBCRVxuICAgIGlmIChcbiAgICAgIChtb21lbnQoYmFza2V0SXRlbS5vdXRib3VuZERhdGUpLmRpZmYobW9tZW50KG5ldyBEYXRlKCkpLCAnbWludXRlcycpIDw9IDAgJiZcbiAgICAgICAgYmFza2V0SXRlbS5zZXJ2aWNlLnR5cGUgIT09IFNlcnZpY2VUeXBlLkhvdGVsKSB8fFxuICAgICAgKGJhc2tldEl0ZW0uc2VydmljZS50eXBlID09PSBTZXJ2aWNlVHlwZS5Ib3RlbCAmJlxuICAgICAgICBtb21lbnQoYmFza2V0SXRlbS5vdXRib3VuZERhdGUpLmRpZmYobW9tZW50KG5ldyBEYXRlKCkpLCAnbWludXRlcycpIDw9IDAgJiZcbiAgICAgICAgIW1vbWVudChiYXNrZXRJdGVtLm91dGJvdW5kRGF0ZSkuaXNTYW1lKG1vbWVudChuZXcgRGF0ZSgpKSwgJ2RhdGUnKSlcbiAgICApIHtcbiAgICAgIHJldHVybiBvZih7XG4gICAgICAgIGNhbmNlbGxhYmxlOiBmYWxzZSxcbiAgICAgICAgY2FuY2VsbGF0aW9uRmVlOiAwLFxuICAgICAgICBpbmZvOiAnT3V0Ym91bmQgZGF0ZXRpbWUgcGFzc2VkLidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGJhc2tldEl0ZW0uc3RhdHVzID09PSBCYXNrZXRJdGVtU3RhdHVzLkJvb2tlZCB8fFxuICAgICAgYmFza2V0SXRlbS5zdGF0dXMgPT09IEJhc2tldEl0ZW1TdGF0dXMuUGFydGlhbGx5Q2FuY2VsbGVkXG4gICAgKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDYW5jZWxsZWRJbmZvID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGNhbkJlQ2FuY2VsbGVkID0gdGhpcy5nZXRDYW5jZWxsYXRpb25JbmZvRmV0Y2hlci5mZXRjaE9uZSh7XG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW0uaWRcbiAgICAgIH0pO1xuICAgICAgY2FuQmVDYW5jZWxsZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nQ2FuY2VsbGVkSW5mbyA9IGZhbHNlO1xuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ0NhbmNlbGxlZEluZm8gPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgfSApO1xuICAgICAgcmV0dXJuIGNhbkJlQ2FuY2VsbGVkO1xuICAgIH1cblxuICAgIHJldHVybiBvZih7XG4gICAgICBjYW5jZWxsYWJsZTogZmFsc2UsXG4gICAgICBjYW5jZWxsYXRpb25GZWU6IDAsXG4gICAgICBpbmZvOiBcIkl0ZW0gaXNuJ3QgYm9va2VkXCJcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUJvb2tlZEJhc2tldCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gdGhpcy5jdXJyZW50QmFza2V0cy5yZWR1Y2UoKGFjYywgYmFza2V0KSA9PiB7XG4gICAgICBpZiAoYmFza2V0LnN1YmplY3QudmFsdWUuc3RhdHVzICE9PSBCYXNrZXRTdGF0dXMuQm9va2VkKSB7XG4gICAgICAgIGFjYy5wdXNoKGJhc2tldCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgICAvLyBjb25zb2xlLmxvZygnRGFuMTEnLHRoaXMuY3VycmVudEJhc2tldHMpXG5cbiAgICB0aGlzLmJhc2tldHMubmV4dCh0aGlzLmN1cnJlbnRCYXNrZXRzKTtcbiAgfVxuXG4gIHNob3dFcnJvck1vZGFsKCkge1xuICAgIGNvbnN0IG9mZmljZSA9IHRoaXMudXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLmFsbERldGFpbHMudmFsdWUub2ZmaWNlO1xuICAgIGNvbnN0IGVtYWlsID0gb2ZmaWNlPy5zdXBwb3J0RW1haWwgfHwgJyc7XG4gICAgY29uc3QgY291bnRyeUNvZGUgPSBvZmZpY2U/LnN1cHBvcnRQaG9uZU51bWJlcj8uY291bnRyeUNvZGVcbiAgICAgID8gJysnICsgb2ZmaWNlPy5zdXBwb3J0UGhvbmVOdW1iZXI/LmNvdW50cnlDb2RlXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IG51bWJlciA9IG9mZmljZT8uc3VwcG9ydFBob25lTnVtYmVyPy5udW1iZXIgPyBvZmZpY2U/LnN1cHBvcnRQaG9uZU51bWJlcj8ubnVtYmVyIDogJyc7XG4gICAgY29uc3QgYXJlYUNvZGUgPSBvZmZpY2U/LnN1cHBvcnRQaG9uZU51bWJlcj8uYXJlYUNvZGVcbiAgICAgID8gb2ZmaWNlPy5zdXBwb3J0UGhvbmVOdW1iZXI/LmFyZWFDb2RlXG4gICAgICA6ICcnO1xuXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgIE1vZGFsVHlwZXMuTW9kYWxFcnJvckNvbXBvbmVudCxcbiAgICAgIHsgYmFja2Ryb3A6ICdzdGF0aWMnIH0sXG4gICAgICB7XG4gICAgICAgIGVycm9yOlxuICAgICAgICAgICdUaGVyZSBhcmUgbWlzc2luZyB2YWx1ZXMgaW4gdGhlIE1hbmFnZW1lbnQgSW5mb3JtYXRpb24gc2VjdGlvbiB3aXRoaW4geW91ciBjb25maWd1cmF0aW9uLicsXG4gICAgICAgIG1pRXJyb3I6IHRydWUsXG4gICAgICAgIGVtYWlsLFxuICAgICAgICBudW1iZXI6IGAke2NvdW50cnlDb2RlfSAke2FyZWFDb2RlfSAke251bWJlcn1gXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHNob3dFcnJvck1vZGFsQXBwcm92ZXJzKCkge1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICBNb2RhbFR5cGVzLk1vZGFsRXJyb3JDb21wb25lbnQsXG4gICAgICB7IGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAge1xuICAgICAgICBlcnJvcjpcbiAgICAgICAgICAnWW91IGNhbm5vdCBjb250aW51ZSBhcyB5b3VyIHByb2ZpbGUgaXMgY29uZmlndXJlZCB0byBnbyBmb3IgYXBwcm92YWwgYnV0IHlvdSBoYXZlIG5vIGFwcHJvdmVycyBhc3NpZ25lZC4nXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVCYXNrZXRTY3JhdGNocGFkTm90ZShiYXNrZXRJZDogc3RyaW5nLCBub3RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEJhc2tldE5vdGU+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVCYXNrZXROb3RlLnVwZGF0ZU9uZSh7IGJhc2tldElkLCBub3RlIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEJhc2tldFNjcmF0Y2hwYWROb3RlcyhiYXNrZXRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXROb3RlW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNrZXROb3Rlcy5mZXRjaExpc3QoeyBiYXNrZXRJZCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZW1hcmtzKHNlcnZpY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIHJldHVybiBvZihNaUNvbW1hbmQpO1xuICB9XG5cbiAgcHVibGljIGdldEJhc2tldEl0ZW1SZW1hcmtzKGJhc2tldEl0ZW1JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrcy5mZXRjaExpc3QoeyBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtSWQgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkQmFza2V0SXRlbVJlbWFyayhcbiAgICBiYXNrZXRJdGVtSWQ6IHN0cmluZyxcbiAgICByZW1hcmtUeXBlOiBzdHJpbmcsXG4gICAgdGV4dDogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8QmFza2V0SXRlbUN1c3RvbVJlbWFyaz4ge1xuICAgIHJldHVybiB0aGlzLmFkZEJhc2tldEl0ZW1DdXN0b21SZW1hcmsudXBkYXRlT25lKHtcbiAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW1JZCxcbiAgICAgIHJlbWFya190eXBlOiByZW1hcmtUeXBlLFxuICAgICAgdGV4dFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEJhc2tldFF1b3RlKGJhc2tldElkOiBzdHJpbmcsIHJlc2VuZDogYm9vbGVhbiwgbm90ZT86IHN0cmluZyk6IE9ic2VydmFibGU8QmFza2V0UXVvdGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNrZXRRdW90ZUZldGNoZXIuZmV0Y2hMaXN0KHsgYmFza2V0OiBiYXNrZXRJZCwgcmVzZW5kLCBub3RlIH0pO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZUJhc2tldE93bmVyc2hpcChcbiAgICBiYXNrZXRJZDogc3RyaW5nLFxuICAgIHVzZXJJZDogc3RyaW5nLFxuICAgIG5vdGU/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXRRdW90ZT4ge1xuICAgIHJldHVybiB0aGlzLmNoYW5nZUJhc2tldE93bmVyc2hpcFVwZGF0ZXIudXBkYXRlT25lKHsgYmFza2V0OiBiYXNrZXRJZCwgdXNlcjogdXNlcklkLCBub3RlIH0pO1xuICB9XG5cbiAgcHVibGljIGdldERyYWZ0QmFza2V0cyhcbiAgICBkcmFmdEJhc2tldFR5cGU6IERyYWZ0QmFza2V0VHlwZSA9IERyYWZ0QmFza2V0VHlwZS5BbGxcbiAgKTogT2JzZXJ2YWJsZTxEcmFmdEJhc2tldD4ge1xuICAgIHJldHVybiB0aGlzLmdldERyYWZ0QmFza2V0c0ZldGNoZXIuZmV0Y2hMaXN0KHsgZHJhZnRCYXNrZXRUeXBlIH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2VuZEFwcHJvdmFsKGlkOiBzdHJpbmcsIGFwcHJvdmVyQ2hhbmdlZCA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5yZXNlbmRBcHByb3ZlckVtYWlsLmZldGNoTGlzdCh7IGlkLCBhcHByb3ZlckNoYW5nZWQgfSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgTW9kYWxUeXBlcy5SZXNlbmRBcHByb3ZhbEVtYWlsQ29tcG9uZW50LFxuICAgICAgICB7IGNlbnRlcmVkOiB0cnVlLCBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgICAgeyBkYXRhOiAhIWRhdGEgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0lmQmFza2V0UmVxdWlyZXNBcHByb3ZhbChiYXNrZXQ6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmJhc2tldFJlcXVpcmVzQXBwcm92YWwuZmV0Y2hMaXN0KHsgYmFza2V0IH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2V0QmFza2V0cygpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gW107XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyUmVtb3ZlQmFza2V0QnlJZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50QmFza2V0cyA9IHRoaXMuY3VycmVudEJhc2tldHMuZmlsdGVyKGJhc2tldCA9PiBiYXNrZXQuaWQgIT09IGlkKTtcbiAgfVxuXG4gIGNyZWF0ZUludEJhc2tldChiYXNrZXQ6IFVzZXJCYXNrZXRSZXN1bHQpOiBJbnRlcm5hbEJhc2tldDxHVV9RPiB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcm5hbEJhc2tldChcbiAgICAgIGJhc2tldCxcbiAgICAgIHRoaXMuaGVscGVycyxcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLmdldFVzZXJGZXRjaGVyLFxuICAgICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UsXG4gICAgICB0aGlzLnJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZUJhc2tldEZyb21EcmFmdChcbiAgICBkcmFmdEJhc2tldElkOiBzdHJpbmcsXG4gICAgbGVhZFBhc3NlbmdlcklkOiBzdHJpbmcsXG4gICAgbWFuYWdlbWVudEluZm86IFNldE1pVmFsdWVJbnB1dFtdLFxuICAgIHVzZXJJbmZvOiBVc2VySW5mb0lucHV0W10sXG4gICAgYW1lbmQ6IGJvb2xlYW5cbiAgKTogT2JzZXJ2YWJsZTxHZXRVc2VyQmFza2V0UmVzdWx0PiB7XG4gICAgLy8gY29uc3QgdXBkYXRlZE1pRm9ybWF0ID0gdGhpcy5mb3JtYXRTYXZlZE1pKG1hbmFnZW1lbnRJbmZvKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICBkcmFmdEJhc2tldElkLFxuICAgICAgbGVhZFBhc3NlbmdlcklkLFxuICAgICAgdXNlckluZm8sIC8vIFVTRVJJTkZvSW5wdXRbXVxuICAgICAgbWFuYWdlbWVudEluZm8sIC8vIFNldE1JVmFsdWVJbnB1dFtdXG4gICAgICBhbWVuZFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0QXBwcm92ZXJMaXN0QW5kVXBkYXRlKGJhc2tldDogc3RyaW5nKTogUHJvbWlzZTxTdWJzY3JpcHRpb24+IHtcbiAgICAvLyByYW4gb3V0IG9mIHdpbGwgdG8gZ2V0IHRoaXMgd29ya2luZywgd2lsbCBuZWVkIHRvIGdldCB0aGlzIHdvcmtpbmcgZm9yIG90aGVyIE9CVHNcbiAgICBjb25zdCBvZmZpY2UgPSB0aGlzLmdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0VXNlckFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgcmV0dXJuIGZvcmtKb2luKFtvZmZpY2UsIHVzZXJdKS5zdWJzY3JpYmUoYXN5bmMgKGFwcHJvdmVyczogYW55KSA9PiB7XG4gICAgICBjb25zdCBhbGxBcHByb3ZlcnMgPSBhcHByb3ZlcnNbMF0uY29uY2F0KGFwcHJvdmVyc1sxXSk7XG4gICAgICBjb25zdCBlbWFpbHMgPSBhbGxBcHByb3ZlcnMubWFwKCh7IGVtYWlsIH06IFVzZXIpID0+IGVtYWlsKTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQXBwcm92ZXJzID0gYWxsQXBwcm92ZXJzLmZpbHRlcihcbiAgICAgICAgKHsgZW1haWwgfTogVXNlciwgaW5kZXg6IG51bWJlcikgPT4gIWVtYWlscy5pbmNsdWRlcyhlbWFpbCwgaW5kZXggKyAxKVxuICAgICAgKTtcbiAgICAgIGlmIChmaWx0ZXJlZEFwcHJvdmVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYXBwcm92ZXIgPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICAgIE1vZGFsVHlwZXMuQXBwcm92ZXJzTW9kYWxDb21wb25lbnQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxuICAgICAgICAgICAgd2luZG93Q2xhc3M6ICdyZXF1aXJlcy1yZWFzb24tZGlhbG9nJyxcbiAgICAgICAgICAgIGNlbnRlcmVkOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGZpbHRlcmVkQXBwcm92ZXJzIH1cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoYXBwcm92ZXIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RCYXNrZXRBcHByb3ZlclVwZGF0ZXJcbiAgICAgICAgICAgIC51cGRhdGVPbmUoe1xuICAgICAgICAgICAgICBiYXNrZXQsXG4gICAgICAgICAgICAgIGFwcHJvdmVyXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0QXBwcm92ZXJzTGlzdCgpOiBPYnNlcnZhYmxlPFtVc2VyW10sIFVzZXJbXV0+IHtcbiAgICBjb25zdCBvZmZpY2UgPSB0aGlzLmdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0VXNlckFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgcmV0dXJuIGZvcmtKb2luKFtvZmZpY2UsIHVzZXJdKTtcbiAgfVxuXG4gIGdldEFwcHJvdmVyc1Blck1JTGlzdChiYXNrZXQ6IHN0cmluZyk6IE9ic2VydmFibGU8VXNlcltdPiB7XG4gICAgY29uc3QgYXBwcm92ZXJzID0gdGhpcy5nZXRNSUFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KHsgYmFza2V0SWQ6IGJhc2tldCB9KTtcbiAgICByZXR1cm4gYXBwcm92ZXJzO1xuICB9XG5cbiAgdXBkYXRlQXBwcm92ZXIoXG4gICAgYmFza2V0OiBzdHJpbmcsXG4gICAgYXBwcm92ZXI6IHN0cmluZyxcbiAgICBjb252ZXJ0Q3VycmVuY3lUbz86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEJhc2tldERldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RCYXNrZXRBcHByb3ZlclVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgIGJhc2tldCxcbiAgICAgIGFwcHJvdmVyLFxuICAgICAgY29udmVydEN1cnJlbmN5VG9cbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZU11bHRpTGV2ZWxBcHByb3ZlcnMoXG4gICAgYmFza2V0OiBzdHJpbmcsXG4gICAgbXVsdGlMZXZlbEFwcHJvdmVyczogc3RyaW5nW11cbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXREZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0QmFza2V0TXVsdGlMZXZlbEFwcHJvdmVyc1VwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgIGJhc2tldCxcbiAgICAgIG11bHRpTGV2ZWxBcHByb3ZlcnNcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZU5vdGlmeUFwcHJvdmVyKFxuICAgIGJhc2tldDogc3RyaW5nLFxuICAgIGFwcHJvdmVyOiBzdHJpbmcsXG4gICAgY29udmVydEN1cnJlbmN5VG8/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXREZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICBiYXNrZXQsXG4gICAgICBhcHByb3ZlcixcbiAgICAgIGNvbnZlcnRDdXJyZW5jeVRvXG4gICAgfSk7XG4gIH1cblxuICBvcGVuQXBwcm92ZXJNb2RhbChcbiAgICBhcHByb3ZlcnM6IFVzZXJbXSxcbiAgICBpc1NlbGVjdGVkQXBwcm92ZXI6IGJvb2xlYW4sXG4gICAgaXNTZWxlY3RlZE1JQXBwcm92ZXI6IGJvb2xlYW4sXG4gICAgaXNTZWxlY3RlZE5vdGlmeUFwcHJvdmVyOiBib29sZWFuLFxuICAgIGlzU2VsZWN0ZWROb3RpZnlBcHByb3ZlclBlck1JOiBib29sZWFuLFxuICAgIGJhc2tldFVzZXI6IFVzZXIsXG4gICAgYXBwcm92YWxMZXZlbDogbnVtYmVyXG4gICk6IFByb21pc2U8QmFza2V0U2VsZWN0ZWRBcHByb3Zlcj4ge1xuICAgIGNvbnNvbGUud2FybihgKysrIE9wZW5pbmcgYXBwcm92YWwgbW9kYWwgYXQgbGV2ZWw6ICR7YXBwcm92YWxMZXZlbH0gKysrYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgIE1vZGFsVHlwZXMuQXBwcm92ZXJzTW9kYWxDb21wb25lbnQsXG4gICAgICB7XG4gICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcbiAgICAgICAgd2luZG93Q2xhc3M6ICdyZXF1aXJlcy1yZWFzb24tZGlhbG9nJyxcbiAgICAgICAgY2VudGVyZWQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFwcHJvdmVycyxcbiAgICAgICAgaXNTZWxlY3RlZEFwcHJvdmVyLFxuICAgICAgICBpc1NlbGVjdGVkTm90aWZ5QXBwcm92ZXIsXG4gICAgICAgIGlzU2VsZWN0ZWROb3RpZnlBcHByb3ZlclBlck1JLFxuICAgICAgICBiYXNrZXRVc2VyLFxuICAgICAgICBhcHByb3ZhbExldmVsLFxuICAgICAgICBpc1NlbGVjdGVkTUlBcHByb3ZlclxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzaGFyZUJhc2tldChiYXNrZXRJZDogc3RyaW5nLCBzaGFyZWRVc2Vyczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPEJhc2tldD4ge1xuICAgIHJldHVybiB0aGlzLnNoYXJlQmFza2V0VXBkYXRlci51cGRhdGVPbmUoeyBiYXNrZXRJZCwgc2hhcmVkVXNlcnMgfSk7XG4gIH1cblxuICBnZXRVc2VyU2hhcmVkQmFza2V0cyhsb2dnZWRJblVzZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXRbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlci5mZXRjaExpc3QoeyBsb2dnZWRJblVzZXJJZCB9KTtcbiAgfVxuXG4gIC8vICEgLSBVc2UgbG9jYWxzdG9yYWdlIHRvIHRyYWNrIHRoZSBzaXplIG9mIHNoYXJlZCBiYXNrZXRzIGZvciBlYWNoIHVzZXJcbiAgLy8gISAtIHRha2VzIG9ubHkgYSBmZXcgYnl0ZXMgLSB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBhbW91bnQgdXNlZFxuICAvLyAtIHNvbWUgaGVscGZ1bCBjb2RlIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiBsb2NhbCBzdG9yYWdlIC0gdXNlIGl0IGluIHRoZSBicm93c2VyIGNvbnNvbGVcbiAgLy8gdmFyIF9sc1RvdGFsPTAsX3hMZW4sX3g7Zm9yKF94IGluIGxvY2FsU3RvcmFnZSl7IGlmKCFsb2NhbFN0b3JhZ2UuaGFzT3duUHJvcGVydHkoX3gpKXtjb250aW51ZTt9IF94TGVuPSAoKGxvY2FsU3RvcmFnZVtfeF0ubGVuZ3RoICsgX3gubGVuZ3RoKSogMik7X2xzVG90YWwrPV94TGVuOyBjb25zb2xlLmxvZyhfeC5zdWJzdHIoMCw1MCkrXCIgPSBcIisgKF94TGVuLzEwMjQpLnRvRml4ZWQoMikrXCIgS0JcIil9O2NvbnNvbGUubG9nKFwiVG90YWwgPSBcIiArIChfbHNUb3RhbCAvIDEwMjQpLnRvRml4ZWQoMikgKyBcIiBLQlwiKTtcblxuICB1cGRhdGVTaGFyZWRCYXNrZXRDb3VudChzaGFyZWRCYXNrZXRzOiBCYXNrZXRbXSwgdXNlcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldExvY2FsSXRlbShgJHt1c2VySWR9X3NoYXJlZF9iYXNrZXRfY291bnRgLCBzaGFyZWRCYXNrZXRzLmxlbmd0aCk7XG4gIH1cblxuICBnZXRTaGFyZWRCYXNrZXRDb3VudCh1c2VySWQ6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3Qgc3RvcmVkID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRMb2NhbEl0ZW0oYCR7dXNlcklkfV9zaGFyZWRfYmFza2V0X2NvdW50YCk7XG5cbiAgICByZXR1cm4gc3RvcmVkO1xuICB9XG5cbiAgY2FuQW1lbmRCb29raW5nKFxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXG4gICAgYXJyaXZhbERhdGU/OiBzdHJpbmcsXG4gICAgZGVwYXJ0dXJlRGF0ZT86IHN0cmluZyxcbiAgICBmaXJzdENoZWNrID0gZmFsc2VcbiAgKTogT2JzZXJ2YWJsZTxCZWZvcmVBbWVuZEluZm8+IHtcbiAgICBpZiAoYmFza2V0SXRlbS5zdGF0dXMgPT09IEJhc2tldEl0ZW1TdGF0dXMuQm9va2VkKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYW5BbWVuZEJvb2tpbmdJbmZvRmV0Y2hlci5mZXRjaE9uZSh7XG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW0uaWQsXG4gICAgICAgIGFycml2YWxEYXRlOiBhcnJpdmFsRGF0ZSxcbiAgICAgICAgZGVwYXJ0dXJlRGF0ZTogZGVwYXJ0dXJlRGF0ZSxcbiAgICAgICAgZmlyc3RDaGVja1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHtcbiAgICAgIGNhbkFtZW5kOiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgY2hlY2tGb3JTZWxmQXBwcm92ZShiYXNrZXQ6IEJhc2tldERldGFpbHMpOiBib29sZWFuIHtcbiAgICBjb25zdCBiYXNrZXRVc2VyID0gYmFza2V0Lmludm9rZWRVc2VyID8gYmFza2V0Lmludm9rZWRVc2VyIDogYmFza2V0Lm93bmVyO1xuICAgIGNvbnN0IGlzQWxsb3dTZWxmQXBwcm92ZSA9IGJhc2tldFVzZXIub2ZmaWNlLmFsbG93U2VsZkFwcHJvdmU7XG4gICAgY29uc3QgdXNlckFwcHJvdmVycyA9IGJhc2tldFVzZXIudXNlckFwcHJvdmVycztcbiAgICBpZiAoaXNBbGxvd1NlbGZBcHByb3ZlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgaXNTZWxmQXBwcm92ZXIgPVxuICAgICAgdXNlckFwcHJvdmVycy5sZW5ndGggPT09IDEgJiYgdXNlckFwcHJvdmVyc1swXT8uYXBwcm92ZXIuaWQgPT09IGJhc2tldFVzZXIuaWQ7XG4gICAgcmV0dXJuICFpc1NlbGZBcHByb3ZlcjtcbiAgfVxuXG4gIGFzeW5jIG9wZW5BcHByb3ZlV2FybmluZyh3YXJuaW5nTWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgIE1vZGFsVHlwZXMuQmFzaWNNb2RhbENvbXBvbmVudCxcbiAgICAgIHsgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcsIGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJycsXG4gICAgICAgIGJvZHk6IHdhcm5pbmdNZXNzYWdlLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYnV0dG9uT2s6IHRydWUsXG4gICAgICAgICAgYnV0dG9uT2tUZXh0OiAnT2snLFxuICAgICAgICAgIGJ1dHRvbkNhbmNlbDogZmFsc2UsXG4gICAgICAgICAgYnV0dG9uT2tBY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBnZXRUcmFpblNlYXRNYXAoaWQ6IHN0cmluZyk6IFByb21pc2U8VHJhaW5TZWF0TWFwPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHJhaW5TZWF0TWFwRmV0Y2hlci5mZXRjaExpc3QoeyBpdGluZXJhcnlJZDogaWQgfSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBzZXRSZXF1aXJlc1JlYXNvbkJvb2tpbmcoaXNCb29raW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UuaXNCb29raW5nID0gaXNCb29raW5nO1xuICB9XG5cbiAgaXNVc2VyQWdlbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UudXNlcklzQWdlbnQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCYXNrZXRBcHByb3ZhbFRpbWVzdGFtcHMoYmFza2V0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QmFza2V0QXBwcm92YWxUaW1lc3RhbXBbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2tldEFwcHJvdmFsVGltZXN0YW1wc0ZldGNoZXIuZmV0Y2hMaXN0KHsgYmFza2V0SWQgfSk7XG4gIH1cblxuICBiZWZvcmVUYXhpQW1lbmRTZWFyY2goYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IE9ic2VydmFibGU8Q2FiSGlyZVF1b3RlW10+IHtcbiAgICByZXR1cm4gdGhpcy5iZWZvcmVBbWVuZENhYlNlYXJjaGZldGNoZXIuZmV0Y2hMaXN0KHsgYmFza2V0SXRlbTogYmFza2V0SXRlbS5pZCB9KTtcbiAgfVxuICBzZW50QmFza2V0c0JhY2tUb1F1ZXVlKGRyYWZ0QmFza2V0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNlbmRCYWNrVG9RdWV1ZVVwZGF0ZXIudXBkYXRlT25lKHsgZHJhZnRCYXNrZXRJZCB9KTtcbiAgfVxuXG4gIGJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaChcbiAgICBiYXNrZXRJdGVtOiBzdHJpbmcsXG4gICAgcGlja1VwRGF0ZVRpbWU/OiBzdHJpbmcsXG4gICAgZHJvcE9mZkRhdGVUaW1lPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8Q2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHlbXT4ge1xuICAgIHJldHVybiB0aGlzLmJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaGZldGNoZXIuZmV0Y2hMaXN0KHtcbiAgICAgIGJhc2tldEl0ZW0sXG4gICAgICBwaWNrVXBEYXRlVGltZSxcbiAgICAgIGRyb3BPZmZEYXRlVGltZVxuICAgIH0pO1xuICB9XG59XG5cbiJdfQ==
|