@sabstravtech/obtservices 0.0.3 → 0.0.19020100

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.
Files changed (92) hide show
  1. package/angular/fetchers.d.ts +1 -0
  2. package/angular/lib/vendor/classes/helpers.d.ts +6 -3
  3. package/angular/lib/vendor/fetchers/conferma-office.fetcher.d.ts +6 -0
  4. package/angular/lib/vendor/fetchers/search-irl-stations.fetcher.d.ts +7 -0
  5. package/angular/lib/vendor/services/search.service.d.ts +5 -3
  6. package/angular/lib/vendor/types/graphql.angular.types.d.ts +268 -6
  7. package/angular/obtservices.module.d.ts +1 -1
  8. package/angular/sabstravtech-obtservices-angular.d.ts +6 -5
  9. package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
  10. package/base/fetchers.d.ts +2 -0
  11. package/base/lib/vendor/classes/base-enterprise.d.ts +4 -0
  12. package/base/lib/vendor/classes/bookable-basket.d.ts +1 -1
  13. package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +6 -1
  14. package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +2 -1
  15. package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +21 -5
  16. package/base/lib/vendor/classes/flight-enterprise-search.d.ts +22 -75
  17. package/base/lib/vendor/classes/helpers.d.ts +3 -0
  18. package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +1 -0
  19. package/base/lib/vendor/classes/irl-enterprise-search.d.ts +21 -10
  20. package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +1 -0
  21. package/base/lib/vendor/classes/parking-enterprise-search.d.ts +1 -0
  22. package/base/lib/vendor/classes/rail-enterprise-search.d.ts +1 -0
  23. package/base/lib/vendor/fetchers/conferma-office.fetcher.d.ts +20 -0
  24. package/base/lib/vendor/fetchers/irl-quote-fetcher.d.ts +1 -1
  25. package/base/lib/vendor/fetchers/search-irl-stations.fetcher.d.ts +20 -0
  26. package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
  27. package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +1 -1
  28. package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +4 -35
  29. package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +4 -40
  30. package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +9 -2
  31. package/base/lib/vendor/interfaces/Isearch.service.d.ts +3 -1
  32. package/base/lib/vendor/interfaces/flight-filters.interface.d.ts +21 -25
  33. package/base/lib/vendor/interfaces/hotel-recent-search-args.interface.d.ts +23 -0
  34. package/base/lib/vendor/interfaces/value-display.d.ts +2 -2
  35. package/base/lib/vendor/models/traveller.object.d.ts +7 -0
  36. package/base/lib/vendor/services/enterprise-basket.service.d.ts +1 -1
  37. package/base/lib/vendor/services/search.service.d.ts +10 -3
  38. package/base/lib/vendor/types/graphql.types.d.ts +253 -6
  39. package/base/lib/vendor/types/types.d.ts +11 -2
  40. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  41. package/bundles/sabstravtech-obtservices-angular.umd.js +200 -64
  42. package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
  43. package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
  44. package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
  45. package/bundles/sabstravtech-obtservices-base.umd.js +1632 -1085
  46. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  47. package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
  48. package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
  49. package/esm2015/angular/fetchers.js +2 -1
  50. package/esm2015/angular/lib/vendor/classes/helpers.js +25 -4
  51. package/esm2015/angular/lib/vendor/fetchers/conferma-office.fetcher.js +22 -0
  52. package/esm2015/angular/lib/vendor/fetchers/search-irl-stations.fetcher.js +25 -0
  53. package/esm2015/angular/lib/vendor/services/search.service.js +35 -29
  54. package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +174 -6
  55. package/esm2015/angular/obtservices.module.js +3 -3
  56. package/esm2015/angular/sabstravtech-obtservices-angular.js +7 -6
  57. package/esm2015/base/fetchers.js +3 -1
  58. package/esm2015/base/lib/vendor/classes/base-enterprise.js +49 -2
  59. package/esm2015/base/lib/vendor/classes/bookable-basket.js +2 -2
  60. package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +95 -15
  61. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +2 -1
  62. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +262 -52
  63. package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +439 -713
  64. package/esm2015/base/lib/vendor/classes/helpers.js +239 -24
  65. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +74 -70
  66. package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +153 -118
  67. package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +2 -1
  68. package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +58 -1
  69. package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +6 -3
  70. package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +2 -1
  71. package/esm2015/base/lib/vendor/fetchers/conferma-office.fetcher.js +11 -0
  72. package/esm2015/base/lib/vendor/fetchers/irl-quote-fetcher.js +2 -2
  73. package/esm2015/base/lib/vendor/fetchers/search-irl-stations.fetcher.js +11 -0
  74. package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
  75. package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
  76. package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
  77. package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +43 -2
  78. package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
  79. package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
  80. package/esm2015/base/lib/vendor/interfaces/flight-filters.interface.js +2 -1
  81. package/esm2015/base/lib/vendor/interfaces/hotel-recent-search-args.interface.js +2 -0
  82. package/esm2015/base/lib/vendor/interfaces/value-display.js +1 -1
  83. package/esm2015/base/lib/vendor/models/traveller.object.js +8 -1
  84. package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +3 -2
  85. package/esm2015/base/lib/vendor/services/search.service.js +67 -12
  86. package/esm2015/base/lib/vendor/types/graphql.types.js +13 -2
  87. package/esm2015/base/lib/vendor/types/types.js +1 -1
  88. package/fesm2015/sabstravtech-obtservices-angular.js +238 -16
  89. package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
  90. package/fesm2015/sabstravtech-obtservices-base.js +1561 -1045
  91. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  92. package/package.json +4 -4
@@ -634,22 +634,42 @@ export class BaseHelperRoutines {
634
634
  };
635
635
  }
636
636
  removeNulls(query) {
637
- return Object.keys(query).reduce((accum, key) => {
638
- const value = query[key];
639
- const data = Array.isArray(value)
640
- ? value.filter((item) => !!item) || null
641
- : value;
642
- if ((data !== null && data !== undefined && data !== 'null') ||
643
- (Array.isArray(data) && data.length > 0)) {
644
- accum[key] = data;
645
- }
646
- return accum;
647
- }, {});
637
+ if (!query) {
638
+ return query;
639
+ }
640
+ if (moment.isMoment(query)) {
641
+ return query;
642
+ }
643
+ else if (Array.isArray(query)) {
644
+ return (query
645
+ .map((item) => {
646
+ return this.removeNulls(item);
647
+ })
648
+ .filter((item1) => {
649
+ return !!item1;
650
+ }) || null);
651
+ }
652
+ else if (typeof query === 'object') {
653
+ return Object.keys(query).reduce((accum, key) => {
654
+ const value = query[key];
655
+ const data = this.removeNulls(value);
656
+ if ((data !== null && data !== undefined && data !== 'null') ||
657
+ (Array.isArray(data) && data.length > 0)) {
658
+ accum[key] = data;
659
+ }
660
+ return accum;
661
+ }, {});
662
+ }
663
+ else {
664
+ return query;
665
+ }
648
666
  }
649
667
  getTravellersId(travellers) {
650
668
  if (travellers) {
651
669
  return travellers.reduce((previousValue, currentValue, idx) => {
652
- return idx === 0 ? [currentValue.id] : [...previousValue, currentValue.id];
670
+ return idx === 0
671
+ ? [currentValue.id]
672
+ : [...previousValue, currentValue.id];
653
673
  }, []);
654
674
  }
655
675
  }
