@js-sugar/angular
Version:
JS-Sugar core package (Angular)
81 lines • 17 kB
JavaScript
import { animate, state, style, transition, trigger } from '@angular/animations';
import { Component, ContentChild, EventEmitter, Input, Optional, Output } from '@angular/core';
import { DividerMenuItemTemplateDirective } from './divider-menu-item-template.directive';
import { GroupMenuItemTemplateDirective } from './group-menu-item-template.directive';
import { TextMenuItemTemplateDirective } from './text-menu-item-template.directive';
import * as i0 from "@angular/core";
import * as i1 from "../../security";
import * as i2 from "@angular/common";
export class MenuComponent {
constructor(_identityManager) {
this._identityManager = _identityManager;
this.itemClick = new EventEmitter();
this._expansionStates = new Map();
}
_onTextMenuItemClick(item, e) {
e.stopPropagation();
if (!item.disabled) {
this.itemClick.emit({ item, mouseEvent: e });
}
}
_onGroupMenuItemClick(item, e) {
e.stopPropagation();
if (!item.disabled) {
var expanded = this._expansionStates.get(item);
this._expansionStates.set(item, !expanded);
}
}
_isGroupExpanded(item) {
var state = this._expansionStates.get(item);
return typeof state === 'undefined' ? false : state;
}
hasPermission(item) {
return true;
}
}
MenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: MenuComponent, deps: [{ token: i1.UserStore, optional: true }], target: i0.ɵɵFactoryTarget.Component });
MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: MenuComponent, selector: "jss-menu", inputs: { items: "items" }, outputs: { itemClick: "itemClick" }, queries: [{ propertyName: "_textTemplate", first: true, predicate: TextMenuItemTemplateDirective, descendants: true }, { propertyName: "_groupTemplate", first: true, predicate: GroupMenuItemTemplateDirective, descendants: true }, { propertyName: "_dividerTemplate", first: true, predicate: DividerMenuItemTemplateDirective, descendants: true }], exportAs: ["jssMenu"], ngImport: i0, template: "<ul>\r\n <ng-container *ngTemplateOutlet=\"menuTemplate; context: {$implicit: items}\"></ng-container>\r\n</ul>\r\n\r\n<ng-template #menuTemplate let-items>\r\n <ng-container *ngFor=\"let item of items\">\r\n <ng-container [ngSwitch]=\"item.constructor.name\">\r\n <li *ngSwitchCase=\"'GroupMenuItem'\" class=\"jss-group-menu-item\" (click)=\"_onGroupMenuItemClick(item, $event)\">\r\n <span *ngIf=\"!_groupTemplate && item.text\" class=\"group-text\">{{item.text}}</span>\r\n <ng-container *ngIf=\"_groupTemplate\">\r\n <ng-container *ngTemplateOutlet=\"_groupTemplate.templateRef; context: {$implicit: item}\"></ng-container>\r\n </ng-container>\r\n <ul *ngIf=\"item.children\" [@t]=\"_isGroupExpanded(item)\">\r\n <ng-container *ngTemplateOutlet=\"menuTemplate; context: {$implicit: item.children}\">\r\n </ng-container>\r\n </ul>\r\n </li> \r\n\r\n <li *ngSwitchCase=\"'TextMenuItem'\" class=\"jss-text-menu-item\" (click)=\"_onTextMenuItemClick(item, $event)\">\r\n <span *ngIf=\"!_textTemplate\">{{item.text}}</span>\r\n <ng-container *ngIf=\"_textTemplate\">\r\n <ng-container *ngTemplateOutlet=\"_textTemplate.templateRef; context: {$implicit: item}\"></ng-container>\r\n </ng-container>\r\n </li>\r\n\r\n <li *ngSwitchCase=\"'DividerMenuItem'\" class=\"jss-divider-menu-item\">\r\n <hr *ngIf=\"!_dividerTemplate\">\r\n <ng-container *ngIf=\"_dividerTemplate\">\r\n <ng-container *ngTemplateOutlet=\"_dividerTemplate.templateRef; context: {$implicit: item}\"></ng-container>\r\n </ng-container>\r\n </li>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>", styles: [":host{display:block}ul{padding:0;margin:0;overflow:hidden}ul li{list-style:none}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], animations: [
trigger('t', [
state('0', style({
height: '0',
})),
state('1', style({
height: '*',
})),
transition('0 <=> 1', [
animate('.15s cubic-bezier(.7,.3,.1,1)'),
])
]),
] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: MenuComponent, decorators: [{
type: Component,
args: [{ selector: 'jss-menu', exportAs: 'jssMenu', animations: [
trigger('t', [
state('0', style({
height: '0',
})),
state('1', style({
height: '*',
})),
transition('0 <=> 1', [
animate('.15s cubic-bezier(.7,.3,.1,1)'),
])
]),
], template: "<ul>\r\n <ng-container *ngTemplateOutlet=\"menuTemplate; context: {$implicit: items}\"></ng-container>\r\n</ul>\r\n\r\n<ng-template #menuTemplate let-items>\r\n <ng-container *ngFor=\"let item of items\">\r\n <ng-container [ngSwitch]=\"item.constructor.name\">\r\n <li *ngSwitchCase=\"'GroupMenuItem'\" class=\"jss-group-menu-item\" (click)=\"_onGroupMenuItemClick(item, $event)\">\r\n <span *ngIf=\"!_groupTemplate && item.text\" class=\"group-text\">{{item.text}}</span>\r\n <ng-container *ngIf=\"_groupTemplate\">\r\n <ng-container *ngTemplateOutlet=\"_groupTemplate.templateRef; context: {$implicit: item}\"></ng-container>\r\n </ng-container>\r\n <ul *ngIf=\"item.children\" [@t]=\"_isGroupExpanded(item)\">\r\n <ng-container *ngTemplateOutlet=\"menuTemplate; context: {$implicit: item.children}\">\r\n </ng-container>\r\n </ul>\r\n </li> \r\n\r\n <li *ngSwitchCase=\"'TextMenuItem'\" class=\"jss-text-menu-item\" (click)=\"_onTextMenuItemClick(item, $event)\">\r\n <span *ngIf=\"!_textTemplate\">{{item.text}}</span>\r\n <ng-container *ngIf=\"_textTemplate\">\r\n <ng-container *ngTemplateOutlet=\"_textTemplate.templateRef; context: {$implicit: item}\"></ng-container>\r\n </ng-container>\r\n </li>\r\n\r\n <li *ngSwitchCase=\"'DividerMenuItem'\" class=\"jss-divider-menu-item\">\r\n <hr *ngIf=\"!_dividerTemplate\">\r\n <ng-container *ngIf=\"_dividerTemplate\">\r\n <ng-container *ngTemplateOutlet=\"_dividerTemplate.templateRef; context: {$implicit: item}\"></ng-container>\r\n </ng-container>\r\n </li>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>", styles: [":host{display:block}ul{padding:0;margin:0;overflow:hidden}ul li{list-style:none}\n"] }]
}], ctorParameters: function () { return [{ type: i1.UserStore, decorators: [{
type: Optional
}] }]; }, propDecorators: { items: [{
type: Input
}], itemClick: [{
type: Output
}], _textTemplate: [{
type: ContentChild,
args: [TextMenuItemTemplateDirective]
}], _groupTemplate: [{
type: ContentChild,
args: [GroupMenuItemTemplateDirective]
}], _dividerTemplate: [{
type: ContentChild,
args: [DividerMenuItemTemplateDirective]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9tZW51L21lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvbWVudS9tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9GLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7O0FBc0JwRixNQUFNLE9BQU8sYUFBYTtJQVF4QixZQUFnQyxnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQU54RCxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFJckQscUJBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQTBCLENBQUM7SUFFUyxDQUFDO0lBRXZFLG9CQUFvQixDQUFDLElBQWtCLEVBQUUsQ0FBYTtRQUNwRCxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDOUM7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBbUIsRUFBRSxDQUFhO1FBQ3RELENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDNUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBbUI7UUFDbEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDdEQsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUF3QjtRQUtwQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7OzBHQXBDVSxhQUFhOzhGQUFiLGFBQWEsNEpBR1YsNkJBQTZCLGlGQUM3Qiw4QkFBOEIsbUZBQzlCLGdDQUFnQyx1RUNqQ2hELHdzREFpQ2Msa3NCRG5CQTtRQUNWLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDWCxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztnQkFDZixNQUFNLEVBQUUsR0FBRzthQUNaLENBQUMsQ0FBQztZQUNILEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDO2dCQUNmLE1BQU0sRUFBRSxHQUFHO2FBQ1osQ0FBQyxDQUFDO1lBQ0gsVUFBVSxDQUFDLFNBQVMsRUFBRTtnQkFDcEIsT0FBTyxDQUFDLCtCQUErQixDQUFDO2FBQ3pDLENBQUM7U0FDSCxDQUFDO0tBQ0g7MkZBRVUsYUFBYTtrQkFuQnpCLFNBQVM7K0JBQ0UsVUFBVSxZQUNWLFNBQVMsY0FHUDt3QkFDVixPQUFPLENBQUMsR0FBRyxFQUFFOzRCQUNYLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDO2dDQUNmLE1BQU0sRUFBRSxHQUFHOzZCQUNaLENBQUMsQ0FBQzs0QkFDSCxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztnQ0FDZixNQUFNLEVBQUUsR0FBRzs2QkFDWixDQUFDLENBQUM7NEJBQ0gsVUFBVSxDQUFDLFNBQVMsRUFBRTtnQ0FDcEIsT0FBTyxDQUFDLCtCQUErQixDQUFDOzZCQUN6QyxDQUFDO3lCQUNILENBQUM7cUJBQ0g7OzBCQVVZLFFBQVE7NENBUFosS0FBSztzQkFBYixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ3NDLGFBQWE7c0JBQXpELFlBQVk7dUJBQUMsNkJBQTZCO2dCQUNHLGNBQWM7c0JBQTNELFlBQVk7dUJBQUMsOEJBQThCO2dCQUNJLGdCQUFnQjtzQkFBL0QsWUFBWTt1QkFBQyxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgR3JvdXBNZW51SXRlbSwgTWVudUl0ZW0sIFRleHRNZW51SXRlbSB9IGZyb20gJy4uLy4uL2xheW91dCc7XHJcbmltcG9ydCB7IFVzZXIsIFVzZXJTdG9yZSB9IGZyb20gJy4uLy4uL3NlY3VyaXR5JztcclxuaW1wb3J0IHsgRGl2aWRlck1lbnVJdGVtVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuL2RpdmlkZXItbWVudS1pdGVtLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEdyb3VwTWVudUl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vZ3JvdXAtbWVudS1pdGVtLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRleHRNZW51SXRlbVRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi90ZXh0LW1lbnUtaXRlbS10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBNZW51SXRlbUNsaWNrRXZlbnQgfSBmcm9tICcuL3R5cGVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnanNzLW1lbnUnLFxyXG4gIGV4cG9ydEFzOiAnanNzTWVudScsXHJcbiAgdGVtcGxhdGVVcmw6ICdtZW51LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tZW51LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcigndCcsIFtcclxuICAgICAgc3RhdGUoJzAnLCBzdHlsZSh7XHJcbiAgICAgICAgaGVpZ2h0OiAnMCcsXHJcbiAgICAgIH0pKSxcclxuICAgICAgc3RhdGUoJzEnLCBzdHlsZSh7XHJcbiAgICAgICAgaGVpZ2h0OiAnKicsXHJcbiAgICAgIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbignMCA8PT4gMScsIFtcclxuICAgICAgICBhbmltYXRlKCcuMTVzIGN1YmljLWJlemllciguNywuMywuMSwxKScpLFxyXG4gICAgICBdKVxyXG4gICAgXSksXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVudUNvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgaXRlbXMhOiBNZW51SXRlbVtdO1xyXG4gIEBPdXRwdXQoKSBpdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnVJdGVtQ2xpY2tFdmVudD4oKTtcclxuICBAQ29udGVudENoaWxkKFRleHRNZW51SXRlbVRlbXBsYXRlRGlyZWN0aXZlKSBfdGV4dFRlbXBsYXRlPzogVGV4dE1lbnVJdGVtVGVtcGxhdGVEaXJlY3RpdmU7XHJcbiAgQENvbnRlbnRDaGlsZChHcm91cE1lbnVJdGVtVGVtcGxhdGVEaXJlY3RpdmUpIF9ncm91cFRlbXBsYXRlPzogR3JvdXBNZW51SXRlbVRlbXBsYXRlRGlyZWN0aXZlO1xyXG4gIEBDb250ZW50Q2hpbGQoRGl2aWRlck1lbnVJdGVtVGVtcGxhdGVEaXJlY3RpdmUpIF9kaXZpZGVyVGVtcGxhdGU/OiBEaXZpZGVyTWVudUl0ZW1UZW1wbGF0ZURpcmVjdGl2ZTtcclxuICBwcml2YXRlIF9leHBhbnNpb25TdGF0ZXMgPSBuZXcgTWFwPEdyb3VwTWVudUl0ZW0sIGJvb2xlYW4+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgX2lkZW50aXR5TWFuYWdlcj86IFVzZXJTdG9yZTxVc2VyPikgeyB9XHJcblxyXG4gIF9vblRleHRNZW51SXRlbUNsaWNrKGl0ZW06IFRleHRNZW51SXRlbSwgZTogTW91c2VFdmVudCkge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmICghaXRlbS5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLml0ZW1DbGljay5lbWl0KHsgaXRlbSwgbW91c2VFdmVudDogZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9vbkdyb3VwTWVudUl0ZW1DbGljayhpdGVtOiBHcm91cE1lbnVJdGVtLCBlOiBNb3VzZUV2ZW50KSB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKCFpdGVtLmRpc2FibGVkKSB7XHJcbiAgICAgIHZhciBleHBhbmRlZCA9IHRoaXMuX2V4cGFuc2lvblN0YXRlcy5nZXQoaXRlbSk7XHJcbiAgICAgIHRoaXMuX2V4cGFuc2lvblN0YXRlcy5zZXQoaXRlbSwgIWV4cGFuZGVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9pc0dyb3VwRXhwYW5kZWQoaXRlbTogR3JvdXBNZW51SXRlbSkge1xyXG4gICAgdmFyIHN0YXRlID0gdGhpcy5fZXhwYW5zaW9uU3RhdGVzLmdldChpdGVtKTtcclxuICAgIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09ICd1bmRlZmluZWQnID8gZmFsc2UgOiBzdGF0ZTtcclxuICB9XHJcblxyXG4gIGhhc1Blcm1pc3Npb24oaXRlbTogR3JvdXBNZW51SXRlbTxhbnk+KSB7XHJcbiAgICAvLyBpZiAodGhpcy5faWRlbnRpdHlNYW5hZ2VyICYmIGl0ZW0uc2hvd1Blcm1pc3Npb24pIHtcclxuICAgIC8vICAgY29uc3QgdXNlciA9IHRoaXMuX2lkZW50aXR5TWFuYWdlcj8uZ2V0KCkhO1xyXG4gICAgLy8gICByZXR1cm4gdXNlci5oYXNQZXJtaXNzaW9uKGl0ZW0uc2hvd1Blcm1pc3Npb24pO1xyXG4gICAgLy8gfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcbiIsIjx1bD5cclxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVudVRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtc31cIj48L25nLWNvbnRhaW5lcj5cclxuPC91bD5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbWVudVRlbXBsYXRlIGxldC1pdGVtcz5cclxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCI+XHJcbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJpdGVtLmNvbnN0cnVjdG9yLm5hbWVcIj5cclxuICAgICAgPGxpICpuZ1N3aXRjaENhc2U9XCInR3JvdXBNZW51SXRlbSdcIiBjbGFzcz1cImpzcy1ncm91cC1tZW51LWl0ZW1cIiAoY2xpY2spPVwiX29uR3JvdXBNZW51SXRlbUNsaWNrKGl0ZW0sICRldmVudClcIj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFfZ3JvdXBUZW1wbGF0ZSAmJiBpdGVtLnRleHRcIiBjbGFzcz1cImdyb3VwLXRleHRcIj57e2l0ZW0udGV4dH19PC9zcGFuPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfZ3JvdXBUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIl9ncm91cFRlbXBsYXRlLnRlbXBsYXRlUmVmOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDx1bCAqbmdJZj1cIml0ZW0uY2hpbGRyZW5cIiBbQHRdPVwiX2lzR3JvdXBFeHBhbmRlZChpdGVtKVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lbnVUZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogaXRlbS5jaGlsZHJlbn1cIj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvbGk+ICAgIFxyXG5cclxuICAgICAgPGxpICpuZ1N3aXRjaENhc2U9XCInVGV4dE1lbnVJdGVtJ1wiIGNsYXNzPVwianNzLXRleHQtbWVudS1pdGVtXCIgKGNsaWNrKT1cIl9vblRleHRNZW51SXRlbUNsaWNrKGl0ZW0sICRldmVudClcIj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFfdGV4dFRlbXBsYXRlXCI+e3tpdGVtLnRleHR9fTwvc3Bhbj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3RleHRUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIl90ZXh0VGVtcGxhdGUudGVtcGxhdGVSZWY7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGl0ZW19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbGk+XHJcblxyXG4gICAgICA8bGkgKm5nU3dpdGNoQ2FzZT1cIidEaXZpZGVyTWVudUl0ZW0nXCIgY2xhc3M9XCJqc3MtZGl2aWRlci1tZW51LWl0ZW1cIj5cclxuICAgICAgICA8aHIgKm5nSWY9XCIhX2RpdmlkZXJUZW1wbGF0ZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfZGl2aWRlclRlbXBsYXRlXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiX2RpdmlkZXJUZW1wbGF0ZS50ZW1wbGF0ZVJlZjsgY29udGV4dDogeyRpbXBsaWNpdDogaXRlbX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9saT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==