tin-spa 2.7.0 → 2.8.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 (51) hide show
  1. package/esm2020/lib/classes/Classes.mjs +7 -1
  2. package/esm2020/lib/classes/TinCore.mjs +16 -2
  3. package/esm2020/lib/components/form/form.component.mjs +1 -1
  4. package/esm2020/lib/components/nav-menu/nav-menu.component.mjs +7 -10
  5. package/esm2020/lib/components/option/option.component.mjs +1 -1
  6. package/esm2020/lib/components/select/select.component.mjs +5 -3
  7. package/esm2020/lib/components/select-internal/select-internal.component.mjs +4 -2
  8. package/esm2020/lib/components/steps/steps.component.mjs +46 -13
  9. package/esm2020/lib/components/table/detailsDialog.component.mjs +4 -4
  10. package/esm2020/lib/components/table/table.component.mjs +28 -20
  11. package/esm2020/lib/components/table-action/table-action.component.mjs +26 -6
  12. package/esm2020/lib/components/table-internal/detailsDialog-internal.component.mjs +4 -4
  13. package/esm2020/lib/components/table-internal/table-internal.component.mjs +29 -20
  14. package/esm2020/lib/components/table-lite/detailsDialog-lite.component.mjs +4 -4
  15. package/esm2020/lib/components/table-lite/table-lite.component.mjs +29 -20
  16. package/esm2020/lib/components/text/text.component.mjs +7 -4
  17. package/esm2020/lib/pages/accounts/accountDialog.component.mjs +1 -1
  18. package/esm2020/lib/pages/approvals/approvals.component.mjs +10 -100
  19. package/esm2020/lib/pages/approvals-config/approvals-config.component.mjs +14 -9
  20. package/esm2020/lib/pages/change-password/change-password.component.mjs +1 -1
  21. package/esm2020/lib/pages/create-account/create-account.component.mjs +1 -1
  22. package/esm2020/lib/pages/inventory/quantityDialog.component.mjs +1 -1
  23. package/esm2020/lib/pages/login/login.component.mjs +6 -4
  24. package/esm2020/lib/pages/profile/profile.component.mjs +1 -1
  25. package/esm2020/lib/pages/recover-account/recover-account.component.mjs +1 -1
  26. package/esm2020/lib/pages/signup/signup.component.mjs +1 -1
  27. package/esm2020/lib/pages/transactions/transactDialog.component.mjs +1 -1
  28. package/esm2020/lib/pages/welcome/welcome.component.mjs +1 -1
  29. package/esm2020/lib/services/button.service.mjs +3 -16
  30. package/esm2020/lib/services/datalib.service.mjs +180 -4
  31. package/esm2020/lib/services/dialog.service.mjs +12 -8
  32. package/esm2020/lib/services/notifications.service.mjs +2 -2
  33. package/esm2020/lib/services/table-config.service.mjs +24 -6
  34. package/fesm2015/tin-spa.mjs +426 -258
  35. package/fesm2015/tin-spa.mjs.map +1 -1
  36. package/fesm2020/tin-spa.mjs +445 -246
  37. package/fesm2020/tin-spa.mjs.map +1 -1
  38. package/lib/classes/Classes.d.ts +11 -1
  39. package/lib/components/steps/steps.component.d.ts +5 -1
  40. package/lib/components/table/table.component.d.ts +0 -1
  41. package/lib/components/table-action/table-action.component.d.ts +4 -1
  42. package/lib/components/table-internal/table-internal.component.d.ts +0 -1
  43. package/lib/components/table-lite/table-lite.component.d.ts +0 -1
  44. package/lib/components/text/text.component.d.ts +2 -1
  45. package/lib/pages/approvals/approvals.component.d.ts +3 -7
  46. package/lib/pages/approvals-config/approvals-config.component.d.ts +4 -0
  47. package/lib/services/button.service.d.ts +0 -2
  48. package/lib/services/datalib.service.d.ts +13 -0
  49. package/lib/services/dialog.service.d.ts +2 -2
  50. package/lib/services/table-config.service.d.ts +4 -0
  51. package/package.json +1 -1
@@ -33,7 +33,7 @@ export class NavMenuComponent {
33
33
  this.isExpanded = false;
34
34
  this.nowDate = new Date();
35
35
  this.appConfig = new AppConfig();
36
- this.footer = 'alsquaretech.net | Privacy Policy';
36
+ this.footer = 'alsquaretech.net';
37
37
  // detect screen size changes
38
38
  this.breakpointObserver.observe(["(max-width: 600px)"]).subscribe((result) => {
39
39
  if (result.matches) {
@@ -49,6 +49,9 @@ export class NavMenuComponent {
49
49
  this.authService.myRoleObserv.subscribe(rol => this.myRole = rol);
50
50
  this.authService.loggedinObserv.subscribe(obj => this.loggedin = obj);
51
51
  this.authService.tenantNameObserv.subscribe(obj => this.tenantName = obj);
52
+ if (!this.smallScreen) {
53
+ this.isExpanded = true;
54
+ }
52
55
  }
53
56
  collapse() {
54
57
  this.isExpanded = false;
@@ -60,12 +63,6 @@ export class NavMenuComponent {
60
63
  this.isExpanded = false;
61
64
  }
62
65
  logoff() {
63
- // this.socialService.signOut();
64
- // this.authService.Updateloggedin(false);
65
- // this.authService.UpdateAutoLogin(false);
66
- // this.authService.UpdateRole(new Role());
67
- // this.storageService.clear();
68
- // this.router.navigate(["login"]);
69
66
  this.authService.logoff();
70
67
  }
71
68
  redirectTo(link) {
@@ -76,13 +73,13 @@ export class NavMenuComponent {
76
73
  }
77
74
  }
78
75
  NavMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavMenuComponent, deps: [{ token: i1.Router }, { token: i2.AuthService }, { token: i3.StorageService }, { token: i4.NotificationsService }, { token: i5.SocialAuthService }, { token: i6.BreakpointObserver }, { token: i7.DataServiceLib }], target: i0.ɵɵFactoryTarget.Component });
79
- NavMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NavMenuComponent, selector: "spa-nav-menu", inputs: { appConfig: "appConfig", footer: "footer" }, ngImport: i0, template: "<header *ngIf=\"loggedin && dataService.appConfig.navigation == 'top'\">\r\n\r\n <nav class=\"toolbar navbar navbar-expand-sm navbar-toggleable-sm navbar-light border-bottom box-shadow mb-3 \" style=\"padding-right: 10px;\">\r\n\r\n\r\n <div class=\"container-fluid\" style=\"padding-right: 0px;\">\r\n\r\n <img *ngIf=\"appConfig.logo!=''\" [src]=\"appConfig.logo\" style=\"height: 50px; margin-right: 2em\" />\r\n\r\n <div>\r\n <!-- <div style=\"font-size: 20px;\">\r\n {{appConfig.appName}}\r\n </div>\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant && tenantName\" style=\"font-size: 12px;\">\r\n {{tenantName}}\r\n </div> -->\r\n\r\n <div *ngIf=\"!dataService.appConfig.multitenant\" style=\"font-size: 22px;\">\r\n {{appConfig.appName}}\r\n </div>\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant\" style=\"font-size: 20px; ; font-weight: 400;\" [ngStyle]=\"{'margin-top': dataService.appConfig.multitenant ? '12px' : ''}\">\r\n {{appConfig.appName}}\r\n </div>\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant && tenantName\" style=\"font-size: 12px; margin-bottom: 5px;\">\r\n {{tenantName}}\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n <button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\".navbar-collapse\" aria-label=\"Toggle navigation\" [attr.aria-expanded]=\"isExpanded\" (click)=\"toggle()\">\r\n <span class=\"navbar-toggler-icon\"></span>\r\n </button>\r\n\r\n <div *ngIf=\"myRole\" class=\" navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse stack-top\" style=\"margin-right: 0px;\" [ngClass]=\"{ show: isExpanded, navitems: isExpanded }\" >\r\n\r\n <button mat-icon-button (click)=\"logoff()\" > <mat-icon>logout</mat-icon> </button>\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant\">\r\n\r\n <button mat-icon-button (click)=\"redirectTo('home/admin/tenant-settings')\" > <mat-icon fontSet=\"material-icons-round\">apartment</mat-icon> </button>\r\n\r\n <button mat-icon-button (click)=\"redirectTo('home/admin/bug')\"> <mat-icon >support_agent</mat-icon> </button>\r\n\r\n <!-- <button mat-icon-button (click)=\"redirectTo('home/admin/notifications')\"> <mat-icon fontSet=\"material-icons-round\">apartment</mat-icon> </button> -->\r\n </div>\r\n\r\n\r\n <button id=\"btnUser\" mat-button [matMenuTriggerFor]=\"profileMenu\" ><mat-icon style=\"font-size: 24px;\">account_circle</mat-icon> &nbsp;{{loggedUserFullName}}</button>\r\n\r\n <mat-menu #profileMenu=\"matMenu\">\r\n <button id=\"btnProfile\" mat-menu-item (click)=\"redirectTo('home/user/profile')\" >Profile</button>\r\n <button id=\"btnLogOff\" mat-menu-item (click)=\"logoff()\">Log Off</button>\r\n </mat-menu>\r\n\r\n <div *ngFor=\"let item of appConfig.capItems\">\r\n\r\n <!-- Menu Item -->\r\n <button id=\"btnMenu\" *ngIf=\"myRole[item.name] && !item.capSubItems && item.showMenu\" mat-button (click)=\"redirectTo(item.link)\">{{item.display}}</button>\r\n\r\n <!-- Menu Item with Sub items ignored -->\r\n <button id=\"btnMenu\" *ngIf=\"myRole[item.name] && item.capSubItems && item.showMenu && item.ignoreSubsDisplay\" mat-button (click)=\"redirectTo(item.link)\">{{item.display}}</button>\r\n\r\n <!-- Menu Item with Sub items to display-->\r\n <button id=\"btnMenu\" *ngIf=\"myRole[item.name] && item.capSubItems && item.showMenu && !item.ignoreSubsDisplay\" mat-button [matMenuTriggerFor]=\"adminMenu\">{{item.display}}</button>\r\n\r\n\r\n <!-- Sub Menu Items -->\r\n <mat-menu #adminMenu=\"matMenu\">\r\n\r\n <div *ngFor=\"let subItem of item.capSubItems\">\r\n\r\n <button *ngIf=\"myRole[subItem.name] && subItem.showMenu\" mat-menu-item (click)=\"redirectTo(subItem.link)\">{{subItem.display}}</button>\r\n\r\n </div>\r\n\r\n </mat-menu>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </nav>\r\n\r\n</header>\r\n\r\n<div class=\"container-fluid tin-bg-image\" *ngIf=\"dataService.appConfig.navigation == 'top'\">\r\n <router-outlet></router-outlet>\r\n <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!-- SIDE -->\r\n<mat-toolbar class=\"tin-bg-image-toolbar\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\" style=\"padding: 0px 8px;\">\r\n\r\n <button mat-icon-button (click)=\"toggle()\" matTooltip=\"Menu\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n\r\n <img [src]=\"dataService.appConfig.logo\" style=\"height: 50px;\" />\r\n\r\n <div style=\"padding-left: 10px; \">\r\n\r\n <div style=\"font-size: 22px; font-weight: 400;\">\r\n {{appConfig.appName}}\r\n </div>\r\n\r\n <!-- <div style=\"font-size: 20px; height: 25px; font-weight: 400;\" [ngStyle]=\"{'margin-top': dataService.appConfig.multitenant ? '12px' : ''}\">\r\n {{appConfig.appName}}\r\n </div> -->\r\n\r\n <!-- <div *ngIf=\"dataService.appConfig.multitenant && tenantName\" style=\"font-size: 12px; margin-bottom: 5px;\">\r\n {{tenantName}}\r\n </div> -->\r\n\r\n </div>\r\n\r\n\r\n\r\n <span class=\"toolbar-item-spacer\"></span>\r\n\r\n <!-- buttons -->\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant\">\r\n\r\n <!-- <label style=\"font-size: 14px;\">Hi, {{loggedUserFullName}}</label> -->\r\n\r\n <button mat-icon-button (click)=\"redirectTo('home/admin/tenant-settings')\" matTooltip=\"Organisation Settings\">\r\n <mat-icon fontSet=\"material-icons-round\">apartment</mat-icon>\r\n </button>\r\n <label style=\"font-size: 14px;margin-right: 20px;\">{{tenantName}}</label>\r\n\r\n <button *ngIf=\"!smallScreen\" mat-icon-button (click)=\"redirectTo('home/admin/bug')\" matTooltip=\"Support\">\r\n <mat-icon >help</mat-icon>\r\n </button>\r\n\r\n <button *ngIf=\"!smallScreen\" mat-icon-button (click)=\"redirectTo('home/admin/notifications')\" matTooltip=\"Notifications\">\r\n <mat-icon [matBadge]=\"notificationCount$ | async\" [matBadgeHidden]=\"(notificationCount$ | async) === 0\" matBadgeColor=\"warn\" matBadgeSize=\"small\">notifications</mat-icon>\r\n </button>\r\n\r\n </div>\r\n\r\n\r\n\r\n <button mat-icon-button matTooltip=\"My Account\" [matMenuTriggerFor]=\"userAccountMenu\"><mat-icon>account_circle</mat-icon></button>\r\n <label style=\"font-size: 14px;\">{{loggedUserFullName}}</label>\r\n\r\n <button *ngIf=\"!smallScreen\" mat-icon-button (click)=\"logoff()\" matTooltip=\"Signout\">\r\n <mat-icon>logout</mat-icon>\r\n </button>\r\n\r\n\r\n <!-- my account menu -->\r\n <mat-menu #userAccountMenu [overlapTrigger]=\"false\" yPosition=\"below\">\r\n\r\n\r\n <button mat-menu-item routerLink=\"home/user/profile\">\r\n <mat-icon>person</mat-icon><span>Profile</span>\r\n </button>\r\n\r\n <button mat-menu-item routerLink=\"home/admin/bug\" *ngIf=\"dataService.appConfig.multitenant && smallScreen\">\r\n <mat-icon>help</mat-icon> <span>Help</span>\r\n </button>\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <button mat-menu-item (click)=\"logoff()\">\r\n <mat-icon>logout</mat-icon>Logout\r\n </button>\r\n\r\n </mat-menu>\r\n\r\n</mat-toolbar>\r\n\r\n\r\n\r\n\r\n<mat-sidenav-container class=\"app-container\" [hasBackdrop]=\"smallScreen\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\">\r\n\r\n <mat-sidenav #sidenav [mode]=\"smallScreen ? 'over' : 'over'\" [class.mat-elevation-z4]=\"true\" [opened]=\"isExpanded\" class=\"app-sidenav side-color\" style=\"height: 100%;\">\r\n <mat-nav-list >\r\n\r\n <ng-container *ngFor=\"let cap of dataService.appConfig.capItems\" >\r\n\r\n <!-- Menu item -->\r\n <mat-list-item [routerLink]=\"cap.link\" *ngIf=\"myRole[cap.name] && cap.showMenu && (!cap.capSubItems || cap.capSubItems && cap.ignoreSubsDisplay)\" style=\"height: 40px;font-size: 15px;\" (click)=\"toggle()\">\r\n <mat-icon style=\"margin-right: 5px;\">{{cap.icon}}</mat-icon>{{cap.display}}\r\n </mat-list-item>\r\n\r\n <!-- Menu With Sub items -->\r\n <mat-expansion-panel class=\"side-color\" [class.mat-elevation-z0]=\"true\" *ngIf=\"myRole[cap.name] && cap.showMenu && cap.capSubItems && !cap.ignoreSubsDisplay\">\r\n\r\n <mat-expansion-panel-header style=\"height: 40px;padding-left: 15px;\">\r\n <mat-icon style=\"margin-right: 5px;\">{{cap.icon != 'navigate_next' ? cap.icon : 'fiber_manual_record' }}</mat-icon>{{cap.display}}\r\n </mat-expansion-panel-header>\r\n\r\n <!-- Sub items -->\r\n <mat-nav-list *ngFor=\"let capSub of cap.capSubItems\">\r\n\r\n <mat-list-item [routerLink]=\"capSub.link\" style=\"height: 30px; font-size: 15px;\" (click)=\"toggle()\" *ngIf=\"myRole[cap.name] && cap.showMenu\">\r\n <mat-icon style=\"margin-right: 5px;\">{{capSub.icon}}</mat-icon>{{capSub.display}}\r\n </mat-list-item>\r\n\r\n </mat-nav-list>\r\n\r\n </mat-expansion-panel>\r\n\r\n </ng-container>\r\n\r\n </mat-nav-list>\r\n </mat-sidenav>\r\n\r\n\r\n\r\n <mat-sidenav-content class=\"container-fluid tin-bg-image\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\">\r\n <hr style=\"margin-top: 0px;\">\r\n <router-outlet></router-outlet>\r\n <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n </mat-sidenav-content>\r\n\r\n</mat-sidenav-container>\r\n\r\n\r\n<!-- footer -->\r\n<div class=\"tin-center\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\">\r\n <label style=\"text-align: center; font-size: 12px;\">&copy; {{nowDate | date : 'yyyy'}} {{footer}}</label>\r\n</div>\r\n\r\n\r\n<div class=\"container-fluid tin-bg-image\" *ngIf=\"!loggedin && dataService.appConfig.navigation == 'side'\">\r\n <router-outlet></router-outlet>\r\n <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n</div>\r\n", styles: ["a.navbar-brand{white-space:normal;text-align:center;word-break:break-all}html{font-size:14px}.box-shadow{box-shadow:0 .25rem .75rem #0000000d}.toolbar{height:60px;display:flex;align-items:center;background-color:#03a;color:#fff}.stack-top{z-index:9;margin:20px}.navitems{background-color:#03a}.toolbar-item-spacer{flex:1 1 auto}.app-container{height:90%;margin:0}.app-sidenav{width:200px}.side-color{background-color:#def0fc}\n"], dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i9.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i10.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i11.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.MatNavList, selector: "mat-nav-list", inputs: ["disableRipple", "disabled"], exportAs: ["matNavList"] }, { kind: "component", type: i13.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { kind: "component", type: i14.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i15.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i16.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i16.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i16.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "component", type: i17.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i1.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i18.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i18.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "component", type: i19.LoaderComponent, selector: "spa-loader", inputs: ["logo"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.DatePipe, name: "date" }] });
76
+ NavMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NavMenuComponent, selector: "spa-nav-menu", inputs: { appConfig: "appConfig", footer: "footer" }, ngImport: i0, template: "<header *ngIf=\"loggedin && dataService.appConfig.navigation == 'top'\">\r\n\r\n <nav class=\"toolbar navbar navbar-expand-sm navbar-toggleable-sm navbar-light border-bottom box-shadow mb-3 \" style=\"padding-right: 10px;\">\r\n\r\n\r\n <div class=\"container-fluid\" style=\"padding-right: 0px;\">\r\n\r\n <img *ngIf=\"appConfig.logo!=''\" [src]=\"appConfig.logo\" style=\"height: 50px; margin-right: 2em\" />\r\n\r\n <div>\r\n <!-- <div style=\"font-size: 20px;\">\r\n {{appConfig.appName}}\r\n </div>\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant && tenantName\" style=\"font-size: 12px;\">\r\n {{tenantName}}\r\n </div> -->\r\n\r\n <div *ngIf=\"!dataService.appConfig.multitenant\" style=\"font-size: 22px;\">\r\n {{appConfig.appName}}\r\n </div>\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant\" style=\"font-size: 20px; ; font-weight: 400;\" [ngStyle]=\"{'margin-top': dataService.appConfig.multitenant ? '12px' : ''}\">\r\n {{appConfig.appName}}\r\n </div>\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant && tenantName\" style=\"font-size: 12px; margin-bottom: 5px;\">\r\n {{tenantName}}\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n <button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\".navbar-collapse\" aria-label=\"Toggle navigation\" [attr.aria-expanded]=\"isExpanded\" (click)=\"toggle()\">\r\n <span class=\"navbar-toggler-icon\"></span>\r\n </button>\r\n\r\n <div *ngIf=\"myRole\" class=\" navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse stack-top\" style=\"margin-right: 0px;\" [ngClass]=\"{ show: isExpanded, navitems: isExpanded }\" >\r\n\r\n <button mat-icon-button (click)=\"logoff()\" > <mat-icon>logout</mat-icon> </button>\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant\">\r\n\r\n <button mat-icon-button (click)=\"redirectTo('home/admin/tenant-settings')\" > <mat-icon fontSet=\"material-icons-round\">apartment</mat-icon> </button>\r\n\r\n <button mat-icon-button (click)=\"redirectTo('home/admin/bug')\"> <mat-icon >support_agent</mat-icon> </button>\r\n\r\n <!-- <button mat-icon-button (click)=\"redirectTo('home/admin/notifications')\"> <mat-icon fontSet=\"material-icons-round\">apartment</mat-icon> </button> -->\r\n </div>\r\n\r\n\r\n <button id=\"btnUser\" mat-button [matMenuTriggerFor]=\"profileMenu\" ><mat-icon style=\"font-size: 24px;\">account_circle</mat-icon> &nbsp;{{loggedUserFullName}}</button>\r\n\r\n <mat-menu #profileMenu=\"matMenu\">\r\n <button id=\"btnProfile\" mat-menu-item (click)=\"redirectTo('home/user/profile')\" >Profile</button>\r\n <button id=\"btnLogOff\" mat-menu-item (click)=\"logoff()\">Log Off</button>\r\n </mat-menu>\r\n\r\n <div *ngFor=\"let item of appConfig.capItems\">\r\n\r\n <!-- Menu Item -->\r\n <button id=\"btnMenu\" *ngIf=\"myRole[item.name] && !item.capSubItems && item.showMenu\" mat-button (click)=\"redirectTo(item.link)\">{{item.display}}</button>\r\n\r\n <!-- Menu Item with Sub items ignored -->\r\n <button id=\"btnMenu\" *ngIf=\"myRole[item.name] && item.capSubItems && item.showMenu && item.ignoreSubsDisplay\" mat-button (click)=\"redirectTo(item.link)\">{{item.display}}</button>\r\n\r\n <!-- Menu Item with Sub items to display-->\r\n <button id=\"btnMenu\" *ngIf=\"myRole[item.name] && item.capSubItems && item.showMenu && !item.ignoreSubsDisplay\" mat-button [matMenuTriggerFor]=\"adminMenu\">{{item.display}}</button>\r\n\r\n\r\n <!-- Sub Menu Items -->\r\n <mat-menu #adminMenu=\"matMenu\">\r\n\r\n <div *ngFor=\"let subItem of item.capSubItems\">\r\n\r\n <button *ngIf=\"myRole[subItem.name] && subItem.showMenu\" mat-menu-item (click)=\"redirectTo(subItem.link)\">{{subItem.display}}</button>\r\n\r\n </div>\r\n\r\n </mat-menu>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </nav>\r\n\r\n</header>\r\n\r\n<div class=\"container-fluid tin-bg-image\" *ngIf=\"dataService.appConfig.navigation == 'top'\">\r\n <router-outlet></router-outlet>\r\n <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!-- SIDE -->\r\n<mat-toolbar class=\"tin-bg-image-toolbar\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\" style=\"padding: 0px 8px;\">\r\n\r\n <button mat-icon-button (click)=\"toggle()\" matTooltip=\"Menu\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n\r\n <img [src]=\"dataService.appConfig.logo\" style=\"height: 50px;\" />\r\n\r\n <div style=\"padding-left: 10px; \">\r\n\r\n <div style=\"font-size: 22px; font-weight: 400;\">\r\n {{appConfig.appName}}\r\n </div>\r\n\r\n <!-- <div style=\"font-size: 20px; height: 25px; font-weight: 400;\" [ngStyle]=\"{'margin-top': dataService.appConfig.multitenant ? '12px' : ''}\">\r\n {{appConfig.appName}}\r\n </div> -->\r\n\r\n <!-- <div *ngIf=\"dataService.appConfig.multitenant && tenantName\" style=\"font-size: 12px; margin-bottom: 5px;\">\r\n {{tenantName}}\r\n </div> -->\r\n\r\n </div>\r\n\r\n\r\n\r\n <span class=\"toolbar-item-spacer\"></span>\r\n\r\n <!-- buttons -->\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant\">\r\n\r\n <!-- <label style=\"font-size: 14px;\">Hi, {{loggedUserFullName}}</label> -->\r\n\r\n <button mat-icon-button (click)=\"redirectTo('home/admin/tenant-settings')\" matTooltip=\"Organisation Settings\">\r\n <mat-icon fontSet=\"material-icons-round\">apartment</mat-icon>\r\n </button>\r\n <label style=\"font-size: 14px;margin-right: 20px;\">{{tenantName}}</label>\r\n\r\n <button *ngIf=\"!smallScreen\" mat-icon-button (click)=\"redirectTo('home/admin/bug')\" matTooltip=\"Support\">\r\n <mat-icon >help</mat-icon>\r\n </button>\r\n\r\n <button *ngIf=\"!smallScreen\" mat-icon-button (click)=\"redirectTo('home/admin/notifications')\" matTooltip=\"Notifications\">\r\n <mat-icon [matBadge]=\"notificationCount$ | async\" [matBadgeHidden]=\"(notificationCount$ | async) === 0\" matBadgeColor=\"warn\" matBadgeSize=\"small\">notifications</mat-icon>\r\n </button>\r\n\r\n </div>\r\n\r\n\r\n\r\n <button mat-icon-button matTooltip=\"My Account\" [matMenuTriggerFor]=\"userAccountMenu\"><mat-icon>account_circle</mat-icon></button>\r\n <label style=\"font-size: 14px;\">{{loggedUserFullName}}</label>\r\n\r\n <button *ngIf=\"!smallScreen\" mat-icon-button (click)=\"logoff()\" matTooltip=\"Signout\">\r\n <mat-icon>logout</mat-icon>\r\n </button>\r\n\r\n\r\n <!-- my account menu -->\r\n <mat-menu #userAccountMenu [overlapTrigger]=\"false\" yPosition=\"below\">\r\n\r\n\r\n <button mat-menu-item routerLink=\"home/user/profile\">\r\n <mat-icon>person</mat-icon><span>Profile</span>\r\n </button>\r\n\r\n <button mat-menu-item routerLink=\"home/admin/bug\" *ngIf=\"dataService.appConfig.multitenant && smallScreen\">\r\n <mat-icon>help</mat-icon> <span>Help</span>\r\n </button>\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <button mat-menu-item (click)=\"logoff()\">\r\n <mat-icon>logout</mat-icon>Logout\r\n </button>\r\n\r\n </mat-menu>\r\n\r\n</mat-toolbar>\r\n\r\n\r\n\r\n\r\n<mat-sidenav-container class=\"app-container\" [hasBackdrop]=\"smallScreen\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\">\r\n\r\n <mat-sidenav #sidenav [mode]=\"smallScreen ? 'over' : 'side'\" [class.mat-elevation-z4]=\"true\" [opened]=\"isExpanded\" class=\"app-sidenav side-color\" style=\"height: 100%;\"\r\n [ngStyle]=\"{'width': dataService.appConfig.navWidth}\">\r\n <mat-nav-list >\r\n\r\n <ng-container *ngFor=\"let cap of dataService.appConfig.capItems\" >\r\n\r\n <!-- Menu item -->\r\n <mat-list-item [routerLink]=\"cap.link\" *ngIf=\"myRole[cap.name] && cap.showMenu && (!cap.capSubItems || cap.capSubItems && cap.ignoreSubsDisplay)\" style=\"height: 40px;font-size: 15px;\"\r\n (click)=\"smallScreen ? toggle() : null\">\r\n <mat-icon [ngStyle]=\"{'color': cap.color}\" style=\"margin-right: 5px;\">{{cap.icon}}</mat-icon>{{cap.display}}\r\n </mat-list-item>\r\n\r\n <!-- Menu With Sub items -->\r\n <mat-expansion-panel class=\"side-color\" [class.mat-elevation-z0]=\"true\" *ngIf=\"myRole[cap.name] && cap.showMenu && cap.capSubItems && !cap.ignoreSubsDisplay\">\r\n\r\n <mat-expansion-panel-header style=\"height: 40px;padding-left: 15px;\">\r\n <mat-icon [ngStyle]=\"{'color': cap.color}\" style=\"margin-right: 5px;\">{{cap.icon != 'navigate_next' ? cap.icon : 'fiber_manual_record' }}</mat-icon>{{cap.display}}\r\n </mat-expansion-panel-header>\r\n\r\n <!-- Sub items -->\r\n <mat-nav-list *ngFor=\"let capSub of cap.capSubItems\">\r\n\r\n <mat-list-item [routerLink]=\"capSub.link\" style=\"height: 30px; font-size: 15px;\" (click)=\"smallScreen ? toggle() : null\" *ngIf=\"myRole[cap.name] && cap.showMenu\">\r\n <mat-icon [ngStyle]=\"{'color': capSub.color}\" style=\"margin-right: 5px;\">{{capSub.icon}}</mat-icon>{{capSub.display}}\r\n </mat-list-item>\r\n\r\n </mat-nav-list>\r\n\r\n </mat-expansion-panel>\r\n\r\n </ng-container>\r\n\r\n </mat-nav-list>\r\n </mat-sidenav>\r\n\r\n\r\n\r\n <mat-sidenav-content class=\"tin-bg-image\" style=\"padding: 0px 12px;\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\">\r\n <hr style=\"margin-top: 0px;\">\r\n <router-outlet></router-outlet>\r\n <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n </mat-sidenav-content>\r\n\r\n</mat-sidenav-container>\r\n\r\n\r\n<!-- footer -->\r\n<div class=\"tin-center\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\">\r\n <label style=\"text-align: center; font-size: 12px;\">&copy; {{nowDate | date : 'yyyy'}} <a color=\"primary\" class=\"terms-link\" [href]=\"appConfig.siteUrl\" target=\"_blank\">{{footer}}</a> | <a color=\"primary\" class=\"terms-link\" [href]=\"appConfig.privacyUrl\" target=\"_blank\">Privacy Policy</a>.</label>\r\n</div>\r\n\r\n\r\n<div class=\"tin-bg-image\" *ngIf=\"!loggedin && dataService.appConfig.navigation == 'side'\">\r\n <router-outlet></router-outlet>\r\n <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n</div>\r\n", styles: ["a.navbar-brand{white-space:normal;text-align:center;word-break:break-all}html{font-size:14px}.box-shadow{box-shadow:0 .25rem .75rem #0000000d}.toolbar{height:60px;display:flex;align-items:center;background-color:#03a;color:#fff}.stack-top{z-index:9;margin:20px}.navitems{background-color:#03a}.toolbar-item-spacer{flex:1 1 auto}.app-container{height:90%;margin:0}.app-sidenav{width:200px}.side-color{background-color:#e6f4ff}\n"], dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i9.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i10.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i11.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.MatNavList, selector: "mat-nav-list", inputs: ["disableRipple", "disabled"], exportAs: ["matNavList"] }, { kind: "component", type: i13.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { kind: "component", type: i14.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i15.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i16.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i16.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i16.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "component", type: i17.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i1.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i18.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i18.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "component", type: i19.LoaderComponent, selector: "spa-loader", inputs: ["logo"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.DatePipe, name: "date" }] });
80
77
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavMenuComponent, decorators: [{
81
78
  type: Component,
82
- args: [{ selector: 'spa-nav-menu', template: "<header *ngIf=\"loggedin && dataService.appConfig.navigation == 'top'\">\r\n\r\n <nav class=\"toolbar navbar navbar-expand-sm navbar-toggleable-sm navbar-light border-bottom box-shadow mb-3 \" style=\"padding-right: 10px;\">\r\n\r\n\r\n <div class=\"container-fluid\" style=\"padding-right: 0px;\">\r\n\r\n <img *ngIf=\"appConfig.logo!=''\" [src]=\"appConfig.logo\" style=\"height: 50px; margin-right: 2em\" />\r\n\r\n <div>\r\n <!-- <div style=\"font-size: 20px;\">\r\n {{appConfig.appName}}\r\n </div>\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant && tenantName\" style=\"font-size: 12px;\">\r\n {{tenantName}}\r\n </div> -->\r\n\r\n <div *ngIf=\"!dataService.appConfig.multitenant\" style=\"font-size: 22px;\">\r\n {{appConfig.appName}}\r\n </div>\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant\" style=\"font-size: 20px; ; font-weight: 400;\" [ngStyle]=\"{'margin-top': dataService.appConfig.multitenant ? '12px' : ''}\">\r\n {{appConfig.appName}}\r\n </div>\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant && tenantName\" style=\"font-size: 12px; margin-bottom: 5px;\">\r\n {{tenantName}}\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n <button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\".navbar-collapse\" aria-label=\"Toggle navigation\" [attr.aria-expanded]=\"isExpanded\" (click)=\"toggle()\">\r\n <span class=\"navbar-toggler-icon\"></span>\r\n </button>\r\n\r\n <div *ngIf=\"myRole\" class=\" navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse stack-top\" style=\"margin-right: 0px;\" [ngClass]=\"{ show: isExpanded, navitems: isExpanded }\" >\r\n\r\n <button mat-icon-button (click)=\"logoff()\" > <mat-icon>logout</mat-icon> </button>\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant\">\r\n\r\n <button mat-icon-button (click)=\"redirectTo('home/admin/tenant-settings')\" > <mat-icon fontSet=\"material-icons-round\">apartment</mat-icon> </button>\r\n\r\n <button mat-icon-button (click)=\"redirectTo('home/admin/bug')\"> <mat-icon >support_agent</mat-icon> </button>\r\n\r\n <!-- <button mat-icon-button (click)=\"redirectTo('home/admin/notifications')\"> <mat-icon fontSet=\"material-icons-round\">apartment</mat-icon> </button> -->\r\n </div>\r\n\r\n\r\n <button id=\"btnUser\" mat-button [matMenuTriggerFor]=\"profileMenu\" ><mat-icon style=\"font-size: 24px;\">account_circle</mat-icon> &nbsp;{{loggedUserFullName}}</button>\r\n\r\n <mat-menu #profileMenu=\"matMenu\">\r\n <button id=\"btnProfile\" mat-menu-item (click)=\"redirectTo('home/user/profile')\" >Profile</button>\r\n <button id=\"btnLogOff\" mat-menu-item (click)=\"logoff()\">Log Off</button>\r\n </mat-menu>\r\n\r\n <div *ngFor=\"let item of appConfig.capItems\">\r\n\r\n <!-- Menu Item -->\r\n <button id=\"btnMenu\" *ngIf=\"myRole[item.name] && !item.capSubItems && item.showMenu\" mat-button (click)=\"redirectTo(item.link)\">{{item.display}}</button>\r\n\r\n <!-- Menu Item with Sub items ignored -->\r\n <button id=\"btnMenu\" *ngIf=\"myRole[item.name] && item.capSubItems && item.showMenu && item.ignoreSubsDisplay\" mat-button (click)=\"redirectTo(item.link)\">{{item.display}}</button>\r\n\r\n <!-- Menu Item with Sub items to display-->\r\n <button id=\"btnMenu\" *ngIf=\"myRole[item.name] && item.capSubItems && item.showMenu && !item.ignoreSubsDisplay\" mat-button [matMenuTriggerFor]=\"adminMenu\">{{item.display}}</button>\r\n\r\n\r\n <!-- Sub Menu Items -->\r\n <mat-menu #adminMenu=\"matMenu\">\r\n\r\n <div *ngFor=\"let subItem of item.capSubItems\">\r\n\r\n <button *ngIf=\"myRole[subItem.name] && subItem.showMenu\" mat-menu-item (click)=\"redirectTo(subItem.link)\">{{subItem.display}}</button>\r\n\r\n </div>\r\n\r\n </mat-menu>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </nav>\r\n\r\n</header>\r\n\r\n<div class=\"container-fluid tin-bg-image\" *ngIf=\"dataService.appConfig.navigation == 'top'\">\r\n <router-outlet></router-outlet>\r\n <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!-- SIDE -->\r\n<mat-toolbar class=\"tin-bg-image-toolbar\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\" style=\"padding: 0px 8px;\">\r\n\r\n <button mat-icon-button (click)=\"toggle()\" matTooltip=\"Menu\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n\r\n <img [src]=\"dataService.appConfig.logo\" style=\"height: 50px;\" />\r\n\r\n <div style=\"padding-left: 10px; \">\r\n\r\n <div style=\"font-size: 22px; font-weight: 400;\">\r\n {{appConfig.appName}}\r\n </div>\r\n\r\n <!-- <div style=\"font-size: 20px; height: 25px; font-weight: 400;\" [ngStyle]=\"{'margin-top': dataService.appConfig.multitenant ? '12px' : ''}\">\r\n {{appConfig.appName}}\r\n </div> -->\r\n\r\n <!-- <div *ngIf=\"dataService.appConfig.multitenant && tenantName\" style=\"font-size: 12px; margin-bottom: 5px;\">\r\n {{tenantName}}\r\n </div> -->\r\n\r\n </div>\r\n\r\n\r\n\r\n <span class=\"toolbar-item-spacer\"></span>\r\n\r\n <!-- buttons -->\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant\">\r\n\r\n <!-- <label style=\"font-size: 14px;\">Hi, {{loggedUserFullName}}</label> -->\r\n\r\n <button mat-icon-button (click)=\"redirectTo('home/admin/tenant-settings')\" matTooltip=\"Organisation Settings\">\r\n <mat-icon fontSet=\"material-icons-round\">apartment</mat-icon>\r\n </button>\r\n <label style=\"font-size: 14px;margin-right: 20px;\">{{tenantName}}</label>\r\n\r\n <button *ngIf=\"!smallScreen\" mat-icon-button (click)=\"redirectTo('home/admin/bug')\" matTooltip=\"Support\">\r\n <mat-icon >help</mat-icon>\r\n </button>\r\n\r\n <button *ngIf=\"!smallScreen\" mat-icon-button (click)=\"redirectTo('home/admin/notifications')\" matTooltip=\"Notifications\">\r\n <mat-icon [matBadge]=\"notificationCount$ | async\" [matBadgeHidden]=\"(notificationCount$ | async) === 0\" matBadgeColor=\"warn\" matBadgeSize=\"small\">notifications</mat-icon>\r\n </button>\r\n\r\n </div>\r\n\r\n\r\n\r\n <button mat-icon-button matTooltip=\"My Account\" [matMenuTriggerFor]=\"userAccountMenu\"><mat-icon>account_circle</mat-icon></button>\r\n <label style=\"font-size: 14px;\">{{loggedUserFullName}}</label>\r\n\r\n <button *ngIf=\"!smallScreen\" mat-icon-button (click)=\"logoff()\" matTooltip=\"Signout\">\r\n <mat-icon>logout</mat-icon>\r\n </button>\r\n\r\n\r\n <!-- my account menu -->\r\n <mat-menu #userAccountMenu [overlapTrigger]=\"false\" yPosition=\"below\">\r\n\r\n\r\n <button mat-menu-item routerLink=\"home/user/profile\">\r\n <mat-icon>person</mat-icon><span>Profile</span>\r\n </button>\r\n\r\n <button mat-menu-item routerLink=\"home/admin/bug\" *ngIf=\"dataService.appConfig.multitenant && smallScreen\">\r\n <mat-icon>help</mat-icon> <span>Help</span>\r\n </button>\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <button mat-menu-item (click)=\"logoff()\">\r\n <mat-icon>logout</mat-icon>Logout\r\n </button>\r\n\r\n </mat-menu>\r\n\r\n</mat-toolbar>\r\n\r\n\r\n\r\n\r\n<mat-sidenav-container class=\"app-container\" [hasBackdrop]=\"smallScreen\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\">\r\n\r\n <mat-sidenav #sidenav [mode]=\"smallScreen ? 'over' : 'over'\" [class.mat-elevation-z4]=\"true\" [opened]=\"isExpanded\" class=\"app-sidenav side-color\" style=\"height: 100%;\">\r\n <mat-nav-list >\r\n\r\n <ng-container *ngFor=\"let cap of dataService.appConfig.capItems\" >\r\n\r\n <!-- Menu item -->\r\n <mat-list-item [routerLink]=\"cap.link\" *ngIf=\"myRole[cap.name] && cap.showMenu && (!cap.capSubItems || cap.capSubItems && cap.ignoreSubsDisplay)\" style=\"height: 40px;font-size: 15px;\" (click)=\"toggle()\">\r\n <mat-icon style=\"margin-right: 5px;\">{{cap.icon}}</mat-icon>{{cap.display}}\r\n </mat-list-item>\r\n\r\n <!-- Menu With Sub items -->\r\n <mat-expansion-panel class=\"side-color\" [class.mat-elevation-z0]=\"true\" *ngIf=\"myRole[cap.name] && cap.showMenu && cap.capSubItems && !cap.ignoreSubsDisplay\">\r\n\r\n <mat-expansion-panel-header style=\"height: 40px;padding-left: 15px;\">\r\n <mat-icon style=\"margin-right: 5px;\">{{cap.icon != 'navigate_next' ? cap.icon : 'fiber_manual_record' }}</mat-icon>{{cap.display}}\r\n </mat-expansion-panel-header>\r\n\r\n <!-- Sub items -->\r\n <mat-nav-list *ngFor=\"let capSub of cap.capSubItems\">\r\n\r\n <mat-list-item [routerLink]=\"capSub.link\" style=\"height: 30px; font-size: 15px;\" (click)=\"toggle()\" *ngIf=\"myRole[cap.name] && cap.showMenu\">\r\n <mat-icon style=\"margin-right: 5px;\">{{capSub.icon}}</mat-icon>{{capSub.display}}\r\n </mat-list-item>\r\n\r\n </mat-nav-list>\r\n\r\n </mat-expansion-panel>\r\n\r\n </ng-container>\r\n\r\n </mat-nav-list>\r\n </mat-sidenav>\r\n\r\n\r\n\r\n <mat-sidenav-content class=\"container-fluid tin-bg-image\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\">\r\n <hr style=\"margin-top: 0px;\">\r\n <router-outlet></router-outlet>\r\n <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n </mat-sidenav-content>\r\n\r\n</mat-sidenav-container>\r\n\r\n\r\n<!-- footer -->\r\n<div class=\"tin-center\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\">\r\n <label style=\"text-align: center; font-size: 12px;\">&copy; {{nowDate | date : 'yyyy'}} {{footer}}</label>\r\n</div>\r\n\r\n\r\n<div class=\"container-fluid tin-bg-image\" *ngIf=\"!loggedin && dataService.appConfig.navigation == 'side'\">\r\n <router-outlet></router-outlet>\r\n <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n</div>\r\n", styles: ["a.navbar-brand{white-space:normal;text-align:center;word-break:break-all}html{font-size:14px}.box-shadow{box-shadow:0 .25rem .75rem #0000000d}.toolbar{height:60px;display:flex;align-items:center;background-color:#03a;color:#fff}.stack-top{z-index:9;margin:20px}.navitems{background-color:#03a}.toolbar-item-spacer{flex:1 1 auto}.app-container{height:90%;margin:0}.app-sidenav{width:200px}.side-color{background-color:#def0fc}\n"] }]
79
+ args: [{ selector: 'spa-nav-menu', template: "<header *ngIf=\"loggedin && dataService.appConfig.navigation == 'top'\">\r\n\r\n <nav class=\"toolbar navbar navbar-expand-sm navbar-toggleable-sm navbar-light border-bottom box-shadow mb-3 \" style=\"padding-right: 10px;\">\r\n\r\n\r\n <div class=\"container-fluid\" style=\"padding-right: 0px;\">\r\n\r\n <img *ngIf=\"appConfig.logo!=''\" [src]=\"appConfig.logo\" style=\"height: 50px; margin-right: 2em\" />\r\n\r\n <div>\r\n <!-- <div style=\"font-size: 20px;\">\r\n {{appConfig.appName}}\r\n </div>\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant && tenantName\" style=\"font-size: 12px;\">\r\n {{tenantName}}\r\n </div> -->\r\n\r\n <div *ngIf=\"!dataService.appConfig.multitenant\" style=\"font-size: 22px;\">\r\n {{appConfig.appName}}\r\n </div>\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant\" style=\"font-size: 20px; ; font-weight: 400;\" [ngStyle]=\"{'margin-top': dataService.appConfig.multitenant ? '12px' : ''}\">\r\n {{appConfig.appName}}\r\n </div>\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant && tenantName\" style=\"font-size: 12px; margin-bottom: 5px;\">\r\n {{tenantName}}\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n <button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\".navbar-collapse\" aria-label=\"Toggle navigation\" [attr.aria-expanded]=\"isExpanded\" (click)=\"toggle()\">\r\n <span class=\"navbar-toggler-icon\"></span>\r\n </button>\r\n\r\n <div *ngIf=\"myRole\" class=\" navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse stack-top\" style=\"margin-right: 0px;\" [ngClass]=\"{ show: isExpanded, navitems: isExpanded }\" >\r\n\r\n <button mat-icon-button (click)=\"logoff()\" > <mat-icon>logout</mat-icon> </button>\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant\">\r\n\r\n <button mat-icon-button (click)=\"redirectTo('home/admin/tenant-settings')\" > <mat-icon fontSet=\"material-icons-round\">apartment</mat-icon> </button>\r\n\r\n <button mat-icon-button (click)=\"redirectTo('home/admin/bug')\"> <mat-icon >support_agent</mat-icon> </button>\r\n\r\n <!-- <button mat-icon-button (click)=\"redirectTo('home/admin/notifications')\"> <mat-icon fontSet=\"material-icons-round\">apartment</mat-icon> </button> -->\r\n </div>\r\n\r\n\r\n <button id=\"btnUser\" mat-button [matMenuTriggerFor]=\"profileMenu\" ><mat-icon style=\"font-size: 24px;\">account_circle</mat-icon> &nbsp;{{loggedUserFullName}}</button>\r\n\r\n <mat-menu #profileMenu=\"matMenu\">\r\n <button id=\"btnProfile\" mat-menu-item (click)=\"redirectTo('home/user/profile')\" >Profile</button>\r\n <button id=\"btnLogOff\" mat-menu-item (click)=\"logoff()\">Log Off</button>\r\n </mat-menu>\r\n\r\n <div *ngFor=\"let item of appConfig.capItems\">\r\n\r\n <!-- Menu Item -->\r\n <button id=\"btnMenu\" *ngIf=\"myRole[item.name] && !item.capSubItems && item.showMenu\" mat-button (click)=\"redirectTo(item.link)\">{{item.display}}</button>\r\n\r\n <!-- Menu Item with Sub items ignored -->\r\n <button id=\"btnMenu\" *ngIf=\"myRole[item.name] && item.capSubItems && item.showMenu && item.ignoreSubsDisplay\" mat-button (click)=\"redirectTo(item.link)\">{{item.display}}</button>\r\n\r\n <!-- Menu Item with Sub items to display-->\r\n <button id=\"btnMenu\" *ngIf=\"myRole[item.name] && item.capSubItems && item.showMenu && !item.ignoreSubsDisplay\" mat-button [matMenuTriggerFor]=\"adminMenu\">{{item.display}}</button>\r\n\r\n\r\n <!-- Sub Menu Items -->\r\n <mat-menu #adminMenu=\"matMenu\">\r\n\r\n <div *ngFor=\"let subItem of item.capSubItems\">\r\n\r\n <button *ngIf=\"myRole[subItem.name] && subItem.showMenu\" mat-menu-item (click)=\"redirectTo(subItem.link)\">{{subItem.display}}</button>\r\n\r\n </div>\r\n\r\n </mat-menu>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </nav>\r\n\r\n</header>\r\n\r\n<div class=\"container-fluid tin-bg-image\" *ngIf=\"dataService.appConfig.navigation == 'top'\">\r\n <router-outlet></router-outlet>\r\n <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!-- SIDE -->\r\n<mat-toolbar class=\"tin-bg-image-toolbar\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\" style=\"padding: 0px 8px;\">\r\n\r\n <button mat-icon-button (click)=\"toggle()\" matTooltip=\"Menu\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n\r\n <img [src]=\"dataService.appConfig.logo\" style=\"height: 50px;\" />\r\n\r\n <div style=\"padding-left: 10px; \">\r\n\r\n <div style=\"font-size: 22px; font-weight: 400;\">\r\n {{appConfig.appName}}\r\n </div>\r\n\r\n <!-- <div style=\"font-size: 20px; height: 25px; font-weight: 400;\" [ngStyle]=\"{'margin-top': dataService.appConfig.multitenant ? '12px' : ''}\">\r\n {{appConfig.appName}}\r\n </div> -->\r\n\r\n <!-- <div *ngIf=\"dataService.appConfig.multitenant && tenantName\" style=\"font-size: 12px; margin-bottom: 5px;\">\r\n {{tenantName}}\r\n </div> -->\r\n\r\n </div>\r\n\r\n\r\n\r\n <span class=\"toolbar-item-spacer\"></span>\r\n\r\n <!-- buttons -->\r\n\r\n <div *ngIf=\"dataService.appConfig.multitenant\">\r\n\r\n <!-- <label style=\"font-size: 14px;\">Hi, {{loggedUserFullName}}</label> -->\r\n\r\n <button mat-icon-button (click)=\"redirectTo('home/admin/tenant-settings')\" matTooltip=\"Organisation Settings\">\r\n <mat-icon fontSet=\"material-icons-round\">apartment</mat-icon>\r\n </button>\r\n <label style=\"font-size: 14px;margin-right: 20px;\">{{tenantName}}</label>\r\n\r\n <button *ngIf=\"!smallScreen\" mat-icon-button (click)=\"redirectTo('home/admin/bug')\" matTooltip=\"Support\">\r\n <mat-icon >help</mat-icon>\r\n </button>\r\n\r\n <button *ngIf=\"!smallScreen\" mat-icon-button (click)=\"redirectTo('home/admin/notifications')\" matTooltip=\"Notifications\">\r\n <mat-icon [matBadge]=\"notificationCount$ | async\" [matBadgeHidden]=\"(notificationCount$ | async) === 0\" matBadgeColor=\"warn\" matBadgeSize=\"small\">notifications</mat-icon>\r\n </button>\r\n\r\n </div>\r\n\r\n\r\n\r\n <button mat-icon-button matTooltip=\"My Account\" [matMenuTriggerFor]=\"userAccountMenu\"><mat-icon>account_circle</mat-icon></button>\r\n <label style=\"font-size: 14px;\">{{loggedUserFullName}}</label>\r\n\r\n <button *ngIf=\"!smallScreen\" mat-icon-button (click)=\"logoff()\" matTooltip=\"Signout\">\r\n <mat-icon>logout</mat-icon>\r\n </button>\r\n\r\n\r\n <!-- my account menu -->\r\n <mat-menu #userAccountMenu [overlapTrigger]=\"false\" yPosition=\"below\">\r\n\r\n\r\n <button mat-menu-item routerLink=\"home/user/profile\">\r\n <mat-icon>person</mat-icon><span>Profile</span>\r\n </button>\r\n\r\n <button mat-menu-item routerLink=\"home/admin/bug\" *ngIf=\"dataService.appConfig.multitenant && smallScreen\">\r\n <mat-icon>help</mat-icon> <span>Help</span>\r\n </button>\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <button mat-menu-item (click)=\"logoff()\">\r\n <mat-icon>logout</mat-icon>Logout\r\n </button>\r\n\r\n </mat-menu>\r\n\r\n</mat-toolbar>\r\n\r\n\r\n\r\n\r\n<mat-sidenav-container class=\"app-container\" [hasBackdrop]=\"smallScreen\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\">\r\n\r\n <mat-sidenav #sidenav [mode]=\"smallScreen ? 'over' : 'side'\" [class.mat-elevation-z4]=\"true\" [opened]=\"isExpanded\" class=\"app-sidenav side-color\" style=\"height: 100%;\"\r\n [ngStyle]=\"{'width': dataService.appConfig.navWidth}\">\r\n <mat-nav-list >\r\n\r\n <ng-container *ngFor=\"let cap of dataService.appConfig.capItems\" >\r\n\r\n <!-- Menu item -->\r\n <mat-list-item [routerLink]=\"cap.link\" *ngIf=\"myRole[cap.name] && cap.showMenu && (!cap.capSubItems || cap.capSubItems && cap.ignoreSubsDisplay)\" style=\"height: 40px;font-size: 15px;\"\r\n (click)=\"smallScreen ? toggle() : null\">\r\n <mat-icon [ngStyle]=\"{'color': cap.color}\" style=\"margin-right: 5px;\">{{cap.icon}}</mat-icon>{{cap.display}}\r\n </mat-list-item>\r\n\r\n <!-- Menu With Sub items -->\r\n <mat-expansion-panel class=\"side-color\" [class.mat-elevation-z0]=\"true\" *ngIf=\"myRole[cap.name] && cap.showMenu && cap.capSubItems && !cap.ignoreSubsDisplay\">\r\n\r\n <mat-expansion-panel-header style=\"height: 40px;padding-left: 15px;\">\r\n <mat-icon [ngStyle]=\"{'color': cap.color}\" style=\"margin-right: 5px;\">{{cap.icon != 'navigate_next' ? cap.icon : 'fiber_manual_record' }}</mat-icon>{{cap.display}}\r\n </mat-expansion-panel-header>\r\n\r\n <!-- Sub items -->\r\n <mat-nav-list *ngFor=\"let capSub of cap.capSubItems\">\r\n\r\n <mat-list-item [routerLink]=\"capSub.link\" style=\"height: 30px; font-size: 15px;\" (click)=\"smallScreen ? toggle() : null\" *ngIf=\"myRole[cap.name] && cap.showMenu\">\r\n <mat-icon [ngStyle]=\"{'color': capSub.color}\" style=\"margin-right: 5px;\">{{capSub.icon}}</mat-icon>{{capSub.display}}\r\n </mat-list-item>\r\n\r\n </mat-nav-list>\r\n\r\n </mat-expansion-panel>\r\n\r\n </ng-container>\r\n\r\n </mat-nav-list>\r\n </mat-sidenav>\r\n\r\n\r\n\r\n <mat-sidenav-content class=\"tin-bg-image\" style=\"padding: 0px 12px;\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\">\r\n <hr style=\"margin-top: 0px;\">\r\n <router-outlet></router-outlet>\r\n <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n </mat-sidenav-content>\r\n\r\n</mat-sidenav-container>\r\n\r\n\r\n<!-- footer -->\r\n<div class=\"tin-center\" *ngIf=\"loggedin && dataService.appConfig.navigation == 'side'\">\r\n <label style=\"text-align: center; font-size: 12px;\">&copy; {{nowDate | date : 'yyyy'}} <a color=\"primary\" class=\"terms-link\" [href]=\"appConfig.siteUrl\" target=\"_blank\">{{footer}}</a> | <a color=\"primary\" class=\"terms-link\" [href]=\"appConfig.privacyUrl\" target=\"_blank\">Privacy Policy</a>.</label>\r\n</div>\r\n\r\n\r\n<div class=\"tin-bg-image\" *ngIf=\"!loggedin && dataService.appConfig.navigation == 'side'\">\r\n <router-outlet></router-outlet>\r\n <spa-loader [logo]=\"this.dataService.appConfig.logo\"></spa-loader>\r\n</div>\r\n", styles: ["a.navbar-brand{white-space:normal;text-align:center;word-break:break-all}html{font-size:14px}.box-shadow{box-shadow:0 .25rem .75rem #0000000d}.toolbar{height:60px;display:flex;align-items:center;background-color:#03a;color:#fff}.stack-top{z-index:9;margin:20px}.navitems{background-color:#03a}.toolbar-item-spacer{flex:1 1 auto}.app-container{height:90%;margin:0}.app-sidenav{width:200px}.side-color{background-color:#e6f4ff}\n"] }]
83
80
  }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.AuthService }, { type: i3.StorageService }, { type: i4.NotificationsService }, { type: i5.SocialAuthService }, { type: i6.BreakpointObserver }, { type: i7.DataServiceLib }]; }, propDecorators: { appConfig: [{
84
81
  type: Input
85
82
  }], footer: [{
86
83
  type: Input
87
84
  }] } });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvbmF2LW1lbnUvbmF2LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvbmF2LW1lbnUvbmF2LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsR0FBRyxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlekQsTUFBTSxPQUFPLGdCQUFnQjtJQUUzQixZQUFtQixNQUFjLEVBQVMsV0FBd0IsRUFBVSxjQUE4QixFQUFVLG9CQUEwQyxFQUNwSixhQUFnQyxFQUFVLGtCQUFzQyxFQUFTLFdBQTJCO1FBRDNHLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDcEosa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQXNCOUgsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDO1FBTWxFLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbkIsWUFBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7UUFHWCxjQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUM1QixXQUFNLEdBQVcsbUNBQW1DLENBQUM7UUFqQzVELDZCQUE2QjtRQUM3QixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQXVCLEVBQUUsRUFBRTtZQUU1RixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO2FBQ3hCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO2FBQ3pCO1FBRUgsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUYsUUFBUTtRQUVOLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxDQUFBO1FBQ3JGLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQTtRQUNyRSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUE7SUFFM0UsQ0FBQztJQWtCRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxNQUFNO1FBQ0osZ0NBQWdDO1FBQ2hDLDBDQUEwQztRQUMxQywyQ0FBMkM7UUFDM0MsMkNBQTJDO1FBQzNDLCtCQUErQjtRQUMvQixtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVk7UUFFckIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhCLElBQUksSUFBSSxJQUFFLEVBQUUsRUFBQztZQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUM5QjtJQUVILENBQUM7OzZHQXZFVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQiwwR0NoQjdCLHc4VEFvUEE7MkZEcE9hLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxjQUFjO3FSQXdDZixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcENvbmZpZywgfSBmcm9tICcuLy4uLy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyAgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFNvY2lhbEF1dGhTZXJ2aWNlIH0gZnJvbSAnQGFiYWNyaXR0L2FuZ3VsYXJ4LXNvY2lhbC1sb2dpbic7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50U3RhdGUgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb25zLnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3BhLW5hdi1tZW51JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmF2LW1lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25hdi1tZW51LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmF2TWVudUNvbXBvbmVudCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByb3V0ZXI6IFJvdXRlciwgcHVibGljIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsIHByaXZhdGUgbm90aWZpY2F0aW9uc1NlcnZpY2U6IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzb2NpYWxTZXJ2aWNlOiBTb2NpYWxBdXRoU2VydmljZSwgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlciwgcHVibGljIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYiwpIHtcclxuICAgIC8vIGRldGVjdCBzY3JlZW4gc2l6ZSBjaGFuZ2VzXHJcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFtcIihtYXgtd2lkdGg6IDYwMHB4KVwiXSkuc3Vic2NyaWJlKChyZXN1bHQ6IEJyZWFrcG9pbnRTdGF0ZSkgPT4ge1xyXG5cclxuICAgICAgaWYgKHJlc3VsdC5tYXRjaGVzKSB7XHJcbiAgICAgICAgdGhpcy5zbWFsbFNjcmVlbiA9IHRydWVcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNtYWxsU2NyZWVuID0gZmFsc2VcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG4gICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIHRoaXMuYXV0aFNlcnZpY2UubG9nZ2VkVXNlckZ1bGxOYW1lLnN1YnNjcmliZSh1c2VyID0+IHRoaXMubG9nZ2VkVXNlckZ1bGxOYW1lID0gdXNlcilcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UubXlSb2xlT2JzZXJ2LnN1YnNjcmliZShyb2wgPT4gdGhpcy5teVJvbGUgPSByb2wpO1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5sb2dnZWRpbk9ic2Vydi5zdWJzY3JpYmUob2JqID0+IHRoaXMubG9nZ2VkaW4gPSBvYmopXHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnRlbmFudE5hbWVPYnNlcnYuc3Vic2NyaWJlKG9iaiA9PiB0aGlzLnRlbmFudE5hbWUgPSBvYmopXHJcblxyXG4gIH1cclxuXHJcbiAgbm90aWZpY2F0aW9uQ291bnQkID0gdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5ub3RpZmljYXRpb25Db3VudCQ7XHJcbiAgc21hbGxTY3JlZW5cclxuICBteVJvbGU7XHJcbiAgbG9nZ2VkVXNlckZ1bGxOYW1lOiBzdHJpbmc7XHJcbiAgdGVuYW50TmFtZSA6IHN0cmluZztcclxuICBsb2dnZWRpbjogYm9vbGVhbjtcclxuICBpc0V4cGFuZGVkID0gZmFsc2U7XHJcblxyXG4gIG5vd0RhdGUgPSBuZXcgRGF0ZSgpXHJcblxyXG5cclxuICBASW5wdXQoKSBhcHBDb25maWcgPSBuZXcgQXBwQ29uZmlnKCk7XHJcbiAgQElucHV0KCkgZm9vdGVyOiBzdHJpbmcgPSAnYWxzcXVhcmV0ZWNoLm5ldCB8IFByaXZhY3kgUG9saWN5JztcclxuXHJcblxyXG5cclxuICBjb2xsYXBzZSgpIHtcclxuICAgIHRoaXMuaXNFeHBhbmRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlKCkge1xyXG4gICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcclxuICB9XHJcblxyXG4gIGNsb3NlU2lkZSgpIHtcclxuICAgIHRoaXMuaXNFeHBhbmRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbG9nb2ZmKCkge1xyXG4gICAgLy8gdGhpcy5zb2NpYWxTZXJ2aWNlLnNpZ25PdXQoKTtcclxuICAgIC8vIHRoaXMuYXV0aFNlcnZpY2UuVXBkYXRlbG9nZ2VkaW4oZmFsc2UpO1xyXG4gICAgLy8gdGhpcy5hdXRoU2VydmljZS5VcGRhdGVBdXRvTG9naW4oZmFsc2UpO1xyXG4gICAgLy8gdGhpcy5hdXRoU2VydmljZS5VcGRhdGVSb2xlKG5ldyBSb2xlKCkpO1xyXG4gICAgLy8gdGhpcy5zdG9yYWdlU2VydmljZS5jbGVhcigpO1xyXG4gICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wibG9naW5cIl0pO1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5sb2dvZmYoKTtcclxuICB9XHJcblxyXG4gIHJlZGlyZWN0VG8obGluazogc3RyaW5nKXtcclxuXHJcbiAgICB0aGlzLmNvbGxhcHNlKCk7XHJcblxyXG4gICAgaWYgKGxpbmshPVwiXCIpe1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbGlua10pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxufVxyXG4iLCI8aGVhZGVyICpuZ0lmPVwibG9nZ2VkaW4gJiYgZGF0YVNlcnZpY2UuYXBwQ29uZmlnLm5hdmlnYXRpb24gPT0gJ3RvcCdcIj5cclxuXHJcbiAgPG5hdiBjbGFzcz1cInRvb2xiYXIgbmF2YmFyIG5hdmJhci1leHBhbmQtc20gbmF2YmFyLXRvZ2dsZWFibGUtc20gbmF2YmFyLWxpZ2h0ICBib3JkZXItYm90dG9tIGJveC1zaGFkb3cgbWItMyBcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDEwcHg7XCI+XHJcblxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDBweDtcIj5cclxuXHJcbiAgICAgIDxpbWcgKm5nSWY9XCJhcHBDb25maWcubG9nbyE9JydcIiBbc3JjXT1cImFwcENvbmZpZy5sb2dvXCIgc3R5bGU9XCJoZWlnaHQ6IDUwcHg7IG1hcmdpbi1yaWdodDogMmVtXCIgLz5cclxuXHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMjBweDtcIj5cclxuICAgICAgICAgICAgICB7e2FwcENvbmZpZy5hcHBOYW1lfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YVNlcnZpY2UuYXBwQ29uZmlnLm11bHRpdGVuYW50ICYmIHRlbmFudE5hbWVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDtcIj5cclxuICAgICAgICAgICAgICB7e3RlbmFudE5hbWV9fVxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhZGF0YVNlcnZpY2UuYXBwQ29uZmlnLm11bHRpdGVuYW50XCIgc3R5bGU9XCJmb250LXNpemU6IDIycHg7XCI+XHJcbiAgICAgICAgICB7e2FwcENvbmZpZy5hcHBOYW1lfX1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImRhdGFTZXJ2aWNlLmFwcENvbmZpZy5tdWx0aXRlbmFudFwiIHN0eWxlPVwiZm9udC1zaXplOiAyMHB4OyA7IGZvbnQtd2VpZ2h0OiA0MDA7XCIgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzogZGF0YVNlcnZpY2UuYXBwQ29uZmlnLm11bHRpdGVuYW50ID8gJzEycHgnIDogJyd9XCI+XHJcbiAgICAgICAgICB7e2FwcENvbmZpZy5hcHBOYW1lfX1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImRhdGFTZXJ2aWNlLmFwcENvbmZpZy5tdWx0aXRlbmFudCAmJiB0ZW5hbnROYW1lXCIgc3R5bGU9XCJmb250LXNpemU6IDEycHg7IG1hcmdpbi1ib3R0b206IDVweDtcIj5cclxuICAgICAgICAgIHt7dGVuYW50TmFtZX19XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cIm5hdmJhci10b2dnbGVyXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLXRhcmdldD1cIi5uYXZiYXItY29sbGFwc2VcIiBhcmlhLWxhYmVsPVwiVG9nZ2xlIG5hdmlnYXRpb25cIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzRXhwYW5kZWRcIiAoY2xpY2spPVwidG9nZ2xlKClcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdmJhci10b2dnbGVyLWljb25cIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cIm15Um9sZVwiIGNsYXNzPVwiIG5hdmJhci1jb2xsYXBzZSBjb2xsYXBzZSBkLXNtLWlubGluZS1mbGV4IGZsZXgtc20tcm93LXJldmVyc2Ugc3RhY2stdG9wXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDBweDtcIiBbbmdDbGFzc109XCJ7IHNob3c6IGlzRXhwYW5kZWQsIG5hdml0ZW1zOiBpc0V4cGFuZGVkIH1cIiA+XHJcblxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJsb2dvZmYoKVwiID4gPG1hdC1pY29uPmxvZ291dDwvbWF0LWljb24+IDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YVNlcnZpY2UuYXBwQ29uZmlnLm11bHRpdGVuYW50XCI+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlZGlyZWN0VG8oJ2hvbWUvYWRtaW4vdGVuYW50LXNldHRpbmdzJylcIiA+IDxtYXQtaWNvbiBmb250U2V0PVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIj5hcGFydG1lbnQ8L21hdC1pY29uPiA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVkaXJlY3RUbygnaG9tZS9hZG1pbi9idWcnKVwiPiA8bWF0LWljb24gPnN1cHBvcnRfYWdlbnQ8L21hdC1pY29uPiA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8IS0tIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZWRpcmVjdFRvKCdob21lL2FkbWluL25vdGlmaWNhdGlvbnMnKVwiPiA8bWF0LWljb24gZm9udFNldD1cIm1hdGVyaWFsLWljb25zLXJvdW5kXCI+YXBhcnRtZW50PC9tYXQtaWNvbj4gPC9idXR0b24+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBpZD1cImJ0blVzZXJcIiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJwcm9maWxlTWVudVwiICA+PG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAyNHB4O1wiPmFjY291bnRfY2lyY2xlPC9tYXQtaWNvbj4gICZuYnNwO3t7bG9nZ2VkVXNlckZ1bGxOYW1lfX08L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPG1hdC1tZW51ICNwcm9maWxlTWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgIDxidXR0b24gaWQ9XCJidG5Qcm9maWxlXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVkaXJlY3RUbygnaG9tZS91c2VyL3Byb2ZpbGUnKVwiID5Qcm9maWxlPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuTG9nT2ZmXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwibG9nb2ZmKClcIj5Mb2cgT2ZmPC9idXR0b24+XHJcbiAgICAgICAgPC9tYXQtbWVudT5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhcHBDb25maWcuY2FwSXRlbXNcIj5cclxuXHJcbiAgICAgICAgICA8IS0tIE1lbnUgSXRlbSAtLT5cclxuICAgICAgICAgIDxidXR0b24gaWQ9XCJidG5NZW51XCIgKm5nSWY9XCJteVJvbGVbaXRlbS5uYW1lXSAmJiAhaXRlbS5jYXBTdWJJdGVtcyAmJiBpdGVtLnNob3dNZW51XCIgbWF0LWJ1dHRvbiAoY2xpY2spPVwicmVkaXJlY3RUbyhpdGVtLmxpbmspXCI+e3tpdGVtLmRpc3BsYXl9fTwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDwhLS0gTWVudSBJdGVtIHdpdGggU3ViIGl0ZW1zIGlnbm9yZWQgLS0+XHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuTWVudVwiICpuZ0lmPVwibXlSb2xlW2l0ZW0ubmFtZV0gJiYgaXRlbS5jYXBTdWJJdGVtcyAmJiBpdGVtLnNob3dNZW51ICYmIGl0ZW0uaWdub3JlU3Vic0Rpc3BsYXlcIiBtYXQtYnV0dG9uIChjbGljayk9XCJyZWRpcmVjdFRvKGl0ZW0ubGluaylcIj57e2l0ZW0uZGlzcGxheX19PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPCEtLSBNZW51IEl0ZW0gd2l0aCBTdWIgaXRlbXMgdG8gZGlzcGxheS0tPlxyXG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImJ0bk1lbnVcIiAqbmdJZj1cIm15Um9sZVtpdGVtLm5hbWVdICYmIGl0ZW0uY2FwU3ViSXRlbXMgJiYgaXRlbS5zaG93TWVudSAmJiAhaXRlbS5pZ25vcmVTdWJzRGlzcGxheVwiIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImFkbWluTWVudVwiPnt7aXRlbS5kaXNwbGF5fX08L2J1dHRvbj5cclxuXHJcblxyXG4gICAgICAgICAgPCEtLSBTdWIgTWVudSBJdGVtcyAtLT5cclxuICAgICAgICAgIDxtYXQtbWVudSAjYWRtaW5NZW51PVwibWF0TWVudVwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc3ViSXRlbSBvZiBpdGVtLmNhcFN1Ykl0ZW1zXCI+XHJcblxyXG4gICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJteVJvbGVbc3ViSXRlbS5uYW1lXSAmJiBzdWJJdGVtLnNob3dNZW51XCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVkaXJlY3RUbyhzdWJJdGVtLmxpbmspXCI+e3tzdWJJdGVtLmRpc3BsYXl9fTwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9tYXQtbWVudT5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvbmF2PlxyXG5cclxuPC9oZWFkZXI+XHJcblxyXG48ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIHRpbi1iZy1pbWFnZVwiICpuZ0lmPVwiZGF0YVNlcnZpY2UuYXBwQ29uZmlnLm5hdmlnYXRpb24gPT0gJ3RvcCdcIj5cclxuICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XHJcbiAgPHNwYS1sb2FkZXIgW2xvZ29dPVwidGhpcy5kYXRhU2VydmljZS5hcHBDb25maWcubG9nb1wiPjwvc3BhLWxvYWRlcj5cclxuPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbjwhLS0gU0lERSAtLT5cclxuPG1hdC10b29sYmFyIGNsYXNzPVwidGluLWJnLWltYWdlLXRvb2xiYXJcIiAqbmdJZj1cImxvZ2dlZGluICYmIGRhdGFTZXJ2aWNlLmFwcENvbmZpZy5uYXZpZ2F0aW9uID09ICdzaWRlJ1wiIHN0eWxlPVwicGFkZGluZzogMHB4IDhweDtcIj5cclxuXHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInRvZ2dsZSgpXCIgbWF0VG9vbHRpcD1cIk1lbnVcIj5cclxuICAgIDxtYXQtaWNvbj5tZW51PC9tYXQtaWNvbj5cclxuICA8L2J1dHRvbj5cclxuXHJcbiAgPGltZyBbc3JjXT1cImRhdGFTZXJ2aWNlLmFwcENvbmZpZy5sb2dvXCIgc3R5bGU9XCJoZWlnaHQ6IDUwcHg7XCIgLz5cclxuXHJcbiAgPGRpdiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTBweDsgXCI+XHJcblxyXG4gICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMjJweDsgZm9udC13ZWlnaHQ6IDQwMDtcIj5cclxuICAgICAge3thcHBDb25maWcuYXBwTmFtZX19XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDIwcHg7IGhlaWdodDogMjVweDsgZm9udC13ZWlnaHQ6IDQwMDtcIiBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBkYXRhU2VydmljZS5hcHBDb25maWcubXVsdGl0ZW5hbnQgPyAnMTJweCcgOiAnJ31cIj5cclxuICAgICAge3thcHBDb25maWcuYXBwTmFtZX19XHJcbiAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwiZGF0YVNlcnZpY2UuYXBwQ29uZmlnLm11bHRpdGVuYW50ICYmIHRlbmFudE5hbWVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDsgbWFyZ2luLWJvdHRvbTogNXB4O1wiPlxyXG4gICAgICB7e3RlbmFudE5hbWV9fVxyXG4gICAgPC9kaXY+IC0tPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICA8c3BhbiBjbGFzcz1cInRvb2xiYXItaXRlbS1zcGFjZXJcIj48L3NwYW4+XHJcblxyXG4gIDwhLS0gYnV0dG9ucyAtLT5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImRhdGFTZXJ2aWNlLmFwcENvbmZpZy5tdWx0aXRlbmFudFwiPlxyXG5cclxuICAgIDwhLS0gPGxhYmVsIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiPkhpLCB7e2xvZ2dlZFVzZXJGdWxsTmFtZX19PC9sYWJlbD4gLS0+XHJcblxyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlZGlyZWN0VG8oJ2hvbWUvYWRtaW4vdGVuYW50LXNldHRpbmdzJylcIiBtYXRUb29sdGlwPVwiT3JnYW5pc2F0aW9uIFNldHRpbmdzXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBmb250U2V0PVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIj5hcGFydG1lbnQ8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8bGFiZWwgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7bWFyZ2luLXJpZ2h0OiAyMHB4O1wiPnt7dGVuYW50TmFtZX19PC9sYWJlbD5cclxuXHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiIXNtYWxsU2NyZWVuXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZWRpcmVjdFRvKCdob21lL2FkbWluL2J1ZycpXCIgIG1hdFRvb2x0aXA9XCJTdXBwb3J0XCI+XHJcbiAgICAgIDxtYXQtaWNvbiA+aGVscDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiIXNtYWxsU2NyZWVuXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZWRpcmVjdFRvKCdob21lL2FkbWluL25vdGlmaWNhdGlvbnMnKVwiIG1hdFRvb2x0aXA9XCJOb3RpZmljYXRpb25zXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBbbWF0QmFkZ2VdPVwibm90aWZpY2F0aW9uQ291bnQkIHwgYXN5bmNcIiBbbWF0QmFkZ2VIaWRkZW5dPVwiKG5vdGlmaWNhdGlvbkNvdW50JCB8IGFzeW5jKSA9PT0gMFwiIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCIgbWF0QmFkZ2VTaXplPVwic21hbGxcIj5ub3RpZmljYXRpb25zPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiTXkgQWNjb3VudFwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJ1c2VyQWNjb3VudE1lbnVcIj48bWF0LWljb24+YWNjb3VudF9jaXJjbGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDxsYWJlbCBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDtcIj57e2xvZ2dlZFVzZXJGdWxsTmFtZX19PC9sYWJlbD5cclxuXHJcbiAgPGJ1dHRvbiAqbmdJZj1cIiFzbWFsbFNjcmVlblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwibG9nb2ZmKClcIiAgbWF0VG9vbHRpcD1cIlNpZ25vdXRcIj5cclxuICAgIDxtYXQtaWNvbj5sb2dvdXQ8L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG5cclxuXHJcbiAgPCEtLSBteSBhY2NvdW50IG1lbnUgLS0+XHJcbiAgPG1hdC1tZW51ICN1c2VyQWNjb3VudE1lbnUgW292ZXJsYXBUcmlnZ2VyXT1cImZhbHNlXCIgeVBvc2l0aW9uPVwiYmVsb3dcIj5cclxuXHJcblxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIHJvdXRlckxpbms9XCJob21lL3VzZXIvcHJvZmlsZVwiPlxyXG4gICAgICA8bWF0LWljb24+cGVyc29uPC9tYXQtaWNvbj48c3Bhbj5Qcm9maWxlPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICByb3V0ZXJMaW5rPVwiaG9tZS9hZG1pbi9idWdcIiAqbmdJZj1cImRhdGFTZXJ2aWNlLmFwcENvbmZpZy5tdWx0aXRlbmFudCAmJiBzbWFsbFNjcmVlblwiPlxyXG4gICAgICA8bWF0LWljb24+aGVscDwvbWF0LWljb24+IDxzcGFuPkhlbHA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuXHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImxvZ29mZigpXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5sb2dvdXQ8L21hdC1pY29uPkxvZ291dFxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gIDwvbWF0LW1lbnU+XHJcblxyXG48L21hdC10b29sYmFyPlxyXG5cclxuXHJcblxyXG5cclxuPG1hdC1zaWRlbmF2LWNvbnRhaW5lciBjbGFzcz1cImFwcC1jb250YWluZXJcIiBbaGFzQmFja2Ryb3BdPVwic21hbGxTY3JlZW5cIiAqbmdJZj1cImxvZ2dlZGluICYmIGRhdGFTZXJ2aWNlLmFwcENvbmZpZy5uYXZpZ2F0aW9uID09ICdzaWRlJ1wiPlxyXG5cclxuICA8bWF0LXNpZGVuYXYgI3NpZGVuYXYgW21vZGVdPVwic21hbGxTY3JlZW4gPyAnb3ZlcicgOiAnb3ZlcidcIiBbY2xhc3MubWF0LWVsZXZhdGlvbi16NF09XCJ0cnVlXCIgW29wZW5lZF09XCJpc0V4cGFuZGVkXCIgIGNsYXNzPVwiYXBwLXNpZGVuYXYgc2lkZS1jb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiAxMDAlO1wiPlxyXG4gICAgPG1hdC1uYXYtbGlzdCA+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjYXAgb2YgZGF0YVNlcnZpY2UuYXBwQ29uZmlnLmNhcEl0ZW1zXCIgPlxyXG5cclxuICAgICAgICA8IS0tIE1lbnUgaXRlbSAtLT5cclxuICAgICAgICA8bWF0LWxpc3QtaXRlbSBbcm91dGVyTGlua109XCJjYXAubGlua1wiICAqbmdJZj1cIm15Um9sZVtjYXAubmFtZV0gJiYgY2FwLnNob3dNZW51ICYmICghY2FwLmNhcFN1Ykl0ZW1zIHx8IGNhcC5jYXBTdWJJdGVtcyAmJiBjYXAuaWdub3JlU3Vic0Rpc3BsYXkpXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHg7Zm9udC1zaXplOiAxNXB4O1wiIChjbGljayk9XCJ0b2dnbGUoKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA1cHg7XCI+e3tjYXAuaWNvbn19PC9tYXQtaWNvbj57e2NhcC5kaXNwbGF5fX1cclxuICAgICAgICA8L21hdC1saXN0LWl0ZW0+XHJcblxyXG4gICAgICAgIDwhLS0gTWVudSBXaXRoIFN1YiBpdGVtcyAtLT5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz1cInNpZGUtY29sb3JcIiBbY2xhc3MubWF0LWVsZXZhdGlvbi16MF09XCJ0cnVlXCIgICpuZ0lmPVwibXlSb2xlW2NhcC5uYW1lXSAmJiBjYXAuc2hvd01lbnUgJiYgY2FwLmNhcFN1Ykl0ZW1zICYmICFjYXAuaWdub3JlU3Vic0Rpc3BsYXlcIj5cclxuXHJcbiAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgc3R5bGU9XCJoZWlnaHQ6IDQwcHg7cGFkZGluZy1sZWZ0OiAxNXB4O1wiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDVweDtcIj57e2NhcC5pY29uICE9ICduYXZpZ2F0ZV9uZXh0JyA/IGNhcC5pY29uIDogJ2ZpYmVyX21hbnVhbF9yZWNvcmQnIH19PC9tYXQtaWNvbj57e2NhcC5kaXNwbGF5fX1cclxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcblxyXG4gICAgICAgICAgPCEtLSBTdWIgaXRlbXMgLS0+XHJcbiAgICAgICAgICA8bWF0LW5hdi1saXN0ICpuZ0Zvcj1cImxldCBjYXBTdWIgb2YgY2FwLmNhcFN1Ykl0ZW1zXCI+XHJcblxyXG4gICAgICAgICAgICA8bWF0LWxpc3QtaXRlbSBbcm91dGVyTGlua109XCJjYXBTdWIubGlua1wiIHN0eWxlPVwiaGVpZ2h0OiAzMHB4OyBmb250LXNpemU6IDE1cHg7XCIgKGNsaWNrKT1cInRvZ2dsZSgpXCIgKm5nSWY9XCJteVJvbGVbY2FwLm5hbWVdICYmIGNhcC5zaG93TWVudVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiPnt7Y2FwU3ViLmljb259fTwvbWF0LWljb24+e3tjYXBTdWIuZGlzcGxheX19XHJcbiAgICAgICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cclxuXHJcbiAgICAgICAgICA8L21hdC1uYXYtbGlzdD5cclxuXHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPC9tYXQtbmF2LWxpc3Q+XHJcbiAgPC9tYXQtc2lkZW5hdj5cclxuXHJcblxyXG5cclxuICA8bWF0LXNpZGVuYXYtY29udGVudCBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCB0aW4tYmctaW1hZ2VcIiAqbmdJZj1cImxvZ2dlZGluICYmIGRhdGFTZXJ2aWNlLmFwcENvbmZpZy5uYXZpZ2F0aW9uID09ICdzaWRlJ1wiPlxyXG4gICAgPGhyIHN0eWxlPVwibWFyZ2luLXRvcDogMHB4O1wiPlxyXG4gICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxyXG4gICAgPHNwYS1sb2FkZXIgW2xvZ29dPVwidGhpcy5kYXRhU2VydmljZS5hcHBDb25maWcubG9nb1wiPjwvc3BhLWxvYWRlcj5cclxuICA8L21hdC1zaWRlbmF2LWNvbnRlbnQ+XHJcblxyXG48L21hdC1zaWRlbmF2LWNvbnRhaW5lcj5cclxuXHJcblxyXG48IS0tIGZvb3RlciAtLT5cclxuPGRpdiBjbGFzcz1cInRpbi1jZW50ZXJcIiAqbmdJZj1cImxvZ2dlZGluICYmIGRhdGFTZXJ2aWNlLmFwcENvbmZpZy5uYXZpZ2F0aW9uID09ICdzaWRlJ1wiPlxyXG4gIDxsYWJlbCBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zaXplOiAxMnB4O1wiPiZjb3B5OyB7e25vd0RhdGUgfCBkYXRlIDogJ3l5eXknfX0ge3tmb290ZXJ9fTwvbGFiZWw+XHJcbjwvZGl2PlxyXG5cclxuXHJcbjxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWQgdGluLWJnLWltYWdlXCIgKm5nSWY9XCIhbG9nZ2VkaW4gJiYgZGF0YVNlcnZpY2UuYXBwQ29uZmlnLm5hdmlnYXRpb24gPT0gJ3NpZGUnXCI+XHJcbiAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxyXG4gIDxzcGEtbG9hZGVyIFtsb2dvXT1cInRoaXMuZGF0YVNlcnZpY2UuYXBwQ29uZmlnLmxvZ29cIj48L3NwYS1sb2FkZXI+XHJcbjwvZGl2PlxyXG4iXX0=
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvbmF2LW1lbnUvbmF2LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvbmF2LW1lbnUvbmF2LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsR0FBRyxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlekQsTUFBTSxPQUFPLGdCQUFnQjtJQUUzQixZQUFtQixNQUFjLEVBQVMsV0FBd0IsRUFBVSxjQUE4QixFQUFVLG9CQUEwQyxFQUNwSixhQUFnQyxFQUFVLGtCQUFzQyxFQUFTLFdBQTJCO1FBRDNHLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDcEosa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQTBCOUgsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDO1FBTWxFLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbkIsWUFBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7UUFHWCxjQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUM1QixXQUFNLEdBQVcsa0JBQWtCLENBQUM7UUFyQzNDLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQXVCLEVBQUUsRUFBRTtZQUU1RixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO2FBQ3hCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO2FBQ3pCO1FBRUgsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUYsUUFBUTtRQUVOLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxDQUFBO1FBQ3JGLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQTtRQUNyRSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUE7UUFFekUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDeEI7SUFFSCxDQUFDO0lBa0JELFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBWTtRQUVyQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFaEIsSUFBSSxJQUFJLElBQUUsRUFBRSxFQUFDO1lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzlCO0lBRUgsQ0FBQzs7NkdBckVVLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLDBHQ2hCN0IsazNVQXNQQTsyRkR0T2EsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGNBQWM7cVJBNENmLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwQ29uZmlnLCB9IGZyb20gJy4vLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7ICBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU29jaWFsQXV0aFNlcnZpY2UgfSBmcm9tICdAYWJhY3JpdHQvYW5ndWxhcngtc29jaWFsLWxvZ2luJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2VMaWIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhbGliLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRTdGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbnMuc2VydmljZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcGEtbmF2LW1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uYXYtbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbmF2LW1lbnUuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOYXZNZW51Q29tcG9uZW50IHtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIHJvdXRlcjogUm91dGVyLCBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSwgcHJpdmF0ZSBub3RpZmljYXRpb25zU2VydmljZTogTm90aWZpY2F0aW9uc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNvY2lhbFNlcnZpY2U6IFNvY2lhbEF1dGhTZXJ2aWNlLCBwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyLCBwdWJsaWMgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlTGliLCkge1xyXG4gICAgLy8gZGV0ZWN0IHNjcmVlbiBzaXplIGNoYW5nZXNcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoW1wiKG1heC13aWR0aDogNjAwcHgpXCJdKS5zdWJzY3JpYmUoKHJlc3VsdDogQnJlYWtwb2ludFN0YXRlKSA9PiB7XHJcblxyXG4gICAgICBpZiAocmVzdWx0Lm1hdGNoZXMpIHtcclxuICAgICAgICB0aGlzLnNtYWxsU2NyZWVuID0gdHJ1ZVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc21hbGxTY3JlZW4gPSBmYWxzZVxyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcbiAgIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgdGhpcy5hdXRoU2VydmljZS5sb2dnZWRVc2VyRnVsbE5hbWUuc3Vic2NyaWJlKHVzZXIgPT4gdGhpcy5sb2dnZWRVc2VyRnVsbE5hbWUgPSB1c2VyKVxyXG4gICAgdGhpcy5hdXRoU2VydmljZS5teVJvbGVPYnNlcnYuc3Vic2NyaWJlKHJvbCA9PiB0aGlzLm15Um9sZSA9IHJvbCk7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ2dlZGluT2JzZXJ2LnN1YnNjcmliZShvYmogPT4gdGhpcy5sb2dnZWRpbiA9IG9iailcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UudGVuYW50TmFtZU9ic2Vydi5zdWJzY3JpYmUob2JqID0+IHRoaXMudGVuYW50TmFtZSA9IG9iailcclxuXHJcbiAgICBpZiAoIXRoaXMuc21hbGxTY3JlZW4pIHtcclxuICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBub3RpZmljYXRpb25Db3VudCQgPSB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLm5vdGlmaWNhdGlvbkNvdW50JDtcclxuICBzbWFsbFNjcmVlblxyXG4gIG15Um9sZTtcclxuICBsb2dnZWRVc2VyRnVsbE5hbWU6IHN0cmluZztcclxuICB0ZW5hbnROYW1lIDogc3RyaW5nO1xyXG4gIGxvZ2dlZGluOiBib29sZWFuO1xyXG4gIGlzRXhwYW5kZWQgPSBmYWxzZTtcclxuXHJcbiAgbm93RGF0ZSA9IG5ldyBEYXRlKClcclxuXHJcblxyXG4gIEBJbnB1dCgpIGFwcENvbmZpZyA9IG5ldyBBcHBDb25maWcoKTtcclxuICBASW5wdXQoKSBmb290ZXI6IHN0cmluZyA9ICdhbHNxdWFyZXRlY2gubmV0JztcclxuXHJcblxyXG5cclxuICBjb2xsYXBzZSgpIHtcclxuICAgIHRoaXMuaXNFeHBhbmRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlKCkge1xyXG4gICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcclxuICB9XHJcblxyXG4gIGNsb3NlU2lkZSgpIHtcclxuICAgIHRoaXMuaXNFeHBhbmRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbG9nb2ZmKCkge1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5sb2dvZmYoKTtcclxuICB9XHJcblxyXG4gIHJlZGlyZWN0VG8obGluazogc3RyaW5nKXtcclxuXHJcbiAgICB0aGlzLmNvbGxhcHNlKCk7XHJcblxyXG4gICAgaWYgKGxpbmshPVwiXCIpe1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbGlua10pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxufVxyXG4iLCI8aGVhZGVyICpuZ0lmPVwibG9nZ2VkaW4gJiYgZGF0YVNlcnZpY2UuYXBwQ29uZmlnLm5hdmlnYXRpb24gPT0gJ3RvcCdcIj5cclxuXHJcbiAgPG5hdiBjbGFzcz1cInRvb2xiYXIgbmF2YmFyIG5hdmJhci1leHBhbmQtc20gbmF2YmFyLXRvZ2dsZWFibGUtc20gbmF2YmFyLWxpZ2h0ICBib3JkZXItYm90dG9tIGJveC1zaGFkb3cgbWItMyBcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDEwcHg7XCI+XHJcblxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDBweDtcIj5cclxuXHJcbiAgICAgIDxpbWcgKm5nSWY9XCJhcHBDb25maWcubG9nbyE9JydcIiBbc3JjXT1cImFwcENvbmZpZy5sb2dvXCIgc3R5bGU9XCJoZWlnaHQ6IDUwcHg7IG1hcmdpbi1yaWdodDogMmVtXCIgLz5cclxuXHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMjBweDtcIj5cclxuICAgICAgICAgICAgICB7e2FwcENvbmZpZy5hcHBOYW1lfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YVNlcnZpY2UuYXBwQ29uZmlnLm11bHRpdGVuYW50ICYmIHRlbmFudE5hbWVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDtcIj5cclxuICAgICAgICAgICAgICB7e3RlbmFudE5hbWV9fVxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhZGF0YVNlcnZpY2UuYXBwQ29uZmlnLm11bHRpdGVuYW50XCIgc3R5bGU9XCJmb250LXNpemU6IDIycHg7XCI+XHJcbiAgICAgICAgICB7e2FwcENvbmZpZy5hcHBOYW1lfX1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImRhdGFTZXJ2aWNlLmFwcENvbmZpZy5tdWx0aXRlbmFudFwiIHN0eWxlPVwiZm9udC1zaXplOiAyMHB4OyA7IGZvbnQtd2VpZ2h0OiA0MDA7XCIgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzogZGF0YVNlcnZpY2UuYXBwQ29uZmlnLm11bHRpdGVuYW50ID8gJzEycHgnIDogJyd9XCI+XHJcbiAgICAgICAgICB7e2FwcENvbmZpZy5hcHBOYW1lfX1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImRhdGFTZXJ2aWNlLmFwcENvbmZpZy5tdWx0aXRlbmFudCAmJiB0ZW5hbnROYW1lXCIgc3R5bGU9XCJmb250LXNpemU6IDEycHg7IG1hcmdpbi1ib3R0b206IDVweDtcIj5cclxuICAgICAgICAgIHt7dGVuYW50TmFtZX19XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cIm5hdmJhci10b2dnbGVyXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLXRhcmdldD1cIi5uYXZiYXItY29sbGFwc2VcIiBhcmlhLWxhYmVsPVwiVG9nZ2xlIG5hdmlnYXRpb25cIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzRXhwYW5kZWRcIiAoY2xpY2spPVwidG9nZ2xlKClcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdmJhci10b2dnbGVyLWljb25cIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cIm15Um9sZVwiIGNsYXNzPVwiIG5hdmJhci1jb2xsYXBzZSBjb2xsYXBzZSBkLXNtLWlubGluZS1mbGV4IGZsZXgtc20tcm93LXJldmVyc2Ugc3RhY2stdG9wXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDBweDtcIiBbbmdDbGFzc109XCJ7IHNob3c6IGlzRXhwYW5kZWQsIG5hdml0ZW1zOiBpc0V4cGFuZGVkIH1cIiA+XHJcblxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJsb2dvZmYoKVwiID4gPG1hdC1pY29uPmxvZ291dDwvbWF0LWljb24+IDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YVNlcnZpY2UuYXBwQ29uZmlnLm11bHRpdGVuYW50XCI+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlZGlyZWN0VG8oJ2hvbWUvYWRtaW4vdGVuYW50LXNldHRpbmdzJylcIiA+IDxtYXQtaWNvbiBmb250U2V0PVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIj5hcGFydG1lbnQ8L21hdC1pY29uPiA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVkaXJlY3RUbygnaG9tZS9hZG1pbi9idWcnKVwiPiA8bWF0LWljb24gPnN1cHBvcnRfYWdlbnQ8L21hdC1pY29uPiA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8IS0tIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZWRpcmVjdFRvKCdob21lL2FkbWluL25vdGlmaWNhdGlvbnMnKVwiPiA8bWF0LWljb24gZm9udFNldD1cIm1hdGVyaWFsLWljb25zLXJvdW5kXCI+YXBhcnRtZW50PC9tYXQtaWNvbj4gPC9idXR0b24+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBpZD1cImJ0blVzZXJcIiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJwcm9maWxlTWVudVwiICA+PG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAyNHB4O1wiPmFjY291bnRfY2lyY2xlPC9tYXQtaWNvbj4gICZuYnNwO3t7bG9nZ2VkVXNlckZ1bGxOYW1lfX08L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPG1hdC1tZW51ICNwcm9maWxlTWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgIDxidXR0b24gaWQ9XCJidG5Qcm9maWxlXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVkaXJlY3RUbygnaG9tZS91c2VyL3Byb2ZpbGUnKVwiID5Qcm9maWxlPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuTG9nT2ZmXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwibG9nb2ZmKClcIj5Mb2cgT2ZmPC9idXR0b24+XHJcbiAgICAgICAgPC9tYXQtbWVudT5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhcHBDb25maWcuY2FwSXRlbXNcIj5cclxuXHJcbiAgICAgICAgICA8IS0tIE1lbnUgSXRlbSAtLT5cclxuICAgICAgICAgIDxidXR0b24gaWQ9XCJidG5NZW51XCIgKm5nSWY9XCJteVJvbGVbaXRlbS5uYW1lXSAmJiAhaXRlbS5jYXBTdWJJdGVtcyAmJiBpdGVtLnNob3dNZW51XCIgbWF0LWJ1dHRvbiAoY2xpY2spPVwicmVkaXJlY3RUbyhpdGVtLmxpbmspXCI+e3tpdGVtLmRpc3BsYXl9fTwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDwhLS0gTWVudSBJdGVtIHdpdGggU3ViIGl0ZW1zIGlnbm9yZWQgLS0+XHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuTWVudVwiICpuZ0lmPVwibXlSb2xlW2l0ZW0ubmFtZV0gJiYgaXRlbS5jYXBTdWJJdGVtcyAmJiBpdGVtLnNob3dNZW51ICYmIGl0ZW0uaWdub3JlU3Vic0Rpc3BsYXlcIiBtYXQtYnV0dG9uIChjbGljayk9XCJyZWRpcmVjdFRvKGl0ZW0ubGluaylcIj57e2l0ZW0uZGlzcGxheX19PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPCEtLSBNZW51IEl0ZW0gd2l0aCBTdWIgaXRlbXMgdG8gZGlzcGxheS0tPlxyXG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImJ0bk1lbnVcIiAqbmdJZj1cIm15Um9sZVtpdGVtLm5hbWVdICYmIGl0ZW0uY2FwU3ViSXRlbXMgJiYgaXRlbS5zaG93TWVudSAmJiAhaXRlbS5pZ25vcmVTdWJzRGlzcGxheVwiIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImFkbWluTWVudVwiPnt7aXRlbS5kaXNwbGF5fX08L2J1dHRvbj5cclxuXHJcblxyXG4gICAgICAgICAgPCEtLSBTdWIgTWVudSBJdGVtcyAtLT5cclxuICAgICAgICAgIDxtYXQtbWVudSAjYWRtaW5NZW51PVwibWF0TWVudVwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc3ViSXRlbSBvZiBpdGVtLmNhcFN1Ykl0ZW1zXCI+XHJcblxyXG4gICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJteVJvbGVbc3ViSXRlbS5uYW1lXSAmJiBzdWJJdGVtLnNob3dNZW51XCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVkaXJlY3RUbyhzdWJJdGVtLmxpbmspXCI+e3tzdWJJdGVtLmRpc3BsYXl9fTwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9tYXQtbWVudT5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvbmF2PlxyXG5cclxuPC9oZWFkZXI+XHJcblxyXG48ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIHRpbi1iZy1pbWFnZVwiICpuZ0lmPVwiZGF0YVNlcnZpY2UuYXBwQ29uZmlnLm5hdmlnYXRpb24gPT0gJ3RvcCdcIj5cclxuICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XHJcbiAgPHNwYS1sb2FkZXIgW2xvZ29dPVwidGhpcy5kYXRhU2VydmljZS5hcHBDb25maWcubG9nb1wiPjwvc3BhLWxvYWRlcj5cclxuPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbjwhLS0gU0lERSAtLT5cclxuPG1hdC10b29sYmFyIGNsYXNzPVwidGluLWJnLWltYWdlLXRvb2xiYXJcIiAqbmdJZj1cImxvZ2dlZGluICYmIGRhdGFTZXJ2aWNlLmFwcENvbmZpZy5uYXZpZ2F0aW9uID09ICdzaWRlJ1wiIHN0eWxlPVwicGFkZGluZzogMHB4IDhweDtcIj5cclxuXHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInRvZ2dsZSgpXCIgbWF0VG9vbHRpcD1cIk1lbnVcIj5cclxuICAgIDxtYXQtaWNvbj5tZW51PC9tYXQtaWNvbj5cclxuICA8L2J1dHRvbj5cclxuXHJcbiAgPGltZyBbc3JjXT1cImRhdGFTZXJ2aWNlLmFwcENvbmZpZy5sb2dvXCIgc3R5bGU9XCJoZWlnaHQ6IDUwcHg7XCIgLz5cclxuXHJcbiAgPGRpdiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTBweDsgXCI+XHJcblxyXG4gICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMjJweDsgZm9udC13ZWlnaHQ6IDQwMDtcIj5cclxuICAgICAge3thcHBDb25maWcuYXBwTmFtZX19XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDIwcHg7IGhlaWdodDogMjVweDsgZm9udC13ZWlnaHQ6IDQwMDtcIiBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBkYXRhU2VydmljZS5hcHBDb25maWcubXVsdGl0ZW5hbnQgPyAnMTJweCcgOiAnJ31cIj5cclxuICAgICAge3thcHBDb25maWcuYXBwTmFtZX19XHJcbiAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwiZGF0YVNlcnZpY2UuYXBwQ29uZmlnLm11bHRpdGVuYW50ICYmIHRlbmFudE5hbWVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDsgbWFyZ2luLWJvdHRvbTogNXB4O1wiPlxyXG4gICAgICB7e3RlbmFudE5hbWV9fVxyXG4gICAgPC9kaXY+IC0tPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICA8c3BhbiBjbGFzcz1cInRvb2xiYXItaXRlbS1zcGFjZXJcIj48L3NwYW4+XHJcblxyXG4gIDwhLS0gYnV0dG9ucyAtLT5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImRhdGFTZXJ2aWNlLmFwcENvbmZpZy5tdWx0aXRlbmFudFwiPlxyXG5cclxuICAgIDwhLS0gPGxhYmVsIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiPkhpLCB7e2xvZ2dlZFVzZXJGdWxsTmFtZX19PC9sYWJlbD4gLS0+XHJcblxyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlZGlyZWN0VG8oJ2hvbWUvYWRtaW4vdGVuYW50LXNldHRpbmdzJylcIiBtYXRUb29sdGlwPVwiT3JnYW5pc2F0aW9uIFNldHRpbmdzXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBmb250U2V0PVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIj5hcGFydG1lbnQ8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8bGFiZWwgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7bWFyZ2luLXJpZ2h0OiAyMHB4O1wiPnt7dGVuYW50TmFtZX19PC9sYWJlbD5cclxuXHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiIXNtYWxsU2NyZWVuXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZWRpcmVjdFRvKCdob21lL2FkbWluL2J1ZycpXCIgIG1hdFRvb2x0aXA9XCJTdXBwb3J0XCI+XHJcbiAgICAgIDxtYXQtaWNvbiA+aGVscDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiIXNtYWxsU2NyZWVuXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZWRpcmVjdFRvKCdob21lL2FkbWluL25vdGlmaWNhdGlvbnMnKVwiIG1hdFRvb2x0aXA9XCJOb3RpZmljYXRpb25zXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBbbWF0QmFkZ2VdPVwibm90aWZpY2F0aW9uQ291bnQkIHwgYXN5bmNcIiBbbWF0QmFkZ2VIaWRkZW5dPVwiKG5vdGlmaWNhdGlvbkNvdW50JCB8IGFzeW5jKSA9PT0gMFwiIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCIgbWF0QmFkZ2VTaXplPVwic21hbGxcIj5ub3RpZmljYXRpb25zPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiTXkgQWNjb3VudFwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJ1c2VyQWNjb3VudE1lbnVcIj48bWF0LWljb24+YWNjb3VudF9jaXJjbGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDxsYWJlbCBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDtcIj57e2xvZ2dlZFVzZXJGdWxsTmFtZX19PC9sYWJlbD5cclxuXHJcbiAgPGJ1dHRvbiAqbmdJZj1cIiFzbWFsbFNjcmVlblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwibG9nb2ZmKClcIiAgbWF0VG9vbHRpcD1cIlNpZ25vdXRcIj5cclxuICAgIDxtYXQtaWNvbj5sb2dvdXQ8L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG5cclxuXHJcbiAgPCEtLSBteSBhY2NvdW50IG1lbnUgLS0+XHJcbiAgPG1hdC1tZW51ICN1c2VyQWNjb3VudE1lbnUgW292ZXJsYXBUcmlnZ2VyXT1cImZhbHNlXCIgeVBvc2l0aW9uPVwiYmVsb3dcIj5cclxuXHJcblxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIHJvdXRlckxpbms9XCJob21lL3VzZXIvcHJvZmlsZVwiPlxyXG4gICAgICA8bWF0LWljb24+cGVyc29uPC9tYXQtaWNvbj48c3Bhbj5Qcm9maWxlPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICByb3V0ZXJMaW5rPVwiaG9tZS9hZG1pbi9idWdcIiAqbmdJZj1cImRhdGFTZXJ2aWNlLmFwcENvbmZpZy5tdWx0aXRlbmFudCAmJiBzbWFsbFNjcmVlblwiPlxyXG4gICAgICA8bWF0LWljb24+aGVscDwvbWF0LWljb24+IDxzcGFuPkhlbHA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuXHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImxvZ29mZigpXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5sb2dvdXQ8L21hdC1pY29uPkxvZ291dFxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gIDwvbWF0LW1lbnU+XHJcblxyXG48L21hdC10b29sYmFyPlxyXG5cclxuXHJcblxyXG5cclxuPG1hdC1zaWRlbmF2LWNvbnRhaW5lciBjbGFzcz1cImFwcC1jb250YWluZXJcIiBbaGFzQmFja2Ryb3BdPVwic21hbGxTY3JlZW5cIiAqbmdJZj1cImxvZ2dlZGluICYmIGRhdGFTZXJ2aWNlLmFwcENvbmZpZy5uYXZpZ2F0aW9uID09ICdzaWRlJ1wiPlxyXG5cclxuICA8bWF0LXNpZGVuYXYgI3NpZGVuYXYgW21vZGVdPVwic21hbGxTY3JlZW4gPyAnb3ZlcicgOiAnc2lkZSdcIiBbY2xhc3MubWF0LWVsZXZhdGlvbi16NF09XCJ0cnVlXCIgW29wZW5lZF09XCJpc0V4cGFuZGVkXCIgIGNsYXNzPVwiYXBwLXNpZGVuYXYgc2lkZS1jb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiAxMDAlO1wiXHJcbiAgW25nU3R5bGVdPVwieyd3aWR0aCc6IGRhdGFTZXJ2aWNlLmFwcENvbmZpZy5uYXZXaWR0aH1cIj5cclxuICAgIDxtYXQtbmF2LWxpc3QgPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2FwIG9mIGRhdGFTZXJ2aWNlLmFwcENvbmZpZy5jYXBJdGVtc1wiID5cclxuXHJcbiAgICAgICAgPCEtLSBNZW51IGl0ZW0gLS0+XHJcbiAgICAgICAgPG1hdC1saXN0LWl0ZW0gW3JvdXRlckxpbmtdPVwiY2FwLmxpbmtcIiAgKm5nSWY9XCJteVJvbGVbY2FwLm5hbWVdICYmIGNhcC5zaG93TWVudSAmJiAoIWNhcC5jYXBTdWJJdGVtcyB8fCBjYXAuY2FwU3ViSXRlbXMgJiYgY2FwLmlnbm9yZVN1YnNEaXNwbGF5KVwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4O2ZvbnQtc2l6ZTogMTVweDtcIlxyXG4gICAgICAgIChjbGljayk9XCJzbWFsbFNjcmVlbiA/IHRvZ2dsZSgpIDogbnVsbFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIFtuZ1N0eWxlXT1cInsnY29sb3InOiBjYXAuY29sb3J9XCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDVweDtcIj57e2NhcC5pY29ufX08L21hdC1pY29uPnt7Y2FwLmRpc3BsYXl9fVxyXG4gICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cclxuXHJcbiAgICAgICAgPCEtLSBNZW51IFdpdGggU3ViIGl0ZW1zIC0tPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPVwic2lkZS1jb2xvclwiIFtjbGFzcy5tYXQtZWxldmF0aW9uLXowXT1cInRydWVcIiAgKm5nSWY9XCJteVJvbGVbY2FwLm5hbWVdICYmIGNhcC5zaG93TWVudSAmJiBjYXAuY2FwU3ViSXRlbXMgJiYgIWNhcC5pZ25vcmVTdWJzRGlzcGxheVwiPlxyXG5cclxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBzdHlsZT1cImhlaWdodDogNDBweDtwYWRkaW5nLWxlZnQ6IDE1cHg7XCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBbbmdTdHlsZV09XCJ7J2NvbG9yJzogY2FwLmNvbG9yfVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA1cHg7XCI+e3tjYXAuaWNvbiAhPSAnbmF2aWdhdGVfbmV4dCcgPyBjYXAuaWNvbiA6ICdmaWJlcl9tYW51YWxfcmVjb3JkJyB9fTwvbWF0LWljb24+e3tjYXAuZGlzcGxheX19XHJcbiAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG5cclxuICAgICAgICAgIDwhLS0gU3ViIGl0ZW1zIC0tPlxyXG4gICAgICAgICAgPG1hdC1uYXYtbGlzdCAqbmdGb3I9XCJsZXQgY2FwU3ViIG9mIGNhcC5jYXBTdWJJdGVtc1wiPlxyXG5cclxuICAgICAgICAgICAgPG1hdC1saXN0LWl0ZW0gW3JvdXRlckxpbmtdPVwiY2FwU3ViLmxpbmtcIiBzdHlsZT1cImhlaWdodDogMzBweDsgZm9udC1zaXplOiAxNXB4O1wiIChjbGljayk9XCJzbWFsbFNjcmVlbiA/IHRvZ2dsZSgpIDogbnVsbFwiICpuZ0lmPVwibXlSb2xlW2NhcC5uYW1lXSAmJiBjYXAuc2hvd01lbnVcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24gW25nU3R5bGVdPVwieydjb2xvcic6IGNhcFN1Yi5jb2xvcn1cIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiPnt7Y2FwU3ViLmljb259fTwvbWF0LWljb24+e3tjYXBTdWIuZGlzcGxheX19XHJcbiAgICAgICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cclxuXHJcbiAgICAgICAgICA8L21hdC1uYXYtbGlzdD5cclxuXHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPC9tYXQtbmF2LWxpc3Q+XHJcbiAgPC9tYXQtc2lkZW5hdj5cclxuXHJcblxyXG5cclxuICA8bWF0LXNpZGVuYXYtY29udGVudCBjbGFzcz1cInRpbi1iZy1pbWFnZVwiIHN0eWxlPVwicGFkZGluZzogMHB4IDEycHg7XCIgKm5nSWY9XCJsb2dnZWRpbiAmJiBkYXRhU2VydmljZS5hcHBDb25maWcubmF2aWdhdGlvbiA9PSAnc2lkZSdcIj5cclxuICAgIDxociBzdHlsZT1cIm1hcmdpbi10b3A6IDBweDtcIj5cclxuICAgIDxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cclxuICAgIDxzcGEtbG9hZGVyIFtsb2dvXT1cInRoaXMuZGF0YVNlcnZpY2UuYXBwQ29uZmlnLmxvZ29cIj48L3NwYS1sb2FkZXI+XHJcbiAgPC9tYXQtc2lkZW5hdi1jb250ZW50PlxyXG5cclxuPC9tYXQtc2lkZW5hdi1jb250YWluZXI+XHJcblxyXG5cclxuPCEtLSBmb290ZXIgLS0+XHJcbjxkaXYgY2xhc3M9XCJ0aW4tY2VudGVyXCIgKm5nSWY9XCJsb2dnZWRpbiAmJiBkYXRhU2VydmljZS5hcHBDb25maWcubmF2aWdhdGlvbiA9PSAnc2lkZSdcIj5cclxuICA8bGFiZWwgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZTogMTJweDtcIj4mY29weTsge3tub3dEYXRlIHwgZGF0ZSA6ICd5eXl5J319IDxhIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwidGVybXMtbGlua1wiIFtocmVmXT1cImFwcENvbmZpZy5zaXRlVXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3tmb290ZXJ9fTwvYT4gfCA8YSBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cInRlcm1zLWxpbmtcIiBbaHJlZl09XCJhcHBDb25maWcucHJpdmFjeVVybFwiIHRhcmdldD1cIl9ibGFua1wiPlByaXZhY3kgUG9saWN5PC9hPi48L2xhYmVsPlxyXG48L2Rpdj5cclxuXHJcblxyXG48ZGl2IGNsYXNzPVwidGluLWJnLWltYWdlXCIgKm5nSWY9XCIhbG9nZ2VkaW4gJiYgZGF0YVNlcnZpY2UuYXBwQ29uZmlnLm5hdmlnYXRpb24gPT0gJ3NpZGUnXCI+XHJcbiAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxyXG4gIDxzcGEtbG9hZGVyIFtsb2dvXT1cInRoaXMuZGF0YVNlcnZpY2UuYXBwQ29uZmlnLmxvZ29cIj48L3NwYS1sb2FkZXI+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -54,7 +54,7 @@ export class OptionComponent {
54
54
  }
55
55
  }
56
56
  OptionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OptionComponent, deps: [{ token: i1.MessageService }], target: i0.ɵɵFactoryTarget.Component });
57
- OptionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: OptionComponent, selector: "spa-option", inputs: { options: "options", optionValue: "optionValue", optionDisplay: "optionDisplay", readonly: "readonly", type: "type", value: "value", display: "display", show: "show", required: "required", infoMessage: "infoMessage", copyContent: "copyContent", suffix: "suffix", loadAction: "loadAction" }, outputs: { valueChange: "valueChange", enterPress: "enterPress" }, ngImport: i0, template: "\r\n<div class=\"tin-row gap-0\">\r\n\r\n <mat-checkbox color=\"primary\" style=\"margin-right:0px\" [(ngModel)]=\"show\" (change)=\"resetValue()\" labelPosition=\"after\" [disabled]=\"required\" >{{display}}</mat-checkbox>\r\n\r\n <mat-form-field style=\"margin-right:1px;width: 0px;\" >\r\n <input matInput />\r\n </mat-form-field>\r\n\r\n <ng-container *ngIf=\"show\" [ngSwitch]=\"type\" style=\"margin-left: 5px;\">\r\n\r\n <spa-date class=\"opt\" *ngSwitchCase=\"'date'\" [display]=\"display\" width=\"120px\" [(value)]=\"value\" [display]=\"display\" (valueChange)=\"dateChanged($event)\"\r\n ></spa-date>\r\n\r\n <spa-multi-select class=\"opt\" *ngSwitchCase=\"'multi-select'\" [display]=\"display\" [options]=\"options\" [optionDisplay]=\"optionDisplay\" [optionValue]=\"optionValue\" [(value)]=\"value\" (valueChange)=\"changed()\"\r\n [copyContent]=\"copyContent\" [loadAction]=\"loadAction\"\r\n ></spa-multi-select>\r\n\r\n <spa-multi-text class=\"opt\" *ngSwitchCase=\"'multi-text'\" [display]=\"display\" [options]=\"options\" [optionDisplay]=\"optionDisplay\" [optionValue]=\"optionValue\" [(value)]=\"value\" (valueChange)=\"changed()\"\r\n [copyContent]=\"copyContent\" [loadAction]=\"loadAction\"\r\n ></spa-multi-text>\r\n\r\n <spa-select-lite class=\"opt\" *ngSwitchCase=\"'select'\" [display]=\"display\" [options]=\"options\" [optionDisplay]=\"optionDisplay\" [optionValue]=\"optionValue\" [(value)]=\"value\" (valueChange)=\"changed()\"\r\n [copyContent]=\"copyContent\" [loadAction]=\"loadAction\"\r\n ></spa-select-lite>\r\n\r\n <spa-text class=\"opt\" *ngSwitchDefault [display]=\"display\" (keyup.enter)=\"enterPressed()\" [options]=\"options\" [optionDisplay]=\"optionDisplay\" [optionValue]=\"optionValue\" [(value)]=\"value\" (valueChange)=\"changed()\"\r\n [suffix]=\"suffix\" [copyContent]=\"copyContent\" [loadAction]=\"loadAction\"\r\n ></spa-text>\r\n\r\n </ng-container>\r\n\r\n <button mat-icon-button *ngIf=\"infoMessage\" (click)=\"onInfoClick($event)\" matTooltip=\"Info\" matTooltipPosition=\"above\" style=\"opacity: 1;margin: 0px;padding: 0px;\">\r\n <mat-icon style=\"color: steelblue;font-size: 18px;\">info</mat-icon>\r\n </button>\r\n\r\n</div>\r\n", styles: [".opt{margin-left:5px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i10.TextComponent, selector: "spa-text", inputs: ["readonly", "hint", "display", "placeholder", "value", "format", "type", "rows", "width", "copyContent", "clearContent", "options", "optionDisplay", "optionValue", "loadAction", "required", "min", "max", "regex", "suffix", "infoMessage"], outputs: ["valueChange", "leave", "enterPress"] }, { kind: "component", type: i11.DateComponent, selector: "spa-date", inputs: ["required", "min", "max", "readonly", "hint", "value", "display", "placeholder", "width", "infoMessage"], outputs: ["valueChange", "infoClick"] }, { kind: "component", type: i12.SelectLiteComponent, selector: "spa-select-lite" }, { kind: "component", type: i13.MultiTextComponent, selector: "spa-multi-text", inputs: ["display", "value", "readonly", "required", "hint", "strict", "suffix", "infoMessage", "copyContent", "clearContent", "options", "optionDisplay", "optionValue", "loadAction"], outputs: ["valueChange", "hoverChange"] }, { kind: "component", type: i14.MultiSelectComponent, selector: "spa-multi-select", inputs: ["display", "value", "readonly", "required", "hint", "options", "optionDisplay", "optionValue", "infoMessage", "copyContent", "clearContent", "nullable", "placeholder", "width", "suffix", "loadAction"], outputs: ["valueChange", "hoverChange"] }] });
57
+ OptionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: OptionComponent, selector: "spa-option", inputs: { options: "options", optionValue: "optionValue", optionDisplay: "optionDisplay", readonly: "readonly", type: "type", value: "value", display: "display", show: "show", required: "required", infoMessage: "infoMessage", copyContent: "copyContent", suffix: "suffix", loadAction: "loadAction" }, outputs: { valueChange: "valueChange", enterPress: "enterPress" }, ngImport: i0, template: "\r\n<div class=\"tin-row gap-0\">\r\n\r\n <mat-checkbox color=\"primary\" style=\"margin-right:0px\" [(ngModel)]=\"show\" (change)=\"resetValue()\" labelPosition=\"after\" [disabled]=\"required\" >{{display}}</mat-checkbox>\r\n\r\n <mat-form-field style=\"margin-right:1px;width: 0px;\" >\r\n <input matInput />\r\n </mat-form-field>\r\n\r\n <ng-container *ngIf=\"show\" [ngSwitch]=\"type\" style=\"margin-left: 5px;\">\r\n\r\n <spa-date class=\"opt\" *ngSwitchCase=\"'date'\" [display]=\"display\" width=\"120px\" [(value)]=\"value\" [display]=\"display\" (valueChange)=\"dateChanged($event)\"\r\n ></spa-date>\r\n\r\n <spa-multi-select class=\"opt\" *ngSwitchCase=\"'multi-select'\" [display]=\"display\" [options]=\"options\" [optionDisplay]=\"optionDisplay\" [optionValue]=\"optionValue\" [(value)]=\"value\" (valueChange)=\"changed()\"\r\n [copyContent]=\"copyContent\" [loadAction]=\"loadAction\"\r\n ></spa-multi-select>\r\n\r\n <spa-multi-text class=\"opt\" *ngSwitchCase=\"'multi-text'\" [display]=\"display\" [options]=\"options\" [optionDisplay]=\"optionDisplay\" [optionValue]=\"optionValue\" [(value)]=\"value\" (valueChange)=\"changed()\"\r\n [copyContent]=\"copyContent\" [loadAction]=\"loadAction\"\r\n ></spa-multi-text>\r\n\r\n <spa-select-lite class=\"opt\" *ngSwitchCase=\"'select'\" [display]=\"display\" [options]=\"options\" [optionDisplay]=\"optionDisplay\" [optionValue]=\"optionValue\" [(value)]=\"value\" (valueChange)=\"changed()\"\r\n [copyContent]=\"copyContent\" [loadAction]=\"loadAction\"\r\n ></spa-select-lite>\r\n\r\n <spa-text class=\"opt\" *ngSwitchDefault [display]=\"display\" (keyup.enter)=\"enterPressed()\" [options]=\"options\" [optionDisplay]=\"optionDisplay\" [optionValue]=\"optionValue\" [(value)]=\"value\" (valueChange)=\"changed()\"\r\n [suffix]=\"suffix\" [copyContent]=\"copyContent\" [loadAction]=\"loadAction\"\r\n ></spa-text>\r\n\r\n </ng-container>\r\n\r\n <button mat-icon-button *ngIf=\"infoMessage\" (click)=\"onInfoClick($event)\" matTooltip=\"Info\" matTooltipPosition=\"above\" style=\"opacity: 1;margin: 0px;padding: 0px;\">\r\n <mat-icon style=\"color: steelblue;font-size: 18px;\">info</mat-icon>\r\n </button>\r\n\r\n</div>\r\n", styles: [".opt{margin-left:5px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i10.TextComponent, selector: "spa-text", inputs: ["appearance", "readonly", "hint", "display", "placeholder", "value", "format", "type", "rows", "width", "copyContent", "clearContent", "options", "optionDisplay", "optionValue", "loadAction", "required", "min", "max", "regex", "suffix", "infoMessage"], outputs: ["valueChange", "leave", "enterPress"] }, { kind: "component", type: i11.DateComponent, selector: "spa-date", inputs: ["required", "min", "max", "readonly", "hint", "value", "display", "placeholder", "width", "infoMessage"], outputs: ["valueChange", "infoClick"] }, { kind: "component", type: i12.SelectLiteComponent, selector: "spa-select-lite" }, { kind: "component", type: i13.MultiTextComponent, selector: "spa-multi-text", inputs: ["display", "value", "readonly", "required", "hint", "strict", "suffix", "infoMessage", "copyContent", "clearContent", "options", "optionDisplay", "optionValue", "loadAction"], outputs: ["valueChange", "hoverChange"] }, { kind: "component", type: i14.MultiSelectComponent, selector: "spa-multi-select", inputs: ["display", "value", "readonly", "required", "hint", "options", "optionDisplay", "optionValue", "infoMessage", "copyContent", "clearContent", "nullable", "placeholder", "width", "suffix", "loadAction"], outputs: ["valueChange", "hoverChange"] }] });
58
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OptionComponent, decorators: [{
59
59
  type: Component,
60
60
  args: [{ selector: 'spa-option', template: "\r\n<div class=\"tin-row gap-0\">\r\n\r\n <mat-checkbox color=\"primary\" style=\"margin-right:0px\" [(ngModel)]=\"show\" (change)=\"resetValue()\" labelPosition=\"after\" [disabled]=\"required\" >{{display}}</mat-checkbox>\r\n\r\n <mat-form-field style=\"margin-right:1px;width: 0px;\" >\r\n <input matInput />\r\n </mat-form-field>\r\n\r\n <ng-container *ngIf=\"show\" [ngSwitch]=\"type\" style=\"margin-left: 5px;\">\r\n\r\n <spa-date class=\"opt\" *ngSwitchCase=\"'date'\" [display]=\"display\" width=\"120px\" [(value)]=\"value\" [display]=\"display\" (valueChange)=\"dateChanged($event)\"\r\n ></spa-date>\r\n\r\n <spa-multi-select class=\"opt\" *ngSwitchCase=\"'multi-select'\" [display]=\"display\" [options]=\"options\" [optionDisplay]=\"optionDisplay\" [optionValue]=\"optionValue\" [(value)]=\"value\" (valueChange)=\"changed()\"\r\n [copyContent]=\"copyContent\" [loadAction]=\"loadAction\"\r\n ></spa-multi-select>\r\n\r\n <spa-multi-text class=\"opt\" *ngSwitchCase=\"'multi-text'\" [display]=\"display\" [options]=\"options\" [optionDisplay]=\"optionDisplay\" [optionValue]=\"optionValue\" [(value)]=\"value\" (valueChange)=\"changed()\"\r\n [copyContent]=\"copyContent\" [loadAction]=\"loadAction\"\r\n ></spa-multi-text>\r\n\r\n <spa-select-lite class=\"opt\" *ngSwitchCase=\"'select'\" [display]=\"display\" [options]=\"options\" [optionDisplay]=\"optionDisplay\" [optionValue]=\"optionValue\" [(value)]=\"value\" (valueChange)=\"changed()\"\r\n [copyContent]=\"copyContent\" [loadAction]=\"loadAction\"\r\n ></spa-select-lite>\r\n\r\n <spa-text class=\"opt\" *ngSwitchDefault [display]=\"display\" (keyup.enter)=\"enterPressed()\" [options]=\"options\" [optionDisplay]=\"optionDisplay\" [optionValue]=\"optionValue\" [(value)]=\"value\" (valueChange)=\"changed()\"\r\n [suffix]=\"suffix\" [copyContent]=\"copyContent\" [loadAction]=\"loadAction\"\r\n ></spa-text>\r\n\r\n </ng-container>\r\n\r\n <button mat-icon-button *ngIf=\"infoMessage\" (click)=\"onInfoClick($event)\" matTooltip=\"Info\" matTooltipPosition=\"above\" style=\"opacity: 1;margin: 0px;padding: 0px;\">\r\n <mat-icon style=\"color: steelblue;font-size: 18px;\">info</mat-icon>\r\n </button>\r\n\r\n</div>\r\n", styles: [".opt{margin-left:5px}\n"] }]
@@ -45,8 +45,10 @@ export class SelectComponent extends SelectCommonComponent {
45
45
  event.stopPropagation();
46
46
  if (this.detailsConfig) {
47
47
  const dynamicData = mode === 'create' ? {} : { [this.detailsConfig.heroField]: this.value };
48
- this.dialogService.openConfiguredDetailsDialog(mode, dynamicData, this.detailsConfig, DetailsDialogInternal).subscribe(result => {
49
- console.log(result);
48
+ let button = this.detailsConfig.buttons.find(b => b.name === mode);
49
+ button.detailsConfig = this.detailsConfig;
50
+ this.dialogService.openConfiguredDetailsDialog(button, dynamicData, DetailsDialogInternal).subscribe(result => {
51
+ // console.log(result);
50
52
  if (result.message === 'success') {
51
53
  this.refresh(event);
52
54
  }
@@ -65,4 +67,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
65
67
  }], ctorParameters: function () { return [{ type: i1.MessageService }, { type: i2.DataServiceLib }, { type: i3.DialogService }, { type: i4.ButtonService }]; }, propDecorators: { detailsConfig: [{
66
68
  type: Input
67
69
  }] } });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixLQUFLLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBSS9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7OztBQVMzRixNQUFNLE9BQU8sZUFBZ0IsU0FBUSxxQkFBcUI7SUFFeEQsWUFDcUIsY0FBOEIsRUFBcUIsV0FBMkIsRUFDekYsYUFBNEIsRUFBVSxhQUE0QjtRQUcxRSxLQUFLLENBQUMsY0FBYyxFQUFDLFdBQVcsQ0FBQyxDQUFDO1FBSmYsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQXFCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUN6RixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBSTVFLENBQUM7SUFNRCxhQUFhLENBQUMsU0FBa0I7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDL0MsTUFBTSxZQUFZLEdBQVksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztRQUN4RixNQUFNLGNBQWMsR0FBaUIsRUFBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUMsQ0FBQztRQUNqRixPQUFPLFlBQVksSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBSztJQUNsSyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU87WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQyxJQUFJLFVBQVUsR0FBWSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZix3Q0FBd0M7WUFDeEMsVUFBVSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsTUFBTSxjQUFjLEdBQWdCLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEYsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBaUIsRUFBRSxJQUF1QjtRQUNwRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLE1BQU0sV0FBVyxHQUFHLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRTVGLElBQUksQ0FBQyxhQUFhLENBQUMsMkJBQTJCLENBQzVDLElBQUksRUFDSixXQUFXLEVBQ1gsSUFBSSxDQUFDLGFBQWEsRUFDbEIscUJBQXFCLENBQ3RCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVwQixJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFDO29CQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNyQjtZQUVILENBQUMsQ0FBQyxDQUFDO1NBRUo7YUFBTTtZQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDdkQ7SUFDSCxDQUFDOzs0R0E1RFUsZUFBZTtnR0FBZixlQUFlLHFIQ2Q1Qiw0M0NBaUJBOzJGREhhLGVBQWU7a0JBTDNCLFNBQVM7K0JBQ0UsWUFBWTswTEFjYixhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyAgQWN0aW9uLCBBcGlSZXNwb25zZSwgQnV0dG9uLCBEZXRhaWxzRGlhbG9nQ29uZmlnLCBUYWJsZUNvbmZpZyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2VsZWN0Q29tbW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0LWNvbW1vbi9zZWxlY3QtY29tbW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERldGFpbHNEaWFsb2dJbnRlcm5hbCB9IGZyb20gJy4uL3RhYmxlLWludGVybmFsL2RldGFpbHNEaWFsb2ctaW50ZXJuYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2VMaWIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhbGliLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCdXR0b25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnV0dG9uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcGEtc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBTZWxlY3RDb21tb25Db21wb25lbnQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsIHByb3RlY3RlZCBvdmVycmlkZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2VMaWIsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsIHByaXZhdGUgYnV0dG9uU2VydmljZTogQnV0dG9uU2VydmljZSAsXHJcblxyXG4gICkge1xyXG4gICAgc3VwZXIobWVzc2FnZVNlcnZpY2UsZGF0YVNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZGV0YWlsc0NvbmZpZzogRGV0YWlsc0RpYWxvZ0NvbmZpZztcclxuXHJcblxyXG5cclxuICBvbkhvdmVyQ2hhbmdlKGlzSG92ZXJlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc0hvdmVyZWQgPSBpc0hvdmVyZWQ7XHJcbiAgfVxyXG5cclxuICBjYW5DcmVhdGUoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZGV0YWlsc0NvbmZpZz8uYnV0dG9ucykgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgY3JlYXRlQnV0dG9uIDogQnV0dG9uID0gdGhpcy5kZXRhaWxzQ29uZmlnLmJ1dHRvbnMuZmluZChiID0+IGIubmFtZSA9PT0gJ2NyZWF0ZScpO1xyXG4gICAgY29uc3QgdG1wVGFibGVDb25maWcgOiBUYWJsZUNvbmZpZyA9IHtmb3JtQ29uZmlnOiB0aGlzLmRldGFpbHNDb25maWcuZm9ybUNvbmZpZ307XHJcbiAgICByZXR1cm4gY3JlYXRlQnV0dG9uICYmICghY3JlYXRlQnV0dG9uLmRpc2FibGVkIHx8ICFjcmVhdGVCdXR0b24uZGlzYWJsZWQodGhpcy52YWx1ZSkpICYmIHRoaXMuYnV0dG9uU2VydmljZS50ZXN0VmlzaWJsZShjcmVhdGVCdXR0b24sIG51bGwsIHRtcFRhYmxlQ29uZmlnKSAgICA7XHJcbiAgfVxyXG5cclxuICBjYW5WaWV3KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmRldGFpbHNDb25maWc/LmJ1dHRvbnMpIHJldHVybiBmYWxzZTtcclxuICAgIGxldCB2aWV3QnV0dG9uIDogQnV0dG9uID0gdGhpcy5kZXRhaWxzQ29uZmlnLmJ1dHRvbnMuZmluZChiID0+IGIubmFtZSA9PT0gJ3ZpZXcnKTtcclxuICAgIGlmICghdmlld0J1dHRvbikge1xyXG4gICAgICAvLyBBZGQgZGVmYXVsdCB2aWV3IGJ1dHRvbiBpZiBub3QgZXhpc3RzXHJcbiAgICAgIHZpZXdCdXR0b24gPSB7IG5hbWU6ICd2aWV3JywgZGlhbG9nOiB0cnVlIH07XHJcbiAgICAgIHRoaXMuZGV0YWlsc0NvbmZpZy5idXR0b25zLnB1c2godmlld0J1dHRvbik7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0bXBUYWJsZUNvbmZpZzogVGFibGVDb25maWcgPSB7IGZvcm1Db25maWc6IHRoaXMuZGV0YWlsc0NvbmZpZy5mb3JtQ29uZmlnIH07XHJcbiAgICByZXR1cm4gdGhpcy52YWx1ZSAmJiB2aWV3QnV0dG9uICYmIHRoaXMuYnV0dG9uU2VydmljZS50ZXN0VmlzaWJsZSh2aWV3QnV0dG9uLCBudWxsLCB0bXBUYWJsZUNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBvblBlZWtDbGljayhldmVudDogTW91c2VFdmVudCwgbW9kZTogJ2NyZWF0ZScgfCAndmlldycpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGlmICh0aGlzLmRldGFpbHNDb25maWcpIHtcclxuICAgICAgY29uc3QgZHluYW1pY0RhdGEgPSBtb2RlID09PSAnY3JlYXRlJyA/IHt9IDogeyBbdGhpcy5kZXRhaWxzQ29uZmlnLmhlcm9GaWVsZF06IHRoaXMudmFsdWUgfTtcclxuXHJcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuQ29uZmlndXJlZERldGFpbHNEaWFsb2coXHJcbiAgICAgICAgbW9kZSxcclxuICAgICAgICBkeW5hbWljRGF0YSxcclxuICAgICAgICB0aGlzLmRldGFpbHNDb25maWcsXHJcbiAgICAgICAgRGV0YWlsc0RpYWxvZ0ludGVybmFsXHJcbiAgICAgICkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdC5tZXNzYWdlID09PSAnc3VjY2Vzcycpe1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoKGV2ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGVlayBjb25maWd1cmF0aW9uIGVycm9yXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxufVxyXG5cclxuIiwiPHNwYS1zZWxlY3QtY29tbW9uIFt3aWR0aF09XCJ3aWR0aFwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtkZWZhdWx0Rmlyc3RWYWx1ZV09XCJkZWZhdWx0Rmlyc3RWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHlNb2RlXT1cInJlYWRvbmx5TW9kZVwiIFtoaW50XT1cImhpbnRcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgW2Rpc3BsYXldPVwiZGlzcGxheVwiIFsodmFsdWUpXT1cInZhbHVlXCIgW29wdGlvbnNdPVwib3B0aW9uc1wiIFttYXN0ZXJPcHRpb25zXT1cIm1hc3Rlck9wdGlvbnNcIiBbbWFzdGVyRmllbGRdPVwibWFzdGVyRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXT1cIm9wdGlvblZhbHVlXCIgW29wdGlvbkRpc3BsYXldPVwib3B0aW9uRGlzcGxheVwiIFtvcHRpb25EaXNwbGF5RXh0cmFdPVwib3B0aW9uRGlzcGxheUV4dHJhXCJcclxuICAgICAgICAgICAgICAgICAgIFtudWxsYWJsZV09XCJudWxsYWJsZVwiIFtpbmZvTWVzc2FnZV09XCJpbmZvTWVzc2FnZVwiIFtjb3B5Q29udGVudF09XCJjb3B5Q29udGVudFwiIFtsb2FkQWN0aW9uXT1cImxvYWRBY3Rpb25cIiBbZmllbGRdPVwiZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInZhbHVlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAoaG92ZXJDaGFuZ2UpPVwib25Ib3ZlckNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgPG5nLWNvbnRhaW5lciBhZGRpdGlvbmFsQnV0dG9ucz5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiZGV0YWlsc0NvbmZpZyAmJiBjYW5DcmVhdGUoKSAmJiBpc0hvdmVyZWRcIiAoY2xpY2spPVwib25QZWVrQ2xpY2soJGV2ZW50LCAnY3JlYXRlJylcIiBtYXRUb29sdGlwPVwiQWRkXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgPG1hdC1pY29uIHN0eWxlPVwiY29sb3I6IGdyZWVuO1wiPmFkZDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiZGV0YWlsc0NvbmZpZyAmJiBjYW5WaWV3KCkgJiYgaXNIb3ZlcmVkICYmIHZhbHVlXCIgKGNsaWNrKT1cIm9uUGVla0NsaWNrKCRldmVudCwgJ3ZpZXcnKVwiIG1hdFRvb2x0aXA9XCJWaWV3XCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPmxhdW5jaDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvc3BhLXNlbGVjdC1jb21tb24+XHJcbiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixLQUFLLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBSS9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7OztBQVMzRixNQUFNLE9BQU8sZUFBZ0IsU0FBUSxxQkFBcUI7SUFFeEQsWUFDcUIsY0FBOEIsRUFBcUIsV0FBMkIsRUFDekYsYUFBNEIsRUFBVSxhQUE0QjtRQUcxRSxLQUFLLENBQUMsY0FBYyxFQUFDLFdBQVcsQ0FBQyxDQUFDO1FBSmYsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQXFCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUN6RixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBSTVFLENBQUM7SUFNRCxhQUFhLENBQUMsU0FBa0I7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDL0MsTUFBTSxZQUFZLEdBQVksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztRQUN4RixNQUFNLGNBQWMsR0FBaUIsRUFBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUMsQ0FBQztRQUNqRixPQUFPLFlBQVksSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBSztJQUNsSyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU87WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQyxJQUFJLFVBQVUsR0FBWSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZix3Q0FBd0M7WUFDeEMsVUFBVSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsTUFBTSxjQUFjLEdBQWdCLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEYsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBaUIsRUFBRSxJQUF1QjtRQUNwRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLE1BQU0sV0FBVyxHQUFHLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRTVGLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDbkUsTUFBTSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBRTFDLElBQUksQ0FBQyxhQUFhLENBQUMsMkJBQTJCLENBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsQ0FBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDOUcsdUJBQXVCO2dCQUV2QixJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFDO29CQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNyQjtZQUVILENBQUMsQ0FBQyxDQUFDO1NBRUo7YUFBTTtZQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDdkQ7SUFDSCxDQUFDOzs0R0ExRFUsZUFBZTtnR0FBZixlQUFlLHFIQ2Q1Qiw0M0NBaUJBOzJGREhhLGVBQWU7a0JBTDNCLFNBQVM7K0JBQ0UsWUFBWTswTEFjYixhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyAgQWN0aW9uLCBBcGlSZXNwb25zZSwgQnV0dG9uLCBEZXRhaWxzRGlhbG9nQ29uZmlnLCBUYWJsZUNvbmZpZyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2VsZWN0Q29tbW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0LWNvbW1vbi9zZWxlY3QtY29tbW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERldGFpbHNEaWFsb2dJbnRlcm5hbCB9IGZyb20gJy4uL3RhYmxlLWludGVybmFsL2RldGFpbHNEaWFsb2ctaW50ZXJuYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2VMaWIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhbGliLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCdXR0b25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnV0dG9uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcGEtc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBTZWxlY3RDb21tb25Db21wb25lbnQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsIHByb3RlY3RlZCBvdmVycmlkZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2VMaWIsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsIHByaXZhdGUgYnV0dG9uU2VydmljZTogQnV0dG9uU2VydmljZSAsXHJcblxyXG4gICkge1xyXG4gICAgc3VwZXIobWVzc2FnZVNlcnZpY2UsZGF0YVNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZGV0YWlsc0NvbmZpZzogRGV0YWlsc0RpYWxvZ0NvbmZpZztcclxuXHJcblxyXG5cclxuICBvbkhvdmVyQ2hhbmdlKGlzSG92ZXJlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc0hvdmVyZWQgPSBpc0hvdmVyZWQ7XHJcbiAgfVxyXG5cclxuICBjYW5DcmVhdGUoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZGV0YWlsc0NvbmZpZz8uYnV0dG9ucykgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgY3JlYXRlQnV0dG9uIDogQnV0dG9uID0gdGhpcy5kZXRhaWxzQ29uZmlnLmJ1dHRvbnMuZmluZChiID0+IGIubmFtZSA9PT0gJ2NyZWF0ZScpO1xyXG4gICAgY29uc3QgdG1wVGFibGVDb25maWcgOiBUYWJsZUNvbmZpZyA9IHtmb3JtQ29uZmlnOiB0aGlzLmRldGFpbHNDb25maWcuZm9ybUNvbmZpZ307XHJcbiAgICByZXR1cm4gY3JlYXRlQnV0dG9uICYmICghY3JlYXRlQnV0dG9uLmRpc2FibGVkIHx8ICFjcmVhdGVCdXR0b24uZGlzYWJsZWQodGhpcy52YWx1ZSkpICYmIHRoaXMuYnV0dG9uU2VydmljZS50ZXN0VmlzaWJsZShjcmVhdGVCdXR0b24sIG51bGwsIHRtcFRhYmxlQ29uZmlnKSAgICA7XHJcbiAgfVxyXG5cclxuICBjYW5WaWV3KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmRldGFpbHNDb25maWc/LmJ1dHRvbnMpIHJldHVybiBmYWxzZTtcclxuICAgIGxldCB2aWV3QnV0dG9uIDogQnV0dG9uID0gdGhpcy5kZXRhaWxzQ29uZmlnLmJ1dHRvbnMuZmluZChiID0+IGIubmFtZSA9PT0gJ3ZpZXcnKTtcclxuICAgIGlmICghdmlld0J1dHRvbikge1xyXG4gICAgICAvLyBBZGQgZGVmYXVsdCB2aWV3IGJ1dHRvbiBpZiBub3QgZXhpc3RzXHJcbiAgICAgIHZpZXdCdXR0b24gPSB7IG5hbWU6ICd2aWV3JywgZGlhbG9nOiB0cnVlIH07XHJcbiAgICAgIHRoaXMuZGV0YWlsc0NvbmZpZy5idXR0b25zLnB1c2godmlld0J1dHRvbik7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0bXBUYWJsZUNvbmZpZzogVGFibGVDb25maWcgPSB7IGZvcm1Db25maWc6IHRoaXMuZGV0YWlsc0NvbmZpZy5mb3JtQ29uZmlnIH07XHJcbiAgICByZXR1cm4gdGhpcy52YWx1ZSAmJiB2aWV3QnV0dG9uICYmIHRoaXMuYnV0dG9uU2VydmljZS50ZXN0VmlzaWJsZSh2aWV3QnV0dG9uLCBudWxsLCB0bXBUYWJsZUNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBvblBlZWtDbGljayhldmVudDogTW91c2VFdmVudCwgbW9kZTogJ2NyZWF0ZScgfCAndmlldycpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGlmICh0aGlzLmRldGFpbHNDb25maWcpIHtcclxuICAgICAgY29uc3QgZHluYW1pY0RhdGEgPSBtb2RlID09PSAnY3JlYXRlJyA/IHt9IDogeyBbdGhpcy5kZXRhaWxzQ29uZmlnLmhlcm9GaWVsZF06IHRoaXMudmFsdWUgfTtcclxuXHJcbiAgICAgIGxldCBidXR0b24gPSB0aGlzLmRldGFpbHNDb25maWcuYnV0dG9ucy5maW5kKGIgPT4gYi5uYW1lID09PSBtb2RlKTtcclxuICAgICAgYnV0dG9uLmRldGFpbHNDb25maWcgPSB0aGlzLmRldGFpbHNDb25maWc7XHJcblxyXG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkNvbmZpZ3VyZWREZXRhaWxzRGlhbG9nKCBidXR0b24sIGR5bmFtaWNEYXRhLCBEZXRhaWxzRGlhbG9nSW50ZXJuYWwgKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0Lm1lc3NhZ2UgPT09ICdzdWNjZXNzJyl7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2goZXZlbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJQZWVrIGNvbmZpZ3VyYXRpb24gZXJyb3JcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG59XHJcblxyXG4iLCI8c3BhLXNlbGVjdC1jb21tb24gW3dpZHRoXT1cIndpZHRoXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCIgW2RlZmF1bHRGaXJzdFZhbHVlXT1cImRlZmF1bHRGaXJzdFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgIFtyZWFkb25seU1vZGVdPVwicmVhZG9ubHlNb2RlXCIgW2hpbnRdPVwiaGludFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbZGlzcGxheV09XCJkaXNwbGF5XCIgWyh2YWx1ZSldPVwidmFsdWVcIiBbb3B0aW9uc109XCJvcHRpb25zXCIgW21hc3Rlck9wdGlvbnNdPVwibWFzdGVyT3B0aW9uc1wiIFttYXN0ZXJGaWVsZF09XCJtYXN0ZXJGaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwib3B0aW9uVmFsdWVcIiBbb3B0aW9uRGlzcGxheV09XCJvcHRpb25EaXNwbGF5XCIgW29wdGlvbkRpc3BsYXlFeHRyYV09XCJvcHRpb25EaXNwbGF5RXh0cmFcIlxyXG4gICAgICAgICAgICAgICAgICAgW251bGxhYmxlXT1cIm51bGxhYmxlXCIgW2luZm9NZXNzYWdlXT1cImluZm9NZXNzYWdlXCIgW2NvcHlDb250ZW50XT1cImNvcHlDb250ZW50XCIgW2xvYWRBY3Rpb25dPVwibG9hZEFjdGlvblwiIFtmaWVsZF09XCJmaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwidmFsdWVDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgIChob3ZlckNoYW5nZSk9XCJvbkhvdmVyQ2hhbmdlKCRldmVudClcIj5cclxuICA8bmctY29udGFpbmVyIGFkZGl0aW9uYWxCdXR0b25zPlxyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCJkZXRhaWxzQ29uZmlnICYmIGNhbkNyZWF0ZSgpICYmIGlzSG92ZXJlZFwiIChjbGljayk9XCJvblBlZWtDbGljaygkZXZlbnQsICdjcmVhdGUnKVwiIG1hdFRvb2x0aXA9XCJBZGRcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiPlxyXG4gICAgICA8bWF0LWljb24gc3R5bGU9XCJjb2xvcjogZ3JlZW47XCI+YWRkPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCJkZXRhaWxzQ29uZmlnICYmIGNhblZpZXcoKSAmJiBpc0hvdmVyZWQgJiYgdmFsdWVcIiAoY2xpY2spPVwib25QZWVrQ2xpY2soJGV2ZW50LCAndmlldycpXCIgbWF0VG9vbHRpcD1cIlZpZXdcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiPlxyXG4gICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+bGF1bmNoPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9zcGEtc2VsZWN0LWNvbW1vbj5cclxuIl19
@@ -45,7 +45,9 @@ export class SelectInternalComponent extends SelectCommonComponent {
45
45
  event.stopPropagation();
46
46
  if (this.detailsConfig) {
47
47
  const dynamicData = mode === 'create' ? {} : { [this.detailsConfig.heroField]: this.value };
48
- this.dialogService.openConfiguredDetailsDialog(mode, dynamicData, this.detailsConfig, DetailsDialogLite).subscribe(result => {
48
+ let button = this.detailsConfig.buttons.find(b => b.name === mode);
49
+ button.detailsConfig = this.detailsConfig;
50
+ this.dialogService.openConfiguredDetailsDialog(button, dynamicData, DetailsDialogLite).subscribe(result => {
49
51
  console.log(result);
50
52
  if (result.message === 'success') {
51
53
  this.refresh(event);
@@ -65,4 +67,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
65
67
  }], ctorParameters: function () { return [{ type: i1.MessageService }, { type: i2.DataServiceLib }, { type: i3.DialogService }, { type: i4.ButtonService }]; }, propDecorators: { detailsConfig: [{
66
68
  type: Input
67
69
  }] } });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWludGVybmFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1pbnRlcm5hbC9zZWxlY3QtaW50ZXJuYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0LWludGVybmFsL3NlbGVjdC1pbnRlcm5hbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixLQUFLLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBSS9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7Ozs7Ozs7OztBQVEvRSxNQUFNLE9BQU8sdUJBQXdCLFNBQVEscUJBQXFCO0lBQ2hFLFlBQ3FCLGNBQThCLEVBQXFCLFdBQTJCLEVBQ3pGLGFBQTRCLEVBQVUsYUFBNEI7UUFHMUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUpoQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBcUIsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQ3pGLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7SUFJNUUsQ0FBQztJQU1ELGFBQWEsQ0FBQyxTQUFrQjtRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU87WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQyxNQUFNLFlBQVksR0FBVyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZGLE1BQU0sY0FBYyxHQUFnQixFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xGLE9BQU8sWUFBWSxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzlKLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQy9DLElBQUksVUFBVSxHQUFXLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLHdDQUF3QztZQUN4QyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDN0M7UUFDRCxNQUFNLGNBQWMsR0FBZ0IsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsRixPQUFPLElBQUksQ0FBQyxLQUFLLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFpQixFQUFFLElBQXVCO1FBQ3BELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFNUYsSUFBSSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsQ0FDNUMsSUFBSSxFQUNKLFdBQVcsRUFDWCxJQUFJLENBQUMsYUFBYSxFQUNsQixpQkFBaUIsQ0FDbEIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBRXBCLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7b0JBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3JCO1lBRUgsQ0FBQyxDQUFDLENBQUM7U0FFSjthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztTQUN2RDtJQUNILENBQUM7O29IQTNEVSx1QkFBdUI7d0dBQXZCLHVCQUF1Qiw4SENkcEMsNDNDQWlCQTsyRkRIYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCOzBMQWF0QixhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3Rpb24sIEFwaVJlc3BvbnNlLCBCdXR0b24sIERldGFpbHNEaWFsb2dDb25maWcsIFRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZWxlY3RDb21tb25Db21wb25lbnQgfSBmcm9tICcuLi9zZWxlY3QtY29tbW9uL3NlbGVjdC1jb21tb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2VMaWIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhbGliLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEZXRhaWxzRGlhbG9nTGl0ZSB9IGZyb20gJy4uL3RhYmxlLWxpdGUvZGV0YWlsc0RpYWxvZy1saXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJ1dHRvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idXR0b24uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NwYS1zZWxlY3QtaW50ZXJuYWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtaW50ZXJuYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC1pbnRlcm5hbC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFNlbGVjdEludGVybmFsQ29tcG9uZW50IGV4dGVuZHMgU2VsZWN0Q29tbW9uQ29tcG9uZW50IHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsIHByb3RlY3RlZCBvdmVycmlkZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2VMaWIsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsIHByaXZhdGUgYnV0dG9uU2VydmljZTogQnV0dG9uU2VydmljZSxcclxuXHJcbiAgKSB7XHJcbiAgICBzdXBlcihtZXNzYWdlU2VydmljZSwgZGF0YVNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZGV0YWlsc0NvbmZpZzogRGV0YWlsc0RpYWxvZ0NvbmZpZztcclxuXHJcblxyXG5cclxuICBvbkhvdmVyQ2hhbmdlKGlzSG92ZXJlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc0hvdmVyZWQgPSBpc0hvdmVyZWQ7XHJcbiAgfVxyXG5cclxuICBjYW5DcmVhdGUoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZGV0YWlsc0NvbmZpZz8uYnV0dG9ucykgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgY3JlYXRlQnV0dG9uOiBCdXR0b24gPSB0aGlzLmRldGFpbHNDb25maWcuYnV0dG9ucy5maW5kKGIgPT4gYi5uYW1lID09PSAnY3JlYXRlJyk7XHJcbiAgICBjb25zdCB0bXBUYWJsZUNvbmZpZzogVGFibGVDb25maWcgPSB7IGZvcm1Db25maWc6IHRoaXMuZGV0YWlsc0NvbmZpZy5mb3JtQ29uZmlnIH07XHJcbiAgICByZXR1cm4gY3JlYXRlQnV0dG9uICYmICghY3JlYXRlQnV0dG9uLmRpc2FibGVkIHx8ICFjcmVhdGVCdXR0b24uZGlzYWJsZWQodGhpcy52YWx1ZSkpICYmIHRoaXMuYnV0dG9uU2VydmljZS50ZXN0VmlzaWJsZShjcmVhdGVCdXR0b24sIG51bGwsIHRtcFRhYmxlQ29uZmlnKTtcclxuICB9XHJcblxyXG4gIGNhblZpZXcoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZGV0YWlsc0NvbmZpZz8uYnV0dG9ucykgcmV0dXJuIGZhbHNlO1xyXG4gICAgbGV0IHZpZXdCdXR0b246IEJ1dHRvbiA9IHRoaXMuZGV0YWlsc0NvbmZpZy5idXR0b25zLmZpbmQoYiA9PiBiLm5hbWUgPT09ICd2aWV3Jyk7XHJcbiAgICBpZiAoIXZpZXdCdXR0b24pIHtcclxuICAgICAgLy8gQWRkIGRlZmF1bHQgdmlldyBidXR0b24gaWYgbm90IGV4aXN0c1xyXG4gICAgICB2aWV3QnV0dG9uID0geyBuYW1lOiAndmlldycsIGRpYWxvZzogdHJ1ZSB9O1xyXG4gICAgICB0aGlzLmRldGFpbHNDb25maWcuYnV0dG9ucy5wdXNoKHZpZXdCdXR0b24pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdG1wVGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0geyBmb3JtQ29uZmlnOiB0aGlzLmRldGFpbHNDb25maWcuZm9ybUNvbmZpZyB9O1xyXG4gICAgcmV0dXJuIHRoaXMudmFsdWUgJiYgdmlld0J1dHRvbiAmJiB0aGlzLmJ1dHRvblNlcnZpY2UudGVzdFZpc2libGUodmlld0J1dHRvbiwgbnVsbCwgdG1wVGFibGVDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgb25QZWVrQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIG1vZGU6ICdjcmVhdGUnIHwgJ3ZpZXcnKTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBpZiAodGhpcy5kZXRhaWxzQ29uZmlnKSB7XHJcbiAgICAgIGNvbnN0IGR5bmFtaWNEYXRhID0gbW9kZSA9PT0gJ2NyZWF0ZScgPyB7fSA6IHsgW3RoaXMuZGV0YWlsc0NvbmZpZy5oZXJvRmllbGRdOiB0aGlzLnZhbHVlIH07XHJcblxyXG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkNvbmZpZ3VyZWREZXRhaWxzRGlhbG9nKFxyXG4gICAgICAgIG1vZGUsXHJcbiAgICAgICAgZHluYW1pY0RhdGEsXHJcbiAgICAgICAgdGhpcy5kZXRhaWxzQ29uZmlnLFxyXG4gICAgICAgIERldGFpbHNEaWFsb2dMaXRlXHJcbiAgICAgICkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdC5tZXNzYWdlID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaChldmVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlBlZWsgY29uZmlndXJhdGlvbiBlcnJvclwiKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPHNwYS1zZWxlY3QtY29tbW9uIFt3aWR0aF09XCJ3aWR0aFwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtkZWZhdWx0Rmlyc3RWYWx1ZV09XCJkZWZhdWx0Rmlyc3RWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHlNb2RlXT1cInJlYWRvbmx5TW9kZVwiIFtoaW50XT1cImhpbnRcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgW2Rpc3BsYXldPVwiZGlzcGxheVwiIFsodmFsdWUpXT1cInZhbHVlXCIgW29wdGlvbnNdPVwib3B0aW9uc1wiIFttYXN0ZXJPcHRpb25zXT1cIm1hc3Rlck9wdGlvbnNcIiBbbWFzdGVyRmllbGRdPVwibWFzdGVyRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXT1cIm9wdGlvblZhbHVlXCIgW29wdGlvbkRpc3BsYXldPVwib3B0aW9uRGlzcGxheVwiIFtvcHRpb25EaXNwbGF5RXh0cmFdPVwib3B0aW9uRGlzcGxheUV4dHJhXCJcclxuICAgICAgICAgICAgICAgICAgIFtudWxsYWJsZV09XCJudWxsYWJsZVwiIFtpbmZvTWVzc2FnZV09XCJpbmZvTWVzc2FnZVwiIFtjb3B5Q29udGVudF09XCJjb3B5Q29udGVudFwiIFtsb2FkQWN0aW9uXT1cImxvYWRBY3Rpb25cIiBbZmllbGRdPVwiZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInZhbHVlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAoaG92ZXJDaGFuZ2UpPVwib25Ib3ZlckNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgPG5nLWNvbnRhaW5lciBhZGRpdGlvbmFsQnV0dG9ucz5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiZGV0YWlsc0NvbmZpZyAmJiBjYW5DcmVhdGUoKSAmJiBpc0hvdmVyZWRcIiAoY2xpY2spPVwib25QZWVrQ2xpY2soJGV2ZW50LCAnY3JlYXRlJylcIiBtYXRUb29sdGlwPVwiQWRkXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgPG1hdC1pY29uIHN0eWxlPVwiY29sb3I6IGdyZWVuO1wiPmFkZDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiZGV0YWlsc0NvbmZpZyAmJiBjYW5WaWV3KCkgJiYgaXNIb3ZlcmVkICYmIHZhbHVlXCIgKGNsaWNrKT1cIm9uUGVla0NsaWNrKCRldmVudCwgJ3ZpZXcnKVwiIG1hdFRvb2x0aXA9XCJWaWV3XCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPmxhdW5jaDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvc3BhLXNlbGVjdC1jb21tb24+XHJcbiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWludGVybmFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1pbnRlcm5hbC9zZWxlY3QtaW50ZXJuYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0LWludGVybmFsL3NlbGVjdC1pbnRlcm5hbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixLQUFLLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBSS9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7Ozs7Ozs7OztBQVEvRSxNQUFNLE9BQU8sdUJBQXdCLFNBQVEscUJBQXFCO0lBQ2hFLFlBQ3FCLGNBQThCLEVBQXFCLFdBQTJCLEVBQ3pGLGFBQTRCLEVBQVUsYUFBNEI7UUFHMUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUpoQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBcUIsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQ3pGLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7SUFJNUUsQ0FBQztJQU1ELGFBQWEsQ0FBQyxTQUFrQjtRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU87WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQyxNQUFNLFlBQVksR0FBVyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZGLE1BQU0sY0FBYyxHQUFnQixFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xGLE9BQU8sWUFBWSxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzlKLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQy9DLElBQUksVUFBVSxHQUFXLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLHdDQUF3QztZQUN4QyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDN0M7UUFDRCxNQUFNLGNBQWMsR0FBZ0IsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsRixPQUFPLElBQUksQ0FBQyxLQUFLLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFpQixFQUFFLElBQXVCO1FBQ3BELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFNUYsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNuRSxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFFMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixDQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUMxRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVwQixJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO29CQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNyQjtZQUVILENBQUMsQ0FBQyxDQUFDO1NBRUo7YUFBTTtZQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDdkQ7SUFDSCxDQUFDOztvSEF6RFUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsOEhDZHBDLDQzQ0FpQkE7MkZESGEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQjswTEFhdEIsYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aW9uLCBBcGlSZXNwb25zZSwgQnV0dG9uLCBEZXRhaWxzRGlhbG9nQ29uZmlnLCBUYWJsZUNvbmZpZyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2VsZWN0Q29tbW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0LWNvbW1vbi9zZWxlY3QtY29tbW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGV0YWlsc0RpYWxvZ0xpdGUgfSBmcm9tICcuLi90YWJsZS1saXRlL2RldGFpbHNEaWFsb2ctbGl0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCdXR0b25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnV0dG9uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcGEtc2VsZWN0LWludGVybmFsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LWludGVybmFsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QtaW50ZXJuYWwuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RJbnRlcm5hbENvbXBvbmVudCBleHRlbmRzIFNlbGVjdENvbW1vbkNvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLCBwcm90ZWN0ZWQgb3ZlcnJpZGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlTGliLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLCBwcml2YXRlIGJ1dHRvblNlcnZpY2U6IEJ1dHRvblNlcnZpY2UsXHJcblxyXG4gICkge1xyXG4gICAgc3VwZXIobWVzc2FnZVNlcnZpY2UsIGRhdGFTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGRldGFpbHNDb25maWc6IERldGFpbHNEaWFsb2dDb25maWc7XHJcblxyXG5cclxuXHJcbiAgb25Ib3ZlckNoYW5nZShpc0hvdmVyZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNIb3ZlcmVkID0gaXNIb3ZlcmVkO1xyXG4gIH1cclxuXHJcbiAgY2FuQ3JlYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmRldGFpbHNDb25maWc/LmJ1dHRvbnMpIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IGNyZWF0ZUJ1dHRvbjogQnV0dG9uID0gdGhpcy5kZXRhaWxzQ29uZmlnLmJ1dHRvbnMuZmluZChiID0+IGIubmFtZSA9PT0gJ2NyZWF0ZScpO1xyXG4gICAgY29uc3QgdG1wVGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0geyBmb3JtQ29uZmlnOiB0aGlzLmRldGFpbHNDb25maWcuZm9ybUNvbmZpZyB9O1xyXG4gICAgcmV0dXJuIGNyZWF0ZUJ1dHRvbiAmJiAoIWNyZWF0ZUJ1dHRvbi5kaXNhYmxlZCB8fCAhY3JlYXRlQnV0dG9uLmRpc2FibGVkKHRoaXMudmFsdWUpKSAmJiB0aGlzLmJ1dHRvblNlcnZpY2UudGVzdFZpc2libGUoY3JlYXRlQnV0dG9uLCBudWxsLCB0bXBUYWJsZUNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBjYW5WaWV3KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmRldGFpbHNDb25maWc/LmJ1dHRvbnMpIHJldHVybiBmYWxzZTtcclxuICAgIGxldCB2aWV3QnV0dG9uOiBCdXR0b24gPSB0aGlzLmRldGFpbHNDb25maWcuYnV0dG9ucy5maW5kKGIgPT4gYi5uYW1lID09PSAndmlldycpO1xyXG4gICAgaWYgKCF2aWV3QnV0dG9uKSB7XHJcbiAgICAgIC8vIEFkZCBkZWZhdWx0IHZpZXcgYnV0dG9uIGlmIG5vdCBleGlzdHNcclxuICAgICAgdmlld0J1dHRvbiA9IHsgbmFtZTogJ3ZpZXcnLCBkaWFsb2c6IHRydWUgfTtcclxuICAgICAgdGhpcy5kZXRhaWxzQ29uZmlnLmJ1dHRvbnMucHVzaCh2aWV3QnV0dG9uKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRtcFRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyA9IHsgZm9ybUNvbmZpZzogdGhpcy5kZXRhaWxzQ29uZmlnLmZvcm1Db25maWcgfTtcclxuICAgIHJldHVybiB0aGlzLnZhbHVlICYmIHZpZXdCdXR0b24gJiYgdGhpcy5idXR0b25TZXJ2aWNlLnRlc3RWaXNpYmxlKHZpZXdCdXR0b24sIG51bGwsIHRtcFRhYmxlQ29uZmlnKTtcclxuICB9XHJcblxyXG4gIG9uUGVla0NsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBtb2RlOiAnY3JlYXRlJyB8ICd2aWV3Jyk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGV0YWlsc0NvbmZpZykge1xyXG4gICAgICBjb25zdCBkeW5hbWljRGF0YSA9IG1vZGUgPT09ICdjcmVhdGUnID8ge30gOiB7IFt0aGlzLmRldGFpbHNDb25maWcuaGVyb0ZpZWxkXTogdGhpcy52YWx1ZSB9O1xyXG5cclxuICAgICAgbGV0IGJ1dHRvbiA9IHRoaXMuZGV0YWlsc0NvbmZpZy5idXR0b25zLmZpbmQoYiA9PiBiLm5hbWUgPT09IG1vZGUpO1xyXG4gICAgICBidXR0b24uZGV0YWlsc0NvbmZpZyA9IHRoaXMuZGV0YWlsc0NvbmZpZztcclxuXHJcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuQ29uZmlndXJlZERldGFpbHNEaWFsb2coIGJ1dHRvbiwgZHluYW1pY0RhdGEsIERldGFpbHNEaWFsb2dMaXRlICkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdC5tZXNzYWdlID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaChldmVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlBlZWsgY29uZmlndXJhdGlvbiBlcnJvclwiKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPHNwYS1zZWxlY3QtY29tbW9uIFt3aWR0aF09XCJ3aWR0aFwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtkZWZhdWx0Rmlyc3RWYWx1ZV09XCJkZWZhdWx0Rmlyc3RWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHlNb2RlXT1cInJlYWRvbmx5TW9kZVwiIFtoaW50XT1cImhpbnRcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgW2Rpc3BsYXldPVwiZGlzcGxheVwiIFsodmFsdWUpXT1cInZhbHVlXCIgW29wdGlvbnNdPVwib3B0aW9uc1wiIFttYXN0ZXJPcHRpb25zXT1cIm1hc3Rlck9wdGlvbnNcIiBbbWFzdGVyRmllbGRdPVwibWFzdGVyRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXT1cIm9wdGlvblZhbHVlXCIgW29wdGlvbkRpc3BsYXldPVwib3B0aW9uRGlzcGxheVwiIFtvcHRpb25EaXNwbGF5RXh0cmFdPVwib3B0aW9uRGlzcGxheUV4dHJhXCJcclxuICAgICAgICAgICAgICAgICAgIFtudWxsYWJsZV09XCJudWxsYWJsZVwiIFtpbmZvTWVzc2FnZV09XCJpbmZvTWVzc2FnZVwiIFtjb3B5Q29udGVudF09XCJjb3B5Q29udGVudFwiIFtsb2FkQWN0aW9uXT1cImxvYWRBY3Rpb25cIiBbZmllbGRdPVwiZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInZhbHVlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAoaG92ZXJDaGFuZ2UpPVwib25Ib3ZlckNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgPG5nLWNvbnRhaW5lciBhZGRpdGlvbmFsQnV0dG9ucz5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiZGV0YWlsc0NvbmZpZyAmJiBjYW5DcmVhdGUoKSAmJiBpc0hvdmVyZWRcIiAoY2xpY2spPVwib25QZWVrQ2xpY2soJGV2ZW50LCAnY3JlYXRlJylcIiBtYXRUb29sdGlwPVwiQWRkXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgPG1hdC1pY29uIHN0eWxlPVwiY29sb3I6IGdyZWVuO1wiPmFkZDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiZGV0YWlsc0NvbmZpZyAmJiBjYW5WaWV3KCkgJiYgaXNIb3ZlcmVkICYmIHZhbHVlXCIgKGNsaWNrKT1cIm9uUGVla0NsaWNrKCRldmVudCwgJ3ZpZXcnKVwiIG1hdFRvb2x0aXA9XCJWaWV3XCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPmxhdW5jaDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvc3BhLXNlbGVjdC1jb21tb24+XHJcbiJdfQ==