@sabstravtech/obtservices 0.0.19020100 → 0.0.22041208
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/with-component.d.ts +2 -1
- package/angular/fetchers.d.ts +17 -12
- package/angular/lib/vendor/classes/helpers.d.ts +8 -0
- package/angular/lib/vendor/fetchers/apply-JIT-hotel-rules.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/apply-jit-flight-rules.d.ts +7 -0
- package/angular/lib/vendor/fetchers/basket-fetcher.d.ts +2 -1
- package/angular/lib/vendor/fetchers/conferma-office.fetcher.d.ts +2 -1
- package/angular/lib/vendor/fetchers/flight-fare-rules.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/flight-quote.fetcher.d.ts +2 -1
- package/angular/lib/vendor/fetchers/get-conferma-room-images.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-covid-microsite-token.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-flight-seat-map-fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-rail-live-departures.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-user-favourite-searches.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/irl-discount-card-fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/search-airlines-fetcher.d.ts +2 -1
- package/angular/lib/vendor/fetchers/search-airports-fetcher.d.ts +2 -1
- package/angular/lib/vendor/fetchers/search-conferma-cities.fetcher.d.ts +2 -1
- package/angular/lib/vendor/fetchers/user-fetcher.d.ts +2 -1
- package/angular/lib/vendor/services/my-bookings.service.d.ts +4 -3
- package/angular/lib/vendor/services/search.service.d.ts +15 -3
- package/angular/lib/vendor/services/user.service.d.ts +4 -3
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +1062 -1062
- package/angular/lib/vendor/updaters/cancel-booking-updater.d.ts +6 -0
- package/angular/lib/vendor/updaters/confirm-messages-updater.d.ts +6 -0
- package/angular/lib/vendor/updaters/remove-favourite-search.updater.d.ts +6 -0
- package/angular/lib/vendor/updaters/save-favourite-search.updater.d.ts +6 -0
- package/angular/sabstravtech-obtservices-angular.d.ts +14 -9
- package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
- package/angular/updaters.d.ts +3 -0
- package/base/classes.d.ts +1 -0
- package/base/fetchers.d.ts +27 -3
- package/base/interfaces.d.ts +3 -3
- package/base/lib/vendor/classes/base-enterprise.d.ts +5 -2
- package/base/lib/vendor/classes/bookable-basket.d.ts +1 -1
- package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +8 -7
- package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +11 -2
- package/base/lib/vendor/classes/enviroment.d.ts +2 -0
- package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +26 -69
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +39 -22
- package/base/lib/vendor/classes/helpers.d.ts +49 -6
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +19 -8
- package/base/lib/vendor/classes/irl-direction.enum.d.ts +4 -0
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +285 -30
- package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +7 -3
- package/base/lib/vendor/classes/management-info-and-valid.d.ts +1 -0
- package/base/lib/vendor/classes/modal-types.enum.d.ts +4 -0
- package/base/lib/vendor/classes/parking-enterprise-search.d.ts +7 -3
- package/base/lib/vendor/classes/rail-direction.enum.d.ts +2 -2
- package/base/lib/vendor/classes/rail-enterprise-search.d.ts +83 -54
- package/base/lib/vendor/classes/rail-index-to-ticket.d.ts +9 -0
- package/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +1 -0
- package/base/lib/vendor/classes/user-favourite.enum.d.ts +3 -0
- package/base/lib/vendor/fetchers/apply-JIT-hotel-rules.fetcher.d.ts +23 -0
- package/base/lib/vendor/fetchers/apply-jit-flight-rules.d.ts +21 -0
- package/base/lib/vendor/fetchers/basket-fetcher.d.ts +2 -1
- package/base/lib/vendor/fetchers/conferma-office.fetcher.d.ts +2 -1
- package/base/lib/vendor/fetchers/flight-fare-rules.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/flight-quote.fetcher.d.ts +6 -2
- package/base/lib/vendor/fetchers/get-conferma-room-images.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-covid-microsite-token.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-flight-seat-map-fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-rail-live-departures.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-user-favourite-searches.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/irl-discount-card-fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/list-fetchable-enterprise.d.ts +1 -1
- package/base/lib/vendor/fetchers/object-fetchable-enterprise.d.ts +3 -1
- package/base/lib/vendor/fetchers/search-airlines.fetcher.d.ts +2 -1
- package/base/lib/vendor/fetchers/search-airports-fetcher.d.ts +2 -1
- package/base/lib/vendor/fetchers/search-conferma-cities.fetcher.d.ts +2 -1
- package/base/lib/vendor/fetchers/user-fetcher.d.ts +2 -1
- package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +3 -2
- package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +4 -1
- package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +4 -3
- package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +8 -4
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +15 -4
- package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +8 -22
- package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +15 -10
- package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +4 -2
- package/base/lib/vendor/interfaces/Imybookings.service.d.ts +2 -1
- package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +3 -2
- package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +31 -31
- package/base/lib/vendor/interfaces/Isearch.service.d.ts +12 -3
- package/base/lib/vendor/interfaces/Iuser.service.d.ts +3 -1
- package/base/lib/vendor/interfaces/cab-hire-search-arg.interface.d.ts +10 -0
- package/base/lib/vendor/interfaces/car-hire-search-arg.interface.d.ts +42 -0
- package/base/lib/vendor/interfaces/enable-fresh-chat-interface.d.ts +7 -0
- package/base/lib/vendor/interfaces/eurostar-search-arg.interface.d.ts +6 -0
- package/base/lib/vendor/interfaces/flight-filters.interface.d.ts +1 -0
- package/base/lib/vendor/interfaces/flight-search-args.interface.d.ts +8 -0
- package/base/lib/vendor/interfaces/hotel-recent-search-args.interface.d.ts +4 -0
- package/base/lib/vendor/interfaces/irl-search-arg.interface.d.ts +5 -0
- package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +11 -5
- package/base/lib/vendor/interfaces/rail-recent-search-args.interface.d.ts +16 -11
- package/base/lib/vendor/interfaces/rail-selected-ticket.interface.d.ts +4 -9
- package/base/lib/vendor/interfaces/summary-interface.d.ts +23 -0
- package/base/lib/vendor/interfaces/terms-and-conditions.interface.d.ts +4 -0
- package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
- package/base/lib/vendor/services/enterprise-basket.service.d.ts +5 -3
- package/base/lib/vendor/services/hotel-avallibility.service.d.ts +5 -3
- package/base/lib/vendor/services/my-bookings.service.d.ts +6 -3
- package/base/lib/vendor/services/search.service.d.ts +46 -10
- package/base/lib/vendor/services/user.service.d.ts +9 -4
- package/base/lib/vendor/types/graphql.types.d.ts +982 -1051
- package/base/lib/vendor/types/types.d.ts +187 -14
- package/base/lib/vendor/updaters/cancel-booking-updater.d.ts +20 -0
- package/base/lib/vendor/updaters/confirm-messages-updater.d.ts +19 -0
- package/base/lib/vendor/updaters/remove-favourite-search-updater.d.ts +19 -0
- package/base/lib/vendor/updaters/save-favourite-search-updater.d.ts +20 -0
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/base/updaters.d.ts +4 -0
- package/bundles/sabstravtech-obtservices-angular.umd.js +763 -158
- 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 +8805 -7342
- 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 +9 -5
- package/esm2015/angular/components/with-component.js +7 -4
- package/esm2015/angular/fetchers.js +18 -13
- package/esm2015/angular/lib/vendor/classes/helpers.js +21 -4
- package/esm2015/angular/lib/vendor/fetchers/apply-JIT-hotel-rules.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/apply-jit-flight-rules.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/basket-fetcher.js +8 -5
- package/esm2015/angular/lib/vendor/fetchers/conferma-office.fetcher.js +8 -5
- package/esm2015/angular/lib/vendor/fetchers/flight-fare-rules.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/flight-quote.fetcher.js +8 -5
- package/esm2015/angular/lib/vendor/fetchers/get-conferma-room-images.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-covid-microsite-token.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-flight-seat-map-fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-rail-live-departures.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-user-favourite-searches.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/irl-discount-card-fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/search-airlines-fetcher.js +8 -5
- package/esm2015/angular/lib/vendor/fetchers/search-airports-fetcher.js +8 -5
- package/esm2015/angular/lib/vendor/fetchers/search-conferma-cities.fetcher.js +8 -5
- package/esm2015/angular/lib/vendor/fetchers/user-fetcher.js +8 -5
- package/esm2015/angular/lib/vendor/services/my-bookings.service.js +8 -5
- package/esm2015/angular/lib/vendor/services/search.service.js +69 -33
- package/esm2015/angular/lib/vendor/services/user.service.js +9 -6
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +1467 -2520
- package/esm2015/angular/lib/vendor/updaters/cancel-booking-updater.js +22 -0
- package/esm2015/angular/lib/vendor/updaters/confirm-messages-updater.js +22 -0
- package/esm2015/angular/lib/vendor/updaters/remove-favourite-search.updater.js +22 -0
- package/esm2015/angular/lib/vendor/updaters/save-favourite-search.updater.js +22 -0
- package/esm2015/angular/obtservices.module.js +17 -1
- package/esm2015/angular/sabstravtech-obtservices-angular.js +15 -10
- package/esm2015/angular/updaters.js +4 -1
- package/esm2015/base/classes.js +2 -1
- package/esm2015/base/fetchers.js +28 -4
- package/esm2015/base/interfaces.js +4 -4
- package/esm2015/base/lib/vendor/classes/base-enterprise.js +14 -14
- package/esm2015/base/lib/vendor/classes/bookable-basket.js +11 -6
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +76 -103
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +121 -18
- package/esm2015/base/lib/vendor/classes/enviroment.js +3 -1
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +540 -677
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +676 -298
- package/esm2015/base/lib/vendor/classes/helpers.js +260 -70
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +289 -123
- package/esm2015/base/lib/vendor/classes/irl-direction.enum.js +6 -0
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +412 -694
- package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +98 -5
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +49 -30
- package/esm2015/base/lib/vendor/classes/modal-types.enum.js +5 -1
- package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +61 -5
- package/esm2015/base/lib/vendor/classes/rail-direction.enum.js +3 -3
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +1024 -682
- package/esm2015/base/lib/vendor/classes/rail-index-to-ticket.js +48 -0
- package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +16 -4
- package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +4 -1
- package/esm2015/base/lib/vendor/fetchers/apply-JIT-hotel-rules.fetcher.js +22 -0
- package/esm2015/base/lib/vendor/fetchers/apply-jit-flight-rules.js +10 -0
- package/esm2015/base/lib/vendor/fetchers/basket-fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/conferma-office.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/flight-fare-rules.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/flight-quote.fetcher.js +12 -4
- package/esm2015/base/lib/vendor/fetchers/get-conferma-room-images.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-covid-microsite-token.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-flight-seat-map-fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-rail-live-departures.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-user-favourite-searches.fetcher.js +10 -0
- package/esm2015/base/lib/vendor/fetchers/irl-discount-card-fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/list-fetchable-enterprise.js +5 -3
- package/esm2015/base/lib/vendor/fetchers/object-fetchable-enterprise.js +4 -3
- package/esm2015/base/lib/vendor/fetchers/search-airlines.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/search-airports-fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/search-conferma-cities.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/user-fetcher.js +3 -3
- 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/Iflight-enterprise-search.js +7 -1
- package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -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/Iuser.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/cab-hire-search-arg.interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/car-hire-search-arg.interface.js +3 -0
- package/esm2015/base/lib/vendor/interfaces/enable-fresh-chat-interface.js +3 -0
- package/esm2015/base/lib/vendor/interfaces/eurostar-search-arg.interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/flight-filters.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/flight-search-args.interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/hotel-recent-search-args.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/irl-search-arg.interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/rail-recent-search-args.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/rail-selected-ticket.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/summary-interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/terms-and-conditions.interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +107 -57
- package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +43 -5
- package/esm2015/base/lib/vendor/services/my-bookings.service.js +6 -2
- package/esm2015/base/lib/vendor/services/search.service.js +110 -46
- package/esm2015/base/lib/vendor/services/user.service.js +13 -2
- package/esm2015/base/lib/vendor/types/graphql.types.js +35 -28
- package/esm2015/base/lib/vendor/types/types.js +35 -2
- package/esm2015/base/lib/vendor/updaters/cancel-booking-updater.js +11 -0
- package/esm2015/base/lib/vendor/updaters/confirm-messages-updater.js +11 -0
- package/esm2015/base/lib/vendor/updaters/remove-favourite-search-updater.js +11 -0
- package/esm2015/base/lib/vendor/updaters/save-favourite-search-updater.js +11 -0
- package/esm2015/base/updaters.js +5 -1
- package/fesm2015/sabstravtech-obtservices-angular.js +1554 -2350
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +8088 -6752
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
- package/base/lib/vendor/interfaces/rail-journey-leg.interface.d.ts +0 -6
- package/base/lib/vendor/interfaces/rail-ticket-group.interface.d.ts +0 -26
- package/base/lib/vendor/interfaces/rail-ticket-groups.interface.d.ts +0 -4
- package/esm2015/base/lib/vendor/interfaces/rail-journey-leg.interface.js +0 -2
- package/esm2015/base/lib/vendor/interfaces/rail-ticket-group.interface.js +0 -2
- package/esm2015/base/lib/vendor/interfaces/rail-ticket-groups.interface.js +0 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import moment from 'moment';
|
|
3
3
|
import _ from 'lodash';
|
|
4
|
-
import { FlightDirectionEnum } from '../types/types';
|
|
5
|
-
import { PassengerType, ServiceType } from '../types/graphql.types';
|
|
4
|
+
import { FlightDirectionEnum, OBTFlightCabinClass } from '../types/types';
|
|
5
|
+
import { FlightCabinClass, PassengerType, ServiceType } from '../types/graphql.types';
|
|
6
6
|
import { Memorise } from './limited-cache.class';
|
|
7
7
|
const FLIGHT_MAX_CHILD_AGE_YEARS = 16;
|
|
8
8
|
const RAIL_MAX_CHILD_AGE_YEARS = 12;
|
|
@@ -13,44 +13,8 @@ const FLIGHT_MAX_INFANT_AGE_YEARS = 0;
|
|
|
13
13
|
const RAIL_MAX_INFANT_AGE_YEARS = 0;
|
|
14
14
|
const COACH_MAX_INFANT_AGE_YEARS = 0;
|
|
15
15
|
const LOUNGES_MAX_INFANT_AGE_YEARS = 0;
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
'Feb',
|
|
19
|
-
'Mar',
|
|
20
|
-
'Apr',
|
|
21
|
-
'May',
|
|
22
|
-
'Jun',
|
|
23
|
-
'Jul',
|
|
24
|
-
'Aug',
|
|
25
|
-
'Sep',
|
|
26
|
-
'Oct',
|
|
27
|
-
'Nov',
|
|
28
|
-
'Dec'
|
|
29
|
-
];
|
|
30
|
-
const full_months = [
|
|
31
|
-
'January',
|
|
32
|
-
'February',
|
|
33
|
-
'March',
|
|
34
|
-
'April',
|
|
35
|
-
'May',
|
|
36
|
-
'June',
|
|
37
|
-
'July',
|
|
38
|
-
'August',
|
|
39
|
-
'September',
|
|
40
|
-
'October',
|
|
41
|
-
'November',
|
|
42
|
-
'December'
|
|
43
|
-
];
|
|
44
|
-
const weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
|
45
|
-
const full_weekdays = [
|
|
46
|
-
'Sunday',
|
|
47
|
-
'Monday',
|
|
48
|
-
'Tuesday',
|
|
49
|
-
'Wednesday',
|
|
50
|
-
'Thursday',
|
|
51
|
-
'Friday',
|
|
52
|
-
'Saturday'
|
|
53
|
-
];
|
|
16
|
+
const METRES_TO_MILES_CONVERSION = 1609;
|
|
17
|
+
const TIME_BASE = 60;
|
|
54
18
|
export class BaseHelperRoutines {
|
|
55
19
|
minToHour(dur) {
|
|
56
20
|
return `${Math.floor(dur / 60)}h ${dur % 60}m`;
|
|
@@ -134,6 +98,10 @@ export class BaseHelperRoutines {
|
|
|
134
98
|
date = moment(date);
|
|
135
99
|
return date.format(BaseHelperRoutines.ISO_DATA_FORMAT_TIME);
|
|
136
100
|
}
|
|
101
|
+
formatGraphQLDateTime(date) {
|
|
102
|
+
date = moment(date);
|
|
103
|
+
return date.format(BaseHelperRoutines.GRAPHQL_DATA_FORMAT_TIME);
|
|
104
|
+
}
|
|
137
105
|
formatIsoDateNoHyphans(date) {
|
|
138
106
|
date = moment(date);
|
|
139
107
|
return date.format(BaseHelperRoutines.ISO_DATA_FORMAT_NO_HYPHANS);
|
|
@@ -600,32 +568,57 @@ export class BaseHelperRoutines {
|
|
|
600
568
|
.reduce((configs, configItem) => {
|
|
601
569
|
if (configItem && configItem[field]) {
|
|
602
570
|
configs[configItem[field]] = configItem;
|
|
603
|
-
return configs;
|
|
604
571
|
}
|
|
572
|
+
return configs;
|
|
605
573
|
}, {});
|
|
606
574
|
}
|
|
607
|
-
|
|
575
|
+
setFieldInObject(obj, fields, value) {
|
|
576
|
+
if (fields.length === 0) {
|
|
577
|
+
throw new Error('Invalid field');
|
|
578
|
+
}
|
|
579
|
+
if (!obj) {
|
|
580
|
+
obj = {};
|
|
581
|
+
}
|
|
582
|
+
if (fields.length === 1) {
|
|
583
|
+
obj[fields[0]] = obj[fields[0]] || [];
|
|
584
|
+
obj[fields[0]].push(value);
|
|
585
|
+
}
|
|
586
|
+
else {
|
|
587
|
+
const field = fields[0];
|
|
588
|
+
obj[field] = this.setFieldInObject(obj[field], fields.slice(1), value);
|
|
589
|
+
}
|
|
590
|
+
return obj;
|
|
591
|
+
}
|
|
592
|
+
arrayToObjectArray(array, fields) {
|
|
608
593
|
return array
|
|
609
594
|
.filter((data) => !!data)
|
|
610
595
|
.reduce((configs, configItem) => {
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
596
|
+
const fieldValues = fields.reduce((accum, field) => {
|
|
597
|
+
const fetchValue = Array.isArray(field)
|
|
598
|
+
? field
|
|
599
|
+
.map((key) => this.fieldFromObject(configItem, key))
|
|
600
|
+
.join('_')
|
|
601
|
+
: this.fieldFromObject(configItem, field);
|
|
602
|
+
if (accum && fetchValue) {
|
|
603
|
+
accum.push(fetchValue);
|
|
604
|
+
return accum;
|
|
605
|
+
}
|
|
606
|
+
return null;
|
|
607
|
+
}, []);
|
|
608
|
+
if (configItem && fieldValues) {
|
|
609
|
+
return this.setFieldInObject(configs, fieldValues, configItem);
|
|
615
610
|
}
|
|
616
611
|
}, {});
|
|
617
612
|
}
|
|
618
613
|
getTerminals(airport) {
|
|
619
614
|
return airport.terminals;
|
|
620
615
|
}
|
|
621
|
-
fieldFromObject(obj,
|
|
622
|
-
return (
|
|
623
|
-
.split('.')
|
|
624
|
-
.reduce((current, field1) => {
|
|
616
|
+
fieldFromObject(obj, fields) {
|
|
617
|
+
return (Array.isArray(fields) ? fields : (fields || '').split('.')).reduce((current, field1) => {
|
|
625
618
|
if (current && current[field1]) {
|
|
626
619
|
return current[field1];
|
|
627
620
|
}
|
|
628
|
-
return
|
|
621
|
+
return null;
|
|
629
622
|
}, obj);
|
|
630
623
|
}
|
|
631
624
|
mapFieldFromObject(field) {
|
|
@@ -651,11 +644,13 @@ export class BaseHelperRoutines {
|
|
|
651
644
|
}
|
|
652
645
|
else if (typeof query === 'object') {
|
|
653
646
|
return Object.keys(query).reduce((accum, key) => {
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
(
|
|
658
|
-
|
|
647
|
+
if (key[0] !== '_') {
|
|
648
|
+
const value = query[key];
|
|
649
|
+
const data = this.removeNulls(value);
|
|
650
|
+
if ((data !== null && data !== undefined && data !== 'null') ||
|
|
651
|
+
(Array.isArray(data) && data.length > 0)) {
|
|
652
|
+
accum[key] = data;
|
|
653
|
+
}
|
|
659
654
|
}
|
|
660
655
|
return accum;
|
|
661
656
|
}, {});
|
|
@@ -1051,9 +1046,22 @@ export class BaseHelperRoutines {
|
|
|
1051
1046
|
}
|
|
1052
1047
|
createFlightFilters(journeys, defaultFilters) {
|
|
1053
1048
|
return journeys.reduce((filters, result1) => {
|
|
1054
|
-
const
|
|
1055
|
-
filters.stops[
|
|
1056
|
-
display:
|
|
1049
|
+
const outStops = result1.outboundFlights.length - 1;
|
|
1050
|
+
filters.stops[outStops] = filters.stops[outStops] || {
|
|
1051
|
+
display: outStops === 0
|
|
1052
|
+
? 'Direct'
|
|
1053
|
+
: `${outStops} stop` + (outStops !== 1 ? 's' : ''),
|
|
1054
|
+
selected: false,
|
|
1055
|
+
value: outStops + 1
|
|
1056
|
+
};
|
|
1057
|
+
const inStops = result1.inboundFlights
|
|
1058
|
+
? result1.inboundFlights.length - 1
|
|
1059
|
+
: 0;
|
|
1060
|
+
const totalStops = inStops > outStops ? inStops : outStops;
|
|
1061
|
+
filters.totalStops[totalStops] = filters.totalStops[totalStops] || {
|
|
1062
|
+
display: totalStops === 0
|
|
1063
|
+
? 'Direct'
|
|
1064
|
+
: `${totalStops} stop` + (totalStops !== 1 ? 's' : ''),
|
|
1057
1065
|
selected: false,
|
|
1058
1066
|
value: totalStops + 1
|
|
1059
1067
|
};
|
|
@@ -1070,19 +1078,26 @@ export class BaseHelperRoutines {
|
|
|
1070
1078
|
};
|
|
1071
1079
|
};
|
|
1072
1080
|
result1.outboundFlights.forEach(updateFlightItems);
|
|
1073
|
-
const
|
|
1081
|
+
const baggageArray = result1.baggageAllowance.map((baggageAllowance) => baggageAllowance.qty);
|
|
1082
|
+
const baggage = baggageArray.length
|
|
1083
|
+
? Math.min(...baggageArray)
|
|
1084
|
+
: 0;
|
|
1074
1085
|
filters.baggage[baggage] = filters.baggage[baggage] || {
|
|
1075
1086
|
selected: false,
|
|
1076
|
-
display: `${baggage} bag${baggage
|
|
1087
|
+
display: `${baggage} bag${baggage > 1 ? 's' : ''}`,
|
|
1077
1088
|
value: baggage
|
|
1078
1089
|
};
|
|
1079
1090
|
const indexedFlight = (flights, filterAttribute, flightAttribute, flightAttributeName, index) => {
|
|
1080
|
-
const temp = flights[index]
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1091
|
+
const temp = flights && flights[index]
|
|
1092
|
+
? flights[index][flightAttribute]
|
|
1093
|
+
: undefined;
|
|
1094
|
+
if (temp !== undefined) {
|
|
1095
|
+
filters[filterAttribute][temp] = filters[filterAttribute][temp] || {
|
|
1096
|
+
value: flights[index][flightAttribute],
|
|
1097
|
+
display: flights[index][flightAttributeName],
|
|
1098
|
+
selected: false
|
|
1099
|
+
};
|
|
1100
|
+
}
|
|
1086
1101
|
};
|
|
1087
1102
|
indexedFlight(result1.outboundFlights, 'depatureAirport', 'originAirport', 'originAirportName', 0);
|
|
1088
1103
|
indexedFlight(result1.outboundFlights, 'arrivalAirport', 'destinationAirport', 'destinationAirportName', result1.outboundFlights.length - 1);
|
|
@@ -1121,7 +1136,7 @@ export class BaseHelperRoutines {
|
|
|
1121
1136
|
filters.arrivalTime.max > arrivalTime
|
|
1122
1137
|
? filters.arrivalTime.max
|
|
1123
1138
|
: arrivalTime;
|
|
1124
|
-
if (result1.inboundFlights && result1.
|
|
1139
|
+
if (result1.inboundFlights && result1.inboundFlights.length > 0) {
|
|
1125
1140
|
filters.returnDuration.min =
|
|
1126
1141
|
filters.returnDuration.min < result1.inboundTotalDuration
|
|
1127
1142
|
? filters.returnDuration.min
|
|
@@ -1130,7 +1145,9 @@ export class BaseHelperRoutines {
|
|
|
1130
1145
|
filters.returnDuration.max > result1.inboundTotalDuration
|
|
1131
1146
|
? filters.returnDuration.max
|
|
1132
1147
|
: result1.inboundTotalDuration;
|
|
1133
|
-
const departTimeReturn =
|
|
1148
|
+
const departTimeReturn = result1 && result1.inboundFlights && result1.inboundFlights[0]
|
|
1149
|
+
? moment(result1.inboundFlights[0].dateTimeDeparting).get('hour')
|
|
1150
|
+
: -1;
|
|
1134
1151
|
filters.returnDepartureTime.min =
|
|
1135
1152
|
filters.returnDepartureTime.min < departTimeReturn
|
|
1136
1153
|
? filters.returnDepartureTime.min
|
|
@@ -1162,10 +1179,180 @@ export class BaseHelperRoutines {
|
|
|
1162
1179
|
return accum;
|
|
1163
1180
|
}, {});
|
|
1164
1181
|
}
|
|
1182
|
+
normaliseMinuteToBase10(min) {
|
|
1183
|
+
return Math.round((min * 100) / 60);
|
|
1184
|
+
}
|
|
1185
|
+
OBTFlightCabinClassToFlightCabinClass(value) {
|
|
1186
|
+
const OBTFlightCabinClassToFlightCabinClass = {
|
|
1187
|
+
[OBTFlightCabinClass.Business]: FlightCabinClass.Business,
|
|
1188
|
+
[OBTFlightCabinClass.BusinessBranded]: FlightCabinClass.Business,
|
|
1189
|
+
[OBTFlightCabinClass.EconomyFlexi]: FlightCabinClass.EconomyFlexi,
|
|
1190
|
+
[OBTFlightCabinClass.EconomyFlexiBranded]: FlightCabinClass.EconomyFlexi,
|
|
1191
|
+
[OBTFlightCabinClass.EconomyNoBags]: FlightCabinClass.EconomyNoBags,
|
|
1192
|
+
[OBTFlightCabinClass.EconomyNoBagsBranded]: FlightCabinClass.EconomyNoBags,
|
|
1193
|
+
[OBTFlightCabinClass.EconomyRestricted]: FlightCabinClass.EconomyRestricted,
|
|
1194
|
+
[OBTFlightCabinClass.EconomyRestrictedBranded]: FlightCabinClass.EconomyRestricted,
|
|
1195
|
+
[OBTFlightCabinClass.First]: FlightCabinClass.First,
|
|
1196
|
+
[OBTFlightCabinClass.FirstBranded]: FlightCabinClass.First,
|
|
1197
|
+
[OBTFlightCabinClass.PremiumEconomy]: FlightCabinClass.PremiumEconomy,
|
|
1198
|
+
[OBTFlightCabinClass.PremiumEconomyBranded]: FlightCabinClass.PremiumEconomy
|
|
1199
|
+
};
|
|
1200
|
+
return OBTFlightCabinClassToFlightCabinClass[value];
|
|
1201
|
+
}
|
|
1202
|
+
FlightCabinClassToBrandedOBTFlightCabinClass(value, isBranded) {
|
|
1203
|
+
const types = isBranded
|
|
1204
|
+
? {
|
|
1205
|
+
[FlightCabinClass.PremiumEconomy]: OBTFlightCabinClass.PremiumEconomyBranded,
|
|
1206
|
+
[FlightCabinClass.PremiumBusiness]: OBTFlightCabinClass.BusinessBranded,
|
|
1207
|
+
[FlightCabinClass.LiteEconomy]: OBTFlightCabinClass.EconomyRestrictedBranded,
|
|
1208
|
+
[FlightCabinClass.Economy]: OBTFlightCabinClass.EconomyRestrictedBranded,
|
|
1209
|
+
[FlightCabinClass.PremiumFirst]: OBTFlightCabinClass.FirstBranded,
|
|
1210
|
+
[FlightCabinClass.EconomyRestricted]: OBTFlightCabinClass.EconomyRestrictedBranded,
|
|
1211
|
+
[FlightCabinClass.PremiumEconomy]: OBTFlightCabinClass.PremiumEconomyBranded,
|
|
1212
|
+
[FlightCabinClass.EconomyFlexi]: OBTFlightCabinClass.EconomyFlexiBranded,
|
|
1213
|
+
[FlightCabinClass.EconomyNoBags]: OBTFlightCabinClass.EconomyNoBagsBranded,
|
|
1214
|
+
[FlightCabinClass.Business]: OBTFlightCabinClass.BusinessBranded,
|
|
1215
|
+
[FlightCabinClass.First]: OBTFlightCabinClass.FirstBranded
|
|
1216
|
+
}
|
|
1217
|
+
: {
|
|
1218
|
+
[FlightCabinClass.PremiumEconomy]: OBTFlightCabinClass.PremiumEconomy,
|
|
1219
|
+
[FlightCabinClass.PremiumBusiness]: OBTFlightCabinClass.Business,
|
|
1220
|
+
[FlightCabinClass.LiteEconomy]: OBTFlightCabinClass.EconomyRestricted,
|
|
1221
|
+
[FlightCabinClass.Economy]: OBTFlightCabinClass.EconomyRestricted,
|
|
1222
|
+
[FlightCabinClass.PremiumFirst]: OBTFlightCabinClass.First,
|
|
1223
|
+
[FlightCabinClass.EconomyRestricted]: OBTFlightCabinClass.EconomyRestricted,
|
|
1224
|
+
[FlightCabinClass.PremiumEconomy]: OBTFlightCabinClass.PremiumEconomy,
|
|
1225
|
+
[FlightCabinClass.EconomyFlexi]: OBTFlightCabinClass.EconomyFlexi,
|
|
1226
|
+
[FlightCabinClass.EconomyNoBags]: OBTFlightCabinClass.EconomyNoBags,
|
|
1227
|
+
[FlightCabinClass.Business]: OBTFlightCabinClass.Business,
|
|
1228
|
+
[FlightCabinClass.First]: OBTFlightCabinClass.First
|
|
1229
|
+
};
|
|
1230
|
+
return types[value];
|
|
1231
|
+
}
|
|
1232
|
+
/**
|
|
1233
|
+
* @description - convert from metres to miles
|
|
1234
|
+
* @param metres - the amount of metres to convert
|
|
1235
|
+
* @param decimalPlaces - the amount of d.p to convert to, if negative (default) does not restrict the decimal places
|
|
1236
|
+
*/
|
|
1237
|
+
convertMetresToMiles(metres, decimalPlaces = -1) {
|
|
1238
|
+
const miles = metres / METRES_TO_MILES_CONVERSION;
|
|
1239
|
+
if (decimalPlaces >= 0) {
|
|
1240
|
+
return Number(miles.toFixed(decimalPlaces));
|
|
1241
|
+
}
|
|
1242
|
+
return miles;
|
|
1243
|
+
}
|
|
1244
|
+
/**
|
|
1245
|
+
* @description - convert seconds to hours
|
|
1246
|
+
* @param seconds - to convert
|
|
1247
|
+
* @param decimalPlaces - the amount of d.p to convert to, if negative (default) does not restrict the decimal places
|
|
1248
|
+
* @returns
|
|
1249
|
+
*/
|
|
1250
|
+
convertSecondsToHours(seconds, decimalPlaces = -1) {
|
|
1251
|
+
const hours = seconds / TIME_BASE / TIME_BASE;
|
|
1252
|
+
if (decimalPlaces >= 0) {
|
|
1253
|
+
return Number(hours.toFixed(decimalPlaces));
|
|
1254
|
+
}
|
|
1255
|
+
return hours;
|
|
1256
|
+
}
|
|
1257
|
+
/**
|
|
1258
|
+
* @description - convert seconds to mins
|
|
1259
|
+
* @param seconds - to convert
|
|
1260
|
+
* @param decimalPlaces - the amount of d.p to convert to, if negative (default) does not restrict the decimal places
|
|
1261
|
+
* @returns
|
|
1262
|
+
*/
|
|
1263
|
+
convertSecondsToMins(seconds, decimalPlaces = -1) {
|
|
1264
|
+
const hours = seconds / TIME_BASE;
|
|
1265
|
+
if (decimalPlaces >= 0) {
|
|
1266
|
+
return Number(hours.toFixed(decimalPlaces));
|
|
1267
|
+
}
|
|
1268
|
+
return hours;
|
|
1269
|
+
}
|
|
1270
|
+
addRailActionRules(fare, rules) {
|
|
1271
|
+
return rules.reduce((fare1, rule) => {
|
|
1272
|
+
if (isSet(rule === null || rule === void 0 ? void 0 : rule.unavailable)) {
|
|
1273
|
+
fare1.unavailable = rule.unavailable;
|
|
1274
|
+
fare1.unavailableMessage = rule.unavailableMessage;
|
|
1275
|
+
}
|
|
1276
|
+
return fare1;
|
|
1277
|
+
}, fare);
|
|
1278
|
+
}
|
|
1279
|
+
map(obj, func) {
|
|
1280
|
+
return Object.assign({}, ...Object.entries(obj).map(([key, value]) => {
|
|
1281
|
+
return {
|
|
1282
|
+
[key]: func(value)
|
|
1283
|
+
};
|
|
1284
|
+
}));
|
|
1285
|
+
}
|
|
1286
|
+
mergeObjects(...objs) {
|
|
1287
|
+
return objs.reduce((current, next) => {
|
|
1288
|
+
return _.merge(current, next);
|
|
1289
|
+
}, {});
|
|
1290
|
+
}
|
|
1291
|
+
interceptMethodCalls(obj, fn) {
|
|
1292
|
+
return new Proxy(obj, {
|
|
1293
|
+
get(target, prop) {
|
|
1294
|
+
if (typeof target[prop] === 'function') {
|
|
1295
|
+
return new Proxy(target[prop], {
|
|
1296
|
+
apply: (target1, thisArg, argumentsList) => {
|
|
1297
|
+
fn(prop, argumentsList);
|
|
1298
|
+
return Reflect.apply(target1, thisArg, argumentsList);
|
|
1299
|
+
}
|
|
1300
|
+
});
|
|
1301
|
+
}
|
|
1302
|
+
else {
|
|
1303
|
+
return Reflect.get(target, prop);
|
|
1304
|
+
}
|
|
1305
|
+
}
|
|
1306
|
+
});
|
|
1307
|
+
}
|
|
1308
|
+
/**
|
|
1309
|
+
* @description - get the previous quarter hour e.g. if 29 mins - return 15
|
|
1310
|
+
* @param dateTime - date/time in moment format
|
|
1311
|
+
* @returns moment
|
|
1312
|
+
*/
|
|
1313
|
+
getRoundedDownQuarterHour(dateTime) {
|
|
1314
|
+
const mins = dateTime.minutes();
|
|
1315
|
+
if (mins <= 15) {
|
|
1316
|
+
dateTime.set('minutes', 0);
|
|
1317
|
+
}
|
|
1318
|
+
else if (mins <= 30) {
|
|
1319
|
+
dateTime.set('minutes', 15);
|
|
1320
|
+
}
|
|
1321
|
+
else if (mins <= 45) {
|
|
1322
|
+
dateTime.set('minutes', 30);
|
|
1323
|
+
}
|
|
1324
|
+
else {
|
|
1325
|
+
dateTime.set('minutes', 45);
|
|
1326
|
+
}
|
|
1327
|
+
return dateTime;
|
|
1328
|
+
}
|
|
1329
|
+
/**
|
|
1330
|
+
* @description - get rounded up quarter hour e.g. if 29 - return 30
|
|
1331
|
+
* @param dateTime - date/time in moment format
|
|
1332
|
+
* @returns moment
|
|
1333
|
+
*/
|
|
1334
|
+
getRoundedUpQuarterHour(dateTime) {
|
|
1335
|
+
const mins = dateTime.minutes();
|
|
1336
|
+
if (mins <= 15) {
|
|
1337
|
+
dateTime.set('minutes', 15);
|
|
1338
|
+
}
|
|
1339
|
+
else if (mins <= 30) {
|
|
1340
|
+
dateTime.set('minutes', 30);
|
|
1341
|
+
}
|
|
1342
|
+
else if (mins <= 45) {
|
|
1343
|
+
dateTime.set('minutes', 45);
|
|
1344
|
+
}
|
|
1345
|
+
else {
|
|
1346
|
+
dateTime.set('minutes', 0);
|
|
1347
|
+
dateTime.add(1, 'hour');
|
|
1348
|
+
}
|
|
1349
|
+
return dateTime;
|
|
1350
|
+
}
|
|
1165
1351
|
}
|
|
1166
1352
|
BaseHelperRoutines.READ_DATE_FORMAT = 'dd, D MMM YYYY';
|
|
1167
1353
|
BaseHelperRoutines.READ_TIME_FORMAT = 'HH:mm';
|
|
1168
1354
|
BaseHelperRoutines.DATE_FORMAT = 'YYMMDD';
|
|
1355
|
+
BaseHelperRoutines.GRAPHQL_DATA_FORMAT_TIME = 'YYYY-MM-DD HH:mm:ss';
|
|
1169
1356
|
BaseHelperRoutines.ISO_DATA_FORMAT = 'YYYY-MM-DD';
|
|
1170
1357
|
BaseHelperRoutines.ISO_DATA_FORMAT_TIME = 'YYYY-MM-DD HH:mm';
|
|
1171
1358
|
BaseHelperRoutines.ISO_DATA_FORMAT_NO_HYPHANS = 'YYYYMMDD';
|
|
@@ -1190,4 +1377,7 @@ __decorate([
|
|
|
1190
1377
|
__metadata("design:paramtypes", [Object, Number]),
|
|
1191
1378
|
__metadata("design:returntype", void 0)
|
|
1192
1379
|
], BaseHelperRoutines.prototype, "makeFareRules", null);
|
|
1193
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBVXZCLE9BQU8sRUFDTCxtQkFBbUIsRUFLcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBT0wsYUFBYSxFQUViLFdBQVcsRUFFWixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVFqRCxNQUFNLDBCQUEwQixHQUFHLEVBQUUsQ0FBQztBQUN0QyxNQUFNLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztBQUNwQyxNQUFNLDRCQUE0QixHQUFHLEVBQUUsQ0FBQztBQUN4QyxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztBQUNyQyxNQUFNLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztBQUN2QyxNQUFNLDJCQUEyQixHQUFHLENBQUMsQ0FBQztBQUN0QyxNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQUNwQyxNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQztBQUNyQyxNQUFNLDRCQUE0QixHQUFHLENBQUMsQ0FBQztBQUV2QyxNQUFNLE1BQU0sR0FBRztJQUNiLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztDQUNOLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRztJQUNsQixTQUFTO0lBQ1QsVUFBVTtJQUNWLE9BQU87SUFDUCxPQUFPO0lBQ1AsS0FBSztJQUNMLE1BQU07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QUFHLFFBQVEsQ0FBQztBQUN2QixrQ0FBZSxHQUFHLFlBQVksQ0FBQztBQUMvQix1Q0FBb0IsR0FBRyxrQkFBa0IsQ0FBQztBQUMxQyw2Q0FBMEIsR0FBRyxVQUFVLENBQUM7QUFDeEMsOEJBQVcsR0FBRyxNQUFNLENBQUM7QUFDckIsb0NBQWlCLEdBQUcsT0FBTyxDQUFDO0FBQzVCLDhCQUFXLEdBQUcsVUFBVSxDQUFDO0FBNDhCaEM7SUFEQyxRQUFRLEVBQUU7Ozs7MkRBR1Y7QUFHRDtJQURDLFFBQVEsRUFBRTs7Ozt1REFNVjtBQUdEO0lBREMsUUFBUSxFQUFFOzs7O3VEQWdDViIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuXHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFza2V0RGV0YWlscyxcclxuICBCYXNrZXRJdGVtTWFuYWdlbWVudEluZm9cclxufSBmcm9tICcuLi9zZXJ2aWNlcy9lbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkIH0gZnJvbSAnLi9tYW5hZ2VtZW50LWluZm8tYW5kLXZhbGlkJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2VzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBGbGlnaHREaXJlY3Rpb25FbnVtLFxyXG4gIE1pbk1heCxcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIFNjaGVtYSxcclxuICBVbnBhY2tlZFxyXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBBaXJwb3J0LFxyXG4gIEJhZ2dhZ2VBbGxvd2FuY2UsXHJcbiAgQmFza2V0SXRlbSxcclxuICBGYXJlQ29uZGl0aW9ucyxcclxuICBGbGlnaHRJdGluZXJhcnksXHJcbiAgRmxpZ2h0Sm91cm5leSxcclxuICBQYXNzZW5nZXJUeXBlLFxyXG4gIFNlcnZpY2UsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgVXNlclBhc3NlbmdlclR5cGVJbnB1dFxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQgeyBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzdXBwbGVtZW50YXJ5LWJvb2tpbmctaW5mby1pbXBsJztcclxuaW1wb3J0IHsgTWVtb3Jpc2UgfSBmcm9tICcuL2xpbWl0ZWQtY2FjaGUuY2xhc3MnO1xyXG5pbXBvcnQge1xyXG4gIEZsaWdodEZpbHRlcnMsXHJcbiAgRmxpZ2h0RmlsdGVyc1JlY29yZEtleXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1maWx0ZXJzLmludGVyZmFjZSc7XHJcblxyXG5kZWNsYXJlIHZhciBoZXhfaG1hY19tZDU6IGFueTtcclxuXHJcbmNvbnN0IEZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTY7XHJcbmNvbnN0IFJBSUxfTUFYX0NISUxEX0FHRV9ZRUFSUyA9IDEyO1xyXG5jb25zdCBFVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XHJcbmNvbnN0IENPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgPSAxNTtcclxuY29uc3QgTE9VTkdFU19NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XHJcbmNvbnN0IEZMSUdIVF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyA9IDA7XHJcbmNvbnN0IFJBSUxfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xyXG5jb25zdCBDT0FDSF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyA9IDA7XHJcbmNvbnN0IExPVU5HRVNfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xyXG5cclxuY29uc3QgbW9udGhzID0gW1xyXG4gICdKYW4nLFxyXG4gICdGZWInLFxyXG4gICdNYXInLFxyXG4gICdBcHInLFxyXG4gICdNYXknLFxyXG4gICdKdW4nLFxyXG4gICdKdWwnLFxyXG4gICdBdWcnLFxyXG4gICdTZXAnLFxyXG4gICdPY3QnLFxyXG4gICdOb3YnLFxyXG4gICdEZWMnXHJcbl07XHJcblxyXG5jb25zdCBmdWxsX21vbnRocyA9IFtcclxuICAnSmFudWFyeScsXHJcbiAgJ0ZlYnJ1YXJ5JyxcclxuICAnTWFyY2gnLFxyXG4gICdBcHJpbCcsXHJcbiAgJ01heScsXHJcbiAgJ0p1bmUnLFxyXG4gICdKdWx5JyxcclxuICAnQXVndXN0JyxcclxuICAnU2VwdGVtYmVyJyxcclxuICAnT2N0b2JlcicsXHJcbiAgJ05vdmVtYmVyJyxcclxuICAnRGVjZW1iZXInXHJcbl07XHJcblxyXG5jb25zdCB3ZWVrZGF5cyA9IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J107XHJcblxyXG5jb25zdCBmdWxsX3dlZWtkYXlzID0gW1xyXG4gICdTdW5kYXknLFxyXG4gICdNb25kYXknLFxyXG4gICdUdWVzZGF5JyxcclxuICAnV2VkbmVzZGF5JyxcclxuICAnVGh1cnNkYXknLFxyXG4gICdGcmlkYXknLFxyXG4gICdTYXR1cmRheSdcclxuXTtcclxuXHJcbmV4cG9ydCBjbGFzcyBCYXNlSGVscGVyUm91dGluZXMge1xyXG4gIHN0YXRpYyBSRUFEX0RBVEVfRk9STUFUID0gJ2RkLCBEIE1NTSBZWVlZJztcclxuICBzdGF0aWMgUkVBRF9USU1FX0ZPUk1BVCA9ICdISDptbSc7XHJcbiAgc3RhdGljIERBVEVfRk9STUFUID0gJ1lZTU1ERCc7XHJcbiAgc3RhdGljIElTT19EQVRBX0ZPUk1BVCA9ICdZWVlZLU1NLUREJztcclxuICBzdGF0aWMgSVNPX0RBVEFfRk9STUFUX1RJTUUgPSAnWVlZWS1NTS1ERCBISDptbSc7XHJcbiAgc3RhdGljIElTT19EQVRBX0ZPUk1BVF9OT19IWVBIQU5TID0gJ1lZWVlNTUREJztcclxuICBzdGF0aWMgVElNRV9GT1JNQVQgPSAnSEhtbSc7XHJcbiAgc3RhdGljIFRJTUVfRk9STUFUX0NPTE9OID0gJ0hIOm1tJztcclxuICBzdGF0aWMgTU1ERFlZX0RBVEUgPSAnRERNTVlZWVknO1xyXG5cclxuICBtaW5Ub0hvdXIoZHVyOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBgJHtNYXRoLmZsb29yKGR1ciAvIDYwKX1oICR7ZHVyICUgNjB9bWA7XHJcbiAgfVxyXG5cclxuICBtYWtlQ29sb25UaW1lKHRpbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRpbWUuc3Vic3RyaW5nKDAsIDIpICsgJzonICsgdGltZS5zdWJzdHJpbmcoMiwgNCk7XHJcbiAgfVxyXG5cclxuICBub25OdWxsTWluKGtleTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xyXG4gICAgcmV0dXJuIGFyZ3MucmVkdWNlKFxyXG4gICAgICAoY3VycmVudCwgaXRlbSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW1ba2V5XSkge1xyXG4gICAgICAgICAgaWYgKGN1cnJlbnQubWluID4gTnVtYmVyKGl0ZW1ba2V5XSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgaXRlbSwgbWluOiBOdW1iZXIoaXRlbVtrZXldKSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3VycmVudDtcclxuICAgICAgfSxcclxuICAgICAgeyBtaW46IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBpdGVtOiBudWxsIH1cclxuICAgICkuaXRlbTtcclxuICB9XHJcblxyXG4gIGpvaW5CeUNvbW1hKC4uLmF0dHJpYnV0ZXM6IGFueVtdKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBhdHRyaWJ1dGVzXHJcbiAgICAgIC5yZWR1Y2UoKGFjYywgYXR0cikgPT4ge1xyXG4gICAgICAgIGlmIChfLmlzRW1wdHkoYXR0cikpIHtcclxuICAgICAgICAgIGFjYyArPSBhdHRyICsgJywnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICB9LCAnJylcclxuICAgICAgLnNsaWNlKDAsIC0xKTtcclxuICB9XHJcblxyXG4gIG11dHVhbGx5SW5jbHVkZShhOiBzdHJpbmcsIGI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIGEuaW5jbHVkZXMoYikgfHwgYi5pbmNsdWRlcyhhKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdUcnlpbmcgdG8gbXV0dWFsbHkgY29tcGFyZSB1bmRlZmluZWQgdmFyaWFibGUuJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbmRCeUtleShhcnJheTogYW55W10sIGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiBhcnJheVxyXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XSA9PT0gdmFsdWU7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5wb3AoKTtcclxuICB9XHJcblxyXG4gIGRhdGVUb05nRGF0ZShkYXRlOiBEYXRlKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IGRhdGUuZ2V0RGF0ZSgpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29udmVydFRvWVlNTUREKGRhdGU6IHN0cmluZykge1xyXG4gICAgaWYgKGRhdGUubGVuZ3RoID4gNikge1xyXG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXREYXRlKHRoaXMueXl5eW1tZGRUaW1lVG9Nb21lbnQoZGF0ZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGU7XHJcbiAgfVxyXG5cclxuICBmb3JtYXREYXRlVG9NTUREWVlZKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIG1vbWVudChkYXRlKS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdERhdGUoZGF0ZTogbW9tZW50Lk1vbWVudCk6IHN0cmluZyB7XHJcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xyXG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5EQVRFX0ZPUk1BVCk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRUaW1lKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIGRhdGUuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5USU1FX0ZPUk1BVCk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JtYXRUaW1lQ29sb24oZGF0ZTogbW9tZW50Lk1vbWVudCk6IHN0cmluZyB7XHJcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xyXG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5USU1FX0ZPUk1BVF9DT0xPTik7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRJc29EYXRlKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdElzb0RhdGVUaW1lKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUX1RJTUUpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0SXNvRGF0ZU5vSHlwaGFucyhkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVF9OT19IWVBIQU5TKTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlVGltZXNMaXN0KGZyb20gPSAwLCB0byA9IDI0LCBzdGVwID0gMTUpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBkYXRlVGltZUFycmF5OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgaG91ciA9IDA7IGhvdXIgPCB0byAtIGZyb207IGhvdXIrKykge1xyXG4gICAgICBmb3IgKGxldCBtaW51dGUgPSAwOyBtaW51dGUgPCA2MDsgbWludXRlICs9IHN0ZXApIHtcclxuICAgICAgICBkYXRlVGltZUFycmF5LnB1c2gobW9tZW50KHsgaG91ciwgbWludXRlIH0pLmZvcm1hdCgnSEg6bW0nKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkYXRlVGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgbW9tZW50VG9OZ0RhdGUoZGF0ZTogbW9tZW50Lk1vbWVudCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiB0aGlzLmRhdGVUb05nRGF0ZShkYXRlLnRvRGF0ZSgpKTtcclxuICB9XHJcblxyXG4gIG5nRGF0ZVRvRGF0ZShkYXRlOiBOZ2JEYXRlU3RydWN0KTogRGF0ZSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoIC0gMSwgZGF0ZS5kYXkpO1xyXG4gIH1cclxuXHJcbiAgbmdEYXRlVG9Nb21lbnQoZGF0ZTogTmdiRGF0ZVN0cnVjdCwgdGltZT86IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgY29uc3QgbW9tID0gbW9tZW50KHRoaXMubmdEYXRlVG9EYXRlKGRhdGUpKTtcclxuICAgIGlmICh0aW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWVzID0gdGltZS5zcGxpdCgnOicpO1xyXG4gICAgICBpZiAodGltZXMubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgbW9tLnNldCgnaG91cnMnLCBOdW1iZXIodGltZXNbMF0pKS5zZXQoJ21pbnV0ZXMnLCBOdW1iZXIodGltZXNbMV0pKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtb21cclxuICAgICAgICAgIC5zZXQoJ2hvdXJzJywgTnVtYmVyKHRpbWUuc3Vic3RyKDAsIDIpKSlcclxuICAgICAgICAgIC5zZXQoJ21pbnV0ZXMnLCBOdW1iZXIodGltZS5zdWJzdHIoMiwgMikpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vbTtcclxuICB9XHJcblxyXG4gIHRvZGF5VG9OZ2JEYXRlU3RydWN0KCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgY29uc3QgdG9kYXkgPSBtb21lbnQoKTtcclxuICAgIHJldHVybiB7IHllYXI6IHRvZGF5LnllYXIoKSwgbW9udGg6IHRvZGF5Lm1vbnRoKCkgKyAxLCBkYXk6IHRvZGF5LmRhdGUoKSB9O1xyXG4gIH1cclxuXHJcbiAgb2JqZWN0VG9BcnJheShvYmplY3Q6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBBcnJheTxhbnk+IHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLm1hcCgoaSkgPT4gb2JqZWN0W2ldKTtcclxuICB9XHJcblxyXG4gIHl5eXltbWRkVG9EYXRlKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShcclxuICAgICAgTnVtYmVyKHZhbHVlLnN1YnN0cmluZygwLCA0KSksXHJcbiAgICAgIE51bWJlcih2YWx1ZS5zdWJzdHJpbmcoNCwgNikpIC0gMSxcclxuICAgICAgTnVtYmVyKHZhbHVlLnN1YnN0cmluZyg2LCA4KSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRvTW9tZW50KHZhbHVlOiBzdHJpbmcpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiBtb21lbnQodGhpcy55eXl5bW1kZFRvRGF0ZSh2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgeXltbWRkVG9Nb21lbnQodmFsdWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIG1vbWVudCh2YWx1ZSwgJ1lZTU1ERCcpO1xyXG4gIH1cclxuXHJcbiAgeXltbWRkVG9OZ2JEYXRlKHZhbHVlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLm1vbWVudFRvTmdEYXRlKHRoaXMueXltbWRkVG9Nb21lbnQodmFsdWUpKTtcclxuICB9XHJcblxyXG4gIHl5bW1kZF9oaG1tVG9Nb21lbnQoZGF0ZTogc3RyaW5nLCB0aW1lOiBzdHJpbmcpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiBtb21lbnQoYCR7ZGF0ZX0gJHt0aW1lfWAsICdZWU1NREQgSEhtbScpO1xyXG4gIH1cclxuXHJcbiAgeXl5eW1tZGRfaGhtbVRvTW9tZW50KGRhdGU6IHN0cmluZywgdGltZTogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gbW9tZW50KGAke2RhdGV9ICR7dGltZX1gLCAnWVlZWU1NREQgSEhtbScpO1xyXG4gIH1cclxuXHJcbiAgeXl5eW1tZGRUb05nRGF0ZSh2YWx1ZTogc3RyaW5nKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRlVG9OZ0RhdGUodGhpcy55eXl5bW1kZFRvRGF0ZSh2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgeXl5eW1tZGRUaW1lVG9OZ0RhdGUoZGF0ZTogc3RyaW5nLCB0aW1lOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIGNvbnN0IGR0ID0gdGhpcy55eXl5bW1kZFRvTW9tZW50KGRhdGUpXHJcbiAgICAgIC5hZGQoTnVtYmVyKHRpbWUuc3Vic3RyaW5nKDAsIDIpKSwgJ2hvdXJzJylcclxuICAgICAgLmFkZChOdW1iZXIodGltZS5zdWJzdHJpbmcoMiwgNCkpLCAnbWludXRlcycpO1xyXG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUoZHQpO1xyXG4gIH1cclxuXHJcbiAgeXl5eW1tZGRUaW1lVG9Nb21lbnQoZGF0ZTogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBpZiAoZGF0ZS5sZW5ndGggPT09IDYpIHtcclxuICAgICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfWAsICdZWU1NREQnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtb21lbnQoYCR7ZGF0ZX1gLCAnWVlZWU1NREQnKTtcclxuICB9XHJcblxyXG4gIGhobW1Ub1RpbWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dmFsdWUuc3Vic3RyaW5nKDAsIDIpfToke3ZhbHVlLnN1YnN0cmluZygyLCA0KX1gO1xyXG4gIH1cclxuXHJcbiAgZGF0ZVN0cmluZ1RveXl5eW1tZGQoZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAodHlwZW9mIGQgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbSA9IC8oXFxkezR9KVstXFwvXT8oXFxkezJ9KVstXFwvXT8oXFxkezJ9KS8uZXhlYyhkKTtcclxuICAgIHJldHVybiBtID8gYCR7bVsxXX0ke21bMl19JHttWzNdfWAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgdGltZVN0cmluZ1RvaGhfbW0odDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAodHlwZW9mIHQgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbSA9IC8oXFxkezJ9KVs6LV0/KFxcZHsyfSkvLmV4ZWModCk7XHJcbiAgICByZXR1cm4gbSA/IGAke21bMV19OiR7bVsyXX1gIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHN0cmluZ1RvQm9vbChzOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBzICYmIHMgIT09ICdmYWxzZScgJiYgcyAhPT0gJzAnICYmIHMgIT09ICdubycgJiYgcyAhPT0gJ24nO1xyXG4gIH1cclxuXHJcbiAgY2xvbmU8VCA9IGFueT4odG9DbG9uZTogVCk6IFQge1xyXG4gICAgcmV0dXJuIF8uY2xvbmVEZWVwKHRvQ2xvbmUpIGFzIFQ7XHJcbiAgfVxyXG5cclxuICByZXBsYWNlS2V5c0luVGV4dChcclxuICAgIHRleHQ6IHN0cmluZyxcclxuICAgIHJlcGxhY2VtZW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxyXG4gICk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKS5yZWR1Y2UoKGN1cnJlbnQsIGtleSkgPT4ge1xyXG4gICAgICByZXR1cm4gY3VycmVudC5yZXBsYWNlKCclJyArIGtleSwgcmVwbGFjZW1lbnRzW2tleV0pO1xyXG4gICAgfSwgdGV4dCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0TWludWV0cyhkYXRlOiBtb21lbnQuTW9tZW50ID0gbW9tZW50KCksIG1pbnV0ZXNUb1JvdW5kID0gMTUpIHtcclxuICAgIGRhdGUubWludXRlKE1hdGguY2VpbChkYXRlLm1pbnV0ZSgpIC8gbWludXRlc1RvUm91bmQpICogbWludXRlc1RvUm91bmQpO1xyXG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KCdISDptbScpO1xyXG4gIH1cclxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgKiBCZWxvdyBhcmUgZnVuY3Rpb25zIG5lZWRlZCBmb3IgZ2VuZXJhdGluZyB0aGUgaGFzaGVkIG51bWJlciBvbmNlIHRva2VuLCB0YWtlbiBhcyByZXF1aXJlZFx0KlxyXG4gICAqIERvbid0IE1lc3Mgd2l0aCB0aGVzZVx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCpcclxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgZ2V0TnVtYmVyT25jZVZhbHVlKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmFuZG9tX3ZhbHVlID0gdGhpcy5ndWlkKCk7XHJcbiAgICByZXR1cm4gcmFuZG9tX3ZhbHVlICsgJ18nICsgaGV4X2htYWNfbWQ1KHRva2VuLCByYW5kb21fdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ3VpZCgpOiBhbnkge1xyXG4gICAgbGV0IHJhbmRvbV9oZXggPSAnJztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDMyOyBpKyspIHtcclxuICAgICAgcmFuZG9tX2hleCArPSB0aGlzLnM0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJhbmRvbV9oZXg7XHJcbiAgfVxyXG5cclxuICBzNCgpOiBhbnkge1xyXG4gICAgcmV0dXJuIE1hdGguZmxvb3IoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApXHJcbiAgICAgIC50b1N0cmluZygxNilcclxuICAgICAgLnN1YnN0cmluZygxKTtcclxuICB9XHJcblxyXG4gIGNhcGl0YWxpc2VGaXJzdExldHRlcih3b3JkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHdvcmQubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gd29yZFswXS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnJvbU9iamVjdCguLi5hcmdzOiBhbnlbXSk6IGFueSB7XHJcbiAgICBsZXQgZGF0YSA9IGFyZ3Muc2hpZnQoKTtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgZGF0YSAmJiBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCArPSAxKSB7XHJcbiAgICAgIGRhdGEgPSBkYXRhW2FyZ3NbaW5kZXhdXTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgbW9tZW50Um91bmRNaW51dGVzKHRpbWU6IG1vbWVudC5Nb21lbnQsIHJvdW5kOiBudW1iZXIpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHRpbWUgPSBtb21lbnQodGltZSkuc3RhcnRPZignbWludXRlcycpO1xyXG4gICAgbGV0IGRpZmYgPSB0aW1lLm1pbnV0ZXMoKSAlIHJvdW5kO1xyXG4gICAgaWYgKGRpZmYgIT09IDApIHtcclxuICAgICAgZGlmZiA9IHJvdW5kIC0gZGlmZjtcclxuICAgIH1cclxuICAgIHJldHVybiB0aW1lLmFkZChkaWZmLCAnbWludXRlJyk7XHJcbiAgfVxyXG5cclxuICByb3VuZChkYXRlOiBhbnksIGR1cmF0aW9uOiBhbnkpIHtcclxuICAgIHJldHVybiBtb21lbnQoTWF0aC5jZWlsKCtkYXRlIC8gK2R1cmF0aW9uKSAqICtkdXJhdGlvbik7XHJcbiAgfVxyXG5cclxuICBpY3NGb2xkKGJvZHk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsaW5lcyA9IGJvZHkuc3BsaXQoL1xcclxcbi9nKTtcclxuICAgIHJldHVybiBsaW5lc1xyXG4gICAgICAubWFwKChsaW5lKSA9PiB7XHJcbiAgICAgICAgbGV0IHJlcyA9ICcnO1xyXG4gICAgICAgIGNvbnN0IG4gPSA3MjtcclxuICAgICAgICBsaW5lID0gbGluZS50cmltKCk7XHJcbiAgICAgICAgd2hpbGUgKGxpbmUubGVuZ3RoID4gbikge1xyXG4gICAgICAgICAgcmVzICs9IGAke2xpbmUuc2xpY2UoMCwgbil9XFxyXFxuYDtcclxuICAgICAgICAgIGxpbmUgPSBgICR7bGluZS5zbGljZShuKS50cmltKCl9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxpbmUudHJpbSgpKSB7XHJcbiAgICAgICAgICByZXMgKz0gbGluZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgfSlcclxuICAgICAgLmpvaW4oJ1xcclxcbicpO1xyXG4gIH1cclxuXHJcbiAgc3BsaXRBZGRyZXNzTGluZShcclxuICAgIGxpbmU6IHN0cmluZyxcclxuICAgIGxlbjogbnVtYmVyXHJcbiAgKTogeyBsaW5lOiBzdHJpbmc7IHJlc2lkdWU6IHN0cmluZyB9IHtcclxuICAgIGNvbnN0IHJlcyA9IHtcclxuICAgICAgbGluZTogbGluZS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpLFxyXG4gICAgICByZXNpZHVlOiAnJ1xyXG4gICAgfTtcclxuICAgIGlmIChyZXMubGluZS5sZW5ndGggPiBsZW4pIHtcclxuICAgICAgbGV0IGkgPSByZXMubGluZS5zbGljZSgwLCBsZW4pLmxhc3RJbmRleE9mKCcsJyk7XHJcbiAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgIHJlcy5yZXNpZHVlID0gcmVzLmxpbmUuc2xpY2UoaSArIDEpLnRyaW0oKTtcclxuICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGkpLnRyaW0oKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpID0gcmVzLmxpbmUuc2xpY2UoMCwgbGVuKS5sYXN0SW5kZXhPZignICcpO1xyXG4gICAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgICAgcmVzLnJlc2lkdWUgPSByZXMubGluZS5zbGljZShpICsgMSkudHJpbSgpO1xyXG4gICAgICAgICAgcmVzLmxpbmUgPSByZXMubGluZS5zbGljZSgwLCBpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzLnJlc2lkdWUgPSByZXMubGluZS5zbGljZShsZW4pO1xyXG4gICAgICAgICAgcmVzLmxpbmUgPSByZXMubGluZS5zbGljZSgwLCBsZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIGRheXNCZXR3ZWVuKHN0YXJ0OiBtb21lbnQuTW9tZW50LCBlbmQ6IG1vbWVudC5Nb21lbnQpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGVuZC5kaWZmKHN0YXJ0LCAnZGF5cycpO1xyXG4gIH1cclxuXHJcbiAgbWFwUHJvbWlzZTxUID0gYW55LCBSID0gYW55PihcclxuICAgIGE6IFRbXSxcclxuICAgIGY6ICh2YWw6IFQsIGluZGV4OiBudW1iZXIpID0+IFIgfCBQcm9taXNlPFI+LFxyXG4gICAgbWF4PzogbnVtYmVyXHJcbiAgKTogUHJvbWlzZTxSW10+IHtcclxuICAgIGNvbnN0IGl0ID0gYVtTeW1ib2wuaXRlcmF0b3JdKCk7XHJcbiAgICBjb25zdCByZXN1bHQ6IFJbXSA9IFtdO1xyXG4gICAgY29uc3QgYnVmZmVyOiBQcm9taXNlPFI+W10gPSBbXTtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGNvbnN0IG5leHRmID0gKCk6IFByb21pc2U8Uj4gPT4ge1xyXG4gICAgICBjb25zdCBuZXh0ID0gaXQubmV4dCgpO1xyXG4gICAgICBpZiAobmV4dC5kb25lKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gaSsrO1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGYobmV4dC52YWx1ZSwgaW5kZXgpKS50aGVuKCh2YWwpID0+IHtcclxuICAgICAgICByZXN1bHRbaW5kZXhdID0gdmFsO1xyXG4gICAgICAgIHJldHVybiBuZXh0ZigpO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgICB3aGlsZSAoIW1heCB8fCBidWZmZXIubGVuZ3RoIDw9IG1heCkge1xyXG4gICAgICBjb25zdCBuID0gbmV4dGYoKTtcclxuICAgICAgaWYgKG4pIHtcclxuICAgICAgICBidWZmZXIucHVzaChuKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGJ1ZmZlcikudGhlbigoKSA9PiB7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG1hcFNlcmllc1Byb21pc2U8VCA9IGFueSwgUiA9IGFueT4oXHJcbiAgICBhOiBUW10sXHJcbiAgICBmOiAodmFsOiBULCBpbmRleDogbnVtYmVyKSA9PiBSIHwgUHJvbWlzZTxSPlxyXG4gICk6IFByb21pc2U8UltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXBQcm9taXNlKGEsIGYsIDEpO1xyXG4gIH1cclxuXHJcbiAgb2JqMnF1ZXJ5U3RyaW5nKG9iajogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBfLnJlZHVjZShcclxuICAgICAgb2JqLFxyXG4gICAgICAoYSwgdiwgaykgPT4ge1xyXG4gICAgICAgIGlmIChhICE9PSAnJykge1xyXG4gICAgICAgICAgYSArPSAnJic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHthfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGspfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2KX1gO1xyXG4gICAgICB9LFxyXG4gICAgICAnJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN0cmlwUHVuY3R1YXRpb24oczogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzLnJlcGxhY2UoL1teYS16QS1aMC05XFxzXS9nLCAnJyk7XHJcbiAgfVxyXG5cclxuICByZXBsYWNlQWxsKGhheXN0YWNrOiBzdHJpbmcsIG5lZWRsZTogc3RyaW5nLCByZXBsYWNlbWVudDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBoYXlzdGFja1xyXG4gICAgICA/IGhheXN0YWNrLnJlcGxhY2UobmV3IFJlZ0V4cChuZWVkbGUsICdnJyksIHJlcGxhY2VtZW50KVxyXG4gICAgICA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBkYXRlVGltZShzYWJzRGF0ZTogc3RyaW5nLCBzYWJzVGltZTogc3RyaW5nKTogYW55IHtcclxuICAgIGNvbnN0IHRlbXBEYXRlID0gc2Fic0RhdGUubWF0Y2goLy57MSwyfS9nKTsgLy8gc3BsaXRzIGV2ZXJ5IDIgY2hhcmFjdGVyc1xyXG4gICAgY29uc3QgdGVtcFRpbWUgPSBzYWJzVGltZS5tYXRjaCgvLnsxLDJ9L2cpO1xyXG5cclxuICAgIGNvbnN0IG5ld1N0ciA9XHJcbiAgICAgICcyMCcgK1xyXG4gICAgICB0ZW1wRGF0ZVswXSArXHJcbiAgICAgICctJyArXHJcbiAgICAgIHRlbXBEYXRlWzFdICtcclxuICAgICAgJy0nICtcclxuICAgICAgdGVtcERhdGVbMl0gK1xyXG4gICAgICAnVCcgK1xyXG4gICAgICB0ZW1wVGltZVswXSArXHJcbiAgICAgICc6JyArXHJcbiAgICAgIHRlbXBUaW1lWzFdICtcclxuICAgICAgJzowMCc7XHJcbiAgICByZXR1cm4gbmV3U3RyO1xyXG4gIH1cclxuXHJcbiAgYWx0ZXJuYXRlSlNPTlN0cmluZ2lmeShqc29uT2JqZWN0OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgbGV0IGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShqc29uT2JqZWN0KTtcclxuICAgIGpzb25TdHJpbmcgPSBqc29uU3RyaW5nLnJlcGxhY2UoL1wiL2csICdgJyk7XHJcbiAgICByZXR1cm4ganNvblN0cmluZztcclxuICB9XHJcblxyXG4gIC8vIENvbnZlcnQgb2JqZWN0IHRvIGFycmF5XHJcbiAgQ29udmVydE9iamVjdFRvQXJyYXkob2JqZWN0OiBvYmplY3QpOiBhbnlbXSB7XHJcbiAgICBsZXQgYXJyYXkgPSBfLnZhbHVlcyhvYmplY3QpO1xyXG4gICAgYXJyYXkgPSBfLmZsYXR0ZW4oYXJyYXkpO1xyXG4gICAgcmV0dXJuIGFycmF5O1xyXG4gIH1cclxuXHJcbiAgYWRkRGF5KGRhdGVTdHJ1Y3Q6IE5nYkRhdGVTdHJ1Y3QpOiBhbnkge1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKFxyXG4gICAgICBkYXRlU3RydWN0LnllYXIsXHJcbiAgICAgIGRhdGVTdHJ1Y3QubW9udGggLSAxLFxyXG4gICAgICBkYXRlU3RydWN0LmRheSArIDFcclxuICAgICk7XHJcbiAgICBjb25zdCByZXREYXRlID0ge1xyXG4gICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IGRhdGUuZ2V0RGF0ZSgpXHJcbiAgICB9O1xyXG4gICAgLy8vLyBjb25zb2xlLmxvZyhyZXREYXRlKTtcclxuICAgIC8vLy8gY29uc29sZS5sb2coZGF0ZSk7XHJcbiAgICByZXR1cm4gcmV0RGF0ZTtcclxuICB9XHJcblxyXG4gIGhhc2hDb2RlKHRvQ29kZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBoYXNoID0gMDtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvQ29kZS5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICBjb25zdCBjaGFyID0gdG9Db2RlLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYml0d2lzZVxyXG4gICAgICBoYXNoID0gKGhhc2ggPDwgNSkgLSBoYXNoICsgY2hhcjtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1iaXR3aXNlXHJcbiAgICAgIGhhc2ggPSBoYXNoICYgaGFzaDtcclxuICAgIH1cclxuICAgIHJldHVybiBoYXNoLnRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBNTWRkeXlUb05nYihkYXRlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLm1vbWVudFRvTmdEYXRlKG1vbWVudChkYXRlLCBCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkQ2hpbGRyZW5UcmF2ZWxsZXJzKFxyXG4gICAgc2VsZWN0ZWRUcmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSxcclxuICAgIHR5cGU6IFNlcnZpY2VUeXBlXHJcbiAgKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gYWR1bHRzIGFuZCBjaGlsZHJlbi4gc28gYWx3YXlzIG1hcmsgYXMgYWR1bHRzLlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbHRlcihcclxuICAgICAgKHRyYXZlbGxlcjogVHJhdmVsbGVyKSA9PiB0cmF2ZWxsZXIuaXNDaGlsZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkVHJhdmVsbGVycyh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSwgdHlwZTogU2VydmljZVR5cGUpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAvLyBUaGVzZSB0eXBlcyBkbyBub3QgaGF2ZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiBhZHVsdHMgYW5kIGNoaWxkcmVuLiBzbyBhbHdheXMgbWFyayBhcyBhZHVsdHMuXHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxyXG4gICAgICAgIHJldHVybiB7IGFkdWx0czogdHJhdmVsbGVycywgY2hpbGRyZW46IFtdLCBpbmZhbnRzOiBbXSB9O1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB0cmF2ZWxsZXJzLnJlZHVjZShcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgYWNjdW06IHtcclxuICAgICAgICAgICAgICBhZHVsdHM6IFRyYXZlbGxlcltdO1xyXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBUcmF2ZWxsZXJbXTtcclxuICAgICAgICAgICAgICBpbmZhbnRzOiBUcmF2ZWxsZXJbXTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdHJhdmVsbGVyOiBUcmF2ZWxsZXJcclxuICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodHJhdmVsbGVyLmlzQ2hpbGQpIHtcclxuICAgICAgICAgICAgICBpZiAodHJhdmVsbGVyLmlzSW5mYW50KSB7XHJcbiAgICAgICAgICAgICAgICBhY2N1bS5pbmZhbnRzLnB1c2godHJhdmVsbGVyKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYWNjdW0uY2hpbGRyZW4ucHVzaCh0cmF2ZWxsZXIpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBhY2N1bS5hZHVsdHMucHVzaCh0cmF2ZWxsZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFkdWx0czogW10sXHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAgICAgICAgICAgaW5mYW50czogW11cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZWxlY3RlZEFkdWx0VHJhdmVsbGVycyhzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLCB0eXBlOiBTZXJ2aWNlVHlwZSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIC8vIFRoZXNlIHR5cGVzIGRvIG5vdCBoYXZlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGFkdWx0cyBhbmQgY2hpbGRyZW4uIHNvIGFsd2F5cyBtYXJrIGFzIGFkdWx0cy5cclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkVHJhdmVsbGVycztcclxuICAgIH1cclxuICAgIHJldHVybiBzZWxlY3RlZFRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+ICF0cmF2ZWxsZXIuaXNDaGlsZCAmJiAhdHJhdmVsbGVyLmlzSW5mYW50XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNDaGlsZCh0cmF2ZWxsZXI6IFRyYXZlbGxlciB8IERhdGUsIG1heEFnZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodHJhdmVsbGVyIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICBjb25zdCBhZHVsdERhdGUgPSBtb21lbnQoKS5hZGQoLW1heEFnZSwgJ3llYXJzJyk7XHJcbiAgICAgIHJldHVybiBhZHVsdERhdGUuaXNCZWZvcmUoXHJcbiAgICAgICAgbW9tZW50KHRyYXZlbGxlciwgQmFzZUhlbHBlclJvdXRpbmVzLklTT19EQVRBX0ZPUk1BVCksXHJcbiAgICAgICAgJ2RheSdcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cmF2ZWxsZXIuaXNDaGlsZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzQ2hpbGRGbGlnaHQodHJhdmVsbGVyOiBUcmF2ZWxsZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gIH1cclxuXHJcbiAgaXNDaGlsZFJhaWwodHJhdmVsbGVyOiBUcmF2ZWxsZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICB9XHJcblxyXG4gIGlzQ2hpbGRFdXJvc3Rhcih0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBFVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICB9XHJcblxyXG4gIHVuaXFCeShhcnJheTogYW55W10sIHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBfLnVuaXFCeShhcnJheSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgaXNDaGlsZCh0cmF2ZWxsZXI6IFRyYXZlbGxlciB8IERhdGUsIHRyYXZlbFR5cGU6IFNlcnZpY2VUeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHRyYXZlbFR5cGUpIHtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5GbGlnaHQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBGTElHSFRfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIFJBSUxfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgICAgIC8vIGNhc2UgU2VydmljZVR5cGUuRXVyb3N0YXI6XHJcbiAgICAgIC8vICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNvYWNoOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgQ09BQ0hfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuTG91bmdlOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgTE9VTkdFU19NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzSW5mYW50KHRyYXZlbGxlcjogVHJhdmVsbGVyIHwgRGF0ZSwgdHJhdmVsVHlwZTogU2VydmljZVR5cGUpIHtcclxuICAgIHN3aXRjaCAodHJhdmVsVHlwZSkge1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEZMSUdIVF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIFJBSUxfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xyXG4gICAgICAvLyBjYXNlIFNlcnZpY2VUeXBlLkV1cm9zdGFyOlxyXG4gICAgICAvLyAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBFVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIENPQUNIX01BWF9JTkZBTlRfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBMT1VOR0VTX01BWF9JTkZBTlRfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEFnZVR5cGUodHJhdmVsbGVyOiBUcmF2ZWxsZXIsIHRyYXZlbFR5cGU6IFNlcnZpY2VUeXBlKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmlzQ2hpbGQodHJhdmVsbGVyLCB0cmF2ZWxUeXBlKSA/ICdDJyA6ICdBJztcclxuICB9XHJcblxyXG4gIGdldE1heENoaWxkQWdlKHR5cGU6IFNlcnZpY2VUeXBlKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTICsgMSwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTICsgMSwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgLy8gY2FzZSBTZXJ2aWNlVHlwZS5FVVJPU1RBUjpcclxuICAgICAgLy8gIHJldHVybiBtb21lbnQoKS5hZGQoLUVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKS5mb3JtYXQoSGVscGVycy5NTUREWVlfREFURSk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ29hY2g6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1DT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTICsgMSwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1MT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdEFkdWx0QWdlKHR5cGU6IFNlcnZpY2VUeXBlKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLVJBSUxfTUFYX0NISUxEX0FHRV9ZRUFSUyAtIDEwLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICAvLyBjYXNlIFNlcnZpY2VUeXBlLkV1cm9zdGFyOlxyXG4gICAgICAvLyAgcmV0dXJuIG1vbWVudCgpLmFkZCgtRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyAtIDEwLCAneWVhcnMnKS5mb3JtYXQoSGVscGVycy5NTUREWVlfREFURSk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ29hY2g6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1DT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuTG91bmdlOlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtTE9VTkdFU19NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxyXG4gICAgICAgIC8vIFRoZXNlIHR5cGVzIGRvIG5vdCBoYXZlIGNoaWxkIHBsYWNlcyBzb1xyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtMTgsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9tZW50KCkuYWRkKC0xOCwgJ3llYXJzJykuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm0oXHJcbiAgICBhcnJheTogYW55W10sXHJcbiAgICBjYWxsYmFjazogXy5NZW1vVm9pZEFycmF5SXRlcmF0b3I8YW55LCBhbnlbXT4sXHJcbiAgICBhY2M6IGFueVxyXG4gICk6IGFueVtdIHtcclxuICAgIHJldHVybiBfLnRyYW5zZm9ybShhcnJheSwgY2FsbGJhY2ssIGFjYyk7XHJcbiAgfVxyXG5cclxuICBhcnJheVRvT2JqZWN0PFQgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IGFueSB9PihcclxuICAgIGFycmF5OiBUW10sXHJcbiAgICBmaWVsZDogc3RyaW5nXHJcbiAgKTogeyBba2V5OiBzdHJpbmddOiBUIH0ge1xyXG4gICAgcmV0dXJuIGFycmF5XHJcbiAgICAgIC5maWx0ZXIoKGRhdGE6IFQpID0+ICEhZGF0YSlcclxuICAgICAgLnJlZHVjZSgoY29uZmlnczogeyBba2V5OiBzdHJpbmddOiBUIH0sIGNvbmZpZ0l0ZW06IFQpID0+IHtcclxuICAgICAgICBpZiAoY29uZmlnSXRlbSAmJiBjb25maWdJdGVtW2ZpZWxkXSkge1xyXG4gICAgICAgICAgY29uZmlnc1tjb25maWdJdGVtW2ZpZWxkXV0gPSBjb25maWdJdGVtO1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB7fSk7XHJcbiAgfVxyXG5cclxuICBhcnJheVRvT2JqZWN0QXJyYXk8VCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0+KFxyXG4gICAgYXJyYXk6IFRbXSxcclxuICAgIGZpZWxkOiBzdHJpbmdcclxuICApOiB7IFtrZXk6IHN0cmluZ106IFRbXSB9IHtcclxuICAgIHJldHVybiBhcnJheVxyXG4gICAgICAuZmlsdGVyKChkYXRhOiBUKSA9PiAhIWRhdGEpXHJcbiAgICAgIC5yZWR1Y2UoKGNvbmZpZ3M6IHsgW2tleTogc3RyaW5nXTogVFtdIH0sIGNvbmZpZ0l0ZW06IFQpID0+IHtcclxuICAgICAgICBpZiAoY29uZmlnSXRlbSAmJiBjb25maWdJdGVtW2ZpZWxkXSkge1xyXG4gICAgICAgICAgY29uZmlnc1tjb25maWdJdGVtW2ZpZWxkXV0gPSBjb25maWdzW2NvbmZpZ0l0ZW1bZmllbGRdXSB8fCBbXTtcclxuICAgICAgICAgIGNvbmZpZ3NbY29uZmlnSXRlbVtmaWVsZF1dLnB1c2goY29uZmlnSXRlbSk7XHJcbiAgICAgICAgICByZXR1cm4gY29uZmlncztcclxuICAgICAgICB9XHJcbiAgICAgIH0sIHt9KTtcclxuICB9XHJcblxyXG4gIGdldFRlcm1pbmFscyhhaXJwb3J0OiBBaXJwb3J0KTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIGFpcnBvcnQudGVybWluYWxzO1xyXG4gIH1cclxuXHJcbiAgZmllbGRGcm9tT2JqZWN0KG9iajogb2JqZWN0LCBmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAoZmllbGQgfHwgJycpXHJcbiAgICAgIC5zcGxpdCgnLicpXHJcbiAgICAgIC5yZWR1Y2UoKGN1cnJlbnQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIGZpZWxkMTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtmaWVsZDFdKSB7XHJcbiAgICAgICAgICByZXR1cm4gY3VycmVudFtmaWVsZDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH0sIG9iaik7XHJcbiAgfVxyXG5cclxuICBtYXBGaWVsZEZyb21PYmplY3Q8SyBleHRlbmRzIHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgVD4oZmllbGQ6IEspIHtcclxuICAgIHJldHVybiAob2JqOiBSZWNvcmQ8SywgYW55Pik6IFQgPT4ge1xyXG4gICAgICByZXR1cm4gb2JqW2ZpZWxkXTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZW1vdmVOdWxsczxUPihxdWVyeTogVCk6IFQge1xyXG4gICAgaWYgKCFxdWVyeSkge1xyXG4gICAgICByZXR1cm4gcXVlcnk7XHJcbiAgICB9XHJcbiAgICBpZiAobW9tZW50LmlzTW9tZW50KHF1ZXJ5KSkge1xyXG4gICAgICByZXR1cm4gcXVlcnk7XHJcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocXVlcnkpKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgKChxdWVyeSBhcyB1bmtub3duIGFzIEFycmF5PFVucGFja2VkPFQ+PilcclxuICAgICAgICAgIC5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVOdWxscyhpdGVtKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZmlsdGVyKChpdGVtMTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIWl0ZW0xO1xyXG4gICAgICAgICAgfSkgYXMgdW5rbm93biBhcyBUKSB8fCBudWxsXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHF1ZXJ5KS5yZWR1Y2UoKGFjY3VtOiBULCBrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKHF1ZXJ5IGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV07XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMucmVtb3ZlTnVsbHModmFsdWUpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIChkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHVuZGVmaW5lZCAmJiBkYXRhICE9PSAnbnVsbCcpIHx8XHJcbiAgICAgICAgICAoQXJyYXkuaXNBcnJheShkYXRhKSAmJiBkYXRhLmxlbmd0aCA+IDApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAoYWNjdW0gYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XSA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgfSwge30gYXMgVCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gcXVlcnk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUcmF2ZWxsZXJzSWQodHJhdmVsbGVyczogVHJhdmVsbGVyW10pOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAodHJhdmVsbGVycykge1xyXG4gICAgICByZXR1cm4gdHJhdmVsbGVycy5yZWR1Y2UoXHJcbiAgICAgICAgKHByZXZpb3VzVmFsdWU6IHN0cmluZ1tdLCBjdXJyZW50VmFsdWU6IFRyYXZlbGxlciwgaWR4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiBpZHggPT09IDBcclxuICAgICAgICAgICAgPyBbY3VycmVudFZhbHVlLmlkXVxyXG4gICAgICAgICAgICA6IFsuLi5wcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWUuaWRdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgW11cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGxvb3Agb3ZlciB0aGUgcXVlcnkgb2JqZWN0IHBhcmFtIGFuZCBjb252ZXJ0IGFueSBtb21lbnQgZGF0ZSBvYmplY3RzIHRvIGRhdGUtdGltZSBzdHJpbmdzXHJcbiAgICogQHBhcmFtIHF1ZXJ5XHJcbiAgICogQHBhcmFtIGRlYnVnXHJcbiAgICovXHJcbiAgc2FuaXRpemVNb21lbnREYXRlcyhxdWVyeTogYW55LCBkZWJ1ZyA9IGZhbHNlKTogYW55IHtcclxuICAgIGNvbnN0IHNhbml0aXplZFF1ZXJ5ID0geyAuLi5xdWVyeSB9O1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2FuaXRpemVkUXVlcnkpKSB7XHJcbiAgICAgIGlmIChtb21lbnQuaXNNb21lbnQodmFsdWUpKSB7XHJcbiAgICAgICAgc2FuaXRpemVkUXVlcnlba2V5XSA9IHNhbml0aXplZFF1ZXJ5W2tleV0udG9JU09TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGRlYnVnKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCctLSBzYW5pdGl6ZU1vbWVudERhdGVzKCkgY2FsbGVkIC0tJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdvcmlnaW5hbCBxdWVyeTogJywgcXVlcnkpO1xyXG4gICAgICBjb25zb2xlLmxvZygnc2FuaXRpemVkIHF1ZXJ5OiAnLCBzYW5pdGl6ZWRRdWVyeSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2FuaXRpemVkUXVlcnk7XHJcbiAgfVxyXG5cclxuICB0b1N0cmluZ3M8VD4odG9Gb3JtYXQ6IFQsIHNjaGVtYTogU2NoZW1hKTogVCB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc2NoZW1hLnByb3BlcnRpZXMgfHwge30pLnJlZHVjZShcclxuICAgICAgKGN1cnJlbnRWYWx1ZTogVCwgW2tleSwgdmFsdWVdOiBbc3RyaW5nLCBTY2hlbWFdKTogVCA9PiB7XHJcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl9mb3JtYXRWYWx1ZShcclxuICAgICAgICAgIHRvRm9ybWF0W2tleSBhcyBrZXlvZiBUXSxcclxuICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgKHNjaGVtYS5yZXF1aXJlZCB8fCBbXSkuaW5jbHVkZXMoa2V5KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgY3VycmVudFZhbHVlW2tleSBhcyBrZXlvZiBUXSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xyXG4gICAgICB9LFxyXG4gICAgICB7fSBhcyBUXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZm9ybWF0VmFsdWUodmFsdWU6IGFueSwgc2NoZW1hOiBTY2hlbWEsIGlzUmVxdWlyZWQ6IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xyXG4gICAgICBjYXNlICdpbnRlZ2VyJzpcclxuICAgICAgICBjb25zdCB0bXAgPSBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKTtcclxuICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKHRtcCkgPyAoaXNSZXF1aXJlZCA/IDAgOiBudWxsKSA6IHRtcDtcclxuICAgICAgY2FzZSAnc3RyaW5nJzpcclxuICAgICAgICBjb25zdCB0bXAxID0gdmFsdWUgPyB2YWx1ZS50b1N0cmluZygpIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gdG1wMSAmJiB0bXAxLmxlbmd0aCA+IDAgPyB0bXAxIDogaXNSZXF1aXJlZCA/ICcnIDogbnVsbDtcclxuICAgICAgY2FzZSAnb2JqZWN0JzpcclxuICAgICAgICByZXR1cm4gdmFsdWUgPyB0aGlzLnRvU3RyaW5ncyh2YWx1ZSwgc2NoZW1hKSA6IGlzUmVxdWlyZWQgPyB7fSA6IG51bGw7XHJcbiAgICAgIGNhc2UgJ2FycmF5JzpcclxuICAgICAgICByZXR1cm4gdmFsdWU7IC8vIFRPRE8gd3JpdGUgYXJyYXkgdHJhbnNsYXRpb25cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtYWtlVGltZVdpbmRvdyhkYXRlVGltZTogbW9tZW50Lk1vbWVudCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gZGF0ZVRpbWUuY2xvbmUoKS5hZGQoc3RhcnQsICdob3VyJyk7XHJcbiAgICBjb25zdCBlbmRUaW1lID0gZGF0ZVRpbWUuY2xvbmUoKS5hZGQoZW5kLCAnaG91cicpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmZvcm1hdFRpbWUoc3RhcnRUaW1lKSArICctJyArIHRoaXMuZm9ybWF0VGltZShlbmRUaW1lKTtcclxuICB9XHJcblxyXG4gIGluUmFuZ2UodG9jaGVjazogbnVtYmVyLCByYW5nZTogTWluTWF4KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdG9jaGVjayA+PSByYW5nZS5taW4gJiYgdG9jaGVjayA8PSByYW5nZS5tYXg7XHJcbiAgfVxyXG5cclxuICBtYWtlVXNlcnModHJhdmVsbGVyczogVHJhdmVsbGVyW10pOiBVc2VyUGFzc2VuZ2VyVHlwZUlucHV0W10ge1xyXG4gICAgcmV0dXJuIHRyYXZlbGxlcnMubWFwKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IFVzZXJQYXNzZW5nZXJUeXBlSW5wdXQgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlkOiB0cmF2ZWxsZXIuaWQsXHJcbiAgICAgICAgcGFzc2VuZ2VyVHlwZTogdHJhdmVsbGVyLmlzQ2hpbGRcclxuICAgICAgICAgID8gUGFzc2VuZ2VyVHlwZS5DaGlsZFxyXG4gICAgICAgICAgOiB0cmF2ZWxsZXIuaXNJbmZhbnRcclxuICAgICAgICAgID8gUGFzc2VuZ2VyVHlwZS5JbmZhbnRcclxuICAgICAgICAgIDogUGFzc2VuZ2VyVHlwZS5BZHVsdFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBtYWtlTW9tZW50RGF5VGltZShhZGREYXk/OiBudW1iZXIsIGhoPzogbnVtYmVyLCBtPzogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBkdCA9IG1vbWVudCgpO1xyXG5cclxuICAgIGlmIChhZGREYXkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBkdC5hZGQoYWRkRGF5LCAnZGF5Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZHQuc2V0KCdob3VycycsIGhoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGR0LnNldCgnbWludXRlcycsIG0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkdDtcclxuICB9XHJcblxyXG4gIHNhbmF0aXplUmV0dXJuczxUPihcclxuICAgIGRlZmF1bHRzOiBULFxyXG4gICAgc3VwcGxpZWREYXRhOiBQYXJ0aWFsPFQ+LFxyXG4gICAgbW9tZW50RmllbGRzPzogKGtleW9mIFQpW11cclxuICApOiBUIHtcclxuICAgIGNvbnN0IGNvbWJpbmVkOiBUID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIHN1cHBsaWVkRGF0YSk7XHJcbiAgICByZXR1cm4gKG1vbWVudEZpZWxkcyB8fCBbXSkucmVkdWNlKChjdXJyZW50OiBULCBuZXh0OiBrZXlvZiBUKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gKGN1cnJlbnQgYXMgYW55KVtuZXh0XTtcclxuICAgICAgKGN1cnJlbnQgYXMgYW55KVtuZXh0XSA9ICF2YWx1ZVxyXG4gICAgICAgID8gbW9tZW50KClcclxuICAgICAgICA6IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcclxuICAgICAgICA/IG1vbWVudCh2YWx1ZSlcclxuICAgICAgICA6IHZhbHVlO1xyXG4gICAgICByZXR1cm4gY3VycmVudDtcclxuICAgIH0sIGNvbWJpbmVkKTtcclxuICB9XHJcblxyXG4gIG1pSXNWYWxpZCh0b0NoZWNrOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdG9DaGVjay5sZW5ndGggPT09IDAgfHxcclxuICAgICAgISF0b0NoZWNrLmZpbmQoKG1pSXRlbTogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG1pSXRlbS5pc1ZhbGlkKCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaXNNaVZhbGlkKFxyXG4gICAgbWlQZXJJdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSxcclxuICAgIG1pUGVyVXNlcjoge1xyXG4gICAgICBba2V5OiBzdHJpbmddOiB7XHJcbiAgICAgICAgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdXNlck1pcyA9IE9iamVjdC52YWx1ZXMobWlQZXJVc2VyIHx8IHt9KTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMubWlJc1ZhbGlkKG1pUGVySXRlbSkgJiZcclxuICAgICAgKHVzZXJNaXMubGVuZ3RoID09PSAwIHx8XHJcbiAgICAgICAgISF1c2VyTWlzLmZpbmQoXHJcbiAgICAgICAgICAodXNlck1pczE6IHsgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdIH0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWlJc1ZhbGlkKHVzZXJNaXMxLm1hbmFnZW1lbnRJbmZvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5lZWRzTWkoYmFza2V0OiBCYXNrZXREZXRhaWxzLCBuZWVkc1RvVmlld01pOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBiYXNrZXQuYmFza2V0SW5mb01pRGV0YWlscy5sZW5ndGggPiAwICYmXHJcbiAgICAgIChuZWVkc1RvVmlld01pIHx8XHJcbiAgICAgICAgIWJhc2tldC5iYXNrZXRJbmZvTWlEZXRhaWxzLmZpbmQoXHJcbiAgICAgICAgICAobWlEZXRhaWw6IEJhc2tldEl0ZW1NYW5hZ2VtZW50SW5mbyk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc01pVmFsaWQobWlEZXRhaWwubWlQZXJJdGVtLCBtaURldGFpbC5taVBlclVzZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZmluZFNlcnZpY2Uoc2VydmljZXM6IFVzZXJTZXJ2aWNlcywgaWQ6IHN0cmluZyk6IFNlcnZpY2Uge1xyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoc2VydmljZXMpLnJlZHVjZShcclxuICAgICAgKGN1cnJlbnQ6IFNlcnZpY2UsIHNlcnZpY2UxOiBTZXJ2aWNlW10pOiBTZXJ2aWNlID0+IHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgY3VycmVudCB8fFxyXG4gICAgICAgICAgc2VydmljZTEuZmluZCgoc2VydmljZTI6IFNlcnZpY2UpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UyLmlkID09PSBpZDtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSxcclxuICAgICAgbnVsbCBhcyBTZXJ2aWNlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYWxsVHJ1ZShcclxuICAgIHN1cHBJbmZvOiBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2VbXSxcclxuICAgIGZpbHRlcjogKHN1cHBJbmZvOiBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2UpID0+IGJvb2xlYW5cclxuICApOiBib29sZWFuIHtcclxuICAgIHJldHVybiBzdXBwSW5mby5maWx0ZXIoZmlsdGVyKS5sZW5ndGggPT09IHN1cHBJbmZvLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGpvaW5Gcm9tQXR0cmlidXRlPFQ+KFxyXG4gICAgam9pbkNoYXJhY3Rlcjogc3RyaW5nLFxyXG4gICAgYXR0cmlidXRlOiBrZXlvZiBULFxyXG4gICAgYXJyYXk6IFRbXVxyXG4gICk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYXJyYXkubWFwKChpdGVtOiBUKSA9PiBpdGVtW2F0dHJpYnV0ZV0pLmpvaW4oam9pbkNoYXJhY3Rlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzcGxpdCB1cCBhbiBhcnJheSBpbnRvIGVxdWFsIHBhcnRzXHJcbiAgICogQHBhcmFtIGFycmF5IC0gdGhlIGFycmF5IHRvIHNwbGl0IHVwXHJcbiAgICogQHBhcmFtIHNpemUgLSB0aGUgc2l6ZSBvZiB0aGUgY29uc3RpdHVhbnQgcGFydHNcclxuICAgKiBAcGFyYW0gaW5jbHVkZVJlbWFpbmRlciAtIHdldGhlciBvciBub3QgdG8gaW5jbHVkZSBhbnkgcmVtYWluZyByZXN1bHRzIC0gZGVmYXVsdCB0cnVlXHJcbiAgICovXHJcbiAgc3BsaXRVcEFycmF5KFxyXG4gICAgYXJyYXk6IGFueVtdLFxyXG4gICAgc2l6ZTogbnVtYmVyLFxyXG4gICAgaW5jbHVkZVJlbWFpbmRlcjogYm9vbGVhbiA9IHRydWVcclxuICApOiBhbnlbXSB7XHJcbiAgICBjb25zdCBhcnJheUNvcHkgPSBfLmNsb25lRGVlcChhcnJheSk7IC8vIGxvZGFzaCBjbG9uZSBkZWVwXHJcbiAgICBsZXQgbmV3QXJyYXkgPSBbXTtcclxuXHJcbiAgICBpZiAoYXJyYXlDb3B5Lmxlbmd0aCA+IHNpemUpIHtcclxuICAgICAgd2hpbGUgKGFycmF5Q29weS5sZW5ndGggPj0gc2l6ZSkge1xyXG4gICAgICAgIG5ld0FycmF5LnB1c2goYXJyYXlDb3B5LnNwbGljZSgwLCBzaXplKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFkZCBhbnkgcmVtYWluaW5nXHJcbiAgICAgIGlmIChhcnJheUNvcHkubGVuZ3RoICYmIGluY2x1ZGVSZW1haW5kZXIpIHtcclxuICAgICAgICBuZXdBcnJheS5wdXNoKGFycmF5Q29weSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld0FycmF5ID0gYXJyYXlDb3B5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXdBcnJheTtcclxuICB9XHJcblxyXG4gIEBNZW1vcmlzZSgpXHJcbiAgZ2V0VGltZURpZmZlcmVuY2UoZGVwRGF0ZVRpbWU6IHN0cmluZywgYXJyRGF0ZVRpbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gbW9tZW50KGRlcERhdGVUaW1lKS5kaWZmKG1vbWVudChhcnJEYXRlVGltZSksICdtaW51dGVzJyk7XHJcbiAgfVxyXG5cclxuICBATWVtb3Jpc2UoKVxyXG4gIGRheURpZmZlcmVuY2UoZGVwdDogc3RyaW5nLCBhcnI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkaWZmID0gbW9tZW50KGFycilcclxuICAgICAgLnN0YXJ0T2YoJ2RheScpXHJcbiAgICAgIC5kaWZmKG1vbWVudChkZXB0KS5zdGFydE9mKCdkYXknKSwgJ2RheScpO1xyXG4gICAgcmV0dXJuIGRpZmYgPiAwID8gZGlmZi50b1N0cmluZygpIDogJyc7XHJcbiAgfVxyXG5cclxuICBATWVtb3Jpc2UoKVxyXG4gIG1ha2VGYXJlUnVsZXMoZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnksIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSkge1xyXG4gICAgY29uc3QgZmxpZ2h0cyA9XHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgICAgID8gZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1xyXG4gICAgICAgIDogZmxpZ2h0LmluYm91bmRGbGlnaHRzO1xyXG4gICAgY29uc3QgcnVsZXMgPSBmbGlnaHRzLnJlZHVjZShcclxuICAgICAgKGN1cnJlbnQ6IEZhcmVDb25kaXRpb25zLCBuZXh0OiBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgY3VycmVudC5jYW5jZWxsYXRpb24gPSBjdXJyZW50LmNhbmNlbGxhdGlvbi5jb25jYXQoXHJcbiAgICAgICAgICBuZXh0LmZhcmVDb25kaXRpb25zPy5jYW5jZWxsYXRpb24gfHwgW11cclxuICAgICAgICApO1xyXG4gICAgICAgIGN1cnJlbnQuY2hhbmdlID0gY3VycmVudC5jaGFuZ2UuY29uY2F0KFxyXG4gICAgICAgICAgbmV4dC5mYXJlQ29uZGl0aW9ucz8uY2hhbmdlIHx8IFtdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjdXJyZW50Lm5vU2hvdyA9IGN1cnJlbnQubm9TaG93LmNvbmNhdChcclxuICAgICAgICAgIG5leHQuZmFyZUNvbmRpdGlvbnM/Lm5vU2hvdyB8fCBbXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3VycmVudC51cGdyYWRlID0gY3VycmVudC51cGdyYWRlLmNvbmNhdChcclxuICAgICAgICAgIG5leHQuZmFyZUNvbmRpdGlvbnM/LnVwZ3JhZGUgfHwgW11cclxuICAgICAgICApO1xyXG4gICAgICAgIGN1cnJlbnQub3RoZXIgPSBjdXJyZW50Lm90aGVyLmNvbmNhdChuZXh0LmZhcmVDb25kaXRpb25zPy5vdGhlciB8fCBbXSk7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBjYW5jZWxsYXRpb246IFtdLFxyXG4gICAgICAgIGNoYW5nZTogW10sXHJcbiAgICAgICAgbm9TaG93OiBbXSxcclxuICAgICAgICB1cGdyYWRlOiBbXSxcclxuICAgICAgICBvdGhlcjogW11cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHJldHVybiB7IHJ1bGVzLCBmbGlnaHRzIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzYyAtIGdlbmVyYXRlcyBpY3MgZmlsZSBjb250ZW50XHJcbiAgICovXHJcbiAgZ2VuZXJhdGVJY3NGaWxlQ29udGVudHMoYmFza2V0SXRlbXM6IEJhc2tldEl0ZW1bXSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBpY3NCb2R5Q29udGVudCA9IHRoaXMuZ2VuZXJhdGVJY3NGaWxlQm9keUNvbnRlbnQoYmFza2V0SXRlbXMpO1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgJ0JFR0lOOlZDQUxFTkRBUlxcclxcbicsXHJcbiAgICAgICdQUk9ESUQ6LS8vTWljcm9zIFRyYXZlbC8vU0FCUyBDb3Jwb3JhdGUgLSBNTVhJSUkvL0VOXFxyXFxuJyxcclxuICAgICAgJ1ZFUlNJT046Mi4wXFxyXFxuJyxcclxuICAgICAgJ01FVEhPRDpSRVFVRVNUXFxyXFxuJyxcclxuICAgICAgaWNzQm9keUNvbnRlbnQsXHJcbiAgICAgICdFTkQ6VkNBTEVOREFSXFxyXFxuJ1xyXG4gICAgXS5qb2luKCcnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjIC0gZ2VuZXJhdGVzIGljcyBmaWxlIGJvZHkgY29udGVudCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgYmFza2V0SXRlbXMgcGFyYW1cclxuICAgKi9cclxuICBnZW5lcmF0ZUljc0ZpbGVCb2R5Q29udGVudChiYXNrZXRJdGVtczogQmFza2V0SXRlbVtdKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGJvZHlDb250ZW50OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIC8vIGdlbmVyYXRlIGNhbGVuZGFyIGRhdGEgZm9yIGVhY2ggYmFza2V0IGl0ZW1cclxuICAgIGJhc2tldEl0ZW1zLm1hcCgoYmFza2V0SXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICBkU3RhcnQ6ICcnLFxyXG4gICAgICAgIGRFbmQ6ICcnLFxyXG4gICAgICAgIGxvY2F0aW9uRnJvbTogJycsXHJcbiAgICAgICAgbG9jYXRpb25UbzogJycsXHJcbiAgICAgICAgYmFza2V0SWQ6ICcnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgICBzZXJ2aWNlVHlwZTogJycsXHJcbiAgICAgICAgc3VtbWFyeTogJydcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9ICdERCBNTU1NIFlZWVkgSEg6bW0nO1xyXG4gICAgICBjb25zdCB7IHR5cGUgfSA9IGJhc2tldEl0ZW0uc2VydmljZTtcclxuICAgICAgY29uc3QgeyBhZHVsdHMsIGNoaWxkcmVuLCBib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZSwgZGV0YWlsLCBzZXJ2aWNlIH0gPVxyXG4gICAgICAgIGJhc2tldEl0ZW07XHJcbiAgICAgIC8vIHBvcHVsYXRlIGRhdGEgb2JqZWN0IGRlcGVuZGluZyBvbiB0aGUgc2VydmljZSB0eXBlIGluIHRoZSBiYXNrZXRcclxuICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5hcnJpdmFsRGF0ZXRpbWU7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSAnJztcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBBaXJwb3J0IExvdW5nZSAtICR7ZGV0YWlsLm5hbWV9YDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBMb3VuZ2U6ICR7ZGV0YWlsLm5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYFN0YXJ0czogJHttb21lbnQoZGV0YWlsLmFycml2YWxEYXRldGltZSkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBZHVsdHM6ICR7YWR1bHRzfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBDaGlsZHJlbjogJHtjaGlsZHJlbn1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8uZGVwYXJ0cztcclxuICAgICAgICAgIGRhdGEuZEVuZCA9ICcnO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYFRheGkgYm9va2luZyAtIGZyb20gJHtkZXRhaWwuZnJvbUxvY2F0aW9uLmFkZHJlc3N9IHRvICR7ZGV0YWlsLnRvTG9jYXRpb24uYWRkcmVzc31gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYFBpY2t1cCBQb2ludDogJHtkZXRhaWwuZnJvbUxvY2F0aW9uLmFkZHJlc3N9XFxyXFxuYCxcclxuICAgICAgICAgICAgYFRpbWU6ICR7bW9tZW50KGRldGFpbC5kZXBhcnRzKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhcjpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/LnBpY2tVcERhdGV0aW1lO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gZGV0YWlsPy5kcm9wT2ZmRGF0ZXRpbWU7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgQ2FyIGJvb2tpbmcgLSBmcm9tICR7ZGV0YWlsLnBpY2tVcExvY2F0aW9uLmFkZHJlc3N9IHRvICR7ZGV0YWlsLmRyb3BPZmZMb2NhdGlvbi5hZGRyZXNzfWA7XHJcbiAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gW1xyXG4gICAgICAgICAgICBgUGlja3VwIFBvaW50OiAke2RldGFpbC5waWNrVXBMb2NhdGlvbi5hZGRyZXNzfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBUaW1lOiAke21vbWVudChkZXRhaWwucGlja1VwRGF0ZXRpbWUpLmZvcm1hdChkYXRlRm9ybWF0KX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQXJyaXZhbCBQb2ludDogJHtkZXRhaWwuZHJvcE9mZkxvY2F0aW9uLmFkZHJlc3N9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICAoZGF0YS5sb2NhdGlvbkZyb20gPSBkZXRhaWwucGlja1VwTG9jYXRpb24uYWRkcmVzcyksXHJcbiAgICAgICAgICAgIChkYXRhLmxvY2F0aW9uVG8gPSBkZXRhaWwuZHJvcE9mZkxvY2F0aW9uLmFkZHJlc3MpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgdGhpcyBjYXNlXHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5GYXN0VHJhY2s6XHJcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHRoaXMgY2FzZVxyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8ub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gZGV0YWlsPy5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVBcnJpdmluZztcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBGbGlnaHQgQm9va2luZyAtIEZyb20gJHtkZXRhaWwub3V0Ym91bmRGbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnR9IHRvICR7ZGV0YWlsLm91dGJvdW5kRmxpZ2h0c1swXS5kZXN0aW5hdGlvbkFpcnBvcnR9YDtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBGcm9tOiAke2RldGFpbC5vdXRib3VuZEZsaWdodHNbMF0ub3JpZ2luQWlycG9ydH1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgRGVwYXJ0OiAke21vbWVudChcclxuICAgICAgICAgICAgICBkZXRhaWwub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICAgICAgICkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBUbzogJHtkZXRhaWwub3V0Ym91bmRGbGlnaHRzWzBdLmRlc3RpbmF0aW9uQWlycG9ydH1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQXJyaXZlOiAke21vbWVudChcclxuICAgICAgICAgICAgICBkZXRhaWwub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lQXJyaXZpbmdcclxuICAgICAgICAgICAgKS5mb3JtYXQoZGF0ZUZvcm1hdCl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICAgICAgZGF0YS5iYXNrZXRJZCA9IGJhc2tldEl0ZW0uaWQ7XHJcbiAgICAgICAgICBkYXRhLnNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBkYXRhLmRTdGFydCA9IGRldGFpbD8uY2hlY2tJbjtcclxuICAgICAgICAgIGRhdGEuZEVuZCA9IGRldGFpbD8uY2hlY2tPdXQ7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgSG90ZWwgYm9va2luZyAtICAke2RldGFpbC5ob3RlbE5hbWV9YDtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBIb3RlbDogJHtkZXRhaWwuaG90ZWxOYW1lfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBcnJpdmFsOiAke21vbWVudChkZXRhaWwuY2hlY2tJbikuZm9ybWF0KGRhdGVGb3JtYXQpfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBEZXBhcnR1cmU6ICR7bW9tZW50KGRldGFpbC5jaGVja091dCkuZm9ybWF0KGRhdGVGb3JtYXQpfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXHJcbiAgICAgICAgICBdLmpvaW4oJycpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbDpcclxuICAgICAgICAgIGRhdGEuYmFza2V0SWQgPSBiYXNrZXRJdGVtLmlkO1xyXG4gICAgICAgICAgZGF0YS5zZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgZGF0YS5kU3RhcnQgPSBkZXRhaWw/Lm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/Lm91dHdhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lO1xyXG4gICAgICAgICAgZGF0YS5sb2NhdGlvbkZyb20gPSBkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZTtcclxuICAgICAgICAgIGRhdGEubG9jYXRpb25UbyA9IGRldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxEYXRlVGltZTtcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBUcmFpbiBCb29raW5nIC0gRnJvbSAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZVN0YXRpb25OYW1lfSB0byAke2RldGFpbC5vdXR3YXJkRGV0YWlsLmFycml2YWxTdGF0aW9uTmFtZX1gO1xyXG4gICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IFtcclxuICAgICAgICAgICAgYEZyb20gJHtkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgVG8gJHtkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsU3RhdGlvbk5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYERlcGFydHVyZSAke21vbWVudChkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVEYXRlVGltZSkuZm9ybWF0KFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXRcclxuICAgICAgICAgICAgKX1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQXJyaXZhbCAke21vbWVudChkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWUpLmZvcm1hdChcclxuICAgICAgICAgICAgICBkYXRlRm9ybWF0XHJcbiAgICAgICAgICAgICl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLlBhcmtpbmc6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5hcnJpdmFsRGF0ZXRpbWU7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSBkZXRhaWw/LmRlcGFydERhdGV0aW1lO1xyXG4gICAgICAgICAgZGF0YS5zdW1tYXJ5ID0gYEFpcnBvcnQgcGFya2luZyAtICR7ZGV0YWlsLm5hbWV9YDtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBBaXJwb3J0IFBhcmtpbmc6ICR7ZGV0YWlsLm5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEJvb2tpbmcgUmVmOiAke2Jvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlfWBcclxuICAgICAgICAgIF0uam9pbignJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLlJhaWw6XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5vdXR3YXJkRGV0YWlsLmRlcGFydHVyZURhdGVUaW1lO1xyXG4gICAgICAgICAgZGF0YS5kRW5kID0gZGV0YWlsPy5vdXR3YXJkRGV0YWlsLmFycml2YWxEYXRlVGltZTtcclxuICAgICAgICAgIGRhdGEubG9jYXRpb25Gcm9tID0gZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWU7XHJcbiAgICAgICAgICBkYXRhLmxvY2F0aW9uVG8gPSBkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsRGF0ZVRpbWU7XHJcbiAgICAgICAgICBkYXRhLnN1bW1hcnkgPSBgVHJhaW4gQm9va2luZyAtIEZyb20gJHtkZXRhaWwub3V0d2FyZERldGFpbC5kZXBhcnR1cmVTdGF0aW9uTmFtZX0gdG8gJHtkZXRhaWwub3V0d2FyZERldGFpbC5hcnJpdmFsU3RhdGlvbk5hbWV9YDtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBGcm9tICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlU3RhdGlvbk5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYFRvICR7ZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbFN0YXRpb25OYW1lfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBEZXBhcnR1cmUgJHttb21lbnQoZGV0YWlsLm91dHdhcmREZXRhaWwuZGVwYXJ0dXJlRGF0ZVRpbWUpLmZvcm1hdChcclxuICAgICAgICAgICAgICBkYXRlRm9ybWF0XHJcbiAgICAgICAgICAgICl9XFxyXFxuYCxcclxuICAgICAgICAgICAgYEFycml2YWwgJHttb21lbnQoZGV0YWlsLm91dHdhcmREZXRhaWwuYXJyaXZhbERhdGVUaW1lKS5mb3JtYXQoXHJcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdFxyXG4gICAgICAgICAgICApfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBCb29raW5nIFJlZjogJHtib29raW5nVGhpcmRQYXJ0eVJlZmVyZW5jZX1gXHJcbiAgICAgICAgICBdLmpvaW4oJycpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGJvZHlDb250ZW50LnB1c2goXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgJ0JFR0lOOlZFVkVOVFxcclxcbicsXHJcbiAgICAgICAgICBkYXRhLmRTdGFydFxyXG4gICAgICAgICAgICA/IGBEVFNUQVJUOiR7bW9tZW50KGRhdGEuZFN0YXJ0KS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpfVxcclxcbmBcclxuICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgIGRhdGEuZEVuZFxyXG4gICAgICAgICAgICA/IGBEVEVORDoke21vbWVudChkYXRhLmRFbmQpLmZvcm1hdCgnWVlZWU1NRERUSEhtbXNzJyl9XFxyXFxuYFxyXG4gICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgJ09SR0FOSVpFUjtDTj1cIkRvIG5vdCByZXBseSB0byB0aGlzIGVtYWlsXCI6bWFpbHRvOmRvX25vdF9yZXBseUBzYWJzY29ycC5jb21cXHJcXG4nLFxyXG4gICAgICAgICAgZGF0YS5sb2NhdGlvblRvICYmIGRhdGEubG9jYXRpb25Gcm9tXHJcbiAgICAgICAgICAgID8gYExPQ0FUSU9OOiAke2RhdGEubG9jYXRpb25Ub30gdG8gJHtkYXRhLmxvY2F0aW9uRnJvbX0gXFxyXFxuYFxyXG4gICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgJ1RSQU5TUDpPUEFRVUVcXHJcXG4nLFxyXG4gICAgICAgICAgJ1NFUVVFTkNFOjBcXHJcXG4nLFxyXG4gICAgICAgICAgYFVJRDoke2RhdGEuc2VydmljZVR5cGV9XyR7aW5kZXh9XyR7ZGF0YS5iYXNrZXRJZH1Ac2Fic2NvcnAuY29tXFxyXFxuYCxcclxuICAgICAgICAgIGBEVFNUQU1QOiR7bW9tZW50KCkuZm9ybWF0KCdZWVlZTU1ERFRISG1tc3MnKX1cXHJcXG5gLFxyXG4gICAgICAgICAgYERFU0NSSVBUSU9OOiR7ZGF0YS5kZXNjcmlwdGlvbn1cXHJcXG5gLFxyXG4gICAgICAgICAgYFNVTU1BUlk6JHtkYXRhLnN1bW1hcnl9XFxyXFxuYCxcclxuICAgICAgICAgICdFTkQ6VkVWRU5UXFxyXFxuJ1xyXG4gICAgICAgIF0uam9pbignJylcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBib2R5Q29udGVudC5qb2luKCcnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjIC0gY3JlYXRlcyBhbiBlbGVtZW50IGluIG1lbW9yeSBhbmQgdHJpZ2dlcnMgY2xpY2sgZXZlbnQgdG8gZG93bmxvYWQgaWNzIGZpbGVcclxuICAgKi9cclxuICBkb3dubG9hZEljcyhmaWxlbmFtZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcclxuICAgICAgJ2hyZWYnLFxyXG4gICAgICAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsJyArIGVuY29kZVVSSUNvbXBvbmVudCh0ZXh0KVxyXG4gICAgKTtcclxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVuYW1lKTtcclxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XHJcbiAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICBlbGVtZW50LmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzcGxpdCBhIHN0cmluZyBvbiBjYXBpdGFsc1xyXG4gICAqIEBwYXJhbSByYXdTdHJpbmcgLSB0aGUgc3RyaW5nIHdlIHdhbnQgdG8gc3BsaXRcclxuICAgKiBAcGFyYW0gam9pbiAtIHdoZXRoZXIgb3Igbm90IHRvIGpvaW5nIHRoZSBzcGxpdCBpbnRvIG9uZSBzdHJpbmcsIHNlcGVyYXRlZCBieSBhIHNwYWNlXHJcbiAgICogQHJldHVybnMgc3RyaW5nL3N0cmluZ1tdXHJcbiAgICovXHJcbiAgc3BsaXRTdHJpbmdPbkNhcGl0YWxzKFxyXG4gICAgcmF3U3RyaW5nOiBzdHJpbmcsXHJcbiAgICBqb2luOiBib29sZWFuID0gZmFsc2VcclxuICApOiBzdHJpbmcgfCBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBzcGxpdFN0cmluZyA9IHJhd1N0cmluZy5zcGxpdCgvKD89W0EtWl0pLyk7XHJcblxyXG4gICAgaWYgKGpvaW4pIHtcclxuICAgICAgcmV0dXJuIHNwbGl0U3RyaW5nLmpvaW4oJyAnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3BsaXRTdHJpbmc7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVGbGlnaHRGaWx0ZXJzKFxyXG4gICAgam91cm5leXM6IEZsaWdodEl0aW5lcmFyeVtdLFxyXG4gICAgZGVmYXVsdEZpbHRlcnM6IEZsaWdodEZpbHRlcnNcclxuICApOiBGbGlnaHRGaWx0ZXJzIHtcclxuICAgIHJldHVybiBqb3VybmV5cy5yZWR1Y2UoXHJcbiAgICAgIChmaWx0ZXJzOiBGbGlnaHRGaWx0ZXJzLCByZXN1bHQxOiBGbGlnaHRJdGluZXJhcnkpOiBGbGlnaHRGaWx0ZXJzID0+IHtcclxuICAgICAgICBjb25zdCB0b3RhbFN0b3BzID0gcmVzdWx0MS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMTtcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzW3RvdGFsU3RvcHNdID0gZmlsdGVycy5zdG9wc1t0b3RhbFN0b3BzXSB8fCB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBgJHt0b3RhbFN0b3BzfSBzdG9wYCArICh0b3RhbFN0b3BzICE9PSAxID8gJ3MnIDogJycpLFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgdmFsdWU6IHRvdGFsU3RvcHMgKyAxXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgdXBkYXRlRmxpZ2h0SXRlbXMgPSAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5KTogdm9pZCA9PiB7XHJcbiAgICAgICAgICBmaWx0ZXJzLmNsYXNzZXNbZmxpZ2h0LmNhYmluQ2xhc3NdID0gZmlsdGVycy5jbGFzc2VzW1xyXG4gICAgICAgICAgICBmbGlnaHQuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgXSB8fCB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsaWdodC5jYWJpbkNsYXNzLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmbGlnaHQuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGZpbHRlcnMuYWlybGluZXNbZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJdID0gZmlsdGVycy5haXJsaW5lc1tcclxuICAgICAgICAgICAgZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJcclxuICAgICAgICAgIF0gfHwge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGlnaHQubWFya2V0aW5nQ2Fycmllck5hbWUsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsdWU6IGZsaWdodC5tYXJrZXRpbmdDYXJyaWVyXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMuZm9yRWFjaCh1cGRhdGVGbGlnaHRJdGVtcyk7XHJcbiAgICAgICAgY29uc3QgYmFnZ2FnZTogbnVtYmVyID0gTWF0aC5taW4oXHJcbiAgICAgICAgICAuLi5yZXN1bHQxLmJhZ2dhZ2VBbGxvd2FuY2UubWFwKFxyXG4gICAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBmaWx0ZXJzLmJhZ2dhZ2VbYmFnZ2FnZV0gPSBmaWx0ZXJzLmJhZ2dhZ2VbYmFnZ2FnZV0gfHwge1xyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgZGlzcGxheTogYCR7YmFnZ2FnZX0gYmFnJHtiYWdnYWdlICE9PSAxID8gJ3MnIDogJyd9YCxcclxuICAgICAgICAgIHZhbHVlOiBiYWdnYWdlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBpbmRleGVkRmxpZ2h0ID0gKFxyXG4gICAgICAgICAgZmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgICAgICAgZmlsdGVyQXR0cmlidXRlOiBGbGlnaHRGaWx0ZXJzUmVjb3JkS2V5cyxcclxuICAgICAgICAgIGZsaWdodEF0dHJpYnV0ZToga2V5b2YgRmxpZ2h0Sm91cm5leSxcclxuICAgICAgICAgIGZsaWdodEF0dHJpYnV0ZU5hbWU6IGtleW9mIEZsaWdodEpvdXJuZXksXHJcbiAgICAgICAgICBpbmRleDogbnVtYmVyXHJcbiAgICAgICAgKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0ZW1wOiBzdHJpbmcgPSBmbGlnaHRzW2luZGV4XVtmbGlnaHRBdHRyaWJ1dGVdO1xyXG4gICAgICAgICAgZmlsdGVyc1tmaWx0ZXJBdHRyaWJ1dGVdW3RlbXBdID0gZmlsdGVyc1tmaWx0ZXJBdHRyaWJ1dGVdW3RlbXBdIHx8IHtcclxuICAgICAgICAgICAgdmFsdWU6IGZsaWdodHNbaW5kZXhdW2ZsaWdodEF0dHJpYnV0ZV0sXHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsaWdodHNbaW5kZXhdW2ZsaWdodEF0dHJpYnV0ZU5hbWVdLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpbmRleGVkRmxpZ2h0KFxyXG4gICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAnZGVwYXR1cmVBaXJwb3J0JyxcclxuICAgICAgICAgICdvcmlnaW5BaXJwb3J0JyxcclxuICAgICAgICAgICdvcmlnaW5BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpbmRleGVkRmxpZ2h0KFxyXG4gICAgICAgICAgcmVzdWx0MS5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAnYXJyaXZhbEFpcnBvcnQnLFxyXG4gICAgICAgICAgJ2Rlc3RpbmF0aW9uQWlycG9ydCcsXHJcbiAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgZmlsdGVycy5wcmljZS5taW4gPVxyXG4gICAgICAgICAgZmlsdGVycy5wcmljZS5taW4gPCByZXN1bHQxLnRvdGFsLnByaWNlXHJcbiAgICAgICAgICAgID8gZmlsdGVycy5wcmljZS5taW5cclxuICAgICAgICAgICAgOiByZXN1bHQxLnRvdGFsLnByaWNlO1xyXG5cclxuICAgICAgICBmaWx0ZXJzLnByaWNlLm1heCA9XHJcbiAgICAgICAgICBmaWx0ZXJzLnByaWNlLm1heCA+IHJlc3VsdDEudG90YWwucHJpY2VcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLnByaWNlLm1heFxyXG4gICAgICAgICAgICA6IHJlc3VsdDEudG90YWwucHJpY2U7XHJcblxyXG4gICAgICAgIGZpbHRlcnMuZHVyYXRpb24ubWluID1cclxuICAgICAgICAgIGZpbHRlcnMuZHVyYXRpb24ubWluIDwgcmVzdWx0MS5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmR1cmF0aW9uLm1pblxyXG4gICAgICAgICAgICA6IHJlc3VsdDEub3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG5cclxuICAgICAgICBmaWx0ZXJzLmR1cmF0aW9uLm1heCA9XHJcbiAgICAgICAgICBmaWx0ZXJzLmR1cmF0aW9uLm1heCA+IHJlc3VsdDEub3V0Ym91bmRUb3RhbER1cmF0aW9uXHJcbiAgICAgICAgICAgID8gZmlsdGVycy5kdXJhdGlvbi5tYXhcclxuICAgICAgICAgICAgOiByZXN1bHQxLm91dGJvdW5kVG90YWxEdXJhdGlvbjtcclxuXHJcbiAgICAgICAgY29uc3QgZGVwYXJ0VGltZSA9IG1vbWVudChcclxuICAgICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuXHJcbiAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1pbiA9XHJcbiAgICAgICAgICBmaWx0ZXJzLmRlcGFydHVyZVRpbWUubWluIDwgZGVwYXJ0VGltZVxyXG4gICAgICAgICAgICA/IGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5taW5cclxuICAgICAgICAgICAgOiBkZXBhcnRUaW1lO1xyXG4gICAgICAgIGZpbHRlcnMuZGVwYXJ0dXJlVGltZS5tYXggPVxyXG4gICAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLm1heCA+IGRlcGFydFRpbWVcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmRlcGFydHVyZVRpbWUubWF4XHJcbiAgICAgICAgICAgIDogZGVwYXJ0VGltZTtcclxuXHJcbiAgICAgICAgY29uc3QgYXJyaXZhbFRpbWUgPSBtb21lbnQoXHJcbiAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0c1tyZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAuZGF0ZVRpbWVBcnJpdmluZ1xyXG4gICAgICAgICkuZ2V0KCdob3VyJyk7XHJcblxyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWluID1cclxuICAgICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWluIDwgYXJyaXZhbFRpbWVcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmFycml2YWxUaW1lLm1pblxyXG4gICAgICAgICAgICA6IGFycml2YWxUaW1lO1xyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWF4ID1cclxuICAgICAgICAgIGZpbHRlcnMuYXJyaXZhbFRpbWUubWF4ID4gYXJyaXZhbFRpbWVcclxuICAgICAgICAgICAgPyBmaWx0ZXJzLmFycml2YWxUaW1lLm1heFxyXG4gICAgICAgICAgICA6IGFycml2YWxUaW1lO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyAmJiByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1pbiA9XHJcbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWluIDwgcmVzdWx0MS5pbmJvdW5kVG90YWxEdXJhdGlvblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5EdXJhdGlvbi5taW5cclxuICAgICAgICAgICAgICA6IHJlc3VsdDEuaW5ib3VuZFRvdGFsRHVyYXRpb247XHJcblxyXG4gICAgICAgICAgZmlsdGVycy5yZXR1cm5EdXJhdGlvbi5tYXggPVxyXG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkR1cmF0aW9uLm1heCA+IHJlc3VsdDEuaW5ib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICAgICAgICA/IGZpbHRlcnMucmV0dXJuRHVyYXRpb24ubWF4XHJcbiAgICAgICAgICAgICAgOiByZXN1bHQxLmluYm91bmRUb3RhbER1cmF0aW9uO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGRlcGFydFRpbWVSZXR1cm4gPSBtb21lbnQoXHJcbiAgICAgICAgICAgIHJlc3VsdDEuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdcclxuICAgICAgICAgICkuZ2V0KCdob3VyJyk7XHJcblxyXG4gICAgICAgICAgZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1pbiA9XHJcbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5taW4gPCBkZXBhcnRUaW1lUmV0dXJuXHJcbiAgICAgICAgICAgICAgPyBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWluXHJcbiAgICAgICAgICAgICAgOiBkZXBhcnRUaW1lUmV0dXJuO1xyXG4gICAgICAgICAgZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLm1heCA9XHJcbiAgICAgICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZS5tYXggPiBkZXBhcnRUaW1lUmV0dXJuXHJcbiAgICAgICAgICAgICAgPyBmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUubWF4XHJcbiAgICAgICAgICAgICAgOiBkZXBhcnRUaW1lUmV0dXJuO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGFycml2YWxUaW1lUmV0dXJuID0gbW9tZW50KFxyXG4gICAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0c1tyZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAgIC5kYXRlVGltZUFycml2aW5nXHJcbiAgICAgICAgICApLmdldCgnaG91cicpO1xyXG5cclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWluID1cclxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5taW4gPCBhcnJpdmFsVGltZVJldHVyblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5taW5cclxuICAgICAgICAgICAgICA6IGFycml2YWxUaW1lUmV0dXJuO1xyXG4gICAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5tYXggPVxyXG4gICAgICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLm1heCA+IGFycml2YWxUaW1lUmV0dXJuXHJcbiAgICAgICAgICAgICAgPyBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLm1heFxyXG4gICAgICAgICAgICAgIDogYXJyaXZhbFRpbWVSZXR1cm47XHJcblxyXG4gICAgICAgICAgKHJlc3VsdDEuaW5ib3VuZEZsaWdodHMgfHwgW10pLmZvckVhY2godXBkYXRlRmxpZ2h0SXRlbXMpO1xyXG4gICAgICAgICAgaW5kZXhlZEZsaWdodChcclxuICAgICAgICAgICAgcmVzdWx0MS5pbmJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICAgJ2RlcGF0dXJlUmV0dXJuQWlycG9ydCcsXHJcbiAgICAgICAgICAgICdvcmlnaW5BaXJwb3J0JyxcclxuICAgICAgICAgICAgJ29yaWdpbkFpcnBvcnROYW1lJyxcclxuICAgICAgICAgICAgMFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGluZGV4ZWRGbGlnaHQoXHJcbiAgICAgICAgICAgIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICdhcnJpdmFsUmV0dXJuQWlycG9ydCcsXHJcbiAgICAgICAgICAgICdkZXN0aW5hdGlvbkFpcnBvcnQnLFxyXG4gICAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICAgIHJlc3VsdDEub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaWx0ZXJzO1xyXG4gICAgICB9LFxyXG4gICAgICB0aGlzLmNsb25lKGRlZmF1bHRGaWx0ZXJzKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG1hcE92ZXJPYmplY3Q8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFY+LCBWPihcclxuICAgIGl0ZW1zOiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBWPixcclxuICAgIGNhbGxiYWNrOiAodmFsdWU6IFYsIGtleT86IHN0cmluZyB8IG51bWJlcikgPT4gVlxyXG4gICk6IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFY+IHtcclxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhpdGVtcykucmVkdWNlKFxyXG4gICAgICAoYWNjdW06IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFY+LCBlbnRyaWVzOiBbc3RyaW5nIHwgbnVtYmVyLCBWXSkgPT4ge1xyXG4gICAgICAgIGFjY3VtW2VudHJpZXNbMF1dID0gY2FsbGJhY2soZW50cmllc1sxXSwgZW50cmllc1swXSk7XHJcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICB9LFxyXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBWPlxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
|
|
1380
|
+
function isSet(obj) {
|
|
1381
|
+
return obj !== undefined && obj !== null;
|
|
1382
|
+
}
|
|
1383
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBVXZCLE9BQU8sRUFDTCxtQkFBbUIsRUFLbkIsbUJBQW1CLEVBSXBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUtMLGdCQUFnQixFQUdoQixhQUFhLEVBRWIsV0FBVyxFQUVaLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBU2pELE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0sd0JBQXdCLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUVyQixNQUFNLE9BQU8sa0JBQWtCO0lBWTdCLFNBQVMsQ0FBQyxHQUFXO1FBQ25CLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDakQsQ0FBQztJ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QUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuXHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFza2V0RGV0YWlscyxcclxuICBCYXNrZXRJdGVtTWFuYWdlbWVudEluZm9cclxufSBmcm9tICcuLi9zZXJ2aWNlcy9lbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkIH0gZnJvbSAnLi9tYW5hZ2VtZW50LWluZm8tYW5kLXZhbGlkJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2VzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBGbGlnaHREaXJlY3Rpb25FbnVtLFxyXG4gIEZsaWdodEdyb3VwcyxcclxuICBNYWluRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBNaW5NYXgsXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBPQlRGbGlnaHRDYWJpbkNsYXNzLFxyXG4gIE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICBTY2hlbWEsXHJcbiAgVW5wYWNrZWRcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQWlycG9ydCxcclxuICBCYWdnYWdlQWxsb3dhbmNlLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgRmFyZUNvbmRpdGlvbnMsXHJcbiAgRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBGbGlnaHRJdGluZXJhcnksXHJcbiAgRmxpZ2h0Sm91cm5leSxcclxuICBQYXNzZW5nZXJUeXBlLFxyXG4gIFNlcnZpY2UsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgVXNlclBhc3NlbmdlclR5cGVJbnB1dFxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQgeyBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzdXBwbGVtZW50YXJ5LWJvb2tpbmctaW5mby1pbXBsJztcclxuaW1wb3J0IHsgTWVtb3Jpc2UgfSBmcm9tICcuL2xpbWl0ZWQtY2FjaGUuY2xhc3MnO1xyXG5pbXBvcnQge1xyXG4gIEZsaWdodEZpbHRlcnMsXHJcbiAgRmxpZ2h0RmlsdGVyc1JlY29yZEtleXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1maWx0ZXJzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFJ1bGVzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zdW1tYXJ5LWludGVyZmFjZSc7XHJcblxyXG5kZWNsYXJlIHZhciBoZXhfaG1hY19tZDU6IGFueTtcclxuXHJcbmNvbnN0IEZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTY7XHJcbmNvbnN0IFJBSUxfTUFYX0NISUxEX0FHRV9ZRUFSUyA9IDEyO1xyXG5jb25zdCBFVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XHJcbmNvbnN0IENPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgPSAxNTtcclxuY29uc3QgTE9VTkdFU19NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XHJcbmNvbnN0IEZMSUdIVF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyA9IDA7XHJcbmNvbnN0IFJBSUxfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xyXG5jb25zdCBDT0FDSF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyA9IDA7XHJcbmNvbnN0IExPVU5HRVNfTUFYX0lORkFOVF9BR0VfWUVBUlMgPSAwO1xyXG5jb25zdCBNRVRSRVNfVE9fTUlMRVNfQ09OVkVSU0lPTiA9IDE2MDk7XHJcbmNvbnN0IFRJTUVfQkFTRSA9IDYwO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhc2VIZWxwZXJSb3V0aW5lcyB7XHJcbiAgc3RhdGljIFJFQURfREFURV9GT1JNQVQgPSAnZGQsIEQgTU1NIFlZWVknO1xyXG4gIHN0YXRpYyBSRUFEX1RJTUVfRk9STUFUID0gJ0hIOm1tJztcclxuICBzdGF0aWMgREFURV9GT1JNQVQgPSAnWVlNTUREJztcclxuICBzdGF0aWMgR1JBUEhRTF9EQVRBX0ZPUk1BVF9USU1FID0gJ1lZWVktTU0tREQgSEg6bW06c3MnO1xyXG4gIHN0YXRpYyBJU09fREFUQV9GT1JNQVQgPSAnWVlZWS1NTS1ERCc7XHJcbiAgc3RhdGljIElTT19EQVRBX0ZPUk1BVF9USU1FID0gJ1lZWVktTU0tREQgSEg6bW0nO1xyXG4gIHN0YXRpYyBJU09fREFUQV9GT1JNQVRfTk9fSFlQSEFOUyA9ICdZWVlZTU1ERCc7XHJcbiAgc3RhdGljIFRJTUVfRk9STUFUID0gJ0hIbW0nO1xyXG4gIHN0YXRpYyBUSU1FX0ZPUk1BVF9DT0xPTiA9ICdISDptbSc7XHJcbiAgc3RhdGljIE1NRERZWV9EQVRFID0gJ0RETU1ZWVlZJztcclxuXHJcbiAgbWluVG9Ib3VyKGR1cjogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gYCR7TWF0aC5mbG9vcihkdXIgLyA2MCl9aCAke2R1ciAlIDYwfW1gO1xyXG4gIH1cclxuXHJcbiAgbWFrZUNvbG9uVGltZSh0aW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aW1lLnN1YnN0cmluZygwLCAyKSArICc6JyArIHRpbWUuc3Vic3RyaW5nKDIsIDQpO1xyXG4gIH1cclxuXHJcbiAgbm9uTnVsbE1pbihrZXk6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcclxuICAgIHJldHVybiBhcmdzLnJlZHVjZShcclxuICAgICAgKGN1cnJlbnQsIGl0ZW0pID0+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/IGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWluXHJcbiAgICAgICAgICAgICAgOiBhcnJpdmFsVGltZVJldHVybjtcclxuICAgICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUubWF4ID1cclxuICAgICAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5tYXggPiBhcnJpdmFsVGltZVJldHVyblxyXG4gICAgICAgICAgICAgID8gZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZS5tYXhcclxuICAgICAgICAgICAgICA6IGFycml2YWxUaW1lUmV0dXJuO1xyXG5cclxuICAgICAgICAgIChyZXN1bHQxLmluYm91bmRGbGlnaHRzIHx8IFtdKS5mb3JFYWNoKHVwZGF0ZUZsaWdodEl0ZW1zKTtcclxuICAgICAgICAgIGluZGV4ZWRGbGlnaHQoXHJcbiAgICAgICAgICAgIHJlc3VsdDEuaW5ib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICdkZXBhdHVyZVJldHVybkFpcnBvcnQnLFxyXG4gICAgICAgICAgICAnb3JpZ2luQWlycG9ydCcsXHJcbiAgICAgICAgICAgICdvcmlnaW5BaXJwb3J0TmFtZScsXHJcbiAgICAgICAgICAgIDBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpbmRleGVkRmxpZ2h0KFxyXG4gICAgICAgICAgICByZXN1bHQxLmluYm91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAnYXJyaXZhbFJldHVybkFpcnBvcnQnLFxyXG4gICAgICAgICAgICAnZGVzdGluYXRpb25BaXJwb3J0JyxcclxuICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uQWlycG9ydE5hbWUnLFxyXG4gICAgICAgICAgICByZXN1bHQxLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmlsdGVycztcclxuICAgICAgfSxcclxuICAgICAgdGhpcy5jbG9uZShkZWZhdWx0RmlsdGVycylcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBtYXBPdmVyT2JqZWN0PFY+KFxyXG4gICAgaXRlbXM6IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFY+LFxyXG4gICAgY2FsbGJhY2s6ICh2YWx1ZTogViwga2V5Pzogc3RyaW5nIHwgbnVtYmVyKSA9PiBWXHJcbiAgKTogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgVj4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGl0ZW1zKS5yZWR1Y2UoXHJcbiAgICAgIChhY2N1bTogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgVj4sIGVudHJpZXM6IFtzdHJpbmcgfCBudW1iZXIsIFZdKSA9PiB7XHJcbiAgICAgICAgYWNjdW1bZW50cmllc1swXV0gPSBjYWxsYmFjayhlbnRyaWVzWzFdLCBlbnRyaWVzWzBdKTtcclxuICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgIH0sXHJcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFY+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbm9ybWFsaXNlTWludXRlVG9CYXNlMTAobWluOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgucm91bmQoKG1pbiAqIDEwMCkgLyA2MCk7XHJcbiAgfVxyXG5cclxuICBPQlRGbGlnaHRDYWJpbkNsYXNzVG9GbGlnaHRDYWJpbkNsYXNzKFxyXG4gICAgdmFsdWU6IE9CVEZsaWdodENhYmluQ2xhc3NcclxuICApOiBNYWluRmxpZ2h0Q2FiaW5DbGFzcyB7XHJcbiAgICBjb25zdCBPQlRGbGlnaHRDYWJpbkNsYXNzVG9GbGlnaHRDYWJpbkNsYXNzOiBSZWNvcmQ8XHJcbiAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MsXHJcbiAgICAgIE1haW5GbGlnaHRDYWJpbkNsYXNzXHJcbiAgICA+ID0ge1xyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc106IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzQnJhbmRlZF06IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aV06IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpLFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGlCcmFuZGVkXTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGksXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NdOiBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3MsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NCcmFuZGVkXTpcclxuICAgICAgICBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3MsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkXTpcclxuICAgICAgICBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkLFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZEJyYW5kZWRdOlxyXG4gICAgICAgIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQsXHJcbiAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XTogRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdCxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RCcmFuZGVkXTogRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdCxcclxuICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215LFxyXG4gICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teUJyYW5kZWRdOlxyXG4gICAgICAgIEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXlcclxuICAgIH07XHJcbiAgICByZXR1cm4gT0JURmxpZ2h0Q2FiaW5DbGFzc1RvRmxpZ2h0Q2FiaW5DbGFzc1t2YWx1ZV07XHJcbiAgfVxyXG4gIEZsaWdodENhYmluQ2xhc3NUb0JyYW5kZWRPQlRGbGlnaHRDYWJpbkNsYXNzKFxyXG4gICAgdmFsdWU6IEZsaWdodEdyb3VwcyxcclxuICAgIGlzQnJhbmRlZDogYm9vbGVhblxyXG4gICk6IE9CVEZsaWdodENhYmluQ2xhc3Mge1xyXG4gICAgY29uc3QgdHlwZXM6IFJlY29yZDxGbGlnaHRHcm91cHMsIE9CVEZsaWdodENhYmluQ2xhc3M+ID0gaXNCcmFuZGVkXHJcbiAgICAgID8ge1xyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXldOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215QnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1CdXNpbmVzc106XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuTGl0ZUVjb25vbXldOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXldOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1GaXJzdF06IE9CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RCcmFuZGVkLFxyXG4gICAgICAgICAgW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRdOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teUJyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGldOlxyXG4gICAgICAgICAgICBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aUJyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzXTpcclxuICAgICAgICAgICAgT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzQnJhbmRlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzXTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc0JyYW5kZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdF06IE9CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RCcmFuZGVkXHJcbiAgICAgICAgfVxyXG4gICAgICA6IHtcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teSxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1CdXNpbmVzc106IE9CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5MaXRlRWNvbm9teV06IE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215XTogT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZCxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1GaXJzdF06IE9CVEZsaWdodENhYmluQ2xhc3MuRmlyc3QsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZF06XHJcbiAgICAgICAgICAgIE9CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teV06IE9CVEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXksXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGldOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aSxcclxuICAgICAgICAgIFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NdOiBPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3MsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc106IE9CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MsXHJcbiAgICAgICAgICBbRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdF06IE9CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RcclxuICAgICAgICB9O1xyXG4gICAgcmV0dXJuIHR5cGVzW3ZhbHVlXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGNvbnZlcnQgZnJvbSBtZXRyZXMgdG8gbWlsZXNcclxuICAgKiBAcGFyYW0gbWV0cmVzIC0gdGhlIGFtb3VudCBvZiBtZXRyZXMgdG8gY29udmVydFxyXG4gICAqIEBwYXJhbSBkZWNpbWFsUGxhY2VzIC0gdGhlIGFtb3VudCBvZiBkLnAgdG8gY29udmVydCB0bywgaWYgbmVnYXRpdmUgKGRlZmF1bHQpIGRvZXMgbm90IHJlc3RyaWN0IHRoZSBkZWNpbWFsIHBsYWNlc1xyXG4gICAqL1xyXG4gIGNvbnZlcnRNZXRyZXNUb01pbGVzKG1ldHJlczogbnVtYmVyLCBkZWNpbWFsUGxhY2VzOiBudW1iZXIgPSAtMSk6IG51bWJlciB7XHJcbiAgICBjb25zdCBtaWxlcyA9IG1ldHJlcyAvIE1FVFJFU19UT19NSUxFU19DT05WRVJTSU9OO1xyXG5cclxuICAgIGlmIChkZWNpbWFsUGxhY2VzID49IDApIHtcclxuICAgICAgcmV0dXJuIE51bWJlcihtaWxlcy50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWlsZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBjb252ZXJ0IHNlY29uZHMgdG8gaG91cnNcclxuICAgKiBAcGFyYW0gc2Vjb25kcyAtIHRvIGNvbnZlcnRcclxuICAgKiBAcGFyYW0gZGVjaW1hbFBsYWNlcyAtIHRoZSBhbW91bnQgb2YgZC5wIHRvIGNvbnZlcnQgdG8sIGlmIG5lZ2F0aXZlIChkZWZhdWx0KSBkb2VzIG5vdCByZXN0cmljdCB0aGUgZGVjaW1hbCBwbGFjZXNcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGNvbnZlcnRTZWNvbmRzVG9Ib3VycyhzZWNvbmRzOiBudW1iZXIsIGRlY2ltYWxQbGFjZXM6IG51bWJlciA9IC0xKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGhvdXJzID0gc2Vjb25kcyAvIFRJTUVfQkFTRSAvIFRJTUVfQkFTRTtcclxuXHJcbiAgICBpZiAoZGVjaW1hbFBsYWNlcyA+PSAwKSB7XHJcbiAgICAgIHJldHVybiBOdW1iZXIoaG91cnMudG9GaXhlZChkZWNpbWFsUGxhY2VzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhvdXJzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gY29udmVydCBzZWNvbmRzIHRvIG1pbnNcclxuICAgKiBAcGFyYW0gc2Vjb25kcyAtIHRvIGNvbnZlcnRcclxuICAgKiBAcGFyYW0gZGVjaW1hbFBsYWNlcyAtIHRoZSBhbW91bnQgb2YgZC5wIHRvIGNvbnZlcnQgdG8sIGlmIG5lZ2F0aXZlIChkZWZhdWx0KSBkb2VzIG5vdCByZXN0cmljdCB0aGUgZGVjaW1hbCBwbGFjZXNcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGNvbnZlcnRTZWNvbmRzVG9NaW5zKHNlY29uZHM6IG51bWJlciwgZGVjaW1hbFBsYWNlczogbnVtYmVyID0gLTEpOiBudW1iZXIge1xyXG4gICAgY29uc3QgaG91cnMgPSBzZWNvbmRzIC8gVElNRV9CQVNFO1xyXG5cclxuICAgIGlmIChkZWNpbWFsUGxhY2VzID49IDApIHtcclxuICAgICAgcmV0dXJuIE51bWJlcihob3Vycy50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaG91cnM7XHJcbiAgfVxyXG5cclxuICBhZGRSYWlsQWN0aW9uUnVsZXMoXHJcbiAgICBmYXJlOiBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgICBydWxlczogUnVsZXNbXVxyXG4gICk6IE9CVFJhaWxKb3VybmV5RmFyZSB7XHJcbiAgICByZXR1cm4gcnVsZXMucmVkdWNlKChmYXJlMTogT0JUUmFpbEpvdXJuZXlGYXJlLCBydWxlOiBSdWxlcykgPT4ge1xyXG4gICAgICBpZiAoaXNTZXQocnVsZT8udW5hdmFpbGFibGUpKSB7XHJcbiAgICAgICAgZmFyZTEudW5hdmFpbGFibGUgPSBydWxlLnVuYXZhaWxhYmxlIGFzIGJvb2xlYW47XHJcbiAgICAgICAgZmFyZTEudW5hdmFpbGFibGVNZXNzYWdlID0gcnVsZS51bmF2YWlsYWJsZU1lc3NhZ2UgYXMgc3RyaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYXJlMTtcclxuICAgIH0sIGZhcmUpO1xyXG4gIH1cclxuXHJcbiAgbWFwPFQ+KG9iajogUmVjb3JkPHN0cmluZywgVD4sIGZ1bmM6IChuZXh0OiBUKSA9PiBUKTogUmVjb3JkPHN0cmluZywgVD4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgIHt9LFxyXG4gICAgICAuLi5PYmplY3QuZW50cmllcyhvYmopLm1hcCgoW2tleSwgdmFsdWVdOiBbc3RyaW5nLCBUXSk6IFJlY29yZDxcclxuICAgICAgICBzdHJpbmcsXHJcbiAgICAgICAgVFxyXG4gICAgICA+ID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgW2tleV06IGZ1bmModmFsdWUpXHJcbiAgICAgICAgfTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBtZXJnZU9iamVjdHM8VD4oLi4ub2JqczogVFtdKTogVCB7XHJcbiAgICByZXR1cm4gb2Jqcy5yZWR1Y2UoKGN1cnJlbnQ6IFQsIG5leHQ6IFQpID0+IHtcclxuICAgICAgcmV0dXJuIF8ubWVyZ2UoY3VycmVudCwgbmV4dCkgYXMgVDtcclxuICAgIH0sIHt9IGFzIFQpO1xyXG4gIH1cclxuXHJcbiAgaW50ZXJjZXB0TWV0aG9kQ2FsbHM8VCBleHRlbmRzIG9iamVjdD4oXHJcbiAgICBvYmo6IFQsXHJcbiAgICBmbjogKHByb3A6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgYXJnOiBhbnlbXSkgPT4gYW55XHJcbiAgKTogVCB7XHJcbiAgICByZXR1cm4gbmV3IFByb3h5KG9iaiwge1xyXG4gICAgICBnZXQodGFyZ2V0OiBhbnksIHByb3A6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0W3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3h5KHRhcmdldFtwcm9wXSwge1xyXG4gICAgICAgICAgICBhcHBseTogKHRhcmdldDEsIHRoaXNBcmcsIGFyZ3VtZW50c0xpc3QpID0+IHtcclxuICAgICAgICAgICAgICBmbihwcm9wLCBhcmd1bWVudHNMaXN0KTtcclxuICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseSh0YXJnZXQxLCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3ApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkgYXMgdW5rbm93biBhcyBUO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBwcmV2aW91cyBxdWFydGVyIGhvdXIgZS5nLiBpZiAyOSBtaW5zIC0gcmV0dXJuIDE1XHJcbiAgICogQHBhcmFtIGRhdGVUaW1lIC0gZGF0ZS90aW1lIGluIG1vbWVudCBmb3JtYXRcclxuICAgKiBAcmV0dXJucyBtb21lbnRcclxuICAgKi9cclxuICBnZXRSb3VuZGVkRG93blF1YXJ0ZXJIb3VyKGRhdGVUaW1lOiBtb21lbnQuTW9tZW50KTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBjb25zdCBtaW5zID0gZGF0ZVRpbWUubWludXRlcygpO1xyXG5cclxuICAgIGlmIChtaW5zIDw9IDE1KSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDApO1xyXG4gICAgfSBlbHNlIGlmIChtaW5zIDw9IDMwKSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDE1KTtcclxuICAgIH0gZWxzZSBpZiAobWlucyA8PSA0NSkge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAzMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCA0NSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGVUaW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHJvdW5kZWQgdXAgcXVhcnRlciBob3VyIGUuZy4gaWYgMjkgLSByZXR1cm4gMzBcclxuICAgKiBAcGFyYW0gZGF0ZVRpbWUgLSBkYXRlL3RpbWUgaW4gbW9tZW50IGZvcm1hdFxyXG4gICAqIEByZXR1cm5zIG1vbWVudFxyXG4gICAqL1xyXG4gIGdldFJvdW5kZWRVcFF1YXJ0ZXJIb3VyKGRhdGVUaW1lOiBtb21lbnQuTW9tZW50KTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBjb25zdCBtaW5zID0gZGF0ZVRpbWUubWludXRlcygpO1xyXG5cclxuICAgIGlmIChtaW5zIDw9IDE1KSB7XHJcbiAgICAgIGRhdGVUaW1lLnNldCgnbWludXRlcycsIDE1KTtcclxuICAgIH0gZWxzZSBpZiAobWlucyA8PSAzMCkge1xyXG4gICAgICBkYXRlVGltZS5zZXQoJ21pbnV0ZXMnLCAzMCk7XHJcbiAgICB9IGVsc2UgaWYgKG1pbnMgPD0gNDUpIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgNDUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0ZVRpbWUuc2V0KCdtaW51dGVzJywgMCk7XHJcbiAgICAgIGRhdGVUaW1lLmFkZCgxLCAnaG91cicpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXRlVGltZTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU2V0KG9iajogYW55KTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbDtcclxufVxyXG4iXX0=
|