@propmix/profet-common-header 3.5.0-beta.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +0 -37
  2. package/esm2022/lib/api-endpoints.def.mjs +14 -0
  3. package/esm2022/lib/api-gateway.service.mjs +69 -0
  4. package/esm2022/lib/common-header.interface.mjs +2 -0
  5. package/{esm2020 → esm2022}/lib/common-header.module.mjs +33 -33
  6. package/esm2022/lib/common-header.service.mjs +177 -0
  7. package/{esm2020 → esm2022}/lib/company-switch-warning/company-switch-warning.component.mjs +6 -6
  8. package/esm2022/lib/config/app.config.mjs +21 -0
  9. package/esm2022/lib/header/header.component.mjs +420 -0
  10. package/esm2022/lib/pipes/active-route.pipe.mjs +24 -0
  11. package/{esm2020 → esm2022}/lib/pipes/milliseconds-to-minute.pipe.mjs +4 -4
  12. package/esm2022/lib/session-expiry-info/session-expiry-info.component.mjs +36 -0
  13. package/esm2022/lib/utils/Utilities.mjs +41 -0
  14. package/{fesm2020 → fesm2022}/propmix-profet-common-header.mjs +107 -116
  15. package/fesm2022/propmix-profet-common-header.mjs.map +1 -0
  16. package/lib/common-header.interface.d.ts +0 -9
  17. package/lib/header/header.component.d.ts +7 -6
  18. package/package.json +5 -11
  19. package/esm2020/lib/api-endpoints.def.mjs +0 -14
  20. package/esm2020/lib/api-gateway.service.mjs +0 -69
  21. package/esm2020/lib/common-header.interface.mjs +0 -11
  22. package/esm2020/lib/common-header.service.mjs +0 -177
  23. package/esm2020/lib/config/app.config.mjs +0 -21
  24. package/esm2020/lib/header/header.component.mjs +0 -419
  25. package/esm2020/lib/pipes/active-route.pipe.mjs +0 -24
  26. package/esm2020/lib/session-expiry-info/session-expiry-info.component.mjs +0 -36
  27. package/esm2020/lib/utils/Utilities.mjs +0 -41
  28. package/fesm2015/propmix-profet-common-header.mjs +0 -952
  29. package/fesm2015/propmix-profet-common-header.mjs.map +0 -1
  30. package/fesm2020/propmix-profet-common-header.mjs.map +0 -1
  31. /package/{esm2020 → esm2022}/lib/utils/app.constants.mjs +0 -0
  32. /package/{esm2020 → esm2022}/lib/utils/apps.enum.mjs +0 -0
  33. /package/{esm2020 → esm2022}/lib/utils/image.dataurl.mjs +0 -0
  34. /package/{esm2020 → esm2022}/propmix-profet-common-header.mjs +0 -0
  35. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -1,419 +0,0 @@
