@c8y/ngx-components 1020.29.0 → 1020.33.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/bookmarks/bookmarks.service.d.ts +3 -2
  2. package/bookmarks/bookmarks.service.d.ts.map +1 -1
  3. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  4. package/core/common/common.module.d.ts +2 -2
  5. package/core/common/humanize-app-name.model.d.ts +2 -2
  6. package/core/common/humanize-app-name.pipe.d.ts.map +1 -1
  7. package/core/dashboard/dashboard.model.d.ts +1 -0
  8. package/core/dashboard/dashboard.model.d.ts.map +1 -1
  9. package/core/dashboard/widgets-dashboard.component.d.ts +1 -0
  10. package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
  11. package/core/data-grid/data-grid.model.d.ts +1 -1
  12. package/core/data-grid/data-grid.model.d.ts.map +1 -1
  13. package/core/data-grid/visible-controls.pipe.d.ts +3 -2
  14. package/core/data-grid/visible-controls.pipe.d.ts.map +1 -1
  15. package/esm2022/bookmarks/bookmarks.service.mjs +9 -7
  16. package/esm2022/context-dashboard/context-dashboard.service.mjs +6 -3
  17. package/esm2022/core/common/common.module.mjs +3 -3
  18. package/esm2022/core/common/humanize-app-name.model.mjs +3 -3
  19. package/esm2022/core/common/humanize-app-name.pipe.mjs +6 -5
  20. package/esm2022/core/dashboard/dashboard.model.mjs +2 -2
  21. package/esm2022/core/dashboard/widgets-dashboard.component.mjs +12 -3
  22. package/esm2022/core/data-grid/data-grid.component.mjs +3 -3
  23. package/esm2022/core/data-grid/data-grid.model.mjs +1 -1
  24. package/esm2022/core/data-grid/visible-controls.pipe.mjs +5 -4
  25. package/esm2022/core/docs/defaults.items.mjs +2 -2
  26. package/esm2022/protocol-opcua/opcua-device-protocol-data-reporting.component.mjs +3 -3
  27. package/esm2022/widgets/definitions/device-management-welcome/index.mjs +2 -2
  28. package/esm2022/widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.mjs +22 -5
  29. package/fesm2022/c8y-ngx-components-bookmarks.mjs +7 -5
  30. package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
  31. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +5 -2
  32. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  33. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +2 -2
  34. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  35. package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs +1 -1
  36. package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs.map +1 -1
  37. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +24 -9
  38. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
  39. package/fesm2022/c8y-ngx-components.mjs +27 -17
  40. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  41. package/locales/de.po +6 -0
  42. package/locales/es.po +6 -0
  43. package/locales/fr.po +6 -0
  44. package/locales/ja_JP.po +6 -0
  45. package/locales/locales.pot +12 -9
  46. package/locales/nl.po +6 -0
  47. package/locales/pl.po +6 -0
  48. package/locales/pt_BR.po +6 -0
  49. package/package.json +1 -1
  50. package/widgets/definitions/device-management-welcome/index.d.ts +1 -1
  51. package/widgets/definitions/device-management-welcome/index.d.ts.map +1 -1
  52. package/widgets/device-management/index.d.ts +1 -1
  53. package/widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.d.ts +5 -1
  54. package/widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.d.ts.map +1 -1
@@ -1,7 +1,7 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { Router } from '@angular/router';
3
3
  import { InventoryService } from '@c8y/client';
4
- import { AlertService, DynamicComponentService, getActivatedRoute, gettext, GroupService, ModalService, NavigatorNode, NavigatorService, Permissions, Status, TabsService, ViewContext } from '@c8y/ngx-components';
4
+ import { AlertService, DynamicComponentService, getActivatedRoute, gettext, GroupService, ModalService, NavigatorNode, NavigatorService, NEW_DASHBOARD_QUERY_PARAM, Permissions, Status, TabsService, ViewContext } from '@c8y/ngx-components';
5
5
  import { TranslateService } from '@ngx-translate/core';
6
6
  import { assign, cloneDeep, forEach, get, has, keyBy, keys, pick, reduce, set, some } from 'lodash-es';
7
7
  import { combineLatest, from, of, Subject } from 'rxjs';
@@ -166,7 +166,10 @@ export class ContextDashboardService {
166
166
  async navigateToDashboard(dashboardMO) {
167
167
  if (/dashboard/.test(this.router.url)) {
168
168
  this.router.navigate(['..', dashboardMO.id], {
169
- relativeTo: getActivatedRoute(this.router)
169
+ relativeTo: getActivatedRoute(this.router),
170
+ queryParams: {
171
+ [NEW_DASHBOARD_QUERY_PARAM]: true
172
+ }
170
173
  });
171
174
  }
172
175
  else if (/^\/(device|group)\/[0-9]+$/.test(this.router.url)) {
@@ -594,4 +597,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
594
597
  providedIn: 'root'
595
598
  }]
596
599
  }], ctorParameters: () => [{ type: i1.InventoryService }, { type: i2.TabsService }, { type: i2.ModalService }, { type: i3.TranslateService }, { type: i4.Router }, { type: i2.NavigatorService }, { type: i2.Permissions }, { type: i2.AlertService }, { type: i2.DynamicComponentService }, { type: i2.GroupService }] });
