@sabstravtech/obtservices 0.0.22041208 → 0.0.22042501

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 (65) hide show
  1. package/angular/fetchers.d.ts +1 -0
  2. package/angular/lib/vendor/fetchers/email-basket.fetcher.d.ts +7 -0
  3. package/angular/lib/vendor/services/search.service.d.ts +4 -3
  4. package/angular/lib/vendor/services/user.service.d.ts +4 -3
  5. package/angular/lib/vendor/types/graphql.angular.types.d.ts +507 -9
  6. package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
  7. package/base/fetchers.d.ts +1 -0
  8. package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +2 -1
  9. package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +1 -1
  10. package/base/lib/vendor/classes/modal-types.enum.d.ts +1 -0
  11. package/base/lib/vendor/classes/rail-enterprise-search.d.ts +2 -0
  12. package/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +1 -1
  13. package/base/lib/vendor/classes/user-favourite.enum.d.ts +1 -0
  14. package/base/lib/vendor/fetchers/email-basket.fetcher.d.ts +20 -0
  15. package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +1 -0
  16. package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +1 -1
  17. package/base/lib/vendor/interfaces/Isearch.service.d.ts +3 -3
  18. package/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +1 -1
  19. package/base/lib/vendor/services/search.service.d.ts +7 -5
  20. package/base/lib/vendor/services/url.service.d.ts +2 -1
  21. package/base/lib/vendor/services/user.service.d.ts +8 -2
  22. package/base/lib/vendor/types/graphql.types.d.ts +502 -9
  23. package/base/lib/vendor/types/types.d.ts +2 -2
  24. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  25. package/bundles/sabstravtech-obtservices-angular.umd.js +136 -84
  26. package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
  27. package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
  28. package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
  29. package/bundles/sabstravtech-obtservices-base.umd.js +206 -49
  30. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  31. package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
  32. package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
  33. package/esm2015/angular/fetchers.js +2 -1
  34. package/esm2015/angular/lib/vendor/fetchers/email-basket.fetcher.js +25 -0
  35. package/esm2015/angular/lib/vendor/services/search.service.js +8 -5
  36. package/esm2015/angular/lib/vendor/services/user.service.js +13 -10
  37. package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +1006 -2
  38. package/esm2015/base/fetchers.js +2 -1
  39. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +34 -8
  40. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +15 -12
  41. package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +6 -1
  42. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +31 -4
  43. package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +10 -2
  44. package/esm2015/base/lib/vendor/classes/modal-types.enum.js +2 -1
  45. package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +12 -2
  46. package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +35 -19
  47. package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +3 -3
  48. package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +2 -1
  49. package/esm2015/base/lib/vendor/data/euro-stations.json +8 -0
  50. package/esm2015/base/lib/vendor/fetchers/email-basket.fetcher.js +11 -0
  51. package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
  52. package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
  53. package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
  54. package/esm2015/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.js +1 -1
  55. package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +2 -1
  56. package/esm2015/base/lib/vendor/services/search.service.js +8 -3
  57. package/esm2015/base/lib/vendor/services/url.service.js +2 -1
  58. package/esm2015/base/lib/vendor/services/user.service.js +19 -2
  59. package/esm2015/base/lib/vendor/types/graphql.types.js +11 -1
  60. package/esm2015/base/lib/vendor/types/types.js +3 -3
  61. package/fesm2015/sabstravtech-obtservices-angular.js +1048 -26
  62. package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
  63. package/fesm2015/sabstravtech-obtservices-base.js +199 -50
  64. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  65. package/package.json +1 -1
@@ -833,12 +833,20 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
833
833
  : this.dropoff_location.gateway;
834
834
  break;
835
835
  case LocationTypes.City:
836
- query.city = {
837
- pickupCountryCode: this.cityPickup.countryCode,
838
- pickupCity: this.cityPickup.id.toString(),
839
- dropoffCountryCode: this.cityDropoff.countryCode,
840
- dropoffCity: this.cityDropoff.id.toString()
836
+ query.depot = {
837
+ vendorCode: this.cityPickupDepot.vendorCode,
838
+ pickupLocationCode: this.cityPickupDepot.locationCode,
839
+ pickupExtendedLocationCode: this.cityPickupDepot.extendedLocationCode,
840
+ dropOffLocationCode: this.cityDropoffDepot.locationCode,
841
+ dropOffExtendedLocationCode: this.cityDropoffDepot.extendedLocationCode
841
842
  };
843
+ // OLD payload for city, asked to change
844
+ // query.city = {
845
+ // pickupCountryCode: this.cityPickup.countryCode,
846
+ // pickupCity: this.cityPickup.id.toString(),
847
+ // dropoffCountryCode: this.cityDropoff.countryCode,
848
+ // dropoffCity: this.cityDropoff.id.toString()
849
+ // };
842
850
  break;
843
851
  case LocationTypes.Postcode:
844
852
  query.depot = {
@@ -854,7 +862,9 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
854
862
  query.pickupDateTime = this.helpers.formatGraphQLDateTime(this.pickup_datetime);
855
863
  query.aircon = this.airCon;
856
864
  // now for the optional fields - nullify these if they are '-' (Any)
857
- query.vendor = this.chosenVendor === '-' ? null : this.chosenVendor;
865
+ if (this.locationType === LocationTypes.Airport) {
866
+ query.vendor = this.chosenVendor === '-' ? null : this.chosenVendor;
867
+ }
858
868
  query.transmission = this.transmission || null;
859
869
  query.class = this.carClass || null;
860
870
  query.type = this.carType || null;
@@ -1093,9 +1103,25 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
1093
1103
  }
1094
1104
  updateFromPreviousSearches(previousItems) {
1095
1105
  var _a;
1106
+ console.log("PREPOPULATING CARHIRE FORM");
1096
1107
  const flightItem = (_a = previousItems[ServiceType.Flight]) === null || _a === void 0 ? void 0 : _a.searchQuery;
1097
1108
  if (flightItem) {
1098
- // TODO flights haven't been done yet.
1109
+ try {
1110
+ let startDate = this.searchService.searches[ServiceType.Flight].outBoundDate.toDate();
1111
+ let endDate = this.searchService.searches[ServiceType.Flight].inboundDate.toDate();
1112
+ this.locationType = LocationTypes.Airport;
1113
+ this.pickup_datetime = this.searchService.searches[ServiceType.Flight].outBoundDate;
1114
+ this.dropoff_datetime = this.searchService.searches[ServiceType.Flight].inboundDate;
1115
+ this.pickup_date = { day: startDate.getUTCDate(), month: startDate.getUTCMonth() + 1, year: startDate.getUTCFullYear() };
1116
+ this.dropoff_date = { day: endDate.getUTCDate(), month: endDate.getUTCMonth() + 1, year: endDate.getUTCFullYear() };
1117
+ this.pickup_location = this.searchService.searches[ServiceType.Flight].arriveLocation;
1118
+ this.dropoff_location = this.searchService.searches[ServiceType.Flight].arriveLocation;
1119
+ this.pickup_country = this.searchService.searches[ServiceType.Flight].arriveLocation.countryCode;
1120
+ this.dropoff_country = this.searchService.searches[ServiceType.Flight].arriveLocation.countryCode;
1121
+ }
1122
+ catch (_b) {
1123
+ console.error("Error trying to prepopulate carhire from flight item");
1124
+ }
1099
1125
  }
1100
1126
  }
1101
1127
  // !date and time is handled differently for LU
@@ -1305,4 +1331,4 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
1305
1331
  }
1306
1332
  CarhireEnterpriseSearch.STORAGE_SESSION_PARAMS = 'carhire_params';
1307
1333
  CarhireEnterpriseSearch.STORAGE_SESSION_RESULTS = 'carhire_results';