1
- import { Component, EventEmitter, HostListener, inject, Input, Output, ViewChild } from '@angular/core';
2
- import { FormControl } from '@angular/forms';
3
- import { MatMenuTrigger } from '@angular/material/menu';
4
- import { MatSnackBar } from '@angular/material/snack-bar';
5
- import { DomSanitizer } from '@angular/platform-browser';
6
- import { Router } from '@angular/router';
7
- import { signOut } from 'aws-amplify/auth';
8
- import { LogoutReason, LogoutStatus } from '../common-header.interface';
9
- import { CommonHeaderService } from '../common-header.service';
10
- import { CompanySwitchWarningComponent } from '../company-switch-warning/company-switch-warning.component';
11
- import { AppConfig } from '../config/app.config';
12
- import { PROFET_APPS } from '../utils/apps.enum';
13
- import { imageDataUrl } from '../utils/image.dataurl';
14
- import * as i0 from "@angular/core";
15
- import * as i1 from "@angular/common";
16
- import * as i2 from "@angular/material/toolbar";
17
- import * as i3 from "@angular/material/icon";
18
- import * as i4 from "@angular/material/button";
19
- import * as i5 from "@angular/material/sidenav";
20
- import * as i6 from "@angular/material/menu";
21
- import * as i7 from "@angular/material/tooltip";
22
- import * as i8 from "@angular/material/form-field";
23
- import * as i9 from "@angular/material/select";
24
- import * as i10 from "@angular/material/core";
25
- import * as i11 from "@angular/forms";
26
- import * as i12 from "../pipes/active-route.pipe";
27
- export class HeaderComponent {
28
- constructor() {
29
- this.portalUrl = '';
30
- this.userImageLink = null;
31
- this.userCompanyLogo = '';
32
- this.imageDataUrls = imageDataUrl;
33
- this._router = inject(Router);
34
- this._snackbar = inject(MatSnackBar);
35
- this._headerSer = inject(CommonHeaderService);
36
- this._domSanitizer = inject(DomSanitizer);
37
- this.componentInitTime = 0;
38
- this.lastProcessedLogoutTimestamp = 0;
39
- this.INACTIVITY_LIMIT = 30 * 60 * 1000; // 30 minutes
40
- this.logoutEvent = new EventEmitter();
41
- this.companyControl = new FormControl();
42
- this.appConfig = AppConfig.appConfig;
43
- this.companyList = [];
44
- this.menuList = [];
45
- }
46
- async ngOnInit() {
47
- this.updateLastAccessedAppInfo();
48
- this.getCompanyList();
49
- this._headerSer.getUserDetails().subscribe({
50
- next: (res) => {
51
- if (res) {
52
- this.userAuthData = res;
53
- if (!this._headerSer.headerConfig.disableAppMenu) {
54
- this.getMenuList();
55
- }
56
- if (res.profileImage) {
57
- this.userImageLink = res.profileImage.locationUrl
58
- ? this._domSanitizer.bypassSecurityTrustUrl(res.profileImage.locationUrl)
59
- : null;
60
- }
61
- }
62
- }
63
- });
64
- // if (userInfo?.username) {
65
- // let userDetails = this._headerSer.getUserDetails();
66
- // forkJoin([userDetails]).subscribe({
67
- // next: (res) => {
68
- // if (res && res[0]) {
69
- // this.userAuthData = res[0];
70
- // this.username = this.userAuthData.firstName;
71
- // this.getMenuList();
72
- // if (this.userAuthData?._links?.profileImage?.href) {
73
- // this.getUserProfile();
74
- // }
75
- // }
76
- // },
77
- // });
78
- // }
79
- // Capture when this component/app was loaded
80
- this.componentInitTime = Date.now();
81
- // Remove legacy boolean check or reset if needed, but primarily we rely on timestamps now.
82
- // We do NOT want to clear the cookie immediately on init if it's a valid persistent signal,
83
- // but the timestamp check guards against "looping" on reload.
84
- // However, if we want to support "fresh login means fresh session", we might just ignore old timestamps (which we do via > initTime check).
85
- // So distinct cleanup isn't strictly necessary if the login page no longer deletes it.
86
- // But let's leave it as is or remove it. The user's issue was "delete cookie" logic on LOGIN PAGE caused race condition.
87
- // Here we just want to start monitoring.
88
- this.startLogoutCheck();
89
- }
90
- resetTimer(isUserActivity = true) {
91
- clearTimeout(this.inactivityTimeout);
92
- // Update global activity timestamp in cookie ONLY if triggered by user activity
93
- if (isUserActivity) {
94
- // Use a short expiry (e.g. 1 day) or sync with session length
95
- this._headerSer.setCookie(this._headerSer.LAST_ACTIVE_SESSION_KEY, Date.now().toString(), 1);
96
- }
97
- // if (!this._headerSer.isSessionExpiryDialogOpen) {
98
- this.inactivityTimeout = setTimeout(() => {
99
- // Check global activity before logging out
100
- const lastActive = this._headerSer.getCookie(this._headerSer.LAST_ACTIVE_SESSION_KEY);
101
- const now = Date.now();
102
- const lastActiveTime = lastActive ? parseInt(lastActive, 10) : 0;
103
- const elapsed = now - lastActiveTime;
104
- if (lastActive && elapsed < this.INACTIVITY_LIMIT) {
105
- // User was active in another tab/app recently
106
- // Reschedule the check, but DO NOT update the activity timestamp
107
- this.resetTimer(false);
108
- }
109
- else {
110
- // Really inactive across all known tabs
111
- this.handleLogout();
112
- }
113
- }, this.INACTIVITY_LIMIT);
114
- // }
115
- }
116
- /**
117
- * Helper to identify the session expiry in in-active tabs.
118
- */
119
- startLogoutCheck() {
120
- // Poll for the logout signal cookie (works across ports/subdomains)
121
- this.logoutCheckInterval = setInterval(() => {
122
- const logoutCookie = this._headerSer.getCookie(this._headerSer.SESSION_EXPIRED_KEY);
123
- if (logoutCookie) {
124
- const logoutTimestamp = parseInt(logoutCookie, 10);
125
- // 1. Check if it's a valid number (legacy 'true' string support is irrelevant if we fully switch, but safe to check NaN)
126
- if (!isNaN(logoutTimestamp)) {
127
- // 2. Check if this logout event happened AFTER this app was initialized
128
- // This prevents infinite loops if the user just logged in and the cookie is still there.
129
- if (logoutTimestamp > this.componentInitTime) {
130
- // 3. Check if we haven't already processed this exact logout event
131
- if (logoutTimestamp > this.lastProcessedLogoutTimestamp) {
132
- this.lastProcessedLogoutTimestamp = logoutTimestamp;
133
- const lastActive = this._headerSer.getCookie(this._headerSer.LAST_ACTIVE_SESSION_KEY);
134
- const now = Date.now();
135
- const lastActiveTime = lastActive ? parseInt(lastActive, 10) : 0;
136
- const elapsed = now - lastActiveTime;
137
- const isManual = elapsed < this.INACTIVITY_LIMIT;
138
- this.handleLogout(false, false, isManual);
139
- }
140
- }
141
- }
142
- }
143
- }, 2000); // Check every 2 seconds
144
- }
145
- handleLogout(broadcast = true, showPopup = true, isManual = false) {
146
- // Prevent multiple popups if already open
147
- // if (this._headerSer.isSessionExpiryDialogOpen && showPopup) {
148
- // return;
149
- // }
150
- if (broadcast) {
151
- // Set a cookie to signal other tabs/ports with the current TIMESTAMP
152
- // This timestamp allows other tabs to know if this is a "new" logout event relative to their session start.
153
- const now = Date.now();
154
- this.lastProcessedLogoutTimestamp = now; // Don't logout myself again based on this
155
- this._headerSer.setCookie(this._headerSer.SESSION_EXPIRED_KEY, now.toString(), 1);
156
- }
157
- const reason = isManual ? LogoutReason.USER_INITIATED : LogoutReason.SESSION_TIMEOUT;
158
- this.logoutEvent.emit({ reason, status: LogoutStatus.INITIATED });
159
- let sessionUrl = this._headerSer.headerConfig.signOutUrl;
160
- if (this._headerSer.headerConfig.enableLastUrlRedirection) {
161
- const separator = sessionUrl.includes('?') ? '&' : '?';
162
- sessionUrl = sessionUrl + separator + 'redirectUrl=' + encodeURIComponent(window.location.href);
163
- }
164
- // Only add sessionExpired params if it is NOT a manual logout
165
- if (!isManual) {
166
- const separator = sessionUrl.includes('?') ? '&' : '?';
167
- sessionUrl = sessionUrl + separator + 'sessionExpired=true&timeout=' + this.INACTIVITY_LIMIT;
168
- }
169
- signOut({ global: true, oauth: { redirectUrl: sessionUrl } })
170
- .then(() => {
171
- this.logoutEvent.emit({ reason, status: LogoutStatus.COMPLETED });
172
- window.open(sessionUrl, '_self');
173
- })
174
- .catch((error) => {
175
- console.error('Logout failed:', error);
176
- this.logoutEvent.emit({ reason, status: LogoutStatus.COMPLETED });
177
- window.open(sessionUrl, '_self');
178
- });
179
- // if (showPopup) {
180
- // this._headerSer.openSessionExpireInfo({ sessionOutTimeInMins: this.INACTIVITY_LIMIT });
181
- // }
182
- if (this.inactivityTimeout) {
183
- clearTimeout(this.inactivityTimeout);
184
- }
185
- // Stop polling once we are logging out
186
- if (this.logoutCheckInterval) {
187
- clearInterval(this.logoutCheckInterval);
188
- }
189
- }
190
- selectCurrentCompany() {
191
- let com = this.companyList.find(x => x.isActive);
192
- this.activeCompany = com;
193
- }
194
- patchCurrentCompanyInfo() {
195
- let com = this.companyList.find(x => x.isActive);
196
- this.companyControl.patchValue(com);
197
- }
198
- sideMenuToggle() {
199
- this.sidenav.toggle();
200
- }
201
- groupByAppType(menuList) {
202
- let grouped = menuList.reduce((r, a) => {
203
- r[a.appType] = r[a.appType] || [];
204
- // TODO: Path references are to be replaced with values from backend API response. Remove this block when backend is ready
205
- if (a.appType == PROFET_APPS.profet_portal) {
206
- let isCompanyMenu = a.path === 'app/companies';
207
- let isCompanyAdmin = this.userAuthData?.rolesForCurrentCompany.includes("COMPANY_ADMIN");
208
- if (isCompanyMenu && isCompanyAdmin) {
209
- a = { ...a, path: 'app/addCompany/companyDetails' };
210
- }
211
- }
212
- // END of TODO block
213
- r[a.appType].push(a);
214
- return r;
215
- }, Object.create(null));
216
- return Object.entries(grouped).map(([key, value]) => ({ key, value: value }));
217
- }
218
- menuSelection(menu) {
219
- this.sideMenuToggle();
220
- let activeCom = this.companyList.find(x => x.isActive);
221
- let isCompanyMenu = menu.path === 'app/addCompany/companyDetails';
222
- let isCompanyAdmin = this.userAuthData?.rolesForCurrentCompany.includes("COMPANY_ADMIN");
223
- if (menu.appType == this._headerSer.headerConfig.appType) {
224
- // TODO: Path references are to be replaced with values from backend API response
225
- if (isCompanyMenu && isCompanyAdmin) {
226
- this._router.navigate([menu.path, activeCom?.id]);
227
- }
228
- else {
229
- this._router.navigate([menu.path]);
230
- }
231
- }
232
- else {
233
- if (activeCom) {
234
- if (activeCom.baseUrls[menu.appType]) {
235
- // TODO: Path references are to be replaced with values from backend API response
236
- if (isCompanyMenu && isCompanyAdmin) {
237
- let url = `${activeCom.baseUrls[menu.appType]}/${menu.path}/${activeCom.id}`;
238
- window.location.replace(url);
239
- }
240
- else {
241
- let url = `${activeCom.baseUrls[menu.appType]}/${menu.path}`;
242
- window.location.replace(url);
243
- }
244
- }
245
- }
246
- }
247
- }
248
- getCompanyList() {
249
- this._headerSer.getCompanyList().subscribe({
250
- next: (v) => {
251
- this._headerSer.setCompanyList(v);
252
- this.companyList = v;
253
- this.selectCurrentCompany();
254
- this.patchCurrentCompanyInfo();
255
- }
256
- });
257
- }
258
- getMenuList() {
259
- this._headerSer.getMenuList().subscribe({
260
- next: (v) => {
261
- this._headerSer.setMenuState(v);
262
- this.menuList = this.groupByAppType(v);
263
- }
264
- });
265
- }
266
- profile() {
267
- this.menuTrigger.closeMenu();
268
- if (this._headerSer.headerConfig.appType == PROFET_APPS.profet_portal) {
269
- this._router.navigateByUrl('/app/profile');
270
- }
271
- else {
272
- let url = this.activeCompany?.baseUrls.profet_portal + '/app/profile';
273
- document.location.href = url;
274
- }
275
- }
276
- onLogoutClick() {
277
- this.menuTrigger.closeMenu();
278
- // Sync with other tabs
279
- const now = Date.now();
280
- this.lastProcessedLogoutTimestamp = now;
281
- this._headerSer.setCookie(this._headerSer.SESSION_EXPIRED_KEY, now.toString(), 1);
282
- // Clear timers
283
- if (this.inactivityTimeout)
284
- clearTimeout(this.inactivityTimeout);
285
- if (this.logoutCheckInterval)
286
- clearInterval(this.logoutCheckInterval);
287
- this.logoutEvent.emit({ reason: LogoutReason.USER_INITIATED, status: LogoutStatus.INITIATED });
288
- let sessionUrl = this._headerSer.headerConfig.signOutUrl;
289
- // if (this._headerSer.headerConfig.enableLastUrlRedirection) {
290
- // const separator = sessionUrl.includes('?') ? '&' : '?';
291
- // sessionUrl = sessionUrl + separator + 'returnUrl=' + encodeURIComponent(window.location.href);
292
- // }
293
- signOut({ global: true, oauth: { redirectUrl: sessionUrl } })
294
- .then((data) => {
295
- this.logoutEvent.emit({ reason: LogoutReason.USER_INITIATED, status: LogoutStatus.COMPLETED });
296
- window.open(sessionUrl, '_self');
297
- })
298
- .catch((err) => {
299
- console.log(err);
300
- signOut({ global: true, oauth: { redirectUrl: sessionUrl } })
301
- .then(() => {
302
- this.logoutEvent.emit({ reason: LogoutReason.USER_INITIATED, status: LogoutStatus.COMPLETED });
303
- window.open(sessionUrl, '_self');
304
- })
305
- .catch((error) => {
306
- console.log(error);
307
- this.logoutEvent.emit({ reason: LogoutReason.USER_INITIATED, status: LogoutStatus.COMPLETED });
308
- });
309
- });
310
- }
311
- updateLastAccessedAppInfo() {
312
- let req = {
313
- lastAccessedApplication: this._headerSer.headerConfig.appType
314
- };
315
- this._headerSer.updateLastAccessedApplication(req).subscribe({
316
- next: () => {
317
- }
318
- });
319
- }
320
- switchCompany(info) {
321
- let company = info.value;
322
- let comInfo = {
323
- activeCompany: this.activeCompany?.name,
324
- switchingCompany: company.name
325
- };
326
- this._headerSer._dialog.open(CompanySwitchWarningComponent, { data: comInfo }).afterClosed().subscribe(res => {
327
- if (res) {
328
- // Find the domain information
329
- if (!company.isActive) {
330
- // let domainInfo = this._headerSer.getDomainInfo();
331
- // if (domainInfo) {
332
- let req = {
333
- companyKey: company.companyKey,
334
- appName: this._headerSer.headerConfig.appType,
335
- };
336
- this._headerSer.updateUserCompany(req).subscribe({
337
- next: (response) => {
338
- if (response && response.type && response.type == 'OK') {
339
- if (response.data.applicationURL) {
340
- let url = response.data.applicationURL;
341
- window.location.replace(url);
342
- }
343
- // refresh the current page to reload the contents based on the current company
344
- // window.location.reload();
345
- }
346
- else {
347
- // display a message to the user that the company could not be switched.
348
- this._snackbar.open('Company could not be switched. Please try again or contact support.', 'OK', { duration: 5000 });
349
- }
350
- },
351
- error: (e) => {
352
- this.patchCurrentCompanyInfo();
353
- // display a message to the user that the company could not be switched.
354
- this._snackbar.open('Company could not be switched. Please try again or contact support.', 'OK', { duration: 5000 });
355
- },
356
- });
357
- // }
358
- // else {
359
- // this.patchCurrentCompanyInfo();
360
- // this._snackbar.open(
361
- // 'Company could not be switched. Please try again or contact support.',
362
- // 'OK',
363
- // { duration: 5000 }
364
- // );
365
- // }
366
- }
367
- }
368
- else {
369
- this.patchCurrentCompanyInfo();
370
- }
371
- });
372
- }
373
- ngOnDestroy() {
374
- if (this.inactivityTimeout) {
375
- clearTimeout(this.inactivityTimeout);
376
- }
377
- if (this.logoutCheckInterval) {
378
- clearInterval(this.logoutCheckInterval);
379
- }
380
- }
381
- }
382
- HeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
383
- HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: HeaderComponent, selector: "lib-header", inputs: { INACTIVITY_LIMIT: "INACTIVITY_LIMIT" }, outputs: { logoutEvent: "logoutEvent" }, host: { listeners: { "document:mousemove": "resetTimer()", "document:keydown": "resetTimer()", "document:click": "resetTimer()", "document:touchstart": "resetTimer()", "document:touchmove": "resetTimer()", "document:scroll": "resetTimer()", "window:focus": "resetTimer()" } }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: ["sidenav"], descendants: true }, { propertyName: "menuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<mat-sidenav-container class=\"app-menu-sidenav-container\">\n <mat-sidenav cdkMenuBar #sidenav mode=\"over\" class=\"sidenavDrawer\">\n <div class=\"drawerHeadLogo\"><img [src]=\"_domSanitizer.bypassSecurityTrustUrl(imageDataUrls.profetLogo)\"></div>\n <div class=\"app-menu-content-section\">\n <ng-container *ngFor=\"let appType of menuList\">\n <div class=\"appList\">\n <img *ngIf=\"appConfig[appType.key]?.appLogoUri\"\n [src]=\"_domSanitizer.bypassSecurityTrustUrl(appConfig[appType.key]?.appLogoUri)\">\n </div>\n <div class=\"subHeadListItems\">\n <div *ngFor=\"let item of appType.value\" class=\"menu-item\" (click)=\"menuSelection(item)\"\n [ngClass]=\"{'active-menu': item | activeRoute : _router.url:_headerSer.headerConfig.appType}\">\n <mat-icon class=\"menuIconList\" *ngIf=\"item.icon\">{{ item.icon }}</mat-icon>\n <span>{{ item.menuName }}</span>\n </div>\n </div>\n </ng-container>\n </div>\n </mat-sidenav>\n\n</mat-sidenav-container>\n<mat-toolbar cdkMenuBar color=\"primary\" class=\"header-wrapper common_header shadow-sm\">\n <!-- Main nav button and navigation links -->\n <button *ngIf=\"menuList && menuList.length > 0\" mat-icon-button color=\"theme-white\" (click)=\"sidenav.toggle()\"\n class=\"pmx-button pmx-menu-button orders-menu icon-btn ms-0 me-3\" aria-label=\"main menu\" tabindex=\"0\"\n matTooltip=\"Main menu\" matTooltipPosition=\"below\"\n matTooltipClass=\"poc-header-tooltip\"><mat-icon>menu</mat-icon></button>\n <a *ngIf=\"_headerSer.headerConfig.appLogoNavigationUrl; else noLink\" class=\"navbar-brand me-auto\"\n [href]=\"_headerSer.headerConfig.appLogoNavigationUrl\">\n <img [src]=\"_domSanitizer.bypassSecurityTrustUrl(appConfig[_headerSer.headerConfig.appType]?.appLogoUri)\"\n alt=\"App Logo\" class=\"app-logo\">\n </a>\n <ng-template #noLink>\n <span class=\"navbar-brand me-auto\">\n <img [src]=\"_domSanitizer.bypassSecurityTrustUrl(appConfig[_headerSer.headerConfig.appType]?.appLogoUri)\"\n alt=\"App Logo\" class=\"app-logo\">\n </span>\n </ng-template>\n\n <ng-content></ng-content>\n\n <mat-form-field appearance=\"outline\" class=\"switchCompanyField\">\n <mat-label>Company</mat-label>\n <mat-select [formControl]=\"companyControl\" (selectionChange)=\"switchCompany($event)\">\n <mat-option *ngFor=\"let opt of companyList\" [value]=\"opt\">\n {{opt.name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n\n <!-- Profile button and profile dropdown links -->\n <button class=\"pmx-button pmx-menu-button profile-button\" mat-button [matMenuTriggerFor]=\"menu\" color=\"primary\"\n matTooltipPosition=\"below\">\n <div class=\"profile-inner\">\n <!-- <div class=\"brand-logo align-self-center\" *ngIf=\"activeCompany?.logo\"\n [ngClass]=\"activeCompany?.logo ? 'branded-logo-true' : 'branded-logo-false'\"\n [ngStyle]=\"{'background-image': 'url(' + activeCompany?.logo + ')'}\"></div> -->\n <div class=\"avatar\">\n <img *ngIf=\"userImageLink;else defaultAvatar\" [src]=\"userImageLink\" class=\"avatar-image\" alt=\"Avatar\">\n <ng-template #defaultAvatar><img\n [src]=\"_domSanitizer.bypassSecurityTrustUrl(imageDataUrls.defaultUserImage)\"\n class=\"avatar-default\" alt=\"profile pic\"></ng-template>\n </div>\n </div>\n </button>\n <mat-menu #menu=\"matMenu\" class=\"accounts_drpmenu pmx-menu-group header-dropdown-profile\" xPosition=\"before\">\n <div class=\"popover-content show-menu\" (click)=\"$event.stopPropagation()\">\n <div class=\"popover-header\">\n <div class=\"popover-user-top\">\n <div class=\"avatar-wrapper\">\n <img *ngIf=\"userImageLink;else defaultLargeAvatar\" [src]=\"userImageLink\" class=\"avatar-icon\"\n alt=\"Avatar\">\n <ng-template #defaultLargeAvatar>\n <div [ngStyle]=\"{'background-image': 'url(' + imageDataUrls.defaultUserImage + ')'}\"\n class=\"avatar-icon default-avatar\" alt=\"Avatar icon\">&nbsp;</div>\n </ng-template>\n </div>\n <div class=\"user-data\">\n <h3 class=\"profile-name\"><span *ngIf=\"userAuthData\">{{ userAuthData?.firstName }} {{\n userAuthData?.lastName }}</span></h3>\n <button *ngIf=\"!_headerSer.headerConfig.hideViewProfile\" mat-button color=\"accent\" class=\"pmx-button btn btn-small view-profile ms-0\"\n (click)=\"profile()\">View Profile</button>\n </div>\n </div>\n </div>\n <div class=\"popover-body\">\n <!-- <div class=\"popover-content-title\">\n <p>Overview</p>\n </div> -->\n\n <div *ngIf=\"userAuthData?.email\">\n <p class=\"list-text list-text-email mt-2 mb-1\">\n <mat-icon class=\"list-icon\">mail</mat-icon><span class=\"pmx-lower-case pmx-text-wrap me-auto\">{{\n userAuthData?.email }}</span>\n </p>\n </div>\n <ng-container *ngIf=\"userAuthData?.contactPhone\">\n <p class=\"list-text mb-1\">\n <mat-icon class=\"list-icon\">call</mat-icon><span class=\"title-case me-auto\">{{\n userAuthData?.contactPhone }}</span>\n </p>\n </ng-container>\n\n <hr />\n <ul cdkMenu class=\"list-group last-group my-1\">\n <li cdkMenuItem class=\"list-item py-2\">\n <button mat-menu-item class=\"pmx-button list-button btn-logout\" (click)=\"onLogoutClick()\">\n <mat-icon>power_settings_new</mat-icon>\n <span class=\"list-text\">Logout</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n </mat-menu>\n</mat-toolbar>", styles: [":root{--contentfont: 13.12px !important;--labelfont: .75rem !important}.pmx-text-truncate{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pmx-text-wrap{overflow-wrap:break-word;word-break:break-word}.pmx-lower-case{text-transform:lowercase}.mat-mdc-button:not(:disabled){color:var(--mdc-text-button-label-text-color)}.mat-mdc-button.mat-accent{--mdc-text-button-label-text-color: #24a148;--mat-text-button-state-layer-color: #24a148;--mat-text-button-ripple-color: rgba(255, 64, 129, .1)}.header-user-name{text-align:end;color:#000}.header-user-name span{font-size:12px;color:#9e9e9ede}.avatarLogo{max-width:30px}mat-toolbar.mat-toolbar.common_header.mat-primary.mat-toolbar-single-row{position:fixed;left:0;top:0;background-color:#fff;height:56px}button.switchButton,button.menuHamberger{padding:8px!important}.sidenavPanel{padding:20px 25px;height:100vh;position:relative}ul.navbarList{padding-left:0;list-style:none;margin-top:40px}ul.navbarList li{color:#666;font-weight:400;margin-bottom:25px;width:170px;cursor:pointer}.active{color:#4177d6!important}ul.navbarList li img{width:23px;margin-right:15px}.accounts_drpmenu{margin-top:.7em}.xsShowUsername{display:none;padding:0 16px;height:48px;line-height:48px}.vr{width:2px;background-color:#f5f5f5;opacity:1;margin:0 .5rem 0 1rem}.vr-blury{background-image:linear-gradient(180deg,transparent,#666,transparent);width:1px;opacity:.25}.navbar-brand .app-logo{height:20px;width:auto}.pmx-button mat-icon.mat-icon,.pmx-button mat-icon.mat-primary,.pmx-button mat-icon.mat-accent,.pmx-button mat-icon.mat-warn{color:var(--mat-icon-color)}.pmx-button mat-icon.mat-icon{font-size:24px!important;line-height:1.5;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;transition:transform .3s ease}.pmx-button.mdc-button--raised mat-icon.mat-icon{width:24px;height:24px;display:contents}.pmx-button.mat-mdc-button-base mat-icon.mat-icon{z-index:1}.pmx-button mat-icon.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.pmx-button mat-icon.mdc-button span.button-text{display:inline-flex;padding:0 1rem;text-transform:uppercase;font-size:.875rem;line-height:1.5}.pmx-button mat-icon.mdc-button span.upper-case{text-transform:uppercase}.pmx-button.mdc-button,.pmx-button.mdc-icon-button,.pmx-button.mdc-button--outlined,.pmx-button.mdc-button .mat-mdc-button-touch-target,.pmx-button.mdc-icon-button .mat-mdc-button-touch-target{height:40px!important;font-size:.75rem!important;letter-spacing:.2px;padding:0 .5rem;line-height:normal}.pmx-button.mdc-icon-button,.pmx-button.icon-btn.mdc-button--outlined,.pmx-button.icon-btn.mdc-button--raised,.pmx-button.mdc-icon-button .mat-mdc-button-touch-target{width:40px;border-radius:5px}.pmx-button.btn-small.mdc-button,.pmx-button.btn-small.mdc-icon-button,.pmx-button.btn-small.mdc-button--outlined{height:28px!important;padding:0 1rem}.pmx-button.mdc-icon-button,.pmx-button.icon-btn.mdc-button--raised{color:#254d93}.pmx-header .icon-button-shadow{box-shadow:0 1px 3px #0003,0 0 #00000024,0 1px 3px #0000001f}.pmx-button.icon-btn.mdc-button--raised.btn-switch-apps.menu-opened,.pmx-button.icon-btn.mdc-button--outlined.btn-switch-apps.menu-opened{background-color:#254d93;color:#fff;font-variation-settings:\"FILL\" 0,\"wght\" 200,\"GRAD\" 0,\"opsz\" 24}.pmx-button.mdc-icon-button.pmx-menu-button:hover,.pmx-button.mat-mdc-outlined-button.btn-switch-apps:hover,.pmx-button.icon-btn.mdc-button--outlined.btn-switch-apps:hover{background-color:#e5f3fb}.pmx-button.icon-app{width:20px}.pmx-button.mat-mdc-outlined-button,.pmx-button.mat-mdc-outlined-button:not(:disabled){background-color:#fff;overflow:hidden}.pmx-button.pmx-menu-button.profile-button.mat-mdc-outlined-button{padding:0;border-color:#bfdff7!important}.btn-group-clicked .pmx-button.pmx-menu-button.profile-button.mat-mdc-outlined-button{border-color:#bfdff7!important}.pmx-button.profile-button .profile-inner{border:0 solid transparent!important;display:flex;align-items:center;overflow:clip}.pmx-button.profile-button .avatar{width:38px;height:38px;box-sizing:border-box;border-radius:50%;overflow:hidden;display:flex;flex-direction:column;justify-content:center;align-content:center;align-items:center;flex-wrap:wrap}.pmx-button.profile-button .avatar{background-color:#9cd7a8}.pmx-button.profile-button .avatar img.avatar-image,.pmx-button.profile-button .avatar img.avatar-default{width:100%;height:auto}.branded-group-false{margin-left:.65rem}.branded-group-false .pmx-button.pmx-menu-button.profile-button.branded-button-false{width:40px;border-radius:20px!important}.branded-group-true{margin-left:.65rem;border-radius:20px;border:1px solid #bfdff7}.btn-group-clicked.branded-group-true{background-color:#99ccf2}.branded-group-true .pmx-button.profile-button .profile-inner{border:0 solid #c4c9d2!important}.branded-group-true .pmx-button.pmx-menu-button.profile-button.branded-button-true{border-radius:20px}.branded-group-true .pmx-button.profile-button.branded-button-true .profile-inner .branded-logo-true{border-radius:5px;display:block;position:relative;height:38px;background-size:100%;background-position:center;background-repeat:no-repeat;min-width:100px;margin-right:1rem}.pmx-menu-group.mat-mdc-menu-panel{margin-top:1rem}.header-dropdown-apps.mat-mdc-menu-panel .mat-mdc-menu-content,.header-dropdown-profile.mat-mdc-menu-panel .mat-mdc-menu-content{padding:0!important}.header-dropdown-apps{width:400px!important}.header-dropdown-apps.mat-mdc-menu-panel .list-button{padding:.5rem 2rem}.header-dropdown-apps.mdc-menu-surface--open,.header-dropdown-profile.mdc-menu-surface--open{position:absolute;z-index:1;top:0;right:0;margin:0;padding:0;border:1px solid #e5e5e5;border-radius:6px;background:#fff;animation:popover .2s ease-in-out}.header-dropdown-apps.mat-mdc-menu-panel.mat-mdc-menu-panel{max-width:400px!important;width:400px!important;overflow:visible}::ng-deep .header-dropdown-profile.mat-mdc-menu-panel.mat-mdc-menu-panel{max-width:408px!important;width:408px!important;overflow:visible;margin-top:1rem}.popover-content:after,.popover-content:before{font-size:1.4em;display:block;width:0;height:0;content:\"\";pointer-events:none;position:absolute;top:-.45em}.popover-content:before{border-right:10px solid transparent;border-bottom:10px solid #999;border-left:10px solid transparent;right:.97em}.popover-content:after{border-right:12px solid transparent;border-bottom:12px solid #d5e3fa;border-left:12px solid transparent;right:.9em}.popover-content-title{display:flex;align-items:center;justify-content:flex-start;overflow:hidden;padding:0 1rem;min-height:40px}.popover-content-title p{margin:0;font-size:.75rem!important;color:#777}.popover-content .popover-user-top:after{clear:both;content:\"\";display:table}.popover-content .popover-user-top{display:flex;flex-flow:row;justify-content:flex-start;align-items:center}.popover-content .popover-user-top .avatar-wrapper{flex:0 4 auto;border-radius:100%;overflow-clip-margin:content-box;overflow:clip;background-color:#fff;padding:2px}.drop-shadow{filter:drop-shadow(0px 0px 3px rgba(0,0,0,.5))}.popover-content .popover-user-top .user-data{flex:1 0 auto;margin-left:1rem}.popover-content .popover-user-top .avatar-wrapper .avatar-icon{background-repeat:no-repeat;background-size:100%;background-position:center;width:64px;height:64px;background-color:#72c885}.avatar-icon.default-avatar{background-size:100%}.popover-content .popover-user-top .user-data h3.profile-name{font-size:1rem;text-overflow:ellipsis;margin-bottom:.5rem;line-height:normal;font-weight:600;color:#254d93}.btn.view-profile{background:#fafafa}.popover-content ul.list-group{padding:0 0 8px;margin:0;display:flex;list-style:none}.popover-content ul.list-group.last-group,.popover-content ul.list-group.last-group .list-item{background-color:transparent}.popover-content ul.list-group li.list-item{align-items:center;border:none;padding:0;width:100%;display:flex;flex-direction:row;flex-wrap:wrap;order:1}.popover-content ul.list-group li.list-item .list-button{padding:.5rem 1rem;min-height:40px}.popover-content ul.list-group li.list-item span.mat-mdc-menu-item-text,.popover-content ul.list-group li.list-item span.mdc-list-item__primary-text,.popover-content ul.list-group li.list-item .list-button>span{display:flex;align-items:center}.popover-content ul.list-group li.list-item.list-company .list-button>span{width:100%;overflow:hidden}.popover-content ul.list-group li.list-item .list-button .hover-label.tooltip-label{opacity:0}.popover-content ul.list-group li.list-item.list-app .list-button:hover>span .hover-label.tooltip-label,.popover-content ul.list-group li.list-item.list-company .list-button:hover>span .hover-label.tooltip-label{opacity:0;display:inline-flex;color:#fff;background-color:#616161;font-size:11px;border-radius:4px;padding:0 .5rem;transition:opacity .3s ease-out}.popover-content ul.list-group li.list-item .list-button:hover{background:rgba(0,0,0,.04)}.popover-content ul.list-group li.list-item.company-active,.popover-content ul.list-group li.list-item.app-active{cursor:not-allowed;pointer-events:none;order:0}.popover-content ul.list-group li.list-item.company-active .active-label,.popover-content ul.list-group li.list-item.app-active .active-label{background-color:#93c47d;color:#212121;padding:0 .5rem;border-radius:50px;font-size:.75rem;margin-left:.5rem}.popover-content ul.list-group.list-apps-group{display:flex}.popover-content ul.list-group.list-overview li.list-item{cursor:not-allowed;pointer-events:none}::ng-deep .popover-content ul.list-group li.list-item button.list-button .list-text{font-size:15px}.popover-content .popover-body p.list-text{padding:.5rem 1rem;margin:0;min-height:auto;cursor:default;display:flex;align-items:center;gap:16px}.popover-content .popover-body p.list-text span{font-size:var(--contentfont);font-weight:500}::ng-deep .popover-content .popover-body p.list-text .mat-mdc-menu-item-text{font-size:15px;font-weight:500}.popover-content ul.list-group li.list-item .list-button .mat-icon,.popover-content ul.list-group li.list-item p.list-text mat-icon.list-icon,.popover-content ul.list-group li.list-item .list-button .list-icon,.popover-content ul.list-group li.list-item p.list-text .list-icon,.popover-content .popover-body p.list-text .list-icon{color:#2db051;font-variation-settings:\"FILL\" 0,\"wght\" 300,\"GRAD\" 0,\"opsz\" 24;font-size:24px!important}.popover-content ul.list-group li.list-item.list-active.company-active button.list-button .mat-icon{color:#2db051;font-variation-settings:\"FILL\" 1,\"wght\" 300,\"GRAD\" 0,\"opsz\" 24}.popover-content ul.list-group li.list-item p.list-text span.mdc-list-item__primary-text{width:100%;display:flex}.popover-content ul.list-group li.list-item span.title-case,.popover-content ul.list-group li.list-item span.lower-case,.popover-content ul.list-group li.list-item span.pmx-lower-case{font-size:.8rem;color:#212121;font-weight:500;display:block;line-height:normal}small{color:#9e9e9e}.popover-content ul.list-group li.list-item span.text-label{font-size:12px;color:#979797;font-weight:400;display:block;line-height:normal}.popover-content ul.list-group li.list-item .list-text span.mat-mdc-menu-item-text{font-size:.875rem;color:#0a152f;font-weight:500;line-height:normal}.popover-content ul.list-group li.list-item .list-text.list-text-email span.mat-mdc-menu-item-text{width:calc(100% - 40px);display:inline-flex}.popover-content ul.list-group li.list-item .list-text.list-text-email span.pmx-text-wrap{overflow-wrap:break-word;word-wrap:break-word;-webkit-hyphens:none;hyphens:none;width:100%}.popover-content ul.list-group li.list-item span.upper-case{text-transform:uppercase}.popover-content ul.list-group li.list-item span.app-status,.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status{font-size:13px;color:#0a152f;font-weight:400;display:block;line-height:normal;margin:0}.popover-content ul.list-group li.list-item.app-active .list-text,.popover-content ul.list-group li.list-item.company-active .list-text{color:#4b85ea}.popover-content ul.list-group li.list-item.app-active span.app-status,.popover-content ul.list-group li.list-item.app-active .mat-mdc-chip-option.chip-status,.popover-content ul.list-group li.list-item.company-active span.app-status,.popover-content ul.list-group li.list-item.company-active .mat-mdc-chip-option.chip-status{color:#24a53f}.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status{display:flex;flex-direction:row;justify-content:flex-start}.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected{transition:all .3s ease-out;margin-left:auto;flex:1;justify-content:flex-end}.popover-content ul.list-group li.list-item.app-active .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected,.popover-content ul.list-group li.list-item.company-active .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected{background-color:#408dd7;color:#f5f5f5}.popover-content ul.list-group li.list-item .mat-mdc-standard-chip .mat-mdc-chip-action-label{font-size:.75rem}.popover-content ul.list-group li.list-item .mat-mdc-standard-chip{height:24px}.popover-content ul.list-group li.list-item img.logo-thumb{width:24px;height:auto;margin-right:1rem}.popover-content ul.list-group li.list-item .list-button.btn-logout{display:flex;align-items:center;color:#616161}.popover-content ul.list-group li.list-item.app-active .list-button .app-icon-wrapper{background-color:#fff;border-color:#4b85ea;border-width:3px}.popover-content ul.list-group li.list-item.company-active .list-text .mat-icon{font-variation-settings:\"FILL\" 1,\"wght\" 200,\"GRAD\" 0,\"opsz\" 24;color:var(--themelightblue)}.popover-content ul.list-group li.list-item .list-button.btn-logout .list-text{color:#616161}.popover-content ul.list-group li.list-item.app-active button,.popover-content ul.list-group li.list-item.company-active button{cursor:not-allowed;pointer-events:none}.popover-content hr{background-color:#c4c9d2;margin:0;width:100%;border:0;border-top:1px solid #c4c9d2;opacity:1}.popover-content ul.apps-grid{width:100%;white-space:nowrap;overflow:auto}.popover-content ul.apps-grid li.list-item,.popover-content ul.apps-grid li.list-item img.logo-thumb{display:flex;justify-content:flex-start;flex-wrap:nowrap;align-content:center;align-items:center;flex-direction:row}.popover-header{background-color:#d5e3fa;border-bottom:1px solid #d8d8d8;padding:.975rem 1rem;margin-bottom:0;display:flex;flex-direction:row;align-content:center;justify-content:flex-start;align-items:center;flex-wrap:wrap}.popover-header .mat-icon{font-size:1.5rem!important;font-variation-settings:\"FILL\" 1,\"wght\" 500,\"GRAD\" 0,\"opsz\" 24;color:#254d93}.header-dropdown-profile .popover-header{padding:1.125rem 1rem}.popover-header h3.popover-title{font-size:1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin-bottom:0;line-height:normal;font-weight:500;color:#254d93}.popover-body{max-height:420px;overflow:auto;padding:0}.app-icon-wrapper{margin:0 1rem 0 0;max-width:48px;max-height:48px;width:48px;height:48px;overflow:hidden;background-size:70%;background-repeat:no-repeat;background-position:center;border:1px solid #c4c9d2;border-radius:8px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;flex-wrap:wrap}.app-icon-wrapper img.app-icon{width:100%;height:auto;overflow:hidden;padding:.5rem}h4.app-name{font-size:.65rem;margin:.5rem 0 0;line-height:normal;color:#254d93;font-weight:400;text-transform:uppercase}.popover-body ul.enabled-apps{display:flex;flex-flow:column wrap;justify-content:space-evenly;align-items:center;align-content:flex-start;border-bottom:1px solid #E9E9E9;margin:0;padding:0 1rem;list-style:none}.popover-body ul.enabled-apps li.enabled-app{flex-grow:1;flex:0 1 auto;text-align:center;font-size:.8125rem;padding:10px;list-style:none}.pmx-button.mdc-icon-button[color=theme-white],.pmx-button.icon-btn.mdc-button--raised[color=theme-white]{color:#254d93}.pmx-button.icon-btn.orders-menu[color=theme-white]{border:1px solid #fafafa!important}:host(.mat-accent){--mat-slider-ripple-color: #24a148;--mat-slider-hover-state-layer-color: rgba(255, 64, 129, .05);--mat-slider-focus-state-layer-color: rgba(255, 64, 129, .2);--mdc-slider-handle-color: #24a148;--mdc-slider-focus-handle-color: #24a148;--mdc-slider-hover-handle-color: #24a148;--mdc-slider-active-track-color: #24a148;--mdc-slider-inactive-track-color: #24a148;--mdc-slider-with-tick-marks-inactive-container-color: #24a148;--mdc-slider-with-tick-marks-active-container-color: #51bc6b}:host ::ng-deep .app-menu-sidenav-container{z-index:999}:host ::ng-deep .mat-drawer-backdrop.mat-drawer-shown{position:fixed;background:rgba(63,81,181,.25)}.mat-drawer-backdrop{position:fixed!important}.sidenavDrawer{position:fixed!important;left:0;width:250px;padding:0}.mdc-list-group__subheader{background-color:#eef4ff;padding:5px 20px;margin-bottom:5px!important;font-size:14px!important;font-weight:500!important}.menusubItems{padding-left:2rem!important}.switchCompanyField{min-width:175px!important;margin-left:13px}.profile-button{margin-left:10px}.brand-logo{width:100px;height:38px;background-repeat:no-repeat;background-size:contain;background-origin:content-box;padding:7px}.menuIconList{font-size:20px!important;height:20px;width:20px;margin-right:.5rem;position:relative;color:#747474;font-weight:300}.subHeadListItems{padding:0 15px}.subHeadListItems .menu-item{display:flex;flex-direction:row;align-items:center;color:#000;padding:.7rem .5rem;border-radius:3px;transition:all .3s;font-size:var(--contentfont)}.subHeadListItems .menu-item:hover:not(.no-select){cursor:pointer;background-color:#f5f5f5}.subHeadInnerItem{margin-bottom:0!important}.drawerHeadLogo{width:100%;padding:10px 20px;margin-bottom:20px;margin-top:15px}.drawerHeadLogo img{width:130px}.app-menu-content-section{overflow-y:auto;height:calc(100vh - 80px);padding-bottom:25px}.active-menu{background-color:var(--themelightblue)!important;color:#fff!important;font-weight:500}.active-menu .menuIconList{color:#fff}.appList{padding:11px 15px;background-color:#eef4ff;margin:20px 0 10px;height:35px;display:flex}.appList img{object-fit:contain}::ng-deep .header-dropdown-profile .mat-mdc-menu-content{margin:0;padding:0;list-style-type:none}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i5.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i12.ActiveRoutePipe, name: "activeRoute" }] });
384
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HeaderComponent, decorators: [{
385
- type: Component,
386
- args: [{ selector: 'lib-header', template: "<mat-sidenav-container class=\"app-menu-sidenav-container\">\n <mat-sidenav cdkMenuBar #sidenav mode=\"over\" class=\"sidenavDrawer\">\n <div class=\"drawerHeadLogo\"><img [src]=\"_domSanitizer.bypassSecurityTrustUrl(imageDataUrls.profetLogo)\"></div>\n <div class=\"app-menu-content-section\">\n <ng-container *ngFor=\"let appType of menuList\">\n <div class=\"appList\">\n <img *ngIf=\"appConfig[appType.key]?.appLogoUri\"\n [src]=\"_domSanitizer.bypassSecurityTrustUrl(appConfig[appType.key]?.appLogoUri)\">\n </div>\n <div class=\"subHeadListItems\">\n <div *ngFor=\"let item of appType.value\" class=\"menu-item\" (click)=\"menuSelection(item)\"\n [ngClass]=\"{'active-menu': item | activeRoute : _router.url:_headerSer.headerConfig.appType}\">\n <mat-icon class=\"menuIconList\" *ngIf=\"item.icon\">{{ item.icon }}</mat-icon>\n <span>{{ item.menuName }}</span>\n </div>\n </div>\n </ng-container>\n </div>\n </mat-sidenav>\n\n</mat-sidenav-container>\n<mat-toolbar cdkMenuBar color=\"primary\" class=\"header-wrapper common_header shadow-sm\">\n <!-- Main nav button and navigation links -->\n <button *ngIf=\"menuList && menuList.length > 0\" mat-icon-button color=\"theme-white\" (click)=\"sidenav.toggle()\"\n class=\"pmx-button pmx-menu-button orders-menu icon-btn ms-0 me-3\" aria-label=\"main menu\" tabindex=\"0\"\n matTooltip=\"Main menu\" matTooltipPosition=\"below\"\n matTooltipClass=\"poc-header-tooltip\"><mat-icon>menu</mat-icon></button>\n <a *ngIf=\"_headerSer.headerConfig.appLogoNavigationUrl; else noLink\" class=\"navbar-brand me-auto\"\n [href]=\"_headerSer.headerConfig.appLogoNavigationUrl\">\n <img [src]=\"_domSanitizer.bypassSecurityTrustUrl(appConfig[_headerSer.headerConfig.appType]?.appLogoUri)\"\n alt=\"App Logo\" class=\"app-logo\">\n </a>\n <ng-template #noLink>\n <span class=\"navbar-brand me-auto\">\n <img [src]=\"_domSanitizer.bypassSecurityTrustUrl(appConfig[_headerSer.headerConfig.appType]?.appLogoUri)\"\n alt=\"App Logo\" class=\"app-logo\">\n </span>\n </ng-template>\n\n <ng-content></ng-content>\n\n <mat-form-field appearance=\"outline\" class=\"switchCompanyField\">\n <mat-label>Company</mat-label>\n <mat-select [formControl]=\"companyControl\" (selectionChange)=\"switchCompany($event)\">\n <mat-option *ngFor=\"let opt of companyList\" [value]=\"opt\">\n {{opt.name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n\n <!-- Profile button and profile dropdown links -->\n <button class=\"pmx-button pmx-menu-button profile-button\" mat-button [matMenuTriggerFor]=\"menu\" color=\"primary\"\n matTooltipPosition=\"below\">\n <div class=\"profile-inner\">\n <!-- <div class=\"brand-logo align-self-center\" *ngIf=\"activeCompany?.logo\"\n [ngClass]=\"activeCompany?.logo ? 'branded-logo-true' : 'branded-logo-false'\"\n [ngStyle]=\"{'background-image': 'url(' + activeCompany?.logo + ')'}\"></div> -->\n <div class=\"avatar\">\n <img *ngIf=\"userImageLink;else defaultAvatar\" [src]=\"userImageLink\" class=\"avatar-image\" alt=\"Avatar\">\n <ng-template #defaultAvatar><img\n [src]=\"_domSanitizer.bypassSecurityTrustUrl(imageDataUrls.defaultUserImage)\"\n class=\"avatar-default\" alt=\"profile pic\"></ng-template>\n </div>\n </div>\n </button>\n <mat-menu #menu=\"matMenu\" class=\"accounts_drpmenu pmx-menu-group header-dropdown-profile\" xPosition=\"before\">\n <div class=\"popover-content show-menu\" (click)=\"$event.stopPropagation()\">\n <div class=\"popover-header\">\n <div class=\"popover-user-top\">\n <div class=\"avatar-wrapper\">\n <img *ngIf=\"userImageLink;else defaultLargeAvatar\" [src]=\"userImageLink\" class=\"avatar-icon\"\n alt=\"Avatar\">\n <ng-template #defaultLargeAvatar>\n <div [ngStyle]=\"{'background-image': 'url(' + imageDataUrls.defaultUserImage + ')'}\"\n class=\"avatar-icon default-avatar\" alt=\"Avatar icon\">&nbsp;</div>\n </ng-template>\n </div>\n <div class=\"user-data\">\n <h3 class=\"profile-name\"><span *ngIf=\"userAuthData\">{{ userAuthData?.firstName }} {{\n userAuthData?.lastName }}</span></h3>\n <button *ngIf=\"!_headerSer.headerConfig.hideViewProfile\" mat-button color=\"accent\" class=\"pmx-button btn btn-small view-profile ms-0\"\n (click)=\"profile()\">View Profile</button>\n </div>\n </div>\n </div>\n <div class=\"popover-body\">\n <!-- <div class=\"popover-content-title\">\n <p>Overview</p>\n </div> -->\n\n <div *ngIf=\"userAuthData?.email\">\n <p class=\"list-text list-text-email mt-2 mb-1\">\n <mat-icon class=\"list-icon\">mail</mat-icon><span class=\"pmx-lower-case pmx-text-wrap me-auto\">{{\n userAuthData?.email }}</span>\n </p>\n </div>\n <ng-container *ngIf=\"userAuthData?.contactPhone\">\n <p class=\"list-text mb-1\">\n <mat-icon class=\"list-icon\">call</mat-icon><span class=\"title-case me-auto\">{{\n userAuthData?.contactPhone }}</span>\n </p>\n </ng-container>\n\n <hr />\n <ul cdkMenu class=\"list-group last-group my-1\">\n <li cdkMenuItem class=\"list-item py-2\">\n <button mat-menu-item class=\"pmx-button list-button btn-logout\" (click)=\"onLogoutClick()\">\n <mat-icon>power_settings_new</mat-icon>\n <span class=\"list-text\">Logout</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n </mat-menu>\n</mat-toolbar>", styles: [":root{--contentfont: 13.12px !important;--labelfont: .75rem !important}.pmx-text-truncate{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pmx-text-wrap{overflow-wrap:break-word;word-break:break-word}.pmx-lower-case{text-transform:lowercase}.mat-mdc-button:not(:disabled){color:var(--mdc-text-button-label-text-color)}.mat-mdc-button.mat-accent{--mdc-text-button-label-text-color: #24a148;--mat-text-button-state-layer-color: #24a148;--mat-text-button-ripple-color: rgba(255, 64, 129, .1)}.header-user-name{text-align:end;color:#000}.header-user-name span{font-size:12px;color:#9e9e9ede}.avatarLogo{max-width:30px}mat-toolbar.mat-toolbar.common_header.mat-primary.mat-toolbar-single-row{position:fixed;left:0;top:0;background-color:#fff;height:56px}button.switchButton,button.menuHamberger{padding:8px!important}.sidenavPanel{padding:20px 25px;height:100vh;position:relative}ul.navbarList{padding-left:0;list-style:none;margin-top:40px}ul.navbarList li{color:#666;font-weight:400;margin-bottom:25px;width:170px;cursor:pointer}.active{color:#4177d6!important}ul.navbarList li img{width:23px;margin-right:15px}.accounts_drpmenu{margin-top:.7em}.xsShowUsername{display:none;padding:0 16px;height:48px;line-height:48px}.vr{width:2px;background-color:#f5f5f5;opacity:1;margin:0 .5rem 0 1rem}.vr-blury{background-image:linear-gradient(180deg,transparent,#666,transparent);width:1px;opacity:.25}.navbar-brand .app-logo{height:20px;width:auto}.pmx-button mat-icon.mat-icon,.pmx-button mat-icon.mat-primary,.pmx-button mat-icon.mat-accent,.pmx-button mat-icon.mat-warn{color:var(--mat-icon-color)}.pmx-button mat-icon.mat-icon{font-size:24px!important;line-height:1.5;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;transition:transform .3s ease}.pmx-button.mdc-button--raised mat-icon.mat-icon{width:24px;height:24px;display:contents}.pmx-button.mat-mdc-button-base mat-icon.mat-icon{z-index:1}.pmx-button mat-icon.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.pmx-button mat-icon.mdc-button span.button-text{display:inline-flex;padding:0 1rem;text-transform:uppercase;font-size:.875rem;line-height:1.5}.pmx-button mat-icon.mdc-button span.upper-case{text-transform:uppercase}.pmx-button.mdc-button,.pmx-button.mdc-icon-button,.pmx-button.mdc-button--outlined,.pmx-button.mdc-button .mat-mdc-button-touch-target,.pmx-button.mdc-icon-button .mat-mdc-button-touch-target{height:40px!important;font-size:.75rem!important;letter-spacing:.2px;padding:0 .5rem;line-height:normal}.pmx-button.mdc-icon-button,.pmx-button.icon-btn.mdc-button--outlined,.pmx-button.icon-btn.mdc-button--raised,.pmx-button.mdc-icon-button .mat-mdc-button-touch-target{width:40px;border-radius:5px}.pmx-button.btn-small.mdc-button,.pmx-button.btn-small.mdc-icon-button,.pmx-button.btn-small.mdc-button--outlined{height:28px!important;padding:0 1rem}.pmx-button.mdc-icon-button,.pmx-button.icon-btn.mdc-button--raised{color:#254d93}.pmx-header .icon-button-shadow{box-shadow:0 1px 3px #0003,0 0 #00000024,0 1px 3px #0000001f}.pmx-button.icon-btn.mdc-button--raised.btn-switch-apps.menu-opened,.pmx-button.icon-btn.mdc-button--outlined.btn-switch-apps.menu-opened{background-color:#254d93;color:#fff;font-variation-settings:\"FILL\" 0,\"wght\" 200,\"GRAD\" 0,\"opsz\" 24}.pmx-button.mdc-icon-button.pmx-menu-button:hover,.pmx-button.mat-mdc-outlined-button.btn-switch-apps:hover,.pmx-button.icon-btn.mdc-button--outlined.btn-switch-apps:hover{background-color:#e5f3fb}.pmx-button.icon-app{width:20px}.pmx-button.mat-mdc-outlined-button,.pmx-button.mat-mdc-outlined-button:not(:disabled){background-color:#fff;overflow:hidden}.pmx-button.pmx-menu-button.profile-button.mat-mdc-outlined-button{padding:0;border-color:#bfdff7!important}.btn-group-clicked .pmx-button.pmx-menu-button.profile-button.mat-mdc-outlined-button{border-color:#bfdff7!important}.pmx-button.profile-button .profile-inner{border:0 solid transparent!important;display:flex;align-items:center;overflow:clip}.pmx-button.profile-button .avatar{width:38px;height:38px;box-sizing:border-box;border-radius:50%;overflow:hidden;display:flex;flex-direction:column;justify-content:center;align-content:center;align-items:center;flex-wrap:wrap}.pmx-button.profile-button .avatar{background-color:#9cd7a8}.pmx-button.profile-button .avatar img.avatar-image,.pmx-button.profile-button .avatar img.avatar-default{width:100%;height:auto}.branded-group-false{margin-left:.65rem}.branded-group-false .pmx-button.pmx-menu-button.profile-button.branded-button-false{width:40px;border-radius:20px!important}.branded-group-true{margin-left:.65rem;border-radius:20px;border:1px solid #bfdff7}.btn-group-clicked.branded-group-true{background-color:#99ccf2}.branded-group-true .pmx-button.profile-button .profile-inner{border:0 solid #c4c9d2!important}.branded-group-true .pmx-button.pmx-menu-button.profile-button.branded-button-true{border-radius:20px}.branded-group-true .pmx-button.profile-button.branded-button-true .profile-inner .branded-logo-true{border-radius:5px;display:block;position:relative;height:38px;background-size:100%;background-position:center;background-repeat:no-repeat;min-width:100px;margin-right:1rem}.pmx-menu-group.mat-mdc-menu-panel{margin-top:1rem}.header-dropdown-apps.mat-mdc-menu-panel .mat-mdc-menu-content,.header-dropdown-profile.mat-mdc-menu-panel .mat-mdc-menu-content{padding:0!important}.header-dropdown-apps{width:400px!important}.header-dropdown-apps.mat-mdc-menu-panel .list-button{padding:.5rem 2rem}.header-dropdown-apps.mdc-menu-surface--open,.header-dropdown-profile.mdc-menu-surface--open{position:absolute;z-index:1;top:0;right:0;margin:0;padding:0;border:1px solid #e5e5e5;border-radius:6px;background:#fff;animation:popover .2s ease-in-out}.header-dropdown-apps.mat-mdc-menu-panel.mat-mdc-menu-panel{max-width:400px!important;width:400px!important;overflow:visible}::ng-deep .header-dropdown-profile.mat-mdc-menu-panel.mat-mdc-menu-panel{max-width:408px!important;width:408px!important;overflow:visible;margin-top:1rem}.popover-content:after,.popover-content:before{font-size:1.4em;display:block;width:0;height:0;content:\"\";pointer-events:none;position:absolute;top:-.45em}.popover-content:before{border-right:10px solid transparent;border-bottom:10px solid #999;border-left:10px solid transparent;right:.97em}.popover-content:after{border-right:12px solid transparent;border-bottom:12px solid #d5e3fa;border-left:12px solid transparent;right:.9em}.popover-content-title{display:flex;align-items:center;justify-content:flex-start;overflow:hidden;padding:0 1rem;min-height:40px}.popover-content-title p{margin:0;font-size:.75rem!important;color:#777}.popover-content .popover-user-top:after{clear:both;content:\"\";display:table}.popover-content .popover-user-top{display:flex;flex-flow:row;justify-content:flex-start;align-items:center}.popover-content .popover-user-top .avatar-wrapper{flex:0 4 auto;border-radius:100%;overflow-clip-margin:content-box;overflow:clip;background-color:#fff;padding:2px}.drop-shadow{filter:drop-shadow(0px 0px 3px rgba(0,0,0,.5))}.popover-content .popover-user-top .user-data{flex:1 0 auto;margin-left:1rem}.popover-content .popover-user-top .avatar-wrapper .avatar-icon{background-repeat:no-repeat;background-size:100%;background-position:center;width:64px;height:64px;background-color:#72c885}.avatar-icon.default-avatar{background-size:100%}.popover-content .popover-user-top .user-data h3.profile-name{font-size:1rem;text-overflow:ellipsis;margin-bottom:.5rem;line-height:normal;font-weight:600;color:#254d93}.btn.view-profile{background:#fafafa}.popover-content ul.list-group{padding:0 0 8px;margin:0;display:flex;list-style:none}.popover-content ul.list-group.last-group,.popover-content ul.list-group.last-group .list-item{background-color:transparent}.popover-content ul.list-group li.list-item{align-items:center;border:none;padding:0;width:100%;display:flex;flex-direction:row;flex-wrap:wrap;order:1}.popover-content ul.list-group li.list-item .list-button{padding:.5rem 1rem;min-height:40px}.popover-content ul.list-group li.list-item span.mat-mdc-menu-item-text,.popover-content ul.list-group li.list-item span.mdc-list-item__primary-text,.popover-content ul.list-group li.list-item .list-button>span{display:flex;align-items:center}.popover-content ul.list-group li.list-item.list-company .list-button>span{width:100%;overflow:hidden}.popover-content ul.list-group li.list-item .list-button .hover-label.tooltip-label{opacity:0}.popover-content ul.list-group li.list-item.list-app .list-button:hover>span .hover-label.tooltip-label,.popover-content ul.list-group li.list-item.list-company .list-button:hover>span .hover-label.tooltip-label{opacity:0;display:inline-flex;color:#fff;background-color:#616161;font-size:11px;border-radius:4px;padding:0 .5rem;transition:opacity .3s ease-out}.popover-content ul.list-group li.list-item .list-button:hover{background:rgba(0,0,0,.04)}.popover-content ul.list-group li.list-item.company-active,.popover-content ul.list-group li.list-item.app-active{cursor:not-allowed;pointer-events:none;order:0}.popover-content ul.list-group li.list-item.company-active .active-label,.popover-content ul.list-group li.list-item.app-active .active-label{background-color:#93c47d;color:#212121;padding:0 .5rem;border-radius:50px;font-size:.75rem;margin-left:.5rem}.popover-content ul.list-group.list-apps-group{display:flex}.popover-content ul.list-group.list-overview li.list-item{cursor:not-allowed;pointer-events:none}::ng-deep .popover-content ul.list-group li.list-item button.list-button .list-text{font-size:15px}.popover-content .popover-body p.list-text{padding:.5rem 1rem;margin:0;min-height:auto;cursor:default;display:flex;align-items:center;gap:16px}.popover-content .popover-body p.list-text span{font-size:var(--contentfont);font-weight:500}::ng-deep .popover-content .popover-body p.list-text .mat-mdc-menu-item-text{font-size:15px;font-weight:500}.popover-content ul.list-group li.list-item .list-button .mat-icon,.popover-content ul.list-group li.list-item p.list-text mat-icon.list-icon,.popover-content ul.list-group li.list-item .list-button .list-icon,.popover-content ul.list-group li.list-item p.list-text .list-icon,.popover-content .popover-body p.list-text .list-icon{color:#2db051;font-variation-settings:\"FILL\" 0,\"wght\" 300,\"GRAD\" 0,\"opsz\" 24;font-size:24px!important}.popover-content ul.list-group li.list-item.list-active.company-active button.list-button .mat-icon{color:#2db051;font-variation-settings:\"FILL\" 1,\"wght\" 300,\"GRAD\" 0,\"opsz\" 24}.popover-content ul.list-group li.list-item p.list-text span.mdc-list-item__primary-text{width:100%;display:flex}.popover-content ul.list-group li.list-item span.title-case,.popover-content ul.list-group li.list-item span.lower-case,.popover-content ul.list-group li.list-item span.pmx-lower-case{font-size:.8rem;color:#212121;font-weight:500;display:block;line-height:normal}small{color:#9e9e9e}.popover-content ul.list-group li.list-item span.text-label{font-size:12px;color:#979797;font-weight:400;display:block;line-height:normal}.popover-content ul.list-group li.list-item .list-text span.mat-mdc-menu-item-text{font-size:.875rem;color:#0a152f;font-weight:500;line-height:normal}.popover-content ul.list-group li.list-item .list-text.list-text-email span.mat-mdc-menu-item-text{width:calc(100% - 40px);display:inline-flex}.popover-content ul.list-group li.list-item .list-text.list-text-email span.pmx-text-wrap{overflow-wrap:break-word;word-wrap:break-word;-webkit-hyphens:none;hyphens:none;width:100%}.popover-content ul.list-group li.list-item span.upper-case{text-transform:uppercase}.popover-content ul.list-group li.list-item span.app-status,.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status{font-size:13px;color:#0a152f;font-weight:400;display:block;line-height:normal;margin:0}.popover-content ul.list-group li.list-item.app-active .list-text,.popover-content ul.list-group li.list-item.company-active .list-text{color:#4b85ea}.popover-content ul.list-group li.list-item.app-active span.app-status,.popover-content ul.list-group li.list-item.app-active .mat-mdc-chip-option.chip-status,.popover-content ul.list-group li.list-item.company-active span.app-status,.popover-content ul.list-group li.list-item.company-active .mat-mdc-chip-option.chip-status{color:#24a53f}.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status{display:flex;flex-direction:row;justify-content:flex-start}.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected{transition:all .3s ease-out;margin-left:auto;flex:1;justify-content:flex-end}.popover-content ul.list-group li.list-item.app-active .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected,.popover-content ul.list-group li.list-item.company-active .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected{background-color:#408dd7;color:#f5f5f5}.popover-content ul.list-group li.list-item .mat-mdc-standard-chip .mat-mdc-chip-action-label{font-size:.75rem}.popover-content ul.list-group li.list-item .mat-mdc-standard-chip{height:24px}.popover-content ul.list-group li.list-item img.logo-thumb{width:24px;height:auto;margin-right:1rem}.popover-content ul.list-group li.list-item .list-button.btn-logout{display:flex;align-items:center;color:#616161}.popover-content ul.list-group li.list-item.app-active .list-button .app-icon-wrapper{background-color:#fff;border-color:#4b85ea;border-width:3px}.popover-content ul.list-group li.list-item.company-active .list-text .mat-icon{font-variation-settings:\"FILL\" 1,\"wght\" 200,\"GRAD\" 0,\"opsz\" 24;color:var(--themelightblue)}.popover-content ul.list-group li.list-item .list-button.btn-logout .list-text{color:#616161}.popover-content ul.list-group li.list-item.app-active button,.popover-content ul.list-group li.list-item.company-active button{cursor:not-allowed;pointer-events:none}.popover-content hr{background-color:#c4c9d2;margin:0;width:100%;border:0;border-top:1px solid #c4c9d2;opacity:1}.popover-content ul.apps-grid{width:100%;white-space:nowrap;overflow:auto}.popover-content ul.apps-grid li.list-item,.popover-content ul.apps-grid li.list-item img.logo-thumb{display:flex;justify-content:flex-start;flex-wrap:nowrap;align-content:center;align-items:center;flex-direction:row}.popover-header{background-color:#d5e3fa;border-bottom:1px solid #d8d8d8;padding:.975rem 1rem;margin-bottom:0;display:flex;flex-direction:row;align-content:center;justify-content:flex-start;align-items:center;flex-wrap:wrap}.popover-header .mat-icon{font-size:1.5rem!important;font-variation-settings:\"FILL\" 1,\"wght\" 500,\"GRAD\" 0,\"opsz\" 24;color:#254d93}.header-dropdown-profile .popover-header{padding:1.125rem 1rem}.popover-header h3.popover-title{font-size:1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin-bottom:0;line-height:normal;font-weight:500;color:#254d93}.popover-body{max-height:420px;overflow:auto;padding:0}.app-icon-wrapper{margin:0 1rem 0 0;max-width:48px;max-height:48px;width:48px;height:48px;overflow:hidden;background-size:70%;background-repeat:no-repeat;background-position:center;border:1px solid #c4c9d2;border-radius:8px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;flex-wrap:wrap}.app-icon-wrapper img.app-icon{width:100%;height:auto;overflow:hidden;padding:.5rem}h4.app-name{font-size:.65rem;margin:.5rem 0 0;line-height:normal;color:#254d93;font-weight:400;text-transform:uppercase}.popover-body ul.enabled-apps{display:flex;flex-flow:column wrap;justify-content:space-evenly;align-items:center;align-content:flex-start;border-bottom:1px solid #E9E9E9;margin:0;padding:0 1rem;list-style:none}.popover-body ul.enabled-apps li.enabled-app{flex-grow:1;flex:0 1 auto;text-align:center;font-size:.8125rem;padding:10px;list-style:none}.pmx-button.mdc-icon-button[color=theme-white],.pmx-button.icon-btn.mdc-button--raised[color=theme-white]{color:#254d93}.pmx-button.icon-btn.orders-menu[color=theme-white]{border:1px solid #fafafa!important}:host(.mat-accent){--mat-slider-ripple-color: #24a148;--mat-slider-hover-state-layer-color: rgba(255, 64, 129, .05);--mat-slider-focus-state-layer-color: rgba(255, 64, 129, .2);--mdc-slider-handle-color: #24a148;--mdc-slider-focus-handle-color: #24a148;--mdc-slider-hover-handle-color: #24a148;--mdc-slider-active-track-color: #24a148;--mdc-slider-inactive-track-color: #24a148;--mdc-slider-with-tick-marks-inactive-container-color: #24a148;--mdc-slider-with-tick-marks-active-container-color: #51bc6b}:host ::ng-deep .app-menu-sidenav-container{z-index:999}:host ::ng-deep .mat-drawer-backdrop.mat-drawer-shown{position:fixed;background:rgba(63,81,181,.25)}.mat-drawer-backdrop{position:fixed!important}.sidenavDrawer{position:fixed!important;left:0;width:250px;padding:0}.mdc-list-group__subheader{background-color:#eef4ff;padding:5px 20px;margin-bottom:5px!important;font-size:14px!important;font-weight:500!important}.menusubItems{padding-left:2rem!important}.switchCompanyField{min-width:175px!important;margin-left:13px}.profile-button{margin-left:10px}.brand-logo{width:100px;height:38px;background-repeat:no-repeat;background-size:contain;background-origin:content-box;padding:7px}.menuIconList{font-size:20px!important;height:20px;width:20px;margin-right:.5rem;position:relative;color:#747474;font-weight:300}.subHeadListItems{padding:0 15px}.subHeadListItems .menu-item{display:flex;flex-direction:row;align-items:center;color:#000;padding:.7rem .5rem;border-radius:3px;transition:all .3s;font-size:var(--contentfont)}.subHeadListItems .menu-item:hover:not(.no-select){cursor:pointer;background-color:#f5f5f5}.subHeadInnerItem{margin-bottom:0!important}.drawerHeadLogo{width:100%;padding:10px 20px;margin-bottom:20px;margin-top:15px}.drawerHeadLogo img{width:130px}.app-menu-content-section{overflow-y:auto;height:calc(100vh - 80px);padding-bottom:25px}.active-menu{background-color:var(--themelightblue)!important;color:#fff!important;font-weight:500}.active-menu .menuIconList{color:#fff}.appList{padding:11px 15px;background-color:#eef4ff;margin:20px 0 10px;height:35px;display:flex}.appList img{object-fit:contain}::ng-deep .header-dropdown-profile .mat-mdc-menu-content{margin:0;padding:0;list-style-type:none}\n"] }]
387
- }], ctorParameters: function () { return []; }, propDecorators: { INACTIVITY_LIMIT: [{
388
- type: Input
389
- }], logoutEvent: [{
390
- type: Output
391
- }], sidenav: [{
392
- type: ViewChild,
393
- args: ['sidenav']
394
- }], menuTrigger: [{
395
- type: ViewChild,
396
- args: [MatMenuTrigger]
397
- }], resetTimer: [{
398
- type: HostListener,
399
- args: ['document:mousemove']
400
- }, {
401
- type: HostListener,
402
- args: ['document:keydown']
403
- }, {
404
- type: HostListener,
405
- args: ['document:click']
406
- }, {
407
- type: HostListener,
408
- args: ['document:touchstart']
409
- }, {
410
- type: HostListener,
411
- args: ['document:touchmove']
412
- }, {
413
- type: HostListener,
414
- args: ['document:scroll']
415
- }, {
416
- type: HostListener,
417
- args: ['window:focus']
418
- }] } });
419
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXIvc3JjL2xpYi9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXIvc3JjL2xpYi9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFvQixZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDM0csT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBT3RELE1BQU0sT0FBTyxlQUFlO0lBMkIxQjtRQXpCQSxjQUFTLEdBQVcsRUFBRSxDQUFDO1FBRXZCLGtCQUFhLEdBQVEsSUFBSSxDQUFDO1FBQzFCLG9CQUFlLEdBQVEsRUFBRSxDQUFDO1FBQzFCLGtCQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ3RCLFlBQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqQyxlQUFVLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekMsa0JBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFHcEMsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBQzlCLGlDQUE0QixHQUFXLENBQUMsQ0FBQztRQUN4QyxxQkFBZ0IsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLGFBQWE7UUFFL0MsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBa0QsQ0FBQztRQUUzRixtQkFBYyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbkMsY0FBUyxHQUFRLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDckMsZ0JBQVcsR0FBYyxFQUFFLENBQUM7UUFHNUIsYUFBUSxHQUF3QyxFQUFFLENBQUM7SUFHbkMsQ0FBQztJQUVqQixLQUFLLENBQUMsUUFBUTtRQUNaLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUN6QyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDWixJQUFJLEdBQUcsRUFBRTtvQkFDUCxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRTt3QkFDaEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO3FCQUNwQjtvQkFDRCxJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUU7d0JBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxXQUFXOzRCQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQzs0QkFDekUsQ0FBQyxDQUFDLElBQUksQ0FBQztxQkFDVjtpQkFDRjtZQUNILENBQUM7U0FDRixDQUFDLENBQUE7UUFDRiw0QkFBNEI7UUFDNUIsd0RBQXdEO1FBQ3hELHdDQUF3QztRQUN4Qyx1QkFBdUI7UUFDdkIsNkJBQTZCO1FBQzdCLHNDQUFzQztRQUN0Qyx1REFBdUQ7UUFDdkQsOEJBQThCO1FBQzlCLCtEQUErRDtRQUMvRCxtQ0FBbUM7UUFDbkMsWUFBWTtRQUNaLFVBQVU7UUFDVixTQUFTO1FBQ1QsUUFBUTtRQUNSLElBQUk7UUFDSiw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVwQywyRkFBMkY7UUFDM0YsNkZBQTZGO1FBQzdGLDhEQUE4RDtRQUM5RCw0SUFBNEk7UUFDNUksd0ZBQXdGO1FBQ3hGLHlIQUF5SDtRQUN6SCx5Q0FBeUM7UUFFekMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQVVELFVBQVUsQ0FBQyxpQkFBMEIsSUFBSTtRQUN2QyxZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFckMsZ0ZBQWdGO1FBQ2hGLElBQUksY0FBYyxFQUFFO1lBQ2xCLDhEQUE4RDtZQUM5RCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM5RjtRQUVELG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN2QywyQ0FBMkM7WUFDM0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ3RGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRSxNQUFNLE9BQU8sR0FBRyxHQUFHLEdBQUcsY0FBYyxDQUFDO1lBRXJDLElBQUksVUFBVSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ2pELDhDQUE4QztnQkFDOUMsaUVBQWlFO2dCQUNqRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3hCO2lCQUFNO2dCQUNMLHdDQUF3QztnQkFDeEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFCLElBQUk7SUFDTixDQUFDO0lBSUQ7O01BRUU7SUFDTSxnQkFBZ0I7UUFDdEIsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQzFDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUVwRixJQUFJLFlBQVksRUFBRTtnQkFDaEIsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFFbkQseUhBQXlIO2dCQUN6SCxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFO29CQUMzQix3RUFBd0U7b0JBQ3hFLDRGQUE0RjtvQkFDNUYsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFO3dCQUU1QyxtRUFBbUU7d0JBQ25FLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsRUFBRTs0QkFFdkQsSUFBSSxDQUFDLDRCQUE0QixHQUFHLGVBQWUsQ0FBQzs0QkFFcEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDOzRCQUN0RixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7NEJBQ3ZCLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNqRSxNQUFNLE9BQU8sR0FBRyxHQUFHLEdBQUcsY0FBYyxDQUFDOzRCQUVyQyxNQUFNLFFBQVEsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDOzRCQUNqRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7eUJBQzNDO3FCQUNGO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7SUFDcEMsQ0FBQztJQUVPLFlBQVksQ0FBQyxZQUFxQixJQUFJLEVBQUUsWUFBcUIsSUFBSSxFQUFFLFdBQW9CLEtBQUs7UUFDbEcsMENBQTBDO1FBQzFDLGdFQUFnRTtRQUNoRSxZQUFZO1FBQ1osSUFBSTtRQUVKLElBQUksU0FBUyxFQUFFO1lBQ2IscUVBQXFFO1lBQ3JFLDRHQUE0RztZQUM1RyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEdBQUcsQ0FBQyxDQUFDLDBDQUEwQztZQUNuRixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNuRjtRQUVELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQztRQUNyRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFbEUsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO1FBRXpELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsd0JBQXdCLEVBQUU7WUFDekQsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDdkQsVUFBVSxHQUFHLFVBQVUsR0FBRyxTQUFTLEdBQUcsY0FBYyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakc7UUFFRCw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3ZELFVBQVUsR0FBRyxVQUFVLEdBQUcsU0FBUyxHQUFHLDhCQUE4QixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztTQUM5RjtRQUNELE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUM7YUFDMUQsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNULElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNsRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUwsbUJBQW1CO1FBQ25CLDRGQUE0RjtRQUM1RixJQUFJO1FBRUosSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsdUNBQXVDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzVCLGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUM7SUFDM0IsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxRQUFtQjtRQUN4QyxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFbEMsMEhBQTBIO1lBQzFILElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsYUFBYSxFQUFFO2dCQUMxQyxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQztnQkFDL0MsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBRXpGLElBQUksYUFBYSxJQUFJLGNBQWMsRUFBRTtvQkFDbkMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLCtCQUErQixFQUFFLENBQUM7aUJBQ3JEO2FBQ0Y7WUFDRCxvQkFBb0I7WUFFcEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQWE7UUFDekIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssK0JBQStCLENBQUM7UUFDbEUsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFekYsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRTtZQUN4RCxpRkFBaUY7WUFDakYsSUFBSSxhQUFhLElBQUksY0FBYyxFQUFFO2dCQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbkQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNwQztTQUNGO2FBQ0k7WUFDSCxJQUFJLFNBQVMsRUFBRTtnQkFDYixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNwQyxpRkFBaUY7b0JBQ2pGLElBQUksYUFBYSxJQUFJLGNBQWMsRUFBRTt3QkFDbkMsSUFBSSxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQzt3QkFDN0UsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQzlCO3lCQUFNO3dCQUNMLElBQUksR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUM3RCxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDOUI7aUJBQ0Y7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUN6QyxJQUFJLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDZixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNqQyxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUN0QyxJQUFJLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDZixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPLElBQUksV0FBVyxDQUFDLGFBQWEsRUFBRTtZQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUM1QzthQUNJO1lBQ0gsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsYUFBYSxHQUFHLGNBQWMsQ0FBQztZQUN0RSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBQ0QsYUFBYTtRQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0IsdUJBQXVCO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsNEJBQTRCLEdBQUcsR0FBRyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWxGLGVBQWU7UUFDZixJQUFJLElBQUksQ0FBQyxpQkFBaUI7WUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDakUsSUFBSSxJQUFJLENBQUMsbUJBQW1CO1lBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRXRFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUN6RCwrREFBK0Q7UUFDL0QsNERBQTREO1FBQzVELG1HQUFtRztRQUNuRyxJQUFJO1FBRUosT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQzthQUMxRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQy9GLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQixPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDO2lCQUMxRCxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNULElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNuQyxDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDakcsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCx5QkFBeUI7UUFDdkIsSUFBSSxHQUFHLEdBQUc7WUFDUix1QkFBdUIsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPO1NBQzlELENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMzRCxJQUFJLEVBQUUsR0FBRyxFQUFFO1lBQ1gsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBUztRQUNyQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pCLElBQUksT0FBTyxHQUFHO1lBQ1osYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSTtZQUN2QyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsSUFBSTtTQUMvQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzNHLElBQUksR0FBRyxFQUFFO2dCQUNQLDhCQUE4QjtnQkFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7b0JBQ3JCLG9EQUFvRDtvQkFDcEQsb0JBQW9CO29CQUNwQixJQUFJLEdBQUcsR0FBUTt3QkFDYixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7d0JBQzlCLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPO3FCQUM5QyxDQUFDO29CQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO3dCQUMvQyxJQUFJLEVBQUUsQ0FBQyxRQUFhLEVBQUUsRUFBRTs0QkFDdEIsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtnQ0FDdEQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtvQ0FDaEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7b0NBQ3ZDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lDQUM5QjtnQ0FDRCwrRUFBK0U7Z0NBQy9FLDRCQUE0Qjs2QkFDN0I7aUNBQU07Z0NBQ0wsd0VBQXdFO2dDQUN4RSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDakIscUVBQXFFLEVBQ3JFLElBQUksRUFDSixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FDbkIsQ0FBQzs2QkFDSDt3QkFDSCxDQUFDO3dCQUNELEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFOzRCQUNYLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDOzRCQUMvQix3RUFBd0U7NEJBQ3hFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUNqQixxRUFBcUUsRUFDckUsSUFBSSxFQUNKLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUNuQixDQUFDO3dCQUNKLENBQUM7cUJBQ0YsQ0FBQyxDQUFDO29CQUNILEtBQUs7b0JBQ0wsU0FBUztvQkFDVCxvQ0FBb0M7b0JBQ3BDLHlCQUF5QjtvQkFDekIsNkVBQTZFO29CQUM3RSxZQUFZO29CQUNaLHlCQUF5QjtvQkFDekIsT0FBTztvQkFDUCxJQUFJO2lCQUNMO2FBQ0Y7aUJBQ0k7Z0JBQ0gsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7YUFDaEM7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDNUIsYUFBYSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQzs7NkdBOVpVLGVBQWU7aUdBQWYsZUFBZSxvaUJBdUJmLGNBQWMsZ0RDckQzQiw4Z05Bb0hjOzRGRHRGRCxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFlBQVk7MEVBbUJiLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUtlLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDTyxXQUFXO3NCQUFyQyxTQUFTO3VCQUFDLGNBQWM7Z0JBOER6QixVQUFVO3NCQVBULFlBQVk7dUJBQUMsb0JBQW9COztzQkFDakMsWUFBWTt1QkFBQyxrQkFBa0I7O3NCQUMvQixZQUFZO3VCQUFDLGdCQUFnQjs7c0JBQzdCLFlBQVk7dUJBQUMscUJBQXFCOztzQkFDbEMsWUFBWTt1QkFBQyxvQkFBb0I7O3NCQUNqQyxZQUFZO3VCQUFDLGlCQUFpQjs7c0JBQzlCLFlBQVk7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IE1hdFNpZGVuYXYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHNpZ25PdXQgfSBmcm9tICdhd3MtYW1wbGlmeS9hdXRoJztcbmltcG9ydCB7IEFwcE1lbnUsIENvbXBhbnksIExvZ291dFJlYXNvbiwgTG9nb3V0U3RhdHVzIH0gZnJvbSAnLi4vY29tbW9uLWhlYWRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29tbW9uSGVhZGVyU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi1oZWFkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wYW55U3dpdGNoV2FybmluZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBhbnktc3dpdGNoLXdhcm5pbmcvY29tcGFueS1zd2l0Y2gtd2FybmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXBwQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL2FwcC5jb25maWcnO1xuaW1wb3J0IHsgUFJPRkVUX0FQUFMgfSBmcm9tICcuLi91dGlscy9hcHBzLmVudW0nO1xuaW1wb3J0IHsgaW1hZ2VEYXRhVXJsIH0gZnJvbSAnLi4vdXRpbHMvaW1hZ2UuZGF0YXVybCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1oZWFkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaGVhZGVyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEhlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgY29tcGFueVByb2ZpbGU6IGFueTtcbiAgcG9ydGFsVXJsOiBzdHJpbmcgPSAnJztcbiAgdXNlckF1dGhEYXRhOiBhbnk7XG4gIHVzZXJJbWFnZUxpbms6IGFueSA9IG51bGw7XG4gIHVzZXJDb21wYW55TG9nbzogYW55ID0gJyc7XG4gIGltYWdlRGF0YVVybHMgPSBpbWFnZURhdGFVcmw7XG4gIHB1YmxpYyBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgX3NuYWNrYmFyID0gaW5qZWN0KE1hdFNuYWNrQmFyKTtcbiAgcHVibGljIF9oZWFkZXJTZXIgPSBpbmplY3QoQ29tbW9uSGVhZGVyU2VydmljZSk7XG4gIHB1YmxpYyBfZG9tU2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gIHByaXZhdGUgaW5hY3Rpdml0eVRpbWVvdXQ6IGFueTtcbiAgcHJpdmF0ZSBsb2dvdXRDaGVja0ludGVydmFsOiBhbnk7XG4gIHByaXZhdGUgY29tcG9uZW50SW5pdFRpbWU6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgbGFzdFByb2Nlc3NlZExvZ291dFRpbWVzdGFtcDogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgSU5BQ1RJVklUWV9MSU1JVCA9IDMwICogNjAgKiAxMDAwOyAvLyAzMCBtaW51dGVzXG5cbiAgQE91dHB1dCgpIGxvZ291dEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlYXNvbjogTG9nb3V0UmVhc29uLCBzdGF0dXM6IExvZ291dFN0YXR1cyB9PigpO1xuXG4gIGNvbXBhbnlDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gIGFwcENvbmZpZzogYW55ID0gQXBwQ29uZmlnLmFwcENvbmZpZztcbiAgY29tcGFueUxpc3Q6IENvbXBhbnlbXSA9IFtdO1xuICBAVmlld0NoaWxkKCdzaWRlbmF2Jykgc2lkZW5hdiE6IE1hdFNpZGVuYXY7XG4gIEBWaWV3Q2hpbGQoTWF0TWVudVRyaWdnZXIpIG1lbnVUcmlnZ2VyITogTWF0TWVudVRyaWdnZXI7XG4gIG1lbnVMaXN0OiB7IGtleTogc3RyaW5nLCB2YWx1ZTogQXBwTWVudVtdIH1bXSA9IFtdO1xuICBhY3RpdmVDb21wYW55OiBDb21wYW55IHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51cGRhdGVMYXN0QWNjZXNzZWRBcHBJbmZvKCk7XG4gICAgdGhpcy5nZXRDb21wYW55TGlzdCgpO1xuXG4gICAgdGhpcy5faGVhZGVyU2VyLmdldFVzZXJEZXRhaWxzKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHRoaXMudXNlckF1dGhEYXRhID0gcmVzO1xuICAgICAgICAgIGlmICghdGhpcy5faGVhZGVyU2VyLmhlYWRlckNvbmZpZy5kaXNhYmxlQXBwTWVudSkge1xuICAgICAgICAgICAgdGhpcy5nZXRNZW51TGlzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzLnByb2ZpbGVJbWFnZSkge1xuICAgICAgICAgICAgdGhpcy51c2VySW1hZ2VMaW5rID0gcmVzLnByb2ZpbGVJbWFnZS5sb2NhdGlvblVybFxuICAgICAgICAgICAgICA/IHRoaXMuX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKHJlcy5wcm9maWxlSW1hZ2UubG9jYXRpb25VcmwpXG4gICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIC8vIGlmICh1c2VySW5mbz8udXNlcm5hbWUpIHtcbiAgICAvLyAgIGxldCB1c2VyRGV0YWlscyA9IHRoaXMuX2hlYWRlclNlci5nZXRVc2VyRGV0YWlscygpO1xuICAgIC8vICAgZm9ya0pvaW4oW3VzZXJEZXRhaWxzXSkuc3Vic2NyaWJlKHtcbiAgICAvLyAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgIC8vICAgICAgIGlmIChyZXMgJiYgcmVzWzBdKSB7XG4gICAgLy8gICAgICAgICB0aGlzLnVzZXJBdXRoRGF0YSA9IHJlc1swXTtcbiAgICAvLyAgICAgICAgIHRoaXMudXNlcm5hbWUgPSB0aGlzLnVzZXJBdXRoRGF0YS5maXJzdE5hbWU7XG4gICAgLy8gICAgICAgICB0aGlzLmdldE1lbnVMaXN0KCk7XG4gICAgLy8gICAgICAgICBpZiAodGhpcy51c2VyQXV0aERhdGE/Ll9saW5rcz8ucHJvZmlsZUltYWdlPy5ocmVmKSB7XG4gICAgLy8gICAgICAgICAgIHRoaXMuZ2V0VXNlclByb2ZpbGUoKTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICB9XG4gICAgLy8gICAgIH0sXG4gICAgLy8gICB9KTtcbiAgICAvLyB9XG4gICAgLy8gQ2FwdHVyZSB3aGVuIHRoaXMgY29tcG9uZW50L2FwcCB3YXMgbG9hZGVkXG4gICAgdGhpcy5jb21wb25lbnRJbml0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICAvLyBSZW1vdmUgbGVnYWN5IGJvb2xlYW4gY2hlY2sgb3IgcmVzZXQgaWYgbmVlZGVkLCBidXQgcHJpbWFyaWx5IHdlIHJlbHkgb24gdGltZXN0YW1wcyBub3cuXG4gICAgLy8gV2UgZG8gTk9UIHdhbnQgdG8gY2xlYXIgdGhlIGNvb2tpZSBpbW1lZGlhdGVseSBvbiBpbml0IGlmIGl0J3MgYSB2YWxpZCBwZXJzaXN0ZW50IHNpZ25hbCwgXG4gICAgLy8gYnV0IHRoZSB0aW1lc3RhbXAgY2hlY2sgZ3VhcmRzIGFnYWluc3QgXCJsb29waW5nXCIgb24gcmVsb2FkLlxuICAgIC8vIEhvd2V2ZXIsIGlmIHdlIHdhbnQgdG8gc3VwcG9ydCBcImZyZXNoIGxvZ2luIG1lYW5zIGZyZXNoIHNlc3Npb25cIiwgd2UgbWlnaHQganVzdCBpZ25vcmUgb2xkIHRpbWVzdGFtcHMgKHdoaWNoIHdlIGRvIHZpYSA+IGluaXRUaW1lIGNoZWNrKS5cbiAgICAvLyBTbyBkaXN0aW5jdCBjbGVhbnVwIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBpZiB0aGUgbG9naW4gcGFnZSBubyBsb25nZXIgZGVsZXRlcyBpdC4gXG4gICAgLy8gQnV0IGxldCdzIGxlYXZlIGl0IGFzIGlzIG9yIHJlbW92ZSBpdC4gVGhlIHVzZXIncyBpc3N1ZSB3YXMgXCJkZWxldGUgY29va2llXCIgbG9naWMgb24gTE9HSU4gUEFHRSBjYXVzZWQgcmFjZSBjb25kaXRpb24uXG4gICAgLy8gSGVyZSB3ZSBqdXN0IHdhbnQgdG8gc3RhcnQgbW9uaXRvcmluZy5cblxuICAgIHRoaXMuc3RhcnRMb2dvdXRDaGVjaygpO1xuICB9XG5cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZW1vdmUnKVxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJylcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snKVxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDp0b3VjaHN0YXJ0JylcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6dG91Y2htb3ZlJylcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6c2Nyb2xsJylcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmZvY3VzJylcbiAgcmVzZXRUaW1lcihpc1VzZXJBY3Rpdml0eTogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5pbmFjdGl2aXR5VGltZW91dCk7XG5cbiAgICAvLyBVcGRhdGUgZ2xvYmFsIGFjdGl2aXR5IHRpbWVzdGFtcCBpbiBjb29raWUgT05MWSBpZiB0cmlnZ2VyZWQgYnkgdXNlciBhY3Rpdml0eVxuICAgIGlmIChpc1VzZXJBY3Rpdml0eSkge1xuICAgICAgLy8gVXNlIGEgc2hvcnQgZXhwaXJ5IChlLmcuIDEgZGF5KSBvciBzeW5jIHdpdGggc2Vzc2lvbiBsZW5ndGhcbiAgICAgIHRoaXMuX2hlYWRlclNlci5zZXRDb29raWUodGhpcy5faGVhZGVyU2VyLkxBU1RfQUNUSVZFX1NFU1NJT05fS0VZLCBEYXRlLm5vdygpLnRvU3RyaW5nKCksIDEpO1xuICAgIH1cblxuICAgIC8vIGlmICghdGhpcy5faGVhZGVyU2VyLmlzU2Vzc2lvbkV4cGlyeURpYWxvZ09wZW4pIHtcbiAgICB0aGlzLmluYWN0aXZpdHlUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBDaGVjayBnbG9iYWwgYWN0aXZpdHkgYmVmb3JlIGxvZ2dpbmcgb3V0XG4gICAgICBjb25zdCBsYXN0QWN0aXZlID0gdGhpcy5faGVhZGVyU2VyLmdldENvb2tpZSh0aGlzLl9oZWFkZXJTZXIuTEFTVF9BQ1RJVkVfU0VTU0lPTl9LRVkpO1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IGxhc3RBY3RpdmVUaW1lID0gbGFzdEFjdGl2ZSA/IHBhcnNlSW50KGxhc3RBY3RpdmUsIDEwKSA6IDA7XG4gICAgICBjb25zdCBlbGFwc2VkID0gbm93IC0gbGFzdEFjdGl2ZVRpbWU7XG5cbiAgICAgIGlmIChsYXN0QWN0aXZlICYmIGVsYXBzZWQgPCB0aGlzLklOQUNUSVZJVFlfTElNSVQpIHtcbiAgICAgICAgLy8gVXNlciB3YXMgYWN0aXZlIGluIGFub3RoZXIgdGFiL2FwcCByZWNlbnRseVxuICAgICAgICAvLyBSZXNjaGVkdWxlIHRoZSBjaGVjaywgYnV0IERPIE5PVCB1cGRhdGUgdGhlIGFjdGl2aXR5IHRpbWVzdGFtcFxuICAgICAgICB0aGlzLnJlc2V0VGltZXIoZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVhbGx5IGluYWN0aXZlIGFjcm9zcyBhbGwga25vd24gdGFic1xuICAgICAgICB0aGlzLmhhbmRsZUxvZ291dCgpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuSU5BQ1RJVklUWV9MSU1JVCk7XG4gICAgLy8gfVxuICB9XG5cblxuXG4gIC8qKlxuICAgICAqIEhlbHBlciB0byBpZGVudGlmeSB0aGUgc2Vzc2lvbiBleHBpcnkgaW4gaW4tYWN0aXZlIHRhYnMuXG4gICovXG4gIHByaXZhdGUgc3RhcnRMb2dvdXRDaGVjaygpIHtcbiAgICAvLyBQb2xsIGZvciB0aGUgbG9nb3V0IHNpZ25hbCBjb29raWUgKHdvcmtzIGFjcm9zcyBwb3J0cy9zdWJkb21haW5zKVxuICAgIHRoaXMubG9nb3V0Q2hlY2tJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IGxvZ291dENvb2tpZSA9IHRoaXMuX2hlYWRlclNlci5nZXRDb29raWUodGhpcy5faGVhZGVyU2VyLlNFU1NJT05fRVhQSVJFRF9LRVkpO1xuXG4gICAgICBpZiAobG9nb3V0Q29va2llKSB7XG4gICAgICAgIGNvbnN0IGxvZ291dFRpbWVzdGFtcCA9IHBhcnNlSW50KGxvZ291dENvb2tpZSwgMTApO1xuXG4gICAgICAgIC8vIDEuIENoZWNrIGlmIGl0J3MgYSB2YWxpZCBudW1iZXIgKGxlZ2FjeSAndHJ1ZScgc3RyaW5nIHN1cHBvcnQgaXMgaXJyZWxldmFudCBpZiB3ZSBmdWxseSBzd2l0Y2gsIGJ1dCBzYWZlIHRvIGNoZWNrIE5hTilcbiAgICAgICAgaWYgKCFpc05hTihsb2dvdXRUaW1lc3RhbXApKSB7XG4gICAgICAgICAgLy8gMi4gQ2hlY2sgaWYgdGhpcyBsb2dvdXQgZXZlbnQgaGFwcGVuZWQgQUZURVIgdGhpcyBhcHAgd2FzIGluaXRpYWxpemVkXG4gICAgICAgICAgLy8gICAgVGhpcyBwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyBpZiB0aGUgdXNlciBqdXN0IGxvZ2dlZCBpbiBhbmQgdGhlIGNvb2tpZSBpcyBzdGlsbCB0aGVyZS5cbiAgICAgICAgICBpZiAobG9nb3V0VGltZXN0YW1wID4gdGhpcy5jb21wb25lbnRJbml0VGltZSkge1xuXG4gICAgICAgICAgICAvLyAzLiBDaGVjayBpZiB3ZSBoYXZlbid0IGFscmVhZHkgcHJvY2Vzc2VkIHRoaXMgZXhhY3QgbG9nb3V0IGV2ZW50XG4gICAgICAgICAgICBpZiAobG9nb3V0VGltZXN0YW1wID4gdGhpcy5sYXN0UHJvY2Vzc2VkTG9nb3V0VGltZXN0YW1wKSB7XG5cbiAgICAgICAgICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkTG9nb3V0VGltZXN0YW1wID0gbG9nb3V0VGltZXN0YW1wO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGxhc3RBY3RpdmUgPSB0aGlzLl9oZWFkZXJTZXIuZ2V0Q29va2llKHRoaXMuX2hlYWRlclNlci5MQVNUX0FDVElWRV9TRVNTSU9OX0tFWSk7XG4gICAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgIGNvbnN0IGxhc3RBY3RpdmVUaW1lID0gbGFzdEFjdGl2ZSA/IHBhcnNlSW50KGxhc3RBY3RpdmUsIDEwKSA6IDA7XG4gICAgICAgICAgICAgIGNvbnN0IGVsYXBzZWQgPSBub3cgLSBsYXN0QWN0aXZlVGltZTtcblxuICAgICAgICAgICAgICBjb25zdCBpc01hbnVhbCA9IGVsYXBzZWQgPCB0aGlzLklOQUNUSVZJVFlfTElNSVQ7XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlTG9nb3V0KGZhbHNlLCBmYWxzZSwgaXNNYW51YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDIwMDApOyAvLyBDaGVjayBldmVyeSAyIHNlY29uZHNcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTG9nb3V0KGJyb2FkY2FzdDogYm9vbGVhbiA9IHRydWUsIHNob3dQb3B1cDogYm9vbGVhbiA9IHRydWUsIGlzTWFudWFsOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAvLyBQcmV2ZW50IG11bHRpcGxlIHBvcHVwcyBpZiBhbHJlYWR5IG9wZW5cbiAgICAvLyBpZiAodGhpcy5faGVhZGVyU2VyLmlzU2Vzc2lvbkV4cGlyeURpYWxvZ09wZW4gJiYgc2hvd1BvcHVwKSB7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuXG4gICAgaWYgKGJyb2FkY2FzdCkge1xuICAgICAgLy8gU2V0IGEgY29va2llIHRvIHNpZ25hbCBvdGhlciB0YWJzL3BvcnRzIHdpdGggdGhlIGN1cnJlbnQgVElNRVNUQU1QXG4gICAgICAvLyBUaGlzIHRpbWVzdGFtcCBhbGxvd3Mgb3RoZXIgdGFicyB0byBrbm93IGlmIHRoaXMgaXMgYSBcIm5ld1wiIGxvZ291dCBldmVudCByZWxhdGl2ZSB0byB0aGVpciBzZXNzaW9uIHN0YXJ0LlxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIHRoaXMubGFzdFByb2Nlc3NlZExvZ291dFRpbWVzdGFtcCA9IG5vdzsgLy8gRG9uJ3QgbG9nb3V0IG15c2VsZiBhZ2FpbiBiYXNlZCBvbiB0aGlzXG4gICAgICB0aGlzLl9oZWFkZXJTZXIuc2V0Q29va2llKHRoaXMuX2hlYWRlclNlci5TRVNTSU9OX0VYUElSRURfS0VZLCBub3cudG9TdHJpbmcoKSwgMSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVhc29uID0gaXNNYW51YWwgPyBMb2dvdXRSZWFzb24uVVNFUl9JTklUSUFURUQgOiBMb2dvdXRSZWFzb24uU0VTU0lPTl9USU1FT1VUO1xuICAgIHRoaXMubG9nb3V0RXZlbnQuZW1pdCh7IHJlYXNvbiwgc3RhdHVzOiBMb2dvdXRTdGF0dXMuSU5JVElBVEVEIH0pO1xuXG4gICAgbGV0IHNlc3Npb25VcmwgPSB0aGlzLl9oZWFkZXJTZXIuaGVhZGVyQ29uZmlnLnNpZ25PdXRVcmw7XG5cbiAgICBpZiAodGhpcy5faGVhZGVyU2VyLmhlYWRlckNvbmZpZy5lbmFibGVMYXN0VXJsUmVkaXJlY3Rpb24pIHtcbiAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHNlc3Npb25VcmwuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/JztcbiAgICAgIHNlc3Npb25VcmwgPSBzZXNzaW9uVXJsICsgc2VwYXJhdG9yICsgJ3JlZGlyZWN0VXJsPScgKyBlbmNvZGVVUklDb21wb25lbnQod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgIH1cblxuICAgIC8vIE9ubHkgYWRkIHNlc3Npb25FeHBpcmVkIHBhcmFtcyBpZiBpdCBpcyBOT1QgYSBtYW51YWwgbG9nb3V0XG4gICAgaWYgKCFpc01hbnVhbCkge1xuICAgICAgY29uc3Qgc2VwYXJhdG9yID0gc2Vzc2lvblVybC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nO1xuICAgICAgc2Vzc2lvblVybCA9IHNlc3Npb25VcmwgKyBzZXBhcmF0b3IgKyAnc2Vzc2lvbkV4cGlyZWQ9dHJ1ZSZ0aW1lb3V0PScgKyB0aGlzLklOQUNUSVZJVFlfTElNSVQ7XG4gICAgfVxuICAgIHNpZ25PdXQoeyBnbG9iYWw6IHRydWUsIG9hdXRoOiB7IHJlZGlyZWN0VXJsOiBzZXNzaW9uVXJsIH0gfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dvdXRFdmVudC5lbWl0KHsgcmVhc29uLCBzdGF0dXM6IExvZ291dFN0YXR1cy5DT01QTEVURUQgfSk7XG4gICAgICAgIHdpbmRvdy5vcGVuKHNlc3Npb25VcmwsICdfc2VsZicpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTG9nb3V0IGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgIHRoaXMubG9nb3V0RXZlbnQuZW1pdCh7IHJlYXNvbiwgc3RhdHVzOiBMb2dvdXRTdGF0dXMuQ09NUExFVEVEIH0pO1xuICAgICAgICB3aW5kb3cub3BlbihzZXNzaW9uVXJsLCAnX3NlbGYnKTtcbiAgICAgIH0pO1xuXG4gICAgLy8gaWYgKHNob3dQb3B1cCkge1xuICAgIC8vICAgdGhpcy5faGVhZGVyU2VyLm9wZW5TZXNzaW9uRXhwaXJlSW5mbyh7IHNlc3Npb25PdXRUaW1lSW5NaW5zOiB0aGlzLklOQUNUSVZJVFlfTElNSVQgfSk7XG4gICAgLy8gfVxuXG4gICAgaWYgKHRoaXMuaW5hY3Rpdml0eVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmluYWN0aXZpdHlUaW1lb3V0KTtcbiAgICB9XG4gICAgLy8gU3RvcCBwb2xsaW5nIG9uY2Ugd2UgYXJlIGxvZ2dpbmcgb3V0XG4gICAgaWYgKHRoaXMubG9nb3V0Q2hlY2tJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmxvZ291dENoZWNrSW50ZXJ2YWwpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEN1cnJlbnRDb21wYW55KCkge1xuICAgIGxldCBjb20gPSB0aGlzLmNvbXBhbnlMaXN0LmZpbmQoeCA9PiB4LmlzQWN0aXZlKTtcbiAgICB0aGlzLmFjdGl2ZUNvbXBhbnkgPSBjb207XG4gIH1cblxuICBwYXRjaEN1cnJlbnRDb21wYW55SW5mbygpIHtcbiAgICBsZXQgY29tID0gdGhpcy5jb21wYW55TGlzdC5maW5kKHggPT4geC5pc0FjdGl2ZSk7XG4gICAgdGhpcy5jb21wYW55Q29udHJvbC5wYXRjaFZhbHVlKGNvbSk7XG4gIH1cblxuICBzaWRlTWVudVRvZ2dsZSgpIHtcbiAgICB0aGlzLnNpZGVuYXYudG9nZ2xlKCk7XG4gIH1cblxuICBwcml2YXRlIGdyb3VwQnlBcHBUeXBlKG1lbnVMaXN0OiBBcHBNZW51W10pOiB7IGtleTogc3RyaW5nLCB2YWx1ZTogQXBwTWVudVtdIH1bXSB7XG4gICAgbGV0IGdyb3VwZWQgPSBtZW51TGlzdC5yZWR1Y2UoKHIsIGEpID0+IHtcbiAgICAgIHJbYS5hcHBUeXBlXSA9IHJbYS5hcHBUeXBlXSB8fCBbXTtcblxuICAgICAgLy8gVE9ETzogUGF0aCByZWZlcmVuY2VzIGFyZSB0byBiZSByZXBsYWNlZCB3aXRoIHZhbHVlcyBmcm9tIGJhY2tlbmQgQVBJIHJlc3BvbnNlLiBSZW1vdmUgdGhpcyBibG9jayB3aGVuIGJhY2tlbmQgaXMgcmVhZHlcbiAgICAgIGlmIChhLmFwcFR5cGUgPT0gUFJPRkVUX0FQUFMucHJvZmV0X3BvcnRhbCkge1xuICAgICAgICBsZXQgaXNDb21wYW55TWVudSA9IGEucGF0aCA9PT0gJ2FwcC9jb21wYW5pZXMnO1xuICAgICAgICBsZXQgaXNDb21wYW55QWRtaW4gPSB0aGlzLnVzZXJBdXRoRGF0YT8ucm9sZXNGb3JDdXJyZW50Q29tcGFueS5pbmNsdWRlcyhcIkNPTVBBTllfQURNSU5cIik7XG5cbiAgICAgICAgaWYgKGlzQ29tcGFueU1lbnUgJiYgaXNDb21wYW55QWRtaW4pIHtcbiAgICAgICAgICBhID0geyAuLi5hLCBwYXRoOiAnYXBwL2FkZENvbXBhbnkvY29tcGFueURldGFpbHMnIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEVORCBvZiBUT0RPIGJsb2NrXG5cbiAgICAgIHJbYS5hcHBUeXBlXS5wdXNoKGEpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGdyb3VwZWQpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBrZXksIHZhbHVlOiB2YWx1ZSBhcyBBcHBNZW51W10gfSkpO1xuICB9XG5cbiAgbWVudVNlbGVjdGlvbihtZW51OiBBcHBNZW51KSB7XG4gICAgdGhpcy5zaWRlTWVudVRvZ2dsZSgpO1xuICAgIGxldCBhY3RpdmVDb20gPSB0aGlzLmNvbXBhbnlMaXN0LmZpbmQoeCA9PiB4LmlzQWN0aXZlKTtcbiAgICBsZXQgaXNDb21wYW55TWVudSA9IG1lbnUucGF0aCA9PT0gJ2FwcC9hZGRDb21wYW55L2NvbXBhbnlEZXRhaWxzJztcbiAgICBsZXQgaXNDb21wYW55QWRtaW4gPSB0aGlzLnVzZXJBdXRoRGF0YT8ucm9sZXNGb3JDdXJyZW50Q29tcGFueS5pbmNsdWRlcyhcIkNPTVBBTllfQURNSU5cIik7XG5cbiAgICBpZiAobWVudS5hcHBUeXBlID09IHRoaXMuX2hlYWRlclNlci5oZWFkZXJDb25maWcuYXBwVHlwZSkge1xuICAgICAgLy8gVE9ETzogUGF0aCByZWZlcmVuY2VzIGFyZSB0byBiZSByZXBsYWNlZCB3aXRoIHZhbHVlcyBmcm9tIGJhY2tlbmQgQVBJIHJlc3BvbnNlXG4gICAgICBpZiAoaXNDb21wYW55TWVudSAmJiBpc0NvbXBhbnlBZG1pbikge1xuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW21lbnUucGF0aCwgYWN0aXZlQ29tPy5pZF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFttZW51LnBhdGhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAoYWN0aXZlQ29tKSB7XG4gICAgICAgIGlmIChhY3RpdmVDb20uYmFzZVVybHNbbWVudS5hcHBUeXBlXSkge1xuICAgICAgICAgIC8vIFRPRE86IFBhdGggcmVmZXJlbmNlcyBhcmUgdG8gYmUgcmVwbGFjZWQgd2l0aCB2YWx1ZXMgZnJvbSBiYWNrZW5kIEFQSSByZXNwb25zZVxuICAgICAgICAgIGlmIChpc0NvbXBhbnlNZW51ICYmIGlzQ29tcGFueUFkbWluKSB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYCR7YWN0aXZlQ29tLmJhc2VVcmxzW21lbnUuYXBwVHlwZV19LyR7bWVudS5wYXRofS8ke2FjdGl2ZUNvbS5pZH1gO1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UodXJsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAke2FjdGl2ZUNvbS5iYXNlVXJsc1ttZW51LmFwcFR5cGVdfS8ke21lbnUucGF0aH1gO1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UodXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRDb21wYW55TGlzdCgpIHtcbiAgICB0aGlzLl9oZWFkZXJTZXIuZ2V0Q29tcGFueUxpc3QoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHY6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLl9oZWFkZXJTZXIuc2V0Q29tcGFueUxpc3Qodik7XG4gICAgICAgIHRoaXMuY29tcGFueUxpc3QgPSB2O1xuICAgICAgICB0aGlzLnNlbGVjdEN1cnJlbnRDb21wYW55KCk7XG4gICAgICAgIHRoaXMucGF0Y2hDdXJyZW50Q29tcGFueUluZm8oKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIGdldE1lbnVMaXN0KCkge1xuICAgIHRoaXMuX2hlYWRlclNlci5nZXRNZW51TGlzdCgpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAodjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuX2hlYWRlclNlci5zZXRNZW51U3RhdGUodik7XG4gICAgICAgIHRoaXMubWVudUxpc3QgPSB0aGlzLmdyb3VwQnlBcHBUeXBlKHYpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwcm9maWxlKCkge1xuICAgIHRoaXMubWVudVRyaWdnZXIuY2xvc2VNZW51KCk7XG4gICAgaWYgKHRoaXMuX2hlYWRlclNlci5oZWFkZXJDb25maWcuYXBwVHlwZSA9PSBQUk9GRVRfQVBQUy5wcm9mZXRfcG9ydGFsKSB7XG4gICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnL2FwcC9wcm9maWxlJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbGV0IHVybCA9IHRoaXMuYWN0aXZlQ29tcGFueT8uYmFzZVVybHMucHJvZmV0X3BvcnRhbCArICcvYXBwL3Byb2ZpbGUnO1xuICAgICAgZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IHVybDtcbiAgICB9XG4gIH1cbiAgb25Mb2dvdXRDbGljaygpIHtcbiAgICB0aGlzLm1lbnVUcmlnZ2VyLmNsb3NlTWVudSgpO1xuICAgIC8vIFN5bmMgd2l0aCBvdGhlciB0YWJzXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmxhc3RQcm9jZXNzZWRMb2dvdXRUaW1lc3RhbXAgPSBub3c7XG4gICAgdGhpcy5faGVhZGVyU2VyLnNldENvb2tpZSh0aGlzLl9oZWFkZXJTZXIuU0VTU0lPTl9FWFBJUkVEX0tFWSwgbm93LnRvU3RyaW5nKCksIDEpO1xuXG4gICAgLy8gQ2xlYXIgdGltZXJzXG4gICAgaWYgKHRoaXMuaW5hY3Rpdml0eVRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLmluYWN0aXZpdHlUaW1lb3V0KTtcbiAgICBpZiAodGhpcy5sb2dvdXRDaGVja0ludGVydmFsKSBjbGVhckludGVydmFsKHRoaXMubG9nb3V0Q2hlY2tJbnRlcnZhbCk7XG5cbiAgICB0aGlzLmxvZ291dEV2ZW50LmVtaXQoeyByZWFzb246IExvZ291dFJlYXNvbi5VU0VSX0lOSVRJQVRFRCwgc3RhdHVzOiBMb2dvdXRTdGF0dXMuSU5JVElBVEVEIH0pO1xuICAgIGxldCBzZXNzaW9uVXJsID0gdGhpcy5faGVhZGVyU2VyLmhlYWRlckNvbmZpZy5zaWduT3V0VXJsO1xuICAgIC8vIGlmICh0aGlzLl9oZWFkZXJTZXIuaGVhZGVyQ29uZmlnLmVuYWJsZUxhc3RVcmxSZWRpcmVjdGlvbikge1xuICAgIC8vICAgY29uc3Qgc2VwYXJhdG9yID0gc2Vzc2lvblVybC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nO1xuICAgIC8vICAgc2Vzc2lvblVybCA9IHNlc3Npb25VcmwgKyBzZXBhcmF0b3IgKyAncmV0dXJuVXJsPScgKyBlbmNvZGVVUklDb21wb25lbnQod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgIC8vIH1cblxuICAgIHNpZ25PdXQoeyBnbG9iYWw6IHRydWUsIG9hdXRoOiB7IHJlZGlyZWN0VXJsOiBzZXNzaW9uVXJsIH0gfSlcbiAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMubG9nb3V0RXZlbnQuZW1pdCh7IHJlYXNvbjogTG9nb3V0UmVhc29uLlVTRVJfSU5JVElBVEVELCBzdGF0dXM6IExvZ291dFN0YXR1cy5DT01QTEVURUQgfSk7XG4gICAgICAgIHdpbmRvdy5vcGVuKHNlc3Npb25VcmwsICdfc2VsZicpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgIHNpZ25PdXQoeyBnbG9iYWw6IHRydWUsIG9hdXRoOiB7IHJlZGlyZWN0VXJsOiBzZXNzaW9uVXJsIH0gfSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ291dEV2ZW50LmVtaXQoeyByZWFzb246IExvZ291dFJlYXNvbi5VU0VSX0lOSVRJQVRFRCwgc3RhdHVzOiBMb2dvdXRTdGF0dXMuQ09NUExFVEVEIH0pO1xuICAgICAgICAgICAgd2luZG93Lm9wZW4oc2Vzc2lvblVybCwgJ19zZWxmJyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgICAgICB0aGlzLmxvZ291dEV2ZW50LmVtaXQoeyByZWFzb246IExvZ291dFJlYXNvbi5VU0VSX0lOSVRJQVRFRCwgc3RhdHVzOiBMb2dvdXRTdGF0dXMuQ09NUExFVEVEIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICB1cGRhdGVMYXN0QWNjZXNzZWRBcHBJbmZvKCkge1xuICAgIGxldCByZXEgPSB7XG4gICAgICBsYXN0QWNjZXNzZWRBcHBsaWNhdGlvbjogdGhpcy5faGVhZGVyU2VyLmhlYWRlckNvbmZpZy5hcHBUeXBlXG4gICAgfTtcblxuICAgIHRoaXMuX2hlYWRlclNlci51cGRhdGVMYXN0QWNjZXNzZWRBcHBsaWNhdGlvbihyZXEpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHN3aXRjaENvbXBhbnkoaW5mbzogYW55KSB7XG4gICAgbGV0IGNvbXBhbnkgPSBpbmZvLnZhbHVlO1xuICAgIGxldCBjb21JbmZvID0ge1xuICAgICAgYWN0aXZlQ29tcGFueTogdGhpcy5hY3RpdmVDb21wYW55Py5uYW1lLFxuICAgICAgc3dpdGNoaW5nQ29tcGFueTogY29tcGFueS5uYW1lXG4gICAgfTtcbiAgICB0aGlzLl9oZWFkZXJTZXIuX2RpYWxvZy5vcGVuKENvbXBhbnlTd2l0Y2hXYXJuaW5nQ29tcG9uZW50LCB7IGRhdGE6IGNvbUluZm8gfSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgLy8gRmluZCB0aGUgZG9tYWluIGluZm9ybWF0aW9uXG4gICAgICAgIGlmICghY29tcGFueS5pc0FjdGl2ZSkge1xuICAgICAgICAgIC8vIGxldCBkb21haW5JbmZvID0gdGhpcy5faGVhZGVyU2VyLmdldERvbWFpbkluZm8oKTtcbiAgICAgICAgICAvLyBpZiAoZG9tYWluSW5mbykge1xuICAgICAgICAgIGxldCByZXE6IGFueSA9IHtcbiAgICAgICAgICAgIGNvbXBhbnlLZXk6IGNvbXBhbnkuY29tcGFueUtleSxcbiAgICAgICAgICAgIGFwcE5hbWU6IHRoaXMuX2hlYWRlclNlci5oZWFkZXJDb25maWcuYXBwVHlwZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuX2hlYWRlclNlci51cGRhdGVVc2VyQ29tcGFueShyZXEpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudHlwZSAmJiByZXNwb25zZS50eXBlID09ICdPSycpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5hcHBsaWNhdGlvblVSTCkge1xuICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHJlc3BvbnNlLmRhdGEuYXBwbGljYXRpb25VUkw7XG4gICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh1cmwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyByZWZyZXNoIHRoZSBjdXJyZW50IHBhZ2UgdG8gcmVsb2FkIHRoZSBjb250ZW50cyBiYXNlZCBvbiB0aGUgY3VycmVudCBjb21wYW55XG4gICAgICAgICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRpc3BsYXkgYSBtZXNzYWdlIHRvIHRoZSB1c2VyIHRoYXQgdGhlIGNvbXBhbnkgY291bGQgbm90IGJlIHN3aXRjaGVkLlxuICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW4oXG4gICAgICAgICAgICAgICAgICAnQ29tcGFueSBjb3VsZCBub3QgYmUgc3dpdGNoZWQuIFBsZWFzZSB0cnkgYWdhaW4gb3IgY29udGFjdCBzdXBwb3J0LicsXG4gICAgICAgICAgICAgICAgICAnT0snLFxuICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNTAwMCB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnBhdGNoQ3VycmVudENvbXBhbnlJbmZvKCk7XG4gICAgICAgICAgICAgIC8vIGRpc3BsYXkgYSBtZXNzYWdlIHRvIHRoZSB1c2VyIHRoYXQgdGhlIGNvbXBhbnkgY291bGQgbm90IGJlIHN3aXRjaGVkLlxuICAgICAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuKFxuICAgICAgICAgICAgICAgICdDb21wYW55IGNvdWxkIG5vdCBiZSBzd2l0Y2hlZC4gUGxlYXNlIHRyeSBhZ2FpbiBvciBjb250YWN0IHN1cHBvcnQuJyxcbiAgICAgICAgICAgICAgICAnT0snLFxuICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDUwMDAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyB9IFxuICAgICAgICAgIC8vIGVsc2Uge1xuICAgICAgICAgIC8vICAgdGhpcy5wYXRjaEN1cnJlbnRDb21wYW55SW5mbygpO1xuICAgICAgICAgIC8vICAgdGhpcy5fc25hY2tiYXIub3BlbihcbiAgICAgICAgICAvLyAgICAgJ0NvbXBhbnkgY291bGQgbm90IGJlIHN3aXRjaGVkLiBQbGVhc2UgdHJ5IGFnYWluIG9yIGNvbnRhY3Qgc3VwcG9ydC4nLFxuICAgICAgICAgIC8vICAgICAnT0snLFxuICAgICAgICAgIC8vICAgICB7IGR1cmF0aW9uOiA1MDAwIH1cbiAgICAgICAgICAvLyAgICk7XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXRjaEN1cnJlbnRDb21wYW55SW5mbygpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5hY3Rpdml0eVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmluYWN0aXZpdHlUaW1lb3V0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMubG9nb3V0Q2hlY2tJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmxvZ291dENoZWNrSW50ZXJ2YWwpO1xuICAgIH1cbiAgfVxufVxuIiwiPG1hdC1zaWRlbmF2LWNvbnRhaW5lciBjbGFzcz1cImFwcC1tZW51LXNpZGVuYXYtY29udGFpbmVyXCI+XG4gICAgPG1hdC1zaWRlbmF2IGNka01lbnVCYXIgI3NpZGVuYXYgbW9kZT1cIm92ZXJcIiBjbGFzcz1cInNpZGVuYXZEcmF3ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRyYXdlckhlYWRMb2dvXCI+PGltZyBbc3JjXT1cIl9kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChpbWFnZURhdGFVcmxzLnByb2ZldExvZ28pXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtbWVudS1jb250ZW50LXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFwcFR5cGUgb2YgbWVudUxpc3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwTGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiYXBwQ29uZmlnW2FwcFR5cGUua2V5XT8uYXBwTG9nb1VyaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cIl9kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChhcHBDb25maWdbYXBwVHlwZS5rZXldPy5hcHBMb2dvVXJpKVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJIZWFkTGlzdEl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYXBwVHlwZS52YWx1ZVwiIGNsYXNzPVwibWVudS1pdGVtXCIgKGNsaWNrKT1cIm1lbnVTZWxlY3Rpb24oaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUtbWVudSc6IGl0ZW0gfCBhY3RpdmVSb3V0ZSA6IF9yb3V0ZXIudXJsOl9oZWFkZXJTZXIuaGVhZGVyQ29uZmlnLmFwcFR5cGV9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtZW51SWNvbkxpc3RcIiAqbmdJZj1cIml0ZW0uaWNvblwiPnt7IGl0ZW0uaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtLm1lbnVOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L21hdC1zaWRlbmF2PlxuXG48L21hdC1zaWRlbmF2LWNvbnRhaW5lcj5cbjxtYXQtdG9vbGJhciBjZGtNZW51QmFyIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiaGVhZGVyLXdyYXBwZXIgY29tbW9uX2hlYWRlciBzaGFkb3ctc21cIj5cbiAgICA8IS0tIE1haW4gbmF2IGJ1dHRvbiBhbmQgbmF2aWdhdGlvbiBsaW5rcyAtLT5cbiAgICA8YnV0dG9uICpuZ0lmPVwibWVudUxpc3QgJiYgbWVudUxpc3QubGVuZ3RoID4gMFwiIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInRoZW1lLXdoaXRlXCIgKGNsaWNrKT1cInNpZGVuYXYudG9nZ2xlKClcIlxuICAgICAgICBjbGFzcz1cInBteC1idXR0b24gcG14LW1lbnUtYnV0dG9uIG9yZGVycy1tZW51IGljb24tYnRuIG1zLTAgbWUtM1wiIGFyaWEtbGFiZWw9XCJtYWluIG1lbnVcIiB0YWJpbmRleD1cIjBcIlxuICAgICAgICBtYXRUb29sdGlwPVwiTWFpbiBtZW51XCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJwb2MtaGVhZGVyLXRvb2x0aXBcIj48bWF0LWljb24+bWVudTwvbWF0LWljb24+PC9idXR0b24+XG4gICAgPGEgKm5nSWY9XCJfaGVhZGVyU2VyLmhlYWRlckNvbmZpZy5hcHBMb2dvTmF2aWdhdGlvblVybDsgZWxzZSBub0xpbmtcIiBjbGFzcz1cIm5hdmJhci1icmFuZCBtZS1hdXRvXCJcbiAgICAgICAgW2hyZWZdPVwiX2hlYWRlclNlci5oZWFkZXJDb25maWcuYXBwTG9nb05hdmlnYXRpb25VcmxcIj5cbiAgICAgICAgPGltZyBbc3JjXT1cIl9kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChhcHBDb25maWdbX2hlYWRlclNlci5oZWFkZXJDb25maWcuYXBwVHlwZV0/LmFwcExvZ29VcmkpXCJcbiAgICAgICAgICAgIGFsdD1cIkFwcCBMb2dvXCIgY2xhc3M9XCJhcHAtbG9nb1wiPlxuICAgIDwvYT5cbiAgICA8bmctdGVtcGxhdGUgI25vTGluaz5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXZiYXItYnJhbmQgbWUtYXV0b1wiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cIl9kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChhcHBDb25maWdbX2hlYWRlclNlci5oZWFkZXJDb25maWcuYXBwVHlwZV0/LmFwcExvZ29VcmkpXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJBcHAgTG9nb1wiIGNsYXNzPVwiYXBwLWxvZ29cIj5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbiAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInN3aXRjaENvbXBhbnlGaWVsZFwiPlxuICAgICAgICA8bWF0LWxhYmVsPkNvbXBhbnk8L21hdC1sYWJlbD5cbiAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cImNvbXBhbnlDb250cm9sXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJzd2l0Y2hDb21wYW55KCRldmVudClcIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHQgb2YgY29tcGFueUxpc3RcIiBbdmFsdWVdPVwib3B0XCI+XG4gICAgICAgICAgICAgICAge3tvcHQubmFtZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG5cbiAgICA8IS0tIFByb2ZpbGUgYnV0dG9uIGFuZCBwcm9maWxlIGRyb3Bkb3duIGxpbmtzIC0tPlxuICAgIDxidXR0b24gY2xhc3M9XCJwbXgtYnV0dG9uIHBteC1tZW51LWJ1dHRvbiBwcm9maWxlLWJ1dHRvblwiIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJiZWxvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZmlsZS1pbm5lclwiPlxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnJhbmQtbG9nbyBhbGlnbi1zZWxmLWNlbnRlclwiICpuZ0lmPVwiYWN0aXZlQ29tcGFueT8ubG9nb1wiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiYWN0aXZlQ29tcGFueT8ubG9nbyA/ICdicmFuZGVkLWxvZ28tdHJ1ZScgOiAnYnJhbmRlZC1sb2dvLWZhbHNlJ1wiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kLWltYWdlJzogJ3VybCgnICsgYWN0aXZlQ29tcGFueT8ubG9nbyArICcpJ31cIj48L2Rpdj4gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyXCI+XG4gICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInVzZXJJbWFnZUxpbms7ZWxzZSBkZWZhdWx0QXZhdGFyXCIgW3NyY109XCJ1c2VySW1hZ2VMaW5rXCIgY2xhc3M9XCJhdmF0YXItaW1hZ2VcIiBhbHQ9XCJBdmF0YXJcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRBdmF0YXI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJfZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoaW1hZ2VEYXRhVXJscy5kZWZhdWx0VXNlckltYWdlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF2YXRhci1kZWZhdWx0XCIgYWx0PVwicHJvZmlsZSBwaWNcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvYnV0dG9uPlxuICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cImFjY291bnRzX2RycG1lbnUgcG14LW1lbnUtZ3JvdXAgaGVhZGVyLWRyb3Bkb3duLXByb2ZpbGVcIiB4UG9zaXRpb249XCJiZWZvcmVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvcG92ZXItY29udGVudCBzaG93LW1lbnVcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wb3Zlci1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wb3Zlci11c2VyLXRvcFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJ1c2VySW1hZ2VMaW5rO2Vsc2UgZGVmYXVsdExhcmdlQXZhdGFyXCIgW3NyY109XCJ1c2VySW1hZ2VMaW5rXCIgY2xhc3M9XCJhdmF0YXItaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiQXZhdGFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRMYXJnZUF2YXRhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1pbWFnZSc6ICd1cmwoJyArIGltYWdlRGF0YVVybHMuZGVmYXVsdFVzZXJJbWFnZSArICcpJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF2YXRhci1pY29uIGRlZmF1bHQtYXZhdGFyXCIgYWx0PVwiQXZhdGFyIGljb25cIj4mbmJzcDs8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1kYXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJwcm9maWxlLW5hbWVcIj48c3BhbiAqbmdJZj1cInVzZXJBdXRoRGF0YVwiPnt7IHVzZXJBdXRoRGF0YT8uZmlyc3ROYW1lIH19IHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJBdXRoRGF0YT8ubGFzdE5hbWUgfX08L3NwYW4+PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhX2hlYWRlclNlci5oZWFkZXJDb25maWcuaGlkZVZpZXdQcm9maWxlXCIgbWF0LWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIGNsYXNzPVwicG14LWJ1dHRvbiBidG4gYnRuLXNtYWxsIHZpZXctcHJvZmlsZSBtcy0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJvZmlsZSgpXCI+VmlldyBQcm9maWxlPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wb3Zlci1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicG9wb3Zlci1jb250ZW50LXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPk92ZXJ2aWV3PC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VyQXV0aERhdGE/LmVtYWlsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibGlzdC10ZXh0IGxpc3QtdGV4dC1lbWFpbCBtdC0yIG1iLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImxpc3QtaWNvblwiPm1haWw8L21hdC1pY29uPjxzcGFuIGNsYXNzPVwicG14LWxvd2VyLWNhc2UgcG14LXRleHQtd3JhcCBtZS1hdXRvXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyQXV0aERhdGE/LmVtYWlsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJBdXRoRGF0YT8uY29udGFjdFBob25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibGlzdC10ZXh0IG1iLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImxpc3QtaWNvblwiPmNhbGw8L21hdC1pY29uPjxzcGFuIGNsYXNzPVwidGl0bGUtY2FzZSBtZS1hdXRvXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyQXV0aERhdGE/LmNvbnRhY3RQaG9uZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPGhyIC8+XG4gICAgICAgICAgICAgICAgPHVsIGNka01lbnUgY2xhc3M9XCJsaXN0LWdyb3VwIGxhc3QtZ3JvdXAgbXktMVwiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2RrTWVudUl0ZW0gY2xhc3M9XCJsaXN0LWl0ZW0gcHktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwicG14LWJ1dHRvbiBsaXN0LWJ1dHRvbiBidG4tbG9nb3V0XCIgKGNsaWNrKT1cIm9uTG9nb3V0Q2xpY2soKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5wb3dlcl9zZXR0aW5nc19uZXc8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlzdC10ZXh0XCI+TG9nb3V0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L21hdC1tZW51PlxuPC9tYXQtdG9vbGJhcj4iXX0=