@sabstravtech/obtservices 0.0.22051001 → 0.1.6161600
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/angular/components/basket-panel.d.ts +1 -0
- package/angular/fetchers.d.ts +5 -0
- package/angular/lib/vendor/fetchers/get-companies.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-company.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-office.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +7 -0
- package/angular/lib/vendor/services/enterprise-basket.service.d.ts +4 -3
- package/angular/lib/vendor/services/logon.service.d.ts +2 -1
- package/angular/lib/vendor/services/user.service.d.ts +9 -3
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +614 -550
- package/angular/lib/vendor/updaters/create-guest-updater.d.ts +6 -0
- package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
- package/angular/updaters.d.ts +1 -0
- package/base/fetchers.d.ts +5 -0
- package/base/lib/vendor/classes/base-enterprise.d.ts +7 -1
- package/base/lib/vendor/classes/basket-info-mi-details.impl.d.ts +2 -0
- package/base/lib/vendor/classes/bookable-basket.d.ts +2 -0
- package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +9 -4
- package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +12 -4
- package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +14 -7
- package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +5 -4
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +16 -5
- package/base/lib/vendor/classes/helpers.d.ts +6 -1
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +10 -3
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +13 -8
- package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +5 -4
- package/base/lib/vendor/classes/management-info-and-valid.d.ts +3 -3
- package/base/lib/vendor/classes/modal-types.enum.d.ts +1 -0
- package/base/lib/vendor/classes/parking-enterprise-search.d.ts +5 -4
- package/base/lib/vendor/classes/rail-enterprise-search.d.ts +10 -8
- package/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +5 -3
- package/base/lib/vendor/classes/user-favourite.enum.d.ts +1 -0
- package/base/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +3 -1
- package/base/lib/vendor/fetchers/flight-quote.fetcher.d.ts +1 -0
- package/base/lib/vendor/fetchers/get-companies.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-company.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-office.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +2 -2
- package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +2 -0
- package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +5 -2
- package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +8 -6
- package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +7 -5
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +8 -1
- package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +8 -2
- package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +8 -7
- package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Imybookings.service.d.ts +3 -2
- package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +5 -2
- package/base/lib/vendor/interfaces/Isearch.service.d.ts +5 -2
- package/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +3 -2
- package/base/lib/vendor/interfaces/Iuser.service.d.ts +11 -3
- package/base/lib/vendor/interfaces/car-hire-search-arg.interface.d.ts +2 -3
- package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
- package/base/lib/vendor/interfaces/summary-interface.d.ts +6 -0
- package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
- package/base/lib/vendor/models/traveller.object.d.ts +12 -2
- package/base/lib/vendor/services/enterprise-basket.service.d.ts +22 -9
- package/base/lib/vendor/services/logon.service.d.ts +5 -1
- package/base/lib/vendor/services/my-bookings.service.d.ts +3 -2
- package/base/lib/vendor/services/search.service.d.ts +27 -23
- package/base/lib/vendor/services/url.service.d.ts +2 -0
- package/base/lib/vendor/services/user.service.d.ts +36 -5
- package/base/lib/vendor/services/webtoken.service.d.ts +6 -0
- package/base/lib/vendor/types/graphql.types.d.ts +581 -549
- package/base/lib/vendor/types/types.d.ts +48 -6
- package/base/lib/vendor/updaters/create-guest-updater.d.ts +19 -0
- package/base/sabstravtech-obtservices-base.d.ts +1 -1
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/base/updaters.d.ts +1 -0
- package/bundles/sabstravtech-obtservices-angular.umd.js +541 -252
- package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.js +4080 -1471
- package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
- package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
- package/esm2015/angular/components/basket-panel.js +16 -7
- package/esm2015/angular/fetchers.js +6 -1
- package/esm2015/angular/lib/vendor/fetchers/get-companies.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-company.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-office.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-user-guests.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +24 -21
- package/esm2015/angular/lib/vendor/services/http-call.service.js +1 -1
- package/esm2015/angular/lib/vendor/services/logon.service.js +8 -5
- package/esm2015/angular/lib/vendor/services/search.service.js +1 -1
- package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +4 -1
- package/esm2015/angular/lib/vendor/services/user.service.js +28 -10
- package/esm2015/angular/lib/vendor/services/webtoken.service.js +6 -2
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +1023 -1220
- package/esm2015/angular/lib/vendor/updaters/create-guest-updater.js +22 -0
- package/esm2015/angular/updaters.js +2 -1
- package/esm2015/base/fetchers.js +6 -1
- package/esm2015/base/lib/vendor/classes/base-enterprise.js +12 -3
- package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +14 -1
- package/esm2015/base/lib/vendor/classes/bookable-basket.js +27 -8
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +219 -18
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +235 -67
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +462 -49
- package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +37 -13
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +281 -62
- package/esm2015/base/lib/vendor/classes/helpers.js +32 -3
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +228 -54
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +221 -46
- package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +101 -14
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +67 -40
- package/esm2015/base/lib/vendor/classes/modal-types.enum.js +2 -1
- package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +146 -11
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +210 -25
- package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +58 -4
- package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +2 -1
- package/esm2015/base/lib/vendor/data/countries.json +484 -242
- package/esm2015/base/lib/vendor/fetchers/eurostar-quote.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/flight-quote.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/get-companies.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-company.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-office.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +10 -0
- package/esm2015/base/lib/vendor/fetchers/get-user-guests.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ifast-track-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +2 -1
- package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Imybookings.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/car-hire-search-arg.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
- package/esm2015/base/lib/vendor/models/traveller.object.js +21 -3
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +129 -43
- package/esm2015/base/lib/vendor/services/http-call.service.js +1 -1
- package/esm2015/base/lib/vendor/services/logon.service.js +40 -3
- package/esm2015/base/lib/vendor/services/my-bookings.service.js +3 -2
- package/esm2015/base/lib/vendor/services/requires-reason.service.js +14 -10
- package/esm2015/base/lib/vendor/services/search.service.js +100 -117
- package/esm2015/base/lib/vendor/services/url.service.js +3 -1
- package/esm2015/base/lib/vendor/services/user.service.js +90 -12
- package/esm2015/base/lib/vendor/services/webtoken.service.js +14 -1
- package/esm2015/base/lib/vendor/types/graphql.types.js +21 -2
- package/esm2015/base/lib/vendor/types/types.js +32 -14
- package/esm2015/base/lib/vendor/updaters/create-guest-updater.js +11 -0
- package/esm2015/base/sabstravtech-obtservices-base.js +1 -1
- package/esm2015/base/updaters.js +2 -1
- package/fesm2015/sabstravtech-obtservices-angular.js +1254 -1332
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +3324 -839
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -15,7 +15,22 @@ const COACH_MAX_INFANT_AGE_YEARS = 0;
|
|
|
15
15
|
const LOUNGES_MAX_INFANT_AGE_YEARS = 0;
|
|
16
16
|
const METRES_TO_MILES_CONVERSION = 1609;
|
|
17
17
|
const TIME_BASE = 60;
|
|
18
|
+
const GROUP_TICKET_CODES = [
|
|
19
|
+
'GS',
|
|
20
|
+
'AIG',
|
|
21
|
+
'GRP',
|
|
22
|
+
'GU3',
|
|
23
|
+
'GU4',
|
|
24
|
+
'GUC',
|
|
25
|
+
'MPG',
|
|
26
|
+
'2TR',
|
|
27
|
+
'SGU',
|
|
28
|
+
'GSU'
|
|
29
|
+
];
|
|
18
30
|
export class BaseHelperRoutines {
|
|
31
|
+
isGroupTicket(code) {
|
|
32
|
+
return GROUP_TICKET_CODES.includes(code.toUpperCase().trim());
|
|
33
|
+
}
|
|
19
34
|
minToHour(dur) {
|
|
20
35
|
return `${Math.floor(dur / 60)}h ${dur % 60}m`;
|
|
21
36
|
}
|
|
@@ -708,7 +723,16 @@ export class BaseHelperRoutines {
|
|
|
708
723
|
return value ? this.toStrings(value, schema) : isRequired ? {} : null;
|
|
709
724
|
case 'array':
|
|
710
725
|
return value; // TODO write array translation
|
|
726
|
+
case 'date-time':
|
|
727
|
+
if (value.year) {
|
|
728
|
+
value = this.formatIsoDate(this.ngDateToMoment(value));
|
|
729
|
+
}
|
|
730
|
+
return value;
|
|
731
|
+
break;
|
|
732
|
+
case 'passport':
|
|
733
|
+
return value ? this.toStrings(value, schema) : isRequired ? {} : null;
|
|
711
734
|
default:
|
|
735
|
+
console.warn(`+++ unknown schema type ${schema.type} | returning value as is +++`);
|
|
712
736
|
return value;
|
|
713
737
|
}
|
|
714
738
|
}
|
|
@@ -763,19 +787,24 @@ export class BaseHelperRoutines {
|
|
|
763
787
|
return miItem.isValid();
|
|
764
788
|
}));
|
|
765
789
|
}
|
|
766
|
-
isMiValid(miPerItem, miPerUser) {
|
|
790
|
+
isMiValid(miPerItem, miPerUser, miPerGuest) {
|
|
767
791
|
const userMis = Object.values(miPerUser || {});
|
|
792
|
+
const guestMis = Object.values(miPerGuest || {});
|
|
768
793
|
return (this.miIsValid(miPerItem) &&
|
|
769
794
|
(userMis.length === 0 ||
|
|
770
795
|
!!userMis.find((userMis1) => {
|
|
771
796
|
return this.miIsValid(userMis1.managementInfo);
|
|
797
|
+
})) &&
|
|
798
|
+
(guestMis.length === 0 ||
|
|
799
|
+
!!guestMis.find((userMis1) => {
|
|
800
|
+
return this.miIsValid(userMis1.managementInfo);
|
|
772
801
|
})));
|
|
773
802
|
}
|
|
774
803
|
needsMi(basket, needsToViewMi) {
|
|
775
804
|
return (basket.basketInfoMiDetails.length > 0 &&
|
|
776
805
|
(needsToViewMi ||
|
|
777
806
|
!basket.basketInfoMiDetails.find((miDetail) => {
|
|
778
|
-
return this.isMiValid(miDetail.miPerItem, miDetail.miPerUser);
|
|
807
|
+
return this.isMiValid(miDetail.miPerItem, miDetail.miPerUser, miDetail.miPerGuest);
|
|
779
808
|
})));
|
|
780
809
|
}
|
|
781
810
|
findService(services, id) {
|
|
@@ -1384,4 +1413,4 @@ __decorate([
|
|
|
1384
1413
|
function isSet(obj) {
|
|
1385
1414
|
return obj !== undefined && obj !== null;
|
|
1386
1415
|
}
|
|
1387
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBVXZCLE9BQU8sRUFDTCxtQkFBbUIsRUFLbkIsbUJBQW1CLEVBSXBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUtMLGdCQUFnQixFQUdoQixhQUFhLEVBRWIsV0FBVyxFQUVaLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBU2pELE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0sd0JBQXdCLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUVyQixNQUFNLE9BQU8sa0JBQWtCO0lBWTdCLFNBQVMsQ0FBQyxHQUFXO1FBQ25CLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDakQsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFZO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxVQUFVLENBQUMsR0FBVyxFQUFFLEdBQUcsSUFBVztRQUNwQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQ2hCLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ2hCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDckIsSUFBSSxPQUFPLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDbkMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQ3pDO2FBQ0Y7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLEVBQ0QsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FDN0MsQ0FBQyxJQUFJLENBQUM7SUFDVCxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQUcsVUFBaUI7UUFDOUIsT0FBTyxVQUFVO2FBQ2QsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbkIsR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUM7YUFDbkI7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDTCxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELGVBQWUsQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUNsQyxJQUFJO1lBQ0YsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0RBQWdELENBQUMsQ0FBQztZQUMvRCxPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFZLEVBQUUsR0FBVyxFQUFFLEtBQWE7UUFDaEQsT0FBTyxLQUFLO2FBQ1QsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUM7UUFDN0IsQ0FBQyxDQUFDO2FBQ0QsR0FBRyxFQUFFLENBQUM7SUFDWCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVU7UUFDckIsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQztZQUMxQixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtTQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFZO1FBQzFCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBVTtRQUM1QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFtQjtRQUM1QixJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQW1CO1FBQzVCLElBQUk7WUFDRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDcEQ7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQW1CO1FBQ2pDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFtQjtRQUMvQixJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBbUI7UUFDbkMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBbUI7UUFDdkMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsc0JBQXNCLENBQUMsSUFBbUI7UUFDeEMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFO1FBQzVDLE1BQU0sYUFBYSxHQUFhLEVBQUUsQ0FBQztRQUNuQyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUMzQyxLQUFLLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLE1BQU0sSUFBSSxJQUFJLEVBQUU7Z0JBQ2hELGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDOUQ7U0FDRjtRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBbUI7UUFDaEMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFtQjtRQUM5QixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxjQUFjLENBQUMsSUFBbUIsRUFBRSxJQUFhO1FBQy9DLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUMsSUFBSSxJQUFJLEVBQUU7WUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3RCLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckU7aUJBQU07Z0JBQ0wsR0FBRztxQkFDQSxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN2QyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUM7U0FDRjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7SUFDN0UsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUEyQjtRQUN2QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWE7UUFDMUIsT0FBTyxJQUFJLElBQUksQ0FDYixNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDOUIsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzVCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWE7UUFDMUIsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYTtRQUMzQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUM1QyxPQUFPLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDOUMsT0FBTyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWE7UUFDNUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDN0MsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQzthQUNuQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO2FBQzFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVk7UUFDL0IsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyQixPQUFPLE1BQU0sQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsT0FBTyxNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWE7UUFDdEIsT0FBTyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVELG9CQUFvQixDQUFDLENBQVM7UUFDNUIsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sQ0FBQyxHQUFHLG1DQUFtQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUMsQ0FBQztJQUVELGlCQUFpQixDQUFDLENBQVM7UUFDekIsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sQ0FBQyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN0QyxDQUFDO0lBRUQsWUFBWSxDQUFDLENBQVM7UUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQztJQUNwRSxDQUFDO0lBRUQsS0FBSyxDQUFVLE9BQVU7UUFDdkIsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBTSxDQUFDO0lBQ25DLENBQUM7SUFFRCxpQkFBaUIsQ0FDZixJQUFZLEVBQ1osWUFBb0M7UUFFcEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUN2RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2RCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQXNCLE1BQU0sRUFBRSxFQUFFLGNBQWMsR0FBRyxFQUFFO1FBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsY0FBYyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFDeEUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRDs7O2tHQUc4RjtJQUM5RixrQkFBa0IsQ0FBQyxLQUFhO1FBQzlCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQyxPQUFPLFlBQVksR0FBRyxHQUFHLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVwQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNCLFVBQVUsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7U0FDekI7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsRUFBRTtRQUNBLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7YUFDN0MsUUFBUSxDQUFDLEVBQUUsQ0FBQzthQUNaLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBWTtRQUNoQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDNUQ7YUFBTTtZQUNMLE9BQU8sRUFBRSxDQUFDO1NBQ1g7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQUcsSUFBVztRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDM0QsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUMxQjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQW1CLEVBQUUsS0FBYTtRQUNuRCxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNkLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQVMsRUFBRSxRQUFhO1FBQzVCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxPQUFPLENBQUMsSUFBWTtRQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sS0FBSzthQUNULEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ1osSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QixHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUNqQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7YUFDbkM7WUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDZixHQUFHLElBQUksSUFBSSxDQUFDO2FBQ2I7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsZ0JBQWdCLENBQ2QsSUFBWSxFQUNaLEdBQVc7UUFFWCxNQUFNLEdBQUcsR0FBRztZQUNWLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDdEMsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDO1FBQ0YsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1QsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzNDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3hDO2lCQUFNO2dCQUNMLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ1QsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQzNDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNqQztxQkFBTTtvQkFDTCxHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNsQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDbkM7YUFDRjtTQUNGO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQW9CLEVBQUUsR0FBa0I7UUFDbEQsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsVUFBVSxDQUNSLENBQU0sRUFDTixDQUE0QyxFQUM1QyxHQUFZO1FBRVosTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztRQUN2QixNQUFNLE1BQU0sR0FBaUIsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLE1BQU0sS0FBSyxHQUFHLEdBQWUsRUFBRTtZQUM3QixNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNiLE9BQU87YUFDUjtZQUNELE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUN4RCxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUNwQixPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRTtZQUNuQyxNQUFNLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsRUFBRTtnQkFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hCO2lCQUFNO2dCQUNMLE1BQU07YUFDUDtTQUNGO1FBQ0QsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDbkMsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQ2QsQ0FBTSxFQUNOLENBQTRDO1FBRTVDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxlQUFlLENBQUMsR0FBUTtRQUN0QixPQUFPLENBQUMsQ0FBQyxNQUFNLENBQ2IsR0FBRyxFQUNILENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDWixDQUFDLElBQUksR0FBRyxDQUFDO2FBQ1Y7WUFDRCxPQUFPLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakUsQ0FBQyxFQUNELEVBQUUsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQixDQUFDLENBQVM7UUFDeEIsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxVQUFVLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsV0FBbUI7UUFDOUQsT0FBTyxRQUFRO1lBQ2IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQztZQUN4RCxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQztJQUVELFFBQVEsQ0FBQyxRQUFnQixFQUFFLFFBQWdCO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7UUFDeEUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzQyxNQUFNLE1BQU0sR0FDVixJQUFJO1lBQ0osUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNYLEdBQUc7WUFDSCxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ1gsR0FBRztZQUNILFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDWCxHQUFHO1lBQ0gsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNYLEdBQUc7WUFDSCxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ1gsS0FBSyxDQUFDO1FBQ1IsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELHNCQUFzQixDQUFDLFVBQWU7UUFDcEMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QyxVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0MsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixvQkFBb0IsQ0FBQyxNQUFjO1FBQ2pDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQXlCO1FBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUNuQixVQUFVLENBQUMsSUFBSSxFQUNmLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUNwQixVQUFVLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FDbkIsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDeEIsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO1lBQzFCLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO1NBQ3BCLENBQUM7UUFDRiwwQkFBMEI7UUFDMUIsdUJBQXVCO1FBQ3ZCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBYztRQUNyQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFFYixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsdUNBQXVDO1lBQ3ZDLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLHVDQUF1QztZQUN2QyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztTQUNwQjtRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBWTtRQUN0QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCwwQkFBMEIsQ0FDeEIsa0JBQStCLEVBQy9CLElBQWlCO1FBRWpCLFFBQVEsSUFBSSxFQUFFO1lBQ1osOEZBQThGO1lBQzlGLEtBQUssV0FBVyxDQUFDLEtBQUssQ0FBQztZQUN2QixLQUFLLFdBQVcsQ0FBQyxHQUFHO2dCQUNsQixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQzlCLENBQUMsU0FBb0IsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDNUMsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxVQUF1QixFQUFFLElBQWlCO1FBQzNELFFBQVEsSUFBSSxFQUFFO1lBQ1osOEZBQThGO1lBQzlGLEtBQUssV0FBVyxDQUFDLEtBQUssQ0FBQztZQUN2QixLQUFLLFdBQVcsQ0FBQyxHQUFHO2dCQUNsQixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUMzRDtnQkFDRSxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQ3RCLENBQ0UsS0FJQyxFQUNELFNBQW9CLEVBQ3BCLEVBQUU7b0JBQ0YsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFO3dCQUNyQixJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUU7NEJBQ3RCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3lCQUMvQjs2QkFBTTs0QkFDTCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzt5QkFDaEM7cUJBQ0Y7eUJBQU07d0JBQ0wsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7cUJBQzlCO29CQUNELE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUMsRUFDRDtvQkFDRSxNQUFNLEVBQUUsRUFBRTtvQkFDVixRQUFRLEVBQUUsRUFBRTtvQkFDWixPQUFPLEVBQUUsRUFBRTtpQkFDWixDQUNGLENBQUM7U0FDTDtJQUNILENBQUM7SUFDRCx1QkFBdUIsQ0FBQyxrQkFBK0IsRUFBRSxJQUFpQjtRQUN4RSxRQUFRLElBQUksRUFBRTtZQUNaLDhGQUE4RjtZQUM5RixLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDdkIsS0FBSyxXQUFXLENBQUMsR0FBRztnQkFDbEIsT0FBTyxrQkFBa0IsQ0FBQztTQUM3QjtRQUNELE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUM5QixDQUFDLFNBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQ3BFLENBQUM7SUFDSixDQUFDO0lBRU8sUUFBUSxDQUFDLFNBQTJCLEVBQUUsTUFBYztRQUMxRCxJQUFJLFNBQVMsWUFBWSxJQUFJLEVBQUU7WUFDN0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FDdkIsTUFBTSxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsRUFDckQsS0FBSyxDQUNOLENBQUM7U0FDSDthQUFNO1lBQ0wsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxTQUFvQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLDBCQUEwQixDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELFdBQVcsQ0FBQyxTQUFvQjtRQUM5QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELGVBQWUsQ0FBQyxTQUFvQjtRQUNsQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLDRCQUE0QixDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFZLEVBQUUsS0FBYTtRQUNoQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxPQUFPLENBQUMsU0FBMkIsRUFBRSxVQUF1QjtRQUMxRCxRQUFRLFVBQVUsRUFBRTtZQUNsQixLQUFLLFdBQVcsQ0FBQyxNQUFNO2dCQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLDBCQUEwQixDQUFDLENBQUM7WUFDOUQsS0FBSyxXQUFXLENBQUMsSUFBSTtnQkFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1lBQzVELDZCQUE2QjtZQUM3QixrRUFBa0U7WUFDbEUsS0FBSyxXQUFXLENBQUMsS0FBSztnQkFDcEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBQzdELEtBQUssV0FBVyxDQUFDLE1BQU07Z0JBQ3JCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztZQUMvRCxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDdkIsS0FBSyxXQUFXLENBQUMsR0FBRztnQkFDbEIsT0FBTyxLQUFLLENBQUM7WUFDZjtnQkFDRSxPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsU0FBMkIsRUFBRSxVQUF1QjtRQUMzRCxRQUFRLFVBQVUsRUFBRTtZQUNsQixLQUFLLFdBQVcsQ0FBQyxNQUFNO2dCQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLDJCQUEyQixDQUFDLENBQUM7WUFDL0QsS0FBSyxXQUFXLENBQUMsSUFBSTtnQkFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBQzdELDZCQUE2QjtZQUM3QixrRUFBa0U7WUFDbEUsS0FBSyxXQUFXLENBQUMsS0FBSztnQkFDcEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO1lBQzlELEtBQUssV0FBVyxDQUFDLE1BQU07Z0JBQ3JCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztZQUNoRSxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDdkIsS0FBSyxXQUFXLENBQUMsR0FBRztnQkFDbEIsT0FBTyxLQUFLLENBQUM7WUFDZjtnQkFDRSxPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsU0FBb0IsRUFBRSxVQUF1QjtRQUN0RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUN6RCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQWlCO1FBQzlCLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxXQUFXLENBQUMsTUFBTTtnQkFDckIsT0FBTyxNQUFNLEVBQUU7cUJBQ1osR0FBRyxDQUFDLENBQUMsMEJBQTBCLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQztxQkFDN0MsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVDLEtBQUssV0FBVyxDQUFDLElBQUk7Z0JBQ25CLE9BQU8sTUFBTSxFQUFFO3FCQUNaLEdBQUcsQ0FBQyxDQUFDLHdCQUF3QixHQUFHLENBQUMsRUFBRSxPQUFPLENBQUM7cUJBQzNDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1Qyw2QkFBNkI7WUFDN0IsZ0dBQWdHO1lBQ2hHLEtBQUssV0FBVyxDQUFDLEtBQUs7Z0JBQ3BCLE9BQU8sTUFBTSxFQUFFO3FCQUNaLEdBQUcsQ0FBQyxDQUFDLHlCQUF5QixHQUFHLENBQUMsRUFBRSxPQUFPLENBQUM7cUJBQzVDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1QyxLQUFLLFdBQVcsQ0FBQyxNQUFNO2dCQUNyQixPQUFPLE1BQU0sRUFBRTtxQkFDWixHQUFHLENBQUMsQ0FBQywyQkFBMkIsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDO3FCQUM5QyxNQUFNLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDN0M7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBaUI7UUFDbEMsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLFdBQVcsQ0FBQyxNQUFNO2dCQUNyQixPQUFPLE1BQU0sRUFBRTtxQkFDWixHQUFHLENBQUMsQ0FBQywwQkFBMEIsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDO3FCQUM5QyxNQUFNLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUMsS0FBSyxXQUFXLENBQUMsSUFBSTtnQkFDbkIsT0FBTyxNQUFNLEVBQUU7cUJBQ1osR0FBRyxDQUFDLENBQUMsd0JBQXdCLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQztxQkFDNUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVDLDZCQUE2QjtZQUM3QixpR0FBaUc7WUFDakcsS0FBSyxXQUFXLENBQUMsS0FBSztnQkFDcEIsT0FBTyxNQUFNLEVBQUU7cUJBQ1osR0FBRyxDQUFDLENBQUMseUJBQXlCLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQztxQkFDN0MsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVDLEtBQUssV0FBVyxDQUFDLE1BQU07Z0JBQ3JCLE9BQU8sTUFBTSxFQUFFO3FCQUNaLEdBQUcsQ0FBQyxDQUFDLDJCQUEyQixHQUFHLEVBQUUsRUFBRSxPQUFPLENBQUM7cUJBQy9DLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1QyxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDdkIsS0FBSyxXQUFXLENBQUMsR0FBRztnQkFDbEIsMENBQTBDO2dCQUMxQyxPQUFPLE1BQU0sRUFBRTtxQkFDWixHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDO3FCQUNqQixNQUFNLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDN0M7UUFDRCxPQUFPLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELFNBQVMsQ0FDUCxLQUFZLEVBQ1osUUFBNkMsRUFDN0MsR0FBUTtRQUVSLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxhQUFhLENBQ1gsS0FBVSxFQUNWLEtBQWE7UUFFYixPQUFPLEtBQUs7YUFDVCxNQUFNLENBQUMsQ0FBQyxJQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDM0IsTUFBTSxDQUFDLENBQUMsT0FBNkIsRUFBRSxVQUFhLEVBQUUsRUFBRTtZQUN2RCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ25DLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7YUFDekM7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsZ0JBQWdCLENBQ2QsR0FBd0IsRUFDeEIsTUFBZ0IsRUFDaEIsS0FBVTtRQUVWLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNsQztRQUNELElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixHQUFHLEdBQUcsRUFBRSxDQUFDO1NBQ1Y7UUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7YUFBTTtZQUNMLE1BQU0sS0FBSyxHQUFXLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3hFO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsa0JBQWtCLENBR2hCLEtBQVUsRUFBRSxNQUE2QjtRQUN6QyxPQUFPLEtBQUs7YUFDVCxNQUFNLENBQUMsQ0FBQyxJQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDM0IsTUFBTSxDQUFDLENBQUMsT0FBK0IsRUFBRSxVQUFhLEVBQUUsRUFBRTtZQUN6RCxNQUFNLFdBQVcsR0FBYSxNQUFNLENBQUMsTUFBTSxDQUN6QyxDQUFDLEtBQWUsRUFBRSxLQUE0QixFQUFZLEVBQUU7Z0JBQzFELE1BQU0sVUFBVSxHQUFXLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO29CQUM3QyxDQUFDLENBQUMsS0FBSzt5QkFDRixHQUFHLENBQUMsQ0FBQyxHQUFZLEVBQUUsRUFBRSxDQUNwQixJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxHQUFhLENBQUMsQ0FDaEQ7eUJBQ0EsSUFBSSxDQUFDLEdBQUcsQ0FBQztvQkFDZCxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsS0FBZSxDQUFDLENBQUM7Z0JBQ3RELElBQUksS0FBSyxJQUFJLFVBQVUsRUFBRTtvQkFDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDdkIsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLEVBQ0QsRUFBRSxDQUNILENBQUM7WUFDRixJQUFJLFVBQVUsSUFBSSxXQUFXLEVBQUU7Z0JBQzdCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7YUFDaEU7UUFDSCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQWdCO1FBQzNCLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUMzQixDQUFDO0lBRUQsZUFBZSxDQUFJLEdBQVcsRUFBRSxNQUF5QjtRQUN2RCxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQ3hFLENBQUMsT0FBNEIsRUFBRSxNQUFjLEVBQUUsRUFBRTtZQUMvQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzlCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3hCO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQ0QsR0FBRyxDQUNKLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCLENBQXdDLEtBQVE7UUFDaEUsT0FBTyxDQUFDLEdBQW1CLEVBQUssRUFBRTtZQUNoQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFJLEtBQVE7UUFDckIsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMvQixPQUFPLENBQ0gsS0FBdUM7aUJBQ3RDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDO2lCQUNELE1BQU0sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNyQixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDakIsQ0FBQyxDQUFrQixJQUFJLElBQUksQ0FDOUIsQ0FBQztTQUNIO2FBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDcEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQVEsRUFBRSxHQUFXLEVBQUUsRUFBRTtnQkFDekQsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO29CQUNsQixNQUFNLEtBQUssR0FBSSxLQUE2QixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNyQyxJQUNFLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxNQUFNLENBQUM7d0JBQ3hELENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUN4Qzt3QkFDQyxLQUE2QixDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztxQkFDNUM7aUJBQ0Y7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLEVBQUUsRUFBTyxDQUFDLENBQUM7U0FDYjthQUFNO1lBQ0wsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsVUFBdUI7UUFDckMsSUFBSSxVQUFVLEVBQUU7WUFDZCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQ3RCLENBQUMsYUFBdUIsRUFBRSxZQUF1QixFQUFFLEdBQVcsRUFBRSxFQUFFO2dCQUNoRSxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNkLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7b0JBQ25CLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQyxDQUFDLEVBQ0QsRUFBRSxDQUNILENBQUM7U0FDSDtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsbUJBQW1CLENBQUMsS0FBVSxFQUFFLEtBQUssR0FBRyxLQUFLO1FBQzNDLE1BQU0sY0FBYyxxQkFBUSxLQUFLLENBQUUsQ0FBQztRQUNwQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUN6RCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzFCLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDekQ7U0FDRjtRQUNELElBQUksS0FBSyxFQUFFO1lBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxjQUFjLENBQUMsQ0FBQztTQUNsRDtRQUNELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxTQUFTLENBQUksUUFBVyxFQUFFLE1BQWM7UUFDdEMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUNuRCxDQUFDLFlBQWUsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQW1CLEVBQUssRUFBRTtZQUNyRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUNoQyxRQUFRLENBQUMsR0FBYyxDQUFDLEVBQ3hCLEtBQUssRUFDTCxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUN0QyxDQUFDO1lBRUYsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFO2dCQUNyQixZQUFZLENBQUMsR0FBYyxDQUFDLEdBQUcsUUFBUSxDQUFDO2FBQ3pDO1lBQ0QsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQyxFQUNELEVBQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFVLEVBQUUsTUFBYyxFQUFFLFVBQW1CO1FBQ2xFLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRTtZQUNuQixLQUFLLFNBQVM7Z0JBQ1osTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMzRCxLQUFLLFFBQVE7Z0JBQ1gsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDN0MsT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNqRSxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3hFLEtBQUssT0FBTztnQkFDVixPQUFPLEtBQUssQ0FBQyxDQUFDLCtCQUErQjtZQUMvQztnQkFDRSxPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsUUFBdUIsRUFBRSxLQUFhLEVBQUUsR0FBVztRQUNoRSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVsRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUFlLEVBQUUsS0FBYTtRQUNwQyxPQUFPLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ3RELENBQUM7SUFFRCxTQUFTLENBQUMsVUFBdUI7UUFDL0IsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBb0IsRUFBMEIsRUFBRTtZQUNyRSxPQUFPO2dCQUNMLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRTtnQkFDaEIsYUFBYSxFQUFFLFNBQVMsQ0FBQyxPQUFPO29CQUM5QixDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUs7b0JBQ3JCLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUTt3QkFDcEIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNO3dCQUN0QixDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUs7YUFDeEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLE1BQWUsRUFBRSxFQUFXLEVBQUUsQ0FBVTtRQUN4RCxNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUVwQixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDeEIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDdkI7UUFFRCxJQUFJLEVBQUUsS0FBSyxTQUFTLEVBQUU7WUFDcEIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDckI7UUFFRCxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDbkIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdEI7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxlQUFlLENBQ2IsUUFBVyxFQUNYLFlBQXdCLEVBQ3hCLFlBQTBCO1FBRTFCLE1BQU0sUUFBUSxHQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM5RCxPQUFPLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQVUsRUFBRSxJQUFhLEVBQUUsRUFBRTtZQUMvRCxNQUFNLEtBQUssR0FBSSxPQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsT0FBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztnQkFDN0IsQ0FBQyxDQUFDLE1BQU0sRUFBRTtnQkFDVixDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUTtvQkFDM0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7b0JBQ2YsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNWLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFRCxTQUFTLENBQUMsT0FBbUM7UUFDM0MsT0FBTyxDQUNMLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUNwQixDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQWdDLEVBQUUsRUFBRTtnQkFDbEQsT0FBTyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLENBQ1AsU0FBcUMsRUFDckMsU0FJQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sQ0FDTCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztZQUN6QixDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ1osQ0FBQyxRQUF3RCxFQUFFLEVBQUU7b0JBQzNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ2pELENBQUMsQ0FDRixDQUFDLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLENBQUMsTUFBcUIsRUFBRSxhQUFzQjtRQUNuRCxPQUFPLENBQ0wsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3JDLENBQUMsYUFBYTtnQkFDWixDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQzlCLENBQUMsUUFBa0MsRUFBVyxFQUFFO29CQUM5QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2hFLENBQUMsQ0FDRixDQUFDLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBc0IsRUFBRSxFQUFVO1FBQzVDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQ25DLENBQUMsT0FBZ0IsRUFBRSxRQUFtQixFQUFXLEVBQUU7WUFDakQsT0FBTyxDQUNMLE9BQU87Z0JBQ1AsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQWlCLEVBQVcsRUFBRTtvQkFDM0MsT0FBTyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsRUFDRCxJQUFlLENBQ2hCLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxDQUNMLFFBQTZDLEVBQzdDLE1BQWdFO1FBRWhFLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUM1RCxDQUFDO0lBRUQsaUJBQWlCLENBQ2YsYUFBcUIsRUFDckIsU0FBa0IsRUFDbEIsS0FBVTtRQUVWLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFlBQVksQ0FDVixLQUFZLEVBQ1osSUFBWSxFQUNaLG1CQUE0QixJQUFJO1FBRWhDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxvQkFBb0I7UUFDMUQsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBRWxCLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUU7WUFDM0IsT0FBTyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtnQkFDL0IsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQzFDO1lBRUQsb0JBQW9CO1lBQ3BCLElBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxnQkFBZ0IsRUFBRTtnQkFDeEMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMxQjtTQUNGO2FBQU07WUFDTCxRQUFRLEdBQUcsU0FBUyxDQUFDO1NBQ3RCO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUdELGlCQUFpQixDQUFDLFdBQW1CLEVBQUUsV0FBbUI7UUFDeEQsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBR0QsYUFBYSxDQUFDLElBQVksRUFBRSxHQUFXO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7YUFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQzthQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUdELGFBQWEsQ0FBQyxNQUF1QixFQUFFLFNBQThCO1FBQ25FLE1BQU0sT0FBTyxHQUNYLFNBQVMsS0FBSyxtQkFBbUIsQ0FBQyxRQUFRO1lBQ3hDLENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZTtZQUN4QixDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUM1QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUMxQixDQUFDLE9BQXVCLEVBQUUsSUFBbUIsRUFBRSxFQUFFOztZQUMvQyxPQUFPLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUNoRCxPQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLFlBQVksS0FBSSxFQUFFLENBQ3hDLENBQUM7WUFDRixPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUNwQyxPQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLE1BQU0sS0FBSSxFQUFFLENBQ2xDLENBQUM7WUFDRixPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUNwQyxPQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLE1BQU0sS0FBSSxFQUFFLENBQ2xDLENBQUM7WUFDRixPQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUN0QyxPQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLE9BQU8sS0FBSSxFQUFFLENBQ25DLENBQUM7WUFDRixPQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQUEsSUFBSSxDQUFDLGNBQWMsMENBQUUsS0FBSyxLQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsRUFDRDtZQUNFLFlBQVksRUFBRSxFQUFFO1lBQ2hCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsTUFBTSxFQUFFLEVBQUU7WUFDVixPQUFPLEVBQUUsRUFBRTtZQUNYLEtBQUssRUFBRSxFQUFFO1NBQ1YsQ0FDRixDQUFDO1FBQ0YsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCx1QkFBdUIsQ0FBQyxXQUF5QjtRQUMvQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEUsT0FBTztZQUNMLHFCQUFxQjtZQUNyQiwwREFBMEQ7WUFDMUQsaUJBQWlCO1lBQ2pCLG9CQUFvQjtZQUNwQixjQUFjO1lBQ2QsbUJBQW1CO1NBQ3BCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsMEJBQTBCLENBQUMsV0FBeUI7UUFDbEQsTUFBTSxXQUFXLEdBQWEsRUFBRSxDQUFDO1FBRWpDLDhDQUE4QztRQUM5QyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3BDLE1BQU0sSUFBSSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxFQUFFO2dCQUNWLElBQUksRUFBRSxFQUFFO2dCQUNSLFlBQVksRUFBRSxFQUFFO2dCQUNoQixVQUFVLEVBQUUsRUFBRTtnQkFDZCxRQUFRLEVBQUUsRUFBRTtnQkFDWixXQUFXLEVBQUUsRUFBRTtnQkFDZixXQUFXLEVBQUUsRUFBRTtnQkFDZixPQUFPLEVBQUUsRUFBRTthQUNaLENBQUM7WUFDRixNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQztZQUN4QyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUNwQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQ3JFLFVBQVUsQ0FBQztZQUNiLG1FQUFtRTtZQUNuRSxRQUFRLElBQUksRUFBRTtnQkFDWixLQUFLLFdBQVcsQ0FBQyxNQUFNO29CQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGVBQWUsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxvQkFBb0IsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUc7d0JBQ2pCLFdBQVcsTUFBTSxDQUFDLElBQUksTUFBTTt3QkFDNUIsV0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTTt3QkFDbEUsV0FBVyxNQUFNLE1BQU07d0JBQ3ZCLGFBQWEsUUFBUSxNQUFNO3dCQUMzQixnQkFBZ0IsMEJBQTBCLEVBQUU7cUJBQzdDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNYLE1BQU07Z0JBQ1IsS0FBSyxXQUFXLENBQUMsR0FBRztvQkFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzlDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE9BQU8sQ0FBQztvQkFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyx1QkFBdUIsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDcEcsSUFBSSxDQUFDLFdBQVcsR0FBRzt3QkFDakIsaUJBQWlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxNQUFNO3dCQUNsRCxTQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNO3dCQUN4RCxnQkFBZ0IsMEJBQTBCLEVBQUU7cUJBQzdDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNYLE1BQU07Z0JBQ1IsS0FBSyxXQUFXLENBQUMsR0FBRztvQkFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzlDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGNBQWMsQ0FBQztvQkFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsZUFBZSxDQUFDO29CQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLHNCQUFzQixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sT0FBTyxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUMxRyxJQUFJLENBQUMsV0FBVyxHQUFHO3dCQUNqQixpQkFBaUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLE1BQU07d0JBQ3BELFNBQVMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU07d0JBQy9ELGtCQUFrQixNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sTUFBTTt3QkFDdEQsZ0JBQWdCLDBCQUEwQixFQUFFO3FCQUM3QyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDWCxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7d0JBQ2pELENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNyRCxNQUFNO2dCQUNSLEtBQUssV0FBVyxDQUFDLEtBQUssQ0FBQztnQkFDdkIseUJBQXlCO2dCQUN6QixLQUFLLFdBQVcsQ0FBQyxTQUFTLENBQUM7Z0JBQzNCLHlCQUF5QjtnQkFDekIsS0FBSyxXQUFXLENBQUMsTUFBTTtvQkFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzlDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGVBQWUsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUM7b0JBQzNELElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGVBQWUsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUM7b0JBQ3hELElBQUksQ0FBQyxPQUFPLEdBQUcseUJBQXlCLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxPQUFPLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDckksSUFBSSxDQUFDLFdBQVcsR0FBRzt3QkFDakIsU0FBUyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsTUFBTTt3QkFDdEQsV0FBVyxNQUFNLENBQ2YsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FDNUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU07d0JBQzFCLE9BQU8sTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsTUFBTTt3QkFDekQsV0FBVyxNQUFNLENBQ2YsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FDM0MsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU07d0JBQzFCLGdCQUFnQiwwQkFBMEIsRUFBRTtxQkFDN0MsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ1gsTUFBTTtnQkFDUixLQUFLLFdBQVcsQ0FBQyxLQUFLO29CQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsT0FBTyxDQUFDO29CQUM5QixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxRQUFRLENBQUM7b0JBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsb0JBQW9CLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRzt3QkFDakIsVUFBVSxNQUFNLENBQUMsU0FBUyxNQUFNO3dCQUNoQyxZQUFZLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNO3dCQUMzRCxjQUFjLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNO3dCQUM5RCxnQkFBZ0IsMEJBQTBCLEVBQUU7cUJBQzdDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNYLE1BQU07Z0JBQ1IsS0FBSyxXQUFXLENBQUMsaUJBQWlCO29CQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsYUFBYSxDQUFDLGlCQUFpQixDQUFDO29CQUN0RCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxhQUFhLENBQUMsZUFBZSxDQUFDO29CQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUM7b0JBQzlELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUM7b0JBQ3ZELElBQUksQ0FBQyxPQUFPLEdBQUcsd0JBQXdCLE1BQU0sQ0FBQyxhQUFhLENBQUMsb0JBQW9CLE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUNqSSxJQUFJLENBQUMsV0FBVyxHQUFHO3dCQUNqQixRQUFRLE1BQU0sQ0FBQyxhQUFhLENBQUMsb0JBQW9CLE1BQU07d0JBQ3ZELE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsTUFBTTt3QkFDbkQsYUFBYSxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FDaEUsVUFBVSxDQUNYLE1BQU07d0JBQ1AsV0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQzVELFVBQVUsQ0FDWCxNQUFNO3dCQUNQLGdCQUFnQiwwQkFBMEIsRUFBRTtxQkFDN0MsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ1gsTUFBTTtnQkFDUixLQUFLLFdBQVcsQ0FBQyxPQUFPO29CQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsZUFBZSxDQUFDO29CQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxjQUFjLENBQUM7b0JBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcscUJBQXFCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBRzt3QkFDakIsb0JBQW9CLE1BQU0sQ0FBQyxJQUFJLE1BQU07d0JBQ3JDLGdCQUFnQiwwQkFBMEIsRUFBRTtxQkFDN0MsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ1gsTUFBTTtnQkFDUixLQUFLLFdBQVcsQ0FBQyxJQUFJO29CQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsYUFBYSxDQUFDLGlCQUFpQixDQUFDO29CQUN0RCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxhQUFhLENBQUMsZUFBZSxDQUFDO29CQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUM7b0JBQzlELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUM7b0JBQ3ZELElBQUksQ0FBQyxPQUFPLEdBQUcsd0JBQXdCLE1BQU0sQ0FBQyxhQUFhLENBQUMsb0JBQW9CLE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUNqSSxJQUFJLENBQUMsV0FBVyxHQUFHO3dCQUNqQixRQUFRLE1BQU0sQ0FBQyxhQUFhLENBQUMsb0JBQW9CLE1BQU07d0JBQ3ZELE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsTUFBTTt3QkFDbkQsYUFBYSxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FDaEUsVUFBVSxDQUNYLE1BQU07d0JBQ1AsV0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQzVELFVBQVUsQ0FDWCxNQUFNO3dCQUNQLGdCQUFnQiwwQkFBMEIsRUFBRTtxQkFDN0MsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ1gsTUFBTTthQUNUO1lBRUQsV0FBVyxDQUFDLElBQUksQ0FDZDtnQkFDRSxrQkFBa0I7Z0JBQ2xCLElBQUksQ0FBQyxNQUFNO29CQUNULENBQUMsQ0FBQyxXQUFXLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU07b0JBQ2hFLENBQUMsQ0FBQyxFQUFFO2dCQUNOLElBQUksQ0FBQyxJQUFJO29CQUNQLENBQUMsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU07b0JBQzVELENBQUMsQ0FBQyxFQUFFO2dCQUNOLGdGQUFnRjtnQkFDaEYsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWTtvQkFDbEMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLFVBQVUsT0FBTyxJQUFJLENBQUMsWUFBWSxPQUFPO29CQUM3RCxDQUFDLENBQUMsRUFBRTtnQkFDTixtQkFBbUI7Z0JBQ25CLGdCQUFnQjtnQkFDaEIsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxtQkFBbUI7Z0JBQ3BFLFdBQVcsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU07Z0JBQ25ELGVBQWUsSUFBSSxDQUFDLFdBQVcsTUFBTTtnQkFDckMsV0FBVyxJQUFJLENBQUMsT0FBTyxNQUFNO2dCQUM3QixnQkFBZ0I7YUFDakIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQ1gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxRQUFnQixFQUFFLElBQVk7UUFDeEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxPQUFPLENBQUMsWUFBWSxDQUNsQixNQUFNLEVBQ04sZ0NBQWdDLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQzVELENBQUM7UUFDRixPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN6QyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDL0IsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHFCQUFxQixDQUNuQixTQUFpQixFQUNqQixPQUFnQixLQUFLO1FBRXJCLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFakQsSUFBSSxJQUFJLEVBQUU7WUFDUixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUI7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsbUJBQW1CLENBQ2pCLFFBQTJCLEVBQzNCLGNBQTZCO1FBRTdCLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FDcEIsQ0FBQyxPQUFzQixFQUFFLE9BQXdCLEVBQWlCLEVBQUU7WUFDbEUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSTtnQkFDbkQsT0FBTyxFQUNMLFFBQVEsS0FBSyxDQUFDO29CQUNaLENBQUMsQ0FBQyxRQUFRO29CQUNWLENBQUMsQ0FBQyxHQUFHLFFBQVEsT0FBTyxHQUFHLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELFFBQVEsRUFBRSxLQUFLO2dCQUNmLEtBQUssRUFBRSxRQUFRLEdBQUcsQ0FBQzthQUNwQixDQUFDO1lBRUYsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGNBQWM7Z0JBQ3BDLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ04sTUFBTSxVQUFVLEdBQUcsT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDM0QsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJO2dCQUNqRSxPQUFPLEVBQ0wsVUFBVSxLQUFLLENBQUM7b0JBQ2QsQ0FBQyxDQUFDLFFBQVE7b0JBQ1YsQ0FBQyxDQUFDLEdBQUcsVUFBVSxPQUFPLEdBQUcsQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDMUQsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsS0FBSyxFQUFFLFVBQVUsR0FBRyxDQUFDO2FBQ3RCLENBQUM7WUFFRixNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBcUIsRUFBUSxFQUFFO2dCQUN4RCxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUNsRCxNQUFNLENBQUMsVUFBVSxDQUNsQixJQUFJO29CQUNILE9BQU8sRUFBRSxNQUFNLENBQUMsVUFBVTtvQkFDMUIsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVO2lCQUN6QixDQUFDO2dCQUNGLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FDMUQsTUFBTSxDQUFDLGdCQUFnQixDQUN4QixJQUFJO29CQUNILE9BQU8sRUFBRSxNQUFNLENBQUMsb0JBQW9CO29CQUNwQyxRQUFRLEVBQUUsS0FBSztvQkFDZixLQUFLLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtpQkFDL0IsQ0FBQztZQUNKLENBQUMsQ0FBQztZQUNGLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDbkQsTUFBTSxZQUFZLEdBQWEsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FDekQsQ0FBQyxnQkFBa0MsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUM3RCxDQUFDO1lBQ0YsTUFBTSxPQUFPLEdBQVcsWUFBWSxDQUFDLE1BQU07Z0JBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDO2dCQUMzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ04sT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJO2dCQUNyRCxRQUFRLEVBQUUsS0FBSztnQkFDZixPQUFPLEVBQUUsR0FBRyxPQUFPLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xELEtBQUssRUFBRSxPQUFPO2FBQ2YsQ0FBQztZQUNGLE1BQU0sYUFBYSxHQUFHLENBQ3BCLE9BQXdCLEVBQ3hCLGVBQXdDLEVBQ3hDLGVBQW9DLEVBQ3BDLG1CQUF3QyxFQUN4QyxLQUFhLEVBQ1AsRUFBRTtnQkFDUixNQUFNLElBQUksR0FDUixPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQztvQkFDdkIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxlQUFlLENBQUM7b0JBQ2pDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ2hCLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtvQkFDdEIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSTt3QkFDakUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxlQUFlLENBQUM7d0JBQ3RDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsbUJBQW1CLENBQUM7d0JBQzVDLFFBQVEsRUFBRSxLQUFLO3FCQUNoQixDQUFDO2lCQUNIO1lBQ0gsQ0FBQyxDQUFDO1lBQ0YsYUFBYSxDQUNYLE9BQU8sQ0FBQyxlQUFlLEVBQ3ZCLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLENBQUMsQ0FDRixDQUFDO1lBQ0YsYUFBYSxDQUNYLE9BQU8sQ0FBQyxlQUFlLEVBQ3ZCLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsd0JBQXdCLEVBQ3hCLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDbkMsQ0FBQztZQUVGLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRztnQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUs7b0JBQ3JDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUc7b0JBQ25CLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUUxQixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUc7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLO29CQUNyQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHO29CQUNuQixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFFMUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHO2dCQUNsQixPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMscUJBQXFCO29CQUNsRCxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHO29CQUN0QixDQUFDLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDO1lBRXBDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRztnQkFDbEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLHFCQUFxQjtvQkFDbEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRztvQkFDdEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztZQUVwQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQ3ZCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQzdDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWQsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHO2dCQUN2QixPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxVQUFVO29CQUNwQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHO29CQUMzQixDQUFDLENBQUMsVUFBVSxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRztnQkFDdkIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsVUFBVTtvQkFDcEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRztvQkFDM0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUVqQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQ3hCLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2lCQUN4RCxnQkFBZ0IsQ0FDcEIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFZCxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUc7Z0JBQ3JCLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLFdBQVc7b0JBQ25DLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUc7b0JBQ3pCLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDbEIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHO2dCQUNyQixPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxXQUFXO29CQUNuQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHO29CQUN6QixDQUFDLENBQUMsV0FBVyxDQUFDO1lBRWxCLElBQUksT0FBTyxDQUFDLGNBQWMsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQy9ELE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRztvQkFDeEIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLG9CQUFvQjt3QkFDdkQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRzt3QkFDNUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztnQkFFbkMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHO29CQUN4QixPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsb0JBQW9CO3dCQUN2RCxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHO3dCQUM1QixDQUFDLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO2dCQUVuQyxNQUFNLGdCQUFnQixHQUNwQixPQUFPLElBQUksT0FBTyxDQUFDLGNBQWMsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDNUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztvQkFDakUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVULE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHO29CQUM3QixPQUFPLENBQUMsbUJBQW1CLENBQUMsR0FBRyxHQUFHLGdCQUFnQjt3QkFDaEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHO3dCQUNqQyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3ZCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHO29CQUM3QixPQUFPLENBQUMsbUJBQW1CLENBQUMsR0FBRyxHQUFHLGdCQUFnQjt3QkFDaEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHO3dCQUNqQyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7Z0JBRXZCLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUM5QixPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztxQkFDeEQsZ0JBQWdCLENBQ3BCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVkLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO29CQUMzQixPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxHQUFHLGlCQUFpQjt3QkFDL0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO3dCQUMvQixDQUFDLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO29CQUMzQixPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxHQUFHLGlCQUFpQjt3QkFDL0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO3dCQUMvQixDQUFDLENBQUMsaUJBQWlCLENBQUM7Z0JBRXhCLENBQUMsT0FBTyxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDMUQsYUFBYSxDQUNYLE9BQU8sQ0FBQyxjQUFjLEVBQ3RCLHVCQUF1QixFQUN2QixlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLENBQUMsQ0FDRixDQUFDO2dCQUNGLGFBQWEsQ0FDWCxPQUFPLENBQUMsY0FBYyxFQUN0QixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLHdCQUF3QixFQUN4QixPQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ2xDLENBQUM7YUFDSDtZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsRUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUMzQixDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FDWCxLQUFpQyxFQUNqQyxRQUFnRDtRQUVoRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUNqQyxDQUFDLEtBQWlDLEVBQUUsT0FBNkIsRUFBRSxFQUFFO1lBQ25FLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxFQUNELEVBQWdDLENBQ2pDLENBQUM7SUFDSixDQUFDO0lBRUQsdUJBQXVCLENBQUMsR0FBVztRQUNqQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELHFDQUFxQyxDQUNuQyxLQUEwQjtRQUUxQixNQUFNLHFDQUFxQyxHQUd2QztZQUNGLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUN6RCxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFFBQVE7WUFDaEUsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxZQUFZO1lBQ2pFLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxZQUFZO1lBQ3hFLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsYUFBYTtZQUNuRSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLEVBQ3hDLGdCQUFnQixDQUFDLGFBQWE7WUFDaEMsQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxFQUNyQyxnQkFBZ0IsQ0FBQyxpQkFBaUI7WUFDcEMsQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQyxFQUM1QyxnQkFBZ0IsQ0FBQyxpQkFBaUI7WUFDcEMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO1lBQ25ELENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztZQUMxRCxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLGNBQWM7WUFDckUsQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxFQUN6QyxnQkFBZ0IsQ0FBQyxjQUFjO1NBQ2xDLENBQUM7UUFDRixPQUFPLHFDQUFxQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCw0Q0FBNEMsQ0FDMUMsS0FBbUIsRUFDbkIsU0FBa0I7UUFFbEIsTUFBTSxLQUFLLEdBQThDLFNBQVM7WUFDaEUsQ0FBQyxDQUFDO2dCQUNFLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQy9CLG1CQUFtQixDQUFDLHFCQUFxQjtnQkFDM0MsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsRUFDaEMsbUJBQW1CLENBQUMsZUFBZTtnQkFDckMsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFDNUIsbUJBQW1CLENBQUMsd0JBQXdCO2dCQUM5QyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUN4QixtQkFBbUIsQ0FBQyx3QkFBd0I7Z0JBQzlDLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsWUFBWTtnQkFDakUsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxFQUNsQyxtQkFBbUIsQ0FBQyx3QkFBd0I7Z0JBQzlDLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQy9CLG1CQUFtQixDQUFDLHFCQUFxQjtnQkFDM0MsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsRUFDN0IsbUJBQW1CLENBQUMsbUJBQW1CO2dCQUN6QyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxFQUM5QixtQkFBbUIsQ0FBQyxvQkFBb0I7Z0JBQzFDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsZUFBZTtnQkFDaEUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxZQUFZO2FBQzNEO1lBQ0gsQ0FBQyxDQUFDO2dCQUNFLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsY0FBYztnQkFDckUsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxRQUFRO2dCQUNoRSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLGlCQUFpQjtnQkFDckUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxpQkFBaUI7Z0JBQ2pFLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsS0FBSztnQkFDMUQsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxFQUNsQyxtQkFBbUIsQ0FBQyxpQkFBaUI7Z0JBQ3ZDLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsY0FBYztnQkFDckUsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxZQUFZO2dCQUNqRSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLGFBQWE7Z0JBQ25FLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsUUFBUTtnQkFDekQsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLO2FBQ3BELENBQUM7UUFDTixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG9CQUFvQixDQUFDLE1BQWMsRUFBRSxnQkFBd0IsQ0FBQyxDQUFDO1FBQzdELE1BQU0sS0FBSyxHQUFHLE1BQU0sR0FBRywwQkFBMEIsQ0FBQztRQUVsRCxJQUFJLGFBQWEsSUFBSSxDQUFDLEVBQUU7WUFDdEIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxxQkFBcUIsQ0FBQyxPQUFlLEVBQUUsZ0JBQXdCLENBQUMsQ0FBQztRQUMvRCxNQUFNLEtBQUssR0FBRyxPQUFPLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUU5QyxJQUFJLGFBQWEsSUFBSSxDQUFDLEVBQUU7WUFDdEIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxvQkFBb0IsQ0FBQyxPQUFlLEVBQUUsZ0JBQXdCLENBQUMsQ0FBQztRQUM5RCxNQUFNLEtBQUssR0FBRyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBRWxDLElBQUksYUFBYSxJQUFJLENBQUMsRUFBRTtZQUN0QixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7U0FDN0M7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxrQkFBa0IsQ0FDaEIsSUFBd0IsRUFDeEIsS0FBYztRQUVkLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQXlCLEVBQUUsSUFBVyxFQUFFLEVBQUU7WUFDN0QsSUFBSSxLQUFLLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFdBQVcsQ0FBQyxFQUFFO2dCQUM1QixLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFzQixDQUFDO2dCQUNoRCxLQUFLLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUE0QixDQUFDO2FBQzlEO1lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGNBQWMsQ0FBQyxFQUFFO2dCQUMvQixLQUFLLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUF5QixDQUFDO2dCQUN0RCxLQUFLLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHFCQUErQixDQUFDO2FBQ3BFO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsR0FBRyxDQUFJLEdBQXNCLEVBQUUsSUFBb0I7UUFDakQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNsQixFQUFFLEVBQ0YsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBYyxFQUduRCxFQUFFO1lBQ0YsT0FBTztnQkFDTCxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDbkIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxDQUFJLEdBQUcsSUFBUztRQUMxQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFVLEVBQUUsSUFBTyxFQUFFLEVBQUU7WUFDekMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQU0sQ0FBQztRQUNyQyxDQUFDLEVBQUUsRUFBTyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQsb0JBQW9CLENBQ2xCLEdBQU0sRUFDTixFQUF1RDtRQUV2RCxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNwQixHQUFHLENBQUMsTUFBVyxFQUFFLElBQThCO2dCQUM3QyxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRTtvQkFDdEMsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQzdCLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUU7NEJBQ3pDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7NEJBQ3hCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO3dCQUN4RCxDQUFDO3FCQUNGLENBQUMsQ0FBQztpQkFDSjtxQkFBTTtvQkFDTCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNsQztZQUNILENBQUM7U0FDRixDQUFpQixDQUFDO0lBQ3JCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gseUJBQXlCLENBQUMsUUFBdUI7UUFDL0MsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRWhDLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRTtZQUNkLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzVCO2FBQU0sSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO1lBQ3JCLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzdCO2FBQU0sSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO1lBQ3JCLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzdCO2FBQU07WUFDTCxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM3QjtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsdUJBQXVCLENBQUMsUUFBdUI7UUFDN0MsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRWhDLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRTtZQUNkLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzdCO2FBQU0sSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO1lBQ3JCLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzdCO2FBQU0sSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO1lBQ3JCLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzdCO2FBQU07WUFDTCxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN6QjtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7O0FBbnNETSxtQ0FBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUNwQyxtQ0FBZ0IsR0FBRyxPQUFPLENBQUM7QUFDM0IsOEJBQVcsR0FBRyxRQUFRLENBQUM7QUFDdkIsMkNBQXdCLEdBQUcscUJBQXFCLENBQUM7QUFDakQsa0NBQWUsR0FBRyxZQUFZLENBQUM7QUFDL0IsdUNBQW9CLEdBQUcsa0JBQWtCLENBQUM7QUFDMUMsNkNBQTBCLEdBQUcsVUFBVSxDQUFDO0FBQ3hDLDhCQUFXLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLG9DQUFpQixHQUFHLE9BQU8sQ0FBQztBQUM1Qiw4QkFBVyxHQUFHLFVBQVUsQ0FBQztBQXkvQmhDO0lBREMsUUFBUSxFQUFFOzs7OzJEQUdWO0FBR0Q7SUFEQyxRQUFRLEVBQUU7Ozs7dURBTVY7QUFHRDtJQURDLFFBQVEsRUFBRTs7Ozt1REFnQ1Y7QUF3cEJILFNBQVMsS0FBSyxDQUFDLEdBQVE7SUFDckIsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuXHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFza2V0RGV0YWlscyxcclxuICBCYXNrZXRJdGVtTWFuYWdlbWVudEluZm9cclxufSBmcm9tICcuLi9zZXJ2aWNlcy9lbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkIH0gZnJvbSAnLi9tYW5hZ2VtZW50LWluZm8tYW5kLXZhbGlkJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2VzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBGbGlnaHREaXJlY3Rpb25FbnVtLFxyXG4gIEZsaWdodEdyb3VwcyxcclxuICBNYWluRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBNaW5NYXgsXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBPQlRGbGlnaHRDYWJpbkNsYXNzLFxyXG4gIE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICBTY2hlbWEsXHJcbiAgVW5wYWNrZWRcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQWlycG9ydCxcclxuICBCYWdnYWdlQWxsb3dhbmNlLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgRmFyZUNvbmRpdGlvbnMsXHJcbiAgRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBGbGlnaHRJdGluZXJhcnksXHJcbiAgRmxpZ2h0Sm91cm5leSxcclxuICBQYXNzZW5nZXJUeXBlLFxyXG4gIFNlcnZpY2UsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgVXNlclBhc3NlbmdlclR5cGVJbnB1dFxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQgeyBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzdXBwbGVtZW50YXJ5LWJvb2tpbmctaW5mby1pbXBsJztcclxuaW1wb3J0IHsgTWVtb3Jpc2UgfSBmcm9tICcuL2xpbWl0ZWQtY2FjaGUuY2xhc3MnO1xyXG5pbXBvcnQge1xyXG4gIEZsaWdodEZpbHRlcnMsXHJcbiAgRmxpZ2h0RmlsdGVyc1JlY29yZEtleXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1maWx0ZXJzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFJ1bGVzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zdW1tYXJ5LWludGVyZmFjZSc7XHJcblxyXG5kZWNsYXJlIHZhciBoZXhfaG1hY19tZDU6IGFueTtcclxuXHJcbmNvbnN0IEZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTY7XHJcbmNvbnN0IFJBSUxfTUFYX0NISUxEX0FHRV9ZRUFSUyA9IDEyO1xyXG5jb25zdCBFVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XHJcbmNvbnN0IENPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgPSAxNTtcclxuY29uc3QgTE9VTkdFU19NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XHJcbmNvbnN0IEZMSUdIVF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyA9IDA7XHJcbmNvbnN0IFJBSUxfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xyXG5jb25zdCBDT0FDSF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyA9IDA7XHJcbmNvbnN0IExPVU5HRVNfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xyXG5jb25zdCBNRVRSRVNfVE9fTUlMRVNfQ09OVkVSU0lPTiA9IDE2MDk7XHJcbmNvbnN0IFRJTUVfQkFTRSA9IDYwO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhc2VIZWxwZXJSb3V0aW5lcyB7XHJcbiAgc3RhdGljIFJFQURfREFURV9GT1JNQVQgPSAnZGQsIEQgTU1NIFlZWVknO1xyXG4gIHN0YXRpYyBSRUFEX1RJTUVfRk9STUFUID0gJ0hIOm1tJztcclxuICBzdGF0aWMgREFURV9GT1JNQVQgPSAnWVlNTUREJztcclxuICBzdGF0aWMgR1JBUEhRTF9EQVRBX0ZPUk1BVF9USU1FID0gJ1lZWVktTU0tREQgSEg6bW06c3MnO1xyXG4gIHN0YXRpYyBJU09fREFUQV9GT1JNQVQgPSAnWVlZWS1NTS1ERCc7XHJcbiAgc3RhdGljIElTT19EQVRBX0ZPUk1BVF9USU1FID0gJ1lZWVktTU0tREQgSEg6bW0nO1xyXG4gIHN0YXRpYyBJU09fREFUQV9GT1JNQVRfTk9fSFlQSEFOUyA9ICdZWVlZTU1ERCc7XHJcbiAgc3RhdGljIFRJTUVfRk9STUFUID0gJ0hIbW0nO1xyXG4gIHN0YXRpYyBUSU1FX0ZPUk1BVF9DT0xPTiA9ICdISDptbSc7XHJcbiAgc3RhdGljIE1NRERZWV9EQVRFID0gJ0RETU1ZWVlZJztcclxuXHJcbiAgbWluVG9Ib3VyKGR1cjogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gYCR7TWF0aC5mbG9vcihkdXIgLyA2MCl9aCAke2R1ciAlIDYwfW1gO1xyXG4gIH1cclxuXHJcbiAgbWFrZUNvbG9uVGltZSh0aW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aW1lLnN1YnN0cmluZygwLCAyKSArICc6JyArIHRpbWUuc3Vic3RyaW5nKDIsIDQpO1xyXG4gIH1cclxuXHJcbiAgbm9uTnVsbE1pbihrZXk6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcclxuICAgIHJldHVybiBhcmdzLnJlZHVjZShcclxuICAgICAgKGN1cnJlbnQsIGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtW2tleV0pIHtcclxuICAgICAgICAgIGlmIChjdXJyZW50Lm1pbiA+IE51bWJlcihpdGVtW2tleV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGl0ZW0sIG1pbjogTnVtYmVyKGl0ZW1ba2V5XSkgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgbWluOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgaXRlbTogbnVsbCB9XHJcbiAgICApLml0ZW07XHJcbiAgfVxyXG5cclxuICBqb2luQnlDb21tYSguLi5hdHRyaWJ1dGVzOiBhbnlbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYXR0cmlidXRlc1xyXG4gICAgICAucmVkdWNlKChhY2MsIGF0dHIpID0+IHtcclxuICAgICAgICBpZiAoXy5pc0VtcHR5KGF0dHIpKSB7XHJcbiAgICAgICAgICBhY2MgKz0gYXR0ciArICcsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSwgJycpXHJcbiAgICAgIC5zbGljZSgwLCAtMSk7XHJcbiAgfVxyXG5cclxuICBtdXR1YWxseUluY2x1ZGUoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBhLmluY2x1ZGVzKGIpIHx8IGIuaW5jbHVkZXMoYSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignVHJ5aW5nIHRvIG11dHVhbGx5IGNvbXBhcmUgdW5kZWZpbmVkIHZhcmlhYmxlLicpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaW5kQnlLZXkoYXJyYXk6IGFueVtdLCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gYXJyYXlcclxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtW2tleV0gPT09IHZhbHVlO1xyXG4gICAgICB9KVxyXG4gICAgICAucG9wKCk7XHJcbiAgfVxyXG5cclxuICBkYXRlVG9OZ0RhdGUoZGF0ZTogRGF0ZSk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpICsgMSxcclxuICAgICAgZGF5OiBkYXRlLmdldERhdGUoKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb1lZTU1ERChkYXRlOiBzdHJpbmcpIHtcclxuICAgIGlmIChkYXRlLmxlbmd0aCA+IDYpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnl5eXltbWRkVGltZVRvTW9tZW50KGRhdGUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRlO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGF0ZVRvTU1ERFlZWShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBtb21lbnQoZGF0ZSkuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXREYXRlKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuREFURV9GT1JNQVQpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0VGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuVElNRV9GT1JNQVQpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybWF0VGltZUNvbG9uKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuVElNRV9GT1JNQVRfQ09MT04pO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0SXNvRGF0ZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVCk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRJc29EYXRlVGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVF9USU1FKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdEdyYXBoUUxEYXRlVGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLkdSQVBIUUxfREFUQV9GT1JNQVRfVElNRSk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRJc29EYXRlTm9IeXBoYW5zKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUX05PX0hZUEhBTlMpO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVUaW1lc0xpc3QoZnJvbSA9IDAsIHRvID0gMjQsIHN0ZXAgPSAxNSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGRhdGVUaW1lQXJyYXk6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGxldCBob3VyID0gMDsgaG91ciA8IHRvIC0gZnJvbTsgaG91cisrKSB7XHJcbiAgICAgIGZvciAobGV0IG1pbnV0ZSA9IDA7IG1pbnV0ZSA8IDYwOyBtaW51dGUgKz0gc3RlcCkge1xyXG4gICAgICAgIGRhdGVUaW1lQXJyYXkucHVzaChtb21lbnQoeyBob3VyLCBtaW51dGUgfSkuZm9ybWF0KCdISDptbScpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGVUaW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuICBtb21lbnRUb05nRGF0ZShkYXRlOiBtb21lbnQuTW9tZW50KTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZVRvTmdEYXRlKGRhdGUudG9EYXRlKCkpO1xyXG4gIH1cclxuXHJcbiAgbmdEYXRlVG9EYXRlKGRhdGU6IE5nYkRhdGVTdHJ1Y3QpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGggLSAxLCBkYXRlLmRheSk7XHJcbiAgfVxyXG5cclxuICBuZ0RhdGVUb01vbWVudChkYXRlOiBOZ2JEYXRlU3RydWN0LCB0aW1lPzogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBjb25zdCBtb20gPSBtb21lbnQodGhpcy5uZ0RhdGVUb0RhdGUoZGF0ZSkpO1xyXG4gICAgaWYgKHRpbWUpIHtcclxuICAgICAgY29uc3QgdGltZXMgPSB0aW1lLnNwbGl0KCc6Jyk7XHJcbiAgICAgIGlmICh0aW1lcy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICBtb20uc2V0KCdob3VycycsIE51bWJlcih0aW1lc1swXSkpLnNldCgnbWludXRlcycsIE51bWJlcih0aW1lc1sxXSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1vbVxyXG4gICAgICAgICAgLnNldCgnaG91cnMnLCBOdW1iZXIodGltZS5zdWJzdHIoMCwgMikpKVxyXG4gICAgICAgICAgLnNldCgnbWludXRlcycsIE51bWJlcih0aW1lLnN1YnN0cigyLCAyKSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9tO1xyXG4gIH1cclxuXHJcbiAgdG9kYXlUb05nYkRhdGVTdHJ1Y3QoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICBjb25zdCB0b2RheSA9IG1vbWVudCgpO1xyXG4gICAgcmV0dXJuIHsgeWVhcjogdG9kYXkueWVhcigpLCBtb250aDogdG9kYXkubW9udGgoKSArIDEsIGRheTogdG9kYXkuZGF0ZSgpIH07XHJcbiAgfVxyXG5cclxuICBvYmplY3RUb0FycmF5KG9iamVjdDogUmVjb3JkPHN0cmluZywgYW55Pik6IEFycmF5PGFueT4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubWFwKChpKSA9PiBvYmplY3RbaV0pO1xyXG4gIH1cclxuXHJcbiAgeXl5eW1tZGRUb0RhdGUodmFsdWU6IHN0cmluZyk6IERhdGUge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKFxyXG4gICAgICBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDAsIDQpKSxcclxuICAgICAgTnVtYmVyKHZhbHVlLnN1YnN0cmluZyg0LCA2KSkgLSAxLFxyXG4gICAgICBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDYsIDgpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHl5eXltbWRkVG9Nb21lbnQodmFsdWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIG1vbWVudCh0aGlzLnl5eXltbWRkVG9EYXRlKHZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICB5eW1tZGRUb01vbWVudCh2YWx1ZTogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gbW9tZW50KHZhbHVlLCAnWVlNTUREJyk7XHJcbiAgfVxyXG5cclxuICB5eW1tZGRUb05nYkRhdGUodmFsdWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUodGhpcy55eW1tZGRUb01vbWVudCh2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgeXltbWRkX2hobW1Ub01vbWVudChkYXRlOiBzdHJpbmcsIHRpbWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfSAke3RpbWV9YCwgJ1lZTU1ERCBISG1tJyk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZF9oaG1tVG9Nb21lbnQoZGF0ZTogc3RyaW5nLCB0aW1lOiBzdHJpbmcpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiBtb21lbnQoYCR7ZGF0ZX0gJHt0aW1lfWAsICdZWVlZTU1ERCBISG1tJyk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRvTmdEYXRlKHZhbHVlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLmRhdGVUb05nRGF0ZSh0aGlzLnl5eXltbWRkVG9EYXRlKHZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRpbWVUb05nRGF0ZShkYXRlOiBzdHJpbmcsIHRpbWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgY29uc3QgZHQgPSB0aGlzLnl5eXltbWRkVG9Nb21lbnQoZGF0ZSlcclxuICAgICAgLmFkZChOdW1iZXIodGltZS5zdWJzdHJpbmcoMCwgMikpLCAnaG91cnMnKVxyXG4gICAgICAuYWRkKE51bWJlcih0aW1lLnN1YnN0cmluZygyLCA0KSksICdtaW51dGVzJyk7XHJcbiAgICByZXR1cm4gdGhpcy5tb21lbnRUb05nRGF0ZShkdCk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRpbWVUb01vbWVudChkYXRlOiBzdHJpbmcpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIGlmIChkYXRlLmxlbmd0aCA9PT0gNikge1xyXG4gICAgICByZXR1cm4gbW9tZW50KGAke2RhdGV9YCwgJ1lZTU1ERCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfWAsICdZWVlZTU1ERCcpO1xyXG4gIH1cclxuXHJcbiAgaGhtbVRvVGltZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt2YWx1ZS5zdWJzdHJpbmcoMCwgMil9OiR7dmFsdWUuc3Vic3RyaW5nKDIsIDQpfWA7XHJcbiAgfVxyXG5cclxuICBkYXRlU3RyaW5nVG95eXl5bW1kZChkOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgZCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtID0gLyhcXGR7NH0pWy1cXC9dPyhcXGR7Mn0pWy1cXC9dPyhcXGR7Mn0pLy5leGVjKGQpO1xyXG4gICAgcmV0dXJuIG0gPyBgJHttWzFdfSR7bVsyXX0ke21bM119YCA6IG51bGw7XHJcbiAgfVxyXG5cclxuICB0aW1lU3RyaW5nVG9oaF9tbSh0OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgdCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtID0gLyhcXGR7Mn0pWzotXT8oXFxkezJ9KS8uZXhlYyh0KTtcclxuICAgIHJldHVybiBtID8gYCR7bVsxXX06JHttWzJdfWAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgc3RyaW5nVG9Cb29sKHM6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHMgJiYgcyAhPT0gJ2ZhbHNlJyAmJiBzICE9PSAnMCcgJiYgcyAhPT0gJ25vJyAmJiBzICE9PSAnbic7XHJcbiAgfVxyXG5cclxuICBjbG9uZTxUID0gYW55Pih0b0Nsb25lOiBUKTogVCB7XHJcbiAgICByZXR1cm4gXy5jbG9uZURlZXAodG9DbG9uZSkgYXMgVDtcclxuICB9XHJcblxyXG4gIHJlcGxhY2VLZXlzSW5UZXh0KFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgcmVwbGFjZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXBsYWNlbWVudHMpLnJlZHVjZSgoY3VycmVudCwga2V5KSA9PiB7XHJcbiAgICAgIHJldHVybiBjdXJyZW50LnJlcGxhY2UoJyUnICsga2V5LCByZXBsYWNlbWVudHNba2V5XSk7XHJcbiAgICB9LCB0ZXh0KTtcclxuICB9XHJcblxyXG4gIGdldE5leHRNaW51ZXRzKGRhdGU6IG1vbWVudC5Nb21lbnQgPSBtb21lbnQoKSwgbWludXRlc1RvUm91bmQgPSAxNSkge1xyXG4gICAgZGF0ZS5taW51dGUoTWF0aC5jZWlsKGRhdGUubWludXRlKCkgLyBtaW51dGVzVG9Sb3VuZCkgKiBtaW51dGVzVG9Sb3VuZCk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoJ0hIOm1tJyk7XHJcbiAgfVxyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAqIEJlbG93IGFyZSBmdW5jdGlvbnMgbmVlZGVkIGZvciBnZW5lcmF0aW5nIHRoZSBoYXNoZWQgbnVtYmVyIG9uY2UgdG9rZW4sIHRha2VuIGFzIHJlcXVpcmVkXHQqXHJcbiAgICogRG9uJ3QgTWVzcyB3aXRoIHRoZXNlXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KlxyXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICBnZXROdW1iZXJPbmNlVmFsdWUodG9rZW46IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByYW5kb21fdmFsdWUgPSB0aGlzLmd1aWQoKTtcclxuICAgIHJldHVybiByYW5kb21fdmFsdWUgKyAnXycgKyBoZXhfaG1hY19tZDUodG9rZW4sIHJhbmRvbV92YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBndWlkKCk6IGFueSB7XHJcbiAgICBsZXQgcmFuZG9tX2hleCA9ICcnO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzI7IGkrKykge1xyXG4gICAgICByYW5kb21faGV4ICs9IHRoaXMuczQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmFuZG9tX2hleDtcclxuICB9XHJcblxyXG4gIHM0KCk6IGFueSB7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMClcclxuICAgICAgLnRvU3RyaW5nKDE2KVxyXG4gICAgICAuc3Vic3RyaW5nKDEpO1xyXG4gIH1cclxuXHJcbiAgY2FwaXRhbGlzZUZpcnN0TGV0dGVyKHdvcmQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAod29yZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiB3b3JkWzBdLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmcm9tT2JqZWN0KC4uLmFyZ3M6IGFueVtdKTogYW55IHtcclxuICAgIGxldCBkYXRhID0gYXJncy5zaGlmdCgpO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBkYXRhICYmIGluZGV4IDwgYXJncy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcclxuICAgICAgZGF0YSA9IGRhdGFbYXJnc1tpbmRleF1dO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBtb21lbnRSb3VuZE1pbnV0ZXModGltZTogbW9tZW50Lk1vbWVudCwgcm91bmQ6IG51bWJlcik6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgdGltZSA9IG1vbWVudCh0aW1lKS5zdGFydE9mKCdtaW51dGVzJyk7XHJcbiAgICBsZXQgZGlmZiA9IHRpbWUubWludXRlcygpICUgcm91bmQ7XHJcbiAgICBpZiAoZGlmZiAhPT0gMCkge1xyXG4gICAgICBkaWZmID0gcm91bmQgLSBkaWZmO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRpbWUuYWRkKGRpZmYsICdtaW51dGUnKTtcclxuICB9XHJcblxyXG4gIHJvdW5kKGRhdGU6IGFueSwgZHVyYXRpb246IGFueSkge1xyXG4gICAgcmV0dXJuIG1vbWVudChNYXRoLmNlaWwoK2RhdGUgLyArZHVyYXRpb24pICogK2R1cmF0aW9uKTtcclxuICB9XHJcblxyXG4gIGljc0ZvbGQoYm9keTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGxpbmVzID0gYm9keS5zcGxpdCgvXFxyXFxuL2cpO1xyXG4gICAgcmV0dXJuIGxpbmVzXHJcbiAgICAgIC5tYXAoKGxpbmUpID0+IHtcclxuICAgICAgICBsZXQgcmVzID0gJyc7XHJcbiAgICAgICAgY29uc3QgbiA9IDcyO1xyXG4gICAgICAgIGxpbmUgPSBsaW5lLnRyaW0oKTtcclxuICAgICAgICB3aGlsZSAobGluZS5sZW5ndGggPiBuKSB7XHJcbiAgICAgICAgICByZXMgKz0gYCR7bGluZS5zbGljZSgwLCBuKX1cXHJcXG5gO1xyXG4gICAgICAgICAgbGluZSA9IGAgJHtsaW5lLnNsaWNlKG4pLnRyaW0oKX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGluZS50cmltKCkpIHtcclxuICAgICAgICAgIHJlcyArPSBsaW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignXFxyXFxuJyk7XHJcbiAgfVxyXG5cclxuICBzcGxpdEFkZHJlc3NMaW5lKFxyXG4gICAgbGluZTogc3RyaW5nLFxyXG4gICAgbGVuOiBudW1iZXJcclxuICApOiB7IGxpbmU6IHN0cmluZzsgcmVzaWR1ZTogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgcmVzID0ge1xyXG4gICAgICBsaW5lOiBsaW5lLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCksXHJcbiAgICAgIHJlc2lkdWU6ICcnXHJcbiAgICB9O1xyXG4gICAgaWYgKHJlcy5saW5lLmxlbmd0aCA+IGxlbikge1xyXG4gICAgICBsZXQgaSA9IHJlcy5saW5lLnNsaWNlKDAsIGxlbikubGFzdEluZGV4T2YoJywnKTtcclxuICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgcmVzLnJlc2lkdWUgPSByZXMubGluZS5zbGljZShpICsgMSkudHJpbSgpO1xyXG4gICAgICAgIHJlcy5saW5lID0gcmVzLmxpbmUuc2xpY2UoMCwgaSkudHJpbSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGkgPSByZXMubGluZS5zbGljZSgwLCBsZW4pLmxhc3RJbmRleE9mKCcgJyk7XHJcbiAgICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgICByZXMucmVzaWR1ZSA9IHJlcy5saW5lLnNsaWNlKGkgKyAxKS50cmltKCk7XHJcbiAgICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXMucmVzaWR1ZSA9IHJlcy5saW5lLnNsaWNlKGxlbik7XHJcbiAgICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGxlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgZGF5c0JldHdlZW4oc3RhcnQ6IG1vbWVudC5Nb21lbnQsIGVuZDogbW9tZW50Lk1vbWVudCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gZW5kLmRpZmYoc3RhcnQsICdkYXlzJyk7XHJcbiAgfVxyXG5cclxuICBtYXBQcm9taXNlPFQgPSBhbnksIFIgPSBhbnk+KFxyXG4gICAgYTogVFtdLFxyXG4gICAgZjogKHZhbDogVCwgaW5kZXg6IG51bWJlcikgPT4gUiB8IFByb21pc2U8Uj4sXHJcbiAgICBtYXg/OiBudW1iZXJcclxuICApOiBQcm9taXNlPFJbXT4ge1xyXG4gICAgY29uc3QgaXQgPSBhW1N5bWJvbC5pdGVyYXRvcl0oKTtcclxuICAgIGNvbnN0IHJlc3VsdDogUltdID0gW107XHJcbiAgICBjb25zdCBidWZmZXI6IFByb21pc2U8Uj5bXSA9IFtdO1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgY29uc3QgbmV4dGYgPSAoKTogUHJvbWlzZTxSPiA9PiB7XHJcbiAgICAgIGNvbnN0IG5leHQgPSBpdC5uZXh0KCk7XHJcbiAgICAgIGlmIChuZXh0LmRvbmUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW5kZXggPSBpKys7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZihuZXh0LnZhbHVlLCBpbmRleCkpLnRoZW4oKHZhbCkgPT4ge1xyXG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSB2YWw7XHJcbiAgICAgICAgcmV0dXJuIG5leHRmKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHdoaWxlICghbWF4IHx8IGJ1ZmZlci5sZW5ndGggPD0gbWF4KSB7XHJcbiAgICAgIGNvbnN0IG4gPSBuZXh0ZigpO1xyXG4gICAgICBpZiAobikge1xyXG4gICAgICAgIGJ1ZmZlci5wdXNoKG4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoYnVmZmVyKS50aGVuKCgpID0+IHtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbWFwU2VyaWVzUHJvbWlzZTxUID0gYW55LCBSID0gYW55PihcclxuICAgIGE6IFRbXSxcclxuICAgIGY6ICh2YWw6IFQsIGluZGV4OiBudW1iZXIpID0+IFIgfCBQcm9taXNlPFI+XHJcbiAgKTogUHJvbWlzZTxSW10+IHtcclxuICAgIHJldHVybiB0aGlzLm1hcFByb21pc2UoYSwgZiwgMSk7XHJcbiAgfVxyXG5cclxuICBvYmoycXVlcnlTdHJpbmcob2JqOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIF8ucmVkdWNlKFxyXG4gICAgICBvYmosXHJcbiAgICAgIChhLCB2LCBrKSA9PiB7XHJcbiAgICAgICAgaWYgKGEgIT09ICcnKSB7XHJcbiAgICAgICAgICBhICs9ICcmJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke2F9JHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWA7XHJcbiAgICAgIH0sXHJcbiAgICAgICcnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3RyaXBQdW5jdHVhdGlvbihzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHMucmVwbGFjZSgvW15hLXpBLVowLTlcXHNdL2csICcnKTtcclxuICB9XHJcblxyXG4gIHJlcGxhY2VBbGwoaGF5c3RhY2s6IHN0cmluZywgbmVlZGxlOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGhheXN0YWNrXHJcbiAgICAgID8gaGF5c3RhY2sucmVwbGFjZShuZXcgUmVnRXhwKG5lZWRsZSwgJ2cnKSwgcmVwbGFjZW1lbnQpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGRhdGVUaW1lKHNhYnNEYXRlOiBzdHJpbmcsIHNhYnNUaW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3QgdGVtcERhdGUgPSBzYWJzRGF0ZS5tYXRjaCgvLnsxLDJ9L2cpOyAvLyBzcGxpdHMgZXZlcnkgMiBjaGFyYWN0ZXJzXHJcbiAgICBjb25zdCB0ZW1wVGltZSA9IHNhYnNUaW1lLm1hdGNoKC8uezEsMn0vZyk7XHJcblxyXG4gICAgY29uc3QgbmV3U3RyID1cclxuICAgICAgJzIwJyArXHJcbiAgICAgIHRlbXBEYXRlWzBdICtcclxuICAgICAgJy0nICtcclxuICAgICAgdGVtcERhdGVbMV0gK1xyXG4gICAgICAnLScgK1xyXG4gICAgICB0ZW1wRGF0ZVsyXSArXHJcbiAgICAgICdUJyArXHJcbiAgICAgIHRlbXBUaW1lWzBdICtcclxuICAgICAgJzonICtcclxuICAgICAgdGVtcFRpbWVbMV0gK1xyXG4gICAgICAnOjAwJztcclxuICAgIHJldHVybiBuZXdTdHI7XHJcbiAgfVxyXG5cclxuICBhbHRlcm5hdGVKU09OU3RyaW5naWZ5KGpzb25PYmplY3Q6IGFueSk6IHN0cmluZyB7XHJcbiAgICBsZXQganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb25PYmplY3QpO1xyXG4gICAganNvblN0cmluZyA9IGpzb25TdHJpbmcucmVwbGFjZSgvXCIvZywgJ2AnKTtcclxuICAgIHJldHVybiBqc29uU3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29udmVydCBvYmplY3QgdG8gYXJyYXlcclxuICBDb252ZXJ0T2JqZWN0VG9BcnJheShvYmplY3Q6IG9iamVjdCk6IGFueVtdIHtcclxuICAgIGxldCBhcnJheSA9IF8udmFsdWVzKG9iamVjdCk7XHJcbiAgICBhcnJheSA9IF8uZmxhdHRlbihhcnJheSk7XHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbiAgfVxyXG5cclxuICBhZGREYXkoZGF0ZVN0cnVjdDogTmdiRGF0ZVN0cnVjdCk6IGFueSB7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoXHJcbiAgICAgIGRhdGVTdHJ1Y3QueWVhcixcclxuICAgICAgZGF0ZVN0cnVjdC5tb250aCAtIDEsXHJcbiAgICAgIGRhdGVTdHJ1Y3QuZGF5ICsgMVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJldERhdGUgPSB7XHJcbiAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogZGF0ZS5nZXREYXRlKClcclxuICAgIH07XHJcbiAgICAvLy8vIGNvbnNvbGUubG9nKHJldERhdGUpO1xyXG4gICAgLy8vLyBjb25zb2xlLmxvZyhkYXRlKTtcclxuICAgIHJldHVybiByZXREYXRlO1xyXG4gIH1cclxuXHJcbiAgaGFzaENvZGUodG9Db2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGhhc2ggPSAwO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9Db2RlLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIGNvbnN0IGNoYXIgPSB0b0NvZGUuY2hhckNvZGVBdChpKTtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1iaXR3aXNlXHJcbiAgICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjaGFyO1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWJpdHdpc2VcclxuICAgICAgaGFzaCA9IGhhc2ggJiBoYXNoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhhc2gudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIE1NZGR5eVRvTmdiKGRhdGU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUobW9tZW50KGRhdGUsIEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSkpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRDaGlsZHJlblRyYXZlbGxlcnMoXHJcbiAgICBzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLFxyXG4gICAgdHlwZTogU2VydmljZVR5cGVcclxuICApIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAvLyBUaGVzZSB0eXBlcyBkbyBub3QgaGF2ZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiBhZHVsdHMgYW5kIGNoaWxkcmVuLiBzbyBhbHdheXMgbWFyayBhcyBhZHVsdHMuXHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiBzZWxlY3RlZFRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHRyYXZlbGxlci5pc0NoaWxkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRUcmF2ZWxsZXJzKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLCB0eXBlOiBTZXJ2aWNlVHlwZSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIC8vIFRoZXNlIHR5cGVzIGRvIG5vdCBoYXZlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGFkdWx0cyBhbmQgY2hpbGRyZW4uIHNvIGFsd2F5cyBtYXJrIGFzIGFkdWx0cy5cclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgcmV0dXJuIHsgYWR1bHRzOiB0cmF2ZWxsZXJzLCBjaGlsZHJlbjogW10sIGluZmFudHM6IFtdIH07XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHRyYXZlbGxlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2N1bToge1xyXG4gICAgICAgICAgICAgIGFkdWx0czogVHJhdmVsbGVyW107XHJcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFRyYXZlbGxlcltdO1xyXG4gICAgICAgICAgICAgIGluZmFudHM6IFRyYXZlbGxlcltdO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXI6IFRyYXZlbGxlclxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0cmF2ZWxsZXIuaXNDaGlsZCkge1xyXG4gICAgICAgICAgICAgIGlmICh0cmF2ZWxsZXIuaXNJbmZhbnQpIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtLmluZmFudHMucHVzaCh0cmF2ZWxsZXIpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhY2N1bS5jaGlsZHJlbi5wdXNoKHRyYXZlbGxlcik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGFjY3VtLmFkdWx0cy5wdXNoKHRyYXZlbGxlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWR1bHRzOiBbXSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICBpbmZhbnRzOiBbXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNlbGVjdGVkQWR1bHRUcmF2ZWxsZXJzKHNlbGVjdGVkVHJhdmVsbGVyczogVHJhdmVsbGVyW10sIHR5cGU6IFNlcnZpY2VUeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gYWR1bHRzIGFuZCBjaGlsZHJlbi4gc28gYWx3YXlzIG1hcmsgYXMgYWR1bHRzLlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRUcmF2ZWxsZXJzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlbGVjdGVkVHJhdmVsbGVycy5maWx0ZXIoXHJcbiAgICAgICh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4gIXRyYXZlbGxlci5pc0NoaWxkICYmICF0cmF2ZWxsZXIuaXNJbmZhbnRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0NoaWxkKHRyYXZlbGxlcjogVHJhdmVsbGVyIHwgRGF0ZSwgbWF4QWdlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGlmICh0cmF2ZWxsZXIgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIGNvbnN0IGFkdWx0RGF0ZSA9IG1vbWVudCgpLmFkZCgtbWF4QWdlLCAneWVhcnMnKTtcclxuICAgICAgcmV0dXJuIGFkdWx0RGF0ZS5pc0JlZm9yZShcclxuICAgICAgICBtb21lbnQodHJhdmVsbGVyLCBCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUKSxcclxuICAgICAgICAnZGF5J1xyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRyYXZlbGxlci5pc0NoaWxkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNDaGlsZEZsaWdodCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBGTElHSFRfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgfVxyXG5cclxuICBpc0NoaWxkUmFpbCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBSQUlMX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gIH1cclxuXHJcbiAgaXNDaGlsZEV1cm9zdGFyKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gIH1cclxuXHJcbiAgdW5pcUJ5KGFycmF5OiBhbnlbXSwgdmFsdWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIF8udW5pcUJ5KGFycmF5LCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBpc0NoaWxkKHRyYXZlbGxlcjogVHJhdmVsbGVyIHwgRGF0ZSwgdHJhdmVsVHlwZTogU2VydmljZVR5cGUpIHtcclxuICAgIHN3aXRjaCAodHJhdmVsVHlwZSkge1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgLy8gY2FzZSBTZXJ2aWNlVHlwZS5FdXJvc3RhcjpcclxuICAgICAgLy8gIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ29hY2g6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBDT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBMT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNJbmZhbnQodHJhdmVsbGVyOiBUcmF2ZWxsZXIgfCBEYXRlLCB0cmF2ZWxUeXBlOiBTZXJ2aWNlVHlwZSkge1xyXG4gICAgc3dpdGNoICh0cmF2ZWxUeXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgRkxJR0hUX01BWF9JTkZBTlRfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgUkFJTF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyk7XHJcbiAgICAgIC8vIGNhc2UgU2VydmljZVR5cGUuRXVyb3N0YXI6XHJcbiAgICAgIC8vICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNvYWNoOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgQ09BQ0hfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIExPVU5HRVNfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QWdlVHlwZSh0cmF2ZWxsZXI6IFRyYXZlbGxlciwgdHJhdmVsVHlwZTogU2VydmljZVR5cGUpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNDaGlsZCh0cmF2ZWxsZXIsIHRyYXZlbFR5cGUpID8gJ0MnIDogJ0EnO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4Q2hpbGRBZ2UodHlwZTogU2VydmljZVR5cGUpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLlJhaWw6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1SQUlMX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICAvLyBjYXNlIFNlcnZpY2VUeXBlLkVVUk9TVEFSOlxyXG4gICAgICAvLyAgcmV0dXJuIG1vbWVudCgpLmFkZCgtRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyArIDEsICd5ZWFycycpLmZvcm1hdChIZWxwZXJzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUNPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUxPVU5HRVNfTUFYX0NISUxEX0FHRV9ZRUFSUyArIDEsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREZWZhdWx0QWR1bHRBZ2UodHlwZTogU2VydmljZVR5cGUpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICAgIC8vIGNhc2UgU2VydmljZVR5cGUuRXVyb3N0YXI6XHJcbiAgICAgIC8vICByZXR1cm4gbW9tZW50KCkuYWRkKC1FVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpLmZvcm1hdChIZWxwZXJzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUNPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1MT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgY2hpbGQgcGxhY2VzIHNvXHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC0xOCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtb21lbnQoKS5hZGQoLTE4LCAneWVhcnMnKS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICB9XHJcblxyXG4gIHRyYW5zZm9ybShcclxuICAgIGFycmF5OiBhbnlbXSxcclxuICAgIGNhbGxiYWNrOiBfLk1lbW9Wb2lkQXJyYXlJdGVyYXRvcjxhbnksIGFueVtdPixcclxuICAgIGFjYzogYW55XHJcbiAgKTogYW55W10ge1xyXG4gICAgcmV0dXJuIF8udHJhbnNmb3JtKGFycmF5LCBjYWxsYmFjaywgYWNjKTtcclxuICB9XHJcblxyXG4gIGFycmF5VG9PYmplY3Q8VCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0+KFxyXG4gICAgYXJyYXk6IFRbXSxcclxuICAgIGZpZWxkOiBzdHJpbmdcclxuICApOiB7IFtrZXk6IHN0cmluZ106IFQgfSB7XHJcbiAgICByZXR1cm4gYXJyYXlcclxuICAgICAgLmZpbHRlcigoZGF0YTogVCkgPT4gISFkYXRhKVxyXG4gICAgICAucmVkdWNlKChjb25maWdzOiB7IFtrZXk6IHN0cmluZ106IFQgfSwgY29uZmlnSXRlbTogVCkgPT4ge1xyXG4gICAgICAgIGlmIChjb25maWdJdGVtICYmIGNvbmZpZ0l0ZW1bZmllbGRdKSB7XHJcbiAgICAgICAgICBjb25maWdzW2NvbmZpZ0l0ZW1bZmllbGRdXSA9IGNvbmZpZ0l0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25maWdzO1xyXG4gICAgICB9LCB7fSk7XHJcbiAgfVxyXG5cclxuICBzZXRGaWVsZEluT2JqZWN0KFxyXG4gICAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgZmllbGRzOiBzdHJpbmdbXSxcclxuICAgIHZhbHVlOiBhbnlcclxuICApOiBhbnkge1xyXG4gICAgaWYgKGZpZWxkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpZWxkJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIW9iaikge1xyXG4gICAgICBvYmogPSB7fTtcclxuICAgIH1cclxuICAgIGlmIChmaWVsZHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIG9ialtmaWVsZHNbMF1dID0gb2JqW2ZpZWxkc1swXV0gfHwgW107XHJcbiAgICAgIG9ialtmaWVsZHNbMF1dLnB1c2godmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmllbGQ6IHN0cmluZyA9IGZpZWxkc1swXTtcclxuICAgICAgb2JqW2ZpZWxkXSA9IHRoaXMuc2V0RmllbGRJbk9iamVjdChvYmpbZmllbGRdLCBmaWVsZHMuc2xpY2UoMSksIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuXHJcbiAgYXJyYXlUb09iamVjdEFycmF5PFxyXG4gICAgVCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0sXHJcbiAgICBRIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBhbnkgfVxyXG4gID4oYXJyYXk6IFRbXSwgZmllbGRzOiAoc3RyaW5nIHwgc3RyaW5nW10pW10pOiBRIHtcclxuICAgIHJldHVybiBhcnJheVxyXG4gICAgICAuZmlsdGVyKChkYXRhOiBUKSA9PiAhIWRhdGEpXHJcbiAgICAgIC5yZWR1Y2UoKGNvbmZpZ3M6IHsgW2tleTogc3RyaW5nXTogVFtdIH0sIGNvbmZpZ0l0ZW06IFQpID0+IHtcclxuICAgICAgICBjb25zdCBmaWVsZFZhbHVlczogc3RyaW5nW10gPSBmaWVsZHMucmVkdWNlPHN0cmluZ1tdPihcclxuICAgICAgICAgIChhY2N1bTogc3RyaW5nW10sIGZpZWxkOiBrZXlvZiBUIHwgKGtleW9mIFQpW10pOiBzdHJpbmdbXSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZldGNoVmFsdWU6IHN0cmluZyA9IEFycmF5LmlzQXJyYXkoZmllbGQpXHJcbiAgICAgICAgICAgICAgPyBmaWVsZFxyXG4gICAgICAgICAgICAgICAgICAubWFwKChrZXk6IGtleW9mIFQpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWVsZEZyb21PYmplY3QoY29uZmlnSXRlbSwga2V5IGFzIHN0cmluZylcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAuam9pbignXycpXHJcbiAgICAgICAgICAgICAgOiB0aGlzLmZpZWxkRnJvbU9iamVjdChjb25maWdJdGVtLCBmaWVsZCBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICBpZiAoYWNjdW0gJiYgZmV0Y2hWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGFjY3VtLnB1c2goZmV0Y2hWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY29uZmlnSXRlbSAmJiBmaWVsZFZhbHVlcykge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RmllbGRJbk9iamVjdChjb25maWdzLCBmaWVsZFZhbHVlcywgY29uZmlnSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB7fSk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXJtaW5hbHMoYWlycG9ydDogQWlycG9ydCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBhaXJwb3J0LnRlcm1pbmFscztcclxuICB9XHJcblxyXG4gIGZpZWxkRnJvbU9iamVjdDxUPihvYmo6IG9iamVjdCwgZmllbGRzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFQgfCBudWxsIHtcclxuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheShmaWVsZHMpID8gZmllbGRzIDogKGZpZWxkcyB8fCAnJykuc3BsaXQoJy4nKSkucmVkdWNlKFxyXG4gICAgICAoY3VycmVudDogUmVjb3JkPHN0cmluZywgYW55PiwgZmllbGQxOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W2ZpZWxkMV0pIHtcclxuICAgICAgICAgIHJldHVybiBjdXJyZW50W2ZpZWxkMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9LFxyXG4gICAgICBvYmpcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBtYXBGaWVsZEZyb21PYmplY3Q8SyBleHRlbmRzIHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgVD4oZmllbGQ6IEspIHtcclxuICAgIHJldHVybiAob2JqOiBSZWNvcmQ8SywgYW55Pik6IFQgPT4ge1xyXG4gICAgICByZXR1cm4gb2JqW2ZpZWxkXTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZW1vdmVOdWxsczxUPihxdWVyeTogVCk6IFQge1xyXG4gICAgaWYgKCFxdWVyeSkge1xyXG4gICAgICByZXR1cm4gcXVlcnk7XHJcbiAgICB9XHJcbiAgICBpZiAobW9tZW50LmlzTW9tZW50KHF1ZXJ5KSkge1xyXG4gICAgICByZXR1cm4gcXVlcnk7XHJcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocXVlcnkpKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgKChxdWVyeSBhcyB1bmtub3duIGFzIEFycmF5PFVucGFja2VkPFQ+PilcclxuICAgICAgICAgIC5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVOdWxscyhpdGVtKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZmlsdGVyKChpdGVtMTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIWl0ZW0xO1xyXG4gICAgICAgICAgfSkgYXMgdW5rbm93biBhcyBUKSB8fCBudWxsXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHF1ZXJ5KS5yZWR1Y2UoKGFjY3VtOiBULCBrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChrZXlbMF0gIT09ICdfJykge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSAocXVlcnkgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XTtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlbW92ZU51bGxzKHZhbHVlKTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGEgIT09ICdudWxsJykgfHxcclxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoZGF0YSkgJiYgZGF0YS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIChhY2N1bSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldID0gZGF0YTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICB9LCB7fSBhcyBUKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBxdWVyeTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRyYXZlbGxlcnNJZCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSk6IHN0cmluZ1tdIHtcclxuICAgIGlmICh0cmF2ZWxsZXJzKSB7XHJcbiAgICAgIHJldHVybiB0cmF2ZWxsZXJzLnJlZHVjZShcclxuICAgICAgICAocHJldmlvdXNWYWx1ZTogc3RyaW5nW10sIGN1cnJlbnRWYWx1ZTogVHJhdmVsbGVyLCBpZHg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGlkeCA9PT0gMFxyXG4gICAgICAgICAgICA/IFtjdXJyZW50VmFsdWUuaWRdXHJcbiAgICAgICAgICAgIDogWy4uLnByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZS5pZF07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBbXVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogbG9vcCBvdmVyIHRoZSBxdWVyeSBvYmplY3QgcGFyYW0gYW5kIGNvbnZlcnQgYW55IG1vbWVudCBkYXRlIG9iamVjdHMgdG8gZGF0ZS10aW1lIHN0cmluZ3NcclxuICAgKiBAcGFyYW0gcXVlcnlcclxuICAgKiBAcGFyYW0gZGVidWdcclxuICAgKi9cclxuICBzYW5pdGl6ZU1vbWVudERhdGVzKHF1ZXJ5OiBhbnksIGRlYnVnID0gZmFsc2UpOiBhbnkge1xyXG4gICAgY29uc3Qgc2FuaXRpemVkUXVlcnkgPSB7IC4uLnF1ZXJ5IH07XHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzYW5pdGl6ZWRRdWVyeSkpIHtcclxuICAgICAgaWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpIHtcclxuICAgICAgICBzYW5pdGl6ZWRRdWVyeVtrZXldID0gc2FuaXRpemVkUXVlcnlba2V5XS50b0lTT1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJy0tIHNhbml0aXplTW9tZW50RGF0ZXMoKSBjYWxsZWQgLS0nKTtcclxuICAgICAgY29uc29sZS5sb2coJ29yaWdpbmFsIHF1ZXJ5OiAnLCBxdWVyeSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdzYW5pdGl6ZWQgcXVlcnk6ICcsIHNhbml0aXplZFF1ZXJ5KTtcclxuICAgIH1cclxuICAgIHJldHVybiBzYW5pdGl6ZWRRdWVyeTtcclxuICB9XHJcblxyXG4gIHRvU3RyaW5nczxUPih0b0Zvcm1hdDogVCwgc2NoZW1hOiBTY2hlbWEpOiBUIHtcclxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhzY2hlbWEucHJvcGVydGllcyB8fCB7fSkucmVkdWNlKFxyXG4gICAgICAoY3VycmVudFZhbHVlOiBULCBba2V5LCB2YWx1ZV06IFtzdHJpbmcsIFNjaGVtYV0pOiBUID0+IHtcclxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuX2Zvcm1hdFZhbHVlKFxyXG4gICAgICAgICAgdG9Gb3JtYXRba2V5IGFzIGtleW9mIFRdLFxyXG4gICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAoc2NoZW1hLnJlcXVpcmVkIHx8IFtdKS5pbmNsdWRlcyhrZXkpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBjdXJyZW50VmFsdWVba2V5IGFzIGtleW9mIFRdID0gbmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIHt9IGFzIFRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mb3JtYXRWYWx1ZSh2YWx1ZTogYW55LCBzY2hlbWE6IFNjaGVtYSwgaXNSZXF1aXJlZDogYm9vbGVhbik6IGFueSB7XHJcbiAgICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2ludGVnZXInOlxyXG4gICAgICAgIGNvbnN0IHRtcCA9IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNOYU4odG1wKSA/IChpc1JlcXVpcmVkID8gMCA6IG51bGwpIDogdG1wO1xyXG4gICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgIGNvbnN0IHRtcDEgPSB2YWx1ZSA/IHZhbHVlLnRvU3RyaW5nKCkgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0bXAxICYmIHRtcDEubGVuZ3RoID4gMCA/IHRtcDEgOiBpc1JlcXVpcmVkID8gJycgOiBudWxsO1xyXG4gICAgICBjYXNlICdvYmplY3QnOlxyXG4gICAgICAgIHJldHVybiB2YWx1ZSA/IHRoaXMudG9TdHJpbmdzKHZhbHVlLCBzY2hlbWEpIDogaXNSZXF1aXJlZCA/IHt9IDogbnVsbDtcclxuICAgICAgY2FzZSAnYXJyYXknOlxyXG4gICAgICAgIHJldHVybiB2YWx1ZTsgLy8gVE9ETyB3cml0ZSBhcnJheSB0cmFuc2xhdGlvblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1ha2VUaW1lV2luZG93KGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzdGFydFRpbWUgPSBkYXRlVGltZS5jbG9uZSgpLmFkZChzdGFydCwgJ2hvdXInKTtcclxuICAgIGNvbnN0IGVuZFRpbWUgPSBkYXRlVGltZS5jbG9uZSgpLmFkZChlbmQsICdob3VyJyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0VGltZShzdGFydFRpbWUpICsgJy0nICsgdGhpcy5mb3JtYXRUaW1lKGVuZFRpbWUpO1xyXG4gIH1cclxuXHJcbiAgaW5SYW5nZSh0b2NoZWNrOiBudW1iZXIsIHJhbmdlOiBNaW5NYXgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0b2NoZWNrID49IHJhbmdlLm1pbiAmJiB0b2NoZWNrIDw9IHJhbmdlLm1heDtcclxuICB9XHJcblxyXG4gIG1ha2VVc2Vycyh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSk6IFVzZXJQYXNzZW5nZXJUeXBlSW5wdXRbXSB7XHJcbiAgICByZXR1cm4gdHJhdmVsbGVycy5tYXAoKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogVXNlclBhc3NlbmdlclR5cGVJbnB1dCA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaWQ6IHRyYXZlbGxlci5pZCxcclxuICAgICAgICBwYXNzZW5nZXJUeXBlOiB0cmF2ZWxsZXIuaXNDaGlsZFxyXG4gICAgICAgICAgPyBQYXNzZW5nZXJUeXBlLkNoaWxkXHJcbiAgICAgICAgICA6IHRyYXZlbGxlci5pc0luZmFudFxyXG4gICAgICAgICAgPyBQYXNzZW5nZXJUeXBlLkluZmFudFxyXG4gICAgICAgICAgOiBQYXNzZW5nZXJUeXBlLkFkdWx0XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG1ha2VNb21lbnREYXlUaW1lKGFkZERheT86IG51bWJlciwgaGg/OiBudW1iZXIsIG0/OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGR0ID0gbW9tZW50KCk7XHJcblxyXG4gICAgaWYgKGFkZERheSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGR0LmFkZChhZGREYXksICdkYXknKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBkdC5zZXQoJ2hvdXJzJywgaGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZHQuc2V0KCdtaW51dGVzJywgbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGR0O1xyXG4gIH1cclxuXHJcbiAgc2FuYXRpemVSZXR1cm5zPFQ+KFxyXG4gICAgZGVmYXVsdHM6IFQsXHJcbiAgICBzdXBwbGllZERhdGE6IFBhcnRpYWw8VD4sXHJcbiAgICBtb21lbnRGaWVsZHM/OiAoa2V5b2YgVClbXVxyXG4gICk6IFQge1xyXG4gICAgY29uc3QgY29tYmluZWQ6IFQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgc3VwcGxpZWREYXRhKTtcclxuICAgIHJldHVybiAobW9tZW50RmllbGRzIHx8IFtdKS5yZWR1Y2UoKGN1cnJlbnQ6IFQsIG5leHQ6IGtleW9mIFQpID0+IHtcclxuICAgICAgY29uc3QgdmFsdWUgPSAoY3VycmVudCBhcyBhbnkpW25leHRdO1xyXG4gICAgICAoY3VycmVudCBhcyBhbnkpW25leHRdID0gIXZhbHVlXHJcbiAgICAgICAgPyBtb21lbnQoKVxyXG4gICAgICAgIDogdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gbW9tZW50KHZhbHVlKVxyXG4gICAgICAgIDogdmFsdWU7XHJcbiAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgfSwgY29tYmluZWQpO1xyXG4gIH1cclxuXHJcbiAgbWlJc1ZhbGlkKHRvQ2hlY2s6IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0b0NoZWNrLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgICAhIXRvQ2hlY2suZmluZCgobWlJdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWQpID0+IHtcclxuICAgICAgICByZXR1cm4gbWlJdGVtLmlzVmFsaWQoKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc01pVmFsaWQoXHJcbiAgICBtaVBlckl0ZW06IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdLFxyXG4gICAgbWlQZXJVc2VyOiB7XHJcbiAgICAgIFtrZXk6IHN0cmluZ106IHtcclxuICAgICAgICBtYW5hZ2VtZW50SW5mbzogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW107XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB1c2VyTWlzID0gT2JqZWN0LnZhbHVlcyhtaVBlclVzZXIgfHwge30pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5taUlzVmFsaWQobWlQZXJJdGVtKSAmJlxyXG4gICAgICAodXNlck1pcy5sZW5ndGggPT09IDAgfHxcclxuICAgICAgICAhIXVzZXJNaXMuZmluZChcclxuICAgICAgICAgICh1c2VyTWlzMTogeyBtYW5hZ2VtZW50SW5mbzogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10gfSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5taUlzVmFsaWQodXNlck1pczEubWFuYWdlbWVudEluZm8pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmVlZHNNaShiYXNrZXQ6IEJhc2tldERldGFpbHMsIG5lZWRzVG9WaWV3TWk6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGJhc2tldC5iYXNrZXRJbmZvTWlEZXRhaWxzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgKG5lZWRzVG9WaWV3TWkgfHxcclxuICAgICAgICAhYmFza2V0LmJhc2tldEluZm9NaURldGFpbHMuZmluZChcclxuICAgICAgICAgIChtaURldGFpbDogQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzTWlWYWxpZChtaURldGFpbC5taVBlckl0ZW0sIG1pRGV0YWlsLm1pUGVyVXNlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmaW5kU2VydmljZShzZXJ2aWNlczogVXNlclNlcnZpY2VzLCBpZDogc3RyaW5nKTogU2VydmljZSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhzZXJ2aWNlcykucmVkdWNlKFxyXG4gICAgICAoY3VycmVudDogU2VydmljZSwgc2VydmljZTE6IFNlcnZpY2VbXSk6IFNlcnZpY2UgPT4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBjdXJyZW50IHx8XHJcbiAgICAgICAgICBzZXJ2aWNlMS5maW5kKChzZXJ2aWNlMjogU2VydmljZSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VydmljZTIuaWQgPT09IGlkO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9LFxyXG4gICAgICBudWxsIGFzIFNlcnZpY2VcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhbGxUcnVlKFxyXG4gICAgc3VwcEluZm86IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZVtdLFxyXG4gICAgZmlsdGVyOiAoc3VwcEluZm86IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZSkgPT4gYm9vbGVhblxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHN1cHBJbmZvLmZpbHRlcihmaWx0ZXIpLmxlbmd0aCA9PT0gc3VwcEluZm8ubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgam9pbkZyb21BdHRyaWJ1dGU8VD4oXHJcbiAgICBqb2luQ2hhcmFjdGVyOiBzdHJpbmcsXHJcbiAgICBhdHRyaWJ1dGU6IGtleW9mIFQsXHJcbiAgICBhcnJheTogVFtdXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBhcnJheS5tYXAoKGl0ZW06IFQpID0+IGl0ZW1bYXR0cmlidXRlXSkuam9pbihqb2luQ2hhcmFjdGVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNwbGl0IHVwIGFuIGFycmF5IGludG8gZXF1YWwgcGFydHNcclxuICAgKiBAcGFyYW0gYXJyYXkgLSB0aGUgYXJyYXkgdG8gc3BsaXQgdXBcclxuICAgKiBAcGFyYW0gc2l6ZSAtIHRoZSBzaXplIG9mIHRoZSBjb25zdGl0dWFudCBwYXJ0c1xyXG4gICAqIEBwYXJhbSBpbmNsdWRlUmVtYWluZGVyIC0gd2V0aGVyIG9yIG5vdCB0byBpbmNsdWRlIGFueSByZW1haW5nIHJlc3VsdHMgLSBkZWZhdWx0IHRydWVcclxuICAgKi9cclxuICBzcGxpdFVwQXJyYXkoXHJcbiAgICBhcnJheTogYW55W10sXHJcbiAgICBzaXplOiBudW1iZXIsXHJcbiAgICBpbmNsdWRlUmVtYWluZGVyOiBib29sZWFuID0gdHJ1ZVxyXG4gICk6IGFueVtdIHtcclxuICAgIGNvbnN0IGFycmF5Q29weSA9IF8uY2xvbmVEZWVwKGFycmF5KTsgLy8gbG9kYXNoIGNsb25lIGRlZXBcclxuICAgIGxldCBuZXdBcnJheSA9IFtdO1xyXG5cclxuICAgIGlmIChhcnJheUNvcHkubGVuZ3RoID4gc2l6ZSkge1xyXG4gICAgICB3aGlsZSAoYXJyYXlDb3B5Lmxlbmd0aCA+PSBzaXplKSB7XHJcbiAgICAgICAgbmV3QXJyYXkucHVzaChhcnJheUNvcHkuc3BsaWNlKDAsIHNpemUpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gYWRkIGFueSByZW1haW5pbmdcclxuICAgICAgaWYgKGFycmF5Q29weS5sZW5ndGggJiYgaW5jbHVkZVJlbWFpbmRlcikge1xyXG4gICAgICAgIG5ld0FycmF5LnB1c2goYXJyYXlDb3B5KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3QXJyYXkgPSBhcnJheUNvcHk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ld0FycmF5O1xyXG4gIH1cclxuXHJcbiAgQE1lbW9yaXNlKClcclxuICBnZXRUaW1lRGlmZmVyZW5jZShkZXBEYXRlVGltZTogc3RyaW5nLCBhcnJEYXRlVGltZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBtb21lbnQoZGVwRGF0ZVRpbWUpLmRpZmYobW9tZW50KGFyckRhdGVUaW1lKSwgJ21pbnV0ZXMnKTtcclxuICB9XHJcblxyXG4gIEBNZW1vcmlzZSgpXHJcbiAgZGF5RGlmZmVyZW5jZShkZXB0OiBzdHJpbmcsIGFycjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRpZmYgPSBtb21lbnQoYXJyKVxyXG4gICAgICAuc3RhcnRPZignZGF5JylcclxuICAgICAgLmRpZmYobW9tZW50KGRlcHQpLnN0YXJ0T2YoJ2RheScpLCAnZGF5Jyk7XHJcbiAgICByZXR1cm4gZGlmZiA+IDAgPyBkaWZmLnRvU3RyaW5nKCkgOiAnJztcclxuICB9XHJcblxyXG4gIEBNZW1vcmlzZSgpXHJcbiAgbWFrZUZhcmVSdWxlcyhmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeSwgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtKSB7XHJcbiAgICBjb25zdCBmbGlnaHRzID1cclxuICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXHJcbiAgICAgICAgPyBmbGlnaHQub3V0Ym91bmRGbGlnaHRzXHJcbiAgICAgICAgOiBmbGlnaHQuaW5ib3VuZEZsaWdodHM7XHJcbiAgICBjb25zdCBydWxlcyA9IGZsaWdodHMucmVkdWNlKFxyXG4gICAgICAoY3VycmVudDogRmFyZUNvbmRpdGlvbnMsIG5leHQ6IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICBjdXJyZW50LmNhbmNlbGxhdGlvbiA9IGN1cnJlbnQuY2FuY2VsbGF0aW9uLmNvbmNhdChcclxuICAgICAgICAgIG5leHQuZmFyZUNvbmRpdGlvbnM/LmNhbmNlbGxhdGlvbiB8fCBbXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3VycmVudC5jaGFuZ2UgPSBjdXJyZW50LmNoYW5nZS5jb25jYXQoXHJcbiAgICAgICAgICBuZXh0LmZhcmVDb25kaXRpb25zPy5jaGFuZ2UgfHwgW11cclxuICAgICAgICApO1xyXG4gICAgICAgIGN1cnJlbnQubm9TaG93ID0gY3VycmVudC5ub1Nob3cuY29uY2F0KFxyXG4gICAgICAgICAgbmV4dC5mYXJlQ29uZGl0aW9ucz8ubm9TaG93IHx8IFtdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjdXJyZW50LnVwZ3JhZGUgPSBjdXJyZW50LnVwZ3JhZGUuY29uY2F0KFxyXG4gICAgICAgICAgbmV4dC5mYXJlQ29uZGl0aW9ucz8udXBncmFkZSB8fCBbXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3VycmVudC5vdGhlciA9IGN1cnJlbnQub3RoZXIuY29uY2F0KG5leHQuZmFyZUNvbmRpdGlvbnM/Lm90aGVyIHx8IFtdKTtcclxuICAgICAgICByZXR1cm4gY3VycmVudDtcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGNhbmNlbGxhdGlvbjogW10sXHJcbiAgICAgICAgY2hhbmdlOiBbXSxcclxuICAgICAgICBub1Nob3c6IFtdLFxyXG4gICAgICAgIHVwZ3JhZGU6IFtdLFxyXG4gICAgICAgIG90aGVyOiBbXVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHsgcnVsZXMsIGZsaWdodHMgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjIC0gZ2VuZXJhdGVzIGljcyBmaWxlIGNvbnRlbnRcclxuICAgKi9cclxuICBnZW5lcmF0ZUljc0ZpbGVDb250ZW50cyhiYXNrZXRJdGVtczogQmFza2V0SXRlbVtdKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGljc0JvZHlDb250ZW50ID0gdGhpcy5nZW5lcmF0ZUljc0ZpbGVCb2R5Q29udGVudChiYXNrZXRJdGVtcyk7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAnQkVHSU46VkNBTEVOREFSXFxyXFxuJyxcclxuICAgICAgJ1BST0RJRDotLy9NaWNyb3MgVHJhdmVsLy9TQUJTIENvcnBvcmF0ZSAtIE1NWElJSS8vRU5cXHJcXG4nLFxyXG4gICAgICAnVkVSU0lPTjoyLjBcXHJcXG4nLFxyXG4gICAgICAnTUVUSE9EOlJFUVVFU1RcXHJcXG4nLFxyXG4gICAgICBpY3NCb2R5Q29udGVudCxcclxuICAgICAgJ0VORDpWQ0FMRU5EQVJcXHJcXG4nXHJcbiAgICBdLmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2MgLSBnZW5lcmF0ZXMgaWNzIGZpbGUgYm9keSBjb250ZW50IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBiYXNrZXRJdGVtcyBwYXJhbVxyXG4gICAqL1xyXG4gIGdlbmVyYXRlSWNzRmlsZUJvZHlDb250ZW50KGJhc2tldEl0ZW1zOiBCYXNrZXRJdGVtW10pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYm9keUNvbnRlbnQ6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgLy8gZ2VuZXJhdGUgY2FsZW5kYXIgZGF0YSBmb3IgZWFjaCBiYXNrZXQgaXRlbVxyXG4gICAgYmFza2V0SXRlbXMubWFwKChiYXNrZXRJdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgIGRTdGFydDogJycsXHJcbiAgICAgICAgZEVuZDogJycsXHJcbiAgICAgICAgbG9jYXRpb25Gcm9tOiAnJyxcclxuICAgICAgICBsb2NhdGlvblRvOiAnJyxcclxuICAgICAgICBiYXNrZXRJZDogJycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiAnJyxcclxuICAgICAgICBzdW1tYXJ5OiAnJ1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBkYXRlRm9ybWF0ID0gJ0REIE1NTU0gWVlZWSBISDptbSc7XHJcbiAgICAgIGNvbnN0IHsgdHlwZSB9ID0gYmFza2V0SXRlbS5zZXJ2aWNlO1xyXG4gICAgICBjb25zdCB7IGFkdWx0cywgY2hpbGRyZW4sIGJvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlLCBkZXRhaWwsIHNlcnZpY2UgfSA9XHJcbiAgICAgICAgYmFza2V0SXRlbTtcclxuICAgICAgLy8gcG9wdWxhdGUgZGF0YSBvYmplY3QgZGVwZW5kaW5nIG9uIHRoZSBzZXJ2aWNlIHR5cGUgaW4gdGhlIGJhc2tldFxyXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/LmFycml2YWxEYXRldGltZTtcclxuICAgICAgICAgIGRhdGEuZEVuZCA9ICcnO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYEFpcnBvcnQgTG91bmdlIC0gJHtkZXRhaWwubmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYExvdW5nZTogJHtkZXRhaWwubmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgU3RhcnRzOiAke21vbWVudChkZXRhaWwuYXJyaXZhbERhdGV0aW1lKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEFkdWx0czogJHthZHVsdHN9XFxyXFxuYCxcclxuICAgICAgICAgICAgYENoaWxkcmVuOiAke2NoaWxkcmVufVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXHJcbiAgICAgICAgICBdLmpvaW4oJycpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5kZXBhcnRzO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gJyc7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgVGF4aSBib29raW5nIC0gZnJvbSAke2RldGFpbC5mcm9tTG9jYXRpb24uYWRkcmVzc30gdG8gJHtkZXRhaWwudG9Mb2NhdGlvbi5hZGRyZXNzfWA7XHJcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xyXG4gICAgICAgICAgICBgUGlja3VwIFBvaW50OiAke2RldGFpbC5mcm9tTG9jYXRpb24uYWRkcmVzc31cXHJcXG5gLFxyXG4gICAgICAgICAgICBgVGltZTogJHttb21lbnQoZGV0YWlsLmRlcGFydHMpLmZvcm1hdChkYXRlRm9ybWF0KX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FyOlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8ucGlja1VwRGF0ZXRpbWU7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/LmRyb3BPZmZEYXRldGltZTtcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBDYXIgYm9va2luZyAtIGZyb20gJHtkZXRhaWwucGlja1VwTG9jYXRpb24uYWRkcmVzc30gdG8gJHtkZXRhaWwuZHJvcE9mZkxvY2F0aW9uLmFkZHJlc3N9YDtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBQaWNrdXAgUG9pbnQ6ICR7ZGV0YWlsLnBpY2tVcExvY2F0aW9uLmFkZHJlc3N9XFxyXFxuYCxcclxuICAgICAgICAgICAgYFRpbWU6ICR7bW9tZW50KGRldGFpbC5waWNrVXBEYXRldGltZSkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBcnJpdmFsIFBvaW50OiAke2RldGFpbC5kcm9wT2ZmTG9jYXRpb24uYWRkcmVzc31cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIChkYXRhLmxvY2F0aW9uRnJvbSA9IGRldGFpbC5waWNrVXBMb2NhdGlvbi5hZGRyZXNzKSxcclxuICAgICAgICAgICAgKGRhdGEubG9jYXRpb25UbyA9IGRldGFpbC5kcm9wT2ZmTG9jYXRpb24uYWRkcmVzcyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkNvYWNoOlxyXG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSB0aGlzIGNhc2VcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkZhc3RUcmFjazpcclxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgdGhpcyBjYXNlXHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5GbGlnaHQ6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmc7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZUFycml2aW5nO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYEZsaWdodCBCb29raW5nIC0gRnJvbSAke2RldGFpbC5vdXRib3VuZEZsaWdodHNbMF0ub3JpZ2luQWlycG9ydH0gdG8gJHtkZXRhaWwub3V0Ym91bmRGbGlnaHRzWzBdLmRlc3RpbmF0aW9uQWlycG9ydH1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEZyb206ICR7ZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0fVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBEZXBhcnQ6ICR7bW9tZW50KFxyXG4gICAgICAgICAgICAgIGRldGFpbC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdcclxuICAgICAgICAgICAgKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYFRvOiAke2RldGFpbC5vdXRib3VuZEZsaWdodHNbMF0uZGVzdGluYXRpb25BaXJwb3J0fVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBcnJpdmU6ICR7bW9tZW50KFxyXG4gICAgICAgICAgICAgIGRldGFpbC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVBcnJpdmluZ1xyXG4gICAgICAgICAgICApLmZvcm1hdChkYXRlRm9ybWF0KX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5jaGVja0luO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gZGV0YWlsPy5jaGVja091dDtcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBIb3RlbCBib29raW5nIC0gICR7ZGV0YWlsLmhvdGVsTmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEhvdGVsOiAke2RldGFpbC5ob3RlbE5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEFycml2YWw6ICR7bW9tZW50KGRldGFpbC5jaGVja0luKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYERlcGFydHVyZTogJHttb21lbnQoZGV0YWlsLmNoZWNrT3V0KS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsOlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8ub3V0d2FyZERldGFpbC5kZXBhcnR1cmVEYXRlVGltZTtcclxuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8ub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWU7XHJcbiAgICAgICAgICBkYXRhLmxvY2F0aW9uRnJvbSA9IGRldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lO1xyXG4gICAgICAgICAgZGF0YS5sb2NhdGlvblRvID0gZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYFRyYWluIEJvb2tpbmcgLSBGcm9tICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWV9IHRvICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbFN0YXRpb25OYW1lfWA7XHJcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xyXG4gICAgICAgICAgICBgRnJvbSAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBUbyAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxTdGF0aW9uTmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgRGVwYXJ0dXJlICR7bW9tZW50KGRldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZURhdGVUaW1lKS5mb3JtYXQoXHJcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdFxyXG4gICAgICAgICAgICApfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBcnJpdmFsICR7bW9tZW50KGRldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxEYXRlVGltZSkuZm9ybWF0KFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXRcclxuICAgICAgICAgICAgKX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuUGFya2luZzpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/LmFycml2YWxEYXRldGltZTtcclxuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8uZGVwYXJ0RGF0ZXRpbWU7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgQWlycG9ydCBwYXJraW5nIC0gJHtkZXRhaWwubmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEFpcnBvcnQgUGFya2luZzogJHtkZXRhaWwubmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/Lm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/Lm91dHdhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lO1xyXG4gICAgICAgICAgZGF0YS5sb2NhdGlvbkZyb20gPSBkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZTtcclxuICAgICAgICAgIGRhdGEubG9jYXRpb25UbyA9IGRldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxEYXRlVGltZTtcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBUcmFpbiBCb29raW5nIC0gRnJvbSAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lfSB0byAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxTdGF0aW9uTmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEZyb20gJHtkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgVG8gJHtkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsU3RhdGlvbk5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYERlcGFydHVyZSAke21vbWVudChkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVEYXRlVGltZSkuZm9ybWF0KFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXRcclxuICAgICAgICAgICAgKX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQXJyaXZhbCAke21vbWVudChkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWUpLmZvcm1hdChcclxuICAgICAgICAgICAgICBkYXRlRm9ybWF0XHJcbiAgICAgICAgICAgICl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgYm9keUNvbnRlbnQucHVzaChcclxuICAgICAgICBbXHJcbiAgICAgICAgICAnQkVHSU46VkVWRU5UXFxyXFxuJyxcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0XHJcbiAgICAgICAgICAgID8gYERUU1RBUlQ6JHttb21lbnQoZGF0YS5kU3RhcnQpLmZvcm1hdCgnWVlZWU1NRERUSEhtbXNzJyl9XFxyXFxuYFxyXG4gICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgZGF0YS5kRW5kXHJcbiAgICAgICAgICAgID8gYERURU5EOiR7bW9tZW50KGRhdGEuZEVuZCkuZm9ybWF0KCdZWVlZTU1ERFRISG1tc3MnKX1cXHJcXG5gXHJcbiAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAnT1JHQU5JWkVSO0NOPVwiRG8gbm90IHJlcGx5IHRvIHRoaXMgZW1haWxcIjptYWlsdG86ZG9fbm90X3JlcGx5QHNhYnNjb3JwLmNvbVxcclxcbicsXHJcbiAgICAgICAgICBkYXRhLmxvY2F0aW9uVG8gJiYgZGF0YS5sb2NhdGlvbkZyb21cclxuICAgICAgICAgICAgPyBgTE9DQVRJT046ICR7ZGF0YS5sb2NhdGlvblRvfSB0byAke2RhdGEubG9jYXRpb25Gcm9tfSBcXHJcXG5gXHJcbiAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAnVFJBTlNQOk9QQVFVRVxcclxcbicsXHJcbiAgICAgICAgICAnU0VRVUVOQ0U6MFxcclxcbicsXHJcbiAgICAgICAgICBgVUlEOiR7ZGF0YS5zZXJ2aWNlVHlwZX1fJHtpbmRleH1fJHtkYXRhLmJhc2tldElkfUBzYWJzY29ycC5jb21cXHJcXG5gLFxyXG4gICAgICAgICAgYERUU1RBTVA6JHttb21lbnQoKS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpfVxcclxcbmAsXHJcbiAgICAgICAgICBgREVTQ1JJUFRJT046JHtkYXRhLmRlc2NyaXB0aW9ufVxcclxcbmAsXHJcbiAgICAgICAgICBgU1VNTUFSWToke2RhdGEuc3VtbWFyeX1cXHJcXG5gLFxyXG4gICAgICAgICAgJ0VORDpWRVZFTlRcXHJcXG4nXHJcbiAgICAgICAgXS5qb2luKCcnKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGJvZHlDb250ZW50LmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2MgLSBjcmVhdGVzIGFuIGVsZW1lbnQgaW4gbWVtb3J5IGFuZCB0cmlnZ2VycyBjbGljayBldmVudCB0byBkb3dubG9hZCBpY3MgZmlsZVxyXG4gICAqL1xyXG4gIGRvd25sb2FkSWNzKGZpbGVuYW1lOiBzdHJpbmcsIHRleHQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFxyXG4gICAgICAnaHJlZicsXHJcbiAgICAgICdkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtOCwnICsgZW5jb2RlVVJJQ29tcG9uZW50KHRleHQpXHJcbiAgICApO1xyXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZW5hbWUpO1xyXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTtcclxuICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIGVsZW1lbnQuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNwbGl0IGEgc3RyaW5nIG9uIGNhcGl0YWxzXHJcbiAgICogQHBhcmFtIHJhd1N0cmluZyAtIHRoZSBzdHJpbmcgd2Ugd2FudCB0byBzcGxpdFxyXG4gICAqIEBwYXJhbSBqb2luIC0gd2hldGhlciBvciBub3QgdG8gam9pbmcgdGhlIHNwbGl0IGludG8gb25lIHN0cmluZywgc2VwZXJhdGVkIGJ5IGEgc3BhY2VcclxuICAgKiBAcmV0dXJucyBzdHJpbmcvc3RyaW5nW11cclxuICAgKi9cclxuICBzcGxpdFN0cmluZ09uQ2FwaXRhbHMoXHJcbiAgICByYXdTdHJpbmc6IHN0cmluZyxcclxuICAgIGpvaW46IGJvb2xlYW4gPSBmYWxzZVxyXG4gICk6IHN0cmluZyB8IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IHNwbGl0U3RyaW5nID0gcmF3U3RyaW5nLnNwbGl0KC8oPz1bQS1aXSkvKTtcclxuXHJcbiAgICBpZiAoam9pbikge1xyXG4gICAgICByZXR1cm4gc3BsaXRTdHJpbmcuam9pbignICcpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzcGxpdFN0cmluZztcclxuICB9XHJcblxyXG4gIGNyZWF0ZUZsaWdodEZpbHRlcnMoXHJcbiAgICBqb3VybmV5czogRmxpZ2h0SXRpbmVyYXJ5W10sXHJcbiAgICBkZWZhdWx0RmlsdGVyczogRmxpZ2h0RmlsdGVyc1xyXG4gICk6IEZsaWdodEZpbHRlcnMge1xyXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcclxuICAgICAgKGZpbHRlcnM6IEZsaWdodEZpbHRlcnMsIHJlc3VsdDE6IEZsaWdodEl0aW5lcmFyeSk6IEZsaWdodEZpbHRlcnMgPT4ge1xyXG4gICAgICAgIGNvbnN0IG91dFN0b3BzID0gcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMTtcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzW291dFN0b3BzXSA9IGZpbHRlcnMuc3RvcHNbb3V0U3RvcHNdIHx8IHtcclxuICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgIG91dFN0b3BzID09PSAwXHJcbiAgICAgICAgICAgICAgPyAnRGlyZWN0J1xyXG4gICAgICAgICAgICAgIDogYCR7b3V0U3RvcHN9IHN0b3BgICsgKG91dFN0b3BzICE9PSAxID8gJ3MnIDogJycpLFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgdmFsdWU6IG91dFN0b3BzICsgMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGluU3RvcHMgPSByZXN1bHQxLmluYm91bmRGbGlnaHRzXHJcbiAgICAgICAgICA/IHJlc3VsdDEuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgOiAwO1xyXG4gICAgICAgIGNvbnN0IHRvdGFsU3RvcHMgPSBpblN0b3BzID4gb3V0U3RvcHMgPyBpblN0b3BzIDogb3V0U3RvcHM7XHJcbiAgICAgICAgZmlsdGVycy50b3RhbFN0b3BzW3RvdGFsU3RvcHNdID0gZmlsdGVycy50b3RhbFN0b3BzW3RvdGFsU3RvcHNdIHx8IHtcclxuICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgIHRvdGFsU3RvcHMgPT09IDBcclxuICAgICAgICAgICAgICA/ICdEaXJlY3QnXHJcbiAgICAgICAgICAgICAgOiBgJHt0b3RhbFN0b3BzfSBzdG9wYCArICh0b3RhbFN0b3BzICE9PSAxID8gJ3MnIDogJycpLFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgdmFsdWU6IHRvdGFsU3RvcHMgKyAxXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgdXBkYXRlRmxpZ2h0SXRlbXMgPSAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5KTogdm9pZCA9PiB7XHJcbiAgICAgICAgICBmaWx0ZXJzLmNsYXNzZXNbZmxpZ2h0LmNhYmluQ2xhc3NdID0gZmlsdGVycy5jbGFzc2VzW1xyXG4gICAgICAgICAgICBmbGlnaHQuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgXSB8fCB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsaWdodC5jYWJpbkNsYXNzLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmbGlnaHQuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGZpbHRlcnMuYWlybGluZXNbZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJdID0gZmlsdGVycy5haXJsaW5lc1tcclxuICAgICAgICAgICAgZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJcclxuICAgICAgICAgIF0gfHwge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGlnaHQubWFya2V0aW5nQ2Fycmllck5hbWUsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsdWU6IGZsaWdodC5tYXJrZXRpbmdDYXJyaWVyXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMuZm9yRWFjaCh1cGRhdGVGbGlnaHRJdGVtcyk7XHJcbiAgICAgICAgY29uc3QgYmFnZ2FnZUFycmF5OiBudW1iZXJbXSA9IHJlc3VsdDEuYmFnZ2FnZUFsbG93YW5jZS5tYXAoXHJcbiAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGhcclxuICAgICAgICAgID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KVxyXG4gICAgICAgICAgOiAwO1xyXG4gICAgICAgIGZpbHRlcnMuYmFnZ2FnZVtiYWdnYWdlXSA9IGZpbHRlcnMuYmFnZ2FnZVtiYWdnYWdlXSB8fCB7XHJcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICBkaXNwbGF5OiBgJHtiYWdnYWdlfSBiYWcke2JhZ2dhZ2UgPiAxID8gJ3MnIDogJyd9YCxcclxuICAgICAgICAgIHZhbHVlOiBiYWdnYWdlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBpbmRleGVkRmxpZ2h0ID0gKFxyXG4gICAgICAgICAgZmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgICAgICAgZmlsdGVyQXR0cmlidXRlOiBGbGlnaHRGaWx0ZXJzUmVjb3JkS2V5cyxcclxuICAgICAgICAgIGZsaWdodEF0dHJpYnV0ZToga2V5b2YgRmxpZ2h0Sm91cm5leSxcclxuICAgICAgICAgIGZsaWdodEF0dHJpYnV0ZU5hbWU6IGtleW9mIEZsaWdodEpvdXJuZXksXHJcbiAgICAgICAgICBpbmRleDogbnVtYmVyXHJcbiAgICAgICAgKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0ZW1wOiBzdHJpbmcgPVxyXG4gICAgICAgICAgICBmbGlnaHRzICYmIGZsaWdodHNbaW5kZXhdXHJcbiAgICAgICAgICAgICAgPyBmbGlnaHRzW2luZGV4XVtmbGlnaHRBdHRyaWJ1dGVdXHJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBpZiAodGVtcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcnNbZmlsdGVyQXR0cmlidXRlXVt0ZW1wXSA9IGZpbHRlcnNbZmlsdGVyQXR0cmlidXRlXVt0ZW1wXSB8fCB7XHJcbiAgICAgICAgICAgICAgdmFsdWU6IGZsaWdodHNbaW5kZXhdW2ZsaWdodEF0dHJpYnV0ZV0sXHJcbiAgICAgICAgICAgICAgZGlzcGxheTogZmxpZ2h0c1tpbmRleF1bZmxpZ2h0QXR0cmlidXRlTmFtZV0sXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpbmRleGVkRmxpZ2h0KFxyXG4gICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAnZGVwYXR1cmVBaXJwb3J0JyxcclxuICAgICAgICAgICdvcmlnaW5BaXJwb3J0JyxcclxuICAgICAgICAgICdvcmlnaW5BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpbmRleGVkRmxpZ2h0KFxyXG4gICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAnYXJyaXZhbEFpcnBvcnQnLFxyXG4gICAgICAgICAgJ2Rlc3RpbmF0aW9uQWlycG9ydCcsXHJcbiAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgZmlsdGVycy5wcmljZS5taW4gPVxyXG4gICAgICAgICAgZmlsdGVycy5wcmljZS5taW4gPCByZXN1bHQxLnRvdGFsLnByaWNlXHJcbiAgICAgICAgICAgID8gZmlsdGVycy5wcmljZS5taW5cclxuICAgICAgICAgICAgOiByZXN1bHQxLnRvdGFsLnByaWNlO1xyXG5cclxuICAgICAgICBmaWx0ZXJzLnByaWNlLm1heCA9XHJcbiAgICAgICAgICBmaWx0ZXJzLnByaWNlLm1heCA+IHJlc3VsdDEudG90YWwucHJpY2VcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLnByaWNlLm1heFxyXG4gICAgICAgICAgICA6IHJlc3VsdDEudG90YWwucHJpY2U7XHJcblxyXG4gICAgICAgIGZpbHRlcnMuZHVyYXRpb24ubWluID1cclxuICAgICAgICAgIGZpbHRlcnMuZHVyYXRpb24ubWluIDwgcmVzdWx0MS5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmR1cmF0aW9uLm1pblxyXG4gICAgICAgICAgICA6IHJlc3VsdDEub3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG5cclxuICAgICAgICBmaWx0ZXJzLmR1cmF0aW9uLm1heCA9XHJcbiAgICAgICAgICBmaWx0ZXJzLmR1cmF0aW9uLm1heCA+IHJlc3VsdDEub3V0Ym91bmRUb3RhbER1cmF0aW9uXHJcbiAgICAgICAgICAgID8gZmlsdGVycy5kdXJhdGlvbi5tYXhcclxuICAgICAgICAgICAgOiByZXN1bHQxLm91dGJvdW5kVG90YWxEdXJhdGlvbjtcclxuXHJcbiAgICAgICAgY29uc3QgZGVwYXJ0VGltZSA9IG1vbWVudChcclxuICAgICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuXHJcbiAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1pbiA9XHJcbiAgICAgICAgICBmaWx0ZXJzLmRlcGFydHVyZVRpbWUubWluIDwgZGVwYXJ0VGltZVxyXG4gICAgICAgICAgICA/IGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5taW5cclxuICAgICAgICAgICAgOiBkZXBhcnRUaW1lO1xyXG4gICAgICAgIGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5tYXggPVxyXG4gICAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1heCA+IGRlcGFydFRpbWVcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmRlcGFydHVyZVRpbWUubWF4XHJcbiAgICAgICAgICAgIDogZGVwYXJ0VGltZTtcclxuXHJcbiAgICAgICAgY29uc3QgYXJyaXZhbFRpbWUgPSBtb21lbnQoXHJcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0c1tyZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAuZGF0ZVRpbWVBcnJpdmluZ1xyXG4gICAgICAgICkuZ2V0KCdob3VyJyk7XHJcblxyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWluID1cclxuICAgICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWluIDwgYXJyaXZhbFRpbWVcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmFycml2YWxUaW1lLm1pblxyXG4gICAgICAgICAgICA6IGFycml2YWxUaW1lO1xyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWF4ID1cclxuICAgICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWF4ID4gYXJyaXZhbFRpbWVcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmFycml2YWxUaW1lLm1heFxyXG4gICAgICAgICAgICA6IGFycml2YWxUaW1lO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyAmJiByZXN1bHQxLmluYm91bmRGbGlnaHRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWluID1cclxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5EdXJhdGlvbi5taW4gPCByZXN1bHQxLmluYm91bmRUb3RhbER1cmF0aW9uXHJcbiAgICAgICAgICAgICAgPyBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1pblxyXG4gICAgICAgICAgICAgIDogcmVzdWx0MS5pbmJvdW5kVG90YWxEdXJhdGlvbjtcclxuXHJcbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1heCA9XHJcbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWF4ID4gcmVzdWx0MS5pbmJvdW5kVG90YWxEdXJhdGlvblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5EdXJhdGlvbi5tYXhcclxuICAgICAgICAgICAgICA6IHJlc3VsdDEuaW5ib3VuZFRvdGFsRHVyYXRpb247XHJcblxyXG4gICAgICAgICAgY29uc3QgZGVwYXJ0VGltZVJldHVybiA9XHJcbiAgICAgICAgICAgIHJlc3VsdDEgJiYgcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyAmJiByZXN1bHQxLmluYm91bmRGbGlnaHRzWzBdXHJcbiAgICAgICAgICAgICAgPyBtb21lbnQocmVzdWx0MS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykuZ2V0KCdob3VyJylcclxuICAgICAgICAgICAgICA6IC0xO1xyXG5cclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5taW4gPVxyXG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWluIDwgZGVwYXJ0VGltZVJldHVyblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1pblxyXG4gICAgICAgICAgICAgIDogZGVwYXJ0VGltZVJldHVybjtcclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5tYXggPVxyXG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWF4ID4gZGVwYXJ0VGltZVJldHVyblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1heFxyXG4gICAgICAgICAgICAgIDogZGVwYXJ0VGltZVJldHVybjtcclxuXHJcbiAgICAgICAgICBjb25zdCBhcnJpdmFsVGltZVJldHVybiA9IG1vbWVudChcclxuICAgICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHNbcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgICAuZGF0ZVRpbWVBcnJpdmluZ1xyXG4gICAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuXHJcbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLm1pbiA9XHJcbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWluIDwgYXJyaXZhbFRpbWVSZXR1cm5cclxuICAgICAgICAgICAgICA/IGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWluXHJcbiAgICAgICAgICAgICAgOiBhcnJpdmFsVGltZVJldHVybjtcclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWF4ID1cclxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5tYXggPiBhcnJpdmFsVGltZVJldHVyblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5tYXhcclxuICAgICAgICAgICAgICA6IGFycml2YWxUaW1lUmV0dXJuO1xyXG5cclxuICAgICAgICAgIChyZXN1bHQxLmluYm91bmRGbGlnaHRzIHx8IFtdKS5mb3JFYWNoKHVwZGF0ZUZsaWdodEl0ZW1zKTtcclxuICAgICAgICAgIGluZGV4ZWRGbGlnaHQoXHJcbiAgICAgICAgICAgIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICdkZXBhdHVyZVJldHVybkFpcnBvcnQnLFxyXG4gICAgICAgICAgICAnb3JpZ2luQWlycG9ydCcsXHJcbiAgICAgICAgICAgICdvcmlnaW5BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICAgIDBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpbmRleGVkRmxpZ2h0KFxyXG4gICAgICAgICAgICByZXN1bHQxLmluYm91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAnYXJyaXZhbFJldHVybkFpcnBvcnQnLFxyXG4gICAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0JyxcclxuICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uQWlycG9ydE5hbWUnLFxyXG4gICAgICAgICAgICByZXN1bHQxLmluYm91bmRGbGlnaHRzLmxlbmd0aCAtIDFcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaWx0ZXJzO1xyXG4gICAgICB9LFxyXG4gICAgICB0aGlzLmNsb25lKGRlZmF1bHRGaWx0ZXJzKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG1hcE92ZXJPYmplY3Q8Vj4oXHJcbiAgICBpdGVtczogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgVj4sXHJcbiAgICBjYWxsYmFjazogKHZhbHVlOiBWLCBrZXk/OiBzdHJpbmcgfCBudW1iZXIpID0+IFZcclxuICApOiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBWPiB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaXRlbXMpLnJlZHVjZShcclxuICAgICAgKGFjY3VtOiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBWPiwgZW50cmllczogW3N0cmluZyB8IG51bWJlciwgVl0pID0+IHtcclxuICAgICAgICBhY2N1bVtlbnRyaWVzWzBdXSA9IGNhbGxiYWNrKGVudHJpZXNbMV0sIGVudHJpZXNbMF0pO1xyXG4gICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgfSxcclxuICAgICAge30gYXMgUmVjb3JkPHN0cmluZyB8IG51bWJlciwgVj5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBub3JtYWxpc2VNaW51dGVUb0Jhc2UxMChtaW46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZCgobWluICogMTAwKSAvIDYwKTtcclxuICB9XHJcblxyXG4gIE9CVEZsaWdodENhYmluQ2xhc3NUb0ZsaWdodENhYmluQ2xhc3MoXHJcbiAgICB2YWx1ZTogT0JURmxpZ2h0Q2FiaW5DbGFzc1xyXG4gICk6IE1haW5GbGlnaHRDYWJpbkNsYXNzIHtcclxuICAgIGNvbnN0IE9CVEZsaWdodENhYmluQ2xhc3NUb0ZsaWdodENhYmluQ2xhc3M6IFJlY29yZDxcclxuICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcyxcclxuICAgICAgTWFpbkZsaWdodENhYmluQ2xhc3NcclxuICAgID4gPSB7XHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzXTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NCcmFuZGVkXTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpXTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGksXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aUJyYW5kZWRdOiBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aSxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc106IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFncyxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc0JyYW5kZWRdOlxyXG4gICAgICAgIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFncyxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRdOlxyXG4gICAgICAgIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZF06XHJcbiAgICAgICAgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RdOiBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0LFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdEJyYW5kZWRdOiBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0LFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teV06IEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXksXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215QnJhbmRlZF06XHJcbiAgICAgICAgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teVxyXG4gICAgfTtcclxuICAgIHJldHVybiBPQlRGbGlnaHRDYWJpbkNsYXNzVG9GbGlnaHRDYWJpbkNsYXNzW3ZhbHVlXTtcclxuICB9XHJcbiAgRmxpZ2h0Q2FiaW5DbGFzc1RvQnJhbmRlZE9CVEZsaWdodENhYmluQ2xhc3MoXHJcbiAgICB2YWx1ZTogRmxpZ2h0R3JvdXBzLFxyXG4gICAgaXNCcmFuZGVkOiBib29sZWFuXHJcbiAgKTogT0JURmxpZ2h0Q2FiaW5DbGFzcyB7XHJcbiAgICBjb25zdCB0eXBlczogUmVjb3JkPEZsaWdodEdyb3VwcywgT0JURmxpZ2h0Q2FiaW5DbGFzcz4gPSBpc0JyYW5kZWRcclxuICAgICAgPyB7XHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teV06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXlCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUJ1c2luZXNzXTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc0JyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5MaXRlRWNvbm9teV06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teV06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUZpcnN0XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdEJyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZF06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215QnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aV06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NdOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdEJyYW5kZWRcclxuICAgICAgICB9XHJcbiAgICAgIDoge1xyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215LFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUJ1c2luZXNzXTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkxpdGVFY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUZpcnN0XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkXTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teSxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aV06IE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc106IE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFncyxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzXTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdFxyXG4gICAgICAgIH07XHJcbiAgICByZXR1cm4gdHlwZXNbdmFsdWVdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gY29udmVydCBmcm9tIG1ldHJlcyB0byBtaWxlc1xyXG4gICAqIEBwYXJhbSBtZXRyZXMgLSB0aGUgYW1vdW50IG9mIG1ldHJlcyB0byBjb252ZXJ0XHJcbiAgICogQHBhcmFtIGRlY2ltYWxQbGFjZXMgLSB0aGUgYW1vdW50IG9mIGQucCB0byBjb252ZXJ0IHRvLCBpZiBuZWdhdGl2ZSAoZGVmYXVsdCkgZG9lcyBub3QgcmVzdHJpY3QgdGhlIGRlY2ltYWwgcGxhY2VzXHJcbiAgICovXHJcbiAgY29udmVydE1ldHJlc1RvTWlsZXMobWV0cmVzOiBudW1iZXIsIGRlY2ltYWxQbGFjZXM6IG51bWJlciA9IC0xKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IG1pbGVzID0gbWV0cmVzIC8gTUVUUkVTX1RPX01JTEVTX0NPTlZFUlNJT047XHJcblxyXG4gICAgaWYgKGRlY2ltYWxQbGFjZXMgPj0gMCkge1xyXG4gICAgICByZXR1cm4gTnVtYmVyKG1pbGVzLnRvRml4ZWQoZGVjaW1hbFBsYWNlcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtaWxlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGNvbnZlcnQgc2Vjb25kcyB0byBob3Vyc1xyXG4gICAqIEBwYXJhbSBzZWNvbmRzIC0gdG8gY29udmVydFxyXG4gICAqIEBwYXJhbSBkZWNpbWFsUGxhY2VzIC0gdGhlIGFtb3VudCBvZiBkLnAgdG8gY29udmVydCB0bywgaWYgbmVnYXRpdmUgKGRlZmF1bHQpIGRvZXMgbm90IHJlc3RyaWN0IHRoZSBkZWNpbWFsIHBsYWNlc1xyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgY29udmVydFNlY29uZHNUb0hvdXJzKHNlY29uZHM6IG51bWJlciwgZGVjaW1hbFBsYWNlczogbnVtYmVyID0gLTEpOiBudW1iZXIge1xyXG4gICAgY29uc3QgaG91cnMgPSBzZWNvbmRzIC8gVElNRV9CQVNFIC8gVElNRV9CQVNFO1xyXG5cclxuICAgIGlmIChkZWNpbWFsUGxhY2VzID49IDApIHtcclxuICAgICAgcmV0dXJuIE51bWJlcihob3Vycy50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaG91cnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBjb252ZXJ0IHNlY29uZHMgdG8gbWluc1xyXG4gICAqIEBwYXJhbSBzZWNvbmRzIC0gdG8gY29udmVydFxyXG4gICAqIEBwYXJhbSBkZWNpbWFsUGxhY2VzIC0gdGhlIGFtb3VudCBvZiBkLnAgdG8gY29udmVydCB0bywgaWYgbmVnYXRpdmUgKGRlZmF1bHQpIGRvZXMgbm90IHJlc3RyaWN0IHRoZSBkZWNpbWFsIHBsYWNlc1xyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgY29udmVydFNlY29uZHNUb01pbnMoc2Vjb25kczogbnVtYmVyLCBkZWNpbWFsUGxhY2VzOiBudW1iZXIgPSAtMSk6IG51bWJlciB7XHJcbiAgICBjb25zdCBob3VycyA9IHNlY29uZHMgLyBUSU1FX0JBU0U7XHJcblxyXG4gICAgaWYgKGRlY2ltYWxQbGFjZXMgPj0gMCkge1xyXG4gICAgICByZXR1cm4gTnVtYmVyKGhvdXJzLnRvRml4ZWQoZGVjaW1hbFBsYWNlcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBob3VycztcclxuICB9XHJcblxyXG4gIGFkZFJhaWxBY3Rpb25SdWxlcyhcclxuICAgIGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICAgIHJ1bGVzOiBSdWxlc1tdXHJcbiAgKTogT0JUUmFpbEpvdXJuZXlGYXJlIHtcclxuICAgIHJldHVybiBydWxlcy5yZWR1Y2UoKGZhcmUxOiBPQlRSYWlsSm91cm5leUZhcmUsIHJ1bGU6IFJ1bGVzKSA9PiB7XHJcbiAgICAgIGlmIChpc1NldChydWxlPy51bmF2YWlsYWJsZSkpIHtcclxuICAgICAgICBmYXJlMS51bmF2YWlsYWJsZSA9IHJ1bGUudW5hdmFpbGFibGUgYXMgYm9vbGVhbjtcclxuICAgICAgICBmYXJlMS51bmF2YWlsYWJsZU1lc3NhZ2UgPSBydWxlLnVuYXZhaWxhYmxlTWVzc2FnZSBhcyBzdHJpbmc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzU2V0KHJ1bGU/LnJlcXVpcmVzUmVhc29uKSkge1xyXG4gICAgICAgIGZhcmUxLnJlcXVpcmVzUmVhc29uID0gcnVsZS5yZXF1aXJlc1JlYXNvbiBhcyBib29sZWFuO1xyXG4gICAgICAgIGZhcmUxLnJlcXVpcmVzUmVhc29uTWVzc2FnZSA9IHJ1bGUucmVxdWlyZXNSZWFzb25NZXNzYWdlIGFzIHN0cmluZztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFyZTE7XHJcbiAgICB9LCBmYXJlKTtcclxuICB9XHJcblxyXG4gIG1hcDxUPihvYmo6IFJlY29yZDxzdHJpbmcsIFQ+LCBmdW5jOiAobmV4dDogVCkgPT4gVCk6IFJlY29yZDxzdHJpbmcsIFQ+IHtcclxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICB7fSxcclxuICAgICAgLi4uT2JqZWN0LmVudHJpZXMob2JqKS5tYXAoKFtrZXksIHZhbHVlXTogW3N0cmluZywgVF0pOiBSZWNvcmQ8XHJcbiAgICAgICAgc3RyaW5nLFxyXG4gICAgICAgIFRcclxuICAgICAgPiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIFtrZXldOiBmdW5jKHZhbHVlKVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbWVyZ2VPYmplY3RzPFQ+KC4uLm9ianM6IFRbXSk6IFQge1xyXG4gICAgcmV0dXJuIG9ianMucmVkdWNlKChjdXJyZW50OiBULCBuZXh0OiBUKSA9PiB7XHJcbiAgICAgIHJldHVybiBfLm1lcmdlKGN1cnJlbnQsIG5leHQpIGFzIFQ7XHJcbiAgICB9LCB7fSBhcyBUKTtcclxuICB9XHJcblxyXG4gIGludGVyY2VwdE1ldGhvZENhbGxzPFQgZXh0ZW5kcyBvYmplY3Q+KFxyXG4gICAgb2JqOiBULFxyXG4gICAgZm46IChwcm9wOiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wsIGFyZzogYW55W10pID0+IGFueVxyXG4gICk6IFQge1xyXG4gICAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcclxuICAgICAgZ2V0KHRhcmdldDogYW55LCBwcm9wOiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRhcmdldFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm94eSh0YXJnZXRbcHJvcF0sIHtcclxuICAgICAgICAgICAgYXBwbHk6ICh0YXJnZXQxLCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgZm4ocHJvcCwgYXJndW1lbnRzTGlzdCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkodGFyZ2V0MSwgdGhpc0FyZywgYXJndW1lbnRzTGlzdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pIGFzIHVua25vd24gYXMgVDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCB0aGUgcHJldmlvdXMgcXVhcnRlciBob3VyIGUuZy4gaWYgMjkgbWlucyAtIHJldHVybiAxNVxyXG4gICAqIEBwYXJhbSBkYXRlVGltZSAtIGRhdGUvdGltZSBpbiBtb21lbnQgZm9ybWF0XHJcbiAgICogQHJldHVybnMgbW9tZW50XHJcbiAgICovXHJcbiAgZ2V0Um91bmRlZERvd25RdWFydGVySG91cihkYXRlVGltZTogbW9tZW50Lk1vbWVudCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgY29uc3QgbWlucyA9IGRhdGVUaW1lLm1pbnV0ZXMoKTtcclxuXHJcbiAgICBpZiAobWlucyA8PSAxNSkge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAwKTtcclxuICAgIH0gZWxzZSBpZiAobWlucyA8PSAzMCkge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAxNSk7XHJcbiAgICB9IGVsc2UgaWYgKG1pbnMgPD0gNDUpIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgMzApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgNDUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXRlVGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCByb3VuZGVkIHVwIHF1YXJ0ZXIgaG91ciBlLmcuIGlmIDI5IC0gcmV0dXJuIDMwXHJcbiAgICogQHBhcmFtIGRhdGVUaW1lIC0gZGF0ZS90aW1lIGluIG1vbWVudCBmb3JtYXRcclxuICAgKiBAcmV0dXJucyBtb21lbnRcclxuICAgKi9cclxuICBnZXRSb3VuZGVkVXBRdWFydGVySG91cihkYXRlVGltZTogbW9tZW50Lk1vbWVudCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgY29uc3QgbWlucyA9IGRhdGVUaW1lLm1pbnV0ZXMoKTtcclxuXHJcbiAgICBpZiAobWlucyA8PSAxNSkge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAxNSk7XHJcbiAgICB9IGVsc2UgaWYgKG1pbnMgPD0gMzApIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgMzApO1xyXG4gICAgfSBlbHNlIGlmIChtaW5zIDw9IDQ1KSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDQ1KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDApO1xyXG4gICAgICBkYXRlVGltZS5hZGQoMSwgJ2hvdXInKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0ZVRpbWU7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NldChvYmo6IGFueSk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGw7XHJcbn1cclxuIl19
|
|
1416
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBVXZCLE9BQU8sRUFDTCxtQkFBbUIsRUFLbkIsbUJBQW1CLEVBSXBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUtMLGdCQUFnQixFQUdoQixhQUFhLEVBRWIsV0FBVyxFQUVaLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBU2pELE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0sd0JBQXdCLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNyQixNQUFNLGtCQUFrQixHQUFHO0lBQ3pCLElBQUk7SUFDSixLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7Q0FDTixDQUFDO0FBRUYsTUFB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QUFDNUIsOEJBQVcsR0FBRyxVQUFVLENBQUM7QUF5aENoQztJQURDLFFBQVEsRUFBRTs7OzsyREFHVjtBQUdEO0lBREMsUUFBUSxFQUFFOzs7O3VEQU1WO0FBR0Q7SUFEQyxRQUFRLEVBQUU7Ozs7dURBZ0NWO0FBd3BCSCxTQUFTLEtBQUssQ0FBQyxHQUFRO0lBQ3JCLE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcblxyXG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2tldERldGFpbHMsXHJcbiAgQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvXHJcbn0gZnJvbSAnLi4vc2VydmljZXMvZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZCB9IGZyb20gJy4vbWFuYWdlbWVudC1pbmZvLWFuZC12YWxpZCc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgRmxpZ2h0RGlyZWN0aW9uRW51bSxcclxuICBGbGlnaHRHcm91cHMsXHJcbiAgTWFpbkZsaWdodENhYmluQ2xhc3MsXHJcbiAgTWluTWF4LFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JURmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgU2NoZW1hLFxyXG4gIFVucGFja2VkXHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEFpcnBvcnQsXHJcbiAgQmFnZ2FnZUFsbG93YW5jZSxcclxuICBCYXNrZXRJdGVtLFxyXG4gIEZhcmVDb25kaXRpb25zLFxyXG4gIEZsaWdodENhYmluQ2xhc3MsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gIEZsaWdodEpvdXJuZXksXHJcbiAgUGFzc2VuZ2VyVHlwZSxcclxuICBTZXJ2aWNlLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIFVzZXJQYXNzZW5nZXJUeXBlSW5wdXRcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHsgU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc3VwcGxlbWVudGFyeS1ib29raW5nLWluZm8taW1wbCc7XHJcbmltcG9ydCB7IE1lbW9yaXNlIH0gZnJvbSAnLi9saW1pdGVkLWNhY2hlLmNsYXNzJztcclxuaW1wb3J0IHtcclxuICBGbGlnaHRGaWx0ZXJzLFxyXG4gIEZsaWdodEZpbHRlcnNSZWNvcmRLZXlzXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtZmlsdGVycy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBSdWxlcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvc3VtbWFyeS1pbnRlcmZhY2UnO1xyXG5cclxuZGVjbGFyZSB2YXIgaGV4X2htYWNfbWQ1OiBhbnk7XHJcblxyXG5jb25zdCBGTElHSFRfTUFYX0NISUxEX0FHRV9ZRUFSUyA9IDE2O1xyXG5jb25zdCBSQUlMX01BWF9DSElMRF9BR0VfWUVBUlMgPSAxMjtcclxuY29uc3QgRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyA9IDEyO1xyXG5jb25zdCBDT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTU7XHJcbmNvbnN0IExPVU5HRVNfTUFYX0NISUxEX0FHRV9ZRUFSUyA9IDEyO1xyXG5jb25zdCBGTElHSFRfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xyXG5jb25zdCBSQUlMX01BWF9JTkZBTlRfQUdFX1lFQVJTID0gMDtcclxuY29uc3QgQ09BQ0hfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xyXG5jb25zdCBMT1VOR0VTX01BWF9JTkZBTlRfQUdFX1lFQVJTID0gMDtcclxuY29uc3QgTUVUUkVTX1RPX01JTEVTX0NPTlZFUlNJT04gPSAxNjA5O1xyXG5jb25zdCBUSU1FX0JBU0UgPSA2MDtcclxuY29uc3QgR1JPVVBfVElDS0VUX0NPREVTID0gW1xyXG4gICdHUycsXHJcbiAgJ0FJRycsXHJcbiAgJ0dSUCcsXHJcbiAgJ0dVMycsXHJcbiAgJ0dVNCcsXHJcbiAgJ0dVQycsXHJcbiAgJ01QRycsXHJcbiAgJzJUUicsXHJcbiAgJ1NHVScsXHJcbiAgJ0dTVSdcclxuXTtcclxuXHJcbmV4cG9ydCBjbGFzcyBCYXNlSGVscGVyUm91dGluZXMge1xyXG4gIHN0YXRpYyBSRUFEX0RBVEVfRk9STUFUID0gJ2RkLCBEIE1NTSBZWVlZJztcclxuICBzdGF0aWMgUkVBRF9USU1FX0ZPUk1BVCA9ICdISDptbSc7XHJcbiAgc3RhdGljIERBVEVfRk9STUFUID0gJ1lZTU1ERCc7XHJcbiAgc3RhdGljIEdSQVBIUUxfREFUQV9GT1JNQVRfVElNRSA9ICdZWVlZLU1NLUREIEhIOm1tOnNzJztcclxuICBzdGF0aWMgSVNPX0RBVEFfRk9STUFUID0gJ1lZWVktTU0tREQnO1xyXG4gIHN0YXRpYyBJU09fREFUQV9GT1JNQVRfVElNRSA9ICdZWVlZLU1NLUREIEhIOm1tJztcclxuICBzdGF0aWMgSVNPX0RBVEFfRk9STUFUX05PX0hZUEhBTlMgPSAnWVlZWU1NREQnO1xyXG4gIHN0YXRpYyBUSU1FX0ZPUk1BVCA9ICdISG1tJztcclxuICBzdGF0aWMgVElNRV9GT1JNQVRfQ09MT04gPSAnSEg6bW0nO1xyXG4gIHN0YXRpYyBNTUREWVlfREFURSA9ICdERE1NWVlZWSc7XHJcblxyXG4gIGlzR3JvdXBUaWNrZXQoY29kZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gR1JPVVBfVElDS0VUX0NPREVTLmluY2x1ZGVzKGNvZGUudG9VcHBlckNhc2UoKS50cmltKCkpO1xyXG4gIH1cclxuXHJcbiAgbWluVG9Ib3VyKGR1cjogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gYCR7TWF0aC5mbG9vcihkdXIgLyA2MCl9aCAke2R1ciAlIDYwfW1gO1xyXG4gIH1cclxuXHJcbiAgbWFrZUNvbG9uVGltZSh0aW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aW1lLnN1YnN0cmluZygwLCAyKSArICc6JyArIHRpbWUuc3Vic3RyaW5nKDIsIDQpO1xyXG4gIH1cclxuXHJcbiAgbm9uTnVsbE1pbihrZXk6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcclxuICAgIHJldHVybiBhcmdzLnJlZHVjZShcclxuICAgICAgKGN1cnJlbnQsIGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtW2tleV0pIHtcclxuICAgICAgICAgIGlmIChjdXJyZW50Lm1pbiA+IE51bWJlcihpdGVtW2tleV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGl0ZW0sIG1pbjogTnVtYmVyKGl0ZW1ba2V5XSkgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgbWluOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgaXRlbTogbnVsbCB9XHJcbiAgICApLml0ZW07XHJcbiAgfVxyXG5cclxuICBqb2luQnlDb21tYSguLi5hdHRyaWJ1dGVzOiBhbnlbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYXR0cmlidXRlc1xyXG4gICAgICAucmVkdWNlKChhY2MsIGF0dHIpID0+IHtcclxuICAgICAgICBpZiAoXy5pc0VtcHR5KGF0dHIpKSB7XHJcbiAgICAgICAgICBhY2MgKz0gYXR0ciArICcsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSwgJycpXHJcbiAgICAgIC5zbGljZSgwLCAtMSk7XHJcbiAgfVxyXG5cclxuICBtdXR1YWxseUluY2x1ZGUoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBhLmluY2x1ZGVzKGIpIHx8IGIuaW5jbHVkZXMoYSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignVHJ5aW5nIHRvIG11dHVhbGx5IGNvbXBhcmUgdW5kZWZpbmVkIHZhcmlhYmxlLicpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaW5kQnlLZXkoYXJyYXk6IGFueVtdLCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gYXJyYXlcclxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtW2tleV0gPT09IHZhbHVlO1xyXG4gICAgICB9KVxyXG4gICAgICAucG9wKCk7XHJcbiAgfVxyXG5cclxuICBkYXRlVG9OZ0RhdGUoZGF0ZTogRGF0ZSk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpICsgMSxcclxuICAgICAgZGF5OiBkYXRlLmdldERhdGUoKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb1lZTU1ERChkYXRlOiBzdHJpbmcpIHtcclxuICAgIGlmIChkYXRlLmxlbmd0aCA+IDYpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnl5eXltbWRkVGltZVRvTW9tZW50KGRhdGUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRlO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGF0ZVRvTU1ERFlZWShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBtb21lbnQoZGF0ZSkuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXREYXRlKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuREFURV9GT1JNQVQpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0VGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuVElNRV9GT1JNQVQpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybWF0VGltZUNvbG9uKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuVElNRV9GT1JNQVRfQ09MT04pO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0SXNvRGF0ZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVCk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRJc29EYXRlVGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVF9USU1FKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdEdyYXBoUUxEYXRlVGltZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLkdSQVBIUUxfREFUQV9GT1JNQVRfVElNRSk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRJc29EYXRlTm9IeXBoYW5zKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUX05PX0hZUEhBTlMpO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVUaW1lc0xpc3QoZnJvbSA9IDAsIHRvID0gMjQsIHN0ZXAgPSAxNSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGRhdGVUaW1lQXJyYXk6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGxldCBob3VyID0gMDsgaG91ciA8IHRvIC0gZnJvbTsgaG91cisrKSB7XHJcbiAgICAgIGZvciAobGV0IG1pbnV0ZSA9IDA7IG1pbnV0ZSA8IDYwOyBtaW51dGUgKz0gc3RlcCkge1xyXG4gICAgICAgIGRhdGVUaW1lQXJyYXkucHVzaChtb21lbnQoeyBob3VyLCBtaW51dGUgfSkuZm9ybWF0KCdISDptbScpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGVUaW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuICBtb21lbnRUb05nRGF0ZShkYXRlOiBtb21lbnQuTW9tZW50IHwgc3RyaW5nKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZVRvTmdEYXRlKGRhdGUudG9EYXRlKCkpO1xyXG4gIH1cclxuXHJcbiAgbmdEYXRlVG9EYXRlKGRhdGU6IE5nYkRhdGVTdHJ1Y3QpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGggLSAxLCBkYXRlLmRheSk7XHJcbiAgfVxyXG5cclxuICBuZ0RhdGVUb01vbWVudChkYXRlOiBOZ2JEYXRlU3RydWN0LCB0aW1lPzogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBjb25zdCBtb20gPSBtb21lbnQodGhpcy5uZ0RhdGVUb0RhdGUoZGF0ZSkpO1xyXG4gICAgaWYgKHRpbWUpIHtcclxuICAgICAgY29uc3QgdGltZXMgPSB0aW1lLnNwbGl0KCc6Jyk7XHJcbiAgICAgIGlmICh0aW1lcy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICBtb20uc2V0KCdob3VycycsIE51bWJlcih0aW1lc1swXSkpLnNldCgnbWludXRlcycsIE51bWJlcih0aW1lc1sxXSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1vbVxyXG4gICAgICAgICAgLnNldCgnaG91cnMnLCBOdW1iZXIodGltZS5zdWJzdHIoMCwgMikpKVxyXG4gICAgICAgICAgLnNldCgnbWludXRlcycsIE51bWJlcih0aW1lLnN1YnN0cigyLCAyKSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9tO1xyXG4gIH1cclxuXHJcbiAgdG9kYXlUb05nYkRhdGVTdHJ1Y3QoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICBjb25zdCB0b2RheSA9IG1vbWVudCgpO1xyXG4gICAgcmV0dXJuIHsgeWVhcjogdG9kYXkueWVhcigpLCBtb250aDogdG9kYXkubW9udGgoKSArIDEsIGRheTogdG9kYXkuZGF0ZSgpIH07XHJcbiAgfVxyXG5cclxuICBvYmplY3RUb0FycmF5KG9iamVjdDogUmVjb3JkPHN0cmluZywgYW55Pik6IEFycmF5PGFueT4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubWFwKChpKSA9PiBvYmplY3RbaV0pO1xyXG4gIH1cclxuXHJcbiAgeXl5eW1tZGRUb0RhdGUodmFsdWU6IHN0cmluZyk6IERhdGUge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKFxyXG4gICAgICBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDAsIDQpKSxcclxuICAgICAgTnVtYmVyKHZhbHVlLnN1YnN0cmluZyg0LCA2KSkgLSAxLFxyXG4gICAgICBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDYsIDgpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHl5eXltbWRkVG9Nb21lbnQodmFsdWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIG1vbWVudCh0aGlzLnl5eXltbWRkVG9EYXRlKHZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICB5eW1tZGRUb01vbWVudCh2YWx1ZTogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gbW9tZW50KHZhbHVlLCAnWVlNTUREJyk7XHJcbiAgfVxyXG5cclxuICB5eW1tZGRUb05nYkRhdGUodmFsdWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUodGhpcy55eW1tZGRUb01vbWVudCh2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgeXltbWRkX2hobW1Ub01vbWVudChkYXRlOiBzdHJpbmcsIHRpbWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfSAke3RpbWV9YCwgJ1lZTU1ERCBISG1tJyk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZF9oaG1tVG9Nb21lbnQoZGF0ZTogc3RyaW5nLCB0aW1lOiBzdHJpbmcpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiBtb21lbnQoYCR7ZGF0ZX0gJHt0aW1lfWAsICdZWVlZTU1ERCBISG1tJyk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRvTmdEYXRlKHZhbHVlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLmRhdGVUb05nRGF0ZSh0aGlzLnl5eXltbWRkVG9EYXRlKHZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRpbWVUb05nRGF0ZShkYXRlOiBzdHJpbmcsIHRpbWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgY29uc3QgZHQgPSB0aGlzLnl5eXltbWRkVG9Nb21lbnQoZGF0ZSlcclxuICAgICAgLmFkZChOdW1iZXIodGltZS5zdWJzdHJpbmcoMCwgMikpLCAnaG91cnMnKVxyXG4gICAgICAuYWRkKE51bWJlcih0aW1lLnN1YnN0cmluZygyLCA0KSksICdtaW51dGVzJyk7XHJcbiAgICByZXR1cm4gdGhpcy5tb21lbnRUb05nRGF0ZShkdCk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRpbWVUb01vbWVudChkYXRlOiBzdHJpbmcpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIGlmIChkYXRlLmxlbmd0aCA9PT0gNikge1xyXG4gICAgICByZXR1cm4gbW9tZW50KGAke2RhdGV9YCwgJ1lZTU1ERCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfWAsICdZWVlZTU1ERCcpO1xyXG4gIH1cclxuXHJcbiAgaGhtbVRvVGltZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt2YWx1ZS5zdWJzdHJpbmcoMCwgMil9OiR7dmFsdWUuc3Vic3RyaW5nKDIsIDQpfWA7XHJcbiAgfVxyXG5cclxuICBkYXRlU3RyaW5nVG95eXl5bW1kZChkOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgZCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtID0gLyhcXGR7NH0pWy1cXC9dPyhcXGR7Mn0pWy1cXC9dPyhcXGR7Mn0pLy5leGVjKGQpO1xyXG4gICAgcmV0dXJuIG0gPyBgJHttWzFdfSR7bVsyXX0ke21bM119YCA6IG51bGw7XHJcbiAgfVxyXG5cclxuICB0aW1lU3RyaW5nVG9oaF9tbSh0OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgdCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtID0gLyhcXGR7Mn0pWzotXT8oXFxkezJ9KS8uZXhlYyh0KTtcclxuICAgIHJldHVybiBtID8gYCR7bVsxXX06JHttWzJdfWAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgc3RyaW5nVG9Cb29sKHM6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHMgJiYgcyAhPT0gJ2ZhbHNlJyAmJiBzICE9PSAnMCcgJiYgcyAhPT0gJ25vJyAmJiBzICE9PSAnbic7XHJcbiAgfVxyXG5cclxuICBjbG9uZTxUID0gYW55Pih0b0Nsb25lOiBUKTogVCB7XHJcbiAgICByZXR1cm4gXy5jbG9uZURlZXAodG9DbG9uZSkgYXMgVDtcclxuICB9XHJcblxyXG4gIHJlcGxhY2VLZXlzSW5UZXh0KFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgcmVwbGFjZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXBsYWNlbWVudHMpLnJlZHVjZSgoY3VycmVudCwga2V5KSA9PiB7XHJcbiAgICAgIHJldHVybiBjdXJyZW50LnJlcGxhY2UoJyUnICsga2V5LCByZXBsYWNlbWVudHNba2V5XSk7XHJcbiAgICB9LCB0ZXh0KTtcclxuICB9XHJcblxyXG4gIGdldE5leHRNaW51ZXRzKGRhdGU6IG1vbWVudC5Nb21lbnQgPSBtb21lbnQoKSwgbWludXRlc1RvUm91bmQgPSAxNSkge1xyXG4gICAgZGF0ZS5taW51dGUoTWF0aC5jZWlsKGRhdGUubWludXRlKCkgLyBtaW51dGVzVG9Sb3VuZCkgKiBtaW51dGVzVG9Sb3VuZCk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoJ0hIOm1tJyk7XHJcbiAgfVxyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAqIEJlbG93IGFyZSBmdW5jdGlvbnMgbmVlZGVkIGZvciBnZW5lcmF0aW5nIHRoZSBoYXNoZWQgbnVtYmVyIG9uY2UgdG9rZW4sIHRha2VuIGFzIHJlcXVpcmVkXHQqXHJcbiAgICogRG9uJ3QgTWVzcyB3aXRoIHRoZXNlXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KlxyXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICBnZXROdW1iZXJPbmNlVmFsdWUodG9rZW46IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByYW5kb21fdmFsdWUgPSB0aGlzLmd1aWQoKTtcclxuICAgIHJldHVybiByYW5kb21fdmFsdWUgKyAnXycgKyBoZXhfaG1hY19tZDUodG9rZW4sIHJhbmRvbV92YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBndWlkKCk6IGFueSB7XHJcbiAgICBsZXQgcmFuZG9tX2hleCA9ICcnO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzI7IGkrKykge1xyXG4gICAgICByYW5kb21faGV4ICs9IHRoaXMuczQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmFuZG9tX2hleDtcclxuICB9XHJcblxyXG4gIHM0KCk6IGFueSB7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMClcclxuICAgICAgLnRvU3RyaW5nKDE2KVxyXG4gICAgICAuc3Vic3RyaW5nKDEpO1xyXG4gIH1cclxuXHJcbiAgY2FwaXRhbGlzZUZpcnN0TGV0dGVyKHdvcmQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAod29yZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiB3b3JkWzBdLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmcm9tT2JqZWN0KC4uLmFyZ3M6IGFueVtdKTogYW55IHtcclxuICAgIGxldCBkYXRhID0gYXJncy5zaGlmdCgpO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBkYXRhICYmIGluZGV4IDwgYXJncy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcclxuICAgICAgZGF0YSA9IGRhdGFbYXJnc1tpbmRleF1dO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBtb21lbnRSb3VuZE1pbnV0ZXModGltZTogbW9tZW50Lk1vbWVudCwgcm91bmQ6IG51bWJlcik6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgdGltZSA9IG1vbWVudCh0aW1lKS5zdGFydE9mKCdtaW51dGVzJyk7XHJcbiAgICBsZXQgZGlmZiA9IHRpbWUubWludXRlcygpICUgcm91bmQ7XHJcbiAgICBpZiAoZGlmZiAhPT0gMCkge1xyXG4gICAgICBkaWZmID0gcm91bmQgLSBkaWZmO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRpbWUuYWRkKGRpZmYsICdtaW51dGUnKTtcclxuICB9XHJcblxyXG4gIHJvdW5kKGRhdGU6IGFueSwgZHVyYXRpb246IGFueSkge1xyXG4gICAgcmV0dXJuIG1vbWVudChNYXRoLmNlaWwoK2RhdGUgLyArZHVyYXRpb24pICogK2R1cmF0aW9uKTtcclxuICB9XHJcblxyXG4gIGljc0ZvbGQoYm9keTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGxpbmVzID0gYm9keS5zcGxpdCgvXFxyXFxuL2cpO1xyXG4gICAgcmV0dXJuIGxpbmVzXHJcbiAgICAgIC5tYXAoKGxpbmUpID0+IHtcclxuICAgICAgICBsZXQgcmVzID0gJyc7XHJcbiAgICAgICAgY29uc3QgbiA9IDcyO1xyXG4gICAgICAgIGxpbmUgPSBsaW5lLnRyaW0oKTtcclxuICAgICAgICB3aGlsZSAobGluZS5sZW5ndGggPiBuKSB7XHJcbiAgICAgICAgICByZXMgKz0gYCR7bGluZS5zbGljZSgwLCBuKX1cXHJcXG5gO1xyXG4gICAgICAgICAgbGluZSA9IGAgJHtsaW5lLnNsaWNlKG4pLnRyaW0oKX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGluZS50cmltKCkpIHtcclxuICAgICAgICAgIHJlcyArPSBsaW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignXFxyXFxuJyk7XHJcbiAgfVxyXG5cclxuICBzcGxpdEFkZHJlc3NMaW5lKFxyXG4gICAgbGluZTogc3RyaW5nLFxyXG4gICAgbGVuOiBudW1iZXJcclxuICApOiB7IGxpbmU6IHN0cmluZzsgcmVzaWR1ZTogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgcmVzID0ge1xyXG4gICAgICBsaW5lOiBsaW5lLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCksXHJcbiAgICAgIHJlc2lkdWU6ICcnXHJcbiAgICB9O1xyXG4gICAgaWYgKHJlcy5saW5lLmxlbmd0aCA+IGxlbikge1xyXG4gICAgICBsZXQgaSA9IHJlcy5saW5lLnNsaWNlKDAsIGxlbikubGFzdEluZGV4T2YoJywnKTtcclxuICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgcmVzLnJlc2lkdWUgPSByZXMubGluZS5zbGljZShpICsgMSkudHJpbSgpO1xyXG4gICAgICAgIHJlcy5saW5lID0gcmVzLmxpbmUuc2xpY2UoMCwgaSkudHJpbSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGkgPSByZXMubGluZS5zbGljZSgwLCBsZW4pLmxhc3RJbmRleE9mKCcgJyk7XHJcbiAgICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgICByZXMucmVzaWR1ZSA9IHJlcy5saW5lLnNsaWNlKGkgKyAxKS50cmltKCk7XHJcbiAgICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXMucmVzaWR1ZSA9IHJlcy5saW5lLnNsaWNlKGxlbik7XHJcbiAgICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGxlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgZGF5c0JldHdlZW4oc3RhcnQ6IG1vbWVudC5Nb21lbnQsIGVuZDogbW9tZW50Lk1vbWVudCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gZW5kLmRpZmYoc3RhcnQsICdkYXlzJyk7XHJcbiAgfVxyXG5cclxuICBtYXBQcm9taXNlPFQgPSBhbnksIFIgPSBhbnk+KFxyXG4gICAgYTogVFtdLFxyXG4gICAgZjogKHZhbDogVCwgaW5kZXg6IG51bWJlcikgPT4gUiB8IFByb21pc2U8Uj4sXHJcbiAgICBtYXg/OiBudW1iZXJcclxuICApOiBQcm9taXNlPFJbXT4ge1xyXG4gICAgY29uc3QgaXQgPSBhW1N5bWJvbC5pdGVyYXRvcl0oKTtcclxuICAgIGNvbnN0IHJlc3VsdDogUltdID0gW107XHJcbiAgICBjb25zdCBidWZmZXI6IFByb21pc2U8Uj5bXSA9IFtdO1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgY29uc3QgbmV4dGYgPSAoKTogUHJvbWlzZTxSPiA9PiB7XHJcbiAgICAgIGNvbnN0IG5leHQgPSBpdC5uZXh0KCk7XHJcbiAgICAgIGlmIChuZXh0LmRvbmUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW5kZXggPSBpKys7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZihuZXh0LnZhbHVlLCBpbmRleCkpLnRoZW4oKHZhbCkgPT4ge1xyXG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSB2YWw7XHJcbiAgICAgICAgcmV0dXJuIG5leHRmKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHdoaWxlICghbWF4IHx8IGJ1ZmZlci5sZW5ndGggPD0gbWF4KSB7XHJcbiAgICAgIGNvbnN0IG4gPSBuZXh0ZigpO1xyXG4gICAgICBpZiAobikge1xyXG4gICAgICAgIGJ1ZmZlci5wdXNoKG4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoYnVmZmVyKS50aGVuKCgpID0+IHtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbWFwU2VyaWVzUHJvbWlzZTxUID0gYW55LCBSID0gYW55PihcclxuICAgIGE6IFRbXSxcclxuICAgIGY6ICh2YWw6IFQsIGluZGV4OiBudW1iZXIpID0+IFIgfCBQcm9taXNlPFI+XHJcbiAgKTogUHJvbWlzZTxSW10+IHtcclxuICAgIHJldHVybiB0aGlzLm1hcFByb21pc2UoYSwgZiwgMSk7XHJcbiAgfVxyXG5cclxuICBvYmoycXVlcnlTdHJpbmcob2JqOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIF8ucmVkdWNlKFxyXG4gICAgICBvYmosXHJcbiAgICAgIChhLCB2LCBrKSA9PiB7XHJcbiAgICAgICAgaWYgKGEgIT09ICcnKSB7XHJcbiAgICAgICAgICBhICs9ICcmJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke2F9JHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWA7XHJcbiAgICAgIH0sXHJcbiAgICAgICcnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3RyaXBQdW5jdHVhdGlvbihzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHMucmVwbGFjZSgvW15hLXpBLVowLTlcXHNdL2csICcnKTtcclxuICB9XHJcblxyXG4gIHJlcGxhY2VBbGwoaGF5c3RhY2s6IHN0cmluZywgbmVlZGxlOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGhheXN0YWNrXHJcbiAgICAgID8gaGF5c3RhY2sucmVwbGFjZShuZXcgUmVnRXhwKG5lZWRsZSwgJ2cnKSwgcmVwbGFjZW1lbnQpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGRhdGVUaW1lKHNhYnNEYXRlOiBzdHJpbmcsIHNhYnNUaW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3QgdGVtcERhdGUgPSBzYWJzRGF0ZS5tYXRjaCgvLnsxLDJ9L2cpOyAvLyBzcGxpdHMgZXZlcnkgMiBjaGFyYWN0ZXJzXHJcbiAgICBjb25zdCB0ZW1wVGltZSA9IHNhYnNUaW1lLm1hdGNoKC8uezEsMn0vZyk7XHJcblxyXG4gICAgY29uc3QgbmV3U3RyID1cclxuICAgICAgJzIwJyArXHJcbiAgICAgIHRlbXBEYXRlWzBdICtcclxuICAgICAgJy0nICtcclxuICAgICAgdGVtcERhdGVbMV0gK1xyXG4gICAgICAnLScgK1xyXG4gICAgICB0ZW1wRGF0ZVsyXSArXHJcbiAgICAgICdUJyArXHJcbiAgICAgIHRlbXBUaW1lWzBdICtcclxuICAgICAgJzonICtcclxuICAgICAgdGVtcFRpbWVbMV0gK1xyXG4gICAgICAnOjAwJztcclxuICAgIHJldHVybiBuZXdTdHI7XHJcbiAgfVxyXG5cclxuICBhbHRlcm5hdGVKU09OU3RyaW5naWZ5KGpzb25PYmplY3Q6IGFueSk6IHN0cmluZyB7XHJcbiAgICBsZXQganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb25PYmplY3QpO1xyXG4gICAganNvblN0cmluZyA9IGpzb25TdHJpbmcucmVwbGFjZSgvXCIvZywgJ2AnKTtcclxuICAgIHJldHVybiBqc29uU3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29udmVydCBvYmplY3QgdG8gYXJyYXlcclxuICBDb252ZXJ0T2JqZWN0VG9BcnJheShvYmplY3Q6IG9iamVjdCk6IGFueVtdIHtcclxuICAgIGxldCBhcnJheSA9IF8udmFsdWVzKG9iamVjdCk7XHJcbiAgICBhcnJheSA9IF8uZmxhdHRlbihhcnJheSk7XHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbiAgfVxyXG5cclxuICBhZGREYXkoZGF0ZVN0cnVjdDogTmdiRGF0ZVN0cnVjdCk6IGFueSB7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoXHJcbiAgICAgIGRhdGVTdHJ1Y3QueWVhcixcclxuICAgICAgZGF0ZVN0cnVjdC5tb250aCAtIDEsXHJcbiAgICAgIGRhdGVTdHJ1Y3QuZGF5ICsgMVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJldERhdGUgPSB7XHJcbiAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogZGF0ZS5nZXREYXRlKClcclxuICAgIH07XHJcbiAgICAvLy8vIGNvbnNvbGUubG9nKHJldERhdGUpO1xyXG4gICAgLy8vLyBjb25zb2xlLmxvZyhkYXRlKTtcclxuICAgIHJldHVybiByZXREYXRlO1xyXG4gIH1cclxuXHJcbiAgaGFzaENvZGUodG9Db2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGhhc2ggPSAwO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9Db2RlLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIGNvbnN0IGNoYXIgPSB0b0NvZGUuY2hhckNvZGVBdChpKTtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1iaXR3aXNlXHJcbiAgICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjaGFyO1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWJpdHdpc2VcclxuICAgICAgaGFzaCA9IGhhc2ggJiBoYXNoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhhc2gudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIE1NZGR5eVRvTmdiKGRhdGU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUobW9tZW50KGRhdGUsIEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSkpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRDaGlsZHJlblRyYXZlbGxlcnMoXHJcbiAgICBzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLFxyXG4gICAgdHlwZTogU2VydmljZVR5cGVcclxuICApIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAvLyBUaGVzZSB0eXBlcyBkbyBub3QgaGF2ZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiBhZHVsdHMgYW5kIGNoaWxkcmVuLiBzbyBhbHdheXMgbWFyayBhcyBhZHVsdHMuXHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiBzZWxlY3RlZFRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHRyYXZlbGxlci5pc0NoaWxkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRUcmF2ZWxsZXJzKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLCB0eXBlOiBTZXJ2aWNlVHlwZSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIC8vIFRoZXNlIHR5cGVzIGRvIG5vdCBoYXZlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGFkdWx0cyBhbmQgY2hpbGRyZW4uIHNvIGFsd2F5cyBtYXJrIGFzIGFkdWx0cy5cclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgcmV0dXJuIHsgYWR1bHRzOiB0cmF2ZWxsZXJzLCBjaGlsZHJlbjogW10sIGluZmFudHM6IFtdIH07XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHRyYXZlbGxlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2N1bToge1xyXG4gICAgICAgICAgICAgIGFkdWx0czogVHJhdmVsbGVyW107XHJcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFRyYXZlbGxlcltdO1xyXG4gICAgICAgICAgICAgIGluZmFudHM6IFRyYXZlbGxlcltdO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXI6IFRyYXZlbGxlclxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0cmF2ZWxsZXIuaXNDaGlsZCkge1xyXG4gICAgICAgICAgICAgIGlmICh0cmF2ZWxsZXIuaXNJbmZhbnQpIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtLmluZmFudHMucHVzaCh0cmF2ZWxsZXIpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhY2N1bS5jaGlsZHJlbi5wdXNoKHRyYXZlbGxlcik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGFjY3VtLmFkdWx0cy5wdXNoKHRyYXZlbGxlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWR1bHRzOiBbXSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICBpbmZhbnRzOiBbXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNlbGVjdGVkQWR1bHRUcmF2ZWxsZXJzKHNlbGVjdGVkVHJhdmVsbGVyczogVHJhdmVsbGVyW10sIHR5cGU6IFNlcnZpY2VUeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gYWR1bHRzIGFuZCBjaGlsZHJlbi4gc28gYWx3YXlzIG1hcmsgYXMgYWR1bHRzLlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRUcmF2ZWxsZXJzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlbGVjdGVkVHJhdmVsbGVycy5maWx0ZXIoXHJcbiAgICAgICh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4gIXRyYXZlbGxlci5pc0NoaWxkICYmICF0cmF2ZWxsZXIuaXNJbmZhbnRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0NoaWxkKHRyYXZlbGxlcjogVHJhdmVsbGVyIHwgRGF0ZSwgbWF4QWdlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGlmICh0cmF2ZWxsZXIgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIGNvbnN0IGFkdWx0RGF0ZSA9IG1vbWVudCgpLmFkZCgtbWF4QWdlLCAneWVhcnMnKTtcclxuICAgICAgcmV0dXJuIGFkdWx0RGF0ZS5pc0JlZm9yZShcclxuICAgICAgICBtb21lbnQodHJhdmVsbGVyLCBCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUKSxcclxuICAgICAgICAnZGF5J1xyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRyYXZlbGxlci5pc0NoaWxkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNDaGlsZEZsaWdodCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBGTElHSFRfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgfVxyXG5cclxuICBpc0NoaWxkUmFpbCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBSQUlMX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gIH1cclxuXHJcbiAgaXNDaGlsZEV1cm9zdGFyKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gIH1cclxuXHJcbiAgdW5pcUJ5KGFycmF5OiBhbnlbXSwgdmFsdWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIF8udW5pcUJ5KGFycmF5LCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBpc0NoaWxkKHRyYXZlbGxlcjogVHJhdmVsbGVyIHwgRGF0ZSwgdHJhdmVsVHlwZTogU2VydmljZVR5cGUpIHtcclxuICAgIHN3aXRjaCAodHJhdmVsVHlwZSkge1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgLy8gY2FzZSBTZXJ2aWNlVHlwZS5FdXJvc3RhcjpcclxuICAgICAgLy8gIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ29hY2g6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBDT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBMT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNJbmZhbnQodHJhdmVsbGVyOiBUcmF2ZWxsZXIgfCBEYXRlLCB0cmF2ZWxUeXBlOiBTZXJ2aWNlVHlwZSkge1xyXG4gICAgc3dpdGNoICh0cmF2ZWxUeXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgRkxJR0hUX01BWF9JTkZBTlRfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgUkFJTF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyk7XHJcbiAgICAgIC8vIGNhc2UgU2VydmljZVR5cGUuRXVyb3N0YXI6XHJcbiAgICAgIC8vICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNvYWNoOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgQ09BQ0hfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIExPVU5HRVNfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QWdlVHlwZSh0cmF2ZWxsZXI6IFRyYXZlbGxlciwgdHJhdmVsVHlwZTogU2VydmljZVR5cGUpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNDaGlsZCh0cmF2ZWxsZXIsIHRyYXZlbFR5cGUpID8gJ0MnIDogJ0EnO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4Q2hpbGRBZ2UodHlwZTogU2VydmljZVR5cGUpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLlJhaWw6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1SQUlMX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICAvLyBjYXNlIFNlcnZpY2VUeXBlLkVVUk9TVEFSOlxyXG4gICAgICAvLyAgcmV0dXJuIG1vbWVudCgpLmFkZCgtRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyArIDEsICd5ZWFycycpLmZvcm1hdChIZWxwZXJzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUNPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUxPVU5HRVNfTUFYX0NISUxEX0FHRV9ZRUFSUyArIDEsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREZWZhdWx0QWR1bHRBZ2UodHlwZTogU2VydmljZVR5cGUpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICAgIC8vIGNhc2UgU2VydmljZVR5cGUuRXVyb3N0YXI6XHJcbiAgICAgIC8vICByZXR1cm4gbW9tZW50KCkuYWRkKC1FVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpLmZvcm1hdChIZWxwZXJzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUNPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1MT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgY2hpbGQgcGxhY2VzIHNvXHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC0xOCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtb21lbnQoKS5hZGQoLTE4LCAneWVhcnMnKS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICB9XHJcblxyXG4gIHRyYW5zZm9ybShcclxuICAgIGFycmF5OiBhbnlbXSxcclxuICAgIGNhbGxiYWNrOiBfLk1lbW9Wb2lkQXJyYXlJdGVyYXRvcjxhbnksIGFueVtdPixcclxuICAgIGFjYzogYW55XHJcbiAgKTogYW55W10ge1xyXG4gICAgcmV0dXJuIF8udHJhbnNmb3JtKGFycmF5LCBjYWxsYmFjaywgYWNjKTtcclxuICB9XHJcblxyXG4gIGFycmF5VG9PYmplY3Q8VCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0+KFxyXG4gICAgYXJyYXk6IFRbXSxcclxuICAgIGZpZWxkOiBzdHJpbmdcclxuICApOiB7IFtrZXk6IHN0cmluZ106IFQgfSB7XHJcbiAgICByZXR1cm4gYXJyYXlcclxuICAgICAgLmZpbHRlcigoZGF0YTogVCkgPT4gISFkYXRhKVxyXG4gICAgICAucmVkdWNlKChjb25maWdzOiB7IFtrZXk6IHN0cmluZ106IFQgfSwgY29uZmlnSXRlbTogVCkgPT4ge1xyXG4gICAgICAgIGlmIChjb25maWdJdGVtICYmIGNvbmZpZ0l0ZW1bZmllbGRdKSB7XHJcbiAgICAgICAgICBjb25maWdzW2NvbmZpZ0l0ZW1bZmllbGRdXSA9IGNvbmZpZ0l0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25maWdzO1xyXG4gICAgICB9LCB7fSk7XHJcbiAgfVxyXG5cclxuICBzZXRGaWVsZEluT2JqZWN0KFxyXG4gICAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgZmllbGRzOiBzdHJpbmdbXSxcclxuICAgIHZhbHVlOiBhbnlcclxuICApOiBhbnkge1xyXG4gICAgaWYgKGZpZWxkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpZWxkJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIW9iaikge1xyXG4gICAgICBvYmogPSB7fTtcclxuICAgIH1cclxuICAgIGlmIChmaWVsZHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIG9ialtmaWVsZHNbMF1dID0gb2JqW2ZpZWxkc1swXV0gfHwgW107XHJcbiAgICAgIG9ialtmaWVsZHNbMF1dLnB1c2godmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmllbGQ6IHN0cmluZyA9IGZpZWxkc1swXTtcclxuICAgICAgb2JqW2ZpZWxkXSA9IHRoaXMuc2V0RmllbGRJbk9iamVjdChvYmpbZmllbGRdLCBmaWVsZHMuc2xpY2UoMSksIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuXHJcbiAgYXJyYXlUb09iamVjdEFycmF5PFxyXG4gICAgVCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0sXHJcbiAgICBRIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBhbnkgfVxyXG4gID4oYXJyYXk6IFRbXSwgZmllbGRzOiAoc3RyaW5nIHwgc3RyaW5nW10pW10pOiBRIHtcclxuICAgIHJldHVybiBhcnJheVxyXG4gICAgICAuZmlsdGVyKChkYXRhOiBUKSA9PiAhIWRhdGEpXHJcbiAgICAgIC5yZWR1Y2UoKGNvbmZpZ3M6IHsgW2tleTogc3RyaW5nXTogVFtdIH0sIGNvbmZpZ0l0ZW06IFQpID0+IHtcclxuICAgICAgICBjb25zdCBmaWVsZFZhbHVlczogc3RyaW5nW10gPSBmaWVsZHMucmVkdWNlPHN0cmluZ1tdPihcclxuICAgICAgICAgIChhY2N1bTogc3RyaW5nW10sIGZpZWxkOiBrZXlvZiBUIHwgKGtleW9mIFQpW10pOiBzdHJpbmdbXSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZldGNoVmFsdWU6IHN0cmluZyA9IEFycmF5LmlzQXJyYXkoZmllbGQpXHJcbiAgICAgICAgICAgICAgPyBmaWVsZFxyXG4gICAgICAgICAgICAgICAgICAubWFwKChrZXk6IGtleW9mIFQpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWVsZEZyb21PYmplY3QoY29uZmlnSXRlbSwga2V5IGFzIHN0cmluZylcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAuam9pbignXycpXHJcbiAgICAgICAgICAgICAgOiB0aGlzLmZpZWxkRnJvbU9iamVjdChjb25maWdJdGVtLCBmaWVsZCBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICBpZiAoYWNjdW0gJiYgZmV0Y2hWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGFjY3VtLnB1c2goZmV0Y2hWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY29uZmlnSXRlbSAmJiBmaWVsZFZhbHVlcykge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RmllbGRJbk9iamVjdChjb25maWdzLCBmaWVsZFZhbHVlcywgY29uZmlnSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB7fSk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXJtaW5hbHMoYWlycG9ydDogQWlycG9ydCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBhaXJwb3J0LnRlcm1pbmFscztcclxuICB9XHJcblxyXG4gIGZpZWxkRnJvbU9iamVjdDxUPihvYmo6IG9iamVjdCwgZmllbGRzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFQgfCBudWxsIHtcclxuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheShmaWVsZHMpID8gZmllbGRzIDogKGZpZWxkcyB8fCAnJykuc3BsaXQoJy4nKSkucmVkdWNlKFxyXG4gICAgICAoY3VycmVudDogUmVjb3JkPHN0cmluZywgYW55PiwgZmllbGQxOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W2ZpZWxkMV0pIHtcclxuICAgICAgICAgIHJldHVybiBjdXJyZW50W2ZpZWxkMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9LFxyXG4gICAgICBvYmpcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBtYXBGaWVsZEZyb21PYmplY3Q8SyBleHRlbmRzIHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgVD4oZmllbGQ6IEspIHtcclxuICAgIHJldHVybiAob2JqOiBSZWNvcmQ8SywgYW55Pik6IFQgPT4ge1xyXG4gICAgICByZXR1cm4gb2JqW2ZpZWxkXTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZW1vdmVOdWxsczxUPihxdWVyeTogVCk6IFQge1xyXG4gICAgaWYgKCFxdWVyeSkge1xyXG4gICAgICByZXR1cm4gcXVlcnk7XHJcbiAgICB9XHJcbiAgICBpZiAobW9tZW50LmlzTW9tZW50KHF1ZXJ5KSkge1xyXG4gICAgICByZXR1cm4gcXVlcnk7XHJcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocXVlcnkpKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgKChxdWVyeSBhcyB1bmtub3duIGFzIEFycmF5PFVucGFja2VkPFQ+PilcclxuICAgICAgICAgIC5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVOdWxscyhpdGVtKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZmlsdGVyKChpdGVtMTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIWl0ZW0xO1xyXG4gICAgICAgICAgfSkgYXMgdW5rbm93biBhcyBUKSB8fCBudWxsXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHF1ZXJ5KS5yZWR1Y2UoKGFjY3VtOiBULCBrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChrZXlbMF0gIT09ICdfJykge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSAocXVlcnkgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XTtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlbW92ZU51bGxzKHZhbHVlKTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGEgIT09ICdudWxsJykgfHxcclxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoZGF0YSkgJiYgZGF0YS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIChhY2N1bSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldID0gZGF0YTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICB9LCB7fSBhcyBUKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBxdWVyeTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRyYXZlbGxlcnNJZCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSk6IHN0cmluZ1tdIHtcclxuICAgIGlmICh0cmF2ZWxsZXJzKSB7XHJcbiAgICAgIHJldHVybiB0cmF2ZWxsZXJzLnJlZHVjZShcclxuICAgICAgICAocHJldmlvdXNWYWx1ZTogc3RyaW5nW10sIGN1cnJlbnRWYWx1ZTogVHJhdmVsbGVyLCBpZHg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGlkeCA9PT0gMFxyXG4gICAgICAgICAgICA/IFtjdXJyZW50VmFsdWUuaWRdXHJcbiAgICAgICAgICAgIDogWy4uLnByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZS5pZF07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBbXVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogbG9vcCBvdmVyIHRoZSBxdWVyeSBvYmplY3QgcGFyYW0gYW5kIGNvbnZlcnQgYW55IG1vbWVudCBkYXRlIG9iamVjdHMgdG8gZGF0ZS10aW1lIHN0cmluZ3NcclxuICAgKiBAcGFyYW0gcXVlcnlcclxuICAgKiBAcGFyYW0gZGVidWdcclxuICAgKi9cclxuICBzYW5pdGl6ZU1vbWVudERhdGVzKHF1ZXJ5OiBhbnksIGRlYnVnID0gZmFsc2UpOiBhbnkge1xyXG4gICAgY29uc3Qgc2FuaXRpemVkUXVlcnkgPSB7IC4uLnF1ZXJ5IH07XHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzYW5pdGl6ZWRRdWVyeSkpIHtcclxuICAgICAgaWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpIHtcclxuICAgICAgICBzYW5pdGl6ZWRRdWVyeVtrZXldID0gc2FuaXRpemVkUXVlcnlba2V5XS50b0lTT1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJy0tIHNhbml0aXplTW9tZW50RGF0ZXMoKSBjYWxsZWQgLS0nKTtcclxuICAgICAgY29uc29sZS5sb2coJ29yaWdpbmFsIHF1ZXJ5OiAnLCBxdWVyeSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdzYW5pdGl6ZWQgcXVlcnk6ICcsIHNhbml0aXplZFF1ZXJ5KTtcclxuICAgIH1cclxuICAgIHJldHVybiBzYW5pdGl6ZWRRdWVyeTtcclxuICB9XHJcblxyXG4gIHRvU3RyaW5nczxUPih0b0Zvcm1hdDogVCwgc2NoZW1hOiBTY2hlbWEpOiBUIHtcclxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhzY2hlbWEucHJvcGVydGllcyB8fCB7fSkucmVkdWNlKFxyXG4gICAgICAoY3VycmVudFZhbHVlOiBULCBba2V5LCB2YWx1ZV06IFtzdHJpbmcsIFNjaGVtYV0pOiBUID0+IHtcclxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuX2Zvcm1hdFZhbHVlKFxyXG4gICAgICAgICAgdG9Gb3JtYXRba2V5IGFzIGtleW9mIFRdLFxyXG4gICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAoc2NoZW1hLnJlcXVpcmVkIHx8IFtdKS5pbmNsdWRlcyhrZXkpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBjdXJyZW50VmFsdWVba2V5IGFzIGtleW9mIFRdID0gbmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIHt9IGFzIFRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mb3JtYXRWYWx1ZSh2YWx1ZTogYW55LCBzY2hlbWE6IFNjaGVtYSwgaXNSZXF1aXJlZDogYm9vbGVhbik6IGFueSB7XHJcbiAgICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2ludGVnZXInOlxyXG4gICAgICAgIGNvbnN0IHRtcCA9IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNOYU4odG1wKSA/IChpc1JlcXVpcmVkID8gMCA6IG51bGwpIDogdG1wO1xyXG4gICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgIGNvbnN0IHRtcDEgPSB2YWx1ZSA/IHZhbHVlLnRvU3RyaW5nKCkgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0bXAxICYmIHRtcDEubGVuZ3RoID4gMCA/IHRtcDEgOiBpc1JlcXVpcmVkID8gJycgOiBudWxsO1xyXG4gICAgICBjYXNlICdvYmplY3QnOlxyXG4gICAgICAgIHJldHVybiB2YWx1ZSA/IHRoaXMudG9TdHJpbmdzKHZhbHVlLCBzY2hlbWEpIDogaXNSZXF1aXJlZCA/IHt9IDogbnVsbDtcclxuICAgICAgY2FzZSAnYXJyYXknOlxyXG4gICAgICAgIHJldHVybiB2YWx1ZTsgLy8gVE9ETyB3cml0ZSBhcnJheSB0cmFuc2xhdGlvblxyXG4gICAgICBjYXNlICdkYXRlLXRpbWUnOlxyXG4gICAgICAgIGlmICh2YWx1ZS55ZWFyKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuZm9ybWF0SXNvRGF0ZSh0aGlzLm5nRGF0ZVRvTW9tZW50KHZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Bhc3Nwb3J0JzpcclxuICAgICAgICByZXR1cm4gdmFsdWUgPyB0aGlzLnRvU3RyaW5ncyh2YWx1ZSwgc2NoZW1hKSA6IGlzUmVxdWlyZWQgPyB7fSA6IG51bGw7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYCsrKyB1bmtub3duIHNjaGVtYSB0eXBlICR7c2NoZW1hLnR5cGV9IHwgcmV0dXJuaW5nIHZhbHVlIGFzIGlzICsrK2BcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1ha2VUaW1lV2luZG93KGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzdGFydFRpbWUgPSBkYXRlVGltZS5jbG9uZSgpLmFkZChzdGFydCwgJ2hvdXInKTtcclxuICAgIGNvbnN0IGVuZFRpbWUgPSBkYXRlVGltZS5jbG9uZSgpLmFkZChlbmQsICdob3VyJyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0VGltZShzdGFydFRpbWUpICsgJy0nICsgdGhpcy5mb3JtYXRUaW1lKGVuZFRpbWUpO1xyXG4gIH1cclxuXHJcbiAgaW5SYW5nZSh0b2NoZWNrOiBudW1iZXIsIHJhbmdlOiBNaW5NYXgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0b2NoZWNrID49IHJhbmdlLm1pbiAmJiB0b2NoZWNrIDw9IHJhbmdlLm1heDtcclxuICB9XHJcblxyXG4gIG1ha2VVc2Vycyh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSk6IFVzZXJQYXNzZW5nZXJUeXBlSW5wdXRbXSB7XHJcbiAgICByZXR1cm4gdHJhdmVsbGVycy5tYXAoKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogVXNlclBhc3NlbmdlclR5cGVJbnB1dCA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaWQ6IHRyYXZlbGxlci5pZCxcclxuICAgICAgICBwYXNzZW5nZXJUeXBlOiB0cmF2ZWxsZXIuaXNDaGlsZFxyXG4gICAgICAgICAgPyBQYXNzZW5nZXJUeXBlLkNoaWxkXHJcbiAgICAgICAgICA6IHRyYXZlbGxlci5pc0luZmFudFxyXG4gICAgICAgICAgPyBQYXNzZW5nZXJUeXBlLkluZmFudFxyXG4gICAgICAgICAgOiBQYXNzZW5nZXJUeXBlLkFkdWx0XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG1ha2VNb21lbnREYXlUaW1lKGFkZERheT86IG51bWJlciwgaGg/OiBudW1iZXIsIG0/OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGR0ID0gbW9tZW50KCk7XHJcblxyXG4gICAgaWYgKGFkZERheSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGR0LmFkZChhZGREYXksICdkYXknKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBkdC5zZXQoJ2hvdXJzJywgaGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZHQuc2V0KCdtaW51dGVzJywgbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGR0O1xyXG4gIH1cclxuXHJcbiAgc2FuYXRpemVSZXR1cm5zPFQ+KFxyXG4gICAgZGVmYXVsdHM6IFQsXHJcbiAgICBzdXBwbGllZERhdGE6IFBhcnRpYWw8VD4sXHJcbiAgICBtb21lbnRGaWVsZHM/OiAoa2V5b2YgVClbXVxyXG4gICk6IFQge1xyXG4gICAgY29uc3QgY29tYmluZWQ6IFQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgc3VwcGxpZWREYXRhKTtcclxuICAgIHJldHVybiAobW9tZW50RmllbGRzIHx8IFtdKS5yZWR1Y2UoKGN1cnJlbnQ6IFQsIG5leHQ6IGtleW9mIFQpID0+IHtcclxuICAgICAgY29uc3QgdmFsdWUgPSAoY3VycmVudCBhcyBhbnkpW25leHRdO1xyXG4gICAgICAoY3VycmVudCBhcyBhbnkpW25leHRdID0gIXZhbHVlXHJcbiAgICAgICAgPyBtb21lbnQoKVxyXG4gICAgICAgIDogdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gbW9tZW50KHZhbHVlKVxyXG4gICAgICAgIDogdmFsdWU7XHJcbiAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgfSwgY29tYmluZWQpO1xyXG4gIH1cclxuXHJcbiAgbWlJc1ZhbGlkKHRvQ2hlY2s6IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0b0NoZWNrLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgICAhIXRvQ2hlY2suZmluZCgobWlJdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWQpID0+IHtcclxuICAgICAgICByZXR1cm4gbWlJdGVtLmlzVmFsaWQoKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc01pVmFsaWQoXHJcbiAgICBtaVBlckl0ZW06IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdLFxyXG4gICAgbWlQZXJVc2VyOiB7XHJcbiAgICAgIFtrZXk6IHN0cmluZ106IHtcclxuICAgICAgICBtYW5hZ2VtZW50SW5mbzogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW107XHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgbWlQZXJHdWVzdDoge1xyXG4gICAgICBba2V5OiBzdHJpbmddOiB7XHJcbiAgICAgICAgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdXNlck1pcyA9IE9iamVjdC52YWx1ZXMobWlQZXJVc2VyIHx8IHt9KTtcclxuICAgIGNvbnN0IGd1ZXN0TWlzID0gT2JqZWN0LnZhbHVlcyhtaVBlckd1ZXN0IHx8IHt9KTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMubWlJc1ZhbGlkKG1pUGVySXRlbSkgJiZcclxuICAgICAgKHVzZXJNaXMubGVuZ3RoID09PSAwIHx8XHJcbiAgICAgICAgISF1c2VyTWlzLmZpbmQoXHJcbiAgICAgICAgICAodXNlck1pczE6IHsgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdIH0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWlJc1ZhbGlkKHVzZXJNaXMxLm1hbmFnZW1lbnRJbmZvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApKSAmJlxyXG4gICAgICAoZ3Vlc3RNaXMubGVuZ3RoID09PSAwIHx8XHJcbiAgICAgICAgISFndWVzdE1pcy5maW5kKFxyXG4gICAgICAgICAgKHVzZXJNaXMxOiB7IG1hbmFnZW1lbnRJbmZvOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSB9KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1pSXNWYWxpZCh1c2VyTWlzMS5tYW5hZ2VtZW50SW5mbyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZWVkc01pKGJhc2tldDogQmFza2V0RGV0YWlscywgbmVlZHNUb1ZpZXdNaTogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgYmFza2V0LmJhc2tldEluZm9NaURldGFpbHMubGVuZ3RoID4gMCAmJlxyXG4gICAgICAobmVlZHNUb1ZpZXdNaSB8fFxyXG4gICAgICAgICFiYXNrZXQuYmFza2V0SW5mb01pRGV0YWlscy5maW5kKFxyXG4gICAgICAgICAgKG1pRGV0YWlsOiBCYXNrZXRJdGVtTWFuYWdlbWVudEluZm8pOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNNaVZhbGlkKFxyXG4gICAgICAgICAgICAgIG1pRGV0YWlsLm1pUGVySXRlbSxcclxuICAgICAgICAgICAgICBtaURldGFpbC5taVBlclVzZXIsXHJcbiAgICAgICAgICAgICAgbWlEZXRhaWwubWlQZXJHdWVzdFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZmluZFNlcnZpY2Uoc2VydmljZXM6IFVzZXJTZXJ2aWNlcywgaWQ6IHN0cmluZyk6IFNlcnZpY2Uge1xyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoc2VydmljZXMpLnJlZHVjZShcclxuICAgICAgKGN1cnJlbnQ6IFNlcnZpY2UsIHNlcnZpY2UxOiBTZXJ2aWNlW10pOiBTZXJ2aWNlID0+IHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgY3VycmVudCB8fFxyXG4gICAgICAgICAgc2VydmljZTEuZmluZCgoc2VydmljZTI6IFNlcnZpY2UpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UyLmlkID09PSBpZDtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSxcclxuICAgICAgbnVsbCBhcyBTZXJ2aWNlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYWxsVHJ1ZShcclxuICAgIHN1cHBJbmZvOiBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2VbXSxcclxuICAgIGZpbHRlcjogKHN1cHBJbmZvOiBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2UpID0+IGJvb2xlYW5cclxuICApOiBib29sZWFuIHtcclxuICAgIHJldHVybiBzdXBwSW5mby5maWx0ZXIoZmlsdGVyKS5sZW5ndGggPT09IHN1cHBJbmZvLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGpvaW5Gcm9tQXR0cmlidXRlPFQ+KFxyXG4gICAgam9pbkNoYXJhY3Rlcjogc3RyaW5nLFxyXG4gICAgYXR0cmlidXRlOiBrZXlvZiBULFxyXG4gICAgYXJyYXk6IFRbXVxyXG4gICk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYXJyYXkubWFwKChpdGVtOiBUKSA9PiBpdGVtW2F0dHJpYnV0ZV0pLmpvaW4oam9pbkNoYXJhY3Rlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzcGxpdCB1cCBhbiBhcnJheSBpbnRvIGVxdWFsIHBhcnRzXHJcbiAgICogQHBhcmFtIGFycmF5IC0gdGhlIGFycmF5IHRvIHNwbGl0IHVwXHJcbiAgICogQHBhcmFtIHNpemUgLSB0aGUgc2l6ZSBvZiB0aGUgY29uc3RpdHVhbnQgcGFydHNcclxuICAgKiBAcGFyYW0gaW5jbHVkZVJlbWFpbmRlciAtIHdldGhlciBvciBub3QgdG8gaW5jbHVkZSBhbnkgcmVtYWluZyByZXN1bHRzIC0gZGVmYXVsdCB0cnVlXHJcbiAgICovXHJcbiAgc3BsaXRVcEFycmF5KFxyXG4gICAgYXJyYXk6IGFueVtdLFxyXG4gICAgc2l6ZTogbnVtYmVyLFxyXG4gICAgaW5jbHVkZVJlbWFpbmRlcjogYm9vbGVhbiA9IHRydWVcclxuICApOiBhbnlbXSB7XHJcbiAgICBjb25zdCBhcnJheUNvcHkgPSBfLmNsb25lRGVlcChhcnJheSk7IC8vIGxvZGFzaCBjbG9uZSBkZWVwXHJcbiAgICBsZXQgbmV3QXJyYXkgPSBbXTtcclxuXHJcbiAgICBpZiAoYXJyYXlDb3B5Lmxlbmd0aCA+IHNpemUpIHtcclxuICAgICAgd2hpbGUgKGFycmF5Q29weS5sZW5ndGggPj0gc2l6ZSkge1xyXG4gICAgICAgIG5ld0FycmF5LnB1c2goYXJyYXlDb3B5LnNwbGljZSgwLCBzaXplKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFkZCBhbnkgcmVtYWluaW5nXHJcbiAgICAgIGlmIChhcnJheUNvcHkubGVuZ3RoICYmIGluY2x1ZGVSZW1haW5kZXIpIHtcclxuICAgICAgICBuZXdBcnJheS5wdXNoKGFycmF5Q29weSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld0FycmF5ID0gYXJyYXlDb3B5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXdBcnJheTtcclxuICB9XHJcblxyXG4gIEBNZW1vcmlzZSgpXHJcbiAgZ2V0VGltZURpZmZlcmVuY2UoZGVwRGF0ZVRpbWU6IHN0cmluZywgYXJyRGF0ZVRpbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gbW9tZW50KGRlcERhdGVUaW1lKS5kaWZmKG1vbWVudChhcnJEYXRlVGltZSksICdtaW51dGVzJyk7XHJcbiAgfVxyXG5cclxuICBATWVtb3Jpc2UoKVxyXG4gIGRheURpZmZlcmVuY2UoZGVwdDogc3RyaW5nLCBhcnI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkaWZmID0gbW9tZW50KGFycilcclxuICAgICAgLnN0YXJ0T2YoJ2RheScpXHJcbiAgICAgIC5kaWZmKG1vbWVudChkZXB0KS5zdGFydE9mKCdkYXknKSwgJ2RheScpO1xyXG4gICAgcmV0dXJuIGRpZmYgPiAwID8gZGlmZi50b1N0cmluZygpIDogJyc7XHJcbiAgfVxyXG5cclxuICBATWVtb3Jpc2UoKVxyXG4gIG1ha2VGYXJlUnVsZXMoZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnksIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSkge1xyXG4gICAgY29uc3QgZmxpZ2h0cyA9XHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgICAgID8gZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1xyXG4gICAgICAgIDogZmxpZ2h0LmluYm91bmRGbGlnaHRzO1xyXG4gICAgY29uc3QgcnVsZXMgPSBmbGlnaHRzLnJlZHVjZShcclxuICAgICAgKGN1cnJlbnQ6IEZhcmVDb25kaXRpb25zLCBuZXh0OiBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgY3VycmVudC5jYW5jZWxsYXRpb24gPSBjdXJyZW50LmNhbmNlbGxhdGlvbi5jb25jYXQoXHJcbiAgICAgICAgICBuZXh0LmZhcmVDb25kaXRpb25zPy5jYW5jZWxsYXRpb24gfHwgW11cclxuICAgICAgICApO1xyXG4gICAgICAgIGN1cnJlbnQuY2hhbmdlID0gY3VycmVudC5jaGFuZ2UuY29uY2F0KFxyXG4gICAgICAgICAgbmV4dC5mYXJlQ29uZGl0aW9ucz8uY2hhbmdlIHx8IFtdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjdXJyZW50Lm5vU2hvdyA9IGN1cnJlbnQubm9TaG93LmNvbmNhdChcclxuICAgICAgICAgIG5leHQuZmFyZUNvbmRpdGlvbnM/Lm5vU2hvdyB8fCBbXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3VycmVudC51cGdyYWRlID0gY3VycmVudC51cGdyYWRlLmNvbmNhdChcclxuICAgICAgICAgIG5leHQuZmFyZUNvbmRpdGlvbnM/LnVwZ3JhZGUgfHwgW11cclxuICAgICAgICApO1xyXG4gICAgICAgIGN1cnJlbnQub3RoZXIgPSBjdXJyZW50Lm90aGVyLmNvbmNhdChuZXh0LmZhcmVDb25kaXRpb25zPy5vdGhlciB8fCBbXSk7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBjYW5jZWxsYXRpb246IFtdLFxyXG4gICAgICAgIGNoYW5nZTogW10sXHJcbiAgICAgICAgbm9TaG93OiBbXSxcclxuICAgICAgICB1cGdyYWRlOiBbXSxcclxuICAgICAgICBvdGhlcjogW11cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHJldHVybiB7IHJ1bGVzLCBmbGlnaHRzIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzYyAtIGdlbmVyYXRlcyBpY3MgZmlsZSBjb250ZW50XHJcbiAgICovXHJcbiAgZ2VuZXJhdGVJY3NGaWxlQ29udGVudHMoYmFza2V0SXRlbXM6IEJhc2tldEl0ZW1bXSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBpY3NCb2R5Q29udGVudCA9IHRoaXMuZ2VuZXJhdGVJY3NGaWxlQm9keUNvbnRlbnQoYmFza2V0SXRlbXMpO1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgJ0JFR0lOOlZDQUxFTkRBUlxcclxcbicsXHJcbiAgICAgICdQUk9ESUQ6LS8vTWljcm9zIFRyYXZlbC8vU0FCUyBDb3Jwb3JhdGUgLSBNTVhJSUkvL0VOXFxyXFxuJyxcclxuICAgICAgJ1ZFUlNJT046Mi4wXFxyXFxuJyxcclxuICAgICAgJ01FVEhPRDpSRVFVRVNUXFxyXFxuJyxcclxuICAgICAgaWNzQm9keUNvbnRlbnQsXHJcbiAgICAgICdFTkQ6VkNBTEVOREFSXFxyXFxuJ1xyXG4gICAgXS5qb2luKCcnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjIC0gZ2VuZXJhdGVzIGljcyBmaWxlIGJvZHkgY29udGVudCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgYmFza2V0SXRlbXMgcGFyYW1cclxuICAgKi9cclxuICBnZW5lcmF0ZUljc0ZpbGVCb2R5Q29udGVudChiYXNrZXRJdGVtczogQmFza2V0SXRlbVtdKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGJvZHlDb250ZW50OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIC8vIGdlbmVyYXRlIGNhbGVuZGFyIGRhdGEgZm9yIGVhY2ggYmFza2V0IGl0ZW1cclxuICAgIGJhc2tldEl0ZW1zLm1hcCgoYmFza2V0SXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICBkU3RhcnQ6ICcnLFxyXG4gICAgICAgIGRFbmQ6ICcnLFxyXG4gICAgICAgIGxvY2F0aW9uRnJvbTogJycsXHJcbiAgICAgICAgbG9jYXRpb25UbzogJycsXHJcbiAgICAgICAgYmFza2V0SWQ6ICcnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgICBzZXJ2aWNlVHlwZTogJycsXHJcbiAgICAgICAgc3VtbWFyeTogJydcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9ICdERCBNTU1NIFlZWVkgSEg6bW0nO1xyXG4gICAgICBjb25zdCB7IHR5cGUgfSA9IGJhc2tldEl0ZW0uc2VydmljZTtcclxuICAgICAgY29uc3QgeyBhZHVsdHMsIGNoaWxkcmVuLCBib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZSwgZGV0YWlsLCBzZXJ2aWNlIH0gPVxyXG4gICAgICAgIGJhc2tldEl0ZW07XHJcbiAgICAgIC8vIHBvcHVsYXRlIGRhdGEgb2JqZWN0IGRlcGVuZGluZyBvbiB0aGUgc2VydmljZSB0eXBlIGluIHRoZSBiYXNrZXRcclxuICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5hcnJpdmFsRGF0ZXRpbWU7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSAnJztcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBBaXJwb3J0IExvdW5nZSAtICR7ZGV0YWlsLm5hbWV9YDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBMb3VuZ2U6ICR7ZGV0YWlsLm5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYFN0YXJ0czogJHttb21lbnQoZGV0YWlsLmFycml2YWxEYXRldGltZSkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBZHVsdHM6ICR7YWR1bHRzfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBDaGlsZHJlbjogJHtjaGlsZHJlbn1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8uZGVwYXJ0cztcclxuICAgICAgICAgIGRhdGEuZEVuZCA9ICcnO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYFRheGkgYm9va2luZyAtIGZyb20gJHtkZXRhaWwuZnJvbUxvY2F0aW9uLmFkZHJlc3N9IHRvICR7ZGV0YWlsLnRvTG9jYXRpb24uYWRkcmVzc31gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYFBpY2t1cCBQb2ludDogJHtkZXRhaWwuZnJvbUxvY2F0aW9uLmFkZHJlc3N9XFxyXFxuYCxcclxuICAgICAgICAgICAgYFRpbWU6ICR7bW9tZW50KGRldGFpbC5kZXBhcnRzKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhcjpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/LnBpY2tVcERhdGV0aW1lO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gZGV0YWlsPy5kcm9wT2ZmRGF0ZXRpbWU7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgQ2FyIGJvb2tpbmcgLSBmcm9tICR7ZGV0YWlsLnBpY2tVcExvY2F0aW9uLmFkZHJlc3N9IHRvICR7ZGV0YWlsLmRyb3BPZmZMb2NhdGlvbi5hZGRyZXNzfWA7XHJcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xyXG4gICAgICAgICAgICBgUGlja3VwIFBvaW50OiAke2RldGFpbC5waWNrVXBMb2NhdGlvbi5hZGRyZXNzfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBUaW1lOiAke21vbWVudChkZXRhaWwucGlja1VwRGF0ZXRpbWUpLmZvcm1hdChkYXRlRm9ybWF0KX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQXJyaXZhbCBQb2ludDogJHtkZXRhaWwuZHJvcE9mZkxvY2F0aW9uLmFkZHJlc3N9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICAoZGF0YS5sb2NhdGlvbkZyb20gPSBkZXRhaWwucGlja1VwTG9jYXRpb24uYWRkcmVzcyksXHJcbiAgICAgICAgICAgIChkYXRhLmxvY2F0aW9uVG8gPSBkZXRhaWwuZHJvcE9mZkxvY2F0aW9uLmFkZHJlc3MpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgdGhpcyBjYXNlXHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5GYXN0VHJhY2s6XHJcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHRoaXMgY2FzZVxyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8ub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gZGV0YWlsPy5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVBcnJpdmluZztcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBGbGlnaHQgQm9va2luZyAtIEZyb20gJHtkZXRhaWwub3V0Ym91bmRGbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnR9IHRvICR7ZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1swXS5kZXN0aW5hdGlvbkFpcnBvcnR9YDtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBGcm9tOiAke2RldGFpbC5vdXRib3VuZEZsaWdodHNbMF0ub3JpZ2luQWlycG9ydH1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgRGVwYXJ0OiAke21vbWVudChcclxuICAgICAgICAgICAgICBkZXRhaWwub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICAgICAgICkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBUbzogJHtkZXRhaWwub3V0Ym91bmRGbGlnaHRzWzBdLmRlc3RpbmF0aW9uQWlycG9ydH1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQXJyaXZlOiAke21vbWVudChcclxuICAgICAgICAgICAgICBkZXRhaWwub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lQXJyaXZpbmdcclxuICAgICAgICAgICAgKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8uY2hlY2tJbjtcclxuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8uY2hlY2tPdXQ7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgSG90ZWwgYm9va2luZyAtICAke2RldGFpbC5ob3RlbE5hbWV9YDtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBIb3RlbDogJHtkZXRhaWwuaG90ZWxOYW1lfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBcnJpdmFsOiAke21vbWVudChkZXRhaWwuY2hlY2tJbikuZm9ybWF0KGRhdGVGb3JtYXQpfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBEZXBhcnR1cmU6ICR7bW9tZW50KGRldGFpbC5jaGVja091dCkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXHJcbiAgICAgICAgICBdLmpvaW4oJycpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbDpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/Lm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/Lm91dHdhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lO1xyXG4gICAgICAgICAgZGF0YS5sb2NhdGlvbkZyb20gPSBkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZTtcclxuICAgICAgICAgIGRhdGEubG9jYXRpb25UbyA9IGRldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxEYXRlVGltZTtcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBUcmFpbiBCb29raW5nIC0gRnJvbSAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lfSB0byAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxTdGF0aW9uTmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEZyb20gJHtkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgVG8gJHtkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsU3RhdGlvbk5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYERlcGFydHVyZSAke21vbWVudChkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVEYXRlVGltZSkuZm9ybWF0KFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXRcclxuICAgICAgICAgICAgKX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQXJyaXZhbCAke21vbWVudChkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWUpLmZvcm1hdChcclxuICAgICAgICAgICAgICBkYXRlRm9ybWF0XHJcbiAgICAgICAgICAgICl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLlBhcmtpbmc6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5hcnJpdmFsRGF0ZXRpbWU7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/LmRlcGFydERhdGV0aW1lO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYEFpcnBvcnQgcGFya2luZyAtICR7ZGV0YWlsLm5hbWV9YDtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBBaXJwb3J0IFBhcmtpbmc6ICR7ZGV0YWlsLm5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLlJhaWw6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZURhdGVUaW1lO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gZGV0YWlsPy5vdXR3YXJkRGV0YWlsLmFycml2YWxEYXRlVGltZTtcclxuICAgICAgICAgIGRhdGEubG9jYXRpb25Gcm9tID0gZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWU7XHJcbiAgICAgICAgICBkYXRhLmxvY2F0aW9uVG8gPSBkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWU7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgVHJhaW4gQm9va2luZyAtIEZyb20gJHtkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZX0gdG8gJHtkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsU3RhdGlvbk5hbWV9YDtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBGcm9tICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYFRvICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbFN0YXRpb25OYW1lfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBEZXBhcnR1cmUgJHttb21lbnQoZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlRGF0ZVRpbWUpLmZvcm1hdChcclxuICAgICAgICAgICAgICBkYXRlRm9ybWF0XHJcbiAgICAgICAgICAgICl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEFycml2YWwgJHttb21lbnQoZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lKS5mb3JtYXQoXHJcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdFxyXG4gICAgICAgICAgICApfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXHJcbiAgICAgICAgICBdLmpvaW4oJycpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGJvZHlDb250ZW50LnB1c2goXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgJ0JFR0lOOlZFVkVOVFxcclxcbicsXHJcbiAgICAgICAgICBkYXRhLmRTdGFydFxyXG4gICAgICAgICAgICA/IGBEVFNUQVJUOiR7bW9tZW50KGRhdGEuZFN0YXJ0KS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpfVxcclxcbmBcclxuICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgIGRhdGEuZEVuZFxyXG4gICAgICAgICAgICA/IGBEVEVORDoke21vbWVudChkYXRhLmRFbmQpLmZvcm1hdCgnWVlZWU1NRERUSEhtbXNzJyl9XFxyXFxuYFxyXG4gICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgJ09SR0FOSVpFUjtDTj1cIkRvIG5vdCByZXBseSB0byB0aGlzIGVtYWlsXCI6bWFpbHRvOmRvX25vdF9yZXBseUBzYWJzY29ycC5jb21cXHJcXG4nLFxyXG4gICAgICAgICAgZGF0YS5sb2NhdGlvblRvICYmIGRhdGEubG9jYXRpb25Gcm9tXHJcbiAgICAgICAgICAgID8gYExPQ0FUSU9OOiAke2RhdGEubG9jYXRpb25Ub30gdG8gJHtkYXRhLmxvY2F0aW9uRnJvbX0gXFxyXFxuYFxyXG4gICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgJ1RSQU5TUDpPUEFRVUVcXHJcXG4nLFxyXG4gICAgICAgICAgJ1NFUVVFTkNFOjBcXHJcXG4nLFxyXG4gICAgICAgICAgYFVJRDoke2RhdGEuc2VydmljZVR5cGV9XyR7aW5kZXh9XyR7ZGF0YS5iYXNrZXRJZH1Ac2Fic2NvcnAuY29tXFxyXFxuYCxcclxuICAgICAgICAgIGBEVFNUQU1QOiR7bW9tZW50KCkuZm9ybWF0KCdZWVlZTU1ERFRISG1tc3MnKX1cXHJcXG5gLFxyXG4gICAgICAgICAgYERFU0NSSVBUSU9OOiR7ZGF0YS5kZXNjcmlwdGlvbn1cXHJcXG5gLFxyXG4gICAgICAgICAgYFNVTU1BUlk6JHtkYXRhLnN1bW1hcnl9XFxyXFxuYCxcclxuICAgICAgICAgICdFTkQ6VkVWRU5UXFxyXFxuJ1xyXG4gICAgICAgIF0uam9pbignJylcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBib2R5Q29udGVudC5qb2luKCcnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjIC0gY3JlYXRlcyBhbiBlbGVtZW50IGluIG1lbW9yeSBhbmQgdHJpZ2dlcnMgY2xpY2sgZXZlbnQgdG8gZG93bmxvYWQgaWNzIGZpbGVcclxuICAgKi9cclxuICBkb3dubG9hZEljcyhmaWxlbmFtZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcclxuICAgICAgJ2hyZWYnLFxyXG4gICAgICAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsJyArIGVuY29kZVVSSUNvbXBvbmVudCh0ZXh0KVxyXG4gICAgKTtcclxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVuYW1lKTtcclxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XHJcbiAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICBlbGVtZW50LmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzcGxpdCBhIHN0cmluZyBvbiBjYXBpdGFsc1xyXG4gICAqIEBwYXJhbSByYXdTdHJpbmcgLSB0aGUgc3RyaW5nIHdlIHdhbnQgdG8gc3BsaXRcclxuICAgKiBAcGFyYW0gam9pbiAtIHdoZXRoZXIgb3Igbm90IHRvIGpvaW5nIHRoZSBzcGxpdCBpbnRvIG9uZSBzdHJpbmcsIHNlcGVyYXRlZCBieSBhIHNwYWNlXHJcbiAgICogQHJldHVybnMgc3RyaW5nL3N0cmluZ1tdXHJcbiAgICovXHJcbiAgc3BsaXRTdHJpbmdPbkNhcGl0YWxzKFxyXG4gICAgcmF3U3RyaW5nOiBzdHJpbmcsXHJcbiAgICBqb2luOiBib29sZWFuID0gZmFsc2VcclxuICApOiBzdHJpbmcgfCBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBzcGxpdFN0cmluZyA9IHJhd1N0cmluZy5zcGxpdCgvKD89W0EtWl0pLyk7XHJcblxyXG4gICAgaWYgKGpvaW4pIHtcclxuICAgICAgcmV0dXJuIHNwbGl0U3RyaW5nLmpvaW4oJyAnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3BsaXRTdHJpbmc7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVGbGlnaHRGaWx0ZXJzKFxyXG4gICAgam91cm5leXM6IEZsaWdodEl0aW5lcmFyeVtdLFxyXG4gICAgZGVmYXVsdEZpbHRlcnM6IEZsaWdodEZpbHRlcnNcclxuICApOiBGbGlnaHRGaWx0ZXJzIHtcclxuICAgIHJldHVybiBqb3VybmV5cy5yZWR1Y2UoXHJcbiAgICAgIChmaWx0ZXJzOiBGbGlnaHRGaWx0ZXJzLCByZXN1bHQxOiBGbGlnaHRJdGluZXJhcnkpOiBGbGlnaHRGaWx0ZXJzID0+IHtcclxuICAgICAgICBjb25zdCBvdXRTdG9wcyA9IHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgZmlsdGVycy5zdG9wc1tvdXRTdG9wc10gPSBmaWx0ZXJzLnN0b3BzW291dFN0b3BzXSB8fCB7XHJcbiAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICBvdXRTdG9wcyA9PT0gMFxyXG4gICAgICAgICAgICAgID8gJ0RpcmVjdCdcclxuICAgICAgICAgICAgICA6IGAke291dFN0b3BzfSBzdG9wYCArIChvdXRTdG9wcyAhPT0gMSA/ICdzJyA6ICcnKSxcclxuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgIHZhbHVlOiBvdXRTdG9wcyArIDFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBpblN0b3BzID0gcmVzdWx0MS5pbmJvdW5kRmxpZ2h0c1xyXG4gICAgICAgICAgPyByZXN1bHQxLmluYm91bmRGbGlnaHRzLmxlbmd0aCAtIDFcclxuICAgICAgICAgIDogMDtcclxuICAgICAgICBjb25zdCB0b3RhbFN0b3BzID0gaW5TdG9wcyA+IG91dFN0b3BzID8gaW5TdG9wcyA6IG91dFN0b3BzO1xyXG4gICAgICAgIGZpbHRlcnMudG90YWxTdG9wc1t0b3RhbFN0b3BzXSA9IGZpbHRlcnMudG90YWxTdG9wc1t0b3RhbFN0b3BzXSB8fCB7XHJcbiAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICB0b3RhbFN0b3BzID09PSAwXHJcbiAgICAgICAgICAgICAgPyAnRGlyZWN0J1xyXG4gICAgICAgICAgICAgIDogYCR7dG90YWxTdG9wc30gc3RvcGAgKyAodG90YWxTdG9wcyAhPT0gMSA/ICdzJyA6ICcnKSxcclxuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgIHZhbHVlOiB0b3RhbFN0b3BzICsgMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHVwZGF0ZUZsaWdodEl0ZW1zID0gKGZsaWdodDogRmxpZ2h0Sm91cm5leSk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgZmlsdGVycy5jbGFzc2VzW2ZsaWdodC5jYWJpbkNsYXNzXSA9IGZpbHRlcnMuY2xhc3Nlc1tcclxuICAgICAgICAgICAgZmxpZ2h0LmNhYmluQ2xhc3NcclxuICAgICAgICAgIF0gfHwge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGlnaHQuY2FiaW5DbGFzcyxcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWx1ZTogZmxpZ2h0LmNhYmluQ2xhc3NcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBmaWx0ZXJzLmFpcmxpbmVzW2ZsaWdodC5tYXJrZXRpbmdDYXJyaWVyXSA9IGZpbHRlcnMuYWlybGluZXNbXHJcbiAgICAgICAgICAgIGZsaWdodC5tYXJrZXRpbmdDYXJyaWVyXHJcbiAgICAgICAgICBdIHx8IHtcclxuICAgICAgICAgICAgZGlzcGxheTogZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJOYW1lLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmbGlnaHQubWFya2V0aW5nQ2FycmllclxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzLmZvckVhY2godXBkYXRlRmxpZ2h0SXRlbXMpO1xyXG4gICAgICAgIGNvbnN0IGJhZ2dhZ2VBcnJheTogbnVtYmVyW10gPSByZXN1bHQxLmJhZ2dhZ2VBbGxvd2FuY2UubWFwKFxyXG4gICAgICAgICAgKGJhZ2dhZ2VBbGxvd2FuY2U6IEJhZ2dhZ2VBbGxvd2FuY2UpID0+IGJhZ2dhZ2VBbGxvd2FuY2UucXR5XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBiYWdnYWdlOiBudW1iZXIgPSBiYWdnYWdlQXJyYXkubGVuZ3RoXHJcbiAgICAgICAgICA/IE1hdGgubWluKC4uLmJhZ2dhZ2VBcnJheSlcclxuICAgICAgICAgIDogMDtcclxuICAgICAgICBmaWx0ZXJzLmJhZ2dhZ2VbYmFnZ2FnZV0gPSBmaWx0ZXJzLmJhZ2dhZ2VbYmFnZ2FnZV0gfHwge1xyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgZGlzcGxheTogYCR7YmFnZ2FnZX0gYmFnJHtiYWdnYWdlID4gMSA/ICdzJyA6ICcnfWAsXHJcbiAgICAgICAgICB2YWx1ZTogYmFnZ2FnZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgaW5kZXhlZEZsaWdodCA9IChcclxuICAgICAgICAgIGZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSxcclxuICAgICAgICAgIGZpbHRlckF0dHJpYnV0ZTogRmxpZ2h0RmlsdGVyc1JlY29yZEtleXMsXHJcbiAgICAgICAgICBmbGlnaHRBdHRyaWJ1dGU6IGtleW9mIEZsaWdodEpvdXJuZXksXHJcbiAgICAgICAgICBmbGlnaHRBdHRyaWJ1dGVOYW1lOiBrZXlvZiBGbGlnaHRKb3VybmV5LFxyXG4gICAgICAgICAgaW5kZXg6IG51bWJlclxyXG4gICAgICAgICk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdGVtcDogc3RyaW5nID1cclxuICAgICAgICAgICAgZmxpZ2h0cyAmJiBmbGlnaHRzW2luZGV4XVxyXG4gICAgICAgICAgICAgID8gZmxpZ2h0c1tpbmRleF1bZmxpZ2h0QXR0cmlidXRlXVxyXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgaWYgKHRlbXAgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBmaWx0ZXJzW2ZpbHRlckF0dHJpYnV0ZV1bdGVtcF0gPSBmaWx0ZXJzW2ZpbHRlckF0dHJpYnV0ZV1bdGVtcF0gfHwge1xyXG4gICAgICAgICAgICAgIHZhbHVlOiBmbGlnaHRzW2luZGV4XVtmbGlnaHRBdHRyaWJ1dGVdLFxyXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGZsaWdodHNbaW5kZXhdW2ZsaWdodEF0dHJpYnV0ZU5hbWVdLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaW5kZXhlZEZsaWdodChcclxuICAgICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgJ2RlcGF0dXJlQWlycG9ydCcsXHJcbiAgICAgICAgICAnb3JpZ2luQWlycG9ydCcsXHJcbiAgICAgICAgICAnb3JpZ2luQWlycG9ydE5hbWUnLFxyXG4gICAgICAgICAgMFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaW5kZXhlZEZsaWdodChcclxuICAgICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgJ2Fycml2YWxBaXJwb3J0JyxcclxuICAgICAgICAgICdkZXN0aW5hdGlvbkFpcnBvcnQnLFxyXG4gICAgICAgICAgJ2Rlc3RpbmF0aW9uQWlycG9ydE5hbWUnLFxyXG4gICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGZpbHRlcnMucHJpY2UubWluID1cclxuICAgICAgICAgIGZpbHRlcnMucHJpY2UubWluIDwgcmVzdWx0MS50b3RhbC5wcmljZVxyXG4gICAgICAgICAgICA/IGZpbHRlcnMucHJpY2UubWluXHJcbiAgICAgICAgICAgIDogcmVzdWx0MS50b3RhbC5wcmljZTtcclxuXHJcbiAgICAgICAgZmlsdGVycy5wcmljZS5tYXggPVxyXG4gICAgICAgICAgZmlsdGVycy5wcmljZS5tYXggPiByZXN1bHQxLnRvdGFsLnByaWNlXHJcbiAgICAgICAgICAgID8gZmlsdGVycy5wcmljZS5tYXhcclxuICAgICAgICAgICAgOiByZXN1bHQxLnRvdGFsLnByaWNlO1xyXG5cclxuICAgICAgICBmaWx0ZXJzLmR1cmF0aW9uLm1pbiA9XHJcbiAgICAgICAgICBmaWx0ZXJzLmR1cmF0aW9uLm1pbiA8IHJlc3VsdDEub3V0Ym91bmRUb3RhbER1cmF0aW9uXHJcbiAgICAgICAgICAgID8gZmlsdGVycy5kdXJhdGlvbi5taW5cclxuICAgICAgICAgICAgOiByZXN1bHQxLm91dGJvdW5kVG90YWxEdXJhdGlvbjtcclxuXHJcbiAgICAgICAgZmlsdGVycy5kdXJhdGlvbi5tYXggPVxyXG4gICAgICAgICAgZmlsdGVycy5kdXJhdGlvbi5tYXggPiByZXN1bHQxLm91dGJvdW5kVG90YWxEdXJhdGlvblxyXG4gICAgICAgICAgICA/IGZpbHRlcnMuZHVyYXRpb24ubWF4XHJcbiAgICAgICAgICAgIDogcmVzdWx0MS5vdXRib3VuZFRvdGFsRHVyYXRpb247XHJcblxyXG4gICAgICAgIGNvbnN0IGRlcGFydFRpbWUgPSBtb21lbnQoXHJcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1xyXG4gICAgICAgICkuZ2V0KCdob3VyJyk7XHJcblxyXG4gICAgICAgIGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5taW4gPVxyXG4gICAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1pbiA8IGRlcGFydFRpbWVcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmRlcGFydHVyZVRpbWUubWluXHJcbiAgICAgICAgICAgIDogZGVwYXJ0VGltZTtcclxuICAgICAgICBmaWx0ZXJzLmRlcGFydHVyZVRpbWUubWF4ID1cclxuICAgICAgICAgIGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5tYXggPiBkZXBhcnRUaW1lXHJcbiAgICAgICAgICAgID8gZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1heFxyXG4gICAgICAgICAgICA6IGRlcGFydFRpbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGFycml2YWxUaW1lID0gbW9tZW50KFxyXG4gICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHNbcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgLmRhdGVUaW1lQXJyaXZpbmdcclxuICAgICAgICApLmdldCgnaG91cicpO1xyXG5cclxuICAgICAgICBmaWx0ZXJzLmFycml2YWxUaW1lLm1pbiA9XHJcbiAgICAgICAgICBmaWx0ZXJzLmFycml2YWxUaW1lLm1pbiA8IGFycml2YWxUaW1lXHJcbiAgICAgICAgICAgID8gZmlsdGVycy5hcnJpdmFsVGltZS5taW5cclxuICAgICAgICAgICAgOiBhcnJpdmFsVGltZTtcclxuICAgICAgICBmaWx0ZXJzLmFycml2YWxUaW1lLm1heCA9XHJcbiAgICAgICAgICBmaWx0ZXJzLmFycml2YWxUaW1lLm1heCA+IGFycml2YWxUaW1lXHJcbiAgICAgICAgICAgID8gZmlsdGVycy5hcnJpdmFsVGltZS5tYXhcclxuICAgICAgICAgICAgOiBhcnJpdmFsVGltZTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdDEuaW5ib3VuZEZsaWdodHMgJiYgcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1pbiA9XHJcbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWluIDwgcmVzdWx0MS5pbmJvdW5kVG90YWxEdXJhdGlvblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5EdXJhdGlvbi5taW5cclxuICAgICAgICAgICAgICA6IHJlc3VsdDEuaW5ib3VuZFRvdGFsRHVyYXRpb247XHJcblxyXG4gICAgICAgICAgZmlsdGVycy5yZXR1cm5EdXJhdGlvbi5tYXggPVxyXG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1heCA+IHJlc3VsdDEuaW5ib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICAgICAgICA/IGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWF4XHJcbiAgICAgICAgICAgICAgOiByZXN1bHQxLmluYm91bmRUb3RhbER1cmF0aW9uO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGRlcGFydFRpbWVSZXR1cm4gPVxyXG4gICAgICAgICAgICByZXN1bHQxICYmIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMgJiYgcmVzdWx0MS5pbmJvdW5kRmxpZ2h0c1swXVxyXG4gICAgICAgICAgICAgID8gbW9tZW50KHJlc3VsdDEuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLmdldCgnaG91cicpXHJcbiAgICAgICAgICAgICAgOiAtMTtcclxuXHJcbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWluID1cclxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1pbiA8IGRlcGFydFRpbWVSZXR1cm5cclxuICAgICAgICAgICAgICA/IGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5taW5cclxuICAgICAgICAgICAgICA6IGRlcGFydFRpbWVSZXR1cm47XHJcbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWF4ID1cclxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1heCA+IGRlcGFydFRpbWVSZXR1cm5cclxuICAgICAgICAgICAgICA/IGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5tYXhcclxuICAgICAgICAgICAgICA6IGRlcGFydFRpbWVSZXR1cm47XHJcblxyXG4gICAgICAgICAgY29uc3QgYXJyaXZhbFRpbWVSZXR1cm4gPSBtb21lbnQoXHJcbiAgICAgICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzW3Jlc3VsdDEub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdXHJcbiAgICAgICAgICAgICAgLmRhdGVUaW1lQXJyaXZpbmdcclxuICAgICAgICAgICkuZ2V0KCdob3VyJyk7XHJcblxyXG4gICAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5taW4gPVxyXG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLm1pbiA8IGFycml2YWxUaW1lUmV0dXJuXHJcbiAgICAgICAgICAgICAgPyBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLm1pblxyXG4gICAgICAgICAgICAgIDogYXJyaXZhbFRpbWVSZXR1cm47XHJcbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLm1heCA9XHJcbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWF4ID4gYXJyaXZhbFRpbWVSZXR1cm5cclxuICAgICAgICAgICAgICA/IGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWF4XHJcbiAgICAgICAgICAgICAgOiBhcnJpdmFsVGltZVJldHVybjtcclxuXHJcbiAgICAgICAgICAocmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkuZm9yRWFjaCh1cGRhdGVGbGlnaHRJdGVtcyk7XHJcbiAgICAgICAgICBpbmRleGVkRmxpZ2h0KFxyXG4gICAgICAgICAgICByZXN1bHQxLmluYm91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAnZGVwYXR1cmVSZXR1cm5BaXJwb3J0JyxcclxuICAgICAgICAgICAgJ29yaWdpbkFpcnBvcnQnLFxyXG4gICAgICAgICAgICAnb3JpZ2luQWlycG9ydE5hbWUnLFxyXG4gICAgICAgICAgICAwXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaW5kZXhlZEZsaWdodChcclxuICAgICAgICAgICAgcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICAgJ2Fycml2YWxSZXR1cm5BaXJwb3J0JyxcclxuICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uQWlycG9ydCcsXHJcbiAgICAgICAgICAgICdkZXN0aW5hdGlvbkFpcnBvcnROYW1lJyxcclxuICAgICAgICAgICAgcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmlsdGVycztcclxuICAgICAgfSxcclxuICAgICAgdGhpcy5jbG9uZShkZWZhdWx0RmlsdGVycylcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBtYXBPdmVyT2JqZWN0PFY+KFxyXG4gICAgaXRlbXM6IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFY+LFxyXG4gICAgY2FsbGJhY2s6ICh2YWx1ZTogViwga2V5Pzogc3RyaW5nIHwgbnVtYmVyKSA9PiBWXHJcbiAgKTogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgVj4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGl0ZW1zKS5yZWR1Y2UoXHJcbiAgICAgIChhY2N1bTogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgVj4sIGVudHJpZXM6IFtzdHJpbmcgfCBudW1iZXIsIFZdKSA9PiB7XHJcbiAgICAgICAgYWNjdW1bZW50cmllc1swXV0gPSBjYWxsYmFjayhlbnRyaWVzWzFdLCBlbnRyaWVzWzBdKTtcclxuICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgIH0sXHJcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFY+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbm9ybWFsaXNlTWludXRlVG9CYXNlMTAobWluOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgucm91bmQoKG1pbiAqIDEwMCkgLyA2MCk7XHJcbiAgfVxyXG5cclxuICBPQlRGbGlnaHRDYWJpbkNsYXNzVG9GbGlnaHRDYWJpbkNsYXNzKFxyXG4gICAgdmFsdWU6IE9CVEZsaWdodENhYmluQ2xhc3NcclxuICApOiBNYWluRmxpZ2h0Q2FiaW5DbGFzcyB7XHJcbiAgICBjb25zdCBPQlRGbGlnaHRDYWJpbkNsYXNzVG9GbGlnaHRDYWJpbkNsYXNzOiBSZWNvcmQ8XHJcbiAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MsXHJcbiAgICAgIE1haW5GbGlnaHRDYWJpbkNsYXNzXHJcbiAgICA+ID0ge1xyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc106IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzQnJhbmRlZF06IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aV06IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpLFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGlCcmFuZGVkXTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGksXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NdOiBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3MsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NCcmFuZGVkXTpcclxuICAgICAgICBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3MsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkXTpcclxuICAgICAgICBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkLFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZEJyYW5kZWRdOlxyXG4gICAgICAgIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XTogRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdCxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RCcmFuZGVkXTogRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdCxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215LFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teUJyYW5kZWRdOlxyXG4gICAgICAgIEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXlcclxuICAgIH07XHJcbiAgICByZXR1cm4gT0JURmxpZ2h0Q2FiaW5DbGFzc1RvRmxpZ2h0Q2FiaW5DbGFzc1t2YWx1ZV07XHJcbiAgfVxyXG4gIEZsaWdodENhYmluQ2xhc3NUb0JyYW5kZWRPQlRGbGlnaHRDYWJpbkNsYXNzKFxyXG4gICAgdmFsdWU6IEZsaWdodEdyb3VwcyxcclxuICAgIGlzQnJhbmRlZDogYm9vbGVhblxyXG4gICk6IE9CVEZsaWdodENhYmluQ2xhc3Mge1xyXG4gICAgY29uc3QgdHlwZXM6IFJlY29yZDxGbGlnaHRHcm91cHMsIE9CVEZsaWdodENhYmluQ2xhc3M+ID0gaXNCcmFuZGVkXHJcbiAgICAgID8ge1xyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215QnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1CdXNpbmVzc106XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuTGl0ZUVjb25vbXldOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXldOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1GaXJzdF06IE9CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRdOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teUJyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGldOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aUJyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzXTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzXTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc0JyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdF06IE9CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RCcmFuZGVkXHJcbiAgICAgICAgfVxyXG4gICAgICA6IHtcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teSxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1CdXNpbmVzc106IE9CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5MaXRlRWNvbm9teV06IE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1GaXJzdF06IE9CVEZsaWdodENhYmluQ2xhc3MuRmlyc3QsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZF06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teV06IE9CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXksXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aSxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3MsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc106IE9CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdF06IE9CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RcclxuICAgICAgICB9O1xyXG4gICAgcmV0dXJuIHR5cGVzW3ZhbHVlXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGNvbnZlcnQgZnJvbSBtZXRyZXMgdG8gbWlsZXNcclxuICAgKiBAcGFyYW0gbWV0cmVzIC0gdGhlIGFtb3VudCBvZiBtZXRyZXMgdG8gY29udmVydFxyXG4gICAqIEBwYXJhbSBkZWNpbWFsUGxhY2VzIC0gdGhlIGFtb3VudCBvZiBkLnAgdG8gY29udmVydCB0bywgaWYgbmVnYXRpdmUgKGRlZmF1bHQpIGRvZXMgbm90IHJlc3RyaWN0IHRoZSBkZWNpbWFsIHBsYWNlc1xyXG4gICAqL1xyXG4gIGNvbnZlcnRNZXRyZXNUb01pbGVzKG1ldHJlczogbnVtYmVyLCBkZWNpbWFsUGxhY2VzOiBudW1iZXIgPSAtMSk6IG51bWJlciB7XHJcbiAgICBjb25zdCBtaWxlcyA9IG1ldHJlcyAvIE1FVFJFU19UT19NSUxFU19DT05WRVJTSU9OO1xyXG5cclxuICAgIGlmIChkZWNpbWFsUGxhY2VzID49IDApIHtcclxuICAgICAgcmV0dXJuIE51bWJlcihtaWxlcy50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWlsZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBjb252ZXJ0IHNlY29uZHMgdG8gaG91cnNcclxuICAgKiBAcGFyYW0gc2Vjb25kcyAtIHRvIGNvbnZlcnRcclxuICAgKiBAcGFyYW0gZGVjaW1hbFBsYWNlcyAtIHRoZSBhbW91bnQgb2YgZC5wIHRvIGNvbnZlcnQgdG8sIGlmIG5lZ2F0aXZlIChkZWZhdWx0KSBkb2VzIG5vdCByZXN0cmljdCB0aGUgZGVjaW1hbCBwbGFjZXNcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGNvbnZlcnRTZWNvbmRzVG9Ib3VycyhzZWNvbmRzOiBudW1iZXIsIGRlY2ltYWxQbGFjZXM6IG51bWJlciA9IC0xKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGhvdXJzID0gc2Vjb25kcyAvIFRJTUVfQkFTRSAvIFRJTUVfQkFTRTtcclxuXHJcbiAgICBpZiAoZGVjaW1hbFBsYWNlcyA+PSAwKSB7XHJcbiAgICAgIHJldHVybiBOdW1iZXIoaG91cnMudG9GaXhlZChkZWNpbWFsUGxhY2VzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhvdXJzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gY29udmVydCBzZWNvbmRzIHRvIG1pbnNcclxuICAgKiBAcGFyYW0gc2Vjb25kcyAtIHRvIGNvbnZlcnRcclxuICAgKiBAcGFyYW0gZGVjaW1hbFBsYWNlcyAtIHRoZSBhbW91bnQgb2YgZC5wIHRvIGNvbnZlcnQgdG8sIGlmIG5lZ2F0aXZlIChkZWZhdWx0KSBkb2VzIG5vdCByZXN0cmljdCB0aGUgZGVjaW1hbCBwbGFjZXNcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGNvbnZlcnRTZWNvbmRzVG9NaW5zKHNlY29uZHM6IG51bWJlciwgZGVjaW1hbFBsYWNlczogbnVtYmVyID0gLTEpOiBudW1iZXIge1xyXG4gICAgY29uc3QgaG91cnMgPSBzZWNvbmRzIC8gVElNRV9CQVNFO1xyXG5cclxuICAgIGlmIChkZWNpbWFsUGxhY2VzID49IDApIHtcclxuICAgICAgcmV0dXJuIE51bWJlcihob3Vycy50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaG91cnM7XHJcbiAgfVxyXG5cclxuICBhZGRSYWlsQWN0aW9uUnVsZXMoXHJcbiAgICBmYXJlOiBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgICBydWxlczogUnVsZXNbXVxyXG4gICk6IE9CVFJhaWxKb3VybmV5RmFyZSB7XHJcbiAgICByZXR1cm4gcnVsZXMucmVkdWNlKChmYXJlMTogT0JUUmFpbEpvdXJuZXlGYXJlLCBydWxlOiBSdWxlcykgPT4ge1xyXG4gICAgICBpZiAoaXNTZXQocnVsZT8udW5hdmFpbGFibGUpKSB7XHJcbiAgICAgICAgZmFyZTEudW5hdmFpbGFibGUgPSBydWxlLnVuYXZhaWxhYmxlIGFzIGJvb2xlYW47XHJcbiAgICAgICAgZmFyZTEudW5hdmFpbGFibGVNZXNzYWdlID0gcnVsZS51bmF2YWlsYWJsZU1lc3NhZ2UgYXMgc3RyaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpc1NldChydWxlPy5yZXF1aXJlc1JlYXNvbikpIHtcclxuICAgICAgICBmYXJlMS5yZXF1aXJlc1JlYXNvbiA9IHJ1bGUucmVxdWlyZXNSZWFzb24gYXMgYm9vbGVhbjtcclxuICAgICAgICBmYXJlMS5yZXF1aXJlc1JlYXNvbk1lc3NhZ2UgPSBydWxlLnJlcXVpcmVzUmVhc29uTWVzc2FnZSBhcyBzdHJpbmc7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhcmUxO1xyXG4gICAgfSwgZmFyZSk7XHJcbiAgfVxyXG5cclxuICBtYXA8VD4ob2JqOiBSZWNvcmQ8c3RyaW5nLCBUPiwgZnVuYzogKG5leHQ6IFQpID0+IFQpOiBSZWNvcmQ8c3RyaW5nLCBUPiB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcclxuICAgICAge30sXHJcbiAgICAgIC4uLk9iamVjdC5lbnRyaWVzKG9iaikubWFwKChba2V5LCB2YWx1ZV06IFtzdHJpbmcsIFRdKTogUmVjb3JkPFxyXG4gICAgICAgIHN0cmluZyxcclxuICAgICAgICBUXHJcbiAgICAgID4gPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBba2V5XTogZnVuYyh2YWx1ZSlcclxuICAgICAgICB9O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG1lcmdlT2JqZWN0czxUPiguLi5vYmpzOiBUW10pOiBUIHtcclxuICAgIHJldHVybiBvYmpzLnJlZHVjZSgoY3VycmVudDogVCwgbmV4dDogVCkgPT4ge1xyXG4gICAgICByZXR1cm4gXy5tZXJnZShjdXJyZW50LCBuZXh0KSBhcyBUO1xyXG4gICAgfSwge30gYXMgVCk7XHJcbiAgfVxyXG5cclxuICBpbnRlcmNlcHRNZXRob2RDYWxsczxUIGV4dGVuZHMgb2JqZWN0PihcclxuICAgIG9iajogVCxcclxuICAgIGZuOiAocHJvcDogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCBhcmc6IGFueVtdKSA9PiBhbnlcclxuICApOiBUIHtcclxuICAgIHJldHVybiBuZXcgUHJveHkob2JqLCB7XHJcbiAgICAgIGdldCh0YXJnZXQ6IGFueSwgcHJvcDogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXRbcHJvcF0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiBuZXcgUHJveHkodGFyZ2V0W3Byb3BdLCB7XHJcbiAgICAgICAgICAgIGFwcGx5OiAodGFyZ2V0MSwgdGhpc0FyZywgYXJndW1lbnRzTGlzdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGZuKHByb3AsIGFyZ3VtZW50c0xpc3QpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHRhcmdldDEsIHRoaXNBcmcsIGFyZ3VtZW50c0xpc3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSBhcyB1bmtub3duIGFzIFQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgdGhlIHByZXZpb3VzIHF1YXJ0ZXIgaG91ciBlLmcuIGlmIDI5IG1pbnMgLSByZXR1cm4gMTVcclxuICAgKiBAcGFyYW0gZGF0ZVRpbWUgLSBkYXRlL3RpbWUgaW4gbW9tZW50IGZvcm1hdFxyXG4gICAqIEByZXR1cm5zIG1vbWVudFxyXG4gICAqL1xyXG4gIGdldFJvdW5kZWREb3duUXVhcnRlckhvdXIoZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIGNvbnN0IG1pbnMgPSBkYXRlVGltZS5taW51dGVzKCk7XHJcblxyXG4gICAgaWYgKG1pbnMgPD0gMTUpIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgMCk7XHJcbiAgICB9IGVsc2UgaWYgKG1pbnMgPD0gMzApIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgMTUpO1xyXG4gICAgfSBlbHNlIGlmIChtaW5zIDw9IDQ1KSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDMwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDQ1KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0ZVRpbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgcm91bmRlZCB1cCBxdWFydGVyIGhvdXIgZS5nLiBpZiAyOSAtIHJldHVybiAzMFxyXG4gICAqIEBwYXJhbSBkYXRlVGltZSAtIGRhdGUvdGltZSBpbiBtb21lbnQgZm9ybWF0XHJcbiAgICogQHJldHVybnMgbW9tZW50XHJcbiAgICovXHJcbiAgZ2V0Um91bmRlZFVwUXVhcnRlckhvdXIoZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIGNvbnN0IG1pbnMgPSBkYXRlVGltZS5taW51dGVzKCk7XHJcblxyXG4gICAgaWYgKG1pbnMgPD0gMTUpIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgMTUpO1xyXG4gICAgfSBlbHNlIGlmIChtaW5zIDw9IDMwKSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDMwKTtcclxuICAgIH0gZWxzZSBpZiAobWlucyA8PSA0NSkge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCA0NSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAwKTtcclxuICAgICAgZGF0ZVRpbWUuYWRkKDEsICdob3VyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGVUaW1lO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXNTZXQob2JqOiBhbnkpOiBib29sZWFuIHtcclxuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsO1xyXG59XHJcbiJdfQ==
|