@@ -848,7 +868,6 @@ export class BaseHelperRoutines {
848
868
  * @desc - generates ics file body content based on the provided basketItems param
849
869
  */
850
870
  generateIcsFileBodyContent(basketItems) {
851
- // TODO: currently only basket items with ServiceType.Lounge are handled. See below to TODOs for remaining tasks
852
871
  const bodyContent = [];
853
872
  // generate calendar data for each basket item
854
873
  basketItems.map((basketItem, index) => {
@@ -862,11 +881,12 @@ export class BaseHelperRoutines {
862
881
  serviceType: '',
863
882
  summary: ''
864
883
  };
884
+ const dateFormat = 'DD MMMM YYYY HH:mm';
865
885
  const { type } = basketItem.service;
886
+ const { adults, children, bookingThirdPartyReference, detail, service } = basketItem;
866
887
  // populate data object depending on the service type in the basket
867
888
  switch (type) {
868
889
  case ServiceType.Lounge:
869
- const { adults, children, bookingThirdPartyReference, detail, service } = basketItem;
870
890
  data.basketId = basketItem.id;
871
891
  data.dStart = detail === null || detail === void 0 ? void 0 : detail.arrivalDatetime;
872
892
  data.dEnd = '';
@@ -874,31 +894,113 @@ export class BaseHelperRoutines {
874
894
  data.serviceType = service.type.toLowerCase();
875
895
  data.description = [
876
896
  `Lounge: ${detail.name}\r\n`,
877
- `Starts: ${detail.arrivalDatetime}\r\n`,
897
+ `Starts: ${moment(detail.arrivalDatetime).format(dateFormat)}\r\n`,
878
898
  `Adults: ${adults}\r\n`,
879
899
  `Children: ${children}\r\n`,
880
900
  `Booking Ref: ${bookingThirdPartyReference}`
881
901
  ].join('');
882
902
  break;
883
903
  case ServiceType.Cab:
884
- // TODO: handle this case
885
- // hint: see logic in icalendar.component.ts file on lighting current version
904
+ data.basketId = basketItem.id;
905
+ data.serviceType = service.type.toLowerCase();
906
+ data.dStart = detail === null || detail === void 0 ? void 0 : detail.departs;
907
+ data.dEnd = '';
908
+ data.summary = `Taxi booking - from ${detail.fromLocation.address} to ${detail.toLocation.address}`;
909
+ data.description = [
910
+ `Pickup Point: ${detail.fromLocation.address}\r\n`,
911
+ `Time: ${moment(detail.departs).format(dateFormat)}\r\n`,
912
+ `Booking Ref: ${bookingThirdPartyReference}`
913
+ ].join('');
914
+ break;
886
915
  case ServiceType.Car:
887
- // TODO: handle this case
916
+ data.basketId = basketItem.id;
917
+ data.serviceType = service.type.toLowerCase();
918
+ data.dStart = detail === null || detail === void 0 ? void 0 : detail.pickUpDatetime;
919
+ data.dEnd = detail === null || detail === void 0 ? void 0 : detail.dropOffDatetime;
920
+ data.summary = `Car booking - from ${detail.pickUpLocation.address} to ${detail.dropOffLocation.address}`;
921
+ data.description = [
922
+ `Pickup Point: ${detail.pickUpLocation.address}\r\n`,
923
+ `Time: ${moment(detail.pickUpDatetime).format(dateFormat)}\r\n`,
924
+ `Arrival Point: ${detail.dropOffLocation.address}\r\n`,
925
+ `Booking Ref: ${bookingThirdPartyReference}`
926
+ ].join('');
927
+ (data.locationFrom = detail.pickUpLocation.address),
928
+ (data.locationTo = detail.dropOffLocation.address);
929
+ break;
888
930
  case ServiceType.Coach:
889
931
  // TODO: handle this case
890
932
  case ServiceType.FastTrack:
891
933
  // TODO: handle this case
892
934
  case ServiceType.Flight:
893
- // TODO: handle this case
935
+ data.basketId = basketItem.id;
936
+ data.serviceType = service.type.toLowerCase();
937
+ data.dStart = detail === null || detail === void 0 ? void 0 : detail.outboundFlights[0].dateTimeDeparting;
938
+ data.dEnd = detail === null || detail === void 0 ? void 0 : detail.outboundFlights[0].dateTimeArriving;
939
+ data.summary = `Flight Booking - From ${detail.outboundFlights[0].originAirport} to ${detail.outboundFlights[0].destinationAirport}`;
940
+ data.description = [
941
+ `From: ${detail.outboundFlights[0].originAirport}\r\n`,
942
+ `Depart: ${moment(detail.outboundFlights[0].dateTimeDeparting).format(dateFormat)}\r\n`,
943
+ `To: ${detail.outboundFlights[0].destinationAirport}\r\n`,
944
+ `Arrive: ${moment(detail.outboundFlights[0].dateTimeArriving).format(dateFormat)}\r\n`,
945
+ `Booking Ref: ${bookingThirdPartyReference}`
946
+ ].join('');
947
+ break;
894
948
  case ServiceType.Hotel:
895
- // TODO: handle this case
949
+ data.basketId = basketItem.id;
950
+ data.serviceType = service.type.toLowerCase();
951
+ data.dStart = detail === null || detail === void 0 ? void 0 : detail.checkIn;
952
+ data.dEnd = detail === null || detail === void 0 ? void 0 : detail.checkOut;
953
+ data.summary = `Hotel booking - ${detail.hotelName}`;
954
+ data.description = [
955
+ `Hotel: ${detail.hotelName}\r\n`,
956
+ `Arrival: ${moment(detail.checkIn).format(dateFormat)}\r\n`,
957
+ `Departure: ${moment(detail.checkOut).format(dateFormat)}\r\n`,
958
+ `Booking Ref: ${bookingThirdPartyReference}`
959
+ ].join('');
960
+ break;
896
961
  case ServiceType.InternationalRail:
897
- // TODO: handle this case
962
+ data.basketId = basketItem.id;
963
+ data.serviceType = service.type.toLowerCase();
964
+ data.dStart = detail === null || detail === void 0 ? void 0 : detail.outwardDetail.departureDateTime;
965
+ data.dEnd = detail === null || detail === void 0 ? void 0 : detail.outwardDetail.arrivalDateTime;
966
+ data.locationFrom = detail.outwardDetail.departureStationName;
967
+ data.locationTo = detail.outwardDetail.arrivalDateTime;
968
+ data.summary = `Train Booking - From ${detail.outwardDetail.departureStationName} to ${detail.outwardDetail.arrivalStationName}`;
969
+ data.description = [
970
+ `From ${detail.outwardDetail.departureStationName}\r\n`,
971
+ `To ${detail.outwardDetail.arrivalStationName}\r\n`,
972
+ `Departure ${moment(detail.outwardDetail.departureDateTime).format(dateFormat)}\r\n`,
973
+ `Arrival ${moment(detail.outwardDetail.arrivalDateTime).format(dateFormat)}\r\n`,
974
+ `Booking Ref: ${bookingThirdPartyReference}`
975
+ ].join('');
976
+ break;
898
977
  case ServiceType.Parking:
899
- // TODO: handle this case
978
+ data.basketId = basketItem.id;
979
+ data.serviceType = service.type.toLowerCase();
980
+ data.dStart = detail === null || detail === void 0 ? void 0 : detail.arrivalDatetime;
981
+ data.dEnd = detail === null || detail === void 0 ? void 0 : detail.departDatetime;
982
+ data.summary = `Airport parking - ${detail.name}`;
983
+ data.description = [
984
+ `Airport Parking: ${detail.name}\r\n`,
985
+ `Booking Ref: ${bookingThirdPartyReference}`
986
+ ].join('');
987
+ break;
900
988
  case ServiceType.Rail:
901
- // TODO: handle this case
989
+ data.basketId = basketItem.id;
990
+ data.serviceType = service.type.toLowerCase();
991
+ data.dStart = detail === null || detail === void 0 ? void 0 : detail.outwardDetail.departureDateTime;
992
+ data.dEnd = detail === null || detail === void 0 ? void 0 : detail.outwardDetail.arrivalDateTime;
993
+ data.locationFrom = detail.outwardDetail.departureStationName;
994
+ data.locationTo = detail.outwardDetail.arrivalDateTime;
995
+ data.summary = `Train Booking - From ${detail.outwardDetail.departureStationName} to ${detail.outwardDetail.arrivalStationName}`;
996
+ data.description = [
997
+ `From ${detail.outwardDetail.departureStationName}\r\n`,
998
+ `To ${detail.outwardDetail.arrivalStationName}\r\n`,
999
+ `Departure ${moment(detail.outwardDetail.departureDateTime).format(dateFormat)}\r\n`,
1000
+ `Arrival ${moment(detail.outwardDetail.arrivalDateTime).format(dateFormat)}\r\n`,
1001
+ `Booking Ref: ${bookingThirdPartyReference}`
1002
+ ].join('');
1003
+ break;
902
1004
  }
903
1005
  bodyContent.push([
904
1006
  'BEGIN:VEVENT\r\n',
@@ -947,6 +1049,119 @@ export class BaseHelperRoutines {
947
1049
  }
948
1050
  return splitString;
949
1051
  }
1052
+ createFlightFilters(journeys, defaultFilters) {
1053
+ return journeys.reduce((filters, result1) => {
1054
+ const totalStops = result1.outboundFlights.length - 1;
1055
+ filters.stops[totalStops] = filters.stops[totalStops] || {
1056
+ display: `${totalStops} stop` + (totalStops !== 1 ? 's' : ''),
1057
+ selected: false,
1058
+ value: totalStops + 1
1059
+ };
1060
+ const updateFlightItems = (flight) => {
1061
+ filters.classes[flight.cabinClass] = filters.classes[flight.cabinClass] || {
1062
+ display: flight.cabinClass,
1063
+ selected: false,
1064
+ value: flight.cabinClass
1065
+ };
1066
+ filters.airlines[flight.marketingCarrier] = filters.airlines[flight.marketingCarrier] || {
1067
+ display: flight.marketingCarrierName,
1068
+ selected: false,
1069
+ value: flight.marketingCarrier
1070
+ };
1071
+ };
1072
+ result1.outboundFlights.forEach(updateFlightItems);
1073
+ const baggage = Math.min(...result1.baggageAllowance.map((baggageAllowance) => baggageAllowance.qty));
1074
+ filters.baggage[baggage] = filters.baggage[baggage] || {
1075
+ selected: false,
1076
+ display: `${baggage} bag${baggage !== 1 ? 's' : ''}`,
1077
+ value: baggage
1078
+ };
1079
+ const indexedFlight = (flights, filterAttribute, flightAttribute, flightAttributeName, index) => {
1080
+ const temp = flights[index][flightAttribute];
1081
+ filters[filterAttribute][temp] = filters[filterAttribute][temp] || {
1082
+ value: flights[index][flightAttribute],
1083
+ display: flights[index][flightAttributeName],
1084
+ selected: false
1085
+ };
1086
+ };
1087
+ indexedFlight(result1.outboundFlights, 'depatureAirport', 'originAirport', 'originAirportName', 0);
1088
+ indexedFlight(result1.outboundFlights, 'arrivalAirport', 'destinationAirport', 'destinationAirportName', result1.outboundFlights.length - 1);
1089
+ filters.price.min =
1090
+ filters.price.min < result1.total.price
1091
+ ? filters.price.min
1092
+ : result1.total.price;
1093
+ filters.price.max =
1094
+ filters.price.max > result1.total.price
1095
+ ? filters.price.max
1096
+ : result1.total.price;
1097
+ filters.duration.min =
1098
+ filters.duration.min < result1.outboundTotalDuration
1099
+ ? filters.duration.min
1100
+ : result1.outboundTotalDuration;
1101
+ filters.duration.max =
1102
+ filters.duration.max > result1.outboundTotalDuration
1103
+ ? filters.duration.max
1104
+ : result1.outboundTotalDuration;
1105
+ const departTime = moment(result1.outboundFlights[0].dateTimeDeparting).get('hour');
1106
+ filters.departureTime.min =
1107
+ filters.departureTime.min < departTime
1108
+ ? filters.departureTime.min
1109
+ : departTime;
1110
+ filters.departureTime.max =
1111
+ filters.departureTime.max > departTime
1112
+ ? filters.departureTime.max
1113
+ : departTime;
1114
+ const arrivalTime = moment(result1.outboundFlights[result1.outboundFlights.length - 1]
1115
+ .dateTimeArriving).get('hour');
1116
+ filters.arrivalTime.min =
1117
+ filters.arrivalTime.min < arrivalTime
1118
+ ? filters.arrivalTime.min
1119
+ : arrivalTime;
1120
+ filters.arrivalTime.max =
1121
+ filters.arrivalTime.max > arrivalTime
1122
+ ? filters.arrivalTime.max
1123
+ : arrivalTime;
1124
+ if (result1.inboundFlights && result1.outboundFlights.length > 0) {
1125
+ filters.returnDuration.min =
1126
+ filters.returnDuration.min < result1.inboundTotalDuration
1127
+ ? filters.returnDuration.min
1128
+ : result1.inboundTotalDuration;
1129
+ filters.returnDuration.max =
1130
+ filters.returnDuration.max > result1.inboundTotalDuration
1131
+ ? filters.returnDuration.max
1132
+ : result1.inboundTotalDuration;
1133
+ const departTimeReturn = moment(result1.inboundFlights[0].dateTimeDeparting).get('hour');
1134
+ filters.returnDepartureTime.min =
1135
+ filters.returnDepartureTime.min < departTimeReturn
1136
+ ? filters.returnDepartureTime.min
1137
+ : departTimeReturn;
1138
+ filters.returnDepartureTime.max =
1139
+ filters.returnDepartureTime.max > departTimeReturn
1140
+ ? filters.returnDepartureTime.max
1141
+ : departTimeReturn;
1142
+ const arrivalTimeReturn = moment(result1.outboundFlights[result1.outboundFlights.length - 1]
1143
+ .dateTimeArriving).get('hour');
1144
+ filters.returnArrivalTime.min =
1145
+ filters.returnArrivalTime.min < arrivalTimeReturn
1146
+ ? filters.returnArrivalTime.min
1147
+ : arrivalTimeReturn;
1148
+ filters.returnArrivalTime.max =
1149
+ filters.returnArrivalTime.max > arrivalTimeReturn
1150
+ ? filters.returnArrivalTime.max
1151
+ : arrivalTimeReturn;
1152
+ (result1.inboundFlights || []).forEach(updateFlightItems);
1153
+ indexedFlight(result1.inboundFlights, 'depatureReturnAirport', 'originAirport', 'originAirportName', 0);
1154
+ indexedFlight(result1.inboundFlights, 'arrivalReturnAirport', 'destinationAirport', 'destinationAirportName', result1.outboundFlights.length - 1);
1155
+ }
1156
+ return filters;
1157
+ }, this.clone(defaultFilters));
1158
+ }
1159
+ mapOverObject(items, callback) {
1160
+ return Object.entries(items).reduce((accum, entries) => {
1161
+ accum[entries[0]] = callback(entries[1], entries[0]);
1162
+ return accum;
1163
+ }, {});
1164
+ }
950
1165
  }
951
1166
  BaseHelperRoutines.READ_DATE_FORMAT = 'dd, D MMM YYYY';
952
1167
  BaseHelperRoutines.READ_TIME_FORMAT = 'HH:mm';
@@ -975,4 +1190,4 @@ __decorate([
975
1190
  __metadata("design:paramtypes", [Object, Number]),
976
1191
  __metadata("design:returntype", void 0)
977
1192
  ], BaseHelperRoutines.prototype, "makeFareRules", null);
978
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBVXZCLE9BQU8sRUFDTCxtQkFBbUIsRUFJcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBTUwsYUFBYSxFQUViLFdBQVcsRUFFWixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUlqRCxNQUFNLDBCQUEwQixHQUFHLEVBQUUsQ0FBQztBQUN0QyxNQUFNLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztBQUNwQyxNQUFNLDRCQUE0QixHQUFHLEVBQUUsQ0FBQztBQUN4QyxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztBQUNyQyxNQUFNLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztBQUN2QyxNQUFNLDJCQUEyQixHQUFHLENBQUMsQ0FBQztBQUN0QyxNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQUNwQyxNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQztBQUNyQyxNQUFNLDRCQUE0QixHQUFHLENBQUMsQ0FBQztBQUV2QyxNQUFNLE1BQU0sR0FBRztJQUNiLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztDQUNOLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRztJQUNsQixTQUFTO0lBQ1QsVUFBVTtJQUNWLE9BQU87SUFDUCxPQUFPO0lBQ1AsS0FBSztJQUNMLE1BQU07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QUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxxQkFBcUIsQ0FDbkIsU0FBaUIsRUFDakIsT0FBZ0IsS0FBSztRQUVyQixNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRWpELElBQUksSUFBSSxFQUFFO1lBQ1IsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzlCO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQzs7QUF6bkNNLG1DQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBQ3BDLG1DQUFnQixHQUFHLE9BQU8sQ0FBQztBQUMzQiw4QkFBVyxHQUFHLFFBQVEsQ0FBQztBQUN2QixrQ0FBZSxHQUFHLFlBQVksQ0FBQztBQUMvQix1Q0FBb0IsR0FBRyxrQkFBa0IsQ0FBQztBQUMxQyw2Q0FBMEIsR0FBRyxVQUFVLENBQUM7QUFDeEMsOEJBQVcsR0FBRyxNQUFNLENBQUM7QUFDckIsb0NBQWlCLEdBQUcsT0FBTyxDQUFDO0FBQzVCLDhCQUFXLEdBQUcsVUFBVSxDQUFDO0FBdTdCaEM7SUFEQyxRQUFRLEVBQUU7Ozs7MkRBR1Y7QUFHRDtJQURDLFFBQVEsRUFBRTs7Ozt1REFNVjtBQUdEO0lBREMsUUFBUSxFQUFFOzs7O3VEQWdDViIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuXHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFza2V0RGV0YWlscyxcclxuICBCYXNrZXRJdGVtTWFuYWdlbWVudEluZm9cclxufSBmcm9tICcuLi9zZXJ2aWNlcy9lbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkIH0gZnJvbSAnLi9tYW5hZ2VtZW50LWluZm8tYW5kLXZhbGlkJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2VzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBGbGlnaHREaXJlY3Rpb25FbnVtLFxyXG4gIE1pbk1heCxcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIFNjaGVtYVxyXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBBaXJwb3J0LFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgRmFyZUNvbmRpdGlvbnMsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gIEZsaWdodEpvdXJuZXksXHJcbiAgUGFzc2VuZ2VyVHlwZSxcclxuICBTZXJ2aWNlLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIFVzZXJQYXNzZW5nZXJUeXBlSW5wdXRcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHsgU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc3VwcGxlbWVudGFyeS1ib29raW5nLWluZm8taW1wbCc7XHJcbmltcG9ydCB7IE1lbW9yaXNlIH0gZnJvbSAnLi9saW1pdGVkLWNhY2hlLmNsYXNzJztcclxuXHJcbmRlY2xhcmUgdmFyIGhleF9obWFjX21kNTogYW55O1xyXG5cclxuY29uc3QgRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMgPSAxNjtcclxuY29uc3QgUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTID0gMTI7XHJcbmNvbnN0IEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMgPSAxMjtcclxuY29uc3QgQ09BQ0hfTUFYX0NISUxEX0FHRV9ZRUFSUyA9IDE1O1xyXG5jb25zdCBMT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMgPSAxMjtcclxuY29uc3QgRkxJR0hUX01BWF9JTkZBTlRfQUdFX1lFQVJTID0gMDtcclxuY29uc3QgUkFJTF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyA9IDA7XHJcbmNvbnN0IENPQUNIX01BWF9JTkZBTlRfQUdFX1lFQVJTID0gMDtcclxuY29uc3QgTE9VTkdFU19NQVhfSU5GQU5UX0FHRV9ZRUFSUyA9IDA7XHJcblxyXG5jb25zdCBtb250aHMgPSBbXHJcbiAgJ0phbicsXHJcbiAgJ0ZlYicsXHJcbiAgJ01hcicsXHJcbiAgJ0FwcicsXHJcbiAgJ01heScsXHJcbiAgJ0p1bicsXHJcbiAgJ0p1bCcsXHJcbiAgJ0F1ZycsXHJcbiAgJ1NlcCcsXHJcbiAgJ09jdCcsXHJcbiAgJ05vdicsXHJcbiAgJ0RlYydcclxuXTtcclxuXHJcbmNvbnN0IGZ1bGxfbW9udGhzID0gW1xyXG4gICdKYW51YXJ5JyxcclxuICAnRmVicnVhcnknLFxyXG4gICdNYXJjaCcsXHJcbiAgJ0FwcmlsJyxcclxuICAnTWF5JyxcclxuICAnSnVuZScsXHJcbiAgJ0p1bHknLFxyXG4gICdBdWd1c3QnLFxyXG4gICdTZXB0ZW1iZXInLFxyXG4gICdPY3RvYmVyJyxcclxuICAnTm92ZW1iZXInLFxyXG4gICdEZWNlbWJlcidcclxuXTtcclxuXHJcbmNvbnN0IHdlZWtkYXlzID0gWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXTtcclxuXHJcbmNvbnN0IGZ1bGxfd2Vla2RheXMgPSBbXHJcbiAgJ1N1bmRheScsXHJcbiAgJ01vbmRheScsXHJcbiAgJ1R1ZXNkYXknLFxyXG4gICdXZWRuZXNkYXknLFxyXG4gICdUaHVyc2RheScsXHJcbiAgJ0ZyaWRheScsXHJcbiAgJ1NhdHVyZGF5J1xyXG5dO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhc2VIZWxwZXJSb3V0aW5lcyB7XHJcbiAgc3RhdGljIFJFQURfREFURV9GT1JNQVQgPSAnZGQsIEQgTU1NIFlZWVknO1xyXG4gIHN0YXRpYyBSRUFEX1RJTUVfRk9STUFUID0gJ0hIOm1tJztcclxuICBzdGF0aWMgREFURV9GT1JNQVQgPSAnWVlNTUREJztcclxuICBzdGF0aWMgSVNPX0RBVEFfRk9STUFUID0gJ1lZWVktTU0tREQnO1xyXG4gIHN0YXRpYyBJU09fREFUQV9GT1JNQVRfVElNRSA9ICdZWVlZLU1NLUREIEhIOm1tJztcclxuICBzdGF0aWMgSVNPX0RBVEFfRk9STUFUX05PX0hZUEhBTlMgPSAnWVlZWU1NREQnO1xyXG4gIHN0YXRpYyBUSU1FX0ZPUk1BVCA9ICdISG1tJztcclxuICBzdGF0aWMgVElNRV9GT1JNQVRfQ09MT04gPSAnSEg6bW0nO1xyXG4gIHN0YXRpYyBNTUREWVlfREFURSA9ICdERE1NWVlZWSc7XHJcblxyXG4gIG1pblRvSG91cihkdXI6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIGAke01hdGguZmxvb3IoZHVyIC8gNjApfWggJHtkdXIgJSA2MH1tYDtcclxuICB9XHJcblxyXG4gIG1ha2VDb2xvblRpbWUodGltZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGltZS5zdWJzdHJpbmcoMCwgMikgKyAnOicgKyB0aW1lLnN1YnN0cmluZygyLCA0KTtcclxuICB9XHJcblxyXG4gIG5vbk51bGxNaW4oa2V5OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XHJcbiAgICByZXR1cm4gYXJncy5yZWR1Y2UoXHJcbiAgICAgIChjdXJyZW50LCBpdGVtKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbVtrZXldKSB7XHJcbiAgICAgICAgICBpZiAoY3VycmVudC5taW4gPiBOdW1iZXIoaXRlbVtrZXldKSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBpdGVtLCBtaW46IE51bWJlcihpdGVtW2tleV0pIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgICB9LFxyXG4gICAgICB7IG1pbjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGl0ZW06IG51bGwgfVxyXG4gICAgKS5pdGVtO1xyXG4gIH1cclxuXHJcbiAgam9pbkJ5Q29tbWEoLi4uYXR0cmlidXRlczogYW55W10pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGF0dHJpYnV0ZXNcclxuICAgICAgLnJlZHVjZSgoYWNjLCBhdHRyKSA9PiB7XHJcbiAgICAgICAgaWYgKF8uaXNFbXB0eShhdHRyKSkge1xyXG4gICAgICAgICAgYWNjICs9IGF0dHIgKyAnLCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgIH0sICcnKVxyXG4gICAgICAuc2xpY2UoMCwgLTEpO1xyXG4gIH1cclxuXHJcbiAgbXV0dWFsbHlJbmNsdWRlKGE6IHN0cmluZywgYjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gYS5pbmNsdWRlcyhiKSB8fCBiLmluY2x1ZGVzKGEpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ1RyeWluZyB0byBtdXR1YWxseSBjb21wYXJlIHVuZGVmaW5lZCB2YXJpYWJsZS4nKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmluZEJ5S2V5KGFycmF5OiBhbnlbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgcmV0dXJuIGFycmF5XHJcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSB2YWx1ZTtcclxuICAgICAgfSlcclxuICAgICAgLnBvcCgpO1xyXG4gIH1cclxuXHJcbiAgZGF0ZVRvTmdEYXRlKGRhdGU6IERhdGUpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogZGF0ZS5nZXREYXRlKClcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0VG9ZWU1NREQoZGF0ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoZGF0ZS5sZW5ndGggPiA2KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdERhdGUodGhpcy55eXl5bW1kZFRpbWVUb01vbWVudChkYXRlKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0ZTtcclxuICB9XHJcblxyXG4gIGZvcm1hdERhdGVUb01NRERZWVkoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGF0ZShkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLkRBVEVfRk9STUFUKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdFRpbWUoZGF0ZTogbW9tZW50Lk1vbWVudCk6IHN0cmluZyB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLlRJTUVfRk9STUFUKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvcm1hdFRpbWVDb2xvbihkYXRlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgIGRhdGUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLlRJTUVfRk9STUFUX0NPTE9OKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdElzb0RhdGUoZGF0ZTogbW9tZW50Lk1vbWVudCk6IHN0cmluZyB7XHJcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xyXG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5JU09fREFUQV9GT1JNQVQpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0SXNvRGF0ZVRpbWUoZGF0ZTogbW9tZW50Lk1vbWVudCk6IHN0cmluZyB7XHJcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xyXG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5JU09fREFUQV9GT1JNQVRfVElNRSk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRJc29EYXRlTm9IeXBoYW5zKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgZGF0ZSA9IG1vbWVudChkYXRlKTtcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUX05PX0hZUEhBTlMpO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVUaW1lc0xpc3QoZnJvbSA9IDAsIHRvID0gMjQsIHN0ZXAgPSAxNSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGRhdGVUaW1lQXJyYXk6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGxldCBob3VyID0gMDsgaG91ciA8IHRvIC0gZnJvbTsgaG91cisrKSB7XHJcbiAgICAgIGZvciAobGV0IG1pbnV0ZSA9IDA7IG1pbnV0ZSA8IDYwOyBtaW51dGUgKz0gc3RlcCkge1xyXG4gICAgICAgIGRhdGVUaW1lQXJyYXkucHVzaChtb21lbnQoeyBob3VyLCBtaW51dGUgfSkuZm9ybWF0KCdISDptbScpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGVUaW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuICBtb21lbnRUb05nRGF0ZShkYXRlOiBtb21lbnQuTW9tZW50KTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICBkYXRlID0gbW9tZW50KGRhdGUpO1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZVRvTmdEYXRlKGRhdGUudG9EYXRlKCkpO1xyXG4gIH1cclxuXHJcbiAgbmdEYXRlVG9EYXRlKGRhdGU6IE5nYkRhdGVTdHJ1Y3QpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGggLSAxLCBkYXRlLmRheSk7XHJcbiAgfVxyXG5cclxuICBuZ0RhdGVUb01vbWVudChkYXRlOiBOZ2JEYXRlU3RydWN0LCB0aW1lPzogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBjb25zdCBtb20gPSBtb21lbnQodGhpcy5uZ0RhdGVUb0RhdGUoZGF0ZSkpO1xyXG4gICAgaWYgKHRpbWUpIHtcclxuICAgICAgY29uc3QgdGltZXMgPSB0aW1lLnNwbGl0KCc6Jyk7XHJcbiAgICAgIGlmICh0aW1lcy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICBtb20uc2V0KCdob3VycycsIE51bWJlcih0aW1lc1swXSkpLnNldCgnbWludXRlcycsIE51bWJlcih0aW1lc1sxXSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1vbVxyXG4gICAgICAgICAgLnNldCgnaG91cnMnLCBOdW1iZXIodGltZS5zdWJzdHIoMCwgMikpKVxyXG4gICAgICAgICAgLnNldCgnbWludXRlcycsIE51bWJlcih0aW1lLnN1YnN0cigyLCAyKSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9tO1xyXG4gIH1cclxuXHJcbiAgdG9kYXlUb05nYkRhdGVTdHJ1Y3QoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICBjb25zdCB0b2RheSA9IG1vbWVudCgpO1xyXG4gICAgcmV0dXJuIHsgeWVhcjogdG9kYXkueWVhcigpLCBtb250aDogdG9kYXkubW9udGgoKSArIDEsIGRheTogdG9kYXkuZGF0ZSgpIH07XHJcbiAgfVxyXG5cclxuICBvYmplY3RUb0FycmF5KG9iamVjdDogUmVjb3JkPHN0cmluZywgYW55Pik6IEFycmF5PGFueT4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubWFwKChpKSA9PiBvYmplY3RbaV0pO1xyXG4gIH1cclxuXHJcbiAgeXl5eW1tZGRUb0RhdGUodmFsdWU6IHN0cmluZyk6IERhdGUge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKFxyXG4gICAgICBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDAsIDQpKSxcclxuICAgICAgTnVtYmVyKHZhbHVlLnN1YnN0cmluZyg0LCA2KSkgLSAxLFxyXG4gICAgICBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDYsIDgpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHl5eXltbWRkVG9Nb21lbnQodmFsdWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIG1vbWVudCh0aGlzLnl5eXltbWRkVG9EYXRlKHZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICB5eW1tZGRUb01vbWVudCh2YWx1ZTogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gbW9tZW50KHZhbHVlLCAnWVlNTUREJyk7XHJcbiAgfVxyXG5cclxuICB5eW1tZGRUb05nYkRhdGUodmFsdWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUodGhpcy55eW1tZGRUb01vbWVudCh2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgeXltbWRkX2hobW1Ub01vbWVudChkYXRlOiBzdHJpbmcsIHRpbWU6IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfSAke3RpbWV9YCwgJ1lZTU1ERCBISG1tJyk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZF9oaG1tVG9Nb21lbnQoZGF0ZTogc3RyaW5nLCB0aW1lOiBzdHJpbmcpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiBtb21lbnQoYCR7ZGF0ZX0gJHt0aW1lfWAsICdZWVlZTU1ERCBISG1tJyk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRvTmdEYXRlKHZhbHVlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLmRhdGVUb05nRGF0ZSh0aGlzLnl5eXltbWRkVG9EYXRlKHZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRpbWVUb05nRGF0ZShkYXRlOiBzdHJpbmcsIHRpbWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgY29uc3QgZHQgPSB0aGlzLnl5eXltbWRkVG9Nb21lbnQoZGF0ZSlcclxuICAgICAgLmFkZChOdW1iZXIodGltZS5zdWJzdHJpbmcoMCwgMikpLCAnaG91cnMnKVxyXG4gICAgICAuYWRkKE51bWJlcih0aW1lLnN1YnN0cmluZygyLCA0KSksICdtaW51dGVzJyk7XHJcbiAgICByZXR1cm4gdGhpcy5tb21lbnRUb05nRGF0ZShkdCk7XHJcbiAgfVxyXG5cclxuICB5eXl5bW1kZFRpbWVUb01vbWVudChkYXRlOiBzdHJpbmcpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIGlmIChkYXRlLmxlbmd0aCA9PT0gNikge1xyXG4gICAgICByZXR1cm4gbW9tZW50KGAke2RhdGV9YCwgJ1lZTU1ERCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfWAsICdZWVlZTU1ERCcpO1xyXG4gIH1cclxuXHJcbiAgaGhtbVRvVGltZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt2YWx1ZS5zdWJzdHJpbmcoMCwgMil9OiR7dmFsdWUuc3Vic3RyaW5nKDIsIDQpfWA7XHJcbiAgfVxyXG5cclxuICBkYXRlU3RyaW5nVG95eXl5bW1kZChkOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgZCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtID0gLyhcXGR7NH0pWy1cXC9dPyhcXGR7Mn0pWy1cXC9dPyhcXGR7Mn0pLy5leGVjKGQpO1xyXG4gICAgcmV0dXJuIG0gPyBgJHttWzFdfSR7bVsyXX0ke21bM119YCA6IG51bGw7XHJcbiAgfVxyXG5cclxuICB0aW1lU3RyaW5nVG9oaF9tbSh0OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgdCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtID0gLyhcXGR7Mn0pWzotXT8oXFxkezJ9KS8uZXhlYyh0KTtcclxuICAgIHJldHVybiBtID8gYCR7bVsxXX06JHttWzJdfWAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgc3RyaW5nVG9Cb29sKHM6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHMgJiYgcyAhPT0gJ2ZhbHNlJyAmJiBzICE9PSAnMCcgJiYgcyAhPT0gJ25vJyAmJiBzICE9PSAnbic7XHJcbiAgfVxyXG5cclxuICBjbG9uZTxUID0gYW55Pih0b0Nsb25lOiBUKTogVCB7XHJcbiAgICByZXR1cm4gXy5jbG9uZURlZXAodG9DbG9uZSkgYXMgVDtcclxuICB9XHJcblxyXG4gIHJlcGxhY2VLZXlzSW5UZXh0KFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgcmVwbGFjZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXBsYWNlbWVudHMpLnJlZHVjZSgoY3VycmVudCwga2V5KSA9PiB7XHJcbiAgICAgIHJldHVybiBjdXJyZW50LnJlcGxhY2UoJyUnICsga2V5LCByZXBsYWNlbWVudHNba2V5XSk7XHJcbiAgICB9LCB0ZXh0KTtcclxuICB9XHJcblxyXG4gIGdldE5leHRNaW51ZXRzKGRhdGU6IG1vbWVudC5Nb21lbnQgPSBtb21lbnQoKSwgbWludXRlc1RvUm91bmQgPSAxNSkge1xyXG4gICAgZGF0ZS5taW51dGUoTWF0aC5jZWlsKGRhdGUubWludXRlKCkgLyBtaW51dGVzVG9Sb3VuZCkgKiBtaW51dGVzVG9Sb3VuZCk7XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoJ0hIOm1tJyk7XHJcbiAgfVxyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAqIEJlbG93IGFyZSBmdW5jdGlvbnMgbmVlZGVkIGZvciBnZW5lcmF0aW5nIHRoZSBoYXNoZWQgbnVtYmVyIG9uY2UgdG9rZW4sIHRha2VuIGFzIHJlcXVpcmVkXHQqXHJcbiAgICogRG9uJ3QgTWVzcyB3aXRoIHRoZXNlXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KlxyXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICBnZXROdW1iZXJPbmNlVmFsdWUodG9rZW46IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByYW5kb21fdmFsdWUgPSB0aGlzLmd1aWQoKTtcclxuICAgIHJldHVybiByYW5kb21fdmFsdWUgKyAnXycgKyBoZXhfaG1hY19tZDUodG9rZW4sIHJhbmRvbV92YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBndWlkKCk6IGFueSB7XHJcbiAgICBsZXQgcmFuZG9tX2hleCA9ICcnO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzI7IGkrKykge1xyXG4gICAgICByYW5kb21faGV4ICs9IHRoaXMuczQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmFuZG9tX2hleDtcclxuICB9XHJcblxyXG4gIHM0KCk6IGFueSB7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMClcclxuICAgICAgLnRvU3RyaW5nKDE2KVxyXG4gICAgICAuc3Vic3RyaW5nKDEpO1xyXG4gIH1cclxuXHJcbiAgY2FwaXRhbGlzZUZpcnN0TGV0dGVyKHdvcmQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAod29yZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiB3b3JkWzBdLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmcm9tT2JqZWN0KC4uLmFyZ3M6IGFueVtdKTogYW55IHtcclxuICAgIGxldCBkYXRhID0gYXJncy5zaGlmdCgpO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBkYXRhICYmIGluZGV4IDwgYXJncy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcclxuICAgICAgZGF0YSA9IGRhdGFbYXJnc1tpbmRleF1dO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBtb21lbnRSb3VuZE1pbnV0ZXModGltZTogbW9tZW50Lk1vbWVudCwgcm91bmQ6IG51bWJlcik6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgdGltZSA9IG1vbWVudCh0aW1lKS5zdGFydE9mKCdtaW51dGVzJyk7XHJcbiAgICBsZXQgZGlmZiA9IHRpbWUubWludXRlcygpICUgcm91bmQ7XHJcbiAgICBpZiAoZGlmZiAhPT0gMCkge1xyXG4gICAgICBkaWZmID0gcm91bmQgLSBkaWZmO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRpbWUuYWRkKGRpZmYsICdtaW51dGUnKTtcclxuICB9XHJcblxyXG4gIHJvdW5kKGRhdGU6IGFueSwgZHVyYXRpb246IGFueSkge1xyXG4gICAgcmV0dXJuIG1vbWVudChNYXRoLmNlaWwoK2RhdGUgLyArZHVyYXRpb24pICogK2R1cmF0aW9uKTtcclxuICB9XHJcblxyXG4gIGljc0ZvbGQoYm9keTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGxpbmVzID0gYm9keS5zcGxpdCgvXFxyXFxuL2cpO1xyXG4gICAgcmV0dXJuIGxpbmVzXHJcbiAgICAgIC5tYXAoKGxpbmUpID0+IHtcclxuICAgICAgICBsZXQgcmVzID0gJyc7XHJcbiAgICAgICAgY29uc3QgbiA9IDcyO1xyXG4gICAgICAgIGxpbmUgPSBsaW5lLnRyaW0oKTtcclxuICAgICAgICB3aGlsZSAobGluZS5sZW5ndGggPiBuKSB7XHJcbiAgICAgICAgICByZXMgKz0gYCR7bGluZS5zbGljZSgwLCBuKX1cXHJcXG5gO1xyXG4gICAgICAgICAgbGluZSA9IGAgJHtsaW5lLnNsaWNlKG4pLnRyaW0oKX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGluZS50cmltKCkpIHtcclxuICAgICAgICAgIHJlcyArPSBsaW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignXFxyXFxuJyk7XHJcbiAgfVxyXG5cclxuICBzcGxpdEFkZHJlc3NMaW5lKFxyXG4gICAgbGluZTogc3RyaW5nLFxyXG4gICAgbGVuOiBudW1iZXJcclxuICApOiB7IGxpbmU6IHN0cmluZzsgcmVzaWR1ZTogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgcmVzID0ge1xyXG4gICAgICBsaW5lOiBsaW5lLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCksXHJcbiAgICAgIHJlc2lkdWU6ICcnXHJcbiAgICB9O1xyXG4gICAgaWYgKHJlcy5saW5lLmxlbmd0aCA+IGxlbikge1xyXG4gICAgICBsZXQgaSA9IHJlcy5saW5lLnNsaWNlKDAsIGxlbikubGFzdEluZGV4T2YoJywnKTtcclxuICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgcmVzLnJlc2lkdWUgPSByZXMubGluZS5zbGljZShpICsgMSkudHJpbSgpO1xyXG4gICAgICAgIHJlcy5saW5lID0gcmVzLmxpbmUuc2xpY2UoMCwgaSkudHJpbSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGkgPSByZXMubGluZS5zbGljZSgwLCBsZW4pLmxhc3RJbmRleE9mKCcgJyk7XHJcbiAgICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgICByZXMucmVzaWR1ZSA9IHJlcy5saW5lLnNsaWNlKGkgKyAxKS50cmltKCk7XHJcbiAgICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXMucmVzaWR1ZSA9IHJlcy5saW5lLnNsaWNlKGxlbik7XHJcbiAgICAgICAgICByZXMubGluZSA9IHJlcy5saW5lLnNsaWNlKDAsIGxlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgZGF5c0JldHdlZW4oc3RhcnQ6IG1vbWVudC5Nb21lbnQsIGVuZDogbW9tZW50Lk1vbWVudCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gZW5kLmRpZmYoc3RhcnQsICdkYXlzJyk7XHJcbiAgfVxyXG5cclxuICBtYXBQcm9taXNlPFQgPSBhbnksIFIgPSBhbnk+KFxyXG4gICAgYTogVFtdLFxyXG4gICAgZjogKHZhbDogVCwgaW5kZXg6IG51bWJlcikgPT4gUiB8IFByb21pc2U8Uj4sXHJcbiAgICBtYXg/OiBudW1iZXJcclxuICApOiBQcm9taXNlPFJbXT4ge1xyXG4gICAgY29uc3QgaXQgPSBhW1N5bWJvbC5pdGVyYXRvcl0oKTtcclxuICAgIGNvbnN0IHJlc3VsdDogUltdID0gW107XHJcbiAgICBjb25zdCBidWZmZXI6IFByb21pc2U8Uj5bXSA9IFtdO1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgY29uc3QgbmV4dGYgPSAoKTogUHJvbWlzZTxSPiA9PiB7XHJcbiAgICAgIGNvbnN0IG5leHQgPSBpdC5uZXh0KCk7XHJcbiAgICAgIGlmIChuZXh0LmRvbmUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW5kZXggPSBpKys7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZihuZXh0LnZhbHVlLCBpbmRleCkpLnRoZW4oKHZhbCkgPT4ge1xyXG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSB2YWw7XHJcbiAgICAgICAgcmV0dXJuIG5leHRmKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHdoaWxlICghbWF4IHx8IGJ1ZmZlci5sZW5ndGggPD0gbWF4KSB7XHJcbiAgICAgIGNvbnN0IG4gPSBuZXh0ZigpO1xyXG4gICAgICBpZiAobikge1xyXG4gICAgICAgIGJ1ZmZlci5wdXNoKG4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoYnVmZmVyKS50aGVuKCgpID0+IHtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbWFwU2VyaWVzUHJvbWlzZTxUID0gYW55LCBSID0gYW55PihcclxuICAgIGE6IFRbXSxcclxuICAgIGY6ICh2YWw6IFQsIGluZGV4OiBudW1iZXIpID0+IFIgfCBQcm9taXNlPFI+XHJcbiAgKTogUHJvbWlzZTxSW10+IHtcclxuICAgIHJldHVybiB0aGlzLm1hcFByb21pc2UoYSwgZiwgMSk7XHJcbiAgfVxyXG5cclxuICBvYmoycXVlcnlTdHJpbmcob2JqOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIF8ucmVkdWNlKFxyXG4gICAgICBvYmosXHJcbiAgICAgIChhLCB2LCBrKSA9PiB7XHJcbiAgICAgICAgaWYgKGEgIT09ICcnKSB7XHJcbiAgICAgICAgICBhICs9ICcmJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke2F9JHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWA7XHJcbiAgICAgIH0sXHJcbiAgICAgICcnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3RyaXBQdW5jdHVhdGlvbihzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHMucmVwbGFjZSgvW15hLXpBLVowLTlcXHNdL2csICcnKTtcclxuICB9XHJcblxyXG4gIHJlcGxhY2VBbGwoaGF5c3RhY2s6IHN0cmluZywgbmVlZGxlOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGhheXN0YWNrXHJcbiAgICAgID8gaGF5c3RhY2sucmVwbGFjZShuZXcgUmVnRXhwKG5lZWRsZSwgJ2cnKSwgcmVwbGFjZW1lbnQpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGRhdGVUaW1lKHNhYnNEYXRlOiBzdHJpbmcsIHNhYnNUaW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3QgdGVtcERhdGUgPSBzYWJzRGF0ZS5tYXRjaCgvLnsxLDJ9L2cpOyAvLyBzcGxpdHMgZXZlcnkgMiBjaGFyYWN0ZXJzXHJcbiAgICBjb25zdCB0ZW1wVGltZSA9IHNhYnNUaW1lLm1hdGNoKC8uezEsMn0vZyk7XHJcblxyXG4gICAgY29uc3QgbmV3U3RyID1cclxuICAgICAgJzIwJyArXHJcbiAgICAgIHRlbXBEYXRlWzBdICtcclxuICAgICAgJy0nICtcclxuICAgICAgdGVtcERhdGVbMV0gK1xyXG4gICAgICAnLScgK1xyXG4gICAgICB0ZW1wRGF0ZVsyXSArXHJcbiAgICAgICdUJyArXHJcbiAgICAgIHRlbXBUaW1lWzBdICtcclxuICAgICAgJzonICtcclxuICAgICAgdGVtcFRpbWVbMV0gK1xyXG4gICAgICAnOjAwJztcclxuICAgIHJldHVybiBuZXdTdHI7XHJcbiAgfVxyXG5cclxuICBhbHRlcm5hdGVKU09OU3RyaW5naWZ5KGpzb25PYmplY3Q6IGFueSk6IHN0cmluZyB7XHJcbiAgICBsZXQganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb25PYmplY3QpO1xyXG4gICAganNvblN0cmluZyA9IGpzb25TdHJpbmcucmVwbGFjZSgvXCIvZywgJ2AnKTtcclxuICAgIHJldHVybiBqc29uU3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29udmVydCBvYmplY3QgdG8gYXJyYXlcclxuICBDb252ZXJ0T2JqZWN0VG9BcnJheShvYmplY3Q6IG9iamVjdCk6IGFueVtdIHtcclxuICAgIGxldCBhcnJheSA9IF8udmFsdWVzKG9iamVjdCk7XHJcbiAgICBhcnJheSA9IF8uZmxhdHRlbihhcnJheSk7XHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbiAgfVxyXG5cclxuICBhZGREYXkoZGF0ZVN0cnVjdDogTmdiRGF0ZVN0cnVjdCk6IGFueSB7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoXHJcbiAgICAgIGRhdGVTdHJ1Y3QueWVhcixcclxuICAgICAgZGF0ZVN0cnVjdC5tb250aCAtIDEsXHJcbiAgICAgIGRhdGVTdHJ1Y3QuZGF5ICsgMVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJldERhdGUgPSB7XHJcbiAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogZGF0ZS5nZXREYXRlKClcclxuICAgIH07XHJcbiAgICAvLy8vIGNvbnNvbGUubG9nKHJldERhdGUpO1xyXG4gICAgLy8vLyBjb25zb2xlLmxvZyhkYXRlKTtcclxuICAgIHJldHVybiByZXREYXRlO1xyXG4gIH1cclxuXHJcbiAgaGFzaENvZGUodG9Db2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGhhc2ggPSAwO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9Db2RlLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIGNvbnN0IGNoYXIgPSB0b0NvZGUuY2hhckNvZGVBdChpKTtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1iaXR3aXNlXHJcbiAgICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjaGFyO1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWJpdHdpc2VcclxuICAgICAgaGFzaCA9IGhhc2ggJiBoYXNoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhhc2gudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIE1NZGR5eVRvTmdiKGRhdGU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMubW9tZW50VG9OZ0RhdGUobW9tZW50KGRhdGUsIEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSkpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRDaGlsZHJlblRyYXZlbGxlcnMoXHJcbiAgICBzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLFxyXG4gICAgdHlwZTogU2VydmljZVR5cGVcclxuICApIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAvLyBUaGVzZSB0eXBlcyBkbyBub3QgaGF2ZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiBhZHVsdHMgYW5kIGNoaWxkcmVuLiBzbyBhbHdheXMgbWFyayBhcyBhZHVsdHMuXHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuSG90ZWw6XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiBzZWxlY3RlZFRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHRyYXZlbGxlci5pc0NoaWxkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRUcmF2ZWxsZXJzKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLCB0eXBlOiBTZXJ2aWNlVHlwZSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIC8vIFRoZXNlIHR5cGVzIGRvIG5vdCBoYXZlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGFkdWx0cyBhbmQgY2hpbGRyZW4uIHNvIGFsd2F5cyBtYXJrIGFzIGFkdWx0cy5cclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgcmV0dXJuIHsgYWR1bHRzOiB0cmF2ZWxsZXJzLCBjaGlsZHJlbjogW10sIGluZmFudHM6IFtdIH07XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHRyYXZlbGxlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2N1bToge1xyXG4gICAgICAgICAgICAgIGFkdWx0czogVHJhdmVsbGVyW107XHJcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFRyYXZlbGxlcltdO1xyXG4gICAgICAgICAgICAgIGluZmFudHM6IFRyYXZlbGxlcltdO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXI6IFRyYXZlbGxlclxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0cmF2ZWxsZXIuaXNDaGlsZCkge1xyXG4gICAgICAgICAgICAgIGlmICh0cmF2ZWxsZXIuaXNJbmZhbnQpIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtLmluZmFudHMucHVzaCh0cmF2ZWxsZXIpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhY2N1bS5jaGlsZHJlbi5wdXNoKHRyYXZlbGxlcik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGFjY3VtLmFkdWx0cy5wdXNoKHRyYXZlbGxlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWR1bHRzOiBbXSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICBpbmZhbnRzOiBbXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNlbGVjdGVkQWR1bHRUcmF2ZWxsZXJzKHNlbGVjdGVkVHJhdmVsbGVyczogVHJhdmVsbGVyW10sIHR5cGU6IFNlcnZpY2VUeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gYWR1bHRzIGFuZCBjaGlsZHJlbi4gc28gYWx3YXlzIG1hcmsgYXMgYWR1bHRzLlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRUcmF2ZWxsZXJzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlbGVjdGVkVHJhdmVsbGVycy5maWx0ZXIoXHJcbiAgICAgICh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4gIXRyYXZlbGxlci5pc0NoaWxkICYmICF0cmF2ZWxsZXIuaXNJbmZhbnRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0NoaWxkKHRyYXZlbGxlcjogVHJhdmVsbGVyIHwgRGF0ZSwgbWF4QWdlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGlmICh0cmF2ZWxsZXIgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIGNvbnN0IGFkdWx0RGF0ZSA9IG1vbWVudCgpLmFkZCgtbWF4QWdlLCAneWVhcnMnKTtcclxuICAgICAgcmV0dXJuIGFkdWx0RGF0ZS5pc0JlZm9yZShcclxuICAgICAgICBtb21lbnQodHJhdmVsbGVyLCBCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUKSxcclxuICAgICAgICAnZGF5J1xyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRyYXZlbGxlci5pc0NoaWxkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNDaGlsZEZsaWdodCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBGTElHSFRfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgfVxyXG5cclxuICBpc0NoaWxkUmFpbCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBSQUlMX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gIH1cclxuXHJcbiAgaXNDaGlsZEV1cm9zdGFyKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gIH1cclxuXHJcbiAgdW5pcUJ5KGFycmF5OiBhbnlbXSwgdmFsdWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIF8udW5pcUJ5KGFycmF5LCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBpc0NoaWxkKHRyYXZlbGxlcjogVHJhdmVsbGVyIHwgRGF0ZSwgdHJhdmVsVHlwZTogU2VydmljZVR5cGUpIHtcclxuICAgIHN3aXRjaCAodHJhdmVsVHlwZSkge1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkZsaWdodDpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEZMSUdIVF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgLy8gY2FzZSBTZXJ2aWNlVHlwZS5FdXJvc3RhcjpcclxuICAgICAgLy8gIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyk7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuQ29hY2g6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBDT0FDSF9NQVhfQ0hJTERfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2hpbGQodHJhdmVsbGVyLCBMT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNJbmZhbnQodHJhdmVsbGVyOiBUcmF2ZWxsZXIgfCBEYXRlLCB0cmF2ZWxUeXBlOiBTZXJ2aWNlVHlwZSkge1xyXG4gICAgc3dpdGNoICh0cmF2ZWxUeXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgRkxJR0hUX01BWF9JTkZBTlRfQUdFX1lFQVJTKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgUkFJTF9NQVhfSU5GQU5UX0FHRV9ZRUFSUyk7XHJcbiAgICAgIC8vIGNhc2UgU2VydmljZVR5cGUuRXVyb3N0YXI6XHJcbiAgICAgIC8vICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIEVVUk9TVEFSX01BWF9DSElMRF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNvYWNoOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NoaWxkKHRyYXZlbGxlciwgQ09BQ0hfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNDaGlsZCh0cmF2ZWxsZXIsIExPVU5HRVNfTUFYX0lORkFOVF9BR0VfWUVBUlMpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhYjpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QWdlVHlwZSh0cmF2ZWxsZXI6IFRyYXZlbGxlciwgdHJhdmVsVHlwZTogU2VydmljZVR5cGUpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNDaGlsZCh0cmF2ZWxsZXIsIHRyYXZlbFR5cGUpID8gJ0MnIDogJ0EnO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4Q2hpbGRBZ2UodHlwZTogU2VydmljZVR5cGUpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLlJhaWw6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1SQUlMX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICAvLyBjYXNlIFNlcnZpY2VUeXBlLkVVUk9TVEFSOlxyXG4gICAgICAvLyAgcmV0dXJuIG1vbWVudCgpLmFkZCgtRVVST1NUQVJfTUFYX0NISUxEX0FHRV9ZRUFSUyArIDEsICd5ZWFycycpLmZvcm1hdChIZWxwZXJzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUNPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgKyAxLCAneWVhcnMnKVxyXG4gICAgICAgICAgLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuTU1ERFlZX0RBVEUpO1xyXG4gICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUxPVU5HRVNfTUFYX0NISUxEX0FHRV9ZRUFSUyArIDEsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREZWZhdWx0QWR1bHRBZ2UodHlwZTogU2VydmljZVR5cGUpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtRkxJR0hUX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5SYWlsOlxyXG4gICAgICAgIHJldHVybiBtb21lbnQoKVxyXG4gICAgICAgICAgLmFkZCgtUkFJTF9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpXHJcbiAgICAgICAgICAuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5NTUREWVlfREFURSk7XHJcbiAgICAgIC8vIGNhc2UgU2VydmljZVR5cGUuRXVyb3N0YXI6XHJcbiAgICAgIC8vICByZXR1cm4gbW9tZW50KCkuYWRkKC1FVVJPU1RBUl9NQVhfQ0hJTERfQUdFX1lFQVJTIC0gMTAsICd5ZWFycycpLmZvcm1hdChIZWxwZXJzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICByZXR1cm4gbW9tZW50KClcclxuICAgICAgICAgIC5hZGQoLUNPQUNIX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Mb3VuZ2U6XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC1MT1VOR0VTX01BWF9DSElMRF9BR0VfWUVBUlMgLSAxMCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Ib3RlbDpcclxuICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5DYWI6XHJcbiAgICAgICAgLy8gVGhlc2UgdHlwZXMgZG8gbm90IGhhdmUgY2hpbGQgcGxhY2VzIHNvXHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCgpXHJcbiAgICAgICAgICAuYWRkKC0xOCwgJ3llYXJzJylcclxuICAgICAgICAgIC5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtb21lbnQoKS5hZGQoLTE4LCAneWVhcnMnKS5mb3JtYXQoQmFzZUhlbHBlclJvdXRpbmVzLk1NRERZWV9EQVRFKTtcclxuICB9XHJcblxyXG4gIHRyYW5zZm9ybShcclxuICAgIGFycmF5OiBhbnlbXSxcclxuICAgIGNhbGxiYWNrOiBfLk1lbW9Wb2lkQXJyYXlJdGVyYXRvcjxhbnksIGFueVtdPixcclxuICAgIGFjYzogYW55XHJcbiAgKTogYW55W10ge1xyXG4gICAgcmV0dXJuIF8udHJhbnNmb3JtKGFycmF5LCBjYWxsYmFjaywgYWNjKTtcclxuICB9XHJcblxyXG4gIGFycmF5VG9PYmplY3Q8VCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0+KFxyXG4gICAgYXJyYXk6IFRbXSxcclxuICAgIGZpZWxkOiBzdHJpbmdcclxuICApOiB7IFtrZXk6IHN0cmluZ106IFQgfSB7XHJcbiAgICByZXR1cm4gYXJyYXlcclxuICAgICAgLmZpbHRlcigoZGF0YTogVCkgPT4gISFkYXRhKVxyXG4gICAgICAucmVkdWNlKChjb25maWdzOiB7IFtrZXk6IHN0cmluZ106IFQgfSwgY29uZmlnSXRlbTogVCkgPT4ge1xyXG4gICAgICAgIGlmIChjb25maWdJdGVtICYmIGNvbmZpZ0l0ZW1bZmllbGRdKSB7XHJcbiAgICAgICAgICBjb25maWdzW2NvbmZpZ0l0ZW1bZmllbGRdXSA9IGNvbmZpZ0l0ZW07XHJcbiAgICAgICAgICByZXR1cm4gY29uZmlncztcclxuICAgICAgICB9XHJcbiAgICAgIH0sIHt9KTtcclxuICB9XHJcblxyXG4gIGFycmF5VG9PYmplY3RBcnJheTxUIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBhbnkgfT4oXHJcbiAgICBhcnJheTogVFtdLFxyXG4gICAgZmllbGQ6IHN0cmluZ1xyXG4gICk6IHsgW2tleTogc3RyaW5nXTogVFtdIH0ge1xyXG4gICAgcmV0dXJuIGFycmF5XHJcbiAgICAgIC5maWx0ZXIoKGRhdGE6IFQpID0+ICEhZGF0YSlcclxuICAgICAgLnJlZHVjZSgoY29uZmlnczogeyBba2V5OiBzdHJpbmddOiBUW10gfSwgY29uZmlnSXRlbTogVCkgPT4ge1xyXG4gICAgICAgIGlmIChjb25maWdJdGVtICYmIGNvbmZpZ0l0ZW1bZmllbGRdKSB7XHJcbiAgICAgICAgICBjb25maWdzW2NvbmZpZ0l0ZW1bZmllbGRdXSA9IGNvbmZpZ3NbY29uZmlnSXRlbVtmaWVsZF1dIHx8IFtdO1xyXG4gICAgICAgICAgY29uZmlnc1tjb25maWdJdGVtW2ZpZWxkXV0ucHVzaChjb25maWdJdGVtKTtcclxuICAgICAgICAgIHJldHVybiBjb25maWdzO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwge30pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVybWluYWxzKGFpcnBvcnQ6IEFpcnBvcnQpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gYWlycG9ydC50ZXJtaW5hbHM7XHJcbiAgfVxyXG5cclxuICBmaWVsZEZyb21PYmplY3Qob2JqOiBvYmplY3QsIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIChmaWVsZCB8fCAnJylcclxuICAgICAgLnNwbGl0KCcuJylcclxuICAgICAgLnJlZHVjZSgoY3VycmVudDogUmVjb3JkPHN0cmluZywgYW55PiwgZmllbGQxOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W2ZpZWxkMV0pIHtcclxuICAgICAgICAgIHJldHVybiBjdXJyZW50W2ZpZWxkMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfSwgb2JqKTtcclxuICB9XHJcblxyXG4gIG1hcEZpZWxkRnJvbU9iamVjdDxLIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCBUPihmaWVsZDogSykge1xyXG4gICAgcmV0dXJuIChvYmo6IFJlY29yZDxLLCBhbnk+KTogVCA9PiB7XHJcbiAgICAgIHJldHVybiBvYmpbZmllbGRdO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlbW92ZU51bGxzPFQ+KHF1ZXJ5OiBUKTogVCB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocXVlcnkpLnJlZHVjZSgoYWNjdW06IFQsIGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gKHF1ZXJ5IGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV07XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBBcnJheS5pc0FycmF5KHZhbHVlKVxyXG4gICAgICAgID8gdmFsdWUuZmlsdGVyKChpdGVtOiBhbnkpID0+ICEhaXRlbSkgfHwgbnVsbFxyXG4gICAgICAgIDogdmFsdWU7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAoZGF0YSAhPT0gbnVsbCAmJiBkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YSAhPT0gJ251bGwnKSB8fFxyXG4gICAgICAgIChBcnJheS5pc0FycmF5KGRhdGEpICYmIGRhdGEubGVuZ3RoID4gMClcclxuICAgICAgKSB7XHJcbiAgICAgICAgKGFjY3VtIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV0gPSBkYXRhO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2N1bTtcclxuICAgIH0sIHt9IGFzIFQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VHJhdmVsbGVyc0lkKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKTogc3RyaW5nW10ge1xyXG4gICAgaWYgKHRyYXZlbGxlcnMpIHtcclxuICAgICAgcmV0dXJuIHRyYXZlbGxlcnMucmVkdWNlKFxyXG4gICAgICAgIChwcmV2aW91c1ZhbHVlOiBzdHJpbmdbXSwgY3VycmVudFZhbHVlOiBUcmF2ZWxsZXIsIGlkeDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGlkeCA9PT0gMCA/IFtjdXJyZW50VmFsdWUuaWRdIDogWy4uLnByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZS5pZF07XHJcbiAgICAgIH0sIFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGxvb3Agb3ZlciB0aGUgcXVlcnkgb2JqZWN0IHBhcmFtIGFuZCBjb252ZXJ0IGFueSBtb21lbnQgZGF0ZSBvYmplY3RzIHRvIGRhdGUtdGltZSBzdHJpbmdzXHJcbiAgICogQHBhcmFtIHF1ZXJ5XHJcbiAgICogQHBhcmFtIGRlYnVnXHJcbiAgICovXHJcbiAgc2FuaXRpemVNb21lbnREYXRlcyhxdWVyeTogYW55LCBkZWJ1ZyA9IGZhbHNlKTogYW55IHtcclxuICAgIGNvbnN0IHNhbml0aXplZFF1ZXJ5ID0geyAuLi5xdWVyeSB9O1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2FuaXRpemVkUXVlcnkpKSB7XHJcbiAgICAgIGlmIChtb21lbnQuaXNNb21lbnQodmFsdWUpKSB7XHJcbiAgICAgICAgc2FuaXRpemVkUXVlcnlba2V5XSA9IHNhbml0aXplZFF1ZXJ5W2tleV0udG9JU09TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGRlYnVnKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCctLSBzYW5pdGl6ZU1vbWVudERhdGVzKCkgY2FsbGVkIC0tJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdvcmlnaW5hbCBxdWVyeTogJywgcXVlcnkpO1xyXG4gICAgICBjb25zb2xlLmxvZygnc2FuaXRpemVkIHF1ZXJ5OiAnLCBzYW5pdGl6ZWRRdWVyeSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2FuaXRpemVkUXVlcnk7XHJcbiAgfVxyXG5cclxuICB0b1N0cmluZ3M8VD4odG9Gb3JtYXQ6IFQsIHNjaGVtYTogU2NoZW1hKTogVCB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc2NoZW1hLnByb3BlcnRpZXMgfHwge30pLnJlZHVjZShcclxuICAgICAgKGN1cnJlbnRWYWx1ZTogVCwgW2tleSwgdmFsdWVdOiBbc3RyaW5nLCBTY2hlbWFdKTogVCA9PiB7XHJcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl9mb3JtYXRWYWx1ZShcclxuICAgICAgICAgIHRvRm9ybWF0W2tleSBhcyBrZXlvZiBUXSxcclxuICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgKHNjaGVtYS5yZXF1aXJlZCB8fCBbXSkuaW5jbHVkZXMoa2V5KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgY3VycmVudFZhbHVlW2tleSBhcyBrZXlvZiBUXSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xyXG4gICAgICB9LFxyXG4gICAgICB7fSBhcyBUXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZm9ybWF0VmFsdWUodmFsdWU6IGFueSwgc2NoZW1hOiBTY2hlbWEsIGlzUmVxdWlyZWQ6IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xyXG4gICAgICBjYXNlICdpbnRlZ2VyJzpcclxuICAgICAgICBjb25zdCB0bXAgPSBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKTtcclxuICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKHRtcCkgPyAoaXNSZXF1aXJlZCA/IDAgOiBudWxsKSA6IHRtcDtcclxuICAgICAgY2FzZSAnc3RyaW5nJzpcclxuICAgICAgICBjb25zdCB0bXAxID0gdmFsdWUgPyB2YWx1ZS50b1N0cmluZygpIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gdG1wMSAmJiB0bXAxLmxlbmd0aCA+IDAgPyB0bXAxIDogaXNSZXF1aXJlZCA/ICcnIDogbnVsbDtcclxuICAgICAgY2FzZSAnb2JqZWN0JzpcclxuICAgICAgICByZXR1cm4gdmFsdWUgPyB0aGlzLnRvU3RyaW5ncyh2YWx1ZSwgc2NoZW1hKSA6IGlzUmVxdWlyZWQgPyB7fSA6IG51bGw7XHJcbiAgICAgIGNhc2UgJ2FycmF5JzpcclxuICAgICAgICByZXR1cm4gdmFsdWU7IC8vIFRPRE8gd3JpdGUgYXJyYXkgdHJhbnNsYXRpb25cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtYWtlVGltZVdpbmRvdyhkYXRlVGltZTogbW9tZW50Lk1vbWVudCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gZGF0ZVRpbWUuY2xvbmUoKS5hZGQoc3RhcnQsICdob3VyJyk7XHJcbiAgICBjb25zdCBlbmRUaW1lID0gZGF0ZVRpbWUuY2xvbmUoKS5hZGQoZW5kLCAnaG91cicpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmZvcm1hdFRpbWUoc3RhcnRUaW1lKSArICctJyArIHRoaXMuZm9ybWF0VGltZShlbmRUaW1lKTtcclxuICB9XHJcblxyXG4gIGluUmFuZ2UodG9jaGVjazogbnVtYmVyLCByYW5nZTogTWluTWF4KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdG9jaGVjayA+PSByYW5nZS5taW4gJiYgdG9jaGVjayA8PSByYW5nZS5tYXg7XHJcbiAgfVxyXG5cclxuICBtYWtlVXNlcnModHJhdmVsbGVyczogVHJhdmVsbGVyW10pOiBVc2VyUGFzc2VuZ2VyVHlwZUlucHV0W10ge1xyXG4gICAgcmV0dXJuIHRyYXZlbGxlcnMubWFwKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IFVzZXJQYXNzZW5nZXJUeXBlSW5wdXQgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlkOiB0cmF2ZWxsZXIuaWQsXHJcbiAgICAgICAgcGFzc2VuZ2VyVHlwZTogdHJhdmVsbGVyLmlzQ2hpbGRcclxuICAgICAgICAgID8gUGFzc2VuZ2VyVHlwZS5DaGlsZFxyXG4gICAgICAgICAgOiB0cmF2ZWxsZXIuaXNJbmZhbnRcclxuICAgICAgICAgID8gUGFzc2VuZ2VyVHlwZS5JbmZhbnRcclxuICAgICAgICAgIDogUGFzc2VuZ2VyVHlwZS5BZHVsdFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBtYWtlTW9tZW50RGF5VGltZShhZGREYXk/OiBudW1iZXIsIGhoPzogbnVtYmVyLCBtPzogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBkdCA9IG1vbWVudCgpO1xyXG5cclxuICAgIGlmIChhZGREYXkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBkdC5hZGQoYWRkRGF5LCAnZGF5Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZHQuc2V0KCdob3VycycsIGhoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGR0LnNldCgnbWludXRlcycsIG0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkdDtcclxuICB9XHJcblxyXG4gIHNhbmF0aXplUmV0dXJuczxUPihcclxuICAgIGRlZmF1bHRzOiBULFxyXG4gICAgc3VwcGxpZWREYXRhOiBQYXJ0aWFsPFQ+LFxyXG4gICAgbW9tZW50RmllbGRzPzogKGtleW9mIFQpW11cclxuICApOiBUIHtcclxuICAgIGNvbnN0IGNvbWJpbmVkOiBUID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIHN1cHBsaWVkRGF0YSk7XHJcbiAgICByZXR1cm4gKG1vbWVudEZpZWxkcyB8fCBbXSkucmVkdWNlKChjdXJyZW50OiBULCBuZXh0OiBrZXlvZiBUKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gKGN1cnJlbnQgYXMgYW55KVtuZXh0XTtcclxuICAgICAgKGN1cnJlbnQgYXMgYW55KVtuZXh0XSA9ICF2YWx1ZVxyXG4gICAgICAgID8gbW9tZW50KClcclxuICAgICAgICA6IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcclxuICAgICAgICA/IG1vbWVudCh2YWx1ZSlcclxuICAgICAgICA6IHZhbHVlO1xyXG4gICAgICByZXR1cm4gY3VycmVudDtcclxuICAgIH0sIGNvbWJpbmVkKTtcclxuICB9XHJcblxyXG4gIG1pSXNWYWxpZCh0b0NoZWNrOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdG9DaGVjay5sZW5ndGggPT09IDAgfHxcclxuICAgICAgISF0b0NoZWNrLmZpbmQoKG1pSXRlbTogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG1pSXRlbS5pc1ZhbGlkKCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaXNNaVZhbGlkKFxyXG4gICAgbWlQZXJJdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSxcclxuICAgIG1pUGVyVXNlcjoge1xyXG4gICAgICBba2V5OiBzdHJpbmddOiB7XHJcbiAgICAgICAgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdXNlck1pcyA9IE9iamVjdC52YWx1ZXMobWlQZXJVc2VyIHx8IHt9KTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMubWlJc1ZhbGlkKG1pUGVySXRlbSkgJiZcclxuICAgICAgKHVzZXJNaXMubGVuZ3RoID09PSAwIHx8XHJcbiAgICAgICAgISF1c2VyTWlzLmZpbmQoXHJcbiAgICAgICAgICAodXNlck1pczE6IHsgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdIH0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWlJc1ZhbGlkKHVzZXJNaXMxLm1hbmFnZW1lbnRJbmZvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5lZWRzTWkoYmFza2V0OiBCYXNrZXREZXRhaWxzLCBuZWVkc1RvVmlld01pOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBiYXNrZXQuYmFza2V0SW5mb01pRGV0YWlscy5sZW5ndGggPiAwICYmXHJcbiAgICAgIChuZWVkc1RvVmlld01pIHx8XHJcbiAgICAgICAgIWJhc2tldC5iYXNrZXRJbmZvTWlEZXRhaWxzLmZpbmQoXHJcbiAgICAgICAgICAobWlEZXRhaWw6IEJhc2tldEl0ZW1NYW5hZ2VtZW50SW5mbyk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc01pVmFsaWQobWlEZXRhaWwubWlQZXJJdGVtLCBtaURldGFpbC5taVBlclVzZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZmluZFNlcnZpY2Uoc2VydmljZXM6IFVzZXJTZXJ2aWNlcywgaWQ6IHN0cmluZyk6IFNlcnZpY2Uge1xyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoc2VydmljZXMpLnJlZHVjZShcclxuICAgICAgKGN1cnJlbnQ6IFNlcnZpY2UsIHNlcnZpY2UxOiBTZXJ2aWNlW10pOiBTZXJ2aWNlID0+IHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgY3VycmVudCB8fFxyXG4gICAgICAgICAgc2VydmljZTEuZmluZCgoc2VydmljZTI6IFNlcnZpY2UpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UyLmlkID09PSBpZDtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSxcclxuICAgICAgbnVsbCBhcyBTZXJ2aWNlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYWxsVHJ1ZShcclxuICAgIHN1cHBJbmZvOiBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2VbXSxcclxuICAgIGZpbHRlcjogKHN1cHBJbmZvOiBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2UpID0+IGJvb2xlYW5cclxuICApOiBib29sZWFuIHtcclxuICAgIHJldHVybiBzdXBwSW5mby5maWx0ZXIoZmlsdGVyKS5sZW5ndGggPT09IHN1cHBJbmZvLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGpvaW5Gcm9tQXR0cmlidXRlPFQ+KFxyXG4gICAgam9pbkNoYXJhY3Rlcjogc3RyaW5nLFxyXG4gICAgYXR0cmlidXRlOiBrZXlvZiBULFxyXG4gICAgYXJyYXk6IFRbXVxyXG4gICk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYXJyYXkubWFwKChpdGVtOiBUKSA9PiBpdGVtW2F0dHJpYnV0ZV0pLmpvaW4oam9pbkNoYXJhY3Rlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzcGxpdCB1cCBhbiBhcnJheSBpbnRvIGVxdWFsIHBhcnRzXHJcbiAgICogQHBhcmFtIGFycmF5IC0gdGhlIGFycmF5IHRvIHNwbGl0IHVwXHJcbiAgICogQHBhcmFtIHNpemUgLSB0aGUgc2l6ZSBvZiB0aGUgY29uc3RpdHVhbnQgcGFydHNcclxuICAgKiBAcGFyYW0gaW5jbHVkZVJlbWFpbmRlciAtIHdldGhlciBvciBub3QgdG8gaW5jbHVkZSBhbnkgcmVtYWluZyByZXN1bHRzIC0gZGVmYXVsdCB0cnVlXHJcbiAgICovXHJcbiAgc3BsaXRVcEFycmF5KFxyXG4gICAgYXJyYXk6IGFueVtdLFxyXG4gICAgc2l6ZTogbnVtYmVyLFxyXG4gICAgaW5jbHVkZVJlbWFpbmRlcjogYm9vbGVhbiA9IHRydWVcclxuICApOiBhbnlbXSB7XHJcbiAgICBjb25zdCBhcnJheUNvcHkgPSBfLmNsb25lRGVlcChhcnJheSk7IC8vIGxvZGFzaCBjbG9uZSBkZWVwXHJcbiAgICBsZXQgbmV3QXJyYXkgPSBbXTtcclxuXHJcbiAgICBpZiAoYXJyYXlDb3B5Lmxlbmd0aCA+IHNpemUpIHtcclxuICAgICAgd2hpbGUgKGFycmF5Q29weS5sZW5ndGggPj0gc2l6ZSkge1xyXG4gICAgICAgIG5ld0FycmF5LnB1c2goYXJyYXlDb3B5LnNwbGljZSgwLCBzaXplKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFkZCBhbnkgcmVtYWluaW5nXHJcbiAgICAgIGlmIChhcnJheUNvcHkubGVuZ3RoICYmIGluY2x1ZGVSZW1haW5kZXIpIHtcclxuICAgICAgICBuZXdBcnJheS5wdXNoKGFycmF5Q29weSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld0FycmF5ID0gYXJyYXlDb3B5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXdBcnJheTtcclxuICB9XHJcblxyXG4gIEBNZW1vcmlzZSgpXHJcbiAgZ2V0VGltZURpZmZlcmVuY2UoZGVwRGF0ZVRpbWU6IHN0cmluZywgYXJyRGF0ZVRpbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gbW9tZW50KGRlcERhdGVUaW1lKS5kaWZmKG1vbWVudChhcnJEYXRlVGltZSksICdtaW51dGVzJyk7XHJcbiAgfVxyXG5cclxuICBATWVtb3Jpc2UoKVxyXG4gIGRheURpZmZlcmVuY2UoZGVwdDogc3RyaW5nLCBhcnI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkaWZmID0gbW9tZW50KGFycilcclxuICAgICAgLnN0YXJ0T2YoJ2RheScpXHJcbiAgICAgIC5kaWZmKG1vbWVudChkZXB0KS5zdGFydE9mKCdkYXknKSwgJ2RheScpO1xyXG4gICAgcmV0dXJuIGRpZmYgPiAwID8gZGlmZi50b1N0cmluZygpIDogJyc7XHJcbiAgfVxyXG5cclxuICBATWVtb3Jpc2UoKVxyXG4gIG1ha2VGYXJlUnVsZXMoZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnksIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSkge1xyXG4gICAgY29uc3QgZmxpZ2h0cyA9XHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgICAgID8gZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1xyXG4gICAgICAgIDogZmxpZ2h0LmluYm91bmRGbGlnaHRzO1xyXG4gICAgY29uc3QgcnVsZXMgPSBmbGlnaHRzLnJlZHVjZShcclxuICAgICAgKGN1cnJlbnQ6IEZhcmVDb25kaXRpb25zLCBuZXh0OiBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgY3VycmVudC5jYW5jZWxsYXRpb24gPSBjdXJyZW50LmNhbmNlbGxhdGlvbi5jb25jYXQoXHJcbiAgICAgICAgICBuZXh0LmZhcmVDb25kaXRpb25zPy5jYW5jZWxsYXRpb24gfHwgW11cclxuICAgICAgICApO1xyXG4gICAgICAgIGN1cnJlbnQuY2hhbmdlID0gY3VycmVudC5jaGFuZ2UuY29uY2F0KFxyXG4gICAgICAgICAgbmV4dC5mYXJlQ29uZGl0aW9ucz8uY2hhbmdlIHx8IFtdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjdXJyZW50Lm5vU2hvdyA9IGN1cnJlbnQubm9TaG93LmNvbmNhdChcclxuICAgICAgICAgIG5leHQuZmFyZUNvbmRpdGlvbnM/Lm5vU2hvdyB8fCBbXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3VycmVudC51cGdyYWRlID0gY3VycmVudC51cGdyYWRlLmNvbmNhdChcclxuICAgICAgICAgIG5leHQuZmFyZUNvbmRpdGlvbnM/LnVwZ3JhZGUgfHwgW11cclxuICAgICAgICApO1xyXG4gICAgICAgIGN1cnJlbnQub3RoZXIgPSBjdXJyZW50Lm90aGVyLmNvbmNhdChuZXh0LmZhcmVDb25kaXRpb25zPy5vdGhlciB8fCBbXSk7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBjYW5jZWxsYXRpb246IFtdLFxyXG4gICAgICAgIGNoYW5nZTogW10sXHJcbiAgICAgICAgbm9TaG93OiBbXSxcclxuICAgICAgICB1cGdyYWRlOiBbXSxcclxuICAgICAgICBvdGhlcjogW11cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHJldHVybiB7IHJ1bGVzLCBmbGlnaHRzIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzYyAtIGdlbmVyYXRlcyBpY3MgZmlsZSBjb250ZW50XHJcbiAgICovXHJcbiAgZ2VuZXJhdGVJY3NGaWxlQ29udGVudHMoYmFza2V0SXRlbXM6IEJhc2tldEl0ZW1bXSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBpY3NCb2R5Q29udGVudCA9IHRoaXMuZ2VuZXJhdGVJY3NGaWxlQm9keUNvbnRlbnQoYmFza2V0SXRlbXMpO1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgJ0JFR0lOOlZDQUxFTkRBUlxcclxcbicsXHJcbiAgICAgICdQUk9ESUQ6LS8vTWljcm9zIFRyYXZlbC8vU0FCUyBDb3Jwb3JhdGUgLSBNTVhJSUkvL0VOXFxyXFxuJyxcclxuICAgICAgJ1ZFUlNJT046Mi4wXFxyXFxuJyxcclxuICAgICAgJ01FVEhPRDpSRVFVRVNUXFxyXFxuJyxcclxuICAgICAgaWNzQm9keUNvbnRlbnQsXHJcbiAgICAgICdFTkQ6VkNBTEVOREFSXFxyXFxuJ1xyXG4gICAgXS5qb2luKCcnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjIC0gZ2VuZXJhdGVzIGljcyBmaWxlIGJvZHkgY29udGVudCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgYmFza2V0SXRlbXMgcGFyYW1cclxuICAgKi9cclxuICBnZW5lcmF0ZUljc0ZpbGVCb2R5Q29udGVudChiYXNrZXRJdGVtczogQmFza2V0SXRlbVtdKTogc3RyaW5nIHtcclxuICAgIC8vIFRPRE86IGN1cnJlbnRseSBvbmx5IGJhc2tldCBpdGVtcyB3aXRoIFNlcnZpY2VUeXBlLkxvdW5nZSBhcmUgaGFuZGxlZC4gU2VlIGJlbG93IHRvIFRPRE9zIGZvciByZW1haW5pbmcgdGFza3NcclxuICAgIGNvbnN0IGJvZHlDb250ZW50OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIC8vIGdlbmVyYXRlIGNhbGVuZGFyIGRhdGEgZm9yIGVhY2ggYmFza2V0IGl0ZW1cclxuICAgIGJhc2tldEl0ZW1zLm1hcCgoYmFza2V0SXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICBkU3RhcnQ6ICcnLFxyXG4gICAgICAgIGRFbmQ6ICcnLFxyXG4gICAgICAgIGxvY2F0aW9uRnJvbTogJycsXHJcbiAgICAgICAgbG9jYXRpb25UbzogJycsXHJcbiAgICAgICAgYmFza2V0SWQ6ICcnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgICBzZXJ2aWNlVHlwZTogJycsXHJcbiAgICAgICAgc3VtbWFyeTogJydcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHsgdHlwZSB9ID0gYmFza2V0SXRlbS5zZXJ2aWNlO1xyXG5cclxuICAgICAgLy8gcG9wdWxhdGUgZGF0YSBvYmplY3QgZGVwZW5kaW5nIG9uIHRoZSBzZXJ2aWNlIHR5cGUgaW4gdGhlIGJhc2tldFxyXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkxvdW5nZTpcclxuICAgICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgICAgYWR1bHRzLFxyXG4gICAgICAgICAgICBjaGlsZHJlbixcclxuICAgICAgICAgICAgYm9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2UsXHJcbiAgICAgICAgICAgIGRldGFpbCxcclxuICAgICAgICAgICAgc2VydmljZVxyXG4gICAgICAgICAgfSA9IGJhc2tldEl0ZW07XHJcbiAgICAgICAgICBkYXRhLmJhc2tldElkID0gYmFza2V0SXRlbS5pZDtcclxuICAgICAgICAgIGRhdGEuZFN0YXJ0ID0gZGV0YWlsPy5hcnJpdmFsRGF0ZXRpbWU7XHJcbiAgICAgICAgICBkYXRhLmRFbmQgPSAnJztcclxuICAgICAgICAgIGRhdGEuc3VtbWFyeSA9IGBBaXJwb3J0IExvdW5nZSAtICR7ZGV0YWlsLm5hbWV9YDtcclxuICAgICAgICAgIGRhdGEuc2VydmljZVR5cGUgPSBzZXJ2aWNlLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGRhdGEuZGVzY3JpcHRpb24gPSBbXHJcbiAgICAgICAgICAgIGBMb3VuZ2U6ICR7ZGV0YWlsLm5hbWV9XFxyXFxuYCxcclxuICAgICAgICAgICAgYFN0YXJ0czogJHtkZXRhaWwuYXJyaXZhbERhdGV0aW1lfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBBZHVsdHM6ICR7YWR1bHRzfVxcclxcbmAsXHJcbiAgICAgICAgICAgIGBDaGlsZHJlbjogJHtjaGlsZHJlbn1cXHJcXG5gLFxyXG4gICAgICAgICAgICBgQm9va2luZyBSZWY6ICR7Ym9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2V9YFxyXG4gICAgICAgICAgXS5qb2luKCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuQ2FiOlxyXG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSB0aGlzIGNhc2VcclxuICAgICAgICAvLyBoaW50OiBzZWUgbG9naWMgaW4gaWNhbGVuZGFyLmNvbXBvbmVudC50cyAgZmlsZSBvbiBsaWdodGluZyBjdXJyZW50IHZlcnNpb25cclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkNhcjpcclxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgdGhpcyBjYXNlXHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5Db2FjaDpcclxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgdGhpcyBjYXNlXHJcbiAgICAgICAgY2FzZSBTZXJ2aWNlVHlwZS5GYXN0VHJhY2s6XHJcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHRoaXMgY2FzZVxyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuRmxpZ2h0OlxyXG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSB0aGlzIGNhc2VcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkhvdGVsOlxyXG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSB0aGlzIGNhc2VcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsOlxyXG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSB0aGlzIGNhc2VcclxuICAgICAgICBjYXNlIFNlcnZpY2VUeXBlLlBhcmtpbmc6XHJcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHRoaXMgY2FzZVxyXG4gICAgICAgIGNhc2UgU2VydmljZVR5cGUuUmFpbDpcclxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgdGhpcyBjYXNlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGJvZHlDb250ZW50LnB1c2goXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgJ0JFR0lOOlZFVkVOVFxcclxcbicsXHJcbiAgICAgICAgICBkYXRhLmRTdGFydFxyXG4gICAgICAgICAgICA/IGBEVFNUQVJUOiR7bW9tZW50KGRhdGEuZFN0YXJ0KS5mb3JtYXQoJ1lZWVlNTUREVEhIbW1zcycpfVxcclxcbmBcclxuICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgIGRhdGEuZEVuZFxyXG4gICAgICAgICAgICA/IGBEVEVORDoke21vbWVudChkYXRhLmRFbmQpLmZvcm1hdCgnWVlZWU1NRERUSEhtbXNzJyl9XFxyXFxuYFxyXG4gICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgJ09SR0FOSVpFUjtDTj1cIkRvIG5vdCByZXBseSB0byB0aGlzIGVtYWlsXCI6bWFpbHRvOmRvX25vdF9yZXBseUBzYWJzY29ycC5jb21cXHJcXG4nLFxyXG4gICAgICAgICAgZGF0YS5sb2NhdGlvblRvICYmIGRhdGEubG9jYXRpb25Gcm9tXHJcbiAgICAgICAgICAgID8gYExPQ0FUSU9OOiAke2RhdGEubG9jYXRpb25Ub30gdG8gJHtkYXRhLmxvY2F0aW9uRnJvbX0gXFxyXFxuYFxyXG4gICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgJ1RSQU5TUDpPUEFRVUVcXHJcXG4nLFxyXG4gICAgICAgICAgJ1NFUVVFTkNFOjBcXHJcXG4nLFxyXG4gICAgICAgICAgYFVJRDoke2RhdGEuc2VydmljZVR5cGV9XyR7aW5kZXh9XyR7ZGF0YS5iYXNrZXRJZH1Ac2Fic2NvcnAuY29tXFxyXFxuYCxcclxuICAgICAgICAgIGBEVFNUQU1QOiR7bW9tZW50KCkuZm9ybWF0KCdZWVlZTU1ERFRISG1tc3MnKX1cXHJcXG5gLFxyXG4gICAgICAgICAgYERFU0NSSVBUSU9OOiR7ZGF0YS5kZXNjcmlwdGlvbn1cXHJcXG5gLFxyXG4gICAgICAgICAgYFNVTU1BUlk6JHtkYXRhLnN1bW1hcnl9XFxyXFxuYCxcclxuICAgICAgICAgICdFTkQ6VkVWRU5UXFxyXFxuJ1xyXG4gICAgICAgIF0uam9pbignJylcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBib2R5Q29udGVudC5qb2luKCcnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjIC0gY3JlYXRlcyBhbiBlbGVtZW50IGluIG1lbW9yeSBhbmQgdHJpZ2dlcnMgY2xpY2sgZXZlbnQgdG8gZG93bmxvYWQgaWNzIGZpbGVcclxuICAgKi9cclxuICBkb3dubG9hZEljcyhmaWxlbmFtZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcclxuICAgICAgJ2hyZWYnLFxyXG4gICAgICAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsJyArIGVuY29kZVVSSUNvbXBvbmVudCh0ZXh0KVxyXG4gICAgKTtcclxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVuYW1lKTtcclxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XHJcbiAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICBlbGVtZW50LmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzcGxpdCBhIHN0cmluZyBvbiBjYXBpdGFsc1xyXG4gICAqIEBwYXJhbSByYXdTdHJpbmcgLSB0aGUgc3RyaW5nIHdlIHdhbnQgdG8gc3BsaXRcclxuICAgKiBAcGFyYW0gam9pbiAtIHdoZXRoZXIgb3Igbm90IHRvIGpvaW5nIHRoZSBzcGxpdCBpbnRvIG9uZSBzdHJpbmcsIHNlcGVyYXRlZCBieSBhIHNwYWNlXHJcbiAgICogQHJldHVybnMgc3RyaW5nL3N0cmluZ1tdXHJcbiAgICovXHJcbiAgc3BsaXRTdHJpbmdPbkNhcGl0YWxzKFxyXG4gICAgcmF3U3RyaW5nOiBzdHJpbmcsXHJcbiAgICBqb2luOiBib29sZWFuID0gZmFsc2VcclxuICApOiBzdHJpbmcgfCBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBzcGxpdFN0cmluZyA9IHJhd1N0cmluZy5zcGxpdCgvKD89W0EtWl0pLyk7XHJcblxyXG4gICAgaWYgKGpvaW4pIHtcclxuICAgICAgcmV0dXJuIHNwbGl0U3RyaW5nLmpvaW4oJyAnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3BsaXRTdHJpbmc7XHJcbiAgfVxyXG59XHJcbiJdfQ==
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