1308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9jYXJoaXJlLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHekQsT0FBTyxFQUFjLEVBQUUsRUFBbUIsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBVXRFLE9BQU8sRUFRTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixXQUFXLEVBQ1gsYUFBYSxFQUdkLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQU1MLGFBQWEsRUFNZCxNQUFNLGdCQUFnQixDQUFDO0FBY3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLM0MsTUFBTSxDQUFOLElBQVksWUFNWDtBQU5ELFdBQVksWUFBWTtJQUN0QiwrQkFBZSxDQUFBO0lBQ2YsK0JBQWUsQ0FBQTtJQUNmLDZCQUFhLENBQUE7SUFDYix1Q0FBdUIsQ0FBQTtJQUN2Qix1Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBTlcsWUFBWSxLQUFaLFlBQVksUUFNdkI7QUFFRCxNQUFNLE9BQU8sdUJBSVgsU0FBUSxvQkFJUDtJQWluQkQsaUNBQWlDO0lBRWpDLFlBQ1UsY0FBNkMsRUFDN0MsZ0NBQThFLEVBQ3RGLE9BQTJCLEVBQ25CLGFBQStDLEVBQ3ZELGNBQWtDLEVBQzFCLGFBQStDO1FBRXZELEtBQUssQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFQdkIsbUJBQWMsR0FBZCxjQUFjLENBQStCO1FBQzdDLHFDQUFnQyxHQUFoQyxnQ0FBZ0MsQ0FBOEM7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TUFBTSxLQUFLLEdBQTJCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM1RCxNQUFNLG9CQUFvQixHQUFzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0UsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFO2dCQUNuQixXQUFXLEVBQUUsV0FBVyxDQUFDLEdBQUc7Z0JBQzVCLFVBQVUsRUFBRSxvQkFBb0I7YUFDakMsQ0FBQTtZQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMzRDtJQUNILENBQUM7O0FBem1EZSw4Q0FBc0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUMxQywrQ0FBdUIsR0FBRyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ2FySGlyZVNvcnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nhci1oaXJlLXNvcnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ2FySGlyZUZpbHRlcnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nhci1oaXJlLWZpbHRlcnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgU2VsZWN0RmlsdGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWxlY3QtZmlsdGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQ2FySGlyZURldGFpbFJlcXVlc3RSZXNwb25zZSxcclxuICBDdXJyZW5jeUNvZGUsXHJcbiAgQmFza2V0SXRlbSxcclxuICBDYXJIaXJlSW5wdXRJZGVudGlmaWVycyxcclxuICBDYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eSxcclxuICBRdWVyeVNlYXJjaENhckhpcmVBcmdzLFxyXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIENhckhpcmVUcmFuc21pc3Npb24sXHJcbiAgQ2FySGlyZUNsYXNzLFxyXG4gIENhckhpcmVUeXBlLFxyXG4gIERpc3RhbmNlVHlwZXMsXHJcbiAgU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlc1xyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIENhckhpcmVRdW90ZVJlc3VsdCxcclxuICBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSxcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxyXG4gIFZlbmRvcixcclxuICBMb2NhdGlvblR5cGVzLFxyXG4gIExvY2F0aW9uRGV0YWlscyxcclxuICBDYXJIaXJlRGVwb3QsXHJcbiAgUmVjZW50U2VhcmNoLFxyXG4gIFdpdGhpbkRpc3RhbmNlLFxyXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUNhcmhpcmVRdW90ZUZldGNoZXIsXHJcbiAgQ2FySGlyZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcclxuICBDYXJIaXJlVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWNhcmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcixcclxuICBDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9jYXJoaXJlLWF2YWlsYWJpbGl0eS1kZXRhaWwuZmV0Y2hlcic7XHJcbmltcG9ydCB7IHRha2UsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSUNhckNsYXNzZXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nhci1oaXJlLWNsYXNzZXMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVHJhdmVsbGVyIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQgeyBDYXJIaXJlU2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FyLWhpcmUtc2VhcmNoLWFyZy5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGVudW0gU29ydFR5cGVzQ2FyIHtcclxuICBwcmljZSA9ICdwcmljZScsXHJcbiAgYnJhbmQgPSAnYnJhbmQnLFxyXG4gIHNpemUgPSAnc2l6ZScsXHJcbiAgcHJlZmVycmVkID0gJ3ByZWZlcnJlZCcsXHJcbiAgZXhwZW5zaXZlID0gJ2V4cGVuc2l2ZSdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENhcmhpcmVFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgQ0hfUSBleHRlbmRzIENhckhpcmVGZXRjaGVyVHlwZSxcclxuICAgIENIQURfUSBleHRlbmRzIENhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyVHlwZVxyXG4gID5cclxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgQ2FySGlyZVRlbXBQYXJhbXMsXHJcbiAgICBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSxcclxuICAgIENhckhpcmVRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2Vcclxue1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ2NhcmhpcmVfcGFyYW1zJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAnY2FyaGlyZV9yZXN1bHRzJztcclxuXHJcbiAgLy8gISAtIEhhcmRjb2RlZCBEYXRhXHJcbiAgcHJpdmF0ZSBfY2FyVHlwZUNvZGVzOiBbc3RyaW5nLCBzdHJpbmcsIENhckhpcmVUeXBlXVtdID0gW1xyXG4gICAgWydCJywgJzItMyBEb29yJywgQ2FySGlyZVR5cGUuVHdvVG9UaHJlZURvb3JdLFxyXG4gICAgWydDJywgJzIvNCBEb29yJywgQ2FySGlyZVR5cGUuVHdvT3JGb3VyRG9vcl0sXHJcbiAgICBbJ0QnLCAnNC01IERvb3InLCBDYXJIaXJlVHlwZS5Gb3VyVG9GaXZlRG9vcl0sXHJcbiAgICBbJ1cnLCAnV2Fnb24gLyBFc3RhdGUnLCBDYXJIaXJlVHlwZS5XYWdvbk9yRXN0YXRlXSxcclxuICAgIFsnVicsICdQYXNzZW5nZXIgVmFuJywgQ2FySGlyZVR5cGUuUGFzc2VuZ2VyVmFuXSxcclxuICAgIFsnTCcsICdMaW1vdXNpbmUnLCBDYXJIaXJlVHlwZS5MaW1vdXNpbmVdLFxyXG4gICAgWydTJywgJ1Nwb3J0JywgQ2FySGlyZVR5cGUuU3BvcnRdLFxyXG4gICAgWydUJywgJ0NvbnZlcnRpYmxlJywgQ2FySGlyZVR5cGUuQ29udmVydGlibGVdLFxyXG4gICAgWydGJywgJ1NVVicsIENhckhpcmVUeXBlLlN1dl0sXHJcbiAgICBbJ0onLCAnT3BlbiBBaXIgQWxsIFRlcnJhaW4nLCBDYXJIaXJlVHlwZS5PcGVuQWlyQWxsVGVycmFpbl0sXHJcbiAgICBbJ1gnLCAnU3BlY2lhbCcsIENhckhpcmVUeXBlLlNwZWNpYWxdLFxyXG4gICAgWydQJywgJ1BpY2t1cCBSZWd1bGFyIENhYicsIENhckhpcmVUeXBlLlBpY2tVcFJlZ3VsYXJDYWJdLFxyXG4gICAgWydRJywgJ1BpY2t1cCBFeHRlbmRlZCBDYWInLCBDYXJIaXJlVHlwZS5QaWNrVXBFeHRlbmRlZENhYl0sXHJcbiAgICBbJ1onLCAnU3BlY2lhbCBPZmZlciBDYXInLCBDYXJIaXJlVHlwZS5TcGVjaWFsT2ZmZXJDYXJdLFxyXG4gICAgWydFJywgJ0NvdXBlJywgQ2FySGlyZVR5cGUuQ291cGVdLFxyXG4gICAgWydNJywgJ01vbm9zcGFjZSAoRXVyb3BlKScsIENhckhpcmVUeXBlLk1vbm9zcGFjZUV1cm9wZWFuVXNlXSxcclxuICAgIFsnUicsICdSZWNyZWF0aW9uYWwgVmVoaWNsZScsIENhckhpcmVUeXBlLlN1dl0sXHJcbiAgICBbJ0gnLCAnTW90b3IgSG9tZScsIENhckhpcmVUeXBlLk1vdG9ySG9tZV0sXHJcbiAgICBbJ1knLCAnMi1XaGVlbCBWZWhpY2xlJywgQ2FySGlyZVR5cGUuVHdvV2hlZWxWZWhpY2xlXSxcclxuICAgIFsnTicsICdSb2Fkc3RlcicsIENhckhpcmVUeXBlLlJvYWRzdGVyXSxcclxuICAgIFsnRycsICdDcm9zc292ZXInLCBDYXJIaXJlVHlwZS5TdXZdLFxyXG4gICAgWydLJywgJ0NvbW1lcmNpYWwgVmFuIC8gVHJ1Y2snLCBDYXJIaXJlVHlwZS5QYXNzZW5nZXJWYW5dXHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBfY2FyQWlyQ29uZGl0aW9uVHlwZXM6IFtzdHJpbmcsIHN0cmluZywgYm9vbGVhbl1bXSA9IFtcclxuICAgIFsnQW55JywgJ0FueScsIG51bGxdLFxyXG4gICAgWydZJywgJ1llcycsIHRydWVdLFxyXG4gICAgWydOJywgJ05vJywgZmFsc2VdXHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBfd2l0aGluRGlzdGFuY2U6IFdpdGhpbkRpc3RhbmNlW10gPSBbXHJcbiAgICB7IG5hbWU6ICcxIG1pbGUnLCB2YWx1ZTogJzEnIH0sXHJcbiAgICB7IG5hbWU6ICcyIG1pbGVzJywgdmFsdWU6ICcyJyB9LFxyXG4gICAgeyBuYW1lOiAnNSBtaWxlcycsIHZhbHVlOiAnNScgfSxcclxuICAgIHsgbmFtZTogJzEwIG1pbGVzJywgdmFsdWU6ICcxMCcgfSxcclxuICAgIHsgbmFtZTogJzIwIG1pbGVzJywgdmFsdWU6ICcyMCcgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2NhclRyYW5zbWlzc2lvbkNvZGVzOiBbc3RyaW5nLCBzdHJpbmcsIENhckhpcmVUcmFuc21pc3Npb25dW10gPSBbXHJcbiAgICBbJ00nLCAnTWFudWFsJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxdLFxyXG4gICAgWydOJywgJ01hbnVhbCA0LVdoZWVsIERyaXZlJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxdLFxyXG4gICAgWydDJywgJ01hbnVhbCBBbGwtV2hlZWwgRHJpdmUnLCBDYXJIaXJlVHJhbnNtaXNzaW9uLk1hbnVhbF0sXHJcbiAgICBbJ0EnLCAnQXV0b21hdGljJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5BdXRvXSxcclxuICAgIFsnQicsICdBdXRvbWF0aWMgNC1XaGVlbCBEcml2ZScsIENhckhpcmVUcmFuc21pc3Npb24uQXV0b10sXHJcbiAgICBbJ0QnLCAnQXV0b21hdGljIEFsbC0gV2hlZWwgRHJpdmUnLCBDYXJIaXJlVHJhbnNtaXNzaW9uLkF1dG9dXHJcbiAgXTtcclxuXHJcbiAgY2FyaGlyZUNvZGVzOiBhbnk7XHJcbiAgcHJpdmF0ZSBfdmVuZG9yczogVmVuZG9yW10gPSBbXHJcbiAgICB7IGNvZGU6ICctJywgbmFtZTogJ0FueScgfSxcclxuICAgIHsgY29kZTogJ0FDJywgbmFtZTogJ0FjZSBSZW50IEEgQ2FyJyB9LFxyXG4gICAgeyBjb2RlOiAnQUQnLCBuYW1lOiAnQWR2YW50YWdlIFJlbnQgQSBDYXInIH0sXHJcbiAgICB7IGNvZGU6ICdBTCcsIG5hbWU6ICdBbGFtbycgfSxcclxuICAgIHsgY29kZTogJ1pJJywgbmFtZTogJ0F2aXMnIH0sXHJcbiAgICB7IGNvZGU6ICdBVCcsIG5hbWU6ICdBdGVzYScgfSxcclxuICAgIHsgY29kZTogJ1pEJywgbmFtZTogJ0J1ZGdldCBSZW50IEEgQ2FyJyB9LFxyXG4gICAgeyBjb2RlOiAnQ0knLCBuYW1lOiAnQ2l0ZXIgUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ1pSJywgbmFtZTogJ0RvbGxhciBSZW50IEEgQ2FyJyB9LFxyXG4gICAgeyBjb2RlOiAnREYnLCBuYW1lOiAnRHJpdmluZyBGb3JjZScgfSxcclxuICAgIHsgY29kZTogJ0VZJywgbmFtZTogJ0Vjb25vbXkgUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0VUJywgbmFtZTogJ0VudGVycHJpc2UnIH0sXHJcbiAgICB7IGNvZGU6ICdFUCcsIG5hbWU6ICdFdXJvcGNhcicgfSxcclxuICAgIHsgY29kZTogJ0lNJywgbmFtZTogJ0V1cm9wY2FyIFNvdXRoYWZyaWNhJyB9LFxyXG4gICAgeyBjb2RlOiAnRVonLCBuYW1lOiAnRXogUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0ZGJywgbmFtZTogJ0ZpcmVmbHknIH0sXHJcbiAgICB7IGNvZGU6ICdGWCcsIG5hbWU6ICdGb3ggUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0dOJywgbmFtZTogJ0d1ZXJpbiBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnWkUnLCBuYW1lOiAnSGVydHonIH0sXHJcbiAgICB7IGNvZGU6ICdMTScsIG5hbWU6ICdMICYgTSBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnTEwnLCBuYW1lOiAnTG9jYWxpemEnIH0sXHJcbiAgICB7IGNvZGU6ICdNVycsIG5hbWU6ICdNaWR3YXkgQ2FyIFJlbnRhbCcgfSxcclxuICAgIHsgY29kZTogJ1pMJywgbmFtZTogJ05hdGlvbmFsIENhciBSZW50YWwgU3lzdGVtJyB9LFxyXG4gICAgeyBjb2RlOiAnTkMnLCBuYW1lOiAnTmV4dGNhcicgfSxcclxuICAgIHsgY29kZTogJ05VJywgbmFtZTogJ051IENhciBSZW50YWxzJyB9LFxyXG4gICAgeyBjb2RlOiAnWkEnLCBuYW1lOiAnUGF5bGVzcyBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnUFInLCBuYW1lOiAnUHJpY2VsZXNzJyB9LFxyXG4gICAgeyBjb2RlOiAnUlcnLCBuYW1lOiAnUmVudCBBIFdyZWNrJyB9LFxyXG4gICAgeyBjb2RlOiAnU1gnLCBuYW1lOiAnU2l4dCcgfSxcclxuICAgIHsgY29kZTogJ1RFJywgbmFtZTogJ1RlbXBlc3QnIH0sXHJcbiAgICB7IGNvZGU6ICdYRicsIG5hbWU6ICdUZXN0LVMgQ3Jvc3MgR2FsaWxlbycgfSxcclxuICAgIHsgY29kZTogJ1hHJywgbmFtZTogJ1Rlc3QtUyBDcm9zcyBUcm5nJyB9LFxyXG4gICAgeyBjb2RlOiAnWlQnLCBuYW1lOiAnVGhyaWZ0eSBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnUE0nLCBuYW1lOiAnVHJhdmVscG9ydCBUZXN0IENvZGUnIH0sXHJcbiAgICB7IGNvZGU6ICdTVicsIG5hbWU6ICdVLVNhdmUgQXV0byBSZW50YWwnIH0sXHJcbiAgICB7IGNvZGU6ICdXRicsIG5hbWU6ICdXb29kZm9yZCcgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2Nhcl9jbGFzc2VzOiBJQ2FyQ2xhc3Nlc1tdID0gW1xyXG4gICAgeyBjb2RlOiAnTScsIG5hbWU6ICdNaW5pJywga2V5OiBDYXJIaXJlQ2xhc3MuTWluaSwgdmFsdWU6ICcxMCcgfSxcclxuICAgIHsgY29kZTogJ04nLCBuYW1lOiAnTWluaSBFbGl0ZScsIGtleTogQ2FySGlyZUNsYXNzLk1pbmlFbGl0ZSwgdmFsdWU6ICcyMCcgfSxcclxuICAgIHsgY29kZTogJ0UnLCBuYW1lOiAnRWNvbm9teScsIGtleTogQ2FySGlyZUNsYXNzLkVjb25vbXksIHZhbHVlOiAnMzAnIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdIJyxcclxuICAgICAgbmFtZTogJ0Vjb25vbXkgRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5FY29ub215RWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnNDAnXHJcbiAgICB9LFxyXG4gICAgeyBjb2RlOiAnQycsIG5hbWU6ICdDb21wYWN0Jywga2V5OiBDYXJIaXJlQ2xhc3MuQ29tcGFjdCwgdmFsdWU6ICc1MCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ0QnLFxyXG4gICAgICBuYW1lOiAnQ29tcGFjdCBFbGl0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkNvbXBhY3RFbGl0ZSxcclxuICAgICAgdmFsdWU6ICc2MCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdJJyxcclxuICAgICAgbmFtZTogJ0ludGVybWVkaWF0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkludGVybWVkaWF0ZSxcclxuICAgICAgdmFsdWU6ICc3MCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdKJyxcclxuICAgICAgbmFtZTogJ0ludGVybWVkaWF0ZSBFbGl0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkludGVybWVkaWF0ZUVsaXRlLFxyXG4gICAgICB2YWx1ZTogJzgwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ1MnLCBuYW1lOiAnU3RhbmRhcmQnLCBrZXk6IENhckhpcmVDbGFzcy5TdGFuZGFyZCwgdmFsdWU6ICc5MCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ1InLFxyXG4gICAgICBuYW1lOiAnU3RhbmRhcmQgRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5TdGFuZGFyZEVsaXRlLFxyXG4gICAgICB2YWx1ZTogJzEwMCdcclxuICAgIH0sXHJcbiAgICB7IGNvZGU6ICdGJywgbmFtZTogJ0Z1bGwgU2l6ZScsIGtleTogQ2FySGlyZUNsYXNzLkZ1bGxzaXplLCB2YWx1ZTogJzExMCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ0cnLFxyXG4gICAgICBuYW1lOiAnRnVsbCBTaXplIEVsaXRlJyxcclxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuRnVsbHNpemVFbGl0ZSxcclxuICAgICAgdmFsdWU6ICcxMjAnXHJcbiAgICB9LFxyXG4gICAgeyBjb2RlOiAnUCcsIG5hbWU6ICdQcmVtaXVtJywga2V5OiBDYXJIaXJlQ2xhc3MuUHJlbWl1bSwgdmFsdWU6ICcxMzAnIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdVJyxcclxuICAgICAgbmFtZTogJ1ByZW1pdW0gRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5QcmVtaXVtRWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnMTQwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ0wnLCBuYW1lOiAnTHV4dXJ5Jywga2V5OiBDYXJIaXJlQ2xhc3MuTHV4dXJ5LCB2YWx1ZTogJzE1MCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ1cnLFxyXG4gICAgICBuYW1lOiAnTHV4dXJ5IEVsaXRlJyxcclxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuTHV4dXJ5RWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnMTYwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ08nLCBuYW1lOiAnT3ZlcnNpemUnLCBrZXk6IENhckhpcmVDbGFzcy5PdmVyc2l6ZSwgdmFsdWU6ICcxNzAnIH0sXHJcbiAgICB7IGNvZGU6ICdYJywgbmFtZTogJ1NwZWNpYWwnLCBrZXk6IENhckhpcmVDbGFzcy5TcGVjaWFsLCB2YWx1ZTogJzE4MCcgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2xvY2F0aW9uX3R5cGVzID0gW1xyXG4gICAgTG9jYXRpb25UeXBlcy5DaXR5LFxyXG4gICAgTG9jYXRpb25UeXBlcy5BaXJwb3J0LFxyXG4gICAgTG9jYXRpb25UeXBlcy5Qb3N0Y29kZVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgY2FyQ2xhc3NNYXA6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7XHJcbiAgICBtaW5pOiAwLFxyXG4gICAgJ21pbmkgZWxpdGUnOiAxLFxyXG4gICAgZWNvbm9teTogMixcclxuICAgICdlY29ub215IGVsaXRlJzogMyxcclxuICAgIGNvbXBhY3Q6IDQsXHJcbiAgICAnY29tcGFjdCBzcGVjaWFsJzogNSxcclxuICAgICdjb21wYWN0IGVsaXRlJzogNixcclxuICAgIGludGVybWVkaWF0ZTogNyxcclxuICAgICdpbnRlcm1lZGlhdGUgZWxpdGUnOiA4LFxyXG4gICAgc3RhbmRhcmQ6IDksXHJcbiAgICAnc3RhbmRhcmQgZWxpdGUnOiAxMCxcclxuICAgICdmdWxsIHNpemUnOiAxMSxcclxuICAgICdmdWxsIHNpemUgZWxpdGUnOiAxMixcclxuICAgIHByZW1pdW06IDEzLFxyXG4gICAgJ3ByZW1pdW0gZWxpdGUnOiAxNCxcclxuICAgIGx1eHVyeTogMTUsXHJcbiAgICAnbHV4dXJ5IGVsaXRlJzogMTYsXHJcbiAgICBvdmVyc2l6ZTogMTcsXHJcbiAgICBzcGVjaWFsOiAxOFxyXG4gIH07XHJcbiAgLy8gISAtIEVuZCBvZiBoYXJkY29kZWQgZGF0YVxyXG5cclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5DYXI7XHJcblxyXG4gIHByaXZhdGUgX25nYlBpY2t1cERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHJpdmF0ZSBfcGlja3VwVGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX25nYkRyb3BvZmZEYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHByaXZhdGUgX2Ryb3BvZmZUaW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfc29ydGluZ19vcHRpb25zOiBDYXJIaXJlU29ydFtdID0gW1xyXG4gICAge1xyXG4gICAgICB2YWx1ZTogMCxcclxuICAgICAgZGlzcGxheTogJ0NoZWFwZXN0IEZpcnN0J1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdmFsdWU6IDEsXHJcbiAgICAgIGRpc3BsYXk6ICdNb3N0IEV4cGVuc2l2ZSBGaXJzdCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHZhbHVlOiAyLFxyXG4gICAgICBkaXNwbGF5OiAnUHJlZmVycmVkIEZpcnN0J1xyXG4gICAgfVxyXG4gIF07XHJcbiAgcHJpdmF0ZSBfbWluRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfbWluSW5EYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKClcclxuICB9O1xyXG4gIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdO1xyXG5cclxuICBnZXQgYWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVzdGltYXRlZE1pbGVhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZXN0aW1hdGVkTWlsZWFnZTtcclxuICB9XHJcblxyXG4gIHNldCBlc3RpbWF0ZWRNaWxlYWdlKG1pbGFnZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZXN0aW1hdGVkTWlsZWFnZSA9IG1pbGFnZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwaWNrdXBUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGlja3VwVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBwaWNrdXBUaW1lKG5ld3RpbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcGlja3VwVGltZSA9IG5ld3RpbWU7XHJcbiAgICB0aGlzLl91cGRhdGVOZ2JQaWNrdXBEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRyb3BvZmZUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHJvcG9mZlRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgZHJvcG9mZlRpbWUobmV3dGltZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9kcm9wb2ZmVGltZSA9IG5ld3RpbWU7XHJcbiAgICB0aGlzLl91cGRhdGVOZ2JEcm9wb2ZmRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIGdldCBwb3N0Y29kZVBpY2t1cFJhdygpOiBMb2NhdGlvbkRldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cFJhdztcclxuICB9XHJcblxyXG4gIHNldCBwb3N0Y29kZVBpY2t1cFJhdyhuZXdQaWNrdXBDb3VudHJ5OiBMb2NhdGlvbkRldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cFJhdyA9IG5ld1BpY2t1cENvdW50cnk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zdGNvZGVEcm9wb2ZmUmF3KCk6IExvY2F0aW9uRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlRHJvcG9mZlJhdztcclxuICB9XHJcblxyXG4gIHNldCBwb3N0Y29kZURyb3BvZmZSYXcobmV3UGlja3VwQ291bnRyeTogTG9jYXRpb25EZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVEcm9wb2ZmUmF3ID0gbmV3UGlja3VwQ291bnRyeTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaXR5UGlja3VwRGVwb3QoKTogQ2FySGlyZURlcG90IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cERlcG90O1xyXG4gIH1cclxuXHJcbiAgc2V0IGNpdHlQaWNrdXBEZXBvdChuZXdQaWNrdXBDb3VudHJ5OiBDYXJIaXJlRGVwb3QpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaXR5UGlja3VwRGVwb3QgPSBuZXdQaWNrdXBDb3VudHJ5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNpdHlEcm9wb2ZmRGVwb3QoKTogQ2FySGlyZURlcG90IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmZEZXBvdDtcclxuICB9XHJcblxyXG4gIHNldCBjaXR5RHJvcG9mZkRlcG90KG5ld1Bvc3RDb2RlRHJvcG9mZjogQ2FySGlyZURlcG90KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmZEZXBvdCA9IG5ld1Bvc3RDb2RlRHJvcG9mZjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwb3N0Y29kZVBpY2t1cCgpOiBDYXJIaXJlRGVwb3Qge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cDtcclxuICB9XHJcblxyXG4gIHNldCBwb3N0Y29kZVBpY2t1cChuZXdQaWNrdXBDb3VudHJ5OiBDYXJIaXJlRGVwb3QpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cCA9IG5ld1BpY2t1cENvdW50cnk7XHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlUGlja3VwKSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBvc3Rjb2RlRHJvcG9mZigpOiBDYXJIaXJlRGVwb3Qge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZURyb3BvZmY7XHJcbiAgfVxyXG5cclxuICBzZXQgcG9zdGNvZGVEcm9wb2ZmKG5ld1Bvc3RDb2RlRHJvcG9mZjogQ2FySGlyZURlcG90KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVEcm9wb2ZmID0gbmV3UG9zdENvZGVEcm9wb2ZmO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNpdHlQaWNrdXAoKTogTG9jYXRpb25EZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cDtcclxuICB9XHJcblxyXG4gIHNldCBjaXR5UGlja3VwKG5ld1BpY2t1cDogTG9jYXRpb25EZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cCA9IG5ld1BpY2t1cDtcclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cCkge1xyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5DaXR5O1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2l0eURyb3BvZmYoKTogTG9jYXRpb25EZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmY7XHJcbiAgfVxyXG5cclxuICBzZXQgY2l0eURyb3BvZmYobmV3RHJvcG9mZjogTG9jYXRpb25EZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmYgPSBuZXdEcm9wb2ZmO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1pbkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcclxuICB9XHJcblxyXG4gIGdldCBtaW5JbkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluSW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXk8c3RyaW5nPltdO1xyXG4gIC8vIC0gR2V0dGVycyBBbmQgU2V0dGVycyBGb3IgVmFyaW91cyBWYXJpYWJsZXNcclxuICBnZXQgcGlja3VwX2NvdW50cnkoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2NvdW50cnk7XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwX2NvdW50cnkobmV3UGlja3VwQ291bnRyeTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2NvdW50cnkgPSBuZXdQaWNrdXBDb3VudHJ5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRyb3BvZmZfY291bnRyeSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2NvdW50cnk7XHJcbiAgfVxyXG5cclxuICBzZXQgZHJvcG9mZl9jb3VudHJ5KG5ld0Ryb3BvZmZDb3VudHJ5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2NvdW50cnkgPSBuZXdEcm9wb2ZmQ291bnRyeTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwaWNrdXBfbG9jYXRpb24oKTogT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5waWNrdXBfbG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwX2xvY2F0aW9uKHBpY2t1cExvY2F0aW9uOiBPQlRBaXJwb3J0RGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnBpY2t1cF9sb2NhdGlvbiA9IHBpY2t1cExvY2F0aW9uO1xyXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5waWNrdXBfbG9jYXRpb24pIHtcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuQWlycG9ydDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZXR1cm5fdG9fcGlja3VwKSB7XHJcbiAgICAgIHRoaXMuZHJvcG9mZl9sb2NhdGlvbiA9IHBpY2t1cExvY2F0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBkcm9wb2ZmX2xvY2F0aW9uKCk6IE9CVEFpcnBvcnREZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9sb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCBkcm9wb2ZmX2xvY2F0aW9uKGRyb3BPZmZMb2NhdGlvbjogT0JUQWlycG9ydERldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2xvY2F0aW9uID0gZHJvcE9mZkxvY2F0aW9uO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5nYlBpY2t1cERhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX25nYlBpY2t1cERhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZU5nYlBpY2t1cERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmdiUGlja3VwRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9uZ2JQaWNrdXBEYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5nYkRyb3BvZmZEYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9uZ2JEcm9wb2ZmRGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlTmdiRHJvcG9mZkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmdiRHJvcG9mZkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmdiRHJvcG9mZkRhdGU7XHJcbiAgfVxyXG5cclxuICAvLyBEYXRldGltZXMgd2l0aGluIHRoZSBxdWVyeSBpdHNlbGZcclxuICBnZXQgcGlja3VwX2RhdGV0aW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5waWNrdXBfZGF0ZXRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwX2RhdGV0aW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2RhdGV0aW1lID0gdmFsdWU7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgdGhpcy5fbmdiUGlja3VwRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5fcGlja3VwVGltZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpXHJcbiAgICAgICAgICA/IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpXHJcbiAgICAgICAgICA6ICcwNzozMCc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fbWluSW5EYXRlID0ge1xyXG4gICAgICAgIGRheTogdmFsdWUuZGF0ZSgpLFxyXG4gICAgICAgIG1vbnRoOiB2YWx1ZS5tb250aCgpICsgMSxcclxuICAgICAgICB5ZWFyOiB2YWx1ZS55ZWFyKClcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZS5pc1NhbWVPckFmdGVyKHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2RhdGV0aW1lKSkge1xyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9IHRoaXMuZHJvcG9mZl9kYXRldGltZVxyXG4gICAgICAgICAgLnNldCgnZGF0ZScsIHZhbHVlLmRhdGUoKSlcclxuICAgICAgICAgIC5zZXQoJ21vbnRoJywgdmFsdWUubW9udGgoKSlcclxuICAgICAgICAgIC5zZXQoJ3llYXInLCB2YWx1ZS55ZWFyKCkpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge31cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZHJvcG9mZl9kYXRldGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9kYXRldGltZTtcclxuICB9XHJcblxyXG4gIHNldCBkcm9wb2ZmX2RhdGV0aW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9kYXRldGltZSA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9uZ2JEcm9wb2ZmRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuX2Ryb3BvZmZUaW1lID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ0hIOm1tJylcclxuICAgICAgICA/IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpXHJcbiAgICAgICAgOiAnMDg6MzAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gIWRhdGUgYW5kIHRpbWUgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3IgTFVcclxuICBwcml2YXRlIF9waWNrdXBfZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCBwaWNrdXBfZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9waWNrdXBfZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBwaWNrdXBfZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fcGlja3VwX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVBpY2t1cERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9waWNrdXBfdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgcGlja3VwX3RpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9waWNrdXBfdGltZTtcclxuICB9XHJcblxyXG4gIHNldCBwaWNrdXBfdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9waWNrdXBfdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUGlja3VwRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Ryb3BvZmZfZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCBkcm9wb2ZmX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHJvcG9mZl9kYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRyb3BvZmZfZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fZHJvcG9mZl9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVEcm9wb2ZmRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Ryb3BvZmZfdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgZHJvcG9mZl90aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHJvcG9mZl90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRyb3BvZmZfdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9kcm9wb2ZmX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZURyb3BvZmZEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJldHVybl90b19waWNrdXAoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybl90b19waWNrdXA7XHJcbiAgfVxyXG5cclxuICBzZXQgcmV0dXJuX3RvX3BpY2t1cChuZXdWYWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5fdG9fcGlja3VwID0gbmV3VmFsO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblZlbmRvcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5WZW5kb3I7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuVmVuZG9yKG5ld1ZlbmRvcjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuVmVuZG9yID0gbmV3VmVuZG9yO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlbkRpc3RhbmNlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlbkRpc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNob3NlbkRpc3RhbmNlKG5ld0Nob3NlbkRpc3RhbmNlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5EaXN0YW5jZSA9IG5ld0Nob3NlbkRpc3RhbmNlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhckNsYXNzKCk6IENhckhpcmVDbGFzcyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhckNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhckNsYXNzKGNhckNsYXNzOiBDYXJIaXJlQ2xhc3MpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jYXJDbGFzcyA9IGNhckNsYXNzO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhclR5cGUoKTogQ2FySGlyZVR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jYXJUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhclR5cGUodHlwZTogQ2FySGlyZVR5cGUpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jYXJUeXBlID0gdHlwZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmFuc21pc3Npb24oKTogQ2FySGlyZVRyYW5zbWlzc2lvbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRyYW5zbWlzc2lvbjtcclxuICB9XHJcblxyXG4gIHNldCB0cmFuc21pc3Npb24odHJhbnM6IENhckhpcmVUcmFuc21pc3Npb24pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy50cmFuc21pc3Npb24gPSB0cmFucztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBhaXJDb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFpckNvbjtcclxuICB9XHJcblxyXG4gIHNldCBhaXJDb24obmV3Q29uOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWlyQ29uID0gbmV3Q29uO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxvY2F0aW9uVHlwZSgpOiBMb2NhdGlvblR5cGVzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlO1xyXG4gIH1cclxuICBzZXQgbG9jYXRpb25UeXBlKHZhbHVlOiBMb2NhdGlvblR5cGVzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRpbWVBcnJheSgpIHtcclxuICAgIHRoaXMuX3RpbWVBcnJheSA9XHJcbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxyXG4gICAgICBBcnJheSg5NilcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuICAvLyAhIC0gVGhlIGJlbG93IHZhbHVlcyBoYXZlIGdldHRlcnMgb25seSAoSS5FIENhbm5vdCBtb2RpZnkpXHJcblxyXG4gIGdldCBjYXJBaXJDb25kaXRpb25UeXBlcygpOiBbc3RyaW5nLCBzdHJpbmcsIGJvb2xlYW5dW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhckFpckNvbmRpdGlvblR5cGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdpdGhpbkRpc3RhbmNlKCk6IFdpdGhpbkRpc3RhbmNlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3dpdGhpbkRpc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhclRyYW5zbWlzc2lvbkNvZGVzKCk6IFtzdHJpbmcsIHN0cmluZywgQ2FySGlyZVRyYW5zbWlzc2lvbl1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FyVHJhbnNtaXNzaW9uQ29kZXM7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FyVHlwZUNvZGVzKCk6IFtzdHJpbmcsIHN0cmluZywgQ2FySGlyZVR5cGVdW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhclR5cGVDb2RlcztcclxuICB9XHJcblxyXG4gIGdldCB2ZW5kb3JzKCk6IFZlbmRvcltdIHtcclxuICAgIHJldHVybiB0aGlzLl92ZW5kb3JzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNvcnRpbmdPcHRpb25zKCk6IENhckhpcmVTb3J0W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRpbmdfb3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8vICEgLSBFbmQgb2YgZ2V0dGVycyBhbmQgc2V0dGVyc1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2FyaGlyZWZldGNoZXI6IEJhc2VDYXJoaXJlUXVvdGVGZXRjaGVyPENIX1E+LFxyXG4gICAgcHJpdmF0ZSBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjogQmFzZUNhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyPENIQURfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2VcclxuICApIHtcclxuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzKTtcclxuICAgIGNvbnN0IGRhdGE6IHtcclxuICAgICAgdGVtcFBhcmFtczogQ2FySGlyZVRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIENhcmhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVNcclxuICAgICkgfHwge1xyXG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBDYXJIaXJlVGVtcFBhcmFtc1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMoc2VhcmNoU2VydmljZS5tYWtlQ2FySGlyZVF1ZXJ5KGRhdGEudGVtcFBhcmFtcykpO1xyXG5cclxuICAgIGlmIChzZWFyY2hTZXJ2aWNlLnNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpKSB7XHJcbiAgICAgIHNlYXJjaFNlcnZpY2UudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyhcclxuICAgICAgICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgICAgICAgU2VydmljZVR5cGUuQ2FyXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5hZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzdWx0cyA9XHJcbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PENhckhpcmVRdW90ZVJlc3VsdEFycmF5PihcclxuICAgICAgICB0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZVxyXG4gICAgICApIHx8IFtdO1xyXG5cclxuICAgIHRoaXMuZnVsbFJlc3VsdHMgPSBoZWxwZXJzLmNsb25lKHJlc3VsdHMgfHwgW10pO1xyXG4gICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IHRoaXMudXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0cyk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID1cclxuICAgIENhcmhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG5cclxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeSgpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZUNhckhpcmVRdWVyeSgpKTtcclxuICAgIHRoaXMuZXN0aW1hdGVkTWlsZWFnZSA9IG51bGw7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZhbGlkKCkge1xyXG4gICAgaWYgKCF0aGlzLmRvQ2hlY2tzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIENhcmhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXNcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBnbyBvdmVyIGFuZCBjaGVjayB0aGF0IGFsbCBvZiB0aGUgdmFyaW91cyB2YXJpYWJsZXMgYXJlIGNvcnJlY3RcclxuXHJcbiAgICAvLyBmaXJzdCBvZiBhbGwgY2hlY2sgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgbG9jYXRpb25cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLmxvY2F0aW9uVHlwZSkge1xyXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuQWlycG9ydDpcclxuICAgICAgICBpZiAoIXRoaXMucGlja3VwX2xvY2F0aW9uIHx8ICF0aGlzLnBpY2t1cF9sb2NhdGlvbi5kZXN0aW5hdGlvbikge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIHN1cHBseSBhIHBpY2t1cCBsb2NhdGlvbicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmRyb3BvZmZfbG9jYXRpb24gfHwgIXRoaXMuZHJvcG9mZl9sb2NhdGlvbi5kZXN0aW5hdGlvbikge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIHN1cHBseSBhIGRyb3BvZmYgbG9jYXRpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5DaXR5OlxyXG4gICAgICAgIGlmICghdGhpcy5jaXR5UGlja3VwKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgcGlja3VwIGNpdHknKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jaXR5RHJvcG9mZikge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIHN1cHBseSBhIGRyb3BvZmYgY2l0eScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlOlxyXG4gICAgICAgIGlmICghdGhpcy5wb3N0Y29kZVBpY2t1cCkge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIHN1cHBseSBhIHBpY2t1cCBkZXBvdCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnBvc3Rjb2RlRHJvcG9mZikge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIHN1cHBseSBhIGRyb3BvZmYgZGVwb3QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZXN0aW1hdGVkTWlsZWFnZSAmJiB0aGlzLmVzdGltYXRlZE1pbGVhZ2UgPD0gMCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICdFc3RpbWF0ZWQgTWlsYWdlIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5waWNrdXBfZGF0ZXRpbWUpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgcGlja3VwIHRpbWUgYW5kIGRhdGUnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0aGlzLmRyb3BvZmZfZGF0ZXRpbWUpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgZHJvcCBvZmYgdGltZSBhbmQgZGF0ZScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2RhdGV0aW1lPy5pc1NhbWVPckJlZm9yZSh0aGlzLnBpY2t1cF9kYXRldGltZSwgJ21pbnV0ZScpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAnRHJvcG9mZiBkYXRlL3RpbWUgY2Fubm90IGJlIGJlZm9yZSBvciB0aGUgc2FtZSBhcyBwaWNrdXAgZGF0ZS90aW1lJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnBpY2t1cF9kYXRldGltZT8uaXNCZWZvcmUobW9tZW50KCkpKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICdQaWNrdXAgZGF0ZS90aW1lIG11c3QgYmUgYWZ0ZXIgcHJlc2VudCBkYXRlL3RpbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZHJvcG9mZl9kYXRldGltZT8uaXNCZWZvcmUobW9tZW50KCkpKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICdEcm9wb2ZmIGRhdGUvdGltZSBtdXN0IGJlIGFmdGVyIHByZXNlbnQgZGF0ZS90aW1lJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxyXG5cclxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaChcclxuICAgICAgICB0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHRoaXMuZ2V0U2VhcmNoUXVlcnkoKSlcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U2VhcmNoKFxyXG4gICAgICAgIHRoaXMuY2FyaGlyZWZldGNoZXIuZmV0Y2hMaXN0KFxyXG4gICAgICAgICAgdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3M+KHF1ZXJ5KVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogUXVlcnlTZWFyY2hDYXJIaXJlQXJnc1xyXG4gICk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCByZWNlbnRTZWFyY2hRdWVyeTogQ2FySGlyZVNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuQ2FyLFxyXG4gICAgICBzZWFyY2hBcmdzOiByZWNlbnRTZWFyY2hRdWVyeSxcclxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5waWNrdXBfZGF0ZXRpbWUuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShxdWVyeTogUXVlcnlTZWFyY2hDYXJIaXJlQXJncyk6IENhckhpcmVTZWFyY2hBcmdze1xyXG4gICAgY29uc3Qgc2VhcmNoUXVlcnk6IENhckhpcmVTZWFyY2hBcmdzID0gcXVlcnk7XHJcbiAgICBzd2l0Y2ggKHRoaXMubG9jYXRpb25UeXBlKSB7XHJcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5DaXR5OlxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5LmNpdHkgPSB7XHJcbiAgICAgICAgICBwaWNrdXBOYW1lOiB0aGlzLmNpdHlQaWNrdXAubmFtZSxcclxuICAgICAgICAgIHBpY2t1cENvdW50cnlDb2RlOiB0aGlzLmNpdHlQaWNrdXAuY291bnRyeUNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBDaXR5OiB0aGlzLmNpdHlQaWNrdXAuaWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgIHBpY2t1cExhdGl0dWRlOiB0aGlzLmNpdHlQaWNrdXAubGF0aXR1ZGUsXHJcbiAgICAgICAgICBwaWNrdXBMb25naXR1ZGU6IHRoaXMuY2l0eVBpY2t1cC5sb25naXR1ZGUsXHJcblxyXG4gICAgICAgICAgZHJvcE9mZk5hbWU6IHRoaXMuY2l0eURyb3BvZmYubmFtZSxcclxuICAgICAgICAgIGRyb3BvZmZDb3VudHJ5Q29kZTogdGhpcy5jaXR5RHJvcG9mZi5jb3VudHJ5Q29kZSxcclxuICAgICAgICAgIGRyb3BvZmZDaXR5OiB0aGlzLmNpdHlEcm9wb2ZmLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICBkcm9wT2ZmTGF0aXR1ZGU6IHRoaXMuY2l0eURyb3BvZmYubGF0aXR1ZGUsXHJcbiAgICAgICAgICBkcm9wT2ZmTG9uZ2l0dWRlOiB0aGlzLmNpdHlEcm9wb2ZmLmxvbmdpdHVkZSxcclxuXHJcbiAgICAgICAgICBwaWNrdXBBZGRyZXNzTGluZXM6IHRoaXMuY2l0eVBpY2t1cERlcG90LmFkZHJlc3NMaW5lc1swXSxcclxuICAgICAgICAgIHBpY2t1cENpdHlOYW1lOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC5jaXR5TmFtZSxcclxuICAgICAgICAgIHBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC5leHRlbmRlZExvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIHBpY2t1cExvY2F0aW9uQ29kZTogdGhpcy5jaXR5UGlja3VwRGVwb3QubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgcGlja3VwVmVuZG9yOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC52ZW5kb3IsXHJcbiAgICAgICAgICBwaWNrdXBWZW5kb3JDb2RlOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC52ZW5kb3JDb2RlLFxyXG4gICAgICAgICAgY2hvc2VuRGlzdGFuY2U6IHRoaXMuY2hvc2VuRGlzdGFuY2UsXHJcblxyXG4gICAgICAgICAgZHJvcE9mZkFkZHJlc3NMaW5lczogdGhpcy5jaXR5RHJvcG9mZkRlcG90LmFkZHJlc3NMaW5lc1swXSxcclxuICAgICAgICAgIGRyb3BPZmZDaXR5TmFtZTogdGhpcy5jaXR5RHJvcG9mZkRlcG90LmNpdHlOYW1lLFxyXG4gICAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBkcm9wT2ZmTG9jYXRpb25Db2RlOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZlZlbmRvcjogdGhpcy5jaXR5RHJvcG9mZkRlcG90LnZlbmRvcixcclxuICAgICAgICAgIGRyb3BPZmZWZW5kb3JDb2RlOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QudmVuZG9yQ29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5Qb3N0Y29kZTpcclxuICAgICAgICBzZWFyY2hRdWVyeS5kZXBvdCA9IHtcclxuICAgICAgICAgIHZlbmRvckNvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXAudmVuZG9yQ29kZSxcclxuICAgICAgICAgIHBpY2t1cExvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBFeHRlbmRlZExvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC5leHRlbmRlZExvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIHBpY2t1cEFkZHJlc3NMaW5lczogdGhpcy5wb3N0Y29kZVBpY2t1cC5hZGRyZXNzTGluZXNbMF0sXHJcbiAgICAgICAgICBwaWNrdXBDaXR5TmFtZTogdGhpcy5wb3N0Y29kZVBpY2t1cC5jaXR5TmFtZSxcclxuICAgICAgICAgIHBpY2t1cFZlbmRvcjogdGhpcy5wb3N0Y29kZVBpY2t1cC52ZW5kb3IsXHJcblxyXG4gICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZURyb3BvZmYubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOlxyXG4gICAgICAgICAgICB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5leHRlbmRlZExvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIGRyb3BvZmZBZGRyZXNzTGluZXM6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmFkZHJlc3NMaW5lc1swXSxcclxuICAgICAgICAgIGRyb3BvZmZDaXR5TmFtZTogdGhpcy5wb3N0Y29kZURyb3BvZmYuY2l0eU5hbWUsXHJcbiAgICAgICAgICBkcm9wb2ZmVmVuZG9yOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi52ZW5kb3IsXHJcbiAgICAgICAgICBjaG9zZW5EaXN0YW5jZTogdGhpcy5jaG9zZW5EaXN0YW5jZSxcclxuXHJcbiAgICAgICAgICBwaWNrdXBQb3N0Q29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cFJhdy5uYW1lLFxyXG4gICAgICAgICAgcGlja3VwTGF0aXR1ZGU6IHRoaXMucG9zdGNvZGVQaWNrdXBSYXcubGF0aXR1ZGUsXHJcbiAgICAgICAgICBwaWNrdXBMb25naXR1ZGU6IHRoaXMucG9zdGNvZGVQaWNrdXBSYXcubG9uZ2l0dWRlLFxyXG5cclxuICAgICAgICAgIGRyb3BvZmZQb3N0Q29kZTogdGhpcy5wb3N0Y29kZURyb3BvZmZSYXcubmFtZSxcclxuICAgICAgICAgIGRyb3BvZmZMYXRpdHVkZTogdGhpcy5wb3N0Y29kZURyb3BvZmZSYXcubGF0aXR1ZGUsXHJcbiAgICAgICAgICBkcm9wb2ZmTG9uZ2l0dWRlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZlJhdy5sb25naXR1ZGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaG9zZW5WZW5kb3IgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52ZW5kb3I7XHJcbiAgICB0aGlzLmNhckNsYXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2xhc3M7XHJcbiAgICB0aGlzLmNhclR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50eXBlO1xyXG4gICAgdGhpcy50cmFuc21pc3Npb24gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50cmFuc21pc3Npb247XHJcbiAgICB0aGlzLmFpckNvbiA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmFpcmNvbjtcclxuICAgIHRoaXMuZXN0aW1hdGVkTWlsZWFnZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmVzdGltYXRlZERhaWx5RGlzdGFuY2U7XHJcbiAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZHJvcG9mZkRhdGVUaW1lKTtcclxuICAgIHRoaXMucGlja3VwX2RhdGV0aW1lID0gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnBpY2t1cERhdGVUaW1lKTtcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eSkge1xyXG4gICAgICB0aGlzLmdldFBhcmFtc0ZvckNhcmJ5Q2l0eShyZWNlbnRTZWFyY2gpO1xyXG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5haXJwb3J0KSB7XHJcbiAgICAgIHRoaXMuZ2V0UGFyYW1zRm9yQ2FyYnlBaXJwb3J0KHJlY2VudFNlYXJjaCk7XHJcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90KSB7XHJcbiAgICAgIHRoaXMuZ2V0UGFyYW1zRm9yQ2FyYnlQb3N0Q29kZShyZWNlbnRTZWFyY2gpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJhbXNGb3JDYXJieUFpcnBvcnQocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5BaXJwb3J0O1xyXG4gICAgY29tYmluZUxhdGVzdChbXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmFpcnBvcnQucGlja3VwQ29kZVxyXG4gICAgICApLFxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5haXJwb3J0LmRyb3BvZmZDb2RlXHJcbiAgICAgIClcclxuICAgIF0pLnN1YnNjcmliZSgoW2RlcGFydExvY2F0aW9uLCBhcnJpdmVMb2NhdGlvbl0pID0+IHtcclxuICAgICAgaWYgKGRlcGFydExvY2F0aW9uICYmIGFycml2ZUxvY2F0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2xvY2F0aW9uID0ge1xyXG4gICAgICAgICAgZGVzdGluYXRpb246IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxyXG4gICAgICAgICAgZ2F0ZXdheTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXHJcbiAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKFxyXG4gICAgICAgICAgICBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2gudGVybWluYWxzXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgY291bnRyeTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXHJcbiAgICAgICAgICBwb3N0Y29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgY291bnRyeUNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5waWNrdXBfbG9jYXRpb24gPSB7XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbjogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXHJcbiAgICAgICAgICBnYXRld2F5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcclxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoXHJcbiAgICAgICAgICAgIGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjb3VudHJ5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgIHBvc3Rjb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2NvdW50cnkgPSB0aGlzLmRyb3BvZmZfbG9jYXRpb24uY291bnRyeUNvZGU7XHJcbiAgICAgICAgdGhpcy5waWNrdXBfY291bnRyeSA9IHRoaXMucGlja3VwX2xvY2F0aW9uLmNvdW50cnlDb2RlO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJhbXNGb3JDYXJieUNpdHkocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5DaXR5O1xyXG4gICAgdGhpcy5jaG9zZW5EaXN0YW5jZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuY2hvc2VuRGlzdGFuY2U7XHJcblxyXG4gICAgdGhpcy5jaXR5UGlja3VwID0ge1xyXG4gICAgICBjb3VudHJ5Q29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBDb3VudHJ5Q29kZSxcclxuICAgICAgaWQ6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwQ2l0eSxcclxuICAgICAgbmFtZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBOYW1lLFxyXG4gICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkNpdHksXHJcbiAgICAgIGxhdGl0dWRlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LnBpY2t1cExhdGl0dWRlLFxyXG4gICAgICBsb25naXR1ZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwTG9uZ2l0dWRlXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuY2l0eURyb3BvZmYgPSB7XHJcbiAgICAgIGNvdW50cnlDb2RlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BvZmZDb3VudHJ5Q29kZSxcclxuICAgICAgaWQ6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcG9mZkNpdHksXHJcbiAgICAgIG5hbWU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcE9mZk5hbWUsXHJcbiAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuQ2l0eSxcclxuICAgICAgbGF0aXR1ZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcE9mZkxhdGl0dWRlLFxyXG4gICAgICBsb25naXR1ZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcE9mZkxvbmdpdHVkZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QgPSB7XHJcbiAgICAgIGFkZHJlc3NMaW5lczogW3JlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcE9mZkFkZHJlc3NMaW5lc10sXHJcbiAgICAgIGNpdHlOYW1lOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZDaXR5TmFtZSxcclxuICAgICAgZXh0ZW5kZWRMb2NhdGlvbkNvZGU6XHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5kcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGUsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5kcm9wT2ZmTG9jYXRpb25Db2RlLFxyXG4gICAgICB2ZW5kb3I6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcE9mZlZlbmRvcixcclxuICAgICAgdmVuZG9yQ29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5kcm9wT2ZmVmVuZG9yQ29kZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNpdHlQaWNrdXBEZXBvdCA9IHtcclxuICAgICAgYWRkcmVzc0xpbmVzOiBbcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBBZGRyZXNzTGluZXNdLFxyXG4gICAgICBjaXR5TmFtZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBDaXR5TmFtZSxcclxuICAgICAgZXh0ZW5kZWRMb2NhdGlvbkNvZGU6XHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBFeHRlbmRlZExvY2F0aW9uQ29kZSxcclxuICAgICAgbG9jYXRpb25Db2RlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LnBpY2t1cExvY2F0aW9uQ29kZSxcclxuICAgICAgdmVuZG9yOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LnBpY2t1cFZlbmRvcixcclxuICAgICAgdmVuZG9yQ29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBWZW5kb3JDb2RlXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhcmFtc0ZvckNhcmJ5UG9zdENvZGUocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5Qb3N0Y29kZTtcclxuICAgIHRoaXMuY2hvc2VuRGlzdGFuY2UgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5jaG9zZW5EaXN0YW5jZTtcclxuXHJcbiAgICB0aGlzLnBvc3Rjb2RlRHJvcG9mZiA9IHtcclxuICAgICAgYWRkcmVzc0xpbmVzOiBbcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuZHJvcG9mZkFkZHJlc3NMaW5lc10sXHJcbiAgICAgIHZlbmRvckNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LnZlbmRvckNvZGUsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuZHJvcE9mZkxvY2F0aW9uQ29kZSxcclxuICAgICAgZXh0ZW5kZWRMb2NhdGlvbkNvZGU6XHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICBjaXR5TmFtZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuZHJvcG9mZkNpdHlOYW1lLFxyXG4gICAgICB2ZW5kb3I6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LmRyb3BvZmZWZW5kb3JcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5wb3N0Y29kZURyb3BvZmZSYXcgPSB7XHJcbiAgICAgIG5hbWU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LmRyb3BvZmZQb3N0Q29kZSxcclxuICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSxcclxuICAgICAgbGF0aXR1ZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LmRyb3BvZmZMYXRpdHVkZSxcclxuICAgICAgbG9uZ2l0dWRlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5kcm9wb2ZmTG9uZ2l0dWRlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5wb3N0Y29kZVBpY2t1cCA9IHtcclxuICAgICAgYWRkcmVzc0xpbmVzOiBbcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwQWRkcmVzc0xpbmVzXSxcclxuICAgICAgdmVuZG9yQ29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QudmVuZG9yQ29kZSxcclxuICAgICAgbG9jYXRpb25Db2RlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5waWNrdXBMb2NhdGlvbkNvZGUsXHJcbiAgICAgIGV4dGVuZGVkTG9jYXRpb25Db2RlOlxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LnBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICBjaXR5TmFtZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwQ2l0eU5hbWUsXHJcbiAgICAgIHZlbmRvcjogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwVmVuZG9yXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucG9zdGNvZGVQaWNrdXBSYXcgPSB7XHJcbiAgICAgIG5hbWU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LnBpY2t1cFBvc3RDb2RlLFxyXG4gICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlLFxyXG4gICAgICBsYXRpdHVkZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwTGF0aXR1ZGUsXHJcbiAgICAgIGxvbmdpdHVkZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwTG9uZ2l0dWRlXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBRdWVyeVNlYXJjaENhckhpcmVBcmdzIHtcclxuICAgIGNvbnN0IHF1ZXJ5OiBRdWVyeVNlYXJjaENhckhpcmVBcmdzID0ge30gYXMgUXVlcnlTZWFyY2hDYXJIaXJlQXJncztcclxuICAgIHN3aXRjaCAodGhpcy5sb2NhdGlvblR5cGUpIHtcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ6XHJcbiAgICAgICAgcXVlcnkuYWlycG9ydCA9IHtcclxuICAgICAgICAgIHBpY2t1cENvZGU6ICcnLFxyXG4gICAgICAgICAgZHJvcG9mZkNvZGU6ICcnXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcXVlcnkuYWlycG9ydC5waWNrdXBDb2RlID0gdGhpcy5waWNrdXBfbG9jYXRpb24uZ2F0ZXdheTtcclxuICAgICAgICBxdWVyeS5haXJwb3J0LmRyb3BvZmZDb2RlID0gdGhpcy5yZXR1cm5fdG9fcGlja3VwXHJcbiAgICAgICAgICA/IHRoaXMucGlja3VwX2xvY2F0aW9uLmdhdGV3YXlcclxuICAgICAgICAgIDogdGhpcy5kcm9wb2ZmX2xvY2F0aW9uLmdhdGV3YXk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5DaXR5OlxyXG4gICAgICAgIHF1ZXJ5LmNpdHkgPSB7XHJcbiAgICAgICAgICBwaWNrdXBDb3VudHJ5Q29kZTogdGhpcy5jaXR5UGlja3VwLmNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgcGlja3VwQ2l0eTogdGhpcy5jaXR5UGlja3VwLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICBkcm9wb2ZmQ291bnRyeUNvZGU6IHRoaXMuY2l0eURyb3BvZmYuY291bnRyeUNvZGUsXHJcbiAgICAgICAgICBkcm9wb2ZmQ2l0eTogdGhpcy5jaXR5RHJvcG9mZi5pZC50b1N0cmluZygpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlOlxyXG4gICAgICAgIHF1ZXJ5LmRlcG90ID0ge1xyXG4gICAgICAgICAgdmVuZG9yQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC52ZW5kb3JDb2RlLFxyXG4gICAgICAgICAgcGlja3VwTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIHBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZURyb3BvZmYubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5leHRlbmRlZExvY2F0aW9uQ29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBxdWVyeS5kcm9wb2ZmRGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWVcclxuICAgICk7XHJcbiAgICBxdWVyeS5waWNrdXBEYXRlVGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRHcmFwaFFMRGF0ZVRpbWUoXHJcbiAgICAgIHRoaXMucGlja3VwX2RhdGV0aW1lXHJcbiAgICApO1xyXG4gICAgcXVlcnkuYWlyY29uID0gdGhpcy5haXJDb247XHJcblxyXG4gICAgLy8gbm93IGZvciB0aGUgb3B0aW9uYWwgZmllbGRzIC0gbnVsbGlmeSB0aGVzZSBpZiB0aGV5IGFyZSAnLScgKEFueSlcclxuICAgIHF1ZXJ5LnZlbmRvciA9IHRoaXMuY2hvc2VuVmVuZG9yID09PSAnLScgPyBudWxsIDogdGhpcy5jaG9zZW5WZW5kb3I7XHJcbiAgICBxdWVyeS50cmFuc21pc3Npb24gPSB0aGlzLnRyYW5zbWlzc2lvbiB8fCBudWxsO1xyXG4gICAgcXVlcnkuY2xhc3MgPSB0aGlzLmNhckNsYXNzIHx8IG51bGw7XHJcbiAgICBxdWVyeS50eXBlID0gdGhpcy5jYXJUeXBlIHx8IG51bGw7XHJcbiAgICBxdWVyeS5lc3RpbWF0ZWREYWlseURpc3RhbmNlID0gdGhpcy5lc3RpbWF0ZWRNaWxlYWdlIHx8IG51bGw7XHJcbiAgICBxdWVyeS5lc3RpbWF0ZWREYWlseURpc3RhbmNlVW5pdHMgPSB0aGlzLmVzdGltYXRlZE1pbGVhZ2VcclxuICAgICAgPyBEaXN0YW5jZVR5cGVzLk1cclxuICAgICAgOiBudWxsOyAvLyBTZXR0aW5nIGFzIG1pbGVzIGZvciBub3cgLSBtYXkgc3dhcCBvdXQgZm9yIGtpbG9tZXRlcnMgbGF0ZXJcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3M+KHF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEB0b2RvIC0gdHVybiB0aGlzIGludG8gYSBCRSBjYWxsIHRvIGR5bmFtaWNhbGx5IGdldCB0aGUgbGlzdCBvZiBjYXIgY2xhc3Nlc1xyXG4gICAqIEByZXR1cm5zIGFsbCBjYXIgY2xhc3NlcyBhcyBhbiBhcnJheVxyXG4gICAqL1xyXG4gIGdldENhckNsYXNzZXMoKTogT2JzZXJ2YWJsZTxJQ2FyQ2xhc3Nlc1tdPiB7XHJcbiAgICByZXR1cm4gb2YodGhpcy5fY2FyX2NsYXNzZXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TG9jYXRpb25UeXBlcygpIHtcclxuICAgIHJldHVybiBvZih0aGlzLl9sb2NhdGlvbl90eXBlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBmaWx0ZXIgZG93biB0aGUgY2FyIHJlc3VsdHMgYmFzZWQgb24gdXNlciBjaG9zZW4gZmlsdGVyc1xyXG4gICAqL1xyXG4gIGZpbHRlclJlc3VsdHMoYXBwbGllZEZpbHRlcnM6IENhckhpcmVGaWx0ZXJzLCBzZWxlY3RlZFNvcnQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IGZ1bGxSZXN1bHRzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgdGhpcy5mdWxsUmVzdWx0c1xyXG4gICAgKTtcclxuXHJcbiAgICAvLyBub3cgYXBwbHkgZmlsdGVyc1xyXG4gICAgLy8gcHJpY2UgZmlsdGVyc1xyXG4gICAgZnVsbFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5maWx0ZXIoKHJlc3VsdDogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHByaWNlID0gdGhpcy5nZXRQcmljZShyZXN1bHQpO1xyXG5cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBwcmljZSA+PSBhcHBsaWVkRmlsdGVycy5taW5QcmljZSAmJiBwcmljZSA8PSBhcHBsaWVkRmlsdGVycy5tYXhQcmljZVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gYXBwbHkgdHJhbnNtaXNzaW9uIGZpbHRlcnNcclxuICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5maWx0ZXJCeVRyYW5zbWlzc2lvblR5cGUoXHJcbiAgICAgIGFwcGxpZWRGaWx0ZXJzLnRyYW5zbWlzc2lvbnMsXHJcbiAgICAgIGZ1bGxSZXN1bHRzXHJcbiAgICApO1xyXG5cclxuICAgIC8vIGFpcmNvblxyXG4gICAgZnVsbFJlc3VsdHMgPSB0aGlzLmZpbHRlckJ5QWlyY29uVHlwZShcclxuICAgICAgYXBwbGllZEZpbHRlcnMuYWlyQ29uZGl0aW9uaW5nLFxyXG4gICAgICBmdWxsUmVzdWx0c1xyXG4gICAgKTtcclxuXHJcbiAgICAvLyBjYXIgdHlwZXMgKGNsYXNzKVxyXG4gICAgZnVsbFJlc3VsdHMgPSB0aGlzLmZpbHRlckJ5Q2FyVHlwZShhcHBsaWVkRmlsdGVycy50eXBlcywgZnVsbFJlc3VsdHMpO1xyXG5cclxuICAgIC8vIGNvbXBhbnlcclxuICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5maWx0ZXJCeUNvbXBhbnkoYXBwbGllZEZpbHRlcnMuY29tcGFuaWVzLCBmdWxsUmVzdWx0cyk7XHJcblxyXG4gICAgLy8gbGFzdGx5IGFwcGx5IGFueSByZXF1aXJlZCBzb3J0aW5nXHJcbiAgICBmdWxsUmVzdWx0cyA9IHRoaXMuc29ydFJlc3VsdHMoc2VsZWN0ZWRTb3J0LCBmdWxsUmVzdWx0cyk7XHJcblxyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoZnVsbFJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyQnlDb21wYW55KFxyXG4gICAgY29tcGFuaWVzOiBTZWxlY3RGaWx0ZXJbXSxcclxuICAgIGNhcnM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBjb21wYW5pZXMuZmlsdGVyKChjb21wYW55KSA9PiBjb21wYW55LnNlbGVjdGVkKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICAgIGNhcnMgPSBjYXJzLmZpbHRlcigoY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICBjb25zdCBoYXZlU2VsZWN0ZWQgPSBzZWxlY3RlZC5maW5kKFxyXG4gICAgICAgICAgKHNlbGM6IGFueSkgPT5cclxuICAgICAgICAgICAgc2VsYy52YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09XHJcbiAgICAgICAgICAgIGNhci5pZGVudGlmaWVycy52ZW5kb3IudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBoYXZlU2VsZWN0ZWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjYXJzO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyQnlDYXJUeXBlKFxyXG4gICAgdHlwZXM6IFNlbGVjdEZpbHRlcltdLFxyXG4gICAgY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXlcclxuICApOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICAvLyB0aGlzIGlzIGEgZmlsdGVyIHR5cGUgd2hpY2ggYWxsb3dzIG1vcmUgdGhhbiBvbmUgdG8gYmUgc2V0XHJcbiAgICAvLyBpZiBub25lIGFyZSBzZXQgYWxsb3cgYWxsIHRocm91Z2hcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHR5cGVzLmZpbHRlcigodHlwZSkgPT4gdHlwZS5zZWxlY3RlZCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkLmxlbmd0aCkge1xyXG4gICAgICBjYXJzID0gY2Fycy5maWx0ZXIoKGNhcjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGF2ZVNlbGVjdGVkID0gc2VsZWN0ZWQuZmluZChcclxuICAgICAgICAgIChzZWxjKSA9PlxyXG4gICAgICAgICAgICBzZWxjLnZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT1cclxuICAgICAgICAgICAgY2FyLmRpc3BsYXlSZWNvcmQudmVoaWNsZS5jbGFzcy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGhhdmVTZWxlY3RlZDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhcnM7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeVRyYW5zbWlzc2lvblR5cGUoXHJcbiAgICB0cmFubWlzc2lvbnM6IFNlbGVjdEZpbHRlcltdLFxyXG4gICAgY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXlcclxuICApOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFRyYW5zbWlzc2lvbiA9IHRyYW5taXNzaW9ucy5maW5kKCh0cmFucykgPT4ge1xyXG4gICAgICByZXR1cm4gdHJhbnMuc2VsZWN0ZWQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRUcmFuc21pc3Npb24gJiYgc2VsZWN0ZWRUcmFuc21pc3Npb24udmFsdWUgIT09ICdZJykge1xyXG4gICAgICAvLyBub3QgJ0FueSdcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjYXJzID0gY2Fycy5maWx0ZXIoKGNhcjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0cmFucyA9IGNhci5pZGVudGlmaWVycy52ZWhUeXBlWzJdO1xyXG5cclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRyYW5zLnRvTG93ZXJDYXNlKCkgPT09XHJcbiAgICAgICAgICAgIHNlbGVjdGVkVHJhbnNtaXNzaW9uLnZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGArKysgRXJyb3IgZmlsdGVyaW5nIHRyYW5zbWlzc2lvbnM6ICR7ZXJyb3J9ICsrK2ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhcnM7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeUFpcmNvblR5cGUoXHJcbiAgICBhaXJjb25zOiBTZWxlY3RGaWx0ZXJbXSxcclxuICAgIGNhcnM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRBaXJjb24gPSBhaXJjb25zLmZpbmQoKGFjKSA9PiB7XHJcbiAgICAgIHJldHVybiBhYy5zZWxlY3RlZDtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZEFpcmNvbiAmJiBzZWxlY3RlZEFpcmNvbi52YWx1ZSAhPT0gJ0EnKSB7XHJcbiAgICAgIC8vIG5vdCAnQW55J1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhcnMgPSBjYXJzLmZpbHRlcigoY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGFjID0gY2FyLmlkZW50aWZpZXJzLnZlaFR5cGVbM107XHJcblxyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgYWMudG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWRBaXJjb24udmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBFcnJvciBmaWx0ZXJpbmcgYWlyY29uczogJHtlcnJvcn0gKysrYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FycztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIHJlc3VsdHNcclxuICAgKiBAcGFyYW0gc2VsZWN0ZWRTb3J0IC0gdGhlIHNvcnQgd2UgaGF2ZSBjaG9zZW5cclxuICAgKiBAcGFyYW0gcmVzdWx0cyAtIG9wdGlvbmFsbHkgcGFzcyBpbiB0aGUgcmVzdWx0cywgaWYgbm90IHByb3ZpZGVkIC0gdXNlcyBpbnRlcm5hbCByZXN1bHRzIChub3QgZnVsbCwgd291bGQgY2F1c2UgaXNzdWVzKVxyXG4gICAqL1xyXG4gIHNvcnRSZXN1bHRzKFxyXG4gICAgc2VsZWN0ZWRTb3J0OiBudW1iZXIsXHJcbiAgICByZXN1bHRzPzogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXlcclxuICApOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBsZXQgZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlXHJcbiAgICApO1xyXG4gICAgc3dpdGNoIChzZWxlY3RlZFNvcnQpIHtcclxuICAgICAgY2FzZSAwOiAvLyBjaGVhcGVzdFxyXG4gICAgICAgIGZ1bGxSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcclxuICAgICAgICAgIChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT5cclxuICAgICAgICAgICAgdGhpcy5nZXRQcmljZShhKSAtIHRoaXMuZ2V0UHJpY2UoYilcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIGV4cGVuc2l2ZVxyXG4gICAgICAgIGZ1bGxSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcclxuICAgICAgICAgIChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT5cclxuICAgICAgICAgICAgdGhpcy5nZXRQcmljZShiKSAtIHRoaXMuZ2V0UHJpY2UoYSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6IC8vIHByZWZlcnJlZCBUT0RPXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzogLy8gYnJhbmRcclxuICAgICAgICBmdWxsUmVzdWx0cyA9IHRoaXMuc29ydEJ5QnJhbmQoZnVsbFJlc3VsdHMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6IC8vIHNpemVcclxuICAgICAgICBmdWxsUmVzdWx0cyA9IHRoaXMuc29ydEJ5U2l6ZShmdWxsUmVzdWx0cyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICAvLyBmYWxsYmFjayB0byB3aGF0ZXZlciB3YXMgYmVmb3JlXHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChmdWxsUmVzdWx0cyk7XHJcbiAgICByZXR1cm4gZnVsbFJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSByZXN1bHRzIGV4cGVuc2l2ZVxyXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gZnVsbCByZXN1bHRzIGZyb20gc29ydCByZXN1bHRzIGZ1bmN0aW9uXHJcbiAgICovXHJcblxyXG4gIHNvcnRFeHBlbnNpdmUocmVzdWx0cz86IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgY29uc3QgZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXHJcbiAgICAgIChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT5cclxuICAgICAgICB0aGlzLmdldFByaWNlKGIpIC0gdGhpcy5nZXRQcmljZShhKVxyXG4gICAgKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHNvcnRlZFJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHNvcnRlZFJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSByZXN1bHRzIGNoZWFwZXN0XHJcbiAgICogQHBhcmFtIHJlc3VsdHMgLSBmdWxsIHJlc3VsdHMgZnJvbSBzb3J0IHJlc3VsdHMgZnVuY3Rpb25cclxuICAgKi9cclxuXHJcbiAgc29ydENoZWFwZXN0KHJlc3VsdHM/OiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGNvbnN0IGZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICByZXN1bHRzID8gcmVzdWx0cyA6IHRoaXMucmVzdWx0cy52YWx1ZVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxyXG4gICAgICAoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+XHJcbiAgICAgICAgdGhpcy5nZXRQcmljZShhKSAtIHRoaXMuZ2V0UHJpY2UoYilcclxuICAgICk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChzb3J0ZWRSZXN1bHRzKTtcclxuICAgIHJldHVybiBzb3J0ZWRSZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc29ydCB0aGUgcmVzdWx0c1xyXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gZnVsbCByZXN1bHRzIGZyb20gc29ydCByZXN1bHRzIGZ1bmN0aW9uXHJcbiAgICovXHJcbiAgc29ydEJ5U2l6ZShyZXN1bHRzPzogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgcmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWVcclxuICAgICk7XHJcbiAgICBjb25zdCBzb3J0ZWRSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcclxuICAgICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgbGV0IGFWYWw6IG51bWJlcjtcclxuICAgICAgICBsZXQgYlZhbDogbnVtYmVyO1xyXG4gICAgICAgIGFWYWwgPSB0aGlzLmNhckNsYXNzTWFwW2EuZGlzcGxheVJlY29yZC52ZWhpY2xlLmNsYXNzLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgICAgIGJWYWwgPSB0aGlzLmNhckNsYXNzTWFwW2IuZGlzcGxheVJlY29yZC52ZWhpY2xlLmNsYXNzLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgICAgIGlmIChhVmFsID49IDAgJiYgYlZhbCA+PSAwKSB7XHJcbiAgICAgICAgICByZXR1cm4gYVZhbCAtIGJWYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAtMTsgLy8ganVzdCBwbGFjZSB0aGVtIGF0IGVuZCAgLSB1bnJlY29nbmlzZWQgcHJvZHVjdCBkZXNjcmlwdGlvblxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoc29ydGVkUmVzdWx0cyk7XHJcbiAgICByZXR1cm4gc29ydGVkUmVzdWx0cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIHJlc3VsdHNcclxuICAgKiBAcGFyYW0gcmVzdWx0cyAtIGZ1bGwgcmVzdWx0cyBmcm9tIHNvcnQgcmVzdWx0cyBmdW5jdGlvblxyXG4gICAqL1xyXG4gIHNvcnRCeUJyYW5kKHJlc3VsdHM/OiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGNvbnN0IGZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICByZXN1bHRzID8gcmVzdWx0cyA6IHRoaXMucmVzdWx0cy52YWx1ZVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxyXG4gICAgICAoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICBsZXQgYnJhbmRBID0gYS5pZGVudGlmaWVycy52ZW5kb3I7XHJcbiAgICAgICAgbGV0IGJyYW5kQiA9IGIuaWRlbnRpZmllcnMudmVuZG9yO1xyXG5cclxuICAgICAgICAvLyBzd2l0Y2hpbmcgYXMgdGhlc2Ugc3RyaW5ncyBkb24ndCBtYXRjaCB0aGUgYnJhbmQgbmFtZVxyXG4gICAgICAgIHN3aXRjaCAoYnJhbmRBKSB7XHJcbiAgICAgICAgICBjYXNlICdaRSc6XHJcbiAgICAgICAgICAgIGJyYW5kQSA9ICdIRSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnWkknOlxyXG4gICAgICAgICAgICBicmFuZEEgPSAnQVYnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCAoYnJhbmRCKSB7XHJcbiAgICAgICAgICBjYXNlICdaRSc6XHJcbiAgICAgICAgICAgIGJyYW5kQiA9ICdIRSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnWkknOlxyXG4gICAgICAgICAgICBicmFuZEIgPSAnQVYnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChicmFuZEEgPCBicmFuZEIpIHtcclxuICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9IGVsc2UgaWYgKGJyYW5kQSA+IGJyYW5kQikge1xyXG4gICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChzb3J0ZWRSZXN1bHRzKTtcclxuICAgIHJldHVybiBzb3J0ZWRSZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBwcmljZSBvZiBhIGluZGl2aWR1YWwgY2FyXHJcbiAgICovXHJcbiAgZ2V0UHJpY2UoY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpOiBudW1iZXIge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIE51bWJlcihjYXIuZGlzcGxheVJlY29yZC5jaGFyZ2VzWzBdLmFtb3VudCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge31cclxuXHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIGdldE1pblByaWNlKGNhcnM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogbnVtYmVyIHtcclxuICAgIHJldHVybiBjYXJzLnJlZHVjZSgobWluOiBudW1iZXIsIGNhcjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHByaWNlID0gdGhpcy5nZXRQcmljZShjYXIpO1xyXG4gICAgICBpZiAocHJpY2UgPCBtaW4pIHtcclxuICAgICAgICBtaW4gPSBwcmljZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbWluO1xyXG4gICAgfSwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4UHJpY2UoY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGNhcnMucmVkdWNlKChtYXg6IG51bWJlciwgY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLmdldFByaWNlKGNhcik7XHJcbiAgICAgIGlmIChwcmljZSA+IG1heCkge1xyXG4gICAgICAgIG1heCA9IHByaWNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBtYXg7XHJcbiAgICB9LCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUik7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcclxuICAgIHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IGZsaWdodEl0ZW06IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5GbGlnaHRdPy5zZWFyY2hRdWVyeTtcclxuICAgIGlmIChmbGlnaHRJdGVtKSB7XHJcbiAgICAgIC8vIFRPRE8gZmxpZ2h0cyBoYXZlbid0IGJlZW4gZG9uZSB5ZXQuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAhZGF0ZSBhbmQgdGltZSBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGZvciBMVVxyXG4gIHByaXZhdGUgX3VwZGF0ZVBpY2t1cERhdGVUaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuX3BpY2t1cF9kYXRlICYmIHRoaXMuX3BpY2t1cF90aW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgdGhpcy5fcGlja3VwX2RhdGUsXHJcbiAgICAgICAgdGhpcy5fcGlja3VwX3RpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVEcm9wb2ZmRGF0ZVRpbWUoKSB7XHJcbiAgICBpZiAodGhpcy5fZHJvcG9mZl9kYXRlICYmIHRoaXMuX2Ryb3BvZmZfdGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICAgIHRoaXMuX2Ryb3BvZmZfZGF0ZSxcclxuICAgICAgICB0aGlzLl9kcm9wb2ZmX3RpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5kcm9wb2ZmX2RhdGV0aW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlTmdiUGlja3VwRGF0ZVRpbWUoKSB7XHJcbiAgICBpZiAodGhpcy5fbmdiUGlja3VwRGF0ZSAmJiB0aGlzLl9waWNrdXBUaW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgdGhpcy5fbmdiUGlja3VwRGF0ZSxcclxuICAgICAgICB0aGlzLl9waWNrdXBUaW1lXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucGlja3VwX2RhdGV0aW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlTmdiRHJvcG9mZkRhdGVUaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuX25nYkRyb3BvZmZEYXRlICYmIHRoaXMuX2Ryb3BvZmZUaW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgdGhpcy5fbmdiRHJvcG9mZkRhdGUsXHJcbiAgICAgICAgdGhpcy5fZHJvcG9mZlRpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5kcm9wb2ZmX2RhdGV0aW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNPdmVyTmlnaHQoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvdXR3YXJkRGF5ID0gdGhpcy5waWNrdXBfZGF0ZXRpbWUuZGF0ZSgpO1xyXG4gICAgY29uc3QgcmV0dXJuRGF5ID0gdGhpcy5kcm9wb2ZmX2RhdGV0aW1lLmRhdGUoKTtcclxuICAgIGlmIChyZXR1cm5EYXkgLSBvdXR3YXJkRGF5ID49IDEpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IElDaGVhcGVzdFByaWNlIHtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgbWluUHJpY2UgPSB0aGlzLmdldE1pblByaWNlKHJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYW1vdW50OiBtaW5QcmljZSxcclxuICAgICAgY3VycmVuY3lDb2RlOiByZXN1bHRzWzBdLmRpc3BsYXlSZWNvcmQuY2hhcmdlc1swXS5jdXJyZW5jeUNvZGVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgdGhlIGF2YWlsYWJpbGl0eSBkZXRhaWxzIGZvciBhIHBhcnRpY3VsYXIgY2FyIGhpcmUgcmVzdWx0IHVzaW5nIGxvY2F0aW9uRGV0YWlscyBwYXJhbVxyXG4gICAqIEBwYXJhbSBsb2NhdGlvbkRldGFpbHMgLSBlLmcuIHRha2VuIGZyb20gcmVzcG9uc2UgZGF0YSBpbiBzZWFyY2hDYXJIaXJlIHF1ZXJ5XHJcbiAgICogQHBhcmFtIGlzTG9hZGluZyBiZWhhdmlvdXJTdWJqZWN0IGZvciBoYW5kbGluZyBsb2FkaW5nIHNwaW5uZXIgc3RhdGUgb2YgcmVxdWVzdFxyXG4gICAqL1xyXG4gIGdldENhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWwoXHJcbiAgICBsb2NhdGlvbkRldGFpbHM6IENhckhpcmVJbnB1dElkZW50aWZpZXJzLFxyXG4gICAgaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPENhckhpcmVEZXRhaWxSZXF1ZXN0UmVzcG9uc2U+IHtcclxuICAgIGlmICghaXNMb2FkaW5nLnZhbHVlKSB7XHJcbiAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJcclxuICAgICAgLmZldGNoTGlzdCh7IGxvY2F0aW9uRGV0YWlscyB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIG1hcCgocmVzdWx0OiBDYXJIaXJlRGV0YWlsUmVxdWVzdFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXNMb2FkaW5nLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGFkZCBjYXIgaGlyZSB0byBiYXNrZXRcclxuICAgKi9cclxuICBhc3luYyBhZGRDYXJIaXJlVG9CYXNrZXQoXHJcbiAgICBjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eTogQ2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHksXHJcbiAgICBjYXJIaXJlUXVlcnk6IFNlYXJjaENhckhpcmVRdWVyeVZhcmlhYmxlc1xyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5LnVuYXZhaWxhYmxlKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBpZiAoYmFza2V0KSB7XHJcbiAgICAgIGNvbnN0IHtcclxuICAgICAgICBjbzJQZXJJdGVtLFxyXG4gICAgICAgIGNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICBkaXNwbGF5UmVjb3JkLFxyXG4gICAgICAgIGlkZW50aWZpZXJzLFxyXG4gICAgICAgIHNvdXJjZUlkXHJcbiAgICAgIH0gPSBjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eTtcclxuICAgICAgY29uc3QgcHJpY2UgPSBwYXJzZUZsb2F0KGRpc3BsYXlSZWNvcmQ/LmNoYXJnZXNbMF0/LmFtb3VudCA/PyAnMCcpO1xyXG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChcclxuICAgICAgICBjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eSxcclxuICAgICAgICBjYXJIaXJlUXVlcnlcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgICAgICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICAgIHBpY2tVcERhdGV0aW1lOiBkaXNwbGF5UmVjb3JkLnBpY2t1cCxcclxuICAgICAgICAgICAgZHJvcE9mZkRhdGV0aW1lOiBkaXNwbGF5UmVjb3JkLmRyb3BvZmYsXHJcbiAgICAgICAgICAgIHBpY2tVcExvY2F0aW9uOiB7XHJcbiAgICAgICAgICAgICAgaWF0YTpcclxuICAgICAgICAgICAgICAgIHRoaXMubG9jYXRpb25UeXBlID09PSBMb2NhdGlvblR5cGVzLkFpcnBvcnRcclxuICAgICAgICAgICAgICAgICAgPyBpZGVudGlmaWVycy5sb2NhdGlvbkNvZGVcclxuICAgICAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgICBuYW1lOiBkaXNwbGF5UmVjb3JkLnBpY2t1cExvY2F0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgYWRkcmVzczogYCR7ZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi50b3BMaW5lfSwgJHtkaXNwbGF5UmVjb3JkLnBpY2t1cExvY2F0aW9uLmNpdHl9YCxcclxuICAgICAgICAgICAgICBwb3N0Y29kZTogZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi5wb3N0Q29kZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkcm9wT2ZmTG9jYXRpb246IHtcclxuICAgICAgICAgICAgICBpYXRhOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhdGlvblR5cGUgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydFxyXG4gICAgICAgICAgICAgICAgICA/IGlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvblxyXG4gICAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgIG5hbWU6IGRpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24ubmFtZSxcclxuICAgICAgICAgICAgICBhZGRyZXNzOiBgJHtkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLnRvcExpbmV9LCAke2Rpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24uY2l0eX1gLFxyXG4gICAgICAgICAgICAgIHBvc3Rjb2RlOiBkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLnBvc3RDb2RlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhcjoge1xyXG4gICAgICAgICAgICAgIHR5cGU6IGRpc3BsYXlSZWNvcmQudmVoaWNsZS50eXBlLFxyXG4gICAgICAgICAgICAgIG1hbnVhbFRyYW5zbWlzc2lvbjogZGlzcGxheVJlY29yZC52ZWhpY2xlLnRyYW5zbWlzc2lvbi5pbmNsdWRlcyhcclxuICAgICAgICAgICAgICAgIENhckhpcmVUcmFuc21pc3Npb24uTWFudWFsXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB2ZW5kb3JOYW1lOiBkaXNwbGF5UmVjb3JkLnZlbmRvci5uYW1lLFxyXG4gICAgICAgICAgICBpZGVudGlmaWVyczoge1xyXG4gICAgICAgICAgICAgIGRyb3BPZmZMb2NhdGlvbjogaWRlbnRpZmllcnMuZHJvcE9mZkxvY2F0aW9uLFxyXG4gICAgICAgICAgICAgIGxvY2F0aW9uQ29kZTogaWRlbnRpZmllcnMubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgICAgIGxvY2F0aW9uTmFtZTogaWRlbnRpZmllcnMubG9jYXRpb25OYW1lLFxyXG4gICAgICAgICAgICAgIHZlaFR5cGU6IGlkZW50aWZpZXJzLnZlaFR5cGUsXHJcbiAgICAgICAgICAgICAgdmVuZG9yOiBpZGVudGlmaWVycy52ZW5kb3JcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBwcmljZSxcclxuICAgICAgICAgIGN1cnJlbmN5OiAnR0JQJyBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeTogY2FySGlyZVF1ZXJ5LFxyXG4gICAgICAgICAgY28yUGVySXRlbSxcclxuICAgICAgICAgIGNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICAgIG91dGJvdW5kRGF0ZTogbmV3IERhdGUoZGlzcGxheVJlY29yZC5waWNrdXApLnRvSVNPU3RyaW5nKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vIFRPRE8gd2FpdGluZyBmb3IgZGF0YVxyXG4gIGdldFRlcm1zQW5kQ29uZChcclxuICAgIGNhckhpcmVWZWhpY2xlOiBDYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eSxcclxuICAgIGNhckhpcmVRdWVyeTogU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FkZGl0aW9uYWwgRHJpdmVyJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBZ2UgUmVxdWlyZW1lbnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdDcm9zcyBCb3JkZXIgUG9saWN5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEYW1hZ2UgV2FpdmVyJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEZWJpdCBDYXJkIFBvbGljeScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnT25lIFdheSBEcm9wIFBvbGljeScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRXh0ZW5kZWQgUHJvdGVjdGlvbicsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRXhjZXNzIFByb3RlY3Rpb24nLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0luY2x1c2l2ZSBQb2xpY3knLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01pbGVhZ2UgUG9saWN5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNaXNjZWxsYW5lb3VzIFBvbGljeScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRm9ybXMgb2YgUGF5bWVudCcsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUm9hZHNpZGUgUHJvdGVjdGlvbicsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUmVudGVyIFJlcXVpcmVtZW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVGhpcmQgUGFydHkgTGlhYmlsaXR5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PntcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnk6IFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3MgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5OiBDYXJIaXJlU2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XHJcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcclxuICAgICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuQ2FyLFxyXG4gICAgICAgIHNlYXJjaEFyZ3M6IGZhdm91cml0ZVNlYXJjaFF1ZXJ5XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
1334
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9jYXJoaXJlLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHekQsT0FBTyxFQUFjLEVBQUUsRUFBbUIsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBVXRFLE9BQU8sRUFRTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixXQUFXLEVBQ1gsYUFBYSxFQUdkLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQU1MLGFBQWEsRUFNZCxNQUFNLGdCQUFnQixDQUFDO0FBY3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLM0MsTUFBTSxDQUFOLElBQVksWUFNWDtBQU5ELFdBQVksWUFBWTtJQUN0QiwrQkFBZSxDQUFBO0lBQ2YsK0JBQWUsQ0FBQTtJQUNmLDZCQUFhLENBQUE7SUFDYix1Q0FBdUIsQ0FBQTtJQUN2Qix1Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBTlcsWUFBWSxLQUFaLFlBQVksUUFNdkI7QUFFRCxNQUFNLE9BQU8sdUJBSVgsU0FBUSxvQkFJUDtJQWduQkQsaUNBQWlDO0lBRWpDLFlBQ1UsY0FBNkMsRUFDN0MsZ0NBQThFLEVBQ3RGLE9BQTJCLEVBQ25CLGFBQStDLEVBQ3ZELGNBQWtDLEVBQzFCLGFBQStDO1FBRXZELEtBQUssQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFQdkIsbUJBQWMsR0FBZCxjQUFjLENBQStCO1FBQzdDLHFDQUFnQyxHQUFoQyxnQ0FBZ0MsQ0FBOEM7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cnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENhckhpcmVTb3J0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXItaGlyZS1zb3J0LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENhckhpcmVGaWx0ZXJzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXItaGlyZS1maWx0ZXJzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFNlbGVjdEZpbHRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VsZWN0LWZpbHRlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xyXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIENhckhpcmVEZXRhaWxSZXF1ZXN0UmVzcG9uc2UsXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgQ2FySGlyZUlucHV0SWRlbnRpZmllcnMsXHJcbiAgQ2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHksXHJcbiAgUXVlcnlTZWFyY2hDYXJIaXJlQXJncyxcclxuICBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyxcclxuICBTZXJ2aWNlVHlwZSxcclxuICBDYXJIaXJlVHJhbnNtaXNzaW9uLFxyXG4gIENhckhpcmVDbGFzcyxcclxuICBDYXJIaXJlVHlwZSxcclxuICBEaXN0YW5jZVR5cGVzLFxyXG4gIFNlYXJjaENhckhpcmVRdWVyeVZhcmlhYmxlcyxcclxuICBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXNcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHtcclxuICBDYXJIaXJlUXVvdGVSZXN1bHQsXHJcbiAgQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXksXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBPQlRBaXJwb3J0RGV0YWlscyxcclxuICBWZW5kb3IsXHJcbiAgTG9jYXRpb25UeXBlcyxcclxuICBMb2NhdGlvbkRldGFpbHMsXHJcbiAgQ2FySGlyZURlcG90LFxyXG4gIFJlY2VudFNlYXJjaCxcclxuICBXaXRoaW5EaXN0YW5jZSxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0XHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VDYXJoaXJlUXVvdGVGZXRjaGVyLFxyXG4gIENhckhpcmVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2NhcmhpcmUtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgQ2FySGlyZVRlbXBQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0ljYXJoaXJlLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNlQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXIsXHJcbiAgQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1hdmFpbGFiaWxpdHktZGV0YWlsLmZldGNoZXInO1xyXG5pbXBvcnQgeyB0YWtlLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IElDYXJDbGFzc2VzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXItaGlyZS1jbGFzc2VzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHsgQ2FySGlyZVNlYXJjaEFyZ3MgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nhci1oaXJlLXNlYXJjaC1hcmcuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCBlbnVtIFNvcnRUeXBlc0NhciB7XHJcbiAgcHJpY2UgPSAncHJpY2UnLFxyXG4gIGJyYW5kID0gJ2JyYW5kJyxcclxuICBzaXplID0gJ3NpemUnLFxyXG4gIHByZWZlcnJlZCA9ICdwcmVmZXJyZWQnLFxyXG4gIGV4cGVuc2l2ZSA9ICdleHBlbnNpdmUnXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaDxcclxuICBDSF9RIGV4dGVuZHMgQ2FySGlyZUZldGNoZXJUeXBlLFxyXG4gIENIQURfUSBleHRlbmRzIENhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyVHlwZVxyXG4gID5cclxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPFxyXG4gIENhckhpcmVUZW1wUGFyYW1zLFxyXG4gIENhckhpcmVRdW90ZVJlc3VsdEFycmF5LFxyXG4gIENhckhpcmVRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2Uge1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ2NhcmhpcmVfcGFyYW1zJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAnY2FyaGlyZV9yZXN1bHRzJztcclxuXHJcbiAgLy8gISAtIEhhcmRjb2RlZCBEYXRhXHJcbiAgcHJpdmF0ZSBfY2FyVHlwZUNvZGVzOiBbc3RyaW5nLCBzdHJpbmcsIENhckhpcmVUeXBlXVtdID0gW1xyXG4gICAgWydCJywgJzItMyBEb29yJywgQ2FySGlyZVR5cGUuVHdvVG9UaHJlZURvb3JdLFxyXG4gICAgWydDJywgJzIvNCBEb29yJywgQ2FySGlyZVR5cGUuVHdvT3JGb3VyRG9vcl0sXHJcbiAgICBbJ0QnLCAnNC01IERvb3InLCBDYXJIaXJlVHlwZS5Gb3VyVG9GaXZlRG9vcl0sXHJcbiAgICBbJ1cnLCAnV2Fnb24gLyBFc3RhdGUnLCBDYXJIaXJlVHlwZS5XYWdvbk9yRXN0YXRlXSxcclxuICAgIFsnVicsICdQYXNzZW5nZXIgVmFuJywgQ2FySGlyZVR5cGUuUGFzc2VuZ2VyVmFuXSxcclxuICAgIFsnTCcsICdMaW1vdXNpbmUnLCBDYXJIaXJlVHlwZS5MaW1vdXNpbmVdLFxyXG4gICAgWydTJywgJ1Nwb3J0JywgQ2FySGlyZVR5cGUuU3BvcnRdLFxyXG4gICAgWydUJywgJ0NvbnZlcnRpYmxlJywgQ2FySGlyZVR5cGUuQ29udmVydGlibGVdLFxyXG4gICAgWydGJywgJ1NVVicsIENhckhpcmVUeXBlLlN1dl0sXHJcbiAgICBbJ0onLCAnT3BlbiBBaXIgQWxsIFRlcnJhaW4nLCBDYXJIaXJlVHlwZS5PcGVuQWlyQWxsVGVycmFpbl0sXHJcbiAgICBbJ1gnLCAnU3BlY2lhbCcsIENhckhpcmVUeXBlLlNwZWNpYWxdLFxyXG4gICAgWydQJywgJ1BpY2t1cCBSZWd1bGFyIENhYicsIENhckhpcmVUeXBlLlBpY2tVcFJlZ3VsYXJDYWJdLFxyXG4gICAgWydRJywgJ1BpY2t1cCBFeHRlbmRlZCBDYWInLCBDYXJIaXJlVHlwZS5QaWNrVXBFeHRlbmRlZENhYl0sXHJcbiAgICBbJ1onLCAnU3BlY2lhbCBPZmZlciBDYXInLCBDYXJIaXJlVHlwZS5TcGVjaWFsT2ZmZXJDYXJdLFxyXG4gICAgWydFJywgJ0NvdXBlJywgQ2FySGlyZVR5cGUuQ291cGVdLFxyXG4gICAgWydNJywgJ01vbm9zcGFjZSAoRXVyb3BlKScsIENhckhpcmVUeXBlLk1vbm9zcGFjZUV1cm9wZWFuVXNlXSxcclxuICAgIFsnUicsICdSZWNyZWF0aW9uYWwgVmVoaWNsZScsIENhckhpcmVUeXBlLlN1dl0sXHJcbiAgICBbJ0gnLCAnTW90b3IgSG9tZScsIENhckhpcmVUeXBlLk1vdG9ySG9tZV0sXHJcbiAgICBbJ1knLCAnMi1XaGVlbCBWZWhpY2xlJywgQ2FySGlyZVR5cGUuVHdvV2hlZWxWZWhpY2xlXSxcclxuICAgIFsnTicsICdSb2Fkc3RlcicsIENhckhpcmVUeXBlLlJvYWRzdGVyXSxcclxuICAgIFsnRycsICdDcm9zc292ZXInLCBDYXJIaXJlVHlwZS5TdXZdLFxyXG4gICAgWydLJywgJ0NvbW1lcmNpYWwgVmFuIC8gVHJ1Y2snLCBDYXJIaXJlVHlwZS5QYXNzZW5nZXJWYW5dXHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBfY2FyQWlyQ29uZGl0aW9uVHlwZXM6IFtzdHJpbmcsIHN0cmluZywgYm9vbGVhbl1bXSA9IFtcclxuICAgIFsnQW55JywgJ0FueScsIG51bGxdLFxyXG4gICAgWydZJywgJ1llcycsIHRydWVdLFxyXG4gICAgWydOJywgJ05vJywgZmFsc2VdXHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBfd2l0aGluRGlzdGFuY2U6IFdpdGhpbkRpc3RhbmNlW10gPSBbXHJcbiAgICB7IG5hbWU6ICcxIG1pbGUnLCB2YWx1ZTogJzEnIH0sXHJcbiAgICB7IG5hbWU6ICcyIG1pbGVzJywgdmFsdWU6ICcyJyB9LFxyXG4gICAgeyBuYW1lOiAnNSBtaWxlcycsIHZhbHVlOiAnNScgfSxcclxuICAgIHsgbmFtZTogJzEwIG1pbGVzJywgdmFsdWU6ICcxMCcgfSxcclxuICAgIHsgbmFtZTogJzIwIG1pbGVzJywgdmFsdWU6ICcyMCcgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2NhclRyYW5zbWlzc2lvbkNvZGVzOiBbc3RyaW5nLCBzdHJpbmcsIENhckhpcmVUcmFuc21pc3Npb25dW10gPSBbXHJcbiAgICBbJ00nLCAnTWFudWFsJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxdLFxyXG4gICAgWydOJywgJ01hbnVhbCA0LVdoZWVsIERyaXZlJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxdLFxyXG4gICAgWydDJywgJ01hbnVhbCBBbGwtV2hlZWwgRHJpdmUnLCBDYXJIaXJlVHJhbnNtaXNzaW9uLk1hbnVhbF0sXHJcbiAgICBbJ0EnLCAnQXV0b21hdGljJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5BdXRvXSxcclxuICAgIFsnQicsICdBdXRvbWF0aWMgNC1XaGVlbCBEcml2ZScsIENhckhpcmVUcmFuc21pc3Npb24uQXV0b10sXHJcbiAgICBbJ0QnLCAnQXV0b21hdGljIEFsbC0gV2hlZWwgRHJpdmUnLCBDYXJIaXJlVHJhbnNtaXNzaW9uLkF1dG9dXHJcbiAgXTtcclxuXHJcbiAgY2FyaGlyZUNvZGVzOiBhbnk7XHJcbiAgcHJpdmF0ZSBfdmVuZG9yczogVmVuZG9yW10gPSBbXHJcbiAgICB7IGNvZGU6ICctJywgbmFtZTogJ0FueScgfSxcclxuICAgIHsgY29kZTogJ0FDJywgbmFtZTogJ0FjZSBSZW50IEEgQ2FyJyB9LFxyXG4gICAgeyBjb2RlOiAnQUQnLCBuYW1lOiAnQWR2YW50YWdlIFJlbnQgQSBDYXInIH0sXHJcbiAgICB7IGNvZGU6ICdBTCcsIG5hbWU6ICdBbGFtbycgfSxcclxuICAgIHsgY29kZTogJ1pJJywgbmFtZTogJ0F2aXMnIH0sXHJcbiAgICB7IGNvZGU6ICdBVCcsIG5hbWU6ICdBdGVzYScgfSxcclxuICAgIHsgY29kZTogJ1pEJywgbmFtZTogJ0J1ZGdldCBSZW50IEEgQ2FyJyB9LFxyXG4gICAgeyBjb2RlOiAnQ0knLCBuYW1lOiAnQ2l0ZXIgUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ1pSJywgbmFtZTogJ0RvbGxhciBSZW50IEEgQ2FyJyB9LFxyXG4gICAgeyBjb2RlOiAnREYnLCBuYW1lOiAnRHJpdmluZyBGb3JjZScgfSxcclxuICAgIHsgY29kZTogJ0VZJywgbmFtZTogJ0Vjb25vbXkgUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0VUJywgbmFtZTogJ0VudGVycHJpc2UnIH0sXHJcbiAgICB7IGNvZGU6ICdFUCcsIG5hbWU6ICdFdXJvcGNhcicgfSxcclxuICAgIHsgY29kZTogJ0lNJywgbmFtZTogJ0V1cm9wY2FyIFNvdXRoYWZyaWNhJyB9LFxyXG4gICAgeyBjb2RlOiAnRVonLCBuYW1lOiAnRXogUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0ZGJywgbmFtZTogJ0ZpcmVmbHknIH0sXHJcbiAgICB7IGNvZGU6ICdGWCcsIG5hbWU6ICdGb3ggUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0dOJywgbmFtZTogJ0d1ZXJpbiBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnWkUnLCBuYW1lOiAnSGVydHonIH0sXHJcbiAgICB7IGNvZGU6ICdMTScsIG5hbWU6ICdMICYgTSBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnTEwnLCBuYW1lOiAnTG9jYWxpemEnIH0sXHJcbiAgICB7IGNvZGU6ICdNVycsIG5hbWU6ICdNaWR3YXkgQ2FyIFJlbnRhbCcgfSxcclxuICAgIHsgY29kZTogJ1pMJywgbmFtZTogJ05hdGlvbmFsIENhciBSZW50YWwgU3lzdGVtJyB9LFxyXG4gICAgeyBjb2RlOiAnTkMnLCBuYW1lOiAnTmV4dGNhcicgfSxcclxuICAgIHsgY29kZTogJ05VJywgbmFtZTogJ051IENhciBSZW50YWxzJyB9LFxyXG4gICAgeyBjb2RlOiAnWkEnLCBuYW1lOiAnUGF5bGVzcyBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnUFInLCBuYW1lOiAnUHJpY2VsZXNzJyB9LFxyXG4gICAgeyBjb2RlOiAnUlcnLCBuYW1lOiAnUmVudCBBIFdyZWNrJyB9LFxyXG4gICAgeyBjb2RlOiAnU1gnLCBuYW1lOiAnU2l4dCcgfSxcclxuICAgIHsgY29kZTogJ1RFJywgbmFtZTogJ1RlbXBlc3QnIH0sXHJcbiAgICB7IGNvZGU6ICdYRicsIG5hbWU6ICdUZXN0LVMgQ3Jvc3MgR2FsaWxlbycgfSxcclxuICAgIHsgY29kZTogJ1hHJywgbmFtZTogJ1Rlc3QtUyBDcm9zcyBUcm5nJyB9LFxyXG4gICAgeyBjb2RlOiAnWlQnLCBuYW1lOiAnVGhyaWZ0eSBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnUE0nLCBuYW1lOiAnVHJhdmVscG9ydCBUZXN0IENvZGUnIH0sXHJcbiAgICB7IGNvZGU6ICdTVicsIG5hbWU6ICdVLVNhdmUgQXV0byBSZW50YWwnIH0sXHJcbiAgICB7IGNvZGU6ICdXRicsIG5hbWU6ICdXb29kZm9yZCcgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2Nhcl9jbGFzc2VzOiBJQ2FyQ2xhc3Nlc1tdID0gW1xyXG4gICAgeyBjb2RlOiAnTScsIG5hbWU6ICdNaW5pJywga2V5OiBDYXJIaXJlQ2xhc3MuTWluaSwgdmFsdWU6ICcxMCcgfSxcclxuICAgIHsgY29kZTogJ04nLCBuYW1lOiAnTWluaSBFbGl0ZScsIGtleTogQ2FySGlyZUNsYXNzLk1pbmlFbGl0ZSwgdmFsdWU6ICcyMCcgfSxcclxuICAgIHsgY29kZTogJ0UnLCBuYW1lOiAnRWNvbm9teScsIGtleTogQ2FySGlyZUNsYXNzLkVjb25vbXksIHZhbHVlOiAnMzAnIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdIJyxcclxuICAgICAgbmFtZTogJ0Vjb25vbXkgRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5FY29ub215RWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnNDAnXHJcbiAgICB9LFxyXG4gICAgeyBjb2RlOiAnQycsIG5hbWU6ICdDb21wYWN0Jywga2V5OiBDYXJIaXJlQ2xhc3MuQ29tcGFjdCwgdmFsdWU6ICc1MCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ0QnLFxyXG4gICAgICBuYW1lOiAnQ29tcGFjdCBFbGl0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkNvbXBhY3RFbGl0ZSxcclxuICAgICAgdmFsdWU6ICc2MCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdJJyxcclxuICAgICAgbmFtZTogJ0ludGVybWVkaWF0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkludGVybWVkaWF0ZSxcclxuICAgICAgdmFsdWU6ICc3MCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdKJyxcclxuICAgICAgbmFtZTogJ0ludGVybWVkaWF0ZSBFbGl0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkludGVybWVkaWF0ZUVsaXRlLFxyXG4gICAgICB2YWx1ZTogJzgwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ1MnLCBuYW1lOiAnU3RhbmRhcmQnLCBrZXk6IENhckhpcmVDbGFzcy5TdGFuZGFyZCwgdmFsdWU6ICc5MCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ1InLFxyXG4gICAgICBuYW1lOiAnU3RhbmRhcmQgRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5TdGFuZGFyZEVsaXRlLFxyXG4gICAgICB2YWx1ZTogJzEwMCdcclxuICAgIH0sXHJcbiAgICB7IGNvZGU6ICdGJywgbmFtZTogJ0Z1bGwgU2l6ZScsIGtleTogQ2FySGlyZUNsYXNzLkZ1bGxzaXplLCB2YWx1ZTogJzExMCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ0cnLFxyXG4gICAgICBuYW1lOiAnRnVsbCBTaXplIEVsaXRlJyxcclxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuRnVsbHNpemVFbGl0ZSxcclxuICAgICAgdmFsdWU6ICcxMjAnXHJcbiAgICB9LFxyXG4gICAgeyBjb2RlOiAnUCcsIG5hbWU6ICdQcmVtaXVtJywga2V5OiBDYXJIaXJlQ2xhc3MuUHJlbWl1bSwgdmFsdWU6ICcxMzAnIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdVJyxcclxuICAgICAgbmFtZTogJ1ByZW1pdW0gRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5QcmVtaXVtRWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnMTQwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ0wnLCBuYW1lOiAnTHV4dXJ5Jywga2V5OiBDYXJIaXJlQ2xhc3MuTHV4dXJ5LCB2YWx1ZTogJzE1MCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ1cnLFxyXG4gICAgICBuYW1lOiAnTHV4dXJ5IEVsaXRlJyxcclxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuTHV4dXJ5RWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnMTYwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ08nLCBuYW1lOiAnT3ZlcnNpemUnLCBrZXk6IENhckhpcmVDbGFzcy5PdmVyc2l6ZSwgdmFsdWU6ICcxNzAnIH0sXHJcbiAgICB7IGNvZGU6ICdYJywgbmFtZTogJ1NwZWNpYWwnLCBrZXk6IENhckhpcmVDbGFzcy5TcGVjaWFsLCB2YWx1ZTogJzE4MCcgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2xvY2F0aW9uX3R5cGVzID0gW1xyXG4gICAgTG9jYXRpb25UeXBlcy5DaXR5LFxyXG4gICAgTG9jYXRpb25UeXBlcy5BaXJwb3J0LFxyXG4gICAgTG9jYXRpb25UeXBlcy5Qb3N0Y29kZVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgY2FyQ2xhc3NNYXA6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7XHJcbiAgICBtaW5pOiAwLFxyXG4gICAgJ21pbmkgZWxpdGUnOiAxLFxyXG4gICAgZWNvbm9teTogMixcclxuICAgICdlY29ub215IGVsaXRlJzogMyxcclxuICAgIGNvbXBhY3Q6IDQsXHJcbiAgICAnY29tcGFjdCBzcGVjaWFsJzogNSxcclxuICAgICdjb21wYWN0IGVsaXRlJzogNixcclxuICAgIGludGVybWVkaWF0ZTogNyxcclxuICAgICdpbnRlcm1lZGlhdGUgZWxpdGUnOiA4LFxyXG4gICAgc3RhbmRhcmQ6IDksXHJcbiAgICAnc3RhbmRhcmQgZWxpdGUnOiAxMCxcclxuICAgICdmdWxsIHNpemUnOiAxMSxcclxuICAgICdmdWxsIHNpemUgZWxpdGUnOiAxMixcclxuICAgIHByZW1pdW06IDEzLFxyXG4gICAgJ3ByZW1pdW0gZWxpdGUnOiAxNCxcclxuICAgIGx1eHVyeTogMTUsXHJcbiAgICAnbHV4dXJ5IGVsaXRlJzogMTYsXHJcbiAgICBvdmVyc2l6ZTogMTcsXHJcbiAgICBzcGVjaWFsOiAxOFxyXG4gIH07XHJcbiAgLy8gISAtIEVuZCBvZiBoYXJkY29kZWQgZGF0YVxyXG5cclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5DYXI7XHJcblxyXG4gIHByaXZhdGUgX25nYlBpY2t1cERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHJpdmF0ZSBfcGlja3VwVGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX25nYkRyb3BvZmZEYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHByaXZhdGUgX2Ryb3BvZmZUaW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfc29ydGluZ19vcHRpb25zOiBDYXJIaXJlU29ydFtdID0gW1xyXG4gICAge1xyXG4gICAgICB2YWx1ZTogMCxcclxuICAgICAgZGlzcGxheTogJ0NoZWFwZXN0IEZpcnN0J1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdmFsdWU6IDEsXHJcbiAgICAgIGRpc3BsYXk6ICdNb3N0IEV4cGVuc2l2ZSBGaXJzdCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHZhbHVlOiAyLFxyXG4gICAgICBkaXNwbGF5OiAnUHJlZmVycmVkIEZpcnN0J1xyXG4gICAgfVxyXG4gIF07XHJcbiAgcHJpdmF0ZSBfbWluRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfbWluSW5EYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKClcclxuICB9O1xyXG4gIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdO1xyXG5cclxuICBnZXQgYWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVzdGltYXRlZE1pbGVhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZXN0aW1hdGVkTWlsZWFnZTtcclxuICB9XHJcblxyXG4gIHNldCBlc3RpbWF0ZWRNaWxlYWdlKG1pbGFnZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZXN0aW1hdGVkTWlsZWFnZSA9IG1pbGFnZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwaWNrdXBUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGlja3VwVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBwaWNrdXBUaW1lKG5ld3RpbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcGlja3VwVGltZSA9IG5ld3RpbWU7XHJcbiAgICB0aGlzLl91cGRhdGVOZ2JQaWNrdXBEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRyb3BvZmZUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHJvcG9mZlRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgZHJvcG9mZlRpbWUobmV3dGltZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9kcm9wb2ZmVGltZSA9IG5ld3RpbWU7XHJcbiAgICB0aGlzLl91cGRhdGVOZ2JEcm9wb2ZmRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIGdldCBwb3N0Y29kZVBpY2t1cFJhdygpOiBMb2NhdGlvbkRldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cFJhdztcclxuICB9XHJcblxyXG4gIHNldCBwb3N0Y29kZVBpY2t1cFJhdyhuZXdQaWNrdXBDb3VudHJ5OiBMb2NhdGlvbkRldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cFJhdyA9IG5ld1BpY2t1cENvdW50cnk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zdGNvZGVEcm9wb2ZmUmF3KCk6IExvY2F0aW9uRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlRHJvcG9mZlJhdztcclxuICB9XHJcblxyXG4gIHNldCBwb3N0Y29kZURyb3BvZmZSYXcobmV3UGlja3VwQ291bnRyeTogTG9jYXRpb25EZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVEcm9wb2ZmUmF3ID0gbmV3UGlja3VwQ291bnRyeTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaXR5UGlja3VwRGVwb3QoKTogQ2FySGlyZURlcG90IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cERlcG90O1xyXG4gIH1cclxuXHJcbiAgc2V0IGNpdHlQaWNrdXBEZXBvdChuZXdQaWNrdXBDb3VudHJ5OiBDYXJIaXJlRGVwb3QpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaXR5UGlja3VwRGVwb3QgPSBuZXdQaWNrdXBDb3VudHJ5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNpdHlEcm9wb2ZmRGVwb3QoKTogQ2FySGlyZURlcG90IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmZEZXBvdDtcclxuICB9XHJcblxyXG4gIHNldCBjaXR5RHJvcG9mZkRlcG90KG5ld1Bvc3RDb2RlRHJvcG9mZjogQ2FySGlyZURlcG90KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmZEZXBvdCA9IG5ld1Bvc3RDb2RlRHJvcG9mZjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwb3N0Y29kZVBpY2t1cCgpOiBDYXJIaXJlRGVwb3Qge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cDtcclxuICB9XHJcblxyXG4gIHNldCBwb3N0Y29kZVBpY2t1cChuZXdQaWNrdXBDb3VudHJ5OiBDYXJIaXJlRGVwb3QpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cCA9IG5ld1BpY2t1cENvdW50cnk7XHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlUGlja3VwKSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBvc3Rjb2RlRHJvcG9mZigpOiBDYXJIaXJlRGVwb3Qge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZURyb3BvZmY7XHJcbiAgfVxyXG5cclxuICBzZXQgcG9zdGNvZGVEcm9wb2ZmKG5ld1Bvc3RDb2RlRHJvcG9mZjogQ2FySGlyZURlcG90KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVEcm9wb2ZmID0gbmV3UG9zdENvZGVEcm9wb2ZmO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNpdHlQaWNrdXAoKTogTG9jYXRpb25EZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cDtcclxuICB9XHJcblxyXG4gIHNldCBjaXR5UGlja3VwKG5ld1BpY2t1cDogTG9jYXRpb25EZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cCA9IG5ld1BpY2t1cDtcclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cCkge1xyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5DaXR5O1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2l0eURyb3BvZmYoKTogTG9jYXRpb25EZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmY7XHJcbiAgfVxyXG5cclxuICBzZXQgY2l0eURyb3BvZmYobmV3RHJvcG9mZjogTG9jYXRpb25EZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmYgPSBuZXdEcm9wb2ZmO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1pbkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcclxuICB9XHJcblxyXG4gIGdldCBtaW5JbkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluSW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXk8c3RyaW5nPltdO1xyXG4gIC8vIC0gR2V0dGVycyBBbmQgU2V0dGVycyBGb3IgVmFyaW91cyBWYXJpYWJsZXNcclxuICBnZXQgcGlja3VwX2NvdW50cnkoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2NvdW50cnk7XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwX2NvdW50cnkobmV3UGlja3VwQ291bnRyeTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2NvdW50cnkgPSBuZXdQaWNrdXBDb3VudHJ5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRyb3BvZmZfY291bnRyeSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2NvdW50cnk7XHJcbiAgfVxyXG5cclxuICBzZXQgZHJvcG9mZl9jb3VudHJ5KG5ld0Ryb3BvZmZDb3VudHJ5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2NvdW50cnkgPSBuZXdEcm9wb2ZmQ291bnRyeTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwaWNrdXBfbG9jYXRpb24oKTogT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5waWNrdXBfbG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwX2xvY2F0aW9uKHBpY2t1cExvY2F0aW9uOiBPQlRBaXJwb3J0RGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnBpY2t1cF9sb2NhdGlvbiA9IHBpY2t1cExvY2F0aW9uO1xyXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5waWNrdXBfbG9jYXRpb24pIHtcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuQWlycG9ydDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZXR1cm5fdG9fcGlja3VwKSB7XHJcbiAgICAgIHRoaXMuZHJvcG9mZl9sb2NhdGlvbiA9IHBpY2t1cExvY2F0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBkcm9wb2ZmX2xvY2F0aW9uKCk6IE9CVEFpcnBvcnREZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9sb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCBkcm9wb2ZmX2xvY2F0aW9uKGRyb3BPZmZMb2NhdGlvbjogT0JUQWlycG9ydERldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2xvY2F0aW9uID0gZHJvcE9mZkxvY2F0aW9uO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5nYlBpY2t1cERhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX25nYlBpY2t1cERhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZU5nYlBpY2t1cERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmdiUGlja3VwRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9uZ2JQaWNrdXBEYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5nYkRyb3BvZmZEYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9uZ2JEcm9wb2ZmRGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlTmdiRHJvcG9mZkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmdiRHJvcG9mZkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmdiRHJvcG9mZkRhdGU7XHJcbiAgfVxyXG5cclxuICAvLyBEYXRldGltZXMgd2l0aGluIHRoZSBxdWVyeSBpdHNlbGZcclxuICBnZXQgcGlja3VwX2RhdGV0aW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5waWNrdXBfZGF0ZXRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwX2RhdGV0aW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2RhdGV0aW1lID0gdmFsdWU7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgdGhpcy5fbmdiUGlja3VwRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5fcGlja3VwVGltZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpXHJcbiAgICAgICAgICA/IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpXHJcbiAgICAgICAgICA6ICcwNzozMCc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fbWluSW5EYXRlID0ge1xyXG4gICAgICAgIGRheTogdmFsdWUuZGF0ZSgpLFxyXG4gICAgICAgIG1vbnRoOiB2YWx1ZS5tb250aCgpICsgMSxcclxuICAgICAgICB5ZWFyOiB2YWx1ZS55ZWFyKClcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZS5pc1NhbWVPckFmdGVyKHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2RhdGV0aW1lKSkge1xyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9IHRoaXMuZHJvcG9mZl9kYXRldGltZVxyXG4gICAgICAgICAgLnNldCgnZGF0ZScsIHZhbHVlLmRhdGUoKSlcclxuICAgICAgICAgIC5zZXQoJ21vbnRoJywgdmFsdWUubW9udGgoKSlcclxuICAgICAgICAgIC5zZXQoJ3llYXInLCB2YWx1ZS55ZWFyKCkpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikgeyB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRyb3BvZmZfZGF0ZXRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRyb3BvZmZfZGF0ZXRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgZHJvcG9mZl9kYXRldGltZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmRyb3BvZmZfZGF0ZXRpbWUgPSB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5fbmdiRHJvcG9mZkRhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xyXG4gICAgICB0aGlzLl9kcm9wb2ZmVGltZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpXHJcbiAgICAgICAgPyBtb21lbnQodmFsdWUpLmZvcm1hdCgnSEg6bW0nKVxyXG4gICAgICAgIDogJzA4OjMwJztcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIC8vICFkYXRlIGFuZCB0aW1lIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgZm9yIExVXHJcbiAgcHJpdmF0ZSBfcGlja3VwX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG5cclxuICBnZXQgcGlja3VwX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGlja3VwX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX3BpY2t1cF9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVQaWNrdXBEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcGlja3VwX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IHBpY2t1cF90aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGlja3VwX3RpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwX3RpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcGlja3VwX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVBpY2t1cERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcm9wb2ZmX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG5cclxuICBnZXQgZHJvcG9mZl9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Ryb3BvZmZfZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBkcm9wb2ZmX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX2Ryb3BvZmZfZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlRHJvcG9mZkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcm9wb2ZmX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IGRyb3BvZmZfdGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Ryb3BvZmZfdGltZTtcclxuICB9XHJcblxyXG4gIHNldCBkcm9wb2ZmX3RpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZHJvcG9mZl90aW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVEcm9wb2ZmRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIGdldCByZXR1cm5fdG9fcGlja3VwKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5fdG9fcGlja3VwO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybl90b19waWNrdXAobmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuX3RvX3BpY2t1cCA9IG5ld1ZhbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaG9zZW5WZW5kb3IoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuVmVuZG9yO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNob3NlblZlbmRvcihuZXdWZW5kb3I6IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblZlbmRvciA9IG5ld1ZlbmRvcjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaG9zZW5EaXN0YW5jZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5EaXN0YW5jZTtcclxuICB9XHJcblxyXG4gIHNldCBjaG9zZW5EaXN0YW5jZShuZXdDaG9zZW5EaXN0YW5jZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuRGlzdGFuY2UgPSBuZXdDaG9zZW5EaXN0YW5jZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYXJDbGFzcygpOiBDYXJIaXJlQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jYXJDbGFzcztcclxuICB9XHJcblxyXG4gIHNldCBjYXJDbGFzcyhjYXJDbGFzczogQ2FySGlyZUNsYXNzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FyQ2xhc3MgPSBjYXJDbGFzcztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYXJUeXBlKCk6IENhckhpcmVUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2FyVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBjYXJUeXBlKHR5cGU6IENhckhpcmVUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FyVHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhbnNtaXNzaW9uKCk6IENhckhpcmVUcmFuc21pc3Npb24ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50cmFuc21pc3Npb247XHJcbiAgfVxyXG5cclxuICBzZXQgdHJhbnNtaXNzaW9uKHRyYW5zOiBDYXJIaXJlVHJhbnNtaXNzaW9uKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudHJhbnNtaXNzaW9uID0gdHJhbnM7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYWlyQ29uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5haXJDb247XHJcbiAgfVxyXG5cclxuICBzZXQgYWlyQ29uKG5ld0NvbjogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFpckNvbiA9IG5ld0NvbjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBsb2NhdGlvblR5cGUoKTogTG9jYXRpb25UeXBlcyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uVHlwZTtcclxuICB9XHJcbiAgc2V0IGxvY2F0aW9uVHlwZSh2YWx1ZTogTG9jYXRpb25UeXBlcykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uVHlwZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKSB7XHJcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxyXG4gICAgICB0aGlzLl90aW1lQXJyYXkgfHxcclxuICAgICAgQXJyYXkoOTYpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgLy8gISAtIFRoZSBiZWxvdyB2YWx1ZXMgaGF2ZSBnZXR0ZXJzIG9ubHkgKEkuRSBDYW5ub3QgbW9kaWZ5KVxyXG5cclxuICBnZXQgY2FyQWlyQ29uZGl0aW9uVHlwZXMoKTogW3N0cmluZywgc3RyaW5nLCBib29sZWFuXVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9jYXJBaXJDb25kaXRpb25UeXBlcztcclxuICB9XHJcblxyXG4gIGdldCB3aXRoaW5EaXN0YW5jZSgpOiBXaXRoaW5EaXN0YW5jZVtdIHtcclxuICAgIHJldHVybiB0aGlzLl93aXRoaW5EaXN0YW5jZTtcclxuICB9XHJcblxyXG4gIGdldCBjYXJUcmFuc21pc3Npb25Db2RlcygpOiBbc3RyaW5nLCBzdHJpbmcsIENhckhpcmVUcmFuc21pc3Npb25dW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhclRyYW5zbWlzc2lvbkNvZGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhclR5cGVDb2RlcygpOiBbc3RyaW5nLCBzdHJpbmcsIENhckhpcmVUeXBlXVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9jYXJUeXBlQ29kZXM7XHJcbiAgfVxyXG5cclxuICBnZXQgdmVuZG9ycygpOiBWZW5kb3JbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmVuZG9ycztcclxuICB9XHJcblxyXG4gIGdldCBzb3J0aW5nT3B0aW9ucygpOiBDYXJIaXJlU29ydFtdIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0aW5nX29wdGlvbnM7XHJcbiAgfVxyXG5cclxuICAvLyAhIC0gRW5kIG9mIGdldHRlcnMgYW5kIHNldHRlcnNcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNhcmhpcmVmZXRjaGVyOiBCYXNlQ2FyaGlyZVF1b3RlRmV0Y2hlcjxDSF9RPixcclxuICAgIHByaXZhdGUgY2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXI6IEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjxDSEFEX1E+LFxyXG4gICAgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycyk7XHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IENhckhpcmVUZW1wUGFyYW1zO1xyXG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBDYXJIaXJlVGVtcFBhcmFtc1xyXG4gICAgICB9O1xyXG5cclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhzZWFyY2hTZXJ2aWNlLm1ha2VDYXJIaXJlUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XHJcblxyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5DYXJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmFkdWx0cyA9IHNwbGl0VHJhdmVsbGVycy5hZHVsdHMubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy5jaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN1bHRzID1cclxuICAgICAgc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3Q8Q2FySGlyZVF1b3RlUmVzdWx0QXJyYXk+KFxyXG4gICAgICAgIHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lXHJcbiAgICAgICkgfHwgW107XHJcblxyXG4gICAgdGhpcy5mdWxsUmVzdWx0cyA9IGhlbHBlcnMuY2xvbmUocmVzdWx0cyB8fCBbXSk7XHJcbiAgICB0aGlzLl9jaGVhcGVzdFJlc3VsdFByaWNlID0gdGhpcy51cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcblxyXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlQ2FySGlyZVF1ZXJ5KCkpO1xyXG4gICAgdGhpcy5lc3RpbWF0ZWRNaWxlYWdlID0gbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAge1xyXG4gICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtc1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIC8vIGdvIG92ZXIgYW5kIGNoZWNrIHRoYXQgYWxsIG9mIHRoZSB2YXJpb3VzIHZhcmlhYmxlcyBhcmUgY29ycmVjdFxyXG5cclxuICAgIC8vIGZpcnN0IG9mIGFsbCBjaGVjayB0aGF0IHdlIGhhdmUgYSB2YWxpZCBsb2NhdGlvblxyXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMubG9jYXRpb25UeXBlKSB7XHJcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5BaXJwb3J0OlxyXG4gICAgICAgIGlmICghdGhpcy5waWNrdXBfbG9jYXRpb24gfHwgIXRoaXMucGlja3VwX2xvY2F0aW9uLmRlc3RpbmF0aW9uKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgcGlja3VwIGxvY2F0aW9uJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZHJvcG9mZl9sb2NhdGlvbiB8fCAhdGhpcy5kcm9wb2ZmX2xvY2F0aW9uLmRlc3RpbmF0aW9uKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgZHJvcG9mZiBsb2NhdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkNpdHk6XHJcbiAgICAgICAgaWYgKCF0aGlzLmNpdHlQaWNrdXApIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzdXBwbHkgYSBwaWNrdXAgY2l0eScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNpdHlEcm9wb2ZmKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgZHJvcG9mZiBjaXR5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuUG9zdGNvZGU6XHJcbiAgICAgICAgaWYgKCF0aGlzLnBvc3Rjb2RlUGlja3VwKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgcGlja3VwIGRlcG90Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucG9zdGNvZGVEcm9wb2ZmKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgZHJvcG9mZiBkZXBvdCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5lc3RpbWF0ZWRNaWxlYWdlICYmIHRoaXMuZXN0aW1hdGVkTWlsZWFnZSA8PSAwKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgJ0VzdGltYXRlZCBNaWxhZ2UgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLnBpY2t1cF9kYXRldGltZSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzdXBwbHkgYSBwaWNrdXAgdGltZSBhbmQgZGF0ZScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMuZHJvcG9mZl9kYXRldGltZSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzdXBwbHkgYSBkcm9wIG9mZiB0aW1lIGFuZCBkYXRlJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWU/LmlzU2FtZU9yQmVmb3JlKHRoaXMucGlja3VwX2RhdGV0aW1lLCAnbWludXRlJylcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICdEcm9wb2ZmIGRhdGUvdGltZSBjYW5ub3QgYmUgYmVmb3JlIG9yIHRoZSBzYW1lIGFzIHBpY2t1cCBkYXRlL3RpbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucGlja3VwX2RhdGV0aW1lPy5pc0JlZm9yZShtb21lbnQoKSkpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ1BpY2t1cCBkYXRlL3RpbWUgbXVzdCBiZSBhZnRlciBwcmVzZW50IGRhdGUvdGltZSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5kcm9wb2ZmX2RhdGV0aW1lPy5pc0JlZm9yZShtb21lbnQoKSkpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ0Ryb3BvZmYgZGF0ZS90aW1lIG11c3QgYmUgYWZ0ZXIgcHJlc2VudCBkYXRlL3RpbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxyXG5cclxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaChcclxuICAgICAgICB0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHRoaXMuZ2V0U2VhcmNoUXVlcnkoKSlcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U2VhcmNoKFxyXG4gICAgICAgIHRoaXMuY2FyaGlyZWZldGNoZXIuZmV0Y2hMaXN0KFxyXG4gICAgICAgICAgdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3M+KHF1ZXJ5KVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogUXVlcnlTZWFyY2hDYXJIaXJlQXJnc1xyXG4gICk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCByZWNlbnRTZWFyY2hRdWVyeTogQ2FySGlyZVNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuQ2FyLFxyXG4gICAgICBzZWFyY2hBcmdzOiByZWNlbnRTZWFyY2hRdWVyeSxcclxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5waWNrdXBfZGF0ZXRpbWUuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShxdWVyeTogUXVlcnlTZWFyY2hDYXJIaXJlQXJncyk6IENhckhpcmVTZWFyY2hBcmdzIHtcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBDYXJIaXJlU2VhcmNoQXJncyA9IHF1ZXJ5O1xyXG4gICAgc3dpdGNoICh0aGlzLmxvY2F0aW9uVHlwZSkge1xyXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuQ2l0eTpcclxuICAgICAgICBzZWFyY2hRdWVyeS5jaXR5ID0ge1xyXG4gICAgICAgICAgcGlja3VwTmFtZTogdGhpcy5jaXR5UGlja3VwLm5hbWUsXHJcbiAgICAgICAgICBwaWNrdXBDb3VudHJ5Q29kZTogdGhpcy5jaXR5UGlja3VwLmNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgcGlja3VwQ2l0eTogdGhpcy5jaXR5UGlja3VwLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICBwaWNrdXBMYXRpdHVkZTogdGhpcy5jaXR5UGlja3VwLmxhdGl0dWRlLFxyXG4gICAgICAgICAgcGlja3VwTG9uZ2l0dWRlOiB0aGlzLmNpdHlQaWNrdXAubG9uZ2l0dWRlLFxyXG5cclxuICAgICAgICAgIGRyb3BPZmZOYW1lOiB0aGlzLmNpdHlEcm9wb2ZmLm5hbWUsXHJcbiAgICAgICAgICBkcm9wb2ZmQ291bnRyeUNvZGU6IHRoaXMuY2l0eURyb3BvZmYuY291bnRyeUNvZGUsXHJcbiAgICAgICAgICBkcm9wb2ZmQ2l0eTogdGhpcy5jaXR5RHJvcG9mZi5pZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgZHJvcE9mZkxhdGl0dWRlOiB0aGlzLmNpdHlEcm9wb2ZmLmxhdGl0dWRlLFxyXG4gICAgICAgICAgZHJvcE9mZkxvbmdpdHVkZTogdGhpcy5jaXR5RHJvcG9mZi5sb25naXR1ZGUsXHJcblxyXG4gICAgICAgICAgcGlja3VwQWRkcmVzc0xpbmVzOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC5hZGRyZXNzTGluZXNbMF0sXHJcbiAgICAgICAgICBwaWNrdXBDaXR5TmFtZTogdGhpcy5jaXR5UGlja3VwRGVwb3QuY2l0eU5hbWUsXHJcbiAgICAgICAgICBwaWNrdXBFeHRlbmRlZExvY2F0aW9uQ29kZTogdGhpcy5jaXR5UGlja3VwRGVwb3QuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIHBpY2t1cFZlbmRvcjogdGhpcy5jaXR5UGlja3VwRGVwb3QudmVuZG9yLFxyXG4gICAgICAgICAgcGlja3VwVmVuZG9yQ29kZTogdGhpcy5jaXR5UGlja3VwRGVwb3QudmVuZG9yQ29kZSxcclxuICAgICAgICAgIGNob3NlbkRpc3RhbmNlOiB0aGlzLmNob3NlbkRpc3RhbmNlLFxyXG5cclxuICAgICAgICAgIGRyb3BPZmZBZGRyZXNzTGluZXM6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC5hZGRyZXNzTGluZXNbMF0sXHJcbiAgICAgICAgICBkcm9wT2ZmQ2l0eU5hbWU6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC5jaXR5TmFtZSxcclxuICAgICAgICAgIGRyb3BPZmZFeHRlbmRlZExvY2F0aW9uQ29kZTogdGhpcy5jaXR5RHJvcG9mZkRlcG90LmV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTogdGhpcy5jaXR5RHJvcG9mZkRlcG90LmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIGRyb3BPZmZWZW5kb3I6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC52ZW5kb3IsXHJcbiAgICAgICAgICBkcm9wT2ZmVmVuZG9yQ29kZTogdGhpcy5jaXR5RHJvcG9mZkRlcG90LnZlbmRvckNvZGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuUG9zdGNvZGU6XHJcbiAgICAgICAgc2VhcmNoUXVlcnkuZGVwb3QgPSB7XHJcbiAgICAgICAgICB2ZW5kb3JDb2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLnZlbmRvckNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBMb2NhdGlvbkNvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXAubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgcGlja3VwRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXAuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBBZGRyZXNzTGluZXM6IHRoaXMucG9zdGNvZGVQaWNrdXAuYWRkcmVzc0xpbmVzWzBdLFxyXG4gICAgICAgICAgcGlja3VwQ2l0eU5hbWU6IHRoaXMucG9zdGNvZGVQaWNrdXAuY2l0eU5hbWUsXHJcbiAgICAgICAgICBwaWNrdXBWZW5kb3I6IHRoaXMucG9zdGNvZGVQaWNrdXAudmVuZG9yLFxyXG5cclxuICAgICAgICAgIGRyb3BPZmZMb2NhdGlvbkNvZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIGRyb3BPZmZFeHRlbmRlZExvY2F0aW9uQ29kZTpcclxuICAgICAgICAgICAgdGhpcy5wb3N0Y29kZURyb3BvZmYuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBkcm9wb2ZmQWRkcmVzc0xpbmVzOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5hZGRyZXNzTGluZXNbMF0sXHJcbiAgICAgICAgICBkcm9wb2ZmQ2l0eU5hbWU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmNpdHlOYW1lLFxyXG4gICAgICAgICAgZHJvcG9mZlZlbmRvcjogdGhpcy5wb3N0Y29kZURyb3BvZmYudmVuZG9yLFxyXG4gICAgICAgICAgY2hvc2VuRGlzdGFuY2U6IHRoaXMuY2hvc2VuRGlzdGFuY2UsXHJcblxyXG4gICAgICAgICAgcGlja3VwUG9zdENvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXBSYXcubmFtZSxcclxuICAgICAgICAgIHBpY2t1cExhdGl0dWRlOiB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3LmxhdGl0dWRlLFxyXG4gICAgICAgICAgcGlja3VwTG9uZ2l0dWRlOiB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3LmxvbmdpdHVkZSxcclxuXHJcbiAgICAgICAgICBkcm9wb2ZmUG9zdENvZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3Lm5hbWUsXHJcbiAgICAgICAgICBkcm9wb2ZmTGF0aXR1ZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3LmxhdGl0dWRlLFxyXG4gICAgICAgICAgZHJvcG9mZkxvbmdpdHVkZTogdGhpcy5wb3N0Y29kZURyb3BvZmZSYXcubG9uZ2l0dWRlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hvc2VuVmVuZG9yID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudmVuZG9yO1xyXG4gICAgdGhpcy5jYXJDbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNsYXNzO1xyXG4gICAgdGhpcy5jYXJUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudHlwZTtcclxuICAgIHRoaXMudHJhbnNtaXNzaW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudHJhbnNtaXNzaW9uO1xyXG4gICAgdGhpcy5haXJDb24gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5haXJjb247XHJcbiAgICB0aGlzLmVzdGltYXRlZE1pbGVhZ2UgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5lc3RpbWF0ZWREYWlseURpc3RhbmNlO1xyXG4gICAgdGhpcy5kcm9wb2ZmX2RhdGV0aW1lID0gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRyb3BvZmZEYXRlVGltZSk7XHJcbiAgICB0aGlzLnBpY2t1cF9kYXRldGltZSA9IG1vbWVudChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5waWNrdXBEYXRlVGltZSk7XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkpIHtcclxuICAgICAgdGhpcy5nZXRQYXJhbXNGb3JDYXJieUNpdHkocmVjZW50U2VhcmNoKTtcclxuICAgIH0gZWxzZSBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYWlycG9ydCkge1xyXG4gICAgICB0aGlzLmdldFBhcmFtc0ZvckNhcmJ5QWlycG9ydChyZWNlbnRTZWFyY2gpO1xyXG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdCkge1xyXG4gICAgICB0aGlzLmdldFBhcmFtc0ZvckNhcmJ5UG9zdENvZGUocmVjZW50U2VhcmNoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGFyYW1zRm9yQ2FyYnlBaXJwb3J0KHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuQWlycG9ydDtcclxuICAgIGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5haXJwb3J0LnBpY2t1cENvZGVcclxuICAgICAgKSxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRCeUNvZGUoXHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYWlycG9ydC5kcm9wb2ZmQ29kZVxyXG4gICAgICApXHJcbiAgICBdKS5zdWJzY3JpYmUoKFtkZXBhcnRMb2NhdGlvbiwgYXJyaXZlTG9jYXRpb25dKSA9PiB7XHJcbiAgICAgIGlmIChkZXBhcnRMb2NhdGlvbiAmJiBhcnJpdmVMb2NhdGlvbikge1xyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9sb2NhdGlvbiA9IHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgIGdhdGV3YXk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNvdW50cnk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcG9zdGNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNvdW50cnlDb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucGlja3VwX2xvY2F0aW9uID0ge1xyXG4gICAgICAgICAgZGVzdGluYXRpb246IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxyXG4gICAgICAgICAgZ2F0ZXdheTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXHJcbiAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKFxyXG4gICAgICAgICAgICBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2gudGVybWluYWxzXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgY291bnRyeTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXHJcbiAgICAgICAgICBwb3N0Y29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgY291bnRyeUNvZGU6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9jb3VudHJ5ID0gdGhpcy5kcm9wb2ZmX2xvY2F0aW9uLmNvdW50cnlDb2RlO1xyXG4gICAgICAgIHRoaXMucGlja3VwX2NvdW50cnkgPSB0aGlzLnBpY2t1cF9sb2NhdGlvbi5jb3VudHJ5Q29kZTtcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGFyYW1zRm9yQ2FyYnlDaXR5KHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuQ2l0eTtcclxuICAgIHRoaXMuY2hvc2VuRGlzdGFuY2UgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmNob3NlbkRpc3RhbmNlO1xyXG5cclxuICAgIHRoaXMuY2l0eVBpY2t1cCA9IHtcclxuICAgICAgY291bnRyeUNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwQ291bnRyeUNvZGUsXHJcbiAgICAgIGlkOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LnBpY2t1cENpdHksXHJcbiAgICAgIG5hbWU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwTmFtZSxcclxuICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5DaXR5LFxyXG4gICAgICBsYXRpdHVkZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBMYXRpdHVkZSxcclxuICAgICAgbG9uZ2l0dWRlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LnBpY2t1cExvbmdpdHVkZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNpdHlEcm9wb2ZmID0ge1xyXG4gICAgICBjb3VudHJ5Q29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5kcm9wb2ZmQ291bnRyeUNvZGUsXHJcbiAgICAgIGlkOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BvZmZDaXR5LFxyXG4gICAgICBuYW1lOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZOYW1lLFxyXG4gICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkNpdHksXHJcbiAgICAgIGxhdGl0dWRlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZMYXRpdHVkZSxcclxuICAgICAgbG9uZ2l0dWRlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZMb25naXR1ZGVcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5jaXR5RHJvcG9mZkRlcG90ID0ge1xyXG4gICAgICBhZGRyZXNzTGluZXM6IFtyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZBZGRyZXNzTGluZXNdLFxyXG4gICAgICBjaXR5TmFtZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5kcm9wT2ZmQ2l0eU5hbWUsXHJcbiAgICAgIGV4dGVuZGVkTG9jYXRpb25Db2RlOlxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICBsb2NhdGlvbkNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcE9mZkxvY2F0aW9uQ29kZSxcclxuICAgICAgdmVuZG9yOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZWZW5kb3IsXHJcbiAgICAgIHZlbmRvckNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcE9mZlZlbmRvckNvZGVcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5jaXR5UGlja3VwRGVwb3QgPSB7XHJcbiAgICAgIGFkZHJlc3NMaW5lczogW3JlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwQWRkcmVzc0xpbmVzXSxcclxuICAgICAgY2l0eU5hbWU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwQ2l0eU5hbWUsXHJcbiAgICAgIGV4dGVuZGVkTG9jYXRpb25Db2RlOlxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwRXh0ZW5kZWRMb2NhdGlvbkNvZGUsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBMb2NhdGlvbkNvZGUsXHJcbiAgICAgIHZlbmRvcjogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBWZW5kb3IsXHJcbiAgICAgIHZlbmRvckNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwVmVuZG9yQ29kZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJhbXNGb3JDYXJieVBvc3RDb2RlKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuUG9zdGNvZGU7XHJcbiAgICB0aGlzLmNob3NlbkRpc3RhbmNlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuY2hvc2VuRGlzdGFuY2U7XHJcblxyXG4gICAgdGhpcy5wb3N0Y29kZURyb3BvZmYgPSB7XHJcbiAgICAgIGFkZHJlc3NMaW5lczogW3JlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LmRyb3BvZmZBZGRyZXNzTGluZXNdLFxyXG4gICAgICB2ZW5kb3JDb2RlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC52ZW5kb3JDb2RlLFxyXG4gICAgICBsb2NhdGlvbkNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LmRyb3BPZmZMb2NhdGlvbkNvZGUsXHJcbiAgICAgIGV4dGVuZGVkTG9jYXRpb25Db2RlOlxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LmRyb3BPZmZFeHRlbmRlZExvY2F0aW9uQ29kZSxcclxuICAgICAgY2l0eU5hbWU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LmRyb3BvZmZDaXR5TmFtZSxcclxuICAgICAgdmVuZG9yOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5kcm9wb2ZmVmVuZG9yXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3ID0ge1xyXG4gICAgICBuYW1lOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5kcm9wb2ZmUG9zdENvZGUsXHJcbiAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuUG9zdGNvZGUsXHJcbiAgICAgIGxhdGl0dWRlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5kcm9wb2ZmTGF0aXR1ZGUsXHJcbiAgICAgIGxvbmdpdHVkZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuZHJvcG9mZkxvbmdpdHVkZVxyXG4gICAgfTtcclxuICAgIHRoaXMucG9zdGNvZGVQaWNrdXAgPSB7XHJcbiAgICAgIGFkZHJlc3NMaW5lczogW3JlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LnBpY2t1cEFkZHJlc3NMaW5lc10sXHJcbiAgICAgIHZlbmRvckNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LnZlbmRvckNvZGUsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwTG9jYXRpb25Db2RlLFxyXG4gICAgICBleHRlbmRlZExvY2F0aW9uQ29kZTpcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5waWNrdXBFeHRlbmRlZExvY2F0aW9uQ29kZSxcclxuICAgICAgY2l0eU5hbWU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LnBpY2t1cENpdHlOYW1lLFxyXG4gICAgICB2ZW5kb3I6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LnBpY2t1cFZlbmRvclxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3ID0ge1xyXG4gICAgICBuYW1lOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5waWNrdXBQb3N0Q29kZSxcclxuICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSxcclxuICAgICAgbGF0aXR1ZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LnBpY2t1cExhdGl0dWRlLFxyXG4gICAgICBsb25naXR1ZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LnBpY2t1cExvbmdpdHVkZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoUXVlcnkoKTogUXVlcnlTZWFyY2hDYXJIaXJlQXJncyB7XHJcbiAgICBjb25zdCBxdWVyeTogUXVlcnlTZWFyY2hDYXJIaXJlQXJncyA9IHt9IGFzIFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3M7XHJcbiAgICBzd2l0Y2ggKHRoaXMubG9jYXRpb25UeXBlKSB7XHJcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5BaXJwb3J0OlxyXG4gICAgICAgIHF1ZXJ5LmFpcnBvcnQgPSB7XHJcbiAgICAgICAgICBwaWNrdXBDb2RlOiAnJyxcclxuICAgICAgICAgIGRyb3BvZmZDb2RlOiAnJ1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHF1ZXJ5LmFpcnBvcnQucGlja3VwQ29kZSA9IHRoaXMucGlja3VwX2xvY2F0aW9uLmdhdGV3YXk7XHJcbiAgICAgICAgcXVlcnkuYWlycG9ydC5kcm9wb2ZmQ29kZSA9IHRoaXMucmV0dXJuX3RvX3BpY2t1cFxyXG4gICAgICAgICAgPyB0aGlzLnBpY2t1cF9sb2NhdGlvbi5nYXRld2F5XHJcbiAgICAgICAgICA6IHRoaXMuZHJvcG9mZl9sb2NhdGlvbi5nYXRld2F5O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuQ2l0eTpcclxuICAgICAgICBxdWVyeS5kZXBvdCA9IHtcclxuICAgICAgICAgIHZlbmRvckNvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LnZlbmRvckNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIHBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC5leHRlbmRlZExvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIGRyb3BPZmZMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBkcm9wT2ZmRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eURyb3BvZmZEZXBvdC5leHRlbmRlZExvY2F0aW9uQ29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gT0xEIHBheWxvYWQgZm9yIGNpdHksIGFza2VkIHRvIGNoYW5nZVxyXG4gICAgICAgIC8vIHF1ZXJ5LmNpdHkgPSB7XHJcbiAgICAgICAgLy8gICBwaWNrdXBDb3VudHJ5Q29kZTogdGhpcy5jaXR5UGlja3VwLmNvdW50cnlDb2RlLFxyXG4gICAgICAgIC8vICAgcGlja3VwQ2l0eTogdGhpcy5jaXR5UGlja3VwLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgLy8gICBkcm9wb2ZmQ291bnRyeUNvZGU6IHRoaXMuY2l0eURyb3BvZmYuY291bnRyeUNvZGUsXHJcbiAgICAgICAgLy8gICBkcm9wb2ZmQ2l0eTogdGhpcy5jaXR5RHJvcG9mZi5pZC50b1N0cmluZygpXHJcbiAgICAgICAgLy8gfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlOlxyXG4gICAgICAgIHF1ZXJ5LmRlcG90ID0ge1xyXG4gICAgICAgICAgdmVuZG9yQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC52ZW5kb3JDb2RlLFxyXG4gICAgICAgICAgcGlja3VwTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIHBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZURyb3BvZmYubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5leHRlbmRlZExvY2F0aW9uQ29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBxdWVyeS5kcm9wb2ZmRGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWVcclxuICAgICk7XHJcbiAgICBxdWVyeS5waWNrdXBEYXRlVGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRHcmFwaFFMRGF0ZVRpbWUoXHJcbiAgICAgIHRoaXMucGlja3VwX2RhdGV0aW1lXHJcbiAgICApO1xyXG4gICAgcXVlcnkuYWlyY29uID0gdGhpcy5haXJDb247XHJcblxyXG4gICAgLy8gbm93IGZvciB0aGUgb3B0aW9uYWwgZmllbGRzIC0gbnVsbGlmeSB0aGVzZSBpZiB0aGV5IGFyZSAnLScgKEFueSlcclxuICAgIGlmICh0aGlzLmxvY2F0aW9uVHlwZSA9PT0gTG9jYXRpb25UeXBlcy5BaXJwb3J0KSB7XHJcbiAgICAgIHF1ZXJ5LnZlbmRvciA9IHRoaXMuY2hvc2VuVmVuZG9yID09PSAnLScgPyBudWxsIDogdGhpcy5jaG9zZW5WZW5kb3I7XHJcbiAgICB9XHJcbiAgICBxdWVyeS50cmFuc21pc3Npb24gPSB0aGlzLnRyYW5zbWlzc2lvbiB8fCBudWxsO1xyXG4gICAgcXVlcnkuY2xhc3MgPSB0aGlzLmNhckNsYXNzIHx8IG51bGw7XHJcbiAgICBxdWVyeS50eXBlID0gdGhpcy5jYXJUeXBlIHx8IG51bGw7XHJcbiAgICBxdWVyeS5lc3RpbWF0ZWREYWlseURpc3RhbmNlID0gdGhpcy5lc3RpbWF0ZWRNaWxlYWdlIHx8IG51bGw7XHJcbiAgICBxdWVyeS5lc3RpbWF0ZWREYWlseURpc3RhbmNlVW5pdHMgPSB0aGlzLmVzdGltYXRlZE1pbGVhZ2VcclxuICAgICAgPyBEaXN0YW5jZVR5cGVzLk1cclxuICAgICAgOiBudWxsOyAvLyBTZXR0aW5nIGFzIG1pbGVzIGZvciBub3cgLSBtYXkgc3dhcCBvdXQgZm9yIGtpbG9tZXRlcnMgbGF0ZXJcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FySGlyZUFyZ3M+KHF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEB0b2RvIC0gdHVybiB0aGlzIGludG8gYSBCRSBjYWxsIHRvIGR5bmFtaWNhbGx5IGdldCB0aGUgbGlzdCBvZiBjYXIgY2xhc3Nlc1xyXG4gICAqIEByZXR1cm5zIGFsbCBjYXIgY2xhc3NlcyBhcyBhbiBhcnJheVxyXG4gICAqL1xyXG4gIGdldENhckNsYXNzZXMoKTogT2JzZXJ2YWJsZTxJQ2FyQ2xhc3Nlc1tdPiB7XHJcbiAgICByZXR1cm4gb2YodGhpcy5fY2FyX2NsYXNzZXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TG9jYXRpb25UeXBlcygpIHtcclxuICAgIHJldHVybiBvZih0aGlzLl9sb2NhdGlvbl90eXBlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBmaWx0ZXIgZG93biB0aGUgY2FyIHJlc3VsdHMgYmFzZWQgb24gdXNlciBjaG9zZW4gZmlsdGVyc1xyXG4gICAqL1xyXG4gIGZpbHRlclJlc3VsdHMoYXBwbGllZEZpbHRlcnM6IENhckhpcmVGaWx0ZXJzLCBzZWxlY3RlZFNvcnQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IGZ1bGxSZXN1bHRzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgdGhpcy5mdWxsUmVzdWx0c1xyXG4gICAgKTtcclxuXHJcbiAgICAvLyBub3cgYXBwbHkgZmlsdGVyc1xyXG4gICAgLy8gcHJpY2UgZmlsdGVyc1xyXG4gICAgZnVsbFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5maWx0ZXIoKHJlc3VsdDogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHByaWNlID0gdGhpcy5nZXRQcmljZShyZXN1bHQpO1xyXG5cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBwcmljZSA+PSBhcHBsaWVkRmlsdGVycy5taW5QcmljZSAmJiBwcmljZSA8PSBhcHBsaWVkRmlsdGVycy5tYXhQcmljZVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gYXBwbHkgdHJhbnNtaXNzaW9uIGZpbHRlcnNcclxuICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5maWx0ZXJCeVRyYW5zbWlzc2lvblR5cGUoXHJcbiAgICAgIGFwcGxpZWRGaWx0ZXJzLnRyYW5zbWlzc2lvbnMsXHJcbiAgICAgIGZ1bGxSZXN1bHRzXHJcbiAgICApO1xyXG5cclxuICAgIC8vIGFpcmNvblxyXG4gICAgZnVsbFJlc3VsdHMgPSB0aGlzLmZpbHRlckJ5QWlyY29uVHlwZShcclxuICAgICAgYXBwbGllZEZpbHRlcnMuYWlyQ29uZGl0aW9uaW5nLFxyXG4gICAgICBmdWxsUmVzdWx0c1xyXG4gICAgKTtcclxuXHJcbiAgICAvLyBjYXIgdHlwZXMgKGNsYXNzKVxyXG4gICAgZnVsbFJlc3VsdHMgPSB0aGlzLmZpbHRlckJ5Q2FyVHlwZShhcHBsaWVkRmlsdGVycy50eXBlcywgZnVsbFJlc3VsdHMpO1xyXG5cclxuICAgIC8vIGNvbXBhbnlcclxuICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5maWx0ZXJCeUNvbXBhbnkoYXBwbGllZEZpbHRlcnMuY29tcGFuaWVzLCBmdWxsUmVzdWx0cyk7XHJcblxyXG4gICAgLy8gbGFzdGx5IGFwcGx5IGFueSByZXF1aXJlZCBzb3J0aW5nXHJcbiAgICBmdWxsUmVzdWx0cyA9IHRoaXMuc29ydFJlc3VsdHMoc2VsZWN0ZWRTb3J0LCBmdWxsUmVzdWx0cyk7XHJcblxyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoZnVsbFJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyQnlDb21wYW55KFxyXG4gICAgY29tcGFuaWVzOiBTZWxlY3RGaWx0ZXJbXSxcclxuICAgIGNhcnM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBjb21wYW5pZXMuZmlsdGVyKChjb21wYW55KSA9PiBjb21wYW55LnNlbGVjdGVkKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICAgIGNhcnMgPSBjYXJzLmZpbHRlcigoY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICBjb25zdCBoYXZlU2VsZWN0ZWQgPSBzZWxlY3RlZC5maW5kKFxyXG4gICAgICAgICAgKHNlbGM6IGFueSkgPT5cclxuICAgICAgICAgICAgc2VsYy52YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09XHJcbiAgICAgICAgICAgIGNhci5pZGVudGlmaWVycy52ZW5kb3IudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBoYXZlU2VsZWN0ZWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjYXJzO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyQnlDYXJUeXBlKFxyXG4gICAgdHlwZXM6IFNlbGVjdEZpbHRlcltdLFxyXG4gICAgY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXlcclxuICApOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICAvLyB0aGlzIGlzIGEgZmlsdGVyIHR5cGUgd2hpY2ggYWxsb3dzIG1vcmUgdGhhbiBvbmUgdG8gYmUgc2V0XHJcbiAgICAvLyBpZiBub25lIGFyZSBzZXQgYWxsb3cgYWxsIHRocm91Z2hcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHR5cGVzLmZpbHRlcigodHlwZSkgPT4gdHlwZS5zZWxlY3RlZCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkLmxlbmd0aCkge1xyXG4gICAgICBjYXJzID0gY2Fycy5maWx0ZXIoKGNhcjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGF2ZVNlbGVjdGVkID0gc2VsZWN0ZWQuZmluZChcclxuICAgICAgICAgIChzZWxjKSA9PlxyXG4gICAgICAgICAgICBzZWxjLnZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT1cclxuICAgICAgICAgICAgY2FyLmRpc3BsYXlSZWNvcmQudmVoaWNsZS5jbGFzcy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGhhdmVTZWxlY3RlZDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhcnM7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeVRyYW5zbWlzc2lvblR5cGUoXHJcbiAgICB0cmFubWlzc2lvbnM6IFNlbGVjdEZpbHRlcltdLFxyXG4gICAgY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXlcclxuICApOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFRyYW5zbWlzc2lvbiA9IHRyYW5taXNzaW9ucy5maW5kKCh0cmFucykgPT4ge1xyXG4gICAgICByZXR1cm4gdHJhbnMuc2VsZWN0ZWQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRUcmFuc21pc3Npb24gJiYgc2VsZWN0ZWRUcmFuc21pc3Npb24udmFsdWUgIT09ICdZJykge1xyXG4gICAgICAvLyBub3QgJ0FueSdcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjYXJzID0gY2Fycy5maWx0ZXIoKGNhcjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0cmFucyA9IGNhci5pZGVudGlmaWVycy52ZWhUeXBlWzJdO1xyXG5cclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRyYW5zLnRvTG93ZXJDYXNlKCkgPT09XHJcbiAgICAgICAgICAgIHNlbGVjdGVkVHJhbnNtaXNzaW9uLnZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGArKysgRXJyb3IgZmlsdGVyaW5nIHRyYW5zbWlzc2lvbnM6ICR7ZXJyb3J9ICsrK2ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhcnM7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeUFpcmNvblR5cGUoXHJcbiAgICBhaXJjb25zOiBTZWxlY3RGaWx0ZXJbXSxcclxuICAgIGNhcnM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRBaXJjb24gPSBhaXJjb25zLmZpbmQoKGFjKSA9PiB7XHJcbiAgICAgIHJldHVybiBhYy5zZWxlY3RlZDtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZEFpcmNvbiAmJiBzZWxlY3RlZEFpcmNvbi52YWx1ZSAhPT0gJ0EnKSB7XHJcbiAgICAgIC8vIG5vdCAnQW55J1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhcnMgPSBjYXJzLmZpbHRlcigoY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGFjID0gY2FyLmlkZW50aWZpZXJzLnZlaFR5cGVbM107XHJcblxyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgYWMudG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWRBaXJjb24udmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBFcnJvciBmaWx0ZXJpbmcgYWlyY29uczogJHtlcnJvcn0gKysrYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FycztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIHJlc3VsdHNcclxuICAgKiBAcGFyYW0gc2VsZWN0ZWRTb3J0IC0gdGhlIHNvcnQgd2UgaGF2ZSBjaG9zZW5cclxuICAgKiBAcGFyYW0gcmVzdWx0cyAtIG9wdGlvbmFsbHkgcGFzcyBpbiB0aGUgcmVzdWx0cywgaWYgbm90IHByb3ZpZGVkIC0gdXNlcyBpbnRlcm5hbCByZXN1bHRzIChub3QgZnVsbCwgd291bGQgY2F1c2UgaXNzdWVzKVxyXG4gICAqL1xyXG4gIHNvcnRSZXN1bHRzKFxyXG4gICAgc2VsZWN0ZWRTb3J0OiBudW1iZXIsXHJcbiAgICByZXN1bHRzPzogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXlcclxuICApOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBsZXQgZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlXHJcbiAgICApO1xyXG4gICAgc3dpdGNoIChzZWxlY3RlZFNvcnQpIHtcclxuICAgICAgY2FzZSAwOiAvLyBjaGVhcGVzdFxyXG4gICAgICAgIGZ1bGxSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcclxuICAgICAgICAgIChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT5cclxuICAgICAgICAgICAgdGhpcy5nZXRQcmljZShhKSAtIHRoaXMuZ2V0UHJpY2UoYilcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IC8vIGV4cGVuc2l2ZVxyXG4gICAgICAgIGZ1bGxSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcclxuICAgICAgICAgIChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT5cclxuICAgICAgICAgICAgdGhpcy5nZXRQcmljZShiKSAtIHRoaXMuZ2V0UHJpY2UoYSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6IC8vIHByZWZlcnJlZCBUT0RPXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzogLy8gYnJhbmRcclxuICAgICAgICBmdWxsUmVzdWx0cyA9IHRoaXMuc29ydEJ5QnJhbmQoZnVsbFJlc3VsdHMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6IC8vIHNpemVcclxuICAgICAgICBmdWxsUmVzdWx0cyA9IHRoaXMuc29ydEJ5U2l6ZShmdWxsUmVzdWx0cyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICAvLyBmYWxsYmFjayB0byB3aGF0ZXZlciB3YXMgYmVmb3JlXHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChmdWxsUmVzdWx0cyk7XHJcbiAgICByZXR1cm4gZnVsbFJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSByZXN1bHRzIGV4cGVuc2l2ZVxyXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gZnVsbCByZXN1bHRzIGZyb20gc29ydCByZXN1bHRzIGZ1bmN0aW9uXHJcbiAgICovXHJcblxyXG4gIHNvcnRFeHBlbnNpdmUocmVzdWx0cz86IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgY29uc3QgZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXHJcbiAgICAgIChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT5cclxuICAgICAgICB0aGlzLmdldFByaWNlKGIpIC0gdGhpcy5nZXRQcmljZShhKVxyXG4gICAgKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHNvcnRlZFJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHNvcnRlZFJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSByZXN1bHRzIGNoZWFwZXN0XHJcbiAgICogQHBhcmFtIHJlc3VsdHMgLSBmdWxsIHJlc3VsdHMgZnJvbSBzb3J0IHJlc3VsdHMgZnVuY3Rpb25cclxuICAgKi9cclxuXHJcbiAgc29ydENoZWFwZXN0KHJlc3VsdHM/OiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGNvbnN0IGZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICByZXN1bHRzID8gcmVzdWx0cyA6IHRoaXMucmVzdWx0cy52YWx1ZVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxyXG4gICAgICAoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+XHJcbiAgICAgICAgdGhpcy5nZXRQcmljZShhKSAtIHRoaXMuZ2V0UHJpY2UoYilcclxuICAgICk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChzb3J0ZWRSZXN1bHRzKTtcclxuICAgIHJldHVybiBzb3J0ZWRSZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc29ydCB0aGUgcmVzdWx0c1xyXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gZnVsbCByZXN1bHRzIGZyb20gc29ydCByZXN1bHRzIGZ1bmN0aW9uXHJcbiAgICovXHJcbiAgc29ydEJ5U2l6ZShyZXN1bHRzPzogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgcmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWVcclxuICAgICk7XHJcbiAgICBjb25zdCBzb3J0ZWRSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcclxuICAgICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgbGV0IGFWYWw6IG51bWJlcjtcclxuICAgICAgICBsZXQgYlZhbDogbnVtYmVyO1xyXG4gICAgICAgIGFWYWwgPSB0aGlzLmNhckNsYXNzTWFwW2EuZGlzcGxheVJlY29yZC52ZWhpY2xlLmNsYXNzLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgICAgIGJWYWwgPSB0aGlzLmNhckNsYXNzTWFwW2IuZGlzcGxheVJlY29yZC52ZWhpY2xlLmNsYXNzLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgICAgIGlmIChhVmFsID49IDAgJiYgYlZhbCA+PSAwKSB7XHJcbiAgICAgICAgICByZXR1cm4gYVZhbCAtIGJWYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAtMTsgLy8ganVzdCBwbGFjZSB0aGVtIGF0IGVuZCAgLSB1bnJlY29nbmlzZWQgcHJvZHVjdCBkZXNjcmlwdGlvblxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoc29ydGVkUmVzdWx0cyk7XHJcbiAgICByZXR1cm4gc29ydGVkUmVzdWx0cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIHJlc3VsdHNcclxuICAgKiBAcGFyYW0gcmVzdWx0cyAtIGZ1bGwgcmVzdWx0cyBmcm9tIHNvcnQgcmVzdWx0cyBmdW5jdGlvblxyXG4gICAqL1xyXG4gIHNvcnRCeUJyYW5kKHJlc3VsdHM/OiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGNvbnN0IGZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICByZXN1bHRzID8gcmVzdWx0cyA6IHRoaXMucmVzdWx0cy52YWx1ZVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxyXG4gICAgICAoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICBsZXQgYnJhbmRBID0gYS5pZGVudGlmaWVycy52ZW5kb3I7XHJcbiAgICAgICAgbGV0IGJyYW5kQiA9IGIuaWRlbnRpZmllcnMudmVuZG9yO1xyXG5cclxuICAgICAgICAvLyBzd2l0Y2hpbmcgYXMgdGhlc2Ugc3RyaW5ncyBkb24ndCBtYXRjaCB0aGUgYnJhbmQgbmFtZVxyXG4gICAgICAgIHN3aXRjaCAoYnJhbmRBKSB7XHJcbiAgICAgICAgICBjYXNlICdaRSc6XHJcbiAgICAgICAgICAgIGJyYW5kQSA9ICdIRSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnWkknOlxyXG4gICAgICAgICAgICBicmFuZEEgPSAnQVYnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCAoYnJhbmRCKSB7XHJcbiAgICAgICAgICBjYXNlICdaRSc6XHJcbiAgICAgICAgICAgIGJyYW5kQiA9ICdIRSc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnWkknOlxyXG4gICAgICAgICAgICBicmFuZEIgPSAnQVYnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChicmFuZEEgPCBicmFuZEIpIHtcclxuICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9IGVsc2UgaWYgKGJyYW5kQSA+IGJyYW5kQikge1xyXG4gICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChzb3J0ZWRSZXN1bHRzKTtcclxuICAgIHJldHVybiBzb3J0ZWRSZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBwcmljZSBvZiBhIGluZGl2aWR1YWwgY2FyXHJcbiAgICovXHJcbiAgZ2V0UHJpY2UoY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpOiBudW1iZXIge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIE51bWJlcihjYXIuZGlzcGxheVJlY29yZC5jaGFyZ2VzWzBdLmFtb3VudCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikgeyB9XHJcblxyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICBnZXRNaW5QcmljZShjYXJzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gY2Fycy5yZWR1Y2UoKG1pbjogbnVtYmVyLCBjYXI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICBjb25zdCBwcmljZSA9IHRoaXMuZ2V0UHJpY2UoY2FyKTtcclxuICAgICAgaWYgKHByaWNlIDwgbWluKSB7XHJcbiAgICAgICAgbWluID0gcHJpY2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG1pbjtcclxuICAgIH0sIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcclxuICB9XHJcblxyXG4gIGdldE1heFByaWNlKGNhcnM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogbnVtYmVyIHtcclxuICAgIHJldHVybiBjYXJzLnJlZHVjZSgobWF4OiBudW1iZXIsIGNhcjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHByaWNlID0gdGhpcy5nZXRQcmljZShjYXIpO1xyXG4gICAgICBpZiAocHJpY2UgPiBtYXgpIHtcclxuICAgICAgICBtYXggPSBwcmljZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbWF4O1xyXG4gICAgfSwgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMoXHJcbiAgICBwcmV2aW91c0l0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+XHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcIlBSRVBPUFVMQVRJTkcgQ0FSSElSRSBGT1JNXCIpXHJcbiAgICBjb25zdCBmbGlnaHRJdGVtOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyA9XHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XT8uc2VhcmNoUXVlcnk7XHJcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGxldCBzdGFydERhdGUgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5vdXRCb3VuZERhdGUudG9EYXRlKCk7XHJcbiAgICAgICAgbGV0IGVuZERhdGUgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5pbmJvdW5kRGF0ZS50b0RhdGUoKTtcclxuICAgICAgICB0aGlzLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuQWlycG9ydDtcclxuICAgICAgICB0aGlzLnBpY2t1cF9kYXRldGltZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLm91dEJvdW5kRGF0ZTtcclxuICAgICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5pbmJvdW5kRGF0ZTtcclxuICAgICAgICB0aGlzLnBpY2t1cF9kYXRlID0geyBkYXk6IHN0YXJ0RGF0ZS5nZXRVVENEYXRlKCksIG1vbnRoOiBzdGFydERhdGUuZ2V0VVRDTW9udGgoKSArIDEsIHllYXI6IHN0YXJ0RGF0ZS5nZXRVVENGdWxsWWVhcigpIH07XHJcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2RhdGUgPSB7IGRheTogZW5kRGF0ZS5nZXRVVENEYXRlKCksIG1vbnRoOiBlbmREYXRlLmdldFVUQ01vbnRoKCkgKyAxLCB5ZWFyOiBlbmREYXRlLmdldFVUQ0Z1bGxZZWFyKCkgfTtcclxuICAgICAgICB0aGlzLnBpY2t1cF9sb2NhdGlvbiA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLmFycml2ZUxvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzXHJcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2xvY2F0aW9uID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0uYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHNcclxuICAgICAgICB0aGlzLnBpY2t1cF9jb3VudHJ5ID0gKHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLmFycml2ZUxvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzKS5jb3VudHJ5Q29kZTtcclxuICAgICAgICB0aGlzLmRyb3BvZmZfY291bnRyeSA9ICh0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscykuY291bnRyeUNvZGU7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FyaGlyZSBmcm9tIGZsaWdodCBpdGVtXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAhZGF0ZSBhbmQgdGltZSBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGZvciBMVVxyXG4gIHByaXZhdGUgX3VwZGF0ZVBpY2t1cERhdGVUaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuX3BpY2t1cF9kYXRlICYmIHRoaXMuX3BpY2t1cF90aW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgdGhpcy5fcGlja3VwX2RhdGUsXHJcbiAgICAgICAgdGhpcy5fcGlja3VwX3RpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVEcm9wb2ZmRGF0ZVRpbWUoKSB7XHJcbiAgICBpZiAodGhpcy5fZHJvcG9mZl9kYXRlICYmIHRoaXMuX2Ryb3BvZmZfdGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICAgIHRoaXMuX2Ryb3BvZmZfZGF0ZSxcclxuICAgICAgICB0aGlzLl9kcm9wb2ZmX3RpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5kcm9wb2ZmX2RhdGV0aW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlTmdiUGlja3VwRGF0ZVRpbWUoKSB7XHJcbiAgICBpZiAodGhpcy5fbmdiUGlja3VwRGF0ZSAmJiB0aGlzLl9waWNrdXBUaW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgdGhpcy5fbmdiUGlja3VwRGF0ZSxcclxuICAgICAgICB0aGlzLl9waWNrdXBUaW1lXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucGlja3VwX2RhdGV0aW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlTmdiRHJvcG9mZkRhdGVUaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuX25nYkRyb3BvZmZEYXRlICYmIHRoaXMuX2Ryb3BvZmZUaW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgdGhpcy5fbmdiRHJvcG9mZkRhdGUsXHJcbiAgICAgICAgdGhpcy5fZHJvcG9mZlRpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5kcm9wb2ZmX2RhdGV0aW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNPdmVyTmlnaHQoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvdXR3YXJkRGF5ID0gdGhpcy5waWNrdXBfZGF0ZXRpbWUuZGF0ZSgpO1xyXG4gICAgY29uc3QgcmV0dXJuRGF5ID0gdGhpcy5kcm9wb2ZmX2RhdGV0aW1lLmRhdGUoKTtcclxuICAgIGlmIChyZXR1cm5EYXkgLSBvdXR3YXJkRGF5ID49IDEpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IElDaGVhcGVzdFByaWNlIHtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgbWluUHJpY2UgPSB0aGlzLmdldE1pblByaWNlKHJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYW1vdW50OiBtaW5QcmljZSxcclxuICAgICAgY3VycmVuY3lDb2RlOiByZXN1bHRzWzBdLmRpc3BsYXlSZWNvcmQuY2hhcmdlc1swXS5jdXJyZW5jeUNvZGVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgdGhlIGF2YWlsYWJpbGl0eSBkZXRhaWxzIGZvciBhIHBhcnRpY3VsYXIgY2FyIGhpcmUgcmVzdWx0IHVzaW5nIGxvY2F0aW9uRGV0YWlscyBwYXJhbVxyXG4gICAqIEBwYXJhbSBsb2NhdGlvbkRldGFpbHMgLSBlLmcuIHRha2VuIGZyb20gcmVzcG9uc2UgZGF0YSBpbiBzZWFyY2hDYXJIaXJlIHF1ZXJ5XHJcbiAgICogQHBhcmFtIGlzTG9hZGluZyBiZWhhdmlvdXJTdWJqZWN0IGZvciBoYW5kbGluZyBsb2FkaW5nIHNwaW5uZXIgc3RhdGUgb2YgcmVxdWVzdFxyXG4gICAqL1xyXG4gIGdldENhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWwoXHJcbiAgICBsb2NhdGlvbkRldGFpbHM6IENhckhpcmVJbnB1dElkZW50aWZpZXJzLFxyXG4gICAgaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPENhckhpcmVEZXRhaWxSZXF1ZXN0UmVzcG9uc2U+IHtcclxuICAgIGlmICghaXNMb2FkaW5nLnZhbHVlKSB7XHJcbiAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJcclxuICAgICAgLmZldGNoTGlzdCh7IGxvY2F0aW9uRGV0YWlscyB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIG1hcCgocmVzdWx0OiBDYXJIaXJlRGV0YWlsUmVxdWVzdFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXNMb2FkaW5nLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGFkZCBjYXIgaGlyZSB0byBiYXNrZXRcclxuICAgKi9cclxuICBhc3luYyBhZGRDYXJIaXJlVG9CYXNrZXQoXHJcbiAgICBjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eTogQ2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHksXHJcbiAgICBjYXJIaXJlUXVlcnk6IFNlYXJjaENhckhpcmVRdWVyeVZhcmlhYmxlc1xyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5LnVuYXZhaWxhYmxlKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBpZiAoYmFza2V0KSB7XHJcbiAgICAgIGNvbnN0IHtcclxuICAgICAgICBjbzJQZXJJdGVtLFxyXG4gICAgICAgIGNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICBkaXNwbGF5UmVjb3JkLFxyXG4gICAgICAgIGlkZW50aWZpZXJzLFxyXG4gICAgICAgIHNvdXJjZUlkXHJcbiAgICAgIH0gPSBjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eTtcclxuICAgICAgY29uc3QgcHJpY2UgPSBwYXJzZUZsb2F0KGRpc3BsYXlSZWNvcmQ/LmNoYXJnZXNbMF0/LmFtb3VudCA/PyAnMCcpO1xyXG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChcclxuICAgICAgICBjYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eSxcclxuICAgICAgICBjYXJIaXJlUXVlcnlcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgICAgICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICAgIHBpY2tVcERhdGV0aW1lOiBkaXNwbGF5UmVjb3JkLnBpY2t1cCxcclxuICAgICAgICAgICAgZHJvcE9mZkRhdGV0aW1lOiBkaXNwbGF5UmVjb3JkLmRyb3BvZmYsXHJcbiAgICAgICAgICAgIHBpY2tVcExvY2F0aW9uOiB7XHJcbiAgICAgICAgICAgICAgaWF0YTpcclxuICAgICAgICAgICAgICAgIHRoaXMubG9jYXRpb25UeXBlID09PSBMb2NhdGlvblR5cGVzLkFpcnBvcnRcclxuICAgICAgICAgICAgICAgICAgPyBpZGVudGlmaWVycy5sb2NhdGlvbkNvZGVcclxuICAgICAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgICBuYW1lOiBkaXNwbGF5UmVjb3JkLnBpY2t1cExvY2F0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgYWRkcmVzczogYCR7ZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi50b3BMaW5lfSwgJHtkaXNwbGF5UmVjb3JkLnBpY2t1cExvY2F0aW9uLmNpdHl9YCxcclxuICAgICAgICAgICAgICBwb3N0Y29kZTogZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi5wb3N0Q29kZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkcm9wT2ZmTG9jYXRpb246IHtcclxuICAgICAgICAgICAgICBpYXRhOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhdGlvblR5cGUgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydFxyXG4gICAgICAgICAgICAgICAgICA/IGlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvblxyXG4gICAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgIG5hbWU6IGRpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24ubmFtZSxcclxuICAgICAgICAgICAgICBhZGRyZXNzOiBgJHtkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLnRvcExpbmV9LCAke2Rpc3BsYXlSZWNvcmQucmV0dXJuTG9jYXRpb24uY2l0eX1gLFxyXG4gICAgICAgICAgICAgIHBvc3Rjb2RlOiBkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLnBvc3RDb2RlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhcjoge1xyXG4gICAgICAgICAgICAgIHR5cGU6IGRpc3BsYXlSZWNvcmQudmVoaWNsZS50eXBlLFxyXG4gICAgICAgICAgICAgIG1hbnVhbFRyYW5zbWlzc2lvbjogZGlzcGxheVJlY29yZC52ZWhpY2xlLnRyYW5zbWlzc2lvbi5pbmNsdWRlcyhcclxuICAgICAgICAgICAgICAgIENhckhpcmVUcmFuc21pc3Npb24uTWFudWFsXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB2ZW5kb3JOYW1lOiBkaXNwbGF5UmVjb3JkLnZlbmRvci5uYW1lLFxyXG4gICAgICAgICAgICBpZGVudGlmaWVyczoge1xyXG4gICAgICAgICAgICAgIGRyb3BPZmZMb2NhdGlvbjogaWRlbnRpZmllcnMuZHJvcE9mZkxvY2F0aW9uLFxyXG4gICAgICAgICAgICAgIGxvY2F0aW9uQ29kZTogaWRlbnRpZmllcnMubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgICAgIGxvY2F0aW9uTmFtZTogaWRlbnRpZmllcnMubG9jYXRpb25OYW1lLFxyXG4gICAgICAgICAgICAgIHZlaFR5cGU6IGlkZW50aWZpZXJzLnZlaFR5cGUsXHJcbiAgICAgICAgICAgICAgdmVuZG9yOiBpZGVudGlmaWVycy52ZW5kb3JcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBwcmljZSxcclxuICAgICAgICAgIGN1cnJlbmN5OiAnR0JQJyBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeTogY2FySGlyZVF1ZXJ5LFxyXG4gICAgICAgICAgY28yUGVySXRlbSxcclxuICAgICAgICAgIGNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICAgIG91dGJvdW5kRGF0ZTogbmV3IERhdGUoZGlzcGxheVJlY29yZC5waWNrdXApLnRvSVNPU3RyaW5nKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vIFRPRE8gd2FpdGluZyBmb3IgZGF0YVxyXG4gIGdldFRlcm1zQW5kQ29uZChcclxuICAgIGNhckhpcmVWZWhpY2xlOiBDYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eSxcclxuICAgIGNhckhpcmVRdWVyeTogU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FkZGl0aW9uYWwgRHJpdmVyJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBZ2UgUmVxdWlyZW1lbnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdDcm9zcyBCb3JkZXIgUG9saWN5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEYW1hZ2UgV2FpdmVyJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEZWJpdCBDYXJkIFBvbGljeScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnT25lIFdheSBEcm9wIFBvbGljeScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRXh0ZW5kZWQgUHJvdGVjdGlvbicsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRXhjZXNzIFByb3RlY3Rpb24nLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0luY2x1c2l2ZSBQb2xpY3knLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01pbGVhZ2UgUG9saWN5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNaXNjZWxsYW5lb3VzIFBvbGljeScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRm9ybXMgb2YgUGF5bWVudCcsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUm9hZHNpZGUgUHJvdGVjdGlvbicsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUmVudGVyIFJlcXVpcmVtZW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVGhpcmQgUGFydHkgTGlhYmlsaXR5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PiB7XHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5OiBRdWVyeVNlYXJjaENhckhpcmVBcmdzID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICBjb25zdCBmYXZvdXJpdGVTZWFyY2hRdWVyeTogQ2FySGlyZVNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG4gICAgICBjb25zdCBzZWFyY2hJbmZvID0ge1xyXG4gICAgICAgIG5hbWU6IGAke21vbWVudCgpfWAsXHJcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkNhcixcclxuICAgICAgICBzZWFyY2hBcmdzOiBmYXZvdXJpdGVTZWFyY2hRdWVyeVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19