@dbg-riskit/angular-view
Version:
154 lines • 28.1 kB
JavaScript
import { ChangeDetectionStrategy, Component, Directive, Inject, Input, Optional } from '@angular/core';
import { AUTH_PROVIDER, MAIN_LOGO } from '@dbg-riskit/angular-common';
import { of } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { BaseComponent } from './base.component';
import * as i0 from "@angular/core";
import * as i1 from "./match.media";
import * as i2 from "@angular/material/toolbar";
import * as i3 from "./flex.spacer.component";
import * as i4 from "@angular/material/button";
import * as i5 from "@angular/material/icon";
import * as i6 from "@angular/material/sidenav";
import * as i7 from "@angular/common";
const SMALL_SCREEN_MEDIA_QUERY = (width) => `screen and (max-width:${width}px)`;
export class VerticalLayoutDirective {
}
VerticalLayoutDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: VerticalLayoutDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
VerticalLayoutDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.6", type: VerticalLayoutDirective, selector: "risk-layout-vertical", host: { properties: { "class": "\"risk-layout-vertical\"" } }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: VerticalLayoutDirective, decorators: [{
type: Directive,
args: [{
selector: 'risk-layout-vertical',
host: {
'[class]': '"risk-layout-vertical"'
}
}]
}] });
export class VerticalLayoutTitleDirective {
}
VerticalLayoutTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: VerticalLayoutTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
VerticalLayoutTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.6", type: VerticalLayoutTitleDirective, selector: "risk-layout-vertical-title", host: { properties: { "class": "\"risk-layout-vertical-title\"" } }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: VerticalLayoutTitleDirective, decorators: [{
type: Directive,
args: [{
selector: 'risk-layout-vertical-title',
host: {
'[class]': '"risk-layout-vertical-title"'
}
}]
}] });
export class VerticalLayoutIconDirective {
}
VerticalLayoutIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: VerticalLayoutIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
VerticalLayoutIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.6", type: VerticalLayoutIconDirective, selector: "risk-layout-vertical-icon", host: { properties: { "class": "\"risk-layout-vertical-icon\"" } }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: VerticalLayoutIconDirective, decorators: [{
type: Directive,
args: [{
selector: 'risk-layout-vertical-icon',
host: {
'[class]': '"risk-layout-vertical-icon"'
}
}]
}] });
export class HorizontalLayoutDirective {
}
HorizontalLayoutDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: HorizontalLayoutDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
HorizontalLayoutDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.6", type: HorizontalLayoutDirective, selector: "risk-layout-horizontal", host: { properties: { "class": "\"mat-toolbar-row mat-toolbar-single-row risk-layout-horizontal\"" } }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: HorizontalLayoutDirective, decorators: [{
type: Directive,
args: [{
selector: 'risk-layout-horizontal',
host: {
'[class]': '"mat-toolbar-row mat-toolbar-single-row risk-layout-horizontal"'
}
}]
}] });
export class FooterLayoutDirective {
}
FooterLayoutDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: FooterLayoutDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
FooterLayoutDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.6", type: FooterLayoutDirective, selector: "risk-layout-footer", host: { properties: { "class": "\"risk-layout-footer\"" } }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: FooterLayoutDirective, decorators: [{
type: Directive,
args: [{
selector: 'risk-layout-footer',
host: {
'[class]': '"risk-layout-footer"'
}
}]
}] });
export class LayoutComponent extends BaseComponent {
constructor(authProvider, mainLogo, changeDetectorRef, matchMedia) {
super();
this.authProvider = authProvider;
this.mainLogo = mainLogo;
this.changeDetectorRef = changeDetectorRef;
this.matchMedia = matchMedia;
this.smallScreenMenuVisible = true;
this.smallScreenWidth = 600;
this.footerVisible = true;
// Detect changes once logged-in/out
if (authProvider) {
authProvider.loggedInStream.pipe(takeUntil(this.destroyed)).subscribe(() => changeDetectorRef.markForCheck());
}
this.observeSmallScreenWidth();
}
ngOnChanges(changes) {
if ('smallScreenWidth' in changes) {
this.observeSmallScreenWidth();
}
}
get authStatus() {
if (!this.authProvider) {
return of(true);
}
return this.authProvider.loggedIn;
}
observeSmallScreenWidth() {
if (this.smallScreenWidthObserver != null) {
this.smallScreenWidthObserver.unsubscribe();
}
this.smallScreenWidthObserver = this.matchMedia.observe(SMALL_SCREEN_MEDIA_QUERY(this.smallScreenWidth)).pipe(takeUntil(this.destroyed)).subscribe(() => this.changeDetectorRef.markForCheck());
}
get mediaSmall() {
return this.matchMedia.isActive(SMALL_SCREEN_MEDIA_QUERY(this.smallScreenWidth));
}
get logo() {
return this.mainLogo;
}
closeSideNav(sidenav) {
this.authStatus.subscribe((res) => {
if (!res) {
sidenav.close();
this.changeDetectorRef.markForCheck();
}
});
}
}
LayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: LayoutComponent, deps: [{ token: AUTH_PROVIDER, optional: true }, { token: MAIN_LOGO }, { token: i0.ChangeDetectorRef }, { token: i1.MatchMedia }], target: i0.ɵɵFactoryTarget.Component });
LayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.6", type: LayoutComponent, selector: "risk-layout", inputs: { smallScreenMenuVisible: "smallScreenMenuVisible", smallScreenWidth: "smallScreenWidth", footerVisible: "footerVisible", toolbarBackgroundColor: "toolbarBackgroundColor", backgroundColor: "backgroundColor" }, host: { properties: { "class.risk-layout": "true" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<mat-toolbar class=\"mat-elevation-z2\"\n [style.backgroundColor]=\"toolbarBackgroundColor\">\n <div class=\"risk-layout-logo\">\n <img [src]=\"logo\" alt=\"Company logo\">\n </div>\n\n <ng-template [ngIf]=\"authStatus | async\">\n <ng-template [ngIf]=\"!mediaSmall\">\n <ng-content select=\"[menu-horizontal], risk-layout-horizontal > *\"></ng-content>\n </ng-template>\n\n <ng-template [ngIf]=\"mediaSmall\">\n <ng-content select=\"[menu-vertical-title], risk-layout-vertical-title > *\"></ng-content>\n\n <risk-flex-spacer></risk-flex-spacer>\n\n <ng-content select=\"[menu-vertical-icon], risk-layout-vertical-icon > *\"></ng-content>\n\n <button mat-icon-button\n (click)=\"sidenav.toggle()\"\n type=\"button\"\n *ngIf=\"smallScreenMenuVisible\">\n <mat-icon>menu</mat-icon>\n </button>\n </ng-template>\n </ng-template>\n</mat-toolbar>\n\n<mat-sidenav-container [class.risk-layout-with-footer]=\"footerVisible\"\n [style.backgroundColor]=\"backgroundColor\">\n <mat-sidenav #sidenav=\"matSidenav\" (click)=\"closeSideNav(sidenav)\">\n <ng-content select=\"[menu-vertical], risk-layout-vertical > *\"></ng-content>\n </mat-sidenav>\n\n <div class=\"risk-layout-content\">\n <ng-content></ng-content>\n </div>\n</mat-sidenav-container>\n\n<div class=\"risk-layout-footer\" *ngIf=\"footerVisible\">\n <ng-content select=\"risk-layout-footer > *\"></ng-content>\n</div>\n", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ".risk-layout-logo{margin:0 16px;text-align:center;-webkit-flex:0 0 auto;flex:0 0 auto}@media (max-width: 600px){.risk-layout-logo{margin:0 10px 0 0}}.risk-layout-logo img{height:30px;vertical-align:sub}@media (max-width: 600px){.risk-layout-logo img{height:25px}}.mat-toolbar{border-radius:0!important;position:fixed;z-index:100}@media (max-width: 600px){.mat-toolbar{font-size:17px}.mat-toolbar ::ng-deep h1,.mat-toolbar ::ng-deep h2,.mat-toolbar ::ng-deep h3,.mat-toolbar ::ng-deep h4,.mat-toolbar ::ng-deep h5,.mat-toolbar ::ng-deep h6{font-size:17px}}::ng-deep .risk-layout-horizontal{padding:0!important}::ng-deep .risk-layout-vertical,::ng-deep .risk-layout-vertical-title,::ng-deep .risk-layout-vertical-icon,::ng-deep .risk-layout-footer{display:block}.risk-layout-content{padding:0 50px 50px}@media screen and (max-width: 800px){.risk-layout-content{padding:0 10px}}.mat-sidenav-container{padding-top:69px}@media (max-width: 600px){.mat-sidenav-container{padding-top:61px}}.mat-sidenav{padding-top:77px}@media (max-width: 600px){.mat-sidenav{padding-top:69px}}.risk-layout-with-footer{padding-bottom:30px}.risk-layout-footer{position:fixed;right:0;bottom:0;left:0;overflow:hidden;display:-webkit-flex;display:flex;padding:0 .5rem;height:30px;line-height:32px;font-size:.7em;z-index:2}\n"], components: [{ type: i2.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i3.FlexSpacerComponent, selector: "risk-flex-spacer" }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { type: i6.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i7.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: LayoutComponent, decorators: [{
type: Component,
args: [{ selector: 'risk-layout', host: {
'[class.risk-layout]': 'true'
}, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, template: "<mat-toolbar class=\"mat-elevation-z2\"\n [style.backgroundColor]=\"toolbarBackgroundColor\">\n <div class=\"risk-layout-logo\">\n <img [src]=\"logo\" alt=\"Company logo\">\n </div>\n\n <ng-template [ngIf]=\"authStatus | async\">\n <ng-template [ngIf]=\"!mediaSmall\">\n <ng-content select=\"[menu-horizontal], risk-layout-horizontal > *\"></ng-content>\n </ng-template>\n\n <ng-template [ngIf]=\"mediaSmall\">\n <ng-content select=\"[menu-vertical-title], risk-layout-vertical-title > *\"></ng-content>\n\n <risk-flex-spacer></risk-flex-spacer>\n\n <ng-content select=\"[menu-vertical-icon], risk-layout-vertical-icon > *\"></ng-content>\n\n <button mat-icon-button\n (click)=\"sidenav.toggle()\"\n type=\"button\"\n *ngIf=\"smallScreenMenuVisible\">\n <mat-icon>menu</mat-icon>\n </button>\n </ng-template>\n </ng-template>\n</mat-toolbar>\n\n<mat-sidenav-container [class.risk-layout-with-footer]=\"footerVisible\"\n [style.backgroundColor]=\"backgroundColor\">\n <mat-sidenav #sidenav=\"matSidenav\" (click)=\"closeSideNav(sidenav)\">\n <ng-content select=\"[menu-vertical], risk-layout-vertical > *\"></ng-content>\n </mat-sidenav>\n\n <div class=\"risk-layout-content\">\n <ng-content></ng-content>\n </div>\n</mat-sidenav-container>\n\n<div class=\"risk-layout-footer\" *ngIf=\"footerVisible\">\n <ng-content select=\"risk-layout-footer > *\"></ng-content>\n</div>\n", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ".risk-layout-logo{margin:0 16px;text-align:center;-webkit-flex:0 0 auto;flex:0 0 auto}@media (max-width: 600px){.risk-layout-logo{margin:0 10px 0 0}}.risk-layout-logo img{height:30px;vertical-align:sub}@media (max-width: 600px){.risk-layout-logo img{height:25px}}.mat-toolbar{border-radius:0!important;position:fixed;z-index:100}@media (max-width: 600px){.mat-toolbar{font-size:17px}.mat-toolbar ::ng-deep h1,.mat-toolbar ::ng-deep h2,.mat-toolbar ::ng-deep h3,.mat-toolbar ::ng-deep h4,.mat-toolbar ::ng-deep h5,.mat-toolbar ::ng-deep h6{font-size:17px}}::ng-deep .risk-layout-horizontal{padding:0!important}::ng-deep .risk-layout-vertical,::ng-deep .risk-layout-vertical-title,::ng-deep .risk-layout-vertical-icon,::ng-deep .risk-layout-footer{display:block}.risk-layout-content{padding:0 50px 50px}@media screen and (max-width: 800px){.risk-layout-content{padding:0 10px}}.mat-sidenav-container{padding-top:69px}@media (max-width: 600px){.mat-sidenav-container{padding-top:61px}}.mat-sidenav{padding-top:77px}@media (max-width: 600px){.mat-sidenav{padding-top:69px}}.risk-layout-with-footer{padding-bottom:30px}.risk-layout-footer{position:fixed;right:0;bottom:0;left:0;overflow:hidden;display:-webkit-flex;display:flex;padding:0 .5rem;height:30px;line-height:32px;font-size:.7em;z-index:2}\n"] }]
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [AUTH_PROVIDER]
}] }, { type: undefined, decorators: [{
type: Inject,
args: [MAIN_LOGO]
}] }, { type: i0.ChangeDetectorRef }, { type: i1.MatchMedia }]; }, propDecorators: { smallScreenMenuVisible: [{
type: Input
}], smallScreenWidth: [{
type: Input
}], footerVisible: [{
type: Input
}], toolbarBackgroundColor: [{
type: Input
}], backgroundColor: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BrZy9kYmctcmlza2l0L2FuZ3VsYXItdmlldy9zcmMvbGliL2xheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wa2cvZGJnLXJpc2tpdC9hbmd1bGFyLXZpZXcvc3JjL2xpYi9sYXlvdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBRUwsUUFBUSxFQUVYLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxhQUFhLEVBQUUsU0FBUyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFcEUsT0FBTyxFQUFhLEVBQUUsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7QUFHL0MsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMseUJBQXlCLEtBQUssS0FBSyxDQUFDO0FBUXhGLE1BQU0sT0FBTyx1QkFBdUI7O29IQUF2Qix1QkFBdUI7d0dBQXZCLHVCQUF1QjsyRkFBdkIsdUJBQXVCO2tCQU5uQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLElBQUksRUFBTTt3QkFDTixTQUFTLEVBQUUsd0JBQXdCO3FCQUN0QztpQkFDSjs7QUFVRCxNQUFNLE9BQU8sNEJBQTRCOzt5SEFBNUIsNEJBQTRCOzZHQUE1Qiw0QkFBNEI7MkZBQTVCLDRCQUE0QjtrQkFOeEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxJQUFJLEVBQU07d0JBQ04sU0FBUyxFQUFFLDhCQUE4Qjtx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VUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVksRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ04sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoQixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDekM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OzRHQXpFUSxlQUFlLGtCQW1CZSxhQUFhLDZCQUN6QixTQUFTO2dHQXBCM0IsZUFBZSxnWEMvRTVCLHVsREEwQ0E7MkZEcUNhLGVBQWU7a0JBYjNCLFNBQVM7K0JBQ2UsYUFBYSxRQU1iO3dCQUNqQixxQkFBcUIsRUFBRSxNQUFNO3FCQUNoQyxtQkFDb0IsdUJBQXVCLENBQUMsTUFBTSx1QkFDOUIsS0FBSzs7MEJBcUJOLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBQ2hDLE1BQU07MkJBQUMsU0FBUztxR0FqQjdCLHNCQUFzQjtzQkFENUIsS0FBSztnQkFJQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBTUMsYUFBYTtzQkFEbkIsS0FBSztnQkFJQyxzQkFBc0I7c0JBRDVCLEtBQUs7Z0JBSUMsZUFBZTtzQkFEckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERpcmVjdGl2ZSxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9wdGlvbmFsLFxuICAgIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdFNpZGVuYXZ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xuaW1wb3J0IHtBVVRIX1BST1ZJREVSLCBNQUlOX0xPR099IGZyb20gJ0BkYmctcmlza2l0L2FuZ3VsYXItY29tbW9uJztcbmltcG9ydCB7QXV0aFByb3ZpZGVyfSBmcm9tICdAZGJnLXJpc2tpdC9jb21tb24nO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0Jhc2VDb21wb25lbnR9IGZyb20gJy4vYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHtNYXRjaE1lZGlhfSBmcm9tICcuL21hdGNoLm1lZGlhJztcblxuY29uc3QgU01BTExfU0NSRUVOX01FRElBX1FVRVJZID0gKHdpZHRoOiBudW1iZXIpID0+IGBzY3JlZW4gYW5kIChtYXgtd2lkdGg6JHt3aWR0aH1weClgO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ3Jpc2stbGF5b3V0LXZlcnRpY2FsJyxcbiAgICBob3N0ICAgIDoge1xuICAgICAgICAnW2NsYXNzXSc6ICdcInJpc2stbGF5b3V0LXZlcnRpY2FsXCInXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBWZXJ0aWNhbExheW91dERpcmVjdGl2ZSB7XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAncmlzay1sYXlvdXQtdmVydGljYWwtdGl0bGUnLFxuICAgIGhvc3QgICAgOiB7XG4gICAgICAgICdbY2xhc3NdJzogJ1wicmlzay1sYXlvdXQtdmVydGljYWwtdGl0bGVcIidcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFZlcnRpY2FsTGF5b3V0VGl0bGVEaXJlY3RpdmUge1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ3Jpc2stbGF5b3V0LXZlcnRpY2FsLWljb24nLFxuICAgIGhvc3QgICAgOiB7XG4gICAgICAgICdbY2xhc3NdJzogJ1wicmlzay1sYXlvdXQtdmVydGljYWwtaWNvblwiJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgVmVydGljYWxMYXlvdXRJY29uRGlyZWN0aXZlIHtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdyaXNrLWxheW91dC1ob3Jpem9udGFsJyxcbiAgICBob3N0ICAgIDoge1xuICAgICAgICAnW2NsYXNzXSc6ICdcIm1hdC10b29sYmFyLXJvdyBtYXQtdG9vbGJhci1zaW5nbGUtcm93IHJpc2stbGF5b3V0LWhvcml6b250YWxcIidcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEhvcml6b250YWxMYXlvdXREaXJlY3RpdmUge1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ3Jpc2stbGF5b3V0LWZvb3RlcicsXG4gICAgaG9zdCAgICA6IHtcbiAgICAgICAgJ1tjbGFzc10nOiAnXCJyaXNrLWxheW91dC1mb290ZXJcIidcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEZvb3RlckxheW91dERpcmVjdGl2ZSB7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yICAgICAgICAgICA6ICdyaXNrLWxheW91dCcsXG4gICAgdGVtcGxhdGVVcmwgICAgICAgIDogJ2xheW91dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzICAgICAgICAgIDogW1xuICAgICAgICAnLi4vLi4vLi4vY29tcG9uZW50LnNjc3MnLFxuICAgICAgICAnbGF5b3V0LmNvbXBvbmVudC5zY3NzJ1xuICAgIF0sXG4gICAgaG9zdCAgICAgICAgICAgICAgIDoge1xuICAgICAgICAnW2NsYXNzLnJpc2stbGF5b3V0XSc6ICd0cnVlJ1xuICAgIH0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uICAgIDogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlXG59KVxuZXhwb3J0IGNsYXNzIExheW91dENvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc21hbGxTY3JlZW5NZW51VmlzaWJsZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzbWFsbFNjcmVlbldpZHRoID0gNjAwO1xuXG4gICAgcHJpdmF0ZSBzbWFsbFNjcmVlbldpZHRoT2JzZXJ2ZXI/OiBTdWJzY3JpcHRpb247XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb290ZXJWaXNpYmxlID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRvb2xiYXJCYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChBVVRIX1BST1ZJREVSKSBwcml2YXRlIHJlYWRvbmx5IGF1dGhQcm92aWRlcjogQXV0aFByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICBASW5qZWN0KE1BSU5fTE9HTykgcHJpdmF0ZSByZWFkb25seSBtYWluTG9nbzogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1hdGNoTWVkaWE6IE1hdGNoTWVkaWEpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICAvLyBEZXRlY3QgY2hhbmdlcyBvbmNlIGxvZ2dlZC1pbi9vdXRcbiAgICAgICAgaWYgKGF1dGhQcm92aWRlcikge1xuICAgICAgICAgICAgYXV0aFByb3ZpZGVyLmxvZ2dlZEluU3RyZWFtLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4gY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vYnNlcnZlU21hbGxTY3JlZW5XaWR0aCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICgnc21hbGxTY3JlZW5XaWR0aCcgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5vYnNlcnZlU21hbGxTY3JlZW5XaWR0aCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhdXRoU3RhdHVzKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAoIXRoaXMuYXV0aFByb3ZpZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFByb3ZpZGVyLmxvZ2dlZEluO1xuICAgIH1cblxuICAgIHByaXZhdGUgb2JzZXJ2ZVNtYWxsU2NyZWVuV2lkdGgoKSB7XG4gICAgICAgIGlmICh0aGlzLnNtYWxsU2NyZWVuV2lkdGhPYnNlcnZlciAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNtYWxsU2NyZWVuV2lkdGhPYnNlcnZlci51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zbWFsbFNjcmVlbldpZHRoT2JzZXJ2ZXIgPSB0aGlzLm1hdGNoTWVkaWEub2JzZXJ2ZShTTUFMTF9TQ1JFRU5fTUVESUFfUVVFUlkodGhpcy5zbWFsbFNjcmVlbldpZHRoKSkucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZWRpYVNtYWxsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaE1lZGlhLmlzQWN0aXZlKFNNQUxMX1NDUkVFTl9NRURJQV9RVUVSWSh0aGlzLnNtYWxsU2NyZWVuV2lkdGgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvZ28oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFpbkxvZ287XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlU2lkZU5hdihzaWRlbmF2OiBNYXRTaWRlbmF2KTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXV0aFN0YXR1cy5zdWJzY3JpYmUoKHJlczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgICAgICBzaWRlbmF2LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPG1hdC10b29sYmFyIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MlwiXG4gICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJ0b29sYmFyQmFja2dyb3VuZENvbG9yXCI+XG4gICAgPGRpdiBjbGFzcz1cInJpc2stbGF5b3V0LWxvZ29cIj5cbiAgICAgICAgPGltZyBbc3JjXT1cImxvZ29cIiBhbHQ9XCJDb21wYW55IGxvZ29cIj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJhdXRoU3RhdHVzIHwgYXN5bmNcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFtZWRpYVNtYWxsXCI+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWVudS1ob3Jpem9udGFsXSwgcmlzay1sYXlvdXQtaG9yaXpvbnRhbCA+ICpcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIm1lZGlhU21hbGxcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttZW51LXZlcnRpY2FsLXRpdGxlXSwgcmlzay1sYXlvdXQtdmVydGljYWwtdGl0bGUgPiAqXCI+PC9uZy1jb250ZW50PlxuXG4gICAgICAgICAgICA8cmlzay1mbGV4LXNwYWNlcj48L3Jpc2stZmxleC1zcGFjZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttZW51LXZlcnRpY2FsLWljb25dLCByaXNrLWxheW91dC12ZXJ0aWNhbC1pY29uID4gKlwiPjwvbmctY29udGVudD5cblxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNpZGVuYXYudG9nZ2xlKClcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzbWFsbFNjcmVlbk1lbnVWaXNpYmxlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPm1lbnU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LXRvb2xiYXI+XG5cbjxtYXQtc2lkZW5hdi1jb250YWluZXIgW2NsYXNzLnJpc2stbGF5b3V0LXdpdGgtZm9vdGVyXT1cImZvb3RlclZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImJhY2tncm91bmRDb2xvclwiPlxuICAgIDxtYXQtc2lkZW5hdiAjc2lkZW5hdj1cIm1hdFNpZGVuYXZcIiAoY2xpY2spPVwiY2xvc2VTaWRlTmF2KHNpZGVuYXYpXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttZW51LXZlcnRpY2FsXSwgcmlzay1sYXlvdXQtdmVydGljYWwgPiAqXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbWF0LXNpZGVuYXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicmlzay1sYXlvdXQtY29udGVudFwiPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG48L21hdC1zaWRlbmF2LWNvbnRhaW5lcj5cblxuPGRpdiBjbGFzcz1cInJpc2stbGF5b3V0LWZvb3RlclwiICpuZ0lmPVwiZm9vdGVyVmlzaWJsZVwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInJpc2stbGF5b3V0LWZvb3RlciA+ICpcIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==