@sabstravtech/obtservices 0.2.2505201645 → 0.2.2506041247

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +1 -0
  2. package/base/lib/vendor/classes/management-info-and-valid.d.ts +2 -0
  3. package/base/lib/vendor/classes/user-favourite.enum.d.ts +1 -0
  4. package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +1 -0
  5. package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +2 -0
  6. package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +2 -1
  7. package/base/lib/vendor/interfaces/hotel-stars-to-hide.interface.d.ts +7 -0
  8. package/base/lib/vendor/types/types.d.ts +5 -1
  9. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  10. package/bundles/sabstravtech-obtservices-base.umd.js +285 -190
  11. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  12. package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +4 -3
  13. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +36 -9
  14. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +58 -26
  15. package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +4 -3
  16. package/esm2015/base/lib/vendor/classes/helpers.js +5 -5
  17. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +22 -31
  18. package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +17 -7
  19. package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +2 -1
  20. package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
  21. package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
  22. package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
  23. package/esm2015/base/lib/vendor/interfaces/hotel-stars-to-hide.interface.js +1 -1
  24. package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +5 -3
  25. package/esm2015/base/lib/vendor/services/logon.service.js +6 -3
  26. package/esm2015/base/lib/vendor/services/search.service.js +25 -14
  27. package/esm2015/base/lib/vendor/types/types.js +10 -2
  28. package/fesm2015/sabstravtech-obtservices-base.js +179 -93
  29. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  30. package/package.json +1 -1
@@ -10,6 +10,7 @@ import { TimeWindow } from './flight-enterprise-search';
10
10
  import { ModalTypes } from './modal-types.enum';
11
11
  import { take } from 'rxjs/operators';
12
12
  import { AirToEuro } from '../data/air-to-euro';
13
+ import { UserFavorurite } from './user-favourite.enum';
13
14
  const DEFAULT_FILTERS = Object.freeze({
14
15
  stops: {},
15
16
  totalStops: {},
@@ -239,8 +240,10 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
239
240
  });
240
241
  }
241
242
  userService.changeUser.subscribe((user) => {
243
+ var _a;
242
244
  this.timeCriteriaOptions.next([TimeWindow.Anytime, TimeWindow.Arrive, TimeWindow.Depart]); // TODO update with any UFs
243
- this.updateAvaliableClasses();
245
+ const classesToHide = (_a = this.userService.getUserFavoriteObject(UserFavorurite.eurostarSearchDefaults)) === null || _a === void 0 ? void 0 : _a.hideEurostarClasses;
246
+ this.updateAvaliableClasses(classesToHide);
244
247
  });
245
248
  this.updateTravellers();
246
249
  const results = storageService.getSessionItem(this.resultsSessionName) || {
@@ -252,7 +255,6 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
252
255
  this.fullResults = this.helpers.clone(results.results);
253
256
  this.flightsToGroup = results.groupData || {};
254
257
  this.resultQuery = results.query;
255
- const isFlightsGrouped = this.searchService.isEuroStarGrouped();
256
258
  this.results.next((results.results || []));
257
259
  const resultsClone = this.helpers.clone(results.results);
258
260
  // get around the annoying type restrictions - I KNOW JOURNEYS IS THERE I CAN SEE IT STOP TELLING ME IT ISN'T TYPESCRIPT!
@@ -843,6 +845,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
843
845
  returnObject.standardFare.unavailableMessage = hasField(journeyHash, 'unavailableMessage', '');
844
846
  returnObject.standardFare.requiresReasonKeys = hasField(journeyHash, 'requiresReasonKeys', []);
845
847
  returnObject.standardFare.requiresReasonMessages = hasField(journeyHash, 'requiresReasonMessages', []);
848
+ break;
846
849
  case 'standardPremierFare':
847
850
  returnObject.standardPremierFare.companyPreferred =
848
851
  ((_y = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _y === void 0 ? void 0 : _y.companyPreferred) ||
@@ -885,6 +888,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
885
888
  returnObject.standardPremierFare.unavailableMessage = hasField(journeyHash, 'unavailableMessage', '');
886
889
  returnObject.standardPremierFare.requiresReasonKeys = hasField(journeyHash, 'requiresReasonKeys', []);
887
890
  returnObject.standardPremierFare.requiresReasonMessages = hasField(journeyHash, 'requiresReasonMessages', []);
891
+ break;
888
892
  case 'businessPremierFare':
889
893
  returnObject.businessPremierFare.companyPreferred =
890
894
  ((_19 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _19 === void 0 ? void 0 : _19.companyPreferred) ||
@@ -1052,13 +1056,13 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
1052
1056
  }
1053
1057
  startRecentSearch(recentSearch) {
1054
1058
  if (recentSearch.searchArgs.outboundDate) {
1055
- let outboundTimeWindow = recentSearch.searchArgs.outboundDepartureTimeWindow
1059
+ const outboundTimeWindow = recentSearch.searchArgs.outboundDepartureTimeWindow
1056
1060
  ? recentSearch.searchArgs.outboundDepartureTimeWindow
1057
1061
  : recentSearch.searchArgs.outboundArrivalTimeWindow;
1058
1062
  this.outBoundDate = this.convertRecentSearchDateTime(recentSearch.searchArgs.outboundDate, outboundTimeWindow);
1059
1063
  }
1060
1064
  if (recentSearch.searchArgs.returnDate) {
1061
- let returnTimeWindow = recentSearch.searchArgs.returnDepartureTimeWindow
1065
+ const returnTimeWindow = recentSearch.searchArgs.returnDepartureTimeWindow
1062
1066
  ? recentSearch.searchArgs.returnDepartureTimeWindow
1063
1067
  : recentSearch.searchArgs.returnArrivalTimeWindow;
1064
1068
  this.inboundDate = this.convertRecentSearchDateTime(recentSearch.searchArgs.returnDate, returnTimeWindow);
@@ -1077,7 +1081,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
1077
1081
  convertRecentSearchDateTime(date, timeWindow) {
1078
1082
  if (timeWindow) {
1079
1083
  const flightTime = timeWindow.split('-');
1080
- let timeAndDate = moment(date).add(moment.duration(this.helpers.hhmmToTime(flightTime[0])));
1084
+ const timeAndDate = moment(date).add(moment.duration(this.helpers.hhmmToTime(flightTime[0])));
1081
1085
  // add 2 hour
1082
1086
  return timeAndDate.clone().add(2, 'hour');
1083
1087
  }
@@ -1127,25 +1131,53 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
1127
1131
  this._passengers = travellers;
1128
1132
  this._isValid();
1129
1133
  }
1130
- updateAvaliableClasses() {
1131
- this.avaliableClasses.next([
1132
- {
1134
+ updateAvaliableClasses(classesToHide) {
1135
+ let allowedClasses = [{
1133
1136
  name: 'Any',
1134
1137
  type: FlightCabinClass.Any
1135
- },
1136
- {
1137
- name: 'Standard (semi flexible)',
1138
- type: FlightCabinClass.Economy
1139
- },
1140
- {
1141
- name: 'Standard premier (semi flexible)',
1142
- type: FlightCabinClass.PremiumEconomy
1143
- },
1144
- {
1145
- name: 'Business premier (fully flexible)',
1146
- type: FlightCabinClass.Business
1138
+ }];
1139
+ if (classesToHide && Object.keys(classesToHide)) {
1140
+ const { business_premier, standard, standard_premier } = classesToHide;
1141
+ if (!standard) {
1142
+ allowedClasses.push({
1143
+ name: 'Standard (semi flexible)',
1144
+ type: FlightCabinClass.Economy
1145
+ });
1146
+ }
1147
+ if (!standard_premier) {
1148
+ allowedClasses.push({
1149
+ name: 'Standard premier (semi flexible)',
1150
+ type: FlightCabinClass.PremiumEconomy
1151
+ });
1152
+ }
1153
+ if (!business_premier) {
1154
+ allowedClasses.push({
1155
+ name: 'Business premier (fully flexible)',
1156
+ type: FlightCabinClass.Business
1157
+ });
1147
1158
  }
1148
- ]);
1159
+ }
1160
+ else {
1161
+ allowedClasses = [
1162
+ {
1163
+ name: 'Any',
1164
+ type: FlightCabinClass.Any
1165
+ },
1166
+ {
1167
+ name: 'Standard (semi flexible)',
1168
+ type: FlightCabinClass.Economy
1169
+ },
1170
+ {
1171
+ name: 'Standard premier (semi flexible)',
1172
+ type: FlightCabinClass.PremiumEconomy
1173
+ },
1174
+ {
1175
+ name: 'Business premier (fully flexible)',
1176
+ type: FlightCabinClass.Business
1177
+ }
1178
+ ];
1179
+ }
1180
+ this.avaliableClasses.next(allowedClasses);
1149
1181
  }
1150
1182
  /**
1151
1183
  * @description - sort the flight results
@@ -1309,13 +1341,13 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
1309
1341
  if (searchEuroStarQuery) {
1310
1342
  if (setDateTime) {
1311
1343
  if (searchEuroStarQuery.outboundDate) {
1312
- let outboundTimeWindow = searchEuroStarQuery.outboundDepartureTimeWindow
1344
+ const outboundTimeWindow = searchEuroStarQuery.outboundDepartureTimeWindow
1313
1345
  ? searchEuroStarQuery.outboundDepartureTimeWindow
1314
1346
  : searchEuroStarQuery.outboundArrivalTimeWindow;
1315
1347
  this.outBoundDate = this.convertRecentSearchDateTime(searchEuroStarQuery.outboundDate, outboundTimeWindow);
1316
1348
  }
1317
1349
  if (searchEuroStarQuery.returnDate) {
1318
- let returnTimeWindow = searchEuroStarQuery.returnDepartureTimeWindow
1350
+ const returnTimeWindow = searchEuroStarQuery.returnDepartureTimeWindow
1319
1351
  ? searchEuroStarQuery.returnDepartureTimeWindow
1320
1352
  : searchEuroStarQuery.returnArrivalTimeWindow;
1321
1353
  this.inboundDate = this.convertRecentSearchDateTime(searchEuroStarQuery.returnDate, returnTimeWindow);
@@ -1557,7 +1589,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
1557
1589
  const inJourneyTesters = [];
1558
1590
  inJourneyTesters.push(tester(filters.classes, fieldHasValue('cabinClass')));
1559
1591
  // !- Itineraries
1560
- const outFilterItineraries = (flightItinerary, groupIndex) => {
1592
+ const outFilterItineraries = (flightItinerary) => {
1561
1593
  return (outItineraryTesters.reduce((acc, tester1) => {
1562
1594
  acc = acc && tester1(flightItinerary);
1563
1595
  return acc;
@@ -1569,7 +1601,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
1569
1601
  }, true);
1570
1602
  })));
1571
1603
  };
1572
- const inFilterItineraries = (flightItinerary, groupIndex) => {
1604
+ const inFilterItineraries = (flightItinerary) => {
1573
1605
  var _a;
1574
1606
  return (inItineraryTesters.reduce((acc, tester1) => {
1575
1607
  return acc && tester1(flightItinerary);
@@ -2304,4 +2336,4 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
2304
2336
  }
2305
2337
  EurostarEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_eurostar';
2306
2338
  EurostarEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_eurostar';
2307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL2NsYXNzZXMvZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUd6RCxPQUFPLEVBQWEsSUFBSSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUluRCxPQUFPLEVBS0wsUUFBUSxFQUNSLGdCQUFnQixFQUtoQixtQkFBbUIsRUFFbkIsV0FBVyxFQVVaLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUtMLG1CQUFtQixFQVVuQiw0QkFBNEIsRUFLNUIsY0FBYyxFQUVmLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFrQmpFLE9BQU8sRUFBa0MsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHeEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFaEQsTUFBTSxlQUFlLEdBQWtCLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbkQsS0FBSyxFQUFFLEVBQUU7SUFDVCxVQUFVLEVBQUUsRUFBRTtJQUNkLFdBQVcsRUFBRSxFQUFFO0lBQ2YsT0FBTyxFQUFFLEVBQUU7SUFDWCxRQUFRLEVBQUUsRUFBRTtJQUNaLFlBQVksRUFBRSxFQUFFO0lBQ2hCLGVBQWUsRUFBRSxFQUFFO0lBQ25CLHFCQUFxQixFQUFFLEVBQUU7SUFDekIsY0FBYyxFQUFFLEVBQUU7SUFDbEIsb0JBQW9CLEVBQUUsRUFBRTtJQUN4QixPQUFPLEVBQUUsRUFBRTtJQUNYLFNBQVMsRUFBRSxFQUFFO0lBQ2IsS0FBSyxFQUFFO1FBQ0wsR0FBRyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7UUFDNUIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7S0FDN0I7SUFDRCxRQUFRLEVBQUU7UUFDUixHQUFHLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtRQUM1QixHQUFHLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtLQUM3QjtJQUNELGNBQWMsRUFBRTtRQUNkLEdBQUcsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO1FBQzVCLEdBQUcsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO0tBQzdCO0lBQ0QsYUFBYSxFQUFFO1FBQ2IsR0FBRyxFQUFFLENBQUM7UUFDTixHQUFHLEVBQUUsRUFBRTtLQUNSO0lBQ0QsV0FBVyxFQUFFO1FBQ1gsR0FBRyxFQUFFLENBQUM7UUFDTixHQUFHLEVBQUUsRUFBRTtLQUNSO0lBQ0QsbUJBQW1CLEVBQUU7UUFDbkIsR0FBRyxFQUFFLENBQUM7UUFDTixHQUFHLEVBQUUsRUFBRTtLQUNSO0lBQ0QsaUJBQWlCLEVBQUU7UUFDakIsR0FBRyxFQUFFLENBQUM7UUFDTixHQUFHLEVBQUUsRUFBRTtLQUNSO0lBQ0QsSUFBSSxFQUFFLEVBQUU7SUFDUixZQUFZLEVBQUUsRUFBRTtJQUNoQixtQkFBbUIsRUFBRSxFQUFFO0lBQ3ZCLFlBQVksRUFBRSxFQUFFO0NBQ2pCLENBQWtCLENBQUM7QUFPcEIsTUFBTSxDQUFOLElBQVksaUJBUVg7QUFSRCxXQUFZLGlCQUFpQjtJQUMzQix3Q0FBbUIsQ0FBQTtJQUNuQix3Q0FBbUIsQ0FBQTtJQUNuQixzQ0FBaUIsQ0FBQTtJQUNqQix5Q0FBb0IsQ0FBQTtJQUNwQix1Q0FBa0IsQ0FBQTtJQUNsQixtQ0FBYyxDQUFBO0lBQ2QseUNBQW9CLENBQUE7QUFDdEIsQ0FBQyxFQVJXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFRNUI7QUFFRCxNQUFNLENBQU4sSUFBWSxVQU9YO0FBUEQsV0FBWSxVQUFVO0lBQ3BCLHlDQUEyQixDQUFBO0lBQzNCLHVEQUF5QyxDQUFBO0lBQ3pDLHVDQUF5QixDQUFBO0lBQ3pCLDZDQUErQixDQUFBO0lBQy9CLGlEQUFtQyxDQUFBO0lBQ25DLDJDQUE2QixDQUFBO0FBQy9CLENBQUMsRUFQVyxVQUFVLEtBQVYsVUFBVSxRQU9yQjtBQUVELE1BQU0sQ0FBTixJQUFZLFVBR1g7QUFIRCxXQUFZLFVBQVU7SUFDcEIsbUNBQXFCLENBQUE7SUFDckIsaUNBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUhXLFVBQVUsS0FBVixVQUFVLFFBR3JCO0FBRUQsTUFBTSxDQUFOLElBQVksU0FPWDtBQVBELFdBQVksU0FBUztJQUNuQixrQ0FBcUIsQ0FBQTtJQUNyQixvREFBdUMsQ0FBQTtJQUN2Qyw4Q0FBaUMsQ0FBQTtJQUNqQyw0Q0FBK0IsQ0FBQTtJQUMvQixnQ0FBbUIsQ0FBQTtJQUNuQiwwQ0FBNkIsQ0FBQTtBQUMvQixDQUFDLEVBUFcsU0FBUyxLQUFULFNBQVMsUUFPcEI7QUF3QkQsTUFBTSxPQUFPLHdCQUlYLFNBQVEsb0JBQXVGO0lBa2YvRixZQUNVLGVBQStDLEVBQ3ZELE9BQTJCLEVBQzNCLFdBQWlDLEVBQ3pCLGFBQStDLEVBQ3ZELGNBQWtDLEVBQ2xDLGFBQStDLEVBQ3ZDLFlBQW9DLEVBQ3BDLGdCQUF1RDtRQUUvRCxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFUbkQsb0JBQWUsR0FBZixlQUFlLENBQWdDO1FBRy9DLGtCQUFhLEdBQWIsYUFBYSxDQUFrQztRQUcvQyxpQkFBWSxHQUFaLFlBQVksQ0FBd0I7UUFDcEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF1QztRQXBmMUQsU0FBSSxHQUFnQixXQUFXLENBQUMsUUFBUSxDQUFDO1FBRWhELHFCQUFnQixHQUFvQyxJQUFJLGVBQWUsQ0FBaUIsRUFBRSxDQUFDLENBQUM7UUFDNUYsd0JBQW1CLEdBQWtDLElBQUksZUFBZSxDQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLG9CQUFlLEdBQXNDLElBQUksZUFBZSxDQUFtQixFQUFFLENBQUMsQ0FBQztRQUV2RixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFHbEMsZUFBVSxHQUF1QjtZQUN2QztnQkFDRSxLQUFLLEVBQUUsT0FBTztnQkFDZCxNQUFNLEVBQUUsVUFBVSxDQUFDLFdBQVc7Z0JBQzlCLElBQUksRUFBRSxZQUFZO2dCQUNsQixHQUFHLEVBQUUsSUFBSTtnQkFDVCxJQUFJLEVBQUUsaUJBQWlCLENBQUMsYUFBYTthQUN0QztZQUNEO2dCQUNFLEtBQUssRUFBRSxNQUFNO2dCQUNiLE1BQU0sRUFBRSxVQUFVLENBQUMsVUFBVTtnQkFDN0IsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLEdBQUcsRUFBRSxJQUFJO2dCQUNULElBQUksRUFBRSxpQkFBaUIsQ0FBQyxhQUFhO2FBQ3RDO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLG1CQUFtQjtnQkFDMUIsTUFBTSxFQUFFLFVBQVUsQ0FBQyxVQUFVO2dCQUM3QixJQUFJLEVBQUUsY0FBYztnQkFDcEIsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsSUFBSSxFQUFFLGlCQUFpQixDQUFDLFdBQVc7YUFDcEM7U0FDRixDQUFDO1FBRU0saUJBQVksR0FBdUI7WUFDekM7Z0JBQ0UsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsTUFBTSxFQUFFLFVBQVUsQ0FBQyxXQUFXO2dCQUM5QixJQUFJLEVBQUUsWUFBWTtnQkFDbEIsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsSUFBSSxFQUFFLGlCQUFpQixDQUFDLGFBQWE7YUFDdEM7WUFDRDtnQkFDRSxLQUFLLEVBQUUsTUFBTTtnQkFDYixNQUFNLEVBQUUsVUFBVSxDQUFDLFVBQVU7Z0JBQzdCLElBQUksRUFBRSxjQUFjO2dCQUNwQixHQUFHLEVBQUUsSUFBSTtnQkFDVCxJQUFJLEVBQUUsaUJBQWlCLENBQUMsYUFBYTthQUN0QztTQUNGLENBQUM7UUFFTSxrQkFBYSxHQUF1QjtZQUMxQztnQkFDRSxLQUFLLEVBQUUsZ0JBQWdCO2dCQUN2QixNQUFNLEVBQUUsVUFBVSxDQUFDLFdBQVc7Z0JBQzlCLElBQUksRUFBRSxZQUFZO2dCQUNsQixHQUFHLEVBQUUsSUFBSTtnQkFDVCxJQUFJLEVBQUUsaUJBQWlCLENBQUMsYUFBYTthQUN0QztZQUNEO2dCQUNFLEtBQUssRUFBRSxzQkFBc0I7Z0JBQzdCLE1BQU0sRUFBRSxVQUFVLENBQUMsa0JBQWtCO2dCQUNyQyxJQUFJLEVBQUUsWUFBWTtnQkFDbEIsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsSUFBSSxFQUFFLGlCQUFpQixDQUFDLGNBQWM7YUFDdkM7WUFDRDtnQkFDRSxLQUFLLEVBQUUsZUFBZTtnQkFDdEIsTUFBTSxFQUFFLFVBQVUsQ0FBQyxhQUFhO2dCQUNoQyxJQUFJLEVBQUUsWUFBWTtnQkFDbEIsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsSUFBSSxFQUFFLGlCQUFpQixDQUFDLFlBQVk7YUFDckM7WUFDRDtnQkFDRSxLQUFLLEVBQUUsc0JBQXNCO2dCQUM3QixNQUFNLEVBQUUsVUFBVSxDQUFDLGVBQWU7Z0JBQ2xDLElBQUksRUFBRSxZQUFZO2dCQUNsQixHQUFHLEVBQUUsSUFBSTtnQkFDVCxJQUFJLEVBQUUsaUJBQWlCLENBQUMsY0FBYzthQUN2QztZQUNEO2dCQUNFLEtBQUssRUFBRSw0QkFBNEI7Z0JBQ25DLE1BQU0sRUFBRSxVQUFVLENBQUMsWUFBWTtnQkFDL0IsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLEdBQUcsRUFBRSxJQUFJO2dCQUNULElBQUksRUFBRSxpQkFBaUIsQ0FBQyxRQUFRO2FBQ2pDO1NBQ0YsQ0FBQztRQUVNLG1CQUFjLEdBQW1CO1lBQ3ZDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRTtZQUNqRCxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUU7WUFDL0MsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFO1lBQzdDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRTtZQUNyRCxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRTtZQUM1RCxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFO1lBQ25FLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRTtTQUMxRCxDQUFDO1FBRUssd0JBQW1CLEdBQUc7WUFDM0IsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRTtZQUNyQixLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztZQUMzQixHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFO1NBQ3JCLENBQUM7UUFFSyx1QkFBa0IsR0FBRztZQUMxQixJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFO1lBQ3JCLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO1lBQzNCLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUU7U0FDckIsQ0FBQztRQUVLLGdCQUFXLEdBQW1CO1lBQ25DLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFO1lBQ3ZELEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFO1NBQ3pELENBQUM7UUFVUSxtQkFBYyxHQUFnQyxFQUFFLENBQUM7UUFFakQsWUFBTyxHQUFtQixJQUFJLENBQUM7UUFDekMsZUFBVSxHQUFnQixJQUFJLENBQUM7UUFDckIsdUJBQWtCLEdBQUcsd0JBQXdCLENBQUMsdUJBQXVCLENBQUM7UUFDdEUsNEJBQXVCLEdBQUcsd0JBQXdCLENBQUMsdUJBQXVCLENBQUM7UUFHN0UscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBRzFDLFlBQU8sR0FBbUMsSUFBSSxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7UUFVdkUsMEJBQXFCLEdBR3pCO1lBQ0YsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsSUFBSTtTQUNoQixDQUFDO1FBQ00sMEJBQXFCLEdBR3pCO1lBQ0YsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsSUFBSTtTQUNoQixDQUFDO1FBNFFNLHNCQUFpQixHQUF1QixFQUFFLENBQUM7UUE2N0RuRCxjQUFTLEdBQUcsQ0FBQyxHQUFXLEVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBLzJEM0UsTUFBTSxJQUFJLEdBR04sY0FBYyxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJO1lBQ3BGLFVBQVUsRUFBRSxFQUF3QjtZQUNwQyxrQkFBa0IsRUFBRSxFQUF3QjtTQUM3QyxDQUFDO1FBQ0YsOEJBQThCO1FBQzlCLDJEQUEyRDtRQUMzRCxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQ25ELElBQUksYUFBYSxDQUFDLDhCQUE4QixFQUFFLEVBQUU7WUFDbEQsYUFBYSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQXVCLEVBQUUsRUFBRTtnQkFDdkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7Z0JBQzdCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUMzRCw0REFBNEQ7Z0JBRTVELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELFdBQVcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBcUIsRUFBRSxFQUFFO1lBQ3pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQywyQkFBMkI7WUFDdEgsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixNQUFNLE9BQU8sR0FBd0IsY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSTtZQUM3RixPQUFPLEVBQUUsRUFBRTtZQUNYLFNBQVMsRUFBRSxFQUFFO1lBQ2IsT0FBTyxFQUFFLEVBQUU7WUFDWCxLQUFLLEVBQUUsRUFBbUM7U0FDM0MsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2pDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQTZCLENBQUMsQ0FBQztRQUV2RSxNQUFNLFlBQVksR0FBUSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUQseUhBQXlIO1FBQ3pILElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUN2QixNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDZixJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FDbEYsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDcEYsQ0FBQztJQXJhRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsZUFBZSxDQUFDLE1BQWU7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBaUJELElBQUksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQztJQUN6QyxDQUFDO0lBQ0QsSUFBSSxpQkFBaUI7O1FBQ25CLE9BQU8sTUFBQSxNQUFBLElBQUksQ0FBQyxxQkFBcUIsMENBQUUsSUFBSSwwQ0FBRSxLQUFLLENBQUM7SUFDakQsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixJQUFJLENBQUMsVUFBVTtZQUNiLElBQUksQ0FBQyxVQUFVO2dCQUNmLEtBQUssQ0FBQyxFQUFFLENBQUM7cUJBQ04sSUFBSSxDQUFDLENBQUMsQ0FBQztxQkFDUCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBYSxFQUFFLEVBQUU7b0JBQ3hCLE9BQU87d0JBQ0wsS0FBSyxFQUNILElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzs2QkFDbEIsUUFBUSxFQUFFOzZCQUNWLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDOzRCQUNuQixHQUFHOzRCQUNILENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7d0JBQ2hELE9BQU8sRUFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7NkJBQ2xCLFFBQVEsRUFBRTs2QkFDVixRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQzs0QkFDbkIsR0FBRzs0QkFDSCxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO3FCQUNqRCxDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQVcsaUJBQWlCLENBQUMsS0FBMkI7UUFDdEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFXLFNBQVMsQ0FBQyxLQUF5QjtRQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM3QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUNELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQVcsU0FBUyxDQUFDLEtBQXlCO1FBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBVyxTQUFTLENBQUMsS0FBeUI7UUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFXLFNBQVMsQ0FBQyxLQUF5QjtRQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM3QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUdELElBQVcsT0FBTztRQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN2RSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVcsTUFBTSxDQUFDLEtBQWE7UUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBVyxRQUFRLENBQUMsS0FBYTtRQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFXLGNBQWMsQ0FBQyxLQUFpQztRQUN6RCxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7U0FDMUI7YUFBTSxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUNyQzthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7U0FDNUI7UUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQVcsaUJBQWlCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxzQkFBc0I7UUFDL0IsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsVUFBVSxDQUFDLEtBQW9CO1FBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsVUFBVSxDQUFDLEtBQWE7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQVcsWUFBWSxDQUFDLEtBQW9CO1FBQzFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM5RCxJQUFJLENBQUMsa0JBQWtCLEdBQUc7WUFDeEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDbEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO1lBQ3hCLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFO1NBQ2xCLENBQUM7UUFFRixJQUNFLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWTtZQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQ2pFO1lBQ0EsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxVQUFVLENBQUMsS0FBb0I7UUFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxVQUFVLENBQUMsS0FBYTtRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBVyxXQUFXLENBQUMsS0FBb0I7UUFDekMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzdELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFXLGNBQWMsQ0FBQyxLQUFpQztRQUN6RCxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztTQUMvQjthQUFNLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDakMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDMUM7YUFBTTtZQUNMLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7U0FDakM7UUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLEtBQThCO1FBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxLQUE4QjtRQUNqRCxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxJQUF3QjtRQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUN4QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7SUFDeEUsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLGVBQWUsQ0FBQyxLQUFpQjtRQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxjQUFjLENBQUMsS0FBaUI7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksY0FBYyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFHRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksZ0JBQWdCLENBQUMsVUFBK0I7UUFDbEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUM7UUFDOUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxnQkFBcUM7UUFDNUQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxDQUMvQixDQUFDLGdCQUFvQyxFQUFFLElBQXVCLEVBQUUsRUFBRTtZQUNoRSxNQUFNLGlCQUFpQixHQUFHLEVBQXNCLENBQUM7WUFDakQsaUJBQWlCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQzNDLGlCQUFpQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUMzQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9ELGdCQUFnQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sZ0JBQWdCLENBQUM7UUFDMUIsQ0FBQyxFQUNELEVBQXdCLENBQ3pCLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztJQUNYLElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLEtBQWU7UUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxLQUFjO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUkscUJBQXFCLENBQUMsS0FBYztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztJQUNoRCxDQUFDO0lBcUVTLGNBQWMsQ0FBQyxRQUE2QjtRQUNwRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDckMsRUFBRSxFQUNGO1lBQ0UsbUJBQW1CLEVBQUUsRUFBRTtZQUN2QixzQkFBc0IsRUFBRSxFQUFFO1lBQzFCLGlCQUFpQixFQUFFLEVBQUU7U0FDdEIsRUFDRCxRQUFRLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUNqQyxDQUFDO1FBQ0YsMENBQTBDO1FBQzFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxLQUFLLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUNsRixDQUFDO1FBQ0YsSUFBSSxxQkFBcUIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLEVBQUU7WUFDbkUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUM5RCxDQUFDLEdBQW9CLEVBQUUsTUFBdUIsRUFBRSxLQUFhLEVBQW1CLEVBQUU7Z0JBQ2hGLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7b0JBQ2pDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FDM0MsTUFBTSxDQUFDLGVBQWUsRUFDdEIsTUFBTSxDQUFDLEtBQUssRUFDWixNQUFNLENBQUMsV0FBVyxFQUNsQixLQUFLLENBQ04sQ0FBQztvQkFDRixVQUFVLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7b0JBQ3BELFVBQVUsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztvQkFDMUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO29CQUN0QyxVQUFVLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7b0JBQ2hDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQkFFbkUsc0NBQXNDO29CQUN0QyxJQUNFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLENBQUMsSUFBa0IsRUFBRSxFQUFFLENBQ3JCLElBQUksQ0FBQyxhQUFhLEtBQUssVUFBVSxDQUFDLGFBQWE7d0JBQy9DLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLFVBQVUsQ0FDNUMsRUFDRDt3QkFDQSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDL0I7aUJBQ0Y7Z0JBRUQsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTtvQkFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUMzQyxNQUFNLENBQUMsY0FBYyxFQUNyQixNQUFNLENBQUMsS0FBSyxFQUNaLE1BQU0sQ0FBQyxXQUFXLEVBQ2xCLEtBQUssQ0FDTixDQUFDO29CQUNGLFVBQVUsQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztvQkFDcEQsVUFBVSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO29CQUMxQyxVQUFVLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7b0JBQ3RDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFDaEMsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO29CQUVsRSxzQ0FBc0M7b0JBQ3RDLElBQ0UsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDZixDQUFDLElBQWtCLEVBQUUsRUFBRSxDQUNyQixJQUFJLENBQUMsYUFBYSxLQUFLLFVBQVUsQ0FBQyxhQUFhO3dCQUMvQyxJQUFJLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxVQUFVLENBQzVDLEVBQ0Q7d0JBQ0EsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQzlCO2lCQUNGO2dCQUNELE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQyxFQUNELEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFxQixDQUNqRCxDQUFDO1lBQ0YsVUFBVSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqRixVQUFVLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRS9FLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNyQjthQUFNO1lBQ0wsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNyRixPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDOUM7SUFDSCxDQUFDO0lBQ0QsVUFBVSxDQUFDLEdBQW1CLEVBQUUsR0FBaUI7UUFDL0MsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3JCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDZjthQUFNO1lBQ0wscUNBQXFDO1lBQ3JDLFFBQVEsR0FBRyxDQUFDLFVBQVUsRUFBRTtnQkFDdEIsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7Z0JBQzlCLEtBQUssZ0JBQWdCLENBQUMsYUFBYSxDQUFDO2dCQUNwQyxLQUFLLGdCQUFnQixDQUFDLGlCQUFpQjtvQkFDckMsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7b0JBQ2pELE1BQU07Z0JBQ1IsS0FBSyxTQUFTO29CQUNaLGdCQUFnQixDQUFDLG1CQUFtQixHQUFHLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDL0QsTUFBTTtnQkFDUixLQUFLLGdCQUFnQixDQUFDLFFBQVE7b0JBQzVCLGdCQUFnQixDQUFDLG1CQUFtQixHQUFHLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDL0QsTUFBTTtnQkFDUjtvQkFDRSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDbEQsTUFBTTthQUNUO1NBQ0Y7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxxQkFBcUIsQ0FDbkIsT0FBd0IsRUFDeEIsS0FBc0IsRUFDdEIsV0FBbUIsRUFDbkIsS0FBYTs7UUFFYixJQUFJLFlBQVksR0FBaUI7WUFDL0IsaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLGtCQUFrQixFQUFFLEVBQUU7WUFDdEIsb0JBQW9CLEVBQUUsRUFBRTtZQUN4QixXQUFXLEVBQUUsSUFBSTtZQUNqQixhQUFhLEVBQUUsSUFBSTtZQUNuQixRQUFRLEVBQUUsSUFBSTtZQUNkLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFVBQVUsRUFBRSxDQUFDO1lBQ2IsZUFBZSxFQUFFLENBQUM7WUFDbEIsUUFBUSxFQUFFLElBQUk7WUFDZCxLQUFLLEVBQUUsSUFBSTtZQUNYLEdBQUcsRUFBRSxJQUFJO1lBQ1QsVUFBVSxFQUFFLElBQUk7WUFDaEIsbUJBQW1CLEVBQUU7Z0JBQ25CLEtBQUssRUFBRSxJQUFJO2dCQUNYLElBQUksRUFBRSxJQUFJO2dCQUNWLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixLQUFLLEVBQUUsR0FBRztnQkFDVixRQUFRLEVBQUUsS0FBSztnQkFDZixRQUFRLEVBQUUsS0FBSztnQkFDZixrQkFBa0IsRUFBRSxFQUFFO2dCQUN0QixTQUFTLEVBQUUsS0FBSztnQkFDaEIsaUJBQWlCLEVBQUUsRUFBRTtnQkFDckIsZ0JBQWdCLEVBQUUsS0FBSztnQkFDdkIsdUJBQXVCLEVBQUUsRUFBRTtnQkFDM0IsZUFBZSxFQUFFLEtBQUs7Z0JBQ3RCLHNCQUFzQixFQUFFLEVBQUU7Z0JBQzFCLFlBQVksRUFBRSxLQUFLO2dCQUNuQixtQkFBbUIsRUFBRSxFQUFFO2dCQUN2QixtQkFBbUIsRUFBRSxFQUFFO2dCQUN2QixXQUFXLEVBQUUsS0FBSztnQkFDbEIsa0JBQWtCLEVBQUUsRUFBRTtnQkFDdEIsc0JBQXNCLEVBQUUsRUFBRTtnQkFDMUIsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLFdBQVcsRUFBRSxFQUFFO2FBQ2hCO1lBQ0QsWUFBWSxFQUFFO2dCQUNaLEtBQUssRUFBRSxJQUFJO2dCQUNYLElBQUksRUFBRSxJQUFJO2dCQUNWLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixLQUFLLEVBQUUsR0FBRztnQkFDVixRQUFRLEVBQUUsS0FBSztnQkFDZixRQUFRLEVBQUUsS0FBSztnQkFDZixrQkFBa0IsRUFBRSxFQUFFO2dCQUN0QixTQUFTLEVBQUUsS0FBSztnQkFDaEIsaUJBQWlCLEVBQUUsRUFBRTtnQkFDckIsZ0JBQWdCLEVBQUUsS0FBSztnQkFDdkIsdUJBQXVCLEVBQUUsRUFBRTtnQkFDM0IsZUFBZSxFQUFFLEtBQUs7Z0JBQ3RCLHNCQUFzQixFQUFFLEVBQUU7Z0JBQzFCLFlBQVksRUFBRSxLQUFLO2dCQUNuQixtQkFBbUIsRUFBRSxFQUFFO2dCQUN2QixtQkFBbUIsRUFBRSxFQUFFO2dCQUN2QixXQUFXLEVBQUUsS0FBSztnQkFDbEIsa0JBQWtCLEVBQUUsRUFBRTtnQkFDdEIsc0JBQXNCLEVBQUUsRUFBRTtnQkFDMUIsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLFdBQVcsRUFBRSxFQUFFO2FBQ2hCO1lBQ0QsbUJBQW1CLEVBQUU7Z0JBQ25CLEtBQUssRUFBRSxJQUFJO2dCQUNYLElBQUksRUFBRSxJQUFJO2dCQUNWLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixLQUFLLEVBQUUsR0FBRztnQkFDVixRQUFRLEVBQUUsS0FBSztnQkFDZixRQUFRLEVBQUUsS0FBSztnQkFDZixrQkFBa0IsRUFBRSxFQUFFO2dCQUN0QixTQUFTLEVBQUUsS0FBSztnQkFDaEIsaUJBQWlCLEVBQUUsRUFBRTtnQkFDckIsZ0JBQWdCLEVBQUUsS0FBSztnQkFDdkIsdUJBQXVCLEVBQUUsRUFBRTtnQkFDM0IsZUFBZSxFQUFFLEtBQUs7Z0JBQ3RCLHNCQUFzQixFQUFFLEVBQUU7Z0JBQzFCLFlBQVksRUFBRSxLQUFLO2dCQUNuQixtQkFBbUIsRUFBRSxFQUFFO2dCQUN2QixtQkFBbUIsRUFBRSxFQUFFO2dCQUN2QixXQUFXLEVBQUUsS0FBSztnQkFDbEIsa0JBQWtCLEVBQUUsRUFBRTtnQkFDdEIsc0JBQXNCLEVBQUUsRUFBRTtnQkFDMUIsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLFdBQVcsRUFBRSxFQUFFO2FBQ2hCO1NBQ0YsQ0FBQztRQUNGLHlEQUF5RDtRQUN6RCxZQUFZLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO1FBQ3hFLFlBQVksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1FBQzFELFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FDcEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDbEUsQ0FBQztRQUNGLFlBQVksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUNsRCxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQzNELE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLFdBQVcsS0FBSyxJQUFJLENBQzFFLENBQUM7UUFDRixZQUFZLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FDcEQsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFDckMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsS0FBSyxJQUFJLENBQ3BELENBQUM7UUFDRixZQUFZLENBQUMsa0JBQWtCO1lBQzdCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLFdBQVcsQ0FBQztRQUNuRSxZQUFZLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztRQUUvRSwrQ0FBK0M7UUFDL0MsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckYsTUFBTSxlQUFlLEdBQUksTUFBTSxDQUFDLE1BQUEsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLDBDQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4RSxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkUsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsTUFBQSxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsMENBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVFLFlBQVksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xJLFlBQVksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXZILFlBQVksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFxQixFQUFFLEVBQUU7WUFDeEMsWUFBWSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1lBQzVDLDBCQUEwQjtZQUMxQixpREFBaUQ7WUFDakQsb0NBQW9DO1lBQ3BDLHFDQUFxQztZQUNyQyxRQUFRLE1BQU0sQ0FBQyxVQUFVLEVBQUU7Z0JBQ3pCLEtBQUssZ0JBQWdCLENBQUMsWUFBWSxDQUFDO2dCQUNuQyxLQUFLLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztnQkFDcEMsS0FBSyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDeEMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO29CQUMzQixZQUFZLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0JBQzdDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSTt3QkFDN0QsQ0FBQyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7d0JBQy9DLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNiLFlBQVksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7b0JBQzlDLFlBQVksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7b0JBQ3BELFlBQVksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7b0JBQ3BELFlBQVksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDM0MsWUFBWSxDQUFDLFlBQVksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO29CQUNwRCxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO29CQUMzRSxNQUFNO2dCQUNSLEtBQUssU0FBUztvQkFDWixZQUFZLENBQUMsbUJBQW1CLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztvQkFDcEQsWUFBWSxDQUFDLG1CQUFtQixDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsbUJBQW1CLENBQUMsSUFBSTt3QkFDM0UsQ0FBQyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzt3QkFDdEQsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2IsWUFBWSxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO29CQUNyRCxZQUFZLENBQUMsbUJBQW1CLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7b0JBQzNELFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztvQkFDM0QsWUFBWSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQ2xELFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO29CQUMzRCxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixDQUFDLENBQUM7b0JBRWxGLE1BQU07Z0JBQ1IsS0FBSyxnQkFBZ0IsQ0FBQyxRQUFRO29CQUM1QixZQUFZLENBQUMsbUJBQW1CLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztvQkFDcEQsWUFBWSxDQUFDLG1CQUFtQixDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsbUJBQW1CLENBQUMsSUFBSTt3QkFDM0UsQ0FBQyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzt3QkFDdEQsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2IsWUFBWSxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO29CQUNyRCxZQUFZLENBQUMsbUJBQW1CLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7b0JBQzNELFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztvQkFDM0QsWUFBWSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQ2xELFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO29CQUMzRCxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixDQUFDLENBQUM7b0JBQ2xGLE1BQU07Z0JBQ1I7b0JBQ0UsT0FBTyxDQUFDLElBQUksQ0FBQywrQkFBK0IsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDcEU7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCx3RUFBd0U7SUFDaEUsY0FBYyxDQUFDLFVBQWtCLEVBQUUsRUFBVztRQUNwRCxNQUFNLFlBQVksR0FBRyxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVDLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUMxQywwQkFBMEI7WUFDMUIsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckMsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUVELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLFdBQVcsQ0FDakIsWUFBMEIsRUFDMUIsV0FBbUIsRUFDbkIsUUFBZ0I7O1FBRWhCLE1BQU0sbUJBQW1CLEdBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFBLElBQUksQ0FBQyxtQkFBbUIsMENBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTlGLE1BQU0sUUFBUSxHQUFHLENBQUksV0FBbUIsRUFBRSxLQUFhLEVBQUUsR0FBTSxFQUFLLEVBQUU7WUFDcEUsT0FBTyxDQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDcEQscUJBQXFCO2dCQUNyQixXQUFXO2dCQUNYLEtBQUs7YUFDTixDQUFDO2dCQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtvQkFDcEQsbUJBQW1CO29CQUNuQixXQUFXO29CQUNYLEtBQUs7aUJBQ04sQ0FBQztnQkFDRixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdkUsR0FBRyxDQUNKLENBQUM7UUFDSixDQUFDLENBQUM7UUFDRixRQUFRLFFBQVEsRUFBRTtZQUNoQixLQUFLLGNBQWM7Z0JBQ2pCLFlBQVksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCO29CQUN4QyxDQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQywwQ0FBRSxnQkFBZ0I7eUJBQzFFLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQywwQ0FBRSxnQkFBZ0IsQ0FBQTt3QkFDeEUsS0FBSyxDQUFDO2dCQUVSLFlBQVksQ0FBQyxZQUFZLENBQUMsdUJBQXVCO29CQUMvQyxDQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQywwQ0FBRSx1QkFBdUI7eUJBQ2pGLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQywwQ0FBRSx1QkFBdUIsQ0FBQTt3QkFDL0UsRUFBRSxDQUFDO2dCQUNMLFlBQVksQ0FBQyxZQUFZLENBQUMsZUFBZTtvQkFDdkMsQ0FBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsMENBQUUsZUFBZTt5QkFDekUsTUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLDBDQUFFLGVBQWUsQ0FBQTt3QkFDdkUsS0FBSyxDQUFDO2dCQUVSLFlBQVksQ0FBQyxZQUFZLENBQUMsc0JBQXNCO29CQUM5QyxDQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQywwQ0FBRSxzQkFBc0I7eUJBQ2hGLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQywwQ0FBRSxzQkFBc0IsQ0FBQTt3QkFDOUUsRUFBRSxDQUFDO2dCQUNMLFlBQVksQ0FBQyxZQUFZLENBQUMsWUFBWTtvQkFDcEMsQ0FBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsMENBQUUsWUFBWTt5QkFDdEUsTUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLDBDQUFFLFlBQVksQ0FBQTt3QkFDcEUsS0FBSyxDQUFDO2dCQUVSLFlBQVksQ0FBQyxZQUFZLENBQUMsbUJBQW1CO29CQUMzQyxDQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQywwQ0FBRSxtQkFBbUI7eUJBQzdFLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQywwQ0FBRSxtQkFBbUIsQ0FBQTt3QkFDM0UsRUFBRSxDQUFDO2dCQUNMLFlBQVksQ0FBQyxZQUFZLENBQUMsU0FBUztvQkFDakMsQ0FBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsMENBQUUsZ0JBQWdCO3lCQUMxRSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsMENBQUUsZ0JBQWdCLENBQUE7eUJBQ3hFLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQywwQ0FBRSxlQUFlLENBQUE7eUJBQ3pFLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQywwQ0FBRSxlQUFlLENBQUE7eUJBQ3ZFLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQywwQ0FBRSxZQUFZLENBQUE7eUJBQ3RFLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQywwQ0FBRSxZQUFZLENBQUEsQ0FBQztnQkFFdkUsWUFBWSxDQUFDLFlBQVksQ0FBQyxtQkFBbUI7b0JBQzNDLENBQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLDBDQUFFLG1CQUFtQjt5QkFDN0UsTUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLDBDQUFFLG1CQUFtQixDQUFBO3dCQUMzRSxFQUFFLENBQUM7Z0JBRUwsWUFBWSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLEdBQUcsTUFBSyxNQUFBLElBQUksQ0FBQyxtQkFBbUIsMENBQUUsR0FBRyxDQUFBLENBQUM7Z0JBQ3hGLFlBQVksQ0FBQyxZQUFZLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUVwRixZQUFZLENBQUMsWUFBWSxDQUFDLGtCQUFrQixHQUFHLFFBQVEsQ0FDckQsV0FBVyxFQUNYLG9CQUFvQixFQUNwQixFQUFFLENBQ0gsQ0FBQztnQkFDRixZQUFZLENBQUMsWUFBWSxDQUFDLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQy9GLFlBQVksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLEdBQUcsUUFBUSxDQUN6RCxXQUFXLEVBQ1gsd0JBQXdCLEVBQ3hCLEVBQUUsQ0FDSCxDQUFDO1lBRUosS0FBSyxxQkFBcUI7Z0JBQ3hCLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0I7b0JBQy9DLENBQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLDBDQUFFLGdCQUFnQjt5QkFDMUUsTUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLDBDQUFFLGdCQUFnQixDQUFBO3dCQUN4RSxLQUFLLENBQUM7Z0JBRVIsWUFBWSxDQUFDLG1CQUFtQixDQUFDLHVCQUF1QjtvQkFDdEQsQ0FBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsMENBQUUsdUJBQXVCO3lCQUNqRixNQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsMENBQUUsdUJBQXVCLENBQUE7d0JBQy9FLEVBQUUsQ0FBQztnQkFDTCxZQUFZLENBQUMsbUJBQW1CLENBQUMsZUFBZTtvQkFDOUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsMENBQUUsZUFBZTt5QkFDekUsTUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLDBDQUFFLGVBQWUsQ0FBQTt3QkFDdkUsS0FBSyxDQUFDO2dCQUVSLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxzQkFBc0I7b0JBQ3JELENBQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLDBDQUFFLHNCQUFzQjt5QkFDaEYsTUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLDBDQUFFLHNCQUFzQixDQUFBO3dCQUM5RSxFQUFFLENBQUM7Z0JBQ0wsWUFBWSxDQUFDLG1CQUFtQixDQUFDLFlBQVk7b0JBQzNDLENBQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLDBDQUFFLFlBQVk7eUJBQ3RFLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQywwQ0FBRSxZQUFZLENBQUE7d0JBQ3BFLEtBQUssQ0FBQztnQkFFUixZQUFZLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CO29CQUNsRCxDQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQywwQ0FBRSxtQkFBbUI7eUJBQzdFLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQywwQ0FBRSxtQkFBbUIsQ0FBQTt3QkFDM0UsRUFBRSxDQUFDO2dCQUNMLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTO29CQUN4QyxDQUFBLE9BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyw0Q0FBRSxnQkFBZ0I7eUJBQzFFLE9BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyw0Q0FBRSxnQkFBZ0IsQ0FBQTt5QkFDeEUsT0FBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLDRDQUFFLGVBQWUsQ0FBQTt5QkFDekUsT0FBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLDRDQUFFLGVBQWUsQ0FBQTt5QkFDdkUsT0FBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLDRDQUFFLFlBQVksQ0FBQTt5QkFDdEUsT0FBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLDRDQUFFLFlBQVksQ0FBQSxDQUFDO2dCQUV2RSxZQUFZLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CO29CQUNsRCxDQUFBLE9BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyw0Q0FBRSxtQkFBbUI7eUJBQzdFLE9BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyw0Q0FBRSxtQkFBbUIsQ0FBQTt3QkFDM0UsRUFBRSxDQUFDO2dCQUVMLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRO29CQUN2QyxZQUFZLENBQUMsR0FBRyxNQUFLLE9BQUEsSUFBSSxDQUFDLG1CQUFtQiw0Q0FBRSxHQUFHLENBQUEsQ0FBQztnQkFDckQsWUFBWSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFM0YsWUFBWSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixHQUFHLFFBQVEsQ0FDNUQsV0FBVyxFQUNYLG9CQUFvQixFQUNwQixFQUFFLENBQ0gsQ0FBQztnQkFDRixZQUFZLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxDQUM1RCxXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLEVBQUUsQ0FDSCxDQUFDO2dCQUNGLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxzQkFBc0IsR0FBRyxRQUFRLENBQ2hFLFdBQVcsRUFDWCx3QkFBd0IsRUFDeEIsRUFBRSxDQUNILENBQUM7WUFDSixLQUFLLHFCQUFxQjtnQkFDeEIsWUFBWSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQjtvQkFDL0MsQ0FBQSxPQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsNENBQUUsZ0JBQWdCO3lCQUMxRSxPQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsNENBQUUsZ0JBQWdCLENBQUE7d0JBQ3hFLEtBQUssQ0FBQztnQkFFUixZQUFZLENBQUMsbUJBQW1CLENBQUMsdUJBQXVCO29CQUN0RCxDQUFBLE9BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyw0Q0FBRSx1QkFBdUI7eUJBQ2pGLE9BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyw0Q0FBRSx1QkFBdUIsQ0FBQTt3QkFDL0UsRUFBRSxDQUFDO2dCQUNMLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlO29CQUM5QyxDQUFBLE9BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyw0Q0FBRSxlQUFlO3lCQUN6RSxPQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsNENBQUUsZUFBZSxDQUFBO3dCQUN2RSxLQUFLLENBQUM7Z0JBRVIsWUFBWSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQjtvQkFDckQsQ0FBQSxPQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsNENBQUUsc0JBQXNCO3lCQUNoRixPQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsNENBQUUsc0JBQXNCLENBQUE7d0JBQzlFLEVBQUUsQ0FBQztnQkFDTCxZQUFZLENBQUMsbUJBQW1CLENBQUMsWUFBWTtvQkFDM0MsQ0FBQSxPQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsNENBQUUsWUFBWTt5QkFDdEUsT0FBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLDRDQUFFLFlBQVksQ0FBQTt3QkFDcEUsS0FBSyxDQUFDO2dCQUVSLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUI7b0JBQ2xELENBQUEsT0FBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLDRDQUFFLG1CQUFtQjt5QkFDN0UsT0FBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLDRDQUFFLG1CQUFtQixDQUFBO3dCQUMzRSxFQUFFLENBQUM7Z0JBQ0wsWUFBWSxDQUFDLG1CQUFtQixDQUFDLFNBQVM7b0JBQ3hDLENBQUEsT0FBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLDRDQUFFLGdCQUFnQjt5QkFDMUUsT0FBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLDRDQUFFLGdCQUFnQixDQUFBO3lCQUN4RSxPQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsNENBQUUsZUFBZSxDQUFBO3lCQUN6RSxPQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsNENBQUUsZUFBZSxDQUFBO3lCQUN2RSxPQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsNENBQUUsWUFBWSxDQUFBO3lCQUN0RSxPQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsNENBQUUsWUFBWSxDQUFBLENBQUM7Z0JBRXZFLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUI7b0JBQ2xELENBQUEsT0FBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLDRDQUFFLG1CQUFtQjt5QkFDN0UsT0FBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLDRDQUFFLG1CQUFtQixDQUFBO3dCQUMzRSxFQUFFLENBQUM7Z0JBRUwsWUFBWSxDQUFDLG1CQUFtQixDQUFDLFFBQVE7b0JBQ3ZDLFlBQVksQ0FBQyxHQUFHLE1BQUssT0FBQSxJQUFJLENBQUMsbUJBQW1CLDRDQUFFLEdBQUcsQ0FBQSxDQUFDO2dCQUNyRCxZQUFZLENBQUMsbUJBQW1CLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUUzRixZQUFZLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxDQUM1RCxXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLEVBQUUsQ0FDSCxDQUFDO2dCQUNGLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLENBQzVELFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsRUFBRSxDQUNILENBQUM7Z0JBQ0YsWUFBWSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixHQUFHLFFBQVEsQ0FDaEUsV0FBVyxFQUNYLHdCQUF3QixFQUN4QixFQUFFLENBQ0gsQ0FBQztTQUNMO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVTLFVBQVUsQ0FBQyxlQUF3QixJQUFJO1FBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUM5RCxJQUFJLFlBQVksRUFBRTtZQUNoQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVPLFFBQVE7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxzQkFBc0IsRUFBRTtZQUNsRixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0Isa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtTQUM1QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG9DQUFvQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUM3QixJQUFJLENBQUMsb0JBQW9CLENBQUMscUNBQXFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDeEU7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHVDQUF1QyxDQUFDLENBQUM7U0FDcEU7UUFFRCxJQUNFLElBQUksQ0FBQyxjQUFjO1lBQ25CLElBQUksQ0FBQyxtQkFBbUI7WUFDeEIsSUFBSSxDQUFDLG1CQUFtQixLQUFLLElBQUksQ0FBQyxjQUFjLEVBQ2hEO1lBQ0EsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG1EQUFtRCxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3RGO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLHlDQUF5QztZQUN6QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUM5RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsOENBQThDLENBQUMsQ0FBQzthQUMzRTtZQUNELDJDQUEyQztZQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsbUpBQW1KLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDOUo7U0FDRjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRTtZQUNsQyxLQUFLLGdCQUFnQixDQUFDLEdBQUc7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsS0FBSyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7WUFDbkUsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDOUIsS0FBSyxnQkFBZ0IsQ0FBQyxjQUFjO2dCQUNsQyxPQUFPLENBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsS0FBSyxnQkFBZ0IsQ0FBQyxRQUFRO29CQUM5RCxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLEdBQUcsQ0FDMUQsQ0FBQztZQUNKLEtBQUssZ0JBQWdCLENBQUMsUUFBUTtnQkFDNUIsT0FBTyxDQUFDLENBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO29CQUM3RCxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLGNBQWM7b0JBQ3BFLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsR0FBRyxDQUMxRCxDQUFDO1lBQ0o7Z0JBQ0UsT0FBTyxJQUFJLENBQUM7U0FDZjtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDdEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsd0JBQXdCLENBQUMsc0JBQXNCLEVBQUU7Z0JBQ2xGLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDM0Isa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjthQUM1QyxDQUFDLENBQUM7WUFDSCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUV0RSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNqRjthQUFNO1lBQ0wsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFvQztRQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBb0M7O1FBQ3ZELE1BQU0saUJBQWlCLEdBQXdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1RSxPQUFPO1lBQ0wsV0FBVyxFQUFFLFdBQVcsQ0FBQyxRQUFRO1lBQ2pDLFVBQVUsRUFBRSxpQkFBaUI7WUFDN0IsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO1lBQ3RDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLDBDQUFFLEVBQUUsQ0FBQztTQUNyRixDQUFDO0lBQ0osQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQW9DO1FBQzNELE1BQU0sV0FBVyxHQUF3QixLQUFLLENBQUM7UUFDL0MsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLFdBQVcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUNsRDtRQUNELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixXQUFXLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7U0FDbEQ7UUFDRCxXQUFXLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUYsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLFdBQVcsQ0FBQyxvQkFBb0I7Z0JBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCO29CQUM3RCxDQUFDLENBQUMsV0FBVyxDQUFDLHNCQUFzQjtvQkFDcEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDbEU7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsbUJBQW1CLENBQUMsU0FBMkI7UUFDN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUM1QyxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RixPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsWUFBMEI7UUFDMUMsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRTtZQUN4QyxJQUFJLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsMkJBQTJCO2dCQUMxRSxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQywyQkFBMkI7Z0JBQ3JELENBQUMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDO1lBQ3RELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUNsRCxZQUFZLENBQUMsVUFBVSxDQUFDLFlBQVksRUFDcEMsa0JBQWtCLENBQ25CLENBQUM7U0FDSDtRQUVELElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUU7WUFDdEMsSUFBSSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLHlCQUF5QjtnQkFDdEUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMseUJBQXlCO2dCQUNuRCxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQztZQUNwRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FDakQsWUFBWSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQ2xDLGdCQUFnQixDQUNqQixDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsUUFBdUIsRUFBRSxNQUFrQjtRQUN6RSxPQUFPLE1BQU0sS0FBSyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM1RixDQUFDO0lBRU8scUJBQXFCLENBQUMsUUFBdUIsRUFBRSxNQUFrQjtRQUN2RSxJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ2hDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsMkJBQTJCLENBQUMsSUFBWSxFQUFFLFVBQW1CO1FBQzNELElBQUksVUFBVSxFQUFFO1lBQ2QsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVGLGFBQWE7WUFDYixPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzNDO2FBQU07WUFDTCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FDN0IsTUFBTSxDQUFDLE1BQU0sQ0FDWCxFQUFFLEVBQ0Y7WUFDRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbEMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtZQUM1QyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7WUFDdEUsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQ2hDO1lBQ0QseUJBQXlCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUNuRCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQ2hDO1NBQ0YsRUFDRDtZQUNFLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM1QixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDekIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNwRixjQUFjLEVBQUUsSUFBSTtZQUNwQixjQUFjLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjO1lBQzlDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCO1lBQzVELGlCQUFpQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBMkIsRUFBRSxFQUFFLENBQ3ZGLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksRUFBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNwQztZQUNELFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVE7WUFDbEMsV0FBVyxFQUFFLElBQUk7U0FDbEIsRUFDRCxJQUFJLENBQUMsUUFBUTtZQUNYLENBQUMsQ0FBQztnQkFDRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7Z0JBQ25FLHlCQUF5QixFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUMvQjtnQkFDRCx1QkFBdUIsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQ2pELElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FDL0I7Z0JBQ0QsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0I7b0JBQ2hELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3BDLENBQUMsQ0FBQyxJQUFJO2FBQ1Q7WUFDSCxDQUFDLENBQUMsRUFBRSxDQUNQLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxnQkFBZ0I7O1FBQ3RCLE1BQU0sVUFBVSxHQUE0QixFQUFFLENBQUM7UUFHL0MsTUFBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFFbkMsTUFBTSxtQkFBbUIsR0FBMEI7Z0JBQ2pELElBQUksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLO2dCQUM5SSxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUU7Z0JBQ2hCLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSzthQUN2QixDQUFBO1lBQ0QsVUFBVSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUN6QjtnQkFDRSxJQUFJLEVBQUUsS0FBSztnQkFDWCxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsR0FBRzthQUMzQjtZQUNEO2dCQUNFLElBQUksRUFBRSwwQkFBMEI7Z0JBQ2hDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPO2FBQy9CO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGtDQUFrQztnQkFDeEMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLGNBQWM7YUFDdEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsbUNBQW1DO2dCQUN6QyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTthQUNoQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxXQUFXLENBQ2hCLGVBQWtDLEVBQ2xDLEdBQVksRUFDWixZQUFnQztRQUVoQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FDOUIsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUE4QixJQUFJLENBQUMsV0FBWSxDQUM3RSxDQUFDO1FBRUYsUUFBUSxlQUFlLEVBQUU7WUFDdkIsS0FBSyxpQkFBaUIsQ0FBQyxhQUFhO2dCQUNsQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU07WUFDUixLQUFLLGlCQUFpQixDQUFDLGFBQWE7Z0JBQ2xDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDeEMsTUFBTTtZQUNSO2dCQUNFLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLGVBQWUsTUFBTSxDQUFDLENBQUM7U0FDdkU7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU0seUJBQXlCLENBQzlCLGVBQWtDLEVBQ2xDLFVBQW1CLEtBQUssRUFDeEIsWUFBZ0M7UUFFaEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFL0MsUUFBUSxlQUFlLEVBQUU7WUFDdkIsS0FBSyxpQkFBaUIsQ0FBQyxhQUFhO2dCQUNsQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMxQyxNQUFNO1lBQ1IsS0FBSyxpQkFBaUIsQ0FBQyxhQUFhO2dCQUNsQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbEQsTUFBTTtZQUNSLEtBQUssaUJBQWlCLENBQUMsV0FBVztnQkFDaEMsT0FBTyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzNELE1BQU07WUFDUixLQUFLLGlCQUFpQixDQUFDLGNBQWM7Z0JBQ25DLE9BQU8sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzlDLE1BQU07WUFDUixLQUFLLGlCQUFpQixDQUFDLFlBQVk7Z0JBQ2pDLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzVDLE1BQU07WUFDUixLQUFLLGlCQUFpQixDQUFDLGNBQWM7Z0JBQ25DLE9BQU8sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzlDLE1BQU07WUFDUixLQUFLLGlCQUFpQixDQUFDLFFBQVE7Z0JBQzdCLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNDLE1BQU07WUFDUjtnQkFDRSxPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixlQUFlLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELDRCQUE0QixDQUFDLE9BQTRCO1FBQ3ZELE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBdUMsRUFBRSxFQUFFOztZQUMvRCxNQUFNLENBQUMsU0FBUztnQkFDZCxDQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsMENBQUUsZ0JBQWdCO3FCQUNqRixNQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLDBDQUFFLGdCQUFnQixDQUFBO3FCQUMvRSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLDBDQUFFLGVBQWUsQ0FBQTtxQkFDaEYsTUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQywwQ0FBRSxlQUFlLENBQUE7cUJBQzlFLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsMENBQUUsWUFBWSxDQUFBO3FCQUM3RSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLDBDQUFFLFlBQVksQ0FBQSxDQUFDO1lBRTlFLE1BQU0sQ0FBQyxhQUFhO2dCQUNsQixNQUFNLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25GLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNELGlCQUFpQixDQUFDLE9BQTBCO1FBQzFDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLE9BQTBCO1FBQzlDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLE9BQTBCO1FBQzVDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQixPQUFPLENBQUMsQ0FBQyxxQkFBcUIsS0FBSyxDQUFDLENBQUMscUJBQXFCO2dCQUN4RCxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxxQkFBcUI7Z0JBQ25ELENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLE9BQTBCO1FBQzNDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxPQUEwQjtRQUM5QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQ2pCLENBQUMsQ0FBa0MsRUFBRSxDQUFrQyxFQUFFLEVBQUU7WUFDekUsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3JDLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUNELGdCQUFnQixDQUFDLE9BQTBCLEVBQUUsT0FBZ0I7UUFDM0QsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNCLElBQUksT0FBTyxFQUFFO2dCQUNYLE9BQU8sQ0FDTCxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDcEQsTUFBTSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FDckQsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLE9BQU8sQ0FDTCxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FDdEQsQ0FBQzthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQseUJBQXlCLENBQUMsT0FBMEIsRUFBRSxPQUFnQjtRQUNwRSxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsT0FBTyxDQUNMLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxFQUFFO29CQUNwRCxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUNyRCxDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsT0FBTyxDQUNMLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxFQUFFO29CQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUN0RCxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxVQUFVLENBQUMsT0FBMEIsRUFBRSxHQUFhO1FBQ2xELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBZSxFQUFFLENBQWUsRUFBRSxFQUFFO1lBQ2xELElBQUksR0FBRyxFQUFFO2dCQUNQLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3hFO2lCQUFNO2dCQUNMLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3hFO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUc7WUFDcEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMxQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ3pDLENBQUM7UUFDRixPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFdBQVcsQ0FBQyxPQUEwQixFQUFFLEdBQWE7UUFDbkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFlLEVBQUUsQ0FBZSxFQUFFLEVBQUU7WUFDbkQsTUFBTSxNQUFNLEdBQ1YsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDO1lBQ3hGLE1BQU0sTUFBTSxHQUNWLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQztZQUN4RixJQUFJLEdBQUcsRUFBRTtnQkFDUCxPQUFPLE1BQU0sR0FBRyxNQUFNLENBQUM7YUFDeEI7WUFDRCxPQUFPLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDekIsQ0FBQyxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUc7WUFDcEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUMzQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQzFDLENBQUM7UUFDRixPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELGlDQUFpQyxDQUFDLFVBQXNCLEVBQUUsY0FBdUIsSUFBSTtRQUNuRixNQUFNLG1CQUFtQixHQUFpQyxVQUFVLENBQUMsV0FBVyxDQUFDO1FBQ2pGLElBQUksbUJBQW1CLEVBQUU7WUFDdkIsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsSUFBSSxtQkFBbUIsQ0FBQyxZQUFZLEVBQUU7b0JBQ3BDLElBQUksa0JBQWtCLEdBQUcsbUJBQW1CLENBQUMsMkJBQTJCO3dCQUN0RSxDQUFDLENBQUMsbUJBQW1CLENBQUMsMkJBQTJCO3dCQUNqRCxDQUFDLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUM7b0JBQ2xELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUNsRCxtQkFBbUIsQ0FBQyxZQUFZLEVBQ2hDLGtCQUFrQixDQUNuQixDQUFDO2lCQUNIO2dCQUVELElBQUksbUJBQW1CLENBQUMsVUFBVSxFQUFFO29CQUNsQyxJQUFJLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLHlCQUF5Qjt3QkFDbEUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLHlCQUF5Qjt3QkFDL0MsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLHVCQUF1QixDQUFDO29CQUNoRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FDakQsbUJBQW1CLENBQUMsVUFBVSxFQUM5QixnQkFBZ0IsQ0FDakIsQ0FBQztpQkFDSDthQUNGO1lBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7WUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDNUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDOUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3pDO1FBRUQsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxhQUE4Qzs7UUFDdkUsTUFBTSxVQUFVLEdBQ2QsTUFBQSxhQUFhLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQywwQ0FBRSxXQUFXLENBQUM7UUFDakQsTUFBTSxRQUFRLEdBQTZCLE1BQUEsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsMENBQUUsV0FBVyxDQUFDO1FBQ3hGLE1BQU0sT0FBTyxHQUNYLE1BQUEsYUFBYSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQywwQ0FBRSxXQUFXLENBQUM7UUFDNUQsTUFBTSxTQUFTLEdBQStCLE1BQUEsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsMENBQUUsV0FBVyxDQUFDO1FBQzNGLE1BQU0sT0FBTyxHQUFnQyxNQUFBLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLDBDQUFFLFdBQVcsQ0FBQztRQUN6RixNQUFNLFVBQVUsR0FBZ0MsTUFBQSxhQUFhLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQywwQ0FBRSxXQUFXLENBQUM7UUFDL0YsTUFBTSxXQUFXLEdBQ2YsTUFBQSxhQUFhLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQywwQ0FBRSxXQUFXLENBQUM7UUFDbEQsSUFBSSxVQUFVLEVBQUU7WUFDZCxJQUFJO2dCQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUN2QixhQUFhLENBQUMsTUFBTSxDQUFDLFlBQXVCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzVFLG9CQUFvQixDQUNyQixDQUFDO2dCQUNGLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFDaEMsU0FBUyxDQUNWLENBQUM7Z0JBQ0osSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtvQkFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQ3RCLGFBQWEsQ0FBQyxNQUFNLENBQUMsV0FBc0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDM0Usb0JBQW9CLENBQ3JCLENBQUM7b0JBQ0YsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7d0JBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUMvQixTQUFTLENBQ1YsQ0FBQztpQkFDTDthQUNGO1lBQUMsV0FBTTtnQkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7YUFDeEU7U0FDRjthQUFNLElBQUksUUFBUSxFQUFFO1lBQ25CLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQ3ZCLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBdUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDMUUsb0JBQW9CLENBQ3JCLENBQUM7Z0JBQ0YsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUNoQyxTQUFTLENBQ1YsQ0FBQztnQkFDSixJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FDdEIsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFzQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN6RSxvQkFBb0IsQ0FDckIsQ0FBQztvQkFDRixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTt3QkFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQy9CLFNBQVMsQ0FDVixDQUFDO2lCQUNMO2FBQ0Y7WUFBQyxXQUFNO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQzthQUN0RTtTQUNGO2FBQU0sSUFBSSxPQUFPLEVBQUU7WUFDbEIsSUFBSTtnQkFDRixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FDdkIsYUFBYSxDQUFDLGtCQUFrQixDQUFDLFlBQXVCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3hGLG9CQUFvQixDQUNyQixDQUFDO2dCQUNGLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFDaEMsU0FBUyxDQUNWLENBQUM7Z0JBQ0osSUFBSSxhQUFhLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFO29CQUNoRCxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FDdEIsYUFBYSxDQUFDLGtCQUFrQixDQUFDLFdBQXNCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3ZGLG9CQUFvQixDQUNyQixDQUFDO29CQUNGLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO3dCQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFDL0IsU0FBUyxDQUNWLENBQUM7aUJBQ0w7YUFDRjtZQUFDLFdBQU07Z0JBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO2FBQ3BGO1NBQ0Y7YUFBTSxJQUFJLFNBQVMsRUFBRTtZQUNwQixJQUFJO2dCQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUN2QixhQUFhLENBQUMsS0FBSyxDQUFDLFlBQXVCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzNFLG9CQUFvQixDQUNyQixDQUFDO2dCQUNGLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFDaEMsU0FBUyxDQUNWLENBQUM7Z0JBQ0osSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtvQkFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQ3RCLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBc0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDMUUsb0JBQW9CLENBQ3JCLENBQUM7b0JBQ0YsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7d0JBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUMvQixTQUFTLENBQ1YsQ0FBQztpQkFDTDthQUNGO1lBQUMsV0FBTTtnQkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7YUFDdkU7U0FDRjthQUFNLElBQUksT0FBTyxFQUFFO1lBQ2xCLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQ3ZCLGFBQWEsQ0FBQyxHQUFHLENBQUMsWUFBdUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDekUsb0JBQW9CLENBQ3JCLENBQUM7Z0JBQ0YsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUNoQyxTQUFTLENBQ1YsQ0FBQztnQkFDSixJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFO29CQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FDdEIsYUFBYSxDQUFDLEdBQUcsQ0FBQyxXQUFzQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN4RSxvQkFBb0IsQ0FDckIsQ0FBQztvQkFDRixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTt3QkFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQy9CLFNBQVMsQ0FDVixDQUFDO2lCQUNMO2FBQ0Y7WUFBQyxXQUFNO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQzthQUNyRTtTQUNGO2FBQU0sSUFBSSxVQUFVLEVBQUU7WUFDckIsSUFBSTtnQkFDRixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FDdkIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUF1QixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUM1RSxvQkFBb0IsQ0FDckIsQ0FBQztnQkFDRixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FDNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQ2hDLFNBQVMsQ0FDVixDQUFDO2dCQUNKLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUN0QixhQUFhLENBQUMsTUFBTSxDQUFDLFdBQXNCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzNFLG9CQUFvQixDQUNyQixDQUFDO29CQUNGLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO3dCQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFDL0IsU0FBUyxDQUNWLENBQUM7aUJBQ0w7YUFDRjtZQUFDLFdBQU07Z0JBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO2FBQ3hFO1NBQ0Y7YUFBTSxJQUFJLFdBQVcsRUFBRTtZQUN0QixJQUFJO2dCQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUN2QixhQUFhLENBQUMsT0FBTyxDQUFDLFlBQXVCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzdFLG9CQUFvQixDQUNyQixDQUFDO2dCQUNGLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFDaEMsU0FBUyxDQUNWLENBQUM7Z0JBQ0osSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtvQkFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQ3RCLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBc0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDNUUsb0JBQW9CLENBQ3JCLENBQUM7b0JBQ0YsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7d0JBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUMvQixTQUFTLENBQ1YsQ0FBQztpQkFDTDthQUNGO1lBQUMsV0FBTTtnQkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7YUFDekU7U0FDRjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsTUFBdUI7UUFDckMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRWQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLGdCQUFnQixJQUFJLGdCQUFnQixDQUFDLGVBQWUsRUFBRTtZQUN4RCxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQ3ZELE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2xDLElBQUksR0FBRyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssRUFBRTt3QkFDMUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUM7cUJBQ3ZCO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNLElBQUksZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUU7WUFDaEUsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBaUIsRUFBRSxFQUFFO2dCQUM5RCxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssRUFBRTtvQkFDeEUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUMxQztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZLENBQUMsR0FBVztRQUN0QixJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDbkMsdURBQXVEO1FBQ3ZELElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUU7WUFDakIsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkI7YUFBTTtZQUNMLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxDQUFDLE9BQXNCOztRQUNqQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN2QjtRQUVELG9HQUFvRztRQUVwRyw4REFBOEQ7UUFFOUQsTUFBTSxNQUFNLEdBQUcsQ0FDYixhQUFvRCxFQUNwRCxZQUdZLEVBQ1osRUFBRTs7WUFDRixNQUFNLFFBQVEsR0FBRyxNQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLDBDQUFFLE1BQU0sQ0FDbkQsQ0FBQyxNQUFvQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUMxQyxDQUFDO1lBQ0YsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUNuQixPQUFPLENBQUMsZUFBZ0QsRUFBRSxFQUFFO29CQUMxRCxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBb0IsRUFBRSxFQUFFO3dCQUM5QyxPQUFPLFlBQVksQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNyRCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxPQUFPLENBQUMsZ0JBQWlELEVBQUUsRUFBRTtvQkFDM0QsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQyxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxDQUNwQixNQUFjLEVBQ2QsS0FBYSxFQUNvQyxFQUFFO1lBQ25ELE9BQU8sQ0FBQyxlQUFnQyxFQUFXLEVBQUU7Z0JBQ25ELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQ3JCLGVBQWUsRUFDZixHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUNwRCxDQUNGLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVkLE1BQU0sU0FBUyxHQUFXLE1BQU0sQ0FDOUIsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUNyQyxDQUFDO2dCQUNGLE9BQU8sU0FBUyxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUM7WUFDNUQsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFhLEVBQUUsZUFBZ0MsRUFBVSxFQUFFOztZQUNoRixPQUFPLEtBQUs7aUJBQ1QsT0FBTyxDQUFDLG9CQUFvQixFQUFFLG1CQUFtQixDQUFDO2lCQUNsRCxPQUFPLENBQ04sa0JBQWtCLEVBQ2xCLGtCQUFrQixHQUFHLENBQUMsQ0FBQSxNQUFBLGVBQWUsQ0FBQyxlQUFlLDBDQUFFLE1BQU0sSUFBRyxDQUFDLENBQUMsQ0FDbkU7aUJBQ0EsT0FBTyxDQUFDLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDO2lCQUNoRCxPQUFPLENBQ04saUJBQWlCLEVBQ2pCLGlCQUFpQixHQUFHLENBQUMsQ0FBQSxNQUFBLENBQUMsZUFBZSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsMENBQUUsTUFBTSxJQUFHLENBQUMsQ0FBQyxDQUN6RSxDQUFDO1FBQ04sQ0FBQyxDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUcsQ0FDaEIsTUFBYyxFQUNkLEtBQWEsRUFDb0MsRUFBRTtZQUNuRCxPQUFPLENBQUMsZUFBZ0MsRUFBVyxFQUFFO2dCQUNuRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FDakMsZUFBZSxFQUNmLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQ3BELENBQUM7Z0JBQ0YsT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQztZQUNoRCxDQUFDLENBQUM7UUFDSixDQUFDLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxDQUNwQixLQUEwQixFQUNvQyxFQUFFO1lBQ2hFLE9BQU8sQ0FBQyxNQUFxQixFQUFFLEtBQXNCLEVBQUUsRUFBRTtnQkFDdkQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDO1lBQ2pDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUVGLG1DQUFtQztRQUVuQyxNQUFNLG1CQUFtQixHQUFzRCxFQUFFLENBQUM7UUFDbEYsTUFBTSxrQkFBa0IsR0FBc0QsRUFBRSxDQUFDO1FBRWpGLG1CQUFtQixDQUFDLElBQUksQ0FDdEIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsbUNBQW1DLENBQUMsQ0FDeEUsQ0FBQztRQUNGLG1CQUFtQixDQUFDLElBQUksQ0FDdEIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsc0NBQXNDLENBQUMsQ0FDN0UsQ0FBQztRQUVGLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBRWxFLGtCQUFrQixDQUFDLElBQUksQ0FDckIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxrQ0FBa0MsQ0FBQyxDQUM3RSxDQUFDO1FBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUNyQixhQUFhLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLHFDQUFxQyxDQUFDLENBQ2xGLENBQUM7UUFFRixjQUFjO1FBQ2QsbUJBQW1CLENBQUMsSUFBSSxDQUN0QixNQUFNLENBQ0osT0FBTyxDQUFDLFlBQVksRUFDcEIsQ0FBQyxlQUE4QyxFQUFFLEtBQWEsRUFBRSxFQUFFO1lBQ2hFLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxXQUFXO2dCQUNoRCxDQUFDLENBQUMsY0FBYyxDQUFDLFdBQVc7Z0JBQzVCLENBQUMsQ0FBQyxlQUFlLENBQUMsa0JBQWtCO29CQUNwQyxDQUFDLENBQUMsY0FBYyxDQUFDLGlCQUFpQjtvQkFDbEMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7WUFDN0IsT0FBTyxjQUFjLEtBQUssS0FBSyxDQUFDO1FBQ2xDLENBQUMsQ0FDRixDQUNGLENBQUM7UUFFRixNQUFNLGlCQUFpQixHQUFzRSxFQUFFLENBQUM7UUFFaEcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0UsTUFBTSxnQkFBZ0IsR0FBc0UsRUFBRSxDQUFDO1FBRS9GLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVFLGlCQUFpQjtRQUNqQixNQUFNLG9CQUFvQixHQUFHLENBQzNCLGVBQWdDLEVBQ2hDLFVBQWtCLEVBQ1QsRUFBRTtZQUNYLE9BQU8sQ0FDTCxtQkFBbUIsQ0FBQyxNQUFNLENBQ3hCLENBQUMsR0FBWSxFQUFFLE9BQXNELEVBQUUsRUFBRTtnQkFDdkUsR0FBRyxHQUFHLEdBQUcsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3RDLE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQyxFQUNELElBQUksQ0FDTDtnQkFDRCxDQUFDLENBQUMsZUFBZSxDQUFDLGVBQWU7b0JBQy9CLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM1QyxDQUFDLGFBQTRCLEVBQVcsRUFBRTt3QkFDeEMsT0FBTyxDQUFDLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUMvQixDQUNFLEdBQVksRUFDWixPQUFzRSxFQUN0RSxFQUFFOzRCQUNGLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQzt3QkFDdkMsQ0FBQyxFQUNELElBQUksQ0FDTCxDQUFDO29CQUNKLENBQUMsQ0FDRixDQUFDLENBQ0wsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUVGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxlQUFnQyxFQUFFLFVBQWtCLEVBQVcsRUFBRTs7WUFDNUYsT0FBTyxDQUNMLGtCQUFrQixDQUFDLE1BQU0sQ0FDdkIsQ0FBQyxHQUFZLEVBQUUsT0FBc0QsRUFBRSxFQUFFO2dCQUN2RSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDekMsQ0FBQyxFQUNELElBQUksQ0FDTDtnQkFDRCxDQUFDLENBQUMsQ0FBQSxNQUFBLGVBQWUsQ0FBQyxjQUFjLDBDQUFFLE1BQU0sQ0FBQTtvQkFDdEMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUE0QixFQUFXLEVBQUU7d0JBQ3RGLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FDOUIsQ0FDRSxHQUFZLEVBQ1osT0FBc0UsRUFDdEUsRUFBRTs0QkFDRixPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7d0JBQ3ZDLENBQUMsRUFDRCxJQUFJLENBQ0wsQ0FBQztvQkFDSixDQUFDLENBQUMsQ0FBQyxDQUNOLENBQUM7UUFDSixDQUFDLENBQUM7UUFFRiw0REFBNEQ7UUFDNUQsd0VBQXdFO1FBRXhFLE1BQU0sZ0JBQWdCLEdBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5FLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEQsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkMsVUFBVSxDQUFDLFFBQVEsR0FBRyxNQUFBLFVBQVUsQ0FBQyxRQUFRLDBDQUFFLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBRXhFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakIsVUFBVSxDQUFDLFFBQVEsR0FBRyxNQUFBLFVBQVUsQ0FBQyxRQUFRLDBDQUFFLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ3hFO1lBRUQsVUFBVSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1NBQzNDO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUsscUJBQXFCLENBQ3pCLGdCQUE4QixFQUM5QixJQUFrQixFQUNsQixTQUE4Qjs7O1lBRTlCLE1BQU0sU0FBUyxHQUE0QixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN2RixNQUFNLE1BQU0sR0FBRyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUN4QyxlQUFlO1lBQ2YsSUFDRSxNQUFNO2dCQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUN0RSxTQUFTLEtBQUssbUJBQW1CLENBQUMsUUFBUSxFQUMxQztnQkFDQSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUMzQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQ3JELENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FDWixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCO29CQUNFLGVBQWU7b0JBQ2YsY0FBYyxFQUFFLEVBQUU7b0JBQ2xCLFdBQVcsRUFBRSxRQUFRO2lCQUN0QixFQUNELGdCQUFnQixDQUFDLGFBQWEsRUFDOUIsSUFBSSxFQUNKLElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxDQUFDLGtCQUFrQixFQUN2QixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO2dCQUNGLE9BQU87YUFDUjtZQUNELDZGQUE2RjtZQUM3RixJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEtBQUssa0JBQWtCLENBQUMsTUFBTSxFQUFFO2dCQUNwRixrQ0FBa0M7Z0JBQ2xDLElBQUksU0FBUyxLQUFLLG1CQUFtQixDQUFDLFFBQVEsRUFBRTtvQkFDOUMsMERBQTBEO29CQUMxRCxJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMscUJBQXFCLDBDQUFFLFNBQVMsTUFBSyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUU7d0JBQ3pFLG1FQUFtRTt3QkFDbkUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFDekIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3JFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FDcEQsQ0FBQzt3QkFDRixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUMzQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQ3JELENBQUM7d0JBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FDWixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCOzRCQUNFLGNBQWM7NEJBQ2QsZUFBZTs0QkFDZixXQUFXLEVBQUUsV0FBVzt5QkFDekIsRUFDRCxnQkFBZ0IsQ0FBQyxhQUFhLEVBQzlCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUMzQyxLQUFLLEVBQ0wsSUFBSSxDQUFDLGtCQUFrQixFQUN2QixJQUFJLENBQUMsV0FBVyxDQUVqQixDQUFDO3dCQUNGLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO3dCQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO3dCQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBRSxJQUFJLENBQUMsV0FBaUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztxQkFDMUY7eUJBQU0sSUFBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLHFCQUFxQiwwQ0FBRSxTQUFTLE1BQUssbUJBQW1CLENBQUMsUUFBUSxFQUFFO3dCQUNqRixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzt3QkFDMUIscURBQXFEO3dCQUNyRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7cUJBQ3JDO3lCQUFNO3dCQUNMLG1DQUFtQzt3QkFDbkMsSUFBSSxDQUFDLHFCQUFxQixHQUFHOzRCQUMzQixJQUFJLEVBQUUsZ0JBQWdCOzRCQUN0QixTQUFTO3lCQUNWLENBQUM7d0JBQ0YsSUFBSSxDQUFDLHFCQUFxQixHQUFHOzRCQUMzQixJQUFJLEVBQUUsSUFBSTs0QkFDVixTQUFTO3lCQUNWLENBQUM7d0JBQ0YsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDO3dCQUNuQyxnRUFBZ0U7d0JBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNkLElBQUksQ0FBQyxXQUFpQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQXVCLEVBQUUsRUFBRTs0QkFDdEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFrQixFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUNwRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7d0JBQy9DLENBQUMsQ0FBQyxDQUNILENBQUM7cUJBQ0g7aUJBQ0Y7cUJBQU0sSUFBSSxTQUFTLEtBQUssbUJBQW1CLENBQUMsT0FBTyxFQUFFO29CQUNwRCxJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMscUJBQXFCLDBDQUFFLFNBQVMsTUFBSyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUU7d0JBQzFFLElBQUksS0FBSyxDQUFDO3dCQUNWLDhHQUE4Rzt3QkFDOUcsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUU7NEJBQzlHLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzt5QkFDL0M7NkJBQU07NEJBQ0wsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7eUJBQ3BCO3dCQUNELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUN0RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQ3JELENBQUM7d0JBQ0YsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUNwRCxDQUFDO3dCQUNGLElBQUksQ0FBQyxTQUFTLENBQ1osU0FBUyxFQUNULGdCQUFnQixFQUNoQjs0QkFDRSxlQUFlOzRCQUNmLGNBQWM7NEJBQ2QsV0FBVyxFQUFFLFdBQVc7eUJBQ3pCLEVBQ0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQzdDLGdCQUFnQixDQUFDLFdBQVcsRUFDNUIsS0FBSyxFQUNMLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQzt3QkFDRixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzt3QkFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUUsSUFBSSxDQUFDLFdBQWlDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7cUJBQzFGO3lCQUFNLElBQUksQ0FBQSxNQUFBLElBQUksQ0FBQyxxQkFBcUIsMENBQUUsU0FBUyxNQUFLLG1CQUFtQixDQUFDLE9BQU8sRUFBRTt3QkFDaEYsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7d0JBRTFCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztxQkFDckM7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLHFCQUFxQixHQUFHOzRCQUMzQixJQUFJLEVBQUUsZ0JBQWdCOzRCQUN0QixTQUFTO3lCQUNWLENBQUM7d0JBQ0YsSUFBSSxDQUFDLHFCQUFxQixHQUFHOzRCQUMzQixJQUFJLEVBQUUsSUFBSTs0QkFDVixTQUFTO3lCQUNWLENBQUM7d0JBQ0YsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDO3dCQUNuQyxnRUFBZ0U7d0JBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNkLElBQUksQ0FBQyxXQUFpQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQXVCLEVBQUUsRUFBRTs0QkFDdEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFrQixFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUNsRixPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ2hELENBQUMsQ0FBQyxDQUNILENBQUM7d0JBQ0YsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7cUJBQzlCO2lCQUNGO2FBQ0Y7O0tBQ0Y7SUFFTyxxQkFBcUI7UUFDM0IsSUFDRSxDQUFDLElBQUksQ0FBQyxxQkFBcUI7WUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzNGLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQ3ZCO1lBQ0EsT0FBTztTQUNSO1FBQ0QsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FDN0MsQ0FBQyxHQUFzQixFQUFFLElBQW1CLEVBQUUsRUFBRTtZQUM5QyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMvRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBNEIsQ0FBQyxDQUFDO2FBQ3JEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQ0QsRUFBRSxDQUNILENBQUM7UUFDRixJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsQ0FBQzthQUN4RjtZQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxnQkFBZ0I7aUJBQ2xCLFFBQVEsQ0FBQztnQkFDUixzQkFBc0IsRUFBRSxJQUFJLENBQUMsbUJBQW1CO2dCQUNoRCx1QkFBdUIsRUFBRSxhQUFhO2dCQUN0QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRO2FBQ25DLENBQUM7aUJBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDYixTQUFTLENBQUMsQ0FBQyxLQUFpQyxFQUFFLEVBQUU7Z0JBQy9DLElBQUksS0FBSyxFQUFFO29CQUNULElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3JGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHO1lBQzNCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDO1FBQ0YsSUFBSSxDQUFDLHFCQUFxQixHQUFHO1lBQzNCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQXVCO1FBQ3pDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBa0IsRUFBRSxFQUFFO1lBQ3hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUNuQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUMxQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFrQixFQUFFLEVBQUU7WUFDMUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ25DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQzFDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFpQztRQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFO1lBQUUsT0FBTztRQUN0RSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUF3QixDQUFDO1FBQ2pELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUM3QixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUM1QyxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQ3BCLENBQUMsYUFBNkIsRUFBRSxNQUF1QixFQUFFLEVBQUU7WUFDekQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDakMsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLEtBQUs7Z0JBQUUsYUFBYSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDL0QsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQyxFQUNELEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLENBQzVELENBQUM7SUFDSixDQUFDO0lBRUssU0FBUyxDQUNiLFNBQWtDLEVBQ2xDLGNBQTRCLEVBQzVCLGFBQWtCLEVBQ2xCLFlBQW9CLEVBQ3BCLFdBQW1CLEVBQ25CLEtBQWEsRUFDYixrQkFBNEIsRUFDNUIsd0JBQXdCLEdBQUcsS0FBSzs7O1lBRWhDLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsR0FBRyxjQUFjLENBQUM7WUFFeEUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBRWhCLElBQUksS0FBSyxNQUFLLE1BQUEsY0FBYyxDQUFDLFlBQVksMENBQUUsS0FBSyxDQUFBLEVBQUU7Z0JBQ2hELElBQUksR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDO2FBQ3BDO1lBRUQsSUFBSSxLQUFLLE1BQUssTUFBQSxjQUFjLENBQUMsbUJBQW1CLDBDQUFFLEtBQUssQ0FBQSxFQUFFO2dCQUN2RCxJQUFJLEdBQUcsY0FBYyxDQUFDLG1CQUFtQixDQUFDO2FBQzNDO1lBRUQsSUFBSSxLQUFLLE1BQUssTUFBQSxjQUFjLENBQUMsbUJBQW1CLDBDQUFFLEtBQUssQ0FBQSxFQUFFO2dCQUN2RCxJQUFJLEdBQUcsY0FBYyxDQUFDLG1CQUFtQixDQUFDO2FBQzNDO1lBRUQsTUFBTSxPQUFPLEdBQXFDO2dCQUNoRCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRTtnQkFDcEIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixVQUFVO2dCQUNWLGVBQWU7Z0JBQ2YsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUF3QjtnQkFDeEMsTUFBTSxFQUFFLGFBQWE7Z0JBQ3JCLEtBQUs7Z0JBQ0wsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDNUIsWUFBWTtnQkFDWixXQUFXLEVBQUUsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxNQUFNO2dCQUNyQyxtQkFBbUIsRUFBZ0IsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxZQUFZO2dCQUNqRSxVQUFVLEVBQUUsa0JBQWtCO2dCQUM5Qix3QkFBd0I7YUFDekIsQ0FBQztZQUNGLElBQUksV0FBVyxFQUFFO2dCQUNmLE9BQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO2FBQ25DO1lBQ0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FDdkQsT0FBTyxFQUNQLFNBQVMsRUFDVCxJQUFJLENBQUMsYUFBYSxFQUNsQixJQUFJLENBQUMsVUFBVSxFQUNmLGtCQUFrQixDQUNuQixDQUFDO1lBQ0YsSUFBSSxZQUFZLEtBQUssNEJBQTRCLENBQUMsUUFBUSxFQUFFO2dCQUMxRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQzthQUM1QjtZQUNELE9BQU8sWUFBWSxDQUFDOztLQUNyQjtJQUVELElBQUksV0FBVztRQUNiLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7U0FDM0I7UUFDRCxNQUFNLFFBQVEsR0FBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBUyxDQUFDLFFBQTBCLENBQUM7UUFDekUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFDbkQsSUFBSSxnQkFBd0IsQ0FBQztRQUM3QixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsRUFBRTtnQkFDaEUsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7YUFDekM7WUFDRCxJQUFJLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ25ELGdCQUFnQixHQUFHLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7YUFDaEQ7WUFDRCxJQUFJLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ25ELGdCQUFnQixHQUFHLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7YUFDaEQ7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFRCxpQkFBaUIsQ0FDZixjQUE2QixFQUM3QixXQUF1QixFQUN2QixVQUFrQixFQUNsQixZQUFxQjtRQUVyQix1Q0FDSyxjQUFjLEtBQ2pCLFdBQVcsRUFBRTtnQkFDWCxXQUFXO2dCQUNYLFVBQVU7Z0JBQ1YsWUFBWTthQUNiLElBQ0Q7SUFDSixDQUFDO0lBRU8saUJBQWlCLENBQ3ZCLFlBQXdDLEVBQ3hDLE1BQWMsRUFDZCxlQUFnQyxFQUNoQyxxQkFBNkIsRUFDN0IsY0FBK0IsRUFDL0Isb0JBQTRCO1FBRTVCLElBQUksQ0FBQSxlQUFlLGFBQWYsZUFBZSx1QkFBZixlQUFlLENBQUUsTUFBTSxLQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRTtZQUMzRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekQsWUFBWSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBQ2pELFlBQVksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUM7WUFDekQsWUFBWSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUMxRCxZQUFZLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQ2xFLFlBQVksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1lBQ3RELFlBQVksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ3JELFlBQVksQ0FBQyxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQztZQUMzRCxZQUFZLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztZQUNqQyxZQUFZLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztZQUMvQyxZQUFZLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztZQUN2RCxZQUFZLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDbkQsWUFBWSxDQUFDLE9BQU8sR0FBRyxlQUFlLENBQUM7WUFDdkMsWUFBWSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQ2hFLEdBQUcsRUFDSCx1QkFBdUIsRUFDdkIsZUFBZSxDQUNoQixDQUFDO1lBRUYsWUFBWSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7U0FDL0I7UUFFRCxJQUFJLENBQUEsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLE1BQU0sS0FBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRTtZQUNoRSxZQUFZLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7WUFDekQsWUFBWSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQ2pELFlBQVksQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUMvRCxHQUFHLEVBQ0gsdUJBQXVCLEVBQ3ZCLGNBQWMsQ0FDZixDQUFDO1lBRUYsWUFBWSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRVMsa0JBQWtCLENBQUMsSUFBOEI7UUFDekQsT0FBTztZQUNMLE9BQU8sRUFBRSxFQUFFO1lBQ1gsU0FBUyxFQUFFLEVBQUU7WUFDYixPQUFPLEVBQUUsRUFBRTtZQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVztTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELHlCQUF5QixDQUFDLG9CQUF1QztRQUMvRCxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDbEMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFOztZQUNwQyxJQUFJLEdBQUcsSUFBRyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxLQUFLLDBDQUFFLEtBQUssQ0FBQSxFQUFFO2dCQUM5QixHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7YUFDMUI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELHlCQUF5QixDQUFDLG9CQUF1QztRQUMvRCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixvQkFBb0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7O1lBQ3BDLElBQUksR0FBRyxJQUFHLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEtBQUssMENBQUUsS0FBSyxDQUFBLEVBQUU7Z0JBQzlCLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzthQUMxQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsV0FBVztRQUNULE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQyxJQUFJLFNBQVMsR0FBRyxVQUFVLElBQUksQ0FBQyxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFJSywyQkFBMkIsQ0FDL0IsYUFBOEMsRUFDOUMsZUFBd0IsS0FBSyxFQUM3QixpQkFBZ0QsSUFBSTs7WUFFcEQsSUFBSSxhQUFhLENBQUMsV0FBVyxFQUFFO2dCQUM3QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDN0Q7WUFDRCxNQUFNLFNBQVMsR0FBNEIsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdkYsTUFBTSxNQUFNLEdBQUcsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDeEMsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxHQUFHLGFBQWEsQ0FBQztnQkFDdkUsTUFBTSxZQUFZLEdBQVEsTUFBTSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDckYsTUFBTSxXQUFXLEdBQVEsYUFBYSxDQUFDLGNBQWMsQ0FBQyxNQUFNO29CQUMxRCxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7b0JBQzNELENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ1QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLGFBQWEsR0FBRztvQkFDcEIsZUFBZSxFQUFFO3dCQUNmLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFxQixFQUFFLFlBQW9CLEVBQUUsRUFBRSxDQUNuRixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUNyRTtxQkFDRjtvQkFDRCxjQUFjLEVBQUU7d0JBQ2QsR0FBRyxhQUFhLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQXFCLEVBQUUsWUFBb0IsRUFBRSxFQUFFLENBQ2xGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQ3BFO3FCQUNGO29CQUNELFlBQVksRUFBRSxrQkFBa0I7b0JBQ2hDLFdBQVcsRUFBRSxRQUFRO2lCQUN0QixDQUFDO2dCQUNGLE1BQU0sT0FBTyxHQUFxQztvQkFDaEQsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO29CQUNuQixNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7b0JBQ3BCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdkIsVUFBVTtvQkFDVixlQUFlO29CQUNmLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBd0I7b0JBQ3hDLE1BQU0sRUFBRSxhQUFhO29CQUNyQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7b0JBQ2xCLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVc7b0JBQy9ELE9BQU8sRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFO29CQUM1QixZQUFZLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRTtvQkFDbkMsVUFBVSxFQUFHLGFBQWEsQ0FBQyxrQkFBa0I7aUJBQzlDLENBQUM7Z0JBQ0YsSUFBSSxXQUFXLEVBQUU7b0JBQ2YsT0FBTyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQzNDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO2lCQUN6QztnQkFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUN2RCxPQUFPLEVBQ1AsU0FBUyxFQUNULElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxVQUFVLEVBQ2YsYUFBYSxDQUFDLGtCQUFrQixFQUNoQyxLQUFLLEVBQ0wsWUFBWSxDQUNiLENBQUM7Z0JBQ0YsSUFBSSxZQUFZLEtBQUssNEJBQTRCLENBQUMsUUFBUSxFQUFFO29CQUMxRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztpQkFDNUI7Z0JBQ0QsT0FBTyxZQUFZLENBQUM7YUFDckI7WUFDRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUQsQ0FBQztLQUFBO0lBRUQsd0JBQXdCO0lBQ3hCLGVBQWUsQ0FBQyxhQUE4QztRQUM1RCxPQUFPO1lBQ0w7Z0JBQ0UsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLEtBQUssRUFBRSxFQUFFO2FBQ1Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsYUFBYTtnQkFDbkIsS0FBSyxFQUFFLEVBQUU7YUFDVjtZQUNELEFBREU7WUFFRjtnQkFDRSxJQUFJLEVBQUUsVUFBVTtnQkFDaEIsS0FBSyxFQUFFLEVBQUU7YUFDVjtZQUNEO2dCQUNFLElBQUksRUFBRSxhQUFhO2dCQUNuQixLQUFLLEVBQUUsRUFBRTthQUNWO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsS0FBSyxFQUFFLEVBQUU7YUFDVjtZQUNEO2dCQUNFLElBQUksRUFBRSxnQ0FBZ0M7Z0JBQ3RDLEtBQUssRUFBRSxFQUFFO2FBQ1Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsY0FBYztnQkFDcEIsS0FBSyxFQUFFLEVBQUU7YUFDVjtZQUNEO2dCQUNFLElBQUksRUFBRSxjQUFjO2dCQUNwQixLQUFLLEVBQUUsRUFBRTthQUNWO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLEtBQUssRUFBRSxFQUFFO2FBQ1Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsV0FBVztnQkFDakIsS0FBSyxFQUFFLEVBQUU7YUFDVjtZQUNEO2dCQUNFLElBQUksRUFBRSxjQUFjO2dCQUNwQixLQUFLLEVBQUUsRUFBRTthQUNWO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsS0FBSyxFQUFFLEVBQUU7YUFDVjtZQUNEO2dCQUNFLElBQUksRUFBRSxZQUFZO2dCQUNsQixLQUFLLEVBQUUsRUFBRTthQUNWO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsS0FBSyxFQUFFLEVBQUU7YUFDVjtZQUNEO2dCQUNFLElBQUksRUFBRSxxQkFBcUI7Z0JBQzNCLEtBQUssRUFBRSxFQUFFO2FBQ1Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixLQUFLLEVBQUUsRUFBRTthQUNWO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHdCQUF3QjtnQkFDOUIsS0FBSyxFQUFFLEVBQUU7YUFDVjtZQUNEO2dCQUNFLElBQUksRUFBRSxxQkFBcUI7Z0JBQzNCLEtBQUssRUFBRSxFQUFFO2FBQ1Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixLQUFLLEVBQUUsRUFBRTthQUNWO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsS0FBSyxFQUFFLEVBQUU7YUFDVjtZQUNEO2dCQUNFLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLEtBQUssRUFBRSxFQUFFO2FBQ1Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixLQUFLLEVBQUUsRUFBRTthQUNWO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsS0FBSyxFQUFFLEVBQUU7YUFDVjtZQUNEO2dCQUNFLElBQUksRUFBRSxjQUFjO2dCQUNwQixLQUFLLEVBQUUsRUFBRTthQUNWO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsS0FBSyxFQUFFLEVBQUU7YUFDVjtZQUNEO2dCQUNFLElBQUksRUFBRSxPQUFPO2dCQUNiLEtBQUssRUFBRSxFQUFFO2FBQ1Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsdUJBQXVCO2dCQUM3QixLQUFLLEVBQUUsRUFBRTthQUNWO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLEtBQUssRUFBRSxFQUFFO2FBQ1Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixLQUFLLEVBQUUsRUFBRTthQUNWO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsS0FBSyxFQUFFLEVBQUU7YUFDVjtZQUNEO2dCQUNFLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLEtBQUssRUFBRSxFQUFFO2FBQ1Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsdUNBQXVDO2dCQUM3QyxLQUFLLEVBQUUsRUFBRTthQUNWO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFO1lBQy9CLE1BQU0sS0FBSyxHQUFrQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkUsTUFBTSxvQkFBb0IsR0FBd0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9FLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRTtnQkFDbkIsV0FBVyxFQUFFLFdBQVcsQ0FBQyxRQUFRO2dCQUNqQyxVQUFVLEVBQUUsb0JBQW9CO2FBQ2pDLENBQUM7WUFDRixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDM0Q7SUFDSCxDQUFDO0lBQ0ssY0FBYyxDQUFDLEdBQVE7O1lBQzNCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsQ0FBQztLQUFBO0lBRUQscUJBQXFCLENBQUMsVUFBc0I7UUFDMUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkQsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQzdDLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUM5QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUN6RCxPQUFPLENBQUMsQ0FBQyxDQUF1QixFQUNoQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FDaEMsQ0FBQztRQUNGLGFBQWEsQ0FBQyxTQUFTLENBQ3JCLElBQUksQ0FBQyxFQUFFO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3BCLFVBQVUsQ0FBQyx3QkFBd0IsRUFDbkMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQ3RCO2dCQUNFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhO2dCQUM5QixFQUFFLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsa0JBQWtCO2FBQ25ELENBQ0YsQ0FBQztRQUNKLENBQUMsRUFDRCxHQUFHLENBQUMsRUFBRTtZQUNKLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNHLDRCQUE0QixDQUNoQyxXQUEwQyxFQUMxQyxrQkFBMEIsRUFDMUIsY0FBc0I7O1lBRXRCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFFNUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFaEUsTUFBTSxJQUFJLENBQUMsYUFBYTtpQkFDckIsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztpQkFDM0MsU0FBUyxFQUFFO2lCQUNYLElBQUksQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO2dCQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQztZQUVMLE1BQU0sSUFBSSxDQUFDLGFBQWE7aUJBQ3JCLHNCQUFzQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7aUJBQzNDLFNBQVMsRUFBRTtpQkFDWCxJQUFJLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtnQkFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7WUFFTCxNQUFNLElBQUksQ0FBQyxhQUFhO2lCQUNyQixzQkFBc0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7aUJBQ2hELFNBQVMsRUFBRTtpQkFDWCxJQUFJLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtnQkFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7WUFFTCxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7YUFDbkQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQzthQUNuRDtRQUNILENBQUM7S0FBQTtJQUVEOzs7O09BSUc7SUFDSCxlQUFlLENBQUMsUUFBZ0I7UUFDOUIsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFTSxZQUFZLENBQUMsV0FBbUI7O1FBQ3JDLE9BQU87WUFDTCxpQkFBaUIsRUFBRSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsaUJBQWlCLENBQUMsV0FBVyxDQUFDO1lBQzFFLG1CQUFtQixFQUFFLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7U0FDL0UsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFXLEVBQUUsV0FBb0I7O1FBQ2xELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFtQyxDQUFDO1FBQ2hFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFtQyxDQUFDO1FBQ2hFLE1BQU0sWUFBWSxHQUFHLE1BQUEsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLFdBQVcsMENBQUUsV0FBVyxFQUFFLENBQUM7UUFDaEUsTUFBTSxZQUFZLEdBQUcsTUFBQSxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsV0FBVywwQ0FBRSxXQUFXLEVBQUUsQ0FBQztRQUNoRSxJQUFJLE1BQU0sQ0FBQyxjQUFjLElBQUksV0FBVyxFQUFFO1lBQ3hDLFdBQVc7Z0JBQ1QsTUFBTSxDQUFDLGNBQWMsTUFBSyxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsT0FBTyxDQUFBO3FCQUNqRCxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQSxDQUFDO1NBQy9EO1FBRUQsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksV0FBVyxFQUFFO1lBQzFDLFdBQVc7Z0JBQ1QsTUFBTSxDQUFDLGdCQUFnQixNQUFLLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxPQUFPLENBQUE7cUJBQ25ELFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxRQUFRLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUEsQ0FBQztTQUNqRTtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCx5R0FBeUc7SUFDekcsMERBQTBEO0lBQ3BELGdCQUFnQixDQUFDLEtBQW1DLEVBQUUsY0FBdUIsS0FBSyxFQUFFLGtCQUEyQixLQUFLOzs7WUFDeEgsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDcEIsSUFBSSxLQUFLLENBQUMsMkJBQTJCLEVBQUU7b0JBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztpQkFDMUM7cUJBQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLEVBQUU7b0JBQzFDLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztpQkFDMUM7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO2lCQUMzQztnQkFFRCxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsRUFBRTtvQkFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO2lCQUN6QztxQkFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsRUFBRTtvQkFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO2lCQUN6QztxQkFBTTtvQkFDTCxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7aUJBQzFDO2FBQ0Y7WUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDckcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBcUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3RHLElBQUksZUFBZSxFQUFFO2dCQUNuQixRQUFRLE1BQUEsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsMENBQUUsVUFBVSxFQUFFO29CQUNuRSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDOUIsS0FBSyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7b0JBQ3BDLEtBQUssZ0JBQWdCLENBQUMsaUJBQWlCLENBQUM7b0JBQ3hDLEtBQUssZ0JBQWdCLENBQUMsWUFBWSxDQUFDO29CQUNuQyxLQUFLLGdCQUFnQixDQUFDLFdBQVc7d0JBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFBO3dCQUMxQyxNQUFNO29CQUNSLEtBQUssU0FBUyxDQUFDO29CQUNmLEtBQUssZ0JBQWdCLENBQUMsZUFBZSxDQUFDO29CQUN0QyxLQUFLLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztvQkFDckMsS0FBSyxnQkFBZ0IsQ0FBQyxZQUFZO3dCQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLGNBQWMsQ0FBQTt3QkFDakQsTUFBTTtvQkFDUixLQUFLLGdCQUFnQixDQUFDLFFBQVE7d0JBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFBO3dCQUMzQyxNQUFNO29CQUNSO3dCQUNFLElBQUksQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFBO3dCQUN0QyxNQUFNO2lCQUNUO2dCQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO2FBQ3pDO1lBQ0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQztZQUN6RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLFVBQVU7Z0JBQ3RDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUMzQixDQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDO1lBRTlCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWE7aUJBQ3pDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7aUJBQzNDLFNBQVMsRUFBRSxDQUFDO1lBRWYsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYTtpQkFDekMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDO2lCQUNoRCxTQUFTLEVBQUUsQ0FBQztZQUVmLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLFdBQVcsRUFBRTtvQkFDZixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUNwQzthQUNGOztLQUNGO0lBRU8saUNBQWlDLENBQUMsT0FBWTs7UUFDcEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUEyQyxFQUFFLEVBQUU7WUFDbkUsVUFBVSxHQUFHLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztRQUVILE1BQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsMENBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQTJDLEVBQUUsRUFBRTtZQUM1RSxVQUFVLEdBQUcsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLHVDQUF1QyxDQUM3QyxJQUFxQzs7UUFFckMsTUFBTSxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBRTNFLElBQUksQ0FBQyxrQkFBa0I7WUFDckIsQ0FBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLDBDQUFFLGtCQUFrQjtpQkFDakYsTUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQ0FBRSxrQkFBa0IsQ0FBQSxDQUFDO1FBRWxGLElBQUksQ0FBQyxzQkFBc0I7WUFDekIsQ0FBQSxNQUFBLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsMENBQUUsc0JBQXNCO2lCQUM3RCxNQUFBLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsMENBQUUsc0JBQXNCLENBQUE7Z0JBQzNELEVBQUUsQ0FBQztRQUVMLElBQUksQ0FBQyxzQkFBc0I7WUFDekIsQ0FBQSxNQUFBLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsMENBQUUsc0JBQXNCO2lCQUM3RCxNQUFBLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsMENBQUUsc0JBQXNCLENBQUE7Z0JBQzNELEVBQUUsQ0FBQztRQUVMLElBQUksQ0FBQyxXQUFXO1lBQ2QsQ0FBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLDBDQUFFLFdBQVc7aUJBQzFFLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsMENBQUUsV0FBVyxDQUFBLENBQUM7UUFDM0UsSUFBSSxDQUFDLGtCQUFrQjtZQUNyQixDQUFBLE1BQUEsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQ0FBRSxrQkFBa0I7aUJBQ3pELE1BQUEsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQ0FBRSxrQkFBa0IsQ0FBQTtnQkFDdkQsRUFBRSxDQUFDO1FBRUwsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQXJ5RmUsK0NBQXNCLEdBQUcsaUJBQWlCLENBQUM7QUFDM0MsZ0RBQXVCLEdBQUcsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgVHJhdmVsbGVyLCBhZ2VzIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xuaW1wb3J0IHsgRmxpZ2h0RmlsdGVycyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LWZpbHRlcnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlbGVjdEZpbHRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VsZWN0LWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMsXG4gIEJhc2tldEl0ZW0sXG4gIEN1cnJlbmN5Q29kZSxcbiAgRGVzdGluYXRpb25FbnRyeSxcbiAgRmFyZVR5cGUsXG4gIEZsaWdodENhYmluQ2xhc3MsXG4gIEZsaWdodEZhcmVUb3RhbCxcbiAgRmxpZ2h0SXRpbmVyYXJ5LFxuICBGbGlnaHRKb3VybmV5LFxuICBGbGlnaHRQYXNzZW5nZXJPYmplY3QsXG4gIEZsaWdodFBhc3NlbmdlclR5cGUsXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxuICBTZXJ2aWNlVHlwZSxcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxuICBJbnB1dEZsaWdodEpvdXJuZXksXG4gIFNlYXJjaEV1cm9zdGFyUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaFBhcmtpbmdRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoTG91bmdlc1F1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xuaW1wb3J0IHtcbiAgRXVyb3N0YXJRdW90ZVJlc3VsdCxcbiAgTmdiRGF0ZVN0cnVjdCxcbiAgT0JUQWlycG9ydERldGFpbHMsXG4gIE9CVEFpcmxpbmVzRGV0YWlscyxcbiAgRmxpZ2h0RGlyZWN0aW9uRW51bSxcbiAgR3JvdXBlZEZsaWdodHMsXG4gIFJlY2VudFNlYXJjaCxcbiAgRXVyb3N0YXJHcm91cGVkUXVvdGVSZXN1bHQsXG4gIEV1cm9zdGFyUmVzdWx0cyxcbiAgRXVyb3N0YXJJdGVtLFxuICBFdXJvc3RhckZhcmUsXG4gIEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheSxcbiAgTWluTWF4LFxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxuICBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLFxuICBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSxcbiAgUmVjb3JkUnVsZUFjdGlvbixcbiAgRXVyb3N0YXJNdWx0aSxcbiAgRXVyb3N0YXJJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgVHJhdmVsUG9saWNpZXMsXG4gIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7IEZ1bGxVc2VyRGV0YWlscywgVXNlclNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xuaW1wb3J0IHsgRXVyb3N0YXJTZWFyY2hUeXBlIH0gZnJvbSAnLi9ldXJvc3Rhci1zZWFyY2gtdHlwZS5lbnVtJztcbmltcG9ydCB7IElNdWx0aURlc3RpbmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtbXVsdGktZGVzdGluYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEJhc2VFdXJvc3RhclF1b3RlRmV0Y2hlcixcbiAgRXVyb3N0YXJRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2V1cm9zdGFyLXF1b3RlLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxuICBFdXJvc3RhclRlbXBQYXJhbXNcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHtcbiAgQXBwbHlKaXRGbGlnaHRSdWxlc1R5cGUsXG4gIEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlclxufSBmcm9tICcuLi9mZXRjaGVycy9hcHBseS1qaXQtZmxpZ2h0LXJ1bGVzJztcbmltcG9ydCB7IEFsbG93ZWRDbGFzc2VzLCBGbGlnaHRPcGVyYXRvciwgVGltZVdpbmRvdyB9IGZyb20gJy4vZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7IElFdXJvc3RhclNlYXJjaEFyZ3MgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2V1cm9zdGFyLXNlYXJjaC1hcmcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RhbC1vcGVuZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNb2RhbFR5cGVzIH0gZnJvbSAnLi9tb2RhbC10eXBlcy5lbnVtJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBaXJUb0V1cm8gfSBmcm9tICcuLi9kYXRhL2Fpci10by1ldXJvJztcblxuY29uc3QgREVGQVVMVF9GSUxURVJTOiBGbGlnaHRGaWx0ZXJzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHN0b3BzOiB7fSxcbiAgdG90YWxTdG9wczoge30sXG4gIG11c3RJbmNsdWRlOiB7fSxcbiAgY2xhc3Nlczoge30sXG4gIGFpcmxpbmVzOiB7fSxcbiAgdHJhdmVsUG9saWN5OiB7fSxcbiAgZGVwYXR1cmVBaXJwb3J0OiB7fSxcbiAgZGVwYXR1cmVSZXR1cm5BaXJwb3J0OiB7fSxcbiAgYXJyaXZhbEFpcnBvcnQ6IHt9LFxuICBhcnJpdmFsUmV0dXJuQWlycG9ydDoge30sXG4gIGJhZ2dhZ2U6IHt9LFxuICBmYXJlVHlwZXM6IHt9LFxuICBwcmljZToge1xuICAgIG1pbjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgbWF4OiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxuICB9LFxuICBkdXJhdGlvbjoge1xuICAgIG1pbjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgbWF4OiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxuICB9LFxuICByZXR1cm5EdXJhdGlvbjoge1xuICAgIG1pbjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgbWF4OiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxuICB9LFxuICBkZXBhcnR1cmVUaW1lOiB7XG4gICAgbWluOiAwLFxuICAgIG1heDogMjRcbiAgfSxcbiAgYXJyaXZhbFRpbWU6IHtcbiAgICBtaW46IDAsXG4gICAgbWF4OiAyNFxuICB9LFxuICByZXR1cm5EZXBhcnR1cmVUaW1lOiB7XG4gICAgbWluOiAwLFxuICAgIG1heDogMjRcbiAgfSxcbiAgcmV0dXJuQXJyaXZhbFRpbWU6IHtcbiAgICBtaW46IDAsXG4gICAgbWF4OiAyNFxuICB9LFxuICB2aWFzOiB7fSxcbiAgZmxpZ2h0TnVtYmVyOiAnJyxcbiAgaW5ib3VuZEZsaWdodE51bWJlcjogJycsXG4gIHByaXZhdGVGYXJlczoge31cbn0pIGFzIEZsaWdodEZpbHRlcnM7XG5cbmV4cG9ydCB0eXBlIEV1cm9zdGFyU3RhdGlvbiA9IHtcbiAgZ2F0ZXdheTogc3RyaW5nO1xuICBkZXN0aW5hdGlvbjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGVudW0gU29ydFR5cGVzRXVyb3N0YXIge1xuICBDaGVhcGVzdEZpcnN0ID0gJ0MnLFxuICBFYXJsaWVzdEZpcnN0ID0gJ0UnLFxuICBMYXRlc3RGaXJzdCA9ICdMJyxcbiAgRXhwZW5zaXZlRmlyc3QgPSAnTScsXG4gIEZhc3Rlc3RGaXJzdCA9ICdGJyxcbiAgQ28yRmlyc3QgPSAnTycsXG4gIFByZWZlcnJlZEZpcnN0ID0gJ1AnXG59XG5cbmV4cG9ydCBlbnVtIFNvcnRNZXRob2Qge1xuICBzb3J0QnlQcmljZSA9ICdzb3J0QnlQcmljZScsXG4gIHNvcnRCeUhpZ2hlc3RQcmljZSA9ICdzb3J0QnlIaWdoZXN0UHJpY2UnLFxuICBzb3J0QnlEYXRlID0gJ3NvcnRCeURhdGUnLFxuICBzb3J0QnlGYXN0ZXN0ID0gJ3NvcnRCeUZhc3Rlc3QnLFxuICBTb3J0QnlQcmVmZXJyZWQgPSAnU29ydEJ5UHJlZmVycmVkJyxcbiAgU29ydEJ5Q2FyYm9uID0gJ1NvcnRCeUNhcmJvbidcbn1cblxuZXhwb3J0IGVudW0gUmVzdWx0VHlwZSB7XG4gIE91dGJvdW5kID0gJ291dGJvdW5kJyxcbiAgSW5ib3VuZCA9ICdpbmJvdW5kJ1xufVxuXG5leHBvcnQgZW51bSBFdXJvQ2xhc3Mge1xuICBCdXNpbmVzcyA9ICdCdXNpbmVzcycsXG4gIEVjb25vbXlSZXN0cmljdGVkID0gJ0Vjb25vbXlSZXN0cmljdGVkJyxcbiAgUHJlbWl1bUVjb25vbXkgPSAnUHJlbWl1bUVjb25vbXknLFxuICBFY29ub215Tm9CYWdzID0gJ0Vjb25vbXlOb0JhZ3MnLFxuICBQcmVtaXVtID0gJ1ByZW1pdW0nLFxuICBFY29ub215RmxleGkgPSAnRWNvbm9teUZsZXhpJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRUeXBlRXVyb3N0YXIge1xuICAvKiogVGl0bGUgZGlzcGxheWVkIG9uIGRyb3Bkb3duICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBNZXRob2QgbmFtZSB1c2VkIGJ5IGNvbXBvbmVudCB0byBzb3J0IHJlc3VsdHMgKi9cbiAgbWV0aG9kOiBTb3J0TWV0aG9kO1xuICAvKiogSWNvbiBkaXNwbGF5ZWQgb24gZHJvcCBkb3duICovXG4gIGljb246IHN0cmluZztcbiAgLyoqIFNvcnRpbmcgZGlyZWN0aW9uIHRydWUgZm9yIGFzYywgZmFsc2UgZm9yIGRzYyAqL1xuICBkaXI6IGJvb2xlYW47XG4gIC8vIHRoaXMgaXMgd2hhdCB3ZSB3aWxsIHVzZSB0byBzb3J0XG4gIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyO1xufVxuXG5leHBvcnQgdHlwZSBFdXJvc3Rhckdyb3VwcyA9ICdTdGFuZGFyZCcgfCAnU3RhbmRhcmRQcmVtaWVyJyB8ICdCdXNpbmVzc1ByZW1pZXInO1xuXG5pbnRlcmZhY2UgRXVyb3N0YXJTZXNzaW9uVHlwZSB7XG4gIHJlc3VsdHM6IEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheTtcbiAgZ3JvdXBEYXRhOiB7IFtrZXk6IG51bWJlcl06IG51bWJlcltdIH07XG4gIGdyb3VwZWQ6IEdyb3VwZWRGbGlnaHRzO1xuICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XG59XG5cbmV4cG9ydCBjbGFzcyBFdXJvc3RhckVudGVycHJpc2VTZWFyY2g8XG4gICAgU0VfUSBleHRlbmRzIEV1cm9zdGFyUXVvdGVGZXRjaGVyVHlwZSxcbiAgICBBSkZfUSBleHRlbmRzIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlXG4gID5cbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxFdXJvc3RhclRlbXBQYXJhbXMsIEV1cm9zdGFyUXVvdGVSZXN1bHQsIEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheT5cbiAgaW1wbGVtZW50cyBFdXJvc3RhckVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2VcbntcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2V1cm9zdGFyJztcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3Jlc3VsdHNfZXVyb3N0YXInO1xuXG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLkV1cm9zdGFyO1xuXG4gIGF2YWxpYWJsZUNsYXNzZXM6IEJlaGF2aW9yU3ViamVjdDxBbGxvd2VkQ2xhc3Nlcz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFsbG93ZWRDbGFzc2VzPihbXSk7XG4gIHRpbWVDcml0ZXJpYU9wdGlvbnM6IEJlaGF2aW9yU3ViamVjdDxUaW1lV2luZG93W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUaW1lV2luZG93W10+KFtdKTtcbiAgZmxpZ2h0T3BlcmF0b3JzOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0T3BlcmF0b3JbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZsaWdodE9wZXJhdG9yW10+KFtdKTtcblxuICBwcml2YXRlIF9uZWdvdGlhdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX25lYXJieV9haXJwb3J0czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3RpbWVBcnJheTogVmFsdWVEaXNwbGF5W107XG4gIHByaXZhdGUgX3NvcnRBcnJheTogU29ydFR5cGVFdXJvc3RhcltdID0gW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnUHJpY2UnLFxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLnNvcnRCeVByaWNlLFxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInLFxuICAgICAgZGlyOiB0cnVlLFxuICAgICAgY29kZTogU29ydFR5cGVzRXVyb3N0YXIuQ2hlYXBlc3RGaXJzdFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdUaW1lJyxcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlEYXRlLFxuICAgICAgaWNvbjogJ2ljby1jYWxlbmRhcicsXG4gICAgICBkaXI6IHRydWUsXG4gICAgICBjb2RlOiBTb3J0VHlwZXNFdXJvc3Rhci5FYXJsaWVzdEZpcnN0XG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ1RpbWUgKERlc2NlbmRpbmcpJyxcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlEYXRlLFxuICAgICAgaWNvbjogJ2ljby1jYWxlbmRhcicsXG4gICAgICBkaXI6IHRydWUsXG4gICAgICBjb2RlOiBTb3J0VHlwZXNFdXJvc3Rhci5MYXRlc3RGaXJzdFxuICAgIH1cbiAgXTtcblxuICBwcml2YXRlIF9zb3J0QXJyYXlMdTogU29ydFR5cGVFdXJvc3RhcltdID0gW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnUHJpY2UnLFxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLnNvcnRCeVByaWNlLFxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInLFxuICAgICAgZGlyOiB0cnVlLFxuICAgICAgY29kZTogU29ydFR5cGVzRXVyb3N0YXIuQ2hlYXBlc3RGaXJzdFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdUaW1lJyxcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlEYXRlLFxuICAgICAgaWNvbjogJ2ljby1jYWxlbmRhcicsXG4gICAgICBkaXI6IHRydWUsXG4gICAgICBjb2RlOiBTb3J0VHlwZXNFdXJvc3Rhci5FYXJsaWVzdEZpcnN0XG4gICAgfVxuICBdO1xuXG4gIHByaXZhdGUgX3NvcnRBcnJheUdvMjogU29ydFR5cGVFdXJvc3RhcltdID0gW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnQ2hlYXBlc3QgRmlyc3QnLFxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLnNvcnRCeVByaWNlLFxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInLFxuICAgICAgZGlyOiB0cnVlLFxuICAgICAgY29kZTogU29ydFR5cGVzRXVyb3N0YXIuQ2hlYXBlc3RGaXJzdFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdNb3N0IEV4cGVuc2l2ZSBGaXJzdCcsXG4gICAgICBtZXRob2Q6IFNvcnRNZXRob2Quc29ydEJ5SGlnaGVzdFByaWNlLFxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInLFxuICAgICAgZGlyOiB0cnVlLFxuICAgICAgY29kZTogU29ydFR5cGVzRXVyb3N0YXIuRXhwZW5zaXZlRmlyc3RcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnRmFzdGVzdCBGaXJzdCcsXG4gICAgICBtZXRob2Q6IFNvcnRNZXRob2Quc29ydEJ5RmFzdGVzdCxcbiAgICAgIGljb246ICdpY28tZG9sbGFyJyxcbiAgICAgIGRpcjogdHJ1ZSxcbiAgICAgIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyLkZhc3Rlc3RGaXJzdFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdQcmVmZXJyZWQgRmFyZSBGaXJzdCcsXG4gICAgICBtZXRob2Q6IFNvcnRNZXRob2QuU29ydEJ5UHJlZmVycmVkLFxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInLFxuICAgICAgZGlyOiB0cnVlLFxuICAgICAgY29kZTogU29ydFR5cGVzRXVyb3N0YXIuUHJlZmVycmVkRmlyc3RcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnTG93ZXN0IENvMiBFbWlzc2lvbnMgRmlyc3QnLFxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLlNvcnRCeUNhcmJvbixcbiAgICAgIGljb246ICdpY28tZG9sbGFyJyxcbiAgICAgIGRpcjogdHJ1ZSxcbiAgICAgIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyLkNvMkZpcnN0XG4gICAgfVxuICBdO1xuXG4gIHByaXZhdGUgX2ZhcmVUeXBlQXJyYXk6IFZhbHVlRGlzcGxheVtdID0gW1xuICAgIHsgdmFsdWU6IEZhcmVUeXBlLkZsZXhpYmxlLCBkaXNwbGF5OiAnRmxleGlibGUnIH0sXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTGVpc3VyZSwgZGlzcGxheTogJ0xlaXN1cmUnIH0sXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTG93ZXN0LCBkaXNwbGF5OiAnTG93ZXN0JyB9LFxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLk5lZ290aWF0ZWQsIGRpc3BsYXk6ICdOZWdvdGlhdGVkJyB9LFxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLk5vbk5lZ290aWF0ZWQsIGRpc3BsYXk6ICdOb24tTmVnb3RpYXRlZCcgfSxcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5SZXF1ZXN0RmFyZVJ1bGVzLCBkaXNwbGF5OiAnUmVxdWVzdCBGYXJlIFJ1bGVzJyB9LFxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLlNlbGVjdEFuZFBybywgZGlzcGxheTogJ1NlbGVjdCAmIFBybycgfVxuICBdO1xuXG4gIHB1YmxpYyBtaW5pbXVtT3V0Qm91bmREYXRlID0ge1xuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcbiAgfTtcblxuICBwdWJsaWMgbWluaW11bUluQm91bmREYXRlID0ge1xuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcbiAgfTtcblxuICBwdWJsaWMgc2VhcmNoVHlwZXM6IFZhbHVlRGlzcGxheVtdID0gW1xuICAgIHsgdmFsdWU6IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm4sIGRpc3BsYXk6ICdSZXR1cm4nIH0sXG4gICAgeyB2YWx1ZTogRXVyb3N0YXJTZWFyY2hUeXBlLm9uZVdheSwgZGlzcGxheTogJ09uZS13YXknIH1cbiAgXTtcblxuICBwcml2YXRlIF9vdXREYXRlOiBOZ2JEYXRlU3RydWN0O1xuICBwcml2YXRlIF9vdXRUaW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2luRGF0ZTogTmdiRGF0ZVN0cnVjdDtcbiAgcHJpdmF0ZSBfaW5UaW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uQWlycG9ydDogYW55O1xuICBwcml2YXRlIF9vcmlnaW5BaXJwb3J0OiBhbnk7XG4gIHByaXZhdGUgX3Bhc3NlbmdlcnM6IGFueTtcbiAgcHJpdmF0ZSBncm91cGVkT2JqZWN0OiBFdXJvc3Rhckl0aW5lcmFyeVdpdGhFeHRlbnNpb25zW107XG4gIHByb3RlY3RlZCBmbGlnaHRzVG9Hcm91cDogeyBba2V5OiBudW1iZXJdOiBudW1iZXJbXSB9ID0ge307XG4gIHByb3RlY3RlZCByZXN1bHRRdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XG4gIHByb3RlY3RlZCBncm91cGVkOiBHcm91cGVkRmxpZ2h0cyA9IG51bGw7XG4gIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gbnVsbDtcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9IEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID0gRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xuXG4gIHNlbGVjdGVkR3JvdXBGbGlnaHQ6IEV1cm9zdGFySXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM7XG4gIHByaXZhdGUgX2Rpc3BsYXlBZGRIb3RlbDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9ydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2U7XG4gIG11bHRpOiBFdXJvc3Rhck11bHRpW107XG4gIGZpbHRlcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRGaWx0ZXJzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoREVGQVVMVF9GSUxURVJTKTtcblxuICBwdWJsaWMgZ2V0IGRpc3BsYXlBZGRIb3RlbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheUFkZEhvdGVsO1xuICB9XG5cbiAgcHVibGljIHNldCBkaXNwbGF5QWRkSG90ZWwobmV3VmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzcGxheUFkZEhvdGVsID0gbmV3VmFsO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZEdyb3VwRXVyb3N0YXI6IHtcbiAgICBpdGVtOiBFdXJvc3Rhckl0ZW07XG4gICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtO1xuICB9ID0ge1xuICAgIGl0ZW06IG51bGwsXG4gICAgZGlyZWN0aW9uOiBudWxsXG4gIH07XG4gIHByaXZhdGUgX3NlbGVjdGVkRXVyb3N0YXJGYXJlOiB7XG4gICAgaXRlbTogRXVyb3N0YXJGYXJlO1xuICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bTtcbiAgfSA9IHtcbiAgICBpdGVtOiBudWxsLFxuICAgIGRpcmVjdGlvbjogbnVsbFxuICB9O1xuXG4gIGdldCBzZWxlY3RlZEV1cm9zdGFyRmFyZSgpOiBFdXJvc3RhckZhcmUge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZS5pdGVtO1xuICB9XG4gIGdldCBzZWxlY3RlZEZhcmVDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZT8uaXRlbT8uY2xhc3M7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRpbWVBcnJheSgpIHtcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxuICAgICAgdGhpcy5fdGltZUFycmF5IHx8XG4gICAgICBBcnJheSg5NilcbiAgICAgICAgLmZpbGwoMClcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXG4gICAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXG4gICAgICAgICAgICBkaXNwbGF5OlxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICAgICAgICAgJzonICtcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHByZWZlcnJlZENhcnJpZXJzKCk6IE9CVEFpcmxpbmVzRGV0YWlsc1tdIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzO1xuICB9XG5cbiAgcHVibGljIHNldCBwcmVmZXJyZWRDYXJyaWVycyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzW10pIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yMSgpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF07XG4gIH1cblxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMSh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzBdID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IyKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1sxXTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3IyKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV0gPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cbiAgcHVibGljIGdldCBvcGVyYXRvcjMoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzJdO1xuICB9XG5cbiAgcHVibGljIHNldCBvcGVyYXRvcjModmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1syXSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yNCgpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM107XG4gIH1cblxuICBwdWJsaWMgc2V0IG9wZXJhdG9yNCh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzNdID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWluRGF0ZTogTmdiRGF0ZVN0cnVjdDtcbiAgcHVibGljIGdldCBtaW5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLl9taW5EYXRlIHx8IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShtb21lbnQoKSk7XG4gICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFkdWx0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xuICB9XG5cbiAgcHVibGljIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBOdW1iZXIodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xuICB9XG5cbiAgcHVibGljIGdldCBjaGlsZHJlbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XG4gIH1cblxuICBwdWJsaWMgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBOdW1iZXIodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xuICB9XG5cbiAgcHVibGljIGdldCBkZXBhcnRMb2NhdGlvbigpOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRMb2NhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZGVwYXJ0TG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmRlcGFydExvY2F0aW9uID0gdmFsdWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSAnJztcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSB2YWx1ZS5nYXRld2F5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBxdWVyeU9yaWdpbkFpcG9ydCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9vcmlnaW5BaXJwb3J0O1xuICB9XG5cbiAgcHVibGljIGdldCBxdWVyeURlc3RpbmF0aW9uQWlwb3J0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVwYXJ0RGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5fb3V0RGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZGVwYXJ0RGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xuICAgIHRoaXMuX291dERhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9vdXREYXRlLCB0aGlzLl9vdXRUaW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVwYXJ0VGltZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9vdXRUaW1lO1xuICB9XG5cbiAgcHVibGljIHNldCBkZXBhcnRUaW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9vdXRUaW1lID0gdmFsdWU7XG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5fb3V0RGF0ZSwgdGhpcy5fb3V0VGltZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG91dEJvdW5kRGF0ZSgpOiBtb21lbnQuTW9tZW50IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgb3V0Qm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgdmFsdWUgPSBtb21lbnQodmFsdWUpO1xuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUgPSB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZSA6IG51bGw7XG4gICAgdGhpcy5taW5pbXVtSW5Cb3VuZERhdGUgPSB7XG4gICAgICB5ZWFyOiB2YWx1ZS55ZWFyKCksXG4gICAgICBtb250aDogdmFsdWUubW9udGgoKSArIDEsXG4gICAgICBkYXk6IHZhbHVlLmRhdGUoKVxuICAgIH07XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlICYmXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUgJiZcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNBZnRlcih0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUpXG4gICAgKSB7XG4gICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUpLmFkZCgxLCAnZGF5Jyk7XG4gICAgfVxuICAgIHRoaXMuX291dERhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xuICAgIHRoaXMuX291dFRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJldHVybkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX2luRGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmV0dXJuRGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xuICAgIHRoaXMuX2luRGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5faW5EYXRlLCB0aGlzLl9pblRpbWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBhcnJpdmVUaW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2luVGltZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgYXJyaXZlVGltZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faW5UaW1lID0gdmFsdWU7XG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9pbkRhdGUsIHRoaXMuX2luVGltZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluYm91bmREYXRlKCk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGluYm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgdmFsdWUgPSBtb21lbnQodmFsdWUpO1xuICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcbiAgICB0aGlzLl9pbkRhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xuICAgIHRoaXMuX2luVGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRUaW1lQ29sb24odmFsdWUpO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXJyaXZlTG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYXJyaXZlTG9jYXRpb247XG4gIH1cblxuICBwdWJsaWMgc2V0IGFycml2ZUxvY2F0aW9uKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5hcnJpdmVMb2NhdGlvbiA9IHZhbHVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSAnJztcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IHZhbHVlLmdhdGV3YXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjYWJpbkNsYXNzKCk6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3M7XG4gIH1cblxuICBzZXQgY2FiaW5DbGFzcyh2YWx1ZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCByZXR1cm5DYWJpbkNsYXNzKCk6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3M7XG4gIH1cblxuICBzZXQgcmV0dXJuQ2FiaW5DbGFzcyh2YWx1ZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaG9zZW5TZWFyY2hUeXBlKCk6IEV1cm9zdGFyU2VhcmNoVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlO1xuICB9XG5cbiAgc2V0IGNob3NlblNlYXJjaFR5cGUodHlwZTogRXVyb3N0YXJTZWFyY2hUeXBlKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPSB0eXBlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBpc1JldHVybigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm47XG4gIH1cblxuICBnZXQgb3V0VGltZUNyaXRlcmlhKCk6IFRpbWVXaW5kb3cge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhO1xuICB9XG5cbiAgc2V0IG91dFRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgaW5UaW1lQ3JpdGVyaWEoKTogVGltZVdpbmRvdyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYTtcbiAgfVxuXG4gIHNldCBpblRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuICBnZXQgbWF4Q29ubmVjdGlvbnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zO1xuICB9XG5cbiAgc2V0IG1heENvbm5lY3Rpb25zKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX211bHRpRGVzdGluYXRpb246IERlc3RpbmF0aW9uRW50cnlbXSA9IFtdO1xuICBnZXQgbXVsdGlEZXN0aW5hdGlvbigpOiBJTXVsdGlEZXN0aW5hdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb247XG4gIH1cblxuICBzZXQgbXVsdGlEZXN0aW5hdGlvbih2YWx1ZUFycmF5OiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24gPSB2YWx1ZUFycmF5O1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHNldE11bHRpRGVzdGluYXRpb25RdWVyeShtdWx0aURlc3RpbmF0aW9uOiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XG4gICAgY29uc3QgbmV3TXVsdGlEZXN0aW5hdGlvbiA9IHRoaXMuaGVscGVycy5jbG9uZShtdWx0aURlc3RpbmF0aW9uKTtcbiAgICByZXR1cm4gbmV3TXVsdGlEZXN0aW5hdGlvbi5yZWR1Y2UoXG4gICAgICAoZGVzdGluYXRpb25BcnJheTogRGVzdGluYXRpb25FbnRyeVtdLCBpdGVtOiBJTXVsdGlEZXN0aW5hdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBkZXN0aW5hdGlvbk9iamVjdCA9IHt9IGFzIERlc3RpbmF0aW9uRW50cnk7XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0Lm9yaWcgPSBpdGVtLm9yaWcuZ2F0ZXdheTtcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGVzdCA9IGl0ZW0uZGVzdC5nYXRld2F5O1xuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5kYXRlID0gdGhpcy5oZWxwZXJzLmZvcm1hdElzb0RhdGUoaXRlbS5kYXRlKTtcbiAgICAgICAgZGVzdGluYXRpb25BcnJheS5wdXNoKGRlc3RpbmF0aW9uT2JqZWN0KTtcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uQXJyYXk7XG4gICAgICB9LFxuICAgICAgW10gYXMgRGVzdGluYXRpb25FbnRyeVtdXG4gICAgKTtcbiAgfVxuXG4gIC8vIGdldCBvbmx5XG4gIGdldCBzb3J0RHJvcGRvd25WYWx1ZXMoKTogU29ydFR5cGVFdXJvc3RhcltdIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydEFycmF5O1xuICB9XG5cbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlc0x1KCk6IFNvcnRUeXBlRXVyb3N0YXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRBcnJheUx1O1xuICB9XG5cbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlc0dvMigpOiBTb3J0VHlwZUV1cm9zdGFyW10ge1xuICAgIHJldHVybiB0aGlzLl9zb3J0QXJyYXlHbzI7XG4gIH1cblxuICBnZXQgZmFyZVR5cGVzVmFsdWVzKCk6IFZhbHVlRGlzcGxheVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZmFyZVR5cGVBcnJheTtcbiAgfVxuXG4gIGdldCBmYXJlVHlwZSgpOiBGYXJlVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZTtcbiAgfVxuXG4gIHNldCBmYXJlVHlwZSh2YWx1ZTogRmFyZVR5cGUpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGUgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgbmVnb3RpYXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbmVnb3RpYXRlZDtcbiAgfVxuXG4gIHNldCBuZWdvdGlhdGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbmVnb3RpYXRlZCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGluY2x1ZGVOZWFyYnlBaXJwb3J0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cztcbiAgfVxuXG4gIHNldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzID0gdmFsdWU7XG4gIH1cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBldXJvc3RhckZldGNoZXI6IEJhc2VFdXJvc3RhclF1b3RlRmV0Y2hlcjxTRV9RPixcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXG4gICAgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQmFzZU1vZGFsT3BlbmVyU2VydmljZSxcbiAgICBwcml2YXRlIGFwcGx5RmxpZ2h0UnVsZXM6IEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlcjxBSkZfUT5cbiAgKSB7XG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMsIHNlYXJjaFNlcnZpY2UsIHVzZXJTZXJ2aWNlKTtcblxuICAgIGNvbnN0IGRhdGE6IHtcbiAgICAgIHRlbXBQYXJhbXM6IEV1cm9zdGFyVGVtcFBhcmFtcztcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogRXVyb3N0YXJUZW1wUGFyYW1zO1xuICAgIH0gPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShFdXJvc3RhckVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUykgfHwge1xuICAgICAgdGVtcFBhcmFtczoge30gYXMgRXVyb3N0YXJUZW1wUGFyYW1zLFxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBFdXJvc3RhclRlbXBQYXJhbXNcbiAgICB9O1xuICAgIC8vIGRhdGEudGVtcFBhcmFtcy5hZHVsdHMgPSAxO1xuICAgIC8vIGRhdGEudGVtcFBhcmFtcy5jYWJpbkNsYXNzID0gW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teV07XG4gICAgY29uc3QgcXVlcnkgPSBzZWFyY2hTZXJ2aWNlLm1ha2VFdXJvc3RhclF1ZXJ5KGRhdGEudGVtcFBhcmFtcyk7XG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHF1ZXJ5KTtcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XG4gICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XG4gICAgICAgIGNvbnN0IHNwbGl0VHJhdmVsbGVycyA9IHRoaXMuaGVscGVycy5zZWxlY3RlZFRyYXZlbGxlcnModHJhdmVsbGVycywgU2VydmljZVR5cGUuRXVyb3N0YXIpO1xuICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgIC8vIHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzID0gc3BsaXRUcmF2ZWxsZXJzLmluZmFudHMubGVuZ3RoO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xuICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB1c2VyU2VydmljZS5jaGFuZ2VVc2VyLnN1YnNjcmliZSgodXNlcjogRnVsbFVzZXJEZXRhaWxzKSA9PiB7XG4gICAgICB0aGlzLnRpbWVDcml0ZXJpYU9wdGlvbnMubmV4dChbVGltZVdpbmRvdy5Bbnl0aW1lLCBUaW1lV2luZG93LkFycml2ZSwgVGltZVdpbmRvdy5EZXBhcnRdKTsgLy8gVE9ETyB1cGRhdGUgd2l0aCBhbnkgVUZzXG4gICAgICB0aGlzLnVwZGF0ZUF2YWxpYWJsZUNsYXNzZXMoKTtcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xuICAgIGNvbnN0IHJlc3VsdHM6IEV1cm9zdGFyU2Vzc2lvblR5cGUgPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbSh0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZSkgfHwge1xuICAgICAgcmVzdWx0czogW10sXG4gICAgICBncm91cERhdGE6IHt9LFxuICAgICAgZ3JvdXBlZDogW10sXG4gICAgICBxdWVyeToge30gYXMgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXNcbiAgICB9O1xuICAgIHRoaXMuZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0cy5yZXN1bHRzKTtcbiAgICB0aGlzLmZsaWdodHNUb0dyb3VwID0gcmVzdWx0cy5ncm91cERhdGEgfHwge307XG4gICAgdGhpcy5yZXN1bHRRdWVyeSA9IHJlc3VsdHMucXVlcnk7XG4gICAgY29uc3QgaXNGbGlnaHRzR3JvdXBlZCA9IHRoaXMuc2VhcmNoU2VydmljZS5pc0V1cm9TdGFyR3JvdXBlZCgpO1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KChyZXN1bHRzLnJlc3VsdHMgfHwgW10pIGFzIEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheSk7XG5cbiAgICBjb25zdCByZXN1bHRzQ2xvbmU6IGFueSA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzLnJlc3VsdHMpO1xuICAgIC8vIGdldCBhcm91bmQgdGhlIGFubm95aW5nIHR5cGUgcmVzdHJpY3Rpb25zIC0gSSBLTk9XIEpPVVJORVlTIElTIFRIRVJFIEkgQ0FOIFNFRSBJVCBTVE9QIFRFTExJTkcgTUUgSVQgSVNOJ1QgVFlQRVNDUklQVCFcbiAgICBpZiAocmVzdWx0c0Nsb25lLmxlbmd0aCkge1xuICAgICAgY29uc3QgcmVzdWx0c1dpdGhFeHRlbnNpb25zID0gdGhpcy5tYWRlRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMocmVzdWx0c0Nsb25lKTtcbiAgICAgIHRoaXMuZmlsdGVycy5uZXh0KFxuICAgICAgICB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhyZXN1bHRzV2l0aEV4dGVuc2lvbnMuam91cm5leXMsIERFRkFVTFRfRklMVEVSUylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICAgIHRoaXMubmVnb3RpYXRlZCA9IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSA9PT0gRmFyZVR5cGUuTmVnb3RpYXRlZCA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzUmVzdWx0cyhyZXN1bHRzMTogRXVyb3N0YXJRdW90ZVJlc3VsdCk6IEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheSB7XG4gICAgdGhpcy5yZXN1bHRRdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgam91cm5leVdoZW5TZWxlY3RlZDoge30sXG4gICAgICAgIGR1YWxTaW5nbGVXaGVuU2VsZWN0ZWQ6IHt9LFxuICAgICAgICB3aGVuU2VsZWN0ZWRBbG9uZToge31cbiAgICAgIH0sXG4gICAgICByZXN1bHRzMS5ydWxlQWN0aW9uU3VtbWFyeSB8fCB7fVxuICAgICk7XG4gICAgLy8gZGVsZXRlIHRoaXMucmVzdWx0UXVlcnlbJ3dpdGhHcm91cGVkJ107XG4gICAgY29uc3QgcmVzdWx0c1dpdGhFeHRlbnNpb25zID0gdGhpcy5tYWRlRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMocmVzdWx0czEpO1xuICAgIHRoaXMubXVsdGkgPSByZXN1bHRzV2l0aEV4dGVuc2lvbnMubXVsdGk7XG4gICAgdGhpcy5maWx0ZXJzLm5leHQoXG4gICAgICB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhyZXN1bHRzV2l0aEV4dGVuc2lvbnMuam91cm5leXMsIERFRkFVTFRfRklMVEVSUylcbiAgICApO1xuICAgIGlmIChyZXN1bHRzV2l0aEV4dGVuc2lvbnMgJiYgdGhpcy5zZWFyY2hTZXJ2aWNlLmlzRXVyb1N0YXJHcm91cGVkKCkpIHtcbiAgICAgIGNvbnN0IHJldHVybmRhdGEgPSAocmVzdWx0c1dpdGhFeHRlbnNpb25zLmpvdXJuZXlzIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAgIChhY2M6IEV1cm9zdGFyUmVzdWx0cywgcmVzdWx0OiBGbGlnaHRJdGluZXJhcnksIGluZGV4OiBudW1iZXIpOiBFdXJvc3RhclJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZXVyb1Jlc3VsdCA9IHRoaXMuZm9ybWF0RXVyb3N0YXJSZXN1bHRzKFxuICAgICAgICAgICAgICByZXN1bHQub3V0Ym91bmRGbGlnaHRzLFxuICAgICAgICAgICAgICByZXN1bHQudG90YWwsXG4gICAgICAgICAgICAgIHJlc3VsdC5qb3VybmV5SGFzaCxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlclBhc3NlbmdlciA9IHJlc3VsdC5jbzJQZXJQYXNzZW5nZXI7XG4gICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlckl0ZW0gPSByZXN1bHQuY28yUGVySXRlbTtcbiAgICAgICAgICAgIGV1cm9SZXN1bHQuc291cmNlSWQgPSByZXN1bHQuc291cmNlSWQ7XG4gICAgICAgICAgICBldXJvUmVzdWx0LnRvdGFsID0gcmVzdWx0LnRvdGFsO1xuICAgICAgICAgICAgZXVyb1Jlc3VsdC5kdXJhdGlvbiA9IHRoaXMubWluVG9Ib3VyKHJlc3VsdC5vdXRib3VuZFRvdGFsRHVyYXRpb24pO1xuXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhldXJvUmVzdWx0LmNhYmluQ2xhc3MpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhYWNjLm91dGJvdW5kLmZpbmQoXG4gICAgICAgICAgICAgICAgKGl0ZW06IEV1cm9zdGFySXRlbSkgPT5cbiAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0ZURlcGFydHVyZSA9PT0gZXVyb1Jlc3VsdC5kYXRlRGVwYXJ0dXJlICYmXG4gICAgICAgICAgICAgICAgICBpdGVtLmNhYmluQ2xhc3MgPT09IGV1cm9SZXN1bHQuY2FiaW5DbGFzc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgYWNjLm91dGJvdW5kLnB1c2goZXVyb1Jlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlc3VsdC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGV1cm9SZXN1bHQgPSB0aGlzLmZvcm1hdEV1cm9zdGFyUmVzdWx0cyhcbiAgICAgICAgICAgICAgcmVzdWx0LmluYm91bmRGbGlnaHRzLFxuICAgICAgICAgICAgICByZXN1bHQudG90YWwsXG4gICAgICAgICAgICAgIHJlc3VsdC5qb3VybmV5SGFzaCxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlclBhc3NlbmdlciA9IHJlc3VsdC5jbzJQZXJQYXNzZW5nZXI7XG4gICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlckl0ZW0gPSByZXN1bHQuY28yUGVySXRlbTtcbiAgICAgICAgICAgIGV1cm9SZXN1bHQuc291cmNlSWQgPSByZXN1bHQuc291cmNlSWQ7XG4gICAgICAgICAgICBldXJvUmVzdWx0LnRvdGFsID0gcmVzdWx0LnRvdGFsO1xuICAgICAgICAgICAgZXVyb1Jlc3VsdC5kdXJhdGlvbiA9IHRoaXMubWluVG9Ib3VyKHJlc3VsdC5pbmJvdW5kVG90YWxEdXJhdGlvbik7XG5cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGV1cm9SZXN1bHQuY2FiaW5DbGFzcyk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFhY2MuaW5ib3VuZC5maW5kKFxuICAgICAgICAgICAgICAgIChpdGVtOiBFdXJvc3Rhckl0ZW0pID0+XG4gICAgICAgICAgICAgICAgICBpdGVtLmRhdGVEZXBhcnR1cmUgPT09IGV1cm9SZXN1bHQuZGF0ZURlcGFydHVyZSAmJlxuICAgICAgICAgICAgICAgICAgaXRlbS5jYWJpbkNsYXNzID09PSBldXJvUmVzdWx0LmNhYmluQ2xhc3NcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGFjYy5pbmJvdW5kLnB1c2goZXVyb1Jlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHsgb3V0Ym91bmQ6IFtdLCBpbmJvdW5kOiBbXSB9IGFzIEV1cm9zdGFyUmVzdWx0c1xuICAgICAgKTtcbiAgICAgIHJldHVybmRhdGEub3V0Ym91bmQgPSByZXR1cm5kYXRhLm91dGJvdW5kLnJlZHVjZSh0aGlzLm1hdGNoRmFyZXMuYmluZCh0aGlzKSwgW10pO1xuICAgICAgcmV0dXJuZGF0YS5pbmJvdW5kID0gcmV0dXJuZGF0YS5pbmJvdW5kLnJlZHVjZSh0aGlzLm1hdGNoRmFyZXMuYmluZCh0aGlzKSwgW10pO1xuXG4gICAgICByZXR1cm4gW3JldHVybmRhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHRXaXRoUHJlZmVycmVkID0gdGhpcy5zZXRQcmVmZXJyZWRBbmRHcmVlbmVyQ2hvaWNlKHJlc3VsdHNXaXRoRXh0ZW5zaW9ucyk7XG4gICAgICByZXR1cm4gcmVzdWx0czEgPyBbcmVzdWx0V2l0aFByZWZlcnJlZF0gOiBbXTtcbiAgICB9XG4gIH1cbiAgbWF0Y2hGYXJlcyhhY2M6IEV1cm9zdGFySXRlbVtdLCBvdXQ6IEV1cm9zdGFySXRlbSk6IEV1cm9zdGFySXRlbVtdIHtcbiAgICBjb25zdCBtYXRjaGluZ0V1cm9zdGFyID0gYWNjLmZpbmQoaXRlbSA9PiBpdGVtLmRhdGVEZXBhcnR1cmUgPT09IG91dC5kYXRlRGVwYXJ0dXJlKTtcbiAgICBpZiAoIW1hdGNoaW5nRXVyb3N0YXIpIHtcbiAgICAgIGFjYy5wdXNoKG91dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNoZWNrIHdoYXQgbmVlZHMgYWRkaW5nIGFuZCBhZGQgaXRcbiAgICAgIHN3aXRjaCAob3V0LmNhYmluQ2xhc3MpIHtcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXk6XG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzOlxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQ6XG4gICAgICAgICAgbWF0Y2hpbmdFdXJvc3Rhci5zdGFuZGFyZEZhcmUgPSBvdXQuc3RhbmRhcmRGYXJlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQcmVtaXVtJzpcbiAgICAgICAgICBtYXRjaGluZ0V1cm9zdGFyLnN0YW5kYXJkUHJlbWllckZhcmUgPSBvdXQuc3RhbmRhcmRQcmVtaWVyRmFyZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzOlxuICAgICAgICAgIG1hdGNoaW5nRXVyb3N0YXIuYnVzaW5lc3NQcmVtaWVyRmFyZSA9IG91dC5idXNpbmVzc1ByZW1pZXJGYXJlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUubG9nKCdob3cgZGlkIEkgZ2V0IGhlcmUnLCBvdXQuY2FiaW5DbGFzcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH1cblxuICBmb3JtYXRFdXJvc3RhclJlc3VsdHMoXG4gICAgcmVzdWx0czogRmxpZ2h0Sm91cm5leVtdLFxuICAgIHRvdGFsOiBGbGlnaHRGYXJlVG90YWwsXG4gICAgam91cm5leUhhc2g6IHN0cmluZyxcbiAgICBpbmRleDogbnVtYmVyXG4gICk6IEV1cm9zdGFySXRlbSB7XG4gICAgbGV0IHJldHVybk9iamVjdDogRXVyb3N0YXJJdGVtID0ge1xuICAgICAgdGltZUFycml2YWxPZmZzZXQ6IDAsXG4gICAgICB0aW1lRGVwYXJ0dXJlT2Zmc2V0OiAwLFxuICAgICAgYXJyaXZhbENvdW50cnlDb2RlOiAnJyxcbiAgICAgIGRlcGFydHVyZUNvdW50cnlDb2RlOiAnJyxcbiAgICAgIGRhdGVBcnJpdmFsOiBudWxsLFxuICAgICAgZGF0ZURlcGFydHVyZTogbnVsbCxcbiAgICAgIGR1cmF0aW9uOiBudWxsLFxuICAgICAgdGltZUFycml2YWw6IG51bGwsXG4gICAgICB0aW1lRGVwYXJ0dXJlOiBudWxsLFxuICAgICAgY28yUGVySXRlbTogMCxcbiAgICAgIGNvMlBlclBhc3NlbmdlcjogMCxcbiAgICAgIHNvdXJjZUlkOiBudWxsLFxuICAgICAgdG90YWw6IG51bGwsXG4gICAgICB1aWQ6IG51bGwsXG4gICAgICBjYWJpbkNsYXNzOiBudWxsLFxuICAgICAgYnVzaW5lc3NQcmVtaWVyRmFyZToge1xuICAgICAgICBjbGFzczogbnVsbCxcbiAgICAgICAgZmFyZTogbnVsbCxcbiAgICAgICAgaXNEaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgcHJpY2U6IE5hTixcbiAgICAgICAgY3VycmVuY3k6ICdHQlAnLFxuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHJlcXVpcmVzUmVhc29uS2V5czogW10sXG4gICAgICAgIHByZWZlcnJlZDogZmFsc2UsXG4gICAgICAgIHByZWZlcnJlZE1lc3NhZ2VzOiAnJyxcbiAgICAgICAgY29tcGFueVByZWZlcnJlZDogZmFsc2UsXG4gICAgICAgIGNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlOiAnJyxcbiAgICAgICAgb2ZmaWNlUHJlZmVycmVkOiBmYWxzZSxcbiAgICAgICAgb2ZmaWNlUHJlZmVycmVkTWVzc2FnZTogJycsXG4gICAgICAgIHRtY1ByZWZlcnJlZDogZmFsc2UsXG4gICAgICAgIHRtY1ByZWZlcnJlZE1lc3NhZ2U6ICcnLFxuICAgICAgICB0bWNQcmVmZXJyZWRMb2dvVXJsOiAnJyxcbiAgICAgICAgdW5hdmFpbGFibGU6IGZhbHNlLFxuICAgICAgICB1bmF2YWlsYWJsZU1lc3NhZ2U6ICcnLFxuICAgICAgICByZXF1aXJlc1JlYXNvbk1lc3NhZ2VzOiBbXSxcbiAgICAgICAgY2FuU2VsZWN0OiBmYWxzZSxcbiAgICAgICAgam91cm5leUhhc2g6ICcnXG4gICAgICB9LFxuICAgICAgc3RhbmRhcmRGYXJlOiB7XG4gICAgICAgIGNsYXNzOiBudWxsLFxuICAgICAgICBmYXJlOiBudWxsLFxuICAgICAgICBpc0Rpc2FibGVkOiB0cnVlLFxuICAgICAgICBwcmljZTogTmFOLFxuICAgICAgICBjdXJyZW5jeTogJ0dCUCcsXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgcmVxdWlyZXNSZWFzb25LZXlzOiBbXSxcbiAgICAgICAgcHJlZmVycmVkOiBmYWxzZSxcbiAgICAgICAgcHJlZmVycmVkTWVzc2FnZXM6ICcnLFxuICAgICAgICBjb21wYW55UHJlZmVycmVkOiBmYWxzZSxcbiAgICAgICAgY29tcGFueVByZWZlcnJlZE1lc3NhZ2U6ICcnLFxuICAgICAgICBvZmZpY2VQcmVmZXJyZWQ6IGZhbHNlLFxuICAgICAgICBvZmZpY2VQcmVmZXJyZWRNZXNzYWdlOiAnJyxcbiAgICAgICAgdG1jUHJlZmVycmVkOiBmYWxzZSxcbiAgICAgICAgdG1jUHJlZmVycmVkTWVzc2FnZTogJycsXG4gICAgICAgIHRtY1ByZWZlcnJlZExvZ29Vcmw6ICcnLFxuICAgICAgICB1bmF2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgIHVuYXZhaWxhYmxlTWVzc2FnZTogJycsXG4gICAgICAgIHJlcXVpcmVzUmVhc29uTWVzc2FnZXM6IFtdLFxuICAgICAgICBjYW5TZWxlY3Q6IGZhbHNlLFxuICAgICAgICBqb3VybmV5SGFzaDogJydcbiAgICAgIH0sXG4gICAgICBzdGFuZGFyZFByZW1pZXJGYXJlOiB7XG4gICAgICAgIGNsYXNzOiBudWxsLFxuICAgICAgICBmYXJlOiBudWxsLFxuICAgICAgICBpc0Rpc2FibGVkOiB0cnVlLFxuICAgICAgICBwcmljZTogTmFOLFxuICAgICAgICBjdXJyZW5jeTogJ0dCUCcsXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgcmVxdWlyZXNSZWFzb25LZXlzOiBbXSxcbiAgICAgICAgcHJlZmVycmVkOiBmYWxzZSxcbiAgICAgICAgcHJlZmVycmVkTWVzc2FnZXM6ICcnLFxuICAgICAgICBjb21wYW55UHJlZmVycmVkOiBmYWxzZSxcbiAgICAgICAgY29tcGFueVByZWZlcnJlZE1lc3NhZ2U6ICcnLFxuICAgICAgICBvZmZpY2VQcmVmZXJyZWQ6IGZhbHNlLFxuICAgICAgICBvZmZpY2VQcmVmZXJyZWRNZXNzYWdlOiAnJyxcbiAgICAgICAgdG1jUHJlZmVycmVkOiBmYWxzZSxcbiAgICAgICAgdG1jUHJlZmVycmVkTWVzc2FnZTogJycsXG4gICAgICAgIHRtY1ByZWZlcnJlZExvZ29Vcmw6ICcnLFxuICAgICAgICB1bmF2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgIHVuYXZhaWxhYmxlTWVzc2FnZTogJycsXG4gICAgICAgIHJlcXVpcmVzUmVhc29uTWVzc2FnZXM6IFtdLFxuICAgICAgICBjYW5TZWxlY3Q6IGZhbHNlLFxuICAgICAgICBqb3VybmV5SGFzaDogJydcbiAgICAgIH1cbiAgICB9O1xuICAgIC8vIHJldHVybk9iamVjdC5kdXJhdGlvbiA9IHJlc3VsdHMub3V0Ym91bmRUb3RhbER1cmF0aW9uO1xuICAgIHJldHVybk9iamVjdC5kYXRlQXJyaXZhbCA9IHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXS5kYXRlVGltZUFycml2aW5nO1xuICAgIHJldHVybk9iamVjdC5kYXRlRGVwYXJ0dXJlID0gcmVzdWx0c1swXS5kYXRlVGltZURlcGFydGluZztcbiAgICByZXR1cm5PYmplY3QuZHVyYXRpb24gPSB0aGlzLm1pblRvSG91cihcbiAgICAgIHJlc3VsdHMucmVkdWNlKChhY2MsIGZsaWdodCkgPT4gKGFjYyArPSBmbGlnaHQudG90YWxEdXJhdGlvbiksIDApXG4gICAgKTtcbiAgICByZXR1cm5PYmplY3QudGltZUFycml2YWxPZmZzZXQgPSB0aGlzLl9nZXRUaW1lT2Zmc2V0KFxuICAgICAgcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydERldGFpbC5vZmZzZXQsXG4gICAgICByZXN1bHRzW3Jlc3VsdHMubGVuZ3RoIC0gMV0uZGVzdGluYXRpb25BaXJwb3J0RGV0YWlsLmNvdW50cnlDb2RlID09PSAnR0InXG4gICAgKTtcbiAgICByZXR1cm5PYmplY3QudGltZURlcGFydHVyZU9mZnNldCA9IHRoaXMuX2dldFRpbWVPZmZzZXQoXG4gICAgICByZXN1bHRzWzBdLm9yaWdpbkFpcnBvcnREZXRhaWwub2Zmc2V0LFxuICAgICAgcmVzdWx0c1swXS5vcmlnaW5BaXJwb3J0RGV0YWlsLmNvdW50cnlDb2RlID09PSAnR0InXG4gICAgKTtcbiAgICByZXR1cm5PYmplY3QuYXJyaXZhbENvdW50cnlDb2RlID1cbiAgICAgIHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnREZXRhaWwuY291bnRyeUNvZGU7XG4gICAgcmV0dXJuT2JqZWN0LmRlcGFydHVyZUNvdW50cnlDb2RlID0gcmVzdWx0c1swXS5vcmlnaW5BaXJwb3J0RGV0YWlsLmNvdW50cnlDb2RlO1xuXG4gICAgLy8gISAtIHRpbWVzIGluY29ycmVjdCBpZiBvZmZzZXQgZnJvbSBCRSA+IDEgaHJcbiAgICBjb25zdCBhcnJpdmFsT2dPZmZzZXRTcGxpdCA9IHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXS5kYXRlVGltZUFycml2aW5nLnNwbGl0KCcrJyk7XG4gICAgY29uc3QgYXJyaXZhbE9nT2Zmc2V0ID0gIE51bWJlcihhcnJpdmFsT2dPZmZzZXRTcGxpdFsxXT8uc3BsaXQoJzonKVswXSk7XG5cbiAgICBjb25zdCBkZXBhcnR1cmVPZ09mZnNldFNwbGl0ID0gcmVzdWx0c1swXS5kYXRlVGltZURlcGFydGluZy5zcGxpdCgnKycpO1xuICAgIGNvbnN0IGRlcGFydHVyZWxPZ09mZnNldCA9IE51bWJlcihkZXBhcnR1cmVPZ09mZnNldFNwbGl0WzFdPy5zcGxpdCgnOicpWzBdKTtcblxuICAgIHJldHVybk9iamVjdC50aW1lQXJyaXZhbCA9IG1vbWVudC51dGMocmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdLmRhdGVUaW1lQXJyaXZpbmcpLmFkZChhcnJpdmFsT2dPZmZzZXQsICdob3VycycpLmZvcm1hdCgnSEg6bW0nKTtcbiAgICByZXR1cm5PYmplY3QudGltZURlcGFydHVyZSA9IG1vbWVudC51dGMocmVzdWx0c1swXS5kYXRlVGltZURlcGFydGluZykuYWRkKGRlcGFydHVyZWxPZ09mZnNldCwgJ2hvdXJzJykuZm9ybWF0KCdISDptbScpO1xuXG4gICAgcmV0dXJuT2JqZWN0LnVpZCA9IGluZGV4O1xuICAgIHJlc3VsdHMuZm9yRWFjaCgoZmxpZ2h0OiBGbGlnaHRKb3VybmV5KSA9PiB7XG4gICAgICByZXR1cm5PYmplY3QuY2FiaW5DbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xuICAgICAgLy8gWzE0OjQxXSBCcmVuZGFuIFZlbmluZ2FcbiAgICAgIC8vIEVjb25vbXkgKGFuZCB0aGVpciB2YXJpYW50cykgd291bGQgYmUgU3RhbmRhcmRcbiAgICAgIC8vIFByZW1pdW0gd291bGQgYmUgU3RhbmRhcmQgUHJlbWl1bVxuICAgICAgLy8gQnVzaW5lc3Mgd291bGQgYmUgQnVzaW5lc3MgUHJlbWl1bVxuICAgICAgc3dpdGNoIChmbGlnaHQuY2FiaW5DbGFzcykge1xuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpOlxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnczpcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkOlxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teTpcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmZhcmUgPSByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmZhcmVcbiAgICAgICAgICAgID8gcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5mYXJlLmNvbmNhdChmbGlnaHQpXG4gICAgICAgICAgICA6IFtmbGlnaHRdO1xuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUucHJpY2UgPSB0b3RhbC5wcmljZTtcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmN1cnJlbmN5ID0gdG90YWwuY3VycmVuY3k7XG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5jbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmpvdXJuZXlIYXNoID0gam91cm5leUhhc2g7XG4gICAgICAgICAgcmV0dXJuT2JqZWN0ID0gdGhpcy51cGRhdGVSdWxlcyhyZXR1cm5PYmplY3QsIGpvdXJuZXlIYXNoLCAnc3RhbmRhcmRGYXJlJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1ByZW1pdW0nOlxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5mYXJlID0gcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuZmFyZVxuICAgICAgICAgICAgPyByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5mYXJlLmNvbmNhdChmbGlnaHQpXG4gICAgICAgICAgICA6IFtmbGlnaHRdO1xuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnByaWNlID0gdG90YWwucHJpY2U7XG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuY3VycmVuY3kgPSB0b3RhbC5jdXJyZW5jeTtcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5jbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuam91cm5leUhhc2ggPSBqb3VybmV5SGFzaDtcbiAgICAgICAgICByZXR1cm5PYmplY3QgPSB0aGlzLnVwZGF0ZVJ1bGVzKHJldHVybk9iamVjdCwgam91cm5leUhhc2gsICdzdGFuZGFyZFByZW1pZXJGYXJlJyk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzOlxuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5mYXJlID0gcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuZmFyZVxuICAgICAgICAgICAgPyByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5mYXJlLmNvbmNhdChmbGlnaHQpXG4gICAgICAgICAgICA6IFtmbGlnaHRdO1xuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnByaWNlID0gdG90YWwucHJpY2U7XG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuY3VycmVuY3kgPSB0b3RhbC5jdXJyZW5jeTtcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5jbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuam91cm5leUhhc2ggPSBqb3VybmV5SGFzaDtcbiAgICAgICAgICByZXR1cm5PYmplY3QgPSB0aGlzLnVwZGF0ZVJ1bGVzKHJldHVybk9iamVjdCwgam91cm5leUhhc2gsICdidXNpbmVzc1ByZW1pZXJGYXJlJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKCduZXcgY2xhc3MgdG8gYmUgaW1wbGVtZW50ZWQ6ICcsIGZsaWdodC5jYWJpbkNsYXNzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmV0dXJuT2JqZWN0O1xuICB9XG5cbiAgLy8gZ2V0IHRoZSBvZmZzZXQgZnJvbSB0aW1lcyBpbiB0aGUgZm9ybWF0OiAwMjMtMDctMjVUMjI6MTc6MDAuMDAwKzAyOjAwXG4gIHByaXZhdGUgX2dldFRpbWVPZmZzZXQodGltZXN0cmluZzogc3RyaW5nLCB1azogYm9vbGVhbik6IG51bWJlciB7XG4gICAgY29uc3QgYXJyaXZhbFNwbGl0ID0gdGltZXN0cmluZz8uc3BsaXQoJysnKTtcblxuICAgIGlmIChhcnJpdmFsU3BsaXQgJiYgYXJyaXZhbFNwbGl0WzFdICYmICF1aykge1xuICAgICAgLy8gbm9ybWFsaXNlIGludG8gYSBudW1iZXJcbiAgICAgIGNvbnN0IGlubmVyU3BsaXQgPSBhcnJpdmFsU3BsaXRbMV0uc3BsaXQoJzonKTtcbiAgICAgIGNvbnN0IG9mZnNldCA9IE51bWJlcihpbm5lclNwbGl0WzBdKTtcbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJ1bGVzKFxuICAgIHJldHVybk9iamVjdDogRXVyb3N0YXJJdGVtLFxuICAgIGpvdXJuZXlIYXNoOiBzdHJpbmcsXG4gICAgZmFyZVR5cGU6IHN0cmluZ1xuICApOiBFdXJvc3Rhckl0ZW0ge1xuICAgIGNvbnN0IHNlbGVjdGVkUnVsZVN1bW1hcnk6IFJlY29yZFJ1bGVBY3Rpb24gPVxuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFt0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQ/LmpvdXJuZXlIYXNoXSB8fCB7fTtcblxuICAgIGNvbnN0IGhhc0ZpZWxkID0gPFQ+KGpvdXJuZXlIYXNoOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcsIGRlZjogVCk6IFQgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5oZWxwZXJzLmZpZWxkRnJvbU9iamVjdCh0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSwgW1xuICAgICAgICAgICdqb3VybmV5V2hlblNlbGVjdGVkJyxcbiAgICAgICAgICBqb3VybmV5SGFzaCxcbiAgICAgICAgICBmaWVsZFxuICAgICAgICBdKSB8fFxuICAgICAgICB0aGlzLmhlbHBlcnMuZmllbGRGcm9tT2JqZWN0KHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LCBbXG4gICAgICAgICAgJ3doZW5TZWxlY3RlZEFsb25lJyxcbiAgICAgICAgICBqb3VybmV5SGFzaCxcbiAgICAgICAgICBmaWVsZFxuICAgICAgICBdKSB8fFxuICAgICAgICB0aGlzLmhlbHBlcnMuZmllbGRGcm9tT2JqZWN0KHNlbGVjdGVkUnVsZVN1bW1hcnksIFtqb3VybmV5SGFzaCwgZmllbGRdKSB8fFxuICAgICAgICBkZWZcbiAgICAgICk7XG4gICAgfTtcbiAgICBzd2l0Y2ggKGZhcmVUeXBlKSB7XG4gICAgICBjYXNlICdzdGFuZGFyZEZhcmUnOlxuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmNvbXBhbnlQcmVmZXJyZWQgPVxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkIHx8XG4gICAgICAgICAgZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5jb21wYW55UHJlZmVycmVkTWVzc2FnZSA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgICAgICcnO1xuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLm9mZmljZVByZWZlcnJlZCA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/Lm9mZmljZVByZWZlcnJlZCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8ub2ZmaWNlUHJlZmVycmVkIHx8XG4gICAgICAgICAgZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlID1cbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgICAgICcnO1xuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnRtY1ByZWZlcnJlZCA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkIHx8XG4gICAgICAgICAgZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS50bWNQcmVmZXJyZWRNZXNzYWdlID1cbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgICAgICcnO1xuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnByZWZlcnJlZCA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8ub2ZmaWNlUHJlZmVycmVkIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy50bWNQcmVmZXJyZWQ7XG5cbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS50bWNQcmVmZXJyZWRMb2dvVXJsID1cbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTG9nb1VybCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTG9nb1VybCB8fFxuICAgICAgICAgICcnO1xuXG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUuc2VsZWN0ZWQgPSByZXR1cm5PYmplY3QudWlkID09PSB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQ/LnVpZDtcbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS51bmF2YWlsYWJsZSA9IGhhc0ZpZWxkKGpvdXJuZXlIYXNoLCAndW5hdmFpbGFibGUnLCBmYWxzZSk7XG5cbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS51bmF2YWlsYWJsZU1lc3NhZ2UgPSBoYXNGaWVsZChcbiAgICAgICAgICBqb3VybmV5SGFzaCxcbiAgICAgICAgICAndW5hdmFpbGFibGVNZXNzYWdlJyxcbiAgICAgICAgICAnJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnJlcXVpcmVzUmVhc29uS2V5cyA9IGhhc0ZpZWxkKGpvdXJuZXlIYXNoLCAncmVxdWlyZXNSZWFzb25LZXlzJywgW10pO1xuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgPSBoYXNGaWVsZChcbiAgICAgICAgICBqb3VybmV5SGFzaCxcbiAgICAgICAgICAncmVxdWlyZXNSZWFzb25NZXNzYWdlcycsXG4gICAgICAgICAgW11cbiAgICAgICAgKTtcblxuICAgICAgY2FzZSAnc3RhbmRhcmRQcmVtaWVyRmFyZSc6XG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLmNvbXBhbnlQcmVmZXJyZWQgPVxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkIHx8XG4gICAgICAgICAgZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgPVxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8uY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgfHxcbiAgICAgICAgICAnJztcbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUub2ZmaWNlUHJlZmVycmVkID1cbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8ub2ZmaWNlUHJlZmVycmVkIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWQgfHxcbiAgICAgICAgICBmYWxzZTtcblxuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlID1cbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgICAgICcnO1xuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS50bWNQcmVmZXJyZWQgPVxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy50bWNQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZCB8fFxuICAgICAgICAgIGZhbHNlO1xuXG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnRtY1ByZWZlcnJlZE1lc3NhZ2UgPVxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy50bWNQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy50bWNQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICAgICAgJyc7XG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnByZWZlcnJlZCA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8ub2ZmaWNlUHJlZmVycmVkIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy50bWNQcmVmZXJyZWQ7XG5cbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUudG1jUHJlZmVycmVkTG9nb1VybCA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZExvZ29VcmwgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZExvZ29VcmwgfHxcbiAgICAgICAgICAnJztcblxuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5zZWxlY3RlZCA9XG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnVpZCA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0Py51aWQ7XG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnVuYXZhaWxhYmxlID0gaGFzRmllbGQoam91cm5leUhhc2gsICd1bmF2YWlsYWJsZScsIGZhbHNlKTtcblxuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS51bmF2YWlsYWJsZU1lc3NhZ2UgPSBoYXNGaWVsZChcbiAgICAgICAgICBqb3VybmV5SGFzaCxcbiAgICAgICAgICAndW5hdmFpbGFibGVNZXNzYWdlJyxcbiAgICAgICAgICAnJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5yZXF1aXJlc1JlYXNvbktleXMgPSBoYXNGaWVsZChcbiAgICAgICAgICBqb3VybmV5SGFzaCxcbiAgICAgICAgICAncmVxdWlyZXNSZWFzb25LZXlzJyxcbiAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzID0gaGFzRmllbGQoXG4gICAgICAgICAgam91cm5leUhhc2gsXG4gICAgICAgICAgJ3JlcXVpcmVzUmVhc29uTWVzc2FnZXMnLFxuICAgICAgICAgIFtdXG4gICAgICAgICk7XG4gICAgICBjYXNlICdidXNpbmVzc1ByZW1pZXJGYXJlJzpcbiAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuY29tcGFueVByZWZlcnJlZCA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcbiAgICAgICAgICBmYWxzZTtcblxuICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5jb21wYW55UHJlZmVycmVkTWVzc2FnZSA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgICAgICcnO1xuICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5vZmZpY2VQcmVmZXJyZWQgPVxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/Lm9mZmljZVByZWZlcnJlZCB8fFxuICAgICAgICAgIGZhbHNlO1xuXG4gICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLm9mZmljZVByZWZlcnJlZE1lc3NhZ2UgPVxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICAgICAgJyc7XG4gICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnRtY1ByZWZlcnJlZCA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkIHx8XG4gICAgICAgICAgZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUudG1jUHJlZmVycmVkTWVzc2FnZSA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZE1lc3NhZ2UgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZE1lc3NhZ2UgfHxcbiAgICAgICAgICAnJztcbiAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUucHJlZmVycmVkID1cbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8uY29tcGFueVByZWZlcnJlZCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8uY29tcGFueVByZWZlcnJlZCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/Lm9mZmljZVByZWZlcnJlZCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy50bWNQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZDtcblxuICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS50bWNQcmVmZXJyZWRMb2dvVXJsID1cbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTG9nb1VybCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTG9nb1VybCB8fFxuICAgICAgICAgICcnO1xuXG4gICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnNlbGVjdGVkID1cbiAgICAgICAgICByZXR1cm5PYmplY3QudWlkID09PSB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQ/LnVpZDtcbiAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUudW5hdmFpbGFibGUgPSBoYXNGaWVsZChqb3VybmV5SGFzaCwgJ3VuYXZhaWxhYmxlJywgZmFsc2UpO1xuXG4gICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnVuYXZhaWxhYmxlTWVzc2FnZSA9IGhhc0ZpZWxkKFxuICAgICAgICAgIGpvdXJuZXlIYXNoLFxuICAgICAgICAgICd1bmF2YWlsYWJsZU1lc3NhZ2UnLFxuICAgICAgICAgICcnXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnJlcXVpcmVzUmVhc29uS2V5cyA9IGhhc0ZpZWxkKFxuICAgICAgICAgIGpvdXJuZXlIYXNoLFxuICAgICAgICAgICdyZXF1aXJlc1JlYXNvbktleXMnLFxuICAgICAgICAgIFtdXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgPSBoYXNGaWVsZChcbiAgICAgICAgICBqb3VybmV5SGFzaCxcbiAgICAgICAgICAncmVxdWlyZXNSZWFzb25NZXNzYWdlcycsXG4gICAgICAgICAgW11cbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldHVybk9iamVjdDtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KGNoZWNrSXNWYWxpZDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VFdXJvc3RhclF1ZXJ5KCkpO1xuICAgIGlmIChjaGVja0lzVmFsaWQpIHtcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzZXRQYXJhbXMoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIHRoaXMucmVzZXRRdWVyeSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShFdXJvc3RhckVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUywge1xuICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxuICAgIH0pO1xuXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcbiAgICB0aGlzLnZhbGlkYXRpb25GYXZvdXJpdGVNZXNzYWdlcyA9IFtdO1xuICAgIGlmICghdGhpcy5fb3JpZ2luQWlycG9ydCkge1xuICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIGFkZCBpbiBhIGRlcGFydHVyZSBsb2NhdGlvbicsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCkge1xuICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIGFkZCBpbiBhIGFycml2YWwgZGVzdGluYXRpb24nLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIobW9tZW50KCkpKSB7XG4gICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdEZXBhcnR1cmUgZGF0ZSBjYW4gbm90IGJlIGluIHRoZSBwYXN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCAmJlxuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ICYmXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHRoaXMuX29yaWdpbkFpcnBvcnRcbiAgICApIHtcbiAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ09yaWdpbiBhbmQgZGVzdGluYXRpb24gc3RhdGlvbiBjYW5ub3QgYmUgdGhlIHNhbWUnLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNSZXR1cm4pIHtcbiAgICAgIC8vIFRPRE8gY2hlY2sgdGhhdCByZXR1cm4gZGV0YWlscyBhcmUgc2V0XG4gICAgICBpZiAodGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc1NhbWVPckFmdGVyKHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSkpIHtcbiAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUmV0dXJuIGRhdGUgbXVzdCBiZSBhZnRlciB0aGUgZGVwYXJ0dXJlIGRhdGUnKTtcbiAgICAgIH1cbiAgICAgIC8vIHRoaXMgaXMgc3R1ZmYgZm9yIG1hdGNoaW5nIGNhYmluIGNsYXNzZXNcbiAgICAgIGlmICghdGhpcy5jaGVja0NhYmluTWF0Y2hpc1ZhbGlkKCkpIHtcbiAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZShcbiAgICAgICAgICAnVGhlIHR5cGVzIG9mIGNhYmluIGNsYXNzZXMgc2VsZWN0ZWQgYXJlIG5vdCBjb21wYXRpYmxlLiBFeGFtcGxlcyBvZiBjb21wYXRpYmxlIGNhYmluIGNsYXNzZXM7IEFueSAtIEFueTsgU3RhbmRhcmQgLSBTdGFuZGFyZDsgQnVzaW5lc3MgLSBCdXNpbmVzcycsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xuICAgIHRoaXMuaXNGYXZvdXJpdGVWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbkZhdm91cml0ZU1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcbiAgfVxuXG4gIGNoZWNrQ2FiaW5NYXRjaGlzVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoICh0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcykge1xuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkFueTpcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID09PSBGbGlnaHRDYWJpbkNsYXNzLkFueTtcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215OlxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215OlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzICE9PSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzICYmXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3MgIT09IEZsaWdodENhYmluQ2xhc3MuQW55XG4gICAgICAgICk7XG4gICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3M6XG4gICAgICAgIHJldHVybiAhKFxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID09PSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXkgfHxcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyA9PT0gRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teSB8fFxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID09PSBGbGlnaHRDYWJpbkNsYXNzLkFueVxuICAgICAgICApO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcblxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUodGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcykpO1xuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShFdXJvc3RhckVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUywge1xuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXG4gICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XG5cbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLmV1cm9zdGFyRmV0Y2hlci5mZXRjaExpc3QodGhpcy5nZXRTZWFyY2hRdWVyeSgpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGdtdFNlYXJjaChxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMpOiBPYnNlcnZhYmxlPEV1cm9zdGFyUXVvdGVSZXN1bHQ+IHtcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcbiAgICBxdWVyeS5wYXNzZW5nZXJzID0gdGhpcy5fcGFzc2VuZ2VycztcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmV1cm9zdGFyRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xuICAgIHRoaXMuX3N0YXJ0U2VhcmNoKHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XG4gICAgY29uc3QgcmVjZW50U2VhcmNoUXVlcnk6IElFdXJvc3RhclNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5FdXJvc3RhcixcbiAgICAgIHNlYXJjaEFyZ3M6IHJlY2VudFNlYXJjaFF1ZXJ5LFxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5vdXRCb3VuZERhdGUuZm9ybWF0KCksXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLmhlbHBlcnMuZ2V0VHJhdmVsbGVyc0lkKHRoaXMudHJhdmVsbGVycywgdGhpcy51c2VyU2VydmljZS5ib2JvPy5pZClcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyk6IElFdXJvc3RhclNlYXJjaEFyZ3Mge1xuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBJRXVyb3N0YXJTZWFyY2hBcmdzID0gcXVlcnk7XG4gICAgaWYgKHRoaXMuZGVwYXJ0TG9jYXRpb24pIHtcbiAgICAgIHNlYXJjaFF1ZXJ5LmRlcGFydExvY2F0aW9uID0gdGhpcy5kZXBhcnRMb2NhdGlvbjtcbiAgICB9XG4gICAgaWYgKHRoaXMuYXJyaXZlTG9jYXRpb24pIHtcbiAgICAgIHNlYXJjaFF1ZXJ5LmFycml2ZUxvY2F0aW9uID0gdGhpcy5hcnJpdmVMb2NhdGlvbjtcbiAgICB9XG4gICAgc2VhcmNoUXVlcnkub3V0Ym91bmRDYWJpbkNsYXNzTmFtZSA9IHRoaXMudHVybkNhYmluVHlwZVRvTmFtZSh0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyk7XG4gICAgaWYgKHRoaXMuaXNSZXR1cm4pIHtcbiAgICAgIHNlYXJjaFF1ZXJ5LnJldHVybkNhYmluQ2xhc3NOYW1lID1cbiAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3MgPT09IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXG4gICAgICAgICAgPyBzZWFyY2hRdWVyeS5vdXRib3VuZENhYmluQ2xhc3NOYW1lXG4gICAgICAgICAgOiB0aGlzLnR1cm5DYWJpblR5cGVUb05hbWUodGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3MpO1xuICAgIH1cbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XG4gIH1cblxuICB0dXJuQ2FiaW5UeXBlVG9OYW1lKGNsYXNzVHlwZTogRmxpZ2h0Q2FiaW5DbGFzcykge1xuICAgIGNvbnN0IGNsYXNzZXMgPSB0aGlzLmF2YWxpYWJsZUNsYXNzZXMudmFsdWU7XG4gICAgY29uc3Qgc2VsZWN0ZWRDYWxzc05hbWUgPSBjbGFzc2VzLmZpbmQoY2xhc3NJdGVtID0+IGNsYXNzSXRlbS50eXBlID09PSBjbGFzc1R5cGUpLm5hbWU7XG4gICAgcmV0dXJuIFtzZWxlY3RlZENhbHNzTmFtZV07XG4gIH1cblxuICBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERhdGUpIHtcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgPyByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZEFycml2YWxUaW1lV2luZG93O1xuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREYXRlLFxuICAgICAgICBvdXRib3VuZFRpbWVXaW5kb3dcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUpIHtcbiAgICAgIGxldCByZXR1cm5UaW1lV2luZG93ID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICA/IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdztcbiAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGF0ZSxcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmFwcGx5U2VhcmNoUXVlcnkocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhkYXRlVGltZTogbW9tZW50Lk1vbWVudCwgd2luZG93OiBUaW1lV2luZG93KTogc3RyaW5nIHtcbiAgICByZXR1cm4gd2luZG93ID09PSBUaW1lV2luZG93LkRlcGFydCA/IHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhkYXRlVGltZSwgLTIsIDIpIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbWFrZUFycml2YWxUaW1lV2luZG93KGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LCB3aW5kb3c6IFRpbWVXaW5kb3cpOiBzdHJpbmcge1xuICAgIGlmICh3aW5kb3cgIT09IFRpbWVXaW5kb3cuQXJyaXZlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMik7XG4gIH1cblxuICBjb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoZGF0ZTogc3RyaW5nLCB0aW1lV2luZG93Pzogc3RyaW5nKTogbW9tZW50Lk1vbWVudCB7XG4gICAgaWYgKHRpbWVXaW5kb3cpIHtcbiAgICAgIGNvbnN0IGZsaWdodFRpbWUgPSB0aW1lV2luZG93LnNwbGl0KCctJyk7XG4gICAgICBsZXQgdGltZUFuZERhdGUgPSBtb21lbnQoZGF0ZSkuYWRkKG1vbWVudC5kdXJhdGlvbih0aGlzLmhlbHBlcnMuaGhtbVRvVGltZShmbGlnaHRUaW1lWzBdKSkpO1xuICAgICAgLy8gYWRkIDIgaG91clxuICAgICAgcmV0dXJuIHRpbWVBbmREYXRlLmNsb25lKCkuYWRkKDIsICdob3VyJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2VhcmNoUXVlcnkoKTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMge1xuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8U2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM+KFxuICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5BaXJwb3J0OiB0aGlzLl9vcmlnaW5BaXJwb3J0LFxuICAgICAgICAgIGRlc3RpbmF0aW9uQWlycG9ydDogdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0LFxuICAgICAgICAgIG91dGJvdW5kRGF0ZTogdGhpcy5oZWxwZXJzLmZvcm1hdElzb0RhdGUodGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSksXG4gICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxuICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSxcbiAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWFcbiAgICAgICAgICApLFxuICAgICAgICAgIG91dGJvdW5kQXJyaXZhbFRpbWVXaW5kb3c6IHRoaXMubWFrZUFycml2YWxUaW1lV2luZG93KFxuICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSxcbiAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWFcbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXNzZW5nZXJzOiB0aGlzLl9wYXNzZW5nZXJzLFxuICAgICAgICAgIHJldHVyblRyaXA6IHRoaXMuaXNSZXR1cm4sXG4gICAgICAgICAgb3V0Ym91bmRDYWJpbkNsYXNzOiB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyA/IFt0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzc10gOiBudWxsLFxuICAgICAgICAgIHJlcXVpcmVGcmVlQmFnOiBudWxsLFxuICAgICAgICAgIG1heENvbm5lY3Rpb25zOiB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMsXG4gICAgICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzLFxuICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzOiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMubWFwKChjYXJyaWVyOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+XG4gICAgICAgICAgICBjYXJyaWVyPy5jb2RlID8gY2Fycmllci5jb2RlIDogbnVsbFxuICAgICAgICAgICksXG4gICAgICAgICAgZmFyZVR5cGU6IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSxcbiAgICAgICAgICB3aXRoR3JvdXBlZDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLmlzUmV0dXJuXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHJldHVybkRhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSksXG4gICAgICAgICAgICAgIHJldHVybkRlcGFydHVyZVRpbWVXaW5kb3c6IHRoaXMubWFrZURlcGFydHVyZVRpbWVXaW5kb3coXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlLFxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICByZXR1cm5BcnJpdmFsVGltZVdpbmRvdzogdGhpcy5tYWtlQXJyaXZhbFRpbWVXaW5kb3coXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlLFxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICByZXR1cm5DYWJpbkNsYXNzOiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc1xuICAgICAgICAgICAgICAgID8gW3RoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge31cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUcmF2ZWxsZXJzKCkge1xuICAgIGNvbnN0IHRyYXZlbGxlcnM6IEZsaWdodFBhc3Nlbmdlck9iamVjdFtdID0gW107XG5cblxuICAgIHRoaXMudHJhdmVsbGVycz8uZm9yRWFjaCh0cmF2ZWxsZXIgPT4ge1xuXG4gICAgICBjb25zdCBuZXdGbGlnaHRQYXNzT2JqZWN0OiBGbGlnaHRQYXNzZW5nZXJPYmplY3QgPSB7XG4gICAgICAgIHR5cGU6IHRyYXZlbGxlci5hZ2VUeXBlID8gdHJhdmVsbGVyLmFnZVR5cGUgPT09IGFnZXMuQWR1bHQgPyBGbGlnaHRQYXNzZW5nZXJUeXBlLkFkdWx0IDogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5DaGlsZCA6IEZsaWdodFBhc3NlbmdlclR5cGUuQWR1bHQsXG4gICAgICAgIGlkOiB0cmF2ZWxsZXIuaWQsXG4gICAgICAgIGd1ZXN0OiB0cmF2ZWxsZXIuZ3Vlc3RcbiAgICAgIH1cbiAgICAgIHRyYXZlbGxlcnMucHVzaChuZXdGbGlnaHRQYXNzT2JqZWN0KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3Bhc3NlbmdlcnMgPSB0cmF2ZWxsZXJzO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpIHtcbiAgICB0aGlzLmF2YWxpYWJsZUNsYXNzZXMubmV4dChbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBbnknLFxuICAgICAgICB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLkFueVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1N0YW5kYXJkIChzZW1pIGZsZXhpYmxlKScsXG4gICAgICAgIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1N0YW5kYXJkIHByZW1pZXIgKHNlbWkgZmxleGlibGUpJyxcbiAgICAgICAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0J1c2luZXNzIHByZW1pZXIgKGZ1bGx5IGZsZXhpYmxlKScsXG4gICAgICAgIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NcbiAgICAgIH1cbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSBmbGlnaHQgcmVzdWx0c1xuICAgKiBAdG9kbyAtIEZpbGwgb3V0IFByZWZlcnJlZCBhbmQgQ28yIHNvcnRpbmcgd2hlbiB3ZSBoYXZlIHRoYXQgZGF0YVxuICAgKi9cbiAgcHVibGljIHNvcnRSZXN1bHRzKFxuICAgIHNvcnRNZXRob2RWYWx1ZTogU29ydFR5cGVzRXVyb3N0YXIsXG4gICAgZGlyOiBib29sZWFuLFxuICAgIGdpdmVuUmVzdWx0cz86IEV1cm9zdGFyUmVzdWx0c1tdXG4gICk6IHZvaWQge1xuICAgIGxldCByZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKFxuICAgICAgZ2l2ZW5SZXN1bHRzID8gZ2l2ZW5SZXN1bHRzIDogPEV1cm9zdGFyUmVzdWx0c1tdPig8dW5rbm93bj50aGlzLmZ1bGxSZXN1bHRzKVxuICAgICk7XG5cbiAgICBzd2l0Y2ggKHNvcnRNZXRob2RWYWx1ZSkge1xuICAgICAgY2FzZSBTb3J0VHlwZXNFdXJvc3Rhci5DaGVhcGVzdEZpcnN0OlxuICAgICAgICByZXN1bHRzID0gdGhpcy5zb3J0QnlQcmljZShyZXN1bHRzLCBkaXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU29ydFR5cGVzRXVyb3N0YXIuRWFybGllc3RGaXJzdDpcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5RGF0ZShyZXN1bHRzLCBkaXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBVbmtub3duIHNvcnRpbmcgbWV0aG9kOiAke3NvcnRNZXRob2RWYWx1ZX0gKysrYCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyk7XG4gIH1cblxuICBwdWJsaWMgc29ydFJlc3VsdHNGbGlnaHRKb3VybmV5cyhcbiAgICBzb3J0TWV0aG9kVmFsdWU6IFNvcnRUeXBlc0V1cm9zdGFyLFxuICAgIGluYm91bmQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBnaXZlblJlc3VsdHM/OiBGbGlnaHRJdGluZXJhcnlbXVxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XG4gICAgbGV0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUoZ2l2ZW5SZXN1bHRzKTtcblxuICAgIHN3aXRjaCAoc29ydE1ldGhvZFZhbHVlKSB7XG4gICAgICBjYXNlIFNvcnRUeXBlc0V1cm9zdGFyLkNoZWFwZXN0Rmlyc3Q6XG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnNvcnRCeVByaWNlRmxpZ2h0KHJlc3VsdHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU29ydFR5cGVzRXVyb3N0YXIuRWFybGllc3RGaXJzdDpcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5RGF0ZUZsaWdodChyZXN1bHRzLCBpbmJvdW5kKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNvcnRUeXBlc0V1cm9zdGFyLkxhdGVzdEZpcnN0OlxuICAgICAgICByZXN1bHRzID0gdGhpcy5zb3J0QnlEYXRlRmxpZ2h0RGVjZW5kaW5nKHJlc3VsdHMsIGluYm91bmQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU29ydFR5cGVzRXVyb3N0YXIuRXhwZW5zaXZlRmlyc3Q6XG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnNvcnRCeUV4cGVuc2l2ZUZsaWdodChyZXN1bHRzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNvcnRUeXBlc0V1cm9zdGFyLkZhc3Rlc3RGaXJzdDpcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5RmFzdGVzdEZsaWdodChyZXN1bHRzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNvcnRUeXBlc0V1cm9zdGFyLlByZWZlcnJlZEZpcnN0OlxuICAgICAgICByZXN1bHRzID0gdGhpcy5zb3J0QnlQcmVmZXJyZWRGbGlnaHQocmVzdWx0cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTb3J0VHlwZXNFdXJvc3Rhci5DbzJGaXJzdDpcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5Q2FyYm9uRmxpZ2h0KHJlc3VsdHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBVbmtub3duIHNvcnRpbmcgbWV0aG9kOiAke3NvcnRNZXRob2RWYWx1ZX0gKysrYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBzZXRQcmVmZXJyZWRBbmRHcmVlbmVyQ2hvaWNlKHJlc3VsdHM6IEV1cm9zdGFyUXVvdGVSZXN1bHQpIHtcbiAgICByZXN1bHRzLmpvdXJuZXlzLm1hcCgocmVzdWx0OiBFdXJvc3Rhckl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XG4gICAgICByZXN1bHQucHJlZmVycmVkID1cbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtyZXN1bHQuam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkIHx8XG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW3Jlc3VsdC5qb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtyZXN1bHQuam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWQgfHxcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbcmVzdWx0LmpvdXJuZXlIYXNoXT8ub2ZmaWNlUHJlZmVycmVkIHx8XG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbcmVzdWx0LmpvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkIHx8XG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW3Jlc3VsdC5qb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZDtcblxuICAgICAgcmVzdWx0LmdyZWVuZXJDaG9pY2UgPVxuICAgICAgICByZXN1bHQuY28yUGVySXRlbSA8PSB0aGlzLmhlbHBlcnMuY2FsY3VsYXRlQXZlcmFnZUNvMlBlckl0ZW0ocmVzdWx0cy5qb3VybmV5cyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuICBzb3J0QnlQcmljZUZsaWdodChyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IEZsaWdodEl0aW5lcmFyeVtdIHtcbiAgICByZXR1cm4gcmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICByZXR1cm4gTnVtYmVyKGEudG90YWwucHJpY2UpIC0gTnVtYmVyKGIudG90YWwucHJpY2UpO1xuICAgIH0pO1xuICB9XG5cbiAgc29ydEJ5RXhwZW5zaXZlRmxpZ2h0KHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xuICAgIHJldHVybiByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIHJldHVybiBOdW1iZXIoYi50b3RhbC5wcmljZSkgLSBOdW1iZXIoYS50b3RhbC5wcmljZSk7XG4gICAgfSk7XG4gIH1cblxuICBzb3J0QnlGYXN0ZXN0RmxpZ2h0KHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xuICAgIHJldHVybiByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIHJldHVybiBhLm91dGJvdW5kVG90YWxEdXJhdGlvbiAhPT0gYi5vdXRib3VuZFRvdGFsRHVyYXRpb25cbiAgICAgICAgPyBhLm91dGJvdW5kVG90YWxEdXJhdGlvbiAtIGIub3V0Ym91bmRUb3RhbER1cmF0aW9uXG4gICAgICAgIDogYS5pbmJvdW5kVG90YWxEdXJhdGlvbiAtIGIuaW5ib3VuZFRvdGFsRHVyYXRpb247XG4gICAgfSk7XG4gIH1cblxuICBzb3J0QnlDYXJib25GbGlnaHQocmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBGbGlnaHRJdGluZXJhcnlbXSB7XG4gICAgcmV0dXJuIHJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgcmV0dXJuIE51bWJlcihhLmNvMlBlclBhc3NlbmdlcikgLSBOdW1iZXIoYi5jbzJQZXJQYXNzZW5nZXIpO1xuICAgIH0pO1xuICB9XG4gIHNvcnRCeVByZWZlcnJlZEZsaWdodChyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IEZsaWdodEl0aW5lcmFyeVtdIHtcbiAgICByZXR1cm4gcmVzdWx0cy5zb3J0KFxuICAgICAgKGE6IEV1cm9zdGFySXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsIGI6IEV1cm9zdGFySXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+IHtcbiAgICAgICAgcmV0dXJuICthLnByZWZlcnJlZCAtICtiLnByZWZlcnJlZDtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHNvcnRCeURhdGVGbGlnaHQocmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10sIGluYm91bmQ6IGJvb2xlYW4pOiBGbGlnaHRJdGluZXJhcnlbXSB7XG4gICAgcmV0dXJuIHJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKGluYm91bmQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtb21lbnQoYS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpIC1cbiAgICAgICAgICBtb21lbnQoYi5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpIC1cbiAgICAgICAgICBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLnVuaXgoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc29ydEJ5RGF0ZUZsaWdodERlY2VuZGluZyhyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSwgaW5ib3VuZDogYm9vbGVhbik6IEZsaWdodEl0aW5lcmFyeVtdIHtcbiAgICByZXR1cm4gcmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoaW5ib3VuZCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG1vbWVudChiLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KCkgLVxuICAgICAgICAgIG1vbWVudChhLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KClcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbW9tZW50KGIub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KCkgLVxuICAgICAgICAgIG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU29ydCByZXN1bHRzIGJ5IGRlcGFydHVyZSB0aW1lXG4gICAqXG4gICAqIEBwYXJhbSB7RXVyb3N0YXJSZXN1bHRzW119IHJlc3VsdHNcbiAgICogQHJldHVybnNcbiAgICogQG1lbWJlcm9mIEV1cm9zdGFySW5mb1xuICAgKi9cbiAgc29ydEJ5RGF0ZShyZXN1bHRzOiBFdXJvc3RhclJlc3VsdHNbXSwgZGlyPzogYm9vbGVhbik6IEV1cm9zdGFyUmVzdWx0c1tdIHtcbiAgICBjb25zdCBieURhdGUgPSAoYTogRXVyb3N0YXJJdGVtLCBiOiBFdXJvc3Rhckl0ZW0pID0+IHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIG1vbWVudChhLmRhdGVEZXBhcnR1cmUpLnVuaXgoKSAtIG1vbWVudChiLmRhdGVEZXBhcnR1cmUpLnVuaXgoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtb21lbnQoYi5kYXRlRGVwYXJ0dXJlKS51bml4KCkgLSBtb21lbnQoYS5kYXRlRGVwYXJ0dXJlKS51bml4KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSB7XG4gICAgICBvdXRib3VuZDogcmVzdWx0c1swXS5vdXRib3VuZC5zb3J0KGJ5RGF0ZSksXG4gICAgICBpbmJvdW5kOiByZXN1bHRzWzBdLmluYm91bmQuc29ydChieURhdGUpXG4gICAgfTtcbiAgICByZXR1cm4gW3NvcnRlZFJlc3VsdHNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnQgcmVzdWx0cyBieSBwcmljZVxuICAgKlxuICAgKiBAcGFyYW0ge0V1cm9zdGFyUmVzdWx0c1tdfSByZXN1bHRzXG4gICAqIEByZXR1cm5zXG4gICAqIEBtZW1iZXJvZiBFdXJvc3RhckluZm9cbiAgICovXG4gIHNvcnRCeVByaWNlKHJlc3VsdHM6IEV1cm9zdGFyUmVzdWx0c1tdLCBkaXI/OiBib29sZWFuKTogRXVyb3N0YXJSZXN1bHRzW10ge1xuICAgIGNvbnN0IGJ5UHJpY2UgPSAoYTogRXVyb3N0YXJJdGVtLCBiOiBFdXJvc3Rhckl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGFQcmljZSA9XG4gICAgICAgICthLnN0YW5kYXJkRmFyZS5wcmljZSB8fCArYS5zdGFuZGFyZFByZW1pZXJGYXJlLnByaWNlIHx8ICthLmJ1c2luZXNzUHJlbWllckZhcmUucHJpY2U7XG4gICAgICBjb25zdCBiUHJpY2UgPVxuICAgICAgICArYi5zdGFuZGFyZEZhcmUucHJpY2UgfHwgK2Iuc3RhbmRhcmRQcmVtaWVyRmFyZS5wcmljZSB8fCArYi5idXNpbmVzc1ByZW1pZXJGYXJlLnByaWNlO1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gYVByaWNlIC0gYlByaWNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJQcmljZSAtIGFQcmljZTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IHtcbiAgICAgIG91dGJvdW5kOiByZXN1bHRzWzBdLm91dGJvdW5kLnNvcnQoYnlQcmljZSksXG4gICAgICBpbmJvdW5kOiByZXN1bHRzWzBdLmluYm91bmQuc29ydChieVByaWNlKVxuICAgIH07XG4gICAgcmV0dXJuIFtzb3J0ZWRSZXN1bHRzXTtcbiAgfVxuXG4gIHVwZGF0ZVNlYXJjaEZyb21FeHBpcmVkQmFza2V0SXRlbShiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLCBzZXREYXRlVGltZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hFdXJvU3RhclF1ZXJ5OiBTZWFyY2hFdXJvc3RhclF1ZXJ5VmFyaWFibGVzID0gYmFza2V0SXRlbS5zZWFyY2hRdWVyeTtcbiAgICBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeSkge1xuICAgICAgaWYgKHNldERhdGVUaW1lKSB7XG4gICAgICAgIGlmIChzZWFyY2hFdXJvU3RhclF1ZXJ5Lm91dGJvdW5kRGF0ZSkge1xuICAgICAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSBzZWFyY2hFdXJvU3RhclF1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICAgICAgPyBzZWFyY2hFdXJvU3RhclF1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICAgICAgOiBzZWFyY2hFdXJvU3RhclF1ZXJ5Lm91dGJvdW5kQXJyaXZhbFRpbWVXaW5kb3c7XG4gICAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcbiAgICAgICAgICAgIHNlYXJjaEV1cm9TdGFyUXVlcnkub3V0Ym91bmREYXRlLFxuICAgICAgICAgICAgb3V0Ym91bmRUaW1lV2luZG93XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeS5yZXR1cm5EYXRlKSB7XG4gICAgICAgICAgbGV0IHJldHVyblRpbWVXaW5kb3cgPSBzZWFyY2hFdXJvU3RhclF1ZXJ5LnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgICAgID8gc2VhcmNoRXVyb1N0YXJRdWVyeS5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgICAgICA6IHNlYXJjaEV1cm9TdGFyUXVlcnkucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3c7XG4gICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxuICAgICAgICAgICAgc2VhcmNoRXVyb1N0YXJRdWVyeS5yZXR1cm5EYXRlLFxuICAgICAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuX3Bhc3NlbmdlcnMgPSBzZWFyY2hFdXJvU3RhclF1ZXJ5LnBhc3NlbmdlcnM7XG4gICAgICB0aGlzLmFkdWx0cyA9IHRoaXMuX3Bhc3NlbmdlcnMuZmlsdGVyKChhOiBhbnkpID0+IGEudHlwZSA9PSAnQURVTFQnKS5sZW5ndGg7XG4gICAgICB0aGlzLmNoaWxkcmVuID0gdGhpcy5fcGFzc2VuZ2Vycy5maWx0ZXIoKGE6IGFueSkgPT4gYS50eXBlID09ICdDSElMRCcpLmxlbmd0aDtcbiAgICAgIHRoaXMuc2V0UXVlcnlGcm9tQmFza2V0SXRlbShiYXNrZXRJdGVtKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFRyYXZlbGxlcnNGcm9tQmFza2V0SXRlbShiYXNrZXRJdGVtKTtcbiAgfVxuXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT4pOiB2b2lkIHtcbiAgICBjb25zdCBmbGlnaHRJdGVtOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyA9XG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkZsaWdodF0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IHJhaWxJdGVtOiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMgPSBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLlJhaWxdPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCBpcmxJdGVtOiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyA9XG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgaG90ZWxJdGVtOiBTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcyA9IHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuUmFpbF0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IGNhckl0ZW06IFNlYXJjaENhckhpcmVRdWVyeVZhcmlhYmxlcyA9IHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuQ2FyXT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgbG91bmdlSXRlbTogU2VhcmNoTG91bmdlc1F1ZXJ5VmFyaWFibGVzID0gcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5Mb3VuZ2VdPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCBwYXJraW5nSXRlbTogU2VhcmNoUGFya2luZ1F1ZXJ5VmFyaWFibGVzID1cbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuUGFya2luZ10/LnNlYXJjaFF1ZXJ5O1xuICAgIGlmIChmbGlnaHRJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IG1vbWVudChcbiAgICAgICAgICAocHJldmlvdXNJdGVtcy5GTElHSFQub3V0Ym91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZSgnVCcsICcnKS5zcGxpdCgnLicpWzBdLFxuICAgICAgICAgICdZWVlZLU1NLUREaGg6bW06c3MnXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMClcbiAgICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMub3V0Qm91bmREYXRlLnN1YnRyYWN0KFxuICAgICAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzAsXG4gICAgICAgICAgICAnbWludXRlcydcbiAgICAgICAgICApO1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5GTElHSFQuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KFxuICAgICAgICAgICAgKHByZXZpb3VzSXRlbXMuRkxJR0hULmluYm91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZSgnVCcsICcnKS5zcGxpdCgnLicpWzBdLFxuICAgICAgICAgICAgJ1lZWVktTU0tRERoaDptbTpzcydcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh0aGlzLmluYm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwKVxuICAgICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaW5ib3VuZERhdGUuc3VidHJhY3QoXG4gICAgICAgICAgICAgIHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzAsXG4gICAgICAgICAgICAgICdtaW51dGVzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBldXJvc3RhciBmcm9tIGZsaWdodCBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyYWlsSXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSBtb21lbnQoXG4gICAgICAgICAgKHByZXZpb3VzSXRlbXMuUkFJTC5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKCdUJywgJycpLnNwbGl0KCcuJylbMF0sXG4gICAgICAgICAgJ1lZWVktTU0tRERoaDptbTpzcydcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMub3V0Qm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwKVxuICAgICAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5vdXRCb3VuZERhdGUuc3VidHJhY3QoXG4gICAgICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCxcbiAgICAgICAgICAgICdtaW51dGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLlJBSUwuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KFxuICAgICAgICAgICAgKHByZXZpb3VzSXRlbXMuUkFJTC5pbmJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoJ1QnLCAnJykuc3BsaXQoJy4nKVswXSxcbiAgICAgICAgICAgICdZWVlZLU1NLUREaGg6bW06c3MnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMClcbiAgICAgICAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmluYm91bmREYXRlLnN1YnRyYWN0KFxuICAgICAgICAgICAgICB0aGlzLmluYm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwLFxuICAgICAgICAgICAgICAnbWludXRlcydcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgZXVyb3N0YXIgZnJvbSByYWlsIGl0ZW0nKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlybEl0ZW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gbW9tZW50KFxuICAgICAgICAgIChwcmV2aW91c0l0ZW1zLklOVEVSTkFUSU9OQUxfUkFJTC5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKCdUJywgJycpLnNwbGl0KCcuJylbMF0sXG4gICAgICAgICAgJ1lZWVktTU0tRERoaDptbTpzcydcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMub3V0Qm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwKVxuICAgICAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5vdXRCb3VuZERhdGUuc3VidHJhY3QoXG4gICAgICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCxcbiAgICAgICAgICAgICdtaW51dGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLklOVEVSTkFUSU9OQUxfUkFJTC5pbmJvdW5kRGF0ZSkge1xuICAgICAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSBtb21lbnQoXG4gICAgICAgICAgICAocHJldmlvdXNJdGVtcy5JTlRFUk5BVElPTkFMX1JBSUwuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKCdUJywgJycpLnNwbGl0KCcuJylbMF0sXG4gICAgICAgICAgICAnWVlZWS1NTS1ERGhoOm1tOnNzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzApXG4gICAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5pbmJvdW5kRGF0ZS5zdWJ0cmFjdChcbiAgICAgICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCxcbiAgICAgICAgICAgICAgJ21pbnV0ZXMnXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGV1cm9zdGFyIGZyb20gaW50ZXJuYXRpb25hbCByYWlsIGl0ZW0nKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhvdGVsSXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSBtb21lbnQoXG4gICAgICAgICAgKHByZXZpb3VzSXRlbXMuSE9URUwub3V0Ym91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZSgnVCcsICcnKS5zcGxpdCgnLicpWzBdLFxuICAgICAgICAgICdZWVlZLU1NLUREaGg6bW06c3MnXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMClcbiAgICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMub3V0Qm91bmREYXRlLnN1YnRyYWN0KFxuICAgICAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzAsXG4gICAgICAgICAgICAnbWludXRlcydcbiAgICAgICAgICApO1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5IT1RFTC5pbmJvdW5kRGF0ZSkge1xuICAgICAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSBtb21lbnQoXG4gICAgICAgICAgICAocHJldmlvdXNJdGVtcy5IT1RFTC5pbmJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoJ1QnLCAnJykuc3BsaXQoJy4nKVswXSxcbiAgICAgICAgICAgICdZWVlZLU1NLUREaGg6bW06c3MnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMClcbiAgICAgICAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmluYm91bmREYXRlLnN1YnRyYWN0KFxuICAgICAgICAgICAgICB0aGlzLmluYm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwLFxuICAgICAgICAgICAgICAnbWludXRlcydcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgZXVyb3N0YXIgZnJvbSBob3RlbCBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYXJJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IG1vbWVudChcbiAgICAgICAgICAocHJldmlvdXNJdGVtcy5DQVIub3V0Ym91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZSgnVCcsICcnKS5zcGxpdCgnLicpWzBdLFxuICAgICAgICAgICdZWVlZLU1NLUREaGg6bW06c3MnXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMClcbiAgICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMub3V0Qm91bmREYXRlLnN1YnRyYWN0KFxuICAgICAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzAsXG4gICAgICAgICAgICAnbWludXRlcydcbiAgICAgICAgICApO1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5DQVIuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KFxuICAgICAgICAgICAgKHByZXZpb3VzSXRlbXMuQ0FSLmluYm91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZSgnVCcsICcnKS5zcGxpdCgnLicpWzBdLFxuICAgICAgICAgICAgJ1lZWVktTU0tRERoaDptbTpzcydcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh0aGlzLmluYm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwKVxuICAgICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaW5ib3VuZERhdGUuc3VidHJhY3QoXG4gICAgICAgICAgICAgIHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzAsXG4gICAgICAgICAgICAgICdtaW51dGVzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBldXJvc3RhciBmcm9tIGNhciBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChsb3VuZ2VJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IG1vbWVudChcbiAgICAgICAgICAocHJldmlvdXNJdGVtcy5MT1VOR0Uub3V0Ym91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZSgnVCcsICcnKS5zcGxpdCgnLicpWzBdLFxuICAgICAgICAgICdZWVlZLU1NLUREaGg6bW06c3MnXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMClcbiAgICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMub3V0Qm91bmREYXRlLnN1YnRyYWN0KFxuICAgICAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzAsXG4gICAgICAgICAgICAnbWludXRlcydcbiAgICAgICAgICApO1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5MT1VOR0UuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KFxuICAgICAgICAgICAgKHByZXZpb3VzSXRlbXMuTE9VTkdFLmluYm91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZSgnVCcsICcnKS5zcGxpdCgnLicpWzBdLFxuICAgICAgICAgICAgJ1lZWVktTU0tRERoaDptbTpzcydcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh0aGlzLmluYm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwKVxuICAgICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaW5ib3VuZERhdGUuc3VidHJhY3QoXG4gICAgICAgICAgICAgIHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzAsXG4gICAgICAgICAgICAgICdtaW51dGVzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBldXJvc3RhciBmcm9tIGxvdW5nZSBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwYXJraW5nSXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSBtb21lbnQoXG4gICAgICAgICAgKHByZXZpb3VzSXRlbXMuUEFSS0lORy5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKCdUJywgJycpLnNwbGl0KCcuJylbMF0sXG4gICAgICAgICAgJ1lZWVktTU0tRERoaDptbTpzcydcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMub3V0Qm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwKVxuICAgICAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5vdXRCb3VuZERhdGUuc3VidHJhY3QoXG4gICAgICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCxcbiAgICAgICAgICAgICdtaW51dGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLlBBUktJTkcuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KFxuICAgICAgICAgICAgKHByZXZpb3VzSXRlbXMuUEFSS0lORy5pbmJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoJ1QnLCAnJykuc3BsaXQoJy4nKVswXSxcbiAgICAgICAgICAgICdZWVlZLU1NLUREaGg6bW06c3MnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMClcbiAgICAgICAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmluYm91bmREYXRlLnN1YnRyYWN0KFxuICAgICAgICAgICAgICB0aGlzLmluYm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwLFxuICAgICAgICAgICAgICAnbWludXRlcydcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgZXVyb3N0YXIgZnJvbSBwYXJraW5nIGl0ZW0nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRUb3RhbEJhZ2dhZ2UocmVzdWx0OiBGbGlnaHRJdGluZXJhcnkpOiBudW1iZXIge1xuICAgIGxldCB0b3RhbCA9IDA7XG5cbiAgICBjb25zdCBwYXJzZWRBZGRpdGlvbmFsID0gSlNPTi5wYXJzZShyZXN1bHQuYWRkaXRpb25hbCk7XG4gICAgaWYgKHBhcnNlZEFkZGl0aW9uYWwgJiYgcGFyc2VkQWRkaXRpb25hbC5vdXRib3VuZEZsaWdodHMpIHtcbiAgICAgIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzLmZvckVhY2goKGZsaWdodDogYW55KSA9PiB7XG4gICAgICAgIGZsaWdodC5iYWdnYWdlLmZvckVhY2goKGJhZzogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGJhZy5hbGxvd2FuY2UgJiYgYmFnLmFsbG93YW5jZSA+IHRvdGFsKSB7XG4gICAgICAgICAgICB0b3RhbCA9IGJhZy5hbGxvd2FuY2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAocGFyc2VkQWRkaXRpb25hbCAmJiBwYXJzZWRBZGRpdGlvbmFsLmJhZ2dhZ2VBbGxvd2FuY2UpIHtcbiAgICAgIHBhcnNlZEFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZS5mb3JFYWNoKChiYWdnYWdlQWxsb3c6IGFueSkgPT4ge1xuICAgICAgICBpZiAoYmFnZ2FnZUFsbG93LmJhZ2dhZ2UucXR5ICYmIE51bWJlcihiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkpID4gdG90YWwpIHtcbiAgICAgICAgICB0b3RhbCA9IE51bWJlcihiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG90YWw7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2l2ZSB0aGUgY29ycmVjdCBmb3JtYXQgZm9yIHRyYW5zZmVyaW5nIG1pbnVldGVzIG9uIHRoZSBzbGlkZXJzXG4gICAqIEBwYXJhbSBtaW4gLSB0aGUgbWluIGluIDEwMHRoJ3MgdG8gdHJhbnNmb3JtIG9udG8gNjB0aCdzXG4gICAqL1xuICB0cmFuc2Zvcm1NaW4obWluOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGxldCBudW0gPSAoTnVtYmVyKG1pbikgKiA2MCkgLyAxMDA7XG4gICAgLy8gY29uc29sZS5sb2coJysrKyBOdW0gQ29weTogJywgXy5jbG9uZShudW0pLCAnICsrKycpO1xuICAgIGlmIChudW0gJSAxIDwgMC41KSB7XG4gICAgICBudW0gPSBNYXRoLmZsb29yKG51bSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG51bSA9IE1hdGguY2VpbChudW0pO1xuICAgIH1cblxuICAgIHJldHVybiBudW0udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGFwcGx5IGFsbCBmaWx0ZXJzIHRvIHJlc3VsdHNcbiAgICogQHBhcmFtIGZpbHRlcnNcbiAgICogQHBhcmFtIGluYm91bmRcbiAgICogQHBhcmFtIHJlc3VsdHNcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFwcGx5RmlsdGVycyhmaWx0ZXJzOiBGbGlnaHRGaWx0ZXJzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZnVsbFJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XG4gICAgfVxuXG4gICAgLy8gbmVlZCB0byBmaWx0ZXIgb3ZlciB0aGUgdGltZXMsIHN0b3BzIGFuZCBwcmljZSwgdGhvdWdoIHByaWNlIGFuZCBzdG9wcyBhbHdheXMgc2VlbSB0byBiZSB0aGUgc2FtZVxuXG4gICAgLy8gISAtIFZBUklPVVMgRlVOQ1RJT05TIFRPIFBBU1MgSU4gVE8gRE8gVEhFIEFDVFVBTCBGSUxURVJJTkdcblxuICAgIGNvbnN0IHRlc3RlciA9IChcbiAgICAgIGZpbHRlcnNUb3Rlc3Q6IFJlY29yZDxudW1iZXIgfCBzdHJpbmcsIFNlbGVjdEZpbHRlcj4sXG4gICAgICB0ZXN0RnVuY3Rpb246IChcbiAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5LFxuICAgICAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyXG4gICAgICApID0+IGJvb2xlYW5cbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gT2JqZWN0LnZhbHVlcyhmaWx0ZXJzVG90ZXN0KT8uZmlsdGVyKFxuICAgICAgICAoZmlsdGVyOiBTZWxlY3RGaWx0ZXIpID0+IGZpbHRlci5zZWxlY3RlZFxuICAgICAgKTtcbiAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IHtcbiAgICAgICAgICByZXR1cm4gISFzZWxlY3RlZC5maW5kKChmaWx0ZXI6IFNlbGVjdEZpbHRlcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRlc3RGdW5jdGlvbihmbGlnaHRJdGluZXJhcnksIGZpbHRlci52YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKF9mbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaXNUaW1lQmV0d2VlbiA9IChcbiAgICAgIG1pbm1heDogTWluTWF4LFxuICAgICAgZmllbGQ6IHN0cmluZ1xuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gbW9tZW50KFxuICAgICAgICAgIHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxuICAgICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXG4gICAgICAgICAgKVxuICAgICAgICApLmdldCgnaG91cicpO1xuXG4gICAgICAgIGNvbnN0IHRvdGFsVGltZTogbnVtYmVyID0gTnVtYmVyKFxuICAgICAgICAgIGAke3ZhbC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdG90YWxUaW1lID49IG1pbm1heC5taW4gJiYgdG90YWxUaW1lIDw9IG1pbm1heC5tYXg7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCByZXBsYWNlRmllbGRzID0gKGZpZWxkOiBzdHJpbmcsIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBmaWVsZFxuICAgICAgICAucmVwbGFjZSgnT1VUQk9VTkRfREVQQVJUVVJFJywgJ291dGJvdW5kRmxpZ2h0cy4wJylcbiAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgJ09VVEJPVU5EX0FSUklWQUwnLFxuICAgICAgICAgICdvdXRib3VuZEZsaWdodHMuJyArIChmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggLSAxKVxuICAgICAgICApXG4gICAgICAgIC5yZXBsYWNlKCdJTkJPVU5EX0RFUEFSVFVSRScsICdpbmJvdW5kRmxpZ2h0cy4wJylcbiAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgJ0lOQk9VTkRfQVJSSVZBTCcsXG4gICAgICAgICAgJ2luYm91bmRGbGlnaHRzLicgKyAoKGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSk/Lmxlbmd0aCAtIDEpXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzQmV0d2VlbiA9IChcbiAgICAgIG1pbm1heDogTWluTWF4LFxuICAgICAgZmllbGQ6IHN0cmluZ1xuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxuICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdmFsID49IG1pbm1heC5taW4gJiYgdmFsIDw9IG1pbm1heC5tYXg7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBmaWVsZEhhc1ZhbHVlID0gKFxuICAgICAgZmllbGQ6IGtleW9mIEZsaWdodEpvdXJuZXlcbiAgICApOiAoKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4gYm9vbGVhbikgPT4ge1xuICAgICAgcmV0dXJuIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGZsaWdodFtmaWVsZF0gPT09IHZhbHVlO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgLy8gISAtIE91dGJvdW5kIGFuZCBJbmJvdW5kIEZpbHRlcnNcblxuICAgIGNvbnN0IG91dEl0aW5lcmFyeVRlc3RlcnM6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pW10gPSBbXTtcbiAgICBjb25zdCBpbkl0aW5lcmFyeVRlc3RlcnM6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pW10gPSBbXTtcblxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIGlzVGltZUJldHdlZW4oZmlsdGVycy5hcnJpdmFsVGltZSwgJ09VVEJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZycpXG4gICAgKTtcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMuZGVwYXJ0dXJlVGltZSwgJ09VVEJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZycpXG4gICAgKTtcblxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5wcmljZSwgJ3RvdGFsLnByaWNlJykpO1xuXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUsICdJTkJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZycpXG4gICAgKTtcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIGlzVGltZUJldHdlZW4oZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLCAnSU5CT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnKVxuICAgICk7XG5cbiAgICAvLyAhIC0gVGVzdGVyc1xuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihcbiAgICAgICAgZmlsdGVycy50cmF2ZWxQb2xpY3ksXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNSZWFzb24gPSBmbGlnaHRJdGluZXJhcnkudW5hdmFpbGFibGVcbiAgICAgICAgICAgID8gVHJhdmVsUG9saWNpZXMuVU5BVkFJTEFCTEVcbiAgICAgICAgICAgIDogZmxpZ2h0SXRpbmVyYXJ5LnJlcXVpcmVzUmVhc29uS2V5c1xuICAgICAgICAgICAgPyBUcmF2ZWxQb2xpY2llcy5BTExPV19XSVRIX1JFQVNPTlxuICAgICAgICAgICAgOiBUcmF2ZWxQb2xpY2llcy5JTl9QT0xJQ1k7XG4gICAgICAgICAgcmV0dXJuIHJlcXVpcmVzUmVhc29uID09PSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBvdXRKb3VybmV5VGVzdGVyczogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IGJvb2xlYW4pW10gPSBbXTtcblxuICAgIG91dEpvdXJuZXlUZXN0ZXJzLnB1c2godGVzdGVyKGZpbHRlcnMuY2xhc3NlcywgZmllbGRIYXNWYWx1ZSgnY2FiaW5DbGFzcycpKSk7XG5cbiAgICBjb25zdCBpbkpvdXJuZXlUZXN0ZXJzOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSkgPT4gYm9vbGVhbilbXSA9IFtdO1xuXG4gICAgaW5Kb3VybmV5VGVzdGVycy5wdXNoKHRlc3RlcihmaWx0ZXJzLmNsYXNzZXMsIGZpZWxkSGFzVmFsdWUoJ2NhYmluQ2xhc3MnKSkpO1xuXG4gICAgLy8gIS0gSXRpbmVyYXJpZXNcbiAgICBjb25zdCBvdXRGaWx0ZXJJdGluZXJhcmllcyA9IChcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LFxuICAgICAgZ3JvdXBJbmRleDogbnVtYmVyXG4gICAgKTogYm9vbGVhbiA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnJlZHVjZShcbiAgICAgICAgICAoYWNjOiBib29sZWFuLCB0ZXN0ZXIxOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGFjYyA9IGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApICYmXG4gICAgICAgICghZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fFxuICAgICAgICAgICEhKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoXG4gICAgICAgICAgICAoZmxpZ2h0Sm91cm5leTogRmxpZ2h0Sm91cm5leSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gISFvdXRKb3VybmV5VGVzdGVycy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSkgPT4gYm9vbGVhblxuICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICkpXG4gICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCBpbkZpbHRlckl0aW5lcmFyaWVzID0gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCBncm91cEluZGV4OiBudW1iZXIpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGluSXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXG4gICAgICAgICAgKGFjYzogYm9vbGVhbiwgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjEoZmxpZ2h0SXRpbmVyYXJ5KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKSAmJlxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoIHx8XG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5maW5kKChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gISFpbkpvdXJuZXlUZXN0ZXJzLnJlZHVjZShcbiAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcbiAgICAgICAgICAgICAgICB0ZXN0ZXIyOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiBib29sZWFuXG4gICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIG5vdyBmaW5hbGx5IHBlcmZvcm0gdGhlIGZpbHRlcmluZyBhbmQgZ28gb3ZlciB0aGUgcmVzdWx0c1xuICAgIC8vIFRPRE8gLSBhZGQgdGhlIGFkZGl0aW9uYWwgc3R1ZmYgbmVlZGVkIGZvciBHcm91cGVkRmxpZ2h0cyAoTGlnaHRuaW5nKVxuXG4gICAgY29uc3QgZnVsbFJlc3VsdHNDbG9uZSA9IDxhbnk+dGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuZnVsbFJlc3VsdHMpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmdWxsUmVzdWx0c0Nsb25lLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmdWxsUmVzdWx0ID0gZnVsbFJlc3VsdHNDbG9uZVtpXTtcbiAgICAgIGZ1bGxSZXN1bHQuam91cm5leXMgPSBmdWxsUmVzdWx0LmpvdXJuZXlzPy5maWx0ZXIob3V0RmlsdGVySXRpbmVyYXJpZXMpO1xuXG4gICAgICBpZiAodGhpcy5pc1JldHVybikge1xuICAgICAgICBmdWxsUmVzdWx0LmpvdXJuZXlzID0gZnVsbFJlc3VsdC5qb3VybmV5cz8uZmlsdGVyKGluRmlsdGVySXRpbmVyYXJpZXMpO1xuICAgICAgfVxuXG4gICAgICBmdWxsUmVzdWx0LmpvdXJuZXlzID0gZnVsbFJlc3VsdC5qb3VybmV5cztcbiAgICB9XG5cbiAgICB0aGlzLnJlc3VsdHMubmV4dChmdWxsUmVzdWx0c0Nsb25lKTtcbiAgfVxuXG4gIGFzeW5jIHNlbGVjdEdyb3VwZWRFdXJvc3RhcihcbiAgICBzZWxlY3RlZEV1cm9zdGFyOiBFdXJvc3Rhckl0ZW0sXG4gICAgZmFyZTogRXVyb3N0YXJGYXJlLFxuICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bVxuICApIHtcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XG4gICAgLy8gb25lIHdheSBlYXN5XG4gICAgaWYgKFxuICAgICAgYmFza2V0ICYmXG4gICAgICB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBFdXJvc3RhclNlYXJjaFR5cGUub25lV2F5ICYmXG4gICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcbiAgICApIHtcbiAgICAgIGNvbnN0IG91dGJvdW5kRmxpZ2h0cyA9IGZhcmUuZmFyZS5tYXAoaXRlbSA9PlxuICAgICAgICB0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGl0ZW0sIFJlc3VsdFR5cGUuT3V0Ym91bmQsIDApXG4gICAgICApO1xuICAgICAgdGhpcy5kb0Jvb2tpbmcoXG4gICAgICAgIGludEJhc2tldCxcbiAgICAgICAgc2VsZWN0ZWRFdXJvc3RhcixcbiAgICAgICAge1xuICAgICAgICAgIG91dGJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICBpbmJvdW5kRmxpZ2h0czogW10sXG4gICAgICAgICAgam91cm5leVR5cGU6ICdzaW5nbGUnXG4gICAgICAgIH0sXG4gICAgICAgIHNlbGVjdGVkRXVyb3N0YXIuZGF0ZURlcGFydHVyZSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgZmFyZS5wcmljZSxcbiAgICAgICAgZmFyZS5yZXF1aXJlc1JlYXNvbktleXMsXG4gICAgICAgIGZhcmUudW5hdmFpbGFibGVcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIHJldHVybiBsb2dpYyBuZWVkcyB1cGRhdGluZyAtIGVpdGhlciBhY2NlcHQgb3V0Ym91bmQgb3IgcmV0dXJuIGFuZCBzb21laG93IGRpc3RpZ3Vpc2ggdGhlbVxuICAgIGlmIChiYXNrZXQgJiYgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVybikge1xuICAgICAgLy8gY2xpY2tlZCBvbiBhbiBvdXRib3VuZCBldXJvc3RhclxuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZCkge1xuICAgICAgICAvLyBnaXZlbiB0aGUgb3V0Ym91bmQgYnV0IHdlIGFscmVhZHkgaGF2ZSBpbmJvdW5kIHNlbGVjdGVkXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhcj8uZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkluYm91bmQpIHtcbiAgICAgICAgICAvLyBFTlQtNzczNSB3ZSBub3cgYWRkIGluIG9yZGVyIHNvIGluYm91bmQgbGVnIGlzIHRoZSBjb3JyZWN0IHByaWNlXG4gICAgICAgICAgY29uc3QgcHJpY2UgPSBmYXJlLnByaWNlO1xuICAgICAgICAgIGNvbnN0IGluYm91bmRGbGlnaHRzID0gdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbS5mYXJlLm1hcChpdGVtID0+XG4gICAgICAgICAgICB0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGl0ZW0sIFJlc3VsdFR5cGUuSW5ib3VuZCwgMClcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IG91dGJvdW5kRmxpZ2h0cyA9IGZhcmUuZmFyZS5tYXAoaXRlbSA9PlxuICAgICAgICAgICAgdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhpdGVtLCBSZXN1bHRUeXBlLk91dGJvdW5kLCAwKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5kb0Jvb2tpbmcoXG4gICAgICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgICAgICBzZWxlY3RlZEV1cm9zdGFyLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbmJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgICAgb3V0Ym91bmRGbGlnaHRzLFxuICAgICAgICAgICAgICBqb3VybmV5VHlwZTogJ3JvdW5kdHJpcCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWxlY3RlZEV1cm9zdGFyLmRhdGVEZXBhcnR1cmUsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhci5pdGVtLmRhdGVBcnJpdmFsLFxuICAgICAgICAgICAgcHJpY2UsXG4gICAgICAgICAgICBmYXJlLnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgICAgICAgIGZhcmUudW5hdmFpbGFibGVcblxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkRmFyZXMoKTtcbiAgICAgICAgICB0aGlzLmJhc2tldFNlcnZpY2UudG9nZ2xlTWVudSgpO1xuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KCh0aGlzLmZ1bGxSZXN1bHRzIGFzIEV1cm9zdGFyUmVzdWx0c1tdKS5tYXAodGhpcy5yZW1vdmVTZWxlY3RlZEZsYWdzKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXI/LmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZCkge1xuICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZEZhcmVzKCk7XG4gICAgICAgICAgLy8gd2UgaGF2ZSBhbiBvdXRib3VuZCBhbHJlYWR5IHNlbGVjdGVkIC0gZGVzZWxlY3QgaXRcbiAgICAgICAgICB0aGlzLnJlc3VsdHMubmV4dCh0aGlzLmZ1bGxSZXN1bHRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB3ZSBkb250IGhhdmUgYW4gaW5ib3VuZCBzZWxlY3RlZFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyID0ge1xuICAgICAgICAgICAgaXRlbTogc2VsZWN0ZWRFdXJvc3RhcixcbiAgICAgICAgICAgIGRpcmVjdGlvblxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUgPSB7XG4gICAgICAgICAgICBpdGVtOiBmYXJlLFxuICAgICAgICAgICAgZGlyZWN0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHNlbGVjdGVkRXVyb3N0YXIudWlkO1xuICAgICAgICAgIC8vIGZpbHRlciBvbiBvdXRib3VuZHMgYXMgd2UgaGF2ZSBzZWxlY3RlZCBhbmQgYWRkZWQgYW4gb3V0Ym91bmRcbiAgICAgICAgICB0aGlzLnJlc3VsdHMubmV4dChcbiAgICAgICAgICAgICh0aGlzLmZ1bGxSZXN1bHRzIGFzIEV1cm9zdGFyUmVzdWx0c1tdKS5tYXAoKHJlc3VsdDogRXVyb3N0YXJSZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kID0gcmVzdWx0Lm91dGJvdW5kLmZpbHRlcigoaXRlbTogRXVyb3N0YXJJdGVtKSA9PiBpbmRleCA9PT0gaXRlbS51aWQpO1xuICAgICAgICAgICAgICByZXR1cm4geyBpbmJvdW5kOiByZXN1bHQuaW5ib3VuZCwgb3V0Ym91bmQgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uSW5ib3VuZCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXI/LmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZCkge1xuICAgICAgICAgIGxldCBwcmljZTtcbiAgICAgICAgICAvL0lmIGNsYXNzZXMgYXJlIGRpZmZlcmVudCwgZmFyZSByZWNhbGN1bGF0ZXMgc28gbm8gaXNzdWUsIGJ1dCBpZiB0aGUgc2FtZSBjbGFzcyB1c2UgbW9yZSBleHBlbnNpdmUgZmFyZSBwcmljZVxuICAgICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZS5pdGVtLmNsYXNzID09PSBmYXJlLmNsYXNzICYmIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlLml0ZW0ucHJpY2UgPiBmYXJlLnByaWNlKSB7XG4gICAgICAgICAgICBwcmljZSA9IHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlLml0ZW0ucHJpY2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByaWNlID0gZmFyZS5wcmljZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgb3V0Ym91bmRGbGlnaHRzID0gdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbS5mYXJlLm1hcChpdGVtID0+XG4gICAgICAgICAgICB0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGl0ZW0sIFJlc3VsdFR5cGUuT3V0Ym91bmQsIDApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBpbmJvdW5kRmxpZ2h0cyA9IGZhcmUuZmFyZS5tYXAoaXRlbSA9PlxuICAgICAgICAgICAgdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhpdGVtLCBSZXN1bHRUeXBlLkluYm91bmQsIDApXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmRvQm9va2luZyhcbiAgICAgICAgICAgIGludEJhc2tldCxcbiAgICAgICAgICAgIHNlbGVjdGVkRXVyb3N0YXIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG91dGJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgICAgaW5ib3VuZEZsaWdodHMsXG4gICAgICAgICAgICAgIGpvdXJuZXlUeXBlOiAncm91bmR0cmlwJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyLml0ZW0uZGF0ZURlcGFydHVyZSxcbiAgICAgICAgICAgIHNlbGVjdGVkRXVyb3N0YXIuZGF0ZUFycml2YWwsXG4gICAgICAgICAgICBwcmljZSxcbiAgICAgICAgICAgIGZhcmUucmVxdWlyZXNSZWFzb25LZXlzLFxuICAgICAgICAgICAgZmFyZS51bmF2YWlsYWJsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkRmFyZXMoKTtcbiAgICAgICAgICB0aGlzLmJhc2tldFNlcnZpY2UudG9nZ2xlTWVudSgpO1xuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KCh0aGlzLmZ1bGxSZXN1bHRzIGFzIEV1cm9zdGFyUmVzdWx0c1tdKS5tYXAodGhpcy5yZW1vdmVTZWxlY3RlZEZsYWdzKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXI/LmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5JbmJvdW5kKSB7XG4gICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkRmFyZXMoKTtcblxuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KHRoaXMuZnVsbFJlc3VsdHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyID0ge1xuICAgICAgICAgICAgaXRlbTogc2VsZWN0ZWRFdXJvc3RhcixcbiAgICAgICAgICAgIGRpcmVjdGlvblxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUgPSB7XG4gICAgICAgICAgICBpdGVtOiBmYXJlLFxuICAgICAgICAgICAgZGlyZWN0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHNlbGVjdGVkRXVyb3N0YXIudWlkO1xuICAgICAgICAgIC8vIGZpbHRlciBvbiBvdXRib3VuZHMgYXMgd2UgaGF2ZSBzZWxlY3RlZCBhbmQgYWRkZWQgYW4gb3V0Ym91bmRcbiAgICAgICAgICB0aGlzLnJlc3VsdHMubmV4dChcbiAgICAgICAgICAgICh0aGlzLmZ1bGxSZXN1bHRzIGFzIEV1cm9zdGFyUmVzdWx0c1tdKS5tYXAoKHJlc3VsdDogRXVyb3N0YXJSZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGluYm91bmQgPSByZXN1bHQuaW5ib3VuZC5maWx0ZXIoKGl0ZW06IEV1cm9zdGFySXRlbSkgPT4gaW5kZXggPT09IGl0ZW0udWlkKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgaW5ib3VuZCwgb3V0Ym91bmQ6IHJlc3VsdC5vdXRib3VuZCB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRyYXZlbFBvbGljaWVzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVUcmF2ZWxQb2xpY2llcygpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIgfHxcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbS5qb3VybmV5SGFzaF0gfHxcbiAgICAgICF0aGlzLm11bHRpIHx8XG4gICAgICB0aGlzLm11bHRpLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtdWx0aUluYm91bmRzID0gKHRoaXMubXVsdGkgfHwgW10pLnJlZHVjZShcbiAgICAgIChhY2M6IEZsaWdodEl0aW5lcmFyeVtdLCBpdGVtOiBFdXJvc3Rhck11bHRpKSA9PiB7XG4gICAgICAgIGlmIChpdGVtLm9yZGVyID09PSAxICYmIGl0ZW0ucmVzdWx0cyAmJiBpdGVtLnJlc3VsdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGFjYyA9IGFjYy5jb25jYXQoaXRlbS5yZXN1bHRzIGFzIEZsaWdodEl0aW5lcmFyeVtdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIFtdXG4gICAgKTtcbiAgICBpZiAobXVsdGlJbmJvdW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIXRoaXMucmF3UmVzdWx0cykge1xuICAgICAgICB0aGlzLnJhd1Jlc3VsdHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lICsgJ19yYXcnKTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2codGhpcy5yYXdSZXN1bHRzKTtcbiAgICAgIHRoaXMuYXBwbHlGbGlnaHRSdWxlc1xuICAgICAgICAuZmV0Y2hPbmUoe1xuICAgICAgICAgIHNlbGVjdGVkT3V0Ym91bmRGbGlnaHQ6IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCxcbiAgICAgICAgICBhdmFpbGFibGVJbmJvdW5kRmxpZ2h0czogbXVsdGlJbmJvdW5kcyxcbiAgICAgICAgICBzZWFyY2hJZDogdGhpcy5yYXdSZXN1bHRzLnNlYXJjaElkXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJ1bGVzOiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSkgPT4ge1xuICAgICAgICAgIGlmIChydWxlcykge1xuICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkgPSB0aGlzLmhlbHBlcnMubWVyZ2VPYmplY3RzKHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LCBydWxlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXNldFNlbGVjdGVkRmFyZXMoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIgPSB7XG4gICAgICBkaXJlY3Rpb246IG51bGwsXG4gICAgICBpdGVtOiBudWxsXG4gICAgfTtcbiAgICB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZSA9IHtcbiAgICAgIGRpcmVjdGlvbjogbnVsbCxcbiAgICAgIGl0ZW06IG51bGxcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlU2VsZWN0ZWRGbGFncyhyZXN1bHQ6IEV1cm9zdGFyUmVzdWx0cyk6IEV1cm9zdGFyUmVzdWx0cyB7XG4gICAgY29uc3QgaW5ib3VuZCA9IHJlc3VsdC5pbmJvdW5kLm1hcCgoaXRlbTogRXVyb3N0YXJJdGVtKSA9PiB7XG4gICAgICBpdGVtLnN0YW5kYXJkUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIGl0ZW0uc3RhbmRhcmRGYXJlLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICBpdGVtLmJ1c2luZXNzUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0pO1xuICAgIGNvbnN0IG91dGJvdW5kID0gcmVzdWx0Lm91dGJvdW5kLm1hcCgoaXRlbTogRXVyb3N0YXJJdGVtKSA9PiB7XG4gICAgICBpdGVtLnN0YW5kYXJkUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIGl0ZW0uc3RhbmRhcmRGYXJlLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICBpdGVtLmJ1c2luZXNzUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0pO1xuICAgIHJldHVybiB7IGluYm91bmQsIG91dGJvdW5kIH07XG4gIH1cblxuICB1cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzOiBFdXJvc3RhclF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCB8fCB0aGlzLnNlYXJjaFNlcnZpY2UuaXNFdXJvU3Rhckdyb3VwZWQoKSkgcmV0dXJuO1xuICAgIGNvbnN0IHJlc3VsdCA9IHJlc3VsdHNbMF0gYXMgRXVyb3N0YXJRdW90ZVJlc3VsdDtcbiAgICBjb25zdCBqb3VybmV5cyA9IHJlc3VsdC5qb3VybmV5cztcbiAgICBpZiAoIWpvdXJuZXlzLmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IGN1cnJlbmN5ID0gam91cm5leXNbMF0udG90YWwuY3VycmVuY3k7XG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcbiAgICAgIChjaGVhcGVzdFByaWNlOiBJQ2hlYXBlc3RQcmljZSwgcmVzdWx0OiBGbGlnaHRJdGluZXJhcnkpID0+IHtcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQudG90YWwucHJpY2U7XG4gICAgICAgIGlmIChjaGVhcGVzdFByaWNlLmFtb3VudCA+IHByaWNlKSBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xuICAgICAgICByZXR1cm4gY2hlYXBlc3RQcmljZTtcbiAgICAgIH0sXG4gICAgICB7IGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbmN5Q29kZTogY3VycmVuY3kgfVxuICAgICk7XG4gIH1cblxuICBhc3luYyBkb0Jvb2tpbmcoXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcbiAgICBzZWxlY3RlZEZsaWdodDogRXVyb3N0YXJJdGVtLFxuICAgIHNjaGVtYURldGFpbHM6IGFueSxcbiAgICBvdXRib3VuZERhdGU6IHN0cmluZyxcbiAgICBpbmJvdW5kRGF0ZTogc3RyaW5nLFxuICAgIHByaWNlOiBudW1iZXIsXG4gICAgcmVxdWlyZXNSZWFzb25LZXlzOiBzdHJpbmdbXSxcbiAgICBhZ2VudE92ZXJyb2RlVW5hdmFpbGFibGUgPSBmYWxzZVxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcbiAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBzZWxlY3RlZEZsaWdodDtcblxuICAgIGxldCBmYXJlID0gbnVsbDtcblxuICAgIGlmIChwcmljZSA9PT0gc2VsZWN0ZWRGbGlnaHQuc3RhbmRhcmRGYXJlPy5wcmljZSkge1xuICAgICAgZmFyZSA9IHNlbGVjdGVkRmxpZ2h0LnN0YW5kYXJkRmFyZTtcbiAgICB9XG5cbiAgICBpZiAocHJpY2UgPT09IHNlbGVjdGVkRmxpZ2h0LmJ1c2luZXNzUHJlbWllckZhcmU/LnByaWNlKSB7XG4gICAgICBmYXJlID0gc2VsZWN0ZWRGbGlnaHQuYnVzaW5lc3NQcmVtaWVyRmFyZTtcbiAgICB9XG5cbiAgICBpZiAocHJpY2UgPT09IHNlbGVjdGVkRmxpZ2h0LnN0YW5kYXJkUHJlbWllckZhcmU/LnByaWNlKSB7XG4gICAgICBmYXJlID0gc2VsZWN0ZWRGbGlnaHQuc3RhbmRhcmRQcmVtaWVyRmFyZTtcbiAgICB9XG5cbiAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcbiAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXG4gICAgICBiYXNrZXQ6IGludEJhc2tldC5pZCxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxuICAgICAgY28yUGVySXRlbSxcbiAgICAgIGNvMlBlclBhc3NlbmdlcixcbiAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXG4gICAgICBkZXRhaWw6IHNjaGVtYURldGFpbHMsXG4gICAgICBwcmljZSxcbiAgICAgIHNlYXJjaFF1ZXJ5OiB0aGlzLnJlc3VsdFF1ZXJ5LFxuICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcbiAgICAgIG91dGJvdW5kRGF0ZSxcbiAgICAgIGxvd2VzdFByaWNlOiB0aGlzLmxvd2VzdFByaWNlPy5hbW91bnQsXG4gICAgICBsb3dlc3RQcmljZUN1cnJlbmN5OiA8Q3VycmVuY3lDb2RlPnRoaXMubG93ZXN0UHJpY2U/LmN1cnJlbmN5Q29kZSxcbiAgICAgIHJlYXNvbktleXM6IHJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgIGFnZW50T3ZlcnJvZGVVbmF2YWlsYWJsZVxuICAgIH07XG4gICAgaWYgKGluYm91bmREYXRlKSB7XG4gICAgICBib29raW5nLmluYm91bmREYXRlID0gaW5ib3VuZERhdGU7XG4gICAgfVxuICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcbiAgICAgIGJvb2tpbmcsXG4gICAgICBpbnRCYXNrZXQsXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXG4gICAgICB0aGlzLnRyYXZlbGxlcnMsXG4gICAgICByZXF1aXJlc1JlYXNvbktleXNcbiAgICApO1xuICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcbiAgICAgIHRoaXMucmVzZWFyY2hXaXRoTmV3VXNlcigpO1xuICAgIH1cbiAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xuICB9XG5cbiAgZ2V0IGxvd2VzdFByaWNlKCk6IElDaGVhcGVzdFByaWNlIHtcbiAgICBpZiAodGhpcy5jaGVhcGVzdFByaWNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGVhcGVzdFByaWNlO1xuICAgIH1cbiAgICBjb25zdCBvdXRib3VuZCA9ICh0aGlzLmZ1bGxSZXN1bHRzWzBdIGFzIGFueSkub3V0Ym91bmQgYXMgRXVyb3N0YXJJdGVtW107XG4gICAgY29uc3QgY3VycmVuY3kgPSBvdXRib3VuZFswXS5zdGFuZGFyZEZhcmUuY3VycmVuY3k7XG4gICAgbGV0IGNoZWFwZXN0T3V0Ym91bmQ6IG51bWJlcjtcbiAgICBvdXRib3VuZC5mb3JFYWNoKGEgPT4ge1xuICAgICAgaWYgKCFjaGVhcGVzdE91dGJvdW5kIHx8IGEuc3RhbmRhcmRGYXJlLnByaWNlIDwgY2hlYXBlc3RPdXRib3VuZCkge1xuICAgICAgICBjaGVhcGVzdE91dGJvdW5kID0gYS5zdGFuZGFyZEZhcmUucHJpY2U7XG4gICAgICB9XG4gICAgICBpZiAoYS5zdGFuZGFyZFByZW1pZXJGYXJlLnByaWNlIDw9IGNoZWFwZXN0T3V0Ym91bmQpIHtcbiAgICAgICAgY2hlYXBlc3RPdXRib3VuZCA9IGEuc3RhbmRhcmRQcmVtaWVyRmFyZS5wcmljZTtcbiAgICAgIH1cbiAgICAgIGlmIChhLmJ1c2luZXNzUHJlbWllckZhcmUucHJpY2UgPD0gY2hlYXBlc3RPdXRib3VuZCkge1xuICAgICAgICBjaGVhcGVzdE91dGJvdW5kID0gYS5idXNpbmVzc1ByZW1pZXJGYXJlLnByaWNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7IGFtb3VudDogY2hlYXBlc3RPdXRib3VuZCwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9O1xuICB9XG5cbiAgbWFrZVNjaGVtYUZsaWdodHMoXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEpvdXJuZXksXG4gICAgZmxpZ2h0R3JvdXA6IFJlc3VsdFR5cGUsXG4gICAgZ3JvdXBJbmRleDogbnVtYmVyLFxuICAgIHNlZ21lbnRJbmRleD86IG51bWJlclxuICApOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zZWxlY3RlZEZsaWdodCxcbiAgICAgIGpvdXJuZXlJbmZvOiB7XG4gICAgICAgIGZsaWdodEdyb3VwLFxuICAgICAgICBncm91cEluZGV4LFxuICAgICAgICBzZWdtZW50SW5kZXhcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVHcm91cGVkSXRlbShcbiAgICByZXR1cm5PYmplY3Q6IEV1cm9zdGFyR3JvdXBlZFF1b3RlUmVzdWx0LFxuICAgIHNvdXJjZTogc3RyaW5nLFxuICAgIG91dGJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxuICAgIG91dGJvdW5kVG90YWxEdXJhdGlvbjogbnVtYmVyLFxuICAgIGluYm91bmRGbGlnaHRzOiBGbGlnaHRKb3VybmV5W10sXG4gICAgaW5ib3VuZFRvdGFsRHVyYXRpb246IG51bWJlclxuICApIHtcbiAgICBpZiAob3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggJiYgIXJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSkge1xuICAgICAgY29uc3QgZmlyc3QgPSBvdXRib3VuZEZsaWdodHNbMF07XG4gICAgICBjb25zdCBsYXN0ID0gb3V0Ym91bmRGbGlnaHRzW291dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXTtcbiAgICAgIHJldHVybk9iamVjdC5vcmlnaW5BaXJwb3J0ID0gZmlyc3Qub3JpZ2luQWlycG9ydDtcbiAgICAgIHJldHVybk9iamVjdC5vcmlnaW5BaXJwb3J0TmFtZSA9IGZpcnN0Lm9yaWdpbkFpcnBvcnROYW1lO1xuICAgICAgcmV0dXJuT2JqZWN0LmRlc3RpbmF0aW9uQWlycG9ydCA9IGxhc3QuZGVzdGluYXRpb25BaXJwb3J0O1xuICAgICAgcmV0dXJuT2JqZWN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWUgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWU7XG4gICAgICByZXR1cm5PYmplY3QuZGVwYXJ0RGF0ZVRpbWUgPSBmaXJzdC5kYXRlVGltZURlcGFydGluZztcbiAgICAgIHJldHVybk9iamVjdC5hcnJpdmFsRGF0ZVRpbWUgPSBsYXN0LmRhdGVUaW1lQXJyaXZpbmc7XG4gICAgICByZXR1cm5PYmplY3Qub3V0Ym91bmRUb3RhbER1cmF0aW9uID0gb3V0Ym91bmRUb3RhbER1cmF0aW9uO1xuICAgICAgcmV0dXJuT2JqZWN0LmRhdGFTb3VyY2UgPSBzb3VyY2U7XG4gICAgICByZXR1cm5PYmplY3Qub3BlcmF0b3IgPSBmaXJzdC5vcGVyYXRpbmdDYXJyaWVyO1xuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yRnVsbCA9IGZpcnN0Lm9wZXJhdGluZ0NhcnJpZXJOYW1lO1xuICAgICAgcmV0dXJuT2JqZWN0Lm91dGxlZ3NDb3VudCA9IG91dGJvdW5kRmxpZ2h0cy5sZW5ndGg7XG4gICAgICByZXR1cm5PYmplY3Qub3V0bGVncyA9IG91dGJvdW5kRmxpZ2h0cztcbiAgICAgIHJldHVybk9iamVjdC5vdXRib3VuZEZsaWdodE51bWJlciA9IHRoaXMuaGVscGVycy5qb2luRnJvbUF0dHJpYnV0ZTxGbGlnaHRKb3VybmV5PihcbiAgICAgICAgJy0nLFxuICAgICAgICAnb3BlcmF0aW5nRmxpZ2h0TnVtYmVyJyxcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzXG4gICAgICApO1xuXG4gICAgICByZXR1cm5PYmplY3QuaXNSZXR1cm4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiAhcmV0dXJuT2JqZWN0LmluYm91bmRUb3RhbER1cmF0aW9uKSB7XG4gICAgICByZXR1cm5PYmplY3QuaW5ib3VuZFRvdGFsRHVyYXRpb24gPSBpbmJvdW5kVG90YWxEdXJhdGlvbjtcbiAgICAgIHJldHVybk9iamVjdC5pbmxlZ3NDb3VudCA9IGluYm91bmRGbGlnaHRzLmxlbmd0aDtcbiAgICAgIHJldHVybk9iamVjdC5pbmxlZ3MgPSBpbmJvdW5kRmxpZ2h0cztcbiAgICAgIHJldHVybk9iamVjdC5pbmJvdW5kRmxpZ2h0TnVtYmVyID0gdGhpcy5oZWxwZXJzLmpvaW5Gcm9tQXR0cmlidXRlPEZsaWdodEpvdXJuZXk+KFxuICAgICAgICAnLScsXG4gICAgICAgICdvcGVyYXRpbmdGbGlnaHROdW1iZXInLFxuICAgICAgICBpbmJvdW5kRmxpZ2h0c1xuICAgICAgKTtcblxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFrZVNlc3Npb25SZXN1bHRzKGRhdGE6IEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheSk6IEV1cm9zdGFyU2Vzc2lvblR5cGUge1xuICAgIHJldHVybiB7XG4gICAgICByZXN1bHRzOiBbXSxcbiAgICAgIGdyb3VwRGF0YTogW10sXG4gICAgICBncm91cGVkOiBbXSxcbiAgICAgIHF1ZXJ5OiB0aGlzLnJlc3VsdFF1ZXJ5XG4gICAgfTtcbiAgfVxuXG4gIGdldE1pbkZsaWdodFByaWNlRm9yQnJhbmQobWF0Y2hpbmdCcmFuZEZsaWdodHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcbiAgICBsZXQgbWluID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaChmbGlnaHQgPT4ge1xuICAgICAgaWYgKG1pbiA+IGZsaWdodD8udG90YWw/LnByaWNlKSB7XG4gICAgICAgIG1pbiA9IGZsaWdodC50b3RhbC5wcmljZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbWluO1xuICB9XG5cbiAgZ2V0TWF4RmxpZ2h0UHJpY2VGb3JCcmFuZChtYXRjaGluZ0JyYW5kRmxpZ2h0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xuICAgIGxldCBtYXggPSAwO1xuICAgIG1hdGNoaW5nQnJhbmRGbGlnaHRzLmZvckVhY2goZmxpZ2h0ID0+IHtcbiAgICAgIGlmIChtYXggPCBmbGlnaHQ/LnRvdGFsPy5wcmljZSkge1xuICAgICAgICBtYXggPSBmbGlnaHQudG90YWwucHJpY2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG1heDtcbiAgfVxuXG4gIGlzT3Zlck5pZ2h0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG91dHdhcmREYXkgPSB0aGlzLm91dEJvdW5kRGF0ZS5kYXRlKCk7XG4gICAgY29uc3QgcmV0dXJuRGF5ID0gdGhpcy5pbmJvdW5kRGF0ZS5kYXRlKCk7XG4gICAgaWYgKHJldHVybkRheSAtIG91dHdhcmREYXkgPj0gMSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG1pblRvSG91ciA9IChkdXI6IG51bWJlcik6IHN0cmluZyA9PiBgJHtNYXRoLmZsb29yKGR1ciAvIDYwKX1oICR7ZHVyICUgNjB9bWA7XG5cbiAgYXN5bmMgYWRkRXVyb3N0YXJKb3VybmV5c1RvQmFza2V0KFxuICAgIGV1cm9zdGFyUXVvdGU6IEV1cm9zdGFySXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgaWdub3JlSW52b2tlOiBib29sZWFuID0gZmFsc2UsXG4gICAgZ210U2VhcmNoUXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID0gbnVsbFxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcbiAgICBpZiAoZXVyb3N0YXJRdW90ZS51bmF2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbCk7XG4gICAgfVxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcbiAgICBpZiAoYmFza2V0KSB7XG4gICAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBldXJvc3RhclF1b3RlO1xuICAgICAgY29uc3Qgb3V0Ym91bmREYXRlOiBhbnkgPSBtb21lbnQoZXVyb3N0YXJRdW90ZS5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpO1xuICAgICAgY29uc3QgaW5ib3VuZERhdGU6IGFueSA9IGV1cm9zdGFyUXVvdGUuaW5ib3VuZEZsaWdodHMubGVuZ3RoXG4gICAgICAgID8gbW9tZW50KGV1cm9zdGFyUXVvdGUuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKGV1cm9zdGFyUXVvdGUpO1xuICAgICAgY29uc3Qgc2NoZW1hRGV0YWlscyA9IHtcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBbXG4gICAgICAgICAgLi4uZXVyb3N0YXJRdW90ZS5vdXRib3VuZEZsaWdodHMubWFwKChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PlxuICAgICAgICAgICAgdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmbGlnaHQsIFJlc3VsdFR5cGUuT3V0Ym91bmQsIDAsIHNlZ21lbnRJbmRleClcbiAgICAgICAgICApXG4gICAgICAgIF0sXG4gICAgICAgIGluYm91bmRGbGlnaHRzOiBbXG4gICAgICAgICAgLi4uZXVyb3N0YXJRdW90ZS5pbmJvdW5kRmxpZ2h0cy5tYXAoKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgc2VnbWVudEluZGV4OiBudW1iZXIpID0+XG4gICAgICAgICAgICB0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZsaWdodCwgUmVzdWx0VHlwZS5JbmJvdW5kLCAwLCBzZWdtZW50SW5kZXgpXG4gICAgICAgICAgKVxuICAgICAgICBdLFxuICAgICAgICB0ZXJtc0FuZENvbmQ6IHRlcm1zQW5kQ29uZGl0aW9ucyxcbiAgICAgICAgam91cm5leVR5cGU6ICdzaW5nbGUnXG4gICAgICB9O1xuICAgICAgY29uc3QgYm9va2luZzogQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMgPSB7XG4gICAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXG4gICAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxuICAgICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlbixcbiAgICAgICAgY28yUGVySXRlbSxcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyLFxuICAgICAgICBjdXJyZW5jeTogdG90YWwuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxuICAgICAgICBkZXRhaWw6IHNjaGVtYURldGFpbHMsXG4gICAgICAgIHByaWNlOiB0b3RhbC5wcmljZSxcbiAgICAgICAgc2VhcmNoUXVlcnk6IGdtdFNlYXJjaFF1ZXJ5ID8gZ210U2VhcmNoUXVlcnkgOiB0aGlzLnJlc3VsdFF1ZXJ5LFxuICAgICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxuICAgICAgICBvdXRib3VuZERhdGU6IG91dGJvdW5kRGF0ZS5mb3JtYXQoKSxcbiAgICAgICAgcmVhc29uS2V5czogIGV1cm9zdGFyUXVvdGUucmVxdWlyZXNSZWFzb25LZXlzXG4gICAgICB9O1xuICAgICAgaWYgKGluYm91bmREYXRlKSB7XG4gICAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZS5mb3JtYXQoKTtcbiAgICAgICAgc2NoZW1hRGV0YWlscy5qb3VybmV5VHlwZSA9ICdyb3VuZHRyaXAnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXG4gICAgICAgIGJvb2tpbmcsXG4gICAgICAgIGludEJhc2tldCxcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxuICAgICAgICB0aGlzLnRyYXZlbGxlcnMsXG4gICAgICAgIGV1cm9zdGFyUXVvdGUucmVxdWlyZXNSZWFzb25LZXlzLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgaWdub3JlSW52b2tlXG4gICAgICApO1xuICAgICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xuICAgICAgICB0aGlzLnJlc2VhcmNoV2l0aE5ld1VzZXIoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWwpO1xuICB9XG5cbiAgLy8gVE9ETyB3YWl0aW5nIGZvciBkYXRhXG4gIGdldFRlcm1zQW5kQ29uZChldXJvc3RhclF1b3RlOiBFdXJvc3Rhckl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1BlbmFsdGllcycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0VsaWdpYmlsaXR5JyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAgLFxuICAgICAge1xuICAgICAgICBuYW1lOiAnRGF5L3RpbWUnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTZWFzb25hbGl0eScsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0ZsaWdodMKgQXBwbGljYXRpb24nLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBZHZhbmNlwqBSZXNlcnZhdGlvbnMvdGlja2V0aW5nJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnTWF4aW11bcKgU3RheScsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ01pbmltdW3CoFN0YXknLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTdG9wb3ZlcnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdUcmFuc2ZlcnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdDb21iaW5hdGlvbnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdCbGFja291dMKgRGF0ZXMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTdXJjaGFyZ2VzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQWNjb21wYW5pZWTCoFRyYXZlbCcsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1RyYXZlbMKgUmVzdHJpY3Rpb25zJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnU2FsZXPCoFJlc3RyaWN0aW9ucycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0hpcC9taWxlYWdlwqBFeGNlcHRpb25zJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVGlja2V0wqBFbmRvcnNlbWVudHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdDaGlsZHJlbsKgRGlzY291bnRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVG91csKgQ29uZHVjdG9ywqBEaXNjb3VudHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBZ2VudMKgRGlzY291bnRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQWxswqBPdGhlcsKgRGlzY291bnRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnTWlzY2VsbGFuZW91c8KgUHJvdmlzaW9ucycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0ZhcmXCoEJ5wqBSdWxlJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnR3JvdXBzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVG91cnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdWaXNpdMKgQW5vdGhlcsKgQ291bnRyeScsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0RlcG9zaXRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVm9sdW50YXJ5wqBDaGFuZ2VzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVm9sdW50YXJ5wqBSZWZ1bmRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnTmVnb3RpYXRlZMKgRmFyZXMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdSdWxlwqBBcHBsaWNhdGlvbsKgQW5kwqBPdGhlcsKgQ29uZGl0aW9ucycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBzYXZlU2VhcmNoKCk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xuICAgIGlmICh0aGlzLmlzRmF2b3VyaXRlVmFsaWQudmFsdWUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5OiBJRXVyb3N0YXJTZWFyY2hBcmdzID0gdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XG4gICAgICAgIG5hbWU6IGAke21vbWVudCgpfWAsXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5FdXJvc3RhcixcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XG4gICAgfVxuICB9XG4gIGFzeW5jIGFwcGx5RmF2b3VyaXRlKGZhdjogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgbm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCk7XG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoMSk7XG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG5vdywgMzApOyBcbiAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0b21vcnJvdywgMzApO1xuICAgIHRoaXMuYXBwbHlTZWFyY2hRdWVyeShmYXYpO1xuICB9XG5cbiAgb3BlbkV1cm9zdGFyRmFyZVJ1bGVzKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiB2b2lkIHtcbiAgICBjb25zdCBmbGlnaHRzID0gWy4uLmJhc2tldEl0ZW0uZGV0YWlsLm91dGJvdW5kRmxpZ2h0c107XG4gICAgZmxpZ2h0c1swXS5mYXJlSW5mbyA9IGZsaWdodHNbMF0uam91cm5leUluZm87XG4gICAgZGVsZXRlIGZsaWdodHNbMF0uam91cm5leUluZm87XG4gICAgY29uc3QgcnVsZXNGcm9tQ2FsbCA9IHRoaXMuc2VhcmNoU2VydmljZS5nZXRGbGlnaHRGYXJlUnVsZXMoXG4gICAgICBmbGlnaHRzWzBdIGFzIElucHV0RmxpZ2h0Sm91cm5leSxcbiAgICAgIHBhcnNlSW50KGJhc2tldEl0ZW0uc2VydmljZS5pZClcbiAgICApO1xuICAgIHJ1bGVzRnJvbUNhbGwuc3Vic2NyaWJlKFxuICAgICAgZGF0YSA9PiB7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICAgICAgTW9kYWxUeXBlcy5Nb2RhbEZsaWdodEZhcmVDb21wb25lbnQsXG4gICAgICAgICAgeyBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBydWxlczogZGF0YS5yZXN1bHRzWzBdLFxuICAgICAgICAgICAgZnJvbTogZmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0LFxuICAgICAgICAgICAgdG86IGZsaWdodHNbZmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnRcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdlbmVyYXRlIHRoZSBldXJvc3RhciBxdWVyeSB2YXJpYWJsZXMgZnJvbSB0aGUgZmxpZ2h0IHZhcmlhYmxlc1xuICAgKiBAVE9ETyAtIG1heSBuZWVkIGEgc2VwZXJhdGUgZnVuY3Rpb24gZm9yIGdvMi9zY2lvblxuICAgKiBAcGFyYW0gZmxpZ2h0UXVlcnkgLSB0aGUgZmxpZ2h0IHF1ZXJ5XG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZVF1ZXJ5RnJvbUZsaWdodFF1ZXJ5KFxuICAgIGZsaWdodFF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyxcbiAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6IHN0cmluZyxcbiAgICBhcnJpdmFsQWlycG9ydDogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZGVwYXJ0RGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShtb21lbnQoZmxpZ2h0UXVlcnkub3V0Ym91bmREYXRlLCAnWVlZWS1NTS1ERCcpKTtcbiAgICB0aGlzLnJldHVybkRhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobW9tZW50KGZsaWdodFF1ZXJ5LnJldHVybkRhdGUsICdZWVlZLU1NLUREJykpO1xuXG4gICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9IHRoaXMuZ2V0RXVyb0xvY2F0aW9uKGRlc3RpbmF0aW9uQWlycG9ydCk7XG4gICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID0gdGhpcy5nZXRFdXJvTG9jYXRpb24oYXJyaXZhbEFpcnBvcnQpO1xuXG4gICAgYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAubG9va3VwRXVyb3N0YXJTdGF0aW9ucyh0aGlzLl9vcmlnaW5BaXJwb3J0KVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHJlc3VsdFswXTtcbiAgICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAubG9va3VwRXVyb3N0YXJTdGF0aW9ucyh0aGlzLl9vcmlnaW5BaXJwb3J0KVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHJlc3VsdFswXTtcbiAgICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAubG9va3VwRXVyb3N0YXJTdGF0aW9ucyh0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQpXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAgICB0aGlzLmFycml2ZUxvY2F0aW9uID0gcmVzdWx0WzBdO1xuICAgICAgfSk7XG5cbiAgICBpZiAoZmxpZ2h0UXVlcnkucmV0dXJuVHJpcCkge1xuICAgICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gRXVyb3N0YXJTZWFyY2hUeXBlLm9uZVdheTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBldXJvIHN0YXRpb24gZnJvbSB0aGUgYWlycG9ydFxuICAgKiBAcGFyYW0gbG9jYXRpb25cbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldEV1cm9Mb2NhdGlvbihsb2NhdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQWlyVG9FdXJvW2xvY2F0aW9uLnRvVXBwZXJDYXNlKCldIHx8ICcnO1xuICB9XG5cbiAgcHVibGljIGdldEZhcmVSdWxlcyhqb3VybmV5SGFzaDogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgd2hlblNlbGVjdGVkQWxvbmU6IHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5Py53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0sXG4gICAgICBqb3VybmV5V2hlblNlbGVjdGVkOiB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeT8uam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cbiAgICB9O1xuICB9XG5cbiAgbWVzc2FnZUNvbmZpZ0NoZWNrKGNvbmZpZzogYW55LCBpc0NoZWNrUGFzczogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRlcGFydExvY2F0aW9uID0gdGhpcy5kZXBhcnRMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscztcbiAgICBjb25zdCBhcnJpdmVMb2NhdGlvbiA9IHRoaXMuYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHM7XG4gICAgY29uc3QgZGVwYXJ0RGV0YWlsID0gZGVwYXJ0TG9jYXRpb24/LmRlc3RpbmF0aW9uPy50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGFycml2ZURldGFpbCA9IGFycml2ZUxvY2F0aW9uPy5kZXN0aW5hdGlvbj8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoY29uZmlnLmFycml2YWxTdGF0aW9uICYmIGlzQ2hlY2tQYXNzKSB7XG4gICAgICBpc0NoZWNrUGFzcyA9XG4gICAgICAgIGNvbmZpZy5hcnJpdmFsU3RhdGlvbiA9PT0gYXJyaXZlTG9jYXRpb24/LmdhdGV3YXkgfHxcbiAgICAgICAgYXJyaXZlRGV0YWlsPy5pbmNsdWRlcyhjb25maWcuYXJyaXZhbFN0YXRpb24udG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5kZXBhcnR1cmVTdGF0aW9uICYmIGlzQ2hlY2tQYXNzKSB7XG4gICAgICBpc0NoZWNrUGFzcyA9XG4gICAgICAgIGNvbmZpZy5kZXBhcnR1cmVTdGF0aW9uID09PSBkZXBhcnRMb2NhdGlvbj8uZ2F0ZXdheSB8fFxuICAgICAgICBkZXBhcnREZXRhaWw/LmluY2x1ZGVzKGNvbmZpZy5kZXBhcnR1cmVTdGF0aW9uLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBpc0NoZWNrUGFzcztcbiAgfVxuXG4gIC8vIFdlIHVzZSB0aGlzIG1ldGhvZCBmb3IgZmVhdHVyZXM6IFJlY2VudFNlYXJjaCwgRmF2b3VyaXRlU2VhcmNoLCBFeHBpcmVkQmFza2V0LCBDb3B5QmFza2V0LCBDbG9uZUJhc2tldFxuICAvLyBOb3RlOiBEbyBub3QgaW5jbHVkZSBkYXRlcyBhbmQgdGF2ZWxsZXJzIGluIHRoaXMgbWV0aG9kXG4gIGFzeW5jIGFwcGx5U2VhcmNoUXVlcnkocXVlcnk6IFNlYXJjaEV1cm9zdGFyUXVlcnlWYXJpYWJsZXMsIHN0YXJ0U2VhcmNoOiBib29sZWFuID0gZmFsc2UsIGNsb25lQmFza2V0SXRlbTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFjbG9uZUJhc2tldEl0ZW0pIHtcbiAgICAgIGlmIChxdWVyeS5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3cpIHtcbiAgICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkRlcGFydDtcbiAgICAgIH0gZWxzZSBpZiAocXVlcnkub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdykge1xuICAgICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChxdWVyeS5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93KSB7XG4gICAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkRlcGFydDtcbiAgICAgIH0gZWxzZSBpZiAocXVlcnkucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3cpIHtcbiAgICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcbiAgICAgIH0gICAgICBcbiAgICB9XG4gICAgdGhpcy5mYXJlVHlwZSA9IHF1ZXJ5LmZhcmVUeXBlO1xuICAgIHRoaXMubWF4Q29ubmVjdGlvbnMgPSBxdWVyeS5tYXhDb25uZWN0aW9ucztcbiAgICB0aGlzLmNhYmluQ2xhc3MgPSBxdWVyeS5vdXRib3VuZENhYmluQ2xhc3MgID8gcXVlcnkub3V0Ym91bmRDYWJpbkNsYXNzWzBdIGFzIEZsaWdodENhYmluQ2xhc3MgOiBudWxsO1xuICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHF1ZXJ5LnJldHVybkNhYmluQ2xhc3MgPyBxdWVyeS5yZXR1cm5DYWJpbkNsYXNzWzBdIGFzIEZsaWdodENhYmluQ2xhc3MgOiBudWxsO1xuICAgIGlmIChjbG9uZUJhc2tldEl0ZW0pIHtcbiAgICAgIHN3aXRjaCAodGhpcy5jbG9uZWRCYXNrZXRJdGVtRGV0YWlscy5vdXRib3VuZEZsaWdodHNbMF0/LmNhYmluQ2xhc3MpIHtcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXk6XG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzOlxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQ6XG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGk6XG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5MaXRlRWNvbm9teTpcbiAgICAgICAgICB0aGlzLmNhYmluQ2xhc3MgPSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnUHJlbWl1bSc6XG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtQnVzaW5lc3M6XG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teTpcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1GaXJzdDpcbiAgICAgICAgICB0aGlzLmNhYmluQ2xhc3MgPSBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzczpcbiAgICAgICAgICB0aGlzLmNhYmluQ2xhc3MgPSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5jYWJpbkNsYXNzID0gRmxpZ2h0Q2FiaW5DbGFzcy5BbnlcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHRoaXMuY2FiaW5DbGFzcztcbiAgICB9XG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSBxdWVyeS5pbmNsdWRlTmVhcmJ5QWlycG9ydHM7XG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcXVlcnkucmV0dXJuVHJpcFxuICAgICAgPyBFdXJvc3RhclNlYXJjaFR5cGUucmV0dXJuXG4gICAgICA6IEV1cm9zdGFyU2VhcmNoVHlwZS5vbmVXYXk7XG5cbiAgICBjb25zdCBmb3VuZERlcGFydCA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgLmxvb2t1cEV1cm9zdGFyU3RhdGlvbnMocXVlcnkub3JpZ2luQWlycG9ydClcbiAgICAgIC50b1Byb21pc2UoKTtcblxuICAgIGNvbnN0IGZvdW5kQXJyaXZlID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAubG9va3VwRXVyb3N0YXJTdGF0aW9ucyhxdWVyeS5kZXN0aW5hdGlvbkFpcnBvcnQpXG4gICAgICAudG9Qcm9taXNlKCk7XG5cbiAgICBpZiAoZm91bmREZXBhcnRbMF0gJiYgZm91bmRBcnJpdmVbMF0pIHtcbiAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSBmb3VuZERlcGFydFswXTtcbiAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSBmb3VuZEFycml2ZVswXTtcbiAgICAgIGlmIChzdGFydFNlYXJjaCkge1xuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFkZUZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKHJlc3VsdHM6IGFueSk6IEV1cm9zdGFyUXVvdGVSZXN1bHQge1xuICAgIHJlc3VsdHMuam91cm5leXMubWFwKChmbGlnaHRJdGVtOiBFdXJvc3Rhckl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XG4gICAgICBmbGlnaHRJdGVtID0gdGhpcy5hZGRSdWxlc1RvRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMoZmxpZ2h0SXRlbSk7XG4gICAgfSk7XG5cbiAgICByZXN1bHRzLm11bHRpWzBdPy5yZXN1bHRzLm1hcCgoZmxpZ2h0SXRlbTogRXVyb3N0YXJJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4ge1xuICAgICAgZmxpZ2h0SXRlbSA9IHRoaXMuYWRkUnVsZXNUb0ZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKGZsaWdodEl0ZW0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBwcml2YXRlIGFkZFJ1bGVzVG9GbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyhcbiAgICBpdGVtOiBFdXJvc3Rhckl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXG4gICk6IEV1cm9zdGFySXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMge1xuICAgIGNvbnN0IHsgam91cm5leVdoZW5TZWxlY3RlZCwgd2hlblNlbGVjdGVkQWxvbmUgfSA9IHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5O1xuXG4gICAgaXRlbS5yZXF1aXJlc1JlYXNvbktleXMgPVxuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtpdGVtLmpvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25LZXlzIHx8XG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtpdGVtLmpvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25LZXlzO1xuXG4gICAgaXRlbS5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzID1cbiAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWRbaXRlbS5qb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgfHxcbiAgICAgIHdoZW5TZWxlY3RlZEFsb25lW2l0ZW0uam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzIHx8XG4gICAgICBbXTtcbiAgICAgIFxuICAgIGl0ZW0ucmVxdWlyZXNSZWFzb25NZXNzYWdlcyA9XG4gICAgICBqb3VybmV5V2hlblNlbGVjdGVkW2l0ZW0uam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzIHx8XG4gICAgICB3aGVuU2VsZWN0ZWRBbG9uZVtpdGVtLmpvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25NZXNzYWdlcyB8fFxuICAgICAgW107XG5cbiAgICBpdGVtLnVuYXZhaWxhYmxlID1cbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbaXRlbS5qb3VybmV5SGFzaF0/LnVuYXZhaWxhYmxlIHx8XG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtpdGVtLmpvdXJuZXlIYXNoXT8udW5hdmFpbGFibGU7XG4gICAgaXRlbS51bmF2YWlsYWJsZU1lc3NhZ2UgPVxuICAgICAgam91cm5leVdoZW5TZWxlY3RlZFtpdGVtLmpvdXJuZXlIYXNoXT8udW5hdmFpbGFibGVNZXNzYWdlIHx8XG4gICAgICB3aGVuU2VsZWN0ZWRBbG9uZVtpdGVtLmpvdXJuZXlIYXNoXT8udW5hdmFpbGFibGVNZXNzYWdlIHx8XG4gICAgICAnJztcblxuICAgIHJldHVybiBpdGVtO1xuICB9XG59Il19
2339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL2NsYXNzZXMvZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUd6RCxPQUFPLEVBQWEsSUFBSSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUluRCxPQUFPLEVBS0wsUUFBUSxFQUNSLGdCQUFnQixFQUtoQixtQkFBbUIsRUFFbkIsV0FBVyxFQVVaLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUtMLG1CQUFtQixFQVVuQiw0QkFBNEIsRUFLNUIsY0FBYyxFQUVmLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFrQmpFLE9BQU8sRUFBa0MsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHeEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE1BQU0sZUFBZSxHQUFrQixNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ25ELEtBQUssRUFBRSxFQUFFO0lBQ1QsVUFBVSxFQUFFLEVBQUU7SUFDZCxXQUFXLEVBQUUsRUFBRTtJQUNmLE9BQU8sRUFBRSxFQUFFO0lB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QUcsaUJBQWlCLENBQUM7QUFDM0MsZ0RBQXVCLEdBQUcsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgVHJhdmVsbGVyLCBhZ2VzIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xuaW1wb3J0IHsgRmxpZ2h0RmlsdGVycyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LWZpbHRlcnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlbGVjdEZpbHRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VsZWN0LWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMsXG4gIEJhc2tldEl0ZW0sXG4gIEN1cnJlbmN5Q29kZSxcbiAgRGVzdGluYXRpb25FbnRyeSxcbiAgRmFyZVR5cGUsXG4gIEZsaWdodENhYmluQ2xhc3MsXG4gIEZsaWdodEZhcmVUb3RhbCxcbiAgRmxpZ2h0SXRpbmVyYXJ5LFxuICBGbGlnaHRKb3VybmV5LFxuICBGbGlnaHRQYXNzZW5nZXJPYmplY3QsXG4gIEZsaWdodFBhc3NlbmdlclR5cGUsXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxuICBTZXJ2aWNlVHlwZSxcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxuICBJbnB1dEZsaWdodEpvdXJuZXksXG4gIFNlYXJjaEV1cm9zdGFyUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaFBhcmtpbmdRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoTG91bmdlc1F1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xuaW1wb3J0IHtcbiAgRXVyb3N0YXJRdW90ZVJlc3VsdCxcbiAgTmdiRGF0ZVN0cnVjdCxcbiAgT0JUQWlycG9ydERldGFpbHMsXG4gIE9CVEFpcmxpbmVzRGV0YWlscyxcbiAgRmxpZ2h0RGlyZWN0aW9uRW51bSxcbiAgR3JvdXBlZEZsaWdodHMsXG4gIFJlY2VudFNlYXJjaCxcbiAgRXVyb3N0YXJHcm91cGVkUXVvdGVSZXN1bHQsXG4gIEV1cm9zdGFyUmVzdWx0cyxcbiAgRXVyb3N0YXJJdGVtLFxuICBFdXJvc3RhckZhcmUsXG4gIEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheSxcbiAgTWluTWF4LFxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxuICBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLFxuICBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSxcbiAgUmVjb3JkUnVsZUFjdGlvbixcbiAgRXVyb3N0YXJNdWx0aSxcbiAgRXVyb3N0YXJJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgVHJhdmVsUG9saWNpZXMsXG4gIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7IEZ1bGxVc2VyRGV0YWlscywgVXNlclNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xuaW1wb3J0IHsgRXVyb3N0YXJTZWFyY2hUeXBlIH0gZnJvbSAnLi9ldXJvc3Rhci1zZWFyY2gtdHlwZS5lbnVtJztcbmltcG9ydCB7IElNdWx0aURlc3RpbmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtbXVsdGktZGVzdGluYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEJhc2VFdXJvc3RhclF1b3RlRmV0Y2hlcixcbiAgRXVyb3N0YXJRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2V1cm9zdGFyLXF1b3RlLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxuICBFdXJvc3RhclRlbXBQYXJhbXNcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHtcbiAgQXBwbHlKaXRGbGlnaHRSdWxlc1R5cGUsXG4gIEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlclxufSBmcm9tICcuLi9mZXRjaGVycy9hcHBseS1qaXQtZmxpZ2h0LXJ1bGVzJztcbmltcG9ydCB7IEFsbG93ZWRDbGFzc2VzLCBGbGlnaHRPcGVyYXRvciwgVGltZVdpbmRvdyB9IGZyb20gJy4vZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7IElFdXJvc3RhclNlYXJjaEFyZ3MgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2V1cm9zdGFyLXNlYXJjaC1hcmcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RhbC1vcGVuZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNb2RhbFR5cGVzIH0gZnJvbSAnLi9tb2RhbC10eXBlcy5lbnVtJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBaXJUb0V1cm8gfSBmcm9tICcuLi9kYXRhL2Fpci10by1ldXJvJztcbmltcG9ydCB7IFVzZXJGYXZvcnVyaXRlIH0gZnJvbSAnLi91c2VyLWZhdm91cml0ZS5lbnVtJztcblxuY29uc3QgREVGQVVMVF9GSUxURVJTOiBGbGlnaHRGaWx0ZXJzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHN0b3BzOiB7fSxcbiAgdG90YWxTdG9wczoge30sXG4gIG11c3RJbmNsdWRlOiB7fSxcbiAgY2xhc3Nlczoge30sXG4gIGFpcmxpbmVzOiB7fSxcbiAgdHJhdmVsUG9saWN5OiB7fSxcbiAgZGVwYXR1cmVBaXJwb3J0OiB7fSxcbiAgZGVwYXR1cmVSZXR1cm5BaXJwb3J0OiB7fSxcbiAgYXJyaXZhbEFpcnBvcnQ6IHt9LFxuICBhcnJpdmFsUmV0dXJuQWlycG9ydDoge30sXG4gIGJhZ2dhZ2U6IHt9LFxuICBmYXJlVHlwZXM6IHt9LFxuICBwcmljZToge1xuICAgIG1pbjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgbWF4OiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxuICB9LFxuICBkdXJhdGlvbjoge1xuICAgIG1pbjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgbWF4OiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxuICB9LFxuICByZXR1cm5EdXJhdGlvbjoge1xuICAgIG1pbjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgbWF4OiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxuICB9LFxuICBkZXBhcnR1cmVUaW1lOiB7XG4gICAgbWluOiAwLFxuICAgIG1heDogMjRcbiAgfSxcbiAgYXJyaXZhbFRpbWU6IHtcbiAgICBtaW46IDAsXG4gICAgbWF4OiAyNFxuICB9LFxuICByZXR1cm5EZXBhcnR1cmVUaW1lOiB7XG4gICAgbWluOiAwLFxuICAgIG1heDogMjRcbiAgfSxcbiAgcmV0dXJuQXJyaXZhbFRpbWU6IHtcbiAgICBtaW46IDAsXG4gICAgbWF4OiAyNFxuICB9LFxuICB2aWFzOiB7fSxcbiAgZmxpZ2h0TnVtYmVyOiAnJyxcbiAgaW5ib3VuZEZsaWdodE51bWJlcjogJycsXG4gIHByaXZhdGVGYXJlczoge31cbn0pIGFzIEZsaWdodEZpbHRlcnM7XG5cbmV4cG9ydCB0eXBlIEV1cm9zdGFyU3RhdGlvbiA9IHtcbiAgZ2F0ZXdheTogc3RyaW5nO1xuICBkZXN0aW5hdGlvbjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGVudW0gU29ydFR5cGVzRXVyb3N0YXIge1xuICBDaGVhcGVzdEZpcnN0ID0gJ0MnLFxuICBFYXJsaWVzdEZpcnN0ID0gJ0UnLFxuICBMYXRlc3RGaXJzdCA9ICdMJyxcbiAgRXhwZW5zaXZlRmlyc3QgPSAnTScsXG4gIEZhc3Rlc3RGaXJzdCA9ICdGJyxcbiAgQ28yRmlyc3QgPSAnTycsXG4gIFByZWZlcnJlZEZpcnN0ID0gJ1AnXG59XG5cbmV4cG9ydCBlbnVtIFNvcnRNZXRob2Qge1xuICBzb3J0QnlQcmljZSA9ICdzb3J0QnlQcmljZScsXG4gIHNvcnRCeUhpZ2hlc3RQcmljZSA9ICdzb3J0QnlIaWdoZXN0UHJpY2UnLFxuICBzb3J0QnlEYXRlID0gJ3NvcnRCeURhdGUnLFxuICBzb3J0QnlGYXN0ZXN0ID0gJ3NvcnRCeUZhc3Rlc3QnLFxuICBTb3J0QnlQcmVmZXJyZWQgPSAnU29ydEJ5UHJlZmVycmVkJyxcbiAgU29ydEJ5Q2FyYm9uID0gJ1NvcnRCeUNhcmJvbidcbn1cblxuZXhwb3J0IGVudW0gUmVzdWx0VHlwZSB7XG4gIE91dGJvdW5kID0gJ291dGJvdW5kJyxcbiAgSW5ib3VuZCA9ICdpbmJvdW5kJ1xufVxuXG5leHBvcnQgZW51bSBFdXJvQ2xhc3Mge1xuICBCdXNpbmVzcyA9ICdCdXNpbmVzcycsXG4gIEVjb25vbXlSZXN0cmljdGVkID0gJ0Vjb25vbXlSZXN0cmljdGVkJyxcbiAgUHJlbWl1bUVjb25vbXkgPSAnUHJlbWl1bUVjb25vbXknLFxuICBFY29ub215Tm9CYWdzID0gJ0Vjb25vbXlOb0JhZ3MnLFxuICBQcmVtaXVtID0gJ1ByZW1pdW0nLFxuICBFY29ub215RmxleGkgPSAnRWNvbm9teUZsZXhpJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRUeXBlRXVyb3N0YXIge1xuICAvKiogVGl0bGUgZGlzcGxheWVkIG9uIGRyb3Bkb3duICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBNZXRob2QgbmFtZSB1c2VkIGJ5IGNvbXBvbmVudCB0byBzb3J0IHJlc3VsdHMgKi9cbiAgbWV0aG9kOiBTb3J0TWV0aG9kO1xuICAvKiogSWNvbiBkaXNwbGF5ZWQgb24gZHJvcCBkb3duICovXG4gIGljb246IHN0cmluZztcbiAgLyoqIFNvcnRpbmcgZGlyZWN0aW9uIHRydWUgZm9yIGFzYywgZmFsc2UgZm9yIGRzYyAqL1xuICBkaXI6IGJvb2xlYW47XG4gIC8vIHRoaXMgaXMgd2hhdCB3ZSB3aWxsIHVzZSB0byBzb3J0XG4gIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyO1xufVxuXG5leHBvcnQgdHlwZSBFdXJvc3Rhckdyb3VwcyA9ICdTdGFuZGFyZCcgfCAnU3RhbmRhcmRQcmVtaWVyJyB8ICdCdXNpbmVzc1ByZW1pZXInO1xuXG5pbnRlcmZhY2UgRXVyb3N0YXJTZXNzaW9uVHlwZSB7XG4gIHJlc3VsdHM6IEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheTtcbiAgZ3JvdXBEYXRhOiB7IFtrZXk6IG51bWJlcl06IG51bWJlcltdIH07XG4gIGdyb3VwZWQ6IEdyb3VwZWRGbGlnaHRzO1xuICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XG59XG5cbmV4cG9ydCBjbGFzcyBFdXJvc3RhckVudGVycHJpc2VTZWFyY2g8XG4gICAgU0VfUSBleHRlbmRzIEV1cm9zdGFyUXVvdGVGZXRjaGVyVHlwZSxcbiAgICBBSkZfUSBleHRlbmRzIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlXG4gID5cbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxFdXJvc3RhclRlbXBQYXJhbXMsIEV1cm9zdGFyUXVvdGVSZXN1bHQsIEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheT5cbiAgaW1wbGVtZW50cyBFdXJvc3RhckVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2VcbntcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2V1cm9zdGFyJztcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3Jlc3VsdHNfZXVyb3N0YXInO1xuXG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLkV1cm9zdGFyO1xuXG4gIGF2YWxpYWJsZUNsYXNzZXM6IEJlaGF2aW9yU3ViamVjdDxBbGxvd2VkQ2xhc3Nlcz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFsbG93ZWRDbGFzc2VzPihbXSk7XG4gIHRpbWVDcml0ZXJpYU9wdGlvbnM6IEJlaGF2aW9yU3ViamVjdDxUaW1lV2luZG93W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUaW1lV2luZG93W10+KFtdKTtcbiAgZmxpZ2h0T3BlcmF0b3JzOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0T3BlcmF0b3JbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZsaWdodE9wZXJhdG9yW10+KFtdKTtcblxuICBwcml2YXRlIF9uZWdvdGlhdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX25lYXJieV9haXJwb3J0czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3RpbWVBcnJheTogVmFsdWVEaXNwbGF5W107XG4gIHByaXZhdGUgX3NvcnRBcnJheTogU29ydFR5cGVFdXJvc3RhcltdID0gW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnUHJpY2UnLFxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLnNvcnRCeVByaWNlLFxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInLFxuICAgICAgZGlyOiB0cnVlLFxuICAgICAgY29kZTogU29ydFR5cGVzRXVyb3N0YXIuQ2hlYXBlc3RGaXJzdFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdUaW1lJyxcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlEYXRlLFxuICAgICAgaWNvbjogJ2ljby1jYWxlbmRhcicsXG4gICAgICBkaXI6IHRydWUsXG4gICAgICBjb2RlOiBTb3J0VHlwZXNFdXJvc3Rhci5FYXJsaWVzdEZpcnN0XG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ1RpbWUgKERlc2NlbmRpbmcpJyxcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlEYXRlLFxuICAgICAgaWNvbjogJ2ljby1jYWxlbmRhcicsXG4gICAgICBkaXI6IHRydWUsXG4gICAgICBjb2RlOiBTb3J0VHlwZXNFdXJvc3Rhci5MYXRlc3RGaXJzdFxuICAgIH1cbiAgXTtcblxuICBwcml2YXRlIF9zb3J0QXJyYXlMdTogU29ydFR5cGVFdXJvc3RhcltdID0gW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnUHJpY2UnLFxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLnNvcnRCeVByaWNlLFxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInLFxuICAgICAgZGlyOiB0cnVlLFxuICAgICAgY29kZTogU29ydFR5cGVzRXVyb3N0YXIuQ2hlYXBlc3RGaXJzdFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdUaW1lJyxcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlEYXRlLFxuICAgICAgaWNvbjogJ2ljby1jYWxlbmRhcicsXG4gICAgICBkaXI6IHRydWUsXG4gICAgICBjb2RlOiBTb3J0VHlwZXNFdXJvc3Rhci5FYXJsaWVzdEZpcnN0XG4gICAgfVxuICBdO1xuXG4gIHByaXZhdGUgX3NvcnRBcnJheUdvMjogU29ydFR5cGVFdXJvc3RhcltdID0gW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnQ2hlYXBlc3QgRmlyc3QnLFxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLnNvcnRCeVByaWNlLFxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInLFxuICAgICAgZGlyOiB0cnVlLFxuICAgICAgY29kZTogU29ydFR5cGVzRXVyb3N0YXIuQ2hlYXBlc3RGaXJzdFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdNb3N0IEV4cGVuc2l2ZSBGaXJzdCcsXG4gICAgICBtZXRob2Q6IFNvcnRNZXRob2Quc29ydEJ5SGlnaGVzdFByaWNlLFxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInLFxuICAgICAgZGlyOiB0cnVlLFxuICAgICAgY29kZTogU29ydFR5cGVzRXVyb3N0YXIuRXhwZW5zaXZlRmlyc3RcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnRmFzdGVzdCBGaXJzdCcsXG4gICAgICBtZXRob2Q6IFNvcnRNZXRob2Quc29ydEJ5RmFzdGVzdCxcbiAgICAgIGljb246ICdpY28tZG9sbGFyJyxcbiAgICAgIGRpcjogdHJ1ZSxcbiAgICAgIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyLkZhc3Rlc3RGaXJzdFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdQcmVmZXJyZWQgRmFyZSBGaXJzdCcsXG4gICAgICBtZXRob2Q6IFNvcnRNZXRob2QuU29ydEJ5UHJlZmVycmVkLFxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInLFxuICAgICAgZGlyOiB0cnVlLFxuICAgICAgY29kZTogU29ydFR5cGVzRXVyb3N0YXIuUHJlZmVycmVkRmlyc3RcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnTG93ZXN0IENvMiBFbWlzc2lvbnMgRmlyc3QnLFxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLlNvcnRCeUNhcmJvbixcbiAgICAgIGljb246ICdpY28tZG9sbGFyJyxcbiAgICAgIGRpcjogdHJ1ZSxcbiAgICAgIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyLkNvMkZpcnN0XG4gICAgfVxuICBdO1xuXG4gIHByaXZhdGUgX2ZhcmVUeXBlQXJyYXk6IFZhbHVlRGlzcGxheVtdID0gW1xuICAgIHsgdmFsdWU6IEZhcmVUeXBlLkZsZXhpYmxlLCBkaXNwbGF5OiAnRmxleGlibGUnIH0sXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTGVpc3VyZSwgZGlzcGxheTogJ0xlaXN1cmUnIH0sXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTG93ZXN0LCBkaXNwbGF5OiAnTG93ZXN0JyB9LFxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLk5lZ290aWF0ZWQsIGRpc3BsYXk6ICdOZWdvdGlhdGVkJyB9LFxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLk5vbk5lZ290aWF0ZWQsIGRpc3BsYXk6ICdOb24tTmVnb3RpYXRlZCcgfSxcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5SZXF1ZXN0RmFyZVJ1bGVzLCBkaXNwbGF5OiAnUmVxdWVzdCBGYXJlIFJ1bGVzJyB9LFxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLlNlbGVjdEFuZFBybywgZGlzcGxheTogJ1NlbGVjdCAmIFBybycgfVxuICBdO1xuXG4gIHB1YmxpYyBtaW5pbXVtT3V0Qm91bmREYXRlID0ge1xuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcbiAgfTtcblxuICBwdWJsaWMgbWluaW11bUluQm91bmREYXRlID0ge1xuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcbiAgfTtcblxuICBwdWJsaWMgc2VhcmNoVHlwZXM6IFZhbHVlRGlzcGxheVtdID0gW1xuICAgIHsgdmFsdWU6IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm4sIGRpc3BsYXk6ICdSZXR1cm4nIH0sXG4gICAgeyB2YWx1ZTogRXVyb3N0YXJTZWFyY2hUeXBlLm9uZVdheSwgZGlzcGxheTogJ09uZS13YXknIH1cbiAgXTtcblxuICBwcml2YXRlIF9vdXREYXRlOiBOZ2JEYXRlU3RydWN0O1xuICBwcml2YXRlIF9vdXRUaW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2luRGF0ZTogTmdiRGF0ZVN0cnVjdDtcbiAgcHJpdmF0ZSBfaW5UaW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uQWlycG9ydDogYW55O1xuICBwcml2YXRlIF9vcmlnaW5BaXJwb3J0OiBhbnk7XG4gIHByaXZhdGUgX3Bhc3NlbmdlcnM6IGFueTtcbiAgcHJpdmF0ZSBncm91cGVkT2JqZWN0OiBFdXJvc3Rhckl0aW5lcmFyeVdpdGhFeHRlbnNpb25zW107XG4gIHByb3RlY3RlZCBmbGlnaHRzVG9Hcm91cDogeyBba2V5OiBudW1iZXJdOiBudW1iZXJbXSB9ID0ge307XG4gIHByb3RlY3RlZCByZXN1bHRRdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XG4gIHByb3RlY3RlZCBncm91cGVkOiBHcm91cGVkRmxpZ2h0cyA9IG51bGw7XG4gIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gbnVsbDtcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9IEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID0gRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xuXG4gIHNlbGVjdGVkR3JvdXBGbGlnaHQ6IEV1cm9zdGFySXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM7XG4gIHByaXZhdGUgX2Rpc3BsYXlBZGRIb3RlbDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9ydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2U7XG4gIG11bHRpOiBFdXJvc3Rhck11bHRpW107XG4gIGZpbHRlcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRGaWx0ZXJzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoREVGQVVMVF9GSUxURVJTKTtcblxuICBwdWJsaWMgZ2V0IGRpc3BsYXlBZGRIb3RlbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheUFkZEhvdGVsO1xuICB9XG5cbiAgcHVibGljIHNldCBkaXNwbGF5QWRkSG90ZWwobmV3VmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzcGxheUFkZEhvdGVsID0gbmV3VmFsO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZEdyb3VwRXVyb3N0YXI6IHtcbiAgICBpdGVtOiBFdXJvc3Rhckl0ZW07XG4gICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtO1xuICB9ID0ge1xuICAgIGl0ZW06IG51bGwsXG4gICAgZGlyZWN0aW9uOiBudWxsXG4gIH07XG4gIHByaXZhdGUgX3NlbGVjdGVkRXVyb3N0YXJGYXJlOiB7XG4gICAgaXRlbTogRXVyb3N0YXJGYXJlO1xuICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bTtcbiAgfSA9IHtcbiAgICBpdGVtOiBudWxsLFxuICAgIGRpcmVjdGlvbjogbnVsbFxuICB9O1xuXG4gIGdldCBzZWxlY3RlZEV1cm9zdGFyRmFyZSgpOiBFdXJvc3RhckZhcmUge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZS5pdGVtO1xuICB9XG4gIGdldCBzZWxlY3RlZEZhcmVDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZT8uaXRlbT8uY2xhc3M7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRpbWVBcnJheSgpIHtcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxuICAgICAgdGhpcy5fdGltZUFycmF5IHx8XG4gICAgICBBcnJheSg5NilcbiAgICAgICAgLmZpbGwoMClcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXG4gICAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXG4gICAgICAgICAgICBkaXNwbGF5OlxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICAgICAgICAgJzonICtcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHByZWZlcnJlZENhcnJpZXJzKCk6IE9CVEFpcmxpbmVzRGV0YWlsc1tdIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzO1xuICB9XG5cbiAgcHVibGljIHNldCBwcmVmZXJyZWRDYXJyaWVycyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzW10pIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yMSgpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF07XG4gIH1cblxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMSh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzBdID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IyKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1sxXTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3IyKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV0gPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cbiAgcHVibGljIGdldCBvcGVyYXRvcjMoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzJdO1xuICB9XG5cbiAgcHVibGljIHNldCBvcGVyYXRvcjModmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1syXSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yNCgpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM107XG4gIH1cblxuICBwdWJsaWMgc2V0IG9wZXJhdG9yNCh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzNdID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWluRGF0ZTogTmdiRGF0ZVN0cnVjdDtcbiAgcHVibGljIGdldCBtaW5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLl9taW5EYXRlIHx8IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShtb21lbnQoKSk7XG4gICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFkdWx0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xuICB9XG5cbiAgcHVibGljIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBOdW1iZXIodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xuICB9XG5cbiAgcHVibGljIGdldCBjaGlsZHJlbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XG4gIH1cblxuICBwdWJsaWMgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBOdW1iZXIodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xuICB9XG5cbiAgcHVibGljIGdldCBkZXBhcnRMb2NhdGlvbigpOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRMb2NhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZGVwYXJ0TG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmRlcGFydExvY2F0aW9uID0gdmFsdWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSAnJztcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSB2YWx1ZS5nYXRld2F5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBxdWVyeU9yaWdpbkFpcG9ydCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9vcmlnaW5BaXJwb3J0O1xuICB9XG5cbiAgcHVibGljIGdldCBxdWVyeURlc3RpbmF0aW9uQWlwb3J0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVwYXJ0RGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5fb3V0RGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZGVwYXJ0RGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xuICAgIHRoaXMuX291dERhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9vdXREYXRlLCB0aGlzLl9vdXRUaW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVwYXJ0VGltZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9vdXRUaW1lO1xuICB9XG5cbiAgcHVibGljIHNldCBkZXBhcnRUaW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9vdXRUaW1lID0gdmFsdWU7XG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5fb3V0RGF0ZSwgdGhpcy5fb3V0VGltZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG91dEJvdW5kRGF0ZSgpOiBtb21lbnQuTW9tZW50IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgb3V0Qm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgdmFsdWUgPSBtb21lbnQodmFsdWUpO1xuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUgPSB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZSA6IG51bGw7XG4gICAgdGhpcy5taW5pbXVtSW5Cb3VuZERhdGUgPSB7XG4gICAgICB5ZWFyOiB2YWx1ZS55ZWFyKCksXG4gICAgICBtb250aDogdmFsdWUubW9udGgoKSArIDEsXG4gICAgICBkYXk6IHZhbHVlLmRhdGUoKVxuICAgIH07XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlICYmXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUgJiZcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNBZnRlcih0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUpXG4gICAgKSB7XG4gICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUpLmFkZCgxLCAnZGF5Jyk7XG4gICAgfVxuICAgIHRoaXMuX291dERhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xuICAgIHRoaXMuX291dFRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJldHVybkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX2luRGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmV0dXJuRGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xuICAgIHRoaXMuX2luRGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5faW5EYXRlLCB0aGlzLl9pblRpbWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBhcnJpdmVUaW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2luVGltZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgYXJyaXZlVGltZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faW5UaW1lID0gdmFsdWU7XG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9pbkRhdGUsIHRoaXMuX2luVGltZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluYm91bmREYXRlKCk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGluYm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgdmFsdWUgPSBtb21lbnQodmFsdWUpO1xuICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcbiAgICB0aGlzLl9pbkRhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xuICAgIHRoaXMuX2luVGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRUaW1lQ29sb24odmFsdWUpO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXJyaXZlTG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYXJyaXZlTG9jYXRpb247XG4gIH1cblxuICBwdWJsaWMgc2V0IGFycml2ZUxvY2F0aW9uKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5hcnJpdmVMb2NhdGlvbiA9IHZhbHVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSAnJztcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IHZhbHVlLmdhdGV3YXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjYWJpbkNsYXNzKCk6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3M7XG4gIH1cblxuICBzZXQgY2FiaW5DbGFzcyh2YWx1ZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCByZXR1cm5DYWJpbkNsYXNzKCk6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3M7XG4gIH1cblxuICBzZXQgcmV0dXJuQ2FiaW5DbGFzcyh2YWx1ZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaG9zZW5TZWFyY2hUeXBlKCk6IEV1cm9zdGFyU2VhcmNoVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlO1xuICB9XG5cbiAgc2V0IGNob3NlblNlYXJjaFR5cGUodHlwZTogRXVyb3N0YXJTZWFyY2hUeXBlKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPSB0eXBlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBpc1JldHVybigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm47XG4gIH1cblxuICBnZXQgb3V0VGltZUNyaXRlcmlhKCk6IFRpbWVXaW5kb3cge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhO1xuICB9XG5cbiAgc2V0IG91dFRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgaW5UaW1lQ3JpdGVyaWEoKTogVGltZVdpbmRvdyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYTtcbiAgfVxuXG4gIHNldCBpblRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuICBnZXQgbWF4Q29ubmVjdGlvbnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zO1xuICB9XG5cbiAgc2V0IG1heENvbm5lY3Rpb25zKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX211bHRpRGVzdGluYXRpb246IERlc3RpbmF0aW9uRW50cnlbXSA9IFtdO1xuICBnZXQgbXVsdGlEZXN0aW5hdGlvbigpOiBJTXVsdGlEZXN0aW5hdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb247XG4gIH1cblxuICBzZXQgbXVsdGlEZXN0aW5hdGlvbih2YWx1ZUFycmF5OiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24gPSB2YWx1ZUFycmF5O1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHNldE11bHRpRGVzdGluYXRpb25RdWVyeShtdWx0aURlc3RpbmF0aW9uOiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XG4gICAgY29uc3QgbmV3TXVsdGlEZXN0aW5hdGlvbiA9IHRoaXMuaGVscGVycy5jbG9uZShtdWx0aURlc3RpbmF0aW9uKTtcbiAgICByZXR1cm4gbmV3TXVsdGlEZXN0aW5hdGlvbi5yZWR1Y2UoXG4gICAgICAoZGVzdGluYXRpb25BcnJheTogRGVzdGluYXRpb25FbnRyeVtdLCBpdGVtOiBJTXVsdGlEZXN0aW5hdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBkZXN0aW5hdGlvbk9iamVjdCA9IHt9IGFzIERlc3RpbmF0aW9uRW50cnk7XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0Lm9yaWcgPSBpdGVtLm9yaWcuZ2F0ZXdheTtcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGVzdCA9IGl0ZW0uZGVzdC5nYXRld2F5O1xuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5kYXRlID0gdGhpcy5oZWxwZXJzLmZvcm1hdElzb0RhdGUoaXRlbS5kYXRlKTtcbiAgICAgICAgZGVzdGluYXRpb25BcnJheS5wdXNoKGRlc3RpbmF0aW9uT2JqZWN0KTtcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uQXJyYXk7XG4gICAgICB9LFxuICAgICAgW10gYXMgRGVzdGluYXRpb25FbnRyeVtdXG4gICAgKTtcbiAgfVxuXG4gIC8vIGdldCBvbmx5XG4gIGdldCBzb3J0RHJvcGRvd25WYWx1ZXMoKTogU29ydFR5cGVFdXJvc3RhcltdIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydEFycmF5O1xuICB9XG5cbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlc0x1KCk6IFNvcnRUeXBlRXVyb3N0YXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRBcnJheUx1O1xuICB9XG5cbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlc0dvMigpOiBTb3J0VHlwZUV1cm9zdGFyW10ge1xuICAgIHJldHVybiB0aGlzLl9zb3J0QXJyYXlHbzI7XG4gIH1cblxuICBnZXQgZmFyZVR5cGVzVmFsdWVzKCk6IFZhbHVlRGlzcGxheVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZmFyZVR5cGVBcnJheTtcbiAgfVxuXG4gIGdldCBmYXJlVHlwZSgpOiBGYXJlVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZTtcbiAgfVxuXG4gIHNldCBmYXJlVHlwZSh2YWx1ZTogRmFyZVR5cGUpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGUgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgbmVnb3RpYXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbmVnb3RpYXRlZDtcbiAgfVxuXG4gIHNldCBuZWdvdGlhdGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbmVnb3RpYXRlZCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGluY2x1ZGVOZWFyYnlBaXJwb3J0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cztcbiAgfVxuXG4gIHNldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzID0gdmFsdWU7XG4gIH1cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBldXJvc3RhckZldGNoZXI6IEJhc2VFdXJvc3RhclF1b3RlRmV0Y2hlcjxTRV9RPixcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXG4gICAgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQmFzZU1vZGFsT3BlbmVyU2VydmljZSxcbiAgICBwcml2YXRlIGFwcGx5RmxpZ2h0UnVsZXM6IEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlcjxBSkZfUT5cbiAgKSB7XG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMsIHNlYXJjaFNlcnZpY2UsIHVzZXJTZXJ2aWNlKTtcblxuICAgIGNvbnN0IGRhdGE6IHtcbiAgICAgIHRlbXBQYXJhbXM6IEV1cm9zdGFyVGVtcFBhcmFtcztcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogRXVyb3N0YXJUZW1wUGFyYW1zO1xuICAgIH0gPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShFdXJvc3RhckVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUykgfHwge1xuICAgICAgdGVtcFBhcmFtczoge30gYXMgRXVyb3N0YXJUZW1wUGFyYW1zLFxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBFdXJvc3RhclRlbXBQYXJhbXNcbiAgICB9O1xuICAgIC8vIGRhdGEudGVtcFBhcmFtcy5hZHVsdHMgPSAxO1xuICAgIC8vIGRhdGEudGVtcFBhcmFtcy5jYWJpbkNsYXNzID0gW0ZsaWdodENhYmluQ2xhc3MuRWNvbm9teV07XG4gICAgY29uc3QgcXVlcnkgPSBzZWFyY2hTZXJ2aWNlLm1ha2VFdXJvc3RhclF1ZXJ5KGRhdGEudGVtcFBhcmFtcyk7XG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHF1ZXJ5KTtcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XG4gICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XG4gICAgICAgIGNvbnN0IHNwbGl0VHJhdmVsbGVycyA9IHRoaXMuaGVscGVycy5zZWxlY3RlZFRyYXZlbGxlcnModHJhdmVsbGVycywgU2VydmljZVR5cGUuRXVyb3N0YXIpO1xuICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgIC8vIHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzID0gc3BsaXRUcmF2ZWxsZXJzLmluZmFudHMubGVuZ3RoO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xuICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB1c2VyU2VydmljZS5jaGFuZ2VVc2VyLnN1YnNjcmliZSgodXNlcjogRnVsbFVzZXJEZXRhaWxzKSA9PiB7XG4gICAgICB0aGlzLnRpbWVDcml0ZXJpYU9wdGlvbnMubmV4dChbVGltZVdpbmRvdy5Bbnl0aW1lLCBUaW1lV2luZG93LkFycml2ZSwgVGltZVdpbmRvdy5EZXBhcnRdKTsgLy8gVE9ETyB1cGRhdGUgd2l0aCBhbnkgVUZzXG4gICAgICBjb25zdCBjbGFzc2VzVG9IaWRlID0odGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3QoXG4gICAgICAgICAgICAgIFVzZXJGYXZvcnVyaXRlLmV1cm9zdGFyU2VhcmNoRGVmYXVsdHNcbiAgICAgICAgICAgICkgIGFzIHsgaGlkZUV1cm9zdGFyQ2xhc3Nlczoge1xuICAgICAgICAgICAgICBidXNpbmVzc19wcmVtaWVyOmJvb2xlYW47IFxuICAgICAgICAgICAgICBzdGFuZGFyZDpib29sZWFuOyBcbiAgICAgICAgICAgICAgc3RhbmRhcmRfcHJlbWllcjpib29sZWFuOyBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KT8uaGlkZUV1cm9zdGFyQ2xhc3NlczsgICBcbiAgICAgICAgICBcbiAgICB0aGlzLnVwZGF0ZUF2YWxpYWJsZUNsYXNzZXMoY2xhc3Nlc1RvSGlkZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcbiAgICBjb25zdCByZXN1bHRzOiBFdXJvc3RhclNlc3Npb25UeXBlID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0odGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWUpIHx8IHtcbiAgICAgIHJlc3VsdHM6IFtdLFxuICAgICAgZ3JvdXBEYXRhOiB7fSxcbiAgICAgIGdyb3VwZWQ6IFtdLFxuICAgICAgcXVlcnk6IHt9IGFzIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzXG4gICAgfTtcbiAgICB0aGlzLmZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMucmVzdWx0cyk7XG4gICAgdGhpcy5mbGlnaHRzVG9Hcm91cCA9IHJlc3VsdHMuZ3JvdXBEYXRhIHx8IHt9O1xuICAgIHRoaXMucmVzdWx0UXVlcnkgPSByZXN1bHRzLnF1ZXJ5O1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KChyZXN1bHRzLnJlc3VsdHMgfHwgW10pIGFzIEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheSk7XG5cbiAgICBjb25zdCByZXN1bHRzQ2xvbmU6IEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheSA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzLnJlc3VsdHMpO1xuICAgIC8vIGdldCBhcm91bmQgdGhlIGFubm95aW5nIHR5cGUgcmVzdHJpY3Rpb25zIC0gSSBLTk9XIEpPVVJORVlTIElTIFRIRVJFIEkgQ0FOIFNFRSBJVCBTVE9QIFRFTExJTkcgTUUgSVQgSVNOJ1QgVFlQRVNDUklQVCFcbiAgICBpZiAocmVzdWx0c0Nsb25lLmxlbmd0aCkge1xuICAgICAgY29uc3QgcmVzdWx0c1dpdGhFeHRlbnNpb25zID0gdGhpcy5tYWRlRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMocmVzdWx0c0Nsb25lKTtcbiAgICAgIHRoaXMuZmlsdGVycy5uZXh0KFxuICAgICAgICB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhyZXN1bHRzV2l0aEV4dGVuc2lvbnMuam91cm5leXMsIERFRkFVTFRfRklMVEVSUylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICAgIHRoaXMubmVnb3RpYXRlZCA9IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSA9PT0gRmFyZVR5cGUuTmVnb3RpYXRlZCA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzUmVzdWx0cyhyZXN1bHRzMTogRXVyb3N0YXJRdW90ZVJlc3VsdCk6IEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheSB7XG4gICAgdGhpcy5yZXN1bHRRdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgam91cm5leVdoZW5TZWxlY3RlZDoge30sXG4gICAgICAgIGR1YWxTaW5nbGVXaGVuU2VsZWN0ZWQ6IHt9LFxuICAgICAgICB3aGVuU2VsZWN0ZWRBbG9uZToge31cbiAgICAgIH0sXG4gICAgICByZXN1bHRzMS5ydWxlQWN0aW9uU3VtbWFyeSB8fCB7fVxuICAgICk7XG4gICAgLy8gZGVsZXRlIHRoaXMucmVzdWx0UXVlcnlbJ3dpdGhHcm91cGVkJ107XG4gICAgY29uc3QgcmVzdWx0c1dpdGhFeHRlbnNpb25zID0gdGhpcy5tYWRlRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMocmVzdWx0czEpO1xuICAgIHRoaXMubXVsdGkgPSByZXN1bHRzV2l0aEV4dGVuc2lvbnMubXVsdGk7XG4gICAgdGhpcy5maWx0ZXJzLm5leHQoXG4gICAgICB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhyZXN1bHRzV2l0aEV4dGVuc2lvbnMuam91cm5leXMsIERFRkFVTFRfRklMVEVSUylcbiAgICApO1xuICAgIGlmIChyZXN1bHRzV2l0aEV4dGVuc2lvbnMgJiYgdGhpcy5zZWFyY2hTZXJ2aWNlLmlzRXVyb1N0YXJHcm91cGVkKCkpIHtcbiAgICAgIGNvbnN0IHJldHVybmRhdGEgPSAocmVzdWx0c1dpdGhFeHRlbnNpb25zLmpvdXJuZXlzIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAgIChhY2M6IEV1cm9zdGFyUmVzdWx0cywgcmVzdWx0OiBGbGlnaHRJdGluZXJhcnksIGluZGV4OiBudW1iZXIpOiBFdXJvc3RhclJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZXVyb1Jlc3VsdCA9IHRoaXMuZm9ybWF0RXVyb3N0YXJSZXN1bHRzKFxuICAgICAgICAgICAgICByZXN1bHQub3V0Ym91bmRGbGlnaHRzLFxuICAgICAgICAgICAgICByZXN1bHQudG90YWwsXG4gICAgICAgICAgICAgIHJlc3VsdC5qb3VybmV5SGFzaCxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlclBhc3NlbmdlciA9IHJlc3VsdC5jbzJQZXJQYXNzZW5nZXI7XG4gICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlckl0ZW0gPSByZXN1bHQuY28yUGVySXRlbTtcbiAgICAgICAgICAgIGV1cm9SZXN1bHQuc291cmNlSWQgPSByZXN1bHQuc291cmNlSWQ7XG4gICAgICAgICAgICBldXJvUmVzdWx0LnRvdGFsID0gcmVzdWx0LnRvdGFsO1xuICAgICAgICAgICAgZXVyb1Jlc3VsdC5kdXJhdGlvbiA9IHRoaXMubWluVG9Ib3VyKHJlc3VsdC5vdXRib3VuZFRvdGFsRHVyYXRpb24pO1xuXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhldXJvUmVzdWx0LmNhYmluQ2xhc3MpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhYWNjLm91dGJvdW5kLmZpbmQoXG4gICAgICAgICAgICAgICAgKGl0ZW06IEV1cm9zdGFySXRlbSkgPT5cbiAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0ZURlcGFydHVyZSA9PT0gZXVyb1Jlc3VsdC5kYXRlRGVwYXJ0dXJlICYmXG4gICAgICAgICAgICAgICAgICBpdGVtLmNhYmluQ2xhc3MgPT09IGV1cm9SZXN1bHQuY2FiaW5DbGFzc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgYWNjLm91dGJvdW5kLnB1c2goZXVyb1Jlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlc3VsdC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGV1cm9SZXN1bHQgPSB0aGlzLmZvcm1hdEV1cm9zdGFyUmVzdWx0cyhcbiAgICAgICAgICAgICAgcmVzdWx0LmluYm91bmRGbGlnaHRzLFxuICAgICAgICAgICAgICByZXN1bHQudG90YWwsXG4gICAgICAgICAgICAgIHJlc3VsdC5qb3VybmV5SGFzaCxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlclBhc3NlbmdlciA9IHJlc3VsdC5jbzJQZXJQYXNzZW5nZXI7XG4gICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlckl0ZW0gPSByZXN1bHQuY28yUGVySXRlbTtcbiAgICAgICAgICAgIGV1cm9SZXN1bHQuc291cmNlSWQgPSByZXN1bHQuc291cmNlSWQ7XG4gICAgICAgICAgICBldXJvUmVzdWx0LnRvdGFsID0gcmVzdWx0LnRvdGFsO1xuICAgICAgICAgICAgZXVyb1Jlc3VsdC5kdXJhdGlvbiA9IHRoaXMubWluVG9Ib3VyKHJlc3VsdC5pbmJvdW5kVG90YWxEdXJhdGlvbik7XG5cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGV1cm9SZXN1bHQuY2FiaW5DbGFzcyk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFhY2MuaW5ib3VuZC5maW5kKFxuICAgICAgICAgICAgICAgIChpdGVtOiBFdXJvc3Rhckl0ZW0pID0+XG4gICAgICAgICAgICAgICAgICBpdGVtLmRhdGVEZXBhcnR1cmUgPT09IGV1cm9SZXN1bHQuZGF0ZURlcGFydHVyZSAmJlxuICAgICAgICAgICAgICAgICAgaXRlbS5jYWJpbkNsYXNzID09PSBldXJvUmVzdWx0LmNhYmluQ2xhc3NcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGFjYy5pbmJvdW5kLnB1c2goZXVyb1Jlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHsgb3V0Ym91bmQ6IFtdLCBpbmJvdW5kOiBbXSB9IGFzIEV1cm9zdGFyUmVzdWx0c1xuICAgICAgKTtcbiAgICAgIHJldHVybmRhdGEub3V0Ym91bmQgPSByZXR1cm5kYXRhLm91dGJvdW5kLnJlZHVjZSh0aGlzLm1hdGNoRmFyZXMuYmluZCh0aGlzKSwgW10pO1xuICAgICAgcmV0dXJuZGF0YS5pbmJvdW5kID0gcmV0dXJuZGF0YS5pbmJvdW5kLnJlZHVjZSh0aGlzLm1hdGNoRmFyZXMuYmluZCh0aGlzKSwgW10pO1xuXG4gICAgICByZXR1cm4gW3JldHVybmRhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHRXaXRoUHJlZmVycmVkID0gdGhpcy5zZXRQcmVmZXJyZWRBbmRHcmVlbmVyQ2hvaWNlKHJlc3VsdHNXaXRoRXh0ZW5zaW9ucyk7XG4gICAgICByZXR1cm4gcmVzdWx0czEgPyBbcmVzdWx0V2l0aFByZWZlcnJlZF0gOiBbXTtcbiAgICB9XG4gIH1cbiAgbWF0Y2hGYXJlcyhhY2M6IEV1cm9zdGFySXRlbVtdLCBvdXQ6IEV1cm9zdGFySXRlbSk6IEV1cm9zdGFySXRlbVtdIHtcbiAgICBjb25zdCBtYXRjaGluZ0V1cm9zdGFyID0gYWNjLmZpbmQoaXRlbSA9PiBpdGVtLmRhdGVEZXBhcnR1cmUgPT09IG91dC5kYXRlRGVwYXJ0dXJlKTtcbiAgICBpZiAoIW1hdGNoaW5nRXVyb3N0YXIpIHtcbiAgICAgIGFjYy5wdXNoKG91dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNoZWNrIHdoYXQgbmVlZHMgYWRkaW5nIGFuZCBhZGQgaXRcbiAgICAgIHN3aXRjaCAob3V0LmNhYmluQ2xhc3MpIHtcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXk6XG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzOlxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQ6XG4gICAgICAgICAgbWF0Y2hpbmdFdXJvc3Rhci5zdGFuZGFyZEZhcmUgPSBvdXQuc3RhbmRhcmRGYXJlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQcmVtaXVtJzpcbiAgICAgICAgICBtYXRjaGluZ0V1cm9zdGFyLnN0YW5kYXJkUHJlbWllckZhcmUgPSBvdXQuc3RhbmRhcmRQcmVtaWVyRmFyZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzOlxuICAgICAgICAgIG1hdGNoaW5nRXVyb3N0YXIuYnVzaW5lc3NQcmVtaWVyRmFyZSA9IG91dC5idXNpbmVzc1ByZW1pZXJGYXJlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUubG9nKCdob3cgZGlkIEkgZ2V0IGhlcmUnLCBvdXQuY2FiaW5DbGFzcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH1cblxuICBmb3JtYXRFdXJvc3RhclJlc3VsdHMoXG4gICAgcmVzdWx0czogRmxpZ2h0Sm91cm5leVtdLFxuICAgIHRvdGFsOiBGbGlnaHRGYXJlVG90YWwsXG4gICAgam91cm5leUhhc2g6IHN0cmluZyxcbiAgICBpbmRleDogbnVtYmVyXG4gICk6IEV1cm9zdGFySXRlbSB7XG4gICAgbGV0IHJldHVybk9iamVjdDogRXVyb3N0YXJJdGVtID0ge1xuICAgICAgdGltZUFycml2YWxPZmZzZXQ6IDAsXG4gICAgICB0aW1lRGVwYXJ0dXJlT2Zmc2V0OiAwLFxuICAgICAgYXJyaXZhbENvdW50cnlDb2RlOiAnJyxcbiAgICAgIGRlcGFydHVyZUNvdW50cnlDb2RlOiAnJyxcbiAgICAgIGRhdGVBcnJpdmFsOiBudWxsLFxuICAgICAgZGF0ZURlcGFydHVyZTogbnVsbCxcbiAgICAgIGR1cmF0aW9uOiBudWxsLFxuICAgICAgdGltZUFycml2YWw6IG51bGwsXG4gICAgICB0aW1lRGVwYXJ0dXJlOiBudWxsLFxuICAgICAgY28yUGVySXRlbTogMCxcbiAgICAgIGNvMlBlclBhc3NlbmdlcjogMCxcbiAgICAgIHNvdXJjZUlkOiBudWxsLFxuICAgICAgdG90YWw6IG51bGwsXG4gICAgICB1aWQ6IG51bGwsXG4gICAgICBjYWJpbkNsYXNzOiBudWxsLFxuICAgICAgYnVzaW5lc3NQcmVtaWVyRmFyZToge1xuICAgICAgICBjbGFzczogbnVsbCxcbiAgICAgICAgZmFyZTogbnVsbCxcbiAgICAgICAgaXNEaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgcHJpY2U6IE5hTixcbiAgICAgICAgY3VycmVuY3k6ICdHQlAnLFxuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHJlcXVpcmVzUmVhc29uS2V5czogW10sXG4gICAgICAgIHByZWZlcnJlZDogZmFsc2UsXG4gICAgICAgIHByZWZlcnJlZE1lc3NhZ2VzOiAnJyxcbiAgICAgICAgY29tcGFueVByZWZlcnJlZDogZmFsc2UsXG4gICAgICAgIGNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlOiAnJyxcbiAgICAgICAgb2ZmaWNlUHJlZmVycmVkOiBmYWxzZSxcbiAgICAgICAgb2ZmaWNlUHJlZmVycmVkTWVzc2FnZTogJycsXG4gICAgICAgIHRtY1ByZWZlcnJlZDogZmFsc2UsXG4gICAgICAgIHRtY1ByZWZlcnJlZE1lc3NhZ2U6ICcnLFxuICAgICAgICB0bWNQcmVmZXJyZWRMb2dvVXJsOiAnJyxcbiAgICAgICAgdW5hdmFpbGFibGU6IGZhbHNlLFxuICAgICAgICB1bmF2YWlsYWJsZU1lc3NhZ2U6ICcnLFxuICAgICAgICByZXF1aXJlc1JlYXNvbk1lc3NhZ2VzOiBbXSxcbiAgICAgICAgY2FuU2VsZWN0OiBmYWxzZSxcbiAgICAgICAgam91cm5leUhhc2g6ICcnXG4gICAgICB9LFxuICAgICAgc3RhbmRhcmRGYXJlOiB7XG4gICAgICAgIGNsYXNzOiBudWxsLFxuICAgICAgICBmYXJlOiBudWxsLFxuICAgICAgICBpc0Rpc2FibGVkOiB0cnVlLFxuICAgICAgICBwcmljZTogTmFOLFxuICAgICAgICBjdXJyZW5jeTogJ0dCUCcsXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgcmVxdWlyZXNSZWFzb25LZXlzOiBbXSxcbiAgICAgICAgcHJlZmVycmVkOiBmYWxzZSxcbiAgICAgICAgcHJlZmVycmVkTWVzc2FnZXM6ICcnLFxuICAgICAgICBjb21wYW55UHJlZmVycmVkOiBmYWxzZSxcbiAgICAgICAgY29tcGFueVByZWZlcnJlZE1lc3NhZ2U6ICcnLFxuICAgICAgICBvZmZpY2VQcmVmZXJyZWQ6IGZhbHNlLFxuICAgICAgICBvZmZpY2VQcmVmZXJyZWRNZXNzYWdlOiAnJyxcbiAgICAgICAgdG1jUHJlZmVycmVkOiBmYWxzZSxcbiAgICAgICAgdG1jUHJlZmVycmVkTWVzc2FnZTogJycsXG4gICAgICAgIHRtY1ByZWZlcnJlZExvZ29Vcmw6ICcnLFxuICAgICAgICB1bmF2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgIHVuYXZhaWxhYmxlTWVzc2FnZTogJycsXG4gICAgICAgIHJlcXVpcmVzUmVhc29uTWVzc2FnZXM6IFtdLFxuICAgICAgICBjYW5TZWxlY3Q6IGZhbHNlLFxuICAgICAgICBqb3VybmV5SGFzaDogJydcbiAgICAgIH0sXG4gICAgICBzdGFuZGFyZFByZW1pZXJGYXJlOiB7XG4gICAgICAgIGNsYXNzOiBudWxsLFxuICAgICAgICBmYXJlOiBudWxsLFxuICAgICAgICBpc0Rpc2FibGVkOiB0cnVlLFxuICAgICAgICBwcmljZTogTmFOLFxuICAgICAgICBjdXJyZW5jeTogJ0dCUCcsXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgcmVxdWlyZXNSZWFzb25LZXlzOiBbXSxcbiAgICAgICAgcHJlZmVycmVkOiBmYWxzZSxcbiAgICAgICAgcHJlZmVycmVkTWVzc2FnZXM6ICcnLFxuICAgICAgICBjb21wYW55UHJlZmVycmVkOiBmYWxzZSxcbiAgICAgICAgY29tcGFueVByZWZlcnJlZE1lc3NhZ2U6ICcnLFxuICAgICAgICBvZmZpY2VQcmVmZXJyZWQ6IGZhbHNlLFxuICAgICAgICBvZmZpY2VQcmVmZXJyZWRNZXNzYWdlOiAnJyxcbiAgICAgICAgdG1jUHJlZmVycmVkOiBmYWxzZSxcbiAgICAgICAgdG1jUHJlZmVycmVkTWVzc2FnZTogJycsXG4gICAgICAgIHRtY1ByZWZlcnJlZExvZ29Vcmw6ICcnLFxuICAgICAgICB1bmF2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgIHVuYXZhaWxhYmxlTWVzc2FnZTogJycsXG4gICAgICAgIHJlcXVpcmVzUmVhc29uTWVzc2FnZXM6IFtdLFxuICAgICAgICBjYW5TZWxlY3Q6IGZhbHNlLFxuICAgICAgICBqb3VybmV5SGFzaDogJydcbiAgICAgIH1cbiAgICB9O1xuICAgIC8vIHJldHVybk9iamVjdC5kdXJhdGlvbiA9IHJlc3VsdHMub3V0Ym91bmRUb3RhbER1cmF0aW9uO1xuICAgIHJldHVybk9iamVjdC5kYXRlQXJyaXZhbCA9IHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXS5kYXRlVGltZUFycml2aW5nO1xuICAgIHJldHVybk9iamVjdC5kYXRlRGVwYXJ0dXJlID0gcmVzdWx0c1swXS5kYXRlVGltZURlcGFydGluZztcbiAgICByZXR1cm5PYmplY3QuZHVyYXRpb24gPSB0aGlzLm1pblRvSG91cihcbiAgICAgIHJlc3VsdHMucmVkdWNlKChhY2MsIGZsaWdodCkgPT4gKGFjYyArPSBmbGlnaHQudG90YWxEdXJhdGlvbiksIDApXG4gICAgKTtcbiAgICByZXR1cm5PYmplY3QudGltZUFycml2YWxPZmZzZXQgPSB0aGlzLl9nZXRUaW1lT2Zmc2V0KFxuICAgICAgcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydERldGFpbC5vZmZzZXQsXG4gICAgICByZXN1bHRzW3Jlc3VsdHMubGVuZ3RoIC0gMV0uZGVzdGluYXRpb25BaXJwb3J0RGV0YWlsLmNvdW50cnlDb2RlID09PSAnR0InXG4gICAgKTtcbiAgICByZXR1cm5PYmplY3QudGltZURlcGFydHVyZU9mZnNldCA9IHRoaXMuX2dldFRpbWVPZmZzZXQoXG4gICAgICByZXN1bHRzWzBdLm9yaWdpbkFpcnBvcnREZXRhaWwub2Zmc2V0LFxuICAgICAgcmVzdWx0c1swXS5vcmlnaW5BaXJwb3J0RGV0YWlsLmNvdW50cnlDb2RlID09PSAnR0InXG4gICAgKTtcbiAgICByZXR1cm5PYmplY3QuYXJyaXZhbENvdW50cnlDb2RlID1cbiAgICAgIHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnREZXRhaWwuY291bnRyeUNvZGU7XG4gICAgcmV0dXJuT2JqZWN0LmRlcGFydHVyZUNvdW50cnlDb2RlID0gcmVzdWx0c1swXS5vcmlnaW5BaXJwb3J0RGV0YWlsLmNvdW50cnlDb2RlO1xuXG4gICAgLy8gISAtIHRpbWVzIGluY29ycmVjdCBpZiBvZmZzZXQgZnJvbSBCRSA+IDEgaHJcbiAgICBjb25zdCBhcnJpdmFsT2dPZmZzZXRTcGxpdCA9IHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXS5kYXRlVGltZUFycml2aW5nLnNwbGl0KCcrJyk7XG4gICAgY29uc3QgYXJyaXZhbE9nT2Zmc2V0ID0gIE51bWJlcihhcnJpdmFsT2dPZmZzZXRTcGxpdFsxXT8uc3BsaXQoJzonKVswXSk7XG5cbiAgICBjb25zdCBkZXBhcnR1cmVPZ09mZnNldFNwbGl0ID0gcmVzdWx0c1swXS5kYXRlVGltZURlcGFydGluZy5zcGxpdCgnKycpO1xuICAgIGNvbnN0IGRlcGFydHVyZWxPZ09mZnNldCA9IE51bWJlcihkZXBhcnR1cmVPZ09mZnNldFNwbGl0WzFdPy5zcGxpdCgnOicpWzBdKTtcblxuICAgIHJldHVybk9iamVjdC50aW1lQXJyaXZhbCA9IG1vbWVudC51dGMocmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdLmRhdGVUaW1lQXJyaXZpbmcpLmFkZChhcnJpdmFsT2dPZmZzZXQsICdob3VycycpLmZvcm1hdCgnSEg6bW0nKTtcbiAgICByZXR1cm5PYmplY3QudGltZURlcGFydHVyZSA9IG1vbWVudC51dGMocmVzdWx0c1swXS5kYXRlVGltZURlcGFydGluZykuYWRkKGRlcGFydHVyZWxPZ09mZnNldCwgJ2hvdXJzJykuZm9ybWF0KCdISDptbScpO1xuXG4gICAgcmV0dXJuT2JqZWN0LnVpZCA9IGluZGV4O1xuICAgIHJlc3VsdHMuZm9yRWFjaCgoZmxpZ2h0OiBGbGlnaHRKb3VybmV5KSA9PiB7XG4gICAgICByZXR1cm5PYmplY3QuY2FiaW5DbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xuICAgICAgLy8gWzE0OjQxXSBCcmVuZGFuIFZlbmluZ2FcbiAgICAgIC8vIEVjb25vbXkgKGFuZCB0aGVpciB2YXJpYW50cykgd291bGQgYmUgU3RhbmRhcmRcbiAgICAgIC8vIFByZW1pdW0gd291bGQgYmUgU3RhbmRhcmQgUHJlbWl1bVxuICAgICAgLy8gQnVzaW5lc3Mgd291bGQgYmUgQnVzaW5lc3MgUHJlbWl1bVxuICAgICAgc3dpdGNoIChmbGlnaHQuY2FiaW5DbGFzcykge1xuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpOlxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnczpcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkOlxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teTpcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmZhcmUgPSByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmZhcmVcbiAgICAgICAgICAgID8gcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5mYXJlLmNvbmNhdChmbGlnaHQpXG4gICAgICAgICAgICA6IFtmbGlnaHRdO1xuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUucHJpY2UgPSB0b3RhbC5wcmljZTtcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmN1cnJlbmN5ID0gdG90YWwuY3VycmVuY3k7XG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5jbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmpvdXJuZXlIYXNoID0gam91cm5leUhhc2g7XG4gICAgICAgICAgcmV0dXJuT2JqZWN0ID0gdGhpcy51cGRhdGVSdWxlcyhyZXR1cm5PYmplY3QsIGpvdXJuZXlIYXNoLCAnc3RhbmRhcmRGYXJlJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1ByZW1pdW0nOlxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5mYXJlID0gcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuZmFyZVxuICAgICAgICAgICAgPyByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5mYXJlLmNvbmNhdChmbGlnaHQpXG4gICAgICAgICAgICA6IFtmbGlnaHRdO1xuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnByaWNlID0gdG90YWwucHJpY2U7XG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuY3VycmVuY3kgPSB0b3RhbC5jdXJyZW5jeTtcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5jbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuam91cm5leUhhc2ggPSBqb3VybmV5SGFzaDtcbiAgICAgICAgICByZXR1cm5PYmplY3QgPSB0aGlzLnVwZGF0ZVJ1bGVzKHJldHVybk9iamVjdCwgam91cm5leUhhc2gsICdzdGFuZGFyZFByZW1pZXJGYXJlJyk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzOlxuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5mYXJlID0gcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuZmFyZVxuICAgICAgICAgICAgPyByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5mYXJlLmNvbmNhdChmbGlnaHQpXG4gICAgICAgICAgICA6IFtmbGlnaHRdO1xuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnByaWNlID0gdG90YWwucHJpY2U7XG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuY3VycmVuY3kgPSB0b3RhbC5jdXJyZW5jeTtcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5jbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuam91cm5leUhhc2ggPSBqb3VybmV5SGFzaDtcbiAgICAgICAgICByZXR1cm5PYmplY3QgPSB0aGlzLnVwZGF0ZVJ1bGVzKHJldHVybk9iamVjdCwgam91cm5leUhhc2gsICdidXNpbmVzc1ByZW1pZXJGYXJlJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKCduZXcgY2xhc3MgdG8gYmUgaW1wbGVtZW50ZWQ6ICcsIGZsaWdodC5jYWJpbkNsYXNzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmV0dXJuT2JqZWN0O1xuICB9XG5cbiAgLy8gZ2V0IHRoZSBvZmZzZXQgZnJvbSB0aW1lcyBpbiB0aGUgZm9ybWF0OiAwMjMtMDctMjVUMjI6MTc6MDAuMDAwKzAyOjAwXG4gIHByaXZhdGUgX2dldFRpbWVPZmZzZXQodGltZXN0cmluZzogc3RyaW5nLCB1azogYm9vbGVhbik6IG51bWJlciB7XG4gICAgY29uc3QgYXJyaXZhbFNwbGl0ID0gdGltZXN0cmluZz8uc3BsaXQoJysnKTtcblxuICAgIGlmIChhcnJpdmFsU3BsaXQgJiYgYXJyaXZhbFNwbGl0WzFdICYmICF1aykge1xuICAgICAgLy8gbm9ybWFsaXNlIGludG8gYSBudW1iZXJcbiAgICAgIGNvbnN0IGlubmVyU3BsaXQgPSBhcnJpdmFsU3BsaXRbMV0uc3BsaXQoJzonKTtcbiAgICAgIGNvbnN0IG9mZnNldCA9IE51bWJlcihpbm5lclNwbGl0WzBdKTtcbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJ1bGVzKFxuICAgIHJldHVybk9iamVjdDogRXVyb3N0YXJJdGVtLFxuICAgIGpvdXJuZXlIYXNoOiBzdHJpbmcsXG4gICAgZmFyZVR5cGU6IHN0cmluZ1xuICApOiBFdXJvc3Rhckl0ZW0ge1xuICAgIGNvbnN0IHNlbGVjdGVkUnVsZVN1bW1hcnk6IFJlY29yZFJ1bGVBY3Rpb24gPVxuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFt0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQ/LmpvdXJuZXlIYXNoXSB8fCB7fTtcblxuICAgIGNvbnN0IGhhc0ZpZWxkID0gPFQ+KGpvdXJuZXlIYXNoOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcsIGRlZjogVCk6IFQgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5oZWxwZXJzLmZpZWxkRnJvbU9iamVjdCh0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSwgW1xuICAgICAgICAgICdqb3VybmV5V2hlblNlbGVjdGVkJyxcbiAgICAgICAgICBqb3VybmV5SGFzaCxcbiAgICAgICAgICBmaWVsZFxuICAgICAgICBdKSB8fFxuICAgICAgICB0aGlzLmhlbHBlcnMuZmllbGRGcm9tT2JqZWN0KHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LCBbXG4gICAgICAgICAgJ3doZW5TZWxlY3RlZEFsb25lJyxcbiAgICAgICAgICBqb3VybmV5SGFzaCxcbiAgICAgICAgICBmaWVsZFxuICAgICAgICBdKSB8fFxuICAgICAgICB0aGlzLmhlbHBlcnMuZmllbGRGcm9tT2JqZWN0KHNlbGVjdGVkUnVsZVN1bW1hcnksIFtqb3VybmV5SGFzaCwgZmllbGRdKSB8fFxuICAgICAgICBkZWZcbiAgICAgICk7XG4gICAgfTtcbiAgICBzd2l0Y2ggKGZhcmVUeXBlKSB7XG4gICAgICBjYXNlICdzdGFuZGFyZEZhcmUnOlxuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmNvbXBhbnlQcmVmZXJyZWQgPVxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkIHx8XG4gICAgICAgICAgZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5jb21wYW55UHJlZmVycmVkTWVzc2FnZSA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgICAgICcnO1xuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLm9mZmljZVByZWZlcnJlZCA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/Lm9mZmljZVByZWZlcnJlZCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8ub2ZmaWNlUHJlZmVycmVkIHx8XG4gICAgICAgICAgZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlID1cbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgICAgICcnO1xuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnRtY1ByZWZlcnJlZCA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkIHx8XG4gICAgICAgICAgZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS50bWNQcmVmZXJyZWRNZXNzYWdlID1cbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgICAgICcnO1xuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnByZWZlcnJlZCA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8ub2ZmaWNlUHJlZmVycmVkIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy50bWNQcmVmZXJyZWQ7XG5cbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS50bWNQcmVmZXJyZWRMb2dvVXJsID1cbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTG9nb1VybCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTG9nb1VybCB8fFxuICAgICAgICAgICcnO1xuXG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUuc2VsZWN0ZWQgPSByZXR1cm5PYmplY3QudWlkID09PSB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQ/LnVpZDtcbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS51bmF2YWlsYWJsZSA9IGhhc0ZpZWxkKGpvdXJuZXlIYXNoLCAndW5hdmFpbGFibGUnLCBmYWxzZSk7XG5cbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS51bmF2YWlsYWJsZU1lc3NhZ2UgPSBoYXNGaWVsZChcbiAgICAgICAgICBqb3VybmV5SGFzaCxcbiAgICAgICAgICAndW5hdmFpbGFibGVNZXNzYWdlJyxcbiAgICAgICAgICAnJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnJlcXVpcmVzUmVhc29uS2V5cyA9IGhhc0ZpZWxkKGpvdXJuZXlIYXNoLCAncmVxdWlyZXNSZWFzb25LZXlzJywgW10pO1xuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgPSBoYXNGaWVsZChcbiAgICAgICAgICBqb3VybmV5SGFzaCxcbiAgICAgICAgICAncmVxdWlyZXNSZWFzb25NZXNzYWdlcycsXG4gICAgICAgICAgW11cbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdGFuZGFyZFByZW1pZXJGYXJlJzpcbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuY29tcGFueVByZWZlcnJlZCA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcbiAgICAgICAgICBmYWxzZTtcblxuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5jb21wYW55UHJlZmVycmVkTWVzc2FnZSA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgICAgICcnO1xuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5vZmZpY2VQcmVmZXJyZWQgPVxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/Lm9mZmljZVByZWZlcnJlZCB8fFxuICAgICAgICAgIGZhbHNlO1xuXG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLm9mZmljZVByZWZlcnJlZE1lc3NhZ2UgPVxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICAgICAgJyc7XG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnRtY1ByZWZlcnJlZCA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkIHx8XG4gICAgICAgICAgZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUudG1jUHJlZmVycmVkTWVzc2FnZSA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZE1lc3NhZ2UgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZE1lc3NhZ2UgfHxcbiAgICAgICAgICAnJztcbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUucHJlZmVycmVkID1cbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8uY29tcGFueVByZWZlcnJlZCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8uY29tcGFueVByZWZlcnJlZCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/Lm9mZmljZVByZWZlcnJlZCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy50bWNQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZDtcblxuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS50bWNQcmVmZXJyZWRMb2dvVXJsID1cbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTG9nb1VybCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTG9nb1VybCB8fFxuICAgICAgICAgICcnO1xuXG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnNlbGVjdGVkID1cbiAgICAgICAgICByZXR1cm5PYmplY3QudWlkID09PSB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQ/LnVpZDtcbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUudW5hdmFpbGFibGUgPSBoYXNGaWVsZChqb3VybmV5SGFzaCwgJ3VuYXZhaWxhYmxlJywgZmFsc2UpO1xuXG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnVuYXZhaWxhYmxlTWVzc2FnZSA9IGhhc0ZpZWxkKFxuICAgICAgICAgIGpvdXJuZXlIYXNoLFxuICAgICAgICAgICd1bmF2YWlsYWJsZU1lc3NhZ2UnLFxuICAgICAgICAgICcnXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnJlcXVpcmVzUmVhc29uS2V5cyA9IGhhc0ZpZWxkKFxuICAgICAgICAgIGpvdXJuZXlIYXNoLFxuICAgICAgICAgICdyZXF1aXJlc1JlYXNvbktleXMnLFxuICAgICAgICAgIFtdXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgPSBoYXNGaWVsZChcbiAgICAgICAgICBqb3VybmV5SGFzaCxcbiAgICAgICAgICAncmVxdWlyZXNSZWFzb25NZXNzYWdlcycsXG4gICAgICAgICAgW11cbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdidXNpbmVzc1ByZW1pZXJGYXJlJzpcbiAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuY29tcGFueVByZWZlcnJlZCA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcbiAgICAgICAgICBmYWxzZTtcblxuICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5jb21wYW55UHJlZmVycmVkTWVzc2FnZSA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkTWVzc2FnZSB8fFxuICAgICAgICAgICcnO1xuICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5vZmZpY2VQcmVmZXJyZWQgPVxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/Lm9mZmljZVByZWZlcnJlZCB8fFxuICAgICAgICAgIGZhbHNlO1xuXG4gICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLm9mZmljZVByZWZlcnJlZE1lc3NhZ2UgPVxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlIHx8XG4gICAgICAgICAgJyc7XG4gICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnRtY1ByZWZlcnJlZCA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkIHx8XG4gICAgICAgICAgZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUudG1jUHJlZmVycmVkTWVzc2FnZSA9XG4gICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZE1lc3NhZ2UgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZE1lc3NhZ2UgfHxcbiAgICAgICAgICAnJztcbiAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUucHJlZmVycmVkID1cbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8uY29tcGFueVByZWZlcnJlZCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8uY29tcGFueVByZWZlcnJlZCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/Lm9mZmljZVByZWZlcnJlZCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy50bWNQcmVmZXJyZWQgfHxcbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZDtcblxuICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS50bWNQcmVmZXJyZWRMb2dvVXJsID1cbiAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTG9nb1VybCB8fFxuICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkTG9nb1VybCB8fFxuICAgICAgICAgICcnO1xuXG4gICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnNlbGVjdGVkID1cbiAgICAgICAgICByZXR1cm5PYmplY3QudWlkID09PSB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQ/LnVpZDtcbiAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUudW5hdmFpbGFibGUgPSBoYXNGaWVsZChqb3VybmV5SGFzaCwgJ3VuYXZhaWxhYmxlJywgZmFsc2UpO1xuXG4gICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnVuYXZhaWxhYmxlTWVzc2FnZSA9IGhhc0ZpZWxkKFxuICAgICAgICAgIGpvdXJuZXlIYXNoLFxuICAgICAgICAgICd1bmF2YWlsYWJsZU1lc3NhZ2UnLFxuICAgICAgICAgICcnXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnJlcXVpcmVzUmVhc29uS2V5cyA9IGhhc0ZpZWxkKFxuICAgICAgICAgIGpvdXJuZXlIYXNoLFxuICAgICAgICAgICdyZXF1aXJlc1JlYXNvbktleXMnLFxuICAgICAgICAgIFtdXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgPSBoYXNGaWVsZChcbiAgICAgICAgICBqb3VybmV5SGFzaCxcbiAgICAgICAgICAncmVxdWlyZXNSZWFzb25NZXNzYWdlcycsXG4gICAgICAgICAgW11cbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldHVybk9iamVjdDtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KGNoZWNrSXNWYWxpZDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VFdXJvc3RhclF1ZXJ5KCkpO1xuICAgIGlmIChjaGVja0lzVmFsaWQpIHtcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzZXRQYXJhbXMoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIHRoaXMucmVzZXRRdWVyeSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShFdXJvc3RhckVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUywge1xuICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxuICAgIH0pO1xuXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcbiAgICB0aGlzLnZhbGlkYXRpb25GYXZvdXJpdGVNZXNzYWdlcyA9IFtdO1xuICAgIGlmICghdGhpcy5fb3JpZ2luQWlycG9ydCkge1xuICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIGFkZCBpbiBhIGRlcGFydHVyZSBsb2NhdGlvbicsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCkge1xuICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIGFkZCBpbiBhIGFycml2YWwgZGVzdGluYXRpb24nLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIobW9tZW50KCkpKSB7XG4gICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdEZXBhcnR1cmUgZGF0ZSBjYW4gbm90IGJlIGluIHRoZSBwYXN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCAmJlxuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ICYmXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHRoaXMuX29yaWdpbkFpcnBvcnRcbiAgICApIHtcbiAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ09yaWdpbiBhbmQgZGVzdGluYXRpb24gc3RhdGlvbiBjYW5ub3QgYmUgdGhlIHNhbWUnLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNSZXR1cm4pIHtcbiAgICAgIC8vIFRPRE8gY2hlY2sgdGhhdCByZXR1cm4gZGV0YWlscyBhcmUgc2V0XG4gICAgICBpZiAodGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc1NhbWVPckFmdGVyKHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSkpIHtcbiAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUmV0dXJuIGRhdGUgbXVzdCBiZSBhZnRlciB0aGUgZGVwYXJ0dXJlIGRhdGUnKTtcbiAgICAgIH1cbiAgICAgIC8vIHRoaXMgaXMgc3R1ZmYgZm9yIG1hdGNoaW5nIGNhYmluIGNsYXNzZXNcbiAgICAgIGlmICghdGhpcy5jaGVja0NhYmluTWF0Y2hpc1ZhbGlkKCkpIHtcbiAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZShcbiAgICAgICAgICAnVGhlIHR5cGVzIG9mIGNhYmluIGNsYXNzZXMgc2VsZWN0ZWQgYXJlIG5vdCBjb21wYXRpYmxlLiBFeGFtcGxlcyBvZiBjb21wYXRpYmxlIGNhYmluIGNsYXNzZXM7IEFueSAtIEFueTsgU3RhbmRhcmQgLSBTdGFuZGFyZDsgQnVzaW5lc3MgLSBCdXNpbmVzcycsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xuICAgIHRoaXMuaXNGYXZvdXJpdGVWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbkZhdm91cml0ZU1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcbiAgfVxuXG4gIGNoZWNrQ2FiaW5NYXRjaGlzVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoICh0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcykge1xuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkFueTpcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID09PSBGbGlnaHRDYWJpbkNsYXNzLkFueTtcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215OlxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215OlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzICE9PSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzICYmXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3MgIT09IEZsaWdodENhYmluQ2xhc3MuQW55XG4gICAgICAgICk7XG4gICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3M6XG4gICAgICAgIHJldHVybiAhKFxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID09PSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXkgfHxcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyA9PT0gRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teSB8fFxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID09PSBGbGlnaHRDYWJpbkNsYXNzLkFueVxuICAgICAgICApO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcblxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUodGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcykpO1xuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShFdXJvc3RhckVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUywge1xuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXG4gICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XG5cbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLmV1cm9zdGFyRmV0Y2hlci5mZXRjaExpc3QodGhpcy5nZXRTZWFyY2hRdWVyeSgpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGdtdFNlYXJjaChxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMpOiBPYnNlcnZhYmxlPEV1cm9zdGFyUXVvdGVSZXN1bHQ+IHtcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcbiAgICBxdWVyeS5wYXNzZW5nZXJzID0gdGhpcy5fcGFzc2VuZ2VycztcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmV1cm9zdGFyRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xuICAgIHRoaXMuX3N0YXJ0U2VhcmNoKHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XG4gICAgY29uc3QgcmVjZW50U2VhcmNoUXVlcnk6IElFdXJvc3RhclNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5FdXJvc3RhcixcbiAgICAgIHNlYXJjaEFyZ3M6IHJlY2VudFNlYXJjaFF1ZXJ5LFxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5vdXRCb3VuZERhdGUuZm9ybWF0KCksXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLmhlbHBlcnMuZ2V0VHJhdmVsbGVyc0lkKHRoaXMudHJhdmVsbGVycywgdGhpcy51c2VyU2VydmljZS5ib2JvPy5pZClcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyk6IElFdXJvc3RhclNlYXJjaEFyZ3Mge1xuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBJRXVyb3N0YXJTZWFyY2hBcmdzID0gcXVlcnk7XG4gICAgaWYgKHRoaXMuZGVwYXJ0TG9jYXRpb24pIHtcbiAgICAgIHNlYXJjaFF1ZXJ5LmRlcGFydExvY2F0aW9uID0gdGhpcy5kZXBhcnRMb2NhdGlvbjtcbiAgICB9XG4gICAgaWYgKHRoaXMuYXJyaXZlTG9jYXRpb24pIHtcbiAgICAgIHNlYXJjaFF1ZXJ5LmFycml2ZUxvY2F0aW9uID0gdGhpcy5hcnJpdmVMb2NhdGlvbjtcbiAgICB9XG4gICAgc2VhcmNoUXVlcnkub3V0Ym91bmRDYWJpbkNsYXNzTmFtZSA9IHRoaXMudHVybkNhYmluVHlwZVRvTmFtZSh0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyk7XG4gICAgaWYgKHRoaXMuaXNSZXR1cm4pIHtcbiAgICAgIHNlYXJjaFF1ZXJ5LnJldHVybkNhYmluQ2xhc3NOYW1lID1cbiAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3MgPT09IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXG4gICAgICAgICAgPyBzZWFyY2hRdWVyeS5vdXRib3VuZENhYmluQ2xhc3NOYW1lXG4gICAgICAgICAgOiB0aGlzLnR1cm5DYWJpblR5cGVUb05hbWUodGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3MpO1xuICAgIH1cbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XG4gIH1cblxuICB0dXJuQ2FiaW5UeXBlVG9OYW1lKGNsYXNzVHlwZTogRmxpZ2h0Q2FiaW5DbGFzcykge1xuICAgIGNvbnN0IGNsYXNzZXMgPSB0aGlzLmF2YWxpYWJsZUNsYXNzZXMudmFsdWU7XG4gICAgY29uc3Qgc2VsZWN0ZWRDYWxzc05hbWUgPSBjbGFzc2VzLmZpbmQoY2xhc3NJdGVtID0+IGNsYXNzSXRlbS50eXBlID09PSBjbGFzc1R5cGUpLm5hbWU7XG4gICAgcmV0dXJuIFtzZWxlY3RlZENhbHNzTmFtZV07XG4gIH1cblxuICBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERhdGUpIHtcbiAgICAgIGNvbnN0IG91dGJvdW5kVGltZVdpbmRvdyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICA/IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICA6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQXJyaXZhbFRpbWVXaW5kb3c7XG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERhdGUsXG4gICAgICAgIG91dGJvdW5kVGltZVdpbmRvd1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGF0ZSkge1xuICAgICAgY29uc3QgcmV0dXJuVGltZVdpbmRvdyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgPyByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgIDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3c7XG4gICAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5jb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUsXG4gICAgICAgIHJldHVyblRpbWVXaW5kb3dcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBseVNlYXJjaFF1ZXJ5KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFrZURlcGFydHVyZVRpbWVXaW5kb3coZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQsIHdpbmRvdzogVGltZVdpbmRvdyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHdpbmRvdyA9PT0gVGltZVdpbmRvdy5EZXBhcnQgPyB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIC0yLCAyKSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIG1ha2VBcnJpdmFsVGltZVdpbmRvdyhkYXRlVGltZTogbW9tZW50Lk1vbWVudCwgd2luZG93OiBUaW1lV2luZG93KTogc3RyaW5nIHtcbiAgICBpZiAod2luZG93ICE9PSBUaW1lV2luZG93LkFycml2ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhkYXRlVGltZSwgLTIsIDIpO1xuICB9XG5cbiAgY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKGRhdGU6IHN0cmluZywgdGltZVdpbmRvdz86IHN0cmluZyk6IG1vbWVudC5Nb21lbnQge1xuICAgIGlmICh0aW1lV2luZG93KSB7XG4gICAgICBjb25zdCBmbGlnaHRUaW1lID0gdGltZVdpbmRvdy5zcGxpdCgnLScpO1xuICAgICAgY29uc3QgdGltZUFuZERhdGUgPSBtb21lbnQoZGF0ZSkuYWRkKG1vbWVudC5kdXJhdGlvbih0aGlzLmhlbHBlcnMuaGhtbVRvVGltZShmbGlnaHRUaW1lWzBdKSkpO1xuICAgICAgLy8gYWRkIDIgaG91clxuICAgICAgcmV0dXJuIHRpbWVBbmREYXRlLmNsb25lKCkuYWRkKDIsICdob3VyJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2VhcmNoUXVlcnkoKTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMge1xuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8U2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM+KFxuICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5BaXJwb3J0OiB0aGlzLl9vcmlnaW5BaXJwb3J0LFxuICAgICAgICAgIGRlc3RpbmF0aW9uQWlycG9ydDogdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0LFxuICAgICAgICAgIG91dGJvdW5kRGF0ZTogdGhpcy5oZWxwZXJzLmZvcm1hdElzb0RhdGUodGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSksXG4gICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxuICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSxcbiAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWFcbiAgICAgICAgICApLFxuICAgICAgICAgIG91dGJvdW5kQXJyaXZhbFRpbWVXaW5kb3c6IHRoaXMubWFrZUFycml2YWxUaW1lV2luZG93KFxuICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSxcbiAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWFcbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXNzZW5nZXJzOiB0aGlzLl9wYXNzZW5nZXJzLFxuICAgICAgICAgIHJldHVyblRyaXA6IHRoaXMuaXNSZXR1cm4sXG4gICAgICAgICAgb3V0Ym91bmRDYWJpbkNsYXNzOiB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyA/IFt0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzc10gOiBudWxsLFxuICAgICAgICAgIHJlcXVpcmVGcmVlQmFnOiBudWxsLFxuICAgICAgICAgIG1heENvbm5lY3Rpb25zOiB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMsXG4gICAgICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzLFxuICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzOiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMubWFwKChjYXJyaWVyOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+XG4gICAgICAgICAgICBjYXJyaWVyPy5jb2RlID8gY2Fycmllci5jb2RlIDogbnVsbFxuICAgICAgICAgICksXG4gICAgICAgICAgZmFyZVR5cGU6IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSxcbiAgICAgICAgICB3aXRoR3JvdXBlZDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLmlzUmV0dXJuXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHJldHVybkRhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSksXG4gICAgICAgICAgICAgIHJldHVybkRlcGFydHVyZVRpbWVXaW5kb3c6IHRoaXMubWFrZURlcGFydHVyZVRpbWVXaW5kb3coXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlLFxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICByZXR1cm5BcnJpdmFsVGltZVdpbmRvdzogdGhpcy5tYWtlQXJyaXZhbFRpbWVXaW5kb3coXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlLFxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICByZXR1cm5DYWJpbkNsYXNzOiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc1xuICAgICAgICAgICAgICAgID8gW3RoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge31cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUcmF2ZWxsZXJzKCkge1xuICAgIGNvbnN0IHRyYXZlbGxlcnM6IEZsaWdodFBhc3Nlbmdlck9iamVjdFtdID0gW107XG5cblxuICAgIHRoaXMudHJhdmVsbGVycz8uZm9yRWFjaCh0cmF2ZWxsZXIgPT4ge1xuXG4gICAgICBjb25zdCBuZXdGbGlnaHRQYXNzT2JqZWN0OiBGbGlnaHRQYXNzZW5nZXJPYmplY3QgPSB7XG4gICAgICAgIHR5cGU6IHRyYXZlbGxlci5hZ2VUeXBlID8gdHJhdmVsbGVyLmFnZVR5cGUgPT09IGFnZXMuQWR1bHQgPyBGbGlnaHRQYXNzZW5nZXJUeXBlLkFkdWx0IDogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5DaGlsZCA6IEZsaWdodFBhc3NlbmdlclR5cGUuQWR1bHQsXG4gICAgICAgIGlkOiB0cmF2ZWxsZXIuaWQsXG4gICAgICAgIGd1ZXN0OiB0cmF2ZWxsZXIuZ3Vlc3RcbiAgICAgIH1cbiAgICAgIHRyYXZlbGxlcnMucHVzaChuZXdGbGlnaHRQYXNzT2JqZWN0KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3Bhc3NlbmdlcnMgPSB0cmF2ZWxsZXJzO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQXZhbGlhYmxlQ2xhc3NlcyhjbGFzc2VzVG9IaWRlPzp7XG4gICAgYnVzaW5lc3NfcHJlbWllcjpib29sZWFuOyBcbiAgICBzdGFuZGFyZDpib29sZWFuOyBcbiAgICBzdGFuZGFyZF9wcmVtaWVyOmJvb2xlYW47IFxuICB9KSB7XG5cbiAgICBsZXQgYWxsb3dlZENsYXNzZXM6IHtuYW1lOnN0cmluZyx0eXBlOkZsaWdodENhYmluQ2xhc3N9W10gPSBbIHtcbiAgICAgIG5hbWU6ICdBbnknLFxuICAgICAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5BbnlcbiAgICB9XTtcbiAgICBpZiAoY2xhc3Nlc1RvSGlkZSAmJiBPYmplY3Qua2V5cyhjbGFzc2VzVG9IaWRlKSkge1xuICAgICAgY29uc3Qge2J1c2luZXNzX3ByZW1pZXIsIHN0YW5kYXJkLCBzdGFuZGFyZF9wcmVtaWVyfSA9IGNsYXNzZXNUb0hpZGU7XG4gICAgICBpZiAoIXN0YW5kYXJkKSB7XG4gICAgICAgIGFsbG93ZWRDbGFzc2VzLnB1c2goe1xuICAgICAgICAgIG5hbWU6ICdTdGFuZGFyZCAoc2VtaSBmbGV4aWJsZSknLFxuICAgICAgICAgIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKCFzdGFuZGFyZF9wcmVtaWVyKSB7XG4gICAgICAgIGFsbG93ZWRDbGFzc2VzLnB1c2goe1xuICAgICAgICAgIG5hbWU6ICdTdGFuZGFyZCBwcmVtaWVyIChzZW1pIGZsZXhpYmxlKScsXG4gICAgICAgICAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKCFidXNpbmVzc19wcmVtaWVyKSB7XG4gICAgICAgIGFsbG93ZWRDbGFzc2VzLnB1c2goe1xuICAgICAgICAgIG5hbWU6ICdCdXNpbmVzcyBwcmVtaWVyIChmdWxseSBmbGV4aWJsZSknLFxuICAgICAgICAgIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYWxsb3dlZENsYXNzZXMgPSBbXG4gICAgICAge1xuICAgICAgICAgbmFtZTogJ0FueScsXG4gICAgICAgICB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLkFueVxuICAgICAgIH0sXG4gICAgICAge1xuICAgICAgICAgbmFtZTogJ1N0YW5kYXJkIChzZW1pIGZsZXhpYmxlKScsXG4gICAgICAgICB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlcbiAgICAgICB9LFxuICAgICAgIHtcbiAgICAgICAgIG5hbWU6ICdTdGFuZGFyZCBwcmVtaWVyIChzZW1pIGZsZXhpYmxlKScsXG4gICAgICAgICB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XG4gICAgICAgfSxcbiAgICAgICB7XG4gICAgICAgICBuYW1lOiAnQnVzaW5lc3MgcHJlbWllciAoZnVsbHkgZmxleGlibGUpJyxcbiAgICAgICAgIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NcbiAgICAgICB9XG4gICAgIF07XG4gICAgfVxuICAgIHRoaXMuYXZhbGlhYmxlQ2xhc3Nlcy5uZXh0KGFsbG93ZWRDbGFzc2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSBmbGlnaHQgcmVzdWx0c1xuICAgKiBAdG9kbyAtIEZpbGwgb3V0IFByZWZlcnJlZCBhbmQgQ28yIHNvcnRpbmcgd2hlbiB3ZSBoYXZlIHRoYXQgZGF0YVxuICAgKi9cbiAgcHVibGljIHNvcnRSZXN1bHRzKFxuICAgIHNvcnRNZXRob2RWYWx1ZTogU29ydFR5cGVzRXVyb3N0YXIsXG4gICAgZGlyOiBib29sZWFuLFxuICAgIGdpdmVuUmVzdWx0cz86IEV1cm9zdGFyUmVzdWx0c1tdXG4gICk6IHZvaWQge1xuICAgIGxldCByZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKFxuICAgICAgZ2l2ZW5SZXN1bHRzID8gZ2l2ZW5SZXN1bHRzIDogPEV1cm9zdGFyUmVzdWx0c1tdPig8dW5rbm93bj50aGlzLmZ1bGxSZXN1bHRzKVxuICAgICk7XG5cbiAgICBzd2l0Y2ggKHNvcnRNZXRob2RWYWx1ZSkge1xuICAgICAgY2FzZSBTb3J0VHlwZXNFdXJvc3Rhci5DaGVhcGVzdEZpcnN0OlxuICAgICAgICByZXN1bHRzID0gdGhpcy5zb3J0QnlQcmljZShyZXN1bHRzLCBkaXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU29ydFR5cGVzRXVyb3N0YXIuRWFybGllc3RGaXJzdDpcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5RGF0ZShyZXN1bHRzLCBkaXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBVbmtub3duIHNvcnRpbmcgbWV0aG9kOiAke3NvcnRNZXRob2RWYWx1ZX0gKysrYCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyk7XG4gIH1cblxuICBwdWJsaWMgc29ydFJlc3VsdHNGbGlnaHRKb3VybmV5cyhcbiAgICBzb3J0TWV0aG9kVmFsdWU6IFNvcnRUeXBlc0V1cm9zdGFyLFxuICAgIGluYm91bmQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBnaXZlblJlc3VsdHM/OiBGbGlnaHRJdGluZXJhcnlbXVxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XG4gICAgbGV0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUoZ2l2ZW5SZXN1bHRzKTtcblxuICAgIHN3aXRjaCAoc29ydE1ldGhvZFZhbHVlKSB7XG4gICAgICBjYXNlIFNvcnRUeXBlc0V1cm9zdGFyLkNoZWFwZXN0Rmlyc3Q6XG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnNvcnRCeVByaWNlRmxpZ2h0KHJlc3VsdHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU29ydFR5cGVzRXVyb3N0YXIuRWFybGllc3RGaXJzdDpcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5RGF0ZUZsaWdodChyZXN1bHRzLCBpbmJvdW5kKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNvcnRUeXBlc0V1cm9zdGFyLkxhdGVzdEZpcnN0OlxuICAgICAgICByZXN1bHRzID0gdGhpcy5zb3J0QnlEYXRlRmxpZ2h0RGVjZW5kaW5nKHJlc3VsdHMsIGluYm91bmQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU29ydFR5cGVzRXVyb3N0YXIuRXhwZW5zaXZlRmlyc3Q6XG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnNvcnRCeUV4cGVuc2l2ZUZsaWdodChyZXN1bHRzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNvcnRUeXBlc0V1cm9zdGFyLkZhc3Rlc3RGaXJzdDpcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5RmFzdGVzdEZsaWdodChyZXN1bHRzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNvcnRUeXBlc0V1cm9zdGFyLlByZWZlcnJlZEZpcnN0OlxuICAgICAgICByZXN1bHRzID0gdGhpcy5zb3J0QnlQcmVmZXJyZWRGbGlnaHQocmVzdWx0cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTb3J0VHlwZXNFdXJvc3Rhci5DbzJGaXJzdDpcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5Q2FyYm9uRmxpZ2h0KHJlc3VsdHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBVbmtub3duIHNvcnRpbmcgbWV0aG9kOiAke3NvcnRNZXRob2RWYWx1ZX0gKysrYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBzZXRQcmVmZXJyZWRBbmRHcmVlbmVyQ2hvaWNlKHJlc3VsdHM6IEV1cm9zdGFyUXVvdGVSZXN1bHQpIHtcbiAgICByZXN1bHRzLmpvdXJuZXlzLm1hcCgocmVzdWx0OiBFdXJvc3Rhckl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XG4gICAgICByZXN1bHQucHJlZmVycmVkID1cbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtyZXN1bHQuam91cm5leUhhc2hdPy5jb21wYW55UHJlZmVycmVkIHx8XG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW3Jlc3VsdC5qb3VybmV5SGFzaF0/LmNvbXBhbnlQcmVmZXJyZWQgfHxcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtyZXN1bHQuam91cm5leUhhc2hdPy5vZmZpY2VQcmVmZXJyZWQgfHxcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbcmVzdWx0LmpvdXJuZXlIYXNoXT8ub2ZmaWNlUHJlZmVycmVkIHx8XG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbcmVzdWx0LmpvdXJuZXlIYXNoXT8udG1jUHJlZmVycmVkIHx8XG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW3Jlc3VsdC5qb3VybmV5SGFzaF0/LnRtY1ByZWZlcnJlZDtcblxuICAgICAgcmVzdWx0LmdyZWVuZXJDaG9pY2UgPVxuICAgICAgICByZXN1bHQuY28yUGVySXRlbSA8PSB0aGlzLmhlbHBlcnMuY2FsY3VsYXRlQXZlcmFnZUNvMlBlckl0ZW0ocmVzdWx0cy5qb3VybmV5cyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuICBzb3J0QnlQcmljZUZsaWdodChyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IEZsaWdodEl0aW5lcmFyeVtdIHtcbiAgICByZXR1cm4gcmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICByZXR1cm4gTnVtYmVyKGEudG90YWwucHJpY2UpIC0gTnVtYmVyKGIudG90YWwucHJpY2UpO1xuICAgIH0pO1xuICB9XG5cbiAgc29ydEJ5RXhwZW5zaXZlRmxpZ2h0KHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xuICAgIHJldHVybiByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIHJldHVybiBOdW1iZXIoYi50b3RhbC5wcmljZSkgLSBOdW1iZXIoYS50b3RhbC5wcmljZSk7XG4gICAgfSk7XG4gIH1cblxuICBzb3J0QnlGYXN0ZXN0RmxpZ2h0KHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xuICAgIHJldHVybiByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIHJldHVybiBhLm91dGJvdW5kVG90YWxEdXJhdGlvbiAhPT0gYi5vdXRib3VuZFRvdGFsRHVyYXRpb25cbiAgICAgICAgPyBhLm91dGJvdW5kVG90YWxEdXJhdGlvbiAtIGIub3V0Ym91bmRUb3RhbER1cmF0aW9uXG4gICAgICAgIDogYS5pbmJvdW5kVG90YWxEdXJhdGlvbiAtIGIuaW5ib3VuZFRvdGFsRHVyYXRpb247XG4gICAgfSk7XG4gIH1cblxuICBzb3J0QnlDYXJib25GbGlnaHQocmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBGbGlnaHRJdGluZXJhcnlbXSB7XG4gICAgcmV0dXJuIHJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgcmV0dXJuIE51bWJlcihhLmNvMlBlclBhc3NlbmdlcikgLSBOdW1iZXIoYi5jbzJQZXJQYXNzZW5nZXIpO1xuICAgIH0pO1xuICB9XG4gIHNvcnRCeVByZWZlcnJlZEZsaWdodChyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IEZsaWdodEl0aW5lcmFyeVtdIHtcbiAgICByZXR1cm4gcmVzdWx0cy5zb3J0KFxuICAgICAgKGE6IEV1cm9zdGFySXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsIGI6IEV1cm9zdGFySXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+IHtcbiAgICAgICAgcmV0dXJuICthLnByZWZlcnJlZCAtICtiLnByZWZlcnJlZDtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHNvcnRCeURhdGVGbGlnaHQocmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10sIGluYm91bmQ6IGJvb2xlYW4pOiBGbGlnaHRJdGluZXJhcnlbXSB7XG4gICAgcmV0dXJuIHJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKGluYm91bmQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtb21lbnQoYS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpIC1cbiAgICAgICAgICBtb21lbnQoYi5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpIC1cbiAgICAgICAgICBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLnVuaXgoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc29ydEJ5RGF0ZUZsaWdodERlY2VuZGluZyhyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSwgaW5ib3VuZDogYm9vbGVhbik6IEZsaWdodEl0aW5lcmFyeVtdIHtcbiAgICByZXR1cm4gcmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoaW5ib3VuZCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG1vbWVudChiLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KCkgLVxuICAgICAgICAgIG1vbWVudChhLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KClcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbW9tZW50KGIub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KCkgLVxuICAgICAgICAgIG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU29ydCByZXN1bHRzIGJ5IGRlcGFydHVyZSB0aW1lXG4gICAqXG4gICAqIEBwYXJhbSB7RXVyb3N0YXJSZXN1bHRzW119IHJlc3VsdHNcbiAgICogQHJldHVybnNcbiAgICogQG1lbWJlcm9mIEV1cm9zdGFySW5mb1xuICAgKi9cbiAgc29ydEJ5RGF0ZShyZXN1bHRzOiBFdXJvc3RhclJlc3VsdHNbXSwgZGlyPzogYm9vbGVhbik6IEV1cm9zdGFyUmVzdWx0c1tdIHtcbiAgICBjb25zdCBieURhdGUgPSAoYTogRXVyb3N0YXJJdGVtLCBiOiBFdXJvc3Rhckl0ZW0pID0+IHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIG1vbWVudChhLmRhdGVEZXBhcnR1cmUpLnVuaXgoKSAtIG1vbWVudChiLmRhdGVEZXBhcnR1cmUpLnVuaXgoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtb21lbnQoYi5kYXRlRGVwYXJ0dXJlKS51bml4KCkgLSBtb21lbnQoYS5kYXRlRGVwYXJ0dXJlKS51bml4KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSB7XG4gICAgICBvdXRib3VuZDogcmVzdWx0c1swXS5vdXRib3VuZC5zb3J0KGJ5RGF0ZSksXG4gICAgICBpbmJvdW5kOiByZXN1bHRzWzBdLmluYm91bmQuc29ydChieURhdGUpXG4gICAgfTtcbiAgICByZXR1cm4gW3NvcnRlZFJlc3VsdHNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnQgcmVzdWx0cyBieSBwcmljZVxuICAgKlxuICAgKiBAcGFyYW0ge0V1cm9zdGFyUmVzdWx0c1tdfSByZXN1bHRzXG4gICAqIEByZXR1cm5zXG4gICAqIEBtZW1iZXJvZiBFdXJvc3RhckluZm9cbiAgICovXG4gIHNvcnRCeVByaWNlKHJlc3VsdHM6IEV1cm9zdGFyUmVzdWx0c1tdLCBkaXI/OiBib29sZWFuKTogRXVyb3N0YXJSZXN1bHRzW10ge1xuICAgIGNvbnN0IGJ5UHJpY2UgPSAoYTogRXVyb3N0YXJJdGVtLCBiOiBFdXJvc3Rhckl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGFQcmljZSA9XG4gICAgICAgICthLnN0YW5kYXJkRmFyZS5wcmljZSB8fCArYS5zdGFuZGFyZFByZW1pZXJGYXJlLnByaWNlIHx8ICthLmJ1c2luZXNzUHJlbWllckZhcmUucHJpY2U7XG4gICAgICBjb25zdCBiUHJpY2UgPVxuICAgICAgICArYi5zdGFuZGFyZEZhcmUucHJpY2UgfHwgK2Iuc3RhbmRhcmRQcmVtaWVyRmFyZS5wcmljZSB8fCArYi5idXNpbmVzc1ByZW1pZXJGYXJlLnByaWNlO1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gYVByaWNlIC0gYlByaWNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJQcmljZSAtIGFQcmljZTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IHtcbiAgICAgIG91dGJvdW5kOiByZXN1bHRzWzBdLm91dGJvdW5kLnNvcnQoYnlQcmljZSksXG4gICAgICBpbmJvdW5kOiByZXN1bHRzWzBdLmluYm91bmQuc29ydChieVByaWNlKVxuICAgIH07XG4gICAgcmV0dXJuIFtzb3J0ZWRSZXN1bHRzXTtcbiAgfVxuXG4gIHVwZGF0ZVNlYXJjaEZyb21FeHBpcmVkQmFza2V0SXRlbShiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLCBzZXREYXRlVGltZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hFdXJvU3RhclF1ZXJ5OiBTZWFyY2hFdXJvc3RhclF1ZXJ5VmFyaWFibGVzID0gYmFza2V0SXRlbS5zZWFyY2hRdWVyeTtcbiAgICBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeSkge1xuICAgICAgaWYgKHNldERhdGVUaW1lKSB7XG4gICAgICAgIGlmIChzZWFyY2hFdXJvU3RhclF1ZXJ5Lm91dGJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IG91dGJvdW5kVGltZVdpbmRvdyA9IHNlYXJjaEV1cm9TdGFyUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgICAgICA/IHNlYXJjaEV1cm9TdGFyUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgICAgICA6IHNlYXJjaEV1cm9TdGFyUXVlcnkub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcbiAgICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxuICAgICAgICAgICAgc2VhcmNoRXVyb1N0YXJRdWVyeS5vdXRib3VuZERhdGUsXG4gICAgICAgICAgICBvdXRib3VuZFRpbWVXaW5kb3dcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIGlmIChzZWFyY2hFdXJvU3RhclF1ZXJ5LnJldHVybkRhdGUpIHtcbiAgICAgICAgICBjb25zdCByZXR1cm5UaW1lV2luZG93ID0gc2VhcmNoRXVyb1N0YXJRdWVyeS5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgICAgICA/IHNlYXJjaEV1cm9TdGFyUXVlcnkucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICAgICAgOiBzZWFyY2hFdXJvU3RhclF1ZXJ5LnJldHVybkFycml2YWxUaW1lV2luZG93O1xuICAgICAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcbiAgICAgICAgICAgIHNlYXJjaEV1cm9TdGFyUXVlcnkucmV0dXJuRGF0ZSxcbiAgICAgICAgICAgIHJldHVyblRpbWVXaW5kb3dcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLl9wYXNzZW5nZXJzID0gc2VhcmNoRXVyb1N0YXJRdWVyeS5wYXNzZW5nZXJzO1xuICAgICAgdGhpcy5hZHVsdHMgPSB0aGlzLl9wYXNzZW5nZXJzLmZpbHRlcigoYTogYW55KSA9PiBhLnR5cGUgPT0gJ0FEVUxUJykubGVuZ3RoO1xuICAgICAgdGhpcy5jaGlsZHJlbiA9IHRoaXMuX3Bhc3NlbmdlcnMuZmlsdGVyKChhOiBhbnkpID0+IGEudHlwZSA9PSAnQ0hJTEQnKS5sZW5ndGg7XG4gICAgICB0aGlzLnNldFF1ZXJ5RnJvbUJhc2tldEl0ZW0oYmFza2V0SXRlbSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRUcmF2ZWxsZXJzRnJvbUJhc2tldEl0ZW0oYmFza2V0SXRlbSk7XG4gIH1cblxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhwcmV2aW91c0l0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+KTogdm9pZCB7XG4gICAgY29uc3QgZmxpZ2h0SXRlbTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMgPVxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5GbGlnaHRdPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCByYWlsSXRlbTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzID0gcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5SYWlsXT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgaXJsSXRlbTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMgPVxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbF0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IGhvdGVsSXRlbTogU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXMgPSBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLlJhaWxdPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCBjYXJJdGVtOiBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXMgPSBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkNhcl0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IGxvdW5nZUl0ZW06IFNlYXJjaExvdW5nZXNRdWVyeVZhcmlhYmxlcyA9IHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuTG91bmdlXT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgcGFya2luZ0l0ZW06IFNlYXJjaFBhcmtpbmdRdWVyeVZhcmlhYmxlcyA9XG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLlBhcmtpbmddPy5zZWFyY2hRdWVyeTtcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSBtb21lbnQoXG4gICAgICAgICAgKHByZXZpb3VzSXRlbXMuRkxJR0hULm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoJ1QnLCAnJykuc3BsaXQoJy4nKVswXSxcbiAgICAgICAgICAnWVlZWS1NTS1ERGhoOm1tOnNzJ1xuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzApXG4gICAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLm91dEJvdW5kRGF0ZS5zdWJ0cmFjdChcbiAgICAgICAgICAgIHRoaXMub3V0Qm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwLFxuICAgICAgICAgICAgJ21pbnV0ZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuRkxJR0hULmluYm91bmREYXRlKSB7XG4gICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudChcbiAgICAgICAgICAgIChwcmV2aW91c0l0ZW1zLkZMSUdIVC5pbmJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoJ1QnLCAnJykuc3BsaXQoJy4nKVswXSxcbiAgICAgICAgICAgICdZWVlZLU1NLUREaGg6bW06c3MnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMClcbiAgICAgICAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmluYm91bmREYXRlLnN1YnRyYWN0KFxuICAgICAgICAgICAgICB0aGlzLmluYm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwLFxuICAgICAgICAgICAgICAnbWludXRlcydcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgZXVyb3N0YXIgZnJvbSBmbGlnaHQgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmFpbEl0ZW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gbW9tZW50KFxuICAgICAgICAgIChwcmV2aW91c0l0ZW1zLlJBSUwub3V0Ym91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZSgnVCcsICcnKS5zcGxpdCgnLicpWzBdLFxuICAgICAgICAgICdZWVlZLU1NLUREaGg6bW06c3MnXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMClcbiAgICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMub3V0Qm91bmREYXRlLnN1YnRyYWN0KFxuICAgICAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzAsXG4gICAgICAgICAgICAnbWludXRlcydcbiAgICAgICAgICApO1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5SQUlMLmluYm91bmREYXRlKSB7XG4gICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudChcbiAgICAgICAgICAgIChwcmV2aW91c0l0ZW1zLlJBSUwuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKCdUJywgJycpLnNwbGl0KCcuJylbMF0sXG4gICAgICAgICAgICAnWVlZWS1NTS1ERGhoOm1tOnNzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzApXG4gICAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5pbmJvdW5kRGF0ZS5zdWJ0cmFjdChcbiAgICAgICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCxcbiAgICAgICAgICAgICAgJ21pbnV0ZXMnXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGV1cm9zdGFyIGZyb20gcmFpbCBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpcmxJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IG1vbWVudChcbiAgICAgICAgICAocHJldmlvdXNJdGVtcy5JTlRFUk5BVElPTkFMX1JBSUwub3V0Ym91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZSgnVCcsICcnKS5zcGxpdCgnLicpWzBdLFxuICAgICAgICAgICdZWVlZLU1NLUREaGg6bW06c3MnXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMClcbiAgICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMub3V0Qm91bmREYXRlLnN1YnRyYWN0KFxuICAgICAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzAsXG4gICAgICAgICAgICAnbWludXRlcydcbiAgICAgICAgICApO1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5JTlRFUk5BVElPTkFMX1JBSUwuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KFxuICAgICAgICAgICAgKHByZXZpb3VzSXRlbXMuSU5URVJOQVRJT05BTF9SQUlMLmluYm91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZSgnVCcsICcnKS5zcGxpdCgnLicpWzBdLFxuICAgICAgICAgICAgJ1lZWVktTU0tRERoaDptbTpzcydcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh0aGlzLmluYm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwKVxuICAgICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaW5ib3VuZERhdGUuc3VidHJhY3QoXG4gICAgICAgICAgICAgIHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzAsXG4gICAgICAgICAgICAgICdtaW51dGVzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBldXJvc3RhciBmcm9tIGludGVybmF0aW9uYWwgcmFpbCBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChob3RlbEl0ZW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gbW9tZW50KFxuICAgICAgICAgIChwcmV2aW91c0l0ZW1zLkhPVEVMLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoJ1QnLCAnJykuc3BsaXQoJy4nKVswXSxcbiAgICAgICAgICAnWVlZWS1NTS1ERGhoOm1tOnNzJ1xuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzApXG4gICAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLm91dEJvdW5kRGF0ZS5zdWJ0cmFjdChcbiAgICAgICAgICAgIHRoaXMub3V0Qm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwLFxuICAgICAgICAgICAgJ21pbnV0ZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuSE9URUwuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KFxuICAgICAgICAgICAgKHByZXZpb3VzSXRlbXMuSE9URUwuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKCdUJywgJycpLnNwbGl0KCcuJylbMF0sXG4gICAgICAgICAgICAnWVlZWS1NTS1ERGhoOm1tOnNzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzApXG4gICAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5pbmJvdW5kRGF0ZS5zdWJ0cmFjdChcbiAgICAgICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCxcbiAgICAgICAgICAgICAgJ21pbnV0ZXMnXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGV1cm9zdGFyIGZyb20gaG90ZWwgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FySXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSBtb21lbnQoXG4gICAgICAgICAgKHByZXZpb3VzSXRlbXMuQ0FSLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoJ1QnLCAnJykuc3BsaXQoJy4nKVswXSxcbiAgICAgICAgICAnWVlZWS1NTS1ERGhoOm1tOnNzJ1xuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzApXG4gICAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLm91dEJvdW5kRGF0ZS5zdWJ0cmFjdChcbiAgICAgICAgICAgIHRoaXMub3V0Qm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwLFxuICAgICAgICAgICAgJ21pbnV0ZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuQ0FSLmluYm91bmREYXRlKSB7XG4gICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudChcbiAgICAgICAgICAgIChwcmV2aW91c0l0ZW1zLkNBUi5pbmJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoJ1QnLCAnJykuc3BsaXQoJy4nKVswXSxcbiAgICAgICAgICAgICdZWVlZLU1NLUREaGg6bW06c3MnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMClcbiAgICAgICAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmluYm91bmREYXRlLnN1YnRyYWN0KFxuICAgICAgICAgICAgICB0aGlzLmluYm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwLFxuICAgICAgICAgICAgICAnbWludXRlcydcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgZXVyb3N0YXIgZnJvbSBjYXIgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobG91bmdlSXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSBtb21lbnQoXG4gICAgICAgICAgKHByZXZpb3VzSXRlbXMuTE9VTkdFLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoJ1QnLCAnJykuc3BsaXQoJy4nKVswXSxcbiAgICAgICAgICAnWVlZWS1NTS1ERGhoOm1tOnNzJ1xuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzApXG4gICAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLm91dEJvdW5kRGF0ZS5zdWJ0cmFjdChcbiAgICAgICAgICAgIHRoaXMub3V0Qm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwLFxuICAgICAgICAgICAgJ21pbnV0ZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuTE9VTkdFLmluYm91bmREYXRlKSB7XG4gICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudChcbiAgICAgICAgICAgIChwcmV2aW91c0l0ZW1zLkxPVU5HRS5pbmJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoJ1QnLCAnJykuc3BsaXQoJy4nKVswXSxcbiAgICAgICAgICAgICdZWVlZLU1NLUREaGg6bW06c3MnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMClcbiAgICAgICAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmluYm91bmREYXRlLnN1YnRyYWN0KFxuICAgICAgICAgICAgICB0aGlzLmluYm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwLFxuICAgICAgICAgICAgICAnbWludXRlcydcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgZXVyb3N0YXIgZnJvbSBsb3VuZ2UgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocGFya2luZ0l0ZW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gbW9tZW50KFxuICAgICAgICAgIChwcmV2aW91c0l0ZW1zLlBBUktJTkcub3V0Ym91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZSgnVCcsICcnKS5zcGxpdCgnLicpWzBdLFxuICAgICAgICAgICdZWVlZLU1NLUREaGg6bW06c3MnXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMClcbiAgICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMub3V0Qm91bmREYXRlLnN1YnRyYWN0KFxuICAgICAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzAsXG4gICAgICAgICAgICAnbWludXRlcydcbiAgICAgICAgICApO1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5QQVJLSU5HLmluYm91bmREYXRlKSB7XG4gICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudChcbiAgICAgICAgICAgIChwcmV2aW91c0l0ZW1zLlBBUktJTkcuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKCdUJywgJycpLnNwbGl0KCcuJylbMF0sXG4gICAgICAgICAgICAnWVlZWS1NTS1ERGhoOm1tOnNzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzApXG4gICAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5pbmJvdW5kRGF0ZS5zdWJ0cmFjdChcbiAgICAgICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCxcbiAgICAgICAgICAgICAgJ21pbnV0ZXMnXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGV1cm9zdGFyIGZyb20gcGFya2luZyBpdGVtJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0VG90YWxCYWdnYWdlKHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5KTogbnVtYmVyIHtcbiAgICBsZXQgdG90YWwgPSAwO1xuXG4gICAgY29uc3QgcGFyc2VkQWRkaXRpb25hbCA9IEpTT04ucGFyc2UocmVzdWx0LmFkZGl0aW9uYWwpO1xuICAgIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzKSB7XG4gICAgICBwYXJzZWRBZGRpdGlvbmFsLm91dGJvdW5kRmxpZ2h0cy5mb3JFYWNoKChmbGlnaHQ6IGFueSkgPT4ge1xuICAgICAgICBmbGlnaHQuYmFnZ2FnZS5mb3JFYWNoKChiYWc6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChiYWcuYWxsb3dhbmNlICYmIGJhZy5hbGxvd2FuY2UgPiB0b3RhbCkge1xuICAgICAgICAgICAgdG90YWwgPSBiYWcuYWxsb3dhbmNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHBhcnNlZEFkZGl0aW9uYWwgJiYgcGFyc2VkQWRkaXRpb25hbC5iYWdnYWdlQWxsb3dhbmNlKSB7XG4gICAgICBwYXJzZWRBZGRpdGlvbmFsLmJhZ2dhZ2VBbGxvd2FuY2UuZm9yRWFjaCgoYmFnZ2FnZUFsbG93OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSAmJiBOdW1iZXIoYmFnZ2FnZUFsbG93LmJhZ2dhZ2UucXR5KSA+IHRvdGFsKSB7XG4gICAgICAgICAgdG90YWwgPSBOdW1iZXIoYmFnZ2FnZUFsbG93LmJhZ2dhZ2UucXR5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvdGFsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdpdmUgdGhlIGNvcnJlY3QgZm9ybWF0IGZvciB0cmFuc2ZlcmluZyBtaW51ZXRlcyBvbiB0aGUgc2xpZGVyc1xuICAgKiBAcGFyYW0gbWluIC0gdGhlIG1pbiBpbiAxMDB0aCdzIHRvIHRyYW5zZm9ybSBvbnRvIDYwdGgnc1xuICAgKi9cbiAgdHJhbnNmb3JtTWluKG1pbjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBsZXQgbnVtID0gKE51bWJlcihtaW4pICogNjApIC8gMTAwO1xuICAgIC8vIGNvbnNvbGUubG9nKCcrKysgTnVtIENvcHk6ICcsIF8uY2xvbmUobnVtKSwgJyArKysnKTtcbiAgICBpZiAobnVtICUgMSA8IDAuNSkge1xuICAgICAgbnVtID0gTWF0aC5mbG9vcihudW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW0gPSBNYXRoLmNlaWwobnVtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVtLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBhcHBseSBhbGwgZmlsdGVycyB0byByZXN1bHRzXG4gICAqIEBwYXJhbSBmaWx0ZXJzXG4gICAqIEBwYXJhbSBpbmJvdW5kXG4gICAqIEBwYXJhbSByZXN1bHRzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhcHBseUZpbHRlcnMoZmlsdGVyczogRmxpZ2h0RmlsdGVycyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZ1bGxSZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xuICAgIH1cblxuICAgIC8vIG5lZWQgdG8gZmlsdGVyIG92ZXIgdGhlIHRpbWVzLCBzdG9wcyBhbmQgcHJpY2UsIHRob3VnaCBwcmljZSBhbmQgc3RvcHMgYWx3YXlzIHNlZW0gdG8gYmUgdGhlIHNhbWVcblxuICAgIC8vICEgLSBWQVJJT1VTIEZVTkNUSU9OUyBUTyBQQVNTIElOIFRPIERPIFRIRSBBQ1RVQUwgRklMVEVSSU5HXG5cbiAgICBjb25zdCB0ZXN0ZXIgPSAoXG4gICAgICBmaWx0ZXJzVG90ZXN0OiBSZWNvcmQ8bnVtYmVyIHwgc3RyaW5nLCBTZWxlY3RGaWx0ZXI+LFxuICAgICAgdGVzdEZ1bmN0aW9uOiAoXG4gICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSxcbiAgICAgICAgdmFsdWU6IHN0cmluZyB8IG51bWJlclxuICAgICAgKSA9PiBib29sZWFuXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IE9iamVjdC52YWx1ZXMoZmlsdGVyc1RvdGVzdCk/LmZpbHRlcihcbiAgICAgICAgKGZpbHRlcjogU2VsZWN0RmlsdGVyKSA9PiBmaWx0ZXIuc2VsZWN0ZWRcbiAgICAgICk7XG4gICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuICEhc2VsZWN0ZWQuZmluZCgoZmlsdGVyOiBTZWxlY3RGaWx0ZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0ZXN0RnVuY3Rpb24oZmxpZ2h0SXRpbmVyYXJ5LCBmaWx0ZXIudmFsdWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChfZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGlzVGltZUJldHdlZW4gPSAoXG4gICAgICBtaW5tYXg6IE1pbk1heCxcbiAgICAgIGZpZWxkOiBzdHJpbmdcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IG1vbWVudChcbiAgICAgICAgICB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcbiAgICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxuICAgICAgICAgIClcbiAgICAgICAgKS5nZXQoJ2hvdXInKTtcblxuICAgICAgICBjb25zdCB0b3RhbFRpbWU6IG51bWJlciA9IE51bWJlcihcbiAgICAgICAgICBgJHt2YWwudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRvdGFsVGltZSA+PSBtaW5tYXgubWluICYmIHRvdGFsVGltZSA8PSBtaW5tYXgubWF4O1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVwbGFjZUZpZWxkcyA9IChmaWVsZDogc3RyaW5nLCBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gZmllbGRcbiAgICAgICAgLnJlcGxhY2UoJ09VVEJPVU5EX0RFUEFSVFVSRScsICdvdXRib3VuZEZsaWdodHMuMCcpXG4gICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICdPVVRCT1VORF9BUlJJVkFMJyxcbiAgICAgICAgICAnb3V0Ym91bmRGbGlnaHRzLicgKyAoZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cz8ubGVuZ3RoIC0gMSlcbiAgICAgICAgKVxuICAgICAgICAucmVwbGFjZSgnSU5CT1VORF9ERVBBUlRVUkUnLCAnaW5ib3VuZEZsaWdodHMuMCcpXG4gICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICdJTkJPVU5EX0FSUklWQUwnLFxuICAgICAgICAgICdpbmJvdW5kRmxpZ2h0cy4nICsgKChmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMgfHwgW10pPy5sZW5ndGggLSAxKVxuICAgICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCBpc0JldHdlZW4gPSAoXG4gICAgICBtaW5tYXg6IE1pbk1heCxcbiAgICAgIGZpZWxkOiBzdHJpbmdcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxuICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcbiAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHZhbCA+PSBtaW5tYXgubWluICYmIHZhbCA8PSBtaW5tYXgubWF4O1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmllbGRIYXNWYWx1ZSA9IChcbiAgICAgIGZpZWxkOiBrZXlvZiBGbGlnaHRKb3VybmV5XG4gICAgKTogKChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IGJvb2xlYW4pID0+IHtcbiAgICAgIHJldHVybiAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiBmbGlnaHRbZmllbGRdID09PSB2YWx1ZTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIC8vICEgLSBPdXRib3VuZCBhbmQgSW5ib3VuZCBGaWx0ZXJzXG5cbiAgICBjb25zdCBvdXRJdGluZXJhcnlUZXN0ZXJzOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKVtdID0gW107XG4gICAgY29uc3QgaW5JdGluZXJhcnlUZXN0ZXJzOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKVtdID0gW107XG5cbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMuYXJyaXZhbFRpbWUsICdPVVRCT1VORF9BUlJJVkFMLmRhdGVUaW1lQXJyaXZpbmcnKVxuICAgICk7XG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgaXNUaW1lQmV0d2VlbihmaWx0ZXJzLmRlcGFydHVyZVRpbWUsICdPVVRCT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnKVxuICAgICk7XG5cbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucHJpY2UsICd0b3RhbC5wcmljZScpKTtcblxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgaXNUaW1lQmV0d2VlbihmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLCAnSU5CT1VORF9BUlJJVkFMLmRhdGVUaW1lQXJyaXZpbmcnKVxuICAgICk7XG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZSwgJ0lOQk9VTkRfREVQQVJUVVJFLmRhdGVUaW1lRGVwYXJ0aW5nJylcbiAgICApO1xuXG4gICAgLy8gISAtIFRlc3RlcnNcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoXG4gICAgICAgIGZpbHRlcnMudHJhdmVsUG9saWN5LFxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzUmVhc29uID0gZmxpZ2h0SXRpbmVyYXJ5LnVuYXZhaWxhYmxlXG4gICAgICAgICAgICA/IFRyYXZlbFBvbGljaWVzLlVOQVZBSUxBQkxFXG4gICAgICAgICAgICA6IGZsaWdodEl0aW5lcmFyeS5yZXF1aXJlc1JlYXNvbktleXNcbiAgICAgICAgICAgID8gVHJhdmVsUG9saWNpZXMuQUxMT1dfV0lUSF9SRUFTT05cbiAgICAgICAgICAgIDogVHJhdmVsUG9saWNpZXMuSU5fUE9MSUNZO1xuICAgICAgICAgIHJldHVybiByZXF1aXJlc1JlYXNvbiA9PT0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3Qgb3V0Sm91cm5leVRlc3RlcnM6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiBib29sZWFuKVtdID0gW107XG5cbiAgICBvdXRKb3VybmV5VGVzdGVycy5wdXNoKHRlc3RlcihmaWx0ZXJzLmNsYXNzZXMsIGZpZWxkSGFzVmFsdWUoJ2NhYmluQ2xhc3MnKSkpO1xuXG4gICAgY29uc3QgaW5Kb3VybmV5VGVzdGVyczogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IGJvb2xlYW4pW10gPSBbXTtcblxuICAgIGluSm91cm5leVRlc3RlcnMucHVzaCh0ZXN0ZXIoZmlsdGVycy5jbGFzc2VzLCBmaWVsZEhhc1ZhbHVlKCdjYWJpbkNsYXNzJykpKTtcblxuICAgIC8vICEtIEl0aW5lcmFyaWVzXG4gICAgY29uc3Qgb3V0RmlsdGVySXRpbmVyYXJpZXMgPSAoXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxuICAgICk6IGJvb2xlYW4gPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXG4gICAgICAgICAgKGFjYzogYm9vbGVhbiwgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBhY2MgPSBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKSAmJlxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHxcbiAgICAgICAgICAhIShmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzIHx8IFtdKS5maW5kKFxuICAgICAgICAgICAgKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuICEhb3V0Sm91cm5leVRlc3RlcnMucmVkdWNlKFxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgIHRlc3RlcjI6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IGJvb2xlYW5cbiAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaW5GaWx0ZXJJdGluZXJhcmllcyA9IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgaW5JdGluZXJhcnlUZXN0ZXJzLnJlZHVjZShcbiAgICAgICAgICAoYWNjOiBib29sZWFuLCB0ZXN0ZXIxOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApICYmXG4gICAgICAgICghZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzPy5sZW5ndGggfHxcbiAgICAgICAgICAhIShmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhIWluSm91cm5leVRlc3RlcnMucmVkdWNlKFxuICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxuICAgICAgICAgICAgICAgIHRlc3RlcjI6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IGJvb2xlYW5cbiAgICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgLy8gbm93IGZpbmFsbHkgcGVyZm9ybSB0aGUgZmlsdGVyaW5nIGFuZCBnbyBvdmVyIHRoZSByZXN1bHRzXG4gICAgLy8gVE9ETyAtIGFkZCB0aGUgYWRkaXRpb25hbCBzdHVmZiBuZWVkZWQgZm9yIEdyb3VwZWRGbGlnaHRzIChMaWdodG5pbmcpXG5cbiAgICBjb25zdCBmdWxsUmVzdWx0c0Nsb25lID0gPGFueT50aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZ1bGxSZXN1bHRzQ2xvbmUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGZ1bGxSZXN1bHQgPSBmdWxsUmVzdWx0c0Nsb25lW2ldO1xuICAgICAgZnVsbFJlc3VsdC5qb3VybmV5cyA9IGZ1bGxSZXN1bHQuam91cm5leXM/LmZpbHRlcihvdXRGaWx0ZXJJdGluZXJhcmllcyk7XG5cbiAgICAgIGlmICh0aGlzLmlzUmV0dXJuKSB7XG4gICAgICAgIGZ1bGxSZXN1bHQuam91cm5leXMgPSBmdWxsUmVzdWx0LmpvdXJuZXlzPy5maWx0ZXIoaW5GaWx0ZXJJdGluZXJhcmllcyk7XG4gICAgICB9XG5cbiAgICAgIGZ1bGxSZXN1bHQuam91cm5leXMgPSBmdWxsUmVzdWx0LmpvdXJuZXlzO1xuICAgIH1cblxuICAgIHRoaXMucmVzdWx0cy5uZXh0KGZ1bGxSZXN1bHRzQ2xvbmUpO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0R3JvdXBlZEV1cm9zdGFyKFxuICAgIHNlbGVjdGVkRXVyb3N0YXI6IEV1cm9zdGFySXRlbSxcbiAgICBmYXJlOiBFdXJvc3RhckZhcmUsXG4gICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtXG4gICkge1xuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcbiAgICAvLyBvbmUgd2F5IGVhc3lcbiAgICBpZiAoXG4gICAgICBiYXNrZXQgJiZcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEV1cm9zdGFyU2VhcmNoVHlwZS5vbmVXYXkgJiZcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxuICAgICkge1xuICAgICAgY29uc3Qgb3V0Ym91bmRGbGlnaHRzID0gZmFyZS5mYXJlLm1hcChpdGVtID0+XG4gICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoaXRlbSwgUmVzdWx0VHlwZS5PdXRib3VuZCwgMClcbiAgICAgICk7XG4gICAgICB0aGlzLmRvQm9va2luZyhcbiAgICAgICAgaW50QmFza2V0LFxuICAgICAgICBzZWxlY3RlZEV1cm9zdGFyLFxuICAgICAgICB7XG4gICAgICAgICAgb3V0Ym91bmRGbGlnaHRzLFxuICAgICAgICAgIGluYm91bmRGbGlnaHRzOiBbXSxcbiAgICAgICAgICBqb3VybmV5VHlwZTogJ3NpbmdsZSdcbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0ZWRFdXJvc3Rhci5kYXRlRGVwYXJ0dXJlLFxuICAgICAgICBudWxsLFxuICAgICAgICBmYXJlLnByaWNlLFxuICAgICAgICBmYXJlLnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgICAgZmFyZS51bmF2YWlsYWJsZVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gcmV0dXJuIGxvZ2ljIG5lZWRzIHVwZGF0aW5nIC0gZWl0aGVyIGFjY2VwdCBvdXRib3VuZCBvciByZXR1cm4gYW5kIHNvbWVob3cgZGlzdGlndWlzaCB0aGVtXG4gICAgaWYgKGJhc2tldCAmJiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBFdXJvc3RhclNlYXJjaFR5cGUucmV0dXJuKSB7XG4gICAgICAvLyBjbGlja2VkIG9uIGFuIG91dGJvdW5kIGV1cm9zdGFyXG4gICAgICBpZiAoZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kKSB7XG4gICAgICAgIC8vIGdpdmVuIHRoZSBvdXRib3VuZCBidXQgd2UgYWxyZWFkeSBoYXZlIGluYm91bmQgc2VsZWN0ZWRcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyPy5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uSW5ib3VuZCkge1xuICAgICAgICAgIC8vIEVOVC03NzM1IHdlIG5vdyBhZGQgaW4gb3JkZXIgc28gaW5ib3VuZCBsZWcgaXMgdGhlIGNvcnJlY3QgcHJpY2VcbiAgICAgICAgICBjb25zdCBwcmljZSA9IGZhcmUucHJpY2U7XG4gICAgICAgICAgY29uc3QgaW5ib3VuZEZsaWdodHMgPSB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZS5pdGVtLmZhcmUubWFwKGl0ZW0gPT5cbiAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoaXRlbSwgUmVzdWx0VHlwZS5JbmJvdW5kLCAwKVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgb3V0Ym91bmRGbGlnaHRzID0gZmFyZS5mYXJlLm1hcChpdGVtID0+XG4gICAgICAgICAgICB0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGl0ZW0sIFJlc3VsdFR5cGUuT3V0Ym91bmQsIDApXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmRvQm9va2luZyhcbiAgICAgICAgICAgIGludEJhc2tldCxcbiAgICAgICAgICAgIHNlbGVjdGVkRXVyb3N0YXIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluYm91bmRGbGlnaHRzLFxuICAgICAgICAgICAgICBvdXRib3VuZEZsaWdodHMsXG4gICAgICAgICAgICAgIGpvdXJuZXlUeXBlOiAncm91bmR0cmlwJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdGVkRXVyb3N0YXIuZGF0ZURlcGFydHVyZSxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyLml0ZW0uZGF0ZUFycml2YWwsXG4gICAgICAgICAgICBwcmljZSxcbiAgICAgICAgICAgIGZhcmUucmVxdWlyZXNSZWFzb25LZXlzLFxuICAgICAgICAgICAgZmFyZS51bmF2YWlsYWJsZVxuXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRGYXJlcygpO1xuICAgICAgICAgIHRoaXMuYmFza2V0U2VydmljZS50b2dnbGVNZW51KCk7XG4gICAgICAgICAgdGhpcy5yZXN1bHRzLm5leHQoKHRoaXMuZnVsbFJlc3VsdHMgYXMgRXVyb3N0YXJSZXN1bHRzW10pLm1hcCh0aGlzLnJlbW92ZVNlbGVjdGVkRmxhZ3MpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhcj8uZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kKSB7XG4gICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkRmFyZXMoKTtcbiAgICAgICAgICAvLyB3ZSBoYXZlIGFuIG91dGJvdW5kIGFscmVhZHkgc2VsZWN0ZWQgLSBkZXNlbGVjdCBpdFxuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KHRoaXMuZnVsbFJlc3VsdHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHdlIGRvbnQgaGF2ZSBhbiBpbmJvdW5kIHNlbGVjdGVkXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIgPSB7XG4gICAgICAgICAgICBpdGVtOiBzZWxlY3RlZEV1cm9zdGFyLFxuICAgICAgICAgICAgZGlyZWN0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZSA9IHtcbiAgICAgICAgICAgIGl0ZW06IGZhcmUsXG4gICAgICAgICAgICBkaXJlY3Rpb25cbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gc2VsZWN0ZWRFdXJvc3Rhci51aWQ7XG4gICAgICAgICAgLy8gZmlsdGVyIG9uIG91dGJvdW5kcyBhcyB3ZSBoYXZlIHNlbGVjdGVkIGFuZCBhZGRlZCBhbiBvdXRib3VuZFxuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFxuICAgICAgICAgICAgKHRoaXMuZnVsbFJlc3VsdHMgYXMgRXVyb3N0YXJSZXN1bHRzW10pLm1hcCgocmVzdWx0OiBFdXJvc3RhclJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgb3V0Ym91bmQgPSByZXN1bHQub3V0Ym91bmQuZmlsdGVyKChpdGVtOiBFdXJvc3Rhckl0ZW0pID0+IGluZGV4ID09PSBpdGVtLnVpZCk7XG4gICAgICAgICAgICAgIHJldHVybiB7IGluYm91bmQ6IHJlc3VsdC5pbmJvdW5kLCBvdXRib3VuZCB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5JbmJvdW5kKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhcj8uZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kKSB7XG4gICAgICAgICAgbGV0IHByaWNlO1xuICAgICAgICAgIC8vSWYgY2xhc3NlcyBhcmUgZGlmZmVyZW50LCBmYXJlIHJlY2FsY3VsYXRlcyBzbyBubyBpc3N1ZSwgYnV0IGlmIHRoZSBzYW1lIGNsYXNzIHVzZSBtb3JlIGV4cGVuc2l2ZSBmYXJlIHByaWNlXG4gICAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlLml0ZW0uY2xhc3MgPT09IGZhcmUuY2xhc3MgJiYgdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbS5wcmljZSA+IGZhcmUucHJpY2UpIHtcbiAgICAgICAgICAgIHByaWNlID0gdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbS5wcmljZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJpY2UgPSBmYXJlLnByaWNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBvdXRib3VuZEZsaWdodHMgPSB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZS5pdGVtLmZhcmUubWFwKGl0ZW0gPT5cbiAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoaXRlbSwgUmVzdWx0VHlwZS5PdXRib3VuZCwgMClcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGluYm91bmRGbGlnaHRzID0gZmFyZS5mYXJlLm1hcChpdGVtID0+XG4gICAgICAgICAgICB0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGl0ZW0sIFJlc3VsdFR5cGUuSW5ib3VuZCwgMClcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuZG9Cb29raW5nKFxuICAgICAgICAgICAgaW50QmFza2V0LFxuICAgICAgICAgICAgc2VsZWN0ZWRFdXJvc3RhcixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb3V0Ym91bmRGbGlnaHRzLFxuICAgICAgICAgICAgICBpbmJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgICAgam91cm5leVR5cGU6ICdyb3VuZHRyaXAnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIuaXRlbS5kYXRlRGVwYXJ0dXJlLFxuICAgICAgICAgICAgc2VsZWN0ZWRFdXJvc3Rhci5kYXRlQXJyaXZhbCxcbiAgICAgICAgICAgIHByaWNlLFxuICAgICAgICAgICAgZmFyZS5yZXF1aXJlc1JlYXNvbktleXMsXG4gICAgICAgICAgICBmYXJlLnVuYXZhaWxhYmxlXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRGYXJlcygpO1xuICAgICAgICAgIHRoaXMuYmFza2V0U2VydmljZS50b2dnbGVNZW51KCk7XG4gICAgICAgICAgdGhpcy5yZXN1bHRzLm5leHQoKHRoaXMuZnVsbFJlc3VsdHMgYXMgRXVyb3N0YXJSZXN1bHRzW10pLm1hcCh0aGlzLnJlbW92ZVNlbGVjdGVkRmxhZ3MpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhcj8uZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkluYm91bmQpIHtcbiAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRGYXJlcygpO1xuXG4gICAgICAgICAgdGhpcy5yZXN1bHRzLm5leHQodGhpcy5mdWxsUmVzdWx0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIgPSB7XG4gICAgICAgICAgICBpdGVtOiBzZWxlY3RlZEV1cm9zdGFyLFxuICAgICAgICAgICAgZGlyZWN0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZSA9IHtcbiAgICAgICAgICAgIGl0ZW06IGZhcmUsXG4gICAgICAgICAgICBkaXJlY3Rpb25cbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gc2VsZWN0ZWRFdXJvc3Rhci51aWQ7XG4gICAgICAgICAgLy8gZmlsdGVyIG9uIG91dGJvdW5kcyBhcyB3ZSBoYXZlIHNlbGVjdGVkIGFuZCBhZGRlZCBhbiBvdXRib3VuZFxuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFxuICAgICAgICAgICAgKHRoaXMuZnVsbFJlc3VsdHMgYXMgRXVyb3N0YXJSZXN1bHRzW10pLm1hcCgocmVzdWx0OiBFdXJvc3RhclJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW5ib3VuZCA9IHJlc3VsdC5pbmJvdW5kLmZpbHRlcigoaXRlbTogRXVyb3N0YXJJdGVtKSA9PiBpbmRleCA9PT0gaXRlbS51aWQpO1xuICAgICAgICAgICAgICByZXR1cm4geyBpbmJvdW5kLCBvdXRib3VuZDogcmVzdWx0Lm91dGJvdW5kIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlVHJhdmVsUG9saWNpZXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVRyYXZlbFBvbGljaWVzKCkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3RhciB8fFxuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFt0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZS5pdGVtLmpvdXJuZXlIYXNoXSB8fFxuICAgICAgIXRoaXMubXVsdGkgfHxcbiAgICAgIHRoaXMubXVsdGkubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG11bHRpSW5ib3VuZHMgPSAodGhpcy5tdWx0aSB8fCBbXSkucmVkdWNlKFxuICAgICAgKGFjYzogRmxpZ2h0SXRpbmVyYXJ5W10sIGl0ZW06IEV1cm9zdGFyTXVsdGkpID0+IHtcbiAgICAgICAgaWYgKGl0ZW0ub3JkZXIgPT09IDEgJiYgaXRlbS5yZXN1bHRzICYmIGl0ZW0ucmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYWNjID0gYWNjLmNvbmNhdChpdGVtLnJlc3VsdHMgYXMgRmxpZ2h0SXRpbmVyYXJ5W10pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAgW11cbiAgICApO1xuICAgIGlmIChtdWx0aUluYm91bmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICghdGhpcy5yYXdSZXN1bHRzKSB7XG4gICAgICAgIHRoaXMucmF3UmVzdWx0cyA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0odGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWUgKyAnX3JhdycpO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnJhd1Jlc3VsdHMpO1xuICAgICAgdGhpcy5hcHBseUZsaWdodFJ1bGVzXG4gICAgICAgIC5mZXRjaE9uZSh7XG4gICAgICAgICAgc2VsZWN0ZWRPdXRib3VuZEZsaWdodDogdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LFxuICAgICAgICAgIGF2YWlsYWJsZUluYm91bmRGbGlnaHRzOiBtdWx0aUluYm91bmRzLFxuICAgICAgICAgIHNlYXJjaElkOiB0aGlzLnJhd1Jlc3VsdHMuc2VhcmNoSWRcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZSgocnVsZXM6IFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJ1bGVzKSB7XG4gICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSA9IHRoaXMuaGVscGVycy5tZXJnZU9iamVjdHModGhpcy5fcnVsZUFjdGlvblN1bW1hcnksIHJ1bGVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0U2VsZWN0ZWRGYXJlcygpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3RhciA9IHtcbiAgICAgIGRpcmVjdGlvbjogbnVsbCxcbiAgICAgIGl0ZW06IG51bGxcbiAgICB9O1xuICAgIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlID0ge1xuICAgICAgZGlyZWN0aW9uOiBudWxsLFxuICAgICAgaXRlbTogbnVsbFxuICAgIH07XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZEZsYWdzKHJlc3VsdDogRXVyb3N0YXJSZXN1bHRzKTogRXVyb3N0YXJSZXN1bHRzIHtcbiAgICBjb25zdCBpbmJvdW5kID0gcmVzdWx0LmluYm91bmQubWFwKChpdGVtOiBFdXJvc3Rhckl0ZW0pID0+IHtcbiAgICAgIGl0ZW0uc3RhbmRhcmRQcmVtaWVyRmFyZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgaXRlbS5zdGFuZGFyZEZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIGl0ZW0uYnVzaW5lc3NQcmVtaWVyRmFyZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfSk7XG4gICAgY29uc3Qgb3V0Ym91bmQgPSByZXN1bHQub3V0Ym91bmQubWFwKChpdGVtOiBFdXJvc3Rhckl0ZW0pID0+IHtcbiAgICAgIGl0ZW0uc3RhbmRhcmRQcmVtaWVyRmFyZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgaXRlbS5zdGFuZGFyZEZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIGl0ZW0uYnVzaW5lc3NQcmVtaWVyRmFyZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgaW5ib3VuZCwgb3V0Ym91bmQgfTtcbiAgfVxuXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheSk6IElDaGVhcGVzdFByaWNlIHtcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoIHx8IHRoaXMuc2VhcmNoU2VydmljZS5pc0V1cm9TdGFyR3JvdXBlZCgpKSByZXR1cm47XG4gICAgY29uc3QgcmVzdWx0ID0gcmVzdWx0c1swXSBhcyBFdXJvc3RhclF1b3RlUmVzdWx0O1xuICAgIGNvbnN0IGpvdXJuZXlzID0gcmVzdWx0LmpvdXJuZXlzO1xuICAgIGlmICgham91cm5leXMubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgY3VycmVuY3kgPSBqb3VybmV5c1swXS50b3RhbC5jdXJyZW5jeTtcbiAgICByZXR1cm4gam91cm5leXMucmVkdWNlKFxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xuICAgICAgICBjb25zdCBwcmljZSA9IHJlc3VsdC50b3RhbC5wcmljZTtcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xuICAgICAgfSxcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGRvQm9va2luZyhcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlLFxuICAgIHNlbGVjdGVkRmxpZ2h0OiBFdXJvc3Rhckl0ZW0sXG4gICAgc2NoZW1hRGV0YWlsczogYW55LFxuICAgIG91dGJvdW5kRGF0ZTogc3RyaW5nLFxuICAgIGluYm91bmREYXRlOiBzdHJpbmcsXG4gICAgcHJpY2U6IG51bWJlcixcbiAgICByZXF1aXJlc1JlYXNvbktleXM6IHN0cmluZ1tdLFxuICAgIGFnZW50T3ZlcnJvZGVVbmF2YWlsYWJsZSA9IGZhbHNlXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIGNvbnN0IHsgc291cmNlSWQsIGNvMlBlckl0ZW0sIGNvMlBlclBhc3NlbmdlciwgdG90YWwgfSA9IHNlbGVjdGVkRmxpZ2h0O1xuXG4gICAgbGV0IGZhcmUgPSBudWxsO1xuXG4gICAgaWYgKHByaWNlID09PSBzZWxlY3RlZEZsaWdodC5zdGFuZGFyZEZhcmU/LnByaWNlKSB7XG4gICAgICBmYXJlID0gc2VsZWN0ZWRGbGlnaHQuc3RhbmRhcmRGYXJlO1xuICAgIH1cblxuICAgIGlmIChwcmljZSA9PT0gc2VsZWN0ZWRGbGlnaHQuYnVzaW5lc3NQcmVtaWVyRmFyZT8ucHJpY2UpIHtcbiAgICAgIGZhcmUgPSBzZWxlY3RlZEZsaWdodC5idXNpbmVzc1ByZW1pZXJGYXJlO1xuICAgIH1cblxuICAgIGlmIChwcmljZSA9PT0gc2VsZWN0ZWRGbGlnaHQuc3RhbmRhcmRQcmVtaWVyRmFyZT8ucHJpY2UpIHtcbiAgICAgIGZhcmUgPSBzZWxlY3RlZEZsaWdodC5zdGFuZGFyZFByZW1pZXJGYXJlO1xuICAgIH1cblxuICAgIGNvbnN0IGJvb2tpbmc6IEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzID0ge1xuICAgICAgYWR1bHRzOiB0aGlzLmFkdWx0cyxcbiAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxuICAgICAgY2hpbGRyZW46IHRoaXMuY2hpbGRyZW4sXG4gICAgICBjbzJQZXJJdGVtLFxuICAgICAgY28yUGVyUGFzc2VuZ2VyLFxuICAgICAgY3VycmVuY3k6IHRvdGFsLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcbiAgICAgIGRldGFpbDogc2NoZW1hRGV0YWlscyxcbiAgICAgIHByaWNlLFxuICAgICAgc2VhcmNoUXVlcnk6IHRoaXMucmVzdWx0UXVlcnksXG4gICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxuICAgICAgb3V0Ym91bmREYXRlLFxuICAgICAgbG93ZXN0UHJpY2U6IHRoaXMubG93ZXN0UHJpY2U/LmFtb3VudCxcbiAgICAgIGxvd2VzdFByaWNlQ3VycmVuY3k6IDxDdXJyZW5jeUNvZGU+dGhpcy5sb3dlc3RQcmljZT8uY3VycmVuY3lDb2RlLFxuICAgICAgcmVhc29uS2V5czogcmVxdWlyZXNSZWFzb25LZXlzLFxuICAgICAgYWdlbnRPdmVycm9kZVVuYXZhaWxhYmxlXG4gICAgfTtcbiAgICBpZiAoaW5ib3VuZERhdGUpIHtcbiAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZTtcbiAgICB9XG4gICAgY29uc3Qgd2hhdEhhcHBlbmVkID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxuICAgICAgYm9va2luZyxcbiAgICAgIGludEJhc2tldCxcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcbiAgICAgIHRoaXMudHJhdmVsbGVycyxcbiAgICAgIHJlcXVpcmVzUmVhc29uS2V5c1xuICAgICk7XG4gICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xuICAgICAgdGhpcy5yZXNlYXJjaFdpdGhOZXdVc2VyKCk7XG4gICAgfVxuICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XG4gIH1cblxuICBnZXQgbG93ZXN0UHJpY2UoKTogSUNoZWFwZXN0UHJpY2Uge1xuICAgIGlmICh0aGlzLmNoZWFwZXN0UHJpY2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoZWFwZXN0UHJpY2U7XG4gICAgfVxuICAgIGNvbnN0IG91dGJvdW5kID0gKHRoaXMuZnVsbFJlc3VsdHNbMF0gYXMgYW55KS5vdXRib3VuZCBhcyBFdXJvc3Rhckl0ZW1bXTtcbiAgICBjb25zdCBjdXJyZW5jeSA9IG91dGJvdW5kWzBdLnN0YW5kYXJkRmFyZS5jdXJyZW5jeTtcbiAgICBsZXQgY2hlYXBlc3RPdXRib3VuZDogbnVtYmVyO1xuICAgIG91dGJvdW5kLmZvckVhY2goYSA9PiB7XG4gICAgICBpZiAoIWNoZWFwZXN0T3V0Ym91bmQgfHwgYS5zdGFuZGFyZEZhcmUucHJpY2UgPCBjaGVhcGVzdE91dGJvdW5kKSB7XG4gICAgICAgIGNoZWFwZXN0T3V0Ym91bmQgPSBhLnN0YW5kYXJkRmFyZS5wcmljZTtcbiAgICAgIH1cbiAgICAgIGlmIChhLnN0YW5kYXJkUHJlbWllckZhcmUucHJpY2UgPD0gY2hlYXBlc3RPdXRib3VuZCkge1xuICAgICAgICBjaGVhcGVzdE91dGJvdW5kID0gYS5zdGFuZGFyZFByZW1pZXJGYXJlLnByaWNlO1xuICAgICAgfVxuICAgICAgaWYgKGEuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmljZSA8PSBjaGVhcGVzdE91dGJvdW5kKSB7XG4gICAgICAgIGNoZWFwZXN0T3V0Ym91bmQgPSBhLmJ1c2luZXNzUHJlbWllckZhcmUucHJpY2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgYW1vdW50OiBjaGVhcGVzdE91dGJvdW5kLCBjdXJyZW5jeUNvZGU6IGN1cnJlbmN5IH07XG4gIH1cblxuICBtYWtlU2NoZW1hRmxpZ2h0cyhcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0Sm91cm5leSxcbiAgICBmbGlnaHRHcm91cDogUmVzdWx0VHlwZSxcbiAgICBncm91cEluZGV4OiBudW1iZXIsXG4gICAgc2VnbWVudEluZGV4PzogbnVtYmVyXG4gICk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnNlbGVjdGVkRmxpZ2h0LFxuICAgICAgam91cm5leUluZm86IHtcbiAgICAgICAgZmxpZ2h0R3JvdXAsXG4gICAgICAgIGdyb3VwSW5kZXgsXG4gICAgICAgIHNlZ21lbnRJbmRleFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUdyb3VwZWRJdGVtKFxuICAgIHJldHVybk9iamVjdDogRXVyb3N0YXJHcm91cGVkUXVvdGVSZXN1bHQsXG4gICAgc291cmNlOiBzdHJpbmcsXG4gICAgb3V0Ym91bmRGbGlnaHRzOiBGbGlnaHRKb3VybmV5W10sXG4gICAgb3V0Ym91bmRUb3RhbER1cmF0aW9uOiBudW1iZXIsXG4gICAgaW5ib3VuZEZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSxcbiAgICBpbmJvdW5kVG90YWxEdXJhdGlvbjogbnVtYmVyXG4gICkge1xuICAgIGlmIChvdXRib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiAhcmV0dXJuT2JqZWN0LmRlcGFydERhdGVUaW1lKSB7XG4gICAgICBjb25zdCBmaXJzdCA9IG91dGJvdW5kRmxpZ2h0c1swXTtcbiAgICAgIGNvbnN0IGxhc3QgPSBvdXRib3VuZEZsaWdodHNbb3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdO1xuICAgICAgcmV0dXJuT2JqZWN0Lm9yaWdpbkFpcnBvcnQgPSBmaXJzdC5vcmlnaW5BaXJwb3J0O1xuICAgICAgcmV0dXJuT2JqZWN0Lm9yaWdpbkFpcnBvcnROYW1lID0gZmlyc3Qub3JpZ2luQWlycG9ydE5hbWU7XG4gICAgICByZXR1cm5PYmplY3QuZGVzdGluYXRpb25BaXJwb3J0ID0gbGFzdC5kZXN0aW5hdGlvbkFpcnBvcnQ7XG4gICAgICByZXR1cm5PYmplY3QuZGVzdGluYXRpb25BaXJwb3J0TmFtZSA9IGxhc3QuZGVzdGluYXRpb25BaXJwb3J0TmFtZTtcbiAgICAgIHJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSA9IGZpcnN0LmRhdGVUaW1lRGVwYXJ0aW5nO1xuICAgICAgcmV0dXJuT2JqZWN0LmFycml2YWxEYXRlVGltZSA9IGxhc3QuZGF0ZVRpbWVBcnJpdmluZztcbiAgICAgIHJldHVybk9iamVjdC5vdXRib3VuZFRvdGFsRHVyYXRpb24gPSBvdXRib3VuZFRvdGFsRHVyYXRpb247XG4gICAgICByZXR1cm5PYmplY3QuZGF0YVNvdXJjZSA9IHNvdXJjZTtcbiAgICAgIHJldHVybk9iamVjdC5vcGVyYXRvciA9IGZpcnN0Lm9wZXJhdGluZ0NhcnJpZXI7XG4gICAgICByZXR1cm5PYmplY3Qub3BlcmF0b3JGdWxsID0gZmlyc3Qub3BlcmF0aW5nQ2Fycmllck5hbWU7XG4gICAgICByZXR1cm5PYmplY3Qub3V0bGVnc0NvdW50ID0gb3V0Ym91bmRGbGlnaHRzLmxlbmd0aDtcbiAgICAgIHJldHVybk9iamVjdC5vdXRsZWdzID0gb3V0Ym91bmRGbGlnaHRzO1xuICAgICAgcmV0dXJuT2JqZWN0Lm91dGJvdW5kRmxpZ2h0TnVtYmVyID0gdGhpcy5oZWxwZXJzLmpvaW5Gcm9tQXR0cmlidXRlPEZsaWdodEpvdXJuZXk+KFxuICAgICAgICAnLScsXG4gICAgICAgICdvcGVyYXRpbmdGbGlnaHROdW1iZXInLFxuICAgICAgICBvdXRib3VuZEZsaWdodHNcbiAgICAgICk7XG5cbiAgICAgIHJldHVybk9iamVjdC5pc1JldHVybiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoICYmICFyZXR1cm5PYmplY3QuaW5ib3VuZFRvdGFsRHVyYXRpb24pIHtcbiAgICAgIHJldHVybk9iamVjdC5pbmJvdW5kVG90YWxEdXJhdGlvbiA9IGluYm91bmRUb3RhbER1cmF0aW9uO1xuICAgICAgcmV0dXJuT2JqZWN0LmlubGVnc0NvdW50ID0gaW5ib3VuZEZsaWdodHMubGVuZ3RoO1xuICAgICAgcmV0dXJuT2JqZWN0LmlubGVncyA9IGluYm91bmRGbGlnaHRzO1xuICAgICAgcmV0dXJuT2JqZWN0LmluYm91bmRGbGlnaHROdW1iZXIgPSB0aGlzLmhlbHBlcnMuam9pbkZyb21BdHRyaWJ1dGU8RmxpZ2h0Sm91cm5leT4oXG4gICAgICAgICctJyxcbiAgICAgICAgJ29wZXJhdGluZ0ZsaWdodE51bWJlcicsXG4gICAgICAgIGluYm91bmRGbGlnaHRzXG4gICAgICApO1xuXG4gICAgICByZXR1cm5PYmplY3QuaXNSZXR1cm4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBtYWtlU2Vzc2lvblJlc3VsdHMoZGF0YTogRXVyb3N0YXJRdW90ZVJlc3VsdEFycmF5KTogRXVyb3N0YXJTZXNzaW9uVHlwZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3VsdHM6IFtdLFxuICAgICAgZ3JvdXBEYXRhOiBbXSxcbiAgICAgIGdyb3VwZWQ6IFtdLFxuICAgICAgcXVlcnk6IHRoaXMucmVzdWx0UXVlcnlcbiAgICB9O1xuICB9XG5cbiAgZ2V0TWluRmxpZ2h0UHJpY2VGb3JCcmFuZChtYXRjaGluZ0JyYW5kRmxpZ2h0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xuICAgIGxldCBtaW4gPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICBtYXRjaGluZ0JyYW5kRmxpZ2h0cy5mb3JFYWNoKGZsaWdodCA9PiB7XG4gICAgICBpZiAobWluID4gZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcbiAgICAgICAgbWluID0gZmxpZ2h0LnRvdGFsLnByaWNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBtaW47XG4gIH1cblxuICBnZXRNYXhGbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XG4gICAgbGV0IG1heCA9IDA7XG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaChmbGlnaHQgPT4ge1xuICAgICAgaWYgKG1heCA8IGZsaWdodD8udG90YWw/LnByaWNlKSB7XG4gICAgICAgIG1heCA9IGZsaWdodC50b3RhbC5wcmljZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbWF4O1xuICB9XG5cbiAgaXNPdmVyTmlnaHQoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb3V0d2FyZERheSA9IHRoaXMub3V0Qm91bmREYXRlLmRhdGUoKTtcbiAgICBjb25zdCByZXR1cm5EYXkgPSB0aGlzLmluYm91bmREYXRlLmRhdGUoKTtcbiAgICBpZiAocmV0dXJuRGF5IC0gb3V0d2FyZERheSA+PSAxKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbWluVG9Ib3VyID0gKGR1cjogbnVtYmVyKTogc3RyaW5nID0+IGAke01hdGguZmxvb3IoZHVyIC8gNjApfWggJHtkdXIgJSA2MH1tYDtcblxuICBhc3luYyBhZGRFdXJvc3RhckpvdXJuZXlzVG9CYXNrZXQoXG4gICAgZXVyb3N0YXJRdW90ZTogRXVyb3N0YXJJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBpZ25vcmVJbnZva2U6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBnbXRTZWFyY2hRdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMgPSBudWxsXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIGlmIChldXJvc3RhclF1b3RlLnVuYXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcbiAgICB9XG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xuICAgIGlmIChiYXNrZXQpIHtcbiAgICAgIGNvbnN0IHsgc291cmNlSWQsIGNvMlBlckl0ZW0sIGNvMlBlclBhc3NlbmdlciwgdG90YWwgfSA9IGV1cm9zdGFyUXVvdGU7XG4gICAgICBjb25zdCBvdXRib3VuZERhdGU6IGFueSA9IG1vbWVudChldXJvc3RhclF1b3RlLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZyk7XG4gICAgICBjb25zdCBpbmJvdW5kRGF0ZTogYW55ID0gZXVyb3N0YXJRdW90ZS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGhcbiAgICAgICAgPyBtb21lbnQoZXVyb3N0YXJRdW90ZS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZylcbiAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoZXVyb3N0YXJRdW90ZSk7XG4gICAgICBjb25zdCBzY2hlbWFEZXRhaWxzID0ge1xuICAgICAgICBvdXRib3VuZEZsaWdodHM6IFtcbiAgICAgICAgICAuLi5ldXJvc3RhclF1b3RlLm91dGJvdW5kRmxpZ2h0cy5tYXAoKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgc2VnbWVudEluZGV4OiBudW1iZXIpID0+XG4gICAgICAgICAgICB0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZsaWdodCwgUmVzdWx0VHlwZS5PdXRib3VuZCwgMCwgc2VnbWVudEluZGV4KVxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcbiAgICAgICAgICAuLi5ldXJvc3RhclF1b3RlLmluYm91bmRGbGlnaHRzLm1hcCgoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBzZWdtZW50SW5kZXg6IG51bWJlcikgPT5cbiAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoZmxpZ2h0LCBSZXN1bHRUeXBlLkluYm91bmQsIDAsIHNlZ21lbnRJbmRleClcbiAgICAgICAgICApXG4gICAgICAgIF0sXG4gICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxuICAgICAgICBqb3VybmV5VHlwZTogJ3NpbmdsZSdcbiAgICAgIH07XG4gICAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcbiAgICAgICAgYWR1bHRzOiB0aGlzLmFkdWx0cyxcbiAgICAgICAgYmFza2V0OiBpbnRCYXNrZXQuaWQsXG4gICAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxuICAgICAgICBjbzJQZXJJdGVtLFxuICAgICAgICBjbzJQZXJQYXNzZW5nZXIsXG4gICAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXG4gICAgICAgIGRldGFpbDogc2NoZW1hRGV0YWlscyxcbiAgICAgICAgcHJpY2U6IHRvdGFsLnByaWNlLFxuICAgICAgICBzZWFyY2hRdWVyeTogZ210U2VhcmNoUXVlcnkgPyBnbXRTZWFyY2hRdWVyeSA6IHRoaXMucmVzdWx0UXVlcnksXG4gICAgICAgIHNlcnZpY2U6IHNvdXJjZUlkLnRvU3RyaW5nKCksXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmREYXRlLmZvcm1hdCgpLFxuICAgICAgICByZWFzb25LZXlzOiAgZXVyb3N0YXJRdW90ZS5yZXF1aXJlc1JlYXNvbktleXNcbiAgICAgIH07XG4gICAgICBpZiAoaW5ib3VuZERhdGUpIHtcbiAgICAgICAgYm9va2luZy5pbmJvdW5kRGF0ZSA9IGluYm91bmREYXRlLmZvcm1hdCgpO1xuICAgICAgICBzY2hlbWFEZXRhaWxzLmpvdXJuZXlUeXBlID0gJ3JvdW5kdHJpcCc7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcbiAgICAgICAgYm9va2luZyxcbiAgICAgICAgaW50QmFza2V0LFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcbiAgICAgICAgZXVyb3N0YXJRdW90ZS5yZXF1aXJlc1JlYXNvbktleXMsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBpZ25vcmVJbnZva2VcbiAgICAgICk7XG4gICAgICBpZiAod2hhdEhhcHBlbmVkID09PSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoKSB7XG4gICAgICAgIHRoaXMucmVzZWFyY2hXaXRoTmV3VXNlcigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdoYXRIYXBwZW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbCk7XG4gIH1cblxuICAvLyBUT0RPIHdhaXRpbmcgZm9yIGRhdGFcbiAgZ2V0VGVybXNBbmRDb25kKGV1cm9zdGFyUXVvdGU6IEV1cm9zdGFySXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnUGVuYWx0aWVzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnRWxpZ2liaWxpdHknLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICAsXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdEYXkvdGltZScsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1NlYXNvbmFsaXR5JyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnRmxpZ2h0wqBBcHBsaWNhdGlvbicsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0FkdmFuY2XCoFJlc2VydmF0aW9ucy90aWNrZXRpbmcnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdNYXhpbXVtwqBTdGF5JyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnTWluaW11bcKgU3RheScsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1N0b3BvdmVycycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1RyYW5zZmVycycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0NvbWJpbmF0aW9ucycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0JsYWNrb3V0wqBEYXRlcycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1N1cmNoYXJnZXMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBY2NvbXBhbmllZMKgVHJhdmVsJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVHJhdmVswqBSZXN0cmljdGlvbnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTYWxlc8KgUmVzdHJpY3Rpb25zJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnSGlwL21pbGVhZ2XCoEV4Y2VwdGlvbnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdUaWNrZXTCoEVuZG9yc2VtZW50cycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0NoaWxkcmVuwqBEaXNjb3VudHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdUb3VywqBDb25kdWN0b3LCoERpc2NvdW50cycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0FnZW50wqBEaXNjb3VudHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBbGzCoE90aGVywqBEaXNjb3VudHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdNaXNjZWxsYW5lb3VzwqBQcm92aXNpb25zJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnRmFyZcKgQnnCoFJ1bGUnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdHcm91cHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdUb3VycycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1Zpc2l0wqBBbm90aGVywqBDb3VudHJ5JyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnRGVwb3NpdHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdWb2x1bnRhcnnCoENoYW5nZXMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdWb2x1bnRhcnnCoFJlZnVuZHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdOZWdvdGlhdGVkwqBGYXJlcycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1J1bGXCoEFwcGxpY2F0aW9uwqBBbmTCoE90aGVywqBDb25kaXRpb25zJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PiB7XG4gICAgaWYgKHRoaXMuaXNGYXZvdXJpdGVWYWxpZC52YWx1ZSkge1xuICAgICAgY29uc3QgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IElFdXJvc3RhclNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkV1cm9zdGFyLFxuICAgICAgICBzZWFyY2hBcmdzOiBmYXZvdXJpdGVTZWFyY2hRdWVyeVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgYXBwbHlGYXZvdXJpdGUoZmF2OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBub3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKTtcbiAgICBjb25zdCB0b21vcnJvdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgxKTtcbiAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobm93LCAzMCk7IFxuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKHRvbW9ycm93LCAzMCk7XG4gICAgdGhpcy5hcHBseVNlYXJjaFF1ZXJ5KGZhdik7XG4gIH1cblxuICBvcGVuRXVyb3N0YXJGYXJlUnVsZXMoYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IHZvaWQge1xuICAgIGNvbnN0IGZsaWdodHMgPSBbLi4uYmFza2V0SXRlbS5kZXRhaWwub3V0Ym91bmRGbGlnaHRzXTtcbiAgICBmbGlnaHRzWzBdLmZhcmVJbmZvID0gZmxpZ2h0c1swXS5qb3VybmV5SW5mbztcbiAgICBkZWxldGUgZmxpZ2h0c1swXS5qb3VybmV5SW5mbztcbiAgICBjb25zdCBydWxlc0Zyb21DYWxsID0gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEZsaWdodEZhcmVSdWxlcyhcbiAgICAgIGZsaWdodHNbMF0gYXMgSW5wdXRGbGlnaHRKb3VybmV5LFxuICAgICAgcGFyc2VJbnQoYmFza2V0SXRlbS5zZXJ2aWNlLmlkKVxuICAgICk7XG4gICAgcnVsZXNGcm9tQ2FsbC5zdWJzY3JpYmUoXG4gICAgICBkYXRhID0+IHtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgICBNb2RhbFR5cGVzLk1vZGFsRmxpZ2h0RmFyZUNvbXBvbmVudCxcbiAgICAgICAgICB7IGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJ1bGVzOiBkYXRhLnJlc3VsdHNbMF0sXG4gICAgICAgICAgICBmcm9tOiBmbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnQsXG4gICAgICAgICAgICB0bzogZmxpZ2h0c1tmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2VuZXJhdGUgdGhlIGV1cm9zdGFyIHF1ZXJ5IHZhcmlhYmxlcyBmcm9tIHRoZSBmbGlnaHQgdmFyaWFibGVzXG4gICAqIEBUT0RPIC0gbWF5IG5lZWQgYSBzZXBlcmF0ZSBmdW5jdGlvbiBmb3IgZ28yL3NjaW9uXG4gICAqIEBwYXJhbSBmbGlnaHRRdWVyeSAtIHRoZSBmbGlnaHQgcXVlcnlcbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlUXVlcnlGcm9tRmxpZ2h0UXVlcnkoXG4gICAgZmxpZ2h0UXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxuICAgIGRlc3RpbmF0aW9uQWlycG9ydDogc3RyaW5nLFxuICAgIGFycml2YWxBaXJwb3J0OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5kZXBhcnREYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG1vbWVudChmbGlnaHRRdWVyeS5vdXRib3VuZERhdGUsICdZWVlZLU1NLUREJykpO1xuICAgIHRoaXMucmV0dXJuRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShtb21lbnQoZmxpZ2h0UXVlcnkucmV0dXJuRGF0ZSwgJ1lZWVktTU0tREQnKSk7XG5cbiAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gdGhpcy5nZXRFdXJvTG9jYXRpb24oZGVzdGluYXRpb25BaXJwb3J0KTtcbiAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSB0aGlzLmdldEV1cm9Mb2NhdGlvbihhcnJpdmFsQWlycG9ydCk7XG5cbiAgICBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgIC5sb29rdXBFdXJvc3RhclN0YXRpb25zKHRoaXMuX29yaWdpbkFpcnBvcnQpXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0gcmVzdWx0WzBdO1xuICAgICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgIC5sb29rdXBFdXJvc3RhclN0YXRpb25zKHRoaXMuX29yaWdpbkFpcnBvcnQpXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0gcmVzdWx0WzBdO1xuICAgICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgIC5sb29rdXBFdXJvc3RhclN0YXRpb25zKHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydClcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSByZXN1bHRbMF07XG4gICAgICB9KTtcblxuICAgIGlmIChmbGlnaHRRdWVyeS5yZXR1cm5UcmlwKSB7XG4gICAgICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPSBFdXJvc3RhclNlYXJjaFR5cGUucmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPSBFdXJvc3RhclNlYXJjaFR5cGUub25lV2F5O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgdGhlIGV1cm8gc3RhdGlvbiBmcm9tIHRoZSBhaXJwb3J0XG4gICAqIEBwYXJhbSBsb2NhdGlvblxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0RXVyb0xvY2F0aW9uKGxvY2F0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBBaXJUb0V1cm9bbG9jYXRpb24udG9VcHBlckNhc2UoKV0gfHwgJyc7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmFyZVJ1bGVzKGpvdXJuZXlIYXNoOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICB3aGVuU2VsZWN0ZWRBbG9uZTogdGhpcy5fcnVsZUFjdGlvblN1bW1hcnk/LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXSxcbiAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWQ6IHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5Py5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXVxuICAgIH07XG4gIH1cblxuICBtZXNzYWdlQ29uZmlnQ2hlY2soY29uZmlnOiBhbnksIGlzQ2hlY2tQYXNzOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGVwYXJ0TG9jYXRpb24gPSB0aGlzLmRlcGFydExvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzO1xuICAgIGNvbnN0IGFycml2ZUxvY2F0aW9uID0gdGhpcy5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscztcbiAgICBjb25zdCBkZXBhcnREZXRhaWwgPSBkZXBhcnRMb2NhdGlvbj8uZGVzdGluYXRpb24/LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgYXJyaXZlRGV0YWlsID0gYXJyaXZlTG9jYXRpb24/LmRlc3RpbmF0aW9uPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChjb25maWcuYXJyaXZhbFN0YXRpb24gJiYgaXNDaGVja1Bhc3MpIHtcbiAgICAgIGlzQ2hlY2tQYXNzID1cbiAgICAgICAgY29uZmlnLmFycml2YWxTdGF0aW9uID09PSBhcnJpdmVMb2NhdGlvbj8uZ2F0ZXdheSB8fFxuICAgICAgICBhcnJpdmVEZXRhaWw/LmluY2x1ZGVzKGNvbmZpZy5hcnJpdmFsU3RhdGlvbi50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmRlcGFydHVyZVN0YXRpb24gJiYgaXNDaGVja1Bhc3MpIHtcbiAgICAgIGlzQ2hlY2tQYXNzID1cbiAgICAgICAgY29uZmlnLmRlcGFydHVyZVN0YXRpb24gPT09IGRlcGFydExvY2F0aW9uPy5nYXRld2F5IHx8XG4gICAgICAgIGRlcGFydERldGFpbD8uaW5jbHVkZXMoY29uZmlnLmRlcGFydHVyZVN0YXRpb24udG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQ2hlY2tQYXNzO1xuICB9XG5cbiAgLy8gV2UgdXNlIHRoaXMgbWV0aG9kIGZvciBmZWF0dXJlczogUmVjZW50U2VhcmNoLCBGYXZvdXJpdGVTZWFyY2gsIEV4cGlyZWRCYXNrZXQsIENvcHlCYXNrZXQsIENsb25lQmFza2V0XG4gIC8vIE5vdGU6IERvIG5vdCBpbmNsdWRlIGRhdGVzIGFuZCB0YXZlbGxlcnMgaW4gdGhpcyBtZXRob2RcbiAgYXN5bmMgYXBwbHlTZWFyY2hRdWVyeShxdWVyeTogU2VhcmNoRXVyb3N0YXJRdWVyeVZhcmlhYmxlcywgc3RhcnRTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZSwgY2xvbmVCYXNrZXRJdGVtOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWNsb25lQmFza2V0SXRlbSkge1xuICAgICAgaWYgKHF1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdykge1xuICAgICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xuICAgICAgfSBlbHNlIGlmIChxdWVyeS5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XG4gICAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHF1ZXJ5LnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3cpIHtcbiAgICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xuICAgICAgfSBlbHNlIGlmIChxdWVyeS5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdykge1xuICAgICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5Bbnl0aW1lO1xuICAgICAgfSAgICAgIFxuICAgIH1cbiAgICB0aGlzLmZhcmVUeXBlID0gcXVlcnkuZmFyZVR5cGU7XG4gICAgdGhpcy5tYXhDb25uZWN0aW9ucyA9IHF1ZXJ5Lm1heENvbm5lY3Rpb25zO1xuICAgIHRoaXMuY2FiaW5DbGFzcyA9IHF1ZXJ5Lm91dGJvdW5kQ2FiaW5DbGFzcyAgPyBxdWVyeS5vdXRib3VuZENhYmluQ2xhc3NbMF0gYXMgRmxpZ2h0Q2FiaW5DbGFzcyA6IG51bGw7XG4gICAgdGhpcy5yZXR1cm5DYWJpbkNsYXNzID0gcXVlcnkucmV0dXJuQ2FiaW5DbGFzcyA/IHF1ZXJ5LnJldHVybkNhYmluQ2xhc3NbMF0gYXMgRmxpZ2h0Q2FiaW5DbGFzcyA6IG51bGw7XG4gICAgaWYgKGNsb25lQmFza2V0SXRlbSkge1xuICAgICAgc3dpdGNoICh0aGlzLmNsb25lZEJhc2tldEl0ZW1EZXRhaWxzLm91dGJvdW5kRmxpZ2h0c1swXT8uY2FiaW5DbGFzcykge1xuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teTpcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3M6XG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZDpcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aTpcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkxpdGVFY29ub215OlxuICAgICAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQcmVtaXVtJzpcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1CdXNpbmVzczpcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215OlxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUZpcnN0OlxuICAgICAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXlcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzOlxuICAgICAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aGlzLmNhYmluQ2xhc3MgPSBGbGlnaHRDYWJpbkNsYXNzLkFueVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdGhpcy5yZXR1cm5DYWJpbkNsYXNzID0gdGhpcy5jYWJpbkNsYXNzO1xuICAgIH1cbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHF1ZXJ5LmluY2x1ZGVOZWFyYnlBaXJwb3J0cztcbiAgICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPSBxdWVyeS5yZXR1cm5UcmlwXG4gICAgICA/IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm5cbiAgICAgIDogRXVyb3N0YXJTZWFyY2hUeXBlLm9uZVdheTtcblxuICAgIGNvbnN0IGZvdW5kRGVwYXJ0ID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAubG9va3VwRXVyb3N0YXJTdGF0aW9ucyhxdWVyeS5vcmlnaW5BaXJwb3J0KVxuICAgICAgLnRvUHJvbWlzZSgpO1xuXG4gICAgY29uc3QgZm91bmRBcnJpdmUgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgIC5sb29rdXBFdXJvc3RhclN0YXRpb25zKHF1ZXJ5LmRlc3RpbmF0aW9uQWlycG9ydClcbiAgICAgIC50b1Byb21pc2UoKTtcblxuICAgIGlmIChmb3VuZERlcGFydFswXSAmJiBmb3VuZEFycml2ZVswXSkge1xuICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IGZvdW5kRGVwYXJ0WzBdO1xuICAgICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IGZvdW5kQXJyaXZlWzBdO1xuICAgICAgaWYgKHN0YXJ0U2VhcmNoKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYWRlRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMocmVzdWx0czogYW55KTogRXVyb3N0YXJRdW90ZVJlc3VsdCB7XG4gICAgcmVzdWx0cy5qb3VybmV5cy5tYXAoKGZsaWdodEl0ZW06IEV1cm9zdGFySXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+IHtcbiAgICAgIGZsaWdodEl0ZW0gPSB0aGlzLmFkZFJ1bGVzVG9GbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyhmbGlnaHRJdGVtKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdHMubXVsdGlbMF0/LnJlc3VsdHMubWFwKChmbGlnaHRJdGVtOiBFdXJvc3Rhckl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XG4gICAgICBmbGlnaHRJdGVtID0gdGhpcy5hZGRSdWxlc1RvRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMoZmxpZ2h0SXRlbSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIHByaXZhdGUgYWRkUnVsZXNUb0ZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKFxuICAgIGl0ZW06IEV1cm9zdGFySXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcbiAgKTogRXVyb3N0YXJJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyB7XG4gICAgY29uc3QgeyBqb3VybmV5V2hlblNlbGVjdGVkLCB3aGVuU2VsZWN0ZWRBbG9uZSB9ID0gdGhpcy5fcnVsZUFjdGlvblN1bW1hcnk7XG5cbiAgICBpdGVtLnJlcXVpcmVzUmVhc29uS2V5cyA9XG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2l0ZW0uam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbktleXMgfHxcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2l0ZW0uam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbktleXM7XG5cbiAgICBpdGVtLnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgPVxuICAgICAgam91cm5leVdoZW5TZWxlY3RlZFtpdGVtLmpvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25NZXNzYWdlcyB8fFxuICAgICAgd2hlblNlbGVjdGVkQWxvbmVbaXRlbS5qb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgfHxcbiAgICAgIFtdO1xuICAgICAgXG4gICAgaXRlbS5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzID1cbiAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWRbaXRlbS5qb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgfHxcbiAgICAgIHdoZW5TZWxlY3RlZEFsb25lW2l0ZW0uam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzIHx8XG4gICAgICBbXTtcblxuICAgIGl0ZW0udW5hdmFpbGFibGUgPVxuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtpdGVtLmpvdXJuZXlIYXNoXT8udW5hdmFpbGFibGUgfHxcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2l0ZW0uam91cm5leUhhc2hdPy51bmF2YWlsYWJsZTtcbiAgICBpdGVtLnVuYXZhaWxhYmxlTWVzc2FnZSA9XG4gICAgICBqb3VybmV5V2hlblNlbGVjdGVkW2l0ZW0uam91cm5leUhhc2hdPy51bmF2YWlsYWJsZU1lc3NhZ2UgfHxcbiAgICAgIHdoZW5TZWxlY3RlZEFsb25lW2l0ZW0uam91cm5leUhhc2hdPy51bmF2YWlsYWJsZU1lc3NhZ2UgfHxcbiAgICAgICcnO1xuXG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cbn0iXX0=