597
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTBCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQWUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUNMLFlBQVksRUFFWix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxZQUFZLEVBQ1osWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLE1BQU0sRUFFTixXQUFXLEVBQ1gsV0FBVyxFQUVaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsT0FBTyxFQUNQLEdBQUcsRUFDSCxHQUFHLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixJQUFJLEVBQ0osTUFBTSxFQUNOLEdBQUcsRUFDSCxJQUFJLEVBQ0wsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0YsT0FBTyxFQUNMLHlCQUF5QixFQUd6QixvQkFBb0IsRUFHcEIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNuQixNQUFNLDJCQUEyQixDQUFDOzs7Ozs7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QUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs4R0F0eUJVLHVCQUF1QjtrSEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzJGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UsIElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBDb250ZXh0RGF0YSxcbiAgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gIGdldEFjdGl2YXRlZFJvdXRlLFxuICBnZXR0ZXh0LFxuICBHcm91cFNlcnZpY2UsXG4gIE1vZGFsU2VydmljZSxcbiAgTmF2aWdhdG9yTm9kZSxcbiAgTmF2aWdhdG9yU2VydmljZSxcbiAgUGVybWlzc2lvbnMsXG4gIFN0YXR1cyxcbiAgVGFiLFxuICBUYWJzU2VydmljZSxcbiAgVmlld0NvbnRleHQsXG4gIFdpZGdldFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgY2xvbmVEZWVwLFxuICBmb3JFYWNoLFxuICBnZXQsXG4gIGhhcyxcbiAga2V5QnksXG4gIGtleXMsXG4gIHBpY2ssXG4gIHJlZHVjZSxcbiAgc2V0LFxuICBzb21lXG59IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIG1lcmdlTWFwLCB0YXAsIHRocm93SWZFbXB0eSwgdG9BcnJheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURUQsXG4gIENvbnRleHREYXNoYm9hcmQsXG4gIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICBDb250ZXh0RGFzaGJvYXJkVHlwZSxcbiAgRGFzaGJvYXJkQ29udGV4dCxcbiAgRGFzaGJvYXJkQ29weUNsaXBib2FyZCxcbiAgU1RZTElOR19DTEFTU19QUkVGSVhFUyxcbiAgUFJPRFVDVF9FWFBFUklFTkNFXG59IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0RGFzaGJvYXJkU2VydmljZSB7XG4gIGRhc2hib2FyZFRhYnMkOiBPYnNlcnZhYmxlPFRhYltdPjtcbiAgZm9ybURpc2FibGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcmVhZG9ubHkgUkVQT1JUX1BBUlRJQUxfTkFNRSA9ICdyZXBvcnRfJztcbiAgY29weUNsaXBib2FyZDogRGFzaGJvYXJkQ29weUNsaXBib2FyZDtcbiAgcmVhZG9ubHkgVkVSU0lPTl9ISVNUT1JZX1NJWkVfTElNSVQgPSAxMDtcbiAgcHJpdmF0ZSByZWFkb25seSBJTlZFTlRPUllfUk9MRVMgPSBbXG4gICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU4sXG4gICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9BRE1JTlxuICBdO1xuICBwcml2YXRlIGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfUEFHRVNJWkUgPSAxMDAwO1xuICBwcml2YXRlIHJlYWRvbmx5IEZSQUdNRU5UX05BTUUgPSAnYzh5X0Rhc2hib2FyZCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgREFTSEJPQVJEX1JPVVRFX1BBVEggPSAnZGFzaGJvYXJkJztcbiAgcHJpdmF0ZSByZWFkb25seSBJTkRFWF9TUExJVCA9ICchJztcbiAgcHJpdmF0ZSBfZm9ybURpc2FibGVkID0gdHJ1ZTtcbiAgcHJpdmF0ZSBmb3JtRGlzYWJsZWRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBnZXQgZm9ybURpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtRGlzYWJsZWQ7XG4gIH1cblxuICBzZXQgZm9ybURpc2FibGVkKHZhbHVlKSB7XG4gICAgdGhpcy5fZm9ybURpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy5mb3JtRGlzYWJsZWRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0YWJzOiBUYWJzU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3I6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uczogUGVybWlzc2lvbnMsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudDogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3VwU2VydmljZVxuICApIHtcbiAgICB0aGlzLmZvcm1EaXNhYmxlZCQgPSB0aGlzLmZvcm1EaXNhYmxlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUoZGFzaGJvYXJkQ2ZnOiBDb250ZXh0RGFzaGJvYXJkLCBjb250ZXh0PzogQ29udGV4dERhdGEsIG5hbWUgPSAnJykge1xuICAgIGxldCBkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+ID0ge307XG4gICAgYXNzaWduKFxuICAgICAgZGFzaGJvYXJkLFxuICAgICAgdGhpcy5hZGp1c3REYXNoYm9hcmRGb3IyNENvbHVtbnMoeyBjOHlfRGFzaGJvYXJkOiBkYXNoYm9hcmRDZmcgfSksXG4gICAgICB0aGlzLnVwZGF0ZURhc2hib2FyZEhpc3RvcnkoZGFzaGJvYXJkLCBkYXNoYm9hcmRDZmcpXG4gICAgKTtcblxuICAgIGNvbnN0IFtkYXNoYm9hcmRUeXBlLCBkYXNoYm9hcmRGcmFnbWVudHNdID0gdGhpcy5nZXREYXNoYm9hcmRGcmFnbWVudHMoXG4gICAgICB7IGM4eV9EYXNoYm9hcmQ6IGRhc2hib2FyZENmZyB9IGFzIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICAgICAgY29udGV4dCxcbiAgICAgIG5hbWUsXG4gICAgICBmYWxzZVxuICAgICk7XG4gICAgZGFzaGJvYXJkID0geyAuLi5kYXNoYm9hcmQsIC4uLmRhc2hib2FyZEZyYWdtZW50cyB9O1xuXG4gICAgaWYgKHRoaXMuc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZCwgY29udGV4dCkpIHtcbiAgICAgIGFzc2lnbihkYXNoYm9hcmQsIHsgYzh5X0dsb2JhbDoge30gfSk7XG4gICAgfVxuICAgIGRhc2hib2FyZC5uYW1lID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZTtcbiAgICBjb25zdCB7IGRhdGEgfSA9XG4gICAgICBkYXNoYm9hcmRUeXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cCB8fFxuICAgICAgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlIHx8XG4gICAgICAoY29udGV4dCAmJiBkYXNoYm9hcmRUeXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZClcbiAgICAgICAgPyBhd2FpdCB0aGlzLmludmVudG9yeS5jaGlsZEFkZGl0aW9uc0NyZWF0ZShcbiAgICAgICAgICAgIGRhc2hib2FyZCxcbiAgICAgICAgICAgIChjb250ZXh0Py5jb250ZXh0RGF0YS5pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICAgICAgKVxuICAgICAgICA6IGF3YWl0IHRoaXMuaW52ZW50b3J5LmNyZWF0ZShkYXNoYm9hcmQpO1xuICAgIHJldHVybiBkYXRhIGFzIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0O1xuICB9XG5cbiAgYXN5bmMgZGV0YWlsKGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGxldCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChkYXNoYm9hcmRNTyk7XG4gICAgZGF0YSA9IHRoaXMuYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zKGRhdGEgYXMgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpO1xuICAgIHRoaXMuY2FjaGUuc2V0KGRhc2hib2FyZE1PLmlkLCBkYXRhKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShcbiAgICBkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICAgIGNvbnRleHQ/OiBDb250ZXh0RGF0YVxuICApOiBQcm9taXNlPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PiB7XG4gICAgY29uc3QgZGFzaGJvYXJkQ2ZnID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQ7XG4gICAgZGFzaGJvYXJkLm5hbWUgPSBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5uYW1lO1xuICAgIGFzc2lnbihcbiAgICAgIGRhc2hib2FyZCxcbiAgICAgIHRoaXMuYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zKHsgYzh5X0Rhc2hib2FyZDogZGFzaGJvYXJkQ2ZnIH0pLFxuICAgICAgdGhpcy51cGRhdGVEYXNoYm9hcmRIaXN0b3J5KGRhc2hib2FyZCwgZGFzaGJvYXJkQ2ZnKVxuICAgICk7XG5cbiAgICBjb25zdCBrZWVwRnJhZ21lbnRzID0gdGhpcy5jbGVhbihwaWNrKGRhc2hib2FyZCwgW3RoaXMuRlJBR01FTlRfTkFNRSwgJ2lkJywgJ25hbWUnXSkpO1xuICAgIGtlZXBGcmFnbWVudHMuYzh5X0Rhc2hib2FyZEhpc3RvcnkgPSBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZEhpc3Rvcnk7XG4gICAgYXdhaXQgdGhpcy5zZXJpYWxpemVXaWRnZXRDb25maWdzKGtlZXBGcmFnbWVudHMpO1xuXG4gICAgY29uc3QgWywgZGFzaGJvYXJkVHlwZUZyYWdtZW50c10gPSB0aGlzLmdldERhc2hib2FyZEZyYWdtZW50cyhkYXNoYm9hcmQsIGNvbnRleHQsICcnLCB0cnVlKTtcbiAgICBrZWVwRnJhZ21lbnRzLmM4eV9HbG9iYWwgPSB0aGlzLnNob3VsZFNldEdsb2JhbCh7IC4uLmRhc2hib2FyZCwgLi4uZGFzaGJvYXJkVHlwZUZyYWdtZW50cyB9KTtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LnVwZGF0ZSh7IC4uLmtlZXBGcmFnbWVudHMsIC4uLmRhc2hib2FyZFR5cGVGcmFnbWVudHMgfSk7XG4gICAgdGhpcy5jYWNoZS5zZXQoZGFzaGJvYXJkLmlkLCBkYXRhKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LCB3aXRoQ29uZmlybWF0aW9uID0gdHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAod2l0aENvbmZpcm1hdGlvbikge1xuICAgICAgICBsZXQgbXNnOiBzdHJpbmcgPSBnZXR0ZXh0KFxuICAgICAgICAgIGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSB0aGUgZGFzaGJvYXJkIFwie3sgZGFzaGJvYXJkTmFtZSB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2BcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuaXNEZXZpY2VUeXBlKGRhc2hib2FyZCkpIHtcbiAgICAgICAgICBtc2cgPSBnZXR0ZXh0KFxuICAgICAgICAgICAgYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIHRoZSBkYXNoYm9hcmQgXCJ7eyBkYXNoYm9hcmROYW1lIH19XCIgZnJvbSBhbGwgZGV2aWNlcyBvZiB0aGUgdHlwZSBcInt7IGRldmljZVR5cGUgfX1cIi5cbiAgICAgICAgICAgRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oXG4gICAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIGRhc2hib2FyZCcpLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG1zZywge1xuICAgICAgICAgICAgZGFzaGJvYXJkTmFtZTogZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZSxcbiAgICAgICAgICAgIGRldmljZVR5cGU6IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb2s6IGdldHRleHQoJ0RlbGV0ZScpLFxuICAgICAgICAgICAgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5LmRlbGV0ZShkYXNoYm9hcmQpO1xuICAgICAgY29uc3QgdGFiVG9SZW1vdmUgPSBBcnJheS5mcm9tKHRoaXMudGFicy5zdGF0ZSkuZmluZCh0YWIgPT4ge1xuICAgICAgICBpZiAodGFiLnBhdGgpIHtcbiAgICAgICAgICByZXR1cm4gdGFiLnBhdGguZW5kc1dpdGgoYCR7dGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSH0vJHtkYXNoYm9hcmQuaWR9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy50YWJzLnJlbW92ZSh0YWJUb1JlbW92ZSk7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMudGFicy5yZWZyZXNoKCk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gaW50ZW5kZWQgZW1wdHlcbiAgICB9XG4gIH1cblxuICB1cGRhdGVEYXNoYm9hcmRIaXN0b3J5KFxuICAgIGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4sXG4gICAgZGFzaGJvYXJkQ2ZnOiBDb250ZXh0RGFzaGJvYXJkXG4gICk6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+IHtcbiAgICBpZiAoIWRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeSkge1xuICAgICAgZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5ID0gW107XG4gICAgfVxuICAgIGlmICghZGFzaGJvYXJkQ2ZnLmhpc3RvcnlEZXNjcmlwdGlvbikge1xuICAgICAgZGFzaGJvYXJkQ2ZnLmhpc3RvcnlEZXNjcmlwdGlvbiA9IHsgY2hhbmdlVHlwZTogJ2NyZWF0ZScgfTtcbiAgICB9XG5cbiAgICBkYXNoYm9hcmRDZmcuY3JlYXRlZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZEhpc3RvcnkgPSBjbG9uZURlZXAoW2Rhc2hib2FyZENmZywgLi4uZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5XSk7XG5cbiAgICBpZiAoZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5Lmxlbmd0aCA+IHRoaXMuVkVSU0lPTl9ISVNUT1JZX1NJWkVfTElNSVQpIHtcbiAgICAgIGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeSA9IFtcbiAgICAgICAgLi4uZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5LnNsaWNlKDAsIHRoaXMuVkVSU0lPTl9ISVNUT1JZX1NJWkVfTElNSVQpXG4gICAgICBdO1xuICAgIH1cblxuICAgIHJldHVybiBkYXNoYm9hcmQ7XG4gIH1cblxuICBhY3RpdmF0ZURhc2hib2FyZHMoXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgdHlwZXM6IENvbnRleHREYXNoYm9hcmRUeXBlW11cbiAgKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVGFiW10+IHtcbiAgICBjb25zdCB7IGRhc2hib2FyZElkIH0gPSByb3V0ZS5wYXJhbXM7XG4gICAgaWYgKGRhc2hib2FyZElkKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXNoYm9hcmQkKGRhc2hib2FyZElkLCB0eXBlcywgcm91dGUucGFyZW50LmRhdGEuY29udGV4dERhdGEpLnBpcGUoXG4gICAgICAgIHRhcChkYXNoYm9hcmQgPT4ge1xuICAgICAgICAgIHJvdXRlLmRhdGEgPSB7IGRhc2hib2FyZCB9O1xuICAgICAgICB9KSxcbiAgICAgICAgbWFwKCgpID0+IHRydWUpLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhc2hib2FyZFRhYnMkID0gdGhpcy5nZXRUYWJzJChyb3V0ZS5kYXRhLmNvbnRleHREYXRhLCB0eXBlcyk7XG4gICAgcmV0dXJuIHRoaXMuZGFzaGJvYXJkVGFicyQ7XG4gIH1cblxuICBnZXROYW1lZERhc2hib2FyZE9yQ3JlYXRlKG5hbWU6IHN0cmluZywgZGVmYXVsdFdpZGdldHM6IFdpZGdldFtdLCBjb250ZXh0PzogQ29udGV4dERhdGEpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMubWFwV2lkZ2V0cyhkZWZhdWx0V2lkZ2V0cyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGFzaGJvYXJkJChuYW1lLCBbQ29udGV4dERhc2hib2FyZFR5cGUuTmFtZWRdKS5waXBlKFxuICAgICAgdGhyb3dJZkVtcHR5KCksXG4gICAgICBjYXRjaEVycm9yKCgpID0+XG4gICAgICAgIGZyb20oXG4gICAgICAgICAgdGhpcy5jcmVhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgICB3aWRnZXRDbGFzc2VzOiB7ICdkYXNoYm9hcmQtdGhlbWUtbGlnaHQnOiB0cnVlLCAncGFuZWwtdGl0bGUtcmVndWxhcic6IHRydWUgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZU5hdmlnYXRvckl0ZW0obW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdGhpcy5uYXZpZ2F0b3Iuc3RhdGUuZm9yRWFjaChub2RlID0+IHtcbiAgICAgIGlmIChub2RlLnBhdGggPT09IGByZXBvcnRzLyR7bW8uaWR9YCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRvci5yZW1vdmUobm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKG1vLmM4eV9Jc05hdmlnYXRvck5vZGUpIHtcbiAgICAgIGNvbnN0IG5vZGVUb0FkZCA9IG5ldyBOYXZpZ2F0b3JOb2RlKHtcbiAgICAgICAgbGFiZWw6IG1vLm5hbWUsXG4gICAgICAgIHBhdGg6IGByZXBvcnRzLyR7bW8uaWR9YCxcbiAgICAgICAgaWNvbjogbW8uaWNvbixcbiAgICAgICAgcHJpb3JpdHk6IG1vLnByaW9yaXR5XG4gICAgICB9KTtcbiAgICAgIHRoaXMubmF2aWdhdG9yLmFkZChub2RlVG9BZGQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlVG9EYXNoYm9hcmQoZGFzaGJvYXJkTU86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgaWYgKC9kYXNoYm9hcmQvLnRlc3QodGhpcy5yb3V0ZXIudXJsKSkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsIGRhc2hib2FyZE1PLmlkXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiBnZXRBY3RpdmF0ZWRSb3V0ZSh0aGlzLnJvdXRlcilcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoL15cXC8oZGV2aWNlfGdyb3VwKVxcL1swLTldKyQvLnRlc3QodGhpcy5yb3V0ZXIudXJsKSkge1xuICAgICAgLy8gaW4gY2FzZSB0aGUgYWRkIGRhc2hib2FyZCBidXR0b24gaXMgdGhlIG9ubHkgdGFiIG9uIHRoYXQgcm91dGVcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLicsIHRoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEgsIGRhc2hib2FyZE1PLmlkXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiBnZXRBY3RpdmF0ZWRSb3V0ZSh0aGlzLnJvdXRlcilcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uJywgdGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSCwgZGFzaGJvYXJkTU8uaWRdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IGdldEFjdGl2YXRlZFJvdXRlKHRoaXMucm91dGVyKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB1c2VyIGlzIGFibGUgdG8gZWRpdCBkYXNoYm9hcmQgYWNjb3JkaW5nIHRvIGhpcyByb2xlcyBhbmQgZGFzaGJvYXJkIG93bmVyc2hpcC5cbiAgICpcbiAgICogQHBhcmFtIG1vIC0gRGFzaGJvYXJkIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHVzZXIgaXMgYWJsZSB0byBlZGl0IGRhc2hib2FyZCwgZmFsc2UgaWYgaGUgY2Fubm90LlxuICAgKi9cbiAgYXN5bmMgY2FuRWRpdERhc2hib2FyZChtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wZXJtaXNzaW9ucy5jYW5FZGl0KHRoaXMuSU5WRU5UT1JZX1JPTEVTLCBtbyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHVzZXIgaGFzIHBlcm1pc3Npb25zIHRvIGNvcHkgZGFzaGJvYXJkIGFjY29yZGluZyB0byBoaXMgcm9sZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdXNlciBoYXMgcGVybWlzc2lvbnMgdG8gY29weSBkYXNoYm9hcmQsIGZhbHNlIGlmIGhlIGNhbm5vdC5cbiAgICovXG4gIGhhc1Blcm1pc3Npb25zVG9Db3B5RGFzaGJvYXJkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zLmhhc0FueVJvbGUoW1xuICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU4sXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9DUkVBVEUsXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX01BTkFHRURfT0JKRUNUX0FETUlOLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9DUkVBVEVcbiAgICBdKTtcbiAgfVxuXG4gIGlzTmFtZWQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pikge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZH0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGlzUmVwb3J0KGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfSR7dGhpcy5SRVBPUlRfUEFSVElBTF9OQU1FfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc0RldmljZVR5cGUoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pikge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ1Byb3AgPSBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLlR5cGV9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKTtcbiAgICAgIGlmICghbWF0Y2hpbmdQcm9wKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoZXJlIG1pZ2h0IGJlIG1hdGNoaW5nIGtleSwgYnV0IGl0cyB2YWx1ZSBjYW4gYmUge30gb3IgbnVsbFxuICAgICAgICByZXR1cm4gISFkYXNoYm9hcmRbcHJvcF07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpc0RldmljZURhc2hib2FyZChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNvbWUoa2V5cyhkYXNoYm9hcmQpLCBwcm9wID0+XG4gICAgICBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZX0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGlzR3JvdXBEYXNoYm9hcmQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cH0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGdldEZpbHRlcmVkRGFzaGJvYXJkU3R5bGVzKHN0eWxlTGlzdDogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gc3R5bGVMaXN0LmZpbHRlcihjID0+XG4gICAgICBTVFlMSU5HX0NMQVNTX1BSRUZJWEVTLnNvbWUoY2xhc3NQcmVmaXggPT4gYy5zdGFydHNXaXRoKGNsYXNzUHJlZml4KSlcbiAgICApO1xuICB9XG5cbiAgZ2V0U3R5bGluZyhzdHlsZUxpc3QsIHN0eWxlTmFtZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3Qgc3R5bGluZyA9IHN0eWxlTGlzdC5maW5kKFxuICAgICAgc3R5bGUgPT4gc3R5bGUgJiYgbmV3IFJlZ0V4cChgLSR7c3R5bGVOYW1lfSRgLCAnaScpLnRlc3Qoc3R5bGUuY2xhc3MpXG4gICAgKTtcbiAgICByZXR1cm4gc3R5bGluZyA/IHN0eWxpbmcuY2xhc3MgOiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBtYXBXaWRnZXRzKHdpZGdldHM6IFdpZGdldFtdKSB7XG4gICAgcmV0dXJuIGtleUJ5KFxuICAgICAgd2lkZ2V0cy5tYXAod2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0LmlkID0gU3RyaW5nKE1hdGgucmFuZG9tKCkpLnN1YnN0cigyKTtcbiAgICAgICAgcmV0dXJuIHdpZGdldDtcbiAgICAgIH0pLFxuICAgICAgJ2lkJ1xuICAgICk7XG4gIH1cblxuICBnZXREYXNoYm9hcmQkKGRhc2hib2FyZElkT3JOYW1lLCBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdLCBtbz86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlLmdldChkYXNoYm9hcmRJZE9yTmFtZSk7XG5cbiAgICBjb25zdCBkYXNoYm9hcmRzID0gbW9cbiAgICAgID8gdGhpcy5nZXRDb250ZXh0RGFzaGJvYXJkcyhtbywgZGFzaGJvYXJkVHlwZSlcbiAgICAgIDogdGhpcy5nZXROYW1lZERhc2hib2FyZChkYXNoYm9hcmRJZE9yTmFtZSk7XG5cbiAgICBjb25zdCBjYWNoZVJlZnJlc2ggPSB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzJChkYXNoYm9hcmRzKS5waXBlKFxuICAgICAgdGFwKGRhc2hib2FyZCA9PiB0aGlzLmNhY2hlRGFzaGJvYXJkKGRhc2hib2FyZCkpLFxuICAgICAgZmlsdGVyKFxuICAgICAgICBkYXNoYm9hcmQgPT5cbiAgICAgICAgICBkYXNoYm9hcmQuaWQgPT09IGRhc2hib2FyZElkT3JOYW1lIHx8XG4gICAgICAgICAgaGFzKFxuICAgICAgICAgICAgZGFzaGJvYXJkLFxuICAgICAgICAgICAgYCR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkfSR7dGhpcy5JTkRFWF9TUExJVH0ke2Rhc2hib2FyZElkT3JOYW1lfWBcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgICByZXR1cm4gY2FjaGUgPyBvZihjYWNoZSkgOiBjYWNoZVJlZnJlc2g7XG4gIH1cblxuICBhc3luYyBwYXN0ZURhc2hib2FyZChuZXdDb250ZXh0OiBEYXNoYm9hcmRDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY29weUNsaXBib2FyZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGFzaGJvYXJkVG9QYXN0ZSA9IHRoaXMuY3JlYXRlQ29udGV4dERhc2hib2FyZENvcHkoXG4gICAgICAgICAgdGhpcy5jb3B5Q2xpcGJvYXJkLmRhc2hib2FyZCxcbiAgICAgICAgICBuZXdDb250ZXh0LmNvbnRleHREYXRhLFxuICAgICAgICAgIHRoaXMuY29weUNsaXBib2FyZC5jb250ZXh0LmNvbnRleHREYXRhXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGRhc2hib2FyZCA9IGF3YWl0IHRoaXMuY3JlYXRlKHRoaXMuY2xlYW4oZGFzaGJvYXJkVG9QYXN0ZSksIG5ld0NvbnRleHQpO1xuXG4gICAgICAgIC8vIGxpbmtpbmcgY2hpbGRBZGRpdGlvbnMgZm9yIGUuZy4gdG8gZ3JhbnQgYWNjZXNzIHRvIHRoZSBpbWFnZXMgdXBsb2FkZWQgYnkgdGhlIGltYWdlIHdpZGdldCBmb3IgdXNlcnMgd2l0aCBvbmx5IGludmVudG9yeSByb2xlcy5cbiAgICAgICAgY29uc3QgeyBkYXRhOiBjaGlsZEFkZGl0aW9ucyB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNMaXN0KFxuICAgICAgICAgIHRoaXMuY29weUNsaXBib2FyZC5kYXNoYm9hcmRJZCxcbiAgICAgICAgICB7IHBhZ2VTaXplOiAyMDAwIH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGNoaWxkQWRkaXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5LmNoaWxkQWRkaXRpb25zQnVsa0FkZChjaGlsZEFkZGl0aW9ucywgZGFzaGJvYXJkLmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29weUNsaXBib2FyZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvRGFzaGJvYXJkKGRhc2hib2FyZCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhpcy5hbGVydC53YXJuaW5nKGdldHRleHQoJ0luc3VmZmljaWVudCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBhY3Rpb24uJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGZyYWdtZW50IHRoYXQgYXNzb2NpYXRlcyBkYXNoYm9hcmRzIHdpdGggZGV2aWNlL2Fzc2V0LiBJdCBjb25zaXN0cyBvZiB0aHJlZSBlbGVtZW50czpcbiAgICogLSBGUkFHTUVOVF9OQU1FIC0gc3RhdGljIHN0cmluZ1xuICAgKiAtIGRhc2hib2FyZCB0eXBlIChlLmcuICdncm91cCcsICdkZXZpY2UnKVxuICAgKiAtIGZyYWdtZW50IHZhbHVlICggaWQgb2YgZGV2aWNlL2Fzc2V0IGlmIGl0IGlzIG5vdCB0eXBlZCBkYXNoYm9hcmQ7IGRldmljZVR5cGVWYWx1ZSBwcm9wZXJ0eSBvZiBkYXNoYm9hcmQgaWYgaXQgaXMgdHlwZSBkYXNoYm9hcmQpXG4gICAqIEV4YW1wbGUgZnJhZ21lbnQgZm9yIGRldmljZSBkYXNoYm9hcmQ6ICdjOHlfRGFzaGJvYXJkIWRldmljZSE3NzMyMDAnXG4gICAqIEV4YW1wbGUgZnJhZ21lbnQgZm9yIGdyb3VwIGRhc2hib2FyZDogJ2M4eV9EYXNoYm9hcmQhZ3JvdXAhODQxMjkyMDgnXG4gICAqIEV4YW1wbGUgZnJhZ21lbnQgZm9yIHR5cGVkIGRldmljZSBkYXNoYm9hcmQ6ICdjOHlfRGFzaGJvYXJkIXR5cGUhYzh5X2x3bTJtX2Nvbm5lY3Rvcl9kZXZpY2UnXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0RGFzaGJvYXJkVHlwZSBUeXBlIG9mIGRhc2hib2FyZFxuICAgKiBAcGFyYW0gdmFsdWUgRnJhZ21lbnQgdmFsdWVcbiAgICogQHJldHVybnMgRnJhZ21lbnQgZm9yIGRhc2hib2FyZFxuICAgKi9cbiAgY3JlYXRlRnJhZ21lbnRLZXkoY29udGV4dERhc2hib2FyZFR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW3RoaXMuRlJBR01FTlRfTkFNRSwgY29udGV4dERhc2hib2FyZFR5cGUsIHZhbHVlXS5qb2luKHRoaXMuSU5ERVhfU1BMSVQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBkYXNoYm9hcmQgY2FuIGJlIHNldCB0byB0eXBlIGRhc2hib2FyZC5cbiAgICogRmlyc3QsIGl0IGNoZWNrcyBpZiBkZXZpY2VUeXBlVmFsdWUgZXhpc3RzIGFuZCBpZiB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIHNldCBkYXNoYm9hcmQgdHlwZS5cbiAgICogVGhlbiwgY2FzZSBmcm9tIHNlbnNvciBhcHAgaXMgY2hlY2tlZC0gZGFzaGJvYXJkIGNyZWF0ZWQgd2l0aCBzZW5zb3IgYXBwIGhhcyBkZXZpY2VUeXBlIHNldCB0byB0cnVlIGJ1dFxuICAgKiB0eXBlIGZyYWdtZW50IGlzIG1pc3NpbmctIHdlIGRvIG5vdCBzdXBwb3J0IHRoaXMgY29tYmluYXRpb24uXG4gICAqIEBwYXJhbSBtbyBEYXNoYm9hcmQgbWFuYWdlZCBvYmplY3RcbiAgICogQHBhcmFtIGRldmljZVR5cGVWYWx1ZSBWYWx1ZSBvZiBkZXZpY2UgdHlwZVxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGRhc2hib2FyZCBjYW4gYmUgc2V0IHRvIHR5cGUgZGFzaGJvYXJkLCBmYWxzZSBpZiBpdCBpcyBmb3JiaWRkZW4uXG4gICAqL1xuICBzaG91bGRBbGxvd1RvU2V0RGFzaGJvYXJkVHlwZShcbiAgICBtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsXG4gICAgZGV2aWNlVHlwZVZhbHVlOiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFkZXZpY2VUeXBlVmFsdWUgfHwgIXRoaXMucGVybWlzc2lvbnMuaGFzQW55Um9sZSh0aGlzLklOVkVOVE9SWV9ST0xFUykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdHlwZUZyYWdtZW50ID0gdGhpcy5jcmVhdGVGcmFnbWVudEtleShDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlLCBkZXZpY2VUeXBlVmFsdWUpO1xuICAgIGlmIChtby5jOHlfRGFzaGJvYXJkICYmIG1vLmM4eV9EYXNoYm9hcmQuZGV2aWNlVHlwZSAmJiAhbW9bdHlwZUZyYWdtZW50XSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNyZWF0ZVJlcG9ydChyZXBvcnRDZmc6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+KSB7XG4gICAgY29uc3QgcmVwb3J0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PiA9IHt9O1xuICAgIE9iamVjdC5hc3NpZ24ocmVwb3J0LCByZXBvcnRDZmcpO1xuICAgIE9iamVjdC5hc3NpZ24ocmVwb3J0LCB7IGM4eV9SZXBvcnQ6IHt9IH0pO1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5jcmVhdGUocmVwb3J0KTtcbiAgfVxuXG4gIGFkZFJlcG9ydE5hdmlnYXRvck5vZGUocmVwb3J0OiBJTWFuYWdlZE9iamVjdCk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGUgPSBuZXcgTmF2aWdhdG9yTm9kZSh7XG4gICAgICBsYWJlbDogcmVwb3J0Lm5hbWUsXG4gICAgICBwYXRoOiBgcmVwb3J0cy8ke3JlcG9ydC5pZH1gLFxuICAgICAgaWNvbjogcmVwb3J0Lmljb24sXG4gICAgICBwcmlvcml0eTogcmVwb3J0LnByaW9yaXR5XG4gICAgfSk7XG4gICAgdGhpcy5uYXZpZ2F0b3IuYWRkKG5vZGUpO1xuICB9XG5cbiAgZ2V0Q29udGV4dEZvckdTKG1vOiBJTWFuYWdlZE9iamVjdCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmdyb3VwU2VydmljZS5pc0RldmljZShtbykpIHtcbiAgICAgIHJldHVybiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTlRFWFQuREVWSUNFO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cFNlcnZpY2UuaXNBc3NldChtbykpIHtcbiAgICAgIHJldHVybiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTlRFWFQuQVNTRVQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwU2VydmljZS5pc0dyb3VwKG1vKSkge1xuICAgICAgcmV0dXJuIFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09OVEVYVC5HUk9VUDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0dXBsZSBkZXNjcmliaW5nIHRoZSBkYXNoYm9hcmQgdHlwZSBhbmQgaXRzIGZyYWdtZW50cy4gRm9yIGFzc2V0cyBsaWtlIGRldmljZXMgYW5kIGdyb3VwcywgaXQncyBwb3NzaWJsZVxuICAgKiB0byBoYXZlIHR3byBmcmFnbWVudHM6IG9uZSBpbmRpY2F0aW5nIHRoaXMgcGFydGljdWxhciBkZXZpY2UvYXNzZXQgd2l0aCBpdHMgSUQsIGFuZCB0aGUgc2Vjb25kIGluZGljYXRpbmdcbiAgICogdGhlIGRldmljZS9hc3NldCB0eXBlIChpZiB0aGUgZGFzaGJvYXJkIGlzIG1lYW50IHRvIGJlIGFwcGxpZWQgdG8gYWxsIGFzc2V0cyBvZiB0aGlzIHR5cGUpLlxuICAgKlxuICAgKiBAcGFyYW0gZGFzaGJvYXJkTU8gLSBEYXNoYm9hcmQgbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gQ29udGV4dCBkYXRhIG9mIGFzc2V0LlxuICAgKiBAcGFyYW0gbmFtZSAtIE5hbWUgb2YgdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIGlzRWRpdCAtIFRydWUgaWYgZXhpc3RpbmcgZGFzaGJvYXJkIGlzIHVwZGF0ZWQsIGZhbHNlIHdoZW4gaXQncyBjcmVhdGlvbiBvZiBuZXcgZGFzaGJvYXJkLlxuICAgKiBAcmV0dXJucyBUdXBsZSBvZiBkYXNoYm9hcmQgdHlwZSBhbmQgb2JqZWN0IGNvbnRhaW5pbmcgZGFzaGJvYXJkIGZyYWdtZW50cy5cbiAgICovXG4gIHByaXZhdGUgZ2V0RGFzaGJvYXJkRnJhZ21lbnRzKFxuICAgIGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgICBjb250ZXh0OiBDb250ZXh0RGF0YSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgaXNFZGl0OiBib29sZWFuXG4gICk6IFtDb250ZXh0RGFzaGJvYXJkVHlwZSwgUmVjb3JkPHN0cmluZywgb2JqZWN0Pl0ge1xuICAgIGxldCBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZTtcbiAgICBjb25zdCBpZCA9IChjb250ZXh0Py5jb250ZXh0RGF0YT8uaWQgYXMgc3RyaW5nKSB8fCAnJztcbiAgICBjb25zdCBmcmFnbWVudHM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblxuICAgIGlmIChjb250ZXh0Py5jb250ZXh0ID09PSBWaWV3Q29udGV4dC5EZXZpY2UgfHwgY29udGV4dD8uY29udGV4dCA9PT0gVmlld0NvbnRleHQuR3JvdXApIHtcbiAgICAgIC8vIGdldCBiYXNlIHR5cGUgZm9yIGRldmljZSBvciBncm91cFxuICAgICAgY29uc3QgZGVmYXVsdFR5cGUgPVxuICAgICAgICBjb250ZXh0LmNvbnRleHQgPT09IFZpZXdDb250ZXh0LkRldmljZVxuICAgICAgICAgID8gQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlXG4gICAgICAgICAgOiBDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cDtcbiAgICAgIGRhc2hib2FyZFR5cGUgPSBkYXNoYm9hcmRNTy5jOHlfRGFzaGJvYXJkLmRldmljZVR5cGVcbiAgICAgICAgPyBDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlXG4gICAgICAgIDogZGVmYXVsdFR5cGU7XG5cbiAgICAgIC8vIGNsZWFyIGZyYWdtZW50cyBmcm9tIG90aGVyIGFzc2V0IGlmIGN1cnJlbnQgYXNzZXQgaXMgbm90IG9yaWdpbiBvZiB0aGlzIGRhc2hib2FyZFxuICAgICAgdGhpcy5jbGVhclJlZHVuZGFudEZyYWdtZW50KGRhc2hib2FyZE1PLCBkZWZhdWx0VHlwZSwgZnJhZ21lbnRzKTtcblxuICAgICAgLy8gYWRkIGJhc2UgZnJhZ21lbnQgZm9yIHBhcnRpY3VsYXIgYXNzZXRcbiAgICAgIGNvbnN0IGRldmljZU9yR3JvdXBGcmFnbWVudEtleSA9IHRoaXMuY3JlYXRlRnJhZ21lbnRLZXkoZGVmYXVsdFR5cGUsIGlkKTtcbiAgICAgIGZyYWdtZW50c1tkZXZpY2VPckdyb3VwRnJhZ21lbnRLZXldID0ge307XG5cbiAgICAgIC8vIGFkZCBvciBjbGVhciB0eXBlIGZyYWdtZW50XG4gICAgICBpZiAoZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlIHx8IGlzRWRpdCkge1xuICAgICAgICBjb25zdCB0eXBlRnJhZ21lbnRLZXkgPSB0aGlzLmNyZWF0ZUZyYWdtZW50S2V5KFxuICAgICAgICAgIENvbnRleHREYXNoYm9hcmRUeXBlLlR5cGUsXG4gICAgICAgICAgZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgZnJhZ21lbnRzW3R5cGVGcmFnbWVudEtleV0gPSBkYXNoYm9hcmRNTy5jOHlfRGFzaGJvYXJkLmRldmljZVR5cGUgPyB7fSA6IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGRhc2hib2FyZFR5cGUgPSBDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZDtcbiAgICAgIGNvbnN0IG5hbWVkRnJhZ21lbnRLZXkgPSB0aGlzLmNyZWF0ZUZyYWdtZW50S2V5KENvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkLCBuYW1lKTtcbiAgICAgIGZyYWdtZW50c1tuYW1lZEZyYWdtZW50S2V5XSA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBbZGFzaGJvYXJkVHlwZSwgZnJhZ21lbnRzXTtcbiAgfVxuICAvKipcbiAgICogQ2xlYXJzIGZyYWdtZW50cyB0aGF0IG9yaWdpbmF0ZXMgZnJvbSBvdGhlciBtYW5hZ2VkIG9iamVjdC5cbiAgICogRS5nLiB0eXBlZCBkYXNoYm9hcmQgaXMgY3JlYXRlZCBmb3IgZGV2aWNlIEEgb2YgdHlwZSBjOHlfTVFUVERldmljZSBhbmQgaWQgMSwgc28gaXQgZ2V0cyBmcmFnbWVudHMgb2JqZWN0XG4gICAqIGBgYHRzXG4gICAqIHtcbiAgICogYzh5X0Rhc2hib2FyZCFkZXZpY2UhMToge30sXG4gICAqIGM4eV9EYXNoYm9hcmQhdHlwZSFjOHlfTVFUVERldmljZToge31cbiAgICogfVxuICAgKmBgYFxuICAgKiB0aGVuLCBvbiBkZXZpY2UgQiBvZiB0eXBlIGM4eV9NUVRURGV2aWNlIGFuZCBpZCAyLCB3aGljaCBhbHNvIGhhcyBhY2Nlc3MgdG8gdGhpcyBkYXNoYm9hcmQsIGRldmljZVR5cGUgaXMgc2V0IHRvXG4gICAqIGZhbHNlLCBzbyBkYXNoYm9hcmQgaXMgbm90IHR5cGVkIGRhc2hib2FyZCBhbnltb3JlIGFuZCBub3cgYmVsb25ncyB0byBkZXZpY2UgQiwgdGhlcmVmb3JlIGZyYWdtZW50cyBzaG91bGQgbG9vayBsaWtlXG4gICAqIGBgYHRzXG4gICAqIHtcbiAgICogYzh5X0Rhc2hib2FyZCFkZXZpY2UhMTogbnVsbCwgLy8gdGhpcyB2YWx1ZSBpcyBjbGVhcmVkIGJlY2F1c2UgZGFzaGJvYXJkIGlzIGRvZXNuJ3QgYmVsb25nIHRvIGRldmljZSBBIGFueW1vcmVcbiAgICogYzh5X0Rhc2hib2FyZCFkZXZpY2UhMjoge30sIC8vIGFzc2lnbiBkYXNoYm9hcmQgdG8gZGV2aWNlIEJcbiAgICogYzh5X0Rhc2hib2FyZCF0eXBlIWM4eV9NUVRURGV2aWNlOiBudWxsIC8vIHRoaXMgdmFsdWUgaXMgY2xlYXJlZCBpbiBnZXREYXNoYm9hcmRGcmFnbWVudHMgbWV0aG9kIGFzIGl0J3Mgbm90IHR5cGVkIGRhc2hib2FyZCBhbnltb3JlXG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBkYXNoYm9hcmRNTyAtIERhc2hib2FyZCBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHBhcmFtIHR5cGUgLSBDb250ZXh0IGRhc2hib2FyZCB0eXBlLlxuICAgKiBAcGFyYW0gZnJhZ21lbnRzIC0gRnJhZ21lbnRzIG9iamVjdC5cbiAgICovXG4gIHByaXZhdGUgY2xlYXJSZWR1bmRhbnRGcmFnbWVudChcbiAgICBkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsXG4gICAgdHlwZTogQ29udGV4dERhc2hib2FyZFR5cGUsXG4gICAgZnJhZ21lbnRzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+XG4gICk6IHZvaWQge1xuICAgIE9iamVjdC5rZXlzKGRhc2hib2FyZE1PKVxuICAgICAgLmZpbHRlcihrZXkgPT4ga2V5LnN0YXJ0c1dpdGgodGhpcy5jcmVhdGVGcmFnbWVudEtleSh0eXBlLCAnJykpKVxuICAgICAgLmZvckVhY2goa2V5ID0+IChmcmFnbWVudHNba2V5XSA9IG51bGwpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIG1pZ3JhdGUgZGFzaGJvYXJkcyBmcm9tIHByZXZpb3VzIDEyIGNvbHVtbnMgbGF5b3V0IHRvIDI0IGNvbHVtbnMuXG4gICAqL1xuICBwcml2YXRlIGFkanVzdERhc2hib2FyZEZvcjI0Q29sdW1uczxUIGV4dGVuZHMgeyBjOHlfRGFzaGJvYXJkPzogQ29udGV4dERhc2hib2FyZCB9PihcbiAgICBkYXNoYm9hcmRzOiBUW11cbiAgKTogVFtdO1xuICBwcml2YXRlIGFkanVzdERhc2hib2FyZEZvcjI0Q29sdW1uczxUIGV4dGVuZHMgeyBjOHlfRGFzaGJvYXJkPzogQ29udGV4dERhc2hib2FyZCB9PihcbiAgICBkYXNoYm9hcmRzOiBUXG4gICk6IFQ7XG4gIHByaXZhdGUgYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zPFQgZXh0ZW5kcyB7IGM4eV9EYXNoYm9hcmQ/OiBDb250ZXh0RGFzaGJvYXJkIH0+KFxuICAgIGRhc2hib2FyZHM6IFQgfCBUW11cbiAgKTogVCB8IFRbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGFzaGJvYXJkcykpIHtcbiAgICAgIHJldHVybiBkYXNoYm9hcmRzLm1hcChkYXNoYm9hcmQgPT4gdGhpcy5hZGp1c3REYXNoYm9hcmRGb3IyNENvbHVtbnMoZGFzaGJvYXJkKSk7XG4gICAgfVxuICAgIC8vIGlmIGBjb2x1bW5zYCBhdHRyaWJ1dGUgZXhpc3RzLCBkYXNoYm9hcmQgd2FzIGFscmVhZHkgYWRqdXN0ZWQuXG4gICAgaWYgKGRhc2hib2FyZHMuYzh5X0Rhc2hib2FyZC5jb2x1bW5zKSB7XG4gICAgICByZXR1cm4gZGFzaGJvYXJkcztcbiAgICB9XG5cbiAgICBkYXNoYm9hcmRzLmM4eV9EYXNoYm9hcmQuY29sdW1ucyA9IDI0O1xuICAgIGlmICghZGFzaGJvYXJkcy5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gZGFzaGJvYXJkcztcbiAgICB9XG5cbiAgICAvLyBOZXdseSBjcmVhdGVkIE5hbWVkQ29udGV4dERhc2hib2FyZHMgYXJlIHN0aWxsIGNyZWF0ZWQgd2l0aCAxMiBjb2x1bW5zIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgICAvLyBEZWZhdWx0IHdpZGdldHMgbWlnaHQgYmUgYWxyZWFkeSBjb25maWd1cmVkIGZvciAyNCBjb2x1bW5zLlxuICAgIC8vIElmIGEgd2lkZ2V0IGlzIGFscmVhZHkgY29uZmlndXJlZCBmb3IgbW9yZSB0aGFuIDEyIGNvbHVtbnMsIHdlIHNob3VsZCBub3QgYWRqdXN0IGl0LlxuICAgIGNvbnN0IGFscmVhZHlIYXNXaWRnZXRzQ29uZmlndXJlZEZvck1vcmVUaGFuMTJDb2x1bW5zID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgIGRhc2hib2FyZHMuYzh5X0Rhc2hib2FyZC5jaGlsZHJlblxuICAgICkuc29tZSh3aWRnZXQgPT4gd2lkZ2V0Ll94ICsgd2lkZ2V0Ll93aWR0aCA+IDEyKTtcbiAgICBpZiAoYWxyZWFkeUhhc1dpZGdldHNDb25maWd1cmVkRm9yTW9yZVRoYW4xMkNvbHVtbnMpIHtcbiAgICAgIHJldHVybiBkYXNoYm9hcmRzO1xuICAgIH1cblxuICAgIC8vIHdlIG5lZWQgdG8gbXVsdGlwbHkgYm90aCBfd2lkdGggYW5kIF94IGF0dHJpYnV0ZXMgd2l0aCAyIHRvIG1pZ3JhdGUgZnJvbSAxMiB0byAyNCBjb2x1bW5zLlxuICAgIE9iamVjdC52YWx1ZXMoZGFzaGJvYXJkcy5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKS5mb3JFYWNoKHdpZGdldCA9PiB7XG4gICAgICBpZiAod2lkZ2V0Ll93aWR0aCkge1xuICAgICAgICB3aWRnZXQuX3dpZHRoID0gd2lkZ2V0Ll93aWR0aCAqIDI7XG4gICAgICB9XG4gICAgICBpZiAod2lkZ2V0Ll94KSB7XG4gICAgICAgIHdpZGdldC5feCA9IHdpZGdldC5feCAqIDI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhc2hib2FyZHM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlcmlhbGl6ZVdpZGdldENvbmZpZ3MoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gY2xvbmVEZWVwKGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKTtcbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ3MgPSBPYmplY3QudmFsdWVzKGNoaWxkcmVuKTtcbiAgICBjb25zdCBkZXRhaWxzID0gY29uZmlncy5tYXAoKHsgY29tcG9uZW50SWQsIGNvbmZpZyB9KSA9PiAoeyBjb21wb25lbnRJZCwgY29uZmlnIH0pKTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5keW5hbWljQ29tcG9uZW50LnNlcmlhbGl6ZUNvbmZpZ3MoZGV0YWlscyk7XG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQsIGluZGV4KSA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyhyZXN1bHQpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBzZXQoZGV0YWlsc1tpbmRleF0uY29uZmlnLCBrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbnRleHREYXNoYm9hcmRDb3B5KFxuICAgIGRhc2g6IENvbnRleHREYXNoYm9hcmQsXG4gICAgbmV3Q29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgb2xkQ29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD5cbiAgKTogQ29udGV4dERhc2hib2FyZCB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSByZWR1Y2UoXG4gICAgICBkYXNoLmNoaWxkcmVuLFxuICAgICAgKF9jaGlsZHJlbiwgY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgeyBpZCB9ID0gY2hpbGQ7XG4gICAgICAgIGNvbnN0IGNmZyA9IGNoaWxkLmNvbmZpZztcbiAgICAgICAgY29uc3QgcHJvcGVydGllc1RvQ29weSA9IHtcbiAgICAgICAgICBkZXZpY2U6IGRldmljZSA9PiB0aGlzLnJlcGxhY2VDb250ZXh0SW5PYmooZGV2aWNlLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhcG9pbnRzOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFQb2ludHM6IGRhdGFQb2ludHMgPT5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoZGF0YVBvaW50cywgbmV3Q29udGV4dCwgb2xkQ29udGV4dCksXG4gICAgICAgICAgZGF0YXBvaW50c0dhdWdlOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFwb2ludHNMYWJlbHM6IGRhdGFQb2ludHMgPT5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoZGF0YVBvaW50cywgbmV3Q29udGV4dCwgb2xkQ29udGV4dClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoY2ZnKSB7XG4gICAgICAgICAgdGhpcy5jb3B5UHJvcGVydGllcyhjZmcsIHByb3BlcnRpZXNUb0NvcHkpO1xuICAgICAgICAgIGlmIChjZmcub3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5jb3B5UHJvcGVydGllcyhjZmcub3B0aW9ucywgcHJvcGVydGllc1RvQ29weSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX2NoaWxkcmVuW2lkXSA9IGNsb25lRGVlcChjaGlsZCk7XG4gICAgICAgIHJldHVybiBfY2hpbGRyZW47XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuXG4gICAgZGFzaC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHJldHVybiBkYXNoO1xuICB9XG5cbiAgcHJpdmF0ZSBjb3B5UHJvcGVydGllcyhvYmosIHByb3BlcnRpZXNUb0NvcHkpIHtcbiAgICBmb3JFYWNoKHByb3BlcnRpZXNUb0NvcHksIChjb3B5Rm4sIHByb3BlcnR5KSA9PiB7XG4gICAgICBpZiAob2JqW3Byb3BlcnR5XSkge1xuICAgICAgICBvYmpbcHJvcGVydHldID0gY29weUZuKG9ialtwcm9wZXJ0eV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhcbiAgICBkYXRhUG9pbnRzLFxuICAgIG5ld0NvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+LFxuICAgIG9sZENvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+XG4gICkge1xuICAgIGRhdGFQb2ludHMuZm9yRWFjaChkcCA9PiB7XG4gICAgICBkcC5fX3RhcmdldCA9IHRoaXMucmVwbGFjZUNvbnRleHRJbk9iaihkcC5fX3RhcmdldCwgbmV3Q29udGV4dCwgb2xkQ29udGV4dCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGFQb2ludHM7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VDb250ZXh0SW5PYmooXG4gICAgb2JqOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBuZXdDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBvbGRDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PlxuICApIHtcbiAgICBpZiAob2JqICYmIG9iai5pZCA9PT0gb2xkQ29udGV4dC5pZCkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHBpY2sobmV3Q29udGV4dCwgWydpZCcsICduYW1lJ10pKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFicyQobW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LCBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdKSB7XG4gICAgY29uc3QgZGFzaGJvYXJkcyA9IHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMobW8sIGRhc2hib2FyZFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMkKGRhc2hib2FyZHMpLnBpcGUoXG4gICAgICBtZXJnZU1hcChkYXNoYm9hcmQgPT4gdGhpcy52ZXJpZnlEYXNoYm9hcmRBdmFpbGFiaWxpdHkkKGRhc2hib2FyZCkpLFxuICAgICAgbWVyZ2VNYXAoKFtkYXNoYm9hcmRdKSA9PiB0aGlzLnJlbW92ZURhc2hib2FyZE1vUHJvcGVydHkoZGFzaGJvYXJkKSksXG4gICAgICB0YXAoZGFzaGJvYXJkID0+IHRoaXMuY2FjaGVEYXNoYm9hcmQoZGFzaGJvYXJkKSksXG4gICAgICBtYXAoZGFzaGJvYXJkID0+IHRoaXMuY3JlYXRlRGFzaGJvYXJkVGFiKGRhc2hib2FyZCkpLFxuICAgICAgdG9BcnJheSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5RGFzaGJvYXJkQXZhaWxhYmlsaXR5JChkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgZ2xvYmFsUm9sZXNJZHMgPSBkYXNoYm9hcmQ/LmM4eV9EYXNoYm9hcmQ/Lmdsb2JhbFJvbGVzSWRzO1xuICAgIGNvbnN0IGNhbkVkaXQgPSBmcm9tKFxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5jYW5FZGl0KHRoaXMuSU5WRU5UT1JZX1JPTEVTLCBkYXNoYm9hcmQsIHsgc2tpcFJlcXVlc3RDaGVjazogdHJ1ZSB9KVxuICAgICk7XG4gICAgY29uc3QgaGFzQW55R2xvYmFsUm9sZSA9XG4gICAgICAhZ2xvYmFsUm9sZXNJZHMgfHwgZ2xvYmFsUm9sZXNJZHMgPT09IEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURURcbiAgICAgICAgPyBvZih0cnVlKVxuICAgICAgICA6IG9mKHRoaXMucGVybWlzc2lvbnMuaGFzQW55R2xvYmFsUm9sZShnbG9iYWxSb2xlc0lkcykpO1xuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW29mKGRhc2hib2FyZCksIGNhbkVkaXQsIGhhc0FueUdsb2JhbFJvbGVdKS5waXBlKFxuICAgICAgZmlsdGVyKChbLCBjYW5FZGl0LCBoYXNBbnlHbG9iYWxSb2xlXSkgPT4gY2FuRWRpdCB8fCBoYXNBbnlHbG9iYWxSb2xlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHREYXNoYm9hcmRzJChyZXF1ZXN0OiBQcm9taXNlPElSZXN1bHRMaXN0PElNYW5hZ2VkT2JqZWN0Pj4pIHtcbiAgICByZXR1cm4gZnJvbShyZXF1ZXN0KS5waXBlKFxuICAgICAgbWVyZ2VNYXAocmVzcG9uc2UgPT5cbiAgICAgICAgdGhpcy5hZGp1c3REYXNoYm9hcmRGb3IyNENvbHVtbnMocmVzcG9uc2UuZGF0YSBhcyBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdFtdKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW5zIGFscmVhZHkgY29ycnVwdGVkIGRhc2hib2FyZHMgZnJvbSBkYXNoYm9hcmRNbyBwcm9wZXJ0eS5cbiAgICogQWRkZWQgdG8gZml4IGRhc2hib2FyZHMgb24gdGhlIGNsb3VkIGluc3RhbmNlIChldS1sYXRlc3QpLlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIGlzIGdvaW5nIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgMTAwNy43LjAuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlbW92ZURhc2hib2FyZE1vUHJvcGVydHkoXG4gICAgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdFxuICApOiBQcm9taXNlPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PiB7XG4gICAgY29uc3QgZGFzaGJvYXJkQ29weSA9IGNsb25lRGVlcChkYXNoYm9hcmQpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZ2V0KGRhc2hib2FyZENvcHksICdjOHlfRGFzaGJvYXJkLmNoaWxkcmVuJyk7XG4gICAgbGV0IHVwZGF0ZURhc2hib2FyZCA9IGZhbHNlO1xuXG4gICAgZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgaWYgKGdldChjaGlsZCwgJ2NvbXBvbmVudFRyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0JykpIHtcbiAgICAgICAgZGVsZXRlIGNoaWxkLmNvbXBvbmVudFRyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0O1xuICAgICAgICB1cGRhdGVEYXNoYm9hcmQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGdldChjaGlsZCwgJ2NvbmZpZy5kYXNoYm9hcmRNbycpKSB7XG4gICAgICAgIGRlbGV0ZSBjaGlsZC5jb25maWcuZGFzaGJvYXJkTW87XG4gICAgICAgIHVwZGF0ZURhc2hib2FyZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodXBkYXRlRGFzaGJvYXJkKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZShkYXNoYm9hcmRDb3B5KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhc2hib2FyZENvcHk7XG4gIH1cblxuICBwcml2YXRlIGNhY2hlRGFzaGJvYXJkKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLmNhY2hlLnNldChkYXNoYm9hcmQuaWQsIGRhc2hib2FyZCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhc2hib2FyZFRhYihkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgeyBjOHlfRGFzaGJvYXJkOiBfZGFzaGJvYXJkLCBpZCB9ID0gZGFzaGJvYXJkO1xuICAgIHJldHVybiB7XG4gICAgICBpY29uOiBfZGFzaGJvYXJkLmljb24sXG4gICAgICBwYXRoOiBgJHt0aGlzLkRBU0hCT0FSRF9ST1VURV9QQVRIfS8ke2lkfWAsXG4gICAgICBsYWJlbDogX2Rhc2hib2FyZC5uYW1lLFxuICAgICAgcHJpb3JpdHk6IF9kYXNoYm9hcmQucHJpb3JpdHksXG4gICAgICBoaWRlOiB0aGlzLmlzUmVwb3J0KGRhc2hib2FyZCksXG4gICAgICBiYWRnZTpcbiAgICAgICAgX2Rhc2hib2FyZC5kZXZpY2VUeXBlICYmXG4gICAgICAgIHRoaXMuc2hvdWxkQWxsb3dUb1NldERhc2hib2FyZFR5cGUoZGFzaGJvYXJkLCBfZGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZSlcbiAgICAgICAgICA/IGdldHRleHQoJ0Rhc2hib2FyZCB0ZW1wbGF0ZScpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgdG9vbHRpcFRleHQ6IF9kYXNoYm9hcmQuZGVzY3JpcHRpb24gfHwgZ2V0dGV4dCgnRGFzaGJvYXJkIHRlbXBsYXRlJylcbiAgICB9IGFzIFRhYjtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW4oZGFzaGJvYXJkKSB7XG4gICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRhc2hib2FyZCwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChrZXkgPT09ICckJGhhc2hLZXknIHx8IGtleSA9PT0gJ2tsYXNzZXMnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmFtZWREYXNoYm9hcmQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5Lmxpc3Qoe1xuICAgICAgZnJhZ21lbnRUeXBlOiBgJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfSR7bmFtZX1gLFxuICAgICAgcGFnZVNpemU6IDFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGV4dERhc2hib2FyZHMoXG4gICAgbW86IElNYW5hZ2VkT2JqZWN0LFxuICAgIGRhc2hib2FyZFR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlW11cbiAgKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+IHtcbiAgICBjb25zdCBxdWVyeSA9IGRhc2hib2FyZFR5cGVcbiAgICAgIC5tYXAodCA9PiBgKGhhcygnJHt0aGlzLmNyZWF0ZURhc2hib2FyZEZyYWdtZW50KG1vLCB0KX0nKSlgKVxuICAgICAgLmpvaW4oJyBvciAnKTtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICBxdWVyeTogYCRmaWx0ZXI9KCR7cXVlcnl9KWAsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5ERUZBVUxUX1BBR0VTSVpFXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhc2hib2FyZEZyYWdtZW50KG1vOiBJTWFuYWdlZE9iamVjdCwgdHlwZTogQ29udGV4dERhc2hib2FyZFR5cGUpIHtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKG1vLmM4eV9SZXBvcnQpIHtcbiAgICAgIHZhbHVlID0gYCR7dGhpcy5SRVBPUlRfUEFSVElBTF9OQU1FfSR7bW8uaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0eXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlID8gbW8udHlwZSA6IG1vLmlkO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke3R5cGV9JHt0aGlzLklOREVYX1NQTElUfSR7dmFsdWV9YDtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4sIGNvbnRleHQ/KSB7XG4gICAgaWYgKFxuICAgICAgKCFjb250ZXh0ICYmIHRoaXMuaXNOYW1lZChkYXNoYm9hcmQpICYmICF0aGlzLmlzUmVwb3J0KGRhc2hib2FyZCkpIHx8XG4gICAgICB0aGlzLmlzRGV2aWNlVHlwZShkYXNoYm9hcmQpXG4gICAgKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
600
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTBCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQWUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUNMLFlBQVksRUFFWix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxZQUFZLEVBQ1osWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIseUJBQXlCLEVBQ3pCLFdBQVcsRUFDWCxNQUFNLEVBRU4sV0FBVyxFQUNYLFdBQVcsRUFFWixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULE9BQU8sRUFDUCxHQUFHLEVBQ0gsR0FBRyxFQUNILEtBQUssRUFDTCxJQUFJLEVBQ0osSUFBSSxFQUNKLE1BQU0sRUFDTixHQUFHLEVBQ0gsSUFBSSxFQUNMLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9GLE9BQU8sRUFDTCx5QkFBeUIsRUFHekIsb0JBQW9CLEVBR3BCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbkIsTUFBTSwyQkFB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SSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFDNUIsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs4R0F6eUJVLHVCQUF1QjtrSEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzJGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UsIElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBDb250ZXh0RGF0YSxcbiAgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gIGdldEFjdGl2YXRlZFJvdXRlLFxuICBnZXR0ZXh0LFxuICBHcm91cFNlcnZpY2UsXG4gIE1vZGFsU2VydmljZSxcbiAgTmF2aWdhdG9yTm9kZSxcbiAgTmF2aWdhdG9yU2VydmljZSxcbiAgTkVXX0RBU0hCT0FSRF9RVUVSWV9QQVJBTSxcbiAgUGVybWlzc2lvbnMsXG4gIFN0YXR1cyxcbiAgVGFiLFxuICBUYWJzU2VydmljZSxcbiAgVmlld0NvbnRleHQsXG4gIFdpZGdldFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgY2xvbmVEZWVwLFxuICBmb3JFYWNoLFxuICBnZXQsXG4gIGhhcyxcbiAga2V5QnksXG4gIGtleXMsXG4gIHBpY2ssXG4gIHJlZHVjZSxcbiAgc2V0LFxuICBzb21lXG59IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIG1lcmdlTWFwLCB0YXAsIHRocm93SWZFbXB0eSwgdG9BcnJheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURUQsXG4gIENvbnRleHREYXNoYm9hcmQsXG4gIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICBDb250ZXh0RGFzaGJvYXJkVHlwZSxcbiAgRGFzaGJvYXJkQ29udGV4dCxcbiAgRGFzaGJvYXJkQ29weUNsaXBib2FyZCxcbiAgU1RZTElOR19DTEFTU19QUkVGSVhFUyxcbiAgUFJPRFVDVF9FWFBFUklFTkNFXG59IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0RGFzaGJvYXJkU2VydmljZSB7XG4gIGRhc2hib2FyZFRhYnMkOiBPYnNlcnZhYmxlPFRhYltdPjtcbiAgZm9ybURpc2FibGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcmVhZG9ubHkgUkVQT1JUX1BBUlRJQUxfTkFNRSA9ICdyZXBvcnRfJztcbiAgY29weUNsaXBib2FyZDogRGFzaGJvYXJkQ29weUNsaXBib2FyZDtcbiAgcmVhZG9ubHkgVkVSU0lPTl9ISVNUT1JZX1NJWkVfTElNSVQgPSAxMDtcbiAgcHJpdmF0ZSByZWFkb25seSBJTlZFTlRPUllfUk9MRVMgPSBbXG4gICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU4sXG4gICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9BRE1JTlxuICBdO1xuICBwcml2YXRlIGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfUEFHRVNJWkUgPSAxMDAwO1xuICBwcml2YXRlIHJlYWRvbmx5IEZSQUdNRU5UX05BTUUgPSAnYzh5X0Rhc2hib2FyZCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgREFTSEJPQVJEX1JPVVRFX1BBVEggPSAnZGFzaGJvYXJkJztcbiAgcHJpdmF0ZSByZWFkb25seSBJTkRFWF9TUExJVCA9ICchJztcbiAgcHJpdmF0ZSBfZm9ybURpc2FibGVkID0gdHJ1ZTtcbiAgcHJpdmF0ZSBmb3JtRGlzYWJsZWRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBnZXQgZm9ybURpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtRGlzYWJsZWQ7XG4gIH1cblxuICBzZXQgZm9ybURpc2FibGVkKHZhbHVlKSB7XG4gICAgdGhpcy5fZm9ybURpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy5mb3JtRGlzYWJsZWRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0YWJzOiBUYWJzU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3I6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uczogUGVybWlzc2lvbnMsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudDogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3VwU2VydmljZVxuICApIHtcbiAgICB0aGlzLmZvcm1EaXNhYmxlZCQgPSB0aGlzLmZvcm1EaXNhYmxlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUoZGFzaGJvYXJkQ2ZnOiBDb250ZXh0RGFzaGJvYXJkLCBjb250ZXh0PzogQ29udGV4dERhdGEsIG5hbWUgPSAnJykge1xuICAgIGxldCBkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+ID0ge307XG4gICAgYXNzaWduKFxuICAgICAgZGFzaGJvYXJkLFxuICAgICAgdGhpcy5hZGp1c3REYXNoYm9hcmRGb3IyNENvbHVtbnMoeyBjOHlfRGFzaGJvYXJkOiBkYXNoYm9hcmRDZmcgfSksXG4gICAgICB0aGlzLnVwZGF0ZURhc2hib2FyZEhpc3RvcnkoZGFzaGJvYXJkLCBkYXNoYm9hcmRDZmcpXG4gICAgKTtcblxuICAgIGNvbnN0IFtkYXNoYm9hcmRUeXBlLCBkYXNoYm9hcmRGcmFnbWVudHNdID0gdGhpcy5nZXREYXNoYm9hcmRGcmFnbWVudHMoXG4gICAgICB7IGM4eV9EYXNoYm9hcmQ6IGRhc2hib2FyZENmZyB9IGFzIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICAgICAgY29udGV4dCxcbiAgICAgIG5hbWUsXG4gICAgICBmYWxzZVxuICAgICk7XG4gICAgZGFzaGJvYXJkID0geyAuLi5kYXNoYm9hcmQsIC4uLmRhc2hib2FyZEZyYWdtZW50cyB9O1xuXG4gICAgaWYgKHRoaXMuc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZCwgY29udGV4dCkpIHtcbiAgICAgIGFzc2lnbihkYXNoYm9hcmQsIHsgYzh5X0dsb2JhbDoge30gfSk7XG4gICAgfVxuICAgIGRhc2hib2FyZC5uYW1lID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZTtcbiAgICBjb25zdCB7IGRhdGEgfSA9XG4gICAgICBkYXNoYm9hcmRUeXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cCB8fFxuICAgICAgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlIHx8XG4gICAgICAoY29udGV4dCAmJiBkYXNoYm9hcmRUeXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZClcbiAgICAgICAgPyBhd2FpdCB0aGlzLmludmVudG9yeS5jaGlsZEFkZGl0aW9uc0NyZWF0ZShcbiAgICAgICAgICAgIGRhc2hib2FyZCxcbiAgICAgICAgICAgIChjb250ZXh0Py5jb250ZXh0RGF0YS5pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICAgICAgKVxuICAgICAgICA6IGF3YWl0IHRoaXMuaW52ZW50b3J5LmNyZWF0ZShkYXNoYm9hcmQpO1xuICAgIHJldHVybiBkYXRhIGFzIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0O1xuICB9XG5cbiAgYXN5bmMgZGV0YWlsKGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGxldCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChkYXNoYm9hcmRNTyk7XG4gICAgZGF0YSA9IHRoaXMuYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zKGRhdGEgYXMgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpO1xuICAgIHRoaXMuY2FjaGUuc2V0KGRhc2hib2FyZE1PLmlkLCBkYXRhKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShcbiAgICBkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICAgIGNvbnRleHQ/OiBDb250ZXh0RGF0YVxuICApOiBQcm9taXNlPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PiB7XG4gICAgY29uc3QgZGFzaGJvYXJkQ2ZnID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQ7XG4gICAgZGFzaGJvYXJkLm5hbWUgPSBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5uYW1lO1xuICAgIGFzc2lnbihcbiAgICAgIGRhc2hib2FyZCxcbiAgICAgIHRoaXMuYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zKHsgYzh5X0Rhc2hib2FyZDogZGFzaGJvYXJkQ2ZnIH0pLFxuICAgICAgdGhpcy51cGRhdGVEYXNoYm9hcmRIaXN0b3J5KGRhc2hib2FyZCwgZGFzaGJvYXJkQ2ZnKVxuICAgICk7XG5cbiAgICBjb25zdCBrZWVwRnJhZ21lbnRzID0gdGhpcy5jbGVhbihwaWNrKGRhc2hib2FyZCwgW3RoaXMuRlJBR01FTlRfTkFNRSwgJ2lkJywgJ25hbWUnXSkpO1xuICAgIGtlZXBGcmFnbWVudHMuYzh5X0Rhc2hib2FyZEhpc3RvcnkgPSBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZEhpc3Rvcnk7XG4gICAgYXdhaXQgdGhpcy5zZXJpYWxpemVXaWRnZXRDb25maWdzKGtlZXBGcmFnbWVudHMpO1xuXG4gICAgY29uc3QgWywgZGFzaGJvYXJkVHlwZUZyYWdtZW50c10gPSB0aGlzLmdldERhc2hib2FyZEZyYWdtZW50cyhkYXNoYm9hcmQsIGNvbnRleHQsICcnLCB0cnVlKTtcbiAgICBrZWVwRnJhZ21lbnRzLmM4eV9HbG9iYWwgPSB0aGlzLnNob3VsZFNldEdsb2JhbCh7IC4uLmRhc2hib2FyZCwgLi4uZGFzaGJvYXJkVHlwZUZyYWdtZW50cyB9KTtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LnVwZGF0ZSh7IC4uLmtlZXBGcmFnbWVudHMsIC4uLmRhc2hib2FyZFR5cGVGcmFnbWVudHMgfSk7XG4gICAgdGhpcy5jYWNoZS5zZXQoZGFzaGJvYXJkLmlkLCBkYXRhKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LCB3aXRoQ29uZmlybWF0aW9uID0gdHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAod2l0aENvbmZpcm1hdGlvbikge1xuICAgICAgICBsZXQgbXNnOiBzdHJpbmcgPSBnZXR0ZXh0KFxuICAgICAgICAgIGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSB0aGUgZGFzaGJvYXJkIFwie3sgZGFzaGJvYXJkTmFtZSB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2BcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuaXNEZXZpY2VUeXBlKGRhc2hib2FyZCkpIHtcbiAgICAgICAgICBtc2cgPSBnZXR0ZXh0KFxuICAgICAgICAgICAgYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIHRoZSBkYXNoYm9hcmQgXCJ7eyBkYXNoYm9hcmROYW1lIH19XCIgZnJvbSBhbGwgZGV2aWNlcyBvZiB0aGUgdHlwZSBcInt7IGRldmljZVR5cGUgfX1cIi5cbiAgICAgICAgICAgRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oXG4gICAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIGRhc2hib2FyZCcpLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG1zZywge1xuICAgICAgICAgICAgZGFzaGJvYXJkTmFtZTogZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZSxcbiAgICAgICAgICAgIGRldmljZVR5cGU6IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb2s6IGdldHRleHQoJ0RlbGV0ZScpLFxuICAgICAgICAgICAgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5LmRlbGV0ZShkYXNoYm9hcmQpO1xuICAgICAgY29uc3QgdGFiVG9SZW1vdmUgPSBBcnJheS5mcm9tKHRoaXMudGFicy5zdGF0ZSkuZmluZCh0YWIgPT4ge1xuICAgICAgICBpZiAodGFiLnBhdGgpIHtcbiAgICAgICAgICByZXR1cm4gdGFiLnBhdGguZW5kc1dpdGgoYCR7dGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSH0vJHtkYXNoYm9hcmQuaWR9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy50YWJzLnJlbW92ZSh0YWJUb1JlbW92ZSk7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMudGFicy5yZWZyZXNoKCk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gaW50ZW5kZWQgZW1wdHlcbiAgICB9XG4gIH1cblxuICB1cGRhdGVEYXNoYm9hcmRIaXN0b3J5KFxuICAgIGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4sXG4gICAgZGFzaGJvYXJkQ2ZnOiBDb250ZXh0RGFzaGJvYXJkXG4gICk6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+IHtcbiAgICBpZiAoIWRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeSkge1xuICAgICAgZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5ID0gW107XG4gICAgfVxuICAgIGlmICghZGFzaGJvYXJkQ2ZnLmhpc3RvcnlEZXNjcmlwdGlvbikge1xuICAgICAgZGFzaGJvYXJkQ2ZnLmhpc3RvcnlEZXNjcmlwdGlvbiA9IHsgY2hhbmdlVHlwZTogJ2NyZWF0ZScgfTtcbiAgICB9XG5cbiAgICBkYXNoYm9hcmRDZmcuY3JlYXRlZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZEhpc3RvcnkgPSBjbG9uZURlZXAoW2Rhc2hib2FyZENmZywgLi4uZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5XSk7XG5cbiAgICBpZiAoZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5Lmxlbmd0aCA+IHRoaXMuVkVSU0lPTl9ISVNUT1JZX1NJWkVfTElNSVQpIHtcbiAgICAgIGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeSA9IFtcbiAgICAgICAgLi4uZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5LnNsaWNlKDAsIHRoaXMuVkVSU0lPTl9ISVNUT1JZX1NJWkVfTElNSVQpXG4gICAgICBdO1xuICAgIH1cblxuICAgIHJldHVybiBkYXNoYm9hcmQ7XG4gIH1cblxuICBhY3RpdmF0ZURhc2hib2FyZHMoXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgdHlwZXM6IENvbnRleHREYXNoYm9hcmRUeXBlW11cbiAgKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVGFiW10+IHtcbiAgICBjb25zdCB7IGRhc2hib2FyZElkIH0gPSByb3V0ZS5wYXJhbXM7XG4gICAgaWYgKGRhc2hib2FyZElkKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXNoYm9hcmQkKGRhc2hib2FyZElkLCB0eXBlcywgcm91dGUucGFyZW50LmRhdGEuY29udGV4dERhdGEpLnBpcGUoXG4gICAgICAgIHRhcChkYXNoYm9hcmQgPT4ge1xuICAgICAgICAgIHJvdXRlLmRhdGEgPSB7IGRhc2hib2FyZCB9O1xuICAgICAgICB9KSxcbiAgICAgICAgbWFwKCgpID0+IHRydWUpLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhc2hib2FyZFRhYnMkID0gdGhpcy5nZXRUYWJzJChyb3V0ZS5kYXRhLmNvbnRleHREYXRhLCB0eXBlcyk7XG4gICAgcmV0dXJuIHRoaXMuZGFzaGJvYXJkVGFicyQ7XG4gIH1cblxuICBnZXROYW1lZERhc2hib2FyZE9yQ3JlYXRlKG5hbWU6IHN0cmluZywgZGVmYXVsdFdpZGdldHM6IFdpZGdldFtdLCBjb250ZXh0PzogQ29udGV4dERhdGEpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMubWFwV2lkZ2V0cyhkZWZhdWx0V2lkZ2V0cyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGFzaGJvYXJkJChuYW1lLCBbQ29udGV4dERhc2hib2FyZFR5cGUuTmFtZWRdKS5waXBlKFxuICAgICAgdGhyb3dJZkVtcHR5KCksXG4gICAgICBjYXRjaEVycm9yKCgpID0+XG4gICAgICAgIGZyb20oXG4gICAgICAgICAgdGhpcy5jcmVhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgICB3aWRnZXRDbGFzc2VzOiB7ICdkYXNoYm9hcmQtdGhlbWUtbGlnaHQnOiB0cnVlLCAncGFuZWwtdGl0bGUtcmVndWxhcic6IHRydWUgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZU5hdmlnYXRvckl0ZW0obW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdGhpcy5uYXZpZ2F0b3Iuc3RhdGUuZm9yRWFjaChub2RlID0+IHtcbiAgICAgIGlmIChub2RlLnBhdGggPT09IGByZXBvcnRzLyR7bW8uaWR9YCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRvci5yZW1vdmUobm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKG1vLmM4eV9Jc05hdmlnYXRvck5vZGUpIHtcbiAgICAgIGNvbnN0IG5vZGVUb0FkZCA9IG5ldyBOYXZpZ2F0b3JOb2RlKHtcbiAgICAgICAgbGFiZWw6IG1vLm5hbWUsXG4gICAgICAgIHBhdGg6IGByZXBvcnRzLyR7bW8uaWR9YCxcbiAgICAgICAgaWNvbjogbW8uaWNvbixcbiAgICAgICAgcHJpb3JpdHk6IG1vLnByaW9yaXR5XG4gICAgICB9KTtcbiAgICAgIHRoaXMubmF2aWdhdG9yLmFkZChub2RlVG9BZGQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlVG9EYXNoYm9hcmQoZGFzaGJvYXJkTU86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgaWYgKC9kYXNoYm9hcmQvLnRlc3QodGhpcy5yb3V0ZXIudXJsKSkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsIGRhc2hib2FyZE1PLmlkXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiBnZXRBY3RpdmF0ZWRSb3V0ZSh0aGlzLnJvdXRlciksXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgW05FV19EQVNIQk9BUkRfUVVFUllfUEFSQU1dOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoL15cXC8oZGV2aWNlfGdyb3VwKVxcL1swLTldKyQvLnRlc3QodGhpcy5yb3V0ZXIudXJsKSkge1xuICAgICAgLy8gaW4gY2FzZSB0aGUgYWRkIGRhc2hib2FyZCBidXR0b24gaXMgdGhlIG9ubHkgdGFiIG9uIHRoYXQgcm91dGVcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLicsIHRoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEgsIGRhc2hib2FyZE1PLmlkXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiBnZXRBY3RpdmF0ZWRSb3V0ZSh0aGlzLnJvdXRlcilcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uJywgdGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSCwgZGFzaGJvYXJkTU8uaWRdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IGdldEFjdGl2YXRlZFJvdXRlKHRoaXMucm91dGVyKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB1c2VyIGlzIGFibGUgdG8gZWRpdCBkYXNoYm9hcmQgYWNjb3JkaW5nIHRvIGhpcyByb2xlcyBhbmQgZGFzaGJvYXJkIG93bmVyc2hpcC5cbiAgICpcbiAgICogQHBhcmFtIG1vIC0gRGFzaGJvYXJkIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHVzZXIgaXMgYWJsZSB0byBlZGl0IGRhc2hib2FyZCwgZmFsc2UgaWYgaGUgY2Fubm90LlxuICAgKi9cbiAgYXN5bmMgY2FuRWRpdERhc2hib2FyZChtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wZXJtaXNzaW9ucy5jYW5FZGl0KHRoaXMuSU5WRU5UT1JZX1JPTEVTLCBtbyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHVzZXIgaGFzIHBlcm1pc3Npb25zIHRvIGNvcHkgZGFzaGJvYXJkIGFjY29yZGluZyB0byBoaXMgcm9sZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdXNlciBoYXMgcGVybWlzc2lvbnMgdG8gY29weSBkYXNoYm9hcmQsIGZhbHNlIGlmIGhlIGNhbm5vdC5cbiAgICovXG4gIGhhc1Blcm1pc3Npb25zVG9Db3B5RGFzaGJvYXJkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zLmhhc0FueVJvbGUoW1xuICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU4sXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9DUkVBVEUsXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX01BTkFHRURfT0JKRUNUX0FETUlOLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9DUkVBVEVcbiAgICBdKTtcbiAgfVxuXG4gIGlzTmFtZWQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pikge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZH0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGlzUmVwb3J0KGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfSR7dGhpcy5SRVBPUlRfUEFSVElBTF9OQU1FfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc0RldmljZVR5cGUoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pikge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ1Byb3AgPSBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLlR5cGV9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKTtcbiAgICAgIGlmICghbWF0Y2hpbmdQcm9wKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoZXJlIG1pZ2h0IGJlIG1hdGNoaW5nIGtleSwgYnV0IGl0cyB2YWx1ZSBjYW4gYmUge30gb3IgbnVsbFxuICAgICAgICByZXR1cm4gISFkYXNoYm9hcmRbcHJvcF07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpc0RldmljZURhc2hib2FyZChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNvbWUoa2V5cyhkYXNoYm9hcmQpLCBwcm9wID0+XG4gICAgICBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZX0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGlzR3JvdXBEYXNoYm9hcmQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cH0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGdldEZpbHRlcmVkRGFzaGJvYXJkU3R5bGVzKHN0eWxlTGlzdDogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gc3R5bGVMaXN0LmZpbHRlcihjID0+XG4gICAgICBTVFlMSU5HX0NMQVNTX1BSRUZJWEVTLnNvbWUoY2xhc3NQcmVmaXggPT4gYy5zdGFydHNXaXRoKGNsYXNzUHJlZml4KSlcbiAgICApO1xuICB9XG5cbiAgZ2V0U3R5bGluZyhzdHlsZUxpc3QsIHN0eWxlTmFtZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3Qgc3R5bGluZyA9IHN0eWxlTGlzdC5maW5kKFxuICAgICAgc3R5bGUgPT4gc3R5bGUgJiYgbmV3IFJlZ0V4cChgLSR7c3R5bGVOYW1lfSRgLCAnaScpLnRlc3Qoc3R5bGUuY2xhc3MpXG4gICAgKTtcbiAgICByZXR1cm4gc3R5bGluZyA/IHN0eWxpbmcuY2xhc3MgOiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBtYXBXaWRnZXRzKHdpZGdldHM6IFdpZGdldFtdKSB7XG4gICAgcmV0dXJuIGtleUJ5KFxuICAgICAgd2lkZ2V0cy5tYXAod2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0LmlkID0gU3RyaW5nKE1hdGgucmFuZG9tKCkpLnN1YnN0cigyKTtcbiAgICAgICAgcmV0dXJuIHdpZGdldDtcbiAgICAgIH0pLFxuICAgICAgJ2lkJ1xuICAgICk7XG4gIH1cblxuICBnZXREYXNoYm9hcmQkKGRhc2hib2FyZElkT3JOYW1lLCBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdLCBtbz86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlLmdldChkYXNoYm9hcmRJZE9yTmFtZSk7XG5cbiAgICBjb25zdCBkYXNoYm9hcmRzID0gbW9cbiAgICAgID8gdGhpcy5nZXRDb250ZXh0RGFzaGJvYXJkcyhtbywgZGFzaGJvYXJkVHlwZSlcbiAgICAgIDogdGhpcy5nZXROYW1lZERhc2hib2FyZChkYXNoYm9hcmRJZE9yTmFtZSk7XG5cbiAgICBjb25zdCBjYWNoZVJlZnJlc2ggPSB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzJChkYXNoYm9hcmRzKS5waXBlKFxuICAgICAgdGFwKGRhc2hib2FyZCA9PiB0aGlzLmNhY2hlRGFzaGJvYXJkKGRhc2hib2FyZCkpLFxuICAgICAgZmlsdGVyKFxuICAgICAgICBkYXNoYm9hcmQgPT5cbiAgICAgICAgICBkYXNoYm9hcmQuaWQgPT09IGRhc2hib2FyZElkT3JOYW1lIHx8XG4gICAgICAgICAgaGFzKFxuICAgICAgICAgICAgZGFzaGJvYXJkLFxuICAgICAgICAgICAgYCR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkfSR7dGhpcy5JTkRFWF9TUExJVH0ke2Rhc2hib2FyZElkT3JOYW1lfWBcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgICByZXR1cm4gY2FjaGUgPyBvZihjYWNoZSkgOiBjYWNoZVJlZnJlc2g7XG4gIH1cblxuICBhc3luYyBwYXN0ZURhc2hib2FyZChuZXdDb250ZXh0OiBEYXNoYm9hcmRDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY29weUNsaXBib2FyZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGFzaGJvYXJkVG9QYXN0ZSA9IHRoaXMuY3JlYXRlQ29udGV4dERhc2hib2FyZENvcHkoXG4gICAgICAgICAgdGhpcy5jb3B5Q2xpcGJvYXJkLmRhc2hib2FyZCxcbiAgICAgICAgICBuZXdDb250ZXh0LmNvbnRleHREYXRhLFxuICAgICAgICAgIHRoaXMuY29weUNsaXBib2FyZC5jb250ZXh0LmNvbnRleHREYXRhXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGRhc2hib2FyZCA9IGF3YWl0IHRoaXMuY3JlYXRlKHRoaXMuY2xlYW4oZGFzaGJvYXJkVG9QYXN0ZSksIG5ld0NvbnRleHQpO1xuXG4gICAgICAgIC8vIGxpbmtpbmcgY2hpbGRBZGRpdGlvbnMgZm9yIGUuZy4gdG8gZ3JhbnQgYWNjZXNzIHRvIHRoZSBpbWFnZXMgdXBsb2FkZWQgYnkgdGhlIGltYWdlIHdpZGdldCBmb3IgdXNlcnMgd2l0aCBvbmx5IGludmVudG9yeSByb2xlcy5cbiAgICAgICAgY29uc3QgeyBkYXRhOiBjaGlsZEFkZGl0aW9ucyB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNMaXN0KFxuICAgICAgICAgIHRoaXMuY29weUNsaXBib2FyZC5kYXNoYm9hcmRJZCxcbiAgICAgICAgICB7IHBhZ2VTaXplOiAyMDAwIH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGNoaWxkQWRkaXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5LmNoaWxkQWRkaXRpb25zQnVsa0FkZChjaGlsZEFkZGl0aW9ucywgZGFzaGJvYXJkLmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29weUNsaXBib2FyZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvRGFzaGJvYXJkKGRhc2hib2FyZCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhpcy5hbGVydC53YXJuaW5nKGdldHRleHQoJ0luc3VmZmljaWVudCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBhY3Rpb24uJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGZyYWdtZW50IHRoYXQgYXNzb2NpYXRlcyBkYXNoYm9hcmRzIHdpdGggZGV2aWNlL2Fzc2V0LiBJdCBjb25zaXN0cyBvZiB0aHJlZSBlbGVtZW50czpcbiAgICogLSBGUkFHTUVOVF9OQU1FIC0gc3RhdGljIHN0cmluZ1xuICAgKiAtIGRhc2hib2FyZCB0eXBlIChlLmcuICdncm91cCcsICdkZXZpY2UnKVxuICAgKiAtIGZyYWdtZW50IHZhbHVlICggaWQgb2YgZGV2aWNlL2Fzc2V0IGlmIGl0IGlzIG5vdCB0eXBlZCBkYXNoYm9hcmQ7IGRldmljZVR5cGVWYWx1ZSBwcm9wZXJ0eSBvZiBkYXNoYm9hcmQgaWYgaXQgaXMgdHlwZSBkYXNoYm9hcmQpXG4gICAqIEV4YW1wbGUgZnJhZ21lbnQgZm9yIGRldmljZSBkYXNoYm9hcmQ6ICdjOHlfRGFzaGJvYXJkIWRldmljZSE3NzMyMDAnXG4gICAqIEV4YW1wbGUgZnJhZ21lbnQgZm9yIGdyb3VwIGRhc2hib2FyZDogJ2M4eV9EYXNoYm9hcmQhZ3JvdXAhODQxMjkyMDgnXG4gICAqIEV4YW1wbGUgZnJhZ21lbnQgZm9yIHR5cGVkIGRldmljZSBkYXNoYm9hcmQ6ICdjOHlfRGFzaGJvYXJkIXR5cGUhYzh5X2x3bTJtX2Nvbm5lY3Rvcl9kZXZpY2UnXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0RGFzaGJvYXJkVHlwZSBUeXBlIG9mIGRhc2hib2FyZFxuICAgKiBAcGFyYW0gdmFsdWUgRnJhZ21lbnQgdmFsdWVcbiAgICogQHJldHVybnMgRnJhZ21lbnQgZm9yIGRhc2hib2FyZFxuICAgKi9cbiAgY3JlYXRlRnJhZ21lbnRLZXkoY29udGV4dERhc2hib2FyZFR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW3RoaXMuRlJBR01FTlRfTkFNRSwgY29udGV4dERhc2hib2FyZFR5cGUsIHZhbHVlXS5qb2luKHRoaXMuSU5ERVhfU1BMSVQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBkYXNoYm9hcmQgY2FuIGJlIHNldCB0byB0eXBlIGRhc2hib2FyZC5cbiAgICogRmlyc3QsIGl0IGNoZWNrcyBpZiBkZXZpY2VUeXBlVmFsdWUgZXhpc3RzIGFuZCBpZiB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIHNldCBkYXNoYm9hcmQgdHlwZS5cbiAgICogVGhlbiwgY2FzZSBmcm9tIHNlbnNvciBhcHAgaXMgY2hlY2tlZC0gZGFzaGJvYXJkIGNyZWF0ZWQgd2l0aCBzZW5zb3IgYXBwIGhhcyBkZXZpY2VUeXBlIHNldCB0byB0cnVlIGJ1dFxuICAgKiB0eXBlIGZyYWdtZW50IGlzIG1pc3NpbmctIHdlIGRvIG5vdCBzdXBwb3J0IHRoaXMgY29tYmluYXRpb24uXG4gICAqIEBwYXJhbSBtbyBEYXNoYm9hcmQgbWFuYWdlZCBvYmplY3RcbiAgICogQHBhcmFtIGRldmljZVR5cGVWYWx1ZSBWYWx1ZSBvZiBkZXZpY2UgdHlwZVxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGRhc2hib2FyZCBjYW4gYmUgc2V0IHRvIHR5cGUgZGFzaGJvYXJkLCBmYWxzZSBpZiBpdCBpcyBmb3JiaWRkZW4uXG4gICAqL1xuICBzaG91bGRBbGxvd1RvU2V0RGFzaGJvYXJkVHlwZShcbiAgICBtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsXG4gICAgZGV2aWNlVHlwZVZhbHVlOiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFkZXZpY2VUeXBlVmFsdWUgfHwgIXRoaXMucGVybWlzc2lvbnMuaGFzQW55Um9sZSh0aGlzLklOVkVOVE9SWV9ST0xFUykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdHlwZUZyYWdtZW50ID0gdGhpcy5jcmVhdGVGcmFnbWVudEtleShDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlLCBkZXZpY2VUeXBlVmFsdWUpO1xuICAgIGlmIChtby5jOHlfRGFzaGJvYXJkICYmIG1vLmM4eV9EYXNoYm9hcmQuZGV2aWNlVHlwZSAmJiAhbW9bdHlwZUZyYWdtZW50XSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNyZWF0ZVJlcG9ydChyZXBvcnRDZmc6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+KSB7XG4gICAgY29uc3QgcmVwb3J0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PiA9IHt9O1xuICAgIE9iamVjdC5hc3NpZ24ocmVwb3J0LCByZXBvcnRDZmcpO1xuICAgIE9iamVjdC5hc3NpZ24ocmVwb3J0LCB7IGM4eV9SZXBvcnQ6IHt9IH0pO1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5jcmVhdGUocmVwb3J0KTtcbiAgfVxuXG4gIGFkZFJlcG9ydE5hdmlnYXRvck5vZGUocmVwb3J0OiBJTWFuYWdlZE9iamVjdCk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGUgPSBuZXcgTmF2aWdhdG9yTm9kZSh7XG4gICAgICBsYWJlbDogcmVwb3J0Lm5hbWUsXG4gICAgICBwYXRoOiBgcmVwb3J0cy8ke3JlcG9ydC5pZH1gLFxuICAgICAgaWNvbjogcmVwb3J0Lmljb24sXG4gICAgICBwcmlvcml0eTogcmVwb3J0LnByaW9yaXR5XG4gICAgfSk7XG4gICAgdGhpcy5uYXZpZ2F0b3IuYWRkKG5vZGUpO1xuICB9XG5cbiAgZ2V0Q29udGV4dEZvckdTKG1vOiBJTWFuYWdlZE9iamVjdCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmdyb3VwU2VydmljZS5pc0RldmljZShtbykpIHtcbiAgICAgIHJldHVybiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTlRFWFQuREVWSUNFO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cFNlcnZpY2UuaXNBc3NldChtbykpIHtcbiAgICAgIHJldHVybiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTlRFWFQuQVNTRVQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwU2VydmljZS5pc0dyb3VwKG1vKSkge1xuICAgICAgcmV0dXJuIFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09OVEVYVC5HUk9VUDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0dXBsZSBkZXNjcmliaW5nIHRoZSBkYXNoYm9hcmQgdHlwZSBhbmQgaXRzIGZyYWdtZW50cy4gRm9yIGFzc2V0cyBsaWtlIGRldmljZXMgYW5kIGdyb3VwcywgaXQncyBwb3NzaWJsZVxuICAgKiB0byBoYXZlIHR3byBmcmFnbWVudHM6IG9uZSBpbmRpY2F0aW5nIHRoaXMgcGFydGljdWxhciBkZXZpY2UvYXNzZXQgd2l0aCBpdHMgSUQsIGFuZCB0aGUgc2Vjb25kIGluZGljYXRpbmdcbiAgICogdGhlIGRldmljZS9hc3NldCB0eXBlIChpZiB0aGUgZGFzaGJvYXJkIGlzIG1lYW50IHRvIGJlIGFwcGxpZWQgdG8gYWxsIGFzc2V0cyBvZiB0aGlzIHR5cGUpLlxuICAgKlxuICAgKiBAcGFyYW0gZGFzaGJvYXJkTU8gLSBEYXNoYm9hcmQgbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gQ29udGV4dCBkYXRhIG9mIGFzc2V0LlxuICAgKiBAcGFyYW0gbmFtZSAtIE5hbWUgb2YgdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIGlzRWRpdCAtIFRydWUgaWYgZXhpc3RpbmcgZGFzaGJvYXJkIGlzIHVwZGF0ZWQsIGZhbHNlIHdoZW4gaXQncyBjcmVhdGlvbiBvZiBuZXcgZGFzaGJvYXJkLlxuICAgKiBAcmV0dXJucyBUdXBsZSBvZiBkYXNoYm9hcmQgdHlwZSBhbmQgb2JqZWN0IGNvbnRhaW5pbmcgZGFzaGJvYXJkIGZyYWdtZW50cy5cbiAgICovXG4gIHByaXZhdGUgZ2V0RGFzaGJvYXJkRnJhZ21lbnRzKFxuICAgIGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgICBjb250ZXh0OiBDb250ZXh0RGF0YSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgaXNFZGl0OiBib29sZWFuXG4gICk6IFtDb250ZXh0RGFzaGJvYXJkVHlwZSwgUmVjb3JkPHN0cmluZywgb2JqZWN0Pl0ge1xuICAgIGxldCBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZTtcbiAgICBjb25zdCBpZCA9IChjb250ZXh0Py5jb250ZXh0RGF0YT8uaWQgYXMgc3RyaW5nKSB8fCAnJztcbiAgICBjb25zdCBmcmFnbWVudHM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblxuICAgIGlmIChjb250ZXh0Py5jb250ZXh0ID09PSBWaWV3Q29udGV4dC5EZXZpY2UgfHwgY29udGV4dD8uY29udGV4dCA9PT0gVmlld0NvbnRleHQuR3JvdXApIHtcbiAgICAgIC8vIGdldCBiYXNlIHR5cGUgZm9yIGRldmljZSBvciBncm91cFxuICAgICAgY29uc3QgZGVmYXVsdFR5cGUgPVxuICAgICAgICBjb250ZXh0LmNvbnRleHQgPT09IFZpZXdDb250ZXh0LkRldmljZVxuICAgICAgICAgID8gQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlXG4gICAgICAgICAgOiBDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cDtcbiAgICAgIGRhc2hib2FyZFR5cGUgPSBkYXNoYm9hcmRNTy5jOHlfRGFzaGJvYXJkLmRldmljZVR5cGVcbiAgICAgICAgPyBDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlXG4gICAgICAgIDogZGVmYXVsdFR5cGU7XG5cbiAgICAgIC8vIGNsZWFyIGZyYWdtZW50cyBmcm9tIG90aGVyIGFzc2V0IGlmIGN1cnJlbnQgYXNzZXQgaXMgbm90IG9yaWdpbiBvZiB0aGlzIGRhc2hib2FyZFxuICAgICAgdGhpcy5jbGVhclJlZHVuZGFudEZyYWdtZW50KGRhc2hib2FyZE1PLCBkZWZhdWx0VHlwZSwgZnJhZ21lbnRzKTtcblxuICAgICAgLy8gYWRkIGJhc2UgZnJhZ21lbnQgZm9yIHBhcnRpY3VsYXIgYXNzZXRcbiAgICAgIGNvbnN0IGRldmljZU9yR3JvdXBGcmFnbWVudEtleSA9IHRoaXMuY3JlYXRlRnJhZ21lbnRLZXkoZGVmYXVsdFR5cGUsIGlkKTtcbiAgICAgIGZyYWdtZW50c1tkZXZpY2VPckdyb3VwRnJhZ21lbnRLZXldID0ge307XG5cbiAgICAgIC8vIGFkZCBvciBjbGVhciB0eXBlIGZyYWdtZW50XG4gICAgICBpZiAoZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlIHx8IGlzRWRpdCkge1xuICAgICAgICBjb25zdCB0eXBlRnJhZ21lbnRLZXkgPSB0aGlzLmNyZWF0ZUZyYWdtZW50S2V5KFxuICAgICAgICAgIENvbnRleHREYXNoYm9hcmRUeXBlLlR5cGUsXG4gICAgICAgICAgZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgZnJhZ21lbnRzW3R5cGVGcmFnbWVudEtleV0gPSBkYXNoYm9hcmRNTy5jOHlfRGFzaGJvYXJkLmRldmljZVR5cGUgPyB7fSA6IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGRhc2hib2FyZFR5cGUgPSBDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZDtcbiAgICAgIGNvbnN0IG5hbWVkRnJhZ21lbnRLZXkgPSB0aGlzLmNyZWF0ZUZyYWdtZW50S2V5KENvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkLCBuYW1lKTtcbiAgICAgIGZyYWdtZW50c1tuYW1lZEZyYWdtZW50S2V5XSA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBbZGFzaGJvYXJkVHlwZSwgZnJhZ21lbnRzXTtcbiAgfVxuICAvKipcbiAgICogQ2xlYXJzIGZyYWdtZW50cyB0aGF0IG9yaWdpbmF0ZXMgZnJvbSBvdGhlciBtYW5hZ2VkIG9iamVjdC5cbiAgICogRS5nLiB0eXBlZCBkYXNoYm9hcmQgaXMgY3JlYXRlZCBmb3IgZGV2aWNlIEEgb2YgdHlwZSBjOHlfTVFUVERldmljZSBhbmQgaWQgMSwgc28gaXQgZ2V0cyBmcmFnbWVudHMgb2JqZWN0XG4gICAqIGBgYHRzXG4gICAqIHtcbiAgICogYzh5X0Rhc2hib2FyZCFkZXZpY2UhMToge30sXG4gICAqIGM4eV9EYXNoYm9hcmQhdHlwZSFjOHlfTVFUVERldmljZToge31cbiAgICogfVxuICAgKmBgYFxuICAgKiB0aGVuLCBvbiBkZXZpY2UgQiBvZiB0eXBlIGM4eV9NUVRURGV2aWNlIGFuZCBpZCAyLCB3aGljaCBhbHNvIGhhcyBhY2Nlc3MgdG8gdGhpcyBkYXNoYm9hcmQsIGRldmljZVR5cGUgaXMgc2V0IHRvXG4gICAqIGZhbHNlLCBzbyBkYXNoYm9hcmQgaXMgbm90IHR5cGVkIGRhc2hib2FyZCBhbnltb3JlIGFuZCBub3cgYmVsb25ncyB0byBkZXZpY2UgQiwgdGhlcmVmb3JlIGZyYWdtZW50cyBzaG91bGQgbG9vayBsaWtlXG4gICAqIGBgYHRzXG4gICAqIHtcbiAgICogYzh5X0Rhc2hib2FyZCFkZXZpY2UhMTogbnVsbCwgLy8gdGhpcyB2YWx1ZSBpcyBjbGVhcmVkIGJlY2F1c2UgZGFzaGJvYXJkIGlzIGRvZXNuJ3QgYmVsb25nIHRvIGRldmljZSBBIGFueW1vcmVcbiAgICogYzh5X0Rhc2hib2FyZCFkZXZpY2UhMjoge30sIC8vIGFzc2lnbiBkYXNoYm9hcmQgdG8gZGV2aWNlIEJcbiAgICogYzh5X0Rhc2hib2FyZCF0eXBlIWM4eV9NUVRURGV2aWNlOiBudWxsIC8vIHRoaXMgdmFsdWUgaXMgY2xlYXJlZCBpbiBnZXREYXNoYm9hcmRGcmFnbWVudHMgbWV0aG9kIGFzIGl0J3Mgbm90IHR5cGVkIGRhc2hib2FyZCBhbnltb3JlXG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBkYXNoYm9hcmRNTyAtIERhc2hib2FyZCBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHBhcmFtIHR5cGUgLSBDb250ZXh0IGRhc2hib2FyZCB0eXBlLlxuICAgKiBAcGFyYW0gZnJhZ21lbnRzIC0gRnJhZ21lbnRzIG9iamVjdC5cbiAgICovXG4gIHByaXZhdGUgY2xlYXJSZWR1bmRhbnRGcmFnbWVudChcbiAgICBkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsXG4gICAgdHlwZTogQ29udGV4dERhc2hib2FyZFR5cGUsXG4gICAgZnJhZ21lbnRzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+XG4gICk6IHZvaWQge1xuICAgIE9iamVjdC5rZXlzKGRhc2hib2FyZE1PKVxuICAgICAgLmZpbHRlcihrZXkgPT4ga2V5LnN0YXJ0c1dpdGgodGhpcy5jcmVhdGVGcmFnbWVudEtleSh0eXBlLCAnJykpKVxuICAgICAgLmZvckVhY2goa2V5ID0+IChmcmFnbWVudHNba2V5XSA9IG51bGwpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIG1pZ3JhdGUgZGFzaGJvYXJkcyBmcm9tIHByZXZpb3VzIDEyIGNvbHVtbnMgbGF5b3V0IHRvIDI0IGNvbHVtbnMuXG4gICAqL1xuICBwcml2YXRlIGFkanVzdERhc2hib2FyZEZvcjI0Q29sdW1uczxUIGV4dGVuZHMgeyBjOHlfRGFzaGJvYXJkPzogQ29udGV4dERhc2hib2FyZCB9PihcbiAgICBkYXNoYm9hcmRzOiBUW11cbiAgKTogVFtdO1xuICBwcml2YXRlIGFkanVzdERhc2hib2FyZEZvcjI0Q29sdW1uczxUIGV4dGVuZHMgeyBjOHlfRGFzaGJvYXJkPzogQ29udGV4dERhc2hib2FyZCB9PihcbiAgICBkYXNoYm9hcmRzOiBUXG4gICk6IFQ7XG4gIHByaXZhdGUgYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zPFQgZXh0ZW5kcyB7IGM4eV9EYXNoYm9hcmQ/OiBDb250ZXh0RGFzaGJvYXJkIH0+KFxuICAgIGRhc2hib2FyZHM6IFQgfCBUW11cbiAgKTogVCB8IFRbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGFzaGJvYXJkcykpIHtcbiAgICAgIHJldHVybiBkYXNoYm9hcmRzLm1hcChkYXNoYm9hcmQgPT4gdGhpcy5hZGp1c3REYXNoYm9hcmRGb3IyNENvbHVtbnMoZGFzaGJvYXJkKSk7XG4gICAgfVxuICAgIC8vIGlmIGBjb2x1bW5zYCBhdHRyaWJ1dGUgZXhpc3RzLCBkYXNoYm9hcmQgd2FzIGFscmVhZHkgYWRqdXN0ZWQuXG4gICAgaWYgKGRhc2hib2FyZHMuYzh5X0Rhc2hib2FyZC5jb2x1bW5zKSB7XG4gICAgICByZXR1cm4gZGFzaGJvYXJkcztcbiAgICB9XG5cbiAgICBkYXNoYm9hcmRzLmM4eV9EYXNoYm9hcmQuY29sdW1ucyA9IDI0O1xuICAgIGlmICghZGFzaGJvYXJkcy5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gZGFzaGJvYXJkcztcbiAgICB9XG5cbiAgICAvLyBOZXdseSBjcmVhdGVkIE5hbWVkQ29udGV4dERhc2hib2FyZHMgYXJlIHN0aWxsIGNyZWF0ZWQgd2l0aCAxMiBjb2x1bW5zIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgICAvLyBEZWZhdWx0IHdpZGdldHMgbWlnaHQgYmUgYWxyZWFkeSBjb25maWd1cmVkIGZvciAyNCBjb2x1bW5zLlxuICAgIC8vIElmIGEgd2lkZ2V0IGlzIGFscmVhZHkgY29uZmlndXJlZCBmb3IgbW9yZSB0aGFuIDEyIGNvbHVtbnMsIHdlIHNob3VsZCBub3QgYWRqdXN0IGl0LlxuICAgIGNvbnN0IGFscmVhZHlIYXNXaWRnZXRzQ29uZmlndXJlZEZvck1vcmVUaGFuMTJDb2x1bW5zID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgIGRhc2hib2FyZHMuYzh5X0Rhc2hib2FyZC5jaGlsZHJlblxuICAgICkuc29tZSh3aWRnZXQgPT4gd2lkZ2V0Ll94ICsgd2lkZ2V0Ll93aWR0aCA+IDEyKTtcbiAgICBpZiAoYWxyZWFkeUhhc1dpZGdldHNDb25maWd1cmVkRm9yTW9yZVRoYW4xMkNvbHVtbnMpIHtcbiAgICAgIHJldHVybiBkYXNoYm9hcmRzO1xuICAgIH1cblxuICAgIC8vIHdlIG5lZWQgdG8gbXVsdGlwbHkgYm90aCBfd2lkdGggYW5kIF94IGF0dHJpYnV0ZXMgd2l0aCAyIHRvIG1pZ3JhdGUgZnJvbSAxMiB0byAyNCBjb2x1bW5zLlxuICAgIE9iamVjdC52YWx1ZXMoZGFzaGJvYXJkcy5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKS5mb3JFYWNoKHdpZGdldCA9PiB7XG4gICAgICBpZiAod2lkZ2V0Ll93aWR0aCkge1xuICAgICAgICB3aWRnZXQuX3dpZHRoID0gd2lkZ2V0Ll93aWR0aCAqIDI7XG4gICAgICB9XG4gICAgICBpZiAod2lkZ2V0Ll94KSB7XG4gICAgICAgIHdpZGdldC5feCA9IHdpZGdldC5feCAqIDI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhc2hib2FyZHM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlcmlhbGl6ZVdpZGdldENvbmZpZ3MoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gY2xvbmVEZWVwKGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKTtcbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ3MgPSBPYmplY3QudmFsdWVzKGNoaWxkcmVuKTtcbiAgICBjb25zdCBkZXRhaWxzID0gY29uZmlncy5tYXAoKHsgY29tcG9uZW50SWQsIGNvbmZpZyB9KSA9PiAoeyBjb21wb25lbnRJZCwgY29uZmlnIH0pKTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5keW5hbWljQ29tcG9uZW50LnNlcmlhbGl6ZUNvbmZpZ3MoZGV0YWlscyk7XG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQsIGluZGV4KSA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyhyZXN1bHQpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBzZXQoZGV0YWlsc1tpbmRleF0uY29uZmlnLCBrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbnRleHREYXNoYm9hcmRDb3B5KFxuICAgIGRhc2g6IENvbnRleHREYXNoYm9hcmQsXG4gICAgbmV3Q29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgb2xkQ29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD5cbiAgKTogQ29udGV4dERhc2hib2FyZCB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSByZWR1Y2UoXG4gICAgICBkYXNoLmNoaWxkcmVuLFxuICAgICAgKF9jaGlsZHJlbiwgY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgeyBpZCB9ID0gY2hpbGQ7XG4gICAgICAgIGNvbnN0IGNmZyA9IGNoaWxkLmNvbmZpZztcbiAgICAgICAgY29uc3QgcHJvcGVydGllc1RvQ29weSA9IHtcbiAgICAgICAgICBkZXZpY2U6IGRldmljZSA9PiB0aGlzLnJlcGxhY2VDb250ZXh0SW5PYmooZGV2aWNlLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhcG9pbnRzOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFQb2ludHM6IGRhdGFQb2ludHMgPT5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoZGF0YVBvaW50cywgbmV3Q29udGV4dCwgb2xkQ29udGV4dCksXG4gICAgICAgICAgZGF0YXBvaW50c0dhdWdlOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFwb2ludHNMYWJlbHM6IGRhdGFQb2ludHMgPT5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoZGF0YVBvaW50cywgbmV3Q29udGV4dCwgb2xkQ29udGV4dClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoY2ZnKSB7XG4gICAgICAgICAgdGhpcy5jb3B5UHJvcGVydGllcyhjZmcsIHByb3BlcnRpZXNUb0NvcHkpO1xuICAgICAgICAgIGlmIChjZmcub3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5jb3B5UHJvcGVydGllcyhjZmcub3B0aW9ucywgcHJvcGVydGllc1RvQ29weSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX2NoaWxkcmVuW2lkXSA9IGNsb25lRGVlcChjaGlsZCk7XG4gICAgICAgIHJldHVybiBfY2hpbGRyZW47XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuXG4gICAgZGFzaC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHJldHVybiBkYXNoO1xuICB9XG5cbiAgcHJpdmF0ZSBjb3B5UHJvcGVydGllcyhvYmosIHByb3BlcnRpZXNUb0NvcHkpIHtcbiAgICBmb3JFYWNoKHByb3BlcnRpZXNUb0NvcHksIChjb3B5Rm4sIHByb3BlcnR5KSA9PiB7XG4gICAgICBpZiAob2JqW3Byb3BlcnR5XSkge1xuICAgICAgICBvYmpbcHJvcGVydHldID0gY29weUZuKG9ialtwcm9wZXJ0eV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhcbiAgICBkYXRhUG9pbnRzLFxuICAgIG5ld0NvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+LFxuICAgIG9sZENvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+XG4gICkge1xuICAgIGRhdGFQb2ludHMuZm9yRWFjaChkcCA9PiB7XG4gICAgICBkcC5fX3RhcmdldCA9IHRoaXMucmVwbGFjZUNvbnRleHRJbk9iaihkcC5fX3RhcmdldCwgbmV3Q29udGV4dCwgb2xkQ29udGV4dCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGFQb2ludHM7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VDb250ZXh0SW5PYmooXG4gICAgb2JqOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBuZXdDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBvbGRDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PlxuICApIHtcbiAgICBpZiAob2JqICYmIG9iai5pZCA9PT0gb2xkQ29udGV4dC5pZCkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHBpY2sobmV3Q29udGV4dCwgWydpZCcsICduYW1lJ10pKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFicyQobW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LCBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdKSB7XG4gICAgY29uc3QgZGFzaGJvYXJkcyA9IHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMobW8sIGRhc2hib2FyZFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMkKGRhc2hib2FyZHMpLnBpcGUoXG4gICAgICBtZXJnZU1hcChkYXNoYm9hcmQgPT4gdGhpcy52ZXJpZnlEYXNoYm9hcmRBdmFpbGFiaWxpdHkkKGRhc2hib2FyZCkpLFxuICAgICAgbWVyZ2VNYXAoKFtkYXNoYm9hcmRdKSA9PiB0aGlzLnJlbW92ZURhc2hib2FyZE1vUHJvcGVydHkoZGFzaGJvYXJkKSksXG4gICAgICB0YXAoZGFzaGJvYXJkID0+IHRoaXMuY2FjaGVEYXNoYm9hcmQoZGFzaGJvYXJkKSksXG4gICAgICBtYXAoZGFzaGJvYXJkID0+IHRoaXMuY3JlYXRlRGFzaGJvYXJkVGFiKGRhc2hib2FyZCkpLFxuICAgICAgdG9BcnJheSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5RGFzaGJvYXJkQXZhaWxhYmlsaXR5JChkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgZ2xvYmFsUm9sZXNJZHMgPSBkYXNoYm9hcmQ/LmM4eV9EYXNoYm9hcmQ/Lmdsb2JhbFJvbGVzSWRzO1xuICAgIGNvbnN0IGNhbkVkaXQgPSBmcm9tKFxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5jYW5FZGl0KHRoaXMuSU5WRU5UT1JZX1JPTEVTLCBkYXNoYm9hcmQsIHsgc2tpcFJlcXVlc3RDaGVjazogdHJ1ZSB9KVxuICAgICk7XG4gICAgY29uc3QgaGFzQW55R2xvYmFsUm9sZSA9XG4gICAgICAhZ2xvYmFsUm9sZXNJZHMgfHwgZ2xvYmFsUm9sZXNJZHMgPT09IEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURURcbiAgICAgICAgPyBvZih0cnVlKVxuICAgICAgICA6IG9mKHRoaXMucGVybWlzc2lvbnMuaGFzQW55R2xvYmFsUm9sZShnbG9iYWxSb2xlc0lkcykpO1xuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW29mKGRhc2hib2FyZCksIGNhbkVkaXQsIGhhc0FueUdsb2JhbFJvbGVdKS5waXBlKFxuICAgICAgZmlsdGVyKChbLCBjYW5FZGl0LCBoYXNBbnlHbG9iYWxSb2xlXSkgPT4gY2FuRWRpdCB8fCBoYXNBbnlHbG9iYWxSb2xlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHREYXNoYm9hcmRzJChyZXF1ZXN0OiBQcm9taXNlPElSZXN1bHRMaXN0PElNYW5hZ2VkT2JqZWN0Pj4pIHtcbiAgICByZXR1cm4gZnJvbShyZXF1ZXN0KS5waXBlKFxuICAgICAgbWVyZ2VNYXAocmVzcG9uc2UgPT5cbiAgICAgICAgdGhpcy5hZGp1c3REYXNoYm9hcmRGb3IyNENvbHVtbnMocmVzcG9uc2UuZGF0YSBhcyBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdFtdKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW5zIGFscmVhZHkgY29ycnVwdGVkIGRhc2hib2FyZHMgZnJvbSBkYXNoYm9hcmRNbyBwcm9wZXJ0eS5cbiAgICogQWRkZWQgdG8gZml4IGRhc2hib2FyZHMgb24gdGhlIGNsb3VkIGluc3RhbmNlIChldS1sYXRlc3QpLlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIGlzIGdvaW5nIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgMTAwNy43LjAuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlbW92ZURhc2hib2FyZE1vUHJvcGVydHkoXG4gICAgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdFxuICApOiBQcm9taXNlPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PiB7XG4gICAgY29uc3QgZGFzaGJvYXJkQ29weSA9IGNsb25lRGVlcChkYXNoYm9hcmQpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZ2V0KGRhc2hib2FyZENvcHksICdjOHlfRGFzaGJvYXJkLmNoaWxkcmVuJyk7XG4gICAgbGV0IHVwZGF0ZURhc2hib2FyZCA9IGZhbHNlO1xuXG4gICAgZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgaWYgKGdldChjaGlsZCwgJ2NvbXBvbmVudFRyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0JykpIHtcbiAgICAgICAgZGVsZXRlIGNoaWxkLmNvbXBvbmVudFRyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0O1xuICAgICAgICB1cGRhdGVEYXNoYm9hcmQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGdldChjaGlsZCwgJ2NvbmZpZy5kYXNoYm9hcmRNbycpKSB7XG4gICAgICAgIGRlbGV0ZSBjaGlsZC5jb25maWcuZGFzaGJvYXJkTW87XG4gICAgICAgIHVwZGF0ZURhc2hib2FyZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodXBkYXRlRGFzaGJvYXJkKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZShkYXNoYm9hcmRDb3B5KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhc2hib2FyZENvcHk7XG4gIH1cblxuICBwcml2YXRlIGNhY2hlRGFzaGJvYXJkKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLmNhY2hlLnNldChkYXNoYm9hcmQuaWQsIGRhc2hib2FyZCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhc2hib2FyZFRhYihkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgeyBjOHlfRGFzaGJvYXJkOiBfZGFzaGJvYXJkLCBpZCB9ID0gZGFzaGJvYXJkO1xuICAgIHJldHVybiB7XG4gICAgICBpY29uOiBfZGFzaGJvYXJkLmljb24sXG4gICAgICBwYXRoOiBgJHt0aGlzLkRBU0hCT0FSRF9ST1VURV9QQVRIfS8ke2lkfWAsXG4gICAgICBsYWJlbDogX2Rhc2hib2FyZC5uYW1lLFxuICAgICAgcHJpb3JpdHk6IF9kYXNoYm9hcmQucHJpb3JpdHksXG4gICAgICBoaWRlOiB0aGlzLmlzUmVwb3J0KGRhc2hib2FyZCksXG4gICAgICBiYWRnZTpcbiAgICAgICAgX2Rhc2hib2FyZC5kZXZpY2VUeXBlICYmXG4gICAgICAgIHRoaXMuc2hvdWxkQWxsb3dUb1NldERhc2hib2FyZFR5cGUoZGFzaGJvYXJkLCBfZGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZSlcbiAgICAgICAgICA/IGdldHRleHQoJ0Rhc2hib2FyZCB0ZW1wbGF0ZScpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgdG9vbHRpcFRleHQ6IF9kYXNoYm9hcmQuZGVzY3JpcHRpb24gfHwgZ2V0dGV4dCgnRGFzaGJvYXJkIHRlbXBsYXRlJylcbiAgICB9IGFzIFRhYjtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW4oZGFzaGJvYXJkKSB7XG4gICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRhc2hib2FyZCwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChrZXkgPT09ICckJGhhc2hLZXknIHx8IGtleSA9PT0gJ2tsYXNzZXMnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmFtZWREYXNoYm9hcmQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5Lmxpc3Qoe1xuICAgICAgZnJhZ21lbnRUeXBlOiBgJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfSR7bmFtZX1gLFxuICAgICAgcGFnZVNpemU6IDFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGV4dERhc2hib2FyZHMoXG4gICAgbW86IElNYW5hZ2VkT2JqZWN0LFxuICAgIGRhc2hib2FyZFR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlW11cbiAgKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+IHtcbiAgICBjb25zdCBxdWVyeSA9IGRhc2hib2FyZFR5cGVcbiAgICAgIC5tYXAodCA9PiBgKGhhcygnJHt0aGlzLmNyZWF0ZURhc2hib2FyZEZyYWdtZW50KG1vLCB0KX0nKSlgKVxuICAgICAgLmpvaW4oJyBvciAnKTtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICBxdWVyeTogYCRmaWx0ZXI9KCR7cXVlcnl9KWAsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5ERUZBVUxUX1BBR0VTSVpFXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhc2hib2FyZEZyYWdtZW50KG1vOiBJTWFuYWdlZE9iamVjdCwgdHlwZTogQ29udGV4dERhc2hib2FyZFR5cGUpIHtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKG1vLmM4eV9SZXBvcnQpIHtcbiAgICAgIHZhbHVlID0gYCR7dGhpcy5SRVBPUlRfUEFSVElBTF9OQU1FfSR7bW8uaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0eXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlID8gbW8udHlwZSA6IG1vLmlkO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke3R5cGV9JHt0aGlzLklOREVYX1NQTElUfSR7dmFsdWV9YDtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4sIGNvbnRleHQ/KSB7XG4gICAgaWYgKFxuICAgICAgKCFjb250ZXh0ICYmIHRoaXMuaXNOYW1lZChkYXNoYm9hcmQpICYmICF0aGlzLmlzUmVwb3J0KGRhc2hib2FyZCkpIHx8XG4gICAgICB0aGlzLmlzRGV2aWNlVHlwZShkYXNoYm9hcmQpXG4gICAgKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
@@ -73,8 +73,8 @@ export function initializeServices(translateService, state, userPreferences) {
73
73
  * @exports I18nModule Translation module.
74
74
  * @exports NgCommonModule Angular common module.
75
75
  * @exports DataModule The data layer to allow DI with @c8y/client.
76
- * @exports HumanizeAppNamePipe Humanize an application name (e.g. in the app switcher).
77
- * @exports HumanizePipe Humanize a word. E.g. `device management` gets `Device management`.
76
+ * @exports HumanizeAppNamePipe Humanize an application name for display in e.g. the app switcher (e.g. `devicemanagement` becomes `Device Management`).
77
+ * @exports HumanizePipe Humanize a string, e.g. `c8y_water_temperature` becomes `Water Temperature`.
78
78
  * @exports ShouldShowMoPipe Checks if passed managed object is device or group type.
79
79
  * @exports GetGroupIconPipe Gets proper group icon.
80
80
  * @exports ShortenUserNamePipe Allows a short name. E.g. `Foo Bar` gets `F. Bar`.
@@ -280,4 +280,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
280
280
  providers: [AssetLinkPipe]
281
281
  }]
