nuxeo-development-framework 4.4.9 → 4.5.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.
@@ -107,7 +107,7 @@ export class NotificationsButtonComponent extends BaseNotification {
107
107
  }
108
108
  }
109
109
  NotificationsButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NotificationsButtonComponent, deps: [{ token: i0.Injector }, { token: i1.TranslationService }, { token: i2.CustomToastrService }, { token: i0.ChangeDetectorRef }, { token: NOTIFICATIONS_LIST_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
110
- NotificationsButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: NotificationsButtonComponent, selector: "app-notifications-button", inputs: { styleClass: "styleClass", badgeOptions: "badgeOptions", shouldMarkAsUnread: "shouldMarkAsUnread", ignoredToastEvents: "ignoredToastEvents" }, outputs: { listItemClick: "listItemClick", openSettings: "openSettings", openNotifications: "openNotifications", onNotification: "onNotification" }, host: { classAttribute: "inline-flex justify-center items-center notification-button" }, queries: [{ propertyName: "customIconTemplate", first: true, predicate: NOTIFICATION_ICON, descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<button\r\n *ngIf=\"panelMode === panelModeEnum.panel\"\r\n [matMenuTriggerFor]=\"notifications\"\r\n [matBadge]=\"newNotificationCount$ | async\"\r\n [matBadgeHidden]=\"!(showBadge$ | async)\"\r\n [matBadgeSize]=\"badgeOptions.size\"\r\n [matBadgeColor]=\"badgeOptions.color\"\r\n [matBadgePosition]=\"badgeOptions.position\"\r\n [class]=\"styleClass\"\r\n (menuOpened)=\"markAllAsUnread()\"\r\n>\r\n <ng-container [ngTemplateOutlet]=\"customIconTemplate || defaultIconTemplate\">\r\n </ng-container>\r\n</button>\r\n\r\n<mat-menu #notifications=\"matMenu\" class=\"notification-list-panel\">\r\n <ng-template matMenuContent>\r\n <app-notifications-list\r\n (itemClicked)=\"listItemClick.emit($event); notifications.closed.emit()\"\r\n (openSettings)=\"openSettings.emit($event); notifications.closed.emit()\"\r\n (openNotifications)=\"openNotifications.emit($event); notifications.closed.emit()\"\r\n (markAllRead)=\"refreshUnreadCount()\"\r\n ></app-notifications-list>\r\n </ng-template>\r\n <div class=\"notification-list-panel__footer flex justify-center\">\r\n <ng-content select=\"[notifications-footer]\"></ng-content>\r\n </div>\r\n</mat-menu>\r\n\r\n<ng-container *ngIf=\"panelMode === panelModeEnum.sidebar\">\r\n <button\r\n [matBadge]=\"newNotificationCount$ | async\"\r\n [matBadgeHidden]=\"!(showBadge$ | async)\"\r\n [matBadgeSize]=\"badgeOptions.size\"\r\n [matBadgeColor]=\"badgeOptions.color\"\r\n [matBadgePosition]=\"badgeOptions.position\"\r\n [class]=\"styleClass\"\r\n (click)=\"toggleSideBar(); markAllAsUnread()\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"customIconTemplate || defaultIconTemplate\">\r\n </ng-container>\r\n </button>\r\n <app-notifications-sidebar\r\n [(visible)]=\"isSidebarOpened\"\r\n (visibleChange)=\"refreshUnreadCount()\"\r\n [position]=\"sidebarPosition$ | async\"\r\n >\r\n <ng-template appNotificationSidebarContent>\r\n <app-notifications-list\r\n class=\"notifications-sidebar\"\r\n (itemClicked)=\"\r\n listItemClick.emit($event); toggleSideBar(false); refreshUnreadCount()\r\n \"\r\n (openSettings)=\"openSettings.emit($event); toggleSideBar(false)\"\r\n (openNotifications)=\"openNotifications.emit($event); toggleSideBar(false)\"\r\n (markAllRead)=\"refreshUnreadCount()\"\r\n ></app-notifications-list>\r\n </ng-template>\r\n </app-notifications-sidebar>\r\n</ng-container>\r\n\r\n<ng-template #defaultIconTemplate>\r\n <i class=\"bi bi-bell bell\"></i>\r\n</ng-template>\r\n", styles: [".notification-button{font-size:var(--not-btn-font-size, 1.5rem);width:var(--not-btn-width, 40px)}.notification-list-panel{--width: var(--nos-panel-width, min(80vw, 450px));width:var(--width);border-radius:var(--nos-panel-radius, 5px);overflow:hidden;-webkit-overflow-scrolling:touch;outline:0;background:var(--nos-panel-background, #fff)}.notification-list-panel.mat-menu-panel{max-width:var(--width);max-height:var(--nos-panel-max-height, var(--height))}.notification-list-panel__navigate-btn{background:var(--not-btn-background, transparent);border-radius:var(--not-btn-radius, 5px);padding:var(--not-btn-padding, .5rem 1rem);margin:var(--not-btn-margin, .5rem 0);color:var(--not-btn-color, currentColor);width:var(--not-btn-width, 90%)}.notification-list-panel__navigate-btn:hover{--not-btn-background: var(--not-btn-hover-background, #f0f0f0);--not-btn-color: var(--not-btn-hover-color);-webkit-text-decoration:var(--not-btn-decoration, none);text-decoration:var(--not-btn-decoration, none)}.notification-list-panel__navigate-btn:active{--not-btn-background: var(--not-btn-active-background, #e2e2e2);--not-btn-color: var(--not-btn-active-color)}.notifications-sidebar{--nto-list-header-padding: var(--sidebar-list-header-padding , 1rem);--nto-list-height: var(--sidebar-list-height , calc(100vh - 100px))}\n"], components: [{ type: i3.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4.NotificationsListComponent, selector: "app-notifications-list", outputs: ["openSettings", "openNotifications"] }, { type: i5.NotificationsSidebarComponent, selector: "app-notifications-sidebar", inputs: ["appendToBody", "clearOnCLose", "visible", "position"], outputs: ["visibleChange", "onShow", "onHide"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i7.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgePosition", "matBadgeSize", "matBadgeColor", "matBadgeOverlap", "matBadgeDescription", "matBadgeHidden", "matBadge"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.MatMenuContent, selector: "ng-template[matMenuContent]" }, { type: i8.NotificationSidebarContentDirective, selector: "[appNotificationSidebarContent]" }], pipes: { "async": i6.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
110
+ NotificationsButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: NotificationsButtonComponent, selector: "app-notifications-button", inputs: { styleClass: "styleClass", badgeOptions: "badgeOptions", shouldMarkAsUnread: "shouldMarkAsUnread", ignoredToastEvents: "ignoredToastEvents" }, outputs: { listItemClick: "listItemClick", openSettings: "openSettings", openNotifications: "openNotifications", onNotification: "onNotification" }, host: { classAttribute: "inline-flex justify-center items-center notification-button" }, queries: [{ propertyName: "customIconTemplate", first: true, predicate: NOTIFICATION_ICON, descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<button\r\n *ngIf=\"panelMode === panelModeEnum.panel\"\r\n [matMenuTriggerFor]=\"notifications\"\r\n [matBadge]=\"newNotificationCount$ | async\"\r\n [matBadgeHidden]=\"!(showBadge$ | async)\"\r\n [matBadgeSize]=\"badgeOptions.size\"\r\n [matBadgeColor]=\"badgeOptions.color\"\r\n [matBadgePosition]=\"badgeOptions.position\"\r\n [class]=\"styleClass\"\r\n (menuOpened)=\"markAllAsUnread()\"\r\n>\r\n <ng-container [ngTemplateOutlet]=\"customIconTemplate || defaultIconTemplate\">\r\n </ng-container>\r\n</button>\r\n\r\n<mat-menu #notifications=\"matMenu\" class=\"notification-list-panel\">\r\n <ng-template matMenuContent>\r\n <app-notifications-list\r\n (itemClicked)=\"listItemClick.emit($event); notifications.closed.emit()\"\r\n (openSettings)=\"openSettings.emit($event); notifications.closed.emit()\"\r\n (openNotifications)=\"openNotifications.emit($event); notifications.closed.emit()\"\r\n (markAllRead)=\"refreshUnreadCount()\"\r\n ></app-notifications-list>\r\n </ng-template>\r\n <div class=\"notification-list-panel__footer flex justify-center\">\r\n <ng-content select=\"[notifications-footer]\"></ng-content>\r\n </div>\r\n</mat-menu>\r\n\r\n<ng-container *ngIf=\"panelMode === panelModeEnum.sidebar\">\r\n <button\r\n [matBadge]=\"newNotificationCount$ | async\"\r\n [matBadgeHidden]=\"!(showBadge$ | async)\"\r\n [matBadgeSize]=\"badgeOptions.size\"\r\n [matBadgeColor]=\"badgeOptions.color\"\r\n [matBadgePosition]=\"badgeOptions.position\"\r\n [class]=\"styleClass\"\r\n (click)=\"toggleSideBar(); markAllAsUnread()\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"customIconTemplate || defaultIconTemplate\">\r\n </ng-container>\r\n </button>\r\n <app-notifications-sidebar\r\n [(visible)]=\"isSidebarOpened\"\r\n (visibleChange)=\"refreshUnreadCount()\"\r\n [position]=\"sidebarPosition$ | async\"\r\n >\r\n <ng-template appNotificationSidebarContent>\r\n <app-notifications-list\r\n class=\"notifications-sidebar\"\r\n (itemClicked)=\"\r\n listItemClick.emit($event); toggleSideBar(false); refreshUnreadCount()\r\n \"\r\n (openSettings)=\"openSettings.emit($event); toggleSideBar(false)\"\r\n (openNotifications)=\"openNotifications.emit($event); toggleSideBar(false)\"\r\n (markAllRead)=\"refreshUnreadCount()\"\r\n ></app-notifications-list>\r\n </ng-template>\r\n </app-notifications-sidebar>\r\n</ng-container>\r\n\r\n<ng-template #defaultIconTemplate>\r\n <i class=\"bi bi-bell bell\"></i>\r\n</ng-template>\r\n", styles: [".notification-button{font-size:var(--not-btn-font-size, 1.5rem);width:var(--not-btn-width, 40px)}.notification-button .mat-badge-content{text-overflow:unset;width:18px;height:18px;line-height:18px}.notification-list-panel{--width: var(--nos-panel-width, min(80vw, 450px));width:var(--width);border-radius:var(--nos-panel-radius, 5px);overflow:hidden;-webkit-overflow-scrolling:touch;outline:0;background:var(--nos-panel-background, #fff)}.notification-list-panel.mat-menu-panel{max-width:var(--width);max-height:var(--nos-panel-max-height, var(--height))}.notification-list-panel__navigate-btn{background:var(--not-btn-background, transparent);border-radius:var(--not-btn-radius, 5px);padding:var(--not-btn-padding, .5rem 1rem);margin:var(--not-btn-margin, .5rem 0);color:var(--not-btn-color, currentColor);width:var(--not-btn-width, 90%)}.notification-list-panel__navigate-btn:hover{--not-btn-background: var(--not-btn-hover-background, #f0f0f0);--not-btn-color: var(--not-btn-hover-color);-webkit-text-decoration:var(--not-btn-decoration, none);text-decoration:var(--not-btn-decoration, none)}.notification-list-panel__navigate-btn:active{--not-btn-background: var(--not-btn-active-background, #e2e2e2);--not-btn-color: var(--not-btn-active-color)}.notifications-sidebar{--nto-list-header-padding: var(--sidebar-list-header-padding, 1rem);--nto-list-height: var(--sidebar-list-height, calc(100vh - 100px))}\n"], components: [{ type: i3.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4.NotificationsListComponent, selector: "app-notifications-list", outputs: ["openSettings", "openNotifications"] }, { type: i5.NotificationsSidebarComponent, selector: "app-notifications-sidebar", inputs: ["appendToBody", "clearOnCLose", "visible", "position"], outputs: ["visibleChange", "onShow", "onHide"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i7.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgePosition", "matBadgeSize", "matBadgeColor", "matBadgeOverlap", "matBadgeDescription", "matBadgeHidden", "matBadge"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.MatMenuContent, selector: "ng-template[matMenuContent]" }, { type: i8.NotificationSidebarContentDirective, selector: "[appNotificationSidebarContent]" }], pipes: { "async": i6.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
111
111
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NotificationsButtonComponent, decorators: [{
112
112
  type: Component,
113
113
  args: [{
@@ -21,8 +21,7 @@ export class NotificationsService extends SocketService {
21
21
  this._callApi = _callApi;
22
22
  this._http = _http;
23
23
  this.listenerObserver = new Subject();
24
- if (((_b = (_a = this._nuxeoService.nuxeoClient) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.id) &&
25
- ((_c = this._environment) === null || _c === void 0 ? void 0 : _c.socketUrl)) {
24
+ if (((_b = (_a = this._nuxeoService.nuxeoClient) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.id) && ((_c = this._environment) === null || _c === void 0 ? void 0 : _c.socketUrl)) {
26
25
  this.socketConnect()
27
26
  .pipe(switchMap(() => this.onMessage$), catchError((error) => {
28
27
  console.log(error);
@@ -34,7 +33,8 @@ export class NotificationsService extends SocketService {
34
33
  }
35
34
  }
36
35
  get _tenantId() {
37
- return this._nuxeoService.nuxeoClient.user.properties.tenantId;
36
+ var _a;
37
+ return (_a = this._nuxeoService.nuxeoClient.user.properties.tenantId) !== null && _a !== void 0 ? _a : '';
38
38
  }
39
39
  get _appKey() {
40
40
  var _a;
@@ -45,7 +45,7 @@ export class NotificationsService extends SocketService {
45
45
  .query({
46
46
  pageProvider: NotificationsService.providers.notificationsMango,
47
47
  pageSize: 1,
48
- notfnotificationcontent_company: this._tenantId,
48
+ notfnotificationcontent_company: `${this._tenantId}`,
49
49
  notfnotificationcontent_applicationKey: this._appKey,
50
50
  notfnotificationcontent_status: NOTIFICATION_STATUS.new
51
51
  }, {})
@@ -77,7 +77,7 @@ export class NotificationsService extends SocketService {
77
77
  }
78
78
  subscribe(id) {
79
79
  return this._operation(id, 'subscribe', {
80
- companyName: this._tenantId
80
+ companyName: `${this._tenantId}`
81
81
  });
82
82
  }
83
83
  resetSubscriptions() {
@@ -86,7 +86,7 @@ export class NotificationsService extends SocketService {
86
86
  url: `${this._environment.nuxeo}${this._environment.customAutomation}`
87
87
  })
88
88
  .params({
89
- companyName: this._tenantId,
89
+ companyName: `${this._tenantId}`,
90
90
  applicationKey: this._appKey
91
91
  })
92
92
  .execute());
@@ -108,7 +108,7 @@ export class NotificationsService extends SocketService {
108
108
  }
109
109
  getSubscriptions(payload = {}) {
110
110
  return this._callApi
111
- .query(Object.assign({ pageProvider: NotificationsService.providers.subscription, notfsubscription_companyName: this._tenantId, notfsubscription_applicationKey: this._appKey, pageSize: Number.MAX_SAFE_INTEGER }, payload), {
111
+ .query(Object.assign({ pageProvider: NotificationsService.providers.subscription, notfsubscription_companyName: `${this._tenantId}`, notfsubscription_applicationKey: this._appKey, pageSize: Number.MAX_SAFE_INTEGER }, payload), {
112
112
  headers: {
113
113
  properties: '*'
114
114
  }
@@ -117,7 +117,7 @@ export class NotificationsService extends SocketService {
117
117
  }
118
118
  _getNotifications(pageProvider, payload = {}) {
119
119
  return this._callApi
120
- .query(Object.assign({ pageProvider: pageProvider, notfnotificationcontent_company: this._tenantId, notfnotificationcontent_applicationKey: this._appKey }, payload), {
120
+ .query(Object.assign({ pageProvider: pageProvider, notfnotificationcontent_company: `${this._tenantId}`, notfnotificationcontent_applicationKey: this._appKey }, payload), {
121
121
  headers: {
122
122
  properties: '*'
123
123
  }
@@ -129,7 +129,7 @@ export class NotificationsService extends SocketService {
129
129
  const bearerToken = `Bearer ${token}`;
130
130
  const headers = new HttpHeaders().set('Authorization', bearerToken);
131
131
  return headers;
132
- }), switchMap((headers) => this._http.get(url, { headers })), map((response) => response.entries), map((data) => data.sort((a, b) => b.properties['ordering'] < a.properties['ordering'] ? 1 : -1)));
132
+ }), switchMap((headers) => this._http.get(url, { headers })), map((response) => response.entries), map((data) => data.sort((a, b) => (b.properties['ordering'] < a.properties['ordering'] ? 1 : -1))));
133
133
  }
134
134
  _operation(id, option, params = {}) {
135
135
  return from(this._nuxeoService.nuxeoClient
@@ -145,7 +145,7 @@ export class NotificationsService extends SocketService {
145
145
  .operation(NotificationsService.operations[option], {
146
146
  url: `${this._environment.nuxeo}${this._environment.customAutomation}`
147
147
  })
148
- .params(Object.assign({ companyName: this._tenantId, applicationKey: this._appKey }, params))
148
+ .params(Object.assign({ companyName: `${this._tenantId}`, applicationKey: this._appKey }, params))
149
149
  .execute({}));
150
150
  }
151
151
  }
@@ -175,4 +175,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
175
175
  type: Inject,
176
176
  args: ['environment']
177
177
  }] }, { type: i1.NuxeoService }, { type: i2.CallApiService }, { type: i3.HttpClient }]; } });
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9ub3RpZmljYXRpb25zL3NlcnZpY2VzL25vdGlmaWNhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLElBQUksRUFBYyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVF2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFTbkQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7QUFFakQsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGFBQWE7SUErQnREOztPQUVHO0lBQ0gsWUFDa0MsWUFBaUMsRUFDeEQsYUFBMkIsRUFDM0IsUUFBd0IsRUFDeEIsS0FBaUI7O1FBRTNCLEtBQUssQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFMRixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDeEQsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0IsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFDeEIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQXJDNUIscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQTRCLENBQUM7UUF5QzFELElBQ0MsQ0FBQSxNQUFBLE1BQUEs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aW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1xyXG4gIEFwaVJlc3BvbnNlTW9kZWwsXHJcbiAgQXV0b21hdGlvblJlc3BvbnNlTW9kZWxcclxufSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IENhbGxBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9jYWxsQXBpL2NhbGwtYXBpLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgTnV4ZW9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9udXhlby9udXhlby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTk9USUZJQ0FUSU9OX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7XHJcbiAgTm90aWZpY2F0aW9uRGVmaW5pdGlvbk1vZGVsLFxyXG4gIE5vdGlmaWNhdGlvbk1lc3NhZ2VNb2RlbCxcclxuICBOb3RpZmljYXRpb25Nb2RlbCxcclxuICBOb3RpZmljYXRpb25TdWJzY3JpcHRpb25Nb2RlbCxcclxuICBQYXlsb2FkUGFyYW1zTW9kZWwsXHJcbiAgVm9jYWJ1bGFyeVR5cGVcclxufSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBtYXBOb3RpZmljYXRpb25zVG9QYWdpbmdSZXNwb25zZSB9IGZyb20gJy4uL3V0aWxpdGllcyc7XHJcbmltcG9ydCB7IFNvY2tldFNlcnZpY2UgfSBmcm9tICcuL3NvY2tldC5zZXJ2aWNlJztcclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uc1NlcnZpY2UgZXh0ZW5kcyBTb2NrZXRTZXJ2aWNlIHtcclxuXHRsaXN0ZW5lck9ic2VydmVyID0gbmV3IFN1YmplY3Q8Tm90aWZpY2F0aW9uTWVzc2FnZU1vZGVsPigpO1xyXG5cdHN0YXRpYyByZWFkb25seSBzb3VyY2VUeXBlID0gJy9hcGkvdjEvZGlyZWN0b3J5L1ZPQ19Ob3RmX1NvdXJjZVR5cGVzJztcclxuXHRzdGF0aWMgcmVhZG9ubHkgY2hhbm5lbHMgPSAnL2FwaS92MS9kaXJlY3RvcnkvVk9DX05vdGZfTm90aWZpY2F0aW9uQ2hhbm5lbHMnO1xyXG5cclxuXHRzdGF0aWMgcmVhZG9ubHkgcHJvdmlkZXJzID0ge1xyXG5cdFx0bm90aWZpY2F0aW9uczogJ1BQX05vdGZOb3RpZmljYXRpb25Db250ZW50JyxcclxuXHRcdG5vdGlmaWNhdGlvbnNNYW5nbzogJ1BQX05vdGZOb3RpZmljYXRpb25Db250ZW50X01vbmdvJyxcclxuXHRcdHN1YnNjcmlwdGlvbjogJ1BQX05vdGZTdWJzY3JpcHRpb25fTW9uZ28nLFxyXG5cdFx0ZGVmaW5pdGlvbjogJ1BQX05vdGZOb3RpZmljYXRpb25EZWZpbml0aW9uX01vbmdvJ1xyXG5cdH07XHJcblxyXG5cdHN0YXRpYyByZWFkb25seSBvcGVyYXRpb25zID0ge1xyXG5cdFx0bWFya0FsbEFzUmVhZDogJ0FDX1VBX05vdGZOb3RpZmljYXRpb25fUmVhZEFsbCcsXHJcblx0XHRtYXJrQXNSZWFkOiAnQUNfVUFfTm90Zk5vdGlmaWNhdGlvbl9SZWFkJyxcclxuXHRcdG1hcmtBc1VucmVhZDogJ0FDX1VBX05vdGZOb3RpZmljYXRpb25fVW5yZWFkJyxcclxuXHRcdG1hcmtBc0RlbGV0ZWQ6ICdBQ19VQV9Ob3RmTm90aWZpY2F0aW9uX1RvRGVsZXRlZCcsXHJcblx0XHR1bnN1YnNjcmliZTogJ0FDX1VBX05vdGZOb3RpZmljYXRpb25fVW5zdWJzY3JpYmUnLFxyXG5cdFx0c3Vic2NyaWJlOiAnQUNfVUFfTm90Zk5vdGlmaWNhdGlvbl9TdWJzY3JpYmUnLFxyXG5cdFx0cmVzZXQ6ICdBQ19VQV9Ob3RmTm90aWZpY2F0aW9uX1Jlc2V0U3Vic2NyaXB0aW9uJyxcclxuXHRcdG1hcmtBbGxBc1VucmVhZDogJ0FDX1VBX05vdGZOb3RpZmljYXRpb25fVW5yZWFkQWxsJ1xyXG5cdH07XHJcblxyXG5cdHByaXZhdGUgZ2V0IF90ZW5hbnRJZCgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9udXhlb1NlcnZpY2UubnV4ZW9DbGllbnQudXNlci5wcm9wZXJ0aWVzLnRlbmFudElkO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXQgX2FwcEtleSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9lbnZpcm9ubWVudD8uYXBwS2V5O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICpcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJvdGVjdGVkIF9lbnZpcm9ubWVudDogUmVjb3JkPHN0cmluZywgYW55PixcclxuXHRcdHByb3RlY3RlZCBfbnV4ZW9TZXJ2aWNlOiBOdXhlb1NlcnZpY2UsXHJcblx0XHRwcm90ZWN0ZWQgX2NhbGxBcGk6IENhbGxBcGlTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIF9odHRwOiBIdHRwQ2xpZW50XHJcblx0KSB7XHJcblx0XHRzdXBlcihfZW52aXJvbm1lbnQsIF9udXhlb1NlcnZpY2UpO1xyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5fbnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50Py51c2VyPy5pZCAmJlxyXG5cdFx0XHR0aGlzLl9lbnZpcm9ubWVudD8uc29ja2V0VXJsXHJcblx0XHQpIHtcclxuXHRcdFx0dGhpcy5zb2NrZXRDb25uZWN0KClcclxuXHRcdFx0XHQucGlwZShcclxuXHRcdFx0XHRcdHN3aXRjaE1hcCgoKSA9PiB0aGlzLm9uTWVzc2FnZSQpLFxyXG5cdFx0XHRcdFx0Y2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnJvcik7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcclxuXHRcdFx0XHRcdH0pLFxyXG5cdFx0XHRcdFx0dGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxyXG5cdFx0XHRcdClcclxuXHRcdFx0XHQuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMubGlzdGVuZXJPYnNlcnZlci5uZXh0KHJlcyk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRVblJlYWRDb3VudCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2NhbGxBcGlcclxuXHRcdFx0LnF1ZXJ5KFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdHBhZ2VQcm92aWRlcjogTm90aWZpY2F0aW9uc1NlcnZpY2UucHJvdmlkZXJzLm5vdGlmaWNhdGlvbnNNYW5nbyxcclxuXHRcdFx0XHRcdHBhZ2VTaXplOiAxLFxyXG5cdFx0XHRcdFx0bm90Zm5vdGlmaWNhdGlvbmNvbnRlbnRfY29tcGFueTogdGhpcy5fdGVuYW50SWQsXHJcblx0XHRcdFx0XHRub3Rmbm90aWZpY2F0aW9uY29udGVudF9hcHBsaWNhdGlvbktleTogdGhpcy5fYXBwS2V5LFxyXG5cdFx0XHRcdFx0bm90Zm5vdGlmaWNhdGlvbmNvbnRlbnRfc3RhdHVzOiBOT1RJRklDQVRJT05fU1RBVFVTLm5ld1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0e31cclxuXHRcdFx0KVxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHRtYXAoKGRhdGE6IEFwaVJlc3BvbnNlTW9kZWw8Tm90aWZpY2F0aW9uTW9kZWw+KSA9PiBkYXRhLnRvdGFsU2l6ZSA/PyAwKVxyXG5cdFx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0Tm90aWZpY2F0aW9uc01vbmdvKHBheWxvYWQ6IFBheWxvYWRQYXJhbXNNb2RlbCA9IHt9KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZ2V0Tm90aWZpY2F0aW9ucyhcclxuXHRcdFx0Tm90aWZpY2F0aW9uc1NlcnZpY2UucHJvdmlkZXJzLm5vdGlmaWNhdGlvbnNNYW5nbyxcclxuXHRcdFx0cGF5bG9hZFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldE5vdGlmaWNhdGlvbnMocGF5bG9hZDogUGF5bG9hZFBhcmFtc01vZGVsID0ge30pIHtcclxuXHRcdHJldHVybiB0aGlzLl9nZXROb3RpZmljYXRpb25zKFxyXG5cdFx0XHROb3RpZmljYXRpb25zU2VydmljZS5wcm92aWRlcnMubm90aWZpY2F0aW9ucyxcclxuXHRcdFx0cGF5bG9hZFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdG1hcmtBbGxBc1JlYWQoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZ2xvYmFsT3BlcmF0aW9uKCdtYXJrQWxsQXNSZWFkJyk7XHJcblx0fVxyXG5cclxuXHRtYXJrQWxsTmV3QXNVbnJlYWQoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZ2xvYmFsT3BlcmF0aW9uKCdtYXJrQWxsQXNVbnJlYWQnKTtcclxuXHR9XHJcblxyXG5cdG1hcmtBc1JlYWQoaWQ6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuX29wZXJhdGlvbihpZCwgJ21hcmtBc1JlYWQnKTtcclxuXHR9XHJcblxyXG5cdG1hcmtBc1VucmVhZChpZDogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fb3BlcmF0aW9uKGlkLCAnbWFya0FzVW5yZWFkJyk7XHJcblx0fVxyXG5cclxuXHRtYXJrQXNEZWxldGVkKGlkOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLl9vcGVyYXRpb24oaWQsICdtYXJrQXNEZWxldGVkJyk7XHJcblx0fVxyXG5cclxuXHR1bnN1YnNjcmliZShpZDogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fb3BlcmF0aW9uKGlkLCAndW5zdWJzY3JpYmUnKTtcclxuXHR9XHJcblxyXG5cdHN1YnNjcmliZShpZDogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fb3BlcmF0aW9uKGlkLCAnc3Vic2NyaWJlJywge1xyXG5cdFx0XHRjb21wYW55TmFtZTogdGhpcy5fdGVuYW50SWRcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cmVzZXRTdWJzY3JpcHRpb25zKCkge1xyXG5cdFx0cmV0dXJuIGZyb20oXHJcblx0XHRcdHRoaXMuX251eGVvU2VydmljZS5udXhlb0NsaWVudFxyXG5cdFx0XHRcdC5vcGVyYXRpb24oTm90aWZpY2F0aW9uc1NlcnZpY2Uub3BlcmF0aW9ucy5yZXNldCwge1xyXG5cdFx0XHRcdFx0dXJsOiBgJHt0aGlzLl9lbnZpcm9ubWVudC5udXhlb30ke3RoaXMuX2Vudmlyb25tZW50LmN1c3RvbUF1dG9tYXRpb259YFxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdFx0LnBhcmFtcyh7XHJcblx0XHRcdFx0XHRjb21wYW55TmFtZTogdGhpcy5fdGVuYW50SWQsXHJcblx0XHRcdFx0XHRhcHBsaWNhdGlvbktleTogdGhpcy5fYXBwS2V5XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQuZXhlY3V0ZSgpXHJcblx0XHQpIGFzIE9ic2VydmFibGU8QXV0b21hdGlvblJlc3BvbnNlTW9kZWw8UmVjb3JkPFByb3BlcnR5S2V5LCBhbnk+Pj47XHJcblx0fVxyXG5cclxuXHRnZXRTb3VyY2VUeXBlcygpIHtcclxuXHRcdHJldHVybiB0aGlzLl9nZXRWb2NhYnVsYXJ5KFxyXG5cdFx0XHRgJHt0aGlzLl9lbnZpcm9ubWVudC5udXhlb30ke05vdGlmaWNhdGlvbnNTZXJ2aWNlLnNvdXJjZVR5cGV9YFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldENoYW5uZWxzKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2dldFZvY2FidWxhcnkoXHJcblx0XHRcdGAke3RoaXMuX2Vudmlyb25tZW50Lm51eGVvfSR7Tm90aWZpY2F0aW9uc1NlcnZpY2UuY2hhbm5lbHN9YFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldERlZmluaXRpb25zKHBheWxvYWQ6IFBheWxvYWRQYXJhbXNNb2RlbCA9IHt9KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY2FsbEFwaVxyXG5cdFx0XHQucXVlcnkoXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0cGFnZVByb3ZpZGVyOiBOb3RpZmljYXRpb25zU2VydmljZS5wcm92aWRlcnMuZGVmaW5pdGlvbixcclxuXHRcdFx0XHRcdG5vdGZub3RpZmljYXRpb25kZWZfYXBwbGljYXRpb25LZXk6IHRoaXMuX2FwcEtleSxcclxuXHRcdFx0XHRcdHBhZ2VTaXplOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcclxuXHRcdFx0XHRcdG5vdGZub3RpZmljYXRpb25kZWZfaXNBY3RpdmU6IHRydWUsXHJcblx0XHRcdFx0XHQuLi5wYXlsb2FkXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRoZWFkZXJzOiB7XHJcblx0XHRcdFx0XHRcdHByb3BlcnRpZXM6ICcqJ1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0KVxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHRtYXAoXHJcblx0XHRcdFx0XHQoZGF0YTogQXBpUmVzcG9uc2VNb2RlbDxOb3RpZmljYXRpb25EZWZpbml0aW9uTW9kZWw+KSA9PiBkYXRhLmVudHJpZXNcclxuXHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRTdWJzY3JpcHRpb25zKHBheWxvYWQ6IFBheWxvYWRQYXJhbXNNb2RlbCA9IHt9KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY2FsbEFwaVxyXG5cdFx0XHQucXVlcnkoXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0cGFnZVByb3ZpZGVyOiBOb3RpZmljYXRpb25zU2VydmljZS5wcm92aWRlcnMuc3Vic2NyaXB0aW9uLFxyXG5cdFx0XHRcdFx0bm90ZnN1YnNjcmlwdGlvbl9jb21wYW55TmFtZTogdGhpcy5fdGVuYW50SWQsXHJcblx0XHRcdFx0XHRub3Rmc3Vic2NyaXB0aW9uX2FwcGxpY2F0aW9uS2V5OiB0aGlzLl9hcHBLZXksXHJcblx0XHRcdFx0XHRwYWdlU2l6ZTogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXHJcblx0XHRcdFx0XHQuLi5wYXlsb2FkXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRoZWFkZXJzOiB7XHJcblx0XHRcdFx0XHRcdHByb3BlcnRpZXM6ICcqJ1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0KVxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHRtYXAoXHJcblx0XHRcdFx0XHQoZGF0YTogQXBpUmVzcG9uc2VNb2RlbDxOb3RpZmljYXRpb25TdWJzY3JpcHRpb25Nb2RlbD4pID0+XHJcblx0XHRcdFx0XHRcdGRhdGEuZW50cmllc1xyXG5cdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgX2dldE5vdGlmaWNhdGlvbnMoXHJcblx0XHRwYWdlUHJvdmlkZXI6IHN0cmluZyxcclxuXHRcdHBheWxvYWQ6IFBheWxvYWRQYXJhbXNNb2RlbCA9IHt9XHJcblx0KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY2FsbEFwaVxyXG5cdFx0XHQucXVlcnkoXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0cGFnZVByb3ZpZGVyOiBwYWdlUHJvdmlkZXIsXHJcblx0XHRcdFx0XHRub3Rmbm90aWZpY2F0aW9uY29udGVudF9jb21wYW55OiB0aGlzLl90ZW5hbnRJZCxcclxuXHRcdFx0XHRcdG5vdGZub3RpZmljYXRpb25jb250ZW50X2FwcGxpY2F0aW9uS2V5OiB0aGlzLl9hcHBLZXksXHJcblx0XHRcdFx0XHQuLi5wYXlsb2FkXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRoZWFkZXJzOiB7XHJcblx0XHRcdFx0XHRcdHByb3BlcnRpZXM6ICcqJ1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0KVxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHRtYXAoKGRhdGE6IEFwaVJlc3BvbnNlTW9kZWw8Tm90aWZpY2F0aW9uTW9kZWw+KSA9PlxyXG5cdFx0XHRcdFx0bWFwTm90aWZpY2F0aW9uc1RvUGFnaW5nUmVzcG9uc2UoZGF0YSlcclxuXHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIF9nZXRWb2NhYnVsYXJ5KHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxWb2NhYnVsYXJ5VHlwZVtdPiB7XHJcblx0XHRyZXR1cm4gZnJvbSh0aGlzLl9udXhlb1NlcnZpY2UuZ2V0VG9rZW4oKSkucGlwZShcclxuXHRcdFx0bWFwKCh0b2tlbikgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGJlYXJlclRva2VuID0gYEJlYXJlciAke3Rva2VufWA7XHJcblx0XHRcdFx0Y29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIGJlYXJlclRva2VuKTtcclxuXHRcdFx0XHRyZXR1cm4gaGVhZGVycztcclxuXHRcdFx0fSksXHJcblx0XHRcdHN3aXRjaE1hcCgoaGVhZGVycykgPT5cclxuXHRcdFx0XHR0aGlzLl9odHRwLmdldDxBcGlSZXNwb25zZU1vZGVsPFZvY2FidWxhcnlUeXBlPj4odXJsLCB7IGhlYWRlcnMgfSlcclxuXHRcdFx0KSxcclxuXHRcdFx0bWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZW50cmllcyksXHJcblx0XHRcdG1hcCgoZGF0YSkgPT5cclxuXHRcdFx0XHRkYXRhLnNvcnQoKGEsIGIpID0+XHJcblx0XHRcdFx0XHRiLnByb3BlcnRpZXNbJ29yZGVyaW5nJ10gPCBhLnByb3BlcnRpZXNbJ29yZGVyaW5nJ10gPyAxIDogLTFcclxuXHRcdFx0XHQpXHJcblx0XHRcdClcclxuXHRcdCk7XHJcblx0fVxyXG5cdHByaXZhdGUgX29wZXJhdGlvbjxUUmVzcG9uc2UgPSBSZWNvcmQ8UHJvcGVydHlLZXksIGFueT4+KFxyXG5cdFx0aWQ6IHN0cmluZyxcclxuXHRcdG9wdGlvbjoga2V5b2YgdHlwZW9mIE5vdGlmaWNhdGlvbnNTZXJ2aWNlLm9wZXJhdGlvbnMsXHJcblx0XHRwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fVxyXG5cdCkge1xyXG5cdFx0cmV0dXJuIGZyb20oXHJcblx0XHRcdHRoaXMuX251eGVvU2VydmljZS5udXhlb0NsaWVudFxyXG5cdFx0XHRcdC5vcGVyYXRpb24oTm90aWZpY2F0aW9uc1NlcnZpY2Uub3BlcmF0aW9uc1tvcHRpb25dLCB7XHJcblx0XHRcdFx0XHR1cmw6IGAke3RoaXMuX2Vudmlyb25tZW50Lm51eGVvfSR7dGhpcy5fZW52aXJvbm1lbnQuY3VzdG9tQXV0b21hdGlvbn1gXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQucGFyYW1zKHBhcmFtcylcclxuXHRcdFx0XHQuaW5wdXQoaWQpXHJcblx0XHRcdFx0LmV4ZWN1dGUoKVxyXG5cdFx0KSBhcyBPYnNlcnZhYmxlPEF1dG9tYXRpb25SZXNwb25zZU1vZGVsPFRSZXNwb25zZT4+O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBfZ2xvYmFsT3BlcmF0aW9uKFxyXG5cdFx0b3B0aW9uOiBrZXlvZiB0eXBlb2YgTm90aWZpY2F0aW9uc1NlcnZpY2Uub3BlcmF0aW9ucyxcclxuXHRcdHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9LFxyXG5cdFx0aGVhZGVyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9XHJcblx0KSB7XHJcblx0XHRyZXR1cm4gZnJvbShcclxuXHRcdFx0dGhpcy5fbnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50XHJcblx0XHRcdFx0Lm9wZXJhdGlvbihOb3RpZmljYXRpb25zU2VydmljZS5vcGVyYXRpb25zW29wdGlvbl0sIHtcclxuXHRcdFx0XHRcdHVybDogYCR7dGhpcy5fZW52aXJvbm1lbnQubnV4ZW99JHt0aGlzLl9lbnZpcm9ubWVudC5jdXN0b21BdXRvbWF0aW9ufWBcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC5wYXJhbXMoe1xyXG5cdFx0XHRcdFx0Y29tcGFueU5hbWU6IHRoaXMuX3RlbmFudElkLFxyXG5cdFx0XHRcdFx0YXBwbGljYXRpb25LZXk6IHRoaXMuX2FwcEtleSxcclxuXHRcdFx0XHRcdC4uLnBhcmFtc1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdFx0LmV4ZWN1dGUoe30pXHJcblx0XHQpIGFzIE9ic2VydmFibGU8QXV0b21hdGlvblJlc3BvbnNlTW9kZWw8UmVjb3JkPFByb3BlcnR5S2V5LCBhbnk+Pj47XHJcblx0fVxyXG59XHJcbiJdfQ==
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9ub3RpZmljYXRpb25zL3NlcnZpY2VzL25vdGlmaWNhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLElBQUksRUFBYyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUt2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFTbkQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7QUFFakQsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGFBQWE7SUErQnREOztPQUVHO0lBQ0gsWUFDa0MsWUFBaUMsRUFDeEQsYUFBMkIsRUFDM0IsUUFBd0IsRUFDeEIsS0FBaUI7O1FBRTNCLEtBQUssQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFMRixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDeEQsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0IsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFDeEIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQXJDNUIscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQTRCLENBQUM7UUF5QzFELElBQUksQ0FBQSxNQUFBLE1BQUEs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b0JBQW9COzRGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVU7OzBCQW9DUixNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFwaVJlc3BvbnNlTW9kZWwsIEF1dG9tYXRpb25SZXNwb25zZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDYWxsQXBpU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvY2FsbEFwaS9jYWxsLWFwaS5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IE51eGVvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvbnV4ZW8vbnV4ZW8uc2VydmljZSc7XHJcbmltcG9ydCB7IE5PVElGSUNBVElPTl9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQge1xyXG5cdE5vdGlmaWNhdGlvbkRlZmluaXRpb25Nb2RlbCxcclxuXHROb3RpZmljYXRpb25NZXNzYWdlTW9kZWwsXHJcblx0Tm90aWZpY2F0aW9uTW9kZWwsXHJcblx0Tm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uTW9kZWwsXHJcblx0UGF5bG9hZFBhcmFtc01vZGVsLFxyXG5cdFZvY2FidWxhcnlUeXBlXHJcbn0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgbWFwTm90aWZpY2F0aW9uc1RvUGFnaW5nUmVzcG9uc2UgfSBmcm9tICcuLi91dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBTb2NrZXRTZXJ2aWNlIH0gZnJvbSAnLi9zb2NrZXQuc2VydmljZSc7XHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbnNTZXJ2aWNlIGV4dGVuZHMgU29ja2V0U2VydmljZSB7XHJcblx0bGlzdGVuZXJPYnNlcnZlciA9IG5ldyBTdWJqZWN0PE5vdGlmaWNhdGlvbk1lc3NhZ2VNb2RlbD4oKTtcclxuXHRzdGF0aWMgcmVhZG9ubHkgc291cmNlVHlwZSA9ICcvYXBpL3YxL2RpcmVjdG9yeS9WT0NfTm90Zl9Tb3VyY2VUeXBlcyc7XHJcblx0c3RhdGljIHJlYWRvbmx5IGNoYW5uZWxzID0gJy9hcGkvdjEvZGlyZWN0b3J5L1ZPQ19Ob3RmX05vdGlmaWNhdGlvbkNoYW5uZWxzJztcclxuXHJcblx0c3RhdGljIHJlYWRvbmx5IHByb3ZpZGVycyA9IHtcclxuXHRcdG5vdGlmaWNhdGlvbnM6ICdQUF9Ob3RmTm90aWZpY2F0aW9uQ29udGVudCcsXHJcblx0XHRub3RpZmljYXRpb25zTWFuZ286ICdQUF9Ob3RmTm90aWZpY2F0aW9uQ29udGVudF9Nb25nbycsXHJcblx0XHRzdWJzY3JpcHRpb246ICdQUF9Ob3RmU3Vic2NyaXB0aW9uX01vbmdvJyxcclxuXHRcdGRlZmluaXRpb246ICdQUF9Ob3RmTm90aWZpY2F0aW9uRGVmaW5pdGlvbl9Nb25nbydcclxuXHR9O1xyXG5cclxuXHRzdGF0aWMgcmVhZG9ubHkgb3BlcmF0aW9ucyA9IHtcclxuXHRcdG1hcmtBbGxBc1JlYWQ6ICdBQ19VQV9Ob3RmTm90aWZpY2F0aW9uX1JlYWRBbGwnLFxyXG5cdFx0bWFya0FzUmVhZDogJ0FDX1VBX05vdGZOb3RpZmljYXRpb25fUmVhZCcsXHJcblx0XHRtYXJrQXNVbnJlYWQ6ICdBQ19VQV9Ob3RmTm90aWZpY2F0aW9uX1VucmVhZCcsXHJcblx0XHRtYXJrQXNEZWxldGVkOiAnQUNfVUFfTm90Zk5vdGlmaWNhdGlvbl9Ub0RlbGV0ZWQnLFxyXG5cdFx0dW5zdWJzY3JpYmU6ICdBQ19VQV9Ob3RmTm90aWZpY2F0aW9uX1Vuc3Vic2NyaWJlJyxcclxuXHRcdHN1YnNjcmliZTogJ0FDX1VBX05vdGZOb3RpZmljYXRpb25fU3Vic2NyaWJlJyxcclxuXHRcdHJlc2V0OiAnQUNfVUFfTm90Zk5vdGlmaWNhdGlvbl9SZXNldFN1YnNjcmlwdGlvbicsXHJcblx0XHRtYXJrQWxsQXNVbnJlYWQ6ICdBQ19VQV9Ob3RmTm90aWZpY2F0aW9uX1VucmVhZEFsbCdcclxuXHR9O1xyXG5cclxuXHRwcml2YXRlIGdldCBfdGVuYW50SWQoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fbnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcy50ZW5hbnRJZCA/PyAnJztcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0IF9hcHBLZXkoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ/LmFwcEtleTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByb3RlY3RlZCBfZW52aXJvbm1lbnQ6IFJlY29yZDxzdHJpbmcsIGFueT4sXHJcblx0XHRwcm90ZWN0ZWQgX251eGVvU2VydmljZTogTnV4ZW9TZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIF9jYWxsQXBpOiBDYWxsQXBpU2VydmljZSxcclxuXHRcdHByb3RlY3RlZCBfaHR0cDogSHR0cENsaWVudFxyXG5cdCkge1xyXG5cdFx0c3VwZXIoX2Vudmlyb25tZW50LCBfbnV4ZW9TZXJ2aWNlKTtcclxuXHJcblx0XHRpZiAodGhpcy5fbnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50Py51c2VyPy5pZCAmJiB0aGlzLl9lbnZpcm9ubWVudD8uc29ja2V0VXJsKSB7XHJcblx0XHRcdHRoaXMuc29ja2V0Q29ubmVjdCgpXHJcblx0XHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0XHRzd2l0Y2hNYXAoKCkgPT4gdGhpcy5vbk1lc3NhZ2UkKSxcclxuXHRcdFx0XHRcdGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyb3IpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XHJcblx0XHRcdFx0XHR9KSxcclxuXHRcdFx0XHRcdHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcclxuXHRcdFx0XHQpXHJcblx0XHRcdFx0LnN1YnNjcmliZSgocmVzKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmxpc3RlbmVyT2JzZXJ2ZXIubmV4dChyZXMpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0VW5SZWFkQ291bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuXHRcdHJldHVybiB0aGlzLl9jYWxsQXBpXHJcblx0XHRcdC5xdWVyeShcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRwYWdlUHJvdmlkZXI6IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLnByb3ZpZGVycy5ub3RpZmljYXRpb25zTWFuZ28sXHJcblx0XHRcdFx0XHRwYWdlU2l6ZTogMSxcclxuXHRcdFx0XHRcdG5vdGZub3RpZmljYXRpb25jb250ZW50X2NvbXBhbnk6IGAke3RoaXMuX3RlbmFudElkfWAsXHJcblx0XHRcdFx0XHRub3Rmbm90aWZpY2F0aW9uY29udGVudF9hcHBsaWNhdGlvbktleTogdGhpcy5fYXBwS2V5LFxyXG5cdFx0XHRcdFx0bm90Zm5vdGlmaWNhdGlvbmNvbnRlbnRfc3RhdHVzOiBOT1RJRklDQVRJT05fU1RBVFVTLm5ld1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0e31cclxuXHRcdFx0KVxyXG5cdFx0XHQucGlwZShtYXAoKGRhdGE6IEFwaVJlc3BvbnNlTW9kZWw8Tm90aWZpY2F0aW9uTW9kZWw+KSA9PiBkYXRhLnRvdGFsU2l6ZSA/PyAwKSk7XHJcblx0fVxyXG5cclxuXHRnZXROb3RpZmljYXRpb25zTW9uZ28ocGF5bG9hZDogUGF5bG9hZFBhcmFtc01vZGVsID0ge30pIHtcclxuXHRcdHJldHVybiB0aGlzLl9nZXROb3RpZmljYXRpb25zKE5vdGlmaWNhdGlvbnNTZXJ2aWNlLnByb3ZpZGVycy5ub3RpZmljYXRpb25zTWFuZ28sIHBheWxvYWQpO1xyXG5cdH1cclxuXHJcblx0Z2V0Tm90aWZpY2F0aW9ucyhwYXlsb2FkOiBQYXlsb2FkUGFyYW1zTW9kZWwgPSB7fSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2dldE5vdGlmaWNhdGlvbnMoTm90aWZpY2F0aW9uc1NlcnZpY2UucHJvdmlkZXJzLm5vdGlmaWNhdGlvbnMsIHBheWxvYWQpO1xyXG5cdH1cclxuXHJcblx0bWFya0FsbEFzUmVhZCgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9nbG9iYWxPcGVyYXRpb24oJ21hcmtBbGxBc1JlYWQnKTtcclxuXHR9XHJcblxyXG5cdG1hcmtBbGxOZXdBc1VucmVhZCgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9nbG9iYWxPcGVyYXRpb24oJ21hcmtBbGxBc1VucmVhZCcpO1xyXG5cdH1cclxuXHJcblx0bWFya0FzUmVhZChpZDogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fb3BlcmF0aW9uKGlkLCAnbWFya0FzUmVhZCcpO1xyXG5cdH1cclxuXHJcblx0bWFya0FzVW5yZWFkKGlkOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLl9vcGVyYXRpb24oaWQsICdtYXJrQXNVbnJlYWQnKTtcclxuXHR9XHJcblxyXG5cdG1hcmtBc0RlbGV0ZWQoaWQ6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuX29wZXJhdGlvbihpZCwgJ21hcmtBc0RlbGV0ZWQnKTtcclxuXHR9XHJcblxyXG5cdHVuc3Vic2NyaWJlKGlkOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLl9vcGVyYXRpb24oaWQsICd1bnN1YnNjcmliZScpO1xyXG5cdH1cclxuXHJcblx0c3Vic2NyaWJlKGlkOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLl9vcGVyYXRpb24oaWQsICdzdWJzY3JpYmUnLCB7XHJcblx0XHRcdGNvbXBhbnlOYW1lOiBgJHt0aGlzLl90ZW5hbnRJZH1gXHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHJlc2V0U3Vic2NyaXB0aW9ucygpIHtcclxuXHRcdHJldHVybiBmcm9tKFxyXG5cdFx0XHR0aGlzLl9udXhlb1NlcnZpY2UubnV4ZW9DbGllbnRcclxuXHRcdFx0XHQub3BlcmF0aW9uKE5vdGlmaWNhdGlvbnNTZXJ2aWNlLm9wZXJhdGlvbnMucmVzZXQsIHtcclxuXHRcdFx0XHRcdHVybDogYCR7dGhpcy5fZW52aXJvbm1lbnQubnV4ZW99JHt0aGlzLl9lbnZpcm9ubWVudC5jdXN0b21BdXRvbWF0aW9ufWBcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC5wYXJhbXMoe1xyXG5cdFx0XHRcdFx0Y29tcGFueU5hbWU6IGAke3RoaXMuX3RlbmFudElkfWAsXHJcblx0XHRcdFx0XHRhcHBsaWNhdGlvbktleTogdGhpcy5fYXBwS2V5XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQuZXhlY3V0ZSgpXHJcblx0XHQpIGFzIE9ic2VydmFibGU8QXV0b21hdGlvblJlc3BvbnNlTW9kZWw8UmVjb3JkPFByb3BlcnR5S2V5LCBhbnk+Pj47XHJcblx0fVxyXG5cclxuXHRnZXRTb3VyY2VUeXBlcygpIHtcclxuXHRcdHJldHVybiB0aGlzLl9nZXRWb2NhYnVsYXJ5KGAke3RoaXMuX2Vudmlyb25tZW50Lm51eGVvfSR7Tm90aWZpY2F0aW9uc1NlcnZpY2Uuc291cmNlVHlwZX1gKTtcclxuXHR9XHJcblxyXG5cdGdldENoYW5uZWxzKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2dldFZvY2FidWxhcnkoYCR7dGhpcy5fZW52aXJvbm1lbnQubnV4ZW99JHtOb3RpZmljYXRpb25zU2VydmljZS5jaGFubmVsc31gKTtcclxuXHR9XHJcblxyXG5cdGdldERlZmluaXRpb25zKHBheWxvYWQ6IFBheWxvYWRQYXJhbXNNb2RlbCA9IHt9KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY2FsbEFwaVxyXG5cdFx0XHQucXVlcnkoXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0cGFnZVByb3ZpZGVyOiBOb3RpZmljYXRpb25zU2VydmljZS5wcm92aWRlcnMuZGVmaW5pdGlvbixcclxuXHRcdFx0XHRcdG5vdGZub3RpZmljYXRpb25kZWZfYXBwbGljYXRpb25LZXk6IHRoaXMuX2FwcEtleSxcclxuXHRcdFx0XHRcdHBhZ2VTaXplOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcclxuXHRcdFx0XHRcdG5vdGZub3RpZmljYXRpb25kZWZfaXNBY3RpdmU6IHRydWUsXHJcblx0XHRcdFx0XHQuLi5wYXlsb2FkXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRoZWFkZXJzOiB7XHJcblx0XHRcdFx0XHRcdHByb3BlcnRpZXM6ICcqJ1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0KVxyXG5cdFx0XHQucGlwZShtYXAoKGRhdGE6IEFwaVJlc3BvbnNlTW9kZWw8Tm90aWZpY2F0aW9uRGVmaW5pdGlvbk1vZGVsPikgPT4gZGF0YS5lbnRyaWVzKSk7XHJcblx0fVxyXG5cclxuXHRnZXRTdWJzY3JpcHRpb25zKHBheWxvYWQ6IFBheWxvYWRQYXJhbXNNb2RlbCA9IHt9KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY2FsbEFwaVxyXG5cdFx0XHQucXVlcnkoXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0cGFnZVByb3ZpZGVyOiBOb3RpZmljYXRpb25zU2VydmljZS5wcm92aWRlcnMuc3Vic2NyaXB0aW9uLFxyXG5cdFx0XHRcdFx0bm90ZnN1YnNjcmlwdGlvbl9jb21wYW55TmFtZTogYCR7dGhpcy5fdGVuYW50SWR9YCxcclxuXHRcdFx0XHRcdG5vdGZzdWJzY3JpcHRpb25fYXBwbGljYXRpb25LZXk6IHRoaXMuX2FwcEtleSxcclxuXHRcdFx0XHRcdHBhZ2VTaXplOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcclxuXHRcdFx0XHRcdC4uLnBheWxvYWRcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGhlYWRlcnM6IHtcclxuXHRcdFx0XHRcdFx0cHJvcGVydGllczogJyonXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpXHJcblx0XHRcdC5waXBlKG1hcCgoZGF0YTogQXBpUmVzcG9uc2VNb2RlbDxOb3RpZmljYXRpb25TdWJzY3JpcHRpb25Nb2RlbD4pID0+IGRhdGEuZW50cmllcykpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBfZ2V0Tm90aWZpY2F0aW9ucyhwYWdlUHJvdmlkZXI6IHN0cmluZywgcGF5bG9hZDogUGF5bG9hZFBhcmFtc01vZGVsID0ge30pIHtcclxuXHRcdHJldHVybiB0aGlzLl9jYWxsQXBpXHJcblx0XHRcdC5xdWVyeShcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRwYWdlUHJvdmlkZXI6IHBhZ2VQcm92aWRlcixcclxuXHRcdFx0XHRcdG5vdGZub3RpZmljYXRpb25jb250ZW50X2NvbXBhbnk6IGAke3RoaXMuX3RlbmFudElkfWAsXHJcblx0XHRcdFx0XHRub3Rmbm90aWZpY2F0aW9uY29udGVudF9hcHBsaWNhdGlvbktleTogdGhpcy5fYXBwS2V5LFxyXG5cdFx0XHRcdFx0Li4ucGF5bG9hZFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0aGVhZGVyczoge1xyXG5cdFx0XHRcdFx0XHRwcm9wZXJ0aWVzOiAnKidcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdClcclxuXHRcdFx0LnBpcGUobWFwKChkYXRhOiBBcGlSZXNwb25zZU1vZGVsPE5vdGlmaWNhdGlvbk1vZGVsPikgPT4gbWFwTm90aWZpY2F0aW9uc1RvUGFnaW5nUmVzcG9uc2UoZGF0YSkpKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgX2dldFZvY2FidWxhcnkodXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFZvY2FidWxhcnlUeXBlW10+IHtcclxuXHRcdHJldHVybiBmcm9tKHRoaXMuX251eGVvU2VydmljZS5nZXRUb2tlbigpKS5waXBlKFxyXG5cdFx0XHRtYXAoKHRva2VuKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgYmVhcmVyVG9rZW4gPSBgQmVhcmVyICR7dG9rZW59YDtcclxuXHRcdFx0XHRjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgYmVhcmVyVG9rZW4pO1xyXG5cdFx0XHRcdHJldHVybiBoZWFkZXJzO1xyXG5cdFx0XHR9KSxcclxuXHRcdFx0c3dpdGNoTWFwKChoZWFkZXJzKSA9PiB0aGlzLl9odHRwLmdldDxBcGlSZXNwb25zZU1vZGVsPFZvY2FidWxhcnlUeXBlPj4odXJsLCB7IGhlYWRlcnMgfSkpLFxyXG5cdFx0XHRtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZS5lbnRyaWVzKSxcclxuXHRcdFx0bWFwKChkYXRhKSA9PiBkYXRhLnNvcnQoKGEsIGIpID0+IChiLnByb3BlcnRpZXNbJ29yZGVyaW5nJ10gPCBhLnByb3BlcnRpZXNbJ29yZGVyaW5nJ10gPyAxIDogLTEpKSlcclxuXHRcdCk7XHJcblx0fVxyXG5cdHByaXZhdGUgX29wZXJhdGlvbjxUUmVzcG9uc2UgPSBSZWNvcmQ8UHJvcGVydHlLZXksIGFueT4+KFxyXG5cdFx0aWQ6IHN0cmluZyxcclxuXHRcdG9wdGlvbjoga2V5b2YgdHlwZW9mIE5vdGlmaWNhdGlvbnNTZXJ2aWNlLm9wZXJhdGlvbnMsXHJcblx0XHRwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fVxyXG5cdCkge1xyXG5cdFx0cmV0dXJuIGZyb20oXHJcblx0XHRcdHRoaXMuX251eGVvU2VydmljZS5udXhlb0NsaWVudFxyXG5cdFx0XHRcdC5vcGVyYXRpb24oTm90aWZpY2F0aW9uc1NlcnZpY2Uub3BlcmF0aW9uc1tvcHRpb25dLCB7XHJcblx0XHRcdFx0XHR1cmw6IGAke3RoaXMuX2Vudmlyb25tZW50Lm51eGVvfSR7dGhpcy5fZW52aXJvbm1lbnQuY3VzdG9tQXV0b21hdGlvbn1gXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQucGFyYW1zKHBhcmFtcylcclxuXHRcdFx0XHQuaW5wdXQoaWQpXHJcblx0XHRcdFx0LmV4ZWN1dGUoKVxyXG5cdFx0KSBhcyBPYnNlcnZhYmxlPEF1dG9tYXRpb25SZXNwb25zZU1vZGVsPFRSZXNwb25zZT4+O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBfZ2xvYmFsT3BlcmF0aW9uKFxyXG5cdFx0b3B0aW9uOiBrZXlvZiB0eXBlb2YgTm90aWZpY2F0aW9uc1NlcnZpY2Uub3BlcmF0aW9ucyxcclxuXHRcdHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9LFxyXG5cdFx0aGVhZGVyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9XHJcblx0KSB7XHJcblx0XHRyZXR1cm4gZnJvbShcclxuXHRcdFx0dGhpcy5fbnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50XHJcblx0XHRcdFx0Lm9wZXJhdGlvbihOb3RpZmljYXRpb25zU2VydmljZS5vcGVyYXRpb25zW29wdGlvbl0sIHtcclxuXHRcdFx0XHRcdHVybDogYCR7dGhpcy5fZW52aXJvbm1lbnQubnV4ZW99JHt0aGlzLl9lbnZpcm9ubWVudC5jdXN0b21BdXRvbWF0aW9ufWBcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC5wYXJhbXMoe1xyXG5cdFx0XHRcdFx0Y29tcGFueU5hbWU6IGAke3RoaXMuX3RlbmFudElkfWAsXHJcblx0XHRcdFx0XHRhcHBsaWNhdGlvbktleTogdGhpcy5fYXBwS2V5LFxyXG5cdFx0XHRcdFx0Li4ucGFyYW1zXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQuZXhlY3V0ZSh7fSlcclxuXHRcdCkgYXMgT2JzZXJ2YWJsZTxBdXRvbWF0aW9uUmVzcG9uc2VNb2RlbDxSZWNvcmQ8UHJvcGVydHlLZXksIGFueT4+PjtcclxuXHR9XHJcbn1cclxuIl19
@@ -2,7 +2,7 @@ var _CacheBaseService_instances, _CacheBaseService_fetchedItems, _CacheBaseServi
2
2
  import { __classPrivateFieldGet } from "tslib";
3
3
  import { Injectable } from "@angular/core";
4
4
  import { EMPTY, Subject } from "rxjs";
5
- import { expand, last, map, retry } from "rxjs/operators";
5
+ import { catchError, expand, last, map, retry, take } from "rxjs/operators";
6
6
  import * as moment from "moment";
7
7
  import { DEFAULT_CACHE_OPTIONS } from "./constants";
8
8
  import _omit from "lodash/omit";
@@ -60,7 +60,8 @@ export class CacheBaseService {
60
60
  return __classPrivateFieldGet(this, _CacheBaseService_fetchedItems, "f")[options.cacheKey].onFinishFetching.asObservable();
61
61
  }
62
62
  else {
63
- return __classPrivateFieldGet(this, _CacheBaseService_instances, "m", _CacheBaseService_handleCacheItems).call(this, options);
63
+ __classPrivateFieldGet(this, _CacheBaseService_instances, "m", _CacheBaseService_handleCacheItems).call(this, options).pipe(take(1)).subscribe();
64
+ return __classPrivateFieldGet(this, _CacheBaseService_fetchedItems, "f")[options.cacheKey].onFinishFetching.asObservable();
64
65
  }
65
66
  }
66
67
  }
@@ -115,6 +116,8 @@ _CacheBaseService_fetchedItems = new WeakMap(), _CacheBaseService_instances = ne
115
116
  res.onFinishFetching.next(result);
116
117
  res.onFinishFetching.complete();
117
118
  return result;
119
+ }), catchError((er) => {
120
+ throw er;
118
121
  }));
119
122
  }, _CacheBaseService_findNode = function _CacheBaseService_findNode(items, uniqueCompareKey, childrenPath, value) {
120
123
  for (const node of items) {
@@ -294,4 +297,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
294
297
  providedIn: "root",
295
298
  }]
296
299
  }], ctorParameters: function () { return [{ type: i1.UserPreferencesService }, { type: i2.UtilityService }]; } });
297
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUtYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvc2hhcmVkL3NlcnZpY2VzL2Jhc2UvY2FjaGUtYmFzZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXBELE9BQU8sS0FBSyxNQUFNLGFBQWEsQ0FBQztBQUNoQyxPQUFPLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFDcEMsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7OztBQUszRCxNQUFNLE9BQU8sZ0JBQWdCO0lBRzNCLFlBQ1Usc0JBQThDLEVBQzlDLGNBQThCO1FBRDlCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsbUJBQWMsR0FBZCxjQUFjLENBQWdCOztRQUp4Qyx5Q0FBd0MsSUFBSSxHQUFHLEVBQXFCLEVBQUM7UUFNbkUsdUJBQUEsSUFBSSxvRUFBZSxNQUFuQixJQUFJLENBQWlCLENBQUM7SUFDeEIsQ0FBQztJQUVELE9BQU8sQ0FBQyxRQUFnQjtRQUN0QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENB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LElBQUksT0FBTyxDQUFDLFFBQVE7UUFBRSxPQUFPO1NBQ3hCO1FBQ0gsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FDN0IsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUNwRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUN0QixDQUFDO0tBQ0g7QUFDSCxDQUFDOzhHQWhYVSxnQkFBZ0I7a0hBQWhCLGdCQUFnQixjQUZmLE1BQU07NEZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGV4cGFuZCwgbGFzdCwgbWFwLCByZXRyeSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQgeyBERUZBVUxUX0NBQ0hFX09QVElPTlMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgQmFzZUNhY2hlT3B0aW9ucywgQ2FjaGVJbmZvIH0gZnJvbSBcIi4vbW9kZWxzXCI7XHJcbmltcG9ydCBfb21pdCBmcm9tIFwibG9kYXNoL29taXRcIjtcclxuaW1wb3J0IF9hc3NpZ24gZnJvbSBcImxvZGFzaC9hc3NpZ25cIjtcclxuaW1wb3J0IF9jbG9uZURlZXAgZnJvbSBcImxvZGFzaC9jbG9uZURlZXBcIjtcclxuaW1wb3J0IHsgREVGQVVMVF9UVExfQ09ORklHIH0gZnJvbSBcIi4vY29uZmlnXCI7XHJcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy91c2VyL3VzZXItcHJlZmVyZW5jZXMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3V0aWxpdGllcy91dGlsaXR5LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRW52TWFuYWdlciB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2Vudi9lbnYtbWFuYWdlclwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FjaGVCYXNlU2VydmljZSB7XHJcbiAgI2ZldGNoZWRJdGVtczogTWFwPHN0cmluZywgQ2FjaGVJbmZvPiA9IG5ldyBNYXA8c3RyaW5nLCBDYWNoZUluZm8+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB1c2VyUHJlZmVyZW5jZXNTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuI3ByZXBhcmVDb25maWcoKTtcclxuICB9XHJcblxyXG4gIGhhc0l0ZW0oY2FjaGVLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlclByZWZlcmVuY2VzU2VydmljZS5oYXNJdGVtKFxyXG4gICAgICBgJHtERUZBVUxUX0NBQ0hFX09QVElPTlMuUFJFRklYfSR7Y2FjaGVLZXl9YFxyXG4gICAgKTtcclxuICB9XHJcbiAgY2xlYXJBbGwodXNlck5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy4jY2xlYXIodXNlck5hbWUpO1xyXG4gIH1cclxuICB2YWxpZGF0ZVRUTCh1c2VyTmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoIURFRkFVTFRfVFRMX0NPTkZJRy5BVVRPX0NIRUNLIHx8ICF1c2VyTmFtZSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHByZWZpeCA9IGAke3VzZXJOYW1lfV9fJHtERUZBVUxUX0NBQ0hFX09QVElPTlMuUFJFRklYfWA7XHJcbiAgICBPYmplY3Qua2V5cyh3aW5kb3cubG9jYWxTdG9yYWdlKVxyXG4gICAgICAuZmlsdGVyKChxKSA9PiBxLnN0YXJ0c1dpdGgocHJlZml4KSlcclxuICAgICAgLmZpbHRlcigoa2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uczogQmFzZUNhY2hlT3B0aW9ucyA9IHtcclxuICAgICAgICAgIGNhY2hlS2V5OiBrZXkucmVwbGFjZShwcmVmaXgsIFwiXCIpLFxyXG4gICAgICAgICAgdXNlck5hbWU6IHVzZXJOYW1lLFxyXG4gICAgICAgICAgcmVxdWVzdDogREVGQVVMVF9DQUNIRV9PUFRJT05TLlJFUVVFU1QsXHJcbiAgICAgICAgICBwcmVwYXJlRGF0YUJlZm9yZUNhY2hpbmc6IERFRkFVTFRfQ0FDSEVfT1BUSU9OUy5QUkVQQVJFX0RBVEEsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBmaXJzdEZldGNoaW5nRGF0ZSA9IHRoaXMuI2dldEl0ZW0ob3B0aW9ucyk/LmZpcnN0RmV0Y2hpbmdEYXRlO1xyXG4gICAgICAgIGlmICghZmlyc3RGZXRjaGluZ0RhdGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgbW9tZW50RGF0ZTEgPSBtb21lbnQobmV3IERhdGUoZmlyc3RGZXRjaGluZ0RhdGUpKTtcclxuICAgICAgICBjb25zdCBtb21lbnREYXRlMiA9IG1vbWVudChuZXcgRGF0ZSgpKTtcclxuICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gbW9tZW50RGF0ZTIuZGlmZihcclxuICAgICAgICAgIG1vbWVudERhdGUxLFxyXG4gICAgICAgICAgREVGQVVMVF9UVExfQ09ORklHLlVOSVRcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBkaWZmZXJlbmNlID49IERFRkFVTFRfVFRMX0NPTkZJRy5UVEw7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIHN0YXJ0RmV0Y2hpbmdJdGVtcyhvcHRpb25zOiBCYXNlQ2FjaGVPcHRpb25zKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMuI3ZhbGlkYXRlVFRMRm9yS2V5KG9wdGlvbnMpO1xyXG5cclxuICAgIGlmICh0aGlzLiNmZXRjaGVkSXRlbXNbb3B0aW9ucy5jYWNoZUtleV0/LmZldGNoaW5nSXRlbXNGcm9tVGhlU2VydmVyKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLiNmZXRjaGVkSXRlbXNbXHJcbiAgICAgICAgb3B0aW9ucy5jYWNoZUtleVxyXG4gICAgICBdLm9uRmluaXNoRmV0Y2hpbmcuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy4jaGFuZGxlQ2FjaGVJdGVtcyhvcHRpb25zKTtcclxuICAgIH1cclxuICB9XHJcbiAgI2hhbmRsZUNhY2hlSXRlbXMob3B0aW9uczogQmFzZUNhY2hlT3B0aW9ucyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgb2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgdGhpcy4jcHJlcGFyZU9wdGlvbnMob3B0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgY2FjaGVkSXRlbSA9IHRoaXMuI2dldEl0ZW0ob3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKGNhY2hlZEl0ZW0pIHtcclxuICAgICAgdGhpcy4jc2V0SXRlbUluTWFwKG9wdGlvbnMuY2FjaGVLZXksIHtcclxuICAgICAgICAuLi5jYWNoZWRJdGVtLFxyXG4gICAgICAgIGZldGNoaW5nSXRlbXNGcm9tVGhlU2VydmVyOiBmYWxzZSxcclxuICAgICAgICBvbkZpbmlzaEZldGNoaW5nOiBuZXcgU3ViamVjdDxDYWNoZUluZm8+KCksXHJcbiAgICAgICAgcmVxdWVzdDogb3B0aW9ucy5yZXF1ZXN0LFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICBbb3B0aW9ucy5wYWdlS2V5XTogMCxcclxuICAgICAgICBbb3B0aW9ucy5taW5Db21wYXJlRGF0ZUtleV06IHRoaXMuI2FkZDFTZWNvbmRUb01vZGlmaWVkRGF0ZShcclxuICAgICAgICAgIG5ldyBEYXRlKHRoaXMuI2ZldGNoZWRJdGVtc1tvcHRpb25zLmNhY2hlS2V5XS5sYXN0TW9kaWZpZWREYXRlKVxyXG4gICAgICAgICkudG9JU09TdHJpbmcoKSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy4jZmV0Y2hlZEl0ZW1zW29wdGlvbnMuY2FjaGVLZXldLnBhcmFtcyA9IHBhcmFtcztcclxuICAgICAgb2JzZXJ2YWJsZSA9IG9wdGlvbnMucmVxdWVzdChwYXJhbXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy4jc2V0SXRlbUluTWFwKG9wdGlvbnMuY2FjaGVLZXkpO1xyXG4gICAgICB0aGlzLiNmZXRjaGVkSXRlbXNbb3B0aW9ucy5jYWNoZUtleV0ucmVxdWVzdCA9IG9wdGlvbnMucmVxdWVzdDtcclxuICAgICAgdGhpcy4jZmV0Y2hlZEl0ZW1zW29wdGlvbnMuY2FjaGVLZXldLmZpcnN0RmV0Y2hpbmdEYXRlID1cclxuICAgICAgICBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgIG9ic2VydmFibGUgPSBvcHRpb25zLnJlcXVlc3QoeyBbb3B0aW9ucy5wYWdlS2V5XTogMCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLiNmZXRjaGVkSXRlbXNbb3B0aW9ucy5jYWNoZUtleV0uZmV0Y2hpbmdJdGVtc0Zyb21UaGVTZXJ2ZXIgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG9ic2VydmFibGUucGlwZShcclxuICAgICAgcmV0cnkoREVGQVVMVF9UVExfQ09ORklHLlJFVFJZKSxcclxuICAgICAgZXhwYW5kKChyZXN1bHRzOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgYW5vdGhlckNhbGw6IE9ic2VydmFibGU8YW55PiB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIGlmIChyZXN1bHRzICYmIHJlc3VsdHNbb3B0aW9ucy5tYXBwZWREYXRhS2V5XT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBhbm90aGVyQ2FsbCA9IHRoaXMuI2hhbmRsZUZldGNoZWRJdGVtcyhvcHRpb25zLCByZXN1bHRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFub3RoZXJDYWxsID8gYW5vdGhlckNhbGwgOiBFTVBUWTtcclxuICAgICAgfSksXHJcbiAgICAgIGxhc3QoKSxcclxuICAgICAgbWFwKChfKSA9PiB7XHJcbiAgICAgICAgbGV0IF9mZXRjaGVkSXRlbXMgPSB0aGlzLiNmZXRjaGVkSXRlbXNbb3B0aW9ucy5jYWNoZUtleV0gYXMgQ2FjaGVJbmZvO1xyXG4gICAgICAgIF9mZXRjaGVkSXRlbXMuZmV0Y2hpbmdJdGVtc0Zyb21UaGVTZXJ2ZXIgPSBmYWxzZTtcclxuICAgICAgICBpZiAoX2ZldGNoZWRJdGVtcy5kYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgIF9mZXRjaGVkSXRlbXMubGFzdE1vZGlmaWVkRGF0ZSA9IHRoaXMuI2ZpbmRMYXJnZXN0RGF0ZShcclxuICAgICAgICAgICAgX2ZldGNoZWRJdGVtcy5kYXRhLFxyXG4gICAgICAgICAgICBvcHRpb25zLmNoaWxkcmVuUGF0aCxcclxuICAgICAgICAgICAgb3B0aW9ucy5sYXN0TW9kaWZpZWREYXRlUGF0aFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuI3NldEl0ZW0oXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBkYXRhOiBfZmV0Y2hlZEl0ZW1zLmRhdGEsXHJcbiAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkRGF0ZTogX2ZldGNoZWRJdGVtcy5sYXN0TW9kaWZpZWREYXRlLFxyXG4gICAgICAgICAgICAgIGZpcnN0RmV0Y2hpbmdEYXRlOiBfZmV0Y2hlZEl0ZW1zLmZpcnN0RmV0Y2hpbmdEYXRlLFxyXG4gICAgICAgICAgICAgIHJlc3VsdHNDb3VudDogX2ZldGNoZWRJdGVtc1tvcHRpb25zLnJlc3VsdHNDb3VudF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9wdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfZmV0Y2hlZEl0ZW1zO1xyXG4gICAgICB9KSxcclxuICAgICAgbWFwKChyZXMpID0+IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBfY2xvbmVEZWVwKHtcclxuICAgICAgICAgIFtvcHRpb25zLm1hcHBlZERhdGFLZXldOiByZXMuZGF0YSxcclxuICAgICAgICAgIFtvcHRpb25zLmxhc3RNb2RpZmllZERhdGVLZXldOiByZXMubGFzdE1vZGlmaWVkRGF0ZSxcclxuICAgICAgICAgIFtvcHRpb25zLnJlc3VsdHNDb3VudF06IHJlc1tvcHRpb25zLnJlc3VsdHNDb3VudF0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmVzLm9uRmluaXNoRmV0Y2hpbmcubmV4dChyZXN1bHQpO1xyXG4gICAgICAgIHJlcy5vbkZpbmlzaEZldGNoaW5nLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gICNmaW5kTm9kZShcclxuICAgIGl0ZW1zOiBhbnlbXSxcclxuICAgIHVuaXF1ZUNvbXBhcmVLZXk6IHN0cmluZyxcclxuICAgIGNoaWxkcmVuUGF0aDogc3RyaW5nLFxyXG4gICAgdmFsdWU6IGFueVxyXG4gICkge1xyXG4gICAgZm9yIChjb25zdCBub2RlIG9mIGl0ZW1zKSB7XHJcbiAgICAgIGlmIChub2RlW3VuaXF1ZUNvbXBhcmVLZXldID09PSB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRWYWx1ZShub2RlLCBjaGlsZHJlblBhdGgpO1xyXG4gICAgICBpZiAoY2hpbGRyZW4pIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLiNmaW5kTm9kZShcclxuICAgICAgICAgIGNoaWxkcmVuLFxyXG4gICAgICAgICAgdW5pcXVlQ29tcGFyZUtleSxcclxuICAgICAgICAgIGNoaWxkcmVuUGF0aCxcclxuICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG4gICNmaW5kTGFyZ2VzdERhdGUoXHJcbiAgICBub2RlTGlzdDogYW55W10sXHJcbiAgICBjaGlsZHJlblBhdGg6IHN0cmluZyxcclxuICAgIGRhdGVQYXRoOiBzdHJpbmdcclxuICApOiBzdHJpbmcge1xyXG4gICAgbGV0IGxhcmdlc3REYXRlOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgY29uc3QgdHJhdmVyc2UgPSAobm9kZTogYW55KSA9PiB7XHJcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuO1xyXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0VmFsdWUobm9kZSwgY2hpbGRyZW5QYXRoKTtcclxuICAgICAgY29uc3Qgbm9kZURhdGUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFZhbHVlKG5vZGUsIGRhdGVQYXRoKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIG5vZGVEYXRlICYmXHJcbiAgICAgICAgKCFsYXJnZXN0RGF0ZSB8fCBuZXcgRGF0ZShub2RlRGF0ZSkgPiBuZXcgRGF0ZShsYXJnZXN0RGF0ZSkpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxhcmdlc3REYXRlID0gbm9kZURhdGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoaWxkcmVuPy5sZW5ndGgpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XHJcbiAgICAgICAgICB0cmF2ZXJzZShjaGlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgbm9kZUxpc3QuZm9yRWFjaCgobm9kZSkgPT4gdHJhdmVyc2Uobm9kZSkpO1xyXG4gICAgcmV0dXJuIGxhcmdlc3REYXRlO1xyXG4gIH1cclxuICAjaGFuZGxlRmV0Y2hlZEl0ZW1zKFxyXG4gICAgb3B0aW9uczogQmFzZUNhY2hlT3B0aW9ucyxcclxuICAgIHJlczogYW55XHJcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy4jZmV0Y2hlZEl0ZW1zW29wdGlvbnMuY2FjaGVLZXldLmRhdGE/Lmxlbmd0aCkge1xyXG4gICAgICByZXNbb3B0aW9ucy5tYXBwZWREYXRhS2V5XS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFZhbHVlKFxyXG4gICAgICAgICAgYSxcclxuICAgICAgICAgIG9wdGlvbnMubGFzdE1vZGlmaWVkRGF0ZVBhdGhcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHNlY29uZCA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0VmFsdWUoXHJcbiAgICAgICAgICBiLFxyXG4gICAgICAgICAgb3B0aW9ucy5sYXN0TW9kaWZpZWREYXRlUGF0aFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGZpcnN0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShzZWNvbmQpLmdldFRpbWUoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJlc1tvcHRpb25zLm1hcHBlZERhdGFLZXldLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy4jZmluZE5vZGUoXHJcbiAgICAgICAgICB0aGlzLiNmZXRjaGVkSXRlbXNbb3B0aW9ucy5jYWNoZUtleV0uZGF0YSxcclxuICAgICAgICAgIG9wdGlvbnMudW5pcXVlQ29tcGFyZUtleSxcclxuICAgICAgICAgIG9wdGlvbnMuY2hpbGRyZW5QYXRoLFxyXG4gICAgICAgICAgZWxlbWVudFtvcHRpb25zLnVuaXF1ZUNvbXBhcmVLZXldXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWFwcGVkRWxlbWVudCA9IG9wdGlvbnMucHJlcGFyZURhdGFCZWZvcmVDYWNoaW5nKFtlbGVtZW50XSlbMF07XHJcbiAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgIC8vIGVkaXQgOiB1cGRhdGUgaXRlbSBpbiBjYWNoZVxyXG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRTb3VyY2UgPSBfb21pdChcclxuICAgICAgICAgICAgbWFwcGVkRWxlbWVudCxcclxuICAgICAgICAgICAgb3B0aW9ucy5leGNsdWRlS2V5c1doZW5VcGRhdGVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBfYXNzaWduKGl0ZW0sIGZpbHRlcmVkU291cmNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gYWRkIDogY2hlY2sgZGF0ZSB0byBkZXRlcm1pbmUgd2hlcmUgd2lsbCBpbnNlcnRcclxuXHJcbiAgICAgICAgICAvLyBpZiBpdGVtIHBhcmVudCBub3QgZm91bmQgYWRkIGFzIHJvb3QgZWxzZSB3aWxsIGFkZCBsZWF2ZXMgdG8gc3ViUGFyZW50XHJcbiAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy4jZmluZE5vZGUoXHJcbiAgICAgICAgICAgIHRoaXMuI2ZldGNoZWRJdGVtc1tvcHRpb25zLmNhY2hlS2V5XS5kYXRhLFxyXG4gICAgICAgICAgICBvcHRpb25zLnVuaXF1ZUNvbXBhcmVLZXksXHJcbiAgICAgICAgICAgIG9wdGlvbnMuY2hpbGRyZW5QYXRoLFxyXG4gICAgICAgICAgICBlbGVtZW50W29wdGlvbnMucGFyZW50S2V5XVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgICAvLyB3aWxsIGNvbXBhcmUgd2l0aCBub2RlIGNoaWxkIHRvIGFkZFxyXG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0VmFsdWUoXHJcbiAgICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgICBvcHRpb25zLmNoaWxkcmVuUGF0aFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLiNhZGRJdGVtc1RvKG9wdGlvbnMsIGNoaWxkcmVuLCBlbGVtZW50KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHdpbGwgY29tcGFyZSB3aXRoIHJvb3QgbGV2ZWwgdG8gYWRkXHJcbiAgICAgICAgICAgIHRoaXMuI2FkZEl0ZW1zVG8oXHJcbiAgICAgICAgICAgICAgb3B0aW9ucyxcclxuICAgICAgICAgICAgICB0aGlzLiNmZXRjaGVkSXRlbXNbb3B0aW9ucy5jYWNoZUtleV0uZGF0YSxcclxuICAgICAgICAgICAgICBlbGVtZW50XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc1tvcHRpb25zLm1hcHBlZERhdGFLZXldID0gb3B0aW9ucy5wcmVwYXJlRGF0YUJlZm9yZUNhY2hpbmcoXHJcbiAgICAgICAgcmVzW29wdGlvbnMubWFwcGVkRGF0YUtleV1cclxuICAgICAgKTtcclxuICAgICAgdGhpcy4jZmV0Y2hlZEl0ZW1zW29wdGlvbnMuY2FjaGVLZXldLmRhdGEgPSByZXNbb3B0aW9ucy5tYXBwZWREYXRhS2V5XTtcclxuICAgICAgdGhpcy4jZmV0Y2hlZEl0ZW1zW29wdGlvbnMuY2FjaGVLZXldLnJlc3VsdHNDb3VudCA9XHJcbiAgICAgICAgcmVzW29wdGlvbnMucmVzdWx0c0NvdW50XTtcclxuICAgIH1cclxuICAgIGlmIChyZXNbb3B0aW9ucy50b3RhbFBhZ2VLZXldIC0gcmVzW29wdGlvbnMucGFnZUtleV0gPiAxKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLiNmZXRjaGVkSXRlbXNbb3B0aW9ucy5jYWNoZUtleV0ucmVxdWVzdCh7XHJcbiAgICAgICAgLi4uKHRoaXMuI2ZldGNoZWRJdGVtc1tvcHRpb25zLmNhY2hlS2V5XS5wYXJhbXMgfHwge30pLFxyXG4gICAgICAgIFtvcHRpb25zLnBhZ2VLZXldOiByZXNbb3B0aW9ucy5wYWdlS2V5XSArIDEsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG4gICNhZGRJdGVtc1RvKG9wdGlvbnM6IEJhc2VDYWNoZU9wdGlvbnMsIGRhdGE6IGFueVtdLCBpdGVtOiBhbnkpIHtcclxuICAgIGNvbnN0IGZpcnN0Q2FjaGVkTW9kaWZpZWQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFZhbHVlKFxyXG4gICAgICBkYXRhWzBdLFxyXG4gICAgICBvcHRpb25zLmxhc3RNb2RpZmllZERhdGVQYXRoXHJcbiAgICApO1xyXG4gICAgY29uc3QgY3VycmVudE1vZGlmaWVkID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRWYWx1ZShcclxuICAgICAgaXRlbSxcclxuICAgICAgb3B0aW9ucy5sYXN0TW9kaWZpZWREYXRlUGF0aFxyXG4gICAgKTtcclxuICAgIGlmIChmaXJzdENhY2hlZE1vZGlmaWVkIDwgY3VycmVudE1vZGlmaWVkKSB7XHJcbiAgICAgIGRhdGEudW5zaGlmdCguLi5vcHRpb25zLnByZXBhcmVEYXRhQmVmb3JlQ2FjaGluZyhbaXRlbV0pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRhdGEucHVzaCguLi5vcHRpb25zLnByZXBhcmVEYXRhQmVmb3JlQ2FjaGluZyhbaXRlbV0pKTtcclxuICAgIH1cclxuICB9XHJcbiAgI3ByZXBhcmVPcHRpb25zKG9wdGlvbnM6IEJhc2VDYWNoZU9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMucHJlcGFyZURhdGFCZWZvcmVDYWNoaW5nID1cclxuICAgICAgb3B0aW9ucy5wcmVwYXJlRGF0YUJlZm9yZUNhY2hpbmcgfHwgREVGQVVMVF9DQUNIRV9PUFRJT05TLlBSRVBBUkVfREFUQTtcclxuICAgIG9wdGlvbnMucGFnZUtleSA9IG9wdGlvbnMucGFnZUtleSB8fCBERUZBVUxUX0NBQ0hFX09QVElPTlMuUEFHRV9LRVk7XHJcbiAgICBvcHRpb25zLnRvdGFsUGFnZUtleSA9XHJcbiAgICAgIG9wdGlvbnMudG90YWxQYWdlS2V5IHx8IERFRkFVTFRfQ0FDSEVfT1BUSU9OUy5UT1RBTF9QQUdFX0tFWTtcclxuICAgIG9wdGlvbnMucmVzdWx0c0NvdW50ID1cclxuICAgICAgb3B0aW9ucy5yZXN1bHRzQ291bnQgfHwgREVGQVVMVF9DQUNIRV9PUFRJT05TLlJFU1VMVFNfQ09VTlRfS0VZO1xyXG4gICAgb3B0aW9ucy5tYXBwZWREYXRhS2V5ID1cclxuICAgICAgb3B0aW9ucy5tYXBwZWREYXRhS2V5IHx8IERFRkFVTFRfQ0FDSEVfT1BUSU9OUy5NQVBQRURfREFUQV9LRVk7XHJcbiAgICBvcHRpb25zLnVuaXF1ZUNvbXBhcmVLZXkgPVxyXG4gICAgICBvcHRpb25zLnVuaXF1ZUNvbXBhcmVLZXkgfHwgREVGQVVMVF9DQUNIRV9PUFRJT05TLlVOSVFVRV9DT01QQVJFX0tFWTtcclxuICAgIG9wdGlvbnMubWluQ29tcGFyZURhdGVLZXkgPVxyXG4gICAgICBvcHRpb25zLm1pbkNvbXBhcmVEYXRlS2V5IHx8IERFRkFVTFRfQ0FDSEVfT1BUSU9OUy5NSU5fQ09NUEFSRV9EQVRFX0tFWTtcclxuICAgIG9wdGlvbnMubGFzdE1vZGlmaWVkRGF0ZUtleSA9XHJcbiAgICAgIG9wdGlvbnMubGFzdE1vZGlmaWVkRGF0ZUtleSB8fCBERUZBVUxUX0NBQ0hFX09QVElPTlMuTEFTVF9NT0RJRklFRF9LRVk7XHJcbiAgICBvcHRpb25zLmxhc3RNb2RpZmllZERhdGVQYXRoID1cclxuICAgICAgb3B0aW9ucy5sYXN0TW9kaWZpZWREYXRlUGF0aCB8fCBERUZBVUxUX0NBQ0hFX09QVElPTlMuTEFTVF9NT0RJRklFRF9QQVRIO1xyXG4gICAgb3B0aW9ucy5leGNsdWRlS2V5c1doZW5VcGRhdGUgPVxyXG4gICAgICBvcHRpb25zLmV4Y2x1ZGVLZXlzV2hlblVwZGF0ZSB8fFxyXG4gICAgICBERUZBVUxUX0NBQ0hFX09QVElPTlMuRVhDTFVERV9LRVlTX1dIRU5fVVBEQVRFO1xyXG4gICAgb3B0aW9ucy5jaGlsZHJlblBhdGggPVxyXG4gICAgICBvcHRpb25zLmNoaWxkcmVuUGF0aCB8fCBERUZBVUxUX0NBQ0hFX09QVElPTlMuQ0hJTERSRU5fUEFUSDtcclxuICAgIG9wdGlvbnMucGFyZW50S2V5ID0gb3B0aW9ucy5wYXJlbnRLZXkgfHwgREVGQVVMVF9DQUNIRV9PUFRJT05TLlBBUkVOVF9LRVk7XHJcbiAgfVxyXG4gICNwcmVwYXJlQ29uZmlnKCkge1xyXG4gICAgREVGQVVMVF9UVExfQ09ORklHLlRUTCA9XHJcbiAgICAgIEVudk1hbmFnZXIuZW52aXJvbm1lbnQ/LmNhY2hlPy50dGwgfHwgREVGQVVMVF9UVExfQ09ORklHLlRUTDtcclxuICAgIERFRkFVTFRfVFRMX0NPTkZJRy5VTklUID1cclxuICAgICAgRW52TWFuYWdlci5lbnZpcm9ubWVudD8uY2FjaGU/LnR0bFVuaXQgfHwgREVGQVVMVF9UVExfQ09ORklHLlVOSVQ7XHJcbiAgICBERUZBVUxUX1RUTF9DT05GSUcuQVVUT19DSEVDSyA9XHJcbiAgICAgIEVudk1hbmFnZXIuZW52aXJvbm1lbnQ/LmNhY2hlPy5hdXRvQ2hlY2sgPT0gXCJZRVNcIjtcclxuICAgIERFRkFVTFRfVFRMX0NPTkZJRy5SRVRSWSA9XHJcbiAgICAgIEVudk1hbmFnZXIuZW52aXJvbm1lbnQ/LmNhY2hlPy5yZXRyeSB8fCBERUZBVUxUX1RUTF9DT05GSUcuUkVUUlk7XHJcbiAgfVxyXG4gICNhZGQxU2Vjb25kVG9Nb2RpZmllZERhdGUoZGF0ZTogRGF0ZSk6IERhdGUge1xyXG4gICAgbGV0IG5ld0RhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XHJcbiAgICBuZXdEYXRlLnNldFNlY29uZHMobmV3RGF0ZS5nZXRTZWNvbmRzKCkgKyAxKTtcclxuICAgIHJldHVybiBuZXdEYXRlO1xyXG4gIH1cclxuICAjY2xlYXIodXNlck5hbWU6IHN0cmluZywga2V5T3JBbGw6IHN0cmluZyA9IFwiXCIpIHtcclxuICAgIE9iamVjdC5rZXlzKHdpbmRvdy5sb2NhbFN0b3JhZ2UpXHJcbiAgICAgIC5maWx0ZXIoKHEpID0+XHJcbiAgICAgICAgcS5zdGFydHNXaXRoKGAke3VzZXJOYW1lfV9fJHtERUZBVUxUX0NBQ0hFX09QVElPTlMuUFJFRklYfSR7a2V5T3JBbGx9YClcclxuICAgICAgKVxyXG4gICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAjdmFsaWRhdGVUVExGb3JLZXkob3B0aW9uczogQmFzZUNhY2hlT3B0aW9ucykge1xyXG4gICAgY29uc3QgZmlyc3RGZXRjaGluZ0RhdGUgPSB0aGlzLiNnZXRJdGVtKG9wdGlvbnMpPy5maXJzdEZldGNoaW5nRGF0ZTtcclxuXHJcbiAgICBpZiAoIWZpcnN0RmV0Y2hpbmdEYXRlKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgbW9tZW50RGF0ZTEgPSBtb21lbnQobmV3IERhdGUoZmlyc3RGZXRjaGluZ0RhdGUpKTtcclxuICAgIGNvbnN0IG1vbWVudERhdGUyID0gbW9tZW50KG5ldyBEYXRlKCkpO1xyXG5cclxuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBtb21lbnREYXRlMi5kaWZmKG1vbWVudERhdGUxLCBERUZBVUxUX1RUTF9DT05GSUcuVU5JVCk7XHJcblxyXG4gICAgaWYgKGRpZmZlcmVuY2UgPj0gREVGQVVMVF9UVExfQ09ORklHLlRUTClcclxuICAgICAgdGhpcy4jY2xlYXIob3B0aW9ucy51c2VyTmFtZSwgb3B0aW9ucy5jYWNoZUtleSk7XHJcbiAgfVxyXG4gICNzZXRJdGVtSW5NYXAoa2V5OiBzdHJpbmcsIHZhbD86IENhY2hlSW5mbyk6IHZvaWQge1xyXG4gICAgY29uc3QgZW1wdHk6IENhY2hlSW5mbyA9IHtcclxuICAgICAgZGF0YTogW10sXHJcbiAgICAgIGZpcnN0RmV0Y2hpbmdEYXRlOiBcIlwiLFxyXG4gICAgICBsYXN0TW9kaWZpZWREYXRlOiBcIlwiLFxyXG4gICAgICByZXN1bHRzQ291bnQ6IDAsXHJcbiAgICAgIGZldGNoaW5nSXRlbXNGcm9tVGhlU2VydmVyOiBmYWxzZSxcclxuICAgICAgb25GaW5pc2hGZXRjaGluZzogbmV3IFN1YmplY3Q8Q2FjaGVJbmZvPigpLFxyXG4gICAgfTtcclxuICAgIGxldCB2YWx1ZTogQ2FjaGVJbmZvID0gdmFsID8gdmFsIDogZW1wdHk7XHJcbiAgICB0aGlzLiNmZXRjaGVkSXRlbXNba2V5XSA9IHZhbHVlO1xyXG4gIH1cclxuICAjZ2V0SXRlbShvcHRpb25zOiBCYXNlQ2FjaGVPcHRpb25zKSB7XHJcbiAgICBsZXQgZGF0YTogQ2FjaGVJbmZvO1xyXG4gICAgaWYgKG9wdGlvbnMuaW5NZW1vcnkpIHtcclxuICAgICAgZGF0YSA9IHRoaXMuI2ZldGNoZWRJdGVtc1tvcHRpb25zLmNhY2hlS2V5XTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlLmdldChcclxuICAgICAgICBgJHtERUZBVUxUX0NBQ0hFX09QVElPTlMuUFJFRklYfSR7b3B0aW9ucy5jYWNoZUtleX1gXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICghdmFsdWUpIHJldHVybjtcclxuICAgICAgZGF0YSA9IEpTT04ucGFyc2UodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG4gICNzZXRJdGVtKHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBvcHRpb25zOiBCYXNlQ2FjaGVPcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucy5pbk1lbW9yeSkgcmV0dXJuO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudXNlclByZWZlcmVuY2VzU2VydmljZS5zZXQoXHJcbiAgICAgICAgYCR7REVGQVVMVF9DQUNIRV9PUFRJT05TLlBSRUZJWH0ke29wdGlvbnMuY2FjaGVLZXl9YCxcclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
300
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUtYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvc2hhcmVkL3NlcnZpY2VzL2Jhc2UvY2FjaGUtYmFzZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFrQixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXBELE9BQU8sS0FBSyxNQUFNLGFBQWEsQ0FBQztBQUNoQyxPQUFPLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFDcEMsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7OztBQUszRCxNQUFNLE9BQU8sZ0JBQWdCO0lBRzNCLFlBQ1Usc0JBQThDLEVBQzlDLGNBQThCO1FBRDlCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsbUJBQWMsR0FBZCxjQUFjLENBQWdCOztRQUp4Qyx5Q0FBd0MsSUFBSSxHQUFHLEVBQXFCLEVBQUM7UUFNbkUsdUJBQUEsSUFBSSxvRUFBZSxNQUFuQixJQUFJLENBQWlCLENBQUM7SUFDeEIsQ0FBQztJQUVELE9BQU8sQ0FBQyxRQUFnQjtRQUN0QixPQUFPLElBQUksQ0FB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QUMsc0JBQXNCLENBQUMsR0FBRyxDQUMzQyxHQUFHLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQ3JELENBQUM7UUFDRixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFDbkIsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDMUI7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsaUVBQ1EsS0FBMEIsRUFBRSxPQUF5QjtJQUM1RCxJQUFJLE9BQU8sQ0FBQyxRQUFRO1FBQUUsT0FBTztTQUN4QjtRQUNILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQzdCLEdBQUcscUJBQXFCLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FDdEIsQ0FBQztLQUNIO0FBQ0gsQ0FBQzs4R0F0WFUsZ0JBQWdCO2tIQUFoQixnQkFBZ0IsY0FGZixNQUFNOzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZXhwYW5kLCBsYXN0LCBtYXAsIHJldHJ5LCB0YWtlIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IERFRkFVTFRfQ0FDSEVfT1BUSU9OUyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBCYXNlQ2FjaGVPcHRpb25zLCBDYWNoZUluZm8gfSBmcm9tIFwiLi9tb2RlbHNcIjtcclxuaW1wb3J0IF9vbWl0IGZyb20gXCJsb2Rhc2gvb21pdFwiO1xyXG5pbXBvcnQgX2Fzc2lnbiBmcm9tIFwibG9kYXNoL2Fzc2lnblwiO1xyXG5pbXBvcnQgX2Nsb25lRGVlcCBmcm9tIFwibG9kYXNoL2Nsb25lRGVlcFwiO1xyXG5pbXBvcnQgeyBERUZBVUxUX1RUTF9DT05GSUcgfSBmcm9tIFwiLi9jb25maWdcIjtcclxuaW1wb3J0IHsgVXNlclByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3VzZXIvdXNlci1wcmVmZXJlbmNlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvdXRpbGl0aWVzL3V0aWxpdHkuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFbnZNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvZW52L2Vudi1tYW5hZ2VyXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYWNoZUJhc2VTZXJ2aWNlIHtcclxuICAjZmV0Y2hlZEl0ZW1zOiBNYXA8c3RyaW5nLCBDYWNoZUluZm8+ID0gbmV3IE1hcDxzdHJpbmcsIENhY2hlSW5mbz4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHVzZXJQcmVmZXJlbmNlc1NlcnZpY2U6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy4jcHJlcGFyZUNvbmZpZygpO1xyXG4gIH1cclxuXHJcbiAgaGFzSXRlbShjYWNoZUtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlLmhhc0l0ZW0oXHJcbiAgICAgIGAke0RFRkFVTFRfQ0FDSEVfT1BUSU9OUy5QUkVGSVh9JHtjYWNoZUtleX1gXHJcbiAgICApO1xyXG4gIH1cclxuICBjbGVhckFsbCh1c2VyTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLiNjbGVhcih1c2VyTmFtZSk7XHJcbiAgfVxyXG4gIHZhbGlkYXRlVFRMKHVzZXJOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICghREVGQVVMVF9UVExfQ09ORklHLkFVVE9fQ0hFQ0sgfHwgIXVzZXJOYW1lKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcHJlZml4ID0gYCR7dXNlck5hbWV9X18ke0RFRkFVTFRfQ0FDSEVfT1BUSU9OUy5QUkVGSVh9YDtcclxuICAgIE9iamVjdC5rZXlzKHdpbmRvdy5sb2NhbFN0b3JhZ2UpXHJcbiAgICAgIC5maWx0ZXIoKHEpID0+IHEuc3RhcnRzV2l0aChwcmVmaXgpKVxyXG4gICAgICAuZmlsdGVyKChrZXkpID0+IHtcclxuICAgICAgICBjb25zdCBvcHRpb25zOiBCYXNlQ2FjaGVPcHRpb25zID0ge1xyXG4gICAgICAgICAgY2FjaGVLZXk6IGtleS5yZXBsYWNlKHByZWZpeCwgXCJcIiksXHJcbiAgICAgICAgICB1c2VyTmFtZTogdXNlck5hbWUsXHJcbiAgICAgICAgICByZXF1ZXN0OiBERUZBVUxUX0NBQ0hFX09QVElPTlMuUkVRVUVTVCxcclxuICAgICAgICAgIHByZXBhcmVEYXRhQmVmb3JlQ2FjaGluZzogREVGQVVMVF9DQUNIRV9PUFRJT05TLlBSRVBBUkVfREFUQSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGZpcnN0RmV0Y2hpbmdEYXRlID0gdGhpcy4jZ2V0SXRlbShvcHRpb25zKT8uZmlyc3RGZXRjaGluZ0RhdGU7XHJcbiAgICAgICAgaWYgKCFmaXJzdEZldGNoaW5nRGF0ZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBtb21lbnREYXRlMSA9IG1vbWVudChuZXcgRGF0ZShmaXJzdEZldGNoaW5nRGF0ZSkpO1xyXG4gICAgICAgIGNvbnN0IG1vbWVudERhdGUyID0gbW9tZW50KG5ldyBEYXRlKCkpO1xyXG4gICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBtb21lbnREYXRlMi5kaWZmKFxyXG4gICAgICAgICAgbW9tZW50RGF0ZTEsXHJcbiAgICAgICAgICBERUZBVUxUX1RUTF9DT05GSUcuVU5JVFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGRpZmZlcmVuY2UgPj0gREVGQVVMVF9UVExfQ09ORklHLlRUTDtcclxuICAgICAgfSlcclxuICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgc3RhcnRGZXRjaGluZ0l0ZW1zKG9wdGlvbnM6IEJhc2VDYWNoZU9wdGlvbnMpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy4jdmFsaWRhdGVUVExGb3JLZXkob3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKHRoaXMuI2ZldGNoZWRJdGVtc1tvcHRpb25zLmNhY2hlS2V5XT8uZmV0Y2hpbmdJdGVtc0Zyb21UaGVTZXJ2ZXIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuI2ZldGNoZWRJdGVtc1tcclxuICAgICAgICBvcHRpb25zLmNhY2hlS2V5XHJcbiAgICAgIF0ub25GaW5pc2hGZXRjaGluZy5hc09ic2VydmFibGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuI2hhbmRsZUNhY2hlSXRlbXMob3B0aW9ucykucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKTtcclxuICAgICAgcmV0dXJuIHRoaXMuI2ZldGNoZWRJdGVtc1tcclxuICAgICAgICBvcHRpb25zLmNhY2hlS2V5XHJcbiAgICAgIF0ub25GaW5pc2hGZXRjaGluZy5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgI2hhbmRsZUNhY2hlSXRlbXMob3B0aW9uczogQmFzZUNhY2hlT3B0aW9ucyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgb2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgdGhpcy4jcHJlcGFyZU9wdGlvbnMob3B0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgY2FjaGVkSXRlbSA9IHRoaXMuI2dldEl0ZW0ob3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKGNhY2hlZEl0ZW0pIHtcclxuICAgICAgdGhpcy4jc2V0SXRlbUluTWFwKG9wdGlvbnMuY2FjaGVLZXksIHtcclxuICAgICAgICAuLi5jYWNoZWRJdGVtLFxyXG4gICAgICAgIGZldGNoaW5nSXRlbXNGcm9tVGhlU2VydmVyOiBmYWxzZSxcclxuICAgICAgICBvbkZpbmlzaEZldGNoaW5nOiBuZXcgU3ViamVjdDxDYWNoZUluZm8+KCksXHJcbiAgICAgICAgcmVxdWVzdDogb3B0aW9ucy5yZXF1ZXN0LFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICBbb3B0aW9ucy5wYWdlS2V5XTogMCxcclxuICAgICAgICBbb3B0aW9ucy5taW5Db21wYXJlRGF0ZUtleV06IHRoaXMuI2FkZDFTZWNvbmRUb01vZGlmaWVkRGF0ZShcclxuICAgICAgICAgIG5ldyBEYXRlKHRoaXMuI2ZldGNoZWRJdGVtc1tvcHRpb25zLmNhY2hlS2V5XS5sYXN0TW9kaWZpZWREYXRlKVxyXG4gICAgICAgICkudG9JU09TdHJpbmcoKSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy4jZmV0Y2hlZEl0ZW1zW29wdGlvbnMuY2FjaGVLZXldLnBhcmFtcyA9IHBhcmFtcztcclxuICAgICAgb2JzZXJ2YWJsZSA9IG9wdGlvbnMucmVxdWVzdChwYXJhbXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy4jc2V0SXRlbUluTWFwKG9wdGlvbnMuY2FjaGVLZXkpO1xyXG4gICAgICB0aGlzLiNmZXRjaGVkSXRlbXNbb3B0aW9ucy5jYWNoZUtleV0ucmVxdWVzdCA9IG9wdGlvbnMucmVxdWVzdDtcclxuICAgICAgdGhpcy4jZmV0Y2hlZEl0ZW1zW29wdGlvbnMuY2FjaGVLZXldLmZpcnN0RmV0Y2hpbmdEYXRlID1cclxuICAgICAgICBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgIG9ic2VydmFibGUgPSBvcHRpb25zLnJlcXVlc3QoeyBbb3B0aW9ucy5wYWdlS2V5XTogMCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLiNmZXRjaGVkSXRlbXNbb3B0aW9ucy5jYWNoZUtleV0uZmV0Y2hpbmdJdGVtc0Zyb21UaGVTZXJ2ZXIgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG9ic2VydmFibGUucGlwZShcclxuICAgICAgcmV0cnkoREVGQVVMVF9UVExfQ09ORklHLlJFVFJZKSxcclxuICAgICAgZXhwYW5kKChyZXN1bHRzOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgYW5vdGhlckNhbGw6IE9ic2VydmFibGU8YW55PiB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIGlmIChyZXN1bHRzICYmIHJlc3VsdHNbb3B0aW9ucy5tYXBwZWREYXRhS2V5XT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBhbm90aGVyQ2FsbCA9IHRoaXMuI2hhbmRsZUZldGNoZWRJdGVtcyhvcHRpb25zLCByZXN1bHRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFub3RoZXJDYWxsID8gYW5vdGhlckNhbGwgOiBFTVBUWTtcclxuICAgICAgfSksXHJcbiAgICAgIGxhc3QoKSxcclxuICAgICAgbWFwKChfKSA9PiB7XHJcbiAgICAgICAgbGV0IF9mZXRjaGVkSXRlbXMgPSB0aGlzLiNmZXRjaGVkSXRlbXNbb3B0aW9ucy5jYWNoZUtleV0gYXMgQ2FjaGVJbmZvO1xyXG4gICAgICAgIF9mZXRjaGVkSXRlbXMuZmV0Y2hpbmdJdGVtc0Zyb21UaGVTZXJ2ZXIgPSBmYWxzZTtcclxuICAgICAgICBpZiAoX2ZldGNoZWRJdGVtcy5kYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgIF9mZXRjaGVkSXRlbXMubGFzdE1vZGlmaWVkRGF0ZSA9IHRoaXMuI2ZpbmRMYXJnZXN0RGF0ZShcclxuICAgICAgICAgICAgX2ZldGNoZWRJdGVtcy5kYXRhLFxyXG4gICAgICAgICAgICBvcHRpb25zLmNoaWxkcmVuUGF0aCxcclxuICAgICAgICAgICAgb3B0aW9ucy5sYXN0TW9kaWZpZWREYXRlUGF0aFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuI3NldEl0ZW0oXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBkYXRhOiBfZmV0Y2hlZEl0ZW1zLmRhdGEsXHJcbiAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkRGF0ZTogX2ZldGNoZWRJdGVtcy5sYXN0TW9kaWZpZWREYXRlLFxyXG4gICAgICAgICAgICAgIGZpcnN0RmV0Y2hpbmdEYXRlOiBfZmV0Y2hlZEl0ZW1zLmZpcnN0RmV0Y2hpbmdEYXRlLFxyXG4gICAgICAgICAgICAgIHJlc3VsdHNDb3VudDogX2ZldGNoZWRJdGVtc1tvcHRpb25zLnJlc3VsdHNDb3VudF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9wdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfZmV0Y2hlZEl0ZW1zO1xyXG4gICAgICB9KSxcclxuICAgICAgbWFwKChyZXMpID0+IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBfY2xvbmVEZWVwKHtcclxuICAgICAgICAgIFtvcHRpb25zLm1hcHBlZERhdGFLZXldOiByZXMuZGF0YSxcclxuICAgICAgICAgIFtvcHRpb25zLmxhc3RNb2RpZmllZERhdGVLZXldOiByZXMubGFzdE1vZGlmaWVkRGF0ZSxcclxuICAgICAgICAgIFtvcHRpb25zLnJlc3VsdHNDb3VudF06IHJlc1tvcHRpb25zLnJlc3VsdHNDb3VudF0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmVzLm9uRmluaXNoRmV0Y2hpbmcubmV4dChyZXN1bHQpO1xyXG4gICAgICAgIHJlcy5vbkZpbmlzaEZldGNoaW5nLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVyKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgZXI7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICAjZmluZE5vZGUoXHJcbiAgICBpdGVtczogYW55W10sXHJcbiAgICB1bmlxdWVDb21wYXJlS2V5OiBzdHJpbmcsXHJcbiAgICBjaGlsZHJlblBhdGg6IHN0cmluZyxcclxuICAgIHZhbHVlOiBhbnlcclxuICApIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBpdGVtcykge1xyXG4gICAgICBpZiAobm9kZVt1bmlxdWVDb21wYXJlS2V5XSA9PT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0VmFsdWUobm9kZSwgY2hpbGRyZW5QYXRoKTtcclxuICAgICAgaWYgKGNoaWxkcmVuKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy4jZmluZE5vZGUoXHJcbiAgICAgICAgICBjaGlsZHJlbixcclxuICAgICAgICAgIHVuaXF1ZUNvbXBhcmVLZXksXHJcbiAgICAgICAgICBjaGlsZHJlblBhdGgsXHJcbiAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICAjZmluZExhcmdlc3REYXRlKFxyXG4gICAgbm9kZUxpc3Q6IGFueVtdLFxyXG4gICAgY2hpbGRyZW5QYXRoOiBzdHJpbmcsXHJcbiAgICBkYXRlUGF0aDogc3RyaW5nXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGxldCBsYXJnZXN0RGF0ZTogc3RyaW5nID0gbnVsbDtcclxuICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIW5vZGUpIHJldHVybjtcclxuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFZhbHVlKG5vZGUsIGNoaWxkcmVuUGF0aCk7XHJcbiAgICAgIGNvbnN0IG5vZGVEYXRlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRWYWx1ZShub2RlLCBkYXRlUGF0aCk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBub2RlRGF0ZSAmJlxyXG4gICAgICAgICghbGFyZ2VzdERhdGUgfHwgbmV3IERhdGUobm9kZURhdGUpID4gbmV3IERhdGUobGFyZ2VzdERhdGUpKVxyXG4gICAgICApIHtcclxuICAgICAgICBsYXJnZXN0RGF0ZSA9IG5vZGVEYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xyXG4gICAgICAgICAgdHJhdmVyc2UoY2hpbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIG5vZGVMaXN0LmZvckVhY2goKG5vZGUpID0+IHRyYXZlcnNlKG5vZGUpKTtcclxuICAgIHJldHVybiBsYXJnZXN0RGF0ZTtcclxuICB9XHJcbiAgI2hhbmRsZUZldGNoZWRJdGVtcyhcclxuICAgIG9wdGlvbnM6IEJhc2VDYWNoZU9wdGlvbnMsXHJcbiAgICByZXM6IGFueVxyXG4gICk6IE9ic2VydmFibGU8YW55PiB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMuI2ZldGNoZWRJdGVtc1tvcHRpb25zLmNhY2hlS2V5XS5kYXRhPy5sZW5ndGgpIHtcclxuICAgICAgcmVzW29wdGlvbnMubWFwcGVkRGF0YUtleV0uc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRWYWx1ZShcclxuICAgICAgICAgIGEsXHJcbiAgICAgICAgICBvcHRpb25zLmxhc3RNb2RpZmllZERhdGVQYXRoXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzZWNvbmQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFZhbHVlKFxyXG4gICAgICAgICAgYixcclxuICAgICAgICAgIG9wdGlvbnMubGFzdE1vZGlmaWVkRGF0ZVBhdGhcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShmaXJzdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoc2Vjb25kKS5nZXRUaW1lKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXNbb3B0aW9ucy5tYXBwZWREYXRhS2V5XS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuI2ZpbmROb2RlKFxyXG4gICAgICAgICAgdGhpcy4jZmV0Y2hlZEl0ZW1zW29wdGlvbnMuY2FjaGVLZXldLmRhdGEsXHJcbiAgICAgICAgICBvcHRpb25zLnVuaXF1ZUNvbXBhcmVLZXksXHJcbiAgICAgICAgICBvcHRpb25zLmNoaWxkcmVuUGF0aCxcclxuICAgICAgICAgIGVsZW1lbnRbb3B0aW9ucy51bmlxdWVDb21wYXJlS2V5XVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1hcHBlZEVsZW1lbnQgPSBvcHRpb25zLnByZXBhcmVEYXRhQmVmb3JlQ2FjaGluZyhbZWxlbWVudF0pWzBdO1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAvLyBlZGl0IDogdXBkYXRlIGl0ZW0gaW4gY2FjaGVcclxuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkU291cmNlID0gX29taXQoXHJcbiAgICAgICAgICAgIG1hcHBlZEVsZW1lbnQsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZXhjbHVkZUtleXNXaGVuVXBkYXRlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgX2Fzc2lnbihpdGVtLCBmaWx0ZXJlZFNvdXJjZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIGFkZCA6IGNoZWNrIGRhdGUgdG8gZGV0ZXJtaW5lIHdoZXJlIHdpbGwgaW5zZXJ0XHJcblxyXG4gICAgICAgICAgLy8gaWYgaXRlbSBwYXJlbnQgbm90IGZvdW5kIGFkZCBhcyByb290IGVsc2Ugd2lsbCBhZGQgbGVhdmVzIHRvIHN1YlBhcmVudFxyXG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuI2ZpbmROb2RlKFxyXG4gICAgICAgICAgICB0aGlzLiNmZXRjaGVkSXRlbXNbb3B0aW9ucy5jYWNoZUtleV0uZGF0YSxcclxuICAgICAgICAgICAgb3B0aW9ucy51bmlxdWVDb21wYXJlS2V5LFxyXG4gICAgICAgICAgICBvcHRpb25zLmNoaWxkcmVuUGF0aCxcclxuICAgICAgICAgICAgZWxlbWVudFtvcHRpb25zLnBhcmVudEtleV1cclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaWYgKG5vZGUpIHtcclxuICAgICAgICAgICAgLy8gd2lsbCBjb21wYXJlIHdpdGggbm9kZSBjaGlsZCB0byBhZGRcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFZhbHVlKFxyXG4gICAgICAgICAgICAgIG5vZGUsXHJcbiAgICAgICAgICAgICAgb3B0aW9ucy5jaGlsZHJlblBhdGhcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy4jYWRkSXRlbXNUbyhvcHRpb25zLCBjaGlsZHJlbiwgZWxlbWVudCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB3aWxsIGNvbXBhcmUgd2l0aCByb290IGxldmVsIHRvIGFkZFxyXG4gICAgICAgICAgICB0aGlzLiNhZGRJdGVtc1RvKFxyXG4gICAgICAgICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgdGhpcy4jZmV0Y2hlZEl0ZW1zW29wdGlvbnMuY2FjaGVLZXldLmRhdGEsXHJcbiAgICAgICAgICAgICAgZWxlbWVudFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXNbb3B0aW9ucy5tYXBwZWREYXRhS2V5XSA9IG9wdGlvbnMucHJlcGFyZURhdGFCZWZvcmVDYWNoaW5nKFxyXG4gICAgICAgIHJlc1tvcHRpb25zLm1hcHBlZERhdGFLZXldXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuI2ZldGNoZWRJdGVtc1tvcHRpb25zLmNhY2hlS2V5XS5kYXRhID0gcmVzW29wdGlvbnMubWFwcGVkRGF0YUtleV07XHJcbiAgICAgIHRoaXMuI2ZldGNoZWRJdGVtc1tvcHRpb25zLmNhY2hlS2V5XS5yZXN1bHRzQ291bnQgPVxyXG4gICAgICAgIHJlc1tvcHRpb25zLnJlc3VsdHNDb3VudF07XHJcbiAgICB9XHJcbiAgICBpZiAocmVzW29wdGlvbnMudG90YWxQYWdlS2V5XSAtIHJlc1tvcHRpb25zLnBhZ2VLZXldID4gMSkge1xyXG4gICAgICByZXR1cm4gdGhpcy4jZmV0Y2hlZEl0ZW1zW29wdGlvbnMuY2FjaGVLZXldLnJlcXVlc3Qoe1xyXG4gICAgICAgIC4uLih0aGlzLiNmZXRjaGVkSXRlbXNbb3B0aW9ucy5jYWNoZUtleV0ucGFyYW1zIHx8IHt9KSxcclxuICAgICAgICBbb3B0aW9ucy5wYWdlS2V5XTogcmVzW29wdGlvbnMucGFnZUtleV0gKyAxLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuICAjYWRkSXRlbXNUbyhvcHRpb25zOiBCYXNlQ2FjaGVPcHRpb25zLCBkYXRhOiBhbnlbXSwgaXRlbTogYW55KSB7XHJcbiAgICBjb25zdCBmaXJzdENhY2hlZE1vZGlmaWVkID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRWYWx1ZShcclxuICAgICAgZGF0YVswXSxcclxuICAgICAgb3B0aW9ucy5sYXN0TW9kaWZpZWREYXRlUGF0aFxyXG4gICAgKTtcclxuICAgIGNvbnN0IGN1cnJlbnRNb2RpZmllZCA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0VmFsdWUoXHJcbiAgICAgIGl0ZW0sXHJcbiAgICAgIG9wdGlvbnMubGFzdE1vZGlmaWVkRGF0ZVBhdGhcclxuICAgICk7XHJcbiAgICBpZiAoZmlyc3RDYWNoZWRNb2RpZmllZCA8IGN1cnJlbnRNb2RpZmllZCkge1xyXG4gICAgICBkYXRhLnVuc2hpZnQoLi4ub3B0aW9ucy5wcmVwYXJlRGF0YUJlZm9yZUNhY2hpbmcoW2l0ZW1dKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkYXRhLnB1c2goLi4ub3B0aW9ucy5wcmVwYXJlRGF0YUJlZm9yZUNhY2hpbmcoW2l0ZW1dKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gICNwcmVwYXJlT3B0aW9ucyhvcHRpb25zOiBCYXNlQ2FjaGVPcHRpb25zKSB7XHJcbiAgICBvcHRpb25zLnByZXBhcmVEYXRhQmVmb3JlQ2FjaGluZyA9XHJcbiAgICAgIG9wdGlvbnMucHJlcGFyZURhdGFCZWZvcmVDYWNoaW5nIHx8IERFRkFVTFRfQ0FDSEVfT1BUSU9OUy5QUkVQQVJFX0RBVEE7XHJcbiAgICBvcHRpb25zLnBhZ2VLZXkgPSBvcHRpb25zLnBhZ2VLZXkgfHwgREVGQVVMVF9DQUNIRV9PUFRJT05TLlBBR0VfS0VZO1xyXG4gICAgb3B0aW9ucy50b3RhbFBhZ2VLZXkgPVxyXG4gICAgICBvcHRpb25zLnRvdGFsUGFnZUtleSB8fCBERUZBVUxUX0NBQ0hFX09QVElPTlMuVE9UQUxfUEFHRV9LRVk7XHJcbiAgICBvcHRpb25zLnJlc3VsdHNDb3VudCA9XHJcbiAgICAgIG9wdGlvbnMucmVzdWx0c0NvdW50IHx8IERFRkFVTFRfQ0FDSEVfT1BUSU9OUy5SRVNVTFRTX0NPVU5UX0tFWTtcclxuICAgIG9wdGlvbnMubWFwcGVkRGF0YUtleSA9XHJcbiAgICAgIG9wdGlvbnMubWFwcGVkRGF0YUtleSB8fCBERUZBVUxUX0NBQ0hFX09QVElPTlMuTUFQUEVEX0RBVEFfS0VZO1xyXG4gICAgb3B0aW9ucy51bmlxdWVDb21wYXJlS2V5ID1cclxuICAgICAgb3B0aW9ucy51bmlxdWVDb21wYXJlS2V5IHx8IERFRkFVTFRfQ0FDSEVfT1BUSU9OUy5VTklRVUVfQ09NUEFSRV9LRVk7XHJcbiAgICBvcHRpb25zLm1pbkNvbXBhcmVEYXRlS2V5ID1cclxuICAgICAgb3B0aW9ucy5taW5Db21wYXJlRGF0ZUtleSB8fCBERUZBVUxUX0NBQ0hFX09QVElPTlMuTUlOX0NPTVBBUkVfREFURV9LRVk7XHJcbiAgICBvcHRpb25zLmxhc3RNb2RpZmllZERhdGVLZXkgPVxyXG4gICAgICBvcHRpb25zLmxhc3RNb2RpZmllZERhdGVLZXkgfHwgREVGQVVMVF9DQUNIRV9PUFRJT05TLkxBU1RfTU9ESUZJRURfS0VZO1xyXG4gICAgb3B0aW9ucy5sYXN0TW9kaWZpZWREYXRlUGF0aCA9XHJcbiAgICAgIG9wdGlvbnMubGFzdE1vZGlmaWVkRGF0ZVBhdGggfHwgREVGQVVMVF9DQUNIRV9PUFRJT05TLkxBU1RfTU9ESUZJRURfUEFUSDtcclxuICAgIG9wdGlvbnMuZXhjbHVkZUtleXNXaGVuVXBkYXRlID1cclxuICAgICAgb3B0aW9ucy5leGNsdWRlS2V5c1doZW5VcGRhdGUgfHxcclxuICAgICAgREVGQVVMVF9DQUNIRV9PUFRJT05TLkVYQ0xVREVfS0VZU19XSEVOX1VQREFURTtcclxuICAgIG9wdGlvbnMuY2hpbGRyZW5QYXRoID1cclxuICAgICAgb3B0aW9ucy5jaGlsZHJlblBhdGggfHwgREVGQVVMVF9DQUNIRV9PUFRJT05TLkNISUxEUkVOX1BBVEg7XHJcbiAgICBvcHRpb25zLnBhcmVudEtleSA9IG9wdGlvbnMucGFyZW50S2V5IHx8IERFRkFVTFRfQ0FDSEVfT1BUSU9OUy5QQVJFTlRfS0VZO1xyXG4gIH1cclxuICAjcHJlcGFyZUNvbmZpZygpIHtcclxuICAgIERFRkFVTFRfVFRMX0NPTkZJRy5UVEwgPVxyXG4gICAgICBFbnZNYW5hZ2VyLmVudmlyb25tZW50Py5jYWNoZT8udHRsIHx8IERFRkFVTFRfVFRMX0NPTkZJRy5UVEw7XHJcbiAgICBERUZBVUxUX1RUTF9DT05GSUcuVU5JVCA9XHJcbiAgICAgIEVudk1hbmFnZXIuZW52aXJvbm1lbnQ/LmNhY2hlPy50dGxVbml0IHx8IERFRkFVTFRfVFRMX0NPTkZJRy5VTklUO1xyXG4gICAgREVGQVVMVF9UVExfQ09ORklHLkFVVE9fQ0hFQ0sgPVxyXG4gICAgICBFbnZNYW5hZ2VyLmVudmlyb25tZW50Py5jYWNoZT8uYXV0b0NoZWNrID09IFwiWUVTXCI7XHJcbiAgICBERUZBVUxUX1RUTF9DT05GSUcuUkVUUlkgPVxyXG4gICAgICBFbnZNYW5hZ2VyLmVudmlyb25tZW50Py5jYWNoZT8ucmV0cnkgfHwgREVGQVVMVF9UVExfQ09ORklHLlJFVFJZO1xyXG4gIH1cclxuICAjYWRkMVNlY29uZFRvTW9kaWZpZWREYXRlKGRhdGU6IERhdGUpOiBEYXRlIHtcclxuICAgIGxldCBuZXdEYXRlID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xyXG4gICAgbmV3RGF0ZS5zZXRTZWNvbmRzKG5ld0RhdGUuZ2V0U2Vjb25kcygpICsgMSk7XHJcbiAgICByZXR1cm4gbmV3RGF0ZTtcclxuICB9XHJcbiAgI2NsZWFyKHVzZXJOYW1lOiBzdHJpbmcsIGtleU9yQWxsOiBzdHJpbmcgPSBcIlwiKSB7XHJcbiAgICBPYmplY3Qua2V5cyh3aW5kb3cubG9jYWxTdG9yYWdlKVxyXG4gICAgICAuZmlsdGVyKChxKSA9PlxyXG4gICAgICAgIHEuc3RhcnRzV2l0aChgJHt1c2VyTmFtZX1fXyR7REVGQVVMVF9DQUNIRV9PUFRJT05TLlBSRUZJWH0ke2tleU9yQWxsfWApXHJcbiAgICAgIClcclxuICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgI3ZhbGlkYXRlVFRMRm9yS2V5KG9wdGlvbnM6IEJhc2VDYWNoZU9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGZpcnN0RmV0Y2hpbmdEYXRlID0gdGhpcy4jZ2V0SXRlbShvcHRpb25zKT8uZmlyc3RGZXRjaGluZ0RhdGU7XHJcblxyXG4gICAgaWYgKCFmaXJzdEZldGNoaW5nRGF0ZSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG1vbWVudERhdGUxID0gbW9tZW50KG5ldyBEYXRlKGZpcnN0RmV0Y2hpbmdEYXRlKSk7XHJcbiAgICBjb25zdCBtb21lbnREYXRlMiA9IG1vbWVudChuZXcgRGF0ZSgpKTtcclxuXHJcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gbW9tZW50RGF0ZTIuZGlmZihtb21lbnREYXRlMSwgREVGQVVMVF9UVExfQ09ORklHLlVOSVQpO1xyXG5cclxuICAgIGlmIChkaWZmZXJlbmNlID49IERFRkFVTFRfVFRMX0NPTkZJRy5UVEwpXHJcbiAgICAgIHRoaXMuI2NsZWFyKG9wdGlvbnMudXNlck5hbWUsIG9wdGlvbnMuY2FjaGVLZXkpO1xyXG4gIH1cclxuICAjc2V0SXRlbUluTWFwKGtleTogc3RyaW5nLCB2YWw/OiBDYWNoZUluZm8pOiB2b2lkIHtcclxuICAgIGNvbnN0IGVtcHR5OiBDYWNoZUluZm8gPSB7XHJcbiAgICAgIGRhdGE6IFtdLFxyXG4gICAgICBmaXJzdEZldGNoaW5nRGF0ZTogXCJcIixcclxuICAgICAgbGFzdE1vZGlmaWVkRGF0ZTogXCJcIixcclxuICAgICAgcmVzdWx0c0NvdW50OiAwLFxyXG4gICAgICBmZXRjaGluZ0l0ZW1zRnJvbVRoZVNlcnZlcjogZmFsc2UsXHJcbiAgICAgIG9uRmluaXNoRmV0Y2hpbmc6IG5ldyBTdWJqZWN0PENhY2hlSW5mbz4oKSxcclxuICAgIH07XHJcbiAgICBsZXQgdmFsdWU6IENhY2hlSW5mbyA9IHZhbCA/IHZhbCA6IGVtcHR5O1xyXG4gICAgdGhpcy4jZmV0Y2hlZEl0ZW1zW2tleV0gPSB2YWx1ZTtcclxuICB9XHJcbiAgI2dldEl0ZW0ob3B0aW9uczogQmFzZUNhY2hlT3B0aW9ucykge1xyXG4gICAgbGV0IGRhdGE6IENhY2hlSW5mbztcclxuICAgIGlmIChvcHRpb25zLmluTWVtb3J5KSB7XHJcbiAgICAgIGRhdGEgPSB0aGlzLiNmZXRjaGVkSXRlbXNbb3B0aW9ucy5jYWNoZUtleV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudXNlclByZWZlcmVuY2VzU2VydmljZS5nZXQoXHJcbiAgICAgICAgYCR7REVGQVVMVF9DQUNIRV9PUFRJT05TLlBSRUZJWH0ke29wdGlvbnMuY2FjaGVLZXl9YFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIXZhbHVlKSByZXR1cm47XHJcbiAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuICAjc2V0SXRlbSh2YWx1ZTogUmVjb3JkPHN0cmluZywgYW55Piwgb3B0aW9uczogQmFzZUNhY2hlT3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMuaW5NZW1vcnkpIHJldHVybjtcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnVzZXJQcmVmZXJlbmNlc1NlcnZpY2Uuc2V0KFxyXG4gICAgICAgIGAke0RFRkFVTFRfQ0FDSEVfT1BUSU9OUy5QUkVGSVh9JHtvcHRpb25zLmNhY2hlS2V5fWAsXHJcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodmFsdWUpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -2610,7 +2610,8 @@ class CacheBaseService {
2610
2610
  return __classPrivateFieldGet(this, _CacheBaseService_fetchedItems, "f")[options.cacheKey].onFinishFetching.asObservable();
2611
2611
  }
2612
2612
  else {
2613
- return __classPrivateFieldGet(this, _CacheBaseService_instances, "m", _CacheBaseService_handleCacheItems).call(this, options);
2613
+ __classPrivateFieldGet(this, _CacheBaseService_instances, "m", _CacheBaseService_handleCacheItems).call(this, options).pipe(take(1)).subscribe();
2614
+ return __classPrivateFieldGet(this, _CacheBaseService_fetchedItems, "f")[options.cacheKey].onFinishFetching.asObservable();
2614
2615
  }
2615
2616
  }
2616
2617
  }
@@ -2665,6 +2666,8 @@ _CacheBaseService_fetchedItems = new WeakMap(), _CacheBaseService_instances = ne
2665
2666
  res.onFinishFetching.next(result);
2666
2667
  res.onFinishFetching.complete();
2667
2668
  return result;
2669
+ }), catchError((er) => {
2670
+ throw er;
2668
2671
  }));
2669
2672
  }, _CacheBaseService_findNode = function _CacheBaseService_findNode(items, uniqueCompareKey, childrenPath, value) {
2670
2673
  for (const node of items) {
@@ -31039,8 +31042,7 @@ class NotificationsService extends SocketService {
31039
31042
  this._callApi = _callApi;
31040
31043
  this._http = _http;
31041
31044
  this.listenerObserver = new Subject();
31042
- if (((_b = (_a = this._nuxeoService.nuxeoClient) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.id) &&
31043
- ((_c = this._environment) === null || _c === void 0 ? void 0 : _c.socketUrl)) {
31045
+ if (((_b = (_a = this._nuxeoService.nuxeoClient) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.id) && ((_c = this._environment) === null || _c === void 0 ? void 0 : _c.socketUrl)) {
31044
31046
  this.socketConnect()
31045
31047
  .pipe(switchMap(() => this.onMessage$), catchError((error) => {
31046
31048
  console.log(error);
@@ -31052,7 +31054,8 @@ class NotificationsService extends SocketService {
31052
31054
  }
31053
31055
  }
31054
31056
  get _tenantId() {
31055
- return this._nuxeoService.nuxeoClient.user.properties.tenantId;
31057
+ var _a;
31058
+ return (_a = this._nuxeoService.nuxeoClient.user.properties.tenantId) !== null && _a !== void 0 ? _a : '';
31056
31059
  }
31057
31060
  get _appKey() {
31058
31061
  var _a;
@@ -31063,7 +31066,7 @@ class NotificationsService extends SocketService {
31063
31066
  .query({
31064
31067
  pageProvider: NotificationsService.providers.notificationsMango,
31065
31068
  pageSize: 1,
31066
- notfnotificationcontent_company: this._tenantId,
31069
+ notfnotificationcontent_company: `${this._tenantId}`,
31067
31070
  notfnotificationcontent_applicationKey: this._appKey,
31068
31071
  notfnotificationcontent_status: NOTIFICATION_STATUS.new
31069
31072
  }, {})
@@ -31095,7 +31098,7 @@ class NotificationsService extends SocketService {
31095
31098
  }
31096
31099
  subscribe(id) {
31097
31100
  return this._operation(id, 'subscribe', {
31098
- companyName: this._tenantId
31101
+ companyName: `${this._tenantId}`
31099
31102
  });
31100
31103
  }
31101
31104
  resetSubscriptions() {
@@ -31104,7 +31107,7 @@ class NotificationsService extends SocketService {
31104
31107
  url: `${this._environment.nuxeo}${this._environment.customAutomation}`
31105
31108
  })
31106
31109
  .params({
31107
- companyName: this._tenantId,
31110
+ companyName: `${this._tenantId}`,
31108
31111
  applicationKey: this._appKey
31109
31112
  })
31110
31113
  .execute());
@@ -31126,7 +31129,7 @@ class NotificationsService extends SocketService {
31126
31129
  }
31127
31130
  getSubscriptions(payload = {}) {
31128
31131
  return this._callApi
31129
- .query(Object.assign({ pageProvider: NotificationsService.providers.subscription, notfsubscription_companyName: this._tenantId, notfsubscription_applicationKey: this._appKey, pageSize: Number.MAX_SAFE_INTEGER }, payload), {
31132
+ .query(Object.assign({ pageProvider: NotificationsService.providers.subscription, notfsubscription_companyName: `${this._tenantId}`, notfsubscription_applicationKey: this._appKey, pageSize: Number.MAX_SAFE_INTEGER }, payload), {
31130
31133
  headers: {
31131
31134
  properties: '*'
31132
31135
  }
@@ -31135,7 +31138,7 @@ class NotificationsService extends SocketService {
31135
31138
  }
31136
31139
  _getNotifications(pageProvider, payload = {}) {
31137
31140
  return this._callApi
31138
- .query(Object.assign({ pageProvider: pageProvider, notfnotificationcontent_company: this._tenantId, notfnotificationcontent_applicationKey: this._appKey }, payload), {
31141
+ .query(Object.assign({ pageProvider: pageProvider, notfnotificationcontent_company: `${this._tenantId}`, notfnotificationcontent_applicationKey: this._appKey }, payload), {
31139
31142
  headers: {
31140
31143
  properties: '*'
31141
31144
  }
@@ -31147,7 +31150,7 @@ class NotificationsService extends SocketService {
31147
31150
  const bearerToken = `Bearer ${token}`;
31148
31151
  const headers = new HttpHeaders().set('Authorization', bearerToken);
31149
31152
  return headers;
31150
- }), switchMap((headers) => this._http.get(url, { headers })), map((response) => response.entries), map((data) => data.sort((a, b) => b.properties['ordering'] < a.properties['ordering'] ? 1 : -1)));
31153
+ }), switchMap((headers) => this._http.get(url, { headers })), map((response) => response.entries), map((data) => data.sort((a, b) => (b.properties['ordering'] < a.properties['ordering'] ? 1 : -1))));
31151
31154
  }
31152
31155
  _operation(id, option, params = {}) {
31153
31156
  return from(this._nuxeoService.nuxeoClient
@@ -31163,7 +31166,7 @@ class NotificationsService extends SocketService {
31163
31166
  .operation(NotificationsService.operations[option], {
31164
31167
  url: `${this._environment.nuxeo}${this._environment.customAutomation}`
31165
31168
  })
31166
- .params(Object.assign({ companyName: this._tenantId, applicationKey: this._appKey }, params))
31169
+ .params(Object.assign({ companyName: `${this._tenantId}`, applicationKey: this._appKey }, params))
31167
31170
  .execute({}));
31168
31171
  }
31169
31172
  }
@@ -31994,7 +31997,7 @@ class NotificationsButtonComponent extends BaseNotification {
31994
31997
  }
31995
31998
  }
31996
31999
  NotificationsButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NotificationsButtonComponent, deps: [{ token: i0.Injector }, { token: TranslationService }, { token: CustomToastrService }, { token: i0.ChangeDetectorRef }, { token: NOTIFICATIONS_LIST_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
31997
- NotificationsButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: NotificationsButtonComponent, selector: "app-notifications-button", inputs: { styleClass: "styleClass", badgeOptions: "badgeOptions", shouldMarkAsUnread: "shouldMarkAsUnread", ignoredToastEvents: "ignoredToastEvents" }, outputs: { listItemClick: "listItemClick", openSettings: "openSettings", openNotifications: "openNotifications", onNotification: "onNotification" }, host: { classAttribute: "inline-flex justify-center items-center notification-button" }, queries: [{ propertyName: "customIconTemplate", first: true, predicate: NOTIFICATION_ICON, descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<button\r\n *ngIf=\"panelMode === panelModeEnum.panel\"\r\n [matMenuTriggerFor]=\"notifications\"\r\n [matBadge]=\"newNotificationCount$ | async\"\r\n [matBadgeHidden]=\"!(showBadge$ | async)\"\r\n [matBadgeSize]=\"badgeOptions.size\"\r\n [matBadgeColor]=\"badgeOptions.color\"\r\n [matBadgePosition]=\"badgeOptions.position\"\r\n [class]=\"styleClass\"\r\n (menuOpened)=\"markAllAsUnread()\"\r\n>\r\n <ng-container [ngTemplateOutlet]=\"customIconTemplate || defaultIconTemplate\">\r\n </ng-container>\r\n</button>\r\n\r\n<mat-menu #notifications=\"matMenu\" class=\"notification-list-panel\">\r\n <ng-template matMenuContent>\r\n <app-notifications-list\r\n (itemClicked)=\"listItemClick.emit($event); notifications.closed.emit()\"\r\n (openSettings)=\"openSettings.emit($event); notifications.closed.emit()\"\r\n (openNotifications)=\"openNotifications.emit($event); notifications.closed.emit()\"\r\n (markAllRead)=\"refreshUnreadCount()\"\r\n ></app-notifications-list>\r\n </ng-template>\r\n <div class=\"notification-list-panel__footer flex justify-center\">\r\n <ng-content select=\"[notifications-footer]\"></ng-content>\r\n </div>\r\n</mat-menu>\r\n\r\n<ng-container *ngIf=\"panelMode === panelModeEnum.sidebar\">\r\n <button\r\n [matBadge]=\"newNotificationCount$ | async\"\r\n [matBadgeHidden]=\"!(showBadge$ | async)\"\r\n [matBadgeSize]=\"badgeOptions.size\"\r\n [matBadgeColor]=\"badgeOptions.color\"\r\n [matBadgePosition]=\"badgeOptions.position\"\r\n [class]=\"styleClass\"\r\n (click)=\"toggleSideBar(); markAllAsUnread()\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"customIconTemplate || defaultIconTemplate\">\r\n </ng-container>\r\n </button>\r\n <app-notifications-sidebar\r\n [(visible)]=\"isSidebarOpened\"\r\n (visibleChange)=\"refreshUnreadCount()\"\r\n [position]=\"sidebarPosition$ | async\"\r\n >\r\n <ng-template appNotificationSidebarContent>\r\n <app-notifications-list\r\n class=\"notifications-sidebar\"\r\n (itemClicked)=\"\r\n listItemClick.emit($event); toggleSideBar(false); refreshUnreadCount()\r\n \"\r\n (openSettings)=\"openSettings.emit($event); toggleSideBar(false)\"\r\n (openNotifications)=\"openNotifications.emit($event); toggleSideBar(false)\"\r\n (markAllRead)=\"refreshUnreadCount()\"\r\n ></app-notifications-list>\r\n </ng-template>\r\n </app-notifications-sidebar>\r\n</ng-container>\r\n\r\n<ng-template #defaultIconTemplate>\r\n <i class=\"bi bi-bell bell\"></i>\r\n</ng-template>\r\n", styles: [".notification-button{font-size:var(--not-btn-font-size, 1.5rem);width:var(--not-btn-width, 40px)}.notification-list-panel{--width: var(--nos-panel-width, min(80vw, 450px));width:var(--width);border-radius:var(--nos-panel-radius, 5px);overflow:hidden;-webkit-overflow-scrolling:touch;outline:0;background:var(--nos-panel-background, #fff)}.notification-list-panel.mat-menu-panel{max-width:var(--width);max-height:var(--nos-panel-max-height, var(--height))}.notification-list-panel__navigate-btn{background:var(--not-btn-background, transparent);border-radius:var(--not-btn-radius, 5px);padding:var(--not-btn-padding, .5rem 1rem);margin:var(--not-btn-margin, .5rem 0);color:var(--not-btn-color, currentColor);width:var(--not-btn-width, 90%)}.notification-list-panel__navigate-btn:hover{--not-btn-background: var(--not-btn-hover-background, #f0f0f0);--not-btn-color: var(--not-btn-hover-color);-webkit-text-decoration:var(--not-btn-decoration, none);text-decoration:var(--not-btn-decoration, none)}.notification-list-panel__navigate-btn:active{--not-btn-background: var(--not-btn-active-background, #e2e2e2);--not-btn-color: var(--not-btn-active-color)}.notifications-sidebar{--nto-list-header-padding: var(--sidebar-list-header-padding , 1rem);--nto-list-height: var(--sidebar-list-height , calc(100vh - 100px))}\n"], components: [{ type: i3$2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: NotificationsListComponent, selector: "app-notifications-list", outputs: ["openSettings", "openNotifications"] }, { type: NotificationsSidebarComponent, selector: "app-notifications-sidebar", inputs: ["appendToBody", "clearOnCLose", "visible", "position"], outputs: ["visibleChange", "onShow", "onHide"] }], directives: [{ type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i7$3.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgePosition", "matBadgeSize", "matBadgeColor", "matBadgeOverlap", "matBadgeDescription", "matBadgeHidden", "matBadge"] }, { type: i4$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3$2.MatMenuContent, selector: "ng-template[matMenuContent]" }, { type: NotificationSidebarContentDirective, selector: "[appNotificationSidebarContent]" }], pipes: { "async": i4$1.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
32000
+ NotificationsButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: NotificationsButtonComponent, selector: "app-notifications-button", inputs: { styleClass: "styleClass", badgeOptions: "badgeOptions", shouldMarkAsUnread: "shouldMarkAsUnread", ignoredToastEvents: "ignoredToastEvents" }, outputs: { listItemClick: "listItemClick", openSettings: "openSettings", openNotifications: "openNotifications", onNotification: "onNotification" }, host: { classAttribute: "inline-flex justify-center items-center notification-button" }, queries: [{ propertyName: "customIconTemplate", first: true, predicate: NOTIFICATION_ICON, descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<button\r\n *ngIf=\"panelMode === panelModeEnum.panel\"\r\n [matMenuTriggerFor]=\"notifications\"\r\n [matBadge]=\"newNotificationCount$ | async\"\r\n [matBadgeHidden]=\"!(showBadge$ | async)\"\r\n [matBadgeSize]=\"badgeOptions.size\"\r\n [matBadgeColor]=\"badgeOptions.color\"\r\n [matBadgePosition]=\"badgeOptions.position\"\r\n [class]=\"styleClass\"\r\n (menuOpened)=\"markAllAsUnread()\"\r\n>\r\n <ng-container [ngTemplateOutlet]=\"customIconTemplate || defaultIconTemplate\">\r\n </ng-container>\r\n</button>\r\n\r\n<mat-menu #notifications=\"matMenu\" class=\"notification-list-panel\">\r\n <ng-template matMenuContent>\r\n <app-notifications-list\r\n (itemClicked)=\"listItemClick.emit($event); notifications.closed.emit()\"\r\n (openSettings)=\"openSettings.emit($event); notifications.closed.emit()\"\r\n (openNotifications)=\"openNotifications.emit($event); notifications.closed.emit()\"\r\n (markAllRead)=\"refreshUnreadCount()\"\r\n ></app-notifications-list>\r\n </ng-template>\r\n <div class=\"notification-list-panel__footer flex justify-center\">\r\n <ng-content select=\"[notifications-footer]\"></ng-content>\r\n </div>\r\n</mat-menu>\r\n\r\n<ng-container *ngIf=\"panelMode === panelModeEnum.sidebar\">\r\n <button\r\n [matBadge]=\"newNotificationCount$ | async\"\r\n [matBadgeHidden]=\"!(showBadge$ | async)\"\r\n [matBadgeSize]=\"badgeOptions.size\"\r\n [matBadgeColor]=\"badgeOptions.color\"\r\n [matBadgePosition]=\"badgeOptions.position\"\r\n [class]=\"styleClass\"\r\n (click)=\"toggleSideBar(); markAllAsUnread()\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"customIconTemplate || defaultIconTemplate\">\r\n </ng-container>\r\n </button>\r\n <app-notifications-sidebar\r\n [(visible)]=\"isSidebarOpened\"\r\n (visibleChange)=\"refreshUnreadCount()\"\r\n [position]=\"sidebarPosition$ | async\"\r\n >\r\n <ng-template appNotificationSidebarContent>\r\n <app-notifications-list\r\n class=\"notifications-sidebar\"\r\n (itemClicked)=\"\r\n listItemClick.emit($event); toggleSideBar(false); refreshUnreadCount()\r\n \"\r\n (openSettings)=\"openSettings.emit($event); toggleSideBar(false)\"\r\n (openNotifications)=\"openNotifications.emit($event); toggleSideBar(false)\"\r\n (markAllRead)=\"refreshUnreadCount()\"\r\n ></app-notifications-list>\r\n </ng-template>\r\n </app-notifications-sidebar>\r\n</ng-container>\r\n\r\n<ng-template #defaultIconTemplate>\r\n <i class=\"bi bi-bell bell\"></i>\r\n</ng-template>\r\n", styles: [".notification-button{font-size:var(--not-btn-font-size, 1.5rem);width:var(--not-btn-width, 40px)}.notification-button .mat-badge-content{text-overflow:unset;width:18px;height:18px;line-height:18px}.notification-list-panel{--width: var(--nos-panel-width, min(80vw, 450px));width:var(--width);border-radius:var(--nos-panel-radius, 5px);overflow:hidden;-webkit-overflow-scrolling:touch;outline:0;background:var(--nos-panel-background, #fff)}.notification-list-panel.mat-menu-panel{max-width:var(--width);max-height:var(--nos-panel-max-height, var(--height))}.notification-list-panel__navigate-btn{background:var(--not-btn-background, transparent);border-radius:var(--not-btn-radius, 5px);padding:var(--not-btn-padding, .5rem 1rem);margin:var(--not-btn-margin, .5rem 0);color:var(--not-btn-color, currentColor);width:var(--not-btn-width, 90%)}.notification-list-panel__navigate-btn:hover{--not-btn-background: var(--not-btn-hover-background, #f0f0f0);--not-btn-color: var(--not-btn-hover-color);-webkit-text-decoration:var(--not-btn-decoration, none);text-decoration:var(--not-btn-decoration, none)}.notification-list-panel__navigate-btn:active{--not-btn-background: var(--not-btn-active-background, #e2e2e2);--not-btn-color: var(--not-btn-active-color)}.notifications-sidebar{--nto-list-header-padding: var(--sidebar-list-header-padding, 1rem);--nto-list-height: var(--sidebar-list-height, calc(100vh - 100px))}\n"], components: [{ type: i3$2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: NotificationsListComponent, selector: "app-notifications-list", outputs: ["openSettings", "openNotifications"] }, { type: NotificationsSidebarComponent, selector: "app-notifications-sidebar", inputs: ["appendToBody", "clearOnCLose", "visible", "position"], outputs: ["visibleChange", "onShow", "onHide"] }], directives: [{ type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i7$3.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgePosition", "matBadgeSize", "matBadgeColor", "matBadgeOverlap", "matBadgeDescription", "matBadgeHidden", "matBadge"] }, { type: i4$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3$2.MatMenuContent, selector: "ng-template[matMenuContent]" }, { type: NotificationSidebarContentDirective, selector: "[appNotificationSidebarContent]" }], pipes: { "async": i4$1.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
31998
32001
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NotificationsButtonComponent, decorators: [{
31999
32002
  type: Component,
32000
32003
  args: [{