@softheon/armature 15.23.3 → 15.23.5

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.
@@ -516,12 +516,12 @@ export class ArmatureNavigationComponent {
516
516
  ArmatureNavigationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ArmatureNavigationComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.MediaMatcher }, { token: i2.Router }, { token: i3.BannerService }, { token: i4.AuthorizationService }, { token: i5.BaseConfigService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
517
517
  ArmatureNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ArmatureNavigationComponent, selector: "sof-ar-navigation", inputs: { navigationData: "navigationData", settings: "settings", advancedSettings: "advancedSettings", themeSettings: "themeSettings", languageSettings: "languageSettings", currentLang: "currentLang", logOutText: "logOutText" }, outputs: { setLanguage$: "setLanguage$" }, providers: [{
518
518
  provide: STEPPER_GLOBAL_OPTIONS, useValue: { displayDefaultIndicatorType: false }
519
- }], viewQueries: [{ propertyName: "stepper", first: true, predicate: ["vertStepper"], descendants: true }, { propertyName: "sidenav", first: true, predicate: ["snav"], descendants: true }, { propertyName: "expansionPanel", first: true, predicate: ["panel"], descendants: true }, { propertyName: "innerSteppers", predicate: ["vertStepperInner"], descendants: true }], ngImport: i0, template: "<div class=\"sof-ar-nav-container\"\r\n [style.top]=\"mobileQuery.matches && advancedSettings.topGapMobile ? advancedSettings.topGapMobile + 'px' : settings.headerHeight + 'px'\"\r\n [class.sof-ar-nav-mobile]=\"mobileQuery.matches\">\r\n <div *ngIf=\"showMessage\" m-a-0 fxLayout=\"row\" fxLayoutAlign=\"space-between center\" sws-alert--secondary role=\"alert\">\r\n <div fxLayout=\"row\" aria-hidden=\"true\">\r\n <i *ngIf=\"showCheckMark\" m-r-5 m-l-5 class=\"fas fa-check-circle icon-container\"></i>\r\n <p class=\"message-container\" m-r-5 m-l-5 [innerHtml]=\"message | translate\"></p>\r\n </div>\r\n <div fxLayout=\"column\">\r\n <button id=\"btnClose\" (click)=\"hide()\" mat-icon-button [attr.aria-label]=\"'common.close' | translate\">\r\n <span aria-hidden=\"true\">\r\n <i class=\"fal fa-times fa-lg\"></i>\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n <button id=\"sof-ar-nav-btn-menu\" aria-label=\"Menu Button\" mat-icon-button [disableRipple]=\"true\"\r\n (click)=\"snav.toggle()\" class=\"sof-ar-nav-menu-btn\"\r\n [class.hidden]=\"!(mobileQuery.matches || settings.allowNavToggle) || settings.hideNavigation\">\r\n <span *ngIf=\"isNavOpen; else closedIcon\" aria-hidden=\"true\" class=\"sof-ar-nav-menu-icon\">\r\n <i class=\"{{settings.fontAwesomeMenuIcon}} menu-icon\"></i>\r\n </span>\r\n <ng-template #closedIcon>\r\n <span aria-hidden=\"true\" class=\"sof-ar-nav-menu-icon\">\r\n <i class=\"{{settings.fontAwesomeMenuIconClosed}} menu-icon\"></i>\r\n </span>\r\n </ng-template>\r\n <span class=\"sr-only\">{{settings.menuButtonSRText | translate}}</span>\r\n </button>\r\n\r\n <mat-sidenav-container autosize class=\"sof-ar-nav-sidenav-container\" [style.marginTop.px]=\"\r\n mobileQuery.matches ? advancedSettings.marginTopMobile : advancedSettings.marginTopDesktop\">\r\n <mat-sidenav [disableClose]=\"!mobileQuery.matches\" class=\"sof-ar-nav-sidenav\" #snav [mode]=\"mobileQuery.matches ? 'over' : 'side'\"\r\n [fixedInViewport]=\"mobileQuery.matches\" [fixedTopGap]=\"mobileQuery.matches ? advancedSettings.topGapMobile : advancedSettings.topGapDesktop\"\r\n [opened]=\"!mobileQuery.matches && !settings.hideNavigation && settings.menuStyle!='progress' \"\r\n [style.width]=\"mobileQuery.matches ? setNavWidth(settings.sideNavWidthMobile) : setNavWidth(settings.sideNavWidthDesktop)\"\r\n [ngStyle]=\"{background:mobileQuery.matches ? themeSettings?.mobileBgColor : undefined}\">\r\n <ng-container *ngIf=\"mobileQuery.matches && userName && !settings.customUserName\">\r\n <span class=\"user-name\">\r\n {{userName}}\r\n </span>\r\n </ng-container>\r\n <ng-container *ngIf=\"mobileQuery.matches && settings.customUserName\">\r\n <span class=\"user-name\">\r\n {{settings.customUserName | translate}}\r\n </span>\r\n </ng-container>\r\n <!-- Nav Header Content -->\r\n <ng-content select=\"[sof-ar-nav-header]\"> </ng-content>\r\n\r\n <!-- Static Navigation -->\r\n <div class=\"nav-content-item sidenav-background\" *ngIf=\"settings.menuStyle === 'static'\" [ngStyle]=\"{'padding-bottom.px': (footerItemCount*64)+128}\">\r\n <nav *ngIf=\"settings.menuStyle === 'static'\" [attr.aria-label]=\"'main'\">\r\n <ng-container *ngFor=\"let nav of navigationData\">\r\n <ng-container *ngIf=\"nav?.subNodes?.length && !nav.hidden\">\r\n <mat-accordion>\r\n <mat-expansion-panel [expanded]=\"nav.expanded\">\r\n <mat-expansion-panel-header [ngClass]=\"{ 'sof-ar-nav-selected': isNavSelected(nav) }\">\r\n <!-- Navigation -->\r\n <ng-container>\r\n <!-- If there is a route -->\r\n <ng-container *ngIf=\"nav?.route\">\r\n <mat-nav-list [disableRipple]=\"true\" [attr.role]=\"'navigation'\">\r\n <a class=\"nav-item\" mat-list-item [routerLink]=\"nav?.route\"\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"{{nav?.fontAwesomeIcon}}\"></i>\r\n </span>\r\n </ng-container>\r\n <span class=\"sof-ar-nav-header-text\">{{nav.text | translate}}</span>\r\n </a>\r\n </mat-nav-list>\r\n </ng-container>\r\n <!-- If there is not a route -->\r\n <ng-container *ngIf=\"!nav?.route\">\r\n <mat-nav-list [disableRipple]=\"true\" [attr.role]=\"'navigation'\">\r\n <button id=\"sof-ar-nav-btn-node\" class=\"nav-item\" mat-list-item\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"{{nav?.fontAwesomeIcon}}\"></i>\r\n </span>\r\n </ng-container>\r\n <span class=\"sof-ar-nav-header-text\">{{nav.text | translate}}</span>\r\n </button>\r\n </mat-nav-list>\r\n </ng-container>\r\n </ng-container>\r\n </mat-expansion-panel-header>\r\n <!-- SubNav -->\r\n <ng-container>\r\n <mat-nav-list [ngClass]=\"{ 'sof-ar-nav-selected': isNavSelected(subnav) }\" class=\"subnav-content\"\r\n [disableRipple]=\"true\" *ngFor=\"let subnav of nav?.subNodes\" (click)=\"closeNavigationForMobile()\" [attr.role]=\"'navigation'\">\r\n <a class=\"nav-item nav-item-margin\" mat-list-item [routerLinkActive]=\"['sof-ar-nav-sub-active-route']\" [routerLink]=\"subnav.route\"\r\n [attr.role]=\"'navigation'\" [attr.aria-label]=\"(nav.text | translate) + ' ' + (subnav.text | translate)\">\r\n <span class=\"sof-ar-nav-header-text\" [attr.role]=\"'navigation'\" \r\n [attr.aria-label]=\"(nav.text | translate) + ' ' + (subnav.text | translate)\">\r\n {{subnav.text | translate}}\r\n </span>\r\n </a>\r\n </mat-nav-list>\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n <!-- If subnodes are not there -->\r\n <ng-container>\r\n <ng-container *ngIf=\"!nav?.subNodes?.length && !nav?.hidden\">\r\n <!-- If there is a route -->\r\n <ng-container *ngIf=\"nav?.route\">\r\n <mat-nav-list [ngClass]=\"{ 'sof-ar-nav-selected': isNavSelected(nav) }\" class=\"nav-header\"\r\n [disableRipple]=\"true\" (click)=\"closeNavigationForMobile()\" [attr.role]=\"null\">\r\n <a class=\"nav-item nav-item-margin\" mat-list-item [routerLink]=\"nav?.route\"\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\"><i class=\"{{nav?.fontAwesomeIcon}}\"></i></span>\r\n </ng-container>\r\n <span class=\"sof-ar-nav-header-text\">{{nav.text | translate}}</span>\r\n </a>\r\n </mat-nav-list>\r\n </ng-container>\r\n <!-- If there is not a route -->\r\n <ng-container *ngIf=\"!nav?.route\">\r\n <mat-nav-list [disableRipple]=\"true\" [attr.role]=\"null\">\r\n <button id=\"sof-ar-nav-btn-node\" class=\"nav-item\" mat-list-item\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\"><i class=\"{{nav?.fontAwesomeIcon}}\"></i></span>\r\n </ng-container>\r\n <span class=\"sof-ar-nav-header-text\">{{nav.text | translate}}</span>\r\n </button>\r\n </mat-nav-list>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </nav>\r\n </div>\r\n\r\n <!-- Stepper -->\r\n <mat-vertical-stepper *ngIf=\"settings.menuStyle === 'stepper'\" [selectedIndex]=\"selectedParentIndex\" #vertStepper\r\n [linear]=\"false\" class=\"sidenav-background\">\r\n <!-- Alternate step states for nav, icaons should always be white only worked with styles -->\r\n <ng-template matStepperIcon=\"create\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"edit\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"active\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"done\">\r\n <span>\r\n <i class=\"fas fa-check\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n\r\n <!-- nav steps -->\r\n <ng-container *ngFor=\"let nav of navigationData; let i = index\">\r\n <mat-step *ngIf=\"!nav?.hidden\" state=\"{{ determineStepState(i, -1) }}\">\r\n <ng-template matStepLabel *ngIf=\"!nav.hidden\">\r\n <div id=\"divStep{{ i }}\" style=\"height: 72px\" fxLayout=\"row\" fxLayoutAlign=\"start center\"\r\n matTooltip=\"{{ nav.text | translate }}\" [matTooltipPosition]=\"'after'\" fxFlex=\"100%\">\r\n <a id=\"step{{ i }}\" fxFlex=\"100%\" class=\"mat-button step-link\" [routerLink]=\"nav.route\"\r\n [ngStyle]=\"{ color: themeSettings?.fontColor }\" [routerLinkActive]=\"['step-active']\">\r\n {{ nav.text | translate }}\r\n </a>\r\n </div>\r\n </ng-template>\r\n <p [innerHTML]=\"nav.stepContent | translate\"></p>\r\n <!-- sub nav -->\r\n <mat-vertical-stepper *ngIf=\"nav?.subNodes\" [selectedIndex]=\"selectedChildIndexes[i]\" [linear]=\"false\"\r\n #vertStepperInner>\r\n <!-- Alternate step states for sub nav, icons should always be white only worked with styles -->\r\n <ng-template matStepperIcon=\"create\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"edit\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"done\">\r\n <span>\r\n <i class=\"fas fa-check\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"active\">\r\n <span>\r\n <i class=\"fas fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"none\">\r\n <span></span>\r\n </ng-template>\r\n <!-- sub nav steps -->\r\n <ng-container *ngFor=\"let subnav of nav?.subNodes; let j = index\">\r\n <mat-step state=\"{{ determineStepState(i, j) }}\" *ngIf=\"!subnav.hidden\">\r\n <ng-template matStepLabel>\r\n <div id=\"divSubStep{{ i }}-{{ j }}\" style=\"height: 72px\" fxLayout=\"row\" fxLayoutAlign=\"start center\"\r\n matTooltip=\"{{ subnav.text | translate }}\" [matTooltipPosition]=\"'after'\" fxFlex=\"100%\">\r\n <a id=\"subStep{{ i }}-{{ j }}\" class=\"mat-button step-link\"\r\n [ngStyle]=\"{ color: themeSettings?.fontColor }\" [routerLink]=\"subnav.route\"\r\n [routerLinkActive]=\"['step-active']\">{{ subnav.text | translate }}</a>\r\n </div>\r\n </ng-template>\r\n <p [innerHTML]=\"subnav.stepContent | translate\"></p>\r\n </mat-step>\r\n </ng-container>\r\n\r\n </mat-vertical-stepper>\r\n </mat-step>\r\n </ng-container>\r\n\r\n </mat-vertical-stepper>\r\n\r\n <!-- Nav Footer -->\r\n <div class=\"nav-footer-item\">\r\n <ng-container *ngIf=\"settings.menuStyle === 'static'\">\r\n <ng-container *ngFor=\"let nav of footerNavigationData\">\r\n <ng-container>\r\n <!-- Desktop Nav -->\r\n <ng-container *ngIf=\"!nav?.subNodes?.length\">\r\n <!-- If there is a route -->\r\n <ng-container *ngIf=\"nav?.route\">\r\n <mat-nav-list class=\"nav-header\" [disableRipple]=\"true\">\r\n <a class=\"nav-item nav-item-margin\" mat-list-item [routerLink]=\"nav?.route\"\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\"><i class=\"{{nav?.fontAwesomeIcon}}\"></i></span>\r\n </ng-container>\r\n {{nav.text | translate}}\r\n </a>\r\n </mat-nav-list>\r\n </ng-container>\r\n <!-- If there is not a route -->\r\n <ng-container *ngIf=\"!nav?.route\">\r\n <mat-nav-list>\r\n <button id=\"sof-ar-nav-btn-node\" class=\"nav-item\" mat-list-item\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\"><i class=\"{{nav?.fontAwesomeIcon}}\"></i></span>\r\n </ng-container>\r\n {{nav.text | translate}}\r\n </button>\r\n </mat-nav-list>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template [ngTemplateOutlet]=\"navigationFooter\">\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- the mobile progress menu-->\r\n <ng-container *ngIf=\"settings?.menuStyle === 'progress'\">\r\n <div class=\"sidenav-background\" [ngStyle]=\"{'padding-bottom.px': (footerItemCount*64)+128}\">\r\n <mat-accordion>\r\n <div *ngFor=\"let step of navigationData; let i = index\">\r\n <ng-container *ngIf=\"step.subNodes && step.subNodes.length > 0 && !step.hidden\">\r\n <mat-expansion-panel hideToggle class=\"progress-mobile-expansion-panel\"\r\n [disabled]=\"(!step.visited || step.isDisabled) && !settings.overrideNavigation\" (opened)=\"panelOpenState = true\"\r\n (closed)=\"panelOpenState = false\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title class=\"progress-mobile-panel-title\">\r\n <div style=\"width: -webkit-fill-available;\"\r\n [ngClass]=\"{'disabled':(!step.visited || step.isDisabled) && !settings.overrideNavigation && !step.complete,'color-primary':step.complete && step!=activeParentNode,'progress-menu-active':step===activeParentNode}\">\r\n <ng-template [ngTemplateOutlet]=\"progressParentNodeIcons\" [ngTemplateOutletContext]=\"{step:step}\">\r\n </ng-template>\r\n <span *ngIf=\"settings?.displayNumbers\">\r\n {{i < 10 ? \"0\" + (i + 1) + \". \" : i + \" . \" }}\r\n </span>\r\n <span class=\"nav-btn-text\">\r\n {{ step.text | translate }}\r\n </span>\r\n <span *ngIf=\"!panelOpenState\">\r\n <i class=\"fas fa-chevron-down panel-icon\"></i>\r\n </span>\r\n <span *ngIf=\"panelOpenState\">\r\n <i class=\"fas fa-chevron-up panel-icon\"></i>\r\n </span>\r\n </div>\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <!-- mobile sub menu -->\r\n <div class=\"progress-nav-menu\" *ngFor=\"let subNode of step.subNodes; let idx = index;\" [hidden]=\"step.subNodes[idx].hidden\">\r\n <button id=\"mobileMenu{{ idx }}\" mat-button class=\"step-link progress-menu-mobile-btn\"\r\n [ngClass]=\"{'color-primary':subNode.complete && subNode!=activeSubNode}\"\r\n [routerLinkActive]=\"['progress-menu-active']\" [ngStyle]=\"{ ' color': themeSettings?.fontColor }\"\r\n [routerLink]=\"subNode.route\" [disabled]=\"!subNode.visited && !settings.overrideNavigation\">\r\n <ng-template [ngTemplateOutlet]=\"progressSubNodeIcons\"\r\n [ngTemplateOutletContext]=\"{subNode:subNode}\">\r\n </ng-template>\r\n <span class=\"nav-menu-btn-text\" [ngClass]=\"{'disabled':(!subNode.visited) && !settings.overrideNavigation && !subNode.complete,'color-primary':subNode.complete && subNode!=activeSubNode,'progress-menu-active':subNode===activeSubNode}\">{{ subNode.text | translate }}</span>\r\n </button>\r\n </div>\r\n </mat-expansion-panel>\r\n </ng-container>\r\n <!-- if there are no subNodes -->\r\n <ng-container *ngIf=\"(!step.subNodes || step.subNodes.length==0) && !step.hidden\">\r\n <mat-expansion-panel #panel hideToggle (opened)=\"disablePanel(panel,i)\" class=\"progress-mobile-expansion-panel\"\r\n [disabled]=\"(!step.visited || step.isDisabled) && !settings.overrideNavigation\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title class=\"progress-mobile-panel-title\">\r\n <div [ngClass]=\"{'disabled':(!step.visited || step.isDisabled) && !settings.overrideNavigation && !step.complete,'color-primary':step.complete && step!=activeParentNode,'progress-menu-active':step===activeParentNode}\">\r\n <ng-template [ngTemplateOutlet]=\"progressParentNodeIcons\" [ngTemplateOutletContext]=\"{step:step}\">\r\n </ng-template>\r\n <span *ngIf=\"settings?.displayNumbers\">\r\n {{i < 10 ? \"0\" + (i + 1) + \". \" : i + \" . \" }}\r\n </span>\r\n <span class=\"nav-btn-text\">\r\n {{ step.text | translate }}\r\n </span>\r\n </div>\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n </mat-expansion-panel>\r\n </ng-container>\r\n </div>\r\n </mat-accordion>\r\n </div>\r\n\r\n <!-- the progress menu language and logout buttons-->\r\n <div class=\"nav-footer-item progress-footer\">\r\n <ng-template [ngTemplateOutlet]=\"navigationFooter\">\r\n </ng-template>\r\n </div>\r\n </ng-container>\r\n </mat-sidenav>\r\n <mat-sidenav-content>\r\n <!-- Horizontal Progress -->\r\n <ng-container *ngIf=\"settings?.menuStyle === 'progress'\">\r\n <mat-progress-bar *ngIf=\"settings?.showProgressBar\" mode=\"determinate\" [value]=\"navProgressCount\"\r\n style=\"height: 9px\" color=\"accent\">\r\n </mat-progress-bar>\r\n <div fxHide.lt-md class=\"step-titles center\" fxLayout=\"row\" style=\"justify-content:center !important\" [class.hidden]=\"settings.hideNavigation\">\r\n <div *ngFor=\"let step of navigationData; let i = index\" class=\"horizontal-progress-div\">\r\n <ng-container *ngIf=\"!step.subNodes?.length && !step.hidden\">\r\n <button mat-button [routerLink]=\"step.route\"\r\n [disabled]=\"(!step.visited || step.isDisabled) && !settings.overrideNavigation\" class=\"progress-menu-btn\"\r\n [ngClass]=\"{'color-primary':step.complete && step!=activeParentNode,'progress-menu-active':step===activeParentNode}\">\r\n <ng-template [ngTemplateOutlet]=\"progressParentNodeIcons\" [ngTemplateOutletContext]=\"{step:step}\">\r\n </ng-template>\r\n <span *ngIf=\"settings?.displayNumbers\">\r\n {{i < 10 ? \"0\" + (i + 1) + \". \" : i + \" . \"}}\r\n </span>\r\n <span class=\"nav-btn-text\">{{ step.text | translate }}</span>\r\n </button>\r\n </ng-container>\r\n <!-- if there are subnodes create menus for each step -->\r\n <ng-container *ngIf=\"step.subNodes && step.subNodes.length && !step.hidden\">\r\n <button [ngClass]=\"{'color-primary':step.complete && step!=activeParentNode,'progress-menu-active':step===activeParentNode}\"\r\n mat-button [disabled]=\"(!step.visited || step.isDisabled) && !settings.overrideNavigation\" class=\"progress-menu-btn\"\r\n [matMenuTriggerFor]=\"menu\">\r\n <ng-template [ngTemplateOutlet]=\"progressParentNodeIcons\" [ngTemplateOutletContext]=\"{step:step}\">\r\n </ng-template>\r\n <span *ngIf=\"settings?.displayNumbers\">\r\n {{i < 10 ? \"0\" + (i + 1) + \". \" : i + \" . \"}}\r\n </span>\r\n <span class=\"nav-btn-text\">{{ step.text | translate }}</span>\r\n </button>\r\n <mat-menu #menu=\"matMenu\" class=\"sof-ar-mat-menu progress-menu-panel\">\r\n <div class=\"progress-nav-menu\" *ngFor=\"let subNode of step.subNodes; let idx = index;\" [ngStyle]=\"{width:settings.progressMenuWidth+'px'}\" [hidden]=\"step.subNodes[idx].hidden\">\r\n <button id=\"submenu{{ idx }}\" mat-button class=\"step-link progress-menu-btn\"\r\n [ngClass]=\"{'color-primary':subNode.complete && subNode!=activeSubNode,'disabled':!subNode.visited && !settings.overrideNavigation}\"\r\n [routerLinkActive]=\"['progress-menu-active']\" [ngStyle]=\"{ ' color': themeSettings?.fontColor }\"\r\n [routerLink]=\"subNode.route\" [disabled]=\"!subNode.visited && !settings.overrideNavigation\">\r\n <ng-template [ngTemplateOutlet]=\"progressSubNodeIcons\"\r\n [ngTemplateOutletContext]=\"{subNode:subNode}\">\r\n </ng-template>\r\n <span class=\"nav-menu-btn-text\">{{ subNode.text |translate }}</span>\r\n </button>\r\n </div>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"mobile-progress-container\" fxHide.gt-sm>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-content sof-ar-nav-content></ng-content>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n <!-- The progress menu parent node icon template-->\r\n <ng-template #progressParentNodeIcons let-step='step'>\r\n <span *ngIf=\"step.complete && step != activeParentNode\" \r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.complete' | translate\">\r\n <i class=\"{{ settings.progressSectionCompleteIcon }} color-primary progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.step-labels.complete' | translate\"></i>\r\n </span>\r\n <span *ngIf=\"step === activeParentNode\" \r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.in-progress' | translate\">\r\n <i class=\"{{ settings.progressSectionCurrentIcon }} color-primary progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.in-progress' | translate\"></i>\r\n </span>\r\n <span *ngIf=\"!step.complete && step != activeParentNode\" [ngClass]=\"{'disabled':!step.visited && !settings.overrideNavigation}\" \r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.not-done' | translate\">\r\n <i class=\"{{ settings.progressSectionFutureIcon }} progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.not-done' | translate\"></i>\r\n </span>\r\n </ng-template>\r\n <!-- The progress menu sub node icon template-->\r\n <ng-template #progressSubNodeIcons let-subNode='subNode'>\r\n <span *ngIf=\"subNode.complete && activeSubNode != subNode\"\r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.complete' | translate\">\r\n <i class=\"{{settings.progressMenuCompleteIcon}} color-primary progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.complete' | translate\"></i>\r\n </span>\r\n <span *ngIf=\"activeSubNode === subNode\"\r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.in-progress' | translate\">\r\n <i class=\"{{ settings.progressSectionCurrentIcon }} color-primary progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.in-progress' | translate\"></i>\r\n </span>\r\n <span *ngIf=\"!subNode.complete && activeSubNode != subNode\" [ngClass]=\"{'disabled':!subNode.visited && !settings.overrideNavigation}\"\r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.not-done' | translate\">\r\n <i class=\"{{ settings.progressSectionFutureIcon }} progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.not-done' | translate\"></i>\r\n </span>\r\n </ng-template>\r\n <!-- The navigation footer template for language and logout buttons -->\r\n <ng-template #navigationFooter>\r\n <ng-content select=\"[sof-ar-nav-mobile-footer]\"> </ng-content>\r\n <ng-container *ngIf=\"!settings.useCustomMobileFooter\">\r\n <!-- The language button -->\r\n <ng-container *ngIf=\"languageSettings?.displayLanguageOptions && languageSettings?.languages.length > 2 && mobileQuery.matches\">\r\n <button id=\"sof-ar-nav-lang-dropdown\" mat-stroked-button\r\n class=\"faded-button-50 language-button navigationFooter\" [matMenuTriggerFor]=\"headerLanguageMenu\"\r\n [attr.aria-label]=\"languageSettings.buttonText | translate\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"far fa-globe language-globe\"></i>\r\n </span>\r\n {{languageSettings.buttonText | translate}}\r\n </button>\r\n <mat-menu #headerLanguageMenu=\"matMenu\" class=\"sof-ar-mat-menu\">\r\n <button mat-menu-item *ngFor=\"let lang of languageSettings.languages\" (click)=\"setLanguage$.emit(lang)\"\r\n id=\"apply-lang-btn-{{lang}}\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\">\r\n <div fxFlex=\"auto\">\r\n {{ lang | translate }}\r\n </div>\r\n <div fxFlex=\"auto\" fxLayoutAlign=\"end end\">\r\n <i *ngIf=\"currentLang === lang\" class=\"fad fa-check selected-language-icon\"></i>\r\n </div>\r\n </div>\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <ng-container *ngIf=\"languageSettings?.displayLanguageOptions && languageSettings?.languages.length === 2 && mobileQuery.matches\">\r\n <button *ngIf=\"languageSettings?.languages.length === 2\" id=\"sof-ar-nav-lang-button\" mat-stroked-button\r\n class=\"faded-button-50 language-button navigationFooter\"\r\n [attr.aria-label]=\"languageSettings.buttonText | translate\" (click)=\"setLanguage$.emit()\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"far fa-globe language-globe\"></i>\r\n </span>\r\n {{otherLangText | translate}}\r\n </button>\r\n </ng-container>\r\n <!-- The logout button-->\r\n <ng-container *ngIf=\"mobileQuery.matches && userName\">\r\n <button id=\"sof-ar-header-lang-button\" mat-stroked-button class=\"navigationFooter\" (click)=\"logOut()\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"fas fa-sign-out-alt\"></i>\r\n </span>\r\n {{logOutText | translate}}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n</div>\r\n", styles: [":root{--primary-color-50-parts: #edf4ff;--primary-color-100-parts: #b9d4fc;--primary-color-200-parts: #8ab7fb;--primary-color-300-parts: #5b9af9;--primary-color-400-parts: #3784f7;--primary-color-500-parts: #146ef6;--primary-color-600-parts: #1266f5;--primary-color-700-parts: #0e5bf3;--primary-color-800-parts: #0b51f2;--primary-color-900-parts: #063fef;--primary-color-A100-parts: #ffffff;--primary-color-A200-parts: #e4e9ff;--primary-color-A400-parts: #b1c0ff;--primary-color-A700-parts: #97acff;--primary-color-contrast-50-parts: rgba(0, 0, 0, .87);--primary-color-contrast-100-parts: rgba(0, 0, 0, .87);--primary-color-contrast-200-parts: rgba(0, 0, 0, .87);--primary-color-contrast-300-parts: rgba(0, 0, 0, .87);--primary-color-contrast-400-parts: rgba(255, 255, 255, 1);--primary-color-contrast-500-parts: rgba(255, 255, 255, 1);--primary-color-contrast-600-parts: rgba(255, 255, 255, 1);--primary-color-contrast-700-parts: rgba(255, 255, 255, 1);--primary-color-contrast-800-parts: rgba(255, 255, 255, 1);--primary-color-contrast-900-parts: rgba(255, 255, 255, 1);--primary-color-contrast-A100-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A200-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A400-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A700-parts: rgba(0, 0, 0, .87);--primary-color-50-parts-rgb: 237, 244, 255;--primary-color-100-parts-rgb: 185, 212, 252;--primary-color-200-parts-rgb: 138, 183, 251;--primary-color-300-parts-rgb: 91, 154, 249;--primary-color-400-parts-rgb: 55, 132, 247;--primary-color-500-parts-rgb: 20, 110, 246;--primary-color-600-parts-rgb: 18, 102, 245;--primary-color-700-parts-rgb: 14, 91, 243;--primary-color-800-parts-rgb: 11, 81, 242;--primary-color-900-parts-rgb: 6, 63, 239;--primary-color-A100-parts-rgb: 255, 255, 255;--primary-color-A200-parts-rgb: 228, 233, 255;--primary-color-A400-parts-rgb: 177, 192, 255;--primary-color-A700-parts-rgb: 151, 172, 255;--accent-color-50-parts: #e0f2f1;--accent-color-100-parts: #b2dfdb;--accent-color-200-parts: #80cbc4;--accent-color-300-parts: #4db6ac;--accent-color-400-parts: #26a69a;--accent-color-500-parts: #009688;--accent-color-600-parts: #00897b;--accent-color-700-parts: #00796b;--accent-color-800-parts: #00695c;--accent-color-900-parts: #004d40;--accent-color-A100-parts: #a7ffeb;--accent-color-A200-parts: #64ffda;--accent-color-A400-parts: #1de9b6;--accent-color-A700-parts: #00bfa5;--accent-color-contrast-50-parts: #000000;--accent-color-contrast-100-parts: #000000;--accent-color-contrast-200-parts: #000000;--accent-color-contrast-300-parts: #000000;--accent-color-contrast-400-parts: #000000;--accent-color-contrast-500-parts: #ffffff;--accent-color-contrast-600-parts: #ffffff;--accent-color-contrast-700-parts: #ffffff;--accent-color-contrast-800-parts: #ffffff;--accent-color-contrast-900-parts: #ffffff;--accent-color-contrast-A100-parts: #000000;--accent-color-contrast-A200-parts: #000000;--accent-color-contrast-A400-parts: #000000;--accent-color-contrast-A700-parts: #000000;--accent-color-50-parts-rgb: 224, 242, 241;--accent-color-100-parts-rgb: 178, 223, 219;--accent-color-200-parts-rgb: 128, 203, 196;--accent-color-300-parts-rgb: 77, 182, 172;--accent-color-400-parts-rgb: 38, 166, 154;--accent-color-500-parts-rgb: 0, 150, 136;--accent-color-600-parts-rgb: 0, 137, 123;--accent-color-700-parts-rgb: 0, 121, 107;--accent-color-800-parts-rgb: 0, 105, 92;--accent-color-900-parts-rgb: 0, 77, 64;--accent-color-A100-parts-rgb: 167, 255, 235;--accent-color-A200-parts-rgb: 100, 255, 218;--accent-color-A400-parts-rgb: 29, 233, 182;--accent-color-A700-parts-rgb: 0, 191, 165;--warn-color-50-parts: #fdf3e7;--warn-color-100-parts: #fbe1c3;--warn-color-200-parts: #f9ce9c;--warn-color-300-parts: #f6ba74;--warn-color-400-parts: #f4ab56;--warn-color-500-parts: #f29c38;--warn-color-600-parts: #f09432;--warn-color-700-parts: #ee8a2b;--warn-color-800-parts: #ec8024;--warn-color-900-parts: #e86e17;--warn-color-A100-parts: #ffffff;--warn-color-A200-parts: #fff0e6;--warn-color-A400-parts: #ffd0b3;--warn-color-A700-parts: #ffc19a;--warn-color-contrast-50-parts: rgba(0, 0, 0, .87);--warn-color-contrast-100-parts: rgba(0, 0, 0, .87);--warn-color-contrast-200-parts: rgba(0, 0, 0, .87);--warn-color-contrast-300-parts: rgba(0, 0, 0, .87);--warn-color-contrast-400-parts: rgba(0, 0, 0, .87);--warn-color-contrast-500-parts: rgba(0, 0, 0, .87);--warn-color-contrast-600-parts: rgba(0, 0, 0, .87);--warn-color-contrast-700-parts: rgba(0, 0, 0, .87);--warn-color-contrast-800-parts: rgba(0, 0, 0, .87);--warn-color-contrast-900-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A100-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A200-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A400-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A700-parts: rgba(0, 0, 0, .87);--warn-color-50-parts-rgb: 253, 243, 231;--warn-color-100-parts-rgb: 251, 225, 195;--warn-color-200-parts-rgb: 249, 206, 156;--warn-color-300-parts-rgb: 246, 186, 116;--warn-color-400-parts-rgb: 244, 171, 86;--warn-color-500-parts-rgb: 242, 156, 56;--warn-color-600-parts-rgb: 240, 148, 50;--warn-color-700-parts-rgb: 238, 138, 43;--warn-color-800-parts-rgb: 236, 128, 36;--warn-color-900-parts-rgb: 232, 110, 23;--warn-color-A100-parts-rgb: 255, 255, 255;--warn-color-A200-parts-rgb: 255, 240, 230;--warn-color-A400-parts-rgb: 255, 208, 179;--warn-color-A700-parts-rgb: 255, 193, 154;--info-color-50-parts: #e7f3fb;--info-color-100-parts: #c2e0f4;--info-color-200-parts: #9acced;--info-color-300-parts: #71b7e6;--info-color-400-parts: #52a7e0;--info-color-500-parts: #3498db;--info-color-600-parts: #2f90d7;--info-color-700-parts: #2785d2;--info-color-800-parts: #217bcd;--info-color-900-parts: #156ac4;--info-color-A100-parts: #f5f9ff;--info-color-A200-parts: #c2ddff;--info-color-A400-parts: #8fc1ff;--info-color-A700-parts: #75b3ff;--info-color-contrast-50-parts: rgba(0, 0, 0, .87);--info-color-contrast-100-parts: rgba(0, 0, 0, .87);--info-color-contrast-200-parts: rgba(0, 0, 0, .87);--info-color-contrast-300-parts: rgba(0, 0, 0, .87);--info-color-contrast-400-parts: rgba(255, 255, 255, 1);--info-color-contrast-500-parts: rgba(255, 255, 255, 1);--info-color-contrast-600-parts: rgba(255, 255, 255, 1);--info-color-contrast-700-parts: rgba(255, 255, 255, 1);--info-color-contrast-800-parts: rgba(255, 255, 255, 1);--info-color-contrast-900-parts: rgba(255, 255, 255, 1);--info-color-contrast-A100-parts: rgba(0, 0, 0, .87);--info-color-contrast-A200-parts: rgba(0, 0, 0, .87);--info-color-contrast-A400-parts: rgba(0, 0, 0, .87);--info-color-contrast-A700-parts: rgba(0, 0, 0, .87);--info-color-50-parts-rgb: 231, 243, 251;--info-color-100-parts-rgb: 194, 224, 244;--info-color-200-parts-rgb: 154, 204, 237;--info-color-300-parts-rgb: 113, 183, 230;--info-color-400-parts-rgb: 82, 167, 224;--info-color-500-parts-rgb: 52, 152, 219;--info-color-600-parts-rgb: 47, 144, 215;--info-color-700-parts-rgb: 39, 133, 210;--info-color-800-parts-rgb: 33, 123, 205;--info-color-900-parts-rgb: 21, 106, 196;--info-color-A100-parts-rgb: 245, 249, 255;--info-color-A200-parts-rgb: 194, 221, 255;--info-color-A400-parts-rgb: 143, 193, 255;--info-color-A700-parts-rgb: 117, 179, 255;--success-color-50-parts: #edf5eb;--success-color-100-parts: #d1e6ce;--success-color-200-parts: #b3d6ae;--success-color-300-parts: #95c58d;--success-color-400-parts: #7eb874;--success-color-500-parts: #67ac5c;--success-color-600-parts: #5fa554;--success-color-700-parts: #549b4a;--success-color-800-parts: #4a9241;--success-color-900-parts: #398230;--success-color-A100-parts: #d0ffcb;--success-color-A200-parts: #a2ff98;--success-color-A400-parts: #74ff65;--success-color-A700-parts: #5dff4c;--success-color-contrast-50-parts: rgba(0, 0, 0, .87);--success-color-contrast-100-parts: rgba(0, 0, 0, .87);--success-color-contrast-200-parts: rgba(0, 0, 0, .87);--success-color-contrast-300-parts: rgba(0, 0, 0, .87);--success-color-contrast-400-parts: rgba(0, 0, 0, .87);--success-color-contrast-500-parts: rgba(0, 0, 0, .87);--success-color-contrast-600-parts: rgba(0, 0, 0, .87);--success-color-contrast-700-parts: rgba(255, 255, 255, 1);--success-color-contrast-800-parts: rgba(255, 255, 255, 1);--success-color-contrast-900-parts: rgba(255, 255, 255, 1);--success-color-contrast-A100-parts: rgba(0, 0, 0, .87);--success-color-contrast-A200-parts: rgba(0, 0, 0, .87);--success-color-contrast-A400-parts: rgba(0, 0, 0, .87);--success-color-contrast-A700-parts: rgba(0, 0, 0, .87);--success-color-50-parts-rgb: 237, 245, 235;--success-color-100-parts-rgb: 209, 230, 206;--success-color-200-parts-rgb: 179, 214, 174;--success-color-300-parts-rgb: 149, 197, 141;--success-color-400-parts-rgb: 126, 184, 116;--success-color-500-parts-rgb: 103, 172, 92;--success-color-600-parts-rgb: 95, 165, 84;--success-color-700-parts-rgb: 84, 155, 74;--success-color-800-parts-rgb: 74, 146, 65;--success-color-900-parts-rgb: 57, 130, 48;--success-color-A100-parts-rgb: 208, 255, 203;--success-color-A200-parts-rgb: 162, 255, 152;--success-color-A400-parts-rgb: 116, 255, 101;--success-color-A700-parts-rgb: 93, 255, 76;--error-color-50-parts: #fceae8;--error-color-100-parts: #f8c9c5;--error-color-200-parts: #f3a69e;--error-color-300-parts: #ee8277;--error-color-400-parts: #eb6759;--error-color-500-parts: #e74c3c;--error-color-600-parts: #e44536;--error-color-700-parts: #e03c2e;--error-color-800-parts: #dd3327;--error-color-900-parts: #d7241a;--error-color-A100-parts: #ffffff;--error-color-A200-parts: #ffd9d7;--error-color-A400-parts: #ffa8a4;--error-color-A700-parts: #ff8f8b;--error-color-contrast-50-parts: rgba(0, 0, 0, .87);--error-color-contrast-100-parts: rgba(0, 0, 0, .87);--error-color-contrast-200-parts: rgba(0, 0, 0, .87);--error-color-contrast-300-parts: rgba(0, 0, 0, .87);--error-color-contrast-400-parts: rgba(0, 0, 0, .87);--error-color-contrast-500-parts: rgba(255, 255, 255, 1);--error-color-contrast-600-parts: rgba(255, 255, 255, 1);--error-color-contrast-700-parts: rgba(255, 255, 255, 1);--error-color-contrast-800-parts: rgba(255, 255, 255, 1);--error-color-contrast-900-parts: rgba(255, 255, 255, 1);--error-color-contrast-A100-parts: rgba(0, 0, 0, .87);--error-color-contrast-A200-parts: rgba(0, 0, 0, .87);--error-color-contrast-A400-parts: rgba(0, 0, 0, .87);--error-color-contrast-A700-parts: rgba(0, 0, 0, .87);--error-color-50-parts-rgb: 252, 234, 232;--error-color-100-parts-rgb: 248, 201, 197;--error-color-200-parts-rgb: 248, 201, 197;--error-color-300-parts-rgb: 238, 130, 119;--error-color-400-parts-rgb: 235, 103, 89;--error-color-500-parts-rgb: 231, 76, 60;--error-color-600-parts-rgb: 228, 69, 54;--error-color-700-parts-rgb: 224, 60, 46;--error-color-800-parts-rgb: 221, 51, 39;--error-color-900-parts-rgb: 215, 36, 26;--error-color-A100-parts-rgb: 255, 255, 255;--error-color-A200-parts-rgb: 255, 217, 215;--error-color-A400-parts-rgb: 255, 168, 164;--error-color-A700-parts-rgb: 255, 143, 139;--neutral-color-50-parts: #e9e9e9;--neutral-color-100-parts: #dddddd;--neutral-color-200-parts: #cccccc;--neutral-color-300-parts: #b0b0b0;--neutral-color-400-parts: #909090;--neutral-color-500-parts: #515151;--neutral-color-600-parts: #424242;--neutral-color-700-parts: #333333;--neutral-color-800-parts: #212121;--neutral-color-900-parts: #141414;--neutral-color-A100-parts: #ffffff;--neutral-color-A200-parts: #ffffff;--neutral-color-A400-parts: #ffffff;--neutral-color-A700-parts: #ffffff;--neutral-color-contrast-50-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-100-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-200-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-300-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-400-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-500-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-600-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-700-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-800-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-900-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-A100-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A200-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A400-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A700-parts: rgba(0, 0, 0, .87);--neutral-color-50-parts-rgb: 233, 233, 233;--neutral-color-100-parts-rgb: 221, 221, 221;--neutral-color-200-parts-rgb: 204, 204, 204;--neutral-color-300-parts-rgb: 176, 176, 176;--neutral-color-400-parts-rgb: 144, 144, 144;--neutral-color-500-parts-rgb: 81, 81, 81;--neutral-color-600-parts-rgb: 66, 66, 66;--neutral-color-700-parts-rgb: 51, 51, 51;--neutral-color-800-parts-rgb: 33, 33, 33;--neutral-color-900-parts-rgb: 20, 20, 20;--neutral-color-A100-parts-rgb: 255, 255, 255;--neutral-color-A200-parts-rgb: 255, 255, 255;--neutral-color-A400-parts-rgb: 255, 255, 255;--neutral-color-A700-parts-rgb: 255, 255, 255}.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale3d(0,0,0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.mat-ripple-element{background-color:#0000001a}.mat-mdc-option{color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, .87))}.mat-mdc-option:hover:not(.mdc-list-item--disabled),.mat-mdc-option:focus:not(.mdc-list-item--disabled),.mat-mdc-option.mat-mdc-option-active,.mat-mdc-option.mdc-list-item--selected:not(.mat-mdc-option-multiple):not(.mdc-list-item--disabled){background:rgba(0,0,0,.04)}.mat-primary .mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text{color:var(--mdc-theme-primary, var(--primary-color-500-parts))}.mat-accent .mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text{color:var(--mdc-theme-secondary, var(--accent-color-500-parts))}.mat-warn .mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text{color:var(--mdc-theme-error, #f44336)}.mat-mdc-optgroup-label{color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, .87))}.mat-pseudo-checkbox-full{color:#0000008a}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-disabled{color:#b0b0b0}.mat-primary .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-primary .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:var(--primary-color-500-parts)}.mat-primary .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-primary .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:var(--primary-color-500-parts)}.mat-primary .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,.mat-primary .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after{color:#fafafa}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:var(--accent-color-500-parts)}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:var(--accent-color-500-parts)}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after{color:#fafafa}.mat-accent .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-accent .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:var(--accent-color-500-parts)}.mat-accent .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-accent .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:var(--accent-color-500-parts)}.mat-accent .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,.mat-accent .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after{color:#fafafa}.mat-warn .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-warn .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:#f44336}.mat-warn .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-warn .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:#f44336}.mat-warn .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,.mat-warn .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after{color:#fafafa}.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:#b0b0b0}.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:#b0b0b0}.mat-app-background{background-color:#fafafa;color:#000000de}.mat-elevation-z0,.mat-mdc-elevation-specific.mat-elevation-z0{box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f}.mat-elevation-z1,.mat-mdc-elevation-specific.mat-elevation-z1{box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.mat-elevation-z2,.mat-mdc-elevation-specific.mat-elevation-z2{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.mat-elevation-z3,.mat-mdc-elevation-specific.mat-elevation-z3{box-shadow:0 3px 3px -2px #0003,0 3px 4px #00000024,0 1px 8px #0000001f}.mat-elevation-z4,.mat-mdc-elevation-specific.mat-elevation-z4{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.mat-elevation-z5,.mat-mdc-elevation-specific.mat-elevation-z5{box-shadow:0 3px 5px -1px #0003,0 5px 8px #00000024,0 1px 14px #0000001f}.mat-elevation-z6,.mat-mdc-elevation-specific.mat-elevation-z6{box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}.mat-elevation-z7,.mat-mdc-elevation-specific.mat-elevation-z7{box-shadow:0 4px 5px -2px #0003,0 7px 10px 1px #00000024,0 2px 16px 1px #0000001f}.mat-elevation-z8,.mat-mdc-elevation-specific.mat-elevation-z8{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.mat-elevation-z9,.mat-mdc-elevation-specific.mat-elevation-z9{box-shadow:0 5px 6px -3px #0003,0 9px 12px 1px #00000024,0 3px 16px 2px #0000001f}.mat-elevation-z10,.mat-mdc-elevation-specific.mat-elevation-z10{box-shadow:0 6px 6px -3px #0003,0 10px 14px 1px #00000024,0 4px 18px 3px #0000001f}.mat-elevation-z11,.mat-mdc-elevation-specific.mat-elevation-z11{box-shadow:0 6px 7px -4px #0003,0 11px 15px 1px #00000024,0 4px 20px 3px #0000001f}.mat-elevation-z12,.mat-mdc-elevation-specific.mat-elevation-z12{box-shadow:0 7px 8px -4px #0003,0 12px 17px 2px #00000024,0 5px 22px 4px #0000001f}.mat-elevation-z13,.mat-mdc-elevation-specific.mat-elevation-z13{box-shadow:0 7px 8px -4px #0003,0 13px 19px 2px #00000024,0 5px 24px 4px #0000001f}.mat-elevation-z14,.mat-mdc-elevation-specific.mat-elevation-z14{box-shadow:0 7px 9px -4px #0003,0 14px 21px 2px #00000024,0 5px 26px 4px #0000001f}.mat-elevation-z15,.mat-mdc-elevation-specific.mat-elevation-z15{box-shadow:0 8px 9px -5px #0003,0 15px 22px 2px #00000024,0 6px 28px 5px #0000001f}.mat-elevation-z16,.mat-mdc-elevation-specific.mat-elevation-z16{box-shadow:0 8px 10px -5px #0003,0 16px 24px 2px #00000024,0 6px 30px 5px #0000001f}.mat-elevation-z17,.mat-mdc-elevation-specific.mat-elevation-z17{box-shadow:0 8px 11px -5px #0003,0 17px 26px 2px #00000024,0 6px 32px 5px #0000001f}.mat-elevation-z18,.mat-mdc-elevation-specific.mat-elevation-z18{box-shadow:0 9px 11px -5px #0003,0 18px 28px 2px #00000024,0 7px 34px 6px #0000001f}.mat-elevation-z19,.mat-mdc-elevation-specific.mat-elevation-z19{box-shadow:0 9px 12px -6px #0003,0 19px 29px 2px #00000024,0 7px 36px 6px #0000001f}.mat-elevation-z20,.mat-mdc-elevation-specific.mat-elevation-z20{box-shadow:0 10px 13px -6px #0003,0 20px 31px 3px #00000024,0 8px 38px 7px #0000001f}.mat-elevation-z21,.mat-mdc-elevation-specific.mat-elevation-z21{box-shadow:0 10px 13px -6px #0003,0 21px 33px 3px #00000024,0 8px 40px 7px #0000001f}.mat-elevation-z22,.mat-mdc-elevation-specific.mat-elevation-z22{box-shadow:0 10px 14px -6px #0003,0 22px 35px 3px #00000024,0 8px 42px 7px #0000001f}.mat-elevation-z23,.mat-mdc-elevation-specific.mat-elevation-z23{box-shadow:0 11px 14px -7px #0003,0 23px 36px 3px #00000024,0 9px 44px 8px #0000001f}.mat-elevation-z24,.mat-mdc-elevation-specific.mat-elevation-z24{box-shadow:0 11px 15px -7px #0003,0 24px 38px 3px #00000024,0 9px 46px 8px #0000001f}.mat-theme-loaded-marker{display:none}.mat-mdc-option{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 16px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, .03125em)}::ng-deep :root{--sof-nav-content-bg-color: #fffdfd;--sof-nav-font-color: #eee;--sof-nav-bg-gradient-color-1: #fff;--sof-nav-bg-gradient-color-2: #fff;--sof-nav-border-right-color: transparent;--sof-nav-list-border-color: #cfd8dc;--sof-nav-highlight-gradient-1: mat.get-color-from-palette($my-app-primary, 100);--sof-nav-highlight-gradient-2: rgba(255, 255, 255, 0);--sof-nav-sub-highlight-border-color: #616161;--sof-nav-sub-highlight-bg-color: #424242}.sof-ar-nav-sidenav{background:rgb(0,0,0);border-right-color:var(--sof-nav-border-right-color);background:linear-gradient(-180deg,var(--sof-nav-bg-gradient-color-1) 0%,var(--sof-nav-bg-gradient-color-2) 100%);overflow:hidden}.sof-ar-nav-sidenav *{color:var(--sof-nav-font-color)}::ng-deep [sof-ar-nav-footer] *,::ng-deep [sof-ar-nav-header] *{color:var(--sof-nav-font-color)!important}::ng-deep .sof-ar-nav-active-route:active{background:rgb(0,0,0)!important;background:linear-gradient(90deg,var(--sof-nav-highlight-gradient-1) 0%,var(--sof-nav-highlight-gradient-2) 80%)!important;border-bottom-right-radius:8px!important;border-top-right-radius:8px!important}::ng-deep .sof-ar-nav-sub-active-route{background:var(--sof-nav-sub-highlight-bg-color);margin-right:-4px;position:relative}::ng-deep .sof-ar-nav-sub-active-route:focus,::ng-deep .sof-ar-nav-sub-active-route:active{background:var(--sof-nav-sub-highlight-bg-color)!important}::ng-deep .sof-ar-nav-sub-active-route:before{content:\"\";display:block;position:absolute;top:0;height:inherit}::ng-deep .mat-drawer-container{background:var(--sof-nav-content-bg-color)!important}.sof-ar-nav-container{display:flex;flex-direction:column;position:absolute;bottom:0;left:0;right:0}h1.example-app-name{margin-left:8px}.sof-ar-nav-sidenav-container{flex:1}.example-is-mobile .example-sidenav-container{flex:1 0 auto}.hidden{display:none!important}.sof-ar-nav-buffer{height:40px}button.nav-item{border:0;background:transparent}.nav-item{font-size:15px!important;font-weight:500!important}.nav-item.mat-mdc-list-item-interactive:focus:before,.nav-item.mat-mdc-list-item-interactive:hover:before{opacity:0!important}.mat-expansion-indicator{border-bottom-right-radius:11px!important}.nav-footer-item{background:#FAFAFA;position:absolute;bottom:0%;width:18rem}.progress-footer{display:flex;width:100%;z-index:2}.panel-icon{float:right;color:#000!important}.user-name{display:inline-block;height:3.5rem;padding-left:.5rem;padding-top:3rem;padding-right:.5rem;font-size:larger;font-weight:800}::ng-deep .mat-mdc-list-base{padding:0!important}::ng-deep .mat-drawer-inner-container{min-width:275px;overflow:hidden!important}::ng-deep .mat-drawer-inner-container:hover{overflow:overlay!important}::ng-deep .icon-styling{padding-right:10px;padding-left:10px;width:24px;text-align:left}::ng-deep .nav-icon{margin-left:auto;padding-left:30px}::ng-deep .nav-item{font-family:Poppins;font-weight:500;padding-top:2px!important;padding-left:0!important}::ng-deep [sof-ar-nav-footer] hr{margin:5px 10px;opacity:.5}.subnav-content{padding:0;height:48px!important}.nav-header{height:64px!important}.mat-mdc-list-item{background-color:transparent;display:inline!important}::ng-deep .mdc-list-item__content{padding:0 4px!important;padding-left:1.5rem!important}::ng-deep .subnav-item{padding-left:1rem!important}::ng-deep .visible-mobile{display:none}@media only screen and (max-width: 959px){::ng-deep .visible-mobile{display:block}}@media (max-width: 959px){::ng-deep .sof-ar-fixed-nav{position:fixed;z-index:2;width:100%!important;box-sizing:border-box}}::ng-deep .sof-ar-nav-menu-btn{position:fixed!important;z-index:2!important;top:1.25%;width:44px!important;height:40px!important;color:var(--primary-color-500-parts)!important;background:var(--primary-color-50-parts)!important;border-radius:8px!important;padding:0!important}@media (max-width: 959px){::ng-deep .sof-ar-nav-menu-btn{margin-left:2%!important}}@media (min-width: 959px){::ng-deep .sof-ar-nav-menu-btn{margin-left:11px!important}}::ng-deep .sof-ar-nav-menu-btn:hover .mdc-icon-button__ripple,::ng-deep .sof-ar-nav-menu-btn:focus .mdc-icon-button__ripple{border-radius:inherit!important}@media only screen and (min-width: 959px){::ng-deep .mat-mdc-list-base:not(.subnav-item):not(.custom-nav):before{content:\"\";display:block;height:1px;margin-left:auto;width:calc(100% - 40px)}::ng-deep .mat-mdc-list-base:not(.subnav-item):not(.custom-nav):after{content:\"\";display:block;height:1px;margin-left:auto;width:calc(100% - 40px);margin-bottom:-1px}}::ng-deep .mat-step-text-label{color:#fff;font-family:Poppins,sans-serif!important;font-size:1.3em}::ng-deep .mat-expansion-indicator{padding:1em!important}::ng-deep .mat-stepper-vertical{background-color:transparent!important}.mat-mdc-nav-list{width:100%;margin-top:3px;margin-bottom:3px}.mat-mdc-nav-list:hover{border-bottom-right-radius:8px!important;border-top-right-radius:8px!important;background:var(--sof-nav-highlight-gradient-1)!important}.mat-expansion-panel-header{padding:0;height:64px!important;margin-top:3px;margin-bottom:3px}.mat-expansion-panel-header:hover,.sof-ar-nav-selected{background:var(--sof-nav-highlight-gradient-1)!important;border-bottom-right-radius:8px!important;border-top-right-radius:8px!important}.mat-expansion-panel{display:inline}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.step-active{border-bottom:3px solid var(--primary-color-500-parts);border-bottom-left-radius:0;border-bottom-right-radius:0}::ng-deep .mat-vertical-content{padding-bottom:0!important}.step-link{padding-left:0!important;padding-right:0!important}.step-titles{padding-top:20px;padding-bottom:20px}.step-titles>button{font-family:Poppins,sans-serif!important;font-size:16px!important;font-weight:500!important;color:#000;background-color:transparent!important}.step-active{border-bottom:0!important}::ng-deep .progress-menu-active,progress-menu-active *{color:#000!important}::ng-deep .color-primary,.color-primary *{color:var(--primary-color-500-parts)!important}.sof-ar-nav-sidenav{max-width:-webkit-fill-available}.nav-menu-btn-text{white-space:normal}.progress-menu-btn{width:-webkit-fill-available;text-align:left;padding:12px 16px!important;font-size:16px!important;height:-moz-fit-content;height:fit-content}::ng-deep .disabled,.disabled *,.progress-menu-btn:disabled,.progress-menu-mobile-btn:disabled,.mat-expansion-panel-header:disabled{color:#333c!important}.progress-nav-icon{margin-right:10px;font-size:14px}::ng-deep .progress-menu-mobile-btn{display:flex!important}::ng-deep .progress-nav-menu{display:flex!important}.progress-menu-mobile-btn{padding:12px 24px!important;width:-webkit-fill-available;text-align:left;height:-moz-fit-content;height:fit-content}.progress-mobile-panel-title{width:-webkit-fill-available;font-size:16px;font-family:Poppins,sans-serif!important;padding-left:24px}.progress-mobile-expansion-panel{margin:0!important}::ng-deep .progress-mobile-expansion-panel .mat-expansion-panel-body{background:var(--primary-color-50-parts)!important;padding:0!important;font-size:16px!important}::ng-deep .mat-mdc-menu-panel{max-width:unset!important}::ng-deep .progress-menu-panel{background:var(--primary-color-50-parts)!important}::ng-deep .cdk-overlay-container .cdk-overlay-pane{transform:none!important}::ng-deep .cdk-overlay-container .cdk-overlay-pane .step-option{margin-top:33px!important}.mobile-progress-container{padding-bottom:24px}.step-titles-mobile{padding-top:25px;padding-bottom:25px;background-color:transparent}.step-titles-mobile ::ng-deep .mat-mdc-select-trigger{padding-left:17px;padding-right:20px}.step-done{color:var(--accent-color-900-parts)!important;cursor:pointer}.step-future{color:var(--primary-color-900-parts)!important;opacity:.7}::ng-deep .mat-form-field-appearance-outline .mat-mdc-form-field-infix{padding-left:.5em!important;padding-right:.5em!important}::ng-deep .mdc-floating-label{padding-left:.5em!important;padding-right:.5em!important}::ng-deep .mat-form-field-appearance-outline .mat-mdc-form-field-icon-prefix{top:0!important}::ng-deep .mat-form-field-appearance-outline .mat-mdc-form-field-icon-suffix{top:0!important}[sws-alert--secondary]{max-height:90px;min-height:52px;padding:0 0 0 24px;margin:2px 5px;border-radius:5px;font-weight:700;font-size:16px;background:rgba(29,190,104,.1);border:2px solid #2b9c62;color:#2b9c62}.icon-container{align-self:center}.message-container{margin-left:10px;line-height:1.8}#btnClose{color:#000}.navigationFooter{width:100%;border:none;height:64px!important;font-family:Poppins;font-weight:500;font-size:15px!important;position:relative;text-align:left;padding-left:1.5rem}.navigationFooter:hover{color:unset!important}.nav-item-margin{position:relative;display:flex!important;width:inherit!important;height:inherit!important}.sof-ar-nav-menu-icon{font-size:23px}.menu-icon{color:var(--primary-color-800-parts)!important}.sidenav-background{background:transparent!important}::ng-deep .mat-expansion-panel-body{padding:0!important}::ng-deep .subnav-content>a>.mdc-list-item__content{padding:0 4px!important;padding-left:4.25rem!important}::ng-deep .nav-content-item{margin-right:24px;margin-top:24px}.sof-ar-nav-header-text{font-family:Poppins;font-weight:500;font-size:14px;line-height:175%;letter-spacing:.14em}\n"], dependencies: [{ kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i7.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i7.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i7.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i8.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i8.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i8.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "component", type: i9.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i9.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i9.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "component", type: i10.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i11.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i11.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i13.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i13.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i13.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i13.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i13.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i14.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i14.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i15.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "directive", type: i15.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: i15.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["selectedIndex", "disableRipple", "color", "labelPosition", "headerPosition", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }, { kind: "directive", type: i15.MatStepperIcon, selector: "ng-template[matStepperIcon]", inputs: ["matStepperIcon"] }, { kind: "component", type: i16.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: i17.TranslatePipe, name: "translate" }] });
519
+ }], viewQueries: [{ propertyName: "stepper", first: true, predicate: ["vertStepper"], descendants: true }, { propertyName: "sidenav", first: true, predicate: ["snav"], descendants: true }, { propertyName: "expansionPanel", first: true, predicate: ["panel"], descendants: true }, { propertyName: "innerSteppers", predicate: ["vertStepperInner"], descendants: true }], ngImport: i0, template: "<div class=\"sof-ar-nav-container\"\r\n [style.top]=\"mobileQuery.matches && advancedSettings.topGapMobile ? advancedSettings.topGapMobile + 'px' : settings.headerHeight + 'px'\"\r\n [class.sof-ar-nav-mobile]=\"mobileQuery.matches\">\r\n <div *ngIf=\"showMessage\" m-a-0 fxLayout=\"row\" fxLayoutAlign=\"space-between center\" sws-alert--secondary role=\"alert\">\r\n <div fxLayout=\"row\" aria-hidden=\"true\">\r\n <i *ngIf=\"showCheckMark\" m-r-5 m-l-5 class=\"fas fa-check-circle icon-container\"></i>\r\n <p class=\"message-container\" m-r-5 m-l-5 [innerHtml]=\"message | translate\"></p>\r\n </div>\r\n <div fxLayout=\"column\">\r\n <button id=\"btnClose\" (click)=\"hide()\" mat-icon-button [attr.aria-label]=\"'common.close' | translate\">\r\n <span aria-hidden=\"true\">\r\n <i class=\"fal fa-times fa-lg\"></i>\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n <button id=\"sof-ar-nav-btn-menu\" aria-label=\"Menu Button\" mat-icon-button [disableRipple]=\"true\"\r\n (click)=\"snav.toggle()\" class=\"sof-ar-nav-menu-btn\"\r\n [class.hidden]=\"!(mobileQuery.matches || settings.allowNavToggle) || settings.hideNavigation\">\r\n <span *ngIf=\"isNavOpen; else closedIcon\" aria-hidden=\"true\" class=\"sof-ar-nav-menu-icon\">\r\n <i class=\"{{settings.fontAwesomeMenuIcon}} menu-icon\"></i>\r\n </span>\r\n <ng-template #closedIcon>\r\n <span aria-hidden=\"true\" class=\"sof-ar-nav-menu-icon\">\r\n <i class=\"{{settings.fontAwesomeMenuIconClosed}} menu-icon\"></i>\r\n </span>\r\n </ng-template>\r\n <span class=\"sr-only\">{{settings.menuButtonSRText | translate}}</span>\r\n </button>\r\n\r\n <mat-sidenav-container autosize class=\"sof-ar-nav-sidenav-container\" [style.marginTop.px]=\"\r\n mobileQuery.matches ? advancedSettings.marginTopMobile : advancedSettings.marginTopDesktop\">\r\n <mat-sidenav [disableClose]=\"!mobileQuery.matches\" class=\"sof-ar-nav-sidenav\" #snav [mode]=\"mobileQuery.matches ? 'over' : 'side'\"\r\n [fixedInViewport]=\"mobileQuery.matches\" [fixedTopGap]=\"mobileQuery.matches ? advancedSettings.topGapMobile : advancedSettings.topGapDesktop\"\r\n [opened]=\"!mobileQuery.matches && !settings.hideNavigation && settings.menuStyle!='progress' \"\r\n [style.width]=\"mobileQuery.matches ? setNavWidth(settings.sideNavWidthMobile) : setNavWidth(settings.sideNavWidthDesktop)\"\r\n [ngStyle]=\"{background:mobileQuery.matches ? themeSettings?.mobileBgColor : undefined}\">\r\n <ng-container *ngIf=\"mobileQuery.matches && userName && !settings.customUserName\">\r\n <span class=\"user-name\">\r\n {{userName}}\r\n </span>\r\n </ng-container>\r\n <ng-container *ngIf=\"mobileQuery.matches && settings.customUserName\">\r\n <span class=\"user-name\">\r\n {{settings.customUserName | translate}}\r\n </span>\r\n </ng-container>\r\n <!-- Nav Header Content -->\r\n <ng-content select=\"[sof-ar-nav-header]\"> </ng-content>\r\n\r\n <!-- Static Navigation -->\r\n <div class=\"nav-content-item sidenav-background\" *ngIf=\"settings.menuStyle === 'static'\" [ngStyle]=\"{'padding-bottom.px': (footerItemCount*64)+128}\">\r\n <nav *ngIf=\"settings.menuStyle === 'static'\" [attr.aria-label]=\"'main'\">\r\n <ng-container *ngFor=\"let nav of navigationData\">\r\n <ng-container *ngIf=\"nav?.subNodes?.length && !nav.hidden\">\r\n <mat-accordion>\r\n <mat-expansion-panel [expanded]=\"nav.expanded\">\r\n <mat-expansion-panel-header [ngClass]=\"{ 'sof-ar-nav-selected': isNavSelected(nav) }\">\r\n <!-- Navigation -->\r\n <ng-container>\r\n <!-- If there is a route -->\r\n <ng-container *ngIf=\"nav?.route\">\r\n <mat-nav-list [disableRipple]=\"true\" [attr.role]=\"'navigation'\">\r\n <a class=\"nav-item\" mat-list-item [routerLink]=\"nav?.route\"\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"{{nav?.fontAwesomeIcon}}\"></i>\r\n </span>\r\n </ng-container>\r\n <span class=\"sof-ar-nav-header-text\">{{nav.text | translate}}</span>\r\n </a>\r\n </mat-nav-list>\r\n </ng-container>\r\n <!-- If there is not a route -->\r\n <ng-container *ngIf=\"!nav?.route\">\r\n <mat-nav-list [disableRipple]=\"true\" [attr.role]=\"'navigation'\">\r\n <button id=\"sof-ar-nav-btn-node\" class=\"nav-item\" mat-list-item\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"{{nav?.fontAwesomeIcon}}\"></i>\r\n </span>\r\n </ng-container>\r\n <span class=\"sof-ar-nav-header-text\">{{nav.text | translate}}</span>\r\n </button>\r\n </mat-nav-list>\r\n </ng-container>\r\n </ng-container>\r\n </mat-expansion-panel-header>\r\n <!-- SubNav -->\r\n <ng-container>\r\n <mat-nav-list [ngClass]=\"{ 'sof-ar-nav-selected': isNavSelected(subnav) }\" class=\"subnav-content\"\r\n [disableRipple]=\"true\" *ngFor=\"let subnav of nav?.subNodes\" (click)=\"closeNavigationForMobile()\" [attr.role]=\"'navigation'\">\r\n <a class=\"nav-item nav-item-margin\" mat-list-item [routerLinkActive]=\"['sof-ar-nav-sub-active-route']\" [routerLink]=\"subnav.route\"\r\n [attr.role]=\"'navigation'\" [attr.aria-label]=\"(nav.text | translate) + ' ' + (subnav.text | translate)\">\r\n <span class=\"sof-ar-nav-header-text\" [attr.role]=\"'navigation'\" \r\n [attr.aria-label]=\"(nav.text | translate) + ' ' + (subnav.text | translate)\">\r\n {{subnav.text | translate}}\r\n </span>\r\n </a>\r\n </mat-nav-list>\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n <!-- If subnodes are not there -->\r\n <ng-container>\r\n <ng-container *ngIf=\"!nav?.subNodes?.length && !nav?.hidden\">\r\n <!-- If there is a route -->\r\n <ng-container *ngIf=\"nav?.route\">\r\n <mat-nav-list [ngClass]=\"{ 'sof-ar-nav-selected': isNavSelected(nav) }\" class=\"nav-header\"\r\n [disableRipple]=\"true\" (click)=\"closeNavigationForMobile()\" [attr.role]=\"null\">\r\n <a class=\"nav-item nav-item-margin\" mat-list-item [routerLink]=\"nav?.route\"\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\"><i class=\"{{nav?.fontAwesomeIcon}}\"></i></span>\r\n </ng-container>\r\n <span class=\"sof-ar-nav-header-text\">{{nav.text | translate}}</span>\r\n </a>\r\n </mat-nav-list>\r\n </ng-container>\r\n <!-- If there is not a route -->\r\n <ng-container *ngIf=\"!nav?.route\">\r\n <mat-nav-list [disableRipple]=\"true\" [attr.role]=\"null\">\r\n <button id=\"sof-ar-nav-btn-node\" class=\"nav-item\" mat-list-item\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\"><i class=\"{{nav?.fontAwesomeIcon}}\"></i></span>\r\n </ng-container>\r\n <span class=\"sof-ar-nav-header-text\">{{nav.text | translate}}</span>\r\n </button>\r\n </mat-nav-list>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </nav>\r\n </div>\r\n\r\n <!-- Stepper -->\r\n <mat-vertical-stepper *ngIf=\"settings.menuStyle === 'stepper'\" [selectedIndex]=\"selectedParentIndex\" #vertStepper\r\n [linear]=\"false\" class=\"sidenav-background\">\r\n <!-- Alternate step states for nav, icaons should always be white only worked with styles -->\r\n <ng-template matStepperIcon=\"create\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"edit\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"active\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"done\">\r\n <span>\r\n <i class=\"fas fa-check\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n\r\n <!-- nav steps -->\r\n <ng-container *ngFor=\"let nav of navigationData; let i = index\">\r\n <mat-step *ngIf=\"!nav?.hidden\" state=\"{{ determineStepState(i, -1) }}\">\r\n <ng-template matStepLabel *ngIf=\"!nav.hidden\">\r\n <div id=\"divStep{{ i }}\" style=\"height: 72px\" fxLayout=\"row\" fxLayoutAlign=\"start center\"\r\n matTooltip=\"{{ nav.text | translate }}\" [matTooltipPosition]=\"'after'\" fxFlex=\"100%\">\r\n <a id=\"step{{ i }}\" fxFlex=\"100%\" class=\"mat-button step-link\" [routerLink]=\"nav.route\"\r\n [ngStyle]=\"{ color: themeSettings?.fontColor }\" [routerLinkActive]=\"['step-active']\">\r\n {{ nav.text | translate }}\r\n </a>\r\n </div>\r\n </ng-template>\r\n <p [innerHTML]=\"nav.stepContent | translate\"></p>\r\n <!-- sub nav -->\r\n <mat-vertical-stepper *ngIf=\"nav?.subNodes\" [selectedIndex]=\"selectedChildIndexes[i]\" [linear]=\"false\"\r\n #vertStepperInner>\r\n <!-- Alternate step states for sub nav, icons should always be white only worked with styles -->\r\n <ng-template matStepperIcon=\"create\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"edit\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"done\">\r\n <span>\r\n <i class=\"fas fa-check\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"active\">\r\n <span>\r\n <i class=\"fas fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"none\">\r\n <span></span>\r\n </ng-template>\r\n <!-- sub nav steps -->\r\n <ng-container *ngFor=\"let subnav of nav?.subNodes; let j = index\">\r\n <mat-step state=\"{{ determineStepState(i, j) }}\" *ngIf=\"!subnav.hidden\">\r\n <ng-template matStepLabel>\r\n <div id=\"divSubStep{{ i }}-{{ j }}\" style=\"height: 72px\" fxLayout=\"row\" fxLayoutAlign=\"start center\"\r\n matTooltip=\"{{ subnav.text | translate }}\" [matTooltipPosition]=\"'after'\" fxFlex=\"100%\">\r\n <a id=\"subStep{{ i }}-{{ j }}\" class=\"mat-button step-link\"\r\n [ngStyle]=\"{ color: themeSettings?.fontColor }\" [routerLink]=\"subnav.route\"\r\n [routerLinkActive]=\"['step-active']\">{{ subnav.text | translate }}</a>\r\n </div>\r\n </ng-template>\r\n <p [innerHTML]=\"subnav.stepContent | translate\"></p>\r\n </mat-step>\r\n </ng-container>\r\n\r\n </mat-vertical-stepper>\r\n </mat-step>\r\n </ng-container>\r\n\r\n </mat-vertical-stepper>\r\n\r\n <!-- Nav Footer -->\r\n <div class=\"nav-footer-item\">\r\n <ng-container *ngIf=\"settings.menuStyle === 'static'\">\r\n <ng-container *ngFor=\"let nav of footerNavigationData\">\r\n <ng-container>\r\n <!-- Desktop Nav -->\r\n <ng-container *ngIf=\"!nav?.subNodes?.length\">\r\n <!-- If there is a route -->\r\n <ng-container *ngIf=\"nav?.route\">\r\n <mat-nav-list class=\"nav-header\" [disableRipple]=\"true\">\r\n <a class=\"nav-item nav-item-margin\" mat-list-item [routerLink]=\"nav?.route\"\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\"><i class=\"{{nav?.fontAwesomeIcon}}\"></i></span>\r\n </ng-container>\r\n {{nav.text | translate}}\r\n </a>\r\n </mat-nav-list>\r\n </ng-container>\r\n <!-- If there is not a route -->\r\n <ng-container *ngIf=\"!nav?.route\">\r\n <mat-nav-list>\r\n <button id=\"sof-ar-nav-btn-node\" class=\"nav-item\" mat-list-item\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\"><i class=\"{{nav?.fontAwesomeIcon}}\"></i></span>\r\n </ng-container>\r\n {{nav.text | translate}}\r\n </button>\r\n </mat-nav-list>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template [ngTemplateOutlet]=\"navigationFooter\">\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- the mobile progress menu-->\r\n <ng-container *ngIf=\"settings?.menuStyle === 'progress'\">\r\n <div class=\"sidenav-background\" [ngStyle]=\"{'padding-bottom.px': (footerItemCount*64)+128}\">\r\n <mat-accordion>\r\n <div *ngFor=\"let step of navigationData; let i = index\">\r\n <ng-container *ngIf=\"step.subNodes && step.subNodes.length > 0 && !step.hidden\">\r\n <mat-expansion-panel hideToggle class=\"progress-mobile-expansion-panel\"\r\n [disabled]=\"(!step.visited || step.isDisabled) && !settings.overrideNavigation\" (opened)=\"panelOpenState = true\"\r\n (closed)=\"panelOpenState = false\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title class=\"progress-mobile-panel-title\">\r\n <div style=\"width: -webkit-fill-available;\"\r\n [ngClass]=\"{'disabled':(!step.visited || step.isDisabled) && !settings.overrideNavigation && !step.complete,'color-primary':step.complete && step!=activeParentNode,'progress-menu-active':step===activeParentNode}\">\r\n <ng-template [ngTemplateOutlet]=\"progressParentNodeIcons\" [ngTemplateOutletContext]=\"{step:step}\">\r\n </ng-template>\r\n <span *ngIf=\"settings?.displayNumbers\">\r\n {{i < 10 ? \"0\" + (i + 1) + \". \" : i + \" . \" }}\r\n </span>\r\n <span class=\"nav-btn-text\">\r\n {{ step.text | translate }}\r\n </span>\r\n <span *ngIf=\"!panelOpenState\">\r\n <i class=\"fas fa-chevron-down panel-icon\"></i>\r\n </span>\r\n <span *ngIf=\"panelOpenState\">\r\n <i class=\"fas fa-chevron-up panel-icon\"></i>\r\n </span>\r\n </div>\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <!-- mobile sub menu -->\r\n <div class=\"progress-nav-menu\" *ngFor=\"let subNode of step.subNodes; let idx = index;\" [hidden]=\"step.subNodes[idx].hidden\">\r\n <button id=\"mobileMenu{{ idx }}\" mat-button class=\"step-link progress-menu-mobile-btn\"\r\n [ngClass]=\"{'color-primary':subNode.complete && subNode!=activeSubNode}\"\r\n [routerLinkActive]=\"['progress-menu-active']\" [ngStyle]=\"{ ' color': themeSettings?.fontColor }\"\r\n [routerLink]=\"subNode.route\" [disabled]=\"!subNode.visited && !settings.overrideNavigation\">\r\n <ng-template [ngTemplateOutlet]=\"progressSubNodeIcons\"\r\n [ngTemplateOutletContext]=\"{subNode:subNode}\">\r\n </ng-template>\r\n <span class=\"nav-menu-btn-text\" [ngClass]=\"{'disabled':(!subNode.visited) && !settings.overrideNavigation && !subNode.complete,'color-primary':subNode.complete && subNode!=activeSubNode,'progress-menu-active':subNode===activeSubNode}\">{{ subNode.text | translate }}</span>\r\n </button>\r\n </div>\r\n </mat-expansion-panel>\r\n </ng-container>\r\n <!-- if there are no subNodes -->\r\n <ng-container *ngIf=\"(!step.subNodes || step.subNodes.length==0) && !step.hidden\">\r\n <mat-expansion-panel #panel hideToggle (opened)=\"disablePanel(panel,i)\" class=\"progress-mobile-expansion-panel\"\r\n [disabled]=\"(!step.visited || step.isDisabled) && !settings.overrideNavigation\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title class=\"progress-mobile-panel-title\">\r\n <div [ngClass]=\"{'disabled':(!step.visited || step.isDisabled) && !settings.overrideNavigation && !step.complete,'color-primary':step.complete && step!=activeParentNode,'progress-menu-active':step===activeParentNode}\">\r\n <ng-template [ngTemplateOutlet]=\"progressParentNodeIcons\" [ngTemplateOutletContext]=\"{step:step}\">\r\n </ng-template>\r\n <span *ngIf=\"settings?.displayNumbers\">\r\n {{i < 10 ? \"0\" + (i + 1) + \". \" : i + \" . \" }}\r\n </span>\r\n <span class=\"nav-btn-text\">\r\n {{ step.text | translate }}\r\n </span>\r\n </div>\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n </mat-expansion-panel>\r\n </ng-container>\r\n </div>\r\n </mat-accordion>\r\n </div>\r\n\r\n <!-- the progress menu language and logout buttons-->\r\n <div class=\"nav-footer-item progress-footer\">\r\n <ng-template [ngTemplateOutlet]=\"navigationFooter\">\r\n </ng-template>\r\n </div>\r\n </ng-container>\r\n </mat-sidenav>\r\n <mat-sidenav-content>\r\n <!-- Horizontal Progress -->\r\n <ng-container *ngIf=\"settings?.menuStyle === 'progress'\">\r\n <mat-progress-bar *ngIf=\"settings?.showProgressBar\" mode=\"determinate\" [value]=\"navProgressCount\"\r\n style=\"height: 9px\" color=\"accent\">\r\n </mat-progress-bar>\r\n <div fxHide.lt-md class=\"step-titles center\" fxLayout=\"row\" style=\"justify-content:center !important\" [class.hidden]=\"settings.hideNavigation\">\r\n <div *ngFor=\"let step of navigationData; let i = index\" class=\"horizontal-progress-div\">\r\n <ng-container *ngIf=\"!step.subNodes?.length && !step.hidden\">\r\n <button mat-button [routerLink]=\"step.route\"\r\n [disabled]=\"(!step.visited || step.isDisabled) && !settings.overrideNavigation\" class=\"progress-menu-btn\"\r\n [ngClass]=\"{'color-primary':step.complete && step!=activeParentNode,'progress-menu-active':step===activeParentNode}\">\r\n <ng-template [ngTemplateOutlet]=\"progressParentNodeIcons\" [ngTemplateOutletContext]=\"{step:step}\">\r\n </ng-template>\r\n <span *ngIf=\"settings?.displayNumbers\">\r\n {{i < 10 ? \"0\" + (i + 1) + \". \" : i + \" . \"}}\r\n </span>\r\n <span class=\"nav-btn-text\">{{ step.text | translate }}</span>\r\n </button>\r\n </ng-container>\r\n <!-- if there are subnodes create menus for each step -->\r\n <ng-container *ngIf=\"step.subNodes && step.subNodes.length && !step.hidden\">\r\n <button [ngClass]=\"{'color-primary':step.complete && step!=activeParentNode,'progress-menu-active':step===activeParentNode}\"\r\n mat-button [disabled]=\"(!step.visited || step.isDisabled) && !settings.overrideNavigation\" class=\"progress-menu-btn\"\r\n [matMenuTriggerFor]=\"menu\">\r\n <ng-template [ngTemplateOutlet]=\"progressParentNodeIcons\" [ngTemplateOutletContext]=\"{step:step}\">\r\n </ng-template>\r\n <span *ngIf=\"settings?.displayNumbers\">\r\n {{i < 10 ? \"0\" + (i + 1) + \". \" : i + \" . \"}}\r\n </span>\r\n <span class=\"nav-btn-text\">{{ step.text | translate }}</span>\r\n </button>\r\n <mat-menu #menu=\"matMenu\" class=\"sof-ar-mat-menu progress-menu-panel\">\r\n <div class=\"progress-nav-menu\" *ngFor=\"let subNode of step.subNodes; let idx = index;\" [ngStyle]=\"{width:settings.progressMenuWidth+'px'}\" [hidden]=\"step.subNodes[idx].hidden\">\r\n <button id=\"submenu{{ idx }}\" mat-button class=\"step-link progress-menu-btn\"\r\n [ngClass]=\"{'color-primary':subNode.complete && subNode!=activeSubNode,'disabled':!subNode.visited && !settings.overrideNavigation}\"\r\n [routerLinkActive]=\"['progress-menu-active']\" [ngStyle]=\"{ ' color': themeSettings?.fontColor }\"\r\n [routerLink]=\"subNode.route\" [disabled]=\"!subNode.visited && !settings.overrideNavigation\">\r\n <ng-template [ngTemplateOutlet]=\"progressSubNodeIcons\"\r\n [ngTemplateOutletContext]=\"{subNode:subNode}\">\r\n </ng-template>\r\n <span class=\"nav-menu-btn-text\">{{ subNode.text |translate }}</span>\r\n </button>\r\n </div>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"mobile-progress-container\" fxHide.gt-sm>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-content sof-ar-nav-content></ng-content>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n <!-- The progress menu parent node icon template-->\r\n <ng-template #progressParentNodeIcons let-step='step'>\r\n <span *ngIf=\"step.complete && step != activeParentNode\" \r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.complete' | translate\">\r\n <i class=\"{{ settings.progressSectionCompleteIcon }} color-primary progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.complete' | translate\"></i>\r\n </span>\r\n <span *ngIf=\"step === activeParentNode\" \r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.in-progress' | translate\">\r\n <i class=\"{{ settings.progressSectionCurrentIcon }} color-primary progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.in-progress' | translate\"></i>\r\n </span>\r\n <span *ngIf=\"!step.complete && step != activeParentNode\" [ngClass]=\"{'disabled':!step.visited && !settings.overrideNavigation}\" \r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.not-done' | translate\">\r\n <i class=\"{{ settings.progressSectionFutureIcon }} progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.not-done' | translate\"></i>\r\n </span>\r\n </ng-template>\r\n <!-- The progress menu sub node icon template-->\r\n <ng-template #progressSubNodeIcons let-subNode='subNode'>\r\n <span *ngIf=\"subNode.complete && activeSubNode != subNode\"\r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.complete' | translate\">\r\n <i class=\"{{settings.progressMenuCompleteIcon}} color-primary progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.complete' | translate\"></i>\r\n </span>\r\n <span *ngIf=\"activeSubNode === subNode\"\r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.in-progress' | translate\">\r\n <i class=\"{{ settings.progressSectionCurrentIcon }} color-primary progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.in-progress' | translate\"></i>\r\n </span>\r\n <span *ngIf=\"!subNode.complete && activeSubNode != subNode\" [ngClass]=\"{'disabled':!subNode.visited && !settings.overrideNavigation}\"\r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.not-done' | translate\">\r\n <i class=\"{{ settings.progressSectionFutureIcon }} progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.not-done' | translate\"></i>\r\n </span>\r\n </ng-template>\r\n <!-- The navigation footer template for language and logout buttons -->\r\n <ng-template #navigationFooter>\r\n <ng-content select=\"[sof-ar-nav-mobile-footer]\"> </ng-content>\r\n <ng-container *ngIf=\"!settings.useCustomMobileFooter\">\r\n <!-- The language button -->\r\n <ng-container *ngIf=\"languageSettings?.displayLanguageOptions && languageSettings?.languages.length > 2 && mobileQuery.matches\">\r\n <button id=\"sof-ar-nav-lang-dropdown\" mat-stroked-button\r\n class=\"faded-button-50 language-button navigationFooter\" [matMenuTriggerFor]=\"headerLanguageMenu\"\r\n [attr.aria-label]=\"languageSettings.buttonText | translate\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"far fa-globe language-globe\"></i>\r\n </span>\r\n {{languageSettings.buttonText | translate}}\r\n </button>\r\n <mat-menu #headerLanguageMenu=\"matMenu\" class=\"sof-ar-mat-menu\">\r\n <button mat-menu-item *ngFor=\"let lang of languageSettings.languages\" (click)=\"setLanguage$.emit(lang)\"\r\n id=\"apply-lang-btn-{{lang}}\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\">\r\n <div fxFlex=\"auto\">\r\n {{ lang | translate }}\r\n </div>\r\n <div fxFlex=\"auto\" fxLayoutAlign=\"end end\">\r\n <i *ngIf=\"currentLang === lang\" class=\"fad fa-check selected-language-icon\"></i>\r\n </div>\r\n </div>\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <ng-container *ngIf=\"languageSettings?.displayLanguageOptions && languageSettings?.languages.length === 2 && mobileQuery.matches\">\r\n <button *ngIf=\"languageSettings?.languages.length === 2\" id=\"sof-ar-nav-lang-button\" mat-stroked-button\r\n class=\"faded-button-50 language-button navigationFooter\"\r\n [attr.aria-label]=\"languageSettings.buttonText | translate\" (click)=\"setLanguage$.emit()\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"far fa-globe language-globe\"></i>\r\n </span>\r\n {{otherLangText | translate}}\r\n </button>\r\n </ng-container>\r\n <!-- The logout button-->\r\n <ng-container *ngIf=\"mobileQuery.matches && userName\">\r\n <button id=\"sof-ar-header-lang-button\" mat-stroked-button class=\"navigationFooter\" (click)=\"logOut()\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"fas fa-sign-out-alt\"></i>\r\n </span>\r\n {{logOutText | translate}}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n</div>\r\n", styles: [":root{--primary-color-50-parts: #edf4ff;--primary-color-100-parts: #b9d4fc;--primary-color-200-parts: #8ab7fb;--primary-color-300-parts: #5b9af9;--primary-color-400-parts: #3784f7;--primary-color-500-parts: #146ef6;--primary-color-600-parts: #1266f5;--primary-color-700-parts: #0e5bf3;--primary-color-800-parts: #0b51f2;--primary-color-900-parts: #063fef;--primary-color-A100-parts: #ffffff;--primary-color-A200-parts: #e4e9ff;--primary-color-A400-parts: #b1c0ff;--primary-color-A700-parts: #97acff;--primary-color-contrast-50-parts: rgba(0, 0, 0, .87);--primary-color-contrast-100-parts: rgba(0, 0, 0, .87);--primary-color-contrast-200-parts: rgba(0, 0, 0, .87);--primary-color-contrast-300-parts: rgba(0, 0, 0, .87);--primary-color-contrast-400-parts: rgba(255, 255, 255, 1);--primary-color-contrast-500-parts: rgba(255, 255, 255, 1);--primary-color-contrast-600-parts: rgba(255, 255, 255, 1);--primary-color-contrast-700-parts: rgba(255, 255, 255, 1);--primary-color-contrast-800-parts: rgba(255, 255, 255, 1);--primary-color-contrast-900-parts: rgba(255, 255, 255, 1);--primary-color-contrast-A100-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A200-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A400-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A700-parts: rgba(0, 0, 0, .87);--primary-color-50-parts-rgb: 237, 244, 255;--primary-color-100-parts-rgb: 185, 212, 252;--primary-color-200-parts-rgb: 138, 183, 251;--primary-color-300-parts-rgb: 91, 154, 249;--primary-color-400-parts-rgb: 55, 132, 247;--primary-color-500-parts-rgb: 20, 110, 246;--primary-color-600-parts-rgb: 18, 102, 245;--primary-color-700-parts-rgb: 14, 91, 243;--primary-color-800-parts-rgb: 11, 81, 242;--primary-color-900-parts-rgb: 6, 63, 239;--primary-color-A100-parts-rgb: 255, 255, 255;--primary-color-A200-parts-rgb: 228, 233, 255;--primary-color-A400-parts-rgb: 177, 192, 255;--primary-color-A700-parts-rgb: 151, 172, 255;--accent-color-50-parts: #e0f2f1;--accent-color-100-parts: #b2dfdb;--accent-color-200-parts: #80cbc4;--accent-color-300-parts: #4db6ac;--accent-color-400-parts: #26a69a;--accent-color-500-parts: #009688;--accent-color-600-parts: #00897b;--accent-color-700-parts: #00796b;--accent-color-800-parts: #00695c;--accent-color-900-parts: #004d40;--accent-color-A100-parts: #a7ffeb;--accent-color-A200-parts: #64ffda;--accent-color-A400-parts: #1de9b6;--accent-color-A700-parts: #00bfa5;--accent-color-contrast-50-parts: #000000;--accent-color-contrast-100-parts: #000000;--accent-color-contrast-200-parts: #000000;--accent-color-contrast-300-parts: #000000;--accent-color-contrast-400-parts: #000000;--accent-color-contrast-500-parts: #ffffff;--accent-color-contrast-600-parts: #ffffff;--accent-color-contrast-700-parts: #ffffff;--accent-color-contrast-800-parts: #ffffff;--accent-color-contrast-900-parts: #ffffff;--accent-color-contrast-A100-parts: #000000;--accent-color-contrast-A200-parts: #000000;--accent-color-contrast-A400-parts: #000000;--accent-color-contrast-A700-parts: #000000;--accent-color-50-parts-rgb: 224, 242, 241;--accent-color-100-parts-rgb: 178, 223, 219;--accent-color-200-parts-rgb: 128, 203, 196;--accent-color-300-parts-rgb: 77, 182, 172;--accent-color-400-parts-rgb: 38, 166, 154;--accent-color-500-parts-rgb: 0, 150, 136;--accent-color-600-parts-rgb: 0, 137, 123;--accent-color-700-parts-rgb: 0, 121, 107;--accent-color-800-parts-rgb: 0, 105, 92;--accent-color-900-parts-rgb: 0, 77, 64;--accent-color-A100-parts-rgb: 167, 255, 235;--accent-color-A200-parts-rgb: 100, 255, 218;--accent-color-A400-parts-rgb: 29, 233, 182;--accent-color-A700-parts-rgb: 0, 191, 165;--warn-color-50-parts: #fdf3e7;--warn-color-100-parts: #fbe1c3;--warn-color-200-parts: #f9ce9c;--warn-color-300-parts: #f6ba74;--warn-color-400-parts: #f4ab56;--warn-color-500-parts: #f29c38;--warn-color-600-parts: #f09432;--warn-color-700-parts: #ee8a2b;--warn-color-800-parts: #ec8024;--warn-color-900-parts: #e86e17;--warn-color-A100-parts: #ffffff;--warn-color-A200-parts: #fff0e6;--warn-color-A400-parts: #ffd0b3;--warn-color-A700-parts: #ffc19a;--warn-color-contrast-50-parts: rgba(0, 0, 0, .87);--warn-color-contrast-100-parts: rgba(0, 0, 0, .87);--warn-color-contrast-200-parts: rgba(0, 0, 0, .87);--warn-color-contrast-300-parts: rgba(0, 0, 0, .87);--warn-color-contrast-400-parts: rgba(0, 0, 0, .87);--warn-color-contrast-500-parts: rgba(0, 0, 0, .87);--warn-color-contrast-600-parts: rgba(0, 0, 0, .87);--warn-color-contrast-700-parts: rgba(0, 0, 0, .87);--warn-color-contrast-800-parts: rgba(0, 0, 0, .87);--warn-color-contrast-900-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A100-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A200-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A400-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A700-parts: rgba(0, 0, 0, .87);--warn-color-50-parts-rgb: 253, 243, 231;--warn-color-100-parts-rgb: 251, 225, 195;--warn-color-200-parts-rgb: 249, 206, 156;--warn-color-300-parts-rgb: 246, 186, 116;--warn-color-400-parts-rgb: 244, 171, 86;--warn-color-500-parts-rgb: 242, 156, 56;--warn-color-600-parts-rgb: 240, 148, 50;--warn-color-700-parts-rgb: 238, 138, 43;--warn-color-800-parts-rgb: 236, 128, 36;--warn-color-900-parts-rgb: 232, 110, 23;--warn-color-A100-parts-rgb: 255, 255, 255;--warn-color-A200-parts-rgb: 255, 240, 230;--warn-color-A400-parts-rgb: 255, 208, 179;--warn-color-A700-parts-rgb: 255, 193, 154;--info-color-50-parts: #e7f3fb;--info-color-100-parts: #c2e0f4;--info-color-200-parts: #9acced;--info-color-300-parts: #71b7e6;--info-color-400-parts: #52a7e0;--info-color-500-parts: #3498db;--info-color-600-parts: #2f90d7;--info-color-700-parts: #2785d2;--info-color-800-parts: #217bcd;--info-color-900-parts: #156ac4;--info-color-A100-parts: #f5f9ff;--info-color-A200-parts: #c2ddff;--info-color-A400-parts: #8fc1ff;--info-color-A700-parts: #75b3ff;--info-color-contrast-50-parts: rgba(0, 0, 0, .87);--info-color-contrast-100-parts: rgba(0, 0, 0, .87);--info-color-contrast-200-parts: rgba(0, 0, 0, .87);--info-color-contrast-300-parts: rgba(0, 0, 0, .87);--info-color-contrast-400-parts: rgba(255, 255, 255, 1);--info-color-contrast-500-parts: rgba(255, 255, 255, 1);--info-color-contrast-600-parts: rgba(255, 255, 255, 1);--info-color-contrast-700-parts: rgba(255, 255, 255, 1);--info-color-contrast-800-parts: rgba(255, 255, 255, 1);--info-color-contrast-900-parts: rgba(255, 255, 255, 1);--info-color-contrast-A100-parts: rgba(0, 0, 0, .87);--info-color-contrast-A200-parts: rgba(0, 0, 0, .87);--info-color-contrast-A400-parts: rgba(0, 0, 0, .87);--info-color-contrast-A700-parts: rgba(0, 0, 0, .87);--info-color-50-parts-rgb: 231, 243, 251;--info-color-100-parts-rgb: 194, 224, 244;--info-color-200-parts-rgb: 154, 204, 237;--info-color-300-parts-rgb: 113, 183, 230;--info-color-400-parts-rgb: 82, 167, 224;--info-color-500-parts-rgb: 52, 152, 219;--info-color-600-parts-rgb: 47, 144, 215;--info-color-700-parts-rgb: 39, 133, 210;--info-color-800-parts-rgb: 33, 123, 205;--info-color-900-parts-rgb: 21, 106, 196;--info-color-A100-parts-rgb: 245, 249, 255;--info-color-A200-parts-rgb: 194, 221, 255;--info-color-A400-parts-rgb: 143, 193, 255;--info-color-A700-parts-rgb: 117, 179, 255;--success-color-50-parts: #edf5eb;--success-color-100-parts: #d1e6ce;--success-color-200-parts: #b3d6ae;--success-color-300-parts: #95c58d;--success-color-400-parts: #7eb874;--success-color-500-parts: #67ac5c;--success-color-600-parts: #5fa554;--success-color-700-parts: #549b4a;--success-color-800-parts: #4a9241;--success-color-900-parts: #398230;--success-color-A100-parts: #d0ffcb;--success-color-A200-parts: #a2ff98;--success-color-A400-parts: #74ff65;--success-color-A700-parts: #5dff4c;--success-color-contrast-50-parts: rgba(0, 0, 0, .87);--success-color-contrast-100-parts: rgba(0, 0, 0, .87);--success-color-contrast-200-parts: rgba(0, 0, 0, .87);--success-color-contrast-300-parts: rgba(0, 0, 0, .87);--success-color-contrast-400-parts: rgba(0, 0, 0, .87);--success-color-contrast-500-parts: rgba(0, 0, 0, .87);--success-color-contrast-600-parts: rgba(0, 0, 0, .87);--success-color-contrast-700-parts: rgba(255, 255, 255, 1);--success-color-contrast-800-parts: rgba(255, 255, 255, 1);--success-color-contrast-900-parts: rgba(255, 255, 255, 1);--success-color-contrast-A100-parts: rgba(0, 0, 0, .87);--success-color-contrast-A200-parts: rgba(0, 0, 0, .87);--success-color-contrast-A400-parts: rgba(0, 0, 0, .87);--success-color-contrast-A700-parts: rgba(0, 0, 0, .87);--success-color-50-parts-rgb: 237, 245, 235;--success-color-100-parts-rgb: 209, 230, 206;--success-color-200-parts-rgb: 179, 214, 174;--success-color-300-parts-rgb: 149, 197, 141;--success-color-400-parts-rgb: 126, 184, 116;--success-color-500-parts-rgb: 103, 172, 92;--success-color-600-parts-rgb: 95, 165, 84;--success-color-700-parts-rgb: 84, 155, 74;--success-color-800-parts-rgb: 74, 146, 65;--success-color-900-parts-rgb: 57, 130, 48;--success-color-A100-parts-rgb: 208, 255, 203;--success-color-A200-parts-rgb: 162, 255, 152;--success-color-A400-parts-rgb: 116, 255, 101;--success-color-A700-parts-rgb: 93, 255, 76;--error-color-50-parts: #fceae8;--error-color-100-parts: #f8c9c5;--error-color-200-parts: #f3a69e;--error-color-300-parts: #ee8277;--error-color-400-parts: #eb6759;--error-color-500-parts: #e74c3c;--error-color-600-parts: #e44536;--error-color-700-parts: #e03c2e;--error-color-800-parts: #dd3327;--error-color-900-parts: #d7241a;--error-color-A100-parts: #ffffff;--error-color-A200-parts: #ffd9d7;--error-color-A400-parts: #ffa8a4;--error-color-A700-parts: #ff8f8b;--error-color-contrast-50-parts: rgba(0, 0, 0, .87);--error-color-contrast-100-parts: rgba(0, 0, 0, .87);--error-color-contrast-200-parts: rgba(0, 0, 0, .87);--error-color-contrast-300-parts: rgba(0, 0, 0, .87);--error-color-contrast-400-parts: rgba(0, 0, 0, .87);--error-color-contrast-500-parts: rgba(255, 255, 255, 1);--error-color-contrast-600-parts: rgba(255, 255, 255, 1);--error-color-contrast-700-parts: rgba(255, 255, 255, 1);--error-color-contrast-800-parts: rgba(255, 255, 255, 1);--error-color-contrast-900-parts: rgba(255, 255, 255, 1);--error-color-contrast-A100-parts: rgba(0, 0, 0, .87);--error-color-contrast-A200-parts: rgba(0, 0, 0, .87);--error-color-contrast-A400-parts: rgba(0, 0, 0, .87);--error-color-contrast-A700-parts: rgba(0, 0, 0, .87);--error-color-50-parts-rgb: 252, 234, 232;--error-color-100-parts-rgb: 248, 201, 197;--error-color-200-parts-rgb: 248, 201, 197;--error-color-300-parts-rgb: 238, 130, 119;--error-color-400-parts-rgb: 235, 103, 89;--error-color-500-parts-rgb: 231, 76, 60;--error-color-600-parts-rgb: 228, 69, 54;--error-color-700-parts-rgb: 224, 60, 46;--error-color-800-parts-rgb: 221, 51, 39;--error-color-900-parts-rgb: 215, 36, 26;--error-color-A100-parts-rgb: 255, 255, 255;--error-color-A200-parts-rgb: 255, 217, 215;--error-color-A400-parts-rgb: 255, 168, 164;--error-color-A700-parts-rgb: 255, 143, 139;--neutral-color-50-parts: #e9e9e9;--neutral-color-100-parts: #dddddd;--neutral-color-200-parts: #cccccc;--neutral-color-300-parts: #b0b0b0;--neutral-color-400-parts: #909090;--neutral-color-500-parts: #515151;--neutral-color-600-parts: #424242;--neutral-color-700-parts: #333333;--neutral-color-800-parts: #212121;--neutral-color-900-parts: #141414;--neutral-color-A100-parts: #ffffff;--neutral-color-A200-parts: #ffffff;--neutral-color-A400-parts: #ffffff;--neutral-color-A700-parts: #ffffff;--neutral-color-contrast-50-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-100-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-200-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-300-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-400-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-500-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-600-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-700-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-800-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-900-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-A100-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A200-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A400-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A700-parts: rgba(0, 0, 0, .87);--neutral-color-50-parts-rgb: 233, 233, 233;--neutral-color-100-parts-rgb: 221, 221, 221;--neutral-color-200-parts-rgb: 204, 204, 204;--neutral-color-300-parts-rgb: 176, 176, 176;--neutral-color-400-parts-rgb: 144, 144, 144;--neutral-color-500-parts-rgb: 81, 81, 81;--neutral-color-600-parts-rgb: 66, 66, 66;--neutral-color-700-parts-rgb: 51, 51, 51;--neutral-color-800-parts-rgb: 33, 33, 33;--neutral-color-900-parts-rgb: 20, 20, 20;--neutral-color-A100-parts-rgb: 255, 255, 255;--neutral-color-A200-parts-rgb: 255, 255, 255;--neutral-color-A400-parts-rgb: 255, 255, 255;--neutral-color-A700-parts-rgb: 255, 255, 255}.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale3d(0,0,0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.mat-ripple-element{background-color:#0000001a}.mat-mdc-option{color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, .87))}.mat-mdc-option:hover:not(.mdc-list-item--disabled),.mat-mdc-option:focus:not(.mdc-list-item--disabled),.mat-mdc-option.mat-mdc-option-active,.mat-mdc-option.mdc-list-item--selected:not(.mat-mdc-option-multiple):not(.mdc-list-item--disabled){background:rgba(0,0,0,.04)}.mat-primary .mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text{color:var(--mdc-theme-primary, var(--primary-color-500-parts))}.mat-accent .mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text{color:var(--mdc-theme-secondary, var(--accent-color-500-parts))}.mat-warn .mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text{color:var(--mdc-theme-error, #f44336)}.mat-mdc-optgroup-label{color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, .87))}.mat-pseudo-checkbox-full{color:#0000008a}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-disabled{color:#b0b0b0}.mat-primary .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-primary .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:var(--primary-color-500-parts)}.mat-primary .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-primary .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:var(--primary-color-500-parts)}.mat-primary .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,.mat-primary .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after{color:#fafafa}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:var(--accent-color-500-parts)}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:var(--accent-color-500-parts)}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after{color:#fafafa}.mat-accent .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-accent .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:var(--accent-color-500-parts)}.mat-accent .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-accent .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:var(--accent-color-500-parts)}.mat-accent .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,.mat-accent .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after{color:#fafafa}.mat-warn .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-warn .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:#f44336}.mat-warn .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-warn .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:#f44336}.mat-warn .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,.mat-warn .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after{color:#fafafa}.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:#b0b0b0}.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:#b0b0b0}.mat-app-background{background-color:#fafafa;color:#000000de}.mat-elevation-z0,.mat-mdc-elevation-specific.mat-elevation-z0{box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f}.mat-elevation-z1,.mat-mdc-elevation-specific.mat-elevation-z1{box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.mat-elevation-z2,.mat-mdc-elevation-specific.mat-elevation-z2{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.mat-elevation-z3,.mat-mdc-elevation-specific.mat-elevation-z3{box-shadow:0 3px 3px -2px #0003,0 3px 4px #00000024,0 1px 8px #0000001f}.mat-elevation-z4,.mat-mdc-elevation-specific.mat-elevation-z4{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.mat-elevation-z5,.mat-mdc-elevation-specific.mat-elevation-z5{box-shadow:0 3px 5px -1px #0003,0 5px 8px #00000024,0 1px 14px #0000001f}.mat-elevation-z6,.mat-mdc-elevation-specific.mat-elevation-z6{box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}.mat-elevation-z7,.mat-mdc-elevation-specific.mat-elevation-z7{box-shadow:0 4px 5px -2px #0003,0 7px 10px 1px #00000024,0 2px 16px 1px #0000001f}.mat-elevation-z8,.mat-mdc-elevation-specific.mat-elevation-z8{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.mat-elevation-z9,.mat-mdc-elevation-specific.mat-elevation-z9{box-shadow:0 5px 6px -3px #0003,0 9px 12px 1px #00000024,0 3px 16px 2px #0000001f}.mat-elevation-z10,.mat-mdc-elevation-specific.mat-elevation-z10{box-shadow:0 6px 6px -3px #0003,0 10px 14px 1px #00000024,0 4px 18px 3px #0000001f}.mat-elevation-z11,.mat-mdc-elevation-specific.mat-elevation-z11{box-shadow:0 6px 7px -4px #0003,0 11px 15px 1px #00000024,0 4px 20px 3px #0000001f}.mat-elevation-z12,.mat-mdc-elevation-specific.mat-elevation-z12{box-shadow:0 7px 8px -4px #0003,0 12px 17px 2px #00000024,0 5px 22px 4px #0000001f}.mat-elevation-z13,.mat-mdc-elevation-specific.mat-elevation-z13{box-shadow:0 7px 8px -4px #0003,0 13px 19px 2px #00000024,0 5px 24px 4px #0000001f}.mat-elevation-z14,.mat-mdc-elevation-specific.mat-elevation-z14{box-shadow:0 7px 9px -4px #0003,0 14px 21px 2px #00000024,0 5px 26px 4px #0000001f}.mat-elevation-z15,.mat-mdc-elevation-specific.mat-elevation-z15{box-shadow:0 8px 9px -5px #0003,0 15px 22px 2px #00000024,0 6px 28px 5px #0000001f}.mat-elevation-z16,.mat-mdc-elevation-specific.mat-elevation-z16{box-shadow:0 8px 10px -5px #0003,0 16px 24px 2px #00000024,0 6px 30px 5px #0000001f}.mat-elevation-z17,.mat-mdc-elevation-specific.mat-elevation-z17{box-shadow:0 8px 11px -5px #0003,0 17px 26px 2px #00000024,0 6px 32px 5px #0000001f}.mat-elevation-z18,.mat-mdc-elevation-specific.mat-elevation-z18{box-shadow:0 9px 11px -5px #0003,0 18px 28px 2px #00000024,0 7px 34px 6px #0000001f}.mat-elevation-z19,.mat-mdc-elevation-specific.mat-elevation-z19{box-shadow:0 9px 12px -6px #0003,0 19px 29px 2px #00000024,0 7px 36px 6px #0000001f}.mat-elevation-z20,.mat-mdc-elevation-specific.mat-elevation-z20{box-shadow:0 10px 13px -6px #0003,0 20px 31px 3px #00000024,0 8px 38px 7px #0000001f}.mat-elevation-z21,.mat-mdc-elevation-specific.mat-elevation-z21{box-shadow:0 10px 13px -6px #0003,0 21px 33px 3px #00000024,0 8px 40px 7px #0000001f}.mat-elevation-z22,.mat-mdc-elevation-specific.mat-elevation-z22{box-shadow:0 10px 14px -6px #0003,0 22px 35px 3px #00000024,0 8px 42px 7px #0000001f}.mat-elevation-z23,.mat-mdc-elevation-specific.mat-elevation-z23{box-shadow:0 11px 14px -7px #0003,0 23px 36px 3px #00000024,0 9px 44px 8px #0000001f}.mat-elevation-z24,.mat-mdc-elevation-specific.mat-elevation-z24{box-shadow:0 11px 15px -7px #0003,0 24px 38px 3px #00000024,0 9px 46px 8px #0000001f}.mat-theme-loaded-marker{display:none}.mat-mdc-option{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 16px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, .03125em)}::ng-deep :root{--sof-nav-content-bg-color: #fffdfd;--sof-nav-font-color: #eee;--sof-nav-bg-gradient-color-1: #fff;--sof-nav-bg-gradient-color-2: #fff;--sof-nav-border-right-color: transparent;--sof-nav-list-border-color: #cfd8dc;--sof-nav-highlight-gradient-1: mat.get-color-from-palette($my-app-primary, 100);--sof-nav-highlight-gradient-2: rgba(255, 255, 255, 0);--sof-nav-sub-highlight-border-color: #616161;--sof-nav-sub-highlight-bg-color: #424242}.sof-ar-nav-sidenav{background:rgb(0,0,0);border-right-color:var(--sof-nav-border-right-color);background:linear-gradient(-180deg,var(--sof-nav-bg-gradient-color-1) 0%,var(--sof-nav-bg-gradient-color-2) 100%);overflow:hidden}.sof-ar-nav-sidenav *{color:var(--sof-nav-font-color)}::ng-deep [sof-ar-nav-footer] *,::ng-deep [sof-ar-nav-header] *{color:var(--sof-nav-font-color)!important}::ng-deep .sof-ar-nav-active-route:active{background:rgb(0,0,0)!important;background:linear-gradient(90deg,var(--sof-nav-highlight-gradient-1) 0%,var(--sof-nav-highlight-gradient-2) 80%)!important;border-bottom-right-radius:8px!important;border-top-right-radius:8px!important}::ng-deep .sof-ar-nav-sub-active-route{background:var(--sof-nav-sub-highlight-bg-color);margin-right:-4px;position:relative}::ng-deep .sof-ar-nav-sub-active-route:focus,::ng-deep .sof-ar-nav-sub-active-route:active{background:var(--sof-nav-sub-highlight-bg-color)!important}::ng-deep .sof-ar-nav-sub-active-route:before{content:\"\";display:block;position:absolute;top:0;height:inherit}::ng-deep .mat-drawer-container{background:var(--sof-nav-content-bg-color)!important}.sof-ar-nav-container{display:flex;flex-direction:column;position:absolute;bottom:0;left:0;right:0}h1.example-app-name{margin-left:8px}.sof-ar-nav-sidenav-container{flex:1}.example-is-mobile .example-sidenav-container{flex:1 0 auto}.hidden{display:none!important}.sof-ar-nav-buffer{height:40px}button.nav-item{border:0;background:transparent}.nav-item{font-size:15px!important;font-weight:500!important}.nav-item.mat-mdc-list-item-interactive:focus:before,.nav-item.mat-mdc-list-item-interactive:hover:before{opacity:0!important}.mat-expansion-indicator{border-bottom-right-radius:11px!important}.nav-footer-item{background:#FAFAFA;position:absolute;bottom:0%;width:18rem}.progress-footer{display:flex;width:100%;z-index:2}.panel-icon{float:right;color:#000!important}.user-name{display:inline-block;height:3.5rem;padding-left:.5rem;padding-top:3rem;padding-right:.5rem;font-size:larger;font-weight:800}::ng-deep .mat-mdc-list-base{padding:0!important}::ng-deep .mat-drawer-inner-container{min-width:275px;overflow:hidden!important}::ng-deep .mat-drawer-inner-container:hover{overflow:overlay!important}::ng-deep .icon-styling{padding-right:10px;padding-left:10px;width:24px;text-align:left}::ng-deep .nav-icon{margin-left:auto;padding-left:30px}::ng-deep .nav-item{font-family:Poppins;font-weight:500;padding-top:2px!important;padding-left:0!important}::ng-deep [sof-ar-nav-footer] hr{margin:5px 10px;opacity:.5}.subnav-content{padding:0;height:48px!important}.nav-header{height:64px!important}.mat-mdc-list-item{background-color:transparent;display:inline!important}.mat-mdc-list-item:focus{outline:2px solid white!important}::ng-deep .mdc-list-item__content{padding:0 4px!important;padding-left:1.5rem!important}::ng-deep .subnav-item{padding-left:1rem!important}::ng-deep .visible-mobile{display:none}@media only screen and (max-width: 959px){::ng-deep .visible-mobile{display:block}}@media (max-width: 959px){::ng-deep .sof-ar-fixed-nav{position:fixed;z-index:2;width:100%!important;box-sizing:border-box}}::ng-deep .sof-ar-nav-menu-btn{position:fixed!important;z-index:2!important;top:1.25%;width:44px!important;height:40px!important;color:var(--primary-color-500-parts)!important;background:var(--primary-color-50-parts)!important;border-radius:8px!important;padding:0!important}@media (max-width: 959px){::ng-deep .sof-ar-nav-menu-btn{margin-left:2%!important}}@media (min-width: 959px){::ng-deep .sof-ar-nav-menu-btn{margin-left:11px!important}}::ng-deep .sof-ar-nav-menu-btn:hover .mdc-icon-button__ripple,::ng-deep .sof-ar-nav-menu-btn:focus .mdc-icon-button__ripple{border-radius:inherit!important}@media only screen and (min-width: 959px){::ng-deep .mat-mdc-list-base:not(.subnav-item):not(.custom-nav):before{content:\"\";display:block;height:1px;margin-left:auto;width:calc(100% - 40px)}::ng-deep .mat-mdc-list-base:not(.subnav-item):not(.custom-nav):after{content:\"\";display:block;height:1px;margin-left:auto;width:calc(100% - 40px);margin-bottom:-1px}}::ng-deep .mat-step-text-label{color:#fff;font-family:Poppins,sans-serif!important;font-size:1.3em}::ng-deep .mat-expansion-indicator{padding:1em!important}::ng-deep .mat-stepper-vertical{background-color:transparent!important}.mat-mdc-nav-list{width:100%;margin-top:3px;margin-bottom:3px}.mat-mdc-nav-list:hover{border-bottom-right-radius:8px!important;border-top-right-radius:8px!important;background:var(--sof-nav-highlight-gradient-1)!important}.mat-expansion-panel-header{padding:0;height:64px!important;margin-top:3px;margin-bottom:3px}.mat-expansion-panel-header:hover{background:var(--sof-nav-highlight-gradient-1)!important;border-bottom-right-radius:8px!important;border-top-right-radius:8px!important}.mat-expansion-panel-header:focus{outline:2px solid white!important}.sof-ar-nav-selected{background:var(--sof-nav-highlight-gradient-1)!important;border-bottom-right-radius:8px!important;border-top-right-radius:8px!important}.mat-expansion-panel{display:inline}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.step-active{border-bottom:3px solid var(--primary-color-500-parts);border-bottom-left-radius:0;border-bottom-right-radius:0}::ng-deep .mat-vertical-content{padding-bottom:0!important}.step-link{padding-left:0!important;padding-right:0!important}.step-titles{padding-top:20px;padding-bottom:20px}.step-titles>button{font-family:Poppins,sans-serif!important;font-size:16px!important;font-weight:500!important;color:#000;background-color:transparent!important}.step-active{border-bottom:0!important}::ng-deep .progress-menu-active,progress-menu-active *{color:#000!important}::ng-deep .color-primary,.color-primary *{color:var(--primary-color-500-parts)!important}.sof-ar-nav-sidenav{max-width:-webkit-fill-available}.nav-menu-btn-text{white-space:normal}.progress-menu-btn{width:-webkit-fill-available;text-align:left;padding:12px 16px!important;font-size:16px!important;height:-moz-fit-content;height:fit-content}::ng-deep .disabled,.disabled *,.progress-menu-btn:disabled,.progress-menu-mobile-btn:disabled,.mat-expansion-panel-header:disabled{color:#333c!important}.progress-nav-icon{margin-right:10px;font-size:14px}::ng-deep .progress-menu-mobile-btn{display:flex!important}::ng-deep .progress-nav-menu{display:flex!important}.progress-menu-mobile-btn{padding:12px 24px!important;width:-webkit-fill-available;text-align:left;height:-moz-fit-content;height:fit-content}.progress-mobile-panel-title{width:-webkit-fill-available;font-size:16px;font-family:Poppins,sans-serif!important;padding-left:24px}.progress-mobile-expansion-panel{margin:0!important}::ng-deep .progress-mobile-expansion-panel .mat-expansion-panel-body{background:var(--primary-color-50-parts)!important;padding:0!important;font-size:16px!important}::ng-deep .mat-mdc-menu-panel{max-width:unset!important}::ng-deep .progress-menu-panel{background:var(--primary-color-50-parts)!important}::ng-deep .cdk-overlay-container .cdk-overlay-pane{transform:none!important}::ng-deep .cdk-overlay-container .cdk-overlay-pane .step-option{margin-top:33px!important}.mobile-progress-container{padding-bottom:24px}.step-titles-mobile{padding-top:25px;padding-bottom:25px;background-color:transparent}.step-titles-mobile ::ng-deep .mat-mdc-select-trigger{padding-left:17px;padding-right:20px}.step-done{color:var(--accent-color-900-parts)!important;cursor:pointer}.step-future{color:var(--primary-color-900-parts)!important;opacity:.7}::ng-deep .mat-form-field-appearance-outline .mat-mdc-form-field-infix{padding-left:.5em!important;padding-right:.5em!important}::ng-deep .mdc-floating-label{padding-left:.5em!important;padding-right:.5em!important}::ng-deep .mat-form-field-appearance-outline .mat-mdc-form-field-icon-prefix{top:0!important}::ng-deep .mat-form-field-appearance-outline .mat-mdc-form-field-icon-suffix{top:0!important}[sws-alert--secondary]{max-height:90px;min-height:52px;padding:0 0 0 24px;margin:2px 5px;border-radius:5px;font-weight:700;font-size:16px;background:rgba(29,190,104,.1);border:2px solid #2b9c62;color:#2b9c62}.icon-container{align-self:center}.message-container{margin-left:10px;line-height:1.8}#btnClose{color:#000}.navigationFooter{width:100%;border:none;height:64px!important;font-family:Poppins;font-weight:500;font-size:15px!important;position:relative;text-align:left;padding-left:1.5rem}.navigationFooter:hover{color:unset!important}.nav-item-margin{position:relative;display:flex!important;width:inherit!important;height:inherit!important}.sof-ar-nav-menu-icon{font-size:23px}.menu-icon{color:var(--primary-color-800-parts)!important}.sidenav-background{background:transparent!important}::ng-deep .mat-expansion-panel-body{padding:0!important}::ng-deep .subnav-content>a>.mdc-list-item__content{padding:0 4px!important;padding-left:4.25rem!important}::ng-deep .nav-content-item{margin-right:24px;margin-top:24px}.sof-ar-nav-header-text{font-family:Poppins;font-weight:500;font-size:14px;line-height:175%;letter-spacing:.14em}\n"], dependencies: [{ kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i7.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i7.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i7.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i8.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i8.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i8.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "component", type: i9.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i9.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i9.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "component", type: i10.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i11.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i11.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i13.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i13.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i13.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i13.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i13.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i14.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i14.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i15.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "directive", type: i15.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: i15.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["selectedIndex", "disableRipple", "color", "labelPosition", "headerPosition", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }, { kind: "directive", type: i15.MatStepperIcon, selector: "ng-template[matStepperIcon]", inputs: ["matStepperIcon"] }, { kind: "component", type: i16.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: i17.TranslatePipe, name: "translate" }] });
520
520
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ArmatureNavigationComponent, decorators: [{
521
521
  type: Component,
522
522
  args: [{ selector: 'sof-ar-navigation', providers: [{
523
523
  provide: STEPPER_GLOBAL_OPTIONS, useValue: { displayDefaultIndicatorType: false }
524
- }], template: "<div class=\"sof-ar-nav-container\"\r\n [style.top]=\"mobileQuery.matches && advancedSettings.topGapMobile ? advancedSettings.topGapMobile + 'px' : settings.headerHeight + 'px'\"\r\n [class.sof-ar-nav-mobile]=\"mobileQuery.matches\">\r\n <div *ngIf=\"showMessage\" m-a-0 fxLayout=\"row\" fxLayoutAlign=\"space-between center\" sws-alert--secondary role=\"alert\">\r\n <div fxLayout=\"row\" aria-hidden=\"true\">\r\n <i *ngIf=\"showCheckMark\" m-r-5 m-l-5 class=\"fas fa-check-circle icon-container\"></i>\r\n <p class=\"message-container\" m-r-5 m-l-5 [innerHtml]=\"message | translate\"></p>\r\n </div>\r\n <div fxLayout=\"column\">\r\n <button id=\"btnClose\" (click)=\"hide()\" mat-icon-button [attr.aria-label]=\"'common.close' | translate\">\r\n <span aria-hidden=\"true\">\r\n <i class=\"fal fa-times fa-lg\"></i>\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n <button id=\"sof-ar-nav-btn-menu\" aria-label=\"Menu Button\" mat-icon-button [disableRipple]=\"true\"\r\n (click)=\"snav.toggle()\" class=\"sof-ar-nav-menu-btn\"\r\n [class.hidden]=\"!(mobileQuery.matches || settings.allowNavToggle) || settings.hideNavigation\">\r\n <span *ngIf=\"isNavOpen; else closedIcon\" aria-hidden=\"true\" class=\"sof-ar-nav-menu-icon\">\r\n <i class=\"{{settings.fontAwesomeMenuIcon}} menu-icon\"></i>\r\n </span>\r\n <ng-template #closedIcon>\r\n <span aria-hidden=\"true\" class=\"sof-ar-nav-menu-icon\">\r\n <i class=\"{{settings.fontAwesomeMenuIconClosed}} menu-icon\"></i>\r\n </span>\r\n </ng-template>\r\n <span class=\"sr-only\">{{settings.menuButtonSRText | translate}}</span>\r\n </button>\r\n\r\n <mat-sidenav-container autosize class=\"sof-ar-nav-sidenav-container\" [style.marginTop.px]=\"\r\n mobileQuery.matches ? advancedSettings.marginTopMobile : advancedSettings.marginTopDesktop\">\r\n <mat-sidenav [disableClose]=\"!mobileQuery.matches\" class=\"sof-ar-nav-sidenav\" #snav [mode]=\"mobileQuery.matches ? 'over' : 'side'\"\r\n [fixedInViewport]=\"mobileQuery.matches\" [fixedTopGap]=\"mobileQuery.matches ? advancedSettings.topGapMobile : advancedSettings.topGapDesktop\"\r\n [opened]=\"!mobileQuery.matches && !settings.hideNavigation && settings.menuStyle!='progress' \"\r\n [style.width]=\"mobileQuery.matches ? setNavWidth(settings.sideNavWidthMobile) : setNavWidth(settings.sideNavWidthDesktop)\"\r\n [ngStyle]=\"{background:mobileQuery.matches ? themeSettings?.mobileBgColor : undefined}\">\r\n <ng-container *ngIf=\"mobileQuery.matches && userName && !settings.customUserName\">\r\n <span class=\"user-name\">\r\n {{userName}}\r\n </span>\r\n </ng-container>\r\n <ng-container *ngIf=\"mobileQuery.matches && settings.customUserName\">\r\n <span class=\"user-name\">\r\n {{settings.customUserName | translate}}\r\n </span>\r\n </ng-container>\r\n <!-- Nav Header Content -->\r\n <ng-content select=\"[sof-ar-nav-header]\"> </ng-content>\r\n\r\n <!-- Static Navigation -->\r\n <div class=\"nav-content-item sidenav-background\" *ngIf=\"settings.menuStyle === 'static'\" [ngStyle]=\"{'padding-bottom.px': (footerItemCount*64)+128}\">\r\n <nav *ngIf=\"settings.menuStyle === 'static'\" [attr.aria-label]=\"'main'\">\r\n <ng-container *ngFor=\"let nav of navigationData\">\r\n <ng-container *ngIf=\"nav?.subNodes?.length && !nav.hidden\">\r\n <mat-accordion>\r\n <mat-expansion-panel [expanded]=\"nav.expanded\">\r\n <mat-expansion-panel-header [ngClass]=\"{ 'sof-ar-nav-selected': isNavSelected(nav) }\">\r\n <!-- Navigation -->\r\n <ng-container>\r\n <!-- If there is a route -->\r\n <ng-container *ngIf=\"nav?.route\">\r\n <mat-nav-list [disableRipple]=\"true\" [attr.role]=\"'navigation'\">\r\n <a class=\"nav-item\" mat-list-item [routerLink]=\"nav?.route\"\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"{{nav?.fontAwesomeIcon}}\"></i>\r\n </span>\r\n </ng-container>\r\n <span class=\"sof-ar-nav-header-text\">{{nav.text | translate}}</span>\r\n </a>\r\n </mat-nav-list>\r\n </ng-container>\r\n <!-- If there is not a route -->\r\n <ng-container *ngIf=\"!nav?.route\">\r\n <mat-nav-list [disableRipple]=\"true\" [attr.role]=\"'navigation'\">\r\n <button id=\"sof-ar-nav-btn-node\" class=\"nav-item\" mat-list-item\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"{{nav?.fontAwesomeIcon}}\"></i>\r\n </span>\r\n </ng-container>\r\n <span class=\"sof-ar-nav-header-text\">{{nav.text | translate}}</span>\r\n </button>\r\n </mat-nav-list>\r\n </ng-container>\r\n </ng-container>\r\n </mat-expansion-panel-header>\r\n <!-- SubNav -->\r\n <ng-container>\r\n <mat-nav-list [ngClass]=\"{ 'sof-ar-nav-selected': isNavSelected(subnav) }\" class=\"subnav-content\"\r\n [disableRipple]=\"true\" *ngFor=\"let subnav of nav?.subNodes\" (click)=\"closeNavigationForMobile()\" [attr.role]=\"'navigation'\">\r\n <a class=\"nav-item nav-item-margin\" mat-list-item [routerLinkActive]=\"['sof-ar-nav-sub-active-route']\" [routerLink]=\"subnav.route\"\r\n [attr.role]=\"'navigation'\" [attr.aria-label]=\"(nav.text | translate) + ' ' + (subnav.text | translate)\">\r\n <span class=\"sof-ar-nav-header-text\" [attr.role]=\"'navigation'\" \r\n [attr.aria-label]=\"(nav.text | translate) + ' ' + (subnav.text | translate)\">\r\n {{subnav.text | translate}}\r\n </span>\r\n </a>\r\n </mat-nav-list>\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n <!-- If subnodes are not there -->\r\n <ng-container>\r\n <ng-container *ngIf=\"!nav?.subNodes?.length && !nav?.hidden\">\r\n <!-- If there is a route -->\r\n <ng-container *ngIf=\"nav?.route\">\r\n <mat-nav-list [ngClass]=\"{ 'sof-ar-nav-selected': isNavSelected(nav) }\" class=\"nav-header\"\r\n [disableRipple]=\"true\" (click)=\"closeNavigationForMobile()\" [attr.role]=\"null\">\r\n <a class=\"nav-item nav-item-margin\" mat-list-item [routerLink]=\"nav?.route\"\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\"><i class=\"{{nav?.fontAwesomeIcon}}\"></i></span>\r\n </ng-container>\r\n <span class=\"sof-ar-nav-header-text\">{{nav.text | translate}}</span>\r\n </a>\r\n </mat-nav-list>\r\n </ng-container>\r\n <!-- If there is not a route -->\r\n <ng-container *ngIf=\"!nav?.route\">\r\n <mat-nav-list [disableRipple]=\"true\" [attr.role]=\"null\">\r\n <button id=\"sof-ar-nav-btn-node\" class=\"nav-item\" mat-list-item\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\"><i class=\"{{nav?.fontAwesomeIcon}}\"></i></span>\r\n </ng-container>\r\n <span class=\"sof-ar-nav-header-text\">{{nav.text | translate}}</span>\r\n </button>\r\n </mat-nav-list>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </nav>\r\n </div>\r\n\r\n <!-- Stepper -->\r\n <mat-vertical-stepper *ngIf=\"settings.menuStyle === 'stepper'\" [selectedIndex]=\"selectedParentIndex\" #vertStepper\r\n [linear]=\"false\" class=\"sidenav-background\">\r\n <!-- Alternate step states for nav, icaons should always be white only worked with styles -->\r\n <ng-template matStepperIcon=\"create\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"edit\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"active\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"done\">\r\n <span>\r\n <i class=\"fas fa-check\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n\r\n <!-- nav steps -->\r\n <ng-container *ngFor=\"let nav of navigationData; let i = index\">\r\n <mat-step *ngIf=\"!nav?.hidden\" state=\"{{ determineStepState(i, -1) }}\">\r\n <ng-template matStepLabel *ngIf=\"!nav.hidden\">\r\n <div id=\"divStep{{ i }}\" style=\"height: 72px\" fxLayout=\"row\" fxLayoutAlign=\"start center\"\r\n matTooltip=\"{{ nav.text | translate }}\" [matTooltipPosition]=\"'after'\" fxFlex=\"100%\">\r\n <a id=\"step{{ i }}\" fxFlex=\"100%\" class=\"mat-button step-link\" [routerLink]=\"nav.route\"\r\n [ngStyle]=\"{ color: themeSettings?.fontColor }\" [routerLinkActive]=\"['step-active']\">\r\n {{ nav.text | translate }}\r\n </a>\r\n </div>\r\n </ng-template>\r\n <p [innerHTML]=\"nav.stepContent | translate\"></p>\r\n <!-- sub nav -->\r\n <mat-vertical-stepper *ngIf=\"nav?.subNodes\" [selectedIndex]=\"selectedChildIndexes[i]\" [linear]=\"false\"\r\n #vertStepperInner>\r\n <!-- Alternate step states for sub nav, icons should always be white only worked with styles -->\r\n <ng-template matStepperIcon=\"create\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"edit\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"done\">\r\n <span>\r\n <i class=\"fas fa-check\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"active\">\r\n <span>\r\n <i class=\"fas fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"none\">\r\n <span></span>\r\n </ng-template>\r\n <!-- sub nav steps -->\r\n <ng-container *ngFor=\"let subnav of nav?.subNodes; let j = index\">\r\n <mat-step state=\"{{ determineStepState(i, j) }}\" *ngIf=\"!subnav.hidden\">\r\n <ng-template matStepLabel>\r\n <div id=\"divSubStep{{ i }}-{{ j }}\" style=\"height: 72px\" fxLayout=\"row\" fxLayoutAlign=\"start center\"\r\n matTooltip=\"{{ subnav.text | translate }}\" [matTooltipPosition]=\"'after'\" fxFlex=\"100%\">\r\n <a id=\"subStep{{ i }}-{{ j }}\" class=\"mat-button step-link\"\r\n [ngStyle]=\"{ color: themeSettings?.fontColor }\" [routerLink]=\"subnav.route\"\r\n [routerLinkActive]=\"['step-active']\">{{ subnav.text | translate }}</a>\r\n </div>\r\n </ng-template>\r\n <p [innerHTML]=\"subnav.stepContent | translate\"></p>\r\n </mat-step>\r\n </ng-container>\r\n\r\n </mat-vertical-stepper>\r\n </mat-step>\r\n </ng-container>\r\n\r\n </mat-vertical-stepper>\r\n\r\n <!-- Nav Footer -->\r\n <div class=\"nav-footer-item\">\r\n <ng-container *ngIf=\"settings.menuStyle === 'static'\">\r\n <ng-container *ngFor=\"let nav of footerNavigationData\">\r\n <ng-container>\r\n <!-- Desktop Nav -->\r\n <ng-container *ngIf=\"!nav?.subNodes?.length\">\r\n <!-- If there is a route -->\r\n <ng-container *ngIf=\"nav?.route\">\r\n <mat-nav-list class=\"nav-header\" [disableRipple]=\"true\">\r\n <a class=\"nav-item nav-item-margin\" mat-list-item [routerLink]=\"nav?.route\"\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\"><i class=\"{{nav?.fontAwesomeIcon}}\"></i></span>\r\n </ng-container>\r\n {{nav.text | translate}}\r\n </a>\r\n </mat-nav-list>\r\n </ng-container>\r\n <!-- If there is not a route -->\r\n <ng-container *ngIf=\"!nav?.route\">\r\n <mat-nav-list>\r\n <button id=\"sof-ar-nav-btn-node\" class=\"nav-item\" mat-list-item\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\"><i class=\"{{nav?.fontAwesomeIcon}}\"></i></span>\r\n </ng-container>\r\n {{nav.text | translate}}\r\n </button>\r\n </mat-nav-list>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template [ngTemplateOutlet]=\"navigationFooter\">\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- the mobile progress menu-->\r\n <ng-container *ngIf=\"settings?.menuStyle === 'progress'\">\r\n <div class=\"sidenav-background\" [ngStyle]=\"{'padding-bottom.px': (footerItemCount*64)+128}\">\r\n <mat-accordion>\r\n <div *ngFor=\"let step of navigationData; let i = index\">\r\n <ng-container *ngIf=\"step.subNodes && step.subNodes.length > 0 && !step.hidden\">\r\n <mat-expansion-panel hideToggle class=\"progress-mobile-expansion-panel\"\r\n [disabled]=\"(!step.visited || step.isDisabled) && !settings.overrideNavigation\" (opened)=\"panelOpenState = true\"\r\n (closed)=\"panelOpenState = false\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title class=\"progress-mobile-panel-title\">\r\n <div style=\"width: -webkit-fill-available;\"\r\n [ngClass]=\"{'disabled':(!step.visited || step.isDisabled) && !settings.overrideNavigation && !step.complete,'color-primary':step.complete && step!=activeParentNode,'progress-menu-active':step===activeParentNode}\">\r\n <ng-template [ngTemplateOutlet]=\"progressParentNodeIcons\" [ngTemplateOutletContext]=\"{step:step}\">\r\n </ng-template>\r\n <span *ngIf=\"settings?.displayNumbers\">\r\n {{i < 10 ? \"0\" + (i + 1) + \". \" : i + \" . \" }}\r\n </span>\r\n <span class=\"nav-btn-text\">\r\n {{ step.text | translate }}\r\n </span>\r\n <span *ngIf=\"!panelOpenState\">\r\n <i class=\"fas fa-chevron-down panel-icon\"></i>\r\n </span>\r\n <span *ngIf=\"panelOpenState\">\r\n <i class=\"fas fa-chevron-up panel-icon\"></i>\r\n </span>\r\n </div>\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <!-- mobile sub menu -->\r\n <div class=\"progress-nav-menu\" *ngFor=\"let subNode of step.subNodes; let idx = index;\" [hidden]=\"step.subNodes[idx].hidden\">\r\n <button id=\"mobileMenu{{ idx }}\" mat-button class=\"step-link progress-menu-mobile-btn\"\r\n [ngClass]=\"{'color-primary':subNode.complete && subNode!=activeSubNode}\"\r\n [routerLinkActive]=\"['progress-menu-active']\" [ngStyle]=\"{ ' color': themeSettings?.fontColor }\"\r\n [routerLink]=\"subNode.route\" [disabled]=\"!subNode.visited && !settings.overrideNavigation\">\r\n <ng-template [ngTemplateOutlet]=\"progressSubNodeIcons\"\r\n [ngTemplateOutletContext]=\"{subNode:subNode}\">\r\n </ng-template>\r\n <span class=\"nav-menu-btn-text\" [ngClass]=\"{'disabled':(!subNode.visited) && !settings.overrideNavigation && !subNode.complete,'color-primary':subNode.complete && subNode!=activeSubNode,'progress-menu-active':subNode===activeSubNode}\">{{ subNode.text | translate }}</span>\r\n </button>\r\n </div>\r\n </mat-expansion-panel>\r\n </ng-container>\r\n <!-- if there are no subNodes -->\r\n <ng-container *ngIf=\"(!step.subNodes || step.subNodes.length==0) && !step.hidden\">\r\n <mat-expansion-panel #panel hideToggle (opened)=\"disablePanel(panel,i)\" class=\"progress-mobile-expansion-panel\"\r\n [disabled]=\"(!step.visited || step.isDisabled) && !settings.overrideNavigation\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title class=\"progress-mobile-panel-title\">\r\n <div [ngClass]=\"{'disabled':(!step.visited || step.isDisabled) && !settings.overrideNavigation && !step.complete,'color-primary':step.complete && step!=activeParentNode,'progress-menu-active':step===activeParentNode}\">\r\n <ng-template [ngTemplateOutlet]=\"progressParentNodeIcons\" [ngTemplateOutletContext]=\"{step:step}\">\r\n </ng-template>\r\n <span *ngIf=\"settings?.displayNumbers\">\r\n {{i < 10 ? \"0\" + (i + 1) + \". \" : i + \" . \" }}\r\n </span>\r\n <span class=\"nav-btn-text\">\r\n {{ step.text | translate }}\r\n </span>\r\n </div>\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n </mat-expansion-panel>\r\n </ng-container>\r\n </div>\r\n </mat-accordion>\r\n </div>\r\n\r\n <!-- the progress menu language and logout buttons-->\r\n <div class=\"nav-footer-item progress-footer\">\r\n <ng-template [ngTemplateOutlet]=\"navigationFooter\">\r\n </ng-template>\r\n </div>\r\n </ng-container>\r\n </mat-sidenav>\r\n <mat-sidenav-content>\r\n <!-- Horizontal Progress -->\r\n <ng-container *ngIf=\"settings?.menuStyle === 'progress'\">\r\n <mat-progress-bar *ngIf=\"settings?.showProgressBar\" mode=\"determinate\" [value]=\"navProgressCount\"\r\n style=\"height: 9px\" color=\"accent\">\r\n </mat-progress-bar>\r\n <div fxHide.lt-md class=\"step-titles center\" fxLayout=\"row\" style=\"justify-content:center !important\" [class.hidden]=\"settings.hideNavigation\">\r\n <div *ngFor=\"let step of navigationData; let i = index\" class=\"horizontal-progress-div\">\r\n <ng-container *ngIf=\"!step.subNodes?.length && !step.hidden\">\r\n <button mat-button [routerLink]=\"step.route\"\r\n [disabled]=\"(!step.visited || step.isDisabled) && !settings.overrideNavigation\" class=\"progress-menu-btn\"\r\n [ngClass]=\"{'color-primary':step.complete && step!=activeParentNode,'progress-menu-active':step===activeParentNode}\">\r\n <ng-template [ngTemplateOutlet]=\"progressParentNodeIcons\" [ngTemplateOutletContext]=\"{step:step}\">\r\n </ng-template>\r\n <span *ngIf=\"settings?.displayNumbers\">\r\n {{i < 10 ? \"0\" + (i + 1) + \". \" : i + \" . \"}}\r\n </span>\r\n <span class=\"nav-btn-text\">{{ step.text | translate }}</span>\r\n </button>\r\n </ng-container>\r\n <!-- if there are subnodes create menus for each step -->\r\n <ng-container *ngIf=\"step.subNodes && step.subNodes.length && !step.hidden\">\r\n <button [ngClass]=\"{'color-primary':step.complete && step!=activeParentNode,'progress-menu-active':step===activeParentNode}\"\r\n mat-button [disabled]=\"(!step.visited || step.isDisabled) && !settings.overrideNavigation\" class=\"progress-menu-btn\"\r\n [matMenuTriggerFor]=\"menu\">\r\n <ng-template [ngTemplateOutlet]=\"progressParentNodeIcons\" [ngTemplateOutletContext]=\"{step:step}\">\r\n </ng-template>\r\n <span *ngIf=\"settings?.displayNumbers\">\r\n {{i < 10 ? \"0\" + (i + 1) + \". \" : i + \" . \"}}\r\n </span>\r\n <span class=\"nav-btn-text\">{{ step.text | translate }}</span>\r\n </button>\r\n <mat-menu #menu=\"matMenu\" class=\"sof-ar-mat-menu progress-menu-panel\">\r\n <div class=\"progress-nav-menu\" *ngFor=\"let subNode of step.subNodes; let idx = index;\" [ngStyle]=\"{width:settings.progressMenuWidth+'px'}\" [hidden]=\"step.subNodes[idx].hidden\">\r\n <button id=\"submenu{{ idx }}\" mat-button class=\"step-link progress-menu-btn\"\r\n [ngClass]=\"{'color-primary':subNode.complete && subNode!=activeSubNode,'disabled':!subNode.visited && !settings.overrideNavigation}\"\r\n [routerLinkActive]=\"['progress-menu-active']\" [ngStyle]=\"{ ' color': themeSettings?.fontColor }\"\r\n [routerLink]=\"subNode.route\" [disabled]=\"!subNode.visited && !settings.overrideNavigation\">\r\n <ng-template [ngTemplateOutlet]=\"progressSubNodeIcons\"\r\n [ngTemplateOutletContext]=\"{subNode:subNode}\">\r\n </ng-template>\r\n <span class=\"nav-menu-btn-text\">{{ subNode.text |translate }}</span>\r\n </button>\r\n </div>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"mobile-progress-container\" fxHide.gt-sm>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-content sof-ar-nav-content></ng-content>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n <!-- The progress menu parent node icon template-->\r\n <ng-template #progressParentNodeIcons let-step='step'>\r\n <span *ngIf=\"step.complete && step != activeParentNode\" \r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.complete' | translate\">\r\n <i class=\"{{ settings.progressSectionCompleteIcon }} color-primary progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.step-labels.complete' | translate\"></i>\r\n </span>\r\n <span *ngIf=\"step === activeParentNode\" \r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.in-progress' | translate\">\r\n <i class=\"{{ settings.progressSectionCurrentIcon }} color-primary progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.in-progress' | translate\"></i>\r\n </span>\r\n <span *ngIf=\"!step.complete && step != activeParentNode\" [ngClass]=\"{'disabled':!step.visited && !settings.overrideNavigation}\" \r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.not-done' | translate\">\r\n <i class=\"{{ settings.progressSectionFutureIcon }} progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.not-done' | translate\"></i>\r\n </span>\r\n </ng-template>\r\n <!-- The progress menu sub node icon template-->\r\n <ng-template #progressSubNodeIcons let-subNode='subNode'>\r\n <span *ngIf=\"subNode.complete && activeSubNode != subNode\"\r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.complete' | translate\">\r\n <i class=\"{{settings.progressMenuCompleteIcon}} color-primary progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.complete' | translate\"></i>\r\n </span>\r\n <span *ngIf=\"activeSubNode === subNode\"\r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.in-progress' | translate\">\r\n <i class=\"{{ settings.progressSectionCurrentIcon }} color-primary progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.in-progress' | translate\"></i>\r\n </span>\r\n <span *ngIf=\"!subNode.complete && activeSubNode != subNode\" [ngClass]=\"{'disabled':!subNode.visited && !settings.overrideNavigation}\"\r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.not-done' | translate\">\r\n <i class=\"{{ settings.progressSectionFutureIcon }} progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.not-done' | translate\"></i>\r\n </span>\r\n </ng-template>\r\n <!-- The navigation footer template for language and logout buttons -->\r\n <ng-template #navigationFooter>\r\n <ng-content select=\"[sof-ar-nav-mobile-footer]\"> </ng-content>\r\n <ng-container *ngIf=\"!settings.useCustomMobileFooter\">\r\n <!-- The language button -->\r\n <ng-container *ngIf=\"languageSettings?.displayLanguageOptions && languageSettings?.languages.length > 2 && mobileQuery.matches\">\r\n <button id=\"sof-ar-nav-lang-dropdown\" mat-stroked-button\r\n class=\"faded-button-50 language-button navigationFooter\" [matMenuTriggerFor]=\"headerLanguageMenu\"\r\n [attr.aria-label]=\"languageSettings.buttonText | translate\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"far fa-globe language-globe\"></i>\r\n </span>\r\n {{languageSettings.buttonText | translate}}\r\n </button>\r\n <mat-menu #headerLanguageMenu=\"matMenu\" class=\"sof-ar-mat-menu\">\r\n <button mat-menu-item *ngFor=\"let lang of languageSettings.languages\" (click)=\"setLanguage$.emit(lang)\"\r\n id=\"apply-lang-btn-{{lang}}\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\">\r\n <div fxFlex=\"auto\">\r\n {{ lang | translate }}\r\n </div>\r\n <div fxFlex=\"auto\" fxLayoutAlign=\"end end\">\r\n <i *ngIf=\"currentLang === lang\" class=\"fad fa-check selected-language-icon\"></i>\r\n </div>\r\n </div>\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <ng-container *ngIf=\"languageSettings?.displayLanguageOptions && languageSettings?.languages.length === 2 && mobileQuery.matches\">\r\n <button *ngIf=\"languageSettings?.languages.length === 2\" id=\"sof-ar-nav-lang-button\" mat-stroked-button\r\n class=\"faded-button-50 language-button navigationFooter\"\r\n [attr.aria-label]=\"languageSettings.buttonText | translate\" (click)=\"setLanguage$.emit()\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"far fa-globe language-globe\"></i>\r\n </span>\r\n {{otherLangText | translate}}\r\n </button>\r\n </ng-container>\r\n <!-- The logout button-->\r\n <ng-container *ngIf=\"mobileQuery.matches && userName\">\r\n <button id=\"sof-ar-header-lang-button\" mat-stroked-button class=\"navigationFooter\" (click)=\"logOut()\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"fas fa-sign-out-alt\"></i>\r\n </span>\r\n {{logOutText | translate}}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n</div>\r\n", styles: [":root{--primary-color-50-parts: #edf4ff;--primary-color-100-parts: #b9d4fc;--primary-color-200-parts: #8ab7fb;--primary-color-300-parts: #5b9af9;--primary-color-400-parts: #3784f7;--primary-color-500-parts: #146ef6;--primary-color-600-parts: #1266f5;--primary-color-700-parts: #0e5bf3;--primary-color-800-parts: #0b51f2;--primary-color-900-parts: #063fef;--primary-color-A100-parts: #ffffff;--primary-color-A200-parts: #e4e9ff;--primary-color-A400-parts: #b1c0ff;--primary-color-A700-parts: #97acff;--primary-color-contrast-50-parts: rgba(0, 0, 0, .87);--primary-color-contrast-100-parts: rgba(0, 0, 0, .87);--primary-color-contrast-200-parts: rgba(0, 0, 0, .87);--primary-color-contrast-300-parts: rgba(0, 0, 0, .87);--primary-color-contrast-400-parts: rgba(255, 255, 255, 1);--primary-color-contrast-500-parts: rgba(255, 255, 255, 1);--primary-color-contrast-600-parts: rgba(255, 255, 255, 1);--primary-color-contrast-700-parts: rgba(255, 255, 255, 1);--primary-color-contrast-800-parts: rgba(255, 255, 255, 1);--primary-color-contrast-900-parts: rgba(255, 255, 255, 1);--primary-color-contrast-A100-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A200-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A400-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A700-parts: rgba(0, 0, 0, .87);--primary-color-50-parts-rgb: 237, 244, 255;--primary-color-100-parts-rgb: 185, 212, 252;--primary-color-200-parts-rgb: 138, 183, 251;--primary-color-300-parts-rgb: 91, 154, 249;--primary-color-400-parts-rgb: 55, 132, 247;--primary-color-500-parts-rgb: 20, 110, 246;--primary-color-600-parts-rgb: 18, 102, 245;--primary-color-700-parts-rgb: 14, 91, 243;--primary-color-800-parts-rgb: 11, 81, 242;--primary-color-900-parts-rgb: 6, 63, 239;--primary-color-A100-parts-rgb: 255, 255, 255;--primary-color-A200-parts-rgb: 228, 233, 255;--primary-color-A400-parts-rgb: 177, 192, 255;--primary-color-A700-parts-rgb: 151, 172, 255;--accent-color-50-parts: #e0f2f1;--accent-color-100-parts: #b2dfdb;--accent-color-200-parts: #80cbc4;--accent-color-300-parts: #4db6ac;--accent-color-400-parts: #26a69a;--accent-color-500-parts: #009688;--accent-color-600-parts: #00897b;--accent-color-700-parts: #00796b;--accent-color-800-parts: #00695c;--accent-color-900-parts: #004d40;--accent-color-A100-parts: #a7ffeb;--accent-color-A200-parts: #64ffda;--accent-color-A400-parts: #1de9b6;--accent-color-A700-parts: #00bfa5;--accent-color-contrast-50-parts: #000000;--accent-color-contrast-100-parts: #000000;--accent-color-contrast-200-parts: #000000;--accent-color-contrast-300-parts: #000000;--accent-color-contrast-400-parts: #000000;--accent-color-contrast-500-parts: #ffffff;--accent-color-contrast-600-parts: #ffffff;--accent-color-contrast-700-parts: #ffffff;--accent-color-contrast-800-parts: #ffffff;--accent-color-contrast-900-parts: #ffffff;--accent-color-contrast-A100-parts: #000000;--accent-color-contrast-A200-parts: #000000;--accent-color-contrast-A400-parts: #000000;--accent-color-contrast-A700-parts: #000000;--accent-color-50-parts-rgb: 224, 242, 241;--accent-color-100-parts-rgb: 178, 223, 219;--accent-color-200-parts-rgb: 128, 203, 196;--accent-color-300-parts-rgb: 77, 182, 172;--accent-color-400-parts-rgb: 38, 166, 154;--accent-color-500-parts-rgb: 0, 150, 136;--accent-color-600-parts-rgb: 0, 137, 123;--accent-color-700-parts-rgb: 0, 121, 107;--accent-color-800-parts-rgb: 0, 105, 92;--accent-color-900-parts-rgb: 0, 77, 64;--accent-color-A100-parts-rgb: 167, 255, 235;--accent-color-A200-parts-rgb: 100, 255, 218;--accent-color-A400-parts-rgb: 29, 233, 182;--accent-color-A700-parts-rgb: 0, 191, 165;--warn-color-50-parts: #fdf3e7;--warn-color-100-parts: #fbe1c3;--warn-color-200-parts: #f9ce9c;--warn-color-300-parts: #f6ba74;--warn-color-400-parts: #f4ab56;--warn-color-500-parts: #f29c38;--warn-color-600-parts: #f09432;--warn-color-700-parts: #ee8a2b;--warn-color-800-parts: #ec8024;--warn-color-900-parts: #e86e17;--warn-color-A100-parts: #ffffff;--warn-color-A200-parts: #fff0e6;--warn-color-A400-parts: #ffd0b3;--warn-color-A700-parts: #ffc19a;--warn-color-contrast-50-parts: rgba(0, 0, 0, .87);--warn-color-contrast-100-parts: rgba(0, 0, 0, .87);--warn-color-contrast-200-parts: rgba(0, 0, 0, .87);--warn-color-contrast-300-parts: rgba(0, 0, 0, .87);--warn-color-contrast-400-parts: rgba(0, 0, 0, .87);--warn-color-contrast-500-parts: rgba(0, 0, 0, .87);--warn-color-contrast-600-parts: rgba(0, 0, 0, .87);--warn-color-contrast-700-parts: rgba(0, 0, 0, .87);--warn-color-contrast-800-parts: rgba(0, 0, 0, .87);--warn-color-contrast-900-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A100-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A200-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A400-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A700-parts: rgba(0, 0, 0, .87);--warn-color-50-parts-rgb: 253, 243, 231;--warn-color-100-parts-rgb: 251, 225, 195;--warn-color-200-parts-rgb: 249, 206, 156;--warn-color-300-parts-rgb: 246, 186, 116;--warn-color-400-parts-rgb: 244, 171, 86;--warn-color-500-parts-rgb: 242, 156, 56;--warn-color-600-parts-rgb: 240, 148, 50;--warn-color-700-parts-rgb: 238, 138, 43;--warn-color-800-parts-rgb: 236, 128, 36;--warn-color-900-parts-rgb: 232, 110, 23;--warn-color-A100-parts-rgb: 255, 255, 255;--warn-color-A200-parts-rgb: 255, 240, 230;--warn-color-A400-parts-rgb: 255, 208, 179;--warn-color-A700-parts-rgb: 255, 193, 154;--info-color-50-parts: #e7f3fb;--info-color-100-parts: #c2e0f4;--info-color-200-parts: #9acced;--info-color-300-parts: #71b7e6;--info-color-400-parts: #52a7e0;--info-color-500-parts: #3498db;--info-color-600-parts: #2f90d7;--info-color-700-parts: #2785d2;--info-color-800-parts: #217bcd;--info-color-900-parts: #156ac4;--info-color-A100-parts: #f5f9ff;--info-color-A200-parts: #c2ddff;--info-color-A400-parts: #8fc1ff;--info-color-A700-parts: #75b3ff;--info-color-contrast-50-parts: rgba(0, 0, 0, .87);--info-color-contrast-100-parts: rgba(0, 0, 0, .87);--info-color-contrast-200-parts: rgba(0, 0, 0, .87);--info-color-contrast-300-parts: rgba(0, 0, 0, .87);--info-color-contrast-400-parts: rgba(255, 255, 255, 1);--info-color-contrast-500-parts: rgba(255, 255, 255, 1);--info-color-contrast-600-parts: rgba(255, 255, 255, 1);--info-color-contrast-700-parts: rgba(255, 255, 255, 1);--info-color-contrast-800-parts: rgba(255, 255, 255, 1);--info-color-contrast-900-parts: rgba(255, 255, 255, 1);--info-color-contrast-A100-parts: rgba(0, 0, 0, .87);--info-color-contrast-A200-parts: rgba(0, 0, 0, .87);--info-color-contrast-A400-parts: rgba(0, 0, 0, .87);--info-color-contrast-A700-parts: rgba(0, 0, 0, .87);--info-color-50-parts-rgb: 231, 243, 251;--info-color-100-parts-rgb: 194, 224, 244;--info-color-200-parts-rgb: 154, 204, 237;--info-color-300-parts-rgb: 113, 183, 230;--info-color-400-parts-rgb: 82, 167, 224;--info-color-500-parts-rgb: 52, 152, 219;--info-color-600-parts-rgb: 47, 144, 215;--info-color-700-parts-rgb: 39, 133, 210;--info-color-800-parts-rgb: 33, 123, 205;--info-color-900-parts-rgb: 21, 106, 196;--info-color-A100-parts-rgb: 245, 249, 255;--info-color-A200-parts-rgb: 194, 221, 255;--info-color-A400-parts-rgb: 143, 193, 255;--info-color-A700-parts-rgb: 117, 179, 255;--success-color-50-parts: #edf5eb;--success-color-100-parts: #d1e6ce;--success-color-200-parts: #b3d6ae;--success-color-300-parts: #95c58d;--success-color-400-parts: #7eb874;--success-color-500-parts: #67ac5c;--success-color-600-parts: #5fa554;--success-color-700-parts: #549b4a;--success-color-800-parts: #4a9241;--success-color-900-parts: #398230;--success-color-A100-parts: #d0ffcb;--success-color-A200-parts: #a2ff98;--success-color-A400-parts: #74ff65;--success-color-A700-parts: #5dff4c;--success-color-contrast-50-parts: rgba(0, 0, 0, .87);--success-color-contrast-100-parts: rgba(0, 0, 0, .87);--success-color-contrast-200-parts: rgba(0, 0, 0, .87);--success-color-contrast-300-parts: rgba(0, 0, 0, .87);--success-color-contrast-400-parts: rgba(0, 0, 0, .87);--success-color-contrast-500-parts: rgba(0, 0, 0, .87);--success-color-contrast-600-parts: rgba(0, 0, 0, .87);--success-color-contrast-700-parts: rgba(255, 255, 255, 1);--success-color-contrast-800-parts: rgba(255, 255, 255, 1);--success-color-contrast-900-parts: rgba(255, 255, 255, 1);--success-color-contrast-A100-parts: rgba(0, 0, 0, .87);--success-color-contrast-A200-parts: rgba(0, 0, 0, .87);--success-color-contrast-A400-parts: rgba(0, 0, 0, .87);--success-color-contrast-A700-parts: rgba(0, 0, 0, .87);--success-color-50-parts-rgb: 237, 245, 235;--success-color-100-parts-rgb: 209, 230, 206;--success-color-200-parts-rgb: 179, 214, 174;--success-color-300-parts-rgb: 149, 197, 141;--success-color-400-parts-rgb: 126, 184, 116;--success-color-500-parts-rgb: 103, 172, 92;--success-color-600-parts-rgb: 95, 165, 84;--success-color-700-parts-rgb: 84, 155, 74;--success-color-800-parts-rgb: 74, 146, 65;--success-color-900-parts-rgb: 57, 130, 48;--success-color-A100-parts-rgb: 208, 255, 203;--success-color-A200-parts-rgb: 162, 255, 152;--success-color-A400-parts-rgb: 116, 255, 101;--success-color-A700-parts-rgb: 93, 255, 76;--error-color-50-parts: #fceae8;--error-color-100-parts: #f8c9c5;--error-color-200-parts: #f3a69e;--error-color-300-parts: #ee8277;--error-color-400-parts: #eb6759;--error-color-500-parts: #e74c3c;--error-color-600-parts: #e44536;--error-color-700-parts: #e03c2e;--error-color-800-parts: #dd3327;--error-color-900-parts: #d7241a;--error-color-A100-parts: #ffffff;--error-color-A200-parts: #ffd9d7;--error-color-A400-parts: #ffa8a4;--error-color-A700-parts: #ff8f8b;--error-color-contrast-50-parts: rgba(0, 0, 0, .87);--error-color-contrast-100-parts: rgba(0, 0, 0, .87);--error-color-contrast-200-parts: rgba(0, 0, 0, .87);--error-color-contrast-300-parts: rgba(0, 0, 0, .87);--error-color-contrast-400-parts: rgba(0, 0, 0, .87);--error-color-contrast-500-parts: rgba(255, 255, 255, 1);--error-color-contrast-600-parts: rgba(255, 255, 255, 1);--error-color-contrast-700-parts: rgba(255, 255, 255, 1);--error-color-contrast-800-parts: rgba(255, 255, 255, 1);--error-color-contrast-900-parts: rgba(255, 255, 255, 1);--error-color-contrast-A100-parts: rgba(0, 0, 0, .87);--error-color-contrast-A200-parts: rgba(0, 0, 0, .87);--error-color-contrast-A400-parts: rgba(0, 0, 0, .87);--error-color-contrast-A700-parts: rgba(0, 0, 0, .87);--error-color-50-parts-rgb: 252, 234, 232;--error-color-100-parts-rgb: 248, 201, 197;--error-color-200-parts-rgb: 248, 201, 197;--error-color-300-parts-rgb: 238, 130, 119;--error-color-400-parts-rgb: 235, 103, 89;--error-color-500-parts-rgb: 231, 76, 60;--error-color-600-parts-rgb: 228, 69, 54;--error-color-700-parts-rgb: 224, 60, 46;--error-color-800-parts-rgb: 221, 51, 39;--error-color-900-parts-rgb: 215, 36, 26;--error-color-A100-parts-rgb: 255, 255, 255;--error-color-A200-parts-rgb: 255, 217, 215;--error-color-A400-parts-rgb: 255, 168, 164;--error-color-A700-parts-rgb: 255, 143, 139;--neutral-color-50-parts: #e9e9e9;--neutral-color-100-parts: #dddddd;--neutral-color-200-parts: #cccccc;--neutral-color-300-parts: #b0b0b0;--neutral-color-400-parts: #909090;--neutral-color-500-parts: #515151;--neutral-color-600-parts: #424242;--neutral-color-700-parts: #333333;--neutral-color-800-parts: #212121;--neutral-color-900-parts: #141414;--neutral-color-A100-parts: #ffffff;--neutral-color-A200-parts: #ffffff;--neutral-color-A400-parts: #ffffff;--neutral-color-A700-parts: #ffffff;--neutral-color-contrast-50-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-100-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-200-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-300-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-400-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-500-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-600-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-700-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-800-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-900-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-A100-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A200-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A400-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A700-parts: rgba(0, 0, 0, .87);--neutral-color-50-parts-rgb: 233, 233, 233;--neutral-color-100-parts-rgb: 221, 221, 221;--neutral-color-200-parts-rgb: 204, 204, 204;--neutral-color-300-parts-rgb: 176, 176, 176;--neutral-color-400-parts-rgb: 144, 144, 144;--neutral-color-500-parts-rgb: 81, 81, 81;--neutral-color-600-parts-rgb: 66, 66, 66;--neutral-color-700-parts-rgb: 51, 51, 51;--neutral-color-800-parts-rgb: 33, 33, 33;--neutral-color-900-parts-rgb: 20, 20, 20;--neutral-color-A100-parts-rgb: 255, 255, 255;--neutral-color-A200-parts-rgb: 255, 255, 255;--neutral-color-A400-parts-rgb: 255, 255, 255;--neutral-color-A700-parts-rgb: 255, 255, 255}.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale3d(0,0,0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.mat-ripple-element{background-color:#0000001a}.mat-mdc-option{color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, .87))}.mat-mdc-option:hover:not(.mdc-list-item--disabled),.mat-mdc-option:focus:not(.mdc-list-item--disabled),.mat-mdc-option.mat-mdc-option-active,.mat-mdc-option.mdc-list-item--selected:not(.mat-mdc-option-multiple):not(.mdc-list-item--disabled){background:rgba(0,0,0,.04)}.mat-primary .mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text{color:var(--mdc-theme-primary, var(--primary-color-500-parts))}.mat-accent .mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text{color:var(--mdc-theme-secondary, var(--accent-color-500-parts))}.mat-warn .mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text{color:var(--mdc-theme-error, #f44336)}.mat-mdc-optgroup-label{color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, .87))}.mat-pseudo-checkbox-full{color:#0000008a}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-disabled{color:#b0b0b0}.mat-primary .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-primary .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:var(--primary-color-500-parts)}.mat-primary .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-primary .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:var(--primary-color-500-parts)}.mat-primary .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,.mat-primary .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after{color:#fafafa}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:var(--accent-color-500-parts)}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:var(--accent-color-500-parts)}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after{color:#fafafa}.mat-accent .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-accent .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:var(--accent-color-500-parts)}.mat-accent .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-accent .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:var(--accent-color-500-parts)}.mat-accent .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,.mat-accent .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after{color:#fafafa}.mat-warn .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-warn .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:#f44336}.mat-warn .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-warn .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:#f44336}.mat-warn .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,.mat-warn .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after{color:#fafafa}.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:#b0b0b0}.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:#b0b0b0}.mat-app-background{background-color:#fafafa;color:#000000de}.mat-elevation-z0,.mat-mdc-elevation-specific.mat-elevation-z0{box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f}.mat-elevation-z1,.mat-mdc-elevation-specific.mat-elevation-z1{box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.mat-elevation-z2,.mat-mdc-elevation-specific.mat-elevation-z2{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.mat-elevation-z3,.mat-mdc-elevation-specific.mat-elevation-z3{box-shadow:0 3px 3px -2px #0003,0 3px 4px #00000024,0 1px 8px #0000001f}.mat-elevation-z4,.mat-mdc-elevation-specific.mat-elevation-z4{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.mat-elevation-z5,.mat-mdc-elevation-specific.mat-elevation-z5{box-shadow:0 3px 5px -1px #0003,0 5px 8px #00000024,0 1px 14px #0000001f}.mat-elevation-z6,.mat-mdc-elevation-specific.mat-elevation-z6{box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}.mat-elevation-z7,.mat-mdc-elevation-specific.mat-elevation-z7{box-shadow:0 4px 5px -2px #0003,0 7px 10px 1px #00000024,0 2px 16px 1px #0000001f}.mat-elevation-z8,.mat-mdc-elevation-specific.mat-elevation-z8{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.mat-elevation-z9,.mat-mdc-elevation-specific.mat-elevation-z9{box-shadow:0 5px 6px -3px #0003,0 9px 12px 1px #00000024,0 3px 16px 2px #0000001f}.mat-elevation-z10,.mat-mdc-elevation-specific.mat-elevation-z10{box-shadow:0 6px 6px -3px #0003,0 10px 14px 1px #00000024,0 4px 18px 3px #0000001f}.mat-elevation-z11,.mat-mdc-elevation-specific.mat-elevation-z11{box-shadow:0 6px 7px -4px #0003,0 11px 15px 1px #00000024,0 4px 20px 3px #0000001f}.mat-elevation-z12,.mat-mdc-elevation-specific.mat-elevation-z12{box-shadow:0 7px 8px -4px #0003,0 12px 17px 2px #00000024,0 5px 22px 4px #0000001f}.mat-elevation-z13,.mat-mdc-elevation-specific.mat-elevation-z13{box-shadow:0 7px 8px -4px #0003,0 13px 19px 2px #00000024,0 5px 24px 4px #0000001f}.mat-elevation-z14,.mat-mdc-elevation-specific.mat-elevation-z14{box-shadow:0 7px 9px -4px #0003,0 14px 21px 2px #00000024,0 5px 26px 4px #0000001f}.mat-elevation-z15,.mat-mdc-elevation-specific.mat-elevation-z15{box-shadow:0 8px 9px -5px #0003,0 15px 22px 2px #00000024,0 6px 28px 5px #0000001f}.mat-elevation-z16,.mat-mdc-elevation-specific.mat-elevation-z16{box-shadow:0 8px 10px -5px #0003,0 16px 24px 2px #00000024,0 6px 30px 5px #0000001f}.mat-elevation-z17,.mat-mdc-elevation-specific.mat-elevation-z17{box-shadow:0 8px 11px -5px #0003,0 17px 26px 2px #00000024,0 6px 32px 5px #0000001f}.mat-elevation-z18,.mat-mdc-elevation-specific.mat-elevation-z18{box-shadow:0 9px 11px -5px #0003,0 18px 28px 2px #00000024,0 7px 34px 6px #0000001f}.mat-elevation-z19,.mat-mdc-elevation-specific.mat-elevation-z19{box-shadow:0 9px 12px -6px #0003,0 19px 29px 2px #00000024,0 7px 36px 6px #0000001f}.mat-elevation-z20,.mat-mdc-elevation-specific.mat-elevation-z20{box-shadow:0 10px 13px -6px #0003,0 20px 31px 3px #00000024,0 8px 38px 7px #0000001f}.mat-elevation-z21,.mat-mdc-elevation-specific.mat-elevation-z21{box-shadow:0 10px 13px -6px #0003,0 21px 33px 3px #00000024,0 8px 40px 7px #0000001f}.mat-elevation-z22,.mat-mdc-elevation-specific.mat-elevation-z22{box-shadow:0 10px 14px -6px #0003,0 22px 35px 3px #00000024,0 8px 42px 7px #0000001f}.mat-elevation-z23,.mat-mdc-elevation-specific.mat-elevation-z23{box-shadow:0 11px 14px -7px #0003,0 23px 36px 3px #00000024,0 9px 44px 8px #0000001f}.mat-elevation-z24,.mat-mdc-elevation-specific.mat-elevation-z24{box-shadow:0 11px 15px -7px #0003,0 24px 38px 3px #00000024,0 9px 46px 8px #0000001f}.mat-theme-loaded-marker{display:none}.mat-mdc-option{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 16px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, .03125em)}::ng-deep :root{--sof-nav-content-bg-color: #fffdfd;--sof-nav-font-color: #eee;--sof-nav-bg-gradient-color-1: #fff;--sof-nav-bg-gradient-color-2: #fff;--sof-nav-border-right-color: transparent;--sof-nav-list-border-color: #cfd8dc;--sof-nav-highlight-gradient-1: mat.get-color-from-palette($my-app-primary, 100);--sof-nav-highlight-gradient-2: rgba(255, 255, 255, 0);--sof-nav-sub-highlight-border-color: #616161;--sof-nav-sub-highlight-bg-color: #424242}.sof-ar-nav-sidenav{background:rgb(0,0,0);border-right-color:var(--sof-nav-border-right-color);background:linear-gradient(-180deg,var(--sof-nav-bg-gradient-color-1) 0%,var(--sof-nav-bg-gradient-color-2) 100%);overflow:hidden}.sof-ar-nav-sidenav *{color:var(--sof-nav-font-color)}::ng-deep [sof-ar-nav-footer] *,::ng-deep [sof-ar-nav-header] *{color:var(--sof-nav-font-color)!important}::ng-deep .sof-ar-nav-active-route:active{background:rgb(0,0,0)!important;background:linear-gradient(90deg,var(--sof-nav-highlight-gradient-1) 0%,var(--sof-nav-highlight-gradient-2) 80%)!important;border-bottom-right-radius:8px!important;border-top-right-radius:8px!important}::ng-deep .sof-ar-nav-sub-active-route{background:var(--sof-nav-sub-highlight-bg-color);margin-right:-4px;position:relative}::ng-deep .sof-ar-nav-sub-active-route:focus,::ng-deep .sof-ar-nav-sub-active-route:active{background:var(--sof-nav-sub-highlight-bg-color)!important}::ng-deep .sof-ar-nav-sub-active-route:before{content:\"\";display:block;position:absolute;top:0;height:inherit}::ng-deep .mat-drawer-container{background:var(--sof-nav-content-bg-color)!important}.sof-ar-nav-container{display:flex;flex-direction:column;position:absolute;bottom:0;left:0;right:0}h1.example-app-name{margin-left:8px}.sof-ar-nav-sidenav-container{flex:1}.example-is-mobile .example-sidenav-container{flex:1 0 auto}.hidden{display:none!important}.sof-ar-nav-buffer{height:40px}button.nav-item{border:0;background:transparent}.nav-item{font-size:15px!important;font-weight:500!important}.nav-item.mat-mdc-list-item-interactive:focus:before,.nav-item.mat-mdc-list-item-interactive:hover:before{opacity:0!important}.mat-expansion-indicator{border-bottom-right-radius:11px!important}.nav-footer-item{background:#FAFAFA;position:absolute;bottom:0%;width:18rem}.progress-footer{display:flex;width:100%;z-index:2}.panel-icon{float:right;color:#000!important}.user-name{display:inline-block;height:3.5rem;padding-left:.5rem;padding-top:3rem;padding-right:.5rem;font-size:larger;font-weight:800}::ng-deep .mat-mdc-list-base{padding:0!important}::ng-deep .mat-drawer-inner-container{min-width:275px;overflow:hidden!important}::ng-deep .mat-drawer-inner-container:hover{overflow:overlay!important}::ng-deep .icon-styling{padding-right:10px;padding-left:10px;width:24px;text-align:left}::ng-deep .nav-icon{margin-left:auto;padding-left:30px}::ng-deep .nav-item{font-family:Poppins;font-weight:500;padding-top:2px!important;padding-left:0!important}::ng-deep [sof-ar-nav-footer] hr{margin:5px 10px;opacity:.5}.subnav-content{padding:0;height:48px!important}.nav-header{height:64px!important}.mat-mdc-list-item{background-color:transparent;display:inline!important}::ng-deep .mdc-list-item__content{padding:0 4px!important;padding-left:1.5rem!important}::ng-deep .subnav-item{padding-left:1rem!important}::ng-deep .visible-mobile{display:none}@media only screen and (max-width: 959px){::ng-deep .visible-mobile{display:block}}@media (max-width: 959px){::ng-deep .sof-ar-fixed-nav{position:fixed;z-index:2;width:100%!important;box-sizing:border-box}}::ng-deep .sof-ar-nav-menu-btn{position:fixed!important;z-index:2!important;top:1.25%;width:44px!important;height:40px!important;color:var(--primary-color-500-parts)!important;background:var(--primary-color-50-parts)!important;border-radius:8px!important;padding:0!important}@media (max-width: 959px){::ng-deep .sof-ar-nav-menu-btn{margin-left:2%!important}}@media (min-width: 959px){::ng-deep .sof-ar-nav-menu-btn{margin-left:11px!important}}::ng-deep .sof-ar-nav-menu-btn:hover .mdc-icon-button__ripple,::ng-deep .sof-ar-nav-menu-btn:focus .mdc-icon-button__ripple{border-radius:inherit!important}@media only screen and (min-width: 959px){::ng-deep .mat-mdc-list-base:not(.subnav-item):not(.custom-nav):before{content:\"\";display:block;height:1px;margin-left:auto;width:calc(100% - 40px)}::ng-deep .mat-mdc-list-base:not(.subnav-item):not(.custom-nav):after{content:\"\";display:block;height:1px;margin-left:auto;width:calc(100% - 40px);margin-bottom:-1px}}::ng-deep .mat-step-text-label{color:#fff;font-family:Poppins,sans-serif!important;font-size:1.3em}::ng-deep .mat-expansion-indicator{padding:1em!important}::ng-deep .mat-stepper-vertical{background-color:transparent!important}.mat-mdc-nav-list{width:100%;margin-top:3px;margin-bottom:3px}.mat-mdc-nav-list:hover{border-bottom-right-radius:8px!important;border-top-right-radius:8px!important;background:var(--sof-nav-highlight-gradient-1)!important}.mat-expansion-panel-header{padding:0;height:64px!important;margin-top:3px;margin-bottom:3px}.mat-expansion-panel-header:hover,.sof-ar-nav-selected{background:var(--sof-nav-highlight-gradient-1)!important;border-bottom-right-radius:8px!important;border-top-right-radius:8px!important}.mat-expansion-panel{display:inline}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.step-active{border-bottom:3px solid var(--primary-color-500-parts);border-bottom-left-radius:0;border-bottom-right-radius:0}::ng-deep .mat-vertical-content{padding-bottom:0!important}.step-link{padding-left:0!important;padding-right:0!important}.step-titles{padding-top:20px;padding-bottom:20px}.step-titles>button{font-family:Poppins,sans-serif!important;font-size:16px!important;font-weight:500!important;color:#000;background-color:transparent!important}.step-active{border-bottom:0!important}::ng-deep .progress-menu-active,progress-menu-active *{color:#000!important}::ng-deep .color-primary,.color-primary *{color:var(--primary-color-500-parts)!important}.sof-ar-nav-sidenav{max-width:-webkit-fill-available}.nav-menu-btn-text{white-space:normal}.progress-menu-btn{width:-webkit-fill-available;text-align:left;padding:12px 16px!important;font-size:16px!important;height:-moz-fit-content;height:fit-content}::ng-deep .disabled,.disabled *,.progress-menu-btn:disabled,.progress-menu-mobile-btn:disabled,.mat-expansion-panel-header:disabled{color:#333c!important}.progress-nav-icon{margin-right:10px;font-size:14px}::ng-deep .progress-menu-mobile-btn{display:flex!important}::ng-deep .progress-nav-menu{display:flex!important}.progress-menu-mobile-btn{padding:12px 24px!important;width:-webkit-fill-available;text-align:left;height:-moz-fit-content;height:fit-content}.progress-mobile-panel-title{width:-webkit-fill-available;font-size:16px;font-family:Poppins,sans-serif!important;padding-left:24px}.progress-mobile-expansion-panel{margin:0!important}::ng-deep .progress-mobile-expansion-panel .mat-expansion-panel-body{background:var(--primary-color-50-parts)!important;padding:0!important;font-size:16px!important}::ng-deep .mat-mdc-menu-panel{max-width:unset!important}::ng-deep .progress-menu-panel{background:var(--primary-color-50-parts)!important}::ng-deep .cdk-overlay-container .cdk-overlay-pane{transform:none!important}::ng-deep .cdk-overlay-container .cdk-overlay-pane .step-option{margin-top:33px!important}.mobile-progress-container{padding-bottom:24px}.step-titles-mobile{padding-top:25px;padding-bottom:25px;background-color:transparent}.step-titles-mobile ::ng-deep .mat-mdc-select-trigger{padding-left:17px;padding-right:20px}.step-done{color:var(--accent-color-900-parts)!important;cursor:pointer}.step-future{color:var(--primary-color-900-parts)!important;opacity:.7}::ng-deep .mat-form-field-appearance-outline .mat-mdc-form-field-infix{padding-left:.5em!important;padding-right:.5em!important}::ng-deep .mdc-floating-label{padding-left:.5em!important;padding-right:.5em!important}::ng-deep .mat-form-field-appearance-outline .mat-mdc-form-field-icon-prefix{top:0!important}::ng-deep .mat-form-field-appearance-outline .mat-mdc-form-field-icon-suffix{top:0!important}[sws-alert--secondary]{max-height:90px;min-height:52px;padding:0 0 0 24px;margin:2px 5px;border-radius:5px;font-weight:700;font-size:16px;background:rgba(29,190,104,.1);border:2px solid #2b9c62;color:#2b9c62}.icon-container{align-self:center}.message-container{margin-left:10px;line-height:1.8}#btnClose{color:#000}.navigationFooter{width:100%;border:none;height:64px!important;font-family:Poppins;font-weight:500;font-size:15px!important;position:relative;text-align:left;padding-left:1.5rem}.navigationFooter:hover{color:unset!important}.nav-item-margin{position:relative;display:flex!important;width:inherit!important;height:inherit!important}.sof-ar-nav-menu-icon{font-size:23px}.menu-icon{color:var(--primary-color-800-parts)!important}.sidenav-background{background:transparent!important}::ng-deep .mat-expansion-panel-body{padding:0!important}::ng-deep .subnav-content>a>.mdc-list-item__content{padding:0 4px!important;padding-left:4.25rem!important}::ng-deep .nav-content-item{margin-right:24px;margin-top:24px}.sof-ar-nav-header-text{font-family:Poppins;font-weight:500;font-size:14px;line-height:175%;letter-spacing:.14em}\n"] }]
524
+ }], template: "<div class=\"sof-ar-nav-container\"\r\n [style.top]=\"mobileQuery.matches && advancedSettings.topGapMobile ? advancedSettings.topGapMobile + 'px' : settings.headerHeight + 'px'\"\r\n [class.sof-ar-nav-mobile]=\"mobileQuery.matches\">\r\n <div *ngIf=\"showMessage\" m-a-0 fxLayout=\"row\" fxLayoutAlign=\"space-between center\" sws-alert--secondary role=\"alert\">\r\n <div fxLayout=\"row\" aria-hidden=\"true\">\r\n <i *ngIf=\"showCheckMark\" m-r-5 m-l-5 class=\"fas fa-check-circle icon-container\"></i>\r\n <p class=\"message-container\" m-r-5 m-l-5 [innerHtml]=\"message | translate\"></p>\r\n </div>\r\n <div fxLayout=\"column\">\r\n <button id=\"btnClose\" (click)=\"hide()\" mat-icon-button [attr.aria-label]=\"'common.close' | translate\">\r\n <span aria-hidden=\"true\">\r\n <i class=\"fal fa-times fa-lg\"></i>\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n <button id=\"sof-ar-nav-btn-menu\" aria-label=\"Menu Button\" mat-icon-button [disableRipple]=\"true\"\r\n (click)=\"snav.toggle()\" class=\"sof-ar-nav-menu-btn\"\r\n [class.hidden]=\"!(mobileQuery.matches || settings.allowNavToggle) || settings.hideNavigation\">\r\n <span *ngIf=\"isNavOpen; else closedIcon\" aria-hidden=\"true\" class=\"sof-ar-nav-menu-icon\">\r\n <i class=\"{{settings.fontAwesomeMenuIcon}} menu-icon\"></i>\r\n </span>\r\n <ng-template #closedIcon>\r\n <span aria-hidden=\"true\" class=\"sof-ar-nav-menu-icon\">\r\n <i class=\"{{settings.fontAwesomeMenuIconClosed}} menu-icon\"></i>\r\n </span>\r\n </ng-template>\r\n <span class=\"sr-only\">{{settings.menuButtonSRText | translate}}</span>\r\n </button>\r\n\r\n <mat-sidenav-container autosize class=\"sof-ar-nav-sidenav-container\" [style.marginTop.px]=\"\r\n mobileQuery.matches ? advancedSettings.marginTopMobile : advancedSettings.marginTopDesktop\">\r\n <mat-sidenav [disableClose]=\"!mobileQuery.matches\" class=\"sof-ar-nav-sidenav\" #snav [mode]=\"mobileQuery.matches ? 'over' : 'side'\"\r\n [fixedInViewport]=\"mobileQuery.matches\" [fixedTopGap]=\"mobileQuery.matches ? advancedSettings.topGapMobile : advancedSettings.topGapDesktop\"\r\n [opened]=\"!mobileQuery.matches && !settings.hideNavigation && settings.menuStyle!='progress' \"\r\n [style.width]=\"mobileQuery.matches ? setNavWidth(settings.sideNavWidthMobile) : setNavWidth(settings.sideNavWidthDesktop)\"\r\n [ngStyle]=\"{background:mobileQuery.matches ? themeSettings?.mobileBgColor : undefined}\">\r\n <ng-container *ngIf=\"mobileQuery.matches && userName && !settings.customUserName\">\r\n <span class=\"user-name\">\r\n {{userName}}\r\n </span>\r\n </ng-container>\r\n <ng-container *ngIf=\"mobileQuery.matches && settings.customUserName\">\r\n <span class=\"user-name\">\r\n {{settings.customUserName | translate}}\r\n </span>\r\n </ng-container>\r\n <!-- Nav Header Content -->\r\n <ng-content select=\"[sof-ar-nav-header]\"> </ng-content>\r\n\r\n <!-- Static Navigation -->\r\n <div class=\"nav-content-item sidenav-background\" *ngIf=\"settings.menuStyle === 'static'\" [ngStyle]=\"{'padding-bottom.px': (footerItemCount*64)+128}\">\r\n <nav *ngIf=\"settings.menuStyle === 'static'\" [attr.aria-label]=\"'main'\">\r\n <ng-container *ngFor=\"let nav of navigationData\">\r\n <ng-container *ngIf=\"nav?.subNodes?.length && !nav.hidden\">\r\n <mat-accordion>\r\n <mat-expansion-panel [expanded]=\"nav.expanded\">\r\n <mat-expansion-panel-header [ngClass]=\"{ 'sof-ar-nav-selected': isNavSelected(nav) }\">\r\n <!-- Navigation -->\r\n <ng-container>\r\n <!-- If there is a route -->\r\n <ng-container *ngIf=\"nav?.route\">\r\n <mat-nav-list [disableRipple]=\"true\" [attr.role]=\"'navigation'\">\r\n <a class=\"nav-item\" mat-list-item [routerLink]=\"nav?.route\"\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"{{nav?.fontAwesomeIcon}}\"></i>\r\n </span>\r\n </ng-container>\r\n <span class=\"sof-ar-nav-header-text\">{{nav.text | translate}}</span>\r\n </a>\r\n </mat-nav-list>\r\n </ng-container>\r\n <!-- If there is not a route -->\r\n <ng-container *ngIf=\"!nav?.route\">\r\n <mat-nav-list [disableRipple]=\"true\" [attr.role]=\"'navigation'\">\r\n <button id=\"sof-ar-nav-btn-node\" class=\"nav-item\" mat-list-item\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"{{nav?.fontAwesomeIcon}}\"></i>\r\n </span>\r\n </ng-container>\r\n <span class=\"sof-ar-nav-header-text\">{{nav.text | translate}}</span>\r\n </button>\r\n </mat-nav-list>\r\n </ng-container>\r\n </ng-container>\r\n </mat-expansion-panel-header>\r\n <!-- SubNav -->\r\n <ng-container>\r\n <mat-nav-list [ngClass]=\"{ 'sof-ar-nav-selected': isNavSelected(subnav) }\" class=\"subnav-content\"\r\n [disableRipple]=\"true\" *ngFor=\"let subnav of nav?.subNodes\" (click)=\"closeNavigationForMobile()\" [attr.role]=\"'navigation'\">\r\n <a class=\"nav-item nav-item-margin\" mat-list-item [routerLinkActive]=\"['sof-ar-nav-sub-active-route']\" [routerLink]=\"subnav.route\"\r\n [attr.role]=\"'navigation'\" [attr.aria-label]=\"(nav.text | translate) + ' ' + (subnav.text | translate)\">\r\n <span class=\"sof-ar-nav-header-text\" [attr.role]=\"'navigation'\" \r\n [attr.aria-label]=\"(nav.text | translate) + ' ' + (subnav.text | translate)\">\r\n {{subnav.text | translate}}\r\n </span>\r\n </a>\r\n </mat-nav-list>\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n <!-- If subnodes are not there -->\r\n <ng-container>\r\n <ng-container *ngIf=\"!nav?.subNodes?.length && !nav?.hidden\">\r\n <!-- If there is a route -->\r\n <ng-container *ngIf=\"nav?.route\">\r\n <mat-nav-list [ngClass]=\"{ 'sof-ar-nav-selected': isNavSelected(nav) }\" class=\"nav-header\"\r\n [disableRipple]=\"true\" (click)=\"closeNavigationForMobile()\" [attr.role]=\"null\">\r\n <a class=\"nav-item nav-item-margin\" mat-list-item [routerLink]=\"nav?.route\"\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\"><i class=\"{{nav?.fontAwesomeIcon}}\"></i></span>\r\n </ng-container>\r\n <span class=\"sof-ar-nav-header-text\">{{nav.text | translate}}</span>\r\n </a>\r\n </mat-nav-list>\r\n </ng-container>\r\n <!-- If there is not a route -->\r\n <ng-container *ngIf=\"!nav?.route\">\r\n <mat-nav-list [disableRipple]=\"true\" [attr.role]=\"null\">\r\n <button id=\"sof-ar-nav-btn-node\" class=\"nav-item\" mat-list-item\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\"><i class=\"{{nav?.fontAwesomeIcon}}\"></i></span>\r\n </ng-container>\r\n <span class=\"sof-ar-nav-header-text\">{{nav.text | translate}}</span>\r\n </button>\r\n </mat-nav-list>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </nav>\r\n </div>\r\n\r\n <!-- Stepper -->\r\n <mat-vertical-stepper *ngIf=\"settings.menuStyle === 'stepper'\" [selectedIndex]=\"selectedParentIndex\" #vertStepper\r\n [linear]=\"false\" class=\"sidenav-background\">\r\n <!-- Alternate step states for nav, icaons should always be white only worked with styles -->\r\n <ng-template matStepperIcon=\"create\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"edit\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"active\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"done\">\r\n <span>\r\n <i class=\"fas fa-check\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n\r\n <!-- nav steps -->\r\n <ng-container *ngFor=\"let nav of navigationData; let i = index\">\r\n <mat-step *ngIf=\"!nav?.hidden\" state=\"{{ determineStepState(i, -1) }}\">\r\n <ng-template matStepLabel *ngIf=\"!nav.hidden\">\r\n <div id=\"divStep{{ i }}\" style=\"height: 72px\" fxLayout=\"row\" fxLayoutAlign=\"start center\"\r\n matTooltip=\"{{ nav.text | translate }}\" [matTooltipPosition]=\"'after'\" fxFlex=\"100%\">\r\n <a id=\"step{{ i }}\" fxFlex=\"100%\" class=\"mat-button step-link\" [routerLink]=\"nav.route\"\r\n [ngStyle]=\"{ color: themeSettings?.fontColor }\" [routerLinkActive]=\"['step-active']\">\r\n {{ nav.text | translate }}\r\n </a>\r\n </div>\r\n </ng-template>\r\n <p [innerHTML]=\"nav.stepContent | translate\"></p>\r\n <!-- sub nav -->\r\n <mat-vertical-stepper *ngIf=\"nav?.subNodes\" [selectedIndex]=\"selectedChildIndexes[i]\" [linear]=\"false\"\r\n #vertStepperInner>\r\n <!-- Alternate step states for sub nav, icons should always be white only worked with styles -->\r\n <ng-template matStepperIcon=\"create\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"edit\">\r\n <span>\r\n <i class=\"fad fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"done\">\r\n <span>\r\n <i class=\"fas fa-check\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"active\">\r\n <span>\r\n <i class=\"fas fa-pencil-alt\" style=\"color: white !important\"></i>\r\n </span>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"none\">\r\n <span></span>\r\n </ng-template>\r\n <!-- sub nav steps -->\r\n <ng-container *ngFor=\"let subnav of nav?.subNodes; let j = index\">\r\n <mat-step state=\"{{ determineStepState(i, j) }}\" *ngIf=\"!subnav.hidden\">\r\n <ng-template matStepLabel>\r\n <div id=\"divSubStep{{ i }}-{{ j }}\" style=\"height: 72px\" fxLayout=\"row\" fxLayoutAlign=\"start center\"\r\n matTooltip=\"{{ subnav.text | translate }}\" [matTooltipPosition]=\"'after'\" fxFlex=\"100%\">\r\n <a id=\"subStep{{ i }}-{{ j }}\" class=\"mat-button step-link\"\r\n [ngStyle]=\"{ color: themeSettings?.fontColor }\" [routerLink]=\"subnav.route\"\r\n [routerLinkActive]=\"['step-active']\">{{ subnav.text | translate }}</a>\r\n </div>\r\n </ng-template>\r\n <p [innerHTML]=\"subnav.stepContent | translate\"></p>\r\n </mat-step>\r\n </ng-container>\r\n\r\n </mat-vertical-stepper>\r\n </mat-step>\r\n </ng-container>\r\n\r\n </mat-vertical-stepper>\r\n\r\n <!-- Nav Footer -->\r\n <div class=\"nav-footer-item\">\r\n <ng-container *ngIf=\"settings.menuStyle === 'static'\">\r\n <ng-container *ngFor=\"let nav of footerNavigationData\">\r\n <ng-container>\r\n <!-- Desktop Nav -->\r\n <ng-container *ngIf=\"!nav?.subNodes?.length\">\r\n <!-- If there is a route -->\r\n <ng-container *ngIf=\"nav?.route\">\r\n <mat-nav-list class=\"nav-header\" [disableRipple]=\"true\">\r\n <a class=\"nav-item nav-item-margin\" mat-list-item [routerLink]=\"nav?.route\"\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\"><i class=\"{{nav?.fontAwesomeIcon}}\"></i></span>\r\n </ng-container>\r\n {{nav.text | translate}}\r\n </a>\r\n </mat-nav-list>\r\n </ng-container>\r\n <!-- If there is not a route -->\r\n <ng-container *ngIf=\"!nav?.route\">\r\n <mat-nav-list>\r\n <button id=\"sof-ar-nav-btn-node\" class=\"nav-item\" mat-list-item\r\n [routerLinkActive]=\"['sof-ar-nav-active-route']\">\r\n <ng-container *ngIf=\"nav?.fontAwesomeIcon\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\"><i class=\"{{nav?.fontAwesomeIcon}}\"></i></span>\r\n </ng-container>\r\n {{nav.text | translate}}\r\n </button>\r\n </mat-nav-list>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template [ngTemplateOutlet]=\"navigationFooter\">\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- the mobile progress menu-->\r\n <ng-container *ngIf=\"settings?.menuStyle === 'progress'\">\r\n <div class=\"sidenav-background\" [ngStyle]=\"{'padding-bottom.px': (footerItemCount*64)+128}\">\r\n <mat-accordion>\r\n <div *ngFor=\"let step of navigationData; let i = index\">\r\n <ng-container *ngIf=\"step.subNodes && step.subNodes.length > 0 && !step.hidden\">\r\n <mat-expansion-panel hideToggle class=\"progress-mobile-expansion-panel\"\r\n [disabled]=\"(!step.visited || step.isDisabled) && !settings.overrideNavigation\" (opened)=\"panelOpenState = true\"\r\n (closed)=\"panelOpenState = false\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title class=\"progress-mobile-panel-title\">\r\n <div style=\"width: -webkit-fill-available;\"\r\n [ngClass]=\"{'disabled':(!step.visited || step.isDisabled) && !settings.overrideNavigation && !step.complete,'color-primary':step.complete && step!=activeParentNode,'progress-menu-active':step===activeParentNode}\">\r\n <ng-template [ngTemplateOutlet]=\"progressParentNodeIcons\" [ngTemplateOutletContext]=\"{step:step}\">\r\n </ng-template>\r\n <span *ngIf=\"settings?.displayNumbers\">\r\n {{i < 10 ? \"0\" + (i + 1) + \". \" : i + \" . \" }}\r\n </span>\r\n <span class=\"nav-btn-text\">\r\n {{ step.text | translate }}\r\n </span>\r\n <span *ngIf=\"!panelOpenState\">\r\n <i class=\"fas fa-chevron-down panel-icon\"></i>\r\n </span>\r\n <span *ngIf=\"panelOpenState\">\r\n <i class=\"fas fa-chevron-up panel-icon\"></i>\r\n </span>\r\n </div>\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <!-- mobile sub menu -->\r\n <div class=\"progress-nav-menu\" *ngFor=\"let subNode of step.subNodes; let idx = index;\" [hidden]=\"step.subNodes[idx].hidden\">\r\n <button id=\"mobileMenu{{ idx }}\" mat-button class=\"step-link progress-menu-mobile-btn\"\r\n [ngClass]=\"{'color-primary':subNode.complete && subNode!=activeSubNode}\"\r\n [routerLinkActive]=\"['progress-menu-active']\" [ngStyle]=\"{ ' color': themeSettings?.fontColor }\"\r\n [routerLink]=\"subNode.route\" [disabled]=\"!subNode.visited && !settings.overrideNavigation\">\r\n <ng-template [ngTemplateOutlet]=\"progressSubNodeIcons\"\r\n [ngTemplateOutletContext]=\"{subNode:subNode}\">\r\n </ng-template>\r\n <span class=\"nav-menu-btn-text\" [ngClass]=\"{'disabled':(!subNode.visited) && !settings.overrideNavigation && !subNode.complete,'color-primary':subNode.complete && subNode!=activeSubNode,'progress-menu-active':subNode===activeSubNode}\">{{ subNode.text | translate }}</span>\r\n </button>\r\n </div>\r\n </mat-expansion-panel>\r\n </ng-container>\r\n <!-- if there are no subNodes -->\r\n <ng-container *ngIf=\"(!step.subNodes || step.subNodes.length==0) && !step.hidden\">\r\n <mat-expansion-panel #panel hideToggle (opened)=\"disablePanel(panel,i)\" class=\"progress-mobile-expansion-panel\"\r\n [disabled]=\"(!step.visited || step.isDisabled) && !settings.overrideNavigation\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title class=\"progress-mobile-panel-title\">\r\n <div [ngClass]=\"{'disabled':(!step.visited || step.isDisabled) && !settings.overrideNavigation && !step.complete,'color-primary':step.complete && step!=activeParentNode,'progress-menu-active':step===activeParentNode}\">\r\n <ng-template [ngTemplateOutlet]=\"progressParentNodeIcons\" [ngTemplateOutletContext]=\"{step:step}\">\r\n </ng-template>\r\n <span *ngIf=\"settings?.displayNumbers\">\r\n {{i < 10 ? \"0\" + (i + 1) + \". \" : i + \" . \" }}\r\n </span>\r\n <span class=\"nav-btn-text\">\r\n {{ step.text | translate }}\r\n </span>\r\n </div>\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n </mat-expansion-panel>\r\n </ng-container>\r\n </div>\r\n </mat-accordion>\r\n </div>\r\n\r\n <!-- the progress menu language and logout buttons-->\r\n <div class=\"nav-footer-item progress-footer\">\r\n <ng-template [ngTemplateOutlet]=\"navigationFooter\">\r\n </ng-template>\r\n </div>\r\n </ng-container>\r\n </mat-sidenav>\r\n <mat-sidenav-content>\r\n <!-- Horizontal Progress -->\r\n <ng-container *ngIf=\"settings?.menuStyle === 'progress'\">\r\n <mat-progress-bar *ngIf=\"settings?.showProgressBar\" mode=\"determinate\" [value]=\"navProgressCount\"\r\n style=\"height: 9px\" color=\"accent\">\r\n </mat-progress-bar>\r\n <div fxHide.lt-md class=\"step-titles center\" fxLayout=\"row\" style=\"justify-content:center !important\" [class.hidden]=\"settings.hideNavigation\">\r\n <div *ngFor=\"let step of navigationData; let i = index\" class=\"horizontal-progress-div\">\r\n <ng-container *ngIf=\"!step.subNodes?.length && !step.hidden\">\r\n <button mat-button [routerLink]=\"step.route\"\r\n [disabled]=\"(!step.visited || step.isDisabled) && !settings.overrideNavigation\" class=\"progress-menu-btn\"\r\n [ngClass]=\"{'color-primary':step.complete && step!=activeParentNode,'progress-menu-active':step===activeParentNode}\">\r\n <ng-template [ngTemplateOutlet]=\"progressParentNodeIcons\" [ngTemplateOutletContext]=\"{step:step}\">\r\n </ng-template>\r\n <span *ngIf=\"settings?.displayNumbers\">\r\n {{i < 10 ? \"0\" + (i + 1) + \". \" : i + \" . \"}}\r\n </span>\r\n <span class=\"nav-btn-text\">{{ step.text | translate }}</span>\r\n </button>\r\n </ng-container>\r\n <!-- if there are subnodes create menus for each step -->\r\n <ng-container *ngIf=\"step.subNodes && step.subNodes.length && !step.hidden\">\r\n <button [ngClass]=\"{'color-primary':step.complete && step!=activeParentNode,'progress-menu-active':step===activeParentNode}\"\r\n mat-button [disabled]=\"(!step.visited || step.isDisabled) && !settings.overrideNavigation\" class=\"progress-menu-btn\"\r\n [matMenuTriggerFor]=\"menu\">\r\n <ng-template [ngTemplateOutlet]=\"progressParentNodeIcons\" [ngTemplateOutletContext]=\"{step:step}\">\r\n </ng-template>\r\n <span *ngIf=\"settings?.displayNumbers\">\r\n {{i < 10 ? \"0\" + (i + 1) + \". \" : i + \" . \"}}\r\n </span>\r\n <span class=\"nav-btn-text\">{{ step.text | translate }}</span>\r\n </button>\r\n <mat-menu #menu=\"matMenu\" class=\"sof-ar-mat-menu progress-menu-panel\">\r\n <div class=\"progress-nav-menu\" *ngFor=\"let subNode of step.subNodes; let idx = index;\" [ngStyle]=\"{width:settings.progressMenuWidth+'px'}\" [hidden]=\"step.subNodes[idx].hidden\">\r\n <button id=\"submenu{{ idx }}\" mat-button class=\"step-link progress-menu-btn\"\r\n [ngClass]=\"{'color-primary':subNode.complete && subNode!=activeSubNode,'disabled':!subNode.visited && !settings.overrideNavigation}\"\r\n [routerLinkActive]=\"['progress-menu-active']\" [ngStyle]=\"{ ' color': themeSettings?.fontColor }\"\r\n [routerLink]=\"subNode.route\" [disabled]=\"!subNode.visited && !settings.overrideNavigation\">\r\n <ng-template [ngTemplateOutlet]=\"progressSubNodeIcons\"\r\n [ngTemplateOutletContext]=\"{subNode:subNode}\">\r\n </ng-template>\r\n <span class=\"nav-menu-btn-text\">{{ subNode.text |translate }}</span>\r\n </button>\r\n </div>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"mobile-progress-container\" fxHide.gt-sm>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-content sof-ar-nav-content></ng-content>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n <!-- The progress menu parent node icon template-->\r\n <ng-template #progressParentNodeIcons let-step='step'>\r\n <span *ngIf=\"step.complete && step != activeParentNode\" \r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.complete' | translate\">\r\n <i class=\"{{ settings.progressSectionCompleteIcon }} color-primary progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.complete' | translate\"></i>\r\n </span>\r\n <span *ngIf=\"step === activeParentNode\" \r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.in-progress' | translate\">\r\n <i class=\"{{ settings.progressSectionCurrentIcon }} color-primary progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.in-progress' | translate\"></i>\r\n </span>\r\n <span *ngIf=\"!step.complete && step != activeParentNode\" [ngClass]=\"{'disabled':!step.visited && !settings.overrideNavigation}\" \r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.not-done' | translate\">\r\n <i class=\"{{ settings.progressSectionFutureIcon }} progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.not-done' | translate\"></i>\r\n </span>\r\n </ng-template>\r\n <!-- The progress menu sub node icon template-->\r\n <ng-template #progressSubNodeIcons let-subNode='subNode'>\r\n <span *ngIf=\"subNode.complete && activeSubNode != subNode\"\r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.complete' | translate\">\r\n <i class=\"{{settings.progressMenuCompleteIcon}} color-primary progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.complete' | translate\"></i>\r\n </span>\r\n <span *ngIf=\"activeSubNode === subNode\"\r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.in-progress' | translate\">\r\n <i class=\"{{ settings.progressSectionCurrentIcon }} color-primary progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.in-progress' | translate\"></i>\r\n </span>\r\n <span *ngIf=\"!subNode.complete && activeSubNode != subNode\" [ngClass]=\"{'disabled':!subNode.visited && !settings.overrideNavigation}\"\r\n [attr.aria-label]=\"'armature.sof-progress-bar.step-labels.not-done' | translate\">\r\n <i class=\"{{ settings.progressSectionFutureIcon }} progress-nav-icon\" [title]=\"'armature.sof-progress-bar.step-labels.not-done' | translate\"></i>\r\n </span>\r\n </ng-template>\r\n <!-- The navigation footer template for language and logout buttons -->\r\n <ng-template #navigationFooter>\r\n <ng-content select=\"[sof-ar-nav-mobile-footer]\"> </ng-content>\r\n <ng-container *ngIf=\"!settings.useCustomMobileFooter\">\r\n <!-- The language button -->\r\n <ng-container *ngIf=\"languageSettings?.displayLanguageOptions && languageSettings?.languages.length > 2 && mobileQuery.matches\">\r\n <button id=\"sof-ar-nav-lang-dropdown\" mat-stroked-button\r\n class=\"faded-button-50 language-button navigationFooter\" [matMenuTriggerFor]=\"headerLanguageMenu\"\r\n [attr.aria-label]=\"languageSettings.buttonText | translate\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"far fa-globe language-globe\"></i>\r\n </span>\r\n {{languageSettings.buttonText | translate}}\r\n </button>\r\n <mat-menu #headerLanguageMenu=\"matMenu\" class=\"sof-ar-mat-menu\">\r\n <button mat-menu-item *ngFor=\"let lang of languageSettings.languages\" (click)=\"setLanguage$.emit(lang)\"\r\n id=\"apply-lang-btn-{{lang}}\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\">\r\n <div fxFlex=\"auto\">\r\n {{ lang | translate }}\r\n </div>\r\n <div fxFlex=\"auto\" fxLayoutAlign=\"end end\">\r\n <i *ngIf=\"currentLang === lang\" class=\"fad fa-check selected-language-icon\"></i>\r\n </div>\r\n </div>\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <ng-container *ngIf=\"languageSettings?.displayLanguageOptions && languageSettings?.languages.length === 2 && mobileQuery.matches\">\r\n <button *ngIf=\"languageSettings?.languages.length === 2\" id=\"sof-ar-nav-lang-button\" mat-stroked-button\r\n class=\"faded-button-50 language-button navigationFooter\"\r\n [attr.aria-label]=\"languageSettings.buttonText | translate\" (click)=\"setLanguage$.emit()\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"far fa-globe language-globe\"></i>\r\n </span>\r\n {{otherLangText | translate}}\r\n </button>\r\n </ng-container>\r\n <!-- The logout button-->\r\n <ng-container *ngIf=\"mobileQuery.matches && userName\">\r\n <button id=\"sof-ar-header-lang-button\" mat-stroked-button class=\"navigationFooter\" (click)=\"logOut()\">\r\n <span aria-hidden=\"true\" class=\"icon-styling\">\r\n <i class=\"fas fa-sign-out-alt\"></i>\r\n </span>\r\n {{logOutText | translate}}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n</div>\r\n", styles: [":root{--primary-color-50-parts: #edf4ff;--primary-color-100-parts: #b9d4fc;--primary-color-200-parts: #8ab7fb;--primary-color-300-parts: #5b9af9;--primary-color-400-parts: #3784f7;--primary-color-500-parts: #146ef6;--primary-color-600-parts: #1266f5;--primary-color-700-parts: #0e5bf3;--primary-color-800-parts: #0b51f2;--primary-color-900-parts: #063fef;--primary-color-A100-parts: #ffffff;--primary-color-A200-parts: #e4e9ff;--primary-color-A400-parts: #b1c0ff;--primary-color-A700-parts: #97acff;--primary-color-contrast-50-parts: rgba(0, 0, 0, .87);--primary-color-contrast-100-parts: rgba(0, 0, 0, .87);--primary-color-contrast-200-parts: rgba(0, 0, 0, .87);--primary-color-contrast-300-parts: rgba(0, 0, 0, .87);--primary-color-contrast-400-parts: rgba(255, 255, 255, 1);--primary-color-contrast-500-parts: rgba(255, 255, 255, 1);--primary-color-contrast-600-parts: rgba(255, 255, 255, 1);--primary-color-contrast-700-parts: rgba(255, 255, 255, 1);--primary-color-contrast-800-parts: rgba(255, 255, 255, 1);--primary-color-contrast-900-parts: rgba(255, 255, 255, 1);--primary-color-contrast-A100-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A200-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A400-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A700-parts: rgba(0, 0, 0, .87);--primary-color-50-parts-rgb: 237, 244, 255;--primary-color-100-parts-rgb: 185, 212, 252;--primary-color-200-parts-rgb: 138, 183, 251;--primary-color-300-parts-rgb: 91, 154, 249;--primary-color-400-parts-rgb: 55, 132, 247;--primary-color-500-parts-rgb: 20, 110, 246;--primary-color-600-parts-rgb: 18, 102, 245;--primary-color-700-parts-rgb: 14, 91, 243;--primary-color-800-parts-rgb: 11, 81, 242;--primary-color-900-parts-rgb: 6, 63, 239;--primary-color-A100-parts-rgb: 255, 255, 255;--primary-color-A200-parts-rgb: 228, 233, 255;--primary-color-A400-parts-rgb: 177, 192, 255;--primary-color-A700-parts-rgb: 151, 172, 255;--accent-color-50-parts: #e0f2f1;--accent-color-100-parts: #b2dfdb;--accent-color-200-parts: #80cbc4;--accent-color-300-parts: #4db6ac;--accent-color-400-parts: #26a69a;--accent-color-500-parts: #009688;--accent-color-600-parts: #00897b;--accent-color-700-parts: #00796b;--accent-color-800-parts: #00695c;--accent-color-900-parts: #004d40;--accent-color-A100-parts: #a7ffeb;--accent-color-A200-parts: #64ffda;--accent-color-A400-parts: #1de9b6;--accent-color-A700-parts: #00bfa5;--accent-color-contrast-50-parts: #000000;--accent-color-contrast-100-parts: #000000;--accent-color-contrast-200-parts: #000000;--accent-color-contrast-300-parts: #000000;--accent-color-contrast-400-parts: #000000;--accent-color-contrast-500-parts: #ffffff;--accent-color-contrast-600-parts: #ffffff;--accent-color-contrast-700-parts: #ffffff;--accent-color-contrast-800-parts: #ffffff;--accent-color-contrast-900-parts: #ffffff;--accent-color-contrast-A100-parts: #000000;--accent-color-contrast-A200-parts: #000000;--accent-color-contrast-A400-parts: #000000;--accent-color-contrast-A700-parts: #000000;--accent-color-50-parts-rgb: 224, 242, 241;--accent-color-100-parts-rgb: 178, 223, 219;--accent-color-200-parts-rgb: 128, 203, 196;--accent-color-300-parts-rgb: 77, 182, 172;--accent-color-400-parts-rgb: 38, 166, 154;--accent-color-500-parts-rgb: 0, 150, 136;--accent-color-600-parts-rgb: 0, 137, 123;--accent-color-700-parts-rgb: 0, 121, 107;--accent-color-800-parts-rgb: 0, 105, 92;--accent-color-900-parts-rgb: 0, 77, 64;--accent-color-A100-parts-rgb: 167, 255, 235;--accent-color-A200-parts-rgb: 100, 255, 218;--accent-color-A400-parts-rgb: 29, 233, 182;--accent-color-A700-parts-rgb: 0, 191, 165;--warn-color-50-parts: #fdf3e7;--warn-color-100-parts: #fbe1c3;--warn-color-200-parts: #f9ce9c;--warn-color-300-parts: #f6ba74;--warn-color-400-parts: #f4ab56;--warn-color-500-parts: #f29c38;--warn-color-600-parts: #f09432;--warn-color-700-parts: #ee8a2b;--warn-color-800-parts: #ec8024;--warn-color-900-parts: #e86e17;--warn-color-A100-parts: #ffffff;--warn-color-A200-parts: #fff0e6;--warn-color-A400-parts: #ffd0b3;--warn-color-A700-parts: #ffc19a;--warn-color-contrast-50-parts: rgba(0, 0, 0, .87);--warn-color-contrast-100-parts: rgba(0, 0, 0, .87);--warn-color-contrast-200-parts: rgba(0, 0, 0, .87);--warn-color-contrast-300-parts: rgba(0, 0, 0, .87);--warn-color-contrast-400-parts: rgba(0, 0, 0, .87);--warn-color-contrast-500-parts: rgba(0, 0, 0, .87);--warn-color-contrast-600-parts: rgba(0, 0, 0, .87);--warn-color-contrast-700-parts: rgba(0, 0, 0, .87);--warn-color-contrast-800-parts: rgba(0, 0, 0, .87);--warn-color-contrast-900-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A100-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A200-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A400-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A700-parts: rgba(0, 0, 0, .87);--warn-color-50-parts-rgb: 253, 243, 231;--warn-color-100-parts-rgb: 251, 225, 195;--warn-color-200-parts-rgb: 249, 206, 156;--warn-color-300-parts-rgb: 246, 186, 116;--warn-color-400-parts-rgb: 244, 171, 86;--warn-color-500-parts-rgb: 242, 156, 56;--warn-color-600-parts-rgb: 240, 148, 50;--warn-color-700-parts-rgb: 238, 138, 43;--warn-color-800-parts-rgb: 236, 128, 36;--warn-color-900-parts-rgb: 232, 110, 23;--warn-color-A100-parts-rgb: 255, 255, 255;--warn-color-A200-parts-rgb: 255, 240, 230;--warn-color-A400-parts-rgb: 255, 208, 179;--warn-color-A700-parts-rgb: 255, 193, 154;--info-color-50-parts: #e7f3fb;--info-color-100-parts: #c2e0f4;--info-color-200-parts: #9acced;--info-color-300-parts: #71b7e6;--info-color-400-parts: #52a7e0;--info-color-500-parts: #3498db;--info-color-600-parts: #2f90d7;--info-color-700-parts: #2785d2;--info-color-800-parts: #217bcd;--info-color-900-parts: #156ac4;--info-color-A100-parts: #f5f9ff;--info-color-A200-parts: #c2ddff;--info-color-A400-parts: #8fc1ff;--info-color-A700-parts: #75b3ff;--info-color-contrast-50-parts: rgba(0, 0, 0, .87);--info-color-contrast-100-parts: rgba(0, 0, 0, .87);--info-color-contrast-200-parts: rgba(0, 0, 0, .87);--info-color-contrast-300-parts: rgba(0, 0, 0, .87);--info-color-contrast-400-parts: rgba(255, 255, 255, 1);--info-color-contrast-500-parts: rgba(255, 255, 255, 1);--info-color-contrast-600-parts: rgba(255, 255, 255, 1);--info-color-contrast-700-parts: rgba(255, 255, 255, 1);--info-color-contrast-800-parts: rgba(255, 255, 255, 1);--info-color-contrast-900-parts: rgba(255, 255, 255, 1);--info-color-contrast-A100-parts: rgba(0, 0, 0, .87);--info-color-contrast-A200-parts: rgba(0, 0, 0, .87);--info-color-contrast-A400-parts: rgba(0, 0, 0, .87);--info-color-contrast-A700-parts: rgba(0, 0, 0, .87);--info-color-50-parts-rgb: 231, 243, 251;--info-color-100-parts-rgb: 194, 224, 244;--info-color-200-parts-rgb: 154, 204, 237;--info-color-300-parts-rgb: 113, 183, 230;--info-color-400-parts-rgb: 82, 167, 224;--info-color-500-parts-rgb: 52, 152, 219;--info-color-600-parts-rgb: 47, 144, 215;--info-color-700-parts-rgb: 39, 133, 210;--info-color-800-parts-rgb: 33, 123, 205;--info-color-900-parts-rgb: 21, 106, 196;--info-color-A100-parts-rgb: 245, 249, 255;--info-color-A200-parts-rgb: 194, 221, 255;--info-color-A400-parts-rgb: 143, 193, 255;--info-color-A700-parts-rgb: 117, 179, 255;--success-color-50-parts: #edf5eb;--success-color-100-parts: #d1e6ce;--success-color-200-parts: #b3d6ae;--success-color-300-parts: #95c58d;--success-color-400-parts: #7eb874;--success-color-500-parts: #67ac5c;--success-color-600-parts: #5fa554;--success-color-700-parts: #549b4a;--success-color-800-parts: #4a9241;--success-color-900-parts: #398230;--success-color-A100-parts: #d0ffcb;--success-color-A200-parts: #a2ff98;--success-color-A400-parts: #74ff65;--success-color-A700-parts: #5dff4c;--success-color-contrast-50-parts: rgba(0, 0, 0, .87);--success-color-contrast-100-parts: rgba(0, 0, 0, .87);--success-color-contrast-200-parts: rgba(0, 0, 0, .87);--success-color-contrast-300-parts: rgba(0, 0, 0, .87);--success-color-contrast-400-parts: rgba(0, 0, 0, .87);--success-color-contrast-500-parts: rgba(0, 0, 0, .87);--success-color-contrast-600-parts: rgba(0, 0, 0, .87);--success-color-contrast-700-parts: rgba(255, 255, 255, 1);--success-color-contrast-800-parts: rgba(255, 255, 255, 1);--success-color-contrast-900-parts: rgba(255, 255, 255, 1);--success-color-contrast-A100-parts: rgba(0, 0, 0, .87);--success-color-contrast-A200-parts: rgba(0, 0, 0, .87);--success-color-contrast-A400-parts: rgba(0, 0, 0, .87);--success-color-contrast-A700-parts: rgba(0, 0, 0, .87);--success-color-50-parts-rgb: 237, 245, 235;--success-color-100-parts-rgb: 209, 230, 206;--success-color-200-parts-rgb: 179, 214, 174;--success-color-300-parts-rgb: 149, 197, 141;--success-color-400-parts-rgb: 126, 184, 116;--success-color-500-parts-rgb: 103, 172, 92;--success-color-600-parts-rgb: 95, 165, 84;--success-color-700-parts-rgb: 84, 155, 74;--success-color-800-parts-rgb: 74, 146, 65;--success-color-900-parts-rgb: 57, 130, 48;--success-color-A100-parts-rgb: 208, 255, 203;--success-color-A200-parts-rgb: 162, 255, 152;--success-color-A400-parts-rgb: 116, 255, 101;--success-color-A700-parts-rgb: 93, 255, 76;--error-color-50-parts: #fceae8;--error-color-100-parts: #f8c9c5;--error-color-200-parts: #f3a69e;--error-color-300-parts: #ee8277;--error-color-400-parts: #eb6759;--error-color-500-parts: #e74c3c;--error-color-600-parts: #e44536;--error-color-700-parts: #e03c2e;--error-color-800-parts: #dd3327;--error-color-900-parts: #d7241a;--error-color-A100-parts: #ffffff;--error-color-A200-parts: #ffd9d7;--error-color-A400-parts: #ffa8a4;--error-color-A700-parts: #ff8f8b;--error-color-contrast-50-parts: rgba(0, 0, 0, .87);--error-color-contrast-100-parts: rgba(0, 0, 0, .87);--error-color-contrast-200-parts: rgba(0, 0, 0, .87);--error-color-contrast-300-parts: rgba(0, 0, 0, .87);--error-color-contrast-400-parts: rgba(0, 0, 0, .87);--error-color-contrast-500-parts: rgba(255, 255, 255, 1);--error-color-contrast-600-parts: rgba(255, 255, 255, 1);--error-color-contrast-700-parts: rgba(255, 255, 255, 1);--error-color-contrast-800-parts: rgba(255, 255, 255, 1);--error-color-contrast-900-parts: rgba(255, 255, 255, 1);--error-color-contrast-A100-parts: rgba(0, 0, 0, .87);--error-color-contrast-A200-parts: rgba(0, 0, 0, .87);--error-color-contrast-A400-parts: rgba(0, 0, 0, .87);--error-color-contrast-A700-parts: rgba(0, 0, 0, .87);--error-color-50-parts-rgb: 252, 234, 232;--error-color-100-parts-rgb: 248, 201, 197;--error-color-200-parts-rgb: 248, 201, 197;--error-color-300-parts-rgb: 238, 130, 119;--error-color-400-parts-rgb: 235, 103, 89;--error-color-500-parts-rgb: 231, 76, 60;--error-color-600-parts-rgb: 228, 69, 54;--error-color-700-parts-rgb: 224, 60, 46;--error-color-800-parts-rgb: 221, 51, 39;--error-color-900-parts-rgb: 215, 36, 26;--error-color-A100-parts-rgb: 255, 255, 255;--error-color-A200-parts-rgb: 255, 217, 215;--error-color-A400-parts-rgb: 255, 168, 164;--error-color-A700-parts-rgb: 255, 143, 139;--neutral-color-50-parts: #e9e9e9;--neutral-color-100-parts: #dddddd;--neutral-color-200-parts: #cccccc;--neutral-color-300-parts: #b0b0b0;--neutral-color-400-parts: #909090;--neutral-color-500-parts: #515151;--neutral-color-600-parts: #424242;--neutral-color-700-parts: #333333;--neutral-color-800-parts: #212121;--neutral-color-900-parts: #141414;--neutral-color-A100-parts: #ffffff;--neutral-color-A200-parts: #ffffff;--neutral-color-A400-parts: #ffffff;--neutral-color-A700-parts: #ffffff;--neutral-color-contrast-50-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-100-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-200-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-300-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-400-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-500-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-600-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-700-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-800-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-900-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-A100-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A200-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A400-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A700-parts: rgba(0, 0, 0, .87);--neutral-color-50-parts-rgb: 233, 233, 233;--neutral-color-100-parts-rgb: 221, 221, 221;--neutral-color-200-parts-rgb: 204, 204, 204;--neutral-color-300-parts-rgb: 176, 176, 176;--neutral-color-400-parts-rgb: 144, 144, 144;--neutral-color-500-parts-rgb: 81, 81, 81;--neutral-color-600-parts-rgb: 66, 66, 66;--neutral-color-700-parts-rgb: 51, 51, 51;--neutral-color-800-parts-rgb: 33, 33, 33;--neutral-color-900-parts-rgb: 20, 20, 20;--neutral-color-A100-parts-rgb: 255, 255, 255;--neutral-color-A200-parts-rgb: 255, 255, 255;--neutral-color-A400-parts-rgb: 255, 255, 255;--neutral-color-A700-parts-rgb: 255, 255, 255}.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale3d(0,0,0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.mat-ripple-element{background-color:#0000001a}.mat-mdc-option{color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, .87))}.mat-mdc-option:hover:not(.mdc-list-item--disabled),.mat-mdc-option:focus:not(.mdc-list-item--disabled),.mat-mdc-option.mat-mdc-option-active,.mat-mdc-option.mdc-list-item--selected:not(.mat-mdc-option-multiple):not(.mdc-list-item--disabled){background:rgba(0,0,0,.04)}.mat-primary .mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text{color:var(--mdc-theme-primary, var(--primary-color-500-parts))}.mat-accent .mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text{color:var(--mdc-theme-secondary, var(--accent-color-500-parts))}.mat-warn .mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text{color:var(--mdc-theme-error, #f44336)}.mat-mdc-optgroup-label{color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, .87))}.mat-pseudo-checkbox-full{color:#0000008a}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-disabled{color:#b0b0b0}.mat-primary .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-primary .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:var(--primary-color-500-parts)}.mat-primary .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-primary .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:var(--primary-color-500-parts)}.mat-primary .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,.mat-primary .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after{color:#fafafa}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:var(--accent-color-500-parts)}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:var(--accent-color-500-parts)}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after{color:#fafafa}.mat-accent .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-accent .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:var(--accent-color-500-parts)}.mat-accent .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-accent .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:var(--accent-color-500-parts)}.mat-accent .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,.mat-accent .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after{color:#fafafa}.mat-warn .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-warn .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:#f44336}.mat-warn .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-warn .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:#f44336}.mat-warn .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full:after,.mat-warn .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full:after{color:#fafafa}.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-minimal:after,.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-minimal:after{color:#b0b0b0}.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-full,.mat-pseudo-checkbox-disabled.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-full{background:#b0b0b0}.mat-app-background{background-color:#fafafa;color:#000000de}.mat-elevation-z0,.mat-mdc-elevation-specific.mat-elevation-z0{box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f}.mat-elevation-z1,.mat-mdc-elevation-specific.mat-elevation-z1{box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.mat-elevation-z2,.mat-mdc-elevation-specific.mat-elevation-z2{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.mat-elevation-z3,.mat-mdc-elevation-specific.mat-elevation-z3{box-shadow:0 3px 3px -2px #0003,0 3px 4px #00000024,0 1px 8px #0000001f}.mat-elevation-z4,.mat-mdc-elevation-specific.mat-elevation-z4{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.mat-elevation-z5,.mat-mdc-elevation-specific.mat-elevation-z5{box-shadow:0 3px 5px -1px #0003,0 5px 8px #00000024,0 1px 14px #0000001f}.mat-elevation-z6,.mat-mdc-elevation-specific.mat-elevation-z6{box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}.mat-elevation-z7,.mat-mdc-elevation-specific.mat-elevation-z7{box-shadow:0 4px 5px -2px #0003,0 7px 10px 1px #00000024,0 2px 16px 1px #0000001f}.mat-elevation-z8,.mat-mdc-elevation-specific.mat-elevation-z8{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.mat-elevation-z9,.mat-mdc-elevation-specific.mat-elevation-z9{box-shadow:0 5px 6px -3px #0003,0 9px 12px 1px #00000024,0 3px 16px 2px #0000001f}.mat-elevation-z10,.mat-mdc-elevation-specific.mat-elevation-z10{box-shadow:0 6px 6px -3px #0003,0 10px 14px 1px #00000024,0 4px 18px 3px #0000001f}.mat-elevation-z11,.mat-mdc-elevation-specific.mat-elevation-z11{box-shadow:0 6px 7px -4px #0003,0 11px 15px 1px #00000024,0 4px 20px 3px #0000001f}.mat-elevation-z12,.mat-mdc-elevation-specific.mat-elevation-z12{box-shadow:0 7px 8px -4px #0003,0 12px 17px 2px #00000024,0 5px 22px 4px #0000001f}.mat-elevation-z13,.mat-mdc-elevation-specific.mat-elevation-z13{box-shadow:0 7px 8px -4px #0003,0 13px 19px 2px #00000024,0 5px 24px 4px #0000001f}.mat-elevation-z14,.mat-mdc-elevation-specific.mat-elevation-z14{box-shadow:0 7px 9px -4px #0003,0 14px 21px 2px #00000024,0 5px 26px 4px #0000001f}.mat-elevation-z15,.mat-mdc-elevation-specific.mat-elevation-z15{box-shadow:0 8px 9px -5px #0003,0 15px 22px 2px #00000024,0 6px 28px 5px #0000001f}.mat-elevation-z16,.mat-mdc-elevation-specific.mat-elevation-z16{box-shadow:0 8px 10px -5px #0003,0 16px 24px 2px #00000024,0 6px 30px 5px #0000001f}.mat-elevation-z17,.mat-mdc-elevation-specific.mat-elevation-z17{box-shadow:0 8px 11px -5px #0003,0 17px 26px 2px #00000024,0 6px 32px 5px #0000001f}.mat-elevation-z18,.mat-mdc-elevation-specific.mat-elevation-z18{box-shadow:0 9px 11px -5px #0003,0 18px 28px 2px #00000024,0 7px 34px 6px #0000001f}.mat-elevation-z19,.mat-mdc-elevation-specific.mat-elevation-z19{box-shadow:0 9px 12px -6px #0003,0 19px 29px 2px #00000024,0 7px 36px 6px #0000001f}.mat-elevation-z20,.mat-mdc-elevation-specific.mat-elevation-z20{box-shadow:0 10px 13px -6px #0003,0 20px 31px 3px #00000024,0 8px 38px 7px #0000001f}.mat-elevation-z21,.mat-mdc-elevation-specific.mat-elevation-z21{box-shadow:0 10px 13px -6px #0003,0 21px 33px 3px #00000024,0 8px 40px 7px #0000001f}.mat-elevation-z22,.mat-mdc-elevation-specific.mat-elevation-z22{box-shadow:0 10px 14px -6px #0003,0 22px 35px 3px #00000024,0 8px 42px 7px #0000001f}.mat-elevation-z23,.mat-mdc-elevation-specific.mat-elevation-z23{box-shadow:0 11px 14px -7px #0003,0 23px 36px 3px #00000024,0 9px 44px 8px #0000001f}.mat-elevation-z24,.mat-mdc-elevation-specific.mat-elevation-z24{box-shadow:0 11px 15px -7px #0003,0 24px 38px 3px #00000024,0 9px 46px 8px #0000001f}.mat-theme-loaded-marker{display:none}.mat-mdc-option{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 16px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, .03125em)}::ng-deep :root{--sof-nav-content-bg-color: #fffdfd;--sof-nav-font-color: #eee;--sof-nav-bg-gradient-color-1: #fff;--sof-nav-bg-gradient-color-2: #fff;--sof-nav-border-right-color: transparent;--sof-nav-list-border-color: #cfd8dc;--sof-nav-highlight-gradient-1: mat.get-color-from-palette($my-app-primary, 100);--sof-nav-highlight-gradient-2: rgba(255, 255, 255, 0);--sof-nav-sub-highlight-border-color: #616161;--sof-nav-sub-highlight-bg-color: #424242}.sof-ar-nav-sidenav{background:rgb(0,0,0);border-right-color:var(--sof-nav-border-right-color);background:linear-gradient(-180deg,var(--sof-nav-bg-gradient-color-1) 0%,var(--sof-nav-bg-gradient-color-2) 100%);overflow:hidden}.sof-ar-nav-sidenav *{color:var(--sof-nav-font-color)}::ng-deep [sof-ar-nav-footer] *,::ng-deep [sof-ar-nav-header] *{color:var(--sof-nav-font-color)!important}::ng-deep .sof-ar-nav-active-route:active{background:rgb(0,0,0)!important;background:linear-gradient(90deg,var(--sof-nav-highlight-gradient-1) 0%,var(--sof-nav-highlight-gradient-2) 80%)!important;border-bottom-right-radius:8px!important;border-top-right-radius:8px!important}::ng-deep .sof-ar-nav-sub-active-route{background:var(--sof-nav-sub-highlight-bg-color);margin-right:-4px;position:relative}::ng-deep .sof-ar-nav-sub-active-route:focus,::ng-deep .sof-ar-nav-sub-active-route:active{background:var(--sof-nav-sub-highlight-bg-color)!important}::ng-deep .sof-ar-nav-sub-active-route:before{content:\"\";display:block;position:absolute;top:0;height:inherit}::ng-deep .mat-drawer-container{background:var(--sof-nav-content-bg-color)!important}.sof-ar-nav-container{display:flex;flex-direction:column;position:absolute;bottom:0;left:0;right:0}h1.example-app-name{margin-left:8px}.sof-ar-nav-sidenav-container{flex:1}.example-is-mobile .example-sidenav-container{flex:1 0 auto}.hidden{display:none!important}.sof-ar-nav-buffer{height:40px}button.nav-item{border:0;background:transparent}.nav-item{font-size:15px!important;font-weight:500!important}.nav-item.mat-mdc-list-item-interactive:focus:before,.nav-item.mat-mdc-list-item-interactive:hover:before{opacity:0!important}.mat-expansion-indicator{border-bottom-right-radius:11px!important}.nav-footer-item{background:#FAFAFA;position:absolute;bottom:0%;width:18rem}.progress-footer{display:flex;width:100%;z-index:2}.panel-icon{float:right;color:#000!important}.user-name{display:inline-block;height:3.5rem;padding-left:.5rem;padding-top:3rem;padding-right:.5rem;font-size:larger;font-weight:800}::ng-deep .mat-mdc-list-base{padding:0!important}::ng-deep .mat-drawer-inner-container{min-width:275px;overflow:hidden!important}::ng-deep .mat-drawer-inner-container:hover{overflow:overlay!important}::ng-deep .icon-styling{padding-right:10px;padding-left:10px;width:24px;text-align:left}::ng-deep .nav-icon{margin-left:auto;padding-left:30px}::ng-deep .nav-item{font-family:Poppins;font-weight:500;padding-top:2px!important;padding-left:0!important}::ng-deep [sof-ar-nav-footer] hr{margin:5px 10px;opacity:.5}.subnav-content{padding:0;height:48px!important}.nav-header{height:64px!important}.mat-mdc-list-item{background-color:transparent;display:inline!important}.mat-mdc-list-item:focus{outline:2px solid white!important}::ng-deep .mdc-list-item__content{padding:0 4px!important;padding-left:1.5rem!important}::ng-deep .subnav-item{padding-left:1rem!important}::ng-deep .visible-mobile{display:none}@media only screen and (max-width: 959px){::ng-deep .visible-mobile{display:block}}@media (max-width: 959px){::ng-deep .sof-ar-fixed-nav{position:fixed;z-index:2;width:100%!important;box-sizing:border-box}}::ng-deep .sof-ar-nav-menu-btn{position:fixed!important;z-index:2!important;top:1.25%;width:44px!important;height:40px!important;color:var(--primary-color-500-parts)!important;background:var(--primary-color-50-parts)!important;border-radius:8px!important;padding:0!important}@media (max-width: 959px){::ng-deep .sof-ar-nav-menu-btn{margin-left:2%!important}}@media (min-width: 959px){::ng-deep .sof-ar-nav-menu-btn{margin-left:11px!important}}::ng-deep .sof-ar-nav-menu-btn:hover .mdc-icon-button__ripple,::ng-deep .sof-ar-nav-menu-btn:focus .mdc-icon-button__ripple{border-radius:inherit!important}@media only screen and (min-width: 959px){::ng-deep .mat-mdc-list-base:not(.subnav-item):not(.custom-nav):before{content:\"\";display:block;height:1px;margin-left:auto;width:calc(100% - 40px)}::ng-deep .mat-mdc-list-base:not(.subnav-item):not(.custom-nav):after{content:\"\";display:block;height:1px;margin-left:auto;width:calc(100% - 40px);margin-bottom:-1px}}::ng-deep .mat-step-text-label{color:#fff;font-family:Poppins,sans-serif!important;font-size:1.3em}::ng-deep .mat-expansion-indicator{padding:1em!important}::ng-deep .mat-stepper-vertical{background-color:transparent!important}.mat-mdc-nav-list{width:100%;margin-top:3px;margin-bottom:3px}.mat-mdc-nav-list:hover{border-bottom-right-radius:8px!important;border-top-right-radius:8px!important;background:var(--sof-nav-highlight-gradient-1)!important}.mat-expansion-panel-header{padding:0;height:64px!important;margin-top:3px;margin-bottom:3px}.mat-expansion-panel-header:hover{background:var(--sof-nav-highlight-gradient-1)!important;border-bottom-right-radius:8px!important;border-top-right-radius:8px!important}.mat-expansion-panel-header:focus{outline:2px solid white!important}.sof-ar-nav-selected{background:var(--sof-nav-highlight-gradient-1)!important;border-bottom-right-radius:8px!important;border-top-right-radius:8px!important}.mat-expansion-panel{display:inline}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.step-active{border-bottom:3px solid var(--primary-color-500-parts);border-bottom-left-radius:0;border-bottom-right-radius:0}::ng-deep .mat-vertical-content{padding-bottom:0!important}.step-link{padding-left:0!important;padding-right:0!important}.step-titles{padding-top:20px;padding-bottom:20px}.step-titles>button{font-family:Poppins,sans-serif!important;font-size:16px!important;font-weight:500!important;color:#000;background-color:transparent!important}.step-active{border-bottom:0!important}::ng-deep .progress-menu-active,progress-menu-active *{color:#000!important}::ng-deep .color-primary,.color-primary *{color:var(--primary-color-500-parts)!important}.sof-ar-nav-sidenav{max-width:-webkit-fill-available}.nav-menu-btn-text{white-space:normal}.progress-menu-btn{width:-webkit-fill-available;text-align:left;padding:12px 16px!important;font-size:16px!important;height:-moz-fit-content;height:fit-content}::ng-deep .disabled,.disabled *,.progress-menu-btn:disabled,.progress-menu-mobile-btn:disabled,.mat-expansion-panel-header:disabled{color:#333c!important}.progress-nav-icon{margin-right:10px;font-size:14px}::ng-deep .progress-menu-mobile-btn{display:flex!important}::ng-deep .progress-nav-menu{display:flex!important}.progress-menu-mobile-btn{padding:12px 24px!important;width:-webkit-fill-available;text-align:left;height:-moz-fit-content;height:fit-content}.progress-mobile-panel-title{width:-webkit-fill-available;font-size:16px;font-family:Poppins,sans-serif!important;padding-left:24px}.progress-mobile-expansion-panel{margin:0!important}::ng-deep .progress-mobile-expansion-panel .mat-expansion-panel-body{background:var(--primary-color-50-parts)!important;padding:0!important;font-size:16px!important}::ng-deep .mat-mdc-menu-panel{max-width:unset!important}::ng-deep .progress-menu-panel{background:var(--primary-color-50-parts)!important}::ng-deep .cdk-overlay-container .cdk-overlay-pane{transform:none!important}::ng-deep .cdk-overlay-container .cdk-overlay-pane .step-option{margin-top:33px!important}.mobile-progress-container{padding-bottom:24px}.step-titles-mobile{padding-top:25px;padding-bottom:25px;background-color:transparent}.step-titles-mobile ::ng-deep .mat-mdc-select-trigger{padding-left:17px;padding-right:20px}.step-done{color:var(--accent-color-900-parts)!important;cursor:pointer}.step-future{color:var(--primary-color-900-parts)!important;opacity:.7}::ng-deep .mat-form-field-appearance-outline .mat-mdc-form-field-infix{padding-left:.5em!important;padding-right:.5em!important}::ng-deep .mdc-floating-label{padding-left:.5em!important;padding-right:.5em!important}::ng-deep .mat-form-field-appearance-outline .mat-mdc-form-field-icon-prefix{top:0!important}::ng-deep .mat-form-field-appearance-outline .mat-mdc-form-field-icon-suffix{top:0!important}[sws-alert--secondary]{max-height:90px;min-height:52px;padding:0 0 0 24px;margin:2px 5px;border-radius:5px;font-weight:700;font-size:16px;background:rgba(29,190,104,.1);border:2px solid #2b9c62;color:#2b9c62}.icon-container{align-self:center}.message-container{margin-left:10px;line-height:1.8}#btnClose{color:#000}.navigationFooter{width:100%;border:none;height:64px!important;font-family:Poppins;font-weight:500;font-size:15px!important;position:relative;text-align:left;padding-left:1.5rem}.navigationFooter:hover{color:unset!important}.nav-item-margin{position:relative;display:flex!important;width:inherit!important;height:inherit!important}.sof-ar-nav-menu-icon{font-size:23px}.menu-icon{color:var(--primary-color-800-parts)!important}.sidenav-background{background:transparent!important}::ng-deep .mat-expansion-panel-body{padding:0!important}::ng-deep .subnav-content>a>.mdc-list-item__content{padding:0 4px!important;padding-left:4.25rem!important}::ng-deep .nav-content-item{margin-right:24px;margin-top:24px}.sof-ar-nav-header-text{font-family:Poppins;font-weight:500;font-size:14px;line-height:175%;letter-spacing:.14em}\n"] }]
525
525
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.MediaMatcher }, { type: i2.Router }, { type: i3.BannerService }, { type: i4.AuthorizationService }, { type: i5.BaseConfigService, decorators: [{
526
526
  type: Optional
527
527
  }] }]; }, propDecorators: { stepper: [{
@@ -553,4 +553,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
553
553
  }], setLanguage$: [{
554
554
  type: Output
555
555
  }] } });
556
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcm1hdHVyZS9zcmMvbGliL25hdmlnYXRpb24vY29tcG9uZW50cy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJtYXR1cmUvc3JjL2xpYi9uYXZpZ2F0aW9uL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxNQUFNLEVBQWEsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkxSyxPQUFPLEVBQUUsYUFBYSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVeEMsMEZBQTBGO0FBRTFGOztHQUVHO0FBU0gsTUFBTSxPQUFPLDJCQUEyQjtJQXNDdEMsaUNBQWlDO0lBQ2pDLElBQVcsYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBZ0ZEOzs7Ozs7OztPQVFHO0lBQ0gsWUFDVyxpQkFBb0MsRUFDcEMsS0FBbUIsRUFDWCxNQUFjLEVBQ3ZCLGFBQTRCLEVBQ25CLG9CQUEwQyxFQUM5QixhQUFnQztR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ay9sYXlvdXQnO1xyXG5pbXBvcnQgeyBTVEVQUEVSX0dMT0JBTF9PUFRJT05TIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3N0ZXBwZXInO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRFeHBhbnNpb25QYW5lbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XHJcbmltcG9ydCB7IE1hdFNpZGVuYXYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcclxuaW1wb3J0IHsgTWF0U3RlcHBlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3N0ZXBwZXInO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBCYXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvYmFzZS1jb25maWcnO1xyXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvYXV0aG9yaXphdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFubmVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvYmFubmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvYmFzZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IEhlYWRlckxhbmd1YWdlU2V0dGluZ3MgfSBmcm9tICcuLi8uLi8uLi9oZWFkZXIvbW9kZWxzL2hlYWRlci1sYW5ndWFnZS5zZXR0aW5ncyc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25UaGVtZVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL25hdi10aGVtZS5zZXR0aW5ncyc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25BZHZhbmNlZFNldHRpbmdzLCBOYXZpZ2F0aW9uU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9tb2RlbHMvbmF2LnNldHRpbmdzJztcclxuaW1wb3J0IHsgTmF2Tm9kZSwgU3ViTmF2Tm9kZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvbmF2aWdhdGlvbic7XHJcblxyXG4vLyBUT0RPOiBzZWUgaG93IHRoaXMgY2FuIGZpdCB3aXRoIHRoZSBgc29mLXByb2dyZXNzLWJhcmAgY29tcG9uZW50LiBQb3NzaWJseSBjb21iaW5lIHRoZW1cclxuXHJcbi8qKlxyXG4gKiBUaGUgTmF2aWdhdGlvbiBDb21wb25lbnRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc29mLWFyLW5hdmlnYXRpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uYXZpZ2F0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9uYXZpZ2F0aW9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbe1xyXG4gICAgcHJvdmlkZTogU1RFUFBFUl9HTE9CQUxfT1BUSU9OUywgdXNlVmFsdWU6IHsgZGlzcGxheURlZmF1bHRJbmRpY2F0b3JUeXBlOiBmYWxzZSB9XHJcbiAgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFybWF0dXJlTmF2aWdhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgLyoqIFRoZSBwYXJlbnQgc3RlcHBlciAqL1xyXG4gIEBWaWV3Q2hpbGQoJ3ZlcnRTdGVwcGVyJykgcHVibGljIHN0ZXBwZXI6IE1hdFN0ZXBwZXI7XHJcblxyXG4gIC8qKiBUaGUgc2lkZSBtb2JpbGUgbmF2ICovXHJcbiAgQFZpZXdDaGlsZCgnc25hdicpIHB1YmxpYyBzaWRlbmF2OiBNYXRTaWRlbmF2O1xyXG5cclxuICAvKiogVGhlIG1vYmlsZSBleHBhbnNpb24gcGFuZWwgZm9yIHByb2dyZXNzIG1lbnUgKi9cclxuICBAVmlld0NoaWxkKCdwYW5lbCcpIHB1YmxpYyBleHBhbnNpb25QYW5lbDogTWF0RXhwYW5zaW9uUGFuZWw7XHJcblxyXG4gIC8qKiBUaGUgY2hpbGQgc3RlcHBlcnMgKi9cclxuICBAVmlld0NoaWxkcmVuKCd2ZXJ0U3RlcHBlcklubmVyJykgcHVibGljIGlubmVyU3RlcHBlcnM6IFF1ZXJ5TGlzdDxNYXRTdGVwcGVyPjtcclxuXHJcbiAgLyoqIENvbXBvbmVudCBJbnB1dCAtIHRoZSBuYXZpZ2F0aW9uIGRhdGEgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbmF2aWdhdGlvbkRhdGE6IE5hdk5vZGVbXTtcclxuXHJcbiAgLyoqIENvbXBvbmVudCBJbnB1dCAtIHRoZSBuYXZpZ2F0aW9uIHNldHRpbmdzICovXHJcbiAgQElucHV0KCkgcHVibGljIHNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3MgPSB7fTtcclxuXHJcbiAgLyoqIENvbXBvbmVudCBJbnB1dCAtIHRoZSBuYXZpZ2F0aW9uIHNldHRpbmdzICovXHJcbiAgQElucHV0KCkgcHVibGljIGFkdmFuY2VkU2V0dGluZ3M6IE5hdmlnYXRpb25BZHZhbmNlZFNldHRpbmdzID0ge307XHJcblxyXG4gIC8qKiBDb21wb25lbnQgSW5wdXQgLSB0aGUgbmF2aWdhdGlvbiBzZXR0aW5ncyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0aGVtZVNldHRpbmdzOiBOYXZpZ2F0aW9uVGhlbWVTZXR0aW5ncyA9IHt9O1xyXG5cclxuICAvKiogQ29tcG9uZW50IElucHV0IC0gdGhlIG5hdmlnYXRpb24gbGFuZ3VhZ2Ugc2V0dGluZ3MgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbGFuZ3VhZ2VTZXR0aW5nczogSGVhZGVyTGFuZ3VhZ2VTZXR0aW5ncyA9IHt9O1xyXG5cclxuICAvKiogQ3VycmVudCBsYW5ndWFnZSAqKi9cclxuICBASW5wdXQoKSBwdWJsaWMgY3VycmVudExhbmc6IHN0cmluZztcclxuXHJcbiAgLyoqIGxvZ091dCB0ZXh0ICoqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2dPdXRUZXh0OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBTZXRzIGxhbmd1YWdlICoqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgc2V0TGFuZ3VhZ2UkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAvKiogZ2V0cyB0aGUgbm9uIHVzZWQgbGFuZ3VhZ2UgKi9cclxuICBwdWJsaWMgZ2V0IG90aGVyTGFuZ1RleHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmxhbmd1YWdlU2V0dGluZ3M/Lmxhbmd1YWdlcz8uZmluZCh4ID0+IHggIT09IHRoaXMuY3VycmVudExhbmcpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdoZXRoZXIgc2lkZSBuYXYgaXMgb3BlbiBvciBub3QgKi9cclxuICBwdWJsaWMgaXNOYXZPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBNb2JpbGUgU3ViTmF2IC0gd2hldGhlciBvciBub3QgdGhlIG1vYmlsZSBTdWJOYXYgaXMgb3BlbiAqL1xyXG4gIHB1YmxpYyBpc01vYmlsZVN1Yk5hdk9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIE1vYmlsZSBTdWJOYXYgLXRoZSBkYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgbW9iaWxlIFN1Yk5hdiAqL1xyXG4gIHB1YmxpYyBjdXJyZW50TW9iaWxlTmF2OiBOYXZOb2RlO1xyXG5cclxuICAvKiogU2V0dGluZ3MgLSB0aGUgbWFpbiBtZW51IHRleHQgdGhhdCBhcHBlYXJzIGluIHRoZSBtb2JpbGUgU3ViTmF2ICovXHJcbiAgcHVibGljIG1haW5NZW51VGV4dDogc3RyaW5nO1xyXG5cclxuICAvKiogdGhlIG1vYmlsZSBxdWVyeSAqL1xyXG4gIHB1YmxpYyBtb2JpbGVRdWVyeTogTWVkaWFRdWVyeUxpc3Q7XHJcblxyXG4gIC8qKiBUaGUgc2VsZWN0ZWQgcGFyZW50IGluZGV4ICovXHJcbiAgcHVibGljIHNlbGVjdGVkUGFyZW50SW5kZXg6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKiBUaGUgc2VsZWN0ZWQgY2hpbGQgaW5kZXggKi9cclxuICBwdWJsaWMgc2VsZWN0ZWRDaGlsZEluZGV4ZXM6IHsgW2tleTogbnVtYmVyXTogbnVtYmVyIH0gPSB7fTtcclxuXHJcbiAgLyoqIFRoZSBuYXZpZ2F0aW9uIHByb2dyZXNzIGNvdW50ICovXHJcbiAgcHVibGljIG5hdlByb2dyZXNzQ291bnQ6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKiBUaGUgY3VycmVudCBhY3RpdmUgcGFyZW50IG5vZGUgKi9cclxuICBwdWJsaWMgYWN0aXZlUGFyZW50Tm9kZTogTmF2Tm9kZTtcclxuXHJcbiAgLyoqIFRoZSBjdXJyZW50IGFjdGl2ZSBzdWIgbm9kZSAqL1xyXG4gIHB1YmxpYyBhY3RpdmVTdWJOb2RlOiBTdWJOYXZOb2RlcztcclxuXHJcbiAgLyoqIFRydWUgaWYgdGhlIGV4cGFuc2lvbiBwYW5lbCBpcyBvcGVuICovXHJcbiAgcHVibGljIHBhbmVsT3BlblN0YXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBUaGUgZm9vdGVyIG5hdmlnYXRpb24gZGF0YSAqL1xyXG4gIHB1YmxpYyBmb290ZXJOYXZpZ2F0aW9uRGF0YTogTmF2Tm9kZVtdXHJcblxyXG4gIC8qKiB1c2VyIG5hbWUgKiovXHJcbiAgcHVibGljIHVzZXJOYW1lOiBzdHJpbmc7XHJcblxyXG4gIC8qKiBUaGUgY29uZmlnIG9ic2VydmFibGUgKi9cclxuICBwdWJsaWMgY29uZmlnJDogT2JzZXJ2YWJsZTxCYXNlQ29uZmlnPjtcclxuXHJcbiAgLyoqIFRoZSBwYXJlbnQgbm9kZSBpbmRleCB0byBiZSBzZXQgd2hlbiBuYXYgaXMgdG9nZ2xlZCB0byBwcm9ncmVzcyBtZW51IHN0eWxlICovXHJcbiAgcHVibGljIHRvZ2dsZVByb2dyZXNzTmF2UGFyZW50SW5kZXg6IG51bWJlcjtcclxuXHJcbiAgLyoqIFRoZSBjaGlsZCBub2RlIGluZGV4IHRvIGJlIHNldCB3aGVuIG5hdiBpcyB0b2dnbGVkIHRvIHByb2dyZXNzIG1lbnUgc3R5bGUgKi9cclxuICBwdWJsaWMgdG9nZ2xlUHJvZ3Jlc3NOYXZDaGlsZEluZGV4OiBudW1iZXI7XHJcblxyXG4gIC8qKiB0aGUgbW9iaWxlIHF1ZXJ5IGxpc3RlbmVyMiAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX21vYmlsZVF1ZXJ5TGlzdGVuZXI6ICgpID0+IHZvaWQ7XHJcblxyXG4gIC8qKiBUaGUgbmF2IGJpbmQgc3Vic2NyaXB0aW9uICovXHJcbiAgcHJpdmF0ZSBuYXZCaW5kU3ViOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gIC8qKiBUaGUgbWVzc2FnZSB0byBkaXNwbGF5ICovXHJcbiAgcHVibGljIG1lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgLyoqIFdoZXRoZXIgd2Ugc2hvdWxkIHRoZSBtZXNzYWdlICovXHJcbiAgcHVibGljIHNob3dNZXNzYWdlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBXaGV0aGVyIHNob3VsZCBzaG93IGNoZWNrIG1hcmsgb3Igbm90ICovXHJcbiAgcHVibGljIHNob3dDaGVja01hcms6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKiogVGhlIG5hdiBiaW5kIHN1YnNjcmlwdGlvbiAqL1xyXG4gIHByaXZhdGUgbG9nSW5TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgLyoqIFRoZSBjb3VudCBvZiBmb290ZXIgaXRlbXMqL1xyXG4gIHB1YmxpYyBmb290ZXJJdGVtQ291bnQ6IG51bWJlcjtcclxuXHJcbiAgLyoqIFRoZSBiYW5uZXIgc3Vic2NyaXB0aW9uICovXHJcbiAgcHJpdmF0ZSBiYW5uZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgLyoqIFRoZSBjb25maWcgc3Vic2NyaXB0aW9uICovXHJcbiAgcHVibGljIGNvbmZpZ1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuICAvKiogVGhlIHNpZGVuYXYgc3Vic2NyaXB0aW9uICovXHJcbiAgcHJpdmF0ZSBzaWRlTmF2U3ViOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIHRoZSBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBjaGFuZ2VEZXRlY3RvclJlZiB0aGUgY2hhbmdlIGRldGVjdG9yIHJlZmVyZW5jZVxyXG4gICAqIEBwYXJhbSBtZWRpYSB0aGUgbWVkaWEgbWF0Y2hlclxyXG4gICAqIEBwYXJhbSByb3V0ZXIgVGhlIHJvdXRlclxyXG4gICAqIEBwYXJhbSBiYW5uZXJTZXJ2aWNlIFRoZSBCYW5uZXIgU2VydmljZVxyXG4gICAqIEBwYXJhbSBhY3RpdmF0ZWRSb3V0ZSBUaGUgYWN0aXZhdGVkIHJvdXRlXHJcbiAgICogQHBhcmFtIGNvbmZpZ1NlcnZpY2UgVGhlIGNvbmZpZyBzZXJ2aWNlXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICByZWFkb25seSBtZWRpYTogTWVkaWFNYXRjaGVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYmFubmVyU2VydmljZTogQmFubmVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBCYXNlQ29uZmlnU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5tb2JpbGVRdWVyeSA9IG1lZGlhLm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDk1OXB4KScpO1xyXG4gICAgdGhpcy5fbW9iaWxlUXVlcnlMaXN0ZW5lciA9ICgpID0+IHtcclxuICAgICAgY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAvLyBjbG9zZSB0aGUgc2lkZW5hdiB3aGVuIHNjcmVlbiBzaXplIGlzIGNoYW5nZWRcclxuICAgICAgaWYgKCF0aGlzLm1vYmlsZVF1ZXJ5Lm1hdGNoZXMgJiYgdGhpcy5zZXR0aW5ncy5tZW51U3R5bGUgPT09ICdwcm9ncmVzcycpIHtcclxuICAgICAgICB0aGlzLnNpZGVuYXYuY2xvc2UoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8vIGJlbG93IGlmIHN0YXRlbWVudCBpcyBmb3IgZWRnZSBzdXBwb3J0IHNpbmNlIGFkZEV2ZW50TGlzdGVuZXIgZG9lc24ndCBleGlzdCBmb3IgTWVkaWFRdWVyeUxpc3RzXHJcbiAgICBpZiAodGhpcy5tb2JpbGVRdWVyeS5hZGRFdmVudExpc3RlbmVyKSB7XHJcbiAgICAgIHRoaXMubW9iaWxlUXVlcnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fbW9iaWxlUXVlcnlMaXN0ZW5lcik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5tb2JpbGVRdWVyeS5hZGRMaXN0ZW5lcih0aGlzLl9tb2JpbGVRdWVyeUxpc3RlbmVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBPbiBJbml0IC0gY29uZmlndXJlIHRoZSBzZXR0aW5ncyAqL1xyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmJhbm5lclN1YnNjcmlwdGlvbi5hZGQodGhpcy5iYW5uZXJTZXJ2aWNlLnNob3dCYW5uZXIkLnN1YnNjcmliZSh2YWwgPT4gdGhpcy5zaG93TWVzc2FnZSA9IHZhbCkpO1xyXG4gICAgdGhpcy5iYW5uZXJTdWJzY3JpcHRpb24uYWRkKHRoaXMuYmFubmVyU2VydmljZS5tZXNzYWdlJC5zdWJzY3JpYmUodmFsID0+IHRoaXMubWVzc2FnZSA9IHZhbCkpO1xyXG4gICAgdGhpcy5iYW5uZXJTdWJzY3JpcHRpb24uYWRkKHRoaXMuYmFubmVyU2VydmljZS5zaG93Q2hlY2tNYXJrJC5zdWJzY3JpYmUodmFsID0+IHRoaXMuc2hvd0NoZWNrTWFyayA9IHZhbCkpO1xyXG5cclxuICAgIHRoaXMuZm9vdGVyTmF2aWdhdGlvbkRhdGEgPSB0aGlzLm5hdmlnYXRpb25EYXRhPy5maWx0ZXIobm9kZSA9PiBub2RlPy5hbHRMb2NhdGlvbiA9PSB0cnVlKTtcclxuICAgIHRoaXMuZm9vdGVySXRlbUNvdW50ID0gdGhpcy5mb290ZXJOYXZpZ2F0aW9uRGF0YSA/IHRoaXMuZm9vdGVyTmF2aWdhdGlvbkRhdGEubGVuZ3RoIDogMDtcclxuICAgIHRoaXMubmF2aWdhdGlvbkRhdGEgPSB0aGlzLm5hdmlnYXRpb25EYXRhPy5maWx0ZXIobm9kZSA9PiBub2RlPy5hbHRMb2NhdGlvbiAhPSB0cnVlKTtcclxuXHJcbiAgICAvLyBpZiBwYXJlbnRzIGhhdmUgbm8gcm91dGUsIGdyYWIgZmlyc3Qgcm91dGUgb2YgY2hpbGRcclxuICAgIHRoaXMubmF2aWdhdGlvbkRhdGE/LmZvckVhY2gobiA9PiB7XHJcbiAgICAgIGlmICghbi5yb3V0ZSkge1xyXG4gICAgICAgIG4ucm91dGUgPSBuLnN1Yk5vZGVzICYmIG4uc3ViTm9kZXMubGVuZ3RoID4gMCA/IG4uc3ViTm9kZXNbMF0ucm91dGUgOiB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZW5hYmxlIGFsbCBwYWdlcyBieSBkZWZhdWx0XHJcbiAgICAgIGlmIChuLmlzRGlzYWJsZWQgPT0gbnVsbCkge1xyXG4gICAgICAgIG4uaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmluaXRCYXNpY1NldHRpbmdzKCk7XHJcbiAgICB0aGlzLmluaXRBZHZhbmNlZFNldHRpbmdzKCk7XHJcbiAgICB0aGlzLmluaXRUaGVtZVNldHRpbmdzKCk7XHJcblxyXG4gICAgLy8gaW5pdCBiaW5kaW5nIGZvciBwcm9ncmVzcyBuYXZcclxuICAgIGlmICh0aGlzLnNldHRpbmdzLm1lbnVTdHlsZSA9PT0gJ3Byb2dyZXNzJykge1xyXG4gICAgICAvLyBzZXQgdGhlIGZpcnN0IG5vZGUgYW5kIGNoaWxkIG5vZGUgYXMgdmlzaXRlZFxyXG4gICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uRGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRGF0YVswXS52aXNpdGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm5hdmlnYXRlKHRoaXMubmF2aWdhdGlvbkRhdGFbMF0ucm91dGUpO1xyXG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb25EYXRhWzBdLnN1Yk5vZGVzICYmIHRoaXMubmF2aWdhdGlvbkRhdGFbMF0uc3ViTm9kZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRGF0YVswXS5zdWJOb2Rlc1swXS52aXNpdGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubmF2aWdhdGUodGhpcy5uYXZpZ2F0aW9uRGF0YVswXS5zdWJOb2Rlc1swXS5yb3V0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzZXQgaW5pdGlhbCBwcm9ncmVzcyBiYXJcclxuICAgICAgdGhpcy5uYXZQcm9ncmVzc0NvdW50ID0gKHRoaXMuc2VsZWN0ZWRQYXJlbnRJbmRleCArIDEpIC8gdGhpcy5uYXZpZ2F0aW9uRGF0YS5sZW5ndGggKiAxMDA7XHJcblxyXG5cclxuICAgICAgdGhpcy5uYXZCaW5kU3ViLmFkZChcclxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGZpbmQgcGFyZW50IGluZGV4IHdpdGggYWN0aXZlIGNoaWxkXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QWN0aXZlUGFyZW50QW5kQ2hpbGQoZXZlbnQudXJsKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLnNldHRpbmdzLmFsbG93TmF2VG9nZ2xlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvZ0luU3Vic2NyaXB0aW9uID0gdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5pc0xvZ2dlZEluJC5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnVzZXJOYW1lID0gdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS51c2VyTmFtZSgpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UpIHtcclxuICAgICAgdGhpcy5jb25maWdTdWJzY3JpcHRpb24gPSB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnJC5zdWJzY3JpYmUoY29uZmlnID0+IHtcclxuICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZz8ubmF2aWdhdGlvbj8ubm9kZXMpIHtcclxuICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkRhdGEgPSBjb25maWc/Lm5hdmlnYXRpb24/Lm5vZGVzO1xyXG4gICAgICAgICAgaWYgKGNvbmZpZz8ubmF2aWdhdGlvbj8uc2V0dGluZ3M/LnJlc2V0TmF2KSB7XHJcbiAgICAgICAgICAgIHRoaXMubmF2UHJvZ3Jlc3NDb3VudCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRJbmRleCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGUodGhpcy5uYXZpZ2F0aW9uRGF0YVswXS5yb3V0ZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0ZXBwZXIpIHtcclxuICAgICAgICAgICAgICB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBwZXIucmVzZXQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5uZXJTdGVwcGVycz8uZm9yRWFjaChzdGVwcGVyID0+IHtcclxuICAgICAgICAgICAgICAgICAgc3RlcHBlci5zZWxlY3RlZEluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgc3RlcHBlci5yZXNldCgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRGF0YS5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgICAgICAgIG4udmlzaXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIG4uY29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBuLnN1Yk5vZGVzPy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcy52aXNpdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBzLmNvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIHJlc2V0IGJhY2sgdG8gZmFsc2UgdG8gYXZvaWQgbXVsdGlwbGUgdHJpZ2dlcnMgb24gZnV0dXJlIGNhbGxzXHJcbiAgICAgICAgICAgIGNvbmZpZy5uYXZpZ2F0aW9uLnNldHRpbmdzLnJlc2V0TmF2ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWcgPSBjb25maWc7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gaWYgdGhlIHZhbHVlcyB3ZXJlIGNoYW5nZWQgYW5kIG5vdCBudWxsLCBpdCBtZWFucyB0aGF0IHRoZSBuYXYgd2FzIHRvZ2dsZWQgdG8gcHJvZ3Jlc3NcclxuICAgICAgICAgIGlmIChjb25maWc/Lm5hdmlnYXRpb24/LnNldHRpbmdzPy50b2dnbGVQcm9ncmVzc05hdlBhcmVudEluZGV4ICE9IG51bGxcclxuICAgICAgICAgICAgJiYgdGhpcy50b2dnbGVQcm9ncmVzc05hdlBhcmVudEluZGV4ICE9IGNvbmZpZz8ubmF2aWdhdGlvbj8uc2V0dGluZ3M/LnRvZ2dsZVByb2dyZXNzTmF2UGFyZW50SW5kZXhcclxuICAgICAgICAgICAgJiYgdGhpcy50b2dnbGVQcm9ncmVzc05hdkNoaWxkSW5kZXggIT0gY29uZmlnPy5uYXZpZ2F0aW9uPy5zZXR0aW5ncz8udG9nZ2xlUHJvZ3Jlc3NOYXZDaGlsZEluZGV4XHJcbiAgICAgICAgICAgICYmIGNvbmZpZz8ubmF2aWdhdGlvbj8uc2V0dGluZ3M/LnRvZ2dsZVByb2dyZXNzTmF2Q2hpbGRJbmRleCAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVByb2dyZXNzTmF2UGFyZW50SW5kZXggPSBjb25maWcubmF2aWdhdGlvbi5zZXR0aW5ncy50b2dnbGVQcm9ncmVzc05hdlBhcmVudEluZGV4O1xyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVByb2dyZXNzTmF2Q2hpbGRJbmRleCA9IGNvbmZpZy5uYXZpZ2F0aW9uLnNldHRpbmdzLnRvZ2dsZVByb2dyZXNzTmF2Q2hpbGRJbmRleDtcclxuXHJcbiAgICAgICAgICAgIC8vIGFkZCB0aGUgcm91dGVyIHN1YlxyXG4gICAgICAgICAgICB0aGlzLm5hdkJpbmRTdWIuYWRkKFxyXG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgLy8gZmluZCBwYXJlbnQgaW5kZXggd2l0aCBhY3RpdmUgY2hpbGRcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBY3RpdmVQYXJlbnRBbmRDaGlsZChldmVudC51cmwpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgLy8gaWYgdGhlIGNoaWxkIG5vZGUgaW5kZXggaXMgdmFsaWRcclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5uYXZpZ2F0aW9uLm5vZGVzW3RoaXMudG9nZ2xlUHJvZ3Jlc3NOYXZQYXJlbnRJbmRleF0uc3ViTm9kZXM/Lmxlbmd0aCA+IHRoaXMudG9nZ2xlUHJvZ3Jlc3NOYXZDaGlsZEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXROb2RlU3RhdGVzKGNvbmZpZy5uYXZpZ2F0aW9uLm5vZGVzW3RoaXMudG9nZ2xlUHJvZ3Jlc3NOYXZQYXJlbnRJbmRleF0sXHJcbiAgICAgICAgICAgICAgICBjb25maWcubmF2aWdhdGlvbi5ub2Rlc1t0aGlzLnRvZ2dsZVByb2dyZXNzTmF2UGFyZW50SW5kZXhdLnN1Yk5vZGVzW3RoaXMudG9nZ2xlUHJvZ3Jlc3NOYXZDaGlsZEluZGV4XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXROb2RlU3RhdGVzKGNvbmZpZy5uYXZpZ2F0aW9uLm5vZGVzW3RoaXMudG9nZ2xlUHJvZ3Jlc3NOYXZQYXJlbnRJbmRleF0sIG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBpbmRleGVzXHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUHJvZ3Jlc3NOYXZQYXJlbnRJbmRleCA9IGNvbmZpZz8ubmF2aWdhdGlvbj8uc2V0dGluZ3M/LnRvZ2dsZVByb2dyZXNzTmF2UGFyZW50SW5kZXhcclxuICAgICAgICAgICAgdGhpcy50b2dnbGVQcm9ncmVzc05hdkNoaWxkSW5kZXggPSBjb25maWc/Lm5hdmlnYXRpb24/LnNldHRpbmdzPy50b2dnbGVQcm9ncmVzc05hdkNoaWxkSW5kZXg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBMaWZlIGN5Y2xlIGhvb2sgZm9yIGFmdGVyIGNvbXBvbmVudCB2aWV3IGluaXRpYWxpemF0aW9uICovXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNldHRpbmdzLm1lbnVTdHlsZSA9PT0gJ3N0ZXBwZXInKSB7XHJcbiAgICAgIHRoaXMuYmluZFN0ZXBwZXJUb1JvdXRlcygpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnN0ZXBwZXIuc3RlcHMuZm9yRWFjaCgoc3RlcCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIHN0ZXAuc2VsZWN0ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50SW5kZXggPSBpbmRleDtcclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZSh0aGlzLm5hdmlnYXRpb25EYXRhW2luZGV4XS5yb3V0ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5pbm5lclN0ZXBwZXJzLmZvckVhY2goKHN0ZXBwZXIsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICBzdGVwcGVyLnN0ZXBzLmZvckVhY2goKHN0ZXAsIGppbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBzdGVwLnNlbGVjdCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpbGRJbmRleGVzW2luZGV4XSA9IGppbmRleDtcclxuICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlKHRoaXMubmF2aWdhdGlvbkRhdGFbaW5kZXhdLnN1Yk5vZGVzW2ppbmRleF0ucm91dGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNpZGVOYXZTdWIgPSB0aGlzLnNpZGVuYXYub3BlbmVkQ2hhbmdlLnN1YnNjcmliZShkcmF3ZXJTdGF0ZSA9PiB7XHJcbiAgICAgIHRoaXMuaXNOYXZPcGVuID0gZHJhd2VyU3RhdGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBPbiBEZXN0cm95ICovXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2JpbGVRdWVyeS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9tb2JpbGVRdWVyeUxpc3RlbmVyKTtcclxuICAgIHRoaXMubmF2QmluZFN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5sb2dJblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5iYW5uZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuY29uZmlnU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnNpZGVOYXZTdWIudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vYmlsZSBTdWJOYXYgLSBvcGVuIHRoZSBTdWJOYXZcclxuICAgKiBAcGFyYW0gbmF2IHRoZSBuYXYgZGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIFN1Yk5hdlxyXG4gICAqL1xyXG4gIHB1YmxpYyBvcGVuTW9iaWxlU3ViTmF2KG5hdjogTmF2Tm9kZSk6IHZvaWQge1xyXG4gICAgdGhpcy5pc01vYmlsZVN1Yk5hdk9wZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5jdXJyZW50TW9iaWxlTmF2ID0gbmF2O1xyXG4gICAgdGhpcy5zaWRlbmF2Lm9wZW4oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vYmlsZSBTdWJOYXYgLSBjbG9zZXMgdGhlIFN1Yk5hdlxyXG4gICAqL1xyXG4gIHB1YmxpYyBjbG9zZU1vYmlsZVN1Yk5hdigpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNNb2JpbGVTdWJOYXZPcGVuID0gZmFsc2U7XHJcbiAgICB0aGlzLnNpZGVuYXYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHRoZW1lIGNvbG9yXHJcbiAgICogQHBhcmFtIHZhcmlhYmxlIHRoZSBjc3MgdmFyaWFibGUgbmFtZVxyXG4gICAqIEBwYXJhbSBjb2xvciB0aGUgY29sb3JcclxuICAgKi9cclxuICBwdWJsaWMgc2V0VGhlbWVDb2xvcih2YXJpYWJsZTogc3RyaW5nLCBjb2xvcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoYC0tc29mLW5hdi0ke3ZhcmlhYmxlfWAsIGNvbG9yKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgdGhlIHN0ZXAgc3RhdGVcclxuICAgKiBAcGFyYW0gcGFyZW50SW5kZXggVGhlIHBhcmVudCBpbmRleFxyXG4gICAqIEBwYXJhbSBjaGlsZEluZGV4IFRoZSBjaGlsZCBpbmRleFxyXG4gICAqIEByZXR1cm5zIFRoZSBzdGVwIHN0YXRlXHJcbiAgICovXHJcbiAgcHVibGljIGRldGVybWluZVN0ZXBTdGF0ZShwYXJlbnRJbmRleDogbnVtYmVyLCBjaGlsZEluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgLy8gbm90IHBhc3NlZCAmJiBub3QgYWN0aXZlXHJcbiAgICBpZiAoY2hpbGRJbmRleCA9PT0gLTEpIHtcclxuICAgICAgaWYgKCF0aGlzLnN0ZXBwZXIpIHtcclxuICAgICAgICByZXR1cm4gJ251bWJlcic7XHJcbiAgICAgIH1cclxuICAgICAgLy8gbm90IHBhc3NlZCAmJiBhY3RpdmVcclxuICAgICAgaWYgKHBhcmVudEluZGV4ID09PSB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCkge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkRhdGFbcGFyZW50SW5kZXhdLnZpc2l0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gJ2FjdGl2ZSc7XHJcbiAgICAgIH1cclxuICAgICAgLy8gcGFzc2VkIGJ1dCBuYXYgYmFja1xyXG4gICAgICBlbHNlIGlmIChwYXJlbnRJbmRleCA+IHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4ICYmIHRoaXMubmF2aWdhdGlvbkRhdGFbcGFyZW50SW5kZXhdLnZpc2l0ZWQpIHtcclxuICAgICAgICB0aGlzLnN0ZXBwZXIuc3RlcHMuZmluZCgocywgaW5kZXgpID0+IGluZGV4ID09PSBwYXJlbnRJbmRleClcclxuICAgICAgICAgIC5yZXNldCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gJ2FjdGl2ZSc7XHJcbiAgICAgIH1cclxuICAgICAgLy8gcGFzc2VkICYmIG5vdCBhY3RpdmVcclxuICAgICAgZWxzZSBpZiAocGFyZW50SW5kZXggPCB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCkge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkRhdGFbcGFyZW50SW5kZXhdLnZpc2l0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gJ2RvbmUnO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAnbnVtYmVyJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5pbm5lclN0ZXBwZXJzKSB7XHJcbiAgICAgICAgcmV0dXJuICdub25lJztcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbm5lclN0ZXBwZXIgPSB0aGlzLmlubmVyU3RlcHBlcnMuZmluZCgocywgaW5kZXgpID0+IGluZGV4ID09PSBwYXJlbnRJbmRleCk7XHJcbiAgICAgIGlmIChjaGlsZEluZGV4ID09PSBpbm5lclN0ZXBwZXIuc2VsZWN0ZWRJbmRleCkge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkRhdGFbcGFyZW50SW5kZXhdLnN1Yk5vZGVzW2NoaWxkSW5kZXhdLnZpc2l0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gJ2FjdGl2ZSc7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoY2hpbGRJbmRleCA+IGlubmVyU3RlcHBlci5zZWxlY3RlZEluZGV4ICYmIHRoaXMubmF2aWdhdGlvbkRhdGFbcGFyZW50SW5kZXhdLnN1Yk5vZGVzW2NoaWxkSW5kZXhdLnZpc2l0ZWQpIHtcclxuICAgICAgICBpbm5lclN0ZXBwZXIuc3RlcHMuZmluZCgocywgaW5kZXgpID0+IGluZGV4ID09PSBjaGlsZEluZGV4KVxyXG4gICAgICAgICAgLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiAnYWN0aXZlJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChjaGlsZEluZGV4IDwgaW5uZXJTdGVwcGVyLnNlbGVjdGVkSW5kZXgpIHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRpb25EYXRhW3BhcmVudEluZGV4XS5zdWJOb2Rlc1tjaGlsZEluZGV4XS52aXNpdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuICdkb25lJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gJ25vbmUnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHByb3ZpZGVkIHJvdXRlXHJcbiAgICogQHBhcmFtIHJvdXRlIFRoZSByb3V0ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBuYXZpZ2F0ZShyb3V0ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWZsb2F0aW5nLXByb21pc2VzXHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJvdXRlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5hdmlnYXRlcyB0byBnaXZlbiBzdGVwXHJcbiAgICogQHBhcmFtIHN0ZXBOdW1iZXIgVGhlIHN0ZXAgbnVtYmVyIHRvIG5hdmlnYXRlIHRvXHJcbiAgICovXHJcbiAgcHVibGljIG5hdmlnYXRlVG9TdGVwKHN0ZXBOdW1iZXI6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHN0ZXBOdW1iZXIgPCB0aGlzLnNlbGVjdGVkUGFyZW50SW5kZXgpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1mbG9hdGluZy1wcm9taXNlc1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMubmF2aWdhdGlvbkRhdGFbc3RlcE51bWJlcl0ucm91dGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgYWN0aXZlIHBhcmVudCBhbmQgY2hpbGQgbm9kZXMgXHJcbiAgICogQHBhcmFtIHVybCBUaGUgcm91dGVyIHVybFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRBY3RpdmVQYXJlbnRBbmRDaGlsZCh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGNoaWxkSW5kZXg7XHJcbiAgICBsZXQgcGFyZW50SW5kZXggPSB0aGlzLm5hdmlnYXRpb25EYXRhLmZpbmRJbmRleChuID0+IHtcclxuICAgICAgY2hpbGRJbmRleCA9IG4uc3ViTm9kZXM/LmZpbmRJbmRleChzID0+IHVybC5pbmNsdWRlcyhzLnJvdXRlLnJlcGxhY2UoJy4nLCAnJykpKTtcclxuICAgICAgcmV0dXJuIGNoaWxkSW5kZXggPiAtMSB8fCB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMobi5yb3V0ZS5yZXBsYWNlKCcuJywgJycpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChwYXJlbnRJbmRleCA9PSAtMSkge1xyXG4gICAgICBwYXJlbnRJbmRleCA9IDBcclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXQgdGhlIGFjdGl2ZSBwYXJlbnQgbm9kZSBhbmQgc3ViIG5vZGVcclxuICAgIHRoaXMuYWN0aXZlUGFyZW50Tm9kZSA9IHRoaXMubmF2aWdhdGlvbkRhdGFbcGFyZW50SW5kZXhdO1xyXG4gICAgdGhpcy5hY3RpdmVTdWJOb2RlID0gY2hpbGRJbmRleCA+IC0xICYmIHRoaXMuYWN0aXZlUGFyZW50Tm9kZS5zdWJOb2Rlcy5sZW5ndGggPiAwID8gdGhpcy5hY3RpdmVQYXJlbnROb2RlLnN1Yk5vZGVzW2NoaWxkSW5kZXhdIDogbnVsbDtcclxuXHJcbiAgICAvLyBjb21wdXRlIHRoZSBwcm9ncmVzcyBiYXJcclxuICAgIHRoaXMubmF2UHJvZ3Jlc3NDb3VudCA9IChwYXJlbnRJbmRleCArIDEpIC8gdGhpcy5uYXZpZ2F0aW9uRGF0YS5sZW5ndGggKiAxMDA7XHJcblxyXG4gICAgLy8gc2V0IHRoZSBub2RlIHN0YXRlc1xyXG4gICAgdGhpcy5zZXROb2RlU3RhdGVzKHRoaXMuYWN0aXZlUGFyZW50Tm9kZSwgdGhpcy5hY3RpdmVTdWJOb2RlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGNvbXBsZXRlIGFuZCB2aXNpdGVkIHN0YXRlcyBmb3IgYWxsIE5hdk5vZGVzIFxyXG4gICAqIEBwYXJhbSBwYXJlbnROb2RlIFRoZSBwYXJlbnQgbm9kZVxyXG4gICAqIEBwYXJhbSBjaGlsZE5vZGUgVGhlIGNoaWxkIG5vZGVcclxuICAgKi9cclxuICBwdWJsaWMgc2V0Tm9kZVN0YXRlcyhwYXJlbnROb2RlOiBOYXZOb2RlLCBjaGlsZE5vZGU6IFN1Yk5hdk5vZGVzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hpbGROb2RlKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlU3ViTm9kZSA9IGNoaWxkTm9kZTtcclxuICAgICAgbGV0IGNoaWxkSW5kZXggPSBwYXJlbnROb2RlLnN1Yk5vZGVzLmluZGV4T2YoY2hpbGROb2RlKSA+IC0xID8gcGFyZW50Tm9kZS5zdWJOb2Rlcy5pbmRleE9mKGNoaWxkTm9kZSkgOiAwO1xyXG4gICAgICAvLyBhbGwgc3Vibm9kZXMgYmVmb3JlIHRoaXMgd2VyZSBjb21wbGV0ZWQgYW5kIHZpc2l0ZWRcclxuICAgICAgcGFyZW50Tm9kZS5zdWJOb2Rlcy5zbGljZSgwLCBjaGlsZEluZGV4KS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIGVsZW1lbnQuY29tcGxldGUgPSB0cnVlO1xyXG4gICAgICAgIGVsZW1lbnQudmlzaXRlZCA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hY3RpdmVQYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcclxuICAgIC8vIHNldCBhbGwgcHJldmlvdXMgbm9kZXMgdG8gY29tcGxldGVcclxuICAgIGxldCBwYXJlbnRJbmRleCA9IHRoaXMubmF2aWdhdGlvbkRhdGEuaW5kZXhPZihwYXJlbnROb2RlKSA+IC0xID8gdGhpcy5uYXZpZ2F0aW9uRGF0YS5pbmRleE9mKHBhcmVudE5vZGUpIDogMDtcclxuICAgIHRoaXMubmF2aWdhdGlvbkRhdGEuc2xpY2UoMCwgcGFyZW50SW5kZXgpLmZvckVhY2goZCA9PiB7XHJcbiAgICAgIGQuY29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgLy8gc2V0IGFsbCBzdWJub2RlcyBvZiBwcmV2aW91cyBub2RlcyB0byBjb21wbGV0ZSBvbmx5IGlmIHRoZSBub2RlIHdhcyBub3QgZGlzYWJsZWRcclxuICAgICAgaWYgKCFkLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICBkLnN1Yk5vZGVzLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICBzLmNvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgIHMudmlzaXRlZCA9IHRydWU7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIC8vIHNldCB0aGUgY3VycmVudCBub2RlcyBhcyB2aXNpdGVkXHJcbiAgICBwYXJlbnROb2RlLnZpc2l0ZWQgPSB0cnVlO1xyXG4gICAgaWYgKGNoaWxkTm9kZSkge1xyXG4gICAgICBjaGlsZE5vZGUudmlzaXRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZXMgdGhlIGV4cGFuc2lvbiBwYW5lbCBhbmQgbmF2aWdhdGVzIHRvIHRoZSBnaXZlbiBub2RlXHJcbiAgICogQHBhcmFtIGVsIFRoZSBtYXQgZXhwYW5zaW9uIHBhbmVsIFxyXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgcGFyZW50IG5vZGUgaW5kZXggXHJcbiAgICovXHJcbiAgcHVibGljIGRpc2FibGVQYW5lbChlbCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgZWwuY2xvc2UoKTtcclxuICAgIHRoaXMubmF2aWdhdGUodGhpcy5uYXZpZ2F0aW9uRGF0YVtpbmRleF0ucm91dGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBIaWRlcyB0aGUgbWVzc2FnZVxyXG4gICovXHJcbiAgcHVibGljIGhpZGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dNZXNzYWdlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2dzIG91dCBvbmNlIHVzZXIgaXMgYXV0aG9yaXplZFxyXG4gICAqICovXHJcbiAgcHVibGljIGxvZ091dCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuYXV0aG9yaXplVXNlcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2VzIG1vYmlsZSBuYXZpZ2F0aW9uIGFmdGVyIHNlbGVjdGlvbi5cclxuICAgKi9cclxuICBwdWJsaWMgY2xvc2VOYXZpZ2F0aW9uRm9yTW9iaWxlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubW9iaWxlUXVlcnkubWF0Y2hlcykge1xyXG4gICAgICB0aGlzLnNpZGVuYXYuY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElzIHRoZSBuYXZpZ2F0aW9uIHNlbGVjdGVkXHJcbiAgICovXHJcbiAgcHVibGljIGlzTmF2U2VsZWN0ZWQobm9kZTogTmF2Tm9kZSB8IFN1Yk5hdk5vZGVzKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIuaXNBY3RpdmUobm9kZS5yb3V0ZSwge3BhdGhzOiAnZXhhY3QnLCBxdWVyeVBhcmFtczogJ2V4YWN0JywgZnJhZ21lbnQ6ICdpZ25vcmVkJywgbWF0cml4UGFyYW1zOiAnaWdub3JlZCd9KTtcclxuICB9XHJcblxyXG4gIC8qKiBTZXRzIHRoZSB3aWR0aCBmb3IgdGhlIHNpZGUgbmF2ICovXHJcbiAgcHVibGljIHNldE5hdldpZHRoKHdpZHRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHdpZHRoLmluY2x1ZGVzKCclJykgfHwgd2lkdGguaW5jbHVkZXMoJ3B4JykgPyB3aWR0aCA6IHdpZHRoICsgJ3B4JztcclxuICB9XHJcblxyXG4gIC8qKiBCaW5kcyB0aGUgc3RlcHBlciB0byB0aGUgcm91dGVyICovXHJcbiAgcHJpdmF0ZSBiaW5kU3RlcHBlclRvUm91dGVzKCk6IHZvaWQge1xyXG4gICAgLy8gZmluZCBwYXJlbnRzXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gZmluZCBwYXJlbnQgaW5kZXggd2l0aCBhY3RpdmUgY2hpbGRcclxuICAgICAgbGV0IGNoaWxkSW5kZXg7XHJcbiAgICAgIGxldCBwYXJlbnRJbmRleCA9IHRoaXMubmF2aWdhdGlvbkRhdGEuZmluZEluZGV4KG4gPT4ge1xyXG4gICAgICAgIGNoaWxkSW5kZXggPSBuLnN1Yk5vZGVzPy5maW5kSW5kZXgocyA9PiB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMocy5yb3V0ZS5yZXBsYWNlKCcuJywgJycpKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGlsZEluZGV4ID4gLTEgfHwgdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKG4ucm91dGUucmVwbGFjZSgnLicsICcnKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBpZiBubyBjaGlsZHJlbiBvciBubyBpbmRleGVzIGFjdGl2YXRlIGZpcnN0IHBhcmVudFxyXG4gICAgICBpZiAocGFyZW50SW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgcGFyZW50SW5kZXggPSAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkUGFyZW50SW5kZXggPSBwYXJlbnRJbmRleDtcclxuICAgICAgaWYgKGNoaWxkSW5kZXggPiAtMSkge1xyXG4gICAgICAgIHRoaXMuaW5uZXJTdGVwcGVycy5maW5kKChpcywgaW5kZXgpID0+IGluZGV4ID09PSBwYXJlbnRJbmRleCkuc2VsZWN0ZWRJbmRleCA9IGNoaWxkSW5kZXg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGZpbmQgcGFyZW50c1xyXG4gICAgdGhpcy5uYXZCaW5kU3ViLmFkZChcclxuICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IHtcclxuICAgICAgICAgIC8vIGZpbmQgcGFyZW50IGluZGV4IHdpdGggYWN0aXZlIGNoaWxkXHJcbiAgICAgICAgICBsZXQgY2hpbGRJbmRleDtcclxuICAgICAgICAgIGxldCBwYXJlbnRJbmRleCA9IHRoaXMubmF2aWdhdGlvbkRhdGEuZmluZEluZGV4KG4gPT4ge1xyXG4gICAgICAgICAgICBjaGlsZEluZGV4ID0gbi5zdWJOb2Rlcz8uZmluZEluZGV4KHMgPT4gZXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHMuaW5jbHVkZXMocy5yb3V0ZS5yZXBsYWNlKCcuJywgJycpKSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGRJbmRleCA+IC0xIHx8IGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzLmluY2x1ZGVzKG4ucm91dGUucmVwbGFjZSgnLicsICcnKSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vIGlmIG5vIGNoaWxkcmVuIG9yIG5vIGluZGV4ZXMgYWN0aXZhdGUgZmlyc3QgcGFyZW50XHJcbiAgICAgICAgICBpZiAocGFyZW50SW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHBhcmVudEluZGV4ID0gMDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50SW5kZXggPSBwYXJlbnRJbmRleDtcclxuICAgICAgICAgIGlmIChjaGlsZEluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5pbm5lclN0ZXBwZXJzLmZpbmQoKGlzLCBpbmRleCkgPT4gaW5kZXggPT09IHBhcmVudEluZGV4KS5zZWxlY3RlZEluZGV4ID0gY2hpbGRJbmRleDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKiBJbml0aWFsaXplcyB0aGUgYWR2YW5jZWQgbmF2IHNldHRpbmdzICovXHJcbiAgcHJpdmF0ZSBpbml0QWR2YW5jZWRTZXR0aW5ncygpOiB2b2lkIHtcclxuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5ncy50b3BHYXBEZXNrdG9wID0gdGhpcy5hZHZhbmNlZFNldHRpbmdzLnRvcEdhcERlc2t0b3AgfHwgMDtcclxuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5ncy50b3BHYXBNb2JpbGUgPSB0aGlzLmFkdmFuY2VkU2V0dGluZ3MudG9wR2FwTW9iaWxlIHx8IHRoaXMuc2V0dGluZ3MuaGVhZGVySGVpZ2h0O1xyXG4gICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzLm1hcmdpblRvcERlc2t0b3AgPSB0aGlzLmFkdmFuY2VkU2V0dGluZ3MubWFyZ2luVG9wRGVza3RvcCB8fCAwO1xyXG4gICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzLm1hcmdpblRvcE1vYmlsZSA9IHRoaXMuYWR2YW5jZWRTZXR0aW5ncy5tYXJnaW5Ub3BNb2JpbGUgfHwgMDtcclxuXHJcbiAgfVxyXG5cclxuICAvKiogSW5pdGlhbGl6ZXMgdGhlIG5hdiB0aGVtZSBzZXR0aW5ncyAqL1xyXG4gIHByaXZhdGUgaW5pdFRoZW1lU2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRoZW1lU2V0dGluZ3MuY29udGVudEJnQ29sb3IgPyB0aGlzLnNldFRoZW1lQ29sb3IoJ2NvbnRlbnQtYmctY29sb3InLCB0aGlzLnRoZW1lU2V0dGluZ3MuY29udGVudEJnQ29sb3IpIDogdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50aGVtZVNldHRpbmdzLmZvbnRDb2xvciA/IHRoaXMuc2V0VGhlbWVDb2xvcignZm9udC1jb2xvcicsIHRoaXMudGhlbWVTZXR0aW5ncy5mb250Q29sb3IpIDogdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50aGVtZVNldHRpbmdzLmZvbnRDb2xvciA9IHRoaXMudGhlbWVTZXR0aW5ncy5mb250Q29sb3IgfHwgJyMwMDAnO1xyXG4gICAgdGhpcy50aGVtZVNldHRpbmdzLm1vYmlsZUJnQ29sb3IgPSB0aGlzLnRoZW1lU2V0dGluZ3MubW9iaWxlQmdDb2xvciB8fCAnI2ZmZmZmZic7XHJcbiAgICB0aGlzLnRoZW1lU2V0dGluZ3MuYmdHcmFkaWVudENvbG9yMSA/IHRoaXMuc2V0VGhlbWVDb2xvcignYmctZ3JhZGllbnQtY29sb3ItMScsIHRoaXMudGhlbWVTZXR0aW5ncy5iZ0dyYWRpZW50Q29sb3IxKSA6IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudGhlbWVTZXR0aW5ncy5iZ0dyYWRpZW50Q29sb3IyID8gdGhpcy5zZXRUaGVtZUNvbG9yKCdiZy1ncmFkaWVudC1jb2xvci0yJywgdGhpcy50aGVtZVNldHRpbmdzLmJnR3JhZGllbnRDb2xvcjIpIDogdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50aGVtZVNldHRpbmdzLmJvcmRlclJpZ2h0Q29sb3IgPyB0aGlzLnNldFRoZW1lQ29sb3IoJ2JvcmRlci1yaWdodC1jb2xvcicsIHRoaXMudGhlbWVTZXR0aW5ncy5ib3JkZXJSaWdodENvbG9yKSA6IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudGhlbWVTZXR0aW5ncy5saXN0Qm9yZGVyQ29sb3IgPyB0aGlzLnNldFRoZW1lQ29sb3IoJ2xpc3QtYm9yZGVyLWNvbG9yJywgdGhpcy50aGVtZVNldHRpbmdzLmxpc3RCb3JkZXJDb2xvcikgOiB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRoZW1lU2V0dGluZ3MuaGlnaGxpZ2h0R3JhZGllbnQxID8gdGhpcy5zZXRUaGVtZUNvbG9yKCdoaWdobGlnaHQtZ3JhZGllbnQtMScsIHRoaXMudGhlbWVTZXR0aW5ncy5oaWdobGlnaHRHcmFkaWVudDEpIDogdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50aGVtZVNldHRpbmdzLmhpZ2hsaWdodEdyYWRpZW50MiA/IHRoaXMuc2V0VGhlbWVDb2xvcignaGlnaGxpZ2h0LWdyYWRpZW50LTInLCB0aGlzLnRoZW1lU2V0dGluZ3MuaGlnaGxpZ2h0R3JhZGllbnQyKSA6IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudGhlbWVTZXR0aW5ncy5zdWJIaWdobGlnaHRCb3JkZXJDb2xvciA/XHJcbiAgICAgIHRoaXMuc2V0VGhlbWVDb2xvcignc3ViLWhpZ2hsaWdodC1ib3JkZXItY29sb3InLCB0aGlzLnRoZW1lU2V0dGluZ3Muc3ViSGlnaGxpZ2h0Qm9yZGVyQ29sb3IpIDogdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50aGVtZVNldHRpbmdzLnN1YkhpZ2hsaWdodEJnQ29sb3IgP1xyXG4gICAgICB0aGlzLnNldFRoZW1lQ29sb3IoJ3N1Yi1oaWdobGlnaHQtYmctY29sb3InLCB0aGlzLnRoZW1lU2V0dGluZ3Muc3ViSGlnaGxpZ2h0QmdDb2xvcikgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKiogSW5pdGlhbGl6ZXMgdGhlIGJhc2ljIG5hdiBzZXR0aW5ncyAqL1xyXG4gIHByaXZhdGUgaW5pdEJhc2ljU2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldHRpbmdzLmZvbnRBd2Vzb21lTWVudUljb24gPSB0aGlzLnNldHRpbmdzLmZvbnRBd2Vzb21lTWVudUljb24gfHwgJ2ZhcyBmYS1hbmdsZS1kb3VibGUtbGVmdCc7XHJcbiAgICB0aGlzLnNldHRpbmdzLmZvbnRBd2Vzb21lTWVudUljb25DbG9zZWQgPSB0aGlzLnNldHRpbmdzLmZvbnRBd2Vzb21lTWVudUljb25DbG9zZWQgfHwgJ2ZhcyBmYS1hbmdsZS1kb3VibGUtcmlnaHQnO1xyXG4gICAgdGhpcy5zZXR0aW5ncy5hbGxvd05hdlRvZ2dsZSA9IHRoaXMuc2V0dGluZ3MuYWxsb3dOYXZUb2dnbGUgPT0gbnVsbCA/IHRydWUgOiB0aGlzLnNldHRpbmdzLmFsbG93TmF2VG9nZ2xlO1xyXG4gICAgdGhpcy5zZXR0aW5ncy5tYWluTWVudVRleHQgPyB0aGlzLm1haW5NZW51VGV4dCA9IHRoaXMuc2V0dGluZ3MubWFpbk1lbnVUZXh0IDogdGhpcy5tYWluTWVudVRleHQgPSAnTWFpbiBNZW51JztcclxuICAgIHRoaXMuc2V0dGluZ3MuaGVhZGVySGVpZ2h0ID0gdGhpcy5zZXR0aW5ncy5oZWFkZXJIZWlnaHQgfHwgNjA7XHJcbiAgICB0aGlzLnNldHRpbmdzLm1lbnVCdXR0b25TUlRleHQgPSB0aGlzLnNldHRpbmdzLm1lbnVCdXR0b25TUlRleHQgfHwgJ01lbnUgQnV0dG9uJztcclxuICAgIHRoaXMuc2V0dGluZ3MubWVudVN0eWxlID0gdGhpcy5zZXR0aW5ncy5tZW51U3R5bGUgfHwgJ3N0YXRpYyc7XHJcbiAgICB0aGlzLnNldHRpbmdzLmRpc3BsYXlOdW1iZXJzID0gdGhpcy5zZXR0aW5ncy5kaXNwbGF5TnVtYmVycyA9PSBudWxsID8gdHJ1ZSA6IHRoaXMuc2V0dGluZ3MuZGlzcGxheU51bWJlcnM7XHJcbiAgICB0aGlzLnNldHRpbmdzLnByb2dyZXNzU2VjdGlvbkNvbXBsZXRlSWNvbiA9IHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NTZWN0aW9uQ29tcGxldGVJY29uIHx8ICdmYXMgZmEtY2hlY2stY2lyY2xlJztcclxuICAgIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NTZWN0aW9uRnV0dXJlSWNvbiA9IHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NTZWN0aW9uRnV0dXJlSWNvbiB8fCAnZmFyIGZhLWNpcmNsZSc7XHJcbiAgICB0aGlzLnNldHRpbmdzLnByb2dyZXNzU2VjdGlvbkN1cnJlbnRJY29uID0gdGhpcy5zZXR0aW5ncy5wcm9ncmVzc1NlY3Rpb25DdXJyZW50SWNvbiB8fCAnZmFzIGZhLWNpcmNsZSc7XHJcbiAgICB0aGlzLnNldHRpbmdzLnByb2dyZXNzTWVudUNvbXBsZXRlSWNvbiA9IHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NNZW51Q29tcGxldGVJY29uIHx8ICdmYXIgZmEtY2hlY2snO1xyXG4gICAgdGhpcy5zZXR0aW5ncy5zaG93UHJvZ3Jlc3NCYXIgPSB0aGlzLnNldHRpbmdzLnNob3dQcm9ncmVzc0JhciA9PSBudWxsID8gdHJ1ZSA6IHRoaXMuc2V0dGluZ3Muc2hvd1Byb2dyZXNzQmFyXHJcbiAgICB0aGlzLnNldHRpbmdzLnNpZGVOYXZXaWR0aERlc2t0b3AgPSB0aGlzLnNldHRpbmdzLnNpZGVOYXZXaWR0aERlc2t0b3AgfHwgJzM1MCc7XHJcbiAgICB0aGlzLnNldHRpbmdzLnNpZGVOYXZXaWR0aE1vYmlsZSA9IHRoaXMuc2V0dGluZ3Muc2lkZU5hdldpZHRoTW9iaWxlIHx8ICczNTAnO1xyXG4gICAgdGhpcy5zZXR0aW5ncy5vdmVycmlkZU5hdmlnYXRpb24gPSB0aGlzLnNldHRpbmdzLm92ZXJyaWRlTmF2aWdhdGlvbiB8fCBmYWxzZTtcclxuICAgIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NNZW51V2lkdGggPSB0aGlzLnNldHRpbmdzLnByb2dyZXNzTWVudVdpZHRoIHx8ICcyODAnO1xyXG4gICAgdGhpcy5zZXR0aW5ncy51c2VDdXN0b21Nb2JpbGVGb290ZXIgPSB0aGlzLnNldHRpbmdzLnVzZUN1c3RvbU1vYmlsZUZvb3RlciAhPSBudWxsID8gdGhpcy5zZXR0aW5ncy51c2VDdXN0b21Nb2JpbGVGb290ZXIgOiBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInNvZi1hci1uYXYtY29udGFpbmVyXCJcclxuICAgICBbc3R5bGUudG9wXT1cIm1vYmlsZVF1ZXJ5Lm1hdGNoZXMgJiYgYWR2YW5jZWRTZXR0aW5ncy50b3BHYXBNb2JpbGUgPyBhZHZhbmNlZFNldHRpbmdzLnRvcEdhcE1vYmlsZSArICdweCcgOiBzZXR0aW5ncy5oZWFkZXJIZWlnaHQgKyAncHgnXCJcclxuICAgICBbY2xhc3Muc29mLWFyLW5hdi1tb2JpbGVdPVwibW9iaWxlUXVlcnkubWF0Y2hlc1wiPlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93TWVzc2FnZVwiIG0tYS0wIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgc3dzLWFsZXJ0LS1zZWNvbmRhcnkgcm9sZT1cImFsZXJ0XCI+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgIDxpICpuZ0lmPVwic2hvd0NoZWNrTWFya1wiIG0tci01IG0tbC01IGNsYXNzPVwiZmFzIGZhLWNoZWNrLWNpcmNsZSBpY29uLWNvbnRhaW5lclwiPjwvaT5cclxuICAgICAgPHAgY2xhc3M9XCJtZXNzYWdlLWNvbnRhaW5lclwiIG0tci01IG0tbC01IFtpbm5lckh0bWxdPVwibWVzc2FnZSB8IHRyYW5zbGF0ZVwiPjwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICA8YnV0dG9uIGlkPVwiYnRuQ2xvc2VcIiAoY2xpY2spPVwiaGlkZSgpXCIgbWF0LWljb24tYnV0dG9uIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2NvbW1vbi5jbG9zZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFsIGZhLXRpbWVzIGZhLWxnXCI+PC9pPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8YnV0dG9uIGlkPVwic29mLWFyLW5hdi1idG4tbWVudVwiIGFyaWEtbGFiZWw9XCJNZW51IEJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcclxuICAgICAgICAgIChjbGljayk9XCJzbmF2LnRvZ2dsZSgpXCIgY2xhc3M9XCJzb2YtYXItbmF2LW1lbnUtYnRuXCJcclxuICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIShtb2JpbGVRdWVyeS5tYXRjaGVzIHx8IHNldHRpbmdzLmFsbG93TmF2VG9nZ2xlKSB8fCBzZXR0aW5ncy5oaWRlTmF2aWdhdGlvblwiPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJpc05hdk9wZW47IGVsc2UgY2xvc2VkSWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwic29mLWFyLW5hdi1tZW51LWljb25cIj5cclxuICAgICAgPGkgY2xhc3M9XCJ7e3NldHRpbmdzLmZvbnRBd2Vzb21lTWVudUljb259fSBtZW51LWljb25cIj48L2k+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8bmctdGVtcGxhdGUgI2Nsb3NlZEljb24+XHJcbiAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwic29mLWFyLW5hdi1tZW51LWljb25cIj5cclxuICAgICAgICA8aSBjbGFzcz1cInt7c2V0dGluZ3MuZm9udEF3ZXNvbWVNZW51SWNvbkNsb3NlZH19IG1lbnUtaWNvblwiPjwvaT5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPnt7c2V0dGluZ3MubWVudUJ1dHRvblNSVGV4dCB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8bWF0LXNpZGVuYXYtY29udGFpbmVyIGF1dG9zaXplIGNsYXNzPVwic29mLWFyLW5hdi1zaWRlbmF2LWNvbnRhaW5lclwiIFtzdHlsZS5tYXJnaW5Ub3AucHhdPVwiXHJcbiAgICAgIG1vYmlsZVF1ZXJ5Lm1hdGNoZXMgPyBhZHZhbmNlZFNldHRpbmdzLm1hcmdpblRvcE1vYmlsZSA6IGFkdmFuY2VkU2V0dGluZ3MubWFyZ2luVG9wRGVza3RvcFwiPlxyXG4gICAgPG1hdC1zaWRlbmF2IFtkaXNhYmxlQ2xvc2VdPVwiIW1vYmlsZVF1ZXJ5Lm1hdGNoZXNcIiBjbGFzcz1cInNvZi1hci1uYXYtc2lkZW5hdlwiICNzbmF2IFttb2RlXT1cIm1vYmlsZVF1ZXJ5Lm1hdGNoZXMgPyAnb3ZlcicgOiAnc2lkZSdcIlxyXG4gICAgICAgICAgICAgICAgIFtmaXhlZEluVmlld3BvcnRdPVwibW9iaWxlUXVlcnkubWF0Y2hlc1wiIFtmaXhlZFRvcEdhcF09XCJtb2JpbGVRdWVyeS5tYXRjaGVzID8gYWR2YW5jZWRTZXR0aW5ncy50b3BHYXBNb2JpbGUgOiBhZHZhbmNlZFNldHRpbmdzLnRvcEdhcERlc2t0b3BcIlxyXG4gICAgICAgICAgICAgICAgIFtvcGVuZWRdPVwiIW1vYmlsZVF1ZXJ5Lm1hdGNoZXMgJiYgIXNldHRpbmdzLmhpZGVOYXZpZ2F0aW9uICYmIHNldHRpbmdzLm1lbnVTdHlsZSE9J3Byb2dyZXNzJyBcIlxyXG4gICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJtb2JpbGVRdWVyeS5tYXRjaGVzID8gc2V0TmF2V2lkdGgoc2V0dGluZ3Muc2lkZU5hdldpZHRoTW9iaWxlKSA6IHNldE5hdldpZHRoKHNldHRpbmdzLnNpZGVOYXZXaWR0aERlc2t0b3ApXCJcclxuICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7YmFja2dyb3VuZDptb2JpbGVRdWVyeS5tYXRjaGVzID8gdGhlbWVTZXR0aW5ncz8ubW9iaWxlQmdDb2xvciA6IHVuZGVmaW5lZH1cIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vYmlsZVF1ZXJ5Lm1hdGNoZXMgJiYgdXNlck5hbWUgJiYgIXNldHRpbmdzLmN1c3RvbVVzZXJOYW1lXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1c2VyLW5hbWVcIj5cclxuICAgICAgICAgIHt7dXNlck5hbWV9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2JpbGVRdWVyeS5tYXRjaGVzICYmIHNldHRpbmdzLmN1c3RvbVVzZXJOYW1lXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1c2VyLW5hbWVcIj5cclxuICAgICAgICAgIHt7c2V0dGluZ3MuY3VzdG9tVXNlck5hbWUgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS0gTmF2IEhlYWRlciBDb250ZW50IC0tPlxyXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc29mLWFyLW5hdi1oZWFkZXJdXCI+IDwvbmctY29udGVudD5cclxuXHJcbiAgICAgIDwhLS0gU3RhdGljIE5hdmlnYXRpb24gLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJuYXYtY29udGVudC1pdGVtIHNpZGVuYXYtYmFja2dyb3VuZFwiICpuZ0lmPVwic2V0dGluZ3MubWVudVN0eWxlID09PSAnc3RhdGljJ1wiIFtuZ1N0eWxlXT1cInsncGFkZGluZy1ib3R0b20ucHgnOiAoZm9vdGVySXRlbUNvdW50KjY0KSsxMjh9XCI+XHJcbiAgICAgICAgPG5hdiAqbmdJZj1cInNldHRpbmdzLm1lbnVTdHlsZSA9PT0gJ3N0YXRpYydcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidtYWluJ1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbmF2IG9mIG5hdmlnYXRpb25EYXRhXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJuYXY/LnN1Yk5vZGVzPy5sZW5ndGggJiYgIW5hdi5oaWRkZW5cIj5cclxuICAgICAgICAgICAgICA8bWF0LWFjY29yZGlvbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtleHBhbmRlZF09XCJuYXYuZXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIFtuZ0NsYXNzXT1cInsgJ3NvZi1hci1uYXYtc2VsZWN0ZWQnOiBpc05hdlNlbGVjdGVkKG5hdikgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTmF2aWdhdGlvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBJZiB0aGVyZSBpcyBhIHJvdXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hdj8ucm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1uYXYtbGlzdCBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCIgW2F0dHIucm9sZV09XCInbmF2aWdhdGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1pdGVtXCIgbWF0LWxpc3QtaXRlbSBbcm91dGVyTGlua109XCJuYXY/LnJvdXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCJbJ3NvZi1hci1uYXYtYWN0aXZlLXJvdXRlJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJuYXY/LmZvbnRBd2Vzb21lSWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImljb24tc3R5bGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwie3tuYXY/LmZvbnRBd2Vzb21lSWNvbn19XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic29mLWFyLW5hdi1oZWFkZXItdGV4dFwiPnt7bmF2LnRleHQgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW5hdi1saXN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIElmIHRoZXJlIGlzIG5vdCBhIHJvdXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFuYXY/LnJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbmF2LWxpc3QgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiIFthdHRyLnJvbGVdPVwiJ25hdmlnYXRpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInNvZi1hci1uYXYtYnRuLW5vZGVcIiBjbGFzcz1cIm5hdi1pdGVtXCIgbWF0LWxpc3QtaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiWydzb2YtYXItbmF2LWFjdGl2ZS1yb3V0ZSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibmF2Py5mb250QXdlc29tZUljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJpY29uLXN0eWxpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInt7bmF2Py5mb250QXdlc29tZUljb259fVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNvZi1hci1uYXYtaGVhZGVyLXRleHRcIj57e25hdi50ZXh0IHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW5hdi1saXN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gU3ViTmF2IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbmF2LWxpc3QgW25nQ2xhc3NdPVwieyAnc29mLWFyLW5hdi1zZWxlY3RlZCc6IGlzTmF2U2VsZWN0ZWQoc3VibmF2KSB9XCIgY2xhc3M9XCJzdWJuYXYtY29udGVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCIgKm5nRm9yPVwibGV0IHN1Ym5hdiBvZiBuYXY/LnN1Yk5vZGVzXCIgKGNsaWNrKT1cImNsb3NlTmF2aWdhdGlvbkZvck1vYmlsZSgpXCIgW2F0dHIucm9sZV09XCInbmF2aWdhdGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWl0ZW0gbmF2LWl0ZW0tbWFyZ2luXCIgbWF0LWxpc3QtaXRlbSBbcm91dGVyTGlua0FjdGl2ZV09XCJbJ3NvZi1hci1uYXYtc3ViLWFjdGl2ZS1yb3V0ZSddXCIgW3JvdXRlckxpbmtdPVwic3VibmF2LnJvdXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiJ25hdmlnYXRpb24nXCIgW2F0dHIuYXJpYS1sYWJlbF09XCIobmF2LnRleHQgfCB0cmFuc2xhdGUpICsgJyAnICsgKHN1Ym5hdi50ZXh0IHwgdHJhbnNsYXRlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNvZi1hci1uYXYtaGVhZGVyLXRleHRcIiBbYXR0ci5yb2xlXT1cIiduYXZpZ2F0aW9uJ1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihuYXYudGV4dCB8IHRyYW5zbGF0ZSkgKyAnICcgKyAoc3VibmF2LnRleHQgfCB0cmFuc2xhdGUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tzdWJuYXYudGV4dCB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1uYXYtbGlzdD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgICAgICAgICAgPC9tYXQtYWNjb3JkaW9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSBJZiBzdWJub2RlcyBhcmUgbm90IHRoZXJlIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbmF2Py5zdWJOb2Rlcz8ubGVuZ3RoICYmICFuYXY/LmhpZGRlblwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBJZiB0aGVyZSBpcyBhIHJvdXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hdj8ucm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1uYXYtbGlzdCBbbmdDbGFzc109XCJ7ICdzb2YtYXItbmF2LXNlbGVjdGVkJzogaXNOYXZTZWxlY3RlZChuYXYpIH1cIiBjbGFzcz1cIm5hdi1oZWFkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIiAoY2xpY2spPVwiY2xvc2VOYXZpZ2F0aW9uRm9yTW9iaWxlKClcIiBbYXR0ci5yb2xlXT1cIm51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1pdGVtIG5hdi1pdGVtLW1hcmdpblwiIG1hdC1saXN0LWl0ZW0gW3JvdXRlckxpbmtdPVwibmF2Py5yb3V0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiWydzb2YtYXItbmF2LWFjdGl2ZS1yb3V0ZSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibmF2Py5mb250QXdlc29tZUljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJpY29uLXN0eWxpbmdcIj48aSBjbGFzcz1cInt7bmF2Py5mb250QXdlc29tZUljb259fVwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic29mLWFyLW5hdi1oZWFkZXItdGV4dFwiPnt7bmF2LnRleHQgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW5hdi1saXN0PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIElmIHRoZXJlIGlzIG5vdCBhIHJvdXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFuYXY/LnJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbmF2LWxpc3QgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiIFthdHRyLnJvbGVdPVwibnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJzb2YtYXItbmF2LWJ0bi1ub2RlXCIgY2xhc3M9XCJuYXYtaXRlbVwiIG1hdC1saXN0LWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIlsnc29mLWFyLW5hdi1hY3RpdmUtcm91dGUnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hdj8uZm9udEF3ZXNvbWVJY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiaWNvbi1zdHlsaW5nXCI+PGkgY2xhc3M9XCJ7e25hdj8uZm9udEF3ZXNvbWVJY29ufX1cIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNvZi1hci1uYXYtaGVhZGVyLXRleHRcIj57e25hdi50ZXh0IHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW5hdi1saXN0PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uYXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBTdGVwcGVyIC0tPlxyXG4gICAgICA8bWF0LXZlcnRpY2FsLXN0ZXBwZXIgKm5nSWY9XCJzZXR0aW5ncy5tZW51U3R5bGUgPT09ICdzdGVwcGVyJ1wiIFtzZWxlY3RlZEluZGV4XT1cInNlbGVjdGVkUGFyZW50SW5kZXhcIiAjdmVydFN0ZXBwZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5lYXJdPVwiZmFsc2VcIiBjbGFzcz1cInNpZGVuYXYtYmFja2dyb3VuZFwiPlxyXG4gICAgICAgIDwhLS0gQWx0ZXJuYXRlIHN0ZXAgc3RhdGVzIGZvciBuYXYsIGljYW9ucyBzaG91bGQgYWx3YXlzIGJlIHdoaXRlIG9ubHkgd29ya2VkIHdpdGggc3R5bGVzIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwcGVySWNvbj1cImNyZWF0ZVwiPlxyXG4gICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFkIGZhLXBlbmNpbC1hbHRcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50XCI+PC9pPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBwZXJJY29uPVwiZWRpdFwiPlxyXG4gICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFkIGZhLXBlbmNpbC1hbHRcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50XCI+PC9pPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBwZXJJY29uPVwiYWN0aXZlXCI+XHJcbiAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYWQgZmEtcGVuY2lsLWFsdFwiIHN0eWxlPVwiY29sb3I6IHdoaXRlICFpbXBvcnRhbnRcIj48L2k+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcHBlckljb249XCJkb25lXCI+XHJcbiAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2tcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50XCI+PC9pPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDwhLS0gbmF2IHN0ZXBzIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG5hdiBvZiBuYXZpZ2F0aW9uRGF0YTsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgPG1hdC1zdGVwICpuZ0lmPVwiIW5hdj8uaGlkZGVuXCIgc3RhdGU9XCJ7eyBkZXRlcm1pbmVTdGVwU3RhdGUoaSwgLTEpIH19XCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWwgKm5nSWY9XCIhbmF2LmhpZGRlblwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgaWQ9XCJkaXZTdGVwe3sgaSB9fVwiIHN0eWxlPVwiaGVpZ2h0OiA3MnB4XCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eyBuYXYudGV4dCB8IHRyYW5zbGF0ZSB9fVwiIFttYXRUb29sdGlwUG9zaXRpb25dPVwiJ2FmdGVyJ1wiIGZ4RmxleD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgIDxhIGlkPVwic3RlcHt7IGkgfX1cIiBmeEZsZXg9XCIxMDAlXCIgY2xhc3M9XCJtYXQtYnV0dG9uIHN0ZXAtbGlua1wiIFtyb3V0ZXJMaW5rXT1cIm5hdi5yb3V0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGNvbG9yOiB0aGVtZVNldHRpbmdzPy5mb250Q29sb3IgfVwiIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIlsnc3RlcC1hY3RpdmUnXVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBuYXYudGV4dCB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8cCBbaW5uZXJIVE1MXT1cIm5hdi5zdGVwQ29udGVudCB8IHRyYW5zbGF0ZVwiPjwvcD5cclxuICAgICAgICAgICAgPCEtLSBzdWIgbmF2IC0tPlxyXG4gICAgICAgICAgICA8bWF0LXZlcnRpY2FsLXN0ZXBwZXIgKm5nSWY9XCJuYXY/LnN1Yk5vZGVzXCIgW3NlbGVjdGVkSW5kZXhdPVwic2VsZWN0ZWRDaGlsZEluZGV4ZXNbaV1cIiBbbGluZWFyXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN2ZXJ0U3RlcHBlcklubmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gQWx0ZXJuYXRlIHN0ZXAgc3RhdGVzIGZvciBzdWIgbmF2LCBpY29ucyBzaG91bGQgYWx3YXlzIGJlIHdoaXRlIG9ubHkgd29ya2VkIHdpdGggc3R5bGVzIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwcGVySWNvbj1cImNyZWF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFkIGZhLXBlbmNpbC1hbHRcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBwZXJJY29uPVwiZWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFkIGZhLXBlbmNpbC1hbHRcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBwZXJJY29uPVwiZG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZWNrXCIgc3R5bGU9XCJjb2xvcjogd2hpdGUgIWltcG9ydGFudFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwcGVySWNvbj1cImFjdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBlbmNpbC1hbHRcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBwZXJJY29uPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPCEtLSBzdWIgbmF2IHN0ZXBzIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1Ym5hdiBvZiBuYXY/LnN1Yk5vZGVzOyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXN0ZXAgc3RhdGU9XCJ7eyBkZXRlcm1pbmVTdGVwU3RhdGUoaSwgaikgfX1cIiAqbmdJZj1cIiFzdWJuYXYuaGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImRpdlN1YlN0ZXB7eyBpIH19LXt7IGogfX1cIiBzdHlsZT1cImhlaWdodDogNzJweFwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwie3sgc3VibmF2LnRleHQgfCB0cmFuc2xhdGUgfX1cIiBbbWF0VG9vbHRpcFBvc2l0aW9uXT1cIidhZnRlcidcIiBmeEZsZXg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YSBpZD1cInN1YlN0ZXB7eyBpIH19LXt7IGogfX1cIiBjbGFzcz1cIm1hdC1idXR0b24gc3RlcC1saW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgY29sb3I6IHRoZW1lU2V0dGluZ3M/LmZvbnRDb2xvciB9XCIgW3JvdXRlckxpbmtdPVwic3VibmF2LnJvdXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIlsnc3RlcC1hY3RpdmUnXVwiPnt7IHN1Ym5hdi50ZXh0IHwgdHJhbnNsYXRlIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8cCBbaW5uZXJIVE1MXT1cInN1Ym5hdi5zdGVwQ29udGVudCB8IHRyYW5zbGF0ZVwiPjwvcD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LXN0ZXA+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8L21hdC12ZXJ0aWNhbC1zdGVwcGVyPlxyXG4gICAgICAgICAgPC9tYXQtc3RlcD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwvbWF0LXZlcnRpY2FsLXN0ZXBwZXI+XHJcblxyXG4gICAgICA8IS0tIE5hdiBGb290ZXIgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJuYXYtZm9vdGVyLWl0ZW1cIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2V0dGluZ3MubWVudVN0eWxlID09PSAnc3RhdGljJ1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbmF2IG9mIGZvb3Rlck5hdmlnYXRpb25EYXRhXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSBEZXNrdG9wIE5hdiAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5hdj8uc3ViTm9kZXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBJZiB0aGVyZSBpcyBhIHJvdXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hdj8ucm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1uYXYtbGlzdCBjbGFzcz1cIm5hdi1oZWFkZXJcIiBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtaXRlbSBuYXYtaXRlbS1tYXJnaW5cIiBtYXQtbGlzdC1pdGVtIFtyb3V0ZXJMaW5rXT1cIm5hdj8ucm91dGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIlsnc29mLWFyLW5hdi1hY3RpdmUtcm91dGUnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hdj8uZm9udEF3ZXNvbWVJY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiaWNvbi1zdHlsaW5nXCI+PGkgY2xhc3M9XCJ7e25hdj8uZm9udEF3ZXNvbWVJY29ufX1cIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e25hdi50ZXh0IHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW5hdi1saXN0PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIElmIHRoZXJlIGlzIG5vdCBhIHJvdXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFuYXY/LnJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbmF2LWxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInNvZi1hci1uYXYtYnRuLW5vZGVcIiBjbGFzcz1cIm5hdi1pdGVtXCIgbWF0LWxpc3QtaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiWydzb2YtYXItbmF2LWFjdGl2ZS1yb3V0ZSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibmF2Py5mb250QXdlc29tZUljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJpY29uLXN0eWxpbmdcIj48aSBjbGFzcz1cInt7bmF2Py5mb250QXdlc29tZUljb259fVwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7bmF2LnRleHQgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1uYXYtbGlzdD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5hdmlnYXRpb25Gb290ZXJcIj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSB0aGUgbW9iaWxlIHByb2dyZXNzIG1lbnUtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNldHRpbmdzPy5tZW51U3R5bGUgPT09ICdwcm9ncmVzcydcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZW5hdi1iYWNrZ3JvdW5kXCIgW25nU3R5bGVdPVwieydwYWRkaW5nLWJvdHRvbS5weCc6IChmb290ZXJJdGVtQ291bnQqNjQpKzEyOH1cIj5cclxuICAgICAgICAgIDxtYXQtYWNjb3JkaW9uPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdGVwIG9mIG5hdmlnYXRpb25EYXRhOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0ZXAuc3ViTm9kZXMgJiYgc3RlcC5zdWJOb2Rlcy5sZW5ndGggPiAwICYmICFzdGVwLmhpZGRlblwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgaGlkZVRvZ2dsZSBjbGFzcz1cInByb2dyZXNzLW1vYmlsZS1leHBhbnNpb24tcGFuZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIighc3RlcC52aXNpdGVkIHx8IHN0ZXAuaXNEaXNhYmxlZCkgJiYgIXNldHRpbmdzLm92ZXJyaWRlTmF2aWdhdGlvblwiIChvcGVuZWQpPVwicGFuZWxPcGVuU3RhdGUgPSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbG9zZWQpPVwicGFuZWxPcGVuU3RhdGUgPSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSBjbGFzcz1cInByb2dyZXNzLW1vYmlsZS1wYW5lbC10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAtd2Via2l0LWZpbGwtYXZhaWxhYmxlO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOighc3RlcC52aXNpdGVkIHx8IHN0ZXAuaXNEaXNhYmxlZCkgJiYgIXNldHRpbmdzLm92ZXJyaWRlTmF2aWdhdGlvbiAmJiAhc3RlcC5jb21wbGV0ZSwnY29sb3ItcHJpbWFyeSc6c3RlcC5jb21wbGV0ZSAmJiBzdGVwIT1hY3RpdmVQYXJlbnROb2RlLCdwcm9ncmVzcy1tZW51LWFjdGl2ZSc6c3RlcD09PWFjdGl2ZVBhcmVudE5vZGV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJwcm9ncmVzc1BhcmVudE5vZGVJY29uc1wiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7c3RlcDpzdGVwfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNldHRpbmdzPy5kaXNwbGF5TnVtYmVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7aSA8IDEwID8gXCIwXCIgKyAoaSArIDEpICsgXCIuIFwiIDogaSArIFwiIC4gXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi1idG4tdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN0ZXAudGV4dCB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXBhbmVsT3BlblN0YXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1kb3duIHBhbmVsLWljb25cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYW5lbE9wZW5TdGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tdXAgcGFuZWwtaWNvblwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBtb2JpbGUgc3ViIG1lbnUgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1uYXYtbWVudVwiICpuZ0Zvcj1cImxldCBzdWJOb2RlIG9mIHN0ZXAuc3ViTm9kZXM7IGxldCBpZHggPSBpbmRleDtcIiBbaGlkZGVuXT1cInN0ZXAuc3ViTm9kZXNbaWR4XS5oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwibW9iaWxlTWVudXt7IGlkeCB9fVwiIG1hdC1idXR0b24gY2xhc3M9XCJzdGVwLWxpbmsgcHJvZ3Jlc3MtbWVudS1tb2JpbGUtYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnY29sb3ItcHJpbWFyeSc6c3ViTm9kZS5jb21wbGV0ZSAmJiBzdWJOb2RlIT1hY3RpdmVTdWJOb2RlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCJbJ3Byb2dyZXNzLW1lbnUtYWN0aXZlJ11cIiBbbmdTdHlsZV09XCJ7ICcgY29sb3InOiB0aGVtZVNldHRpbmdzPy5mb250Q29sb3IgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJzdWJOb2RlLnJvdXRlXCIgW2Rpc2FibGVkXT1cIiFzdWJOb2RlLnZpc2l0ZWQgJiYgIXNldHRpbmdzLm92ZXJyaWRlTmF2aWdhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByb2dyZXNzU3ViTm9kZUljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3N1Yk5vZGU6c3ViTm9kZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi1tZW51LWJ0bi10ZXh0XCIgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6KCFzdWJOb2RlLnZpc2l0ZWQpICYmICFzZXR0aW5ncy5vdmVycmlkZU5hdmlnYXRpb24gJiYgIXN1Yk5vZGUuY29tcGxldGUsJ2NvbG9yLXByaW1hcnknOnN1Yk5vZGUuY29tcGxldGUgJiYgc3ViTm9kZSE9YWN0aXZlU3ViTm9kZSwncHJvZ3Jlc3MtbWVudS1hY3RpdmUnOnN1Yk5vZGU9PT1hY3RpdmVTdWJOb2RlfVwiPnt7IHN1Yk5vZGUudGV4dCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSBpZiB0aGVyZSBhcmUgbm8gc3ViTm9kZXMgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIighc3RlcC5zdWJOb2RlcyB8fCBzdGVwLnN1Yk5vZGVzLmxlbmd0aD09MCkgJiYgIXN0ZXAuaGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAjcGFuZWwgaGlkZVRvZ2dsZSAob3BlbmVkKT1cImRpc2FibGVQYW5lbChwYW5lbCxpKVwiIGNsYXNzPVwicHJvZ3Jlc3MtbW9iaWxlLWV4cGFuc2lvbi1wYW5lbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKCFzdGVwLnZpc2l0ZWQgfHwgc3RlcC5pc0Rpc2FibGVkKSAmJiAhc2V0dGluZ3Mub3ZlcnJpZGVOYXZpZ2F0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlIGNsYXNzPVwicHJvZ3Jlc3MtbW9iaWxlLXBhbmVsLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOighc3RlcC52aXNpdGVkIHx8IHN0ZXAuaXNEaXNhYmxlZCkgJiYgIXNldHRpbmdzLm92ZXJyaWRlTmF2aWdhdGlvbiAmJiAhc3RlcC5jb21wbGV0ZSwnY29sb3ItcHJpbWFyeSc6c3RlcC5jb21wbGV0ZSAmJiBzdGVwIT1hY3RpdmVQYXJlbnROb2RlLCdwcm9ncmVzcy1tZW51LWFjdGl2ZSc6c3RlcD09PWFjdGl2ZVBhcmVudE5vZGV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJwcm9ncmVzc1BhcmVudE5vZGVJY29uc1wiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7c3RlcDpzdGVwfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNldHRpbmdzPy5kaXNwbGF5TnVtYmVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7aSA8IDEwID8gXCIwXCIgKyAoaSArIDEpICsgXCIuIFwiIDogaSArIFwiIC4gXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi1idG4tdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN0ZXAudGV4dCB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbWF0LWFjY29yZGlvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSB0aGUgcHJvZ3Jlc3MgbWVudSBsYW5ndWFnZSBhbmQgbG9nb3V0IGJ1dHRvbnMtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWZvb3Rlci1pdGVtIHByb2dyZXNzLWZvb3RlclwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5hdmlnYXRpb25Gb290ZXJcIj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9tYXQtc2lkZW5hdj5cclxuICAgIDxtYXQtc2lkZW5hdi1jb250ZW50PlxyXG4gICAgICA8IS0tIEhvcml6b250YWwgUHJvZ3Jlc3MgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZXR0aW5ncz8ubWVudVN0eWxlID09PSAncHJvZ3Jlc3MnXCI+XHJcbiAgICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgKm5nSWY9XCJzZXR0aW5ncz8uc2hvd1Byb2dyZXNzQmFyXCIgbW9kZT1cImRldGVybWluYXRlXCIgW3ZhbHVlXT1cIm5hdlByb2dyZXNzQ291bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiA5cHhcIiBjb2xvcj1cImFjY2VudFwiPlxyXG4gICAgICAgIDwvbWF0LXByb2dyZXNzLWJhcj5cclxuICAgICAgICA8ZGl2IGZ4SGlkZS5sdC1tZCBjbGFzcz1cInN0ZXAtdGl0bGVzIGNlbnRlclwiIGZ4TGF5b3V0PVwicm93XCIgc3R5bGU9XCJqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyICFpbXBvcnRhbnRcIiBbY2xhc3MuaGlkZGVuXT1cInNldHRpbmdzLmhpZGVOYXZpZ2F0aW9uXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdGVwIG9mIG5hdmlnYXRpb25EYXRhOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJob3Jpem9udGFsLXByb2dyZXNzLWRpdlwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN0ZXAuc3ViTm9kZXM/Lmxlbmd0aCAmJiAhc3RlcC5oaWRkZW5cIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW3JvdXRlckxpbmtdPVwic3RlcC5yb3V0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKCFzdGVwLnZpc2l0ZWQgfHwgc3RlcC5pc0Rpc2FibGVkKSAmJiAhc2V0dGluZ3Mub3ZlcnJpZGVOYXZpZ2F0aW9uXCIgY2xhc3M9XCJwcm9ncmVzcy1tZW51LWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2NvbG9yLXByaW1hcnknOnN0ZXAuY29tcGxldGUgJiYgc3RlcCE9YWN0aXZlUGFyZW50Tm9kZSwncHJvZ3Jlc3MtbWVudS1hY3RpdmUnOnN0ZXA9PT1hY3RpdmVQYXJlbnROb2RlfVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByb2dyZXNzUGFyZW50Tm9kZUljb25zXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntzdGVwOnN0ZXB9XCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZXR0aW5ncz8uZGlzcGxheU51bWJlcnNcIj5cclxuICAgICAgICAgICAgICAgICAge3tpIDwgMTAgPyBcIjBcIiArIChpICsgMSkgKyBcIi4gXCIgOiBpICsgXCIgLiBcIn19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi1idG4tdGV4dFwiPnt7IHN0ZXAudGV4dCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gaWYgdGhlcmUgYXJlIHN1Ym5vZGVzIGNyZWF0ZSBtZW51cyBmb3IgZWFjaCBzdGVwIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RlcC5zdWJOb2RlcyAmJiBzdGVwLnN1Yk5vZGVzLmxlbmd0aCAmJiAhc3RlcC5oaWRkZW5cIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInsnY29sb3ItcHJpbWFyeSc6c3RlcC5jb21wbGV0ZSAmJiBzdGVwIT1hY3RpdmVQYXJlbnROb2RlLCdwcm9ncmVzcy1tZW51LWFjdGl2ZSc6c3RlcD09PWFjdGl2ZVBhcmVudE5vZGV9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1idXR0b24gW2Rpc2FibGVkXT1cIighc3RlcC52aXNpdGVkIHx8IHN0ZXAuaXNEaXNhYmxlZCkgJiYgIXNldHRpbmdzLm92ZXJyaWRlTmF2aWdhdGlvblwiIGNsYXNzPVwicHJvZ3Jlc3MtbWVudS1idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJwcm9ncmVzc1BhcmVudE5vZGVJY29uc1wiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7c3RlcDpzdGVwfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2V0dGluZ3M/LmRpc3BsYXlOdW1iZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7aSA8IDEwID8gXCIwXCIgKyAoaSArIDEpICsgXCIuIFwiIDogaSArIFwiIC4gXCJ9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXYtYnRuLXRleHRcIj57eyBzdGVwLnRleHQgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiIGNsYXNzPVwic29mLWFyLW1hdC1tZW51IHByb2dyZXNzLW1lbnUtcGFuZWxcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1uYXYtbWVudVwiICpuZ0Zvcj1cImxldCBzdWJOb2RlIG9mIHN0ZXAuc3ViTm9kZXM7IGxldCBpZHggPSBpbmRleDtcIiBbbmdTdHlsZV09XCJ7d2lkdGg6c2V0dGluZ3MucHJvZ3Jlc3NNZW51V2lkdGgrJ3B4J31cIiBbaGlkZGVuXT1cInN0ZXAuc3ViTm9kZXNbaWR4XS5oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInN1Ym1lbnV7eyBpZHggfX1cIiBtYXQtYnV0dG9uIGNsYXNzPVwic3RlcC1saW5rIHByb2dyZXNzLW1lbnUtYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2NvbG9yLXByaW1hcnknOnN1Yk5vZGUuY29tcGxldGUgJiYgc3ViTm9kZSE9YWN0aXZlU3ViTm9kZSwnZGlzYWJsZWQnOiFzdWJOb2RlLnZpc2l0ZWQgJiYgIXNldHRpbmdzLm92ZXJyaWRlTmF2aWdhdGlvbn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIlsncHJvZ3Jlc3MtbWVudS1hY3RpdmUnXVwiIFtuZ1N0eWxlXT1cInsgJyBjb2xvcic6IHRoZW1lU2V0dGluZ3M/LmZvbnRDb2xvciB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJzdWJOb2RlLnJvdXRlXCIgW2Rpc2FibGVkXT1cIiFzdWJOb2RlLnZpc2l0ZWQgJiYgIXNldHRpbmdzLm92ZXJyaWRlTmF2aWdhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJwcm9ncmVzc1N1Yk5vZGVJY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7c3ViTm9kZTpzdWJOb2RlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXYtbWVudS1idG4tdGV4dFwiPnt7IHN1Yk5vZGUudGV4dCB8dHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1wcm9ncmVzcy1jb250YWluZXJcIiBmeEhpZGUuZ3Qtc20+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRlbnQgc29mLWFyLW5hdi1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgIDwvbWF0LXNpZGVuYXYtY29udGVudD5cclxuICA8L21hdC1zaWRlbmF2LWNvbnRhaW5lcj5cclxuICA8IS0tIFRoZSBwcm9ncmVzcyBtZW51IHBhcmVudCBub2RlIGljb24gdGVtcGxhdGUtLT5cclxuICA8bmctdGVtcGxhdGUgI3Byb2dyZXNzUGFyZW50Tm9kZUljb25zIGxldC1zdGVwPSdzdGVwJz5cclxuICAgIDxzcGFuICpuZ0lmPVwic3RlcC5jb21wbGV0ZSAmJiBzdGVwICE9IGFjdGl2ZVBhcmVudE5vZGVcIiBcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInYXJtYXR1cmUuc29mLXByb2dyZXNzLWJhci5zdGVwLWxhYmVscy5jb21wbGV0ZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgPGkgY2xhc3M9XCJ7eyBzZXR0aW5ncy5wcm9ncmVzc1NlY3Rpb25Db21wbGV0ZUljb24gfX0gY29sb3ItcHJpbWFyeSBwcm9ncmVzcy1uYXYtaWNvblwiIFt0aXRsZV09XCInYXJtYXR1cmUuc29mLXByb2dyZXNzLWJhci5zdGVwLWxhYmVscy5zdGVwLWxhYmVscy5jb21wbGV0ZScgfCB0cmFuc2xhdGVcIj48L2k+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8c3BhbiAqbmdJZj1cInN0ZXAgPT09IGFjdGl2ZVBhcmVudE5vZGVcIiBcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInYXJtYXR1cmUuc29mLXByb2dyZXNzLWJhci5zdGVwLWxhYmVscy5pbi1wcm9ncmVzcycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgPGkgY2xhc3M9XCJ7eyBzZXR0aW5ncy5wcm9ncmVzc1NlY3Rpb25DdXJyZW50SWNvbiB9fSBjb2xvci1wcmltYXJ5IHByb2dyZXNzLW5hdi1pY29uXCIgW3RpdGxlXT1cIidhcm1hdHVyZS5zb2YtcHJvZ3Jlc3MtYmFyLnN0ZXAtbGFiZWxzLmluLXByb2dyZXNzJyB8IHRyYW5zbGF0ZVwiPjwvaT5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxzcGFuICpuZ0lmPVwiIXN0ZXAuY29tcGxldGUgJiYgc3RlcCAhPSBhY3RpdmVQYXJlbnROb2RlXCIgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6IXN0ZXAudmlzaXRlZCAmJiAhc2V0dGluZ3Mub3ZlcnJpZGVOYXZpZ2F0aW9ufVwiIFxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidhcm1hdHVyZS5zb2YtcHJvZ3Jlc3MtYmFyLnN0ZXAtbGFiZWxzLm5vdC1kb25lJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICA8aSBjbGFzcz1cInt7IHNldHRpbmdzLnByb2dyZXNzU2VjdGlvbkZ1dHVyZUljb24gfX0gcHJvZ3Jlc3MtbmF2LWljb25cIiBbdGl0bGVdPVwiJ2FybWF0dXJlLnNvZi1wcm9ncmVzcy1iYXIuc3RlcC1sYWJlbHMubm90LWRvbmUnIHwgdHJhbnNsYXRlXCI+PC9pPlxyXG4gICAgPC9zcGFuPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPCEtLSBUaGUgcHJvZ3Jlc3MgbWVudSBzdWIgbm9kZSBpY29uIHRlbXBsYXRlLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNwcm9ncmVzc1N1Yk5vZGVJY29ucyBsZXQtc3ViTm9kZT0nc3ViTm9kZSc+XHJcbiAgICA8c3BhbiAqbmdJZj1cInN1Yk5vZGUuY29tcGxldGUgJiYgYWN0aXZlU3ViTm9kZSAhPSBzdWJOb2RlXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInYXJtYXR1cmUuc29mLXByb2dyZXNzLWJhci5zdGVwLWxhYmVscy5jb21wbGV0ZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgPGkgY2xhc3M9XCJ7e3NldHRpbmdzLnByb2dyZXNzTWVudUNvbXBsZXRlSWNvbn19IGNvbG9yLXByaW1hcnkgcHJvZ3Jlc3MtbmF2LWljb25cIiBbdGl0bGVdPVwiJ2FybWF0dXJlLnNvZi1wcm9ncmVzcy1iYXIuc3RlcC1sYWJlbHMuY29tcGxldGUnIHwgdHJhbnNsYXRlXCI+PC9pPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJhY3RpdmVTdWJOb2RlID09PSBzdWJOb2RlXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInYXJtYXR1cmUuc29mLXByb2dyZXNzLWJhci5zdGVwLWxhYmVscy5pbi1wcm9ncmVzcycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgPGkgY2xhc3M9XCJ7eyBzZXR0aW5ncy5wcm9ncmVzc1NlY3Rpb25DdXJyZW50SWNvbiB9fSBjb2xvci1wcmltYXJ5IHByb2dyZXNzLW5hdi1pY29uXCIgW3RpdGxlXT1cIidhcm1hdHVyZS5zb2YtcHJvZ3Jlc3MtYmFyLnN0ZXAtbGFiZWxzLmluLXByb2dyZXNzJyB8IHRyYW5zbGF0ZVwiPjwvaT5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxzcGFuICpuZ0lmPVwiIXN1Yk5vZGUuY29tcGxldGUgJiYgYWN0aXZlU3ViTm9kZSAhPSBzdWJOb2RlXCIgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6IXN1Yk5vZGUudmlzaXRlZCAmJiAhc2V0dGluZ3Mub3ZlcnJpZGVOYXZpZ2F0aW9ufVwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2FybWF0dXJlLnNvZi1wcm9ncmVzcy1iYXIuc3RlcC1sYWJlbHMubm90LWRvbmUnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwie3sgc2V0dGluZ3MucHJvZ3Jlc3NTZWN0aW9uRnV0dXJlSWNvbiB9fSBwcm9ncmVzcy1uYXYtaWNvblwiIFt0aXRsZV09XCInYXJtYXR1cmUuc29mLXByb2dyZXNzLWJhci5zdGVwLWxhYmVscy5ub3QtZG9uZScgfCB0cmFuc2xhdGVcIj48L2k+XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8IS0tIFRoZSBuYXZpZ2F0aW9uIGZvb3RlciB0ZW1wbGF0ZSBmb3IgbGFuZ3VhZ2UgYW5kIGxvZ291dCBidXR0b25zIC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjbmF2aWdhdGlvbkZvb3Rlcj5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzb2YtYXItbmF2LW1vYmlsZS1mb290ZXJdXCI+IDwvbmctY29udGVudD5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2V0dGluZ3MudXNlQ3VzdG9tTW9iaWxlRm9vdGVyXCI+XHJcbiAgICAgIDwhLS0gVGhlIGxhbmd1YWdlIGJ1dHRvbiAtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxhbmd1YWdlU2V0dGluZ3M/LmRpc3BsYXlMYW5ndWFnZU9wdGlvbnMgJiYgbGFuZ3VhZ2VTZXR0aW5ncz8ubGFuZ3VhZ2VzLmxlbmd0aCA+IDIgJiYgbW9iaWxlUXVlcnkubWF0Y2hlc1wiPlxyXG4gICAgICAgIDxidXR0b24gaWQ9XCJzb2YtYXItbmF2LWxhbmctZHJvcGRvd25cIiBtYXQtc3Ryb2tlZC1idXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmFkZWQtYnV0dG9uLTUwIGxhbmd1YWdlLWJ1dHRvbiBuYXZpZ2F0aW9uRm9vdGVyXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImhlYWRlckxhbmd1YWdlTWVudVwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxhbmd1YWdlU2V0dGluZ3MuYnV0dG9uVGV4dCB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJpY29uLXN0eWxpbmdcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtZ2xvYmUgbGFuZ3VhZ2UtZ2xvYmVcIj48L2k+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICB7e2xhbmd1YWdlU2V0dGluZ3MuYnV0dG9uVGV4dCB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPG1hdC1tZW51ICNoZWFkZXJMYW5ndWFnZU1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJzb2YtYXItbWF0LW1lbnVcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgbGFuZyBvZiBsYW5ndWFnZVNldHRpbmdzLmxhbmd1YWdlc1wiIChjbGljayk9XCJzZXRMYW5ndWFnZSQuZW1pdChsYW5nKVwiXHJcbiAgICAgICAgICAgICAgICAgIGlkPVwiYXBwbHktbGFuZy1idG4te3tsYW5nfX1cIj5cclxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cImF1dG9cIj5cclxuICAgICAgICAgICAgICAgIHt7IGxhbmcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cImF1dG9cIiBmeExheW91dEFsaWduPVwiZW5kIGVuZFwiPlxyXG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjdXJyZW50TGFuZyA9PT0gbGFuZ1wiIGNsYXNzPVwiZmFkIGZhLWNoZWNrIHNlbGVjdGVkLWxhbmd1YWdlLWljb25cIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYW5ndWFnZVNldHRpbmdzPy5kaXNwbGF5TGFuZ3VhZ2VPcHRpb25zICYmIGxhbmd1YWdlU2V0dGluZ3M/Lmxhbmd1YWdlcy5sZW5ndGggPT09IDIgJiYgbW9iaWxlUXVlcnkubWF0Y2hlc1wiPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJsYW5ndWFnZVNldHRpbmdzPy5sYW5ndWFnZXMubGVuZ3RoID09PSAyXCIgaWQ9XCJzb2YtYXItbmF2LWxhbmctYnV0dG9uXCIgbWF0LXN0cm9rZWQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZhZGVkLWJ1dHRvbi01MCBsYW5ndWFnZS1idXR0b24gbmF2aWdhdGlvbkZvb3RlclwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxhbmd1YWdlU2V0dGluZ3MuYnV0dG9uVGV4dCB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJzZXRMYW5ndWFnZSQuZW1pdCgpXCI+XHJcbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImljb24tc3R5bGluZ1wiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhciBmYS1nbG9iZSBsYW5ndWFnZS1nbG9iZVwiPjwvaT5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIHt7b3RoZXJMYW5nVGV4dCB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8IS0tIFRoZSBsb2dvdXQgYnV0dG9uLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2JpbGVRdWVyeS5tYXRjaGVzICYmIHVzZXJOYW1lXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBpZD1cInNvZi1hci1oZWFkZXItbGFuZy1idXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJuYXZpZ2F0aW9uRm9vdGVyXCIgKGNsaWNrKT1cImxvZ091dCgpXCI+XHJcbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImljb24tc3R5bGluZ1wiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zaWduLW91dC1hbHRcIj48L2k+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICB7e2xvZ091dFRleHQgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG4iXX0=
556
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcm1hdHVyZS9zcmMvbGliL25hdmlnYXRpb24vY29tcG9uZW50cy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJtYXR1cmUvc3JjL2xpYi9uYXZpZ2F0aW9uL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxNQUFNLEVBQWEsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkxSyxPQUFPLEVBQUUsYUFBYSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVeEMsMEZBQTBGO0FBRTFGOztHQUVHO0FBU0gsTUFBTSxPQUFPLDJCQUEyQjtJQXNDdEMsaUNBQWlDO0lBQ2pDLElBQVcsYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBZ0ZEOzs7Ozs7OztPQVFHO0lBQ0gsWUFDVyxpQkFBb0MsRUFDcEMsS0FBbUIsRUFDWCxNQUFjLEVBQ3ZCLGFBQTRCLEVBQ25CLG9CQUEwQyxFQUM5QixhQUFnQztRQUxwRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDWCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ3ZCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ25CLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBdkgvRCxnREFBZ0Q7UUFDaEMsYUFBUSxHQUF1QixFQUFFLENBQUM7UUFFbEQsZ0RBQWdEO1FBQ2hDLHFCQUFnQixHQUErQixFQUFFLENBQUM7UUFFbEUsZ0RBQWdEO1FBQ2hDLGtCQUFhLEdBQTRCLEVBQUUsQ0FBQztRQUU1RCx5REFBeUQ7UUFDekMscUJBQWdCLEdBQTJCLEVBQUUsQ0FBQztRQVE5RCxxQkFBcUI7UUFDSixpQkFBWSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBTzNFLHNDQUFzQztRQUMvQixjQUFTLEdBQVksS0FBSyxDQUFDO1FBRWxDLCtEQUErRDtRQUN4RCx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFXM0MsZ0NBQWdDO1FBQ3pCLHdCQUFtQixHQUFXLENBQUMsQ0FBQztRQUV2QywrQkFBK0I7UUFDeEIseUJBQW9CLEdBQThCLEVBQUUsQ0FBQztRQUU1RCxvQ0FBb0M7UUFDN0IscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBUXBDLDBDQUEwQztRQUNuQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQW9CdkMsZ0NBQWdDO1FBQ3hCLGVBQVUsR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUt0RCxvQ0FBb0M7UUFDN0IsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFcEMsNENBQTRDO1FBQ3JDLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRXJDLGdDQUFnQztRQUN4QixzQkFBaUIsR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUs3RCw4QkFBOEI7UUFDdEIsdUJBQWtCLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFOUQsOEJBQThCO1FBQ3ZCLHVCQUFrQixHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTdELCtCQUErQjtRQUN2QixlQUFVLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFtQnBELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxHQUFHLEVBQUU7WUFDL0IsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbEMsZ0RBQWdEO1lBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUU7Z0JBQ3ZFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDdEI7UUFDSCxDQUFDLENBQUM7UUFDRixrR0FBa0c7UUFDbEcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFO1lBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3hFO2FBQ0k7WUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUN6RDtJQUNILENBQUM7SUFFRCx1Q0FBdUM7SUFDaEMsUUFBUTtRQUViLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTFHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUVyRixzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ1osQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQzthQUNqRjtZQUNELDhCQUE4QjtZQUM5QixJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO2dCQUN4QixDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQzthQUN0QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFekIsZ0NBQWdDO1FBQ2hDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFO1lBQzFDLCtDQUErQztZQUMvQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDakYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDekQ7YUFDRjtZQUVELDJCQUEyQjtZQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1lBRzFGLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxZQUFZLGFBQWEsQ0FBQyxDQUFDO2lCQUNyRSxTQUFTLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUU7Z0JBQ2xDLHNDQUFzQztnQkFDdEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FDTCxDQUFDO1lBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQy9FLElBQUksS0FBSyxFQUFFO2dCQUNULElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFBO2FBQ3JEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDdEUsSUFBSSxNQUFNLElBQUksTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7b0JBQ3ZDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUM7b0JBQ2hELElBQUksTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO3dCQUMxQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO3dCQUMxQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO3dCQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzVDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTs0QkFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDOzRCQUMvQixVQUFVLENBQUMsR0FBRyxFQUFFO2dDQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0NBQ3JCLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29DQUNwQyxPQUFPLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztvQ0FDMUIsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dDQUNsQixDQUFDLENBQUMsQ0FBQzs0QkFDTCxDQUFDLENBQUMsQ0FBQzt5QkFDSjt3QkFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTs0QkFDOUIsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7NEJBQ2xCLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDOzRCQUNuQixDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQ0FDdEIsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0NBQ2xCLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDOzRCQUNyQixDQUFDLENBQUMsQ0FBQTt3QkFDSixDQUFDLENBQUMsQ0FBQzt3QkFDSCxpRUFBaUU7d0JBQ2pFLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7d0JBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztxQkFDcEM7b0JBRUQseUZBQXlGO29CQUN6RixJQUFJLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixJQUFJLElBQUk7MkJBQ2pFLElBQUksQ0FBQyw0QkFBNEIsSUFBSSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSw0QkFBNEI7MkJBQy9GLElBQUksQ0FBQywyQkFBMkIsSUFBSSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSwyQkFBMkI7MkJBQzdGLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLDJCQUEyQixJQUFJLElBQUksRUFBRTt3QkFFdEUsSUFBSSxDQUFDLDRCQUE0QixHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFDO3dCQUM1RixJQUFJLENBQUMsMkJBQTJCLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQUM7d0JBRTFGLHFCQUFxQjt3QkFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFlBQVksYUFBYSxDQUFDLENBQUM7NkJBQ3JFLFNBQVMsQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRTs0QkFDbEMsc0NBQXNDOzRCQUN0QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUMxQyxDQUFDLENBQUMsQ0FDTCxDQUFDO3dCQUNGLG1DQUFtQzt3QkFDbkMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRTs0QkFDbEgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsRUFDM0UsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7eUJBQzFHOzZCQUNJOzRCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7eUJBQ3RGO3FCQUNGO3lCQUNJO3dCQUNILHFCQUFxQjt3QkFDckIsSUFBSSxDQUFDLDRCQUE0QixHQUFHLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixDQUFBO3dCQUM5RixJQUFJLENBQUMsMkJBQTJCLEdBQUcsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsMkJBQTJCLENBQUM7cUJBQzlGO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCw4REFBOEQ7SUFDdkQsZUFBZTtRQUNwQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUN6QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDekMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7d0JBQ2pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7d0JBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbEQsQ0FBQyxDQUFBO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUM1QyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRTt3QkFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7NEJBQ2pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7NEJBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ25FLENBQUMsQ0FBQTtvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNsRSxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUI7SUFDVixXQUFXO1FBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZ0JBQWdCLENBQUMsR0FBWTtRQUNsQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUI7UUFDdEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksYUFBYSxDQUFDLFFBQWdCLEVBQUUsS0FBYTtRQUNsRCxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxrQkFBa0IsQ0FBQyxXQUFtQixFQUFFLFVBQWtCO1FBQy9ELDJCQUEyQjtRQUMzQixJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDakIsT0FBTyxRQUFRLENBQUM7YUFDakI7WUFDRCx1QkFBdUI7WUFDdkIsSUFBSSxXQUFXLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFFaEQsT0FBTyxRQUFRLENBQUM7YUFDakI7WUFDRCxzQkFBc0I7aUJBQ2pCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxFQUFFO2dCQUM3RixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDO3FCQUN6RCxLQUFLLEVBQUUsQ0FBQztnQkFFWCxPQUFPLFFBQVEsQ0FBQzthQUNqQjtZQUNELHVCQUF1QjtpQkFDbEIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7Z0JBQ2pELElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFFaEQsT0FBTyxNQUFNLENBQUM7YUFDZjtpQkFDSTtnQkFDSCxPQUFPLFFBQVEsQ0FBQzthQUNqQjtTQUNGO2FBQ0k7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdkIsT0FBTyxNQUFNLENBQUM7YUFDZjtZQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDO1lBQ2xGLElBQUksVUFBVSxLQUFLLFlBQVksQ0FBQyxhQUFhLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBRXJFLE9BQU8sUUFBUSxDQUFDO2FBQ2pCO2lCQUNJLElBQUksVUFBVSxHQUFHLFlBQVksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFO2dCQUNqSCxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUM7cUJBQ3hELEtBQUssRUFBRSxDQUFDO2dCQUVYLE9BQU8sUUFBUSxDQUFDO2FBQ2pCO2lCQUNJLElBQUksVUFBVSxHQUFHLFlBQVksQ0FBQyxhQUFhLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBRXJFLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7aUJBQ0k7Z0JBQ0gsT0FBTyxNQUFNLENBQUM7YUFDZjtTQUNGO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxLQUFhO1FBQzNCLGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksY0FBYyxDQUFDLFVBQWtCO1FBQ3RDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUN6QyxpREFBaUQ7WUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNsRTtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSx1QkFBdUIsQ0FBQyxHQUFXO1FBQ3hDLElBQUksVUFBVSxDQUFDO1FBQ2YsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbEQsVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hGLE9BQU8sVUFBVSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksV0FBVyxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ3JCLFdBQVcsR0FBRyxDQUFDLENBQUE7U0FDaEI7UUFFRCwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFdEksMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFFN0Usc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGFBQWEsQ0FBQyxVQUFtQixFQUFFLFNBQXNCO1FBQzlELElBQUksU0FBUyxFQUFFO1lBQ2IsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7WUFDL0IsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUcsc0RBQXNEO1lBQ3RELFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3pELE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQztRQUNuQyxxQ0FBcUM7UUFDckMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0csSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwRCxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUVsQixtRkFBbUY7WUFDbkYsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNyQixDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDbEIsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ25CLENBQUMsQ0FBQyxDQUFBO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNGLG1DQUFtQztRQUNuQyxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLFNBQVMsRUFBRTtZQUNiLFNBQVMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxZQUFZLENBQUMsRUFBRSxFQUFFLEtBQWE7UUFDbkMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7TUFFRTtJQUNLLElBQUk7UUFDVCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQ7O1NBRUs7SUFDRSxNQUFNO1FBQ1gsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNJLHdCQUF3QjtRQUM3QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhLENBQUMsSUFBMkI7UUFDOUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUM7SUFDaEksQ0FBQztJQUVELHNDQUFzQztJQUMvQixXQUFXLENBQUMsS0FBYTtRQUM5QixPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQzVFLENBQUM7SUFFRCxzQ0FBc0M7SUFDOUIsbUJBQW1CO1FBQ3pCLGVBQWU7UUFDZixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2Qsc0NBQXNDO1lBQ3RDLElBQUksVUFBVSxDQUFDO1lBQ2YsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2xELFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUU1RixPQUFPLFVBQVUsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0UsQ0FBQyxDQUFDLENBQUM7WUFDSCxxREFBcUQ7WUFDckQsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3RCLFdBQVcsR0FBRyxDQUFDLENBQUM7YUFDakI7WUFFRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsV0FBVyxDQUFDO1lBQ3ZDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDO2FBQzFGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxlQUFlO1FBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFlBQVksYUFBYSxDQUFDLENBQUM7YUFDckUsU0FBUyxDQUFDLENBQUMsS0FBb0IsRUFBRSxFQUFFO1lBQ2xDLHNDQUFzQztZQUN0QyxJQUFJLFVBQVUsQ0FBQztZQUNmLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNsRCxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXBHLE9BQU8sVUFBVSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkYsQ0FBQyxDQUFDLENBQUM7WUFDSCxxREFBcUQ7WUFDckQsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3RCLFdBQVcsR0FBRyxDQUFDLENBQUM7YUFDakI7WUFFRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsV0FBVyxDQUFDO1lBQ3ZDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDO2FBQzFGO1FBQ0gsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCw0Q0FBNEM7SUFDcEMsb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3RHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUM7SUFFckYsQ0FBQztJQUVELHlDQUF5QztJQUNqQyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzFILElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDMUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDO1FBQ3RFLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQztRQUNqRixJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2pJLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDakksSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNoSSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDN0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN0SSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3RJLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzNHLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3JHLENBQUM7SUFFRCx5Q0FBeUM7SUFDakMsaUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsSUFBSSwwQkFBMEIsQ0FBQztRQUNwRyxJQUFJLENBQUMsUUFBUSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMseUJBQXlCLElBQUksMkJBQTJCLENBQUM7UUFDakgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO1FBQzFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztRQUM5RyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixJQUFJLGFBQWEsQ0FBQztRQUNqRixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO1FBQzFHLElBQUksQ0FBQyxRQUFRLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsSUFBSSxxQkFBcUIsQ0FBQztRQUMvRyxJQUFJLENBQUMsUUFBUSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMseUJBQXlCLElBQUksZUFBZSxDQUFDO1FBQ3JHLElBQUksQ0FBQyxRQUFRLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsSUFBSSxlQUFlLENBQUM7UUFDdkcsSUFBSSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLHdCQUF3QixJQUFJLGNBQWMsQ0FBQztRQUNsRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUE7UUFDNUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixJQUFJLEtBQUssQ0FBQztRQUMvRSxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLElBQUksS0FBSyxDQUFDO1FBQzdFLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLENBQUM7UUFDN0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQztRQUMzRSxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDbEksQ0FBQzs7d0hBam5CVSwyQkFBMkI7NEdBQTNCLDJCQUEyQiw2VEFKM0IsQ0FBQztZQUNWLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsRUFBRSwyQkFBMkIsRUFBRSxLQUFLLEVBQUU7U0FDbEYsQ0FBQyxxWUM3QkosMHg3QkErZEE7MkZEaGNhLDJCQUEyQjtrQkFSdkMsU0FBUzsrQkFDRSxtQkFBbUIsYUFHbEIsQ0FBQzs0QkFDVixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLEVBQUUsMkJBQTJCLEVBQUUsS0FBSyxFQUFFO3lCQUNsRixDQUFDOzswQkEwSUMsUUFBUTs0Q0FySXNCLE9BQU87c0JBQXZDLFNBQVM7dUJBQUMsYUFBYTtnQkFHRSxPQUFPO3NCQUFoQyxTQUFTO3VCQUFDLE1BQU07Z0JBR1UsY0FBYztzQkFBeEMsU0FBUzt1QkFBQyxPQUFPO2dCQUd1QixhQUFhO3NCQUFyRCxZQUFZO3VCQUFDLGtCQUFrQjtnQkFHaEIsY0FBYztzQkFBN0IsS0FBSztnQkFHVSxRQUFRO3NCQUF2QixLQUFLO2dCQUdVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFHVSxhQUFhO3NCQUE1QixLQUFLO2dCQUdVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFHVSxXQUFXO3NCQUExQixLQUFLO2dCQUdVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBR1csWUFBWTtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lZGlhTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xyXG5pbXBvcnQgeyBTVEVQUEVSX0dMT0JBTF9PUFRJT05TIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3N0ZXBwZXInO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRFeHBhbnNpb25QYW5lbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XHJcbmltcG9ydCB7IE1hdFNpZGVuYXYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcclxuaW1wb3J0IHsgTWF0U3RlcHBlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3N0ZXBwZXInO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBCYXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvYmFzZS1jb25maWcnO1xyXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvYXV0aG9yaXphdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFubmVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvYmFubmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvYmFzZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IEhlYWRlckxhbmd1YWdlU2V0dGluZ3MgfSBmcm9tICcuLi8uLi8uLi9oZWFkZXIvbW9kZWxzL2hlYWRlci1sYW5ndWFnZS5zZXR0aW5ncyc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25UaGVtZVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL25hdi10aGVtZS5zZXR0aW5ncyc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25BZHZhbmNlZFNldHRpbmdzLCBOYXZpZ2F0aW9uU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9tb2RlbHMvbmF2LnNldHRpbmdzJztcclxuaW1wb3J0IHsgTmF2Tm9kZSwgU3ViTmF2Tm9kZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvbmF2aWdhdGlvbic7XHJcblxyXG4vLyBUT0RPOiBzZWUgaG93IHRoaXMgY2FuIGZpdCB3aXRoIHRoZSBgc29mLXByb2dyZXNzLWJhcmAgY29tcG9uZW50LiBQb3NzaWJseSBjb21iaW5lIHRoZW1cclxuXHJcbi8qKlxyXG4gKiBUaGUgTmF2aWdhdGlvbiBDb21wb25lbnRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc29mLWFyLW5hdmlnYXRpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uYXZpZ2F0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9uYXZpZ2F0aW9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbe1xyXG4gICAgcHJvdmlkZTogU1RFUFBFUl9HTE9CQUxfT1BUSU9OUywgdXNlVmFsdWU6IHsgZGlzcGxheURlZmF1bHRJbmRpY2F0b3JUeXBlOiBmYWxzZSB9XHJcbiAgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFybWF0dXJlTmF2aWdhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgLyoqIFRoZSBwYXJlbnQgc3RlcHBlciAqL1xyXG4gIEBWaWV3Q2hpbGQoJ3ZlcnRTdGVwcGVyJykgcHVibGljIHN0ZXBwZXI6IE1hdFN0ZXBwZXI7XHJcblxyXG4gIC8qKiBUaGUgc2lkZSBtb2JpbGUgbmF2ICovXHJcbiAgQFZpZXdDaGlsZCgnc25hdicpIHB1YmxpYyBzaWRlbmF2OiBNYXRTaWRlbmF2O1xyXG5cclxuICAvKiogVGhlIG1vYmlsZSBleHBhbnNpb24gcGFuZWwgZm9yIHByb2dyZXNzIG1lbnUgKi9cclxuICBAVmlld0NoaWxkKCdwYW5lbCcpIHB1YmxpYyBleHBhbnNpb25QYW5lbDogTWF0RXhwYW5zaW9uUGFuZWw7XHJcblxyXG4gIC8qKiBUaGUgY2hpbGQgc3RlcHBlcnMgKi9cclxuICBAVmlld0NoaWxkcmVuKCd2ZXJ0U3RlcHBlcklubmVyJykgcHVibGljIGlubmVyU3RlcHBlcnM6IFF1ZXJ5TGlzdDxNYXRTdGVwcGVyPjtcclxuXHJcbiAgLyoqIENvbXBvbmVudCBJbnB1dCAtIHRoZSBuYXZpZ2F0aW9uIGRhdGEgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbmF2aWdhdGlvbkRhdGE6IE5hdk5vZGVbXTtcclxuXHJcbiAgLyoqIENvbXBvbmVudCBJbnB1dCAtIHRoZSBuYXZpZ2F0aW9uIHNldHRpbmdzICovXHJcbiAgQElucHV0KCkgcHVibGljIHNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3MgPSB7fTtcclxuXHJcbiAgLyoqIENvbXBvbmVudCBJbnB1dCAtIHRoZSBuYXZpZ2F0aW9uIHNldHRpbmdzICovXHJcbiAgQElucHV0KCkgcHVibGljIGFkdmFuY2VkU2V0dGluZ3M6IE5hdmlnYXRpb25BZHZhbmNlZFNldHRpbmdzID0ge307XHJcblxyXG4gIC8qKiBDb21wb25lbnQgSW5wdXQgLSB0aGUgbmF2aWdhdGlvbiBzZXR0aW5ncyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0aGVtZVNldHRpbmdzOiBOYXZpZ2F0aW9uVGhlbWVTZXR0aW5ncyA9IHt9O1xyXG5cclxuICAvKiogQ29tcG9uZW50IElucHV0IC0gdGhlIG5hdmlnYXRpb24gbGFuZ3VhZ2Ugc2V0dGluZ3MgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbGFuZ3VhZ2VTZXR0aW5nczogSGVhZGVyTGFuZ3VhZ2VTZXR0aW5ncyA9IHt9O1xyXG5cclxuICAvKiogQ3VycmVudCBsYW5ndWFnZSAqKi9cclxuICBASW5wdXQoKSBwdWJsaWMgY3VycmVudExhbmc6IHN0cmluZztcclxuXHJcbiAgLyoqIGxvZ091dCB0ZXh0ICoqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2dPdXRUZXh0OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBTZXRzIGxhbmd1YWdlICoqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgc2V0TGFuZ3VhZ2UkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAvKiogZ2V0cyB0aGUgbm9uIHVzZWQgbGFuZ3VhZ2UgKi9cclxuICBwdWJsaWMgZ2V0IG90aGVyTGFuZ1RleHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmxhbmd1YWdlU2V0dGluZ3M/Lmxhbmd1YWdlcz8uZmluZCh4ID0+IHggIT09IHRoaXMuY3VycmVudExhbmcpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdoZXRoZXIgc2lkZSBuYXYgaXMgb3BlbiBvciBub3QgKi9cclxuICBwdWJsaWMgaXNOYXZPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBNb2JpbGUgU3ViTmF2IC0gd2hldGhlciBvciBub3QgdGhlIG1vYmlsZSBTdWJOYXYgaXMgb3BlbiAqL1xyXG4gIHB1YmxpYyBpc01vYmlsZVN1Yk5hdk9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIE1vYmlsZSBTdWJOYXYgLXRoZSBkYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgbW9iaWxlIFN1Yk5hdiAqL1xyXG4gIHB1YmxpYyBjdXJyZW50TW9iaWxlTmF2OiBOYXZOb2RlO1xyXG5cclxuICAvKiogU2V0dGluZ3MgLSB0aGUgbWFpbiBtZW51IHRleHQgdGhhdCBhcHBlYXJzIGluIHRoZSBtb2JpbGUgU3ViTmF2ICovXHJcbiAgcHVibGljIG1haW5NZW51VGV4dDogc3RyaW5nO1xyXG5cclxuICAvKiogdGhlIG1vYmlsZSBxdWVyeSAqL1xyXG4gIHB1YmxpYyBtb2JpbGVRdWVyeTogTWVkaWFRdWVyeUxpc3Q7XHJcblxyXG4gIC8qKiBUaGUgc2VsZWN0ZWQgcGFyZW50IGluZGV4ICovXHJcbiAgcHVibGljIHNlbGVjdGVkUGFyZW50SW5kZXg6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKiBUaGUgc2VsZWN0ZWQgY2hpbGQgaW5kZXggKi9cclxuICBwdWJsaWMgc2VsZWN0ZWRDaGlsZEluZGV4ZXM6IHsgW2tleTogbnVtYmVyXTogbnVtYmVyIH0gPSB7fTtcclxuXHJcbiAgLyoqIFRoZSBuYXZpZ2F0aW9uIHByb2dyZXNzIGNvdW50ICovXHJcbiAgcHVibGljIG5hdlByb2dyZXNzQ291bnQ6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKiBUaGUgY3VycmVudCBhY3RpdmUgcGFyZW50IG5vZGUgKi9cclxuICBwdWJsaWMgYWN0aXZlUGFyZW50Tm9kZTogTmF2Tm9kZTtcclxuXHJcbiAgLyoqIFRoZSBjdXJyZW50IGFjdGl2ZSBzdWIgbm9kZSAqL1xyXG4gIHB1YmxpYyBhY3RpdmVTdWJOb2RlOiBTdWJOYXZOb2RlcztcclxuXHJcbiAgLyoqIFRydWUgaWYgdGhlIGV4cGFuc2lvbiBwYW5lbCBpcyBvcGVuICovXHJcbiAgcHVibGljIHBhbmVsT3BlblN0YXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBUaGUgZm9vdGVyIG5hdmlnYXRpb24gZGF0YSAqL1xyXG4gIHB1YmxpYyBmb290ZXJOYXZpZ2F0aW9uRGF0YTogTmF2Tm9kZVtdXHJcblxyXG4gIC8qKiB1c2VyIG5hbWUgKiovXHJcbiAgcHVibGljIHVzZXJOYW1lOiBzdHJpbmc7XHJcblxyXG4gIC8qKiBUaGUgY29uZmlnIG9ic2VydmFibGUgKi9cclxuICBwdWJsaWMgY29uZmlnJDogT2JzZXJ2YWJsZTxCYXNlQ29uZmlnPjtcclxuXHJcbiAgLyoqIFRoZSBwYXJlbnQgbm9kZSBpbmRleCB0byBiZSBzZXQgd2hlbiBuYXYgaXMgdG9nZ2xlZCB0byBwcm9ncmVzcyBtZW51IHN0eWxlICovXHJcbiAgcHVibGljIHRvZ2dsZVByb2dyZXNzTmF2UGFyZW50SW5kZXg6IG51bWJlcjtcclxuXHJcbiAgLyoqIFRoZSBjaGlsZCBub2RlIGluZGV4IHRvIGJlIHNldCB3aGVuIG5hdiBpcyB0b2dnbGVkIHRvIHByb2dyZXNzIG1lbnUgc3R5bGUgKi9cclxuICBwdWJsaWMgdG9nZ2xlUHJvZ3Jlc3NOYXZDaGlsZEluZGV4OiBudW1iZXI7XHJcblxyXG4gIC8qKiB0aGUgbW9iaWxlIHF1ZXJ5IGxpc3RlbmVyMiAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX21vYmlsZVF1ZXJ5TGlzdGVuZXI6ICgpID0+IHZvaWQ7XHJcblxyXG4gIC8qKiBUaGUgbmF2IGJpbmQgc3Vic2NyaXB0aW9uICovXHJcbiAgcHJpdmF0ZSBuYXZCaW5kU3ViOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gIC8qKiBUaGUgbWVzc2FnZSB0byBkaXNwbGF5ICovXHJcbiAgcHVibGljIG1lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgLyoqIFdoZXRoZXIgd2Ugc2hvdWxkIHRoZSBtZXNzYWdlICovXHJcbiAgcHVibGljIHNob3dNZXNzYWdlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBXaGV0aGVyIHNob3VsZCBzaG93IGNoZWNrIG1hcmsgb3Igbm90ICovXHJcbiAgcHVibGljIHNob3dDaGVja01hcms6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKiogVGhlIG5hdiBiaW5kIHN1YnNjcmlwdGlvbiAqL1xyXG4gIHByaXZhdGUgbG9nSW5TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgLyoqIFRoZSBjb3VudCBvZiBmb290ZXIgaXRlbXMqL1xyXG4gIHB1YmxpYyBmb290ZXJJdGVtQ291bnQ6IG51bWJlcjtcclxuXHJcbiAgLyoqIFRoZSBiYW5uZXIgc3Vic2NyaXB0aW9uICovXHJcbiAgcHJpdmF0ZSBiYW5uZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgLyoqIFRoZSBjb25maWcgc3Vic2NyaXB0aW9uICovXHJcbiAgcHVibGljIGNvbmZpZ1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuICAvKiogVGhlIHNpZGVuYXYgc3Vic2NyaXB0aW9uICovXHJcbiAgcHJpdmF0ZSBzaWRlTmF2U3ViOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIHRoZSBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBjaGFuZ2VEZXRlY3RvclJlZiB0aGUgY2hhbmdlIGRldGVjdG9yIHJlZmVyZW5jZVxyXG4gICAqIEBwYXJhbSBtZWRpYSB0aGUgbWVkaWEgbWF0Y2hlclxyXG4gICAqIEBwYXJhbSByb3V0ZXIgVGhlIHJvdXRlclxyXG4gICAqIEBwYXJhbSBiYW5uZXJTZXJ2aWNlIFRoZSBCYW5uZXIgU2VydmljZVxyXG4gICAqIEBwYXJhbSBhY3RpdmF0ZWRSb3V0ZSBUaGUgYWN0aXZhdGVkIHJvdXRlXHJcbiAgICogQHBhcmFtIGNvbmZpZ1NlcnZpY2UgVGhlIGNvbmZpZyBzZXJ2aWNlXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICByZWFkb25seSBtZWRpYTogTWVkaWFNYXRjaGVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYmFubmVyU2VydmljZTogQmFubmVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBCYXNlQ29uZmlnU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5tb2JpbGVRdWVyeSA9IG1lZGlhLm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDk1OXB4KScpO1xyXG4gICAgdGhpcy5fbW9iaWxlUXVlcnlMaXN0ZW5lciA9ICgpID0+IHtcclxuICAgICAgY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAvLyBjbG9zZSB0aGUgc2lkZW5hdiB3aGVuIHNjcmVlbiBzaXplIGlzIGNoYW5nZWRcclxuICAgICAgaWYgKCF0aGlzLm1vYmlsZVF1ZXJ5Lm1hdGNoZXMgJiYgdGhpcy5zZXR0aW5ncy5tZW51U3R5bGUgPT09ICdwcm9ncmVzcycpIHtcclxuICAgICAgICB0aGlzLnNpZGVuYXYuY2xvc2UoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8vIGJlbG93IGlmIHN0YXRlbWVudCBpcyBmb3IgZWRnZSBzdXBwb3J0IHNpbmNlIGFkZEV2ZW50TGlzdGVuZXIgZG9lc24ndCBleGlzdCBmb3IgTWVkaWFRdWVyeUxpc3RzXHJcbiAgICBpZiAodGhpcy5tb2JpbGVRdWVyeS5hZGRFdmVudExpc3RlbmVyKSB7XHJcbiAgICAgIHRoaXMubW9iaWxlUXVlcnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fbW9iaWxlUXVlcnlMaXN0ZW5lcik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5tb2JpbGVRdWVyeS5hZGRMaXN0ZW5lcih0aGlzLl9tb2JpbGVRdWVyeUxpc3RlbmVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBPbiBJbml0IC0gY29uZmlndXJlIHRoZSBzZXR0aW5ncyAqL1xyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmJhbm5lclN1YnNjcmlwdGlvbi5hZGQodGhpcy5iYW5uZXJTZXJ2aWNlLnNob3dCYW5uZXIkLnN1YnNjcmliZSh2YWwgPT4gdGhpcy5zaG93TWVzc2FnZSA9IHZhbCkpO1xyXG4gICAgdGhpcy5iYW5uZXJTdWJzY3JpcHRpb24uYWRkKHRoaXMuYmFubmVyU2VydmljZS5tZXNzYWdlJC5zdWJzY3JpYmUodmFsID0+IHRoaXMubWVzc2FnZSA9IHZhbCkpO1xyXG4gICAgdGhpcy5iYW5uZXJTdWJzY3JpcHRpb24uYWRkKHRoaXMuYmFubmVyU2VydmljZS5zaG93Q2hlY2tNYXJrJC5zdWJzY3JpYmUodmFsID0+IHRoaXMuc2hvd0NoZWNrTWFyayA9IHZhbCkpO1xyXG5cclxuICAgIHRoaXMuZm9vdGVyTmF2aWdhdGlvbkRhdGEgPSB0aGlzLm5hdmlnYXRpb25EYXRhPy5maWx0ZXIobm9kZSA9PiBub2RlPy5hbHRMb2NhdGlvbiA9PSB0cnVlKTtcclxuICAgIHRoaXMuZm9vdGVySXRlbUNvdW50ID0gdGhpcy5mb290ZXJOYXZpZ2F0aW9uRGF0YSA/IHRoaXMuZm9vdGVyTmF2aWdhdGlvbkRhdGEubGVuZ3RoIDogMDtcclxuICAgIHRoaXMubmF2aWdhdGlvbkRhdGEgPSB0aGlzLm5hdmlnYXRpb25EYXRhPy5maWx0ZXIobm9kZSA9PiBub2RlPy5hbHRMb2NhdGlvbiAhPSB0cnVlKTtcclxuXHJcbiAgICAvLyBpZiBwYXJlbnRzIGhhdmUgbm8gcm91dGUsIGdyYWIgZmlyc3Qgcm91dGUgb2YgY2hpbGRcclxuICAgIHRoaXMubmF2aWdhdGlvbkRhdGE/LmZvckVhY2gobiA9PiB7XHJcbiAgICAgIGlmICghbi5yb3V0ZSkge1xyXG4gICAgICAgIG4ucm91dGUgPSBuLnN1Yk5vZGVzICYmIG4uc3ViTm9kZXMubGVuZ3RoID4gMCA/IG4uc3ViTm9kZXNbMF0ucm91dGUgOiB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZW5hYmxlIGFsbCBwYWdlcyBieSBkZWZhdWx0XHJcbiAgICAgIGlmIChuLmlzRGlzYWJsZWQgPT0gbnVsbCkge1xyXG4gICAgICAgIG4uaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmluaXRCYXNpY1NldHRpbmdzKCk7XHJcbiAgICB0aGlzLmluaXRBZHZhbmNlZFNldHRpbmdzKCk7XHJcbiAgICB0aGlzLmluaXRUaGVtZVNldHRpbmdzKCk7XHJcblxyXG4gICAgLy8gaW5pdCBiaW5kaW5nIGZvciBwcm9ncmVzcyBuYXZcclxuICAgIGlmICh0aGlzLnNldHRpbmdzLm1lbnVTdHlsZSA9PT0gJ3Byb2dyZXNzJykge1xyXG4gICAgICAvLyBzZXQgdGhlIGZpcnN0IG5vZGUgYW5kIGNoaWxkIG5vZGUgYXMgdmlzaXRlZFxyXG4gICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uRGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRGF0YVswXS52aXNpdGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm5hdmlnYXRlKHRoaXMubmF2aWdhdGlvbkRhdGFbMF0ucm91dGUpO1xyXG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb25EYXRhWzBdLnN1Yk5vZGVzICYmIHRoaXMubmF2aWdhdGlvbkRhdGFbMF0uc3ViTm9kZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRGF0YVswXS5zdWJOb2Rlc1swXS52aXNpdGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubmF2aWdhdGUodGhpcy5uYXZpZ2F0aW9uRGF0YVswXS5zdWJOb2Rlc1swXS5yb3V0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzZXQgaW5pdGlhbCBwcm9ncmVzcyBiYXJcclxuICAgICAgdGhpcy5uYXZQcm9ncmVzc0NvdW50ID0gKHRoaXMuc2VsZWN0ZWRQYXJlbnRJbmRleCArIDEpIC8gdGhpcy5uYXZpZ2F0aW9uRGF0YS5sZW5ndGggKiAxMDA7XHJcblxyXG5cclxuICAgICAgdGhpcy5uYXZCaW5kU3ViLmFkZChcclxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGZpbmQgcGFyZW50IGluZGV4IHdpdGggYWN0aXZlIGNoaWxkXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QWN0aXZlUGFyZW50QW5kQ2hpbGQoZXZlbnQudXJsKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLnNldHRpbmdzLmFsbG93TmF2VG9nZ2xlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvZ0luU3Vic2NyaXB0aW9uID0gdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5pc0xvZ2dlZEluJC5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnVzZXJOYW1lID0gdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS51c2VyTmFtZSgpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UpIHtcclxuICAgICAgdGhpcy5jb25maWdTdWJzY3JpcHRpb24gPSB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnJC5zdWJzY3JpYmUoY29uZmlnID0+IHtcclxuICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZz8ubmF2aWdhdGlvbj8ubm9kZXMpIHtcclxuICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkRhdGEgPSBjb25maWc/Lm5hdmlnYXRpb24/Lm5vZGVzO1xyXG4gICAgICAgICAgaWYgKGNvbmZpZz8ubmF2aWdhdGlvbj8uc2V0dGluZ3M/LnJlc2V0TmF2KSB7XHJcbiAgICAgICAgICAgIHRoaXMubmF2UHJvZ3Jlc3NDb3VudCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRJbmRleCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGUodGhpcy5uYXZpZ2F0aW9uRGF0YVswXS5yb3V0ZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0ZXBwZXIpIHtcclxuICAgICAgICAgICAgICB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBwZXIucmVzZXQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5uZXJTdGVwcGVycz8uZm9yRWFjaChzdGVwcGVyID0+IHtcclxuICAgICAgICAgICAgICAgICAgc3RlcHBlci5zZWxlY3RlZEluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgc3RlcHBlci5yZXNldCgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRGF0YS5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgICAgICAgIG4udmlzaXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIG4uY29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBuLnN1Yk5vZGVzPy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcy52aXNpdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBzLmNvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIHJlc2V0IGJhY2sgdG8gZmFsc2UgdG8gYXZvaWQgbXVsdGlwbGUgdHJpZ2dlcnMgb24gZnV0dXJlIGNhbGxzXHJcbiAgICAgICAgICAgIGNvbmZpZy5uYXZpZ2F0aW9uLnNldHRpbmdzLnJlc2V0TmF2ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWcgPSBjb25maWc7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gaWYgdGhlIHZhbHVlcyB3ZXJlIGNoYW5nZWQgYW5kIG5vdCBudWxsLCBpdCBtZWFucyB0aGF0IHRoZSBuYXYgd2FzIHRvZ2dsZWQgdG8gcHJvZ3Jlc3NcclxuICAgICAgICAgIGlmIChjb25maWc/Lm5hdmlnYXRpb24/LnNldHRpbmdzPy50b2dnbGVQcm9ncmVzc05hdlBhcmVudEluZGV4ICE9IG51bGxcclxuICAgICAgICAgICAgJiYgdGhpcy50b2dnbGVQcm9ncmVzc05hdlBhcmVudEluZGV4ICE9IGNvbmZpZz8ubmF2aWdhdGlvbj8uc2V0dGluZ3M/LnRvZ2dsZVByb2dyZXNzTmF2UGFyZW50SW5kZXhcclxuICAgICAgICAgICAgJiYgdGhpcy50b2dnbGVQcm9ncmVzc05hdkNoaWxkSW5kZXggIT0gY29uZmlnPy5uYXZpZ2F0aW9uPy5zZXR0aW5ncz8udG9nZ2xlUHJvZ3Jlc3NOYXZDaGlsZEluZGV4XHJcbiAgICAgICAgICAgICYmIGNvbmZpZz8ubmF2aWdhdGlvbj8uc2V0dGluZ3M/LnRvZ2dsZVByb2dyZXNzTmF2Q2hpbGRJbmRleCAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVByb2dyZXNzTmF2UGFyZW50SW5kZXggPSBjb25maWcubmF2aWdhdGlvbi5zZXR0aW5ncy50b2dnbGVQcm9ncmVzc05hdlBhcmVudEluZGV4O1xyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVByb2dyZXNzTmF2Q2hpbGRJbmRleCA9IGNvbmZpZy5uYXZpZ2F0aW9uLnNldHRpbmdzLnRvZ2dsZVByb2dyZXNzTmF2Q2hpbGRJbmRleDtcclxuXHJcbiAgICAgICAgICAgIC8vIGFkZCB0aGUgcm91dGVyIHN1YlxyXG4gICAgICAgICAgICB0aGlzLm5hdkJpbmRTdWIuYWRkKFxyXG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgLy8gZmluZCBwYXJlbnQgaW5kZXggd2l0aCBhY3RpdmUgY2hpbGRcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBY3RpdmVQYXJlbnRBbmRDaGlsZChldmVudC51cmwpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgLy8gaWYgdGhlIGNoaWxkIG5vZGUgaW5kZXggaXMgdmFsaWRcclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5uYXZpZ2F0aW9uLm5vZGVzW3RoaXMudG9nZ2xlUHJvZ3Jlc3NOYXZQYXJlbnRJbmRleF0uc3ViTm9kZXM/Lmxlbmd0aCA+IHRoaXMudG9nZ2xlUHJvZ3Jlc3NOYXZDaGlsZEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXROb2RlU3RhdGVzKGNvbmZpZy5uYXZpZ2F0aW9uLm5vZGVzW3RoaXMudG9nZ2xlUHJvZ3Jlc3NOYXZQYXJlbnRJbmRleF0sXHJcbiAgICAgICAgICAgICAgICBjb25maWcubmF2aWdhdGlvbi5ub2Rlc1t0aGlzLnRvZ2dsZVByb2dyZXNzTmF2UGFyZW50SW5kZXhdLnN1Yk5vZGVzW3RoaXMudG9nZ2xlUHJvZ3Jlc3NOYXZDaGlsZEluZGV4XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXROb2RlU3RhdGVzKGNvbmZpZy5uYXZpZ2F0aW9uLm5vZGVzW3RoaXMudG9nZ2xlUHJvZ3Jlc3NOYXZQYXJlbnRJbmRleF0sIG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBpbmRleGVzXHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUHJvZ3Jlc3NOYXZQYXJlbnRJbmRleCA9IGNvbmZpZz8ubmF2aWdhdGlvbj8uc2V0dGluZ3M/LnRvZ2dsZVByb2dyZXNzTmF2UGFyZW50SW5kZXhcclxuICAgICAgICAgICAgdGhpcy50b2dnbGVQcm9ncmVzc05hdkNoaWxkSW5kZXggPSBjb25maWc/Lm5hdmlnYXRpb24/LnNldHRpbmdzPy50b2dnbGVQcm9ncmVzc05hdkNoaWxkSW5kZXg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBMaWZlIGN5Y2xlIGhvb2sgZm9yIGFmdGVyIGNvbXBvbmVudCB2aWV3IGluaXRpYWxpemF0aW9uICovXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNldHRpbmdzLm1lbnVTdHlsZSA9PT0gJ3N0ZXBwZXInKSB7XHJcbiAgICAgIHRoaXMuYmluZFN0ZXBwZXJUb1JvdXRlcygpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnN0ZXBwZXIuc3RlcHMuZm9yRWFjaCgoc3RlcCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIHN0ZXAuc2VsZWN0ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50SW5kZXggPSBpbmRleDtcclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZSh0aGlzLm5hdmlnYXRpb25EYXRhW2luZGV4XS5yb3V0ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5pbm5lclN0ZXBwZXJzLmZvckVhY2goKHN0ZXBwZXIsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICBzdGVwcGVyLnN0ZXBzLmZvckVhY2goKHN0ZXAsIGppbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBzdGVwLnNlbGVjdCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpbGRJbmRleGVzW2luZGV4XSA9IGppbmRleDtcclxuICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlKHRoaXMubmF2aWdhdGlvbkRhdGFbaW5kZXhdLnN1Yk5vZGVzW2ppbmRleF0ucm91dGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNpZGVOYXZTdWIgPSB0aGlzLnNpZGVuYXYub3BlbmVkQ2hhbmdlLnN1YnNjcmliZShkcmF3ZXJTdGF0ZSA9PiB7XHJcbiAgICAgIHRoaXMuaXNOYXZPcGVuID0gZHJhd2VyU3RhdGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBPbiBEZXN0cm95ICovXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2JpbGVRdWVyeS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9tb2JpbGVRdWVyeUxpc3RlbmVyKTtcclxuICAgIHRoaXMubmF2QmluZFN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5sb2dJblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5iYW5uZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuY29uZmlnU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnNpZGVOYXZTdWIudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vYmlsZSBTdWJOYXYgLSBvcGVuIHRoZSBTdWJOYXZcclxuICAgKiBAcGFyYW0gbmF2IHRoZSBuYXYgZGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIFN1Yk5hdlxyXG4gICAqL1xyXG4gIHB1YmxpYyBvcGVuTW9iaWxlU3ViTmF2KG5hdjogTmF2Tm9kZSk6IHZvaWQge1xyXG4gICAgdGhpcy5pc01vYmlsZVN1Yk5hdk9wZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5jdXJyZW50TW9iaWxlTmF2ID0gbmF2O1xyXG4gICAgdGhpcy5zaWRlbmF2Lm9wZW4oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vYmlsZSBTdWJOYXYgLSBjbG9zZXMgdGhlIFN1Yk5hdlxyXG4gICAqL1xyXG4gIHB1YmxpYyBjbG9zZU1vYmlsZVN1Yk5hdigpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNNb2JpbGVTdWJOYXZPcGVuID0gZmFsc2U7XHJcbiAgICB0aGlzLnNpZGVuYXYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHRoZW1lIGNvbG9yXHJcbiAgICogQHBhcmFtIHZhcmlhYmxlIHRoZSBjc3MgdmFyaWFibGUgbmFtZVxyXG4gICAqIEBwYXJhbSBjb2xvciB0aGUgY29sb3JcclxuICAgKi9cclxuICBwdWJsaWMgc2V0VGhlbWVDb2xvcih2YXJpYWJsZTogc3RyaW5nLCBjb2xvcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoYC0tc29mLW5hdi0ke3ZhcmlhYmxlfWAsIGNvbG9yKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgdGhlIHN0ZXAgc3RhdGVcclxuICAgKiBAcGFyYW0gcGFyZW50SW5kZXggVGhlIHBhcmVudCBpbmRleFxyXG4gICAqIEBwYXJhbSBjaGlsZEluZGV4IFRoZSBjaGlsZCBpbmRleFxyXG4gICAqIEByZXR1cm5zIFRoZSBzdGVwIHN0YXRlXHJcbiAgICovXHJcbiAgcHVibGljIGRldGVybWluZVN0ZXBTdGF0ZShwYXJlbnRJbmRleDogbnVtYmVyLCBjaGlsZEluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgLy8gbm90IHBhc3NlZCAmJiBub3QgYWN0aXZlXHJcbiAgICBpZiAoY2hpbGRJbmRleCA9PT0gLTEpIHtcclxuICAgICAgaWYgKCF0aGlzLnN0ZXBwZXIpIHtcclxuICAgICAgICByZXR1cm4gJ251bWJlcic7XHJcbiAgICAgIH1cclxuICAgICAgLy8gbm90IHBhc3NlZCAmJiBhY3RpdmVcclxuICAgICAgaWYgKHBhcmVudEluZGV4ID09PSB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCkge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkRhdGFbcGFyZW50SW5kZXhdLnZpc2l0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gJ2FjdGl2ZSc7XHJcbiAgICAgIH1cclxuICAgICAgLy8gcGFzc2VkIGJ1dCBuYXYgYmFja1xyXG4gICAgICBlbHNlIGlmIChwYXJlbnRJbmRleCA+IHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4ICYmIHRoaXMubmF2aWdhdGlvbkRhdGFbcGFyZW50SW5kZXhdLnZpc2l0ZWQpIHtcclxuICAgICAgICB0aGlzLnN0ZXBwZXIuc3RlcHMuZmluZCgocywgaW5kZXgpID0+IGluZGV4ID09PSBwYXJlbnRJbmRleClcclxuICAgICAgICAgIC5yZXNldCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gJ2FjdGl2ZSc7XHJcbiAgICAgIH1cclxuICAgICAgLy8gcGFzc2VkICYmIG5vdCBhY3RpdmVcclxuICAgICAgZWxzZSBpZiAocGFyZW50SW5kZXggPCB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCkge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkRhdGFbcGFyZW50SW5kZXhdLnZpc2l0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gJ2RvbmUnO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAnbnVtYmVyJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5pbm5lclN0ZXBwZXJzKSB7XHJcbiAgICAgICAgcmV0dXJuICdub25lJztcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbm5lclN0ZXBwZXIgPSB0aGlzLmlubmVyU3RlcHBlcnMuZmluZCgocywgaW5kZXgpID0+IGluZGV4ID09PSBwYXJlbnRJbmRleCk7XHJcbiAgICAgIGlmIChjaGlsZEluZGV4ID09PSBpbm5lclN0ZXBwZXIuc2VsZWN0ZWRJbmRleCkge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkRhdGFbcGFyZW50SW5kZXhdLnN1Yk5vZGVzW2NoaWxkSW5kZXhdLnZpc2l0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gJ2FjdGl2ZSc7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoY2hpbGRJbmRleCA+IGlubmVyU3RlcHBlci5zZWxlY3RlZEluZGV4ICYmIHRoaXMubmF2aWdhdGlvbkRhdGFbcGFyZW50SW5kZXhdLnN1Yk5vZGVzW2NoaWxkSW5kZXhdLnZpc2l0ZWQpIHtcclxuICAgICAgICBpbm5lclN0ZXBwZXIuc3RlcHMuZmluZCgocywgaW5kZXgpID0+IGluZGV4ID09PSBjaGlsZEluZGV4KVxyXG4gICAgICAgICAgLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiAnYWN0aXZlJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChjaGlsZEluZGV4IDwgaW5uZXJTdGVwcGVyLnNlbGVjdGVkSW5kZXgpIHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRpb25EYXRhW3BhcmVudEluZGV4XS5zdWJOb2Rlc1tjaGlsZEluZGV4XS52aXNpdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuICdkb25lJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gJ25vbmUnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHByb3ZpZGVkIHJvdXRlXHJcbiAgICogQHBhcmFtIHJvdXRlIFRoZSByb3V0ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBuYXZpZ2F0ZShyb3V0ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWZsb2F0aW5nLXByb21pc2VzXHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJvdXRlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5hdmlnYXRlcyB0byBnaXZlbiBzdGVwXHJcbiAgICogQHBhcmFtIHN0ZXBOdW1iZXIgVGhlIHN0ZXAgbnVtYmVyIHRvIG5hdmlnYXRlIHRvXHJcbiAgICovXHJcbiAgcHVibGljIG5hdmlnYXRlVG9TdGVwKHN0ZXBOdW1iZXI6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHN0ZXBOdW1iZXIgPCB0aGlzLnNlbGVjdGVkUGFyZW50SW5kZXgpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1mbG9hdGluZy1wcm9taXNlc1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMubmF2aWdhdGlvbkRhdGFbc3RlcE51bWJlcl0ucm91dGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgYWN0aXZlIHBhcmVudCBhbmQgY2hpbGQgbm9kZXMgXHJcbiAgICogQHBhcmFtIHVybCBUaGUgcm91dGVyIHVybFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRBY3RpdmVQYXJlbnRBbmRDaGlsZCh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGNoaWxkSW5kZXg7XHJcbiAgICBsZXQgcGFyZW50SW5kZXggPSB0aGlzLm5hdmlnYXRpb25EYXRhLmZpbmRJbmRleChuID0+IHtcclxuICAgICAgY2hpbGRJbmRleCA9IG4uc3ViTm9kZXM/LmZpbmRJbmRleChzID0+IHVybC5pbmNsdWRlcyhzLnJvdXRlLnJlcGxhY2UoJy4nLCAnJykpKTtcclxuICAgICAgcmV0dXJuIGNoaWxkSW5kZXggPiAtMSB8fCB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMobi5yb3V0ZS5yZXBsYWNlKCcuJywgJycpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChwYXJlbnRJbmRleCA9PSAtMSkge1xyXG4gICAgICBwYXJlbnRJbmRleCA9IDBcclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXQgdGhlIGFjdGl2ZSBwYXJlbnQgbm9kZSBhbmQgc3ViIG5vZGVcclxuICAgIHRoaXMuYWN0aXZlUGFyZW50Tm9kZSA9IHRoaXMubmF2aWdhdGlvbkRhdGFbcGFyZW50SW5kZXhdO1xyXG4gICAgdGhpcy5hY3RpdmVTdWJOb2RlID0gY2hpbGRJbmRleCA+IC0xICYmIHRoaXMuYWN0aXZlUGFyZW50Tm9kZS5zdWJOb2Rlcy5sZW5ndGggPiAwID8gdGhpcy5hY3RpdmVQYXJlbnROb2RlLnN1Yk5vZGVzW2NoaWxkSW5kZXhdIDogbnVsbDtcclxuXHJcbiAgICAvLyBjb21wdXRlIHRoZSBwcm9ncmVzcyBiYXJcclxuICAgIHRoaXMubmF2UHJvZ3Jlc3NDb3VudCA9IChwYXJlbnRJbmRleCArIDEpIC8gdGhpcy5uYXZpZ2F0aW9uRGF0YS5sZW5ndGggKiAxMDA7XHJcblxyXG4gICAgLy8gc2V0IHRoZSBub2RlIHN0YXRlc1xyXG4gICAgdGhpcy5zZXROb2RlU3RhdGVzKHRoaXMuYWN0aXZlUGFyZW50Tm9kZSwgdGhpcy5hY3RpdmVTdWJOb2RlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGNvbXBsZXRlIGFuZCB2aXNpdGVkIHN0YXRlcyBmb3IgYWxsIE5hdk5vZGVzIFxyXG4gICAqIEBwYXJhbSBwYXJlbnROb2RlIFRoZSBwYXJlbnQgbm9kZVxyXG4gICAqIEBwYXJhbSBjaGlsZE5vZGUgVGhlIGNoaWxkIG5vZGVcclxuICAgKi9cclxuICBwdWJsaWMgc2V0Tm9kZVN0YXRlcyhwYXJlbnROb2RlOiBOYXZOb2RlLCBjaGlsZE5vZGU6IFN1Yk5hdk5vZGVzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hpbGROb2RlKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlU3ViTm9kZSA9IGNoaWxkTm9kZTtcclxuICAgICAgbGV0IGNoaWxkSW5kZXggPSBwYXJlbnROb2RlLnN1Yk5vZGVzLmluZGV4T2YoY2hpbGROb2RlKSA+IC0xID8gcGFyZW50Tm9kZS5zdWJOb2Rlcy5pbmRleE9mKGNoaWxkTm9kZSkgOiAwO1xyXG4gICAgICAvLyBhbGwgc3Vibm9kZXMgYmVmb3JlIHRoaXMgd2VyZSBjb21wbGV0ZWQgYW5kIHZpc2l0ZWRcclxuICAgICAgcGFyZW50Tm9kZS5zdWJOb2Rlcy5zbGljZSgwLCBjaGlsZEluZGV4KS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIGVsZW1lbnQuY29tcGxldGUgPSB0cnVlO1xyXG4gICAgICAgIGVsZW1lbnQudmlzaXRlZCA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hY3RpdmVQYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcclxuICAgIC8vIHNldCBhbGwgcHJldmlvdXMgbm9kZXMgdG8gY29tcGxldGVcclxuICAgIGxldCBwYXJlbnRJbmRleCA9IHRoaXMubmF2aWdhdGlvbkRhdGEuaW5kZXhPZihwYXJlbnROb2RlKSA+IC0xID8gdGhpcy5uYXZpZ2F0aW9uRGF0YS5pbmRleE9mKHBhcmVudE5vZGUpIDogMDtcclxuICAgIHRoaXMubmF2aWdhdGlvbkRhdGEuc2xpY2UoMCwgcGFyZW50SW5kZXgpLmZvckVhY2goZCA9PiB7XHJcbiAgICAgIGQuY29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgLy8gc2V0IGFsbCBzdWJub2RlcyBvZiBwcmV2aW91cyBub2RlcyB0byBjb21wbGV0ZSBvbmx5IGlmIHRoZSBub2RlIHdhcyBub3QgZGlzYWJsZWRcclxuICAgICAgaWYgKCFkLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICBkLnN1Yk5vZGVzLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICBzLmNvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgIHMudmlzaXRlZCA9IHRydWU7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIC8vIHNldCB0aGUgY3VycmVudCBub2RlcyBhcyB2aXNpdGVkXHJcbiAgICBwYXJlbnROb2RlLnZpc2l0ZWQgPSB0cnVlO1xyXG4gICAgaWYgKGNoaWxkTm9kZSkge1xyXG4gICAgICBjaGlsZE5vZGUudmlzaXRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZXMgdGhlIGV4cGFuc2lvbiBwYW5lbCBhbmQgbmF2aWdhdGVzIHRvIHRoZSBnaXZlbiBub2RlXHJcbiAgICogQHBhcmFtIGVsIFRoZSBtYXQgZXhwYW5zaW9uIHBhbmVsIFxyXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgcGFyZW50IG5vZGUgaW5kZXggXHJcbiAgICovXHJcbiAgcHVibGljIGRpc2FibGVQYW5lbChlbCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgZWwuY2xvc2UoKTtcclxuICAgIHRoaXMubmF2aWdhdGUodGhpcy5uYXZpZ2F0aW9uRGF0YVtpbmRleF0ucm91dGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBIaWRlcyB0aGUgbWVzc2FnZVxyXG4gICovXHJcbiAgcHVibGljIGhpZGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dNZXNzYWdlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2dzIG91dCBvbmNlIHVzZXIgaXMgYXV0aG9yaXplZFxyXG4gICAqICovXHJcbiAgcHVibGljIGxvZ091dCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuYXV0aG9yaXplVXNlcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2VzIG1vYmlsZSBuYXZpZ2F0aW9uIGFmdGVyIHNlbGVjdGlvbi5cclxuICAgKi9cclxuICBwdWJsaWMgY2xvc2VOYXZpZ2F0aW9uRm9yTW9iaWxlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubW9iaWxlUXVlcnkubWF0Y2hlcykge1xyXG4gICAgICB0aGlzLnNpZGVuYXYuY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElzIHRoZSBuYXZpZ2F0aW9uIHNlbGVjdGVkXHJcbiAgICovXHJcbiAgcHVibGljIGlzTmF2U2VsZWN0ZWQobm9kZTogTmF2Tm9kZSB8IFN1Yk5hdk5vZGVzKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIuaXNBY3RpdmUobm9kZS5yb3V0ZSwge3BhdGhzOiAnZXhhY3QnLCBxdWVyeVBhcmFtczogJ2V4YWN0JywgZnJhZ21lbnQ6ICdpZ25vcmVkJywgbWF0cml4UGFyYW1zOiAnaWdub3JlZCd9KTtcclxuICB9XHJcblxyXG4gIC8qKiBTZXRzIHRoZSB3aWR0aCBmb3IgdGhlIHNpZGUgbmF2ICovXHJcbiAgcHVibGljIHNldE5hdldpZHRoKHdpZHRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHdpZHRoLmluY2x1ZGVzKCclJykgfHwgd2lkdGguaW5jbHVkZXMoJ3B4JykgPyB3aWR0aCA6IHdpZHRoICsgJ3B4JztcclxuICB9XHJcblxyXG4gIC8qKiBCaW5kcyB0aGUgc3RlcHBlciB0byB0aGUgcm91dGVyICovXHJcbiAgcHJpdmF0ZSBiaW5kU3RlcHBlclRvUm91dGVzKCk6IHZvaWQge1xyXG4gICAgLy8gZmluZCBwYXJlbnRzXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gZmluZCBwYXJlbnQgaW5kZXggd2l0aCBhY3RpdmUgY2hpbGRcclxuICAgICAgbGV0IGNoaWxkSW5kZXg7XHJcbiAgICAgIGxldCBwYXJlbnRJbmRleCA9IHRoaXMubmF2aWdhdGlvbkRhdGEuZmluZEluZGV4KG4gPT4ge1xyXG4gICAgICAgIGNoaWxkSW5kZXggPSBuLnN1Yk5vZGVzPy5maW5kSW5kZXgocyA9PiB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMocy5yb3V0ZS5yZXBsYWNlKCcuJywgJycpKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGlsZEluZGV4ID4gLTEgfHwgdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKG4ucm91dGUucmVwbGFjZSgnLicsICcnKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBpZiBubyBjaGlsZHJlbiBvciBubyBpbmRleGVzIGFjdGl2YXRlIGZpcnN0IHBhcmVudFxyXG4gICAgICBpZiAocGFyZW50SW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgcGFyZW50SW5kZXggPSAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkUGFyZW50SW5kZXggPSBwYXJlbnRJbmRleDtcclxuICAgICAgaWYgKGNoaWxkSW5kZXggPiAtMSkge1xyXG4gICAgICAgIHRoaXMuaW5uZXJTdGVwcGVycy5maW5kKChpcywgaW5kZXgpID0+IGluZGV4ID09PSBwYXJlbnRJbmRleCkuc2VsZWN0ZWRJbmRleCA9IGNoaWxkSW5kZXg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGZpbmQgcGFyZW50c1xyXG4gICAgdGhpcy5uYXZCaW5kU3ViLmFkZChcclxuICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IHtcclxuICAgICAgICAgIC8vIGZpbmQgcGFyZW50IGluZGV4IHdpdGggYWN0aXZlIGNoaWxkXHJcbiAgICAgICAgICBsZXQgY2hpbGRJbmRleDtcclxuICAgICAgICAgIGxldCBwYXJlbnRJbmRleCA9IHRoaXMubmF2aWdhdGlvbkRhdGEuZmluZEluZGV4KG4gPT4ge1xyXG4gICAgICAgICAgICBjaGlsZEluZGV4ID0gbi5zdWJOb2Rlcz8uZmluZEluZGV4KHMgPT4gZXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHMuaW5jbHVkZXMocy5yb3V0ZS5yZXBsYWNlKCcuJywgJycpKSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGRJbmRleCA+IC0xIHx8IGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzLmluY2x1ZGVzKG4ucm91dGUucmVwbGFjZSgnLicsICcnKSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vIGlmIG5vIGNoaWxkcmVuIG9yIG5vIGluZGV4ZXMgYWN0aXZhdGUgZmlyc3QgcGFyZW50XHJcbiAgICAgICAgICBpZiAocGFyZW50SW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHBhcmVudEluZGV4ID0gMDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50SW5kZXggPSBwYXJlbnRJbmRleDtcclxuICAgICAgICAgIGlmIChjaGlsZEluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5pbm5lclN0ZXBwZXJzLmZpbmQoKGlzLCBpbmRleCkgPT4gaW5kZXggPT09IHBhcmVudEluZGV4KS5zZWxlY3RlZEluZGV4ID0gY2hpbGRJbmRleDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKiBJbml0aWFsaXplcyB0aGUgYWR2YW5jZWQgbmF2IHNldHRpbmdzICovXHJcbiAgcHJpdmF0ZSBpbml0QWR2YW5jZWRTZXR0aW5ncygpOiB2b2lkIHtcclxuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5ncy50b3BHYXBEZXNrdG9wID0gdGhpcy5hZHZhbmNlZFNldHRpbmdzLnRvcEdhcERlc2t0b3AgfHwgMDtcclxuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5ncy50b3BHYXBNb2JpbGUgPSB0aGlzLmFkdmFuY2VkU2V0dGluZ3MudG9wR2FwTW9iaWxlIHx8IHRoaXMuc2V0dGluZ3MuaGVhZGVySGVpZ2h0O1xyXG4gICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzLm1hcmdpblRvcERlc2t0b3AgPSB0aGlzLmFkdmFuY2VkU2V0dGluZ3MubWFyZ2luVG9wRGVza3RvcCB8fCAwO1xyXG4gICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzLm1hcmdpblRvcE1vYmlsZSA9IHRoaXMuYWR2YW5jZWRTZXR0aW5ncy5tYXJnaW5Ub3BNb2JpbGUgfHwgMDtcclxuXHJcbiAgfVxyXG5cclxuICAvKiogSW5pdGlhbGl6ZXMgdGhlIG5hdiB0aGVtZSBzZXR0aW5ncyAqL1xyXG4gIHByaXZhdGUgaW5pdFRoZW1lU2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRoZW1lU2V0dGluZ3MuY29udGVudEJnQ29sb3IgPyB0aGlzLnNldFRoZW1lQ29sb3IoJ2NvbnRlbnQtYmctY29sb3InLCB0aGlzLnRoZW1lU2V0dGluZ3MuY29udGVudEJnQ29sb3IpIDogdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50aGVtZVNldHRpbmdzLmZvbnRDb2xvciA/IHRoaXMuc2V0VGhlbWVDb2xvcignZm9udC1jb2xvcicsIHRoaXMudGhlbWVTZXR0aW5ncy5mb250Q29sb3IpIDogdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50aGVtZVNldHRpbmdzLmZvbnRDb2xvciA9IHRoaXMudGhlbWVTZXR0aW5ncy5mb250Q29sb3IgfHwgJyMwMDAnO1xyXG4gICAgdGhpcy50aGVtZVNldHRpbmdzLm1vYmlsZUJnQ29sb3IgPSB0aGlzLnRoZW1lU2V0dGluZ3MubW9iaWxlQmdDb2xvciB8fCAnI2ZmZmZmZic7XHJcbiAgICB0aGlzLnRoZW1lU2V0dGluZ3MuYmdHcmFkaWVudENvbG9yMSA/IHRoaXMuc2V0VGhlbWVDb2xvcignYmctZ3JhZGllbnQtY29sb3ItMScsIHRoaXMudGhlbWVTZXR0aW5ncy5iZ0dyYWRpZW50Q29sb3IxKSA6IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudGhlbWVTZXR0aW5ncy5iZ0dyYWRpZW50Q29sb3IyID8gdGhpcy5zZXRUaGVtZUNvbG9yKCdiZy1ncmFkaWVudC1jb2xvci0yJywgdGhpcy50aGVtZVNldHRpbmdzLmJnR3JhZGllbnRDb2xvcjIpIDogdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50aGVtZVNldHRpbmdzLmJvcmRlclJpZ2h0Q29sb3IgPyB0aGlzLnNldFRoZW1lQ29sb3IoJ2JvcmRlci1yaWdodC1jb2xvcicsIHRoaXMudGhlbWVTZXR0aW5ncy5ib3JkZXJSaWdodENvbG9yKSA6IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudGhlbWVTZXR0aW5ncy5saXN0Qm9yZGVyQ29sb3IgPyB0aGlzLnNldFRoZW1lQ29sb3IoJ2xpc3QtYm9yZGVyLWNvbG9yJywgdGhpcy50aGVtZVNldHRpbmdzLmxpc3RCb3JkZXJDb2xvcikgOiB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRoZW1lU2V0dGluZ3MuaGlnaGxpZ2h0R3JhZGllbnQxID8gdGhpcy5zZXRUaGVtZUNvbG9yKCdoaWdobGlnaHQtZ3JhZGllbnQtMScsIHRoaXMudGhlbWVTZXR0aW5ncy5oaWdobGlnaHRHcmFkaWVudDEpIDogdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50aGVtZVNldHRpbmdzLmhpZ2hsaWdodEdyYWRpZW50MiA/IHRoaXMuc2V0VGhlbWVDb2xvcignaGlnaGxpZ2h0LWdyYWRpZW50LTInLCB0aGlzLnRoZW1lU2V0dGluZ3MuaGlnaGxpZ2h0R3JhZGllbnQyKSA6IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudGhlbWVTZXR0aW5ncy5zdWJIaWdobGlnaHRCb3JkZXJDb2xvciA/XHJcbiAgICAgIHRoaXMuc2V0VGhlbWVDb2xvcignc3ViLWhpZ2hsaWdodC1ib3JkZXItY29sb3InLCB0aGlzLnRoZW1lU2V0dGluZ3Muc3ViSGlnaGxpZ2h0Qm9yZGVyQ29sb3IpIDogdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50aGVtZVNldHRpbmdzLnN1YkhpZ2hsaWdodEJnQ29sb3IgP1xyXG4gICAgICB0aGlzLnNldFRoZW1lQ29sb3IoJ3N1Yi1oaWdobGlnaHQtYmctY29sb3InLCB0aGlzLnRoZW1lU2V0dGluZ3Muc3ViSGlnaGxpZ2h0QmdDb2xvcikgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKiogSW5pdGlhbGl6ZXMgdGhlIGJhc2ljIG5hdiBzZXR0aW5ncyAqL1xyXG4gIHByaXZhdGUgaW5pdEJhc2ljU2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldHRpbmdzLmZvbnRBd2Vzb21lTWVudUljb24gPSB0aGlzLnNldHRpbmdzLmZvbnRBd2Vzb21lTWVudUljb24gfHwgJ2ZhcyBmYS1hbmdsZS1kb3VibGUtbGVmdCc7XHJcbiAgICB0aGlzLnNldHRpbmdzLmZvbnRBd2Vzb21lTWVudUljb25DbG9zZWQgPSB0aGlzLnNldHRpbmdzLmZvbnRBd2Vzb21lTWVudUljb25DbG9zZWQgfHwgJ2ZhcyBmYS1hbmdsZS1kb3VibGUtcmlnaHQnO1xyXG4gICAgdGhpcy5zZXR0aW5ncy5hbGxvd05hdlRvZ2dsZSA9IHRoaXMuc2V0dGluZ3MuYWxsb3dOYXZUb2dnbGUgPT0gbnVsbCA/IHRydWUgOiB0aGlzLnNldHRpbmdzLmFsbG93TmF2VG9nZ2xlO1xyXG4gICAgdGhpcy5zZXR0aW5ncy5tYWluTWVudVRleHQgPyB0aGlzLm1haW5NZW51VGV4dCA9IHRoaXMuc2V0dGluZ3MubWFpbk1lbnVUZXh0IDogdGhpcy5tYWluTWVudVRleHQgPSAnTWFpbiBNZW51JztcclxuICAgIHRoaXMuc2V0dGluZ3MuaGVhZGVySGVpZ2h0ID0gdGhpcy5zZXR0aW5ncy5oZWFkZXJIZWlnaHQgfHwgNjA7XHJcbiAgICB0aGlzLnNldHRpbmdzLm1lbnVCdXR0b25TUlRleHQgPSB0aGlzLnNldHRpbmdzLm1lbnVCdXR0b25TUlRleHQgfHwgJ01lbnUgQnV0dG9uJztcclxuICAgIHRoaXMuc2V0dGluZ3MubWVudVN0eWxlID0gdGhpcy5zZXR0aW5ncy5tZW51U3R5bGUgfHwgJ3N0YXRpYyc7XHJcbiAgICB0aGlzLnNldHRpbmdzLmRpc3BsYXlOdW1iZXJzID0gdGhpcy5zZXR0aW5ncy5kaXNwbGF5TnVtYmVycyA9PSBudWxsID8gdHJ1ZSA6IHRoaXMuc2V0dGluZ3MuZGlzcGxheU51bWJlcnM7XHJcbiAgICB0aGlzLnNldHRpbmdzLnByb2dyZXNzU2VjdGlvbkNvbXBsZXRlSWNvbiA9IHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NTZWN0aW9uQ29tcGxldGVJY29uIHx8ICdmYXMgZmEtY2hlY2stY2lyY2xlJztcclxuICAgIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NTZWN0aW9uRnV0dXJlSWNvbiA9IHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NTZWN0aW9uRnV0dXJlSWNvbiB8fCAnZmFyIGZhLWNpcmNsZSc7XHJcbiAgICB0aGlzLnNldHRpbmdzLnByb2dyZXNzU2VjdGlvbkN1cnJlbnRJY29uID0gdGhpcy5zZXR0aW5ncy5wcm9ncmVzc1NlY3Rpb25DdXJyZW50SWNvbiB8fCAnZmFzIGZhLWNpcmNsZSc7XHJcbiAgICB0aGlzLnNldHRpbmdzLnByb2dyZXNzTWVudUNvbXBsZXRlSWNvbiA9IHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NNZW51Q29tcGxldGVJY29uIHx8ICdmYXIgZmEtY2hlY2snO1xyXG4gICAgdGhpcy5zZXR0aW5ncy5zaG93UHJvZ3Jlc3NCYXIgPSB0aGlzLnNldHRpbmdzLnNob3dQcm9ncmVzc0JhciA9PSBudWxsID8gdHJ1ZSA6IHRoaXMuc2V0dGluZ3Muc2hvd1Byb2dyZXNzQmFyXHJcbiAgICB0aGlzLnNldHRpbmdzLnNpZGVOYXZXaWR0aERlc2t0b3AgPSB0aGlzLnNldHRpbmdzLnNpZGVOYXZXaWR0aERlc2t0b3AgfHwgJzM1MCc7XHJcbiAgICB0aGlzLnNldHRpbmdzLnNpZGVOYXZXaWR0aE1vYmlsZSA9IHRoaXMuc2V0dGluZ3Muc2lkZU5hdldpZHRoTW9iaWxlIHx8ICczNTAnO1xyXG4gICAgdGhpcy5zZXR0aW5ncy5vdmVycmlkZU5hdmlnYXRpb24gPSB0aGlzLnNldHRpbmdzLm92ZXJyaWRlTmF2aWdhdGlvbiB8fCBmYWxzZTtcclxuICAgIHRoaXMuc2V0dGluZ3MucHJvZ3Jlc3NNZW51V2lkdGggPSB0aGlzLnNldHRpbmdzLnByb2dyZXNzTWVudVdpZHRoIHx8ICcyODAnO1xyXG4gICAgdGhpcy5zZXR0aW5ncy51c2VDdXN0b21Nb2JpbGVGb290ZXIgPSB0aGlzLnNldHRpbmdzLnVzZUN1c3RvbU1vYmlsZUZvb3RlciAhPSBudWxsID8gdGhpcy5zZXR0aW5ncy51c2VDdXN0b21Nb2JpbGVGb290ZXIgOiBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInNvZi1hci1uYXYtY29udGFpbmVyXCJcclxuICAgICBbc3R5bGUudG9wXT1cIm1vYmlsZVF1ZXJ5Lm1hdGNoZXMgJiYgYWR2YW5jZWRTZXR0aW5ncy50b3BHYXBNb2JpbGUgPyBhZHZhbmNlZFNldHRpbmdzLnRvcEdhcE1vYmlsZSArICdweCcgOiBzZXR0aW5ncy5oZWFkZXJIZWlnaHQgKyAncHgnXCJcclxuICAgICBbY2xhc3Muc29mLWFyLW5hdi1tb2JpbGVdPVwibW9iaWxlUXVlcnkubWF0Y2hlc1wiPlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93TWVzc2FnZVwiIG0tYS0wIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgc3dzLWFsZXJ0LS1zZWNvbmRhcnkgcm9sZT1cImFsZXJ0XCI+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgIDxpICpuZ0lmPVwic2hvd0NoZWNrTWFya1wiIG0tci01IG0tbC01IGNsYXNzPVwiZmFzIGZhLWNoZWNrLWNpcmNsZSBpY29uLWNvbnRhaW5lclwiPjwvaT5cclxuICAgICAgPHAgY2xhc3M9XCJtZXNzYWdlLWNvbnRhaW5lclwiIG0tci01IG0tbC01IFtpbm5lckh0bWxdPVwibWVzc2FnZSB8IHRyYW5zbGF0ZVwiPjwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICA8YnV0dG9uIGlkPVwiYnRuQ2xvc2VcIiAoY2xpY2spPVwiaGlkZSgpXCIgbWF0LWljb24tYnV0dG9uIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2NvbW1vbi5jbG9zZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFsIGZhLXRpbWVzIGZhLWxnXCI+PC9pPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8YnV0dG9uIGlkPVwic29mLWFyLW5hdi1idG4tbWVudVwiIGFyaWEtbGFiZWw9XCJNZW51IEJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcclxuICAgICAgICAgIChjbGljayk9XCJzbmF2LnRvZ2dsZSgpXCIgY2xhc3M9XCJzb2YtYXItbmF2LW1lbnUtYnRuXCJcclxuICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIShtb2JpbGVRdWVyeS5tYXRjaGVzIHx8IHNldHRpbmdzLmFsbG93TmF2VG9nZ2xlKSB8fCBzZXR0aW5ncy5oaWRlTmF2aWdhdGlvblwiPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJpc05hdk9wZW47IGVsc2UgY2xvc2VkSWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwic29mLWFyLW5hdi1tZW51LWljb25cIj5cclxuICAgICAgPGkgY2xhc3M9XCJ7e3NldHRpbmdzLmZvbnRBd2Vzb21lTWVudUljb259fSBtZW51LWljb25cIj48L2k+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8bmctdGVtcGxhdGUgI2Nsb3NlZEljb24+XHJcbiAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwic29mLWFyLW5hdi1tZW51LWljb25cIj5cclxuICAgICAgICA8aSBjbGFzcz1cInt7c2V0dGluZ3MuZm9udEF3ZXNvbWVNZW51SWNvbkNsb3NlZH19IG1lbnUtaWNvblwiPjwvaT5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPnt7c2V0dGluZ3MubWVudUJ1dHRvblNSVGV4dCB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8bWF0LXNpZGVuYXYtY29udGFpbmVyIGF1dG9zaXplIGNsYXNzPVwic29mLWFyLW5hdi1zaWRlbmF2LWNvbnRhaW5lclwiIFtzdHlsZS5tYXJnaW5Ub3AucHhdPVwiXHJcbiAgICAgIG1vYmlsZVF1ZXJ5Lm1hdGNoZXMgPyBhZHZhbmNlZFNldHRpbmdzLm1hcmdpblRvcE1vYmlsZSA6IGFkdmFuY2VkU2V0dGluZ3MubWFyZ2luVG9wRGVza3RvcFwiPlxyXG4gICAgPG1hdC1zaWRlbmF2IFtkaXNhYmxlQ2xvc2VdPVwiIW1vYmlsZVF1ZXJ5Lm1hdGNoZXNcIiBjbGFzcz1cInNvZi1hci1uYXYtc2lkZW5hdlwiICNzbmF2IFttb2RlXT1cIm1vYmlsZVF1ZXJ5Lm1hdGNoZXMgPyAnb3ZlcicgOiAnc2lkZSdcIlxyXG4gICAgICAgICAgICAgICAgIFtmaXhlZEluVmlld3BvcnRdPVwibW9iaWxlUXVlcnkubWF0Y2hlc1wiIFtmaXhlZFRvcEdhcF09XCJtb2JpbGVRdWVyeS5tYXRjaGVzID8gYWR2YW5jZWRTZXR0aW5ncy50b3BHYXBNb2JpbGUgOiBhZHZhbmNlZFNldHRpbmdzLnRvcEdhcERlc2t0b3BcIlxyXG4gICAgICAgICAgICAgICAgIFtvcGVuZWRdPVwiIW1vYmlsZVF1ZXJ5Lm1hdGNoZXMgJiYgIXNldHRpbmdzLmhpZGVOYXZpZ2F0aW9uICYmIHNldHRpbmdzLm1lbnVTdHlsZSE9J3Byb2dyZXNzJyBcIlxyXG4gICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJtb2JpbGVRdWVyeS5tYXRjaGVzID8gc2V0TmF2V2lkdGgoc2V0dGluZ3Muc2lkZU5hdldpZHRoTW9iaWxlKSA6IHNldE5hdldpZHRoKHNldHRpbmdzLnNpZGVOYXZXaWR0aERlc2t0b3ApXCJcclxuICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7YmFja2dyb3VuZDptb2JpbGVRdWVyeS5tYXRjaGVzID8gdGhlbWVTZXR0aW5ncz8ubW9iaWxlQmdDb2xvciA6IHVuZGVmaW5lZH1cIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vYmlsZVF1ZXJ5Lm1hdGNoZXMgJiYgdXNlck5hbWUgJiYgIXNldHRpbmdzLmN1c3RvbVVzZXJOYW1lXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1c2VyLW5hbWVcIj5cclxuICAgICAgICAgIHt7dXNlck5hbWV9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2JpbGVRdWVyeS5tYXRjaGVzICYmIHNldHRpbmdzLmN1c3RvbVVzZXJOYW1lXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1c2VyLW5hbWVcIj5cclxuICAgICAgICAgIHt7c2V0dGluZ3MuY3VzdG9tVXNlck5hbWUgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS0gTmF2IEhlYWRlciBDb250ZW50IC0tPlxyXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc29mLWFyLW5hdi1oZWFkZXJdXCI+IDwvbmctY29udGVudD5cclxuXHJcbiAgICAgIDwhLS0gU3RhdGljIE5hdmlnYXRpb24gLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJuYXYtY29udGVudC1pdGVtIHNpZGVuYXYtYmFja2dyb3VuZFwiICpuZ0lmPVwic2V0dGluZ3MubWVudVN0eWxlID09PSAnc3RhdGljJ1wiIFtuZ1N0eWxlXT1cInsncGFkZGluZy1ib3R0b20ucHgnOiAoZm9vdGVySXRlbUNvdW50KjY0KSsxMjh9XCI+XHJcbiAgICAgICAgPG5hdiAqbmdJZj1cInNldHRpbmdzLm1lbnVTdHlsZSA9PT0gJ3N0YXRpYydcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidtYWluJ1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbmF2IG9mIG5hdmlnYXRpb25EYXRhXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJuYXY/LnN1Yk5vZGVzPy5sZW5ndGggJiYgIW5hdi5oaWRkZW5cIj5cclxuICAgICAgICAgICAgICA8bWF0LWFjY29yZGlvbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtleHBhbmRlZF09XCJuYXYuZXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIFtuZ0NsYXNzXT1cInsgJ3NvZi1hci1uYXYtc2VsZWN0ZWQnOiBpc05hdlNlbGVjdGVkKG5hdikgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTmF2aWdhdGlvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBJZiB0aGVyZSBpcyBhIHJvdXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hdj8ucm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1uYXYtbGlzdCBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCIgW2F0dHIucm9sZV09XCInbmF2aWdhdGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1pdGVtXCIgbWF0LWxpc3QtaXRlbSBbcm91dGVyTGlua109XCJuYXY/LnJvdXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCJbJ3NvZi1hci1uYXYtYWN0aXZlLXJvdXRlJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJuYXY/LmZvbnRBd2Vzb21lSWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImljb24tc3R5bGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwie3tuYXY/LmZvbnRBd2Vzb21lSWNvbn19XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic29mLWFyLW5hdi1oZWFkZXItdGV4dFwiPnt7bmF2LnRleHQgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW5hdi1saXN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIElmIHRoZXJlIGlzIG5vdCBhIHJvdXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFuYXY/LnJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbmF2LWxpc3QgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiIFthdHRyLnJvbGVdPVwiJ25hdmlnYXRpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInNvZi1hci1uYXYtYnRuLW5vZGVcIiBjbGFzcz1cIm5hdi1pdGVtXCIgbWF0LWxpc3QtaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiWydzb2YtYXItbmF2LWFjdGl2ZS1yb3V0ZSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibmF2Py5mb250QXdlc29tZUljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJpY29uLXN0eWxpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInt7bmF2Py5mb250QXdlc29tZUljb259fVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNvZi1hci1uYXYtaGVhZGVyLXRleHRcIj57e25hdi50ZXh0IHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW5hdi1saXN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gU3ViTmF2IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbmF2LWxpc3QgW25nQ2xhc3NdPVwieyAnc29mLWFyLW5hdi1zZWxlY3RlZCc6IGlzTmF2U2VsZWN0ZWQoc3VibmF2KSB9XCIgY2xhc3M9XCJzdWJuYXYtY29udGVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCIgKm5nRm9yPVwibGV0IHN1Ym5hdiBvZiBuYXY/LnN1Yk5vZGVzXCIgKGNsaWNrKT1cImNsb3NlTmF2aWdhdGlvbkZvck1vYmlsZSgpXCIgW2F0dHIucm9sZV09XCInbmF2aWdhdGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWl0ZW0gbmF2LWl0ZW0tbWFyZ2luXCIgbWF0LWxpc3QtaXRlbSBbcm91dGVyTGlua0FjdGl2ZV09XCJbJ3NvZi1hci1uYXYtc3ViLWFjdGl2ZS1yb3V0ZSddXCIgW3JvdXRlckxpbmtdPVwic3VibmF2LnJvdXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiJ25hdmlnYXRpb24nXCIgW2F0dHIuYXJpYS1sYWJlbF09XCIobmF2LnRleHQgfCB0cmFuc2xhdGUpICsgJyAnICsgKHN1Ym5hdi50ZXh0IHwgdHJhbnNsYXRlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNvZi1hci1uYXYtaGVhZGVyLXRleHRcIiBbYXR0ci5yb2xlXT1cIiduYXZpZ2F0aW9uJ1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihuYXYudGV4dCB8IHRyYW5zbGF0ZSkgKyAnICcgKyAoc3VibmF2LnRleHQgfCB0cmFuc2xhdGUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tzdWJuYXYudGV4dCB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1uYXYtbGlzdD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgICAgICAgICAgPC9tYXQtYWNjb3JkaW9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPCEtLSBJZiBzdWJub2RlcyBhcmUgbm90IHRoZXJlIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbmF2Py5zdWJOb2Rlcz8ubGVuZ3RoICYmICFuYXY/LmhpZGRlblwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBJZiB0aGVyZSBpcyBhIHJvdXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hdj8ucm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1uYXYtbGlzdCBbbmdDbGFzc109XCJ7ICdzb2YtYXItbmF2LXNlbGVjdGVkJzogaXNOYXZTZWxlY3RlZChuYXYpIH1cIiBjbGFzcz1cIm5hdi1oZWFkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIiAoY2xpY2spPVwiY2xvc2VOYXZpZ2F0aW9uRm9yTW9iaWxlKClcIiBbYXR0ci5yb2xlXT1cIm51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1pdGVtIG5hdi1pdGVtLW1hcmdpblwiIG1hdC1saXN0LWl0ZW0gW3JvdXRlckxpbmtdPVwibmF2Py5yb3V0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiWydzb2YtYXItbmF2LWFjdGl2ZS1yb3V0ZSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibmF2Py5mb250QXdlc29tZUljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJpY29uLXN0eWxpbmdcIj48aSBjbGFzcz1cInt7bmF2Py5mb250QXdlc29tZUljb259fVwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic29mLWFyLW5hdi1oZWFkZXItdGV4dFwiPnt7bmF2LnRleHQgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW5hdi1saXN0PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIElmIHRoZXJlIGlzIG5vdCBhIHJvdXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFuYXY/LnJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbmF2LWxpc3QgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiIFthdHRyLnJvbGVdPVwibnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJzb2YtYXItbmF2LWJ0bi1ub2RlXCIgY2xhc3M9XCJuYXYtaXRlbVwiIG1hdC1saXN0LWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIlsnc29mLWFyLW5hdi1hY3RpdmUtcm91dGUnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hdj8uZm9udEF3ZXNvbWVJY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiaWNvbi1zdHlsaW5nXCI+PGkgY2xhc3M9XCJ7e25hdj8uZm9udEF3ZXNvbWVJY29ufX1cIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNvZi1hci1uYXYtaGVhZGVyLXRleHRcIj57e25hdi50ZXh0IHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW5hdi1saXN0PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uYXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBTdGVwcGVyIC0tPlxyXG4gICAgICA8bWF0LXZlcnRpY2FsLXN0ZXBwZXIgKm5nSWY9XCJzZXR0aW5ncy5tZW51U3R5bGUgPT09ICdzdGVwcGVyJ1wiIFtzZWxlY3RlZEluZGV4XT1cInNlbGVjdGVkUGFyZW50SW5kZXhcIiAjdmVydFN0ZXBwZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5lYXJdPVwiZmFsc2VcIiBjbGFzcz1cInNpZGVuYXYtYmFja2dyb3VuZFwiPlxyXG4gICAgICAgIDwhLS0gQWx0ZXJuYXRlIHN0ZXAgc3RhdGVzIGZvciBuYXYsIGljYW9ucyBzaG91bGQgYWx3YXlzIGJlIHdoaXRlIG9ubHkgd29ya2VkIHdpdGggc3R5bGVzIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwcGVySWNvbj1cImNyZWF0ZVwiPlxyXG4gICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFkIGZhLXBlbmNpbC1hbHRcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50XCI+PC9pPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBwZXJJY29uPVwiZWRpdFwiPlxyXG4gICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFkIGZhLXBlbmNpbC1hbHRcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50XCI+PC9pPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBwZXJJY29uPVwiYWN0aXZlXCI+XHJcbiAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYWQgZmEtcGVuY2lsLWFsdFwiIHN0eWxlPVwiY29sb3I6IHdoaXRlICFpbXBvcnRhbnRcIj48L2k+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcHBlckljb249XCJkb25lXCI+XHJcbiAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2tcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50XCI+PC9pPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDwhLS0gbmF2IHN0ZXBzIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG5hdiBvZiBuYXZpZ2F0aW9uRGF0YTsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgPG1hdC1zdGVwICpuZ0lmPVwiIW5hdj8uaGlkZGVuXCIgc3RhdGU9XCJ7eyBkZXRlcm1pbmVTdGVwU3RhdGUoaSwgLTEpIH19XCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWwgKm5nSWY9XCIhbmF2LmhpZGRlblwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgaWQ9XCJkaXZTdGVwe3sgaSB9fVwiIHN0eWxlPVwiaGVpZ2h0OiA3MnB4XCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eyBuYXYudGV4dCB8IHRyYW5zbGF0ZSB9fVwiIFttYXRUb29sdGlwUG9zaXRpb25dPVwiJ2FmdGVyJ1wiIGZ4RmxleD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgIDxhIGlkPVwic3RlcHt7IGkgfX1cIiBmeEZsZXg9XCIxMDAlXCIgY2xhc3M9XCJtYXQtYnV0dG9uIHN0ZXAtbGlua1wiIFtyb3V0ZXJMaW5rXT1cIm5hdi5yb3V0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGNvbG9yOiB0aGVtZVNldHRpbmdzPy5mb250Q29sb3IgfVwiIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIlsnc3RlcC1hY3RpdmUnXVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBuYXYudGV4dCB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8cCBbaW5uZXJIVE1MXT1cIm5hdi5zdGVwQ29udGVudCB8IHRyYW5zbGF0ZVwiPjwvcD5cclxuICAgICAgICAgICAgPCEtLSBzdWIgbmF2IC0tPlxyXG4gICAgICAgICAgICA8bWF0LXZlcnRpY2FsLXN0ZXBwZXIgKm5nSWY9XCJuYXY/LnN1Yk5vZGVzXCIgW3NlbGVjdGVkSW5kZXhdPVwic2VsZWN0ZWRDaGlsZEluZGV4ZXNbaV1cIiBbbGluZWFyXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN2ZXJ0U3RlcHBlcklubmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gQWx0ZXJuYXRlIHN0ZXAgc3RhdGVzIGZvciBzdWIgbmF2LCBpY29ucyBzaG91bGQgYWx3YXlzIGJlIHdoaXRlIG9ubHkgd29ya2VkIHdpdGggc3R5bGVzIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwcGVySWNvbj1cImNyZWF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFkIGZhLXBlbmNpbC1hbHRcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBwZXJJY29uPVwiZWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFkIGZhLXBlbmNpbC1hbHRcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBwZXJJY29uPVwiZG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZWNrXCIgc3R5bGU9XCJjb2xvcjogd2hpdGUgIWltcG9ydGFudFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwcGVySWNvbj1cImFjdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBlbmNpbC1hbHRcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBwZXJJY29uPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPCEtLSBzdWIgbmF2IHN0ZXBzIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1Ym5hdiBvZiBuYXY/LnN1Yk5vZGVzOyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXN0ZXAgc3RhdGU9XCJ7eyBkZXRlcm1pbmVTdGVwU3RhdGUoaSwgaikgfX1cIiAqbmdJZj1cIiFzdWJuYXYuaGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImRpdlN1YlN0ZXB7eyBpIH19LXt7IGogfX1cIiBzdHlsZT1cImhlaWdodDogNzJweFwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwie3sgc3VibmF2LnRleHQgfCB0cmFuc2xhdGUgfX1cIiBbbWF0VG9vbHRpcFBvc2l0aW9uXT1cIidhZnRlcidcIiBmeEZsZXg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YSBpZD1cInN1YlN0ZXB7eyBpIH19LXt7IGogfX1cIiBjbGFzcz1cIm1hdC1idXR0b24gc3RlcC1saW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgY29sb3I6IHRoZW1lU2V0dGluZ3M/LmZvbnRDb2xvciB9XCIgW3JvdXRlckxpbmtdPVwic3VibmF2LnJvdXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIlsnc3RlcC1hY3RpdmUnXVwiPnt7IHN1Ym5hdi50ZXh0IHwgdHJhbnNsYXRlIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8cCBbaW5uZXJIVE1MXT1cInN1Ym5hdi5zdGVwQ29udGVudCB8IHRyYW5zbGF0ZVwiPjwvcD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LXN0ZXA+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8L21hdC12ZXJ0aWNhbC1zdGVwcGVyPlxyXG4gICAgICAgICAgPC9tYXQtc3RlcD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwvbWF0LXZlcnRpY2FsLXN0ZXBwZXI+XHJcblxyXG4gICAgICA8IS0tIE5hdiBGb290ZXIgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJuYXYtZm9vdGVyLWl0ZW1cIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2V0dGluZ3MubWVudVN0eWxlID09PSAnc3RhdGljJ1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbmF2IG9mIGZvb3Rlck5hdmlnYXRpb25EYXRhXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSBEZXNrdG9wIE5hdiAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5hdj8uc3ViTm9kZXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBJZiB0aGVyZSBpcyBhIHJvdXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hdj8ucm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1uYXYtbGlzdCBjbGFzcz1cIm5hdi1oZWFkZXJcIiBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtaXRlbSBuYXYtaXRlbS1tYXJnaW5cIiBtYXQtbGlzdC1pdGVtIFtyb3V0ZXJMaW5rXT1cIm5hdj8ucm91dGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIlsnc29mLWFyLW5hdi1hY3RpdmUtcm91dGUnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hdj8uZm9udEF3ZXNvbWVJY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiaWNvbi1zdHlsaW5nXCI+PGkgY2xhc3M9XCJ7e25hdj8uZm9udEF3ZXNvbWVJY29ufX1cIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e25hdi50ZXh0IHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW5hdi1saXN0PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIElmIHRoZXJlIGlzIG5vdCBhIHJvdXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFuYXY/LnJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbmF2LWxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInNvZi1hci1uYXYtYnRuLW5vZGVcIiBjbGFzcz1cIm5hdi1pdGVtXCIgbWF0LWxpc3QtaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiWydzb2YtYXItbmF2LWFjdGl2ZS1yb3V0ZSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibmF2Py5mb250QXdlc29tZUljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJpY29uLXN0eWxpbmdcIj48aSBjbGFzcz1cInt7bmF2Py5mb250QXdlc29tZUljb259fVwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7bmF2LnRleHQgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1uYXYtbGlzdD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5hdmlnYXRpb25Gb290ZXJcIj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSB0aGUgbW9iaWxlIHByb2dyZXNzIG1lbnUtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNldHRpbmdzPy5tZW51U3R5bGUgPT09ICdwcm9ncmVzcydcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZW5hdi1iYWNrZ3JvdW5kXCIgW25nU3R5bGVdPVwieydwYWRkaW5nLWJvdHRvbS5weCc6IChmb290ZXJJdGVtQ291bnQqNjQpKzEyOH1cIj5cclxuICAgICAgICAgIDxtYXQtYWNjb3JkaW9uPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdGVwIG9mIG5hdmlnYXRpb25EYXRhOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0ZXAuc3ViTm9kZXMgJiYgc3RlcC5zdWJOb2Rlcy5sZW5ndGggPiAwICYmICFzdGVwLmhpZGRlblwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgaGlkZVRvZ2dsZSBjbGFzcz1cInByb2dyZXNzLW1vYmlsZS1leHBhbnNpb24tcGFuZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIighc3RlcC52aXNpdGVkIHx8IHN0ZXAuaXNEaXNhYmxlZCkgJiYgIXNldHRpbmdzLm92ZXJyaWRlTmF2aWdhdGlvblwiIChvcGVuZWQpPVwicGFuZWxPcGVuU3RhdGUgPSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbG9zZWQpPVwicGFuZWxPcGVuU3RhdGUgPSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSBjbGFzcz1cInByb2dyZXNzLW1vYmlsZS1wYW5lbC10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAtd2Via2l0LWZpbGwtYXZhaWxhYmxlO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOighc3RlcC52aXNpdGVkIHx8IHN0ZXAuaXNEaXNhYmxlZCkgJiYgIXNldHRpbmdzLm92ZXJyaWRlTmF2aWdhdGlvbiAmJiAhc3RlcC5jb21wbGV0ZSwnY29sb3ItcHJpbWFyeSc6c3RlcC5jb21wbGV0ZSAmJiBzdGVwIT1hY3RpdmVQYXJlbnROb2RlLCdwcm9ncmVzcy1tZW51LWFjdGl2ZSc6c3RlcD09PWFjdGl2ZVBhcmVudE5vZGV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJwcm9ncmVzc1BhcmVudE5vZGVJY29uc1wiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7c3RlcDpzdGVwfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNldHRpbmdzPy5kaXNwbGF5TnVtYmVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7aSA8IDEwID8gXCIwXCIgKyAoaSArIDEpICsgXCIuIFwiIDogaSArIFwiIC4gXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi1idG4tdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN0ZXAudGV4dCB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXBhbmVsT3BlblN0YXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1kb3duIHBhbmVsLWljb25cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYW5lbE9wZW5TdGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tdXAgcGFuZWwtaWNvblwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBtb2JpbGUgc3ViIG1lbnUgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1uYXYtbWVudVwiICpuZ0Zvcj1cImxldCBzdWJOb2RlIG9mIHN0ZXAuc3ViTm9kZXM7IGxldCBpZHggPSBpbmRleDtcIiBbaGlkZGVuXT1cInN0ZXAuc3ViTm9kZXNbaWR4XS5oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwibW9iaWxlTWVudXt7IGlkeCB9fVwiIG1hdC1idXR0b24gY2xhc3M9XCJzdGVwLWxpbmsgcHJvZ3Jlc3MtbWVudS1tb2JpbGUtYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnY29sb3ItcHJpbWFyeSc6c3ViTm9kZS5jb21wbGV0ZSAmJiBzdWJOb2RlIT1hY3RpdmVTdWJOb2RlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCJbJ3Byb2dyZXNzLW1lbnUtYWN0aXZlJ11cIiBbbmdTdHlsZV09XCJ7ICcgY29sb3InOiB0aGVtZVNldHRpbmdzPy5mb250Q29sb3IgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJzdWJOb2RlLnJvdXRlXCIgW2Rpc2FibGVkXT1cIiFzdWJOb2RlLnZpc2l0ZWQgJiYgIXNldHRpbmdzLm92ZXJyaWRlTmF2aWdhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByb2dyZXNzU3ViTm9kZUljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3N1Yk5vZGU6c3ViTm9kZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi1tZW51LWJ0bi10ZXh0XCIgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6KCFzdWJOb2RlLnZpc2l0ZWQpICYmICFzZXR0aW5ncy5vdmVycmlkZU5hdmlnYXRpb24gJiYgIXN1Yk5vZGUuY29tcGxldGUsJ2NvbG9yLXByaW1hcnknOnN1Yk5vZGUuY29tcGxldGUgJiYgc3ViTm9kZSE9YWN0aXZlU3ViTm9kZSwncHJvZ3Jlc3MtbWVudS1hY3RpdmUnOnN1Yk5vZGU9PT1hY3RpdmVTdWJOb2RlfVwiPnt7IHN1Yk5vZGUudGV4dCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSBpZiB0aGVyZSBhcmUgbm8gc3ViTm9kZXMgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIighc3RlcC5zdWJOb2RlcyB8fCBzdGVwLnN1Yk5vZGVzLmxlbmd0aD09MCkgJiYgIXN0ZXAuaGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAjcGFuZWwgaGlkZVRvZ2dsZSAob3BlbmVkKT1cImRpc2FibGVQYW5lbChwYW5lbCxpKVwiIGNsYXNzPVwicHJvZ3Jlc3MtbW9iaWxlLWV4cGFuc2lvbi1wYW5lbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKCFzdGVwLnZpc2l0ZWQgfHwgc3RlcC5pc0Rpc2FibGVkKSAmJiAhc2V0dGluZ3Mub3ZlcnJpZGVOYXZpZ2F0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlIGNsYXNzPVwicHJvZ3Jlc3MtbW9iaWxlLXBhbmVsLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOighc3RlcC52aXNpdGVkIHx8IHN0ZXAuaXNEaXNhYmxlZCkgJiYgIXNldHRpbmdzLm92ZXJyaWRlTmF2aWdhdGlvbiAmJiAhc3RlcC5jb21wbGV0ZSwnY29sb3ItcHJpbWFyeSc6c3RlcC5jb21wbGV0ZSAmJiBzdGVwIT1hY3RpdmVQYXJlbnROb2RlLCdwcm9ncmVzcy1tZW51LWFjdGl2ZSc6c3RlcD09PWFjdGl2ZVBhcmVudE5vZGV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJwcm9ncmVzc1BhcmVudE5vZGVJY29uc1wiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7c3RlcDpzdGVwfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNldHRpbmdzPy5kaXNwbGF5TnVtYmVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7aSA8IDEwID8gXCIwXCIgKyAoaSArIDEpICsgXCIuIFwiIDogaSArIFwiIC4gXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi1idG4tdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN0ZXAudGV4dCB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbWF0LWFjY29yZGlvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSB0aGUgcHJvZ3Jlc3MgbWVudSBsYW5ndWFnZSBhbmQgbG9nb3V0IGJ1dHRvbnMtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWZvb3Rlci1pdGVtIHByb2dyZXNzLWZvb3RlclwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5hdmlnYXRpb25Gb290ZXJcIj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9tYXQtc2lkZW5hdj5cclxuICAgIDxtYXQtc2lkZW5hdi1jb250ZW50PlxyXG4gICAgICA8IS0tIEhvcml6b250YWwgUHJvZ3Jlc3MgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZXR0aW5ncz8ubWVudVN0eWxlID09PSAncHJvZ3Jlc3MnXCI+XHJcbiAgICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgKm5nSWY9XCJzZXR0aW5ncz8uc2hvd1Byb2dyZXNzQmFyXCIgbW9kZT1cImRldGVybWluYXRlXCIgW3ZhbHVlXT1cIm5hdlByb2dyZXNzQ291bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiA5cHhcIiBjb2xvcj1cImFjY2VudFwiPlxyXG4gICAgICAgIDwvbWF0LXByb2dyZXNzLWJhcj5cclxuICAgICAgICA8ZGl2IGZ4SGlkZS5sdC1tZCBjbGFzcz1cInN0ZXAtdGl0bGVzIGNlbnRlclwiIGZ4TGF5b3V0PVwicm93XCIgc3R5bGU9XCJqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyICFpbXBvcnRhbnRcIiBbY2xhc3MuaGlkZGVuXT1cInNldHRpbmdzLmhpZGVOYXZpZ2F0aW9uXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdGVwIG9mIG5hdmlnYXRpb25EYXRhOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJob3Jpem9udGFsLXByb2dyZXNzLWRpdlwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN0ZXAuc3ViTm9kZXM/Lmxlbmd0aCAmJiAhc3RlcC5oaWRkZW5cIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW3JvdXRlckxpbmtdPVwic3RlcC5yb3V0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKCFzdGVwLnZpc2l0ZWQgfHwgc3RlcC5pc0Rpc2FibGVkKSAmJiAhc2V0dGluZ3Mub3ZlcnJpZGVOYXZpZ2F0aW9uXCIgY2xhc3M9XCJwcm9ncmVzcy1tZW51LWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2NvbG9yLXByaW1hcnknOnN0ZXAuY29tcGxldGUgJiYgc3RlcCE9YWN0aXZlUGFyZW50Tm9kZSwncHJvZ3Jlc3MtbWVudS1hY3RpdmUnOnN0ZXA9PT1hY3RpdmVQYXJlbnROb2RlfVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByb2dyZXNzUGFyZW50Tm9kZUljb25zXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntzdGVwOnN0ZXB9XCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZXR0aW5ncz8uZGlzcGxheU51bWJlcnNcIj5cclxuICAgICAgICAgICAgICAgICAge3tpIDwgMTAgPyBcIjBcIiArIChpICsgMSkgKyBcIi4gXCIgOiBpICsgXCIgLiBcIn19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi1idG4tdGV4dFwiPnt7IHN0ZXAudGV4dCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gaWYgdGhlcmUgYXJlIHN1Ym5vZGVzIGNyZWF0ZSBtZW51cyBmb3IgZWFjaCBzdGVwIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RlcC5zdWJOb2RlcyAmJiBzdGVwLnN1Yk5vZGVzLmxlbmd0aCAmJiAhc3RlcC5oaWRkZW5cIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInsnY29sb3ItcHJpbWFyeSc6c3RlcC5jb21wbGV0ZSAmJiBzdGVwIT1hY3RpdmVQYXJlbnROb2RlLCdwcm9ncmVzcy1tZW51LWFjdGl2ZSc6c3RlcD09PWFjdGl2ZVBhcmVudE5vZGV9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1idXR0b24gW2Rpc2FibGVkXT1cIighc3RlcC52aXNpdGVkIHx8IHN0ZXAuaXNEaXNhYmxlZCkgJiYgIXNldHRpbmdzLm92ZXJyaWRlTmF2aWdhdGlvblwiIGNsYXNzPVwicHJvZ3Jlc3MtbWVudS1idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJwcm9ncmVzc1BhcmVudE5vZGVJY29uc1wiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7c3RlcDpzdGVwfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2V0dGluZ3M/LmRpc3BsYXlOdW1iZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7aSA8IDEwID8gXCIwXCIgKyAoaSArIDEpICsgXCIuIFwiIDogaSArIFwiIC4gXCJ9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXYtYnRuLXRleHRcIj57eyBzdGVwLnRleHQgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiIGNsYXNzPVwic29mLWFyLW1hdC1tZW51IHByb2dyZXNzLW1lbnUtcGFuZWxcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1uYXYtbWVudVwiICpuZ0Zvcj1cImxldCBzdWJOb2RlIG9mIHN0ZXAuc3ViTm9kZXM7IGxldCBpZHggPSBpbmRleDtcIiBbbmdTdHlsZV09XCJ7d2lkdGg6c2V0dGluZ3MucHJvZ3Jlc3NNZW51V2lkdGgrJ3B4J31cIiBbaGlkZGVuXT1cInN0ZXAuc3ViTm9kZXNbaWR4XS5oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInN1Ym1lbnV7eyBpZHggfX1cIiBtYXQtYnV0dG9uIGNsYXNzPVwic3RlcC1saW5rIHByb2dyZXNzLW1lbnUtYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2NvbG9yLXByaW1hcnknOnN1Yk5vZGUuY29tcGxldGUgJiYgc3ViTm9kZSE9YWN0aXZlU3ViTm9kZSwnZGlzYWJsZWQnOiFzdWJOb2RlLnZpc2l0ZWQgJiYgIXNldHRpbmdzLm92ZXJyaWRlTmF2aWdhdGlvbn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIlsncHJvZ3Jlc3MtbWVudS1hY3RpdmUnXVwiIFtuZ1N0eWxlXT1cInsgJyBjb2xvcic6IHRoZW1lU2V0dGluZ3M/LmZvbnRDb2xvciB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJzdWJOb2RlLnJvdXRlXCIgW2Rpc2FibGVkXT1cIiFzdWJOb2RlLnZpc2l0ZWQgJiYgIXNldHRpbmdzLm92ZXJyaWRlTmF2aWdhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJwcm9ncmVzc1N1Yk5vZGVJY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7c3ViTm9kZTpzdWJOb2RlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXYtbWVudS1idG4tdGV4dFwiPnt7IHN1Yk5vZGUudGV4dCB8dHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1wcm9ncmVzcy1jb250YWluZXJcIiBmeEhpZGUuZ3Qtc20+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRlbnQgc29mLWFyLW5hdi1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgIDwvbWF0LXNpZGVuYXYtY29udGVudD5cclxuICA8L21hdC1zaWRlbmF2LWNvbnRhaW5lcj5cclxuICA8IS0tIFRoZSBwcm9ncmVzcyBtZW51IHBhcmVudCBub2RlIGljb24gdGVtcGxhdGUtLT5cclxuICA8bmctdGVtcGxhdGUgI3Byb2dyZXNzUGFyZW50Tm9kZUljb25zIGxldC1zdGVwPSdzdGVwJz5cclxuICAgIDxzcGFuICpuZ0lmPVwic3RlcC5jb21wbGV0ZSAmJiBzdGVwICE9IGFjdGl2ZVBhcmVudE5vZGVcIiBcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInYXJtYXR1cmUuc29mLXByb2dyZXNzLWJhci5zdGVwLWxhYmVscy5jb21wbGV0ZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgPGkgY2xhc3M9XCJ7eyBzZXR0aW5ncy5wcm9ncmVzc1NlY3Rpb25Db21wbGV0ZUljb24gfX0gY29sb3ItcHJpbWFyeSBwcm9ncmVzcy1uYXYtaWNvblwiIFt0aXRsZV09XCInYXJtYXR1cmUuc29mLXByb2dyZXNzLWJhci5zdGVwLWxhYmVscy5jb21wbGV0ZScgfCB0cmFuc2xhdGVcIj48L2k+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8c3BhbiAqbmdJZj1cInN0ZXAgPT09IGFjdGl2ZVBhcmVudE5vZGVcIiBcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInYXJtYXR1cmUuc29mLXByb2dyZXNzLWJhci5zdGVwLWxhYmVscy5pbi1wcm9ncmVzcycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgPGkgY2xhc3M9XCJ7eyBzZXR0aW5ncy5wcm9ncmVzc1NlY3Rpb25DdXJyZW50SWNvbiB9fSBjb2xvci1wcmltYXJ5IHByb2dyZXNzLW5hdi1pY29uXCIgW3RpdGxlXT1cIidhcm1hdHVyZS5zb2YtcHJvZ3Jlc3MtYmFyLnN0ZXAtbGFiZWxzLmluLXByb2dyZXNzJyB8IHRyYW5zbGF0ZVwiPjwvaT5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxzcGFuICpuZ0lmPVwiIXN0ZXAuY29tcGxldGUgJiYgc3RlcCAhPSBhY3RpdmVQYXJlbnROb2RlXCIgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6IXN0ZXAudmlzaXRlZCAmJiAhc2V0dGluZ3Mub3ZlcnJpZGVOYXZpZ2F0aW9ufVwiIFxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidhcm1hdHVyZS5zb2YtcHJvZ3Jlc3MtYmFyLnN0ZXAtbGFiZWxzLm5vdC1kb25lJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICA8aSBjbGFzcz1cInt7IHNldHRpbmdzLnByb2dyZXNzU2VjdGlvbkZ1dHVyZUljb24gfX0gcHJvZ3Jlc3MtbmF2LWljb25cIiBbdGl0bGVdPVwiJ2FybWF0dXJlLnNvZi1wcm9ncmVzcy1iYXIuc3RlcC1sYWJlbHMubm90LWRvbmUnIHwgdHJhbnNsYXRlXCI+PC9pPlxyXG4gICAgPC9zcGFuPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPCEtLSBUaGUgcHJvZ3Jlc3MgbWVudSBzdWIgbm9kZSBpY29uIHRlbXBsYXRlLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNwcm9ncmVzc1N1Yk5vZGVJY29ucyBsZXQtc3ViTm9kZT0nc3ViTm9kZSc+XHJcbiAgICA8c3BhbiAqbmdJZj1cInN1Yk5vZGUuY29tcGxldGUgJiYgYWN0aXZlU3ViTm9kZSAhPSBzdWJOb2RlXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInYXJtYXR1cmUuc29mLXByb2dyZXNzLWJhci5zdGVwLWxhYmVscy5jb21wbGV0ZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgPGkgY2xhc3M9XCJ7e3NldHRpbmdzLnByb2dyZXNzTWVudUNvbXBsZXRlSWNvbn19IGNvbG9yLXByaW1hcnkgcHJvZ3Jlc3MtbmF2LWljb25cIiBbdGl0bGVdPVwiJ2FybWF0dXJlLnNvZi1wcm9ncmVzcy1iYXIuc3RlcC1sYWJlbHMuY29tcGxldGUnIHwgdHJhbnNsYXRlXCI+PC9pPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJhY3RpdmVTdWJOb2RlID09PSBzdWJOb2RlXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInYXJtYXR1cmUuc29mLXByb2dyZXNzLWJhci5zdGVwLWxhYmVscy5pbi1wcm9ncmVzcycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgPGkgY2xhc3M9XCJ7eyBzZXR0aW5ncy5wcm9ncmVzc1NlY3Rpb25DdXJyZW50SWNvbiB9fSBjb2xvci1wcmltYXJ5IHByb2dyZXNzLW5hdi1pY29uXCIgW3RpdGxlXT1cIidhcm1hdHVyZS5zb2YtcHJvZ3Jlc3MtYmFyLnN0ZXAtbGFiZWxzLmluLXByb2dyZXNzJyB8IHRyYW5zbGF0ZVwiPjwvaT5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxzcGFuICpuZ0lmPVwiIXN1Yk5vZGUuY29tcGxldGUgJiYgYWN0aXZlU3ViTm9kZSAhPSBzdWJOb2RlXCIgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6IXN1Yk5vZGUudmlzaXRlZCAmJiAhc2V0dGluZ3Mub3ZlcnJpZGVOYXZpZ2F0aW9ufVwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2FybWF0dXJlLnNvZi1wcm9ncmVzcy1iYXIuc3RlcC1sYWJlbHMubm90LWRvbmUnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwie3sgc2V0dGluZ3MucHJvZ3Jlc3NTZWN0aW9uRnV0dXJlSWNvbiB9fSBwcm9ncmVzcy1uYXYtaWNvblwiIFt0aXRsZV09XCInYXJtYXR1cmUuc29mLXByb2dyZXNzLWJhci5zdGVwLWxhYmVscy5ub3QtZG9uZScgfCB0cmFuc2xhdGVcIj48L2k+XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8IS0tIFRoZSBuYXZpZ2F0aW9uIGZvb3RlciB0ZW1wbGF0ZSBmb3IgbGFuZ3VhZ2UgYW5kIGxvZ291dCBidXR0b25zIC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjbmF2aWdhdGlvbkZvb3Rlcj5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzb2YtYXItbmF2LW1vYmlsZS1mb290ZXJdXCI+IDwvbmctY29udGVudD5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2V0dGluZ3MudXNlQ3VzdG9tTW9iaWxlRm9vdGVyXCI+XHJcbiAgICAgIDwhLS0gVGhlIGxhbmd1YWdlIGJ1dHRvbiAtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxhbmd1YWdlU2V0dGluZ3M/LmRpc3BsYXlMYW5ndWFnZU9wdGlvbnMgJiYgbGFuZ3VhZ2VTZXR0aW5ncz8ubGFuZ3VhZ2VzLmxlbmd0aCA+IDIgJiYgbW9iaWxlUXVlcnkubWF0Y2hlc1wiPlxyXG4gICAgICAgIDxidXR0b24gaWQ9XCJzb2YtYXItbmF2LWxhbmctZHJvcGRvd25cIiBtYXQtc3Ryb2tlZC1idXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmFkZWQtYnV0dG9uLTUwIGxhbmd1YWdlLWJ1dHRvbiBuYXZpZ2F0aW9uRm9vdGVyXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImhlYWRlckxhbmd1YWdlTWVudVwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxhbmd1YWdlU2V0dGluZ3MuYnV0dG9uVGV4dCB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJpY29uLXN0eWxpbmdcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtZ2xvYmUgbGFuZ3VhZ2UtZ2xvYmVcIj48L2k+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICB7e2xhbmd1YWdlU2V0dGluZ3MuYnV0dG9uVGV4dCB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPG1hdC1tZW51ICNoZWFkZXJMYW5ndWFnZU1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJzb2YtYXItbWF0LW1lbnVcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgbGFuZyBvZiBsYW5ndWFnZVNldHRpbmdzLmxhbmd1YWdlc1wiIChjbGljayk9XCJzZXRMYW5ndWFnZSQuZW1pdChsYW5nKVwiXHJcbiAgICAgICAgICAgICAgICAgIGlkPVwiYXBwbHktbGFuZy1idG4te3tsYW5nfX1cIj5cclxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cImF1dG9cIj5cclxuICAgICAgICAgICAgICAgIHt7IGxhbmcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cImF1dG9cIiBmeExheW91dEFsaWduPVwiZW5kIGVuZFwiPlxyXG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjdXJyZW50TGFuZyA9PT0gbGFuZ1wiIGNsYXNzPVwiZmFkIGZhLWNoZWNrIHNlbGVjdGVkLWxhbmd1YWdlLWljb25cIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYW5ndWFnZVNldHRpbmdzPy5kaXNwbGF5TGFuZ3VhZ2VPcHRpb25zICYmIGxhbmd1YWdlU2V0dGluZ3M/Lmxhbmd1YWdlcy5sZW5ndGggPT09IDIgJiYgbW9iaWxlUXVlcnkubWF0Y2hlc1wiPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJsYW5ndWFnZVNldHRpbmdzPy5sYW5ndWFnZXMubGVuZ3RoID09PSAyXCIgaWQ9XCJzb2YtYXItbmF2LWxhbmctYnV0dG9uXCIgbWF0LXN0cm9rZWQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZhZGVkLWJ1dHRvbi01MCBsYW5ndWFnZS1idXR0b24gbmF2aWdhdGlvbkZvb3RlclwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxhbmd1YWdlU2V0dGluZ3MuYnV0dG9uVGV4dCB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJzZXRMYW5ndWFnZSQuZW1pdCgpXCI+XHJcbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImljb24tc3R5bGluZ1wiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhciBmYS1nbG9iZSBsYW5ndWFnZS1nbG9iZVwiPjwvaT5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIHt7b3RoZXJMYW5nVGV4dCB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8IS0tIFRoZSBsb2dvdXQgYnV0dG9uLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2JpbGVRdWVyeS5tYXRjaGVzICYmIHVzZXJOYW1lXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBpZD1cInNvZi1hci1oZWFkZXItbGFuZy1idXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJuYXZpZ2F0aW9uRm9vdGVyXCIgKGNsaWNrKT1cImxvZ091dCgpXCI+XHJcbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImljb24tc3R5bGluZ1wiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zaWduLW91dC1hbHRcIj48L2k+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICB7e2xvZ091dFRleHQgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG4iXX0=