282
282
  }], ctorParameters: () => [] });
283
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2NvbW1vbi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLElBQUksY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBdUIsUUFBUSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVB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WSxFQUFFO3dCQUNaLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIsMEJBQTBCO3dCQUMxQiwyQkFBMkI7d0JBQzNCLG1CQUFtQjt3QkFDbkIsK0JBQStCO3dCQUMvQiw0QkFBNEI7d0JBQzVCLGdCQUFnQjt3QkFDaEIsaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLG1CQUFtQjtxQkFDcEI7b0JBQ0QsU0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDO2lCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIGFzIE5nQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhTW9kdWxlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hcGknO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvdG9vbHRpcCc7XG5pbXBvcnQgeyBzZXRUaGVtZSB9IGZyb20gJ25neC1ib290c3RyYXAvdXRpbHMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEkxOG5Nb2R1bGUgfSBmcm9tICcuLi9pMThuL2kxOG4ubW9kdWxlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9pMThuL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFzc2V0TGlua1BpcGUgfSBmcm9tICcuL2Fzc2V0LWxpbmsucGlwZSc7XG5pbXBvcnQgeyBCeXRlc1BpcGUgfSBmcm9tICcuL2J5dGVzLnBpcGUnO1xuaW1wb3J0IHsgQzh5Q29tcG9uZW50T3V0bGV0IH0gZnJvbSAnLi9jb21wb25lbnQtb3V0bGV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJy4vZGF0ZS5waXBlJztcbmltcG9ydCB7IERyb3Bkb3duRGlyZWN0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi9kcm9wZG93bi1kaXJlY3Rpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEVtcHR5U3RhdGVDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS1jb250ZXh0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuL2Zvck9mLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBHZW5lcmljRmlsZUljb25QaXBlIH0gZnJvbSAnLi9nZW5lcmljLWZpbGUtaWNvbi5waXBlJztcbmltcG9ydCB7IEdldEdyb3VwSWNvblBpcGUgfSBmcm9tICcuL2dldC1ncm91cC1pY29uLnBpcGUnO1xuaW1wb3J0IHsgSHVtYW5pemVBcHBOYW1lUGlwZSB9IGZyb20gJy4vaHVtYW5pemUtYXBwLW5hbWUucGlwZSc7XG5pbXBvcnQgeyBIdW1hbml6ZVBpcGUgfSBmcm9tICcuL2h1bWFuaXplLnBpcGUnO1xuaW1wb3J0IHsgSWNvbkRpcmVjdGl2ZSB9IGZyb20gJy4vaWNvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWZBbGxvd2VkRGlyZWN0aXZlIH0gZnJvbSAnLi9pZi1hbGxvd2VkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMb2FkTW9yZUNvbXBvbmVudCB9IGZyb20gJy4vbG9hZC1tb3JlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9sb2FkaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXBGdW5jdGlvblBpcGUgfSBmcm9tICcuL21hcC1mdW5jdGlvbi5waXBlJztcbmltcG9ydCB7IE1hcmtkb3duVG9IdG1sUGlwZSB9IGZyb20gJy4vbWFya2Rvd24tdG8taHRtbC5waXBlJztcbmltcG9ydCB7IE1vTmFtZVBpcGUgfSBmcm9tICcuL21vLW5hbWUucGlwZSc7XG5pbXBvcnQgeyBOdW1iZXJQaXBlIH0gZnJvbSAnLi9udW1iZXIucGlwZSc7XG5pbXBvcnQgeyBPcGVyYXRpb25SZXN1bHRDb21wb25lbnQgfSBmcm9tICcuL29wZXJhdGlvbi1yZXN1bHQuY29tcG9uZW50JztcbmltcG9ydCB7IGhvb2tPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi9vdXRsZXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFByb2dyZXNzQmFyQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9ncmVzcy1iYXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNob3J0ZW5Vc2VyTmFtZVBpcGUgfSBmcm9tICcuL3Nob3J0ZW4tdXNlci1uYW1lLnBpcGUnO1xuaW1wb3J0IHsgU2hvdWxkU2hvd01vUGlwZSB9IGZyb20gJy4vc2hvdWxkLXNob3ctbW8ucGlwZSc7XG5pbXBvcnQgeyBTaG93SWZGaWx0ZXJQaXBlIH0gZnJvbSAnLi9zaG93LWlmLWZpbHRlci5waXBlJztcbmltcG9ydCB7IFNraXBMaW5rRGlyZWN0aXZlIH0gZnJvbSAnLi9za2lwLWxpbmsuZGlyZWN0aXZlJztcbmltcG9ydCB7IFN0cmluZ2lmeU9iamVjdFBpcGUgfSBmcm9tICcuL3N0cmluZ2lmeS1vYmplY3QucGlwZSc7XG5pbXBvcnQgeyBUYWJzZXRBcmlhRGlyZWN0aXZlIH0gZnJvbSAnLi90YWJzZXQtYXJpYS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGV4dGFyZWFBdXRvcmVzaXplRGlyZWN0aXZlIH0gZnJvbSAnLi90ZXh0YXJlYS1hdXRvcmVzaXplLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlck5hbWVJbml0aWFsc1BpcGUgfSBmcm9tICcuL3VzZXItbmFtZS1pbml0aWFscy5waXBlJztcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuL3VzZXItcHJlZmVyZW5jZXMvdXNlci1wcmVmZXJlbmNlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFZpcnR1YWxTY3JvbGxXaW5kb3dEaXJlY3RpdmUgfSBmcm9tICcuL3ZpcnR1YWwtc2Nyb2xsL3ZpcnR1YWwtc2Nyb2xsLXdpbmRvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVmlydHVhbFNjcm9sbGVyV3JhcHBlckNvbXBvbmVudCB9IGZyb20gJy4vdmlydHVhbC1zY3JvbGwvdmlydHVhbC1zY3JvbGxlci13cmFwcGVyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplU2VydmljZXMoXG4gIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gIHN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gIHVzZXJQcmVmZXJlbmNlczogVXNlclByZWZlcmVuY2VzU2VydmljZVxuKSB7XG4gIGNvbnN0IGluaXRpYWxpemUgPSAoKSA9PiB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmdMYW5ndWFnZSA9IHRyYW5zbGF0ZVNlcnZpY2UucXVlcnlTdHJpbmdMYW5nKCk7XG4gICAgY29uc3QgZmlyc3RMYW5ndWFnZSA9IHRyYW5zbGF0ZVNlcnZpY2UuZmlyc3RTdXBwb3J0ZWRMYW5ndWFnZSgpO1xuXG4gICAgLypcbiAgICAgIFRoZSA/bGFuZyBwYXJhbWV0ZXIgd2lsbCBwcmV2ZW50IHRoZSB1c2VyIHByZWZlcmVuY2UgbGFuZ3VhZ2UgZnJvbSBiZWluZyBhY3RpdmF0ZWRcbiAgICAqL1xuICAgIGlmIChxdWVyeVN0cmluZ0xhbmd1YWdlICYmIHRyYW5zbGF0ZVNlcnZpY2UuZ2V0U3VwcG9ydGVkKHF1ZXJ5U3RyaW5nTGFuZ3VhZ2UpKSB7XG4gICAgICB0cmFuc2xhdGVTZXJ2aWNlLnN3aXRjaFRvTGFuZ3VhZ2UocXVlcnlTdHJpbmdMYW5ndWFnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmN1cnJlbnRVc2VyXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCh1c2VyID0+IHVzZXIgJiYgdXNlci51c2VyTmFtZSksXG4gICAgICAgICAgZmlsdGVyKHUgPT4gISF1KSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB1c2VyUHJlZmVyZW5jZXMuZ2V0KCdsYW5ndWFnZScpKSxcbiAgICAgICAgICBzdGFydFdpdGgoZmlyc3RMYW5ndWFnZSksXG4gICAgICAgICAgZmlsdGVyKGxhbmcgPT4gISFsYW5nKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShsYW5nID0+IHtcbiAgICAgICAgICB0cmFuc2xhdGVTZXJ2aWNlLnN3aXRjaFRvTGFuZ3VhZ2UobGFuZyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGluaXRpYWxpemU7XG59XG5cbi8qKlxuICogQ29tbW9ubHkgdXNlZCBkaXJlY3RpdmVzLCBkYXRhIGFjY2VzcyBhbmQgdHJhbnNsYXRpb24uIFRoaXMgbW9kdWxlIGlzIHRoZSBzaGFyZWRcbiAqIG1vZHVsZSBhY3Jvc3MgYWxsIGNvcmUgY29tcG9uZW50cy4gSXQgc2hvdWxkIGJlIGltcG9ydGVkIGJ5IGRlZmF1bHQuXG4gKlxuICogQGV4cG9ydHMgSWNvbkRpcmVjdGl2ZSBBIGRpcmVjdGl2ZSB0byBzZXQgYSBjOHkgaWNvbiB3aXRoIFtjOHlJY29uXT1cIidyb2NrZXQnXCIuXG4gKiBAZXhwb3J0cyBPdXRsZXREaXJlY3RpdmUgQSBkaXJlY3RpdmUgd2hpY2ggYWxsb3dzIHRvIHNldCBET00gb3IgQW5ndWxhciB0ZW1wbGF0ZXMgKHVzZWQgZm9yIHVwZ3JhZGUpLlxuICogQGV4cG9ydHMgSTE4bk1vZHVsZSBUcmFuc2xhdGlvbiBtb2R1bGUuXG4gKiBAZXhwb3J0cyBOZ0NvbW1vbk1vZHVsZSBBbmd1bGFyIGNvbW1vbiBtb2R1bGUuXG4gKiBAZXhwb3J0cyBEYXRhTW9kdWxlIFRoZSBkYXRhIGxheWVyIHRvIGFsbG93IERJIHdpdGggQGM4eS9jbGllbnQuXG4gKiBAZXhwb3J0cyBIdW1hbml6ZUFwcE5hbWVQaXBlIEh1bWFuaXplIGFuIGFwcGxpY2F0aW9uIG5hbWUgKGUuZy4gaW4gdGhlIGFwcCBzd2l0Y2hlcikuXG4gKiBAZXhwb3J0cyBIdW1hbml6ZVBpcGUgSHVtYW5pemUgYSB3b3JkLiBFLmcuIGBkZXZpY2UgbWFuYWdlbWVudGAgZ2V0cyBgRGV2aWNlIG1hbmFnZW1lbnRgLlxuICogQGV4cG9ydHMgU2hvdWxkU2hvd01vUGlwZSBDaGVja3MgaWYgcGFzc2VkIG1hbmFnZWQgb2JqZWN0IGlzIGRldmljZSBvciBncm91cCB0eXBlLlxuICogQGV4cG9ydHMgR2V0R3JvdXBJY29uUGlwZSBHZXRzIHByb3BlciBncm91cCBpY29uLlxuICogQGV4cG9ydHMgU2hvcnRlblVzZXJOYW1lUGlwZSBBbGxvd3MgYSBzaG9ydCBuYW1lLiBFLmcuIGBGb28gQmFyYCBnZXRzIGBGLiBCYXJgLlxuICogQGV4cG9ydHMgVXNlck5hbWVJbml0aWFsc1BpcGUgQWxsb3dzIHRoZSBpbml0aWFscyBmcm9tIHRoZSBuYW1lLiBFLmcuIGBGb28gQmFyYCBnZXRzIGBGQmAuXG4gKiBAZXhwb3J0cyBGb3JPZkRpcmVjdGl2ZSBBIGZvck9mIGRpcmVjdGl2ZSBsaWtlIG5nRm9yIGJ1dCB3aXRoIGxvYWQtbW9yZSBmdW5jdGlvbi5cbiAqIEBleHBvcnRzIExvYWRNb3JlQ29tcG9uZW50IEEgY29tcG9uZW50IHRvIGxvYWQgbW9yZSBkYXRhIGZyb20gYSBjZXJ0YWluIGRhdGEtc291cmNlLlxuICogQGV4cG9ydHMgUHJvZ3Jlc3NCYXJDb21wb25lbnQgRGlzcGxheXMgZWl0aGVyIGRlZmluZWQgb3IgdW5kZWZpbmVkIHByb2dyZXNzLlxuICogQGV4cG9ydHMgRHJvcGRvd25EaXJlY3Rpb25EaXJlY3RpdmUgRGV0ZXJtaW5lcyBpZiBhIGRyb3Bkb3duIG9wZW5zIHRvIHRoZSBib3R0b20gb3IgdG8gdGhlIHRvcC5cbiAqIEBleHBvcnRzIFRleHRhcmVhQXV0b3Jlc2l6ZURpcmVjdGl2ZSByZXNpemVzIGEgdGV4dGFyZWEgaGVpZ2h0IGFzIHRoZSB1c2VyIGlucHV0cy5cbiAqIEBleHBvcnRzIE9wZXJhdGlvblJlc3VsdENvbXBvbmVudCBkaXNwbGF5cyBhbiBhbmltYXRlZCBzdmcgZm9yIHN1Y2Nlc3MgYW5kIGVycm9yIG9wZXJhdGlvbnMuXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBOZ0NvbW1vbk1vZHVsZSxcbiAgICBJMThuTW9kdWxlLFxuICAgIFRvb2x0aXBNb2R1bGUsXG4gICAgU2Nyb2xsaW5nTW9kdWxlLFxuICAgIEFzc2V0TGlua1BpcGUsXG4gICAgQzh5Q29tcG9uZW50T3V0bGV0LFxuICAgIEh1bWFuaXplQXBwTmFtZVBpcGUsXG4gICAgSWNvbkRpcmVjdGl2ZSxcbiAgICBEYXRlUGlwZSxcbiAgICBMb2FkaW5nQ29tcG9uZW50LFxuICAgIEVtcHR5U3RhdGVDb21wb25lbnQsXG4gICAgRW1wdHlTdGF0ZUNvbnRleHREaXJlY3RpdmUsXG4gICAgQnl0ZXNQaXBlLFxuICAgIFVzZXJOYW1lSW5pdGlhbHNQaXBlLFxuICAgIFNob3J0ZW5Vc2VyTmFtZVBpcGUsXG4gICAgSHVtYW5pemVQaXBlLFxuICAgIElmQWxsb3dlZERpcmVjdGl2ZSxcbiAgICBOdW1iZXJQaXBlLFxuICAgIE9wZXJhdGlvblJlc3VsdENvbXBvbmVudCxcbiAgICBNYXJrZG93blRvSHRtbFBpcGUsXG4gICAgTW9OYW1lUGlwZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgICBFbXB0eVN0YXRlQ29udGV4dERpcmVjdGl2ZSxcbiAgICBJY29uRGlyZWN0aXZlLFxuICAgIE91dGxldERpcmVjdGl2ZSxcbiAgICBJMThuTW9kdWxlLFxuICAgIE5nQ29tbW9uTW9kdWxlLFxuICAgIEh1bWFuaXplQXBwTmFtZVBpcGUsXG4gICAgSHVtYW5pemVQaXBlLFxuICAgIFNob3VsZFNob3dNb1BpcGUsXG4gICAgR2V0R3JvdXBJY29uUGlwZSxcbiAgICBJZkFsbG93ZWREaXJlY3RpdmUsXG4gICAgU2hvcnRlblVzZXJOYW1lUGlwZSxcbiAgICBVc2VyTmFtZUluaXRpYWxzUGlwZSxcbiAgICBGb3JPZkRpcmVjdGl2ZSxcbiAgICBMb2FkTW9yZUNvbXBvbmVudCxcbiAgICBNYXBGdW5jdGlvblBpcGUsXG4gICAgUHJvZ3Jlc3NCYXJDb21wb25lbnQsXG4gICAgRGF0ZVBpcGUsXG4gICAgTnVtYmVyUGlwZSxcbiAgICBMb2FkaW5nQ29tcG9uZW50LFxuICAgIERyb3Bkb3duRGlyZWN0aW9uRGlyZWN0aXZlLFxuICAgIFRleHRhcmVhQXV0b3Jlc2l6ZURpcmVjdGl2ZSxcbiAgICBUYWJzZXRBcmlhRGlyZWN0aXZlLFxuICAgIE9wZXJhdGlvblJlc3VsdENvbXBvbmVudCxcbiAgICBWaXJ0dWFsU2Nyb2xsZXJXcmFwcGVyQ29tcG9uZW50LFxuICAgIFZpcnR1YWxTY3JvbGxXaW5kb3dEaXJlY3RpdmUsXG4gICAgQnl0ZXNQaXBlLFxuICAgIFNob3dJZkZpbHRlclBpcGUsXG4gICAgU2tpcExpbmtEaXJlY3RpdmUsXG4gICAgTWFya2Rvd25Ub0h0bWxQaXBlLFxuICAgIE1vTmFtZVBpcGUsXG4gICAgR2VuZXJpY0ZpbGVJY29uUGlwZSxcbiAgICBTdHJpbmdpZnlPYmplY3RQaXBlLFxuICAgIEFzc2V0TGlua1BpcGUsXG4gICAgQzh5Q29tcG9uZW50T3V0bGV0XG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIE91dGxldERpcmVjdGl2ZSxcbiAgICBTaG91bGRTaG93TW9QaXBlLFxuICAgIEdldEdyb3VwSWNvblBpcGUsXG4gICAgRm9yT2ZEaXJlY3RpdmUsXG4gICAgTG9hZE1vcmVDb21wb25lbnQsXG4gICAgTWFwRnVuY3Rpb25QaXBlLFxuICAgIFByb2dyZXNzQmFyQ29tcG9uZW50LFxuICAgIERyb3Bkb3duRGlyZWN0aW9uRGlyZWN0aXZlLFxuICAgIFRleHRhcmVhQXV0b3Jlc2l6ZURpcmVjdGl2ZSxcbiAgICBUYWJzZXRBcmlhRGlyZWN0aXZlLFxuICAgIFZpcnR1YWxTY3JvbGxlcldyYXBwZXJDb21wb25lbnQsXG4gICAgVmlydHVhbFNjcm9sbFdpbmRvd0RpcmVjdGl2ZSxcbiAgICBTaG93SWZGaWx0ZXJQaXBlLFxuICAgIFNraXBMaW5rRGlyZWN0aXZlLFxuICAgIEdlbmVyaWNGaWxlSWNvblBpcGUsXG4gICAgU3RyaW5naWZ5T2JqZWN0UGlwZVxuICBdLFxuICBwcm92aWRlcnM6IFtBc3NldExpbmtQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBDb21tb25Nb2R1bGUge1xuICBzdGF0aWMgcHJvdmlkZXJzKCk6IFByb3ZpZGVyW10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi5EYXRhTW9kdWxlLnByb3ZpZGVycygpLFxuICAgICAgLy8gVE9ETzogbWF5YmUgd2UgY2FuIHRoaW5rIG9mIGEgd2F5IHRvIHJlbW92ZSB0aGlzIEM4WV9BUFAgZ2xvYmFsXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGhvb2tPcHRpb25zKCh3aW5kb3cgYXMgYW55KS5DOFlfQVBQIHx8IHt9KSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgICB1c2VGYWN0b3J5OiBpbml0aWFsaXplU2VydmljZXMsXG4gICAgICAgIGRlcHM6IFtUcmFuc2xhdGVTZXJ2aWNlLCBBcHBTdGF0ZVNlcnZpY2UsIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2VdLFxuICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIC4uLkkxOG5Nb2R1bGUucHJvdmlkZXJzKCksXG4gICAgICBIdW1hbml6ZVBpcGUsXG4gICAgICBTaG91bGRTaG93TW9QaXBlLFxuICAgICAgR2V0R3JvdXBJY29uUGlwZSxcbiAgICAgIEh1bWFuaXplQXBwTmFtZVBpcGUsXG4gICAgICBTaG9ydGVuVXNlck5hbWVQaXBlLFxuICAgICAgTWFwRnVuY3Rpb25QaXBlLFxuICAgICAgRGF0ZVBpcGUsXG4gICAgICBCeXRlc1BpcGVcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxDb21tb25Nb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IENvbW1vbk1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogQ29tbW9uTW9kdWxlLnByb3ZpZGVycygpXG4gICAgfTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzZXRUaGVtZSgnYnM0Jyk7XG4gIH1cbn1cbiJdfQ==
283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2NvbW1vbi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLElBQUksY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBdUIsUUFBUSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVB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WSxFQUFFO3dCQUNaLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIsMEJBQTBCO3dCQUMxQiwyQkFBMkI7d0JBQzNCLG1CQUFtQjt3QkFDbkIsK0JBQStCO3dCQUMvQiw0QkFBNEI7d0JBQzVCLGdCQUFnQjt3QkFDaEIsaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLG1CQUFtQjtxQkFDcEI7b0JBQ0QsU0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDO2lCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIGFzIE5nQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhTW9kdWxlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hcGknO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvdG9vbHRpcCc7XG5pbXBvcnQgeyBzZXRUaGVtZSB9IGZyb20gJ25neC1ib290c3RyYXAvdXRpbHMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEkxOG5Nb2R1bGUgfSBmcm9tICcuLi9pMThuL2kxOG4ubW9kdWxlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9pMThuL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFzc2V0TGlua1BpcGUgfSBmcm9tICcuL2Fzc2V0LWxpbmsucGlwZSc7XG5pbXBvcnQgeyBCeXRlc1BpcGUgfSBmcm9tICcuL2J5dGVzLnBpcGUnO1xuaW1wb3J0IHsgQzh5Q29tcG9uZW50T3V0bGV0IH0gZnJvbSAnLi9jb21wb25lbnQtb3V0bGV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJy4vZGF0ZS5waXBlJztcbmltcG9ydCB7IERyb3Bkb3duRGlyZWN0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi9kcm9wZG93bi1kaXJlY3Rpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEVtcHR5U3RhdGVDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS1jb250ZXh0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuL2Zvck9mLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBHZW5lcmljRmlsZUljb25QaXBlIH0gZnJvbSAnLi9nZW5lcmljLWZpbGUtaWNvbi5waXBlJztcbmltcG9ydCB7IEdldEdyb3VwSWNvblBpcGUgfSBmcm9tICcuL2dldC1ncm91cC1pY29uLnBpcGUnO1xuaW1wb3J0IHsgSHVtYW5pemVBcHBOYW1lUGlwZSB9IGZyb20gJy4vaHVtYW5pemUtYXBwLW5hbWUucGlwZSc7XG5pbXBvcnQgeyBIdW1hbml6ZVBpcGUgfSBmcm9tICcuL2h1bWFuaXplLnBpcGUnO1xuaW1wb3J0IHsgSWNvbkRpcmVjdGl2ZSB9IGZyb20gJy4vaWNvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWZBbGxvd2VkRGlyZWN0aXZlIH0gZnJvbSAnLi9pZi1hbGxvd2VkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMb2FkTW9yZUNvbXBvbmVudCB9IGZyb20gJy4vbG9hZC1tb3JlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9sb2FkaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXBGdW5jdGlvblBpcGUgfSBmcm9tICcuL21hcC1mdW5jdGlvbi5waXBlJztcbmltcG9ydCB7IE1hcmtkb3duVG9IdG1sUGlwZSB9IGZyb20gJy4vbWFya2Rvd24tdG8taHRtbC5waXBlJztcbmltcG9ydCB7IE1vTmFtZVBpcGUgfSBmcm9tICcuL21vLW5hbWUucGlwZSc7XG5pbXBvcnQgeyBOdW1iZXJQaXBlIH0gZnJvbSAnLi9udW1iZXIucGlwZSc7XG5pbXBvcnQgeyBPcGVyYXRpb25SZXN1bHRDb21wb25lbnQgfSBmcm9tICcuL29wZXJhdGlvbi1yZXN1bHQuY29tcG9uZW50JztcbmltcG9ydCB7IGhvb2tPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi9vdXRsZXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFByb2dyZXNzQmFyQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9ncmVzcy1iYXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNob3J0ZW5Vc2VyTmFtZVBpcGUgfSBmcm9tICcuL3Nob3J0ZW4tdXNlci1uYW1lLnBpcGUnO1xuaW1wb3J0IHsgU2hvdWxkU2hvd01vUGlwZSB9IGZyb20gJy4vc2hvdWxkLXNob3ctbW8ucGlwZSc7XG5pbXBvcnQgeyBTaG93SWZGaWx0ZXJQaXBlIH0gZnJvbSAnLi9zaG93LWlmLWZpbHRlci5waXBlJztcbmltcG9ydCB7IFNraXBMaW5rRGlyZWN0aXZlIH0gZnJvbSAnLi9za2lwLWxpbmsuZGlyZWN0aXZlJztcbmltcG9ydCB7IFN0cmluZ2lmeU9iamVjdFBpcGUgfSBmcm9tICcuL3N0cmluZ2lmeS1vYmplY3QucGlwZSc7XG5pbXBvcnQgeyBUYWJzZXRBcmlhRGlyZWN0aXZlIH0gZnJvbSAnLi90YWJzZXQtYXJpYS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGV4dGFyZWFBdXRvcmVzaXplRGlyZWN0aXZlIH0gZnJvbSAnLi90ZXh0YXJlYS1hdXRvcmVzaXplLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlck5hbWVJbml0aWFsc1BpcGUgfSBmcm9tICcuL3VzZXItbmFtZS1pbml0aWFscy5waXBlJztcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuL3VzZXItcHJlZmVyZW5jZXMvdXNlci1wcmVmZXJlbmNlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFZpcnR1YWxTY3JvbGxXaW5kb3dEaXJlY3RpdmUgfSBmcm9tICcuL3ZpcnR1YWwtc2Nyb2xsL3ZpcnR1YWwtc2Nyb2xsLXdpbmRvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVmlydHVhbFNjcm9sbGVyV3JhcHBlckNvbXBvbmVudCB9IGZyb20gJy4vdmlydHVhbC1zY3JvbGwvdmlydHVhbC1zY3JvbGxlci13cmFwcGVyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplU2VydmljZXMoXG4gIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gIHN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gIHVzZXJQcmVmZXJlbmNlczogVXNlclByZWZlcmVuY2VzU2VydmljZVxuKSB7XG4gIGNvbnN0IGluaXRpYWxpemUgPSAoKSA9PiB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmdMYW5ndWFnZSA9IHRyYW5zbGF0ZVNlcnZpY2UucXVlcnlTdHJpbmdMYW5nKCk7XG4gICAgY29uc3QgZmlyc3RMYW5ndWFnZSA9IHRyYW5zbGF0ZVNlcnZpY2UuZmlyc3RTdXBwb3J0ZWRMYW5ndWFnZSgpO1xuXG4gICAgLypcbiAgICAgIFRoZSA/bGFuZyBwYXJhbWV0ZXIgd2lsbCBwcmV2ZW50IHRoZSB1c2VyIHByZWZlcmVuY2UgbGFuZ3VhZ2UgZnJvbSBiZWluZyBhY3RpdmF0ZWRcbiAgICAqL1xuICAgIGlmIChxdWVyeVN0cmluZ0xhbmd1YWdlICYmIHRyYW5zbGF0ZVNlcnZpY2UuZ2V0U3VwcG9ydGVkKHF1ZXJ5U3RyaW5nTGFuZ3VhZ2UpKSB7XG4gICAgICB0cmFuc2xhdGVTZXJ2aWNlLnN3aXRjaFRvTGFuZ3VhZ2UocXVlcnlTdHJpbmdMYW5ndWFnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmN1cnJlbnRVc2VyXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCh1c2VyID0+IHVzZXIgJiYgdXNlci51c2VyTmFtZSksXG4gICAgICAgICAgZmlsdGVyKHUgPT4gISF1KSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB1c2VyUHJlZmVyZW5jZXMuZ2V0KCdsYW5ndWFnZScpKSxcbiAgICAgICAgICBzdGFydFdpdGgoZmlyc3RMYW5ndWFnZSksXG4gICAgICAgICAgZmlsdGVyKGxhbmcgPT4gISFsYW5nKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShsYW5nID0+IHtcbiAgICAgICAgICB0cmFuc2xhdGVTZXJ2aWNlLnN3aXRjaFRvTGFuZ3VhZ2UobGFuZyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGluaXRpYWxpemU7XG59XG5cbi8qKlxuICogQ29tbW9ubHkgdXNlZCBkaXJlY3RpdmVzLCBkYXRhIGFjY2VzcyBhbmQgdHJhbnNsYXRpb24uIFRoaXMgbW9kdWxlIGlzIHRoZSBzaGFyZWRcbiAqIG1vZHVsZSBhY3Jvc3MgYWxsIGNvcmUgY29tcG9uZW50cy4gSXQgc2hvdWxkIGJlIGltcG9ydGVkIGJ5IGRlZmF1bHQuXG4gKlxuICogQGV4cG9ydHMgSWNvbkRpcmVjdGl2ZSBBIGRpcmVjdGl2ZSB0byBzZXQgYSBjOHkgaWNvbiB3aXRoIFtjOHlJY29uXT1cIidyb2NrZXQnXCIuXG4gKiBAZXhwb3J0cyBPdXRsZXREaXJlY3RpdmUgQSBkaXJlY3RpdmUgd2hpY2ggYWxsb3dzIHRvIHNldCBET00gb3IgQW5ndWxhciB0ZW1wbGF0ZXMgKHVzZWQgZm9yIHVwZ3JhZGUpLlxuICogQGV4cG9ydHMgSTE4bk1vZHVsZSBUcmFuc2xhdGlvbiBtb2R1bGUuXG4gKiBAZXhwb3J0cyBOZ0NvbW1vbk1vZHVsZSBBbmd1bGFyIGNvbW1vbiBtb2R1bGUuXG4gKiBAZXhwb3J0cyBEYXRhTW9kdWxlIFRoZSBkYXRhIGxheWVyIHRvIGFsbG93IERJIHdpdGggQGM4eS9jbGllbnQuXG4gKiBAZXhwb3J0cyBIdW1hbml6ZUFwcE5hbWVQaXBlIEh1bWFuaXplIGFuIGFwcGxpY2F0aW9uIG5hbWUgZm9yIGRpc3BsYXkgaW4gZS5nLiB0aGUgYXBwIHN3aXRjaGVyIChlLmcuIGBkZXZpY2VtYW5hZ2VtZW50YCBiZWNvbWVzIGBEZXZpY2UgTWFuYWdlbWVudGApLlxuICogQGV4cG9ydHMgSHVtYW5pemVQaXBlIEh1bWFuaXplIGEgc3RyaW5nLCBlLmcuIGBjOHlfd2F0ZXJfdGVtcGVyYXR1cmVgIGJlY29tZXMgYFdhdGVyIFRlbXBlcmF0dXJlYC5cbiAqIEBleHBvcnRzIFNob3VsZFNob3dNb1BpcGUgQ2hlY2tzIGlmIHBhc3NlZCBtYW5hZ2VkIG9iamVjdCBpcyBkZXZpY2Ugb3IgZ3JvdXAgdHlwZS5cbiAqIEBleHBvcnRzIEdldEdyb3VwSWNvblBpcGUgR2V0cyBwcm9wZXIgZ3JvdXAgaWNvbi5cbiAqIEBleHBvcnRzIFNob3J0ZW5Vc2VyTmFtZVBpcGUgQWxsb3dzIGEgc2hvcnQgbmFtZS4gRS5nLiBgRm9vIEJhcmAgZ2V0cyBgRi4gQmFyYC5cbiAqIEBleHBvcnRzIFVzZXJOYW1lSW5pdGlhbHNQaXBlIEFsbG93cyB0aGUgaW5pdGlhbHMgZnJvbSB0aGUgbmFtZS4gRS5nLiBgRm9vIEJhcmAgZ2V0cyBgRkJgLlxuICogQGV4cG9ydHMgRm9yT2ZEaXJlY3RpdmUgQSBmb3JPZiBkaXJlY3RpdmUgbGlrZSBuZ0ZvciBidXQgd2l0aCBsb2FkLW1vcmUgZnVuY3Rpb24uXG4gKiBAZXhwb3J0cyBMb2FkTW9yZUNvbXBvbmVudCBBIGNvbXBvbmVudCB0byBsb2FkIG1vcmUgZGF0YSBmcm9tIGEgY2VydGFpbiBkYXRhLXNvdXJjZS5cbiAqIEBleHBvcnRzIFByb2dyZXNzQmFyQ29tcG9uZW50IERpc3BsYXlzIGVpdGhlciBkZWZpbmVkIG9yIHVuZGVmaW5lZCBwcm9ncmVzcy5cbiAqIEBleHBvcnRzIERyb3Bkb3duRGlyZWN0aW9uRGlyZWN0aXZlIERldGVybWluZXMgaWYgYSBkcm9wZG93biBvcGVucyB0byB0aGUgYm90dG9tIG9yIHRvIHRoZSB0b3AuXG4gKiBAZXhwb3J0cyBUZXh0YXJlYUF1dG9yZXNpemVEaXJlY3RpdmUgcmVzaXplcyBhIHRleHRhcmVhIGhlaWdodCBhcyB0aGUgdXNlciBpbnB1dHMuXG4gKiBAZXhwb3J0cyBPcGVyYXRpb25SZXN1bHRDb21wb25lbnQgZGlzcGxheXMgYW4gYW5pbWF0ZWQgc3ZnIGZvciBzdWNjZXNzIGFuZCBlcnJvciBvcGVyYXRpb25zLlxuICovXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgTmdDb21tb25Nb2R1bGUsXG4gICAgSTE4bk1vZHVsZSxcbiAgICBUb29sdGlwTW9kdWxlLFxuICAgIFNjcm9sbGluZ01vZHVsZSxcbiAgICBBc3NldExpbmtQaXBlLFxuICAgIEM4eUNvbXBvbmVudE91dGxldCxcbiAgICBIdW1hbml6ZUFwcE5hbWVQaXBlLFxuICAgIEljb25EaXJlY3RpdmUsXG4gICAgRGF0ZVBpcGUsXG4gICAgTG9hZGluZ0NvbXBvbmVudCxcbiAgICBFbXB0eVN0YXRlQ29tcG9uZW50LFxuICAgIEVtcHR5U3RhdGVDb250ZXh0RGlyZWN0aXZlLFxuICAgIEJ5dGVzUGlwZSxcbiAgICBVc2VyTmFtZUluaXRpYWxzUGlwZSxcbiAgICBTaG9ydGVuVXNlck5hbWVQaXBlLFxuICAgIEh1bWFuaXplUGlwZSxcbiAgICBJZkFsbG93ZWREaXJlY3RpdmUsXG4gICAgTnVtYmVyUGlwZSxcbiAgICBPcGVyYXRpb25SZXN1bHRDb21wb25lbnQsXG4gICAgTWFya2Rvd25Ub0h0bWxQaXBlLFxuICAgIE1vTmFtZVBpcGVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEVtcHR5U3RhdGVDb21wb25lbnQsXG4gICAgRW1wdHlTdGF0ZUNvbnRleHREaXJlY3RpdmUsXG4gICAgSWNvbkRpcmVjdGl2ZSxcbiAgICBPdXRsZXREaXJlY3RpdmUsXG4gICAgSTE4bk1vZHVsZSxcbiAgICBOZ0NvbW1vbk1vZHVsZSxcbiAgICBIdW1hbml6ZUFwcE5hbWVQaXBlLFxuICAgIEh1bWFuaXplUGlwZSxcbiAgICBTaG91bGRTaG93TW9QaXBlLFxuICAgIEdldEdyb3VwSWNvblBpcGUsXG4gICAgSWZBbGxvd2VkRGlyZWN0aXZlLFxuICAgIFNob3J0ZW5Vc2VyTmFtZVBpcGUsXG4gICAgVXNlck5hbWVJbml0aWFsc1BpcGUsXG4gICAgRm9yT2ZEaXJlY3RpdmUsXG4gICAgTG9hZE1vcmVDb21wb25lbnQsXG4gICAgTWFwRnVuY3Rpb25QaXBlLFxuICAgIFByb2dyZXNzQmFyQ29tcG9uZW50LFxuICAgIERhdGVQaXBlLFxuICAgIE51bWJlclBpcGUsXG4gICAgTG9hZGluZ0NvbXBvbmVudCxcbiAgICBEcm9wZG93bkRpcmVjdGlvbkRpcmVjdGl2ZSxcbiAgICBUZXh0YXJlYUF1dG9yZXNpemVEaXJlY3RpdmUsXG4gICAgVGFic2V0QXJpYURpcmVjdGl2ZSxcbiAgICBPcGVyYXRpb25SZXN1bHRDb21wb25lbnQsXG4gICAgVmlydHVhbFNjcm9sbGVyV3JhcHBlckNvbXBvbmVudCxcbiAgICBWaXJ0dWFsU2Nyb2xsV2luZG93RGlyZWN0aXZlLFxuICAgIEJ5dGVzUGlwZSxcbiAgICBTaG93SWZGaWx0ZXJQaXBlLFxuICAgIFNraXBMaW5rRGlyZWN0aXZlLFxuICAgIE1hcmtkb3duVG9IdG1sUGlwZSxcbiAgICBNb05hbWVQaXBlLFxuICAgIEdlbmVyaWNGaWxlSWNvblBpcGUsXG4gICAgU3RyaW5naWZ5T2JqZWN0UGlwZSxcbiAgICBBc3NldExpbmtQaXBlLFxuICAgIEM4eUNvbXBvbmVudE91dGxldFxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBPdXRsZXREaXJlY3RpdmUsXG4gICAgU2hvdWxkU2hvd01vUGlwZSxcbiAgICBHZXRHcm91cEljb25QaXBlLFxuICAgIEZvck9mRGlyZWN0aXZlLFxuICAgIExvYWRNb3JlQ29tcG9uZW50LFxuICAgIE1hcEZ1bmN0aW9uUGlwZSxcbiAgICBQcm9ncmVzc0JhckNvbXBvbmVudCxcbiAgICBEcm9wZG93bkRpcmVjdGlvbkRpcmVjdGl2ZSxcbiAgICBUZXh0YXJlYUF1dG9yZXNpemVEaXJlY3RpdmUsXG4gICAgVGFic2V0QXJpYURpcmVjdGl2ZSxcbiAgICBWaXJ0dWFsU2Nyb2xsZXJXcmFwcGVyQ29tcG9uZW50LFxuICAgIFZpcnR1YWxTY3JvbGxXaW5kb3dEaXJlY3RpdmUsXG4gICAgU2hvd0lmRmlsdGVyUGlwZSxcbiAgICBTa2lwTGlua0RpcmVjdGl2ZSxcbiAgICBHZW5lcmljRmlsZUljb25QaXBlLFxuICAgIFN0cmluZ2lmeU9iamVjdFBpcGVcbiAgXSxcbiAgcHJvdmlkZXJzOiBbQXNzZXRMaW5rUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgQ29tbW9uTW9kdWxlIHtcbiAgc3RhdGljIHByb3ZpZGVycygpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uRGF0YU1vZHVsZS5wcm92aWRlcnMoKSxcbiAgICAgIC8vIFRPRE86IG1heWJlIHdlIGNhbiB0aGluayBvZiBhIHdheSB0byByZW1vdmUgdGhpcyBDOFlfQVBQIGdsb2JhbFxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG4gICAgICBob29rT3B0aW9ucygod2luZG93IGFzIGFueSkuQzhZX0FQUCB8fCB7fSksXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICAgICAgdXNlRmFjdG9yeTogaW5pdGlhbGl6ZVNlcnZpY2VzLFxuICAgICAgICBkZXBzOiBbVHJhbnNsYXRlU2VydmljZSwgQXBwU3RhdGVTZXJ2aWNlLCBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlXSxcbiAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgIH0sXG4gICAgICAuLi5JMThuTW9kdWxlLnByb3ZpZGVycygpLFxuICAgICAgSHVtYW5pemVQaXBlLFxuICAgICAgU2hvdWxkU2hvd01vUGlwZSxcbiAgICAgIEdldEdyb3VwSWNvblBpcGUsXG4gICAgICBIdW1hbml6ZUFwcE5hbWVQaXBlLFxuICAgICAgU2hvcnRlblVzZXJOYW1lUGlwZSxcbiAgICAgIE1hcEZ1bmN0aW9uUGlwZSxcbiAgICAgIERhdGVQaXBlLFxuICAgICAgQnl0ZXNQaXBlXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBmb3JSb290KCk6IE1vZHVsZVdpdGhQcm92aWRlcnM8Q29tbW9uTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBDb21tb25Nb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IENvbW1vbk1vZHVsZS5wcm92aWRlcnMoKVxuICAgIH07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc2V0VGhlbWUoJ2JzNCcpO1xuICB9XG59XG4iXX0=
@@ -2,8 +2,8 @@ import { gettext } from '../i18n';
2
2
  export const internalApps = {
3
3
  administration: gettext('Administration'),
4
4
  cockpit: gettext('Cockpit'),
5
- devicemanagement: gettext('Device management'),
6
- 'digital-twin-manager': gettext('Digital twin manager'),
5
+ devicemanagement: gettext('Device Management'),
6
+ 'digital-twin-manager': gettext('Digital Twin Manager'),
7
7
  streaminganalytics: gettext('Streaming Analytics')
8
8
  };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVtYW5pemUtYXBwLW5hbWUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2NvbW1vbi9odW1hbml6ZS1hcHAtbmFtZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWxDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRztJQUMxQixjQUFjLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0lBQ3pDLE9BQU8sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQzNCLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztJQUM5QyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsc0JBQXNCLENBQUM7SUFDdkQsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixDQUFDO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bic7XG5cbmV4cG9ydCBjb25zdCBpbnRlcm5hbEFwcHMgPSB7XG4gIGFkbWluaXN0cmF0aW9uOiBnZXR0ZXh0KCdBZG1pbmlzdHJhdGlvbicpLFxuICBjb2NrcGl0OiBnZXR0ZXh0KCdDb2NrcGl0JyksXG4gIGRldmljZW1hbmFnZW1lbnQ6IGdldHRleHQoJ0RldmljZSBtYW5hZ2VtZW50JyksXG4gICdkaWdpdGFsLXR3aW4tbWFuYWdlcic6IGdldHRleHQoJ0RpZ2l0YWwgdHdpbiBtYW5hZ2VyJyksXG4gIHN0cmVhbWluZ2FuYWx5dGljczogZ2V0dGV4dCgnU3RyZWFtaW5nIEFuYWx5dGljcycpXG59IGFzIGNvbnN0O1xuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVtYW5pemUtYXBwLW5hbWUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2NvbW1vbi9odW1hbml6ZS1hcHAtbmFtZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWxDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRztJQUMxQixjQUFjLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0lBQ3pDLE9BQU8sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQzNCLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztJQUM5QyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsc0JBQXNCLENBQUM7SUFDdkQsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixDQUFDO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bic7XG5cbmV4cG9ydCBjb25zdCBpbnRlcm5hbEFwcHMgPSB7XG4gIGFkbWluaXN0cmF0aW9uOiBnZXR0ZXh0KCdBZG1pbmlzdHJhdGlvbicpLFxuICBjb2NrcGl0OiBnZXR0ZXh0KCdDb2NrcGl0JyksXG4gIGRldmljZW1hbmFnZW1lbnQ6IGdldHRleHQoJ0RldmljZSBNYW5hZ2VtZW50JyksXG4gICdkaWdpdGFsLXR3aW4tbWFuYWdlcic6IGdldHRleHQoJ0RpZ2l0YWwgVHdpbiBNYW5hZ2VyJyksXG4gIHN0cmVhbWluZ2FuYWx5dGljczogZ2V0dGV4dCgnU3RyZWFtaW5nIEFuYWx5dGljcycpXG59IGFzIGNvbnN0O1xuIl19
@@ -1,8 +1,8 @@
1
1
  import { Pipe } from '@angular/core';
2
2
  import { TranslateService } from '@ngx-translate/core';
3
+ import { find, get, isUndefined, negate } from 'lodash-es';
3
4
  import { of } from 'rxjs';
4
5
  import { gettext } from '../i18n/gettext';
5
- import { get, find, negate, isUndefined } from 'lodash-es';
6
6
  import { internalApps } from './humanize-app-name.model';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@ngx-translate/core";
@@ -45,9 +45,10 @@ export class HumanizeAppNamePipe {
45
45
  return Boolean(get(appNameOrApp, 'public'));
46
46
  }
47
47
  humanize(str = '') {
48
- const result = str.replace(/_/g, ' ').split('');
49
- result[0] = (result[0] || '').toUpperCase();
50
- return result.join('');
48
+ return str
49
+ .split('_')
50
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
51
+ .join(' ');
51
52
  }
52
53
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: HumanizeAppNamePipe, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
53
54
  static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: HumanizeAppNamePipe, isStandalone: true, name: "humanizeAppName" }); }
@@ -56,4 +57,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
56
57
  type: Pipe,
57
58
  args: [{ name: 'humanizeAppName', standalone: true }]
58
59
  }], ctorParameters: () => [{ type: i1.TranslateService }] });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVtYW5pemUtYXBwLW5hbWUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2h1bWFuaXplLWFwcC1uYW1lLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQUV6RDs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixZQUFvQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUFHLENBQUM7SUFFMUQsU0FBUyxDQUFDLFlBQW9DO1FBQzVDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU5QyxJQUFJLElBQUksQ0FBQztRQUNULElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ25DLElBQUksR0FBRyxPQUFPLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksR0FBRyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTyxVQUFVLENBQUMsWUFBb0M7UUFDckQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNuQyxHQUFHLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztZQUN6QixHQUFHLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztZQUNoQyxPQUFPLFlBQVksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUztZQUMzRCxPQUFPLENBQUMsV0FBVyxDQUFDO1NBQ3JCLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVPLGVBQWUsQ0FBQyxNQUFNO1FBQzVCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU8sV0FBVyxDQUFDLFlBQW1DO1FBQ3JELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU8sUUFBUSxDQUFDLEdBQUcsR0FBRyxFQUFFO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7OEdBekNVLG1CQUFtQjs0R0FBbkIsbUJBQW1COzsyRkFBbkIsbUJBQW1CO2tCQUQvQixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQXBwbGljYXRpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5pbXBvcnQgeyBnZXQsIGZpbmQsIG5lZ2F0ZSwgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgaW50ZXJuYWxBcHBzIH0gZnJvbSAnLi9odW1hbml6ZS1hcHAtbmFtZS5tb2RlbCc7XG5cbi8qXG4gKiBIdW1hbml6ZSBhbiBhcHBsaWNhdGlvbiBuYW1lIGFuZCB0cmFuc2xhdGVzIGl0LlxuICogVXNhZ2U6XG4gKiAgIGFwcE5hbWVPckFwcCB8IGh1bWFuaXplQXBwTmFtZSB8IGFzeW5jXG4gKi9cbkBQaXBlKHsgbmFtZTogJ2h1bWFuaXplQXBwTmFtZScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBIdW1hbml6ZUFwcE5hbWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkge31cblxuICB0cmFuc2Zvcm0oYXBwTmFtZU9yQXBwPzogSUFwcGxpY2F0aW9uIHwgc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBpZiAoIWFwcE5hbWVPckFwcCkge1xuICAgICAgcmV0dXJuIG9mKCcnKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBOYW1lID0gdGhpcy5nZXRBcHBOYW1lKGFwcE5hbWVPckFwcCk7XG5cbiAgICBsZXQgdGV4dDtcbiAgICBpZiAodGhpcy5pc1B1YmxpY0FwcChhcHBOYW1lT3JBcHApKSB7XG4gICAgICB0ZXh0ID0gZ2V0dGV4dCgne3sgYXBwTmFtZSB8IHRyYW5zbGF0ZSB9fSAocHVibGljKScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZXh0ID0gYXBwTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odGV4dCwgeyBhcHBOYW1lIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBcHBOYW1lKGFwcE5hbWVPckFwcD86IElBcHBsaWNhdGlvbiB8IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgYXBwTmFtZSA9IHRoaXMuZ2V0Rmlyc3REZWZpbmVkKFtcbiAgICAgIGdldChhcHBOYW1lT3JBcHAsICduYW1lJyksXG4gICAgICBnZXQoYXBwTmFtZU9yQXBwLCAnY29udGV4dFBhdGgnKSxcbiAgICAgIHR5cGVvZiBhcHBOYW1lT3JBcHAgPT09ICdzdHJpbmcnID8gYXBwTmFtZU9yQXBwIDogdW5kZWZpbmVkLFxuICAgICAgZ2V0dGV4dCgnPG5vIG5hbWU+JylcbiAgICBdKTtcbiAgICByZXR1cm4gaW50ZXJuYWxBcHBzW2FwcE5hbWVdIHx8IHRoaXMuaHVtYW5pemUoYXBwTmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGdldEZpcnN0RGVmaW5lZCh2YWx1ZXMpIHtcbiAgICByZXR1cm4gZmluZCh2YWx1ZXMsIG5lZ2F0ZShpc1VuZGVmaW5lZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1B1YmxpY0FwcChhcHBOYW1lT3JBcHA6IElBcHBsaWNhdGlvbiB8IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKGdldChhcHBOYW1lT3JBcHAsICdwdWJsaWMnKSk7XG4gIH1cblxuICBwcml2YXRlIGh1bWFuaXplKHN0ciA9ICcnKTogc3RyaW5nIHtcbiAgICBjb25zdCByZXN1bHQgPSBzdHIucmVwbGFjZSgvXy9nLCAnICcpLnNwbGl0KCcnKTtcbiAgICByZXN1bHRbMF0gPSAocmVzdWx0WzBdIHx8ICcnKS50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiByZXN1bHQuam9pbignJyk7XG4gIH1cbn1cbiJdfQ==
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVtYW5pemUtYXBwLW5hbWUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2h1bWFuaXplLWFwcC1uYW1lLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzRCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQUV6RDs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixZQUFvQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUFHLENBQUM7SUFFMUQsU0FBUyxDQUFDLFlBQW9DO1FBQzVDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU5QyxJQUFJLElBQUksQ0FBQztRQUNULElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ25DLElBQUksR0FBRyxPQUFPLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksR0FBRyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTyxVQUFVLENBQUMsWUFBb0M7UUFDckQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNuQyxHQUFHLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztZQUN6QixHQUFHLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztZQUNoQyxPQUFPLFlBQVksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUztZQUMzRCxPQUFPLENBQUMsV0FBVyxDQUFDO1NBQ3JCLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVPLGVBQWUsQ0FBQyxNQUFNO1FBQzVCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU8sV0FBVyxDQUFDLFlBQW1DO1FBQ3JELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU8sUUFBUSxDQUFDLEdBQUcsR0FBRyxFQUFFO1FBQ3ZCLE9BQU8sR0FBRzthQUNQLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDVixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQzs4R0ExQ1UsbUJBQW1COzRHQUFuQixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBRC9CLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElBcHBsaWNhdGlvbiB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGZpbmQsIGdldCwgaXNVbmRlZmluZWQsIG5lZ2F0ZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5pbXBvcnQgeyBpbnRlcm5hbEFwcHMgfSBmcm9tICcuL2h1bWFuaXplLWFwcC1uYW1lLm1vZGVsJztcblxuLypcbiAqIEh1bWFuaXplIGFuIGFwcGxpY2F0aW9uIG5hbWUgYW5kIHRyYW5zbGF0ZXMgaXQuXG4gKiBVc2FnZTpcbiAqICAgYXBwTmFtZU9yQXBwIHwgaHVtYW5pemVBcHBOYW1lIHwgYXN5bmNcbiAqL1xuQFBpcGUoeyBuYW1lOiAnaHVtYW5pemVBcHBOYW1lJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIEh1bWFuaXplQXBwTmFtZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7fVxuXG4gIHRyYW5zZm9ybShhcHBOYW1lT3JBcHA/OiBJQXBwbGljYXRpb24gfCBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGlmICghYXBwTmFtZU9yQXBwKSB7XG4gICAgICByZXR1cm4gb2YoJycpO1xuICAgIH1cblxuICAgIGNvbnN0IGFwcE5hbWUgPSB0aGlzLmdldEFwcE5hbWUoYXBwTmFtZU9yQXBwKTtcblxuICAgIGxldCB0ZXh0O1xuICAgIGlmICh0aGlzLmlzUHVibGljQXBwKGFwcE5hbWVPckFwcCkpIHtcbiAgICAgIHRleHQgPSBnZXR0ZXh0KCd7eyBhcHBOYW1lIHwgdHJhbnNsYXRlIH19IChwdWJsaWMpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRleHQgPSBhcHBOYW1lO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0ZXh0LCB7IGFwcE5hbWUgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFwcE5hbWUoYXBwTmFtZU9yQXBwPzogSUFwcGxpY2F0aW9uIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBhcHBOYW1lID0gdGhpcy5nZXRGaXJzdERlZmluZWQoW1xuICAgICAgZ2V0KGFwcE5hbWVPckFwcCwgJ25hbWUnKSxcbiAgICAgIGdldChhcHBOYW1lT3JBcHAsICdjb250ZXh0UGF0aCcpLFxuICAgICAgdHlwZW9mIGFwcE5hbWVPckFwcCA9PT0gJ3N0cmluZycgPyBhcHBOYW1lT3JBcHAgOiB1bmRlZmluZWQsXG4gICAgICBnZXR0ZXh0KCc8bm8gbmFtZT4nKVxuICAgIF0pO1xuICAgIHJldHVybiBpbnRlcm5hbEFwcHNbYXBwTmFtZV0gfHwgdGhpcy5odW1hbml6ZShhcHBOYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rmlyc3REZWZpbmVkKHZhbHVlcykge1xuICAgIHJldHVybiBmaW5kKHZhbHVlcywgbmVnYXRlKGlzVW5kZWZpbmVkKSk7XG4gIH1cblxuICBwcml2YXRlIGlzUHVibGljQXBwKGFwcE5hbWVPckFwcDogSUFwcGxpY2F0aW9uIHwgc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4oZ2V0KGFwcE5hbWVPckFwcCwgJ3B1YmxpYycpKTtcbiAgfVxuXG4gIHByaXZhdGUgaHVtYW5pemUoc3RyID0gJycpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHJcbiAgICAgIC5zcGxpdCgnXycpXG4gICAgICAubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkpXG4gICAgICAuam9pbignICcpO1xuICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9kYXNoYm9hcmQvZGFzaGJvYXJkLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXNoYm9hcmRDaGlsZENvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLWNoaWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDb21wb25lbnQgfSBmcm9tICcuL2Rhc2hib2FyZC5jb21wb25lbnQnO1xuXG4vKipcbiAqIERlc2NyaWJlcyBhIGxlZ2FjeSB3aWRnZXQuIFBsZWFzZSB1c2VcbiAqIHRoZSBwcm9wZXIgV2lkZ2V0IGludGVyZmFjZSBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeVdpZGdldCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgd2lkZ2V0LlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgY29tcG9uZW5JZFxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBVUkwgZm9yIGxlZ2FjeSBwbHVnaW5zLlxuICAgKiBAZGVwcmVjYXRlZDogT25seSB1c2VkIGZvciBhbmd1bGFyanMgcGx1Z2lucy5cbiAgICovXG4gIHRlbXBsYXRlVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlnIHRlbXBsYXRlIFVSTCBmb3IgbGVnYWN5IHBsdWdpbnMuXG4gICAqIEBkZXByZWNhdGVkOiBPbmx5IHVzZWQgZm9yIGFuZ3VsYXJqcyBwbHVnaW5zLlxuICAgKi9cbiAgY29uZmlnVGVtcGxhdGVVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWcgY29tcG9uZW50IG5hbWUuXG4gICAqIEBkZXByZWNhdGVkOiBPbmx5IHVzZWQgZm9yIGFuZ3VsYXJqcyBwbHVnaW5zLlxuICAgKi9cbiAgY29uZmlnQ29tcG9uZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd2lkZ2V0IGNvbXBvbmVudCBuYW1lLlxuICAgKiBAZGVwcmVjYXRlZDogT25seSB1c2VkIGZvciBhbmd1bGFyanMgcGx1Z2lucy5cbiAgICovXG4gIHdpZGdldENvbXBvbmVudD86IHN0cmluZztcbiAgdHJhbnNmb3JtQ29uZmlnV2l0aENvbnRleHQ/OiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEgd2lkZ2V0IGlzIGEgY2hpbGQgb24gYSBkYXNoYm9hcmQgd2hpY2ggY2FuIGJlIGFkZGVkIGFuZCBjb25maWd1cmVkXG4gKiBieSB0aGUgdXNlci4gQSB3aWRnZXQgY2FuIGJlIGRlZmluZWQgYnkgdGhlIFtbRHluYW1pY0NvbXBvbmVudERlZmluaXRpb25dXVxuICogYnkgYW55IG1vZHVsZSBvZiBhbiBhcHBsaWNhdGlvbi4gVGhldyB3aWRnZXQgaXRzZWxmIHN0b3JlcyBiZXNpZGUgaXQnc1xuICogbGluayAoY29tcG9uZW50SWQpIHRvIHRoZSBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbiB0aGUgaW5mb3JtYXRpb25cbiAqIGFib3V0IHRoZSB0aXRsZSwgbGF5b3V0IChjbGFzc2VzKSBhbmQgdGhlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2lkZ2V0IGV4dGVuZHMgTGVnYWN5V2lkZ2V0IHtcbiAgLyoqXG4gICAqIHggZGltZW5zaW9uIHBhcmFtZXRlcnNcbiAgICovXG4gIF94PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiB5IGRpbWVuc2lvbiBwYXJhbWV0ZXJzXG4gICAqL1xuICBfeT86IG51bWJlcjtcblxuICAvKipcbiAgICogd2lkdGggZGltZW5zaW9uIHBhcmFtZXRlcnNcbiAgICovXG4gIF93aWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogaGVpZ2h0IGRpbWVuc2lvbiBwYXJhbWV0ZXJzXG4gICAqL1xuICBfaGVpZ2h0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGNvbXBvbmVudCBpZCB0byBmaW5kIHRoZSBjb21wb25lbnQgaW4gdGhlXG4gICAqIEhPT0tfQ09NUE9ORU5UUyBkeW5hbWljLWNvbXBvbmVudCBpbXBsZW1lbnRhdGlvbi5cbiAgICovXG4gIGNvbXBvbmVudElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcmFuZG9tIGtleSBmb3Igc2F2aW5nIGl0IHRvIHRoZSBvYmplY3QuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9mIHRoZSB3aWRnZXQuXG4gICAqL1xuICBjb25maWc6IGFueTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgdGl0bGUgb2YgdGhlIHdpZGdldC5cbiAgICovXG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGljaCBjbGFzc2VzIHNob3VsZCBiZSBhZGRlZC5cbiAgICovXG4gIGNsYXNzZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbn1cblxuLyoqXG4gKiBJcyB1c2VkIHRvIGNvbmZpZ3VyZSBhIHdpZGdldCBkYXNoYm9hcmQuIEl0IGFsbG93c1xuICogdG8gc2V0IGNlcnRhaW4gcGFyYW1ldGVyIHRoYXQgY2hhbmdlIHRoZSBiZWhhdmlvclxuICogb2YgdGhlIGRhc2hib2FyZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBJZiB0aGUgZGFzaGJvYXJkIGlzIGZyb3plbiwgdGhlIHVzZXIgY2FuJ3QgZWRpdCBpdCBhbnkgbW9yZS5cbiAgICogSG93ZXZlciBoZSBjYW4gZGVsZXRlIGl0IGFuZCBjaGFuZ2UgdGhlIGZyb3plbiBzdGF0ZS5cbiAgICovXG4gIGlzRnJvemVuOiBib29sZWFuO1xuICAvKipcbiAgICogSWYgdGhlIGRhc2hib2FyZCBpcyBkaXNhYmxlZCwgbm8gY2hhbmdlcyBvbiB0aGlzIGRhc2hib2FyZCBhcmUgYWxsb3dlZC5cbiAgICogRS5nLiBiZWNhdXNlIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSB0aGUgcmlnaHRzLlxuICAgKi9cbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBnYXAgYmV0d2VlbiBlYWNoIHdpZGdldCBhcyBwaXhlbFxuICAgKi9cbiAgd2lkZ2V0TWFyZ2luOiBudW1iZXI7XG4gIC8qKlxuICAgKiBTaG91bGQgdGhlIGFwcGxpY2F0aW9uIGNoZWNrIGlmIGEgdHJhbnNsYXRpb24gaXMgcHJlc2VudCBmb3IgdGhlXG4gICAqIHdpZGdldCB0aXRsZS5cbiAgICovXG4gIHRyYW5zbGF0ZVdpZGdldFRpdGxlOiBib29sZWFuO1xuICAvKipcbiAgICogTmV3IGFkZGVkIHdpZGdldHMgZ2V0IHRoYXQgaGVpZ2h0IGF0dGFjaGVkIChpbiBjc3MgZ3JpZCBjb2x1bW5zIHVuaXRzKVxuICAgKi9cbiAgZGVmYXVsdEhlaWdodDogbnVtYmVyO1xuICAvKipcbiAgICogTmV3IGFkZGVkIHdpZGdldHMgZ2V0IHRoYXQgd2lkdGggYXR0YWNoZWQgKGluIGNzcyBncmlkIHJvdyB1bml0cylcbiAgICovXG4gIGRlZmF1bHRXaWR0aDogbnVtYmVyO1xuICAvKipcbiAgICogU2hvdWxkIHRoZSB1c2VyIGJlIGFibGUgdG8gc3dpdGNoIHRvIGZ1bGxzY3JlZW4gbW9kZS5cbiAgICovXG4gIGFsbG93RnVsbHNjcmVlbjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEEgZ2xvYmFsIHRpdGxlIHRoYXQgaXMgdXNlZCBmb3IgdGhpcyBkYXNoYm9hcmQuXG4gICAqL1xuICB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgc2V0IHRvIGZhbHNlLCB0aGUgZGFzaGJvYXJkIGNhbiBub3QgYmUgY29waWVkIChkZWZhdWx0IHRydWUpLlxuICAgKi9cbiAgY2FuQ29weT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byBmYWxzZSwgdGhlIGRhc2hib2FyZCBjYW4gbm90IGJlIHJlbW92ZWQgKGRlZmF1bHQgdHJ1ZSkuXG4gICAqL1xuICBjYW5EZWxldGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZGFzaGJvYXJkIGlzIGxvYWRpbmcuXG4gICAqL1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIGNvbHVtbnMgb24gdGhhdCBkYXNoYm9hcmQuXG4gICAqIENhbiBiZSBmcmVlbHkgY2hvc2VuLCBidXQgcHJvZHVjdCB1c2VzIGVpdGhlciAxMiBvciAyNC5cbiAgICovXG4gIGNvbHVtbnM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkQ2hpbGREaW1lbnNpb24ge1xuICB4PzogbnVtYmVyO1xuICB5PzogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRDaGlsZFJlc2l6ZURpbWVuc2lvbiB7XG4gIHBvaW50ZXI6IHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICB9O1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRDaGlsZEFycmFuZ2VtZW50IHtcbiAgY3VycmVudDogRGFzaGJvYXJkQ2hpbGREaW1lbnNpb247XG4gIHNjYW46IERhc2hib2FyZENoaWxkQ29tcG9uZW50W107XG4gIHNwYWNpbmc6IG51bWJlcjtcbiAgb3JpZ2luOiBEYXNoYm9hcmRDaGlsZERpbWVuc2lvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRDaGFuZ2Uge1xuICBzb3VyY2U6IERhc2hib2FyZENoaWxkQ29tcG9uZW50O1xuICBjaGlsZHJlbjogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaWRnZXRDaGFuZ2Uge1xuICB3aWRnZXQ6IFdpZGdldDtcbiAgZGFzaGJvYXJkOiBEYXNoYm9hcmRDb21wb25lbnQ7XG4gIHNvdXJjZTogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQ7XG59XG4iXX0=
1
+ export const NEW_DASHBOARD_QUERY_PARAM = 'newDashboard';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9kYXNoYm9hcmQvZGFzaGJvYXJkLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdNQSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXNoYm9hcmRDaGlsZENvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLWNoaWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDb21wb25lbnQgfSBmcm9tICcuL2Rhc2hib2FyZC5jb21wb25lbnQnO1xuXG4vKipcbiAqIERlc2NyaWJlcyBhIGxlZ2FjeSB3aWRnZXQuIFBsZWFzZSB1c2VcbiAqIHRoZSBwcm9wZXIgV2lkZ2V0IGludGVyZmFjZSBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeVdpZGdldCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgd2lkZ2V0LlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgY29tcG9uZW5JZFxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBVUkwgZm9yIGxlZ2FjeSBwbHVnaW5zLlxuICAgKiBAZGVwcmVjYXRlZDogT25seSB1c2VkIGZvciBhbmd1bGFyanMgcGx1Z2lucy5cbiAgICovXG4gIHRlbXBsYXRlVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlnIHRlbXBsYXRlIFVSTCBmb3IgbGVnYWN5IHBsdWdpbnMuXG4gICAqIEBkZXByZWNhdGVkOiBPbmx5IHVzZWQgZm9yIGFuZ3VsYXJqcyBwbHVnaW5zLlxuICAgKi9cbiAgY29uZmlnVGVtcGxhdGVVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWcgY29tcG9uZW50IG5hbWUuXG4gICAqIEBkZXByZWNhdGVkOiBPbmx5IHVzZWQgZm9yIGFuZ3VsYXJqcyBwbHVnaW5zLlxuICAgKi9cbiAgY29uZmlnQ29tcG9uZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd2lkZ2V0IGNvbXBvbmVudCBuYW1lLlxuICAgKiBAZGVwcmVjYXRlZDogT25seSB1c2VkIGZvciBhbmd1bGFyanMgcGx1Z2lucy5cbiAgICovXG4gIHdpZGdldENvbXBvbmVudD86IHN0cmluZztcbiAgdHJhbnNmb3JtQ29uZmlnV2l0aENvbnRleHQ/OiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEgd2lkZ2V0IGlzIGEgY2hpbGQgb24gYSBkYXNoYm9hcmQgd2hpY2ggY2FuIGJlIGFkZGVkIGFuZCBjb25maWd1cmVkXG4gKiBieSB0aGUgdXNlci4gQSB3aWRnZXQgY2FuIGJlIGRlZmluZWQgYnkgdGhlIFtbRHluYW1pY0NvbXBvbmVudERlZmluaXRpb25dXVxuICogYnkgYW55IG1vZHVsZSBvZiBhbiBhcHBsaWNhdGlvbi4gVGhldyB3aWRnZXQgaXRzZWxmIHN0b3JlcyBiZXNpZGUgaXQnc1xuICogbGluayAoY29tcG9uZW50SWQpIHRvIHRoZSBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbiB0aGUgaW5mb3JtYXRpb25cbiAqIGFib3V0IHRoZSB0aXRsZSwgbGF5b3V0IChjbGFzc2VzKSBhbmQgdGhlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2lkZ2V0IGV4dGVuZHMgTGVnYWN5V2lkZ2V0IHtcbiAgLyoqXG4gICAqIHggZGltZW5zaW9uIHBhcmFtZXRlcnNcbiAgICovXG4gIF94PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiB5IGRpbWVuc2lvbiBwYXJhbWV0ZXJzXG4gICAqL1xuICBfeT86IG51bWJlcjtcblxuICAvKipcbiAgICogd2lkdGggZGltZW5zaW9uIHBhcmFtZXRlcnNcbiAgICovXG4gIF93aWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogaGVpZ2h0IGRpbWVuc2lvbiBwYXJhbWV0ZXJzXG4gICAqL1xuICBfaGVpZ2h0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGNvbXBvbmVudCBpZCB0byBmaW5kIHRoZSBjb21wb25lbnQgaW4gdGhlXG4gICAqIEhPT0tfQ09NUE9ORU5UUyBkeW5hbWljLWNvbXBvbmVudCBpbXBsZW1lbnRhdGlvbi5cbiAgICovXG4gIGNvbXBvbmVudElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcmFuZG9tIGtleSBmb3Igc2F2aW5nIGl0IHRvIHRoZSBvYmplY3QuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9mIHRoZSB3aWRnZXQuXG4gICAqL1xuICBjb25maWc6IGFueTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgdGl0bGUgb2YgdGhlIHdpZGdldC5cbiAgICovXG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGljaCBjbGFzc2VzIHNob3VsZCBiZSBhZGRlZC5cbiAgICovXG4gIGNsYXNzZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbn1cblxuLyoqXG4gKiBJcyB1c2VkIHRvIGNvbmZpZ3VyZSBhIHdpZGdldCBkYXNoYm9hcmQuIEl0IGFsbG93c1xuICogdG8gc2V0IGNlcnRhaW4gcGFyYW1ldGVyIHRoYXQgY2hhbmdlIHRoZSBiZWhhdmlvclxuICogb2YgdGhlIGRhc2hib2FyZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBJZiB0aGUgZGFzaGJvYXJkIGlzIGZyb3plbiwgdGhlIHVzZXIgY2FuJ3QgZWRpdCBpdCBhbnkgbW9yZS5cbiAgICogSG93ZXZlciBoZSBjYW4gZGVsZXRlIGl0IGFuZCBjaGFuZ2UgdGhlIGZyb3plbiBzdGF0ZS5cbiAgICovXG4gIGlzRnJvemVuOiBib29sZWFuO1xuICAvKipcbiAgICogSWYgdGhlIGRhc2hib2FyZCBpcyBkaXNhYmxlZCwgbm8gY2hhbmdlcyBvbiB0aGlzIGRhc2hib2FyZCBhcmUgYWxsb3dlZC5cbiAgICogRS5nLiBiZWNhdXNlIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSB0aGUgcmlnaHRzLlxuICAgKi9cbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBnYXAgYmV0d2VlbiBlYWNoIHdpZGdldCBhcyBwaXhlbFxuICAgKi9cbiAgd2lkZ2V0TWFyZ2luOiBudW1iZXI7XG4gIC8qKlxuICAgKiBTaG91bGQgdGhlIGFwcGxpY2F0aW9uIGNoZWNrIGlmIGEgdHJhbnNsYXRpb24gaXMgcHJlc2VudCBmb3IgdGhlXG4gICAqIHdpZGdldCB0aXRsZS5cbiAgICovXG4gIHRyYW5zbGF0ZVdpZGdldFRpdGxlOiBib29sZWFuO1xuICAvKipcbiAgICogTmV3IGFkZGVkIHdpZGdldHMgZ2V0IHRoYXQgaGVpZ2h0IGF0dGFjaGVkIChpbiBjc3MgZ3JpZCBjb2x1bW5zIHVuaXRzKVxuICAgKi9cbiAgZGVmYXVsdEhlaWdodDogbnVtYmVyO1xuICAvKipcbiAgICogTmV3IGFkZGVkIHdpZGdldHMgZ2V0IHRoYXQgd2lkdGggYXR0YWNoZWQgKGluIGNzcyBncmlkIHJvdyB1bml0cylcbiAgICovXG4gIGRlZmF1bHRXaWR0aDogbnVtYmVyO1xuICAvKipcbiAgICogU2hvdWxkIHRoZSB1c2VyIGJlIGFibGUgdG8gc3dpdGNoIHRvIGZ1bGxzY3JlZW4gbW9kZS5cbiAgICovXG4gIGFsbG93RnVsbHNjcmVlbjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEEgZ2xvYmFsIHRpdGxlIHRoYXQgaXMgdXNlZCBmb3IgdGhpcyBkYXNoYm9hcmQuXG4gICAqL1xuICB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgc2V0IHRvIGZhbHNlLCB0aGUgZGFzaGJvYXJkIGNhbiBub3QgYmUgY29waWVkIChkZWZhdWx0IHRydWUpLlxuICAgKi9cbiAgY2FuQ29weT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byBmYWxzZSwgdGhlIGRhc2hib2FyZCBjYW4gbm90IGJlIHJlbW92ZWQgKGRlZmF1bHQgdHJ1ZSkuXG4gICAqL1xuICBjYW5EZWxldGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZGFzaGJvYXJkIGlzIGxvYWRpbmcuXG4gICAqL1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIGNvbHVtbnMgb24gdGhhdCBkYXNoYm9hcmQuXG4gICAqIENhbiBiZSBmcmVlbHkgY2hvc2VuLCBidXQgcHJvZHVjdCB1c2VzIGVpdGhlciAxMiBvciAyNC5cbiAgICovXG4gIGNvbHVtbnM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkQ2hpbGREaW1lbnNpb24ge1xuICB4PzogbnVtYmVyO1xuICB5PzogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRDaGlsZFJlc2l6ZURpbWVuc2lvbiB7XG4gIHBvaW50ZXI6IHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICB9O1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRDaGlsZEFycmFuZ2VtZW50IHtcbiAgY3VycmVudDogRGFzaGJvYXJkQ2hpbGREaW1lbnNpb247XG4gIHNjYW46IERhc2hib2FyZENoaWxkQ29tcG9uZW50W107XG4gIHNwYWNpbmc6IG51bWJlcjtcbiAgb3JpZ2luOiBEYXNoYm9hcmRDaGlsZERpbWVuc2lvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRDaGFuZ2Uge1xuICBzb3VyY2U6IERhc2hib2FyZENoaWxkQ29tcG9uZW50O1xuICBjaGlsZHJlbjogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaWRnZXRDaGFuZ2Uge1xuICB3aWRnZXQ6IFdpZGdldDtcbiAgZGFzaGJvYXJkOiBEYXNoYm9hcmRDb21wb25lbnQ7XG4gIHNvdXJjZTogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBORVdfREFTSEJPQVJEX1FVRVJZX1BBUkFNID0gJ25ld0Rhc2hib2FyZCc7XG4iXX0=