@sabstravtech/obtservices 0.2.2505190850 → 0.2.2505201645

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.
@@ -2,7 +2,7 @@ import { __awaiter } from "tslib";
2
2
  import moment from 'moment';
3
3
  import { BaseEnterpriseSearch } from './base-enterprise';
4
4
  import { BaseHelperRoutines } from './helpers';
5
- import { BehaviorSubject, firstValueFrom, Subject } from 'rxjs';
5
+ import { BehaviorSubject, Subject } from 'rxjs';
6
6
  import { DifferentInvokdedUserReasons, ServiceProvider, LocationTypes } from '../types/types';
7
7
  import { AddressType, CabHireVehicleType, MessageType, ServiceType, TransportType } from '../types/graphql.types';
8
8
  import { AirportSearchMode, TaxiFormMode } from '../interfaces/Icabhire-enterprise-search';
@@ -1290,7 +1290,7 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
1290
1290
  const term = location.buildingName.replace(/^[^,]+,\s*/, "");
1291
1291
  const isTrueSubject = new BehaviorSubject(true);
1292
1292
  if (location.terminal) { // airport type
1293
- const locations = yield firstValueFrom(this.searchService.getAirportLocations(term, location.countryCode, isTrueSubject));
1293
+ const locations = yield this.searchService.getAirportLocations(term, location.countryCode, isTrueSubject).toPromise();
1294
1294
  if (locations === null || locations === void 0 ? void 0 : locations.length) {
1295
1295
  const { airport, name, type } = locations[0];
1296
1296
  return {
@@ -1305,7 +1305,7 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
1305
1305
  }
1306
1306
  }
1307
1307
  else if (location.buildingName === location.streetAndNumber) { // Train St. type
1308
- const locations = yield firstValueFrom(this.searchService.getStationLocations(term, isTrueSubject));
1308
+ const locations = yield this.searchService.getStationLocations(term, isTrueSubject).toPromise();
1309
1309
  if (locations === null || locations === void 0 ? void 0 : locations.length) {
1310
1310
  const { name, railstation, type } = locations[0];
1311
1311
  return {
@@ -1395,4 +1395,4 @@ CabHireEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_cab';
1395
1395
  CabHireEnterpriseSearch.SECONDARY_STORAGE_SESSION_PARAMS = 'secondary_search_cab';
1396
1396
  CabHireEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_cab';
1397
1397
  CabHireEnterpriseSearch.MULTI_STORAGE_SESSION_RESULTS = 'multi_results_cab';
1398
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FiaGlyZS1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9jYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1RSxPQUFPLEVBT0wsNEJBQTRCLEVBQzVCLGVBQWUsRUFFZixhQUFhLEVBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQU14QixPQUFPLEVBQ0wsV0FBVyxFQUlYLGtCQUFrQixFQUdsQixXQUFXLEVBWVgsV0FBVyxFQUNYLGFBQWEsRUFDZCxNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCxpQkFBaUIsRUFLakIsWUFBWSxFQUViLE1BQU0sMENBQTBDLENBQUM7QUFTbEQsTUFBTSxPQUFPLHVCQUNYLFNBQVEsb0JBQXlGO0lBK2RqRyxZQUNVLFVBQXlDLEVBQ2pELE9BQTJCLEVBQzNCLGNBQWtDLEVBQ2xDLGFBQStDLEVBQ3ZDLGFBQStDLEVBQ3ZELFdBQWlDO1FBRWpDLEtBQUssQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQVBuRCxlQUFVLEdBQVYsVUFBVSxDQUErQjtRQUl6QyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUEzZGxELFNBQUksR0FBZ0IsV0FBVyxDQUFDLEdBQUcsQ0FBQztRQUNuQyxlQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUNyQyxrQkFBYSxHQUF5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QUFHLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcbmltcG9ydCB7XG4gIEFkZHJlc3NGb3JtLFxuICBDYWJoaXJlUXVvdGVSZXN1bHRBcnJheSxcbiAgTmdiRGF0ZVN0cnVjdCxcbiAgUmFpbEFpcnBvcnQsXG4gIFJlY2VudFNlYXJjaCxcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdCxcbiAgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucyxcbiAgU2VydmljZVByb3ZpZGVyLFxuICBLZXlWYWx1ZSxcbiAgTG9jYXRpb25UeXBlc1xufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyLFxuICBDYWJoaXJlUXVvdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9jYWJoaXJlLXF1b3RlLWZldGNoZXInO1xuaW1wb3J0IHtcbiAgQWRkcmVzc1R5cGUsXG4gIEJhc2tldEl0ZW0sXG4gIENhYkhpcmVMb2NhdGlvbklucHV0LFxuICBDYWJIaXJlUXVvdGUsXG4gIENhYkhpcmVWZWhpY2xlVHlwZSxcbiAgQ3VycmVuY3lDb2RlLFxuICBMb2NhdGlvbkRldGFpbCxcbiAgTWVzc2FnZVR5cGUsXG4gIFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MsXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcbiAgU2VhcmNoQ2FiSGlyZVF1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaEV1cm9zdGFyUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaExvdW5nZXNRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoUGFya2luZ1F1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMsXG4gIFNlcnZpY2VUeXBlLFxuICBUcmFuc3BvcnRUeXBlXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xuaW1wb3J0IHtcbiAgQWlycG9ydFNlYXJjaE1vZGUsXG4gIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxuICBDYWJIaXJlVGVtcFBhcmFtcyxcbiAgVGF4aUFpcnBvcnQsXG4gIFRheGlBdHRyaWJ1dGUsXG4gIFRheGlGb3JtTW9kZSxcbiAgVHJhbnNUeXBlXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWNhYmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHtcbiAgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcbmltcG9ydCB7IElDYWJIaXJlU2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FiLWhpcmUtc2VhcmNoLWFyZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2g8Q0hfUSBleHRlbmRzIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlPlxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPENhYkhpcmVUZW1wUGFyYW1zLCBDYWJoaXJlUXVvdGVSZXN1bHRBcnJheSwgQ2FiaGlyZVF1b3RlUmVzdWx0QXJyYXk+XG4gIGltcGxlbWVudHMgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2VcbntcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2NhYic7XG4gIHN0YXRpYyByZWFkb25seSBTRUNPTkRBUllfU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWNvbmRhcnlfc2VhcmNoX2NhYic7XG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyZXN1bHRzX2NhYic7XG4gIHN0YXRpYyByZWFkb25seSBNVUxUSV9TVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdtdWx0aV9yZXN1bHRzX2NhYic7XG4gIHByaXZhdGUgb3V0Ym91bmRWaXNpYmlsaXR5OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgaW5ib3VuZFZpc2liaWxpdHk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuQ2FiO1xuICBwcml2YXRlIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gW107XG4gIGFpcnBvcnRDaGFuZ2U6IFN1YmplY3Q8VGF4aUFpcnBvcnQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICByZWFkb25seSB0cmFuc1R5cGVzOiBUcmFuc1R5cGVbXSA9IFtcbiAgICB7IGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkFueSwgdmFsdWU6ICdBbnkgKDEtOCBQYXNzZW5nZXJzKScsIGlkOiA4IH0sXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuU3RhbmRhcmRDYXIsXG4gICAgICB2YWx1ZTogJ1NhbG9vbiBDYXIgKDEtNCBQYXNzZW5nZXJzKScsXG4gICAgICBpZDogNFxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuQmxhY2tDYWIsXG4gICAgICB2YWx1ZTogJ0hhY2tuZXkgQ2FycmlhZ2UgKDEtNCBQYXNzZW5nZXJzKScsXG4gICAgICBpZDogNFxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuRGRhQ2FyLFxuICAgICAgdmFsdWU6ICdEZGEgLSB3aGVlbGNoYWlyIGFjY2Vzc2libGUgKDEtNCBQYXNzZW5nZXJzKScsXG4gICAgICBpZDogNFxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuTWVkaXVtTXB2LFxuICAgICAgdmFsdWU6ICdQZW9wbGUgQ2FycmllciAoMS03IFBhc3NlbmdlcnMpJyxcbiAgICAgIGlkOiA3XG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5FeGVjdXRpdmVDYXIsXG4gICAgICB2YWx1ZTogJ0V4ZWN1dGl2ZSAoMS00IFBhc3NlbmdlcnMpJyxcbiAgICAgIGlkOiA0XG4gICAgfVxuICBdO1xuXG4gIHJlYWRvbmx5IGdyb3VuZHNwYW5UcmFuc1R5cGVzOiBUcmFuc1R5cGVbXSA9IFtcbiAgICAuLi50aGlzLnRyYW5zVHlwZXMsXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuTGltbyxcbiAgICAgIHZhbHVlOiAnQ2hhdWZmZXVyIENhcicsXG4gICAgICBpZDogN1xuICAgIH1cbiAgXTtcblxuICByZWFkb25seSBjbWFjVHJhbnNUeXBlczogVHJhbnNUeXBlW10gPSBbXG4gICAgLi4udGhpcy50cmFuc1R5cGVzLFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkRkYUNvYWNoLFxuICAgICAgdmFsdWU6ICdEZGEgQ29hY2ggLSB3aGVlbGNoYWlyIGFjY2Vzc2libGUgKDMwIC0gMTAwIHBhc3NlbmdlcnMpJyxcbiAgICAgIGlkOiAxMlxuICAgIH1cbiAgXS5zb3J0KChhLGIpID0+IHtcbiAgICBpZiAoYS52YWx1ZSA+IGIudmFsdWUpIHJldHVybiAxO1xuICAgIGlmIChhLnZhbHVlIDwgYi52YWx1ZSkgcmV0dXJuIC0xO1xuICAgIHJldHVybiAwO1xuICB9KVxuXG4gIHJlYWRvbmx5IGxpbW9UeXBlczogS2V5VmFsdWU8Q2FiSGlyZVZlaGljbGVUeXBlLCBzdHJpbmc+W10gPSBbXG4gICAgeyBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5BbnksXG4gICAgICB2YWx1ZTogJ0FsbCdcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkxpbW8sXG4gICAgICB2YWx1ZTogJ0xpbW8nXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5MaW1vQnVzLFxuICAgICAgdmFsdWU6ICdMaW1vIEJ1cydcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLk1pbmlCdXMsXG4gICAgICB2YWx1ZTogJ01pbmkgQnVzJ1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuTWluaUNvYWNoLFxuICAgICAgdmFsdWU6ICdNaW5pIENvYWNoJ1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuU2VkYW4sXG4gICAgICB2YWx1ZTogJ1NlZGFuJ1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuU3V2LFxuICAgICAgdmFsdWU6ICdTdXYnXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5WYW4sXG4gICAgICB2YWx1ZTogJ1ZhbidcbiAgICB9XG4gIF07XG5cbiAgcmVhZG9ubHkgYXR0cmlidXRlczogVGF4aUF0dHJpYnV0ZVtdID0gW1xuICAgIHsgZW5hYmxlZDogZmFsc2UsIGtleTogJ3doZWVsY2hhaXInLCB2YWx1ZTogJ1doZWVsY2hhaXIgKE9uIFJlcXVlc3QpJyB9LFxuICAgIHsgZW5hYmxlZDogZmFsc2UsIGtleTogJ2NhbGxfb25fYXJyaXZhbCcsIHZhbHVlOiAnQ2FsbCBPbiBBcnJpdmFsJyB9LFxuICAgIHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAga2V5OiAnbWVldF9hbmRfZ3JlZXQnLFxuICAgICAgdmFsdWU6ICdNZWV0IEFuZCBHcmVldCAoQ2hhcmdlIEFwcGxpZXMpJ1xuICAgIH0sXG4gICAgeyBlbmFibGVkOiBmYWxzZSwga2V5OiAnd2FpdF9hbmRfcmV0dXJuJywgdmFsdWU6ICdXYWl0IEFuZCBSZXR1cm4nIH1cbiAgXTtcbiAgcmVhZG9ubHkgc2VhcmNoVHlwZXMgPSBbJ09uZS13YXknLCAnUmV0dXJuJ107XG5cbiAgcmVhZG9ubHkgYWlycG9ydFNlYXJjaFR5cGVzID0gWydBaXJwb3J0IGRyb3Agb2ZmJywgJ0FpcnBvcnQgUGljayBVcCddO1xuICByZWFkb25seSBjcml0ZXJpYSA9IFsnUGljayBVcCBUaW1lJ107XG5cbiAgbW9kZTogVGF4aUZvcm1Nb2RlID0gVGF4aUZvcm1Nb2RlLkFERFJFU1M7XG4gIG1vZGVUbzogVGF4aUZvcm1Nb2RlID0gVGF4aUZvcm1Nb2RlLkFERFJFU1M7XG4gIG1pblNlbGVjdERhdGU6IG1vbWVudC5Nb21lbnQgPSBtb21lbnQoKTtcbiAgbWluUmV0dXJuU2VsZWN0RGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKSxcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpXG4gIH07XG5cbiAgLy8gZ2V0dGVycyBhbmQgc2V0dGVyc1xuICBwcml2YXRlIF9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcbiAgc2VsZWN0ZWRQbGFjZXM6IGFueSA9IFtdO1xuICBwcml2YXRlIF9mcm9tTG9jYXRpb246IENhYkhpcmVMb2NhdGlvbklucHV0O1xuICBwcml2YXRlIF90b0xvY2F0aW9uOiBDYWJIaXJlTG9jYXRpb25JbnB1dDtcbiAgcHJpdmF0ZSBfdmlhczogQ2FiSGlyZUxvY2F0aW9uSW5wdXRbXSA9IFtudWxsLCBudWxsLCBudWxsLCBudWxsXTtcblxuICBnZXQgZnJvbUxvY2F0aW9uKCk6IENhYkhpcmVMb2NhdGlvbklucHV0IHtcbiAgICByZXR1cm4gdGhpcy5fZnJvbUxvY2F0aW9uO1xuICB9XG5cbiAgZ2V0IHRvTG9jYXRpb24oKTogQ2FiSGlyZUxvY2F0aW9uSW5wdXQge1xuICAgIHJldHVybiB0aGlzLl90b0xvY2F0aW9uO1xuICB9XG5cbiAgZ2V0IGRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGU7XG4gIH1cblxuICBzZXQgZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xuICAgIHRoaXMuX2RhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLl91cGRhdGVEYXRlVGltZSgpO1xuICB9XG5cbiAgLypcbiAgICogc2VhcmNoVHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBfc2VhcmNoVHlwZSA9IHRoaXMuc2VhcmNoVHlwZXNbMF07XG4gIGdldCBzZWFyY2hUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hUeXBlO1xuICB9XG5cbiAgc2V0IHNlYXJjaFR5cGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3NlYXJjaFR5cGUgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICAvKlxuICAgKiBhaXJwb2lydCBzZWFyY2hUeXBlXG4gICAqL1xuXG4gIF9haXJwb3J0U2VhcmNoVHlwZTogQWlycG9ydFNlYXJjaE1vZGUgPSBBaXJwb3J0U2VhcmNoTW9kZS5EUk9QT0ZGO1xuICBnZXQgYWlycG9ydFNlYXJjaFR5cGUoKTogQWlycG9ydFNlYXJjaE1vZGUge1xuICAgIHJldHVybiB0aGlzLl9haXJwb3J0U2VhcmNoVHlwZTtcbiAgfVxuICBzZXQgYWlycG9ydFNlYXJjaFR5cGUobW9kZTogQWlycG9ydFNlYXJjaE1vZGUpIHtcbiAgICB0aGlzLl9haXJwb3J0U2VhcmNoVHlwZSA9IG1vZGU7XG4gICAgaWYgKHRoaXMuZnJvbUFkZHJlc3MgfHwgdGhpcy50b0FkZHJlc3MpIHtcbiAgICAgIHRoaXMuc3dpdGNoRnJvbUFuZFRvTG9jYXRpb24oKTtcbiAgICB9XG4gIH1cbiAgLypcbiAgICogYWlycG9pcnQgYW5kIHRyYWluIHN0YXRpb24gc2VhcmNoVHlwZVxuICAgKi9cblxuICBnZXQgZnJvbUxvY2F0aW9uVHlwZSgpOiBUYXhpRm9ybU1vZGUge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZnJvbUxvY2F0aW9uVHlwZTtcbiAgfVxuICBzZXQgZnJvbUxvY2F0aW9uVHlwZShtb2RlOiBUYXhpRm9ybU1vZGUpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuZnJvbUxvY2F0aW9uVHlwZSA9IG1vZGU7XG4gIH1cbiAgZ2V0IHRvTG9jYXRpb25UeXBlKCk6IFRheGlGb3JtTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50b0xvY2F0aW9uVHlwZTtcbiAgfVxuICBzZXQgdG9Mb2NhdGlvblR5cGUobW9kZTogVGF4aUZvcm1Nb2RlKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnRvTG9jYXRpb25UeXBlID0gbW9kZTtcbiAgfVxuXG4gIGdldCBzcGVjaWFsUmVxdWlyZW1lbnRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5zcGVjaWFsUmVxdWlyZW1lbnRzO1xuICB9XG5cbiAgc2V0IHNwZWNpYWxSZXF1aXJlbWVudHMobmV3UmVxOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuc3BlY2lhbFJlcXVpcmVtZW50cyA9IG5ld1JlcTtcbiAgfVxuICAvKlxuICAgKiBzZWFyY2hDcml0ZXJpYVxuICAgKi9cbiAgcHJpdmF0ZSBfc2VhcmNoQ3JpdGVyaWEgPSB0aGlzLmNyaXRlcmlhWzBdO1xuICBnZXQgc2VhcmNoQ3JpdGVyaWEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaENyaXRlcmlhO1xuICB9XG5cbiAgc2V0IHNlYXJjaENyaXRlcmlhKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZWFyY2hDcml0ZXJpYSA9IHZhbHVlO1xuICB9XG5cbiAgLypcbiAgICogb3V0Ym91bmREYXRlVGltZVxuICAgKi9cbiAgcHJpdmF0ZSBfb3V0Ym91bmREYXRlVGltZTogbW9tZW50Lk1vbWVudCA9IHRoaXMuaGVscGVycy5yb3VuZChcbiAgICBtb21lbnQoKSxcbiAgICBtb21lbnQuZHVyYXRpb24oMTUsICdtaW51dGVzJylcbiAgKTtcbiAgZ2V0IG91dGJvdW5kRGF0ZVRpbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kRGF0ZVRpbWU7XG4gIH1cblxuICBzZXQgb3V0Ym91bmREYXRlVGltZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xuICAgIHRoaXMuX291dGJvdW5kRGF0ZVRpbWUgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qXG4gICAqIHJldHVybkRhdGVUaW1lXG4gICAqL1xuICBwcml2YXRlIF9yZXR1cm5EYXRlVGltZTogbW9tZW50Lk1vbWVudCA9IHRoaXMuaGVscGVycy5yb3VuZChcbiAgICBtb21lbnQoKSxcbiAgICBtb21lbnQuZHVyYXRpb24oMTUsICdtaW51dGVzJylcbiAgKTtcbiAgZ2V0IHJldHVybkRhdGVUaW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9yZXR1cm5EYXRlVGltZTtcbiAgfVxuXG4gIHNldCByZXR1cm5EYXRlVGltZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xuICAgIHRoaXMuX3JldHVybkRhdGVUaW1lID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgLypcbiAgICogYWlycG9ydFxuICAgKi9cblxuICBnZXQgYWlycG9ydCgpIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFpcnBvcnQ7XG4gIH1cbiAgc2V0IGFpcnBvcnQodmFsdWU6IFRheGlBaXJwb3J0KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmFpcnBvcnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qXG4gICAqIHRlcm1pbmFsXG4gICAqL1xuICBwcml2YXRlIF90ZXJtaW5hbDogc3RyaW5nID0gbnVsbDtcbiAgZ2V0IHRlcm1pbmFsKCkge1xuICAgIHJldHVybiB0aGlzLl90ZXJtaW5hbDtcbiAgfVxuICBzZXQgdGVybWluYWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3Rlcm1pbmFsID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF90aW1lOiBzdHJpbmcgPSBudWxsO1xuICBnZXQgdGltZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90aW1lO1xuICB9XG5cbiAgc2V0IHRpbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3RpbWUgPSB2YWx1ZTtcbiAgICB0aGlzLl91cGRhdGVEYXRlVGltZSgpO1xuICB9XG5cbiAgZ2V0IGRlcGFydHMoKTogbW9tZW50Lk1vbWVudCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRzO1xuICB9XG5cbiAgc2V0IGRlcGFydHModmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0cyA9IHZhbHVlLmlzVmFsaWQgPyB2YWx1ZSA6IG51bGw7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy5fZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XG4gICAgICB0aGlzLl90aW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMubWluUmV0dXJuU2VsZWN0RGF0ZSA9IHtcbiAgICAgIGRheTogbW9tZW50KHZhbHVlKS5kYXRlKCksXG4gICAgICBtb250aDogbW9tZW50KHZhbHVlKS5tb250aCgpICsgMSxcbiAgICAgIHllYXI6IG1vbWVudCh2YWx1ZSkueWVhcigpXG4gICAgfTtcblxuICAgIGlmICh2YWx1ZS5pc0FmdGVyKHRoaXMucmV0dXJuRGF0ZVRpbWUpKSB7XG4gICAgICB0aGlzLnJldHVybkRhdGVUaW1lLnNldCgnZGF0ZScsIHZhbHVlLmRhdGUoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgLy8gZ2V0IGZyb21Mb2NhdGlvbigpOiBDYWJIaXJlTG9jYXRpb24ge1xuICAvLyAgIHJldHVybiB0aGlzLl9mcm9tTG9jYXRpb247XG4gIC8vIH1cblxuICAvLyBzZXQgZnJvbUxvY2F0aW9uKHZhbHVlOiBDYWJIaXJlTG9jYXRpb24pIHtcbiAgLy8gICB0aGlzLl9mcm9tTG9jYXRpb24gPSB2YWx1ZTtcbiAgLy8gICB0aGlzLl9pc1ZhbGlkKCk7XG4gIC8vIH1cblxuICAvLyBnZXQgdG9Mb2NhdGlvbigpOiBDYWJIaXJlTG9jYXRpb24ge1xuICAvLyAgIHJldHVybiB0aGlzLl90b0xvY2F0aW9uO1xuICAvLyB9XG5cbiAgLy8gc2V0IHRvTG9jYXRpb24odmFsdWU6IENhYkhpcmVMb2NhdGlvbikge1xuICAvLyAgIHRoaXMuX3RvTG9jYXRpb24gPSB2YWx1ZTtcbiAgLy8gICB0aGlzLl9pc1ZhbGlkKCk7XG4gIC8vIH1cblxuICBnZXQgYWR1bHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hZHVsdHM7XG4gIH1cblxuICBzZXQgYWR1bHRzKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbjtcbiAgfVxuXG4gIHNldCBjaGlsZHJlbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGluZmFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluZmFudHM7XG4gIH1cblxuICBzZXQgaW5mYW50cyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmluZmFudHMgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgY291bnRyeUNvZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNvdW50cnlDb2RlO1xuICB9XG5cbiAgc2V0IGNvdW50cnlDb2RlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY291bnRyeUNvZGUgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgdmlhcygpOiBDYWJIaXJlTG9jYXRpb25JbnB1dFtdIHtcbiAgICByZXR1cm4gdGhpcy5fdmlhcztcbiAgfVxuXG4gIHNldCB2aWFzKHZhbHVlOiBDYWJIaXJlTG9jYXRpb25JbnB1dFtdKSB7XG4gICAgdGhpcy5fdmlhcyA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCB2aWFzRnJvbSgpOiBBZGRyZXNzRm9ybSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52aWFzRnJvbTtcbiAgfVxuXG4gIHNldCB2aWFzRnJvbSh2YWx1ZTogQWRkcmVzc0Zvcm0pIHtcbiAgICBjb25zdCBpc0NsZWFyT3JEZWZhdWx0ID0gdmFsdWUgJiYgT2JqZWN0LnZhbHVlcyh2YWx1ZSkuZmlsdGVyKHg9PngpLmxlbmd0aCA9PT0gMSA/IE9iamVjdC52YWx1ZXModmFsdWUpLmZpbHRlcih4PT54KVswXSA9PT0gJ0dCJzpmYWxzZTtcbiAgICB0aGlzLnRlbXBQYXJhbXMudmlhc0Zyb20gPSBpc0NsZWFyT3JEZWZhdWx0ID8gbnVsbCA6IHZhbHVlO1xuICAgIHRoaXMuX3ZpYXNbMF0gPSB2YWx1ZSAmJiAhaXNDbGVhck9yRGVmYXVsdCA/IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHZhbHVlKSA6IG51bGw7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHZpYXNUbygpOiBBZGRyZXNzRm9ybSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52aWFzVG87XG4gIH1cblxuICBzZXQgdmlhc1RvKHZhbHVlOiBBZGRyZXNzRm9ybSkge1xuICAgIGNvbnN0IGlzQ2xlYXJPckRlZmF1bHQgPSB2YWx1ZSAmJiBPYmplY3QudmFsdWVzKHZhbHVlKS5maWx0ZXIoeD0+eCkubGVuZ3RoID09PSAxID8gT2JqZWN0LnZhbHVlcyh2YWx1ZSkuZmlsdGVyKHg9PngpWzBdID09PSAnR0InOmZhbHNlO1xuICAgIHRoaXMudGVtcFBhcmFtcy52aWFzVG8gPSBpc0NsZWFyT3JEZWZhdWx0ID8gbnVsbCA6IHZhbHVlO1xuICAgIHRoaXMuX3ZpYXNbMV0gPSB2YWx1ZSAgJiYgIWlzQ2xlYXJPckRlZmF1bHQ/IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHZhbHVlKSA6IG51bGw7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHZlaGljbGVUeXBlKCk6IENhYkhpcmVWZWhpY2xlVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52ZWhpY2xlVHlwZTtcbiAgfVxuXG4gIHNldCB2ZWhpY2xlVHlwZSh2YWx1ZTogQ2FiSGlyZVZlaGljbGVUeXBlKSB7XG4gICAgaWYgKHZhbHVlICE9PSBDYWJIaXJlVmVoaWNsZVR5cGUuTGltbykge1xuICAgICAgdGhpcy5saW1vVHlwZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGltb1R5cGUgPSBDYWJIaXJlVmVoaWNsZVR5cGUuQW55O1xuICAgIH1cbiAgICB0aGlzLnRlbXBQYXJhbXMudmVoaWNsZVR5cGUgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgbGltb1R5cGUoKTogQ2FiSGlyZVZlaGljbGVUeXBlIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmxpbW9UeXBlO1xuICB9XG5cbiAgc2V0IGxpbW9UeXBlKHZhbHVlOiBDYWJIaXJlVmVoaWNsZVR5cGUpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMubGltb1R5cGUgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgbGltb0FzRGlyZWN0ZWREdXJhdGlvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubGltb0FzRGlyZWN0ZWREdXJhdGlvbjtcbiAgfVxuXG4gIHNldCBsaW1vQXNEaXJlY3RlZER1cmF0aW9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMubGltb0FzRGlyZWN0ZWREdXJhdGlvbiA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCB0cmFuc3BvcnRUeXBlKCk6IFRyYW5zcG9ydFR5cGUge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudHJhbnNwb3J0VHlwZTtcbiAgfVxuXG4gIHNldCB0cmFuc3BvcnRUeXBlKHZhbHVlOiBUcmFuc3BvcnRUeXBlKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnRyYW5zcG9ydFR5cGUgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgZnJvbUFkZHJlc3MoKTogQWRkcmVzc0Zvcm0ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3M7XG4gIH1cblxuICBzZXQgZnJvbUFkZHJlc3ModmFsdWU6IEFkZHJlc3NGb3JtKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzID0gdmFsdWU7XG4gICAgdGhpcy5fZnJvbUxvY2F0aW9uID0gdmFsdWUgPyB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih2YWx1ZSkgOiBudWxsO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBmcm9tU3RhdGlvbigpOiBSYWlsQWlycG9ydCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5mcm9tU3RhdGlvbjtcbiAgfVxuXG4gIHNldCBmcm9tU3RhdGlvbih2YWx1ZTogUmFpbEFpcnBvcnQpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuZnJvbVN0YXRpb24gPSB2YWx1ZTtcbiAgICB0aGlzLl9mcm9tTG9jYXRpb24gPSB2YWx1ZVxuICAgICAgPyB7XG4gICAgICAgIGJ1aWxkaW5nTmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgc3RyZWV0QW5kTnVtYmVyOiB2YWx1ZS5kZXN0aW5hdGlvbixcbiAgICAgICAgdG93bjogJycsXG4gICAgICAgIGNvdW50eTogJycsXG4gICAgICAgIGNvdW50cnlDb2RlOiB2YWx1ZS5kZXN0aW5hdGlvbixcbiAgICAgICAgcG9zdGNvZGU6IHZhbHVlLnBvc3Rjb2RlXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgdG9BZGRyZXNzKCk6IEFkZHJlc3NGb3JtIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcztcbiAgfVxuXG4gIHNldCB0b0FkZHJlc3ModmFsdWU6IEFkZHJlc3NGb3JtKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcyA9IHZhbHVlO1xuICAgIHRoaXMuX3RvTG9jYXRpb24gPSB2YWx1ZSA/IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHZhbHVlKSA6IG51bGw7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHRvU3RhdGlvbigpOiBSYWlsQWlycG9ydCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50b1N0YXRpb247XG4gIH1cblxuICBzZXQgdG9TdGF0aW9uKHZhbHVlOiBSYWlsQWlycG9ydCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy50b1N0YXRpb24gPSB2YWx1ZTtcbiAgICB0aGlzLl90b0xvY2F0aW9uID0gdmFsdWVcbiAgICAgID8ge1xuICAgICAgICBidWlsZGluZ05hbWU6IHZhbHVlLmFpcnBvcnQ/Lm5hbWUgPyB2YWx1ZS5haXJwb3J0Lm5hbWUgOiB2YWx1ZS5uYW1lLFxuICAgICAgICBzdHJlZXRBbmROdW1iZXI6IHZhbHVlLmFpcnBvcnQ/LmRlc3RpbmF0aW9uID8gdmFsdWUuYWlycG9ydC5kZXN0aW5hdGlvbiA6IHZhbHVlLmRlc3RpbmF0aW9uLFxuICAgICAgICB0b3duOiAnJyxcbiAgICAgICAgY291bnR5OiAnJyxcbiAgICAgICAgY291bnRyeUNvZGU6IHZhbHVlLmFpcnBvcnQ/LmNvdW50cnlDb2RlID8gdmFsdWUuYWlycG9ydC5jb3VudHJ5Q29kZSA6IHZhbHVlLmRlc3RpbmF0aW9uLFxuICAgICAgICBwb3N0Y29kZTogdmFsdWUuYWlycG9ydD8ucG9zdGNvZGUgPyB2YWx1ZS5haXJwb3J0LnBvc3Rjb2RlIDogdmFsdWUucG9zdGNvZGVcbiAgICAgICAgfVxuICAgICAgOiBudWxsO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2FiZmV0Y2hlcjogQmFzZUNhYmhpcmVRdW90ZUZldGNoZXI8Q0hfUT4sXG4gICAgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcbiAgICB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2VcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMsIHNlYXJjaFNlcnZpY2UsIHVzZXJTZXJ2aWNlKTtcbiAgICBjb25zdCBkYXRhOiB7XG4gICAgICB0ZW1wUGFyYW1zOiBDYWJIaXJlVGVtcFBhcmFtcztcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oQ2FiSGlyZUVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUykgfHwge1xuICAgICAgdGVtcFBhcmFtczoge30gYXMgQ2FiSGlyZVRlbXBQYXJhbXNcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHNlYXJjaFNlcnZpY2UubWFrZUNhYkhpcmVRdWVyeShkYXRhLnRlbXBQYXJhbXMpKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXR1cm5EYXRhOiBhbnkgPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShcbiAgICAgICAgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2guU0VDT05EQVJZX1NUT1JBR0VfU0VTU0lPTl9QQVJBTVNcbiAgICAgICk7XG4gICAgICBpZiAocmV0dXJuRGF0YSkge1xuICAgICAgICB0aGlzLnJldHVybkRhdGVUaW1lID0gbW9tZW50KHJldHVybkRhdGEudGVtcFBhcmFtcy5kZXBhcnRzKTtcbiAgICAgICAgdGhpcy5zZWFyY2hUeXBlID0gdGhpcy5zZWFyY2hUeXBlc1sxXTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignKysrIEVycm9yIHJlY292ZXJpbmcgcmV0dXJuIGRhdGE6ICcsIGVycm9yLCAnICsrKycpO1xuICAgIH1cbiAgICBpZiAoZGF0YS50ZW1wUGFyYW1zLmZyb21BZGRyZXNzKSB7XG4gICAgICB0aGlzLmZyb21BZGRyZXNzID0gZGF0YS50ZW1wUGFyYW1zLmZyb21BZGRyZXNzO1xuICAgIH1cblxuICAgIGlmIChkYXRhLnRlbXBQYXJhbXMudG9BZGRyZXNzKSB7XG4gICAgICB0aGlzLnRvQWRkcmVzcyA9IGRhdGEudGVtcFBhcmFtcy50b0FkZHJlc3M7XG4gICAgfVxuXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcbiAgICAgIHNlYXJjaFNlcnZpY2UudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xuICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xuICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKHRyYXZlbGxlcnMsIFNlcnZpY2VUeXBlLkNhYik7XG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcbiAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gc3BsaXRUcmF2ZWxsZXJzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0cyA9XG4gICAgICBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbUFzTGlzdDxDYWJoaXJlUXVvdGVSZXN1bHRBcnJheT4odGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWUpIHx8IFtdO1xuICAgIHRoaXMuZnVsbFJlc3VsdHMgPSByZXN1bHRzO1xuICAgIHRoaXMuX2NoZWFwZXN0UmVzdWx0UHJpY2UgPSB0aGlzLnVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHMpO1xuICAgIHRoaXMuYXZlcmFnZUNvMlBlckl0ZW0gPSB0aGlzLmhlbHBlcnMuY2FsY3VsYXRlQXZlcmFnZUNvMlBlckl0ZW0ocmVzdWx0cyk7XG5cbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzIHx8IFtdKTtcblxuICAgIGNvbnN0IHNlY29uZGFyeVJlc3VsdHMgPVxuICAgICAgc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3QodGhpcy5tdWx0aVJlc3VsdHNTZXNzaW9uTmFtZSkgfHwgW107XG5cbiAgICB0aGlzLmZ1bGxNdWx0aVJlc3VsdHMgPSBzZWNvbmRhcnlSZXN1bHRzO1xuICAgIHRoaXMubXVsdGlSZXN1bHRzLm5leHQoc2Vjb25kYXJ5UmVzdWx0cyk7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICAgIHRoaXMub3V0Ym91bmRWaXNpYmlsaXR5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5pbmJvdW5kVmlzaWJpbGl0eSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9IENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xuXG4gIHByb3RlY3RlZCBtdWx0aVJlc3VsdHNTZXNzaW9uTmFtZSA9IENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLk1VTFRJX1NUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xuXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZUNhYkhpcmVRdWVyeSgpKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5yZW1vdmVTZXNzaW9uSXRlbShcbiAgICAgICAgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2guU0VDT05EQVJZX1NUT1JBR0VfU0VTU0lPTl9QQVJBTVNcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgdGhpcy5fc2VhcmNoVHlwZSA9IHRoaXMuc2VhcmNoVHlwZXNbMF07IC8vIHJlc2V0IHRvIG9uZS13YXlcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRQYXJhbXMoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIHRoaXMucmVzZXRRdWVyeSgpO1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcbiAgICB0aGlzLm11bHRpUmVzdWx0cy5uZXh0KFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XG4gICAgaWYgKCF0aGlzLmRvQ2hlY2tzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oQ2FiSGlyZUVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUywge1xuICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zXG4gICAgfSk7XG5cbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xuICAgIGlmICghdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdGcm9tIC0gRW50ZXIgYSBsb2NhdGlvbiBvciBwb3N0Y29kZScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcykge1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnVG8gLSBFbnRlciBhIGxvY2F0aW9uIG9yIHBvc3Rjb2RlJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5kZXBhcnRzLnVuaXgoKSA8IG1vbWVudCgpLnVuaXgoKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnVGF4aSBqb3VybmV5IGNhbm5vdCBiZSBpbiB0aGUgcGFzdCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuYWR1bHRzICsgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuIDwgMSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCAxIHRyYXZlbGxlcicpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuc2VhcmNoVHlwZSA9PT0gdGhpcy5zZWFyY2hUeXBlc1sxXSAmJlxuICAgICAgdGhpcy5yZXR1cm5EYXRlVGltZS5pc1NhbWVPckJlZm9yZSh0aGlzLmRlcGFydHMpXG4gICAgKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdSZXR1cm4gRGF0ZS9UaW1lIG11c3QgYmUgYWZ0ZXIgb3V0Ym91bmQgZGF0ZS90aW1lJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhdmVsbGVycy5sZW5ndGggPiA0KSB7XG4gICAgICAvLyB1c2UgaWQgZnJvbSB0cmF2ZWwgdHlwZSB0byBzZWUgaWZcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50cmFuc1R5cGVzLmZpbmQodHlwZSA9PiB0eXBlLmtleSA9PT0gdGhpcy50ZW1wUGFyYW1zLnZlaGljbGVUeXBlKS5pZCA8XG4gICAgICAgIHRoaXMudHJhdmVsbGVycy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxuICAgICAgICAgIGBUaGUgbnVtYmVyIG9mIHBhc3NlbmdlcnMgZXhjZWVkcyB0aGUgYXZhaWxhYmxlIHZlaGljbGUgY2FwYWNpdHkgZm9yIHRoZSAke3RoaXMudGVtcFBhcmFtcy52ZWhpY2xlVHlwZX0gdGF4aWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWFzRnJvbSkge1xuICAgICAgLy8gdXNlIGlkIGZyb20gdHJhdmVsIHR5cGUgdG8gc2VlIGlmXG4gICAgICAgIGNvbnN0IGVycm9yRnJvbSA9ICF0aGlzLnZpYXNGcm9tLlBvc3RDb2RlIHx8ICF0aGlzLnZpYXNGcm9tLkhvdXNlOyBcbiAgICAgICAgaWYgKGVycm9yRnJvbSkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXG4gICAgICAgICAgICAnVmlhIEZyb20gLSBFbnRlciBhIGxvY2F0aW9uIG9yIHBvc3Rjb2RlJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBpZiAodGhpcy52aWFzVG8pIHtcblxuICAgICAgICBjb25zdCBlcnJvclRvID0gIXRoaXMudmlhc1RvLlBvc3RDb2RlIHx8ICF0aGlzLnZpYXNUby5Ib3VzZTsgXG4gICAgICAgIGlmIChlcnJvclRvKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcbiAgICAgICAgICAgICdWaWEgVG8gLSBFbnRlciBhIGxvY2F0aW9uIG9yIHBvc3Rjb2RlJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGRlZCB2YWxpZGF0aW9ucyBmb3IgTElNTyB0byBhdm9pZCBzZWFyY2ggd2l0aG91dCB2YWx1ZXNcbiAgICBpZiAodGhpcy52ZWhpY2xlVHlwZSA9PT0gQ2FiSGlyZVZlaGljbGVUeXBlLkxpbW8pIHtcbiAgICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHRoaXMuZnJvbUFkZHJlc3MsICdGcm9tJyk7XG4gICAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh0aGlzLnRvQWRkcmVzcywgJ1RvJyk7XG4gICAgXG4gICAgICBpZiAodGhpcy52aWFzRnJvbT8uUG9zdENvZGUpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUFkZHJlc3ModGhpcy52aWFzRnJvbSwgJ1ZpYSBGcm9tJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52aWFzVG8/LlBvc3RDb2RlKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHRoaXMudmlhc1RvLCAnVmlhIFRvJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pc1ZhbGlkLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwKTtcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xuICB9XG5cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEFkZHJlc3NGb3JtLCB0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAoIWFkZHJlc3M/LkNvdW50eSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChgJHt0eXBlfSAtIEVudGVyIHN0YXRlL3Byb3ZpbmNlL2NvdW50eWApO1xuICAgIH1cbiAgXG4gICAgaWYgKGFkZHJlc3M/LkhvdXNlID09PSBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbikge1xuICAgICAgaWYgKCFhZGRyZXNzPy5DYXJyaWVyKXtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChgJHt0eXBlfSAtIEVudGVyIHRyYWluIG9wZXJhdG9yYCk7XG4gICAgICB9XG4gICAgICBpZiAoIWFkZHJlc3M/LkZsaWdodFRyYWluRGF0ZVRpbWUpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChgJHt0eXBlfSAtIEVudGVyIHRyYWluICR7dHlwZSA9PT0gJ0Zyb20nID8gJ2Fycml2YWwnIDogJ2RlcGFydHVyZSd9IHRpbWVgKTtcbiAgICAgIH1cbiAgICB9XG4gIFxuICAgIGlmIChhZGRyZXNzPy5Ib3VzZSA9PT0gTG9jYXRpb25UeXBlcy5BaXJwb3J0KSB7XG4gICAgICBpZiAoIWFkZHJlc3M/LkNhcnJpZXIpe1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKGAke3R5cGV9IC0gU2VsZWN0IGFpcmxpbmVgKTtcbiAgICAgIH1cbiAgICAgIGlmICghYWRkcmVzcz8uRmxpZ2h0TnVtYmVyKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goYCR7dHlwZX0gLSBFbnRlciBmbGlnaHQgbnVtYmVyYCk7XG4gICAgICB9XG4gICAgICBpZiAoIWFkZHJlc3M/LkZsaWdodFRyYWluRGF0ZVRpbWUpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChgJHt0eXBlfSAtIEVudGVyIGZsaWdodCAke3R5cGUgPT09ICdGcm9tJyA/ICdhcnJpdmFsJyA6ICdkZXBhcnR1cmUnfSB0aW1lYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlRGF0ZVRpbWUoKSB7XG4gICAgaWYgKHRoaXMuX2RhdGUgJiYgdGhpcy5fdGltZSkge1xuICAgICAgdGhpcy5kZXBhcnRzID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2RhdGUsIHRoaXMuX3RpbWUpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0U2VhcmNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcbiAgICB0aGlzLm11bHRpUmVzdWx0cy5uZXh0KFtdKTtcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hUeXBlID09PSB0aGlzLnNlYXJjaFR5cGVzWzFdKSB7XG4gICAgICAgIC8vIHJldHVybiAtIGtpY2sgb2ZmIHR3byBzZWFyY2hlc1xuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICAgICAgY29uc3QgcmV0dXJuUXVlcnkgPSB0aGlzLmdldFJldHVyblNlYXJjaFF1ZXJ5KCk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJysrKyBTZWFyY2ggUXVlcnk6ICcsIHF1ZXJ5LCAnICsrKycpO1xuICAgICAgICBjb25zb2xlLmxvZygnKysrIFNlYXJjaCBSZXR1cm4gUXVlcnk6ICcsIHJldHVyblF1ZXJ5LCAnICsrKycpO1xuXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXG4gICAgICAgICAgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2guU0VDT05EQVJZX1NUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGVtcFBhcmFtczogcmV0dXJuUXVlcnlcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0TXVsdGlTZWFyY2goW1xuICAgICAgICAgIHRoaXMuY2FiZmV0Y2hlci5mZXRjaExpc3QodGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3M+KHF1ZXJ5KSksXG4gICAgICAgICAgdGhpcy5jYWJmZXRjaGVyLmZldGNoTGlzdCh0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYWJIaXJlQXJncz4ocmV0dXJuUXVlcnkpKVxuICAgICAgICBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHRoaXMuZ2V0U2VhcmNoUXVlcnkoKSkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaChcbiAgICAgICAgICB0aGlzLmNhYmZldGNoZXIuZmV0Y2hMaXN0KHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxRdWVyeVNlYXJjaENhYkhpcmVBcmdzPihxdWVyeSkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGdtdFNlYXJjaChxdWVyeTogU2VhcmNoQ2FiSGlyZVF1ZXJ5VmFyaWFibGVzKTogT2JzZXJ2YWJsZTxDYWJoaXJlUXVvdGVSZXN1bHRBcnJheT4ge1xuICAgIHRoaXMuYm9sdFNlYXJjaFF1ZXJ5LnB1c2gocXVlcnkpO1xuICAgIHJldHVybiB0aGlzLmNhYmZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KTtcbiAgfVxuXG4gIGdtdEdldENhYlNlYXJjaFF1ZXJ5KGZyb21Mb2NhdGlvbjogTG9jYXRpb25EZXRhaWwsIHRvTG9jYXRpb246IExvY2F0aW9uRGV0YWlsLCBkYXRlVG1lOiBzdHJpbmcpOlNlYXJjaENhYkhpcmVRdWVyeVZhcmlhYmxlcyB7XG4gICAgY29uc3QgY3JlYXRlTG9jYXRpb24gPSAobG9jYXRpb246IGFueSApID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJ1aWxkaW5nTmFtZTogbG9jYXRpb24/Lm51bWJlck9yTmFtZSB8fCBsb2NhdGlvbj8uY291bnRyeUNvZGUsXG4gICAgICAgIGNvdW50cnlDb2RlOiBsb2NhdGlvbj8uY291bnRyeUNvZGUgfHwgJ0dCJyxcbiAgICAgICAgcG9zdGNvZGU6IGxvY2F0aW9uPy5wb3N0Y29kZT8ucmVwbGFjZSgvXFxzKy9nLCAnJykgPz8gJycsXG4gICAgICAgIHN0cmVldEFuZE51bWJlcjogbG9jYXRpb24/LnN0cmVldCB8fCBsb2NhdGlvbj8ucm9hZCB8fCBsb2NhdGlvbj8uY291bnRyeUNvZGUsIFxuICAgICAgICB0b3duOiBsb2NhdGlvbj8udG93biB8fCBsb2NhdGlvbj8uY2l0eSxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGZyb20gPSBjcmVhdGVMb2NhdGlvbihmcm9tTG9jYXRpb24pO1xuICAgIGNvbnN0IHRvID0gY3JlYXRlTG9jYXRpb24odG9Mb2NhdGlvbik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWR1bHRzOiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzLFxuICAgICAgY2hpbGRyZW46IHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbixcbiAgICAgIGluZmFudHM6IDAsXG4gICAgICBkZXBhcnRzOiBkYXRlVG1lLCBcbiAgICAgIHZlaGljbGVUeXBlOiBDYWJIaXJlVmVoaWNsZVR5cGUuQW55LFxuICAgICAgbWVzc2FnZVR5cGU6IE1lc3NhZ2VUeXBlLlRheGksXG4gICAgICBmcm9tTG9jYXRpb246IHtcbiAgICAgICAgYnVpbGRpbmdOYW1lOiBmcm9tLmJ1aWxkaW5nTmFtZSxcbiAgICAgICAgY291bnRyeUNvZGU6IGZyb20uY291bnRyeUNvZGUsXG4gICAgICAgIHBvc3Rjb2RlOiBmcm9tLnBvc3Rjb2RlLFxuICAgICAgICBzdHJlZXRBbmROdW1iZXI6IGZyb20uc3RyZWV0QW5kTnVtYmVyLFxuICAgICAgICB0b3duOiBmcm9tLnRvd24sXG4gICAgICB9LFxuICAgICAgdG9Mb2NhdGlvbjoge1xuICAgICAgICBidWlsZGluZ05hbWU6IHRvLmJ1aWxkaW5nTmFtZSxcbiAgICAgICAgY291bnRyeUNvZGU6IHRvLmNvdW50cnlDb2RlLFxuICAgICAgICBwb3N0Y29kZTogdG8ucG9zdGNvZGUsXG4gICAgICAgIHN0cmVldEFuZE51bWJlcjogdG8uc3RyZWV0QW5kTnVtYmVyLFxuICAgICAgICB0b3duOiB0by50b3duLFxuICAgICAgfSxcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMudHJhdmVsbGVycy5tYXAodHJhdmVsbGVyID0+IHtyZXR1cm4ge2lkOiB0cmF2ZWxsZXIuaWR9fSlcbiAgICB9XG4gIH1cblxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeTogUXVlcnlTZWFyY2hDYWJIaXJlQXJncyk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XG4gICAgY29uc3QgcmVjZW50U2VhcmNoUXVlcnk6IElDYWJIaXJlU2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkNhYixcbiAgICAgIHNlYXJjaEFyZ3M6IHJlY2VudFNlYXJjaFF1ZXJ5LFxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5kZXBhcnRzLmZvcm1hdCgpLFxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMsIHRoaXMudXNlclNlcnZpY2UuYm9ibz8uaWQpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShxdWVyeTogUXVlcnlTZWFyY2hDYWJIaXJlQXJncyk6IElDYWJIaXJlU2VhcmNoQXJncyB7XG4gICAgY29uc3Qgc2VhcmNoUXVlcnk6IElDYWJIaXJlU2VhcmNoQXJncyA9IHF1ZXJ5O1xuICAgIHNlYXJjaFF1ZXJ5LmZyb21BZGRyZXNzID0gdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzO1xuICAgIHNlYXJjaFF1ZXJ5LnRvQWRkcmVzcyA9IHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3M7XG5cbiAgICBzZWFyY2hRdWVyeS5mcm9tU3RhdGlvbiA9IHRoaXMudGVtcFBhcmFtcy5mcm9tU3RhdGlvbjtcbiAgICBzZWFyY2hRdWVyeS50b1N0YXRpb24gPSB0aGlzLnRlbXBQYXJhbXMudG9TdGF0aW9uO1xuXG4gICAgc2VhcmNoUXVlcnkudmlhc0Zyb20gPSB0aGlzLnZpYXNGcm9tO1xuICAgIHNlYXJjaFF1ZXJ5LnZpYXNUbyA9IHRoaXMudmlhc1RvO1xuICAgIHNlYXJjaFF1ZXJ5LnNwZWNpYWxSZXF1aXJlbWVudHMgPSB0aGlzLnRlbXBQYXJhbXMuc3BlY2lhbFJlcXVpcmVtZW50cztcbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XG4gIH1cblxuICBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5tZXNzYWdlVHlwZSA9PT0gTWVzc2FnZVR5cGUuVGF4aSkge1xuICAgICAgdGhpcy52ZWhpY2xlVHlwZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZlaGljbGVUeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZlaGljbGVUeXBlID0gQ2FiSGlyZVZlaGljbGVUeXBlLkxpbW87XG4gICAgICB0aGlzLmxpbW9UeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudmVoaWNsZVR5cGU7XG4gICAgfVxuXG4gICAgdGhpcy5kZXBhcnRzID0gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcGFydHMpO1xuXG4gICAgdGhpcy5mcm9tQWRkcmVzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmZyb21BZGRyZXNzO1xuICAgIHRoaXMudG9BZGRyZXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudG9BZGRyZXNzO1xuXG4gICAgdGhpcy5mcm9tU3RhdGlvbiA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmZyb21TdGF0aW9uO1xuICAgIHRoaXMudG9TdGF0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudG9TdGF0aW9uO1xuXG4gICAgdGhpcy5fZnJvbUxvY2F0aW9uID0gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy5mcm9tQWRkcmVzcyk7XG4gICAgdGhpcy5fdG9Mb2NhdGlvbiA9IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudG9BZGRyZXNzKTtcblxuICAgIHRoaXMudmlhc0Zyb20gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52aWFzRnJvbTtcbiAgICB0aGlzLnZpYXNUbyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYXNUbztcbiAgICB0aGlzLnNwZWNpYWxSZXF1aXJlbWVudHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5zcGVjaWFsUmVxdWlyZW1lbnRzO1xuXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcbiAgfVxuXG4gIGdldFNlYXJjaFF1ZXJ5KHNpbXBsaWZpZWRMb2NhdGlvbjogYm9vbGVhbiA9IHRydWUpOiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzIHtcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zPy52aWFzRnJvbSkge1xuICAgICAgdGhpcy5fdmlhc1swXSA9IDxDYWJIaXJlTG9jYXRpb25JbnB1dD50aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXM/LnZpYXNGcm9tKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcz8udmlhc1RvKSB7XG4gICAgICB0aGlzLl92aWFzWzFdID0gPENhYkhpcmVMb2NhdGlvbklucHV0PnRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcz8udmlhc1RvKTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MgPSB7XG4gICAgICBhZHVsdHM6IHRoaXMudGVtcFBhcmFtcy5hZHVsdHMsXG4gICAgICBjaGlsZHJlbjogdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuLFxuICAgICAgZGVwYXJ0czogdGhpcy5oZWxwZXJzLmZvcm1hdEdyb3VuZHNwYW5EYXRlVGltZSh0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0cyksXG4gICAgICBmcm9tTG9jYXRpb246IHNpbXBsaWZpZWRMb2NhdGlvblxuICAgICAgICA/IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcylcbiAgICAgICAgOiAodGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzIGFzIGFueSksXG4gICAgICB0b0xvY2F0aW9uOiBzaW1wbGlmaWVkTG9jYXRpb25cbiAgICAgICAgPyB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzKVxuICAgICAgICA6ICh0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzIGFzIGFueSksXG4gICAgICBpbmZhbnRzOiAwLFxuICAgICAgdmVoaWNsZVR5cGU6IHRoaXMubGltb1R5cGUgPyB0aGlzLmxpbW9UeXBlIDogdGhpcy52ZWhpY2xlVHlwZSxcbiAgICAgIG1lc3NhZ2VUeXBlOiB0aGlzLmxpbW9UeXBlID8gTWVzc2FnZVR5cGUuTGltbyA6IE1lc3NhZ2VUeXBlLlRheGksXG4gICAgICB2aWFzOiA8Q2FiSGlyZUxvY2F0aW9uSW5wdXRbXT50aGlzLl92aWFzLFxuICAgICAgbGltb0FzRGlyZWN0ZWREdXJhdGlvbjogdGhpcy50ZW1wUGFyYW1zLnRyYW5zcG9ydFR5cGUgPT09IFRyYW5zcG9ydFR5cGUuSG91cmx5ID8gK3RoaXMudGVtcFBhcmFtcy5saW1vQXNEaXJlY3RlZER1cmF0aW9uIDogbnVsbCxcbiAgICAgIHRyYW5zcG9ydFR5cGU6IHRoaXMubGltb1R5cGUgPyB0aGlzLnRlbXBQYXJhbXMudHJhbnNwb3J0VHlwZSA6IG51bGwsXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLnRyYXZlbGxlcnMubWFwKHRyYXZlbGxlciA9PiB7cmV0dXJuIHtpZDogdHJhdmVsbGVyLmlkfX0pLFxuICAgICAgc3BlY2lhbFJlcXVpcmVtZW50czogdGhpcy5zcGVjaWFsUmVxdWlyZW1lbnRzXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmZyb21TdGF0aW9uICYmIHRoaXMuZnJvbVN0YXRpb24uYWlycG9ydCAmJiAhcXVlcnkuZnJvbUxvY2F0aW9uLmZsaWdodFRyYWluRGF0ZVRpbWUpIHtcbiAgICAgIHF1ZXJ5LmZyb21Mb2NhdGlvbiA9IHtcbiAgICAgICAgcG9zdGNvZGU6IHRoaXMuZnJvbVN0YXRpb24uYWlycG9ydC5wb3N0Y29kZSAsXG4gICAgICAgIGNvdW50cnlDb2RlOiB0aGlzLmZyb21TdGF0aW9uLmFpcnBvcnQuY291bnRyeUNvZGUsXG4gICAgICAgIHN0cmVldEFuZE51bWJlcjogdGhpcy5mcm9tU3RhdGlvbi5haXJwb3J0LmRlc3RpbmF0aW9uLFxuICAgICAgICBidWlsZGluZ05hbWU6ICB0aGlzLmZyb21TdGF0aW9uLmFpcnBvcnQuZGVzdGluYXRpb24sXG4gICAgICAgIHRvd246IHRoaXMuZnJvbVN0YXRpb24uYWlycG9ydC5kZXN0aW5hdGlvbiAsXG4gICAgICAgIHRlcm1pbmFsOiB0aGlzLmZyb21Mb2NhdGlvbi50ZXJtaW5hbCxcbiAgICAgICAgZmxpZ2h0TnVtYmVyOiB0aGlzLmZyb21Mb2NhdGlvbi5mbGlnaHROdW1iZXIsXG4gICAgICAgIGNvdW50eTogcXVlcnkuZnJvbUxvY2F0aW9uLmNvdW50eVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmZyb21TdGF0aW9uICYmIHRoaXMuZnJvbVN0YXRpb24ucmFpbHN0YXRpb24gICYmICFxdWVyeS5mcm9tTG9jYXRpb24uZmxpZ2h0VHJhaW5EYXRlVGltZSkge1xuICAgICAgcXVlcnkuZnJvbUxvY2F0aW9uID0ge1xuICAgICAgICBwb3N0Y29kZTogdGhpcy5mcm9tU3RhdGlvbi5yYWlsc3RhdGlvbi5sb2NhdGlvbkRldGFpbHMucG9zdGNvZGUgLFxuICAgICAgICBjb3VudHJ5Q29kZTogdGhpcy5mcm9tU3RhdGlvbi5yYWlsc3RhdGlvbi5sb2NhdGlvbkRldGFpbHMuY291bnRyeUNvZGUsXG4gICAgICAgIHN0cmVldEFuZE51bWJlcjogdGhpcy5mcm9tU3RhdGlvbi5yYWlsc3RhdGlvbi5uYW1lLFxuICAgICAgICBidWlsZGluZ05hbWU6IHRoaXMuZnJvbVN0YXRpb24ucmFpbHN0YXRpb24ubmFtZSxcbiAgICAgICAgdG93bjogdGhpcy5mcm9tU3RhdGlvbi5yYWlsc3RhdGlvbi5sb2NhdGlvbkRldGFpbHMuY2l0eSxcbiAgICAgICAgY291bnR5OiB0aGlzLmZyb21Mb2NhdGlvbi5jb3VudHlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50b1N0YXRpb24gJiYgdGhpcy50b1N0YXRpb24uYWlycG9ydCAmJiAhcXVlcnkudG9Mb2NhdGlvbi5mbGlnaHRUcmFpbkRhdGVUaW1lKSB7XG4gICAgICBxdWVyeS50b0xvY2F0aW9uID0ge1xuICAgICAgICBwb3N0Y29kZTogdGhpcy50b1N0YXRpb24uYWlycG9ydC5wb3N0Y29kZSAsXG4gICAgICAgIGNvdW50cnlDb2RlOiB0aGlzLnRvU3RhdGlvbi5haXJwb3J0LmNvdW50cnlDb2RlICxcbiAgICAgICAgc3RyZWV0QW5kTnVtYmVyOiB0aGlzLnRvU3RhdGlvbi5haXJwb3J0LmRlc3RpbmF0aW9uLFxuICAgICAgICBidWlsZGluZ05hbWU6IHRoaXMudG9TdGF0aW9uLmFpcnBvcnQuZGVzdGluYXRpb24gLFxuICAgICAgICB0b3duOiB0aGlzLnRvU3RhdGlvbi5haXJwb3J0LmRlc3RpbmF0aW9uLFxuICAgICAgICB0ZXJtaW5hbDogdGhpcy50b0xvY2F0aW9uLnRlcm1pbmFsLFxuICAgICAgICBmbGlnaHROdW1iZXI6IHRoaXMudG9Mb2NhdGlvbi5mbGlnaHROdW1iZXIsXG4gICAgICAgIGNvdW50eTogdGhpcy50b0xvY2F0aW9uLmNvdW50eVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRvU3RhdGlvbiAmJiB0aGlzLnRvU3RhdGlvbi5yYWlsc3RhdGlvbiAmJiAhcXVlcnkudG9Mb2NhdGlvbi5mbGlnaHRUcmFpbkRhdGVUaW1lKSB7XG4gICAgICBxdWVyeS50b0xvY2F0aW9uID0ge1xuICAgICAgICBwb3N0Y29kZTogdGhpcy50b1N0YXRpb24ucmFpbHN0YXRpb24ubG9jYXRpb25EZXRhaWxzLnBvc3Rjb2RlICxcbiAgICAgICAgY291bnRyeUNvZGU6IHRoaXMudG9TdGF0aW9uLnJhaWxzdGF0aW9uLmxvY2F0aW9uRGV0YWlscy5jb3VudHJ5Q29kZSxcbiAgICAgICAgc3RyZWV0QW5kTnVtYmVyOiB0aGlzLnRvU3RhdGlvbi5yYWlsc3RhdGlvbi5uYW1lLFxuICAgICAgICBidWlsZGluZ05hbWU6IHRoaXMudG9TdGF0aW9uLnJhaWxzdGF0aW9uLm5hbWUsXG4gICAgICAgIHRvd246IHRoaXMudG9TdGF0aW9uLnJhaWxzdGF0aW9uLmxvY2F0aW9uRGV0YWlscy5jaXR5LFxuICAgICAgICBjb3VudHk6IHRoaXMudG9Mb2NhdGlvbi5jb3VudHlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhxdWVyeSk7XG5cbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3M+KHF1ZXJ5KTtcbiAgfVxuXG4gIGdldFJldHVyblNlYXJjaFF1ZXJ5KCk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3Mge1xuICAgIGlmICh0aGlzLnRlbXBQYXJhbXM/LnZpYXNGcm9tKSB7XG4gICAgICB0aGlzLl92aWFzWzBdID0gPENhYkhpcmVMb2NhdGlvbklucHV0PnRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcz8udmlhc0Zyb20pO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zPy52aWFzVG8pIHtcbiAgICAgIHRoaXMuX3ZpYXNbMV0gPSA8Q2FiSGlyZUxvY2F0aW9uSW5wdXQ+dGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy50ZW1wUGFyYW1zPy52aWFzVG8pO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeTogUXVlcnlTZWFyY2hDYWJIaXJlQXJncyA9IHtcbiAgICAgIGFkdWx0czogdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4sXG4gICAgICBkZXBhcnRzOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JvdW5kc3BhbkRhdGVUaW1lKHRoaXMuX3JldHVybkRhdGVUaW1lKSxcbiAgICAgIGZyb21Mb2NhdGlvbjogPENhYkhpcmVMb2NhdGlvbklucHV0PnRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3MpLCAvLyBzd2FwIHRoZSBsb2NhdGlvbnMgYXJvdW5kXG4gICAgICB0b0xvY2F0aW9uOiA8Q2FiSGlyZUxvY2F0aW9uSW5wdXQ+dGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzKSxcbiAgICAgIGluZmFudHM6IDAsXG4gICAgICB2ZWhpY2xlVHlwZTogdGhpcy52ZWhpY2xlVHlwZSxcbiAgICAgIHZpYXM6IDxDYWJIaXJlTG9jYXRpb25JbnB1dFtdPnRoaXMuX3ZpYXMsXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLnRyYXZlbGxlcnMubWFwKHRyYXZlbGxlciA9PiB7cmV0dXJuIHtpZDogdHJhdmVsbGVyLmlkfX0pLFxuICAgICAgc3BlY2lhbFJlcXVpcmVtZW50czogdGhpcy50ZW1wUGFyYW1zLnNwZWNpYWxSZXF1aXJlbWVudHNcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYWJIaXJlQXJncz4ocXVlcnkpO1xuICB9XG5cbiAgdXBkYXRlT3V0Ym91bmRBZGRyZXNzKGxvY2F0aW9uOiBhbnksIHBsYWNlRGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3MgPSB0aGlzLmdldEFkZHJlc3NGb3JtYXQobG9jYXRpb24sIHBsYWNlRGVzY3JpcHRpb24pO1xuICB9XG5cbiAgdXBkYXRlVmlhQWRkcmVzcyhsb2NhdGlvbjogYW55LCBwbGFjZURlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52aWFzRnJvbSA9IHRoaXMuZ2V0QWRkcmVzc0Zvcm1hdChsb2NhdGlvbiwgcGxhY2VEZXNjcmlwdGlvbik7XG4gIH1cblxuICB1cGRhdGVJbmJvdW5kQWRkcmVzcyhsb2NhdGlvbjogYW55LCBwbGFjZURlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcyA9IHRoaXMuZ2V0QWRkcmVzc0Zvcm1hdChsb2NhdGlvbiwgcGxhY2VEZXNjcmlwdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNhYkhpcmVMb2NhdGlvbihsb2NhdGlvbjogQWRkcmVzc0Zvcm0pOiBDYWJIaXJlTG9jYXRpb25JbnB1dCB7XG4gICAgY29uc3QgdHlwZSA9IGxvY2F0aW9uPy5Ib3VzZT8ucmVwbGFjZSgnICcsICcnKTtcbiAgICBjb25zdCBhZGRyZXNzVHlwZTogQWRkcmVzc1R5cGUgPSB0eXBlPy5pbmNsdWRlcyhBZGRyZXNzVHlwZS5BaXJwb3J0KVxuICAgICAgPyBBZGRyZXNzVHlwZS5BaXJwb3J0XG4gICAgICA6IEFkZHJlc3NUeXBlLkFkZHJlc3M7XG4gICAgY29uc3QgY29tbW9uUHJvcGVydGllczogUGFydGlhbDxDYWJIaXJlTG9jYXRpb25JbnB1dD4gPSB7XG4gICAgICBidWlsZGluZ05hbWU6IHR5cGU/LmluY2x1ZGVzKEFkZHJlc3NUeXBlLlRyYWluU3RhdGlvbikgPyBsb2NhdGlvbj8uU3RyZWV0ICsgJyBUcmFpbiBTdGF0aW9uJyA6IHR5cGU/LmluY2x1ZGVzKEFkZHJlc3NUeXBlLkFpcnBvcnQpID8gbG9jYXRpb24/LlN0cmVldCA6IGxvY2F0aW9uPy5Ib3VzZSxcbiAgICAgIHN0cmVldEFuZE51bWJlcjogbG9jYXRpb24/LlN0cmVldCxcbiAgICAgIHRvd246IGxvY2F0aW9uPy5Ub3duLFxuICAgICAgY291bnR5OiBsb2NhdGlvbj8uQ291bnR5LFxuICAgICAgcG9zdGNvZGU6IGxvY2F0aW9uPy5Qb3N0Q29kZT8ucmVwbGFjZSgvXFxzKy9nLCAnJykgPz8gJycsXG4gICAgICBjb3VudHJ5Q29kZTogbG9jYXRpb24uQ291bnRyeUNvZGUgfHwgbG9jYXRpb24uQ291bnRyeSxcbiAgICAgIGZsaWdodE51bWJlcjogbG9jYXRpb24/LkZsaWdodE51bWJlciA/IGxvY2F0aW9uPy5GbGlnaHROdW1iZXIgOiBudWxsLFxuICAgICAgdGVybWluYWw6IGxvY2F0aW9uLlRlcm1pbmFsIHx8ICBudWxsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnZlaGljbGVUeXBlID09PSBDYWJIaXJlVmVoaWNsZVR5cGUuTGltbykge1xuICAgICAgY29uc3QgZmxpZ2h0VHJhaW5EYXRlVGltZTogbW9tZW50Lk1vbWVudCA9IHR5cGU/LmluY2x1ZGVzKEFkZHJlc3NUeXBlLlRyYWluU3RhdGlvbikgfHwgdHlwZT8uaW5jbHVkZXMoQWRkcmVzc1R5cGUuQWlycG9ydCkgPyB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5fZGF0ZSwgbG9jYXRpb24/LkZsaWdodFRyYWluRGF0ZVRpbWUpIDogbnVsbDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmNvbW1vblByb3BlcnRpZXMgYXMgQ2FiSGlyZUxvY2F0aW9uSW5wdXQsXG4gICAgICAgIGFkZHJlc3NUeXBlOiBhZGRyZXNzVHlwZSxcbiAgICAgICAgY2FycmllcjogIGxvY2F0aW9uPy5DYXJyaWVyLFxuICAgICAgICBhaXJwb3J0U3RhdGlvbk5hbWU6IGxvY2F0aW9uPy5BaXJwb3J0U3RhdGlvbk5hbWUsXG4gICAgICAgIGZsaWdodFRyYWluRGF0ZVRpbWU6IGZsaWdodFRyYWluRGF0ZVRpbWUgPyB0aGlzLmhlbHBlcnMuZm9ybWF0R3JvdW5kc3BhbkRhdGVUaW1lKGZsaWdodFRyYWluRGF0ZVRpbWUpIDogbnVsbFxuICAgICAgfTtcbiAgICB9IHJldHVybiBjb21tb25Qcm9wZXJ0aWVzIGFzIENhYkhpcmVMb2NhdGlvbklucHV0O1xuICB9XG5cbiAgbWF0Y2hBZGRyZXNzZXMoKSB7XG4gICAgdGhpcy5fdG9Mb2NhdGlvbiA9IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3MpO1xuICAgIHRoaXMuX2Zyb21Mb2NhdGlvbiA9IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyk7XG4gICAgdGhpcy5fdmlhc1swXS5wb3N0Y29kZSA9IHRoaXMudGVtcFBhcmFtcz8udmlhc0Zyb20/LlBvc3RDb2RlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHNvcnRCeShhc2M/OiBib29sZWFuLCByZXR1cm5JbmRleD86IG51bWJlcikge1xuICAgIGlmICh0aGlzLnNlYXJjaFNlcnZpY2UuaXNDbG9uaW5nLnZhbHVlKSB7XG4gICAgICByZXR1cm47IC8vIERvbid0IHBlcmZvcm0gc29ydGluZyBpZiBpc0Nsb25pbmcgaXMgdHJ1ZVxuICAgIH1cbiAgICBcbiAgICBpZiAocmV0dXJuSW5kZXggPj0gMCkge1xuICAgICAgY29uc29sZS5sb2coJ2hlcmUnKTtcbiAgICAgIGxldCByZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuZnVsbE11bHRpUmVzdWx0c1tyZXR1cm5JbmRleF0pO1xuICAgICAgaWYgKGFzYykge1xuICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYi5wcmljZSAtIGEucHJpY2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGEucHJpY2UgLSBiLnByaWNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnVsbE11bHRpUmVzdWx0c1tyZXR1cm5JbmRleF0gPSByZXN1bHRzO1xuICAgICAgdGhpcy5tdWx0aVJlc3VsdHMubmV4dCh0aGlzLmZ1bGxNdWx0aVJlc3VsdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzKTtcbiAgICAgIGlmIChhc2MpIHtcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydCgoYTogQ2FiSGlyZVF1b3RlLCBiOiBDYWJIaXJlUXVvdGUpID0+IGIucHJpY2UgLSBhLnByaWNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzPy5zb3J0KChhOiBDYWJIaXJlUXVvdGUsIGI6IENhYkhpcmVRdW90ZSkgPT4gYS5wcmljZSAtIGIucHJpY2UpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyk7XG4gICAgfVxuICB9XG5cbiAgLy8gISBzdHVmZiB0byBnbyBpbiBhIHBvc3Rjb2RlIHNlcnZpZVxuXG4gIGdldEFkZHJlc3NGb3JtYXQobG9jYXRpb246IGFueSwgcGxhY2VEZXNjcmlwdGlvbj86IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIEhvdXNlOiB0aGlzLmdldEFkZHJlc3NGcm9tUGxhY2VEZXRhaWxzKGxvY2F0aW9uLCBbJ2Zsb29yJywgJ3N0cmVldF9udW1iZXInLCAncHJlbWlzZSddKSxcbiAgICAgIFN0cmVldDogdGhpcy5nZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlscyhsb2NhdGlvbiwgWydyb3V0ZScsICdzdHJlZXRfbmFtZScsICdlc3RhYmxpc2htZW50J10pLFxuICAgICAgVG93bjogdGhpcy5nZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlscyhsb2NhdGlvbiwgW1xuICAgICAgICAncG9zdGFsX3Rvd24nLFxuICAgICAgICAnYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8yJyxcbiAgICAgICAgJ2xvY2FsaXR5J1xuICAgICAgXSksXG4gICAgICBQb3N0Q29kZTogdGhpcy5nZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlscyhsb2NhdGlvbiwgWydwb3N0Y29kZScsICdwb3N0YWxfY29kZSddKSxcbiAgICAgIENvdW50cnk6IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFsnY291bnRyeSddKSxcbiAgICAgIENvdW50cnlDb2RlOiB0aGlzLmdldEFkZHJlc3NGcm9tUGxhY2VEZXRhaWxzU2hvcnQobG9jYXRpb24sIFsnY291bnRyeSddKSxcbiAgICAgIHBsYWNlRGVzY3JpcHRpb25cbiAgICB9O1xuICB9XG5cbiAgZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMocGxhY2VEZXRhaWxzOiBhbnksIHR5cGVzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgbGV0IGFkZHJlc3NQcm9wID0gbnVsbDtcbiAgICBpZiAocGxhY2VEZXRhaWxzICYmIEFycmF5LmlzQXJyYXkocGxhY2VEZXRhaWxzKSkge1xuICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICAgIGNvbnN0IHByb3AgPSBwbGFjZURldGFpbHMuZmlsdGVyKHBkID0+IHtcbiAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwZC50eXBlcykgJiYgcGQudHlwZXMuaW5jbHVkZXModHlwZSk7XG4gICAgICAgIH0pWzBdO1xuXG4gICAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgICAgYWRkcmVzc1Byb3AgPSAgcHJvcC5sb25nX25hbWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFkZHJlc3NQcm9wO1xuICB9XG5cblxuICBnZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlsc1Nob3J0KHBsYWNlRGV0YWlsczogYW55LCB0eXBlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGxldCBhZGRyZXNzUHJvcCA9IG51bGw7XG4gICAgaWYgKHBsYWNlRGV0YWlscyAmJiBBcnJheS5pc0FycmF5KHBsYWNlRGV0YWlscykpIHtcbiAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICBjb25zdCBwcm9wID0gcGxhY2VEZXRhaWxzLmZpbHRlcihwZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGQudHlwZXMpICYmIHBkLnR5cGVzLmluY2x1ZGVzKHR5cGUpO1xuICAgICAgICB9KVswXTtcblxuICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgIGFkZHJlc3NQcm9wID0gcHJvcC5zaG9ydF9uYW1lO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhZGRyZXNzUHJvcDtcbiAgfVxuXG4gIGdldEFkZHJlc3NGcm9tQWlycG9ydERldGFpbHMoYWlycG9ydERldGFpbHM6IExvY2F0aW9uRGV0YWlsLCBhaXJwb3J0TmFtZTogc3RyaW5nKSB7XG4gICAgY29uc29sZS5sb2coYWlycG9ydERldGFpbHMpO1xuICAgIGxldCBhZGRyZXNzOiBBZGRyZXNzRm9ybSA9IG51bGw7XG4gICAgaWYgKGFpcnBvcnREZXRhaWxzKSB7XG4gICAgICBhZGRyZXNzID0ge1xuICAgICAgICBDb3VudHJ5OiBhaXJwb3J0RGV0YWlscy5jb3VudHJ5LFxuICAgICAgICBTdHJlZXQ6IGFpcnBvcnREZXRhaWxzLnJvYWQsXG4gICAgICAgIFBvc3RDb2RlOiBhaXJwb3J0RGV0YWlscy5wb3N0Y29kZSxcbiAgICAgICAgVG93bjogYWlycG9ydERldGFpbHMuY2l0eSxcbiAgICAgICAgcGxhY2VEZXNjcmlwdGlvbjogYWlycG9ydE5hbWUsXG4gICAgICAgIEhvdXNlOiBhaXJwb3J0TmFtZVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZHJlc3M7XG4gIH1cblxuICBzZXRMb2NhdGlvbkZyb21BaXJwb3J0KGFpcnBvcnREZXRhaWxzOiBMb2NhdGlvbkRldGFpbCwgYWlycG9ydE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLmdldEFkZHJlc3NGcm9tQWlycG9ydERldGFpbHMoYWlycG9ydERldGFpbHMsIGFpcnBvcnROYW1lKTtcbiAgICBpZiAodGhpcy5tb2RlID09PSBUYXhpRm9ybU1vZGUuU1RBVElPTikge1xuICAgICAgaWYgKHRoaXMuYWlycG9ydFNlYXJjaFR5cGUgPT09IEFpcnBvcnRTZWFyY2hNb2RlLlBJQ0tVUCkge1xuICAgICAgICB0aGlzLmZyb21BZGRyZXNzID0gYWRkcmVzcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9BZGRyZXNzID0gYWRkcmVzcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRUb1NlbGVjdGVkUGxhY2VzKGFkZHJlc3M6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRQbGFjZXMucHVzaChhZGRyZXNzKTtcbiAgfVxuXG4gIHNldE91dGJvdW5kRm9ybVZpc2liaWxpdHkoc2hvd0Zvcm06IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm91dGJvdW5kVmlzaWJpbGl0eS5uZXh0KHNob3dGb3JtKTtcbiAgfVxuXG4gIHNldEluYm91bmRGb3JtVmlzaWJpbGl0eShzaG93Rm9ybTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaW5ib3VuZFZpc2liaWxpdHkubmV4dChzaG93Rm9ybSk7XG4gIH1cblxuICBnZXRPdXRib3VuZEZvcm1WaXNpYmlsaXR5KCk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMub3V0Ym91bmRWaXNpYmlsaXR5O1xuICB9XG5cbiAgZ2V0SW5ib3VuZEZvcm1WaXNpYmlsaXR5KCk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaW5ib3VuZFZpc2liaWxpdHk7XG4gIH1cblxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhwcmV2aW91c0l0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+KTogdm9pZCB7XG4gICAgY29uc3QgZmxpZ2h0SXRlbTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMgPVxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5GbGlnaHRdPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCByYWlsSXRlbTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzID0gcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5SYWlsXT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgaXJsSXRlbTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMgPVxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbF0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IGhvdGVsSXRlbTogU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXMgPSBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLlJhaWxdPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCBjYXJJdGVtOiBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXMgPSBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkNhcl0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IGxvdW5nZUl0ZW06IFNlYXJjaExvdW5nZXNRdWVyeVZhcmlhYmxlcyA9IHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuTG91bmdlXT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgcGFya2luZ0l0ZW06IFNlYXJjaFBhcmtpbmdRdWVyeVZhcmlhYmxlcyA9XG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLlBhcmtpbmddPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCBldXJvc3Rhckl0ZW06IFNlYXJjaEV1cm9zdGFyUXVlcnlWYXJpYWJsZXMgPVxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5FdXJvc3Rhcl0/LnNlYXJjaFF1ZXJ5O1xuICAgIGlmIChmbGlnaHRJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5GTElHSFQuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5GTElHSFQuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShcbiAgICAgICAgICAgIGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcmV2aW91c0l0ZW1zLkZMSUdIVC5vdXRib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5GTElHSFQub3V0Ym91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FiaGlyZSBmcm9tIGZsaWdodCBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyYWlsSXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuUkFJTC5pbmJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLlJBSUwuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShcbiAgICAgICAgICAgIGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcmV2aW91c0l0ZW1zLlJBSUwub3V0Ym91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuUkFJTC5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShcbiAgICAgICAgICAgIGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBjYWJoaXJlIGZyb20gcmFpbCBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpcmxJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5JTlRFUk5BVElPTkFMX1JBSUwuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5JTlRFUk5BVElPTkFMX1JBSUwuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShcbiAgICAgICAgICAgIGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcmV2aW91c0l0ZW1zLklOVEVSTkFUSU9OQUxfUkFJTC5vdXRib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5JTlRFUk5BVElPTkFMX1JBSUwub3V0Ym91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FiaGlyZSBmcm9tIGludGVybmF0aW9uYWwgcmFpbCBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChob3RlbEl0ZW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLkhPVEVMLmluYm91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuSE9URUwuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShcbiAgICAgICAgICAgIGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcmV2aW91c0l0ZW1zLkhPVEVMLm91dGJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLkhPVEVMLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKFxuICAgICAgICAgICAgYCR7ZGF0ZUFycmF5WzBdfSR7ZGF0ZUFycmF5WzFdfSR7ZGF0ZUFycmF5WzJdLnN1YnN0cmluZygwLCAyKX1gLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhYmhpcmUgZnJvbSBob3RlbCBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYXJJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5DQVIuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5DQVIuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShcbiAgICAgICAgICAgIGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcmV2aW91c0l0ZW1zLkNBUi5vdXRib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5DQVIub3V0Ym91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FiaGlyZSBmcm9tIGNhciBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChsb3VuZ2VJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5MT1VOR0UuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5MT1VOR0UuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShcbiAgICAgICAgICAgIGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcmV2aW91c0l0ZW1zLkxPVU5HRS5vdXRib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5MT1VOR0Uub3V0Ym91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FiaGlyZSBmcm9tIGxvdW5nZSBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwYXJraW5nSXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuUEFSS0lORy5pbmJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLlBBUktJTkcuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShcbiAgICAgICAgICAgIGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcmV2aW91c0l0ZW1zLlBBUktJTkcub3V0Ym91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuUEFSS0lORy5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShcbiAgICAgICAgICAgIGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBjYWJoaXJlIGZyb20gcGFya2luZyBpdGVtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldXJvc3Rhckl0ZW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLkVVUk9TVEFSLmluYm91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuRVVST1NUQVIuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShcbiAgICAgICAgICAgIGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcmV2aW91c0l0ZW1zLkVVUk9TVEFSLm91dGJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLkVVUk9TVEFSLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKFxuICAgICAgICAgICAgYCR7ZGF0ZUFycmF5WzBdfSR7ZGF0ZUFycmF5WzFdfSR7ZGF0ZUFycmF5WzJdLnN1YnN0cmluZygwLCAyKX1gLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhYmhpcmUgZnJvbSBldXJvc3RhciBpdGVtJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU2VhcmNoRnJvbUV4cGlyZWRCYXNrZXRJdGVtKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sIHNldERhdGVUaW1lOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIGNvbnN0IHNlYXJjaENhYkhpcmVRdWVyeTogU2VhcmNoQ2FiSGlyZVF1ZXJ5VmFyaWFibGVzID0gYmFza2V0SXRlbS5zZWFyY2hRdWVyeTtcblxuICAgIGlmIChzZWFyY2hDYWJIaXJlUXVlcnkpIHtcbiAgICAgIGlmIChzZXREYXRlVGltZSkge1xuICAgICAgICB0aGlzLmRlcGFydHMgPSBtb21lbnQoc2VhcmNoQ2FiSGlyZVF1ZXJ5LmRlcGFydHMpO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLnNldFF1ZXJ5RnJvbUJhc2tldEl0ZW0oYmFza2V0SXRlbSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZHVsdHMgPSBzZWFyY2hDYWJIaXJlUXVlcnkuYWR1bHRzO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBzZWFyY2hDYWJIaXJlUXVlcnkuY2hpbGRyZW47XG4gICAgdGhpcy5pbmZhbnRzID0gc2VhcmNoQ2FiSGlyZVF1ZXJ5LmluZmFudHM7XG4gICAgdGhpcy5hZGRUcmF2ZWxsZXJzRnJvbUJhc2tldEl0ZW0oYmFza2V0SXRlbSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRBZGRyZXNzTG9jYXRpb24oYWRkcmVzczogQ2FiSGlyZUxvY2F0aW9uSW5wdXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgQ291bnRyeUNvZGU6IGFkZHJlc3MuY291bnRyeUNvZGUsXG4gICAgICBIb3VzZTogYWRkcmVzcy5idWlsZGluZ05hbWUsXG4gICAgICBTdHJlZXQ6IGFkZHJlc3Muc3RyZWV0QW5kTnVtYmVyLFxuICAgICAgVG93bjogYWRkcmVzcy50b3duLFxuICAgICAgUG9zdENvZGU6IGFkZHJlc3MucG9zdGNvZGUsXG4gICAgICBDb3VudHJ5OiBhZGRyZXNzLmNvdW50cnlDb2RlLFxuICAgICAgVGVybWluYWw6IGFkZHJlc3MudGVybWluYWwsXG4gICAgICBDb3VudHk6ICBhZGRyZXNzLmNvdW50eSxcbiAgICAgIEZsaWdodE51bWJlcjogYWRkcmVzcy5mbGlnaHROdW1iZXIsXG4gICAgICBGbGlnaHRUcmFpbkRhdGVUaW1lOiBhZGRyZXNzLmZsaWdodFRyYWluRGF0ZVRpbWUsXG4gICAgICBDYXJyaWVyOiBhZGRyZXNzLmNhcnJpZXJcbiAgICB9O1xuICB9XG5cbiAgZ2V0VHJhbnNUeXBlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdHJhbnNUeXBlSW5kZXggPSB0aGlzLnRlbXBQYXJhbXMudmVoaWNsZVR5cGU7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNUeXBlcy5maW5kKHggPT4geC5rZXkgPT09IHRyYW5zVHlwZUluZGV4KT8udmFsdWUgfHwgJyc7XG4gIH1cblxuICBnZXRQYXNzZW5nZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgYWR1bHRzID0gdGhpcy5hZHVsdHM7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgIGxldCBwYXNzZW5nZXJzID0gYCR7YWR1bHRzfSBBZHVsdGA7XG5cbiAgICBpZiAoTnVtYmVyKGFkdWx0cykgIT09IDEpIHtcbiAgICAgIHBhc3NlbmdlcnMgKz0gJ3MnO1xuICAgIH1cbiAgICBpZiAoTnVtYmVyKGNoaWxkcmVuKSA9PT0gMSkge1xuICAgICAgcGFzc2VuZ2VycyArPSBgLCAke2NoaWxkcmVufSBDaGlsZGA7XG4gICAgfVxuXG4gICAgaWYgKE51bWJlcihjaGlsZHJlbikgPiAxKSB7XG4gICAgICBwYXNzZW5nZXJzICs9IGAsICR7Y2hpbGRyZW59IENoaWxkcmVuYDtcbiAgICB9XG4gICAgcmV0dXJuIHBhc3NlbmdlcnM7XG4gICAgcmV0dXJuICcnO1xuICB9O1xuXG4gIGFzeW5jIGFkZENhYkhpcmVUb0Jhc2tldChcbiAgICBjYWJIaXJlUXVvdGU6IENhYkhpcmVRdW90ZSxcbiAgICBjYWJIaXJlUXVlcnk6IFNlYXJjaENhYkhpcmVRdWVyeVZhcmlhYmxlcyxcbiAgICBpZ25vcmVJbnZva2VkOiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XG4gICAgaWYgKGNhYkhpcmVRdW90ZS51bmF2YWlsYWJsZSAmJiAhdGhpcy51c2VyU2VydmljZS5jYW5PdmVycmlkZSgpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoY2FiSGlyZVF1b3RlKTtcbiAgICBpZiAoYmFza2V0KSB7XG4gICAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXG4gICAgICAgIHtcbiAgICAgICAgICBhZHVsdHM6IGNhYkhpcmVRdWVyeS5hZHVsdHMsXG4gICAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXG4gICAgICAgICAgc2VydmljZTogY2FiSGlyZVF1b3RlLnNvdXJjZUlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsOiBjYWJIaXJlUXVvdGUuYWRkaXRpb25hbCxcbiAgICAgICAgICAgIGlkOiBjYWJIaXJlUXVvdGUuaWQsXG4gICAgICAgICAgICBkZXBhcnRzOiBjYWJIaXJlUXVlcnkuZGVwYXJ0cyxcbiAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogY2FiSGlyZVF1b3RlLnN1cHBsaWVyTmFtZSxcbiAgICAgICAgICAgIGVzdGltYXRlZENPMjogY2FiSGlyZVF1b3RlLmVzdGltYXRlZENPMixcbiAgICAgICAgICAgIGZyb21Mb2NhdGlvbjoge1xuICAgICAgICAgICAgICBhZGRyZXNzVHlwZTogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbi5hZGRyZXNzVHlwZSxcbiAgICAgICAgICAgICAgYnVpbGRpbmdOYW1lOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uLmJ1aWxkaW5nTmFtZSxcbiAgICAgICAgICAgICAgc3RyZWV0QW5kTnVtYmVyOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uLnN0cmVldEFuZE51bWJlcixcbiAgICAgICAgICAgICAgdG93bjogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbi50b3duLFxuICAgICAgICAgICAgICBwb3N0Y29kZTogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbi5wb3N0Y29kZSxcbiAgICAgICAgICAgICAgY291bnR5OiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uLmNvdW50eSxcbiAgICAgICAgICAgICAgY291bnRyeUNvZGU6IGNhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24uY291bnRyeUNvZGUsXG4gICAgICAgICAgICAgIGxhdGl0dWRlOiBjYWJIaXJlUXVvdGUuZnJvbUxvY2F0aW9uLmxhdGl0dWRlLFxuICAgICAgICAgICAgICBsb25naXR1ZGU6IGNhYkhpcmVRdW90ZS5mcm9tTG9jYXRpb24ubG9uZ2l0dWRlLFxuICAgICAgICAgICAgICBmbGlnaHRUcmFpbkRhdGVUaW1lOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uPy5mbGlnaHRUcmFpbkRhdGVUaW1lLFxuICAgICAgICAgICAgICBmbGlnaHROdW1iZXI6IGNhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24/LmZsaWdodE51bWJlcixcbiAgICAgICAgICAgICAgdGVybWluYWw6IGNhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24/LnRlcm1pbmFsLFxuICAgICAgICAgICAgICBjYXJyaWVyOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uPy5jYXJyaWVyLFxuICAgICAgICAgICAgICBhaXJwb3J0U3RhdGlvbk5hbWU6IGNhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24/LmFpcnBvcnRTdGF0aW9uTmFtZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRvTG9jYXRpb246IHtcbiAgICAgICAgICAgICAgYWRkcmVzc1R5cGU6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uLmFkZHJlc3NUeXBlLFxuICAgICAgICAgICAgICBidWlsZGluZ05hbWU6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uLmJ1aWxkaW5nTmFtZSxcbiAgICAgICAgICAgICAgc3RyZWV0QW5kTnVtYmVyOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi5zdHJlZXRBbmROdW1iZXIsXG4gICAgICAgICAgICAgIHRvd246IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uLnRvd24sXG4gICAgICAgICAgICAgIHBvc3Rjb2RlOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi5wb3N0Y29kZSxcbiAgICAgICAgICAgICAgY291bnR5OiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi5jb3VudHksXG4gICAgICAgICAgICAgIGNvdW50cnlDb2RlOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IGNhYkhpcmVRdW90ZS50b0xvY2F0aW9uLmxhdGl0dWRlLFxuICAgICAgICAgICAgICBsb25naXR1ZGU6IGNhYkhpcmVRdW90ZS50b0xvY2F0aW9uLmxvbmdpdHVkZSxcbiAgICAgICAgICAgICAgZmxpZ2h0VHJhaW5EYXRlVGltZTogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24/LmZsaWdodFRyYWluRGF0ZVRpbWUsXG4gICAgICAgICAgICAgIGZsaWdodE51bWJlcjogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24/LmZsaWdodE51bWJlcixcbiAgICAgICAgICAgICAgdGVybWluYWw6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uPy50ZXJtaW5hbCxcbiAgICAgICAgICAgICAgY2FycmllcjogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24/LmNhcnJpZXIsXG4gICAgICAgICAgICAgIGFpcnBvcnRTdGF0aW9uTmFtZTogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24/LmFpcnBvcnRTdGF0aW9uTmFtZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZpYXM6IGNhYkhpcmVRdWVyeS52aWFzLFxuICAgICAgICAgICAgdmVoaWNsZVR5cGU6IGNhYkhpcmVRdW90ZS52ZWhpY2xlVHlwZSxcbiAgICAgICAgICAgIHRyaXBEaXN0YW5jZU1ldHJlczogY2FiSGlyZVF1b3RlLnRyaXBEaXN0YW5jZU1ldHJlcyxcbiAgICAgICAgICAgIHRyaXBEdXJhdGlvblNlY29uZHM6IGNhYkhpcmVRdW90ZS50cmlwRHVyYXRpb25TZWNvbmRzLFxuICAgICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByaWNlOiBjYWJIaXJlUXVvdGUucHJpY2UsXG4gICAgICAgICAgY3VycmVuY3k6IGNhYkhpcmVRdW90ZS5jdXJyZW5jeSxcbiAgICAgICAgICBzZWFyY2hRdWVyeTogY2FiSGlyZVF1ZXJ5LFxuICAgICAgICAgIGNvMlBlckl0ZW06IGNhYkhpcmVRdW90ZS5jbzJQZXJJdGVtLFxuICAgICAgICAgIGNvMlBlclBhc3NlbmdlcjogY2FiSGlyZVF1b3RlLmNvMlBlclBhc3NlbmdlcixcbiAgICAgICAgICBvdXRib3VuZERhdGU6IGNhYkhpcmVRdWVyeS5kZXBhcnRzLFxuICAgICAgICAgIGxvd2VzdFByaWNlOlxuICAgICAgICAgICAgdGhpcy5jaGVhcGVzdFByaWNlPy5hbW91bnQgfHwgdGhpcy5jaGVhcGVzdFByaWNlPy5jdXJyZW5jeUNvZGUgIT09IGNhYkhpcmVRdW90ZS5jdXJyZW5jeVxuICAgICAgICAgICAgICA/IHRoaXMuY2hlYXBlc3RQcmljZT8uYW1vdW50XG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBsb3dlc3RQcmljZUN1cnJlbmN5OlxuICAgICAgICAgICAgdGhpcy5jaGVhcGVzdFByaWNlPy5hbW91bnQgfHwgdGhpcy5jaGVhcGVzdFByaWNlPy5jdXJyZW5jeUNvZGUgIT09IGNhYkhpcmVRdW90ZS5jdXJyZW5jeVxuICAgICAgICAgICAgICA/IDxDdXJyZW5jeUNvZGU+dGhpcy5jaGVhcGVzdFByaWNlPy5jdXJyZW5jeUNvZGVcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgcmVhc29uS2V5czogY2FiSGlyZVF1b3RlLnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgICAgICAgIGFnZW50T3ZlcnJvZGVVbmF2YWlsYWJsZTpjYWJIaXJlUXVvdGUudW5hdmFpbGFibGVcblxuICAgICAgICB9LFxuICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxuICAgICAgICBjYWJIaXJlUXVvdGUucmVxdWlyZXNSZWFzb25LZXlzLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgaWdub3JlSW52b2tlZFxuICAgICAgKTtcbiAgICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcbiAgICAgICAgICB0aGlzLnJlc2VhcmNoV2l0aE5ld1VzZXIoKTtcbiAgICAgICAgfVxuICAgICAgcmV0dXJuIHdoYXRIYXBwZW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xuICB9XG5cbiAgc3dpdGNoRnJvbUFuZFRvTG9jYXRpb24oKSB7XG4gICAgY29uc3QgbmV3RnJvbUFkZHJlc3MgPSB7IC4uLnRoaXMudG9BZGRyZXNzIH07XG4gICAgY29uc3QgbmV3VG9BZGRyZXNzID0geyAuLi50aGlzLmZyb21BZGRyZXNzIH07XG4gICAgdGhpcy5mcm9tQWRkcmVzcyA9IG5ld0Zyb21BZGRyZXNzO1xuICAgIHRoaXMudG9BZGRyZXNzID0gbmV3VG9BZGRyZXNzO1xuICB9XG5cbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogQ2FiSGlyZVF1b3RlW10pOiBJQ2hlYXBlc3RQcmljZSB7XG4gICAgaWYgKCFyZXN1bHRzPy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGN1cnJlbmN5ID0gcmVzdWx0c1swXS5jdXJyZW5jeTtcbiAgICByZXR1cm4gcmVzdWx0cy5yZWR1Y2UoXG4gICAgICAoY2hlYXBlc3RQcmljZTogSUNoZWFwZXN0UHJpY2UsIHJlc3VsdDogQ2FiSGlyZVF1b3RlKSA9PiB7XG4gICAgICAgIGNvbnN0IHByaWNlID0gcmVzdWx0LnByaWNlO1xuICAgICAgICBpZiAoY2hlYXBlc3RQcmljZS5hbW91bnQgPiBwcmljZSkgY2hlYXBlc3RQcmljZS5hbW91bnQgPSBwcmljZTtcbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XG4gICAgICB9LFxuICAgICAgeyBhbW91bnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBjdXJyZW5jeUNvZGU6IGN1cnJlbmN5IH1cbiAgICApO1xuICB9XG5cbiAgZ2V0VGVybXNBbmRDb25kKGNhYkhpcmVRdW90ZTogQ2FiSGlyZVF1b3RlKSB7XG4gICAgY29uc3QgZGVwYXJ0cyA9IG1vbWVudChjYWJIaXJlUXVvdGUuZGVwYXJ0cykudXRjKCkuZm9ybWF0KEJhc2VIZWxwZXJSb3V0aW5lcy5JU09fREFUQV9GT1JNQVRfVElNRSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0xvd2VzdCBQcmljZScsXG4gICAgICAgIHZhbHVlOiBjYWJIaXJlUXVvdGUucHJpY2UudG9TdHJpbmcoKSArICcgJyArIGNhYkhpcmVRdW90ZS5jdXJyZW5jeVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1BpY2t1cCBUaW1lJyxcbiAgICAgICAgdmFsdWU6IGRlcGFydHNcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdUZXJtcyBhbmQgQ29uZGl0aW9ucycsXG4gICAgICAgIHZhbHVlOlxuICAgICAgICAgIGNhYkhpcmVRdW90ZS5zb3VyY2UgPT09IFNlcnZpY2VQcm92aWRlci5DTUFDXG4gICAgICAgICAgICA/ICc8YSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiaHR0cHM6Ly93d3cuY21hY2dyb3VwLmNvbS9cIj53d3cuY21hY2dyb3VwLmNvbTwvYT4nXG4gICAgICAgICAgICA6IGNhYkhpcmVRdW90ZS5hZGRpdGlvbmFsPy5wcm92aWRlcnNQcmljaW5nPy5ub3Rlc1xuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBzYXZlU2VhcmNoKCk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5OiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IElDYWJIaXJlU2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XG4gICAgICBjb25zdCBzZWFyY2hJbmZvID0ge1xuICAgICAgICBuYW1lOiBgJHttb21lbnQoKX1gLFxuICAgICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuQ2FiLFxuICAgICAgICBzZWFyY2hBcmdzOiBmYXZvdXJpdGVTZWFyY2hRdWVyeVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgYXBwbHlGYXZvdXJpdGUoZmF2OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZmF2LmZyb21Mb2NhdGlvbi5TdHJlZXQgJiYgZmF2LnRvTG9jYXRpb24uU3RyZWV0KSB7XG4gICAgICB0aGlzLm1vZGUgPSBUYXhpRm9ybU1vZGUuQUREUkVTUztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb2RlID0gVGF4aUZvcm1Nb2RlLlNUQVRJT047XG4gICAgICB0aGlzLmFpcnBvcnRTZWFyY2hUeXBlID0gZmF2LmZyb21Mb2NhdGlvbi5TdHJlZXRcbiAgICAgICAgPyBBaXJwb3J0U2VhcmNoTW9kZS5EUk9QT0ZGXG4gICAgICAgIDogQWlycG9ydFNlYXJjaE1vZGUuUElDS1VQO1xuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAgIC5nZXRBaXJwb3J0c0xpc3QoIWZhdi5mcm9tTG9jYXRpb24uU3RyZWV0ID8gZmF2LmZyb21Mb2NhdGlvbi5Ib3VzZSA6IGZhdi50b0xvY2F0aW9uLkhvdXNlKVxuICAgICAgICAuc3Vic2NyaWJlKGFpcnBvcnQgPT4ge1xuICAgICAgICAgIHRoaXMuYWlycG9ydCA9IChhaXJwb3J0IGFzIGFueVtdKVswXTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuYWR1bHRzID0gZmF2LmFkdWx0cztcbiAgICB0aGlzLmNoaWxkcmVuID0gZmF2LmNoaWxkcmVuO1xuICAgIHRoaXMuaW5mYW50cyA9IGZhdi5pbmZhbnRzO1xuICAgIC8vIHRoaXMuZnJvbUFkZHJlc3MuSG91c2UgPSBmYXYuZnJvbUxvY2F0aW9uLkhvdXNlXG4gICAgLy8gdGhpcy5mcm9tQWRkcmVzcy5TdHJlZXQgPSBmYXYuZnJvbUxvY2F0aW9uLlN0cmVldFxuICAgIC8vIHRoaXMuZnJvbUFkZHJlc3MuVG93biA9IGZhdi5mcm9tTG9jYXRpb24uVG93blxuICAgIC8vIHRoaXMuZnJvbUFkZHJlc3MuQ291bnRyeSA9IGZhdi5mcm9tTG9jYXRpb24uQ291bnRyeVxuICAgIC8vIHRoaXMuZnJvbUFkZHJlc3MuUG9zdENvZGUgPSBmYXYuZnJvbUxvY2F0aW9uLlBvc3RDb2RlXG4gICAgLy8gdGhpcy5mcm9tQWRkcmVzcy5wbGFjZURlc2NyaXB0aW9uID0gZmF2LmZyb21Mb2NhdGlvbi5wbGFjZURlc2NyaXB0aW9uXG4gICAgLy8gdGhpcy50b0FkZHJlc3MuSG91c2UgPSBmYXYudG9Mb2NhdGlvbi5Ib3VzZVxuICAgIC8vIHRoaXMudG9BZGRyZXNzLlN0cmVldCA9IGZhdi50b0xvY2F0aW9uLlN0cmVldFxuICAgIC8vIHRoaXMudG9BZGRyZXNzLlRvd24gPSBmYXYudG9Mb2NhdGlvbi5Ub3duXG4gICAgLy8gdGhpcy50b0FkZHJlc3MuQ291bnRyeSA9IGZhdi50b0xvY2F0aW9uLkNvdW50cnlcbiAgICAvLyB0aGlzLnRvQWRkcmVzcy5Qb3N0Q29kZSA9IGZhdi50b0xvY2F0aW9uLlBvc3RDb2RlXG4gICAgLy8gdGhpcy50b0FkZHJlc3MucGxhY2VEZXNjcmlwdGlvbiA9IGZhdi50b0xvY2F0aW9uLnBsYWNlRGVzY3JpcHRpb25cbiAgICB0aGlzLmZyb21BZGRyZXNzID0gZmF2LmZyb21Mb2NhdGlvbjtcbiAgICB0aGlzLnRvQWRkcmVzcyA9IGZhdi50b0xvY2F0aW9uO1xuICAgIHRoaXMudmVoaWNsZVR5cGUgPSBmYXYudmVoaWNsZVR5cGU7XG4gIH1cblxuICBtZXNzYWdlQ29uZmlnQ2hlY2soY29uZmlnOiBhbnksIGlzQ2hlY2tQYXNzOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKGNvbmZpZy5haXJwb3J0ICYmIGlzQ2hlY2tQYXNzKSB7XG4gICAgICBjb25zdCBmcm9tQWlycG9ydCA9IHRoaXMuZnJvbUFkZHJlc3M/LkFpcnBvcnRTdGF0aW9uTmFtZSA9PT0gY29uZmlnLmFpcnBvcnQ7XG4gICAgICBjb25zdCB0b0FpcnBvcnQgPSB0aGlzLnRvQWRkcmVzcz8uQWlycG9ydFN0YXRpb25OYW1lID09PSBjb25maWcuYWlycG9ydDtcbiAgICAgIGlzQ2hlY2tQYXNzID0gZnJvbUFpcnBvcnQgfHwgdG9BaXJwb3J0O1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmNpdHkgJiYgaXNDaGVja1Bhc3MpIHtcbiAgICAgIGNvbnN0IGNpdHkgPSBjb25maWcuY2l0eS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgICAgbGV0IGZyb21DaXR5ID0gdGhpcy5mcm9tTG9jYXRpb24/LnRvd24/LnRvTG93ZXJDYXNlKCkudHJpbSgpID09PSAgY2l0eTtcbiAgICAgIGlmKHRoaXMuZnJvbUxvY2F0aW9uPy5idWlsZGluZ05hbWUgJiYgIWZyb21DaXR5KXtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZnJvbUxvY2F0aW9uPy5idWlsZGluZ05hbWU/LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICBmcm9tQ2l0eSA9IG5hbWUuaW5jbHVkZXMoY2l0eSk7XG4gICAgICB9XG4gICAgICBsZXQgdG9DaXR5ID0gdGhpcy50b0xvY2F0aW9uPy50b3duPy50b0xvd2VyQ2FzZSgpLnRyaW0oKSA9PT0gIGNpdHk7XG4gICAgICBpZih0aGlzLnRvTG9jYXRpb24/LmJ1aWxkaW5nTmFtZSAmJiAhdG9DaXR5KXtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudG9Mb2NhdGlvbj8uYnVpbGRpbmdOYW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgdG9DaXR5ID0gbmFtZS5pbmNsdWRlcyhjaXR5KTtcbiAgICAgIH1cblxuICAgICAgaXNDaGVja1Bhc3MgPSBmcm9tQ2l0eSB8fCB0b0NpdHk7XG4gICAgfVxuICAgIHJldHVybiBpc0NoZWNrUGFzcztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlTG9jYXRpb24oXG4gICAgbW9kZTogVGF4aUZvcm1Nb2RlLFxuICAgIGxvY2F0aW9uOiBDYWJIaXJlTG9jYXRpb25JbnB1dFxuICApOiBQcm9taXNlPFJhaWxBaXJwb3J0IHwgbnVsbD4ge1xuICAgIGlmIChtb2RlICE9PSBUYXhpRm9ybU1vZGUuU1RBVElPTikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICBcbiAgICBjb25zdCB0ZXJtID0gbG9jYXRpb24uYnVpbGRpbmdOYW1lLnJlcGxhY2UoL15bXixdKyxcXHMqLywgXCJcIik7XG4gICAgY29uc3QgaXNUcnVlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIFxuICAgIGlmIChsb2NhdGlvbi50ZXJtaW5hbCkgeyAvLyBhaXJwb3J0IHR5cGVcbiAgICAgIGNvbnN0IGxvY2F0aW9ucyAgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydExvY2F0aW9ucyh0ZXJtLCBsb2NhdGlvbi5jb3VudHJ5Q29kZSwgaXNUcnVlU3ViamVjdCkpO1xuICAgICAgaWYgKGxvY2F0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHsgYWlycG9ydCwgbmFtZSwgdHlwZSB9ID0gbG9jYXRpb25zWzBdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgYWlycG9ydCxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHN1cHBsaWVyX2NvZGU6IG51bGwsXG4gICAgICAgICAgaXNhaXJwb3J0OiBudWxsLFxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBhaXJwb3J0LmRlc3RpbmF0aW9uLFxuICAgICAgICAgIHRlcm1pbmFsOiBsb2NhdGlvbi50ZXJtaW5hbCxcbiAgICAgICAgfSBhcyBSYWlsQWlycG9ydDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxvY2F0aW9uLmJ1aWxkaW5nTmFtZSA9PT0gbG9jYXRpb24uc3RyZWV0QW5kTnVtYmVyKSB7IC8vIFRyYWluIFN0LiB0eXBlXG4gICAgICBjb25zdCBsb2NhdGlvbnMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0U3RhdGlvbkxvY2F0aW9ucyh0ZXJtLCBpc1RydWVTdWJqZWN0KSk7XG4gICAgICBpZiAobG9jYXRpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgeyBuYW1lLCByYWlsc3RhdGlvbiwgdHlwZSB9ID0gbG9jYXRpb25zWzBdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICByYWlsc3RhdGlvbixcbiAgICAgICAgICBzdXBwbGllcl9jb2RlOiBudWxsLFxuICAgICAgICAgIGlzYWlycG9ydDogbnVsbCxcbiAgICAgICAgICBkZXN0aW5hdGlvbjogbnVsbCxcbiAgICAgICAgfSBhcyBSYWlsQWlycG9ydDtcbiAgICAgIH1cbiAgICB9XG4gIFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0QWRkcmVzcyhldmVudDogYW55KTogQWRkcmVzc0Zvcm0ge1xuICAgIGxldCBhZGRyZXNzOiBBZGRyZXNzRm9ybSA9IG51bGw7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBsZXQgYWRkcmVzc1R5cGU6IHN0cmluZyA9IGV2ZW50Py50eXBlO1xuICAgICAgaWYgKGFkZHJlc3NUeXBlPy50b0xvd2VyQ2FzZSgpPy5pbmNsdWRlcygnYWlycG9ydCcpKSB7XG4gICAgICAgIGFkZHJlc3MgPSB7XG4gICAgICAgICAgSG91c2U6IGV2ZW50Py50eXBlLFxuICAgICAgICAgIFN0cmVldDogZXZlbnQ/Lm5hbWUsXG4gICAgICAgICAgUG9zdENvZGU6IGV2ZW50Py5haXJwb3J0Py5wb3N0Y29kZSxcbiAgICAgICAgICBUZXJtaW5hbDogZXZlbnQ/LnRlcm1pbmFsIHx8IG51bGwsXG4gICAgICAgICAgQ291bnRyeTogZXZlbnQ/LmFpcnBvcnQ/LmNvdW50cnlDb2RlLFxuICAgICAgICAgIEZsaWdodE51bWJlcjogIGV2ZW50Py5mbGlnaHROdW1iZXIgfHwgJycsXG4gICAgICAgICAgQ2FycmllcjogIGV2ZW50Py5jYXJyaWVyIHx8ICcnLFxuICAgICAgICAgIEFpcnBvcnRTdGF0aW9uTmFtZTogZXZlbnQ/LmFpcnBvcnQ/LmdhdGV3YXkgfHwgJydcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkcmVzcyA9IHtcbiAgICAgICAgICBIb3VzZTogZXZlbnQ/LnR5cGUsXG4gICAgICAgICAgU3RyZWV0OiBldmVudD8ubmFtZSxcbiAgICAgICAgICBQb3N0Q29kZTogZXZlbnQ/LnJhaWxzdGF0aW9uPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxuICAgICAgICAgIENvdW50cnk6IGV2ZW50Py5yYWlsc3RhdGlvbj8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZSxcbiAgICAgICAgICBGbGlnaHROdW1iZXI6ICBldmVudD8uZmxpZ2h0TnVtYmVyIHx8ICcnLFxuICAgICAgICAgIENhcnJpZXI6ICBldmVudD8uY2FycmllciB8fCAnJyxcbiAgICAgICAgICBBaXJwb3J0U3RhdGlvbk5hbWU6IGV2ZW50Py5yYWlsc3RhdGlvbj8uc3RhdGlvbkNvZGUgfHwgJycsXG4gICAgICAgICAgRmxpZ2h0VHJhaW5EYXRlVGltZTogZXZlbnQ/LmZsaWdodFRyYWluRGF0ZVRpbWUgfHwgJzA5OjAwJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhZGRyZXNzO1xuICB9XG5cbiAgX2FwcGx5RmlsdGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlYXJjaFNlcnZpY2UuaXNDbG9uaW5nLmdldFZhbHVlKCkpIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkUmVzdWx0cyA9IHRoaXMuZnVsbFJlc3VsdHMuZmlsdGVyKChyZXN1bHQ6IENhYkhpcmVRdW90ZSkgPT4gXG4gICAgICAgIHJlc3VsdC5zdXBwbGllck5hbWUgPT09IHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMuc3VwcGxpZXJOYW1lXG4gICAgICApO1xuICAgICAgdGhpcy5yZXN1bHRzLm5leHQodGhpcy5oZWxwZXJzLmNsb25lKGZpbHRlcmVkUmVzdWx0cykpO1xuICAgIH0gXG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmNsb25lZEJhc2tldEl0ZW1EZXRhaWxzID0ge307XG4gICAgICB0aGlzLnJlc3VsdHMubmV4dCh0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdlIHVzZSB0aGlzIG1ldGhvZCBmb3IgZmVhdHVyZXM6IEV4cGlyZWRCYXNrZXQsIENvcHlCYXNrZXQsIENsb25lQmFza2V0XG4gIC8vIE5vdGU6IERvIG5vdCBpbmNsdWRlIGRhdGVzIGFuZCB0YXZlbGxlcnMgaW4gdGhpcyBtZXRob2RcbiAgYXN5bmMgYXBwbHlTZWFyY2hRdWVyeShxdWVyeTogU2VhcmNoQ2FiSGlyZVF1ZXJ5VmFyaWFibGVzLCBzdGFydFNlYXJjaDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICB0aGlzLmZyb21BZGRyZXNzID0gdGhpcy5jb252ZXJ0QWRkcmVzc0xvY2F0aW9uKFxuICAgICAgcXVlcnkuZnJvbUxvY2F0aW9uXG4gICAgKTtcblxuICAgIHRoaXMudG9BZGRyZXNzID0gdGhpcy5jb252ZXJ0QWRkcmVzc0xvY2F0aW9uKFxuICAgICAgcXVlcnkudG9Mb2NhdGlvblxuICAgICk7XG5cbiAgICBjb25zdCBpc0xpbW86IGJvb2xlYW4gPSBxdWVyeS5tZXNzYWdlVHlwZSA9PT0gTWVzc2FnZVR5cGUuTGltbyA/IHRydWUgOiBmYWxzZTtcbiAgXG4gICAgdGhpcy52ZWhpY2xlVHlwZSA9IGlzTGltbyA/IENhYkhpcmVWZWhpY2xlVHlwZS5MaW1vIDogcXVlcnkudmVoaWNsZVR5cGU7XG4gICAgdGhpcy5saW1vVHlwZSA9IGlzTGltbyA/IHF1ZXJ5LnZlaGljbGVUeXBlIDogbnVsbDtcbiAgICB0aGlzLnRyYW5zcG9ydFR5cGUgPSBpc0xpbW8gPyB0aGlzLnRlbXBQYXJhbXMudHJhbnNwb3J0VHlwZSA6IG51bGw7XG4gICAgdGhpcy5saW1vQXNEaXJlY3RlZER1cmF0aW9uID0gcXVlcnkudHJhbnNwb3J0VHlwZSA9PT0gVHJhbnNwb3J0VHlwZS5Ib3VybHkgPyArcXVlcnkubGltb0FzRGlyZWN0ZWREdXJhdGlvbiA6IG51bGw7XG5cbiAgICB0aGlzLm1vZGUgPSBxdWVyeS5mcm9tTG9jYXRpb24uYnVpbGRpbmdOYW1lID09PSBxdWVyeS5mcm9tTG9jYXRpb24uc3RyZWV0QW5kTnVtYmVyIHx8IHF1ZXJ5LmZyb21Mb2NhdGlvbi50ZXJtaW5hbCA/IFRheGlGb3JtTW9kZS5TVEFUSU9OIDogVGF4aUZvcm1Nb2RlLkFERFJFU1M7XG4gICAgdGhpcy5tb2RlVG8gPSBxdWVyeS50b0xvY2F0aW9uLmJ1aWxkaW5nTmFtZSA9PT0gcXVlcnkudG9Mb2NhdGlvbi5zdHJlZXRBbmROdW1iZXIgfHwgcXVlcnkudG9Mb2NhdGlvbi50ZXJtaW5hbCA/IFRheGlGb3JtTW9kZS5TVEFUSU9OIDogVGF4aUZvcm1Nb2RlLkFERFJFU1M7XG5cbiAgICB0aGlzLmZyb21TdGF0aW9uID0gYXdhaXQgdGhpcy5oYW5kbGVMb2NhdGlvbih0aGlzLm1vZGUsIHF1ZXJ5LmZyb21Mb2NhdGlvbik7XG4gICAgdGhpcy50b1N0YXRpb24gPSBhd2FpdCB0aGlzLmhhbmRsZUxvY2F0aW9uKHRoaXMubW9kZVRvLCBxdWVyeS50b0xvY2F0aW9uKTtcblxuICAgIHRoaXMudmlhcyA9IHF1ZXJ5LnZpYXMgYXMgQ2FiSGlyZUxvY2F0aW9uSW5wdXRbXSB8fCBbXTtcbiAgICBpZiAodGhpcy52aWFzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudmlhc0Zyb20gPSB0aGlzLmNvbnZlcnRBZGRyZXNzTG9jYXRpb24odGhpcy52aWFzWzBdKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmlhcy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLnZpYXNUbyA9IHRoaXMuY29udmVydEFkZHJlc3NMb2NhdGlvbih0aGlzLnZpYXNbMV0pO1xuICAgIH1cblxuICAgIGlmIChzdGFydFNlYXJjaCkge1xuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
1398
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FiaGlyZS1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9jYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVELE9BQU8sRUFPTCw0QkFBNEIsRUFDNUIsZUFBZSxFQUVmLGFBQWEsRUFDZCxNQUFNLGdCQUFnQixDQUFDO0FBTXhCLE9BQU8sRUFDTCxXQUFXLEVBSVgsa0JBQWtCLEVBR2xCLFdBQVcsRUFZWCxXQUFXLEVBQ1gsYUFBYSxFQUNkLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLGlCQUFpQixFQUtqQixZQUFZLEVBRWIsTUFBTSwwQ0FBMEMsQ0FBQztBQVNsRCxNQUFNLE9BQU8sdUJBQ1gsU0FBUSxvQkFBeUY7SUErZGpHLFlBQ1UsVUFBeUMsRUFDakQsT0FBMkIsRUFDM0IsY0FBa0MsRUFDbEMsYUFBK0MsRUFDdkMsYUFBK0MsRUFDdkQsV0FBaUM7UUFFakMsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBUG5ELGVBQVUsR0FBVixVQUFVLENBQStCO1FBSXpDLGtCQUFhLEdBQWIsYUFBYSxDQUFrQztRQTNkbEQsU0FBSSxHQUFnQixXQUFXLENBQUMsR0FBRyxDQUFDO1FBQ25DLGVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBQ3JDLGtCQUFhLEdBQXlCLElBQUksT0FB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LENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XG5pbXBvcnQge1xuICBBZGRyZXNzRm9ybSxcbiAgQ2FiaGlyZVF1b3RlUmVzdWx0QXJyYXksXG4gIE5nYkRhdGVTdHJ1Y3QsXG4gIFJhaWxBaXJwb3J0LFxuICBSZWNlbnRTZWFyY2gsXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQsXG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXG4gIFNlcnZpY2VQcm92aWRlcixcbiAgS2V5VmFsdWUsXG4gIExvY2F0aW9uVHlwZXNcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XG5pbXBvcnQge1xuICBCYXNlQ2FiaGlyZVF1b3RlRmV0Y2hlcixcbiAgQ2FiaGlyZVF1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FiaGlyZS1xdW90ZS1mZXRjaGVyJztcbmltcG9ydCB7XG4gIEFkZHJlc3NUeXBlLFxuICBCYXNrZXRJdGVtLFxuICBDYWJIaXJlTG9jYXRpb25JbnB1dCxcbiAgQ2FiSGlyZVF1b3RlLFxuICBDYWJIaXJlVmVoaWNsZVR5cGUsXG4gIEN1cnJlbmN5Q29kZSxcbiAgTG9jYXRpb25EZXRhaWwsXG4gIE1lc3NhZ2VUeXBlLFxuICBRdWVyeVNlYXJjaENhYkhpcmVBcmdzLFxuICBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXG4gIFNlYXJjaENhYkhpcmVRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hFdXJvc3RhclF1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hMb3VuZ2VzUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaFBhcmtpbmdRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzLFxuICBTZXJ2aWNlVHlwZSxcbiAgVHJhbnNwb3J0VHlwZVxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7XG4gIEFpcnBvcnRTZWFyY2hNb2RlLFxuICBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcbiAgQ2FiSGlyZVRlbXBQYXJhbXMsXG4gIFRheGlBaXJwb3J0LFxuICBUYXhpQXR0cmlidXRlLFxuICBUYXhpRm9ybU1vZGUsXG4gIFRyYW5zVHlwZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0ljYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7XG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XG5pbXBvcnQgeyBJQ2FiSGlyZVNlYXJjaEFyZ3MgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NhYi1oaXJlLXNlYXJjaC1hcmcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoPENIX1EgZXh0ZW5kcyBDYWJoaXJlUXVvdGVGZXRjaGVyVHlwZT5cbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxDYWJIaXJlVGVtcFBhcmFtcywgQ2FiaGlyZVF1b3RlUmVzdWx0QXJyYXksIENhYmhpcmVRdW90ZVJlc3VsdEFycmF5PlxuICBpbXBsZW1lbnRzIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlXG57XG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ3NlYXJjaF9jYWInO1xuICBzdGF0aWMgcmVhZG9ubHkgU0VDT05EQVJZX1NUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2Vjb25kYXJ5X3NlYXJjaF9jYWInO1xuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAncmVzdWx0c19jYWInO1xuICBzdGF0aWMgcmVhZG9ubHkgTVVMVElfU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAnbXVsdGlfcmVzdWx0c19jYWInO1xuICBwcml2YXRlIG91dGJvdW5kVmlzaWJpbGl0eTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIGluYm91bmRWaXNpYmlsaXR5OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLkNhYjtcbiAgcHJpdmF0ZSB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSA9IFtdO1xuICBhaXJwb3J0Q2hhbmdlOiBTdWJqZWN0PFRheGlBaXJwb3J0PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcmVhZG9ubHkgdHJhbnNUeXBlczogVHJhbnNUeXBlW10gPSBbXG4gICAgeyBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5BbnksIHZhbHVlOiAnQW55ICgxLTggUGFzc2VuZ2VycyknLCBpZDogOCB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLlN0YW5kYXJkQ2FyLFxuICAgICAgdmFsdWU6ICdTYWxvb24gQ2FyICgxLTQgUGFzc2VuZ2VycyknLFxuICAgICAgaWQ6IDRcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkJsYWNrQ2FiLFxuICAgICAgdmFsdWU6ICdIYWNrbmV5IENhcnJpYWdlICgxLTQgUGFzc2VuZ2VycyknLFxuICAgICAgaWQ6IDRcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkRkYUNhcixcbiAgICAgIHZhbHVlOiAnRGRhIC0gd2hlZWxjaGFpciBhY2Nlc3NpYmxlICgxLTQgUGFzc2VuZ2VycyknLFxuICAgICAgaWQ6IDRcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLk1lZGl1bU1wdixcbiAgICAgIHZhbHVlOiAnUGVvcGxlIENhcnJpZXIgKDEtNyBQYXNzZW5nZXJzKScsXG4gICAgICBpZDogN1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuRXhlY3V0aXZlQ2FyLFxuICAgICAgdmFsdWU6ICdFeGVjdXRpdmUgKDEtNCBQYXNzZW5nZXJzKScsXG4gICAgICBpZDogNFxuICAgIH1cbiAgXTtcblxuICByZWFkb25seSBncm91bmRzcGFuVHJhbnNUeXBlczogVHJhbnNUeXBlW10gPSBbXG4gICAgLi4udGhpcy50cmFuc1R5cGVzLFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkxpbW8sXG4gICAgICB2YWx1ZTogJ0NoYXVmZmV1ciBDYXInLFxuICAgICAgaWQ6IDdcbiAgICB9XG4gIF07XG5cbiAgcmVhZG9ubHkgY21hY1RyYW5zVHlwZXM6IFRyYW5zVHlwZVtdID0gW1xuICAgIC4uLnRoaXMudHJhbnNUeXBlcyxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5EZGFDb2FjaCxcbiAgICAgIHZhbHVlOiAnRGRhIENvYWNoIC0gd2hlZWxjaGFpciBhY2Nlc3NpYmxlICgzMCAtIDEwMCBwYXNzZW5nZXJzKScsXG4gICAgICBpZDogMTJcbiAgICB9XG4gIF0uc29ydCgoYSxiKSA9PiB7XG4gICAgaWYgKGEudmFsdWUgPiBiLnZhbHVlKSByZXR1cm4gMTtcbiAgICBpZiAoYS52YWx1ZSA8IGIudmFsdWUpIHJldHVybiAtMTtcbiAgICByZXR1cm4gMDtcbiAgfSlcblxuICByZWFkb25seSBsaW1vVHlwZXM6IEtleVZhbHVlPENhYkhpcmVWZWhpY2xlVHlwZSwgc3RyaW5nPltdID0gW1xuICAgIHsga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuQW55LFxuICAgICAgdmFsdWU6ICdBbGwnXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5MaW1vLFxuICAgICAgdmFsdWU6ICdMaW1vJ1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuTGltb0J1cyxcbiAgICAgIHZhbHVlOiAnTGltbyBCdXMnXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5NaW5pQnVzLFxuICAgICAgdmFsdWU6ICdNaW5pIEJ1cydcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLk1pbmlDb2FjaCxcbiAgICAgIHZhbHVlOiAnTWluaSBDb2FjaCdcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLlNlZGFuLFxuICAgICAgdmFsdWU6ICdTZWRhbidcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLlN1dixcbiAgICAgIHZhbHVlOiAnU3V2J1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuVmFuLFxuICAgICAgdmFsdWU6ICdWYW4nXG4gICAgfVxuICBdO1xuXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZXM6IFRheGlBdHRyaWJ1dGVbXSA9IFtcbiAgICB7IGVuYWJsZWQ6IGZhbHNlLCBrZXk6ICd3aGVlbGNoYWlyJywgdmFsdWU6ICdXaGVlbGNoYWlyIChPbiBSZXF1ZXN0KScgfSxcbiAgICB7IGVuYWJsZWQ6IGZhbHNlLCBrZXk6ICdjYWxsX29uX2Fycml2YWwnLCB2YWx1ZTogJ0NhbGwgT24gQXJyaXZhbCcgfSxcbiAgICB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGtleTogJ21lZXRfYW5kX2dyZWV0JyxcbiAgICAgIHZhbHVlOiAnTWVldCBBbmQgR3JlZXQgKENoYXJnZSBBcHBsaWVzKSdcbiAgICB9LFxuICAgIHsgZW5hYmxlZDogZmFsc2UsIGtleTogJ3dhaXRfYW5kX3JldHVybicsIHZhbHVlOiAnV2FpdCBBbmQgUmV0dXJuJyB9XG4gIF07XG4gIHJlYWRvbmx5IHNlYXJjaFR5cGVzID0gWydPbmUtd2F5JywgJ1JldHVybiddO1xuXG4gIHJlYWRvbmx5IGFpcnBvcnRTZWFyY2hUeXBlcyA9IFsnQWlycG9ydCBkcm9wIG9mZicsICdBaXJwb3J0IFBpY2sgVXAnXTtcbiAgcmVhZG9ubHkgY3JpdGVyaWEgPSBbJ1BpY2sgVXAgVGltZSddO1xuXG4gIG1vZGU6IFRheGlGb3JtTW9kZSA9IFRheGlGb3JtTW9kZS5BRERSRVNTO1xuICBtb2RlVG86IFRheGlGb3JtTW9kZSA9IFRheGlGb3JtTW9kZS5BRERSRVNTO1xuICBtaW5TZWxlY3REYXRlOiBtb21lbnQuTW9tZW50ID0gbW9tZW50KCk7XG4gIG1pblJldHVyblNlbGVjdERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKCksXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKVxuICB9O1xuXG4gIC8vIGdldHRlcnMgYW5kIHNldHRlcnNcbiAgcHJpdmF0ZSBfZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XG4gIHNlbGVjdGVkUGxhY2VzOiBhbnkgPSBbXTtcbiAgcHJpdmF0ZSBfZnJvbUxvY2F0aW9uOiBDYWJIaXJlTG9jYXRpb25JbnB1dDtcbiAgcHJpdmF0ZSBfdG9Mb2NhdGlvbjogQ2FiSGlyZUxvY2F0aW9uSW5wdXQ7XG4gIHByaXZhdGUgX3ZpYXM6IENhYkhpcmVMb2NhdGlvbklucHV0W10gPSBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF07XG5cbiAgZ2V0IGZyb21Mb2NhdGlvbigpOiBDYWJIaXJlTG9jYXRpb25JbnB1dCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zyb21Mb2NhdGlvbjtcbiAgfVxuXG4gIGdldCB0b0xvY2F0aW9uKCk6IENhYkhpcmVMb2NhdGlvbklucHV0IHtcbiAgICByZXR1cm4gdGhpcy5fdG9Mb2NhdGlvbjtcbiAgfVxuXG4gIGdldCBkYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgc2V0IGRhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcbiAgICB0aGlzLl9kYXRlID0gdmFsdWU7XG4gICAgdGhpcy5fdXBkYXRlRGF0ZVRpbWUoKTtcbiAgfVxuXG4gIC8qXG4gICAqIHNlYXJjaFR5cGVcbiAgICovXG4gIHByaXZhdGUgX3NlYXJjaFR5cGUgPSB0aGlzLnNlYXJjaFR5cGVzWzBdO1xuICBnZXQgc2VhcmNoVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoVHlwZTtcbiAgfVxuXG4gIHNldCBzZWFyY2hUeXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZWFyY2hUeXBlID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgLypcbiAgICogYWlycG9pcnQgc2VhcmNoVHlwZVxuICAgKi9cblxuICBfYWlycG9ydFNlYXJjaFR5cGU6IEFpcnBvcnRTZWFyY2hNb2RlID0gQWlycG9ydFNlYXJjaE1vZGUuRFJPUE9GRjtcbiAgZ2V0IGFpcnBvcnRTZWFyY2hUeXBlKCk6IEFpcnBvcnRTZWFyY2hNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fYWlycG9ydFNlYXJjaFR5cGU7XG4gIH1cbiAgc2V0IGFpcnBvcnRTZWFyY2hUeXBlKG1vZGU6IEFpcnBvcnRTZWFyY2hNb2RlKSB7XG4gICAgdGhpcy5fYWlycG9ydFNlYXJjaFR5cGUgPSBtb2RlO1xuICAgIGlmICh0aGlzLmZyb21BZGRyZXNzIHx8IHRoaXMudG9BZGRyZXNzKSB7XG4gICAgICB0aGlzLnN3aXRjaEZyb21BbmRUb0xvY2F0aW9uKCk7XG4gICAgfVxuICB9XG4gIC8qXG4gICAqIGFpcnBvaXJ0IGFuZCB0cmFpbiBzdGF0aW9uIHNlYXJjaFR5cGVcbiAgICovXG5cbiAgZ2V0IGZyb21Mb2NhdGlvblR5cGUoKTogVGF4aUZvcm1Nb2RlIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZyb21Mb2NhdGlvblR5cGU7XG4gIH1cbiAgc2V0IGZyb21Mb2NhdGlvblR5cGUobW9kZTogVGF4aUZvcm1Nb2RlKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmZyb21Mb2NhdGlvblR5cGUgPSBtb2RlO1xuICB9XG4gIGdldCB0b0xvY2F0aW9uVHlwZSgpOiBUYXhpRm9ybU1vZGUge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudG9Mb2NhdGlvblR5cGU7XG4gIH1cbiAgc2V0IHRvTG9jYXRpb25UeXBlKG1vZGU6IFRheGlGb3JtTW9kZSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy50b0xvY2F0aW9uVHlwZSA9IG1vZGU7XG4gIH1cblxuICBnZXQgc3BlY2lhbFJlcXVpcmVtZW50cygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuc3BlY2lhbFJlcXVpcmVtZW50cztcbiAgfVxuXG4gIHNldCBzcGVjaWFsUmVxdWlyZW1lbnRzKG5ld1JlcTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnNwZWNpYWxSZXF1aXJlbWVudHMgPSBuZXdSZXE7XG4gIH1cbiAgLypcbiAgICogc2VhcmNoQ3JpdGVyaWFcbiAgICovXG4gIHByaXZhdGUgX3NlYXJjaENyaXRlcmlhID0gdGhpcy5jcml0ZXJpYVswXTtcbiAgZ2V0IHNlYXJjaENyaXRlcmlhKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hDcml0ZXJpYTtcbiAgfVxuXG4gIHNldCBzZWFyY2hDcml0ZXJpYSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2VhcmNoQ3JpdGVyaWEgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qXG4gICAqIG91dGJvdW5kRGF0ZVRpbWVcbiAgICovXG4gIHByaXZhdGUgX291dGJvdW5kRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSB0aGlzLmhlbHBlcnMucm91bmQoXG4gICAgbW9tZW50KCksXG4gICAgbW9tZW50LmR1cmF0aW9uKDE1LCAnbWludXRlcycpXG4gICk7XG4gIGdldCBvdXRib3VuZERhdGVUaW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9vdXRib3VuZERhdGVUaW1lO1xuICB9XG5cbiAgc2V0IG91dGJvdW5kRGF0ZVRpbWUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcbiAgICB0aGlzLl9vdXRib3VuZERhdGVUaW1lID0gdmFsdWU7XG4gIH1cblxuICAvKlxuICAgKiByZXR1cm5EYXRlVGltZVxuICAgKi9cbiAgcHJpdmF0ZSBfcmV0dXJuRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSB0aGlzLmhlbHBlcnMucm91bmQoXG4gICAgbW9tZW50KCksXG4gICAgbW9tZW50LmR1cmF0aW9uKDE1LCAnbWludXRlcycpXG4gICk7XG4gIGdldCByZXR1cm5EYXRlVGltZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmV0dXJuRGF0ZVRpbWU7XG4gIH1cblxuICBzZXQgcmV0dXJuRGF0ZVRpbWUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcbiAgICB0aGlzLl9yZXR1cm5EYXRlVGltZSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIC8qXG4gICAqIGFpcnBvcnRcbiAgICovXG5cbiAgZ2V0IGFpcnBvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0O1xuICB9XG4gIHNldCBhaXJwb3J0KHZhbHVlOiBUYXhpQWlycG9ydCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0ID0gdmFsdWU7XG4gIH1cblxuICAvKlxuICAgKiB0ZXJtaW5hbFxuICAgKi9cbiAgcHJpdmF0ZSBfdGVybWluYWw6IHN0cmluZyA9IG51bGw7XG4gIGdldCB0ZXJtaW5hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGVybWluYWw7XG4gIH1cbiAgc2V0IHRlcm1pbmFsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZXJtaW5hbCA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGltZTogc3RyaW5nID0gbnVsbDtcbiAgZ2V0IHRpbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGltZTtcbiAgfVxuXG4gIHNldCB0aW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90aW1lID0gdmFsdWU7XG4gICAgdGhpcy5fdXBkYXRlRGF0ZVRpbWUoKTtcbiAgfVxuXG4gIGdldCBkZXBhcnRzKCk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0cztcbiAgfVxuXG4gIHNldCBkZXBhcnRzKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmRlcGFydHMgPSB2YWx1ZS5pc1ZhbGlkID8gdmFsdWUgOiBudWxsO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xuICAgICAgdGhpcy5fdGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRUaW1lQ29sb24odmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLm1pblJldHVyblNlbGVjdERhdGUgPSB7XG4gICAgICBkYXk6IG1vbWVudCh2YWx1ZSkuZGF0ZSgpLFxuICAgICAgbW9udGg6IG1vbWVudCh2YWx1ZSkubW9udGgoKSArIDEsXG4gICAgICB5ZWFyOiBtb21lbnQodmFsdWUpLnllYXIoKVxuICAgIH07XG5cbiAgICBpZiAodmFsdWUuaXNBZnRlcih0aGlzLnJldHVybkRhdGVUaW1lKSkge1xuICAgICAgdGhpcy5yZXR1cm5EYXRlVGltZS5zZXQoJ2RhdGUnLCB2YWx1ZS5kYXRlKCkpO1xuICAgIH1cblxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIC8vIGdldCBmcm9tTG9jYXRpb24oKTogQ2FiSGlyZUxvY2F0aW9uIHtcbiAgLy8gICByZXR1cm4gdGhpcy5fZnJvbUxvY2F0aW9uO1xuICAvLyB9XG5cbiAgLy8gc2V0IGZyb21Mb2NhdGlvbih2YWx1ZTogQ2FiSGlyZUxvY2F0aW9uKSB7XG4gIC8vICAgdGhpcy5fZnJvbUxvY2F0aW9uID0gdmFsdWU7XG4gIC8vICAgdGhpcy5faXNWYWxpZCgpO1xuICAvLyB9XG5cbiAgLy8gZ2V0IHRvTG9jYXRpb24oKTogQ2FiSGlyZUxvY2F0aW9uIHtcbiAgLy8gICByZXR1cm4gdGhpcy5fdG9Mb2NhdGlvbjtcbiAgLy8gfVxuXG4gIC8vIHNldCB0b0xvY2F0aW9uKHZhbHVlOiBDYWJIaXJlTG9jYXRpb24pIHtcbiAgLy8gICB0aGlzLl90b0xvY2F0aW9uID0gdmFsdWU7XG4gIC8vICAgdGhpcy5faXNWYWxpZCgpO1xuICAvLyB9XG5cbiAgZ2V0IGFkdWx0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xuICB9XG5cbiAgc2V0IGFkdWx0cyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaGlsZHJlbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XG4gIH1cblxuICBzZXQgY2hpbGRyZW4odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBpbmZhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzO1xuICB9XG5cbiAgc2V0IGluZmFudHModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNvdW50cnlDb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jb3VudHJ5Q29kZTtcbiAgfVxuXG4gIHNldCBjb3VudHJ5Q29kZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNvdW50cnlDb2RlID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHZpYXMoKTogQ2FiSGlyZUxvY2F0aW9uSW5wdXRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpYXM7XG4gIH1cblxuICBzZXQgdmlhcyh2YWx1ZTogQ2FiSGlyZUxvY2F0aW9uSW5wdXRbXSkge1xuICAgIHRoaXMuX3ZpYXMgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgdmlhc0Zyb20oKTogQWRkcmVzc0Zvcm0ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudmlhc0Zyb207XG4gIH1cblxuICBzZXQgdmlhc0Zyb20odmFsdWU6IEFkZHJlc3NGb3JtKSB7XG4gICAgY29uc3QgaXNDbGVhck9yRGVmYXVsdCA9IHZhbHVlICYmIE9iamVjdC52YWx1ZXModmFsdWUpLmZpbHRlcih4PT54KS5sZW5ndGggPT09IDEgPyBPYmplY3QudmFsdWVzKHZhbHVlKS5maWx0ZXIoeD0+eClbMF0gPT09ICdHQic6ZmFsc2U7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnZpYXNGcm9tID0gaXNDbGVhck9yRGVmYXVsdCA/IG51bGwgOiB2YWx1ZTtcbiAgICB0aGlzLl92aWFzWzBdID0gdmFsdWUgJiYgIWlzQ2xlYXJPckRlZmF1bHQgPyB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih2YWx1ZSkgOiBudWxsO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCB2aWFzVG8oKTogQWRkcmVzc0Zvcm0ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudmlhc1RvO1xuICB9XG5cbiAgc2V0IHZpYXNUbyh2YWx1ZTogQWRkcmVzc0Zvcm0pIHtcbiAgICBjb25zdCBpc0NsZWFyT3JEZWZhdWx0ID0gdmFsdWUgJiYgT2JqZWN0LnZhbHVlcyh2YWx1ZSkuZmlsdGVyKHg9PngpLmxlbmd0aCA9PT0gMSA/IE9iamVjdC52YWx1ZXModmFsdWUpLmZpbHRlcih4PT54KVswXSA9PT0gJ0dCJzpmYWxzZTtcbiAgICB0aGlzLnRlbXBQYXJhbXMudmlhc1RvID0gaXNDbGVhck9yRGVmYXVsdCA/IG51bGwgOiB2YWx1ZTtcbiAgICB0aGlzLl92aWFzWzFdID0gdmFsdWUgICYmICFpc0NsZWFyT3JEZWZhdWx0PyB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih2YWx1ZSkgOiBudWxsO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCB2ZWhpY2xlVHlwZSgpOiBDYWJIaXJlVmVoaWNsZVR5cGUge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudmVoaWNsZVR5cGU7XG4gIH1cblxuICBzZXQgdmVoaWNsZVR5cGUodmFsdWU6IENhYkhpcmVWZWhpY2xlVHlwZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gQ2FiSGlyZVZlaGljbGVUeXBlLkxpbW8pIHtcbiAgICAgIHRoaXMubGltb1R5cGUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpbW9UeXBlID0gQ2FiSGlyZVZlaGljbGVUeXBlLkFueTtcbiAgICB9XG4gICAgdGhpcy50ZW1wUGFyYW1zLnZlaGljbGVUeXBlID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGxpbW9UeXBlKCk6IENhYkhpcmVWZWhpY2xlVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5saW1vVHlwZTtcbiAgfVxuXG4gIHNldCBsaW1vVHlwZSh2YWx1ZTogQ2FiSGlyZVZlaGljbGVUeXBlKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmxpbW9UeXBlID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGxpbW9Bc0RpcmVjdGVkRHVyYXRpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmxpbW9Bc0RpcmVjdGVkRHVyYXRpb247XG4gIH1cblxuICBzZXQgbGltb0FzRGlyZWN0ZWREdXJhdGlvbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmxpbW9Bc0RpcmVjdGVkRHVyYXRpb24gPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgdHJhbnNwb3J0VHlwZSgpOiBUcmFuc3BvcnRUeXBlIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRyYW5zcG9ydFR5cGU7XG4gIH1cblxuICBzZXQgdHJhbnNwb3J0VHlwZSh2YWx1ZTogVHJhbnNwb3J0VHlwZSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy50cmFuc3BvcnRUeXBlID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGZyb21BZGRyZXNzKCk6IEFkZHJlc3NGb3JtIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzO1xuICB9XG5cbiAgc2V0IGZyb21BZGRyZXNzKHZhbHVlOiBBZGRyZXNzRm9ybSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyA9IHZhbHVlO1xuICAgIHRoaXMuX2Zyb21Mb2NhdGlvbiA9IHZhbHVlID8gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odmFsdWUpIDogbnVsbDtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgZnJvbVN0YXRpb24oKTogUmFpbEFpcnBvcnQge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZnJvbVN0YXRpb247XG4gIH1cblxuICBzZXQgZnJvbVN0YXRpb24odmFsdWU6IFJhaWxBaXJwb3J0KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmZyb21TdGF0aW9uID0gdmFsdWU7XG4gICAgdGhpcy5fZnJvbUxvY2F0aW9uID0gdmFsdWVcbiAgICAgID8ge1xuICAgICAgICBidWlsZGluZ05hbWU6IHZhbHVlLm5hbWUsXG4gICAgICAgIHN0cmVldEFuZE51bWJlcjogdmFsdWUuZGVzdGluYXRpb24sXG4gICAgICAgIHRvd246ICcnLFxuICAgICAgICBjb3VudHk6ICcnLFxuICAgICAgICBjb3VudHJ5Q29kZTogdmFsdWUuZGVzdGluYXRpb24sXG4gICAgICAgIHBvc3Rjb2RlOiB2YWx1ZS5wb3N0Y29kZVxuICAgICAgICB9XG4gICAgICA6IG51bGw7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHRvQWRkcmVzcygpOiBBZGRyZXNzRm9ybSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3M7XG4gIH1cblxuICBzZXQgdG9BZGRyZXNzKHZhbHVlOiBBZGRyZXNzRm9ybSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3MgPSB2YWx1ZTtcbiAgICB0aGlzLl90b0xvY2F0aW9uID0gdmFsdWUgPyB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih2YWx1ZSkgOiBudWxsO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCB0b1N0YXRpb24oKTogUmFpbEFpcnBvcnQge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudG9TdGF0aW9uO1xuICB9XG5cbiAgc2V0IHRvU3RhdGlvbih2YWx1ZTogUmFpbEFpcnBvcnQpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMudG9TdGF0aW9uID0gdmFsdWU7XG4gICAgdGhpcy5fdG9Mb2NhdGlvbiA9IHZhbHVlXG4gICAgICA/IHtcbiAgICAgICAgYnVpbGRpbmdOYW1lOiB2YWx1ZS5haXJwb3J0Py5uYW1lID8gdmFsdWUuYWlycG9ydC5uYW1lIDogdmFsdWUubmFtZSxcbiAgICAgICAgc3RyZWV0QW5kTnVtYmVyOiB2YWx1ZS5haXJwb3J0Py5kZXN0aW5hdGlvbiA/IHZhbHVlLmFpcnBvcnQuZGVzdGluYXRpb24gOiB2YWx1ZS5kZXN0aW5hdGlvbixcbiAgICAgICAgdG93bjogJycsXG4gICAgICAgIGNvdW50eTogJycsXG4gICAgICAgIGNvdW50cnlDb2RlOiB2YWx1ZS5haXJwb3J0Py5jb3VudHJ5Q29kZSA/IHZhbHVlLmFpcnBvcnQuY291bnRyeUNvZGUgOiB2YWx1ZS5kZXN0aW5hdGlvbixcbiAgICAgICAgcG9zdGNvZGU6IHZhbHVlLmFpcnBvcnQ/LnBvc3Rjb2RlID8gdmFsdWUuYWlycG9ydC5wb3N0Y29kZSA6IHZhbHVlLnBvc3Rjb2RlXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNhYmZldGNoZXI6IEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyPENIX1E+LFxuICAgIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxuICAgIHNlYXJjaFNlcnZpY2U6IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlXG4gICkge1xuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzLCBzZWFyY2hTZXJ2aWNlLCB1c2VyU2VydmljZSk7XG4gICAgY29uc3QgZGF0YToge1xuICAgICAgdGVtcFBhcmFtczogQ2FiSGlyZVRlbXBQYXJhbXM7XG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMpIHx8IHtcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIENhYkhpcmVUZW1wUGFyYW1zXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhzZWFyY2hTZXJ2aWNlLm1ha2VDYWJIaXJlUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0dXJuRGF0YTogYW55ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXG4gICAgICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNFQ09OREFSWV9TVE9SQUdFX1NFU1NJT05fUEFSQU1TXG4gICAgICApO1xuICAgICAgaWYgKHJldHVybkRhdGEpIHtcbiAgICAgICAgdGhpcy5yZXR1cm5EYXRlVGltZSA9IG1vbWVudChyZXR1cm5EYXRhLnRlbXBQYXJhbXMuZGVwYXJ0cyk7XG4gICAgICAgIHRoaXMuc2VhcmNoVHlwZSA9IHRoaXMuc2VhcmNoVHlwZXNbMV07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJysrKyBFcnJvciByZWNvdmVyaW5nIHJldHVybiBkYXRhOiAnLCBlcnJvciwgJyArKysnKTtcbiAgICB9XG4gICAgaWYgKGRhdGEudGVtcFBhcmFtcy5mcm9tQWRkcmVzcykge1xuICAgICAgdGhpcy5mcm9tQWRkcmVzcyA9IGRhdGEudGVtcFBhcmFtcy5mcm9tQWRkcmVzcztcbiAgICB9XG5cbiAgICBpZiAoZGF0YS50ZW1wUGFyYW1zLnRvQWRkcmVzcykge1xuICAgICAgdGhpcy50b0FkZHJlc3MgPSBkYXRhLnRlbXBQYXJhbXMudG9BZGRyZXNzO1xuICAgIH1cblxuICAgIGlmIChzZWFyY2hTZXJ2aWNlLnNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpKSB7XG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZSgodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcbiAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyh0cmF2ZWxsZXJzLCBTZXJ2aWNlVHlwZS5DYWIpO1xuICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdHMgPVxuICAgICAgc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3Q8Q2FiaGlyZVF1b3RlUmVzdWx0QXJyYXk+KHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lKSB8fCBbXTtcbiAgICB0aGlzLmZ1bGxSZXN1bHRzID0gcmVzdWx0cztcbiAgICB0aGlzLl9jaGVhcGVzdFJlc3VsdFByaWNlID0gdGhpcy51cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzKTtcbiAgICB0aGlzLmF2ZXJhZ2VDbzJQZXJJdGVtID0gdGhpcy5oZWxwZXJzLmNhbGN1bGF0ZUF2ZXJhZ2VDbzJQZXJJdGVtKHJlc3VsdHMpO1xuXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyB8fCBbXSk7XG5cbiAgICBjb25zdCBzZWNvbmRhcnlSZXN1bHRzID1cbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0KHRoaXMubXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUpIHx8IFtdO1xuXG4gICAgdGhpcy5mdWxsTXVsdGlSZXN1bHRzID0gc2Vjb25kYXJ5UmVzdWx0cztcbiAgICB0aGlzLm11bHRpUmVzdWx0cy5uZXh0KHNlY29uZGFyeVJlc3VsdHMpO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgICB0aGlzLm91dGJvdW5kVmlzaWJpbGl0eSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuaW5ib3VuZFZpc2liaWxpdHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPSBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcblxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPSBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5NVUxUSV9TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcblxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeSgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VDYWJIaXJlUXVlcnkoKSk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UucmVtb3ZlU2Vzc2lvbkl0ZW0oXG4gICAgICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNFQ09OREFSWV9TVE9SQUdFX1NFU1NJT05fUEFSQU1TXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIHRoaXMuX3NlYXJjaFR5cGUgPSB0aGlzLnNlYXJjaFR5cGVzWzBdOyAvLyByZXNldCB0byBvbmUtd2F5XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0UGFyYW1zKCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgICB0aGlzLnJlc2V0UXVlcnkoKTtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XG4gICAgdGhpcy5tdWx0aVJlc3VsdHMubmV4dChbXSk7XG4gIH1cblxuICBwcml2YXRlIF9pc1ZhbGlkKCkge1xuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsIHtcbiAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtc1xuICAgIH0pO1xuXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcbiAgICBpZiAoIXRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcykge1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnRnJvbSAtIEVudGVyIGEgbG9jYXRpb24gb3IgcG9zdGNvZGUnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3MpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RvIC0gRW50ZXIgYSBsb2NhdGlvbiBvciBwb3N0Y29kZScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0cy51bml4KCkgPCBtb21lbnQoKS51bml4KCkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RheGkgam91cm5leSBjYW5ub3QgYmUgaW4gdGhlIHBhc3QnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmFkdWx0cyArIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA8IDEpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RoZXJlIG11c3QgYmUgYXQgbGVhc3QgMSB0cmF2ZWxsZXInKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnNlYXJjaFR5cGUgPT09IHRoaXMuc2VhcmNoVHlwZXNbMV0gJiZcbiAgICAgIHRoaXMucmV0dXJuRGF0ZVRpbWUuaXNTYW1lT3JCZWZvcmUodGhpcy5kZXBhcnRzKVxuICAgICkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUmV0dXJuIERhdGUvVGltZSBtdXN0IGJlIGFmdGVyIG91dGJvdW5kIGRhdGUvdGltZScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYXZlbGxlcnMubGVuZ3RoID4gNCkge1xuICAgICAgLy8gdXNlIGlkIGZyb20gdHJhdmVsIHR5cGUgdG8gc2VlIGlmXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudHJhbnNUeXBlcy5maW5kKHR5cGUgPT4gdHlwZS5rZXkgPT09IHRoaXMudGVtcFBhcmFtcy52ZWhpY2xlVHlwZSkuaWQgPFxuICAgICAgICB0aGlzLnRyYXZlbGxlcnMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcbiAgICAgICAgICBgVGhlIG51bWJlciBvZiBwYXNzZW5nZXJzIGV4Y2VlZHMgdGhlIGF2YWlsYWJsZSB2ZWhpY2xlIGNhcGFjaXR5IGZvciB0aGUgJHt0aGlzLnRlbXBQYXJhbXMudmVoaWNsZVR5cGV9IHRheGlgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlhc0Zyb20pIHtcbiAgICAgIC8vIHVzZSBpZCBmcm9tIHRyYXZlbCB0eXBlIHRvIHNlZSBpZlxuICAgICAgICBjb25zdCBlcnJvckZyb20gPSAhdGhpcy52aWFzRnJvbS5Qb3N0Q29kZSB8fCAhdGhpcy52aWFzRnJvbS5Ib3VzZTsgXG4gICAgICAgIGlmIChlcnJvckZyb20pIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxuICAgICAgICAgICAgJ1ZpYSBGcm9tIC0gRW50ZXIgYSBsb2NhdGlvbiBvciBwb3N0Y29kZSdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgaWYgKHRoaXMudmlhc1RvKSB7XG5cbiAgICAgICAgY29uc3QgZXJyb3JUbyA9ICF0aGlzLnZpYXNUby5Qb3N0Q29kZSB8fCAhdGhpcy52aWFzVG8uSG91c2U7IFxuICAgICAgICBpZiAoZXJyb3JUbykge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXG4gICAgICAgICAgICAnVmlhIFRvIC0gRW50ZXIgYSBsb2NhdGlvbiBvciBwb3N0Y29kZSdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWRkZWQgdmFsaWRhdGlvbnMgZm9yIExJTU8gdG8gYXZvaWQgc2VhcmNoIHdpdGhvdXQgdmFsdWVzXG4gICAgaWYgKHRoaXMudmVoaWNsZVR5cGUgPT09IENhYkhpcmVWZWhpY2xlVHlwZS5MaW1vKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh0aGlzLmZyb21BZGRyZXNzLCAnRnJvbScpO1xuICAgICAgdGhpcy52YWxpZGF0ZUFkZHJlc3ModGhpcy50b0FkZHJlc3MsICdUbycpO1xuICAgIFxuICAgICAgaWYgKHRoaXMudmlhc0Zyb20/LlBvc3RDb2RlKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHRoaXMudmlhc0Zyb20sICdWaWEgRnJvbScpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmlhc1RvPy5Qb3N0Q29kZSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh0aGlzLnZpYXNUbywgJ1ZpYSBUbycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcbiAgfVxuXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBBZGRyZXNzRm9ybSwgdHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCFhZGRyZXNzPy5Db3VudHkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goYCR7dHlwZX0gLSBFbnRlciBzdGF0ZS9wcm92aW5jZS9jb3VudHlgKTtcbiAgICB9XG4gIFxuICAgIGlmIChhZGRyZXNzPy5Ib3VzZSA9PT0gTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb24pIHtcbiAgICAgIGlmICghYWRkcmVzcz8uQ2Fycmllcil7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goYCR7dHlwZX0gLSBFbnRlciB0cmFpbiBvcGVyYXRvcmApO1xuICAgICAgfVxuICAgICAgaWYgKCFhZGRyZXNzPy5GbGlnaHRUcmFpbkRhdGVUaW1lKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goYCR7dHlwZX0gLSBFbnRlciB0cmFpbiAke3R5cGUgPT09ICdGcm9tJyA/ICdhcnJpdmFsJyA6ICdkZXBhcnR1cmUnfSB0aW1lYCk7XG4gICAgICB9XG4gICAgfVxuICBcbiAgICBpZiAoYWRkcmVzcz8uSG91c2UgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydCkge1xuICAgICAgaWYgKCFhZGRyZXNzPy5DYXJyaWVyKXtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChgJHt0eXBlfSAtIFNlbGVjdCBhaXJsaW5lYCk7XG4gICAgICB9XG4gICAgICBpZiAoIWFkZHJlc3M/LkZsaWdodE51bWJlcikge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKGAke3R5cGV9IC0gRW50ZXIgZmxpZ2h0IG51bWJlcmApO1xuICAgICAgfVxuICAgICAgaWYgKCFhZGRyZXNzPy5GbGlnaHRUcmFpbkRhdGVUaW1lKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goYCR7dHlwZX0gLSBFbnRlciBmbGlnaHQgJHt0eXBlID09PSAnRnJvbScgPyAnYXJyaXZhbCcgOiAnZGVwYXJ0dXJlJ30gdGltZWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZURhdGVUaW1lKCkge1xuICAgIGlmICh0aGlzLl9kYXRlICYmIHRoaXMuX3RpbWUpIHtcbiAgICAgIHRoaXMuZGVwYXJ0cyA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9kYXRlLCB0aGlzLl90aW1lKTtcbiAgICB9XG4gIH1cblxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XG4gICAgdGhpcy5tdWx0aVJlc3VsdHMubmV4dChbXSk7XG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoVHlwZSA9PT0gdGhpcy5zZWFyY2hUeXBlc1sxXSkge1xuICAgICAgICAvLyByZXR1cm4gLSBraWNrIG9mZiB0d28gc2VhcmNoZXNcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XG4gICAgICAgIGNvbnN0IHJldHVyblF1ZXJ5ID0gdGhpcy5nZXRSZXR1cm5TZWFyY2hRdWVyeSgpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcrKysgU2VhcmNoIFF1ZXJ5OiAnLCBxdWVyeSwgJyArKysnKTtcbiAgICAgICAgY29uc29sZS5sb2coJysrKyBTZWFyY2ggUmV0dXJuIFF1ZXJ5OiAnLCByZXR1cm5RdWVyeSwgJyArKysnKTtcblxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxuICAgICAgICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNFQ09OREFSWV9TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBQYXJhbXM6IHJldHVyblF1ZXJ5XG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydE11bHRpU2VhcmNoKFtcbiAgICAgICAgICB0aGlzLmNhYmZldGNoZXIuZmV0Y2hMaXN0KHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxRdWVyeVNlYXJjaENhYkhpcmVBcmdzPihxdWVyeSkpLFxuICAgICAgICAgIHRoaXMuY2FiZmV0Y2hlci5mZXRjaExpc3QodGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3M+KHJldHVyblF1ZXJ5KSlcbiAgICAgICAgXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeSh0aGlzLmdldFNlYXJjaFF1ZXJ5KCkpKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXG4gICAgICAgICAgdGhpcy5jYWJmZXRjaGVyLmZldGNoTGlzdCh0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYWJIaXJlQXJncz4ocXVlcnkpKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBnbXRTZWFyY2gocXVlcnk6IFNlYXJjaENhYkhpcmVRdWVyeVZhcmlhYmxlcyk6IE9ic2VydmFibGU8Q2FiaGlyZVF1b3RlUmVzdWx0QXJyYXk+IHtcbiAgICB0aGlzLmJvbHRTZWFyY2hRdWVyeS5wdXNoKHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5jYWJmZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XG4gIH1cblxuICBnbXRHZXRDYWJTZWFyY2hRdWVyeShmcm9tTG9jYXRpb246IExvY2F0aW9uRGV0YWlsLCB0b0xvY2F0aW9uOiBMb2NhdGlvbkRldGFpbCwgZGF0ZVRtZTogc3RyaW5nKTpTZWFyY2hDYWJIaXJlUXVlcnlWYXJpYWJsZXMge1xuICAgIGNvbnN0IGNyZWF0ZUxvY2F0aW9uID0gKGxvY2F0aW9uOiBhbnkgKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBidWlsZGluZ05hbWU6IGxvY2F0aW9uPy5udW1iZXJPck5hbWUgfHwgbG9jYXRpb24/LmNvdW50cnlDb2RlLFxuICAgICAgICBjb3VudHJ5Q29kZTogbG9jYXRpb24/LmNvdW50cnlDb2RlIHx8ICdHQicsXG4gICAgICAgIHBvc3Rjb2RlOiBsb2NhdGlvbj8ucG9zdGNvZGU/LnJlcGxhY2UoL1xccysvZywgJycpID8/ICcnLFxuICAgICAgICBzdHJlZXRBbmROdW1iZXI6IGxvY2F0aW9uPy5zdHJlZXQgfHwgbG9jYXRpb24/LnJvYWQgfHwgbG9jYXRpb24/LmNvdW50cnlDb2RlLCBcbiAgICAgICAgdG93bjogbG9jYXRpb24/LnRvd24gfHwgbG9jYXRpb24/LmNpdHksXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBmcm9tID0gY3JlYXRlTG9jYXRpb24oZnJvbUxvY2F0aW9uKTtcbiAgICBjb25zdCB0byA9IGNyZWF0ZUxvY2F0aW9uKHRvTG9jYXRpb24pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFkdWx0czogdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4sXG4gICAgICBpbmZhbnRzOiAwLFxuICAgICAgZGVwYXJ0czogZGF0ZVRtZSwgXG4gICAgICB2ZWhpY2xlVHlwZTogQ2FiSGlyZVZlaGljbGVUeXBlLkFueSxcbiAgICAgIG1lc3NhZ2VUeXBlOiBNZXNzYWdlVHlwZS5UYXhpLFxuICAgICAgZnJvbUxvY2F0aW9uOiB7XG4gICAgICAgIGJ1aWxkaW5nTmFtZTogZnJvbS5idWlsZGluZ05hbWUsXG4gICAgICAgIGNvdW50cnlDb2RlOiBmcm9tLmNvdW50cnlDb2RlLFxuICAgICAgICBwb3N0Y29kZTogZnJvbS5wb3N0Y29kZSxcbiAgICAgICAgc3RyZWV0QW5kTnVtYmVyOiBmcm9tLnN0cmVldEFuZE51bWJlcixcbiAgICAgICAgdG93bjogZnJvbS50b3duLFxuICAgICAgfSxcbiAgICAgIHRvTG9jYXRpb246IHtcbiAgICAgICAgYnVpbGRpbmdOYW1lOiB0by5idWlsZGluZ05hbWUsXG4gICAgICAgIGNvdW50cnlDb2RlOiB0by5jb3VudHJ5Q29kZSxcbiAgICAgICAgcG9zdGNvZGU6IHRvLnBvc3Rjb2RlLFxuICAgICAgICBzdHJlZXRBbmROdW1iZXI6IHRvLnN0cmVldEFuZE51bWJlcixcbiAgICAgICAgdG93bjogdG8udG93bixcbiAgICAgIH0sXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLnRyYXZlbGxlcnMubWFwKHRyYXZlbGxlciA9PiB7cmV0dXJuIHtpZDogdHJhdmVsbGVyLmlkfX0pXG4gICAgfVxuICB9XG5cbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MpOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xuICAgIGNvbnN0IHJlY2VudFNlYXJjaFF1ZXJ5OiBJQ2FiSGlyZVNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5DYWIsXG4gICAgICBzZWFyY2hBcmdzOiByZWNlbnRTZWFyY2hRdWVyeSxcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMuZGVwYXJ0cy5mb3JtYXQoKSxcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzLCB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8/LmlkKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlcmNoUXVlcnkocXVlcnk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MpOiBJQ2FiSGlyZVNlYXJjaEFyZ3Mge1xuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBJQ2FiSGlyZVNlYXJjaEFyZ3MgPSBxdWVyeTtcbiAgICBzZWFyY2hRdWVyeS5mcm9tQWRkcmVzcyA9IHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcztcbiAgICBzZWFyY2hRdWVyeS50b0FkZHJlc3MgPSB0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzO1xuXG4gICAgc2VhcmNoUXVlcnkuZnJvbVN0YXRpb24gPSB0aGlzLnRlbXBQYXJhbXMuZnJvbVN0YXRpb247XG4gICAgc2VhcmNoUXVlcnkudG9TdGF0aW9uID0gdGhpcy50ZW1wUGFyYW1zLnRvU3RhdGlvbjtcblxuICAgIHNlYXJjaFF1ZXJ5LnZpYXNGcm9tID0gdGhpcy52aWFzRnJvbTtcbiAgICBzZWFyY2hRdWVyeS52aWFzVG8gPSB0aGlzLnZpYXNUbztcbiAgICBzZWFyY2hRdWVyeS5zcGVjaWFsUmVxdWlyZW1lbnRzID0gdGhpcy50ZW1wUGFyYW1zLnNwZWNpYWxSZXF1aXJlbWVudHM7XG4gICAgcmV0dXJuIHNlYXJjaFF1ZXJ5O1xuICB9XG5cbiAgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MubWVzc2FnZVR5cGUgPT09IE1lc3NhZ2VUeXBlLlRheGkpIHtcbiAgICAgIHRoaXMudmVoaWNsZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52ZWhpY2xlVHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52ZWhpY2xlVHlwZSA9IENhYkhpcmVWZWhpY2xlVHlwZS5MaW1vO1xuICAgICAgdGhpcy5saW1vVHlwZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZlaGljbGVUeXBlO1xuICAgIH1cblxuICAgIHRoaXMuZGVwYXJ0cyA9IG1vbWVudChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBhcnRzKTtcblxuICAgIHRoaXMuZnJvbUFkZHJlc3MgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mcm9tQWRkcmVzcztcbiAgICB0aGlzLnRvQWRkcmVzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRvQWRkcmVzcztcblxuICAgIHRoaXMuZnJvbVN0YXRpb24gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mcm9tU3RhdGlvbjtcbiAgICB0aGlzLnRvU3RhdGlvbiA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRvU3RhdGlvbjtcblxuICAgIHRoaXMuX2Zyb21Mb2NhdGlvbiA9IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMuZnJvbUFkZHJlc3MpO1xuICAgIHRoaXMuX3RvTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRvQWRkcmVzcyk7XG5cbiAgICB0aGlzLnZpYXNGcm9tID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mudmlhc0Zyb207XG4gICAgdGhpcy52aWFzVG8gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52aWFzVG87XG4gICAgdGhpcy5zcGVjaWFsUmVxdWlyZW1lbnRzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Muc3BlY2lhbFJlcXVpcmVtZW50cztcblxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gIH1cblxuICBnZXRTZWFyY2hRdWVyeShzaW1wbGlmaWVkTG9jYXRpb246IGJvb2xlYW4gPSB0cnVlKTogUXVlcnlTZWFyY2hDYWJIaXJlQXJncyB7XG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcz8udmlhc0Zyb20pIHtcbiAgICAgIHRoaXMuX3ZpYXNbMF0gPSA8Q2FiSGlyZUxvY2F0aW9uSW5wdXQ+dGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy50ZW1wUGFyYW1zPy52aWFzRnJvbSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXM/LnZpYXNUbykge1xuICAgICAgdGhpcy5fdmlhc1sxXSA9IDxDYWJIaXJlTG9jYXRpb25JbnB1dD50aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXM/LnZpYXNUbyk7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5OiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzID0ge1xuICAgICAgYWR1bHRzOiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzLFxuICAgICAgY2hpbGRyZW46IHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbixcbiAgICAgIGRlcGFydHM6IHRoaXMuaGVscGVycy5mb3JtYXRHcm91bmRzcGFuRGF0ZVRpbWUodGhpcy50ZW1wUGFyYW1zLmRlcGFydHMpLFxuICAgICAgZnJvbUxvY2F0aW9uOiBzaW1wbGlmaWVkTG9jYXRpb25cbiAgICAgICAgPyB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3MpXG4gICAgICAgIDogKHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyBhcyBhbnkpLFxuICAgICAgdG9Mb2NhdGlvbjogc2ltcGxpZmllZExvY2F0aW9uXG4gICAgICAgID8gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcylcbiAgICAgICAgOiAodGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcyBhcyBhbnkpLFxuICAgICAgaW5mYW50czogMCxcbiAgICAgIHZlaGljbGVUeXBlOiB0aGlzLmxpbW9UeXBlID8gdGhpcy5saW1vVHlwZSA6IHRoaXMudmVoaWNsZVR5cGUsXG4gICAgICBtZXNzYWdlVHlwZTogdGhpcy5saW1vVHlwZSA/IE1lc3NhZ2VUeXBlLkxpbW8gOiBNZXNzYWdlVHlwZS5UYXhpLFxuICAgICAgdmlhczogPENhYkhpcmVMb2NhdGlvbklucHV0W10+dGhpcy5fdmlhcyxcbiAgICAgIGxpbW9Bc0RpcmVjdGVkRHVyYXRpb246IHRoaXMudGVtcFBhcmFtcy50cmFuc3BvcnRUeXBlID09PSBUcmFuc3BvcnRUeXBlLkhvdXJseSA/ICt0aGlzLnRlbXBQYXJhbXMubGltb0FzRGlyZWN0ZWREdXJhdGlvbiA6IG51bGwsXG4gICAgICB0cmFuc3BvcnRUeXBlOiB0aGlzLmxpbW9UeXBlID8gdGhpcy50ZW1wUGFyYW1zLnRyYW5zcG9ydFR5cGUgOiBudWxsLFxuICAgICAgdHJhdmVsbGVyczogdGhpcy50cmF2ZWxsZXJzLm1hcCh0cmF2ZWxsZXIgPT4ge3JldHVybiB7aWQ6IHRyYXZlbGxlci5pZH19KSxcbiAgICAgIHNwZWNpYWxSZXF1aXJlbWVudHM6IHRoaXMuc3BlY2lhbFJlcXVpcmVtZW50c1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5mcm9tU3RhdGlvbiAmJiB0aGlzLmZyb21TdGF0aW9uLmFpcnBvcnQgJiYgIXF1ZXJ5LmZyb21Mb2NhdGlvbi5mbGlnaHRUcmFpbkRhdGVUaW1lKSB7XG4gICAgICBxdWVyeS5mcm9tTG9jYXRpb24gPSB7XG4gICAgICAgIHBvc3Rjb2RlOiB0aGlzLmZyb21TdGF0aW9uLmFpcnBvcnQucG9zdGNvZGUgLFxuICAgICAgICBjb3VudHJ5Q29kZTogdGhpcy5mcm9tU3RhdGlvbi5haXJwb3J0LmNvdW50cnlDb2RlLFxuICAgICAgICBzdHJlZXRBbmROdW1iZXI6IHRoaXMuZnJvbVN0YXRpb24uYWlycG9ydC5kZXN0aW5hdGlvbixcbiAgICAgICAgYnVpbGRpbmdOYW1lOiAgdGhpcy5mcm9tU3RhdGlvbi5haXJwb3J0LmRlc3RpbmF0aW9uLFxuICAgICAgICB0b3duOiB0aGlzLmZyb21TdGF0aW9uLmFpcnBvcnQuZGVzdGluYXRpb24gLFxuICAgICAgICB0ZXJtaW5hbDogdGhpcy5mcm9tTG9jYXRpb24udGVybWluYWwsXG4gICAgICAgIGZsaWdodE51bWJlcjogdGhpcy5mcm9tTG9jYXRpb24uZmxpZ2h0TnVtYmVyLFxuICAgICAgICBjb3VudHk6IHF1ZXJ5LmZyb21Mb2NhdGlvbi5jb3VudHlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5mcm9tU3RhdGlvbiAmJiB0aGlzLmZyb21TdGF0aW9uLnJhaWxzdGF0aW9uICAmJiAhcXVlcnkuZnJvbUxvY2F0aW9uLmZsaWdodFRyYWluRGF0ZVRpbWUpIHtcbiAgICAgIHF1ZXJ5LmZyb21Mb2NhdGlvbiA9IHtcbiAgICAgICAgcG9zdGNvZGU6IHRoaXMuZnJvbVN0YXRpb24ucmFpbHN0YXRpb24ubG9jYXRpb25EZXRhaWxzLnBvc3Rjb2RlICxcbiAgICAgICAgY291bnRyeUNvZGU6IHRoaXMuZnJvbVN0YXRpb24ucmFpbHN0YXRpb24ubG9jYXRpb25EZXRhaWxzLmNvdW50cnlDb2RlLFxuICAgICAgICBzdHJlZXRBbmROdW1iZXI6IHRoaXMuZnJvbVN0YXRpb24ucmFpbHN0YXRpb24ubmFtZSxcbiAgICAgICAgYnVpbGRpbmdOYW1lOiB0aGlzLmZyb21TdGF0aW9uLnJhaWxzdGF0aW9uLm5hbWUsXG4gICAgICAgIHRvd246IHRoaXMuZnJvbVN0YXRpb24ucmFpbHN0YXRpb24ubG9jYXRpb25EZXRhaWxzLmNpdHksXG4gICAgICAgIGNvdW50eTogdGhpcy5mcm9tTG9jYXRpb24uY291bnR5XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9TdGF0aW9uICYmIHRoaXMudG9TdGF0aW9uLmFpcnBvcnQgJiYgIXF1ZXJ5LnRvTG9jYXRpb24uZmxpZ2h0VHJhaW5EYXRlVGltZSkge1xuICAgICAgcXVlcnkudG9Mb2NhdGlvbiA9IHtcbiAgICAgICAgcG9zdGNvZGU6IHRoaXMudG9TdGF0aW9uLmFpcnBvcnQucG9zdGNvZGUgLFxuICAgICAgICBjb3VudHJ5Q29kZTogdGhpcy50b1N0YXRpb24uYWlycG9ydC5jb3VudHJ5Q29kZSAsXG4gICAgICAgIHN0cmVldEFuZE51bWJlcjogdGhpcy50b1N0YXRpb24uYWlycG9ydC5kZXN0aW5hdGlvbixcbiAgICAgICAgYnVpbGRpbmdOYW1lOiB0aGlzLnRvU3RhdGlvbi5haXJwb3J0LmRlc3RpbmF0aW9uICxcbiAgICAgICAgdG93bjogdGhpcy50b1N0YXRpb24uYWlycG9ydC5kZXN0aW5hdGlvbixcbiAgICAgICAgdGVybWluYWw6IHRoaXMudG9Mb2NhdGlvbi50ZXJtaW5hbCxcbiAgICAgICAgZmxpZ2h0TnVtYmVyOiB0aGlzLnRvTG9jYXRpb24uZmxpZ2h0TnVtYmVyLFxuICAgICAgICBjb3VudHk6IHRoaXMudG9Mb2NhdGlvbi5jb3VudHlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50b1N0YXRpb24gJiYgdGhpcy50b1N0YXRpb24ucmFpbHN0YXRpb24gJiYgIXF1ZXJ5LnRvTG9jYXRpb24uZmxpZ2h0VHJhaW5EYXRlVGltZSkge1xuICAgICAgcXVlcnkudG9Mb2NhdGlvbiA9IHtcbiAgICAgICAgcG9zdGNvZGU6IHRoaXMudG9TdGF0aW9uLnJhaWxzdGF0aW9uLmxvY2F0aW9uRGV0YWlscy5wb3N0Y29kZSAsXG4gICAgICAgIGNvdW50cnlDb2RlOiB0aGlzLnRvU3RhdGlvbi5yYWlsc3RhdGlvbi5sb2NhdGlvbkRldGFpbHMuY291bnRyeUNvZGUsXG4gICAgICAgIHN0cmVldEFuZE51bWJlcjogdGhpcy50b1N0YXRpb24ucmFpbHN0YXRpb24ubmFtZSxcbiAgICAgICAgYnVpbGRpbmdOYW1lOiB0aGlzLnRvU3RhdGlvbi5yYWlsc3RhdGlvbi5uYW1lLFxuICAgICAgICB0b3duOiB0aGlzLnRvU3RhdGlvbi5yYWlsc3RhdGlvbi5sb2NhdGlvbkRldGFpbHMuY2l0eSxcbiAgICAgICAgY291bnR5OiB0aGlzLnRvTG9jYXRpb24uY291bnR5XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2cocXVlcnkpO1xuXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxRdWVyeVNlYXJjaENhYkhpcmVBcmdzPihxdWVyeSk7XG4gIH1cblxuICBnZXRSZXR1cm5TZWFyY2hRdWVyeSgpOiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzIHtcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zPy52aWFzRnJvbSkge1xuICAgICAgdGhpcy5fdmlhc1swXSA9IDxDYWJIaXJlTG9jYXRpb25JbnB1dD50aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXM/LnZpYXNGcm9tKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcz8udmlhc1RvKSB7XG4gICAgICB0aGlzLl92aWFzWzFdID0gPENhYkhpcmVMb2NhdGlvbklucHV0PnRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcz8udmlhc1RvKTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MgPSB7XG4gICAgICBhZHVsdHM6IHRoaXMudGVtcFBhcmFtcy5hZHVsdHMsXG4gICAgICBjaGlsZHJlbjogdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuLFxuICAgICAgZGVwYXJ0czogdGhpcy5oZWxwZXJzLmZvcm1hdEdyb3VuZHNwYW5EYXRlVGltZSh0aGlzLl9yZXR1cm5EYXRlVGltZSksXG4gICAgICBmcm9tTG9jYXRpb246IDxDYWJIaXJlTG9jYXRpb25JbnB1dD50aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzKSwgLy8gc3dhcCB0aGUgbG9jYXRpb25zIGFyb3VuZFxuICAgICAgdG9Mb2NhdGlvbjogPENhYkhpcmVMb2NhdGlvbklucHV0PnRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyksXG4gICAgICBpbmZhbnRzOiAwLFxuICAgICAgdmVoaWNsZVR5cGU6IHRoaXMudmVoaWNsZVR5cGUsXG4gICAgICB2aWFzOiA8Q2FiSGlyZUxvY2F0aW9uSW5wdXRbXT50aGlzLl92aWFzLFxuICAgICAgdHJhdmVsbGVyczogdGhpcy50cmF2ZWxsZXJzLm1hcCh0cmF2ZWxsZXIgPT4ge3JldHVybiB7aWQ6IHRyYXZlbGxlci5pZH19KSxcbiAgICAgIHNwZWNpYWxSZXF1aXJlbWVudHM6IHRoaXMudGVtcFBhcmFtcy5zcGVjaWFsUmVxdWlyZW1lbnRzXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3M+KHF1ZXJ5KTtcbiAgfVxuXG4gIHVwZGF0ZU91dGJvdW5kQWRkcmVzcyhsb2NhdGlvbjogYW55LCBwbGFjZURlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzID0gdGhpcy5nZXRBZGRyZXNzRm9ybWF0KGxvY2F0aW9uLCBwbGFjZURlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIHVwZGF0ZVZpYUFkZHJlc3MobG9jYXRpb246IGFueSwgcGxhY2VEZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmlhc0Zyb20gPSB0aGlzLmdldEFkZHJlc3NGb3JtYXQobG9jYXRpb24sIHBsYWNlRGVzY3JpcHRpb24pO1xuICB9XG5cbiAgdXBkYXRlSW5ib3VuZEFkZHJlc3MobG9jYXRpb246IGFueSwgcGxhY2VEZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3MgPSB0aGlzLmdldEFkZHJlc3NGb3JtYXQobG9jYXRpb24sIHBsYWNlRGVzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDYWJIaXJlTG9jYXRpb24obG9jYXRpb246IEFkZHJlc3NGb3JtKTogQ2FiSGlyZUxvY2F0aW9uSW5wdXQge1xuICAgIGNvbnN0IHR5cGUgPSBsb2NhdGlvbj8uSG91c2U/LnJlcGxhY2UoJyAnLCAnJyk7XG4gICAgY29uc3QgYWRkcmVzc1R5cGU6IEFkZHJlc3NUeXBlID0gdHlwZT8uaW5jbHVkZXMoQWRkcmVzc1R5cGUuQWlycG9ydClcbiAgICAgID8gQWRkcmVzc1R5cGUuQWlycG9ydFxuICAgICAgOiBBZGRyZXNzVHlwZS5BZGRyZXNzO1xuICAgIGNvbnN0IGNvbW1vblByb3BlcnRpZXM6IFBhcnRpYWw8Q2FiSGlyZUxvY2F0aW9uSW5wdXQ+ID0ge1xuICAgICAgYnVpbGRpbmdOYW1lOiB0eXBlPy5pbmNsdWRlcyhBZGRyZXNzVHlwZS5UcmFpblN0YXRpb24pID8gbG9jYXRpb24/LlN0cmVldCArICcgVHJhaW4gU3RhdGlvbicgOiB0eXBlPy5pbmNsdWRlcyhBZGRyZXNzVHlwZS5BaXJwb3J0KSA/IGxvY2F0aW9uPy5TdHJlZXQgOiBsb2NhdGlvbj8uSG91c2UsXG4gICAgICBzdHJlZXRBbmROdW1iZXI6IGxvY2F0aW9uPy5TdHJlZXQsXG4gICAgICB0b3duOiBsb2NhdGlvbj8uVG93bixcbiAgICAgIGNvdW50eTogbG9jYXRpb24/LkNvdW50eSxcbiAgICAgIHBvc3Rjb2RlOiBsb2NhdGlvbj8uUG9zdENvZGU/LnJlcGxhY2UoL1xccysvZywgJycpID8/ICcnLFxuICAgICAgY291bnRyeUNvZGU6IGxvY2F0aW9uLkNvdW50cnlDb2RlIHx8IGxvY2F0aW9uLkNvdW50cnksXG4gICAgICBmbGlnaHROdW1iZXI6IGxvY2F0aW9uPy5GbGlnaHROdW1iZXIgPyBsb2NhdGlvbj8uRmxpZ2h0TnVtYmVyIDogbnVsbCxcbiAgICAgIHRlcm1pbmFsOiBsb2NhdGlvbi5UZXJtaW5hbCB8fCAgbnVsbFxuICAgIH07XG5cbiAgICBpZiAodGhpcy52ZWhpY2xlVHlwZSA9PT0gQ2FiSGlyZVZlaGljbGVUeXBlLkxpbW8pIHtcbiAgICAgIGNvbnN0IGZsaWdodFRyYWluRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSB0eXBlPy5pbmNsdWRlcyhBZGRyZXNzVHlwZS5UcmFpblN0YXRpb24pIHx8IHR5cGU/LmluY2x1ZGVzKEFkZHJlc3NUeXBlLkFpcnBvcnQpID8gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2RhdGUsIGxvY2F0aW9uPy5GbGlnaHRUcmFpbkRhdGVUaW1lKSA6IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jb21tb25Qcm9wZXJ0aWVzIGFzIENhYkhpcmVMb2NhdGlvbklucHV0LFxuICAgICAgICBhZGRyZXNzVHlwZTogYWRkcmVzc1R5cGUsXG4gICAgICAgIGNhcnJpZXI6ICBsb2NhdGlvbj8uQ2FycmllcixcbiAgICAgICAgYWlycG9ydFN0YXRpb25OYW1lOiBsb2NhdGlvbj8uQWlycG9ydFN0YXRpb25OYW1lLFxuICAgICAgICBmbGlnaHRUcmFpbkRhdGVUaW1lOiBmbGlnaHRUcmFpbkRhdGVUaW1lID8gdGhpcy5oZWxwZXJzLmZvcm1hdEdyb3VuZHNwYW5EYXRlVGltZShmbGlnaHRUcmFpbkRhdGVUaW1lKSA6IG51bGxcbiAgICAgIH07XG4gICAgfSByZXR1cm4gY29tbW9uUHJvcGVydGllcyBhcyBDYWJIaXJlTG9jYXRpb25JbnB1dDtcbiAgfVxuXG4gIG1hdGNoQWRkcmVzc2VzKCkge1xuICAgIHRoaXMuX3RvTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzKTtcbiAgICB0aGlzLl9mcm9tTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3MpO1xuICAgIHRoaXMuX3ZpYXNbMF0ucG9zdGNvZGUgPSB0aGlzLnRlbXBQYXJhbXM/LnZpYXNGcm9tPy5Qb3N0Q29kZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBzb3J0QnkoYXNjPzogYm9vbGVhbiwgcmV0dXJuSW5kZXg/OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hTZXJ2aWNlLmlzQ2xvbmluZy52YWx1ZSkge1xuICAgICAgcmV0dXJuOyAvLyBEb24ndCBwZXJmb3JtIHNvcnRpbmcgaWYgaXNDbG9uaW5nIGlzIHRydWVcbiAgICB9XG4gICAgXG4gICAgaWYgKHJldHVybkluZGV4ID49IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKCdoZXJlJyk7XG4gICAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmZ1bGxNdWx0aVJlc3VsdHNbcmV0dXJuSW5kZXhdKTtcbiAgICAgIGlmIChhc2MpIHtcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGIucHJpY2UgLSBhLnByaWNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBhLnByaWNlIC0gYi5wcmljZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZ1bGxNdWx0aVJlc3VsdHNbcmV0dXJuSW5kZXhdID0gcmVzdWx0cztcbiAgICAgIHRoaXMubXVsdGlSZXN1bHRzLm5leHQodGhpcy5mdWxsTXVsdGlSZXN1bHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cyk7XG4gICAgICBpZiAoYXNjKSB7XG4gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKGE6IENhYkhpcmVRdW90ZSwgYjogQ2FiSGlyZVF1b3RlKSA9PiBiLnByaWNlIC0gYS5wcmljZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRzID0gcmVzdWx0cz8uc29ydCgoYTogQ2FiSGlyZVF1b3RlLCBiOiBDYWJIaXJlUXVvdGUpID0+IGEucHJpY2UgLSBiLnByaWNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vICEgc3R1ZmYgdG8gZ28gaW4gYSBwb3N0Y29kZSBzZXJ2aWVcblxuICBnZXRBZGRyZXNzRm9ybWF0KGxvY2F0aW9uOiBhbnksIHBsYWNlRGVzY3JpcHRpb24/OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBIb3VzZTogdGhpcy5nZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlscyhsb2NhdGlvbiwgWydmbG9vcicsICdzdHJlZXRfbnVtYmVyJywgJ3ByZW1pc2UnXSksXG4gICAgICBTdHJlZXQ6IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFsncm91dGUnLCAnc3RyZWV0X25hbWUnLCAnZXN0YWJsaXNobWVudCddKSxcbiAgICAgIFRvd246IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFtcbiAgICAgICAgJ3Bvc3RhbF90b3duJyxcbiAgICAgICAgJ2FkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMicsXG4gICAgICAgICdsb2NhbGl0eSdcbiAgICAgIF0pLFxuICAgICAgUG9zdENvZGU6IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFsncG9zdGNvZGUnLCAncG9zdGFsX2NvZGUnXSksXG4gICAgICBDb3VudHJ5OiB0aGlzLmdldEFkZHJlc3NGcm9tUGxhY2VEZXRhaWxzKGxvY2F0aW9uLCBbJ2NvdW50cnknXSksXG4gICAgICBDb3VudHJ5Q29kZTogdGhpcy5nZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlsc1Nob3J0KGxvY2F0aW9uLCBbJ2NvdW50cnknXSksXG4gICAgICBwbGFjZURlc2NyaXB0aW9uXG4gICAgfTtcbiAgfVxuXG4gIGdldEFkZHJlc3NGcm9tUGxhY2VEZXRhaWxzKHBsYWNlRGV0YWlsczogYW55LCB0eXBlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGxldCBhZGRyZXNzUHJvcCA9IG51bGw7XG4gICAgaWYgKHBsYWNlRGV0YWlscyAmJiBBcnJheS5pc0FycmF5KHBsYWNlRGV0YWlscykpIHtcbiAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICBjb25zdCBwcm9wID0gcGxhY2VEZXRhaWxzLmZpbHRlcihwZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGQudHlwZXMpICYmIHBkLnR5cGVzLmluY2x1ZGVzKHR5cGUpO1xuICAgICAgICB9KVswXTtcblxuICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgIGFkZHJlc3NQcm9wID0gIHByb3AubG9uZ19uYW1lO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhZGRyZXNzUHJvcDtcbiAgfVxuXG5cbiAgZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHNTaG9ydChwbGFjZURldGFpbHM6IGFueSwgdHlwZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBsZXQgYWRkcmVzc1Byb3AgPSBudWxsO1xuICAgIGlmIChwbGFjZURldGFpbHMgJiYgQXJyYXkuaXNBcnJheShwbGFjZURldGFpbHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgICAgY29uc3QgcHJvcCA9IHBsYWNlRGV0YWlscy5maWx0ZXIocGQgPT4ge1xuICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBkLnR5cGVzKSAmJiBwZC50eXBlcy5pbmNsdWRlcyh0eXBlKTtcbiAgICAgICAgfSlbMF07XG5cbiAgICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgICBhZGRyZXNzUHJvcCA9IHByb3Auc2hvcnRfbmFtZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWRkcmVzc1Byb3A7XG4gIH1cblxuICBnZXRBZGRyZXNzRnJvbUFpcnBvcnREZXRhaWxzKGFpcnBvcnREZXRhaWxzOiBMb2NhdGlvbkRldGFpbCwgYWlycG9ydE5hbWU6IHN0cmluZykge1xuICAgIGNvbnNvbGUubG9nKGFpcnBvcnREZXRhaWxzKTtcbiAgICBsZXQgYWRkcmVzczogQWRkcmVzc0Zvcm0gPSBudWxsO1xuICAgIGlmIChhaXJwb3J0RGV0YWlscykge1xuICAgICAgYWRkcmVzcyA9IHtcbiAgICAgICAgQ291bnRyeTogYWlycG9ydERldGFpbHMuY291bnRyeSxcbiAgICAgICAgU3RyZWV0OiBhaXJwb3J0RGV0YWlscy5yb2FkLFxuICAgICAgICBQb3N0Q29kZTogYWlycG9ydERldGFpbHMucG9zdGNvZGUsXG4gICAgICAgIFRvd246IGFpcnBvcnREZXRhaWxzLmNpdHksXG4gICAgICAgIHBsYWNlRGVzY3JpcHRpb246IGFpcnBvcnROYW1lLFxuICAgICAgICBIb3VzZTogYWlycG9ydE5hbWVcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBhZGRyZXNzO1xuICB9XG5cbiAgc2V0TG9jYXRpb25Gcm9tQWlycG9ydChhaXJwb3J0RGV0YWlsczogTG9jYXRpb25EZXRhaWwsIGFpcnBvcnROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5nZXRBZGRyZXNzRnJvbUFpcnBvcnREZXRhaWxzKGFpcnBvcnREZXRhaWxzLCBhaXJwb3J0TmFtZSk7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gVGF4aUZvcm1Nb2RlLlNUQVRJT04pIHtcbiAgICAgIGlmICh0aGlzLmFpcnBvcnRTZWFyY2hUeXBlID09PSBBaXJwb3J0U2VhcmNoTW9kZS5QSUNLVVApIHtcbiAgICAgICAgdGhpcy5mcm9tQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRvQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkVG9TZWxlY3RlZFBsYWNlcyhhZGRyZXNzOiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkUGxhY2VzLnB1c2goYWRkcmVzcyk7XG4gIH1cblxuICBzZXRPdXRib3VuZEZvcm1WaXNpYmlsaXR5KHNob3dGb3JtOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5vdXRib3VuZFZpc2liaWxpdHkubmV4dChzaG93Rm9ybSk7XG4gIH1cblxuICBzZXRJbmJvdW5kRm9ybVZpc2liaWxpdHkoc2hvd0Zvcm06IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmluYm91bmRWaXNpYmlsaXR5Lm5leHQoc2hvd0Zvcm0pO1xuICB9XG5cbiAgZ2V0T3V0Ym91bmRGb3JtVmlzaWJpbGl0eSgpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLm91dGJvdW5kVmlzaWJpbGl0eTtcbiAgfVxuXG4gIGdldEluYm91bmRGb3JtVmlzaWJpbGl0eSgpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmluYm91bmRWaXNpYmlsaXR5O1xuICB9XG5cbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMocHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPik6IHZvaWQge1xuICAgIGNvbnN0IGZsaWdodEl0ZW06IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgcmFpbEl0ZW06IFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyA9IHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuUmFpbF0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IGlybEl0ZW06IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzID1cbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCBob3RlbEl0ZW06IFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzID0gcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5SYWlsXT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgY2FySXRlbTogU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzID0gcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5DYXJdPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCBsb3VuZ2VJdGVtOiBTZWFyY2hMb3VuZ2VzUXVlcnlWYXJpYWJsZXMgPSBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkxvdW5nZV0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IHBhcmtpbmdJdGVtOiBTZWFyY2hQYXJraW5nUXVlcnlWYXJpYWJsZXMgPVxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5QYXJraW5nXT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgZXVyb3N0YXJJdGVtOiBTZWFyY2hFdXJvc3RhclF1ZXJ5VmFyaWFibGVzID1cbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRXVyb3N0YXJdPy5zZWFyY2hRdWVyeTtcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuRkxJR0hULmluYm91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuRkxJR0hULmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5GTElHSFQub3V0Ym91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuRkxJR0hULm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKFxuICAgICAgICAgICAgYCR7ZGF0ZUFycmF5WzBdfSR7ZGF0ZUFycmF5WzFdfSR7ZGF0ZUFycmF5WzJdLnN1YnN0cmluZygwLCAyKX1gLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhYmhpcmUgZnJvbSBmbGlnaHQgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmFpbEl0ZW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLlJBSUwuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5SQUlMLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5SQUlMLm91dGJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLlJBSUwub3V0Ym91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FiaGlyZSBmcm9tIHJhaWwgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXJsSXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuSU5URVJOQVRJT05BTF9SQUlMLmluYm91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuSU5URVJOQVRJT05BTF9SQUlMLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5JTlRFUk5BVElPTkFMX1JBSUwub3V0Ym91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuSU5URVJOQVRJT05BTF9SQUlMLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKFxuICAgICAgICAgICAgYCR7ZGF0ZUFycmF5WzBdfSR7ZGF0ZUFycmF5WzFdfSR7ZGF0ZUFycmF5WzJdLnN1YnN0cmluZygwLCAyKX1gLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhYmhpcmUgZnJvbSBpbnRlcm5hdGlvbmFsIHJhaWwgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaG90ZWxJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5IT1RFTC5pbmJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLkhPVEVMLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5IT1RFTC5vdXRib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5IT1RFTC5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShcbiAgICAgICAgICAgIGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBjYWJoaXJlIGZyb20gaG90ZWwgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FySXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuQ0FSLmluYm91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuQ0FSLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5DQVIub3V0Ym91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuQ0FSLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKFxuICAgICAgICAgICAgYCR7ZGF0ZUFycmF5WzBdfSR7ZGF0ZUFycmF5WzFdfSR7ZGF0ZUFycmF5WzJdLnN1YnN0cmluZygwLCAyKX1gLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhYmhpcmUgZnJvbSBjYXIgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobG91bmdlSXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuTE9VTkdFLmluYm91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuTE9VTkdFLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5MT1VOR0Uub3V0Ym91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuTE9VTkdFLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKFxuICAgICAgICAgICAgYCR7ZGF0ZUFycmF5WzBdfSR7ZGF0ZUFycmF5WzFdfSR7ZGF0ZUFycmF5WzJdLnN1YnN0cmluZygwLCAyKX1gLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhYmhpcmUgZnJvbSBsb3VuZ2UgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocGFya2luZ0l0ZW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLlBBUktJTkcuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5QQVJLSU5HLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5QQVJLSU5HLm91dGJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLlBBUktJTkcub3V0Ym91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FiaGlyZSBmcm9tIHBhcmtpbmcgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXVyb3N0YXJJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5FVVJPU1RBUi5pbmJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLkVVUk9TVEFSLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5FVVJPU1RBUi5vdXRib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5FVVJPU1RBUi5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShcbiAgICAgICAgICAgIGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBjYWJoaXJlIGZyb20gZXVyb3N0YXIgaXRlbScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVNlYXJjaEZyb21FeHBpcmVkQmFza2V0SXRlbShiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLCBzZXREYXRlVGltZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hDYWJIaXJlUXVlcnk6IFNlYXJjaENhYkhpcmVRdWVyeVZhcmlhYmxlcyA9IGJhc2tldEl0ZW0uc2VhcmNoUXVlcnk7XG5cbiAgICBpZiAoc2VhcmNoQ2FiSGlyZVF1ZXJ5KSB7XG4gICAgICBpZiAoc2V0RGF0ZVRpbWUpIHtcbiAgICAgICAgdGhpcy5kZXBhcnRzID0gbW9tZW50KHNlYXJjaENhYkhpcmVRdWVyeS5kZXBhcnRzKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy5zZXRRdWVyeUZyb21CYXNrZXRJdGVtKGJhc2tldEl0ZW0pO1xuICAgIH1cblxuICAgIHRoaXMuYWR1bHRzID0gc2VhcmNoQ2FiSGlyZVF1ZXJ5LmFkdWx0cztcbiAgICB0aGlzLmNoaWxkcmVuID0gc2VhcmNoQ2FiSGlyZVF1ZXJ5LmNoaWxkcmVuO1xuICAgIHRoaXMuaW5mYW50cyA9IHNlYXJjaENhYkhpcmVRdWVyeS5pbmZhbnRzO1xuICAgIHRoaXMuYWRkVHJhdmVsbGVyc0Zyb21CYXNrZXRJdGVtKGJhc2tldEl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0QWRkcmVzc0xvY2F0aW9uKGFkZHJlc3M6IENhYkhpcmVMb2NhdGlvbklucHV0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIENvdW50cnlDb2RlOiBhZGRyZXNzLmNvdW50cnlDb2RlLFxuICAgICAgSG91c2U6IGFkZHJlc3MuYnVpbGRpbmdOYW1lLFxuICAgICAgU3RyZWV0OiBhZGRyZXNzLnN0cmVldEFuZE51bWJlcixcbiAgICAgIFRvd246IGFkZHJlc3MudG93bixcbiAgICAgIFBvc3RDb2RlOiBhZGRyZXNzLnBvc3Rjb2RlLFxuICAgICAgQ291bnRyeTogYWRkcmVzcy5jb3VudHJ5Q29kZSxcbiAgICAgIFRlcm1pbmFsOiBhZGRyZXNzLnRlcm1pbmFsLFxuICAgICAgQ291bnR5OiAgYWRkcmVzcy5jb3VudHksXG4gICAgICBGbGlnaHROdW1iZXI6IGFkZHJlc3MuZmxpZ2h0TnVtYmVyLFxuICAgICAgRmxpZ2h0VHJhaW5EYXRlVGltZTogYWRkcmVzcy5mbGlnaHRUcmFpbkRhdGVUaW1lLFxuICAgICAgQ2FycmllcjogYWRkcmVzcy5jYXJyaWVyXG4gICAgfTtcbiAgfVxuXG4gIGdldFRyYW5zVHlwZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRyYW5zVHlwZUluZGV4ID0gdGhpcy50ZW1wUGFyYW1zLnZlaGljbGVUeXBlO1xuICAgIHJldHVybiB0aGlzLnRyYW5zVHlwZXMuZmluZCh4ID0+IHgua2V5ID09PSB0cmFuc1R5cGVJbmRleCk/LnZhbHVlIHx8ICcnO1xuICB9XG5cbiAgZ2V0UGFzc2VuZ2VycyA9ICgpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGFkdWx0cyA9IHRoaXMuYWR1bHRzO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICBsZXQgcGFzc2VuZ2VycyA9IGAke2FkdWx0c30gQWR1bHRgO1xuXG4gICAgaWYgKE51bWJlcihhZHVsdHMpICE9PSAxKSB7XG4gICAgICBwYXNzZW5nZXJzICs9ICdzJztcbiAgICB9XG4gICAgaWYgKE51bWJlcihjaGlsZHJlbikgPT09IDEpIHtcbiAgICAgIHBhc3NlbmdlcnMgKz0gYCwgJHtjaGlsZHJlbn0gQ2hpbGRgO1xuICAgIH1cblxuICAgIGlmIChOdW1iZXIoY2hpbGRyZW4pID4gMSkge1xuICAgICAgcGFzc2VuZ2VycyArPSBgLCAke2NoaWxkcmVufSBDaGlsZHJlbmA7XG4gICAgfVxuICAgIHJldHVybiBwYXNzZW5nZXJzO1xuICAgIHJldHVybiAnJztcbiAgfTtcblxuICBhc3luYyBhZGRDYWJIaXJlVG9CYXNrZXQoXG4gICAgY2FiSGlyZVF1b3RlOiBDYWJIaXJlUXVvdGUsXG4gICAgY2FiSGlyZVF1ZXJ5OiBTZWFyY2hDYWJIaXJlUXVlcnlWYXJpYWJsZXMsXG4gICAgaWdub3JlSW52b2tlZDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIGlmIChjYWJIaXJlUXVvdGUudW5hdmFpbGFibGUgJiYgIXRoaXMudXNlclNlcnZpY2UuY2FuT3ZlcnJpZGUoKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKGNhYkhpcmVRdW90ZSk7XG4gICAgaWYgKGJhc2tldCkge1xuICAgICAgY29uc3Qgd2hhdEhhcHBlbmVkID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxuICAgICAgICB7XG4gICAgICAgICAgYWR1bHRzOiBjYWJIaXJlUXVlcnkuYWR1bHRzLFxuICAgICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxuICAgICAgICAgIHNlcnZpY2U6IGNhYkhpcmVRdW90ZS5zb3VyY2VJZC50b1N0cmluZygpLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgYWRkaXRpb25hbDogY2FiSGlyZVF1b3RlLmFkZGl0aW9uYWwsXG4gICAgICAgICAgICBpZDogY2FiSGlyZVF1b3RlLmlkLFxuICAgICAgICAgICAgZGVwYXJ0czogY2FiSGlyZVF1ZXJ5LmRlcGFydHMsXG4gICAgICAgICAgICBzdXBwbGllck5hbWU6IGNhYkhpcmVRdW90ZS5zdXBwbGllck5hbWUsXG4gICAgICAgICAgICBlc3RpbWF0ZWRDTzI6IGNhYkhpcmVRdW90ZS5lc3RpbWF0ZWRDTzIsXG4gICAgICAgICAgICBmcm9tTG9jYXRpb246IHtcbiAgICAgICAgICAgICAgYWRkcmVzc1R5cGU6IGNhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24uYWRkcmVzc1R5cGUsXG4gICAgICAgICAgICAgIGJ1aWxkaW5nTmFtZTogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbi5idWlsZGluZ05hbWUsXG4gICAgICAgICAgICAgIHN0cmVldEFuZE51bWJlcjogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbi5zdHJlZXRBbmROdW1iZXIsXG4gICAgICAgICAgICAgIHRvd246IGNhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24udG93bixcbiAgICAgICAgICAgICAgcG9zdGNvZGU6IGNhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24ucG9zdGNvZGUsXG4gICAgICAgICAgICAgIGNvdW50eTogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbi5jb3VudHksXG4gICAgICAgICAgICAgIGNvdW50cnlDb2RlOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uLmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgICBsYXRpdHVkZTogY2FiSGlyZVF1b3RlLmZyb21Mb2NhdGlvbi5sYXRpdHVkZSxcbiAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBjYWJIaXJlUXVvdGUuZnJvbUxvY2F0aW9uLmxvbmdpdHVkZSxcbiAgICAgICAgICAgICAgZmxpZ2h0VHJhaW5EYXRlVGltZTogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbj8uZmxpZ2h0VHJhaW5EYXRlVGltZSxcbiAgICAgICAgICAgICAgZmxpZ2h0TnVtYmVyOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uPy5mbGlnaHROdW1iZXIsXG4gICAgICAgICAgICAgIHRlcm1pbmFsOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uPy50ZXJtaW5hbCxcbiAgICAgICAgICAgICAgY2FycmllcjogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbj8uY2FycmllcixcbiAgICAgICAgICAgICAgYWlycG9ydFN0YXRpb25OYW1lOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uPy5haXJwb3J0U3RhdGlvbk5hbWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b0xvY2F0aW9uOiB7XG4gICAgICAgICAgICAgIGFkZHJlc3NUeXBlOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi5hZGRyZXNzVHlwZSxcbiAgICAgICAgICAgICAgYnVpbGRpbmdOYW1lOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi5idWlsZGluZ05hbWUsXG4gICAgICAgICAgICAgIHN0cmVldEFuZE51bWJlcjogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24uc3RyZWV0QW5kTnVtYmVyLFxuICAgICAgICAgICAgICB0b3duOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi50b3duLFxuICAgICAgICAgICAgICBwb3N0Y29kZTogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24ucG9zdGNvZGUsXG4gICAgICAgICAgICAgIGNvdW50eTogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24uY291bnR5LFxuICAgICAgICAgICAgICBjb3VudHJ5Q29kZTogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24uY291bnRyeUNvZGUsXG4gICAgICAgICAgICAgIGxhdGl0dWRlOiBjYWJIaXJlUXVvdGUudG9Mb2NhdGlvbi5sYXRpdHVkZSxcbiAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBjYWJIaXJlUXVvdGUudG9Mb2NhdGlvbi5sb25naXR1ZGUsXG4gICAgICAgICAgICAgIGZsaWdodFRyYWluRGF0ZVRpbWU6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uPy5mbGlnaHRUcmFpbkRhdGVUaW1lLFxuICAgICAgICAgICAgICBmbGlnaHROdW1iZXI6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uPy5mbGlnaHROdW1iZXIsXG4gICAgICAgICAgICAgIHRlcm1pbmFsOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbj8udGVybWluYWwsXG4gICAgICAgICAgICAgIGNhcnJpZXI6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uPy5jYXJyaWVyLFxuICAgICAgICAgICAgICBhaXJwb3J0U3RhdGlvbk5hbWU6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uPy5haXJwb3J0U3RhdGlvbk5hbWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2aWFzOiBjYWJIaXJlUXVlcnkudmlhcyxcbiAgICAgICAgICAgIHZlaGljbGVUeXBlOiBjYWJIaXJlUXVvdGUudmVoaWNsZVR5cGUsXG4gICAgICAgICAgICB0cmlwRGlzdGFuY2VNZXRyZXM6IGNhYkhpcmVRdW90ZS50cmlwRGlzdGFuY2VNZXRyZXMsXG4gICAgICAgICAgICB0cmlwRHVyYXRpb25TZWNvbmRzOiBjYWJIaXJlUXVvdGUudHJpcER1cmF0aW9uU2Vjb25kcyxcbiAgICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmljZTogY2FiSGlyZVF1b3RlLnByaWNlLFxuICAgICAgICAgIGN1cnJlbmN5OiBjYWJIaXJlUXVvdGUuY3VycmVuY3ksXG4gICAgICAgICAgc2VhcmNoUXVlcnk6IGNhYkhpcmVRdWVyeSxcbiAgICAgICAgICBjbzJQZXJJdGVtOiBjYWJIaXJlUXVvdGUuY28yUGVySXRlbSxcbiAgICAgICAgICBjbzJQZXJQYXNzZW5nZXI6IGNhYkhpcmVRdW90ZS5jbzJQZXJQYXNzZW5nZXIsXG4gICAgICAgICAgb3V0Ym91bmREYXRlOiBjYWJIaXJlUXVlcnkuZGVwYXJ0cyxcbiAgICAgICAgICBsb3dlc3RQcmljZTpcbiAgICAgICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZT8uYW1vdW50IHx8IHRoaXMuY2hlYXBlc3RQcmljZT8uY3VycmVuY3lDb2RlICE9PSBjYWJIaXJlUXVvdGUuY3VycmVuY3lcbiAgICAgICAgICAgICAgPyB0aGlzLmNoZWFwZXN0UHJpY2U/LmFtb3VudFxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTpcbiAgICAgICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZT8uYW1vdW50IHx8IHRoaXMuY2hlYXBlc3RQcmljZT8uY3VycmVuY3lDb2RlICE9PSBjYWJIaXJlUXVvdGUuY3VycmVuY3lcbiAgICAgICAgICAgICAgPyA8Q3VycmVuY3lDb2RlPnRoaXMuY2hlYXBlc3RQcmljZT8uY3VycmVuY3lDb2RlXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIHJlYXNvbktleXM6IGNhYkhpcmVRdW90ZS5yZXF1aXJlc1JlYXNvbktleXMsXG4gICAgICAgICAgICBhZ2VudE92ZXJyb2RlVW5hdmFpbGFibGU6Y2FiSGlyZVF1b3RlLnVuYXZhaWxhYmxlXG5cbiAgICAgICAgfSxcbiAgICAgICAgaW50QmFza2V0LFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcbiAgICAgICAgY2FiSGlyZVF1b3RlLnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGlnbm9yZUludm9rZWRcbiAgICAgICk7XG4gICAgICBpZiAod2hhdEhhcHBlbmVkID09PSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoKSB7XG4gICAgICAgICAgdGhpcy5yZXNlYXJjaFdpdGhOZXdVc2VyKCk7XG4gICAgICAgIH1cbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XG4gICAgfVxuICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbDtcbiAgfVxuXG4gIHN3aXRjaEZyb21BbmRUb0xvY2F0aW9uKCkge1xuICAgIGNvbnN0IG5ld0Zyb21BZGRyZXNzID0geyAuLi50aGlzLnRvQWRkcmVzcyB9O1xuICAgIGNvbnN0IG5ld1RvQWRkcmVzcyA9IHsgLi4udGhpcy5mcm9tQWRkcmVzcyB9O1xuICAgIHRoaXMuZnJvbUFkZHJlc3MgPSBuZXdGcm9tQWRkcmVzcztcbiAgICB0aGlzLnRvQWRkcmVzcyA9IG5ld1RvQWRkcmVzcztcbiAgfVxuXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IENhYkhpcmVRdW90ZVtdKTogSUNoZWFwZXN0UHJpY2Uge1xuICAgIGlmICghcmVzdWx0cz8ubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBjdXJyZW5jeSA9IHJlc3VsdHNbMF0uY3VycmVuY3k7XG4gICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKFxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IENhYkhpcmVRdW90ZSkgPT4ge1xuICAgICAgICBjb25zdCBwcmljZSA9IHJlc3VsdC5wcmljZTtcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xuICAgICAgfSxcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XG4gICAgKTtcbiAgfVxuXG4gIGdldFRlcm1zQW5kQ29uZChjYWJIaXJlUXVvdGU6IENhYkhpcmVRdW90ZSkge1xuICAgIGNvbnN0IGRlcGFydHMgPSBtb21lbnQoY2FiSGlyZVF1b3RlLmRlcGFydHMpLnV0YygpLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUX1RJTUUpO1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdMb3dlc3QgUHJpY2UnLFxuICAgICAgICB2YWx1ZTogY2FiSGlyZVF1b3RlLnByaWNlLnRvU3RyaW5nKCkgKyAnICcgKyBjYWJIaXJlUXVvdGUuY3VycmVuY3lcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdQaWNrdXAgVGltZScsXG4gICAgICAgIHZhbHVlOiBkZXBhcnRzXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVGVybXMgYW5kIENvbmRpdGlvbnMnLFxuICAgICAgICB2YWx1ZTpcbiAgICAgICAgICBjYWJIaXJlUXVvdGUuc291cmNlID09PSBTZXJ2aWNlUHJvdmlkZXIuQ01BQ1xuICAgICAgICAgICAgPyAnPGEgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cImh0dHBzOi8vd3d3LmNtYWNncm91cC5jb20vXCI+d3d3LmNtYWNncm91cC5jb208L2E+J1xuICAgICAgICAgICAgOiBjYWJIaXJlUXVvdGUuYWRkaXRpb25hbD8ucHJvdmlkZXJzUHJpY2luZz8ubm90ZXNcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XG4gICAgICBjb25zdCBxdWVyeTogUXVlcnlTZWFyY2hDYWJIaXJlQXJncyA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5OiBJQ2FiSGlyZVNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkNhYixcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XG4gICAgfVxuICB9XG4gIGFzeW5jIGFwcGx5RmF2b3VyaXRlKGZhdjogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGZhdi5mcm9tTG9jYXRpb24uU3RyZWV0ICYmIGZhdi50b0xvY2F0aW9uLlN0cmVldCkge1xuICAgICAgdGhpcy5tb2RlID0gVGF4aUZvcm1Nb2RlLkFERFJFU1M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kZSA9IFRheGlGb3JtTW9kZS5TVEFUSU9OO1xuICAgICAgdGhpcy5haXJwb3J0U2VhcmNoVHlwZSA9IGZhdi5mcm9tTG9jYXRpb24uU3RyZWV0XG4gICAgICAgID8gQWlycG9ydFNlYXJjaE1vZGUuRFJPUE9GRlxuICAgICAgICA6IEFpcnBvcnRTZWFyY2hNb2RlLlBJQ0tVUDtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KCFmYXYuZnJvbUxvY2F0aW9uLlN0cmVldCA/IGZhdi5mcm9tTG9jYXRpb24uSG91c2UgOiBmYXYudG9Mb2NhdGlvbi5Ib3VzZSlcbiAgICAgICAgLnN1YnNjcmliZShhaXJwb3J0ID0+IHtcbiAgICAgICAgICB0aGlzLmFpcnBvcnQgPSAoYWlycG9ydCBhcyBhbnlbXSlbMF07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmFkdWx0cyA9IGZhdi5hZHVsdHM7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGZhdi5jaGlsZHJlbjtcbiAgICB0aGlzLmluZmFudHMgPSBmYXYuaW5mYW50cztcbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLkhvdXNlID0gZmF2LmZyb21Mb2NhdGlvbi5Ib3VzZVxuICAgIC8vIHRoaXMuZnJvbUFkZHJlc3MuU3RyZWV0ID0gZmF2LmZyb21Mb2NhdGlvbi5TdHJlZXRcbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLlRvd24gPSBmYXYuZnJvbUxvY2F0aW9uLlRvd25cbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLkNvdW50cnkgPSBmYXYuZnJvbUxvY2F0aW9uLkNvdW50cnlcbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLlBvc3RDb2RlID0gZmF2LmZyb21Mb2NhdGlvbi5Qb3N0Q29kZVxuICAgIC8vIHRoaXMuZnJvbUFkZHJlc3MucGxhY2VEZXNjcmlwdGlvbiA9IGZhdi5mcm9tTG9jYXRpb24ucGxhY2VEZXNjcmlwdGlvblxuICAgIC8vIHRoaXMudG9BZGRyZXNzLkhvdXNlID0gZmF2LnRvTG9jYXRpb24uSG91c2VcbiAgICAvLyB0aGlzLnRvQWRkcmVzcy5TdHJlZXQgPSBmYXYudG9Mb2NhdGlvbi5TdHJlZXRcbiAgICAvLyB0aGlzLnRvQWRkcmVzcy5Ub3duID0gZmF2LnRvTG9jYXRpb24uVG93blxuICAgIC8vIHRoaXMudG9BZGRyZXNzLkNvdW50cnkgPSBmYXYudG9Mb2NhdGlvbi5Db3VudHJ5XG4gICAgLy8gdGhpcy50b0FkZHJlc3MuUG9zdENvZGUgPSBmYXYudG9Mb2NhdGlvbi5Qb3N0Q29kZVxuICAgIC8vIHRoaXMudG9BZGRyZXNzLnBsYWNlRGVzY3JpcHRpb24gPSBmYXYudG9Mb2NhdGlvbi5wbGFjZURlc2NyaXB0aW9uXG4gICAgdGhpcy5mcm9tQWRkcmVzcyA9IGZhdi5mcm9tTG9jYXRpb247XG4gICAgdGhpcy50b0FkZHJlc3MgPSBmYXYudG9Mb2NhdGlvbjtcbiAgICB0aGlzLnZlaGljbGVUeXBlID0gZmF2LnZlaGljbGVUeXBlO1xuICB9XG5cbiAgbWVzc2FnZUNvbmZpZ0NoZWNrKGNvbmZpZzogYW55LCBpc0NoZWNrUGFzczogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGlmIChjb25maWcuYWlycG9ydCAmJiBpc0NoZWNrUGFzcykge1xuICAgICAgY29uc3QgZnJvbUFpcnBvcnQgPSB0aGlzLmZyb21BZGRyZXNzPy5BaXJwb3J0U3RhdGlvbk5hbWUgPT09IGNvbmZpZy5haXJwb3J0O1xuICAgICAgY29uc3QgdG9BaXJwb3J0ID0gdGhpcy50b0FkZHJlc3M/LkFpcnBvcnRTdGF0aW9uTmFtZSA9PT0gY29uZmlnLmFpcnBvcnQ7XG4gICAgICBpc0NoZWNrUGFzcyA9IGZyb21BaXJwb3J0IHx8IHRvQWlycG9ydDtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5jaXR5ICYmIGlzQ2hlY2tQYXNzKSB7XG4gICAgICBjb25zdCBjaXR5ID0gY29uZmlnLmNpdHkudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgIGxldCBmcm9tQ2l0eSA9IHRoaXMuZnJvbUxvY2F0aW9uPy50b3duPy50b0xvd2VyQ2FzZSgpLnRyaW0oKSA9PT0gIGNpdHk7XG4gICAgICBpZih0aGlzLmZyb21Mb2NhdGlvbj8uYnVpbGRpbmdOYW1lICYmICFmcm9tQ2l0eSl7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmZyb21Mb2NhdGlvbj8uYnVpbGRpbmdOYW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgZnJvbUNpdHkgPSBuYW1lLmluY2x1ZGVzKGNpdHkpO1xuICAgICAgfVxuICAgICAgbGV0IHRvQ2l0eSA9IHRoaXMudG9Mb2NhdGlvbj8udG93bj8udG9Mb3dlckNhc2UoKS50cmltKCkgPT09ICBjaXR5O1xuICAgICAgaWYodGhpcy50b0xvY2F0aW9uPy5idWlsZGluZ05hbWUgJiYgIXRvQ2l0eSl7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnRvTG9jYXRpb24/LmJ1aWxkaW5nTmFtZT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgIHRvQ2l0eSA9IG5hbWUuaW5jbHVkZXMoY2l0eSk7XG4gICAgICB9XG5cbiAgICAgIGlzQ2hlY2tQYXNzID0gZnJvbUNpdHkgfHwgdG9DaXR5O1xuICAgIH1cbiAgICByZXR1cm4gaXNDaGVja1Bhc3M7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUxvY2F0aW9uKFxuICAgIG1vZGU6IFRheGlGb3JtTW9kZSxcbiAgICBsb2NhdGlvbjogQ2FiSGlyZUxvY2F0aW9uSW5wdXRcbiAgKTogUHJvbWlzZTxSYWlsQWlycG9ydCB8IG51bGw+IHtcbiAgICBpZiAobW9kZSAhPT0gVGF4aUZvcm1Nb2RlLlNUQVRJT04pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgXG4gICAgY29uc3QgdGVybSA9IGxvY2F0aW9uLmJ1aWxkaW5nTmFtZS5yZXBsYWNlKC9eW14sXSssXFxzKi8sIFwiXCIpO1xuICAgIGNvbnN0IGlzVHJ1ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBcbiAgICBpZiAobG9jYXRpb24udGVybWluYWwpIHsgLy8gYWlycG9ydCB0eXBlXG4gICAgICBjb25zdCBsb2NhdGlvbnMgID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRMb2NhdGlvbnModGVybSwgbG9jYXRpb24uY291bnRyeUNvZGUsIGlzVHJ1ZVN1YmplY3QpLnRvUHJvbWlzZSgpO1xuICAgICAgaWYgKGxvY2F0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHsgYWlycG9ydCwgbmFtZSwgdHlwZSB9ID0gbG9jYXRpb25zWzBdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgYWlycG9ydCxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHN1cHBsaWVyX2NvZGU6IG51bGwsXG4gICAgICAgICAgaXNhaXJwb3J0OiBudWxsLFxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBhaXJwb3J0LmRlc3RpbmF0aW9uLFxuICAgICAgICAgIHRlcm1pbmFsOiBsb2NhdGlvbi50ZXJtaW5hbCxcbiAgICAgICAgfSBhcyBSYWlsQWlycG9ydDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxvY2F0aW9uLmJ1aWxkaW5nTmFtZSA9PT0gbG9jYXRpb24uc3RyZWV0QW5kTnVtYmVyKSB7IC8vIFRyYWluIFN0LiB0eXBlXG4gICAgICBjb25zdCBsb2NhdGlvbnMgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0U3RhdGlvbkxvY2F0aW9ucyh0ZXJtLCBpc1RydWVTdWJqZWN0KS50b1Byb21pc2UoKTtcbiAgICAgIGlmIChsb2NhdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIHJhaWxzdGF0aW9uLCB0eXBlIH0gPSBsb2NhdGlvbnNbMF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHJhaWxzdGF0aW9uLFxuICAgICAgICAgIHN1cHBsaWVyX2NvZGU6IG51bGwsXG4gICAgICAgICAgaXNhaXJwb3J0OiBudWxsLFxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBudWxsLFxuICAgICAgICB9IGFzIFJhaWxBaXJwb3J0O1xuICAgICAgfVxuICAgIH1cbiAgXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRBZGRyZXNzKGV2ZW50OiBhbnkpOiBBZGRyZXNzRm9ybSB7XG4gICAgbGV0IGFkZHJlc3M6IEFkZHJlc3NGb3JtID0gbnVsbDtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGxldCBhZGRyZXNzVHlwZTogc3RyaW5nID0gZXZlbnQ/LnR5cGU7XG4gICAgICBpZiAoYWRkcmVzc1R5cGU/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKCdhaXJwb3J0JykpIHtcbiAgICAgICAgYWRkcmVzcyA9IHtcbiAgICAgICAgICBIb3VzZTogZXZlbnQ/LnR5cGUsXG4gICAgICAgICAgU3RyZWV0OiBldmVudD8ubmFtZSxcbiAgICAgICAgICBQb3N0Q29kZTogZXZlbnQ/LmFpcnBvcnQ/LnBvc3Rjb2RlLFxuICAgICAgICAgIFRlcm1pbmFsOiBldmVudD8udGVybWluYWwgfHwgbnVsbCxcbiAgICAgICAgICBDb3VudHJ5OiBldmVudD8uYWlycG9ydD8uY291bnRyeUNvZGUsXG4gICAgICAgICAgRmxpZ2h0TnVtYmVyOiAgZXZlbnQ/LmZsaWdodE51bWJlciB8fCAnJyxcbiAgICAgICAgICBDYXJyaWVyOiAgZXZlbnQ/LmNhcnJpZXIgfHwgJycsXG4gICAgICAgICAgQWlycG9ydFN0YXRpb25OYW1lOiBldmVudD8uYWlycG9ydD8uZ2F0ZXdheSB8fCAnJ1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGRyZXNzID0ge1xuICAgICAgICAgIEhvdXNlOiBldmVudD8udHlwZSxcbiAgICAgICAgICBTdHJlZXQ6IGV2ZW50Py5uYW1lLFxuICAgICAgICAgIFBvc3RDb2RlOiBldmVudD8ucmFpbHN0YXRpb24/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXG4gICAgICAgICAgQ291bnRyeTogZXZlbnQ/LnJhaWxzdGF0aW9uPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlLFxuICAgICAgICAgIEZsaWdodE51bWJlcjogIGV2ZW50Py5mbGlnaHROdW1iZXIgfHwgJycsXG4gICAgICAgICAgQ2FycmllcjogIGV2ZW50Py5jYXJyaWVyIHx8ICcnLFxuICAgICAgICAgIEFpcnBvcnRTdGF0aW9uTmFtZTogZXZlbnQ/LnJhaWxzdGF0aW9uPy5zdGF0aW9uQ29kZSB8fCAnJyxcbiAgICAgICAgICBGbGlnaHRUcmFpbkRhdGVUaW1lOiBldmVudD8uZmxpZ2h0VHJhaW5EYXRlVGltZSB8fCAnMDk6MDAnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFkZHJlc3M7XG4gIH1cblxuICBfYXBwbHlGaWx0ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VhcmNoU2VydmljZS5pc0Nsb25pbmcuZ2V0VmFsdWUoKSkge1xuICAgICAgY29uc3QgZmlsdGVyZWRSZXN1bHRzID0gdGhpcy5mdWxsUmVzdWx0cy5maWx0ZXIoKHJlc3VsdDogQ2FiSGlyZVF1b3RlKSA9PiBcbiAgICAgICAgcmVzdWx0LnN1cHBsaWVyTmFtZSA9PT0gdGhpcy5jbG9uZWRCYXNrZXRJdGVtRGV0YWlscy5zdXBwbGllck5hbWVcbiAgICAgICk7XG4gICAgICB0aGlzLnJlc3VsdHMubmV4dCh0aGlzLmhlbHBlcnMuY2xvbmUoZmlsdGVyZWRSZXN1bHRzKSk7XG4gICAgfSBcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMgPSB7fTtcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2UgdXNlIHRoaXMgbWV0aG9kIGZvciBmZWF0dXJlczogRXhwaXJlZEJhc2tldCwgQ29weUJhc2tldCwgQ2xvbmVCYXNrZXRcbiAgLy8gTm90ZTogRG8gbm90IGluY2x1ZGUgZGF0ZXMgYW5kIHRhdmVsbGVycyBpbiB0aGlzIG1ldGhvZFxuICBhc3luYyBhcHBseVNlYXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hDYWJIaXJlUXVlcnlWYXJpYWJsZXMsIHN0YXJ0U2VhcmNoOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIHRoaXMuZnJvbUFkZHJlc3MgPSB0aGlzLmNvbnZlcnRBZGRyZXNzTG9jYXRpb24oXG4gICAgICBxdWVyeS5mcm9tTG9jYXRpb25cbiAgICApO1xuXG4gICAgdGhpcy50b0FkZHJlc3MgPSB0aGlzLmNvbnZlcnRBZGRyZXNzTG9jYXRpb24oXG4gICAgICBxdWVyeS50b0xvY2F0aW9uXG4gICAgKTtcblxuICAgIGNvbnN0IGlzTGltbzogYm9vbGVhbiA9IHF1ZXJ5Lm1lc3NhZ2VUeXBlID09PSBNZXNzYWdlVHlwZS5MaW1vID8gdHJ1ZSA6IGZhbHNlO1xuICBcbiAgICB0aGlzLnZlaGljbGVUeXBlID0gaXNMaW1vID8gQ2FiSGlyZVZlaGljbGVUeXBlLkxpbW8gOiBxdWVyeS52ZWhpY2xlVHlwZTtcbiAgICB0aGlzLmxpbW9UeXBlID0gaXNMaW1vID8gcXVlcnkudmVoaWNsZVR5cGUgOiBudWxsO1xuICAgIHRoaXMudHJhbnNwb3J0VHlwZSA9IGlzTGltbyA/IHRoaXMudGVtcFBhcmFtcy50cmFuc3BvcnRUeXBlIDogbnVsbDtcbiAgICB0aGlzLmxpbW9Bc0RpcmVjdGVkRHVyYXRpb24gPSBxdWVyeS50cmFuc3BvcnRUeXBlID09PSBUcmFuc3BvcnRUeXBlLkhvdXJseSA/ICtxdWVyeS5saW1vQXNEaXJlY3RlZER1cmF0aW9uIDogbnVsbDtcblxuICAgIHRoaXMubW9kZSA9IHF1ZXJ5LmZyb21Mb2NhdGlvbi5idWlsZGluZ05hbWUgPT09IHF1ZXJ5LmZyb21Mb2NhdGlvbi5zdHJlZXRBbmROdW1iZXIgfHwgcXVlcnkuZnJvbUxvY2F0aW9uLnRlcm1pbmFsID8gVGF4aUZvcm1Nb2RlLlNUQVRJT04gOiBUYXhpRm9ybU1vZGUuQUREUkVTUztcbiAgICB0aGlzLm1vZGVUbyA9IHF1ZXJ5LnRvTG9jYXRpb24uYnVpbGRpbmdOYW1lID09PSBxdWVyeS50b0xvY2F0aW9uLnN0cmVldEFuZE51bWJlciB8fCBxdWVyeS50b0xvY2F0aW9uLnRlcm1pbmFsID8gVGF4aUZvcm1Nb2RlLlNUQVRJT04gOiBUYXhpRm9ybU1vZGUuQUREUkVTUztcblxuICAgIHRoaXMuZnJvbVN0YXRpb24gPSBhd2FpdCB0aGlzLmhhbmRsZUxvY2F0aW9uKHRoaXMubW9kZSwgcXVlcnkuZnJvbUxvY2F0aW9uKTtcbiAgICB0aGlzLnRvU3RhdGlvbiA9IGF3YWl0IHRoaXMuaGFuZGxlTG9jYXRpb24odGhpcy5tb2RlVG8sIHF1ZXJ5LnRvTG9jYXRpb24pO1xuXG4gICAgdGhpcy52aWFzID0gcXVlcnkudmlhcyBhcyBDYWJIaXJlTG9jYXRpb25JbnB1dFtdIHx8IFtdO1xuICAgIGlmICh0aGlzLnZpYXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52aWFzRnJvbSA9IHRoaXMuY29udmVydEFkZHJlc3NMb2NhdGlvbih0aGlzLnZpYXNbMF0pO1xuICAgIH1cbiAgICBpZiAodGhpcy52aWFzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMudmlhc1RvID0gdGhpcy5jb252ZXJ0QWRkcmVzc0xvY2F0aW9uKHRoaXMudmlhc1sxXSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0U2VhcmNoKSB7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgIH1cbiAgfVxufVxuIl19