@sumaris-net/ngx-components 2.4.20-rc1 → 2.4.20-rc2

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.
@@ -47,12 +47,12 @@ export class FormButtonsBarComponent {
47
47
  FormButtonsBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: FormButtonsBarComponent, deps: [{ token: i1.Hotkeys }, { token: i2.MenuService }], target: i0.ɵɵFactoryTarget.Component });
48
48
  FormButtonsBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: FormButtonsBarComponent, selector: "app-form-buttons-bar", inputs: { disabled: "disabled", disabledCancel: "disabledCancel", classList: "classList" }, outputs: { onCancel: "onCancel", onSave: "onSave", onNext: "onNext", onBack: "onBack" }, providers: [
49
49
  { provide: FormButtonsBarToken, useExisting: FormButtonsBarComponent }
50
- ], ngImport: i0, template: "\n<ion-toolbar [class]=\"classList\">\n <ion-row class=\"ion-no-padding\" nowrap>\n <!-- show menu button -->\n <ion-col size=\"auto\" class=\"hidden-xs hidden-sm\">\n <ion-menu-toggle>\n <button\n mat-icon-button\n color=\"accent\"\n [title]=\"'COMMON.BTN_SHOW_MENU' | translate\"\n (click)=\"menu.toggleSplitPaneWhen()\">\n <mat-icon><span>&#xbb;</span></mat-icon>\n </button>\n </ion-menu-toggle>\n </ion-col>\n\n <ion-col class=\"app-form-buttons-bar-content\">\n <ng-content></ng-content>\n </ion-col>\n\n <ion-col size=\"auto\">\n\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- close (go back) -->\n <ion-button\n *ngIf=\"onBack.observers | isNotEmptyArray\"\n fill=\"clear\" color=\"dark\"\n (click)=\"onBack.emit($event)\"\n (keyup.enter)=\"onBack.emit($event)\"\n >\n <ion-label translate>COMMON.BTN_CLOSE</ion-label>\n </ion-button>\n\n <!-- reload -->\n <ion-button\n *ngIf=\"onCancel.observers | isNotEmptyArray\"\n fill=\"clear\" color=\"dark\"\n [disabled]=\"disabledCancel\"\n (click)=\"onCancel.emit($event)\"\n (keyup.enter)=\"onCancel.emit($event)\"\n >\n <ion-icon slot=\"start\" name=\"refresh\"></ion-icon>\n <ion-label translate>COMMON.BTN_RESET</ion-label>\n </ion-button>\n\n <!-- next -->\n <ion-button\n *ngIf=\"onNext.observers | isNotEmptyArray\"\n fill=\"solid\"\n (click)=\"onNext.emit($event)\"\n (keyup.enter)=\"onNext.emit($event)\"\n >\n <ion-label translate>COMMON.BTN_NEXT</ion-label>\n <ion-icon slot=\"end\" name=\"arrow-forward\"></ion-icon>\n </ion-button>\n\n <!-- save -->\n <ion-button\n *ngIf=\"onSave.observers | isNotEmptyArray\"\n [fill]=\"disabled ? 'clear' : 'solid'\"\n [disabled]=\"disabled\"\n (click)=\"onSave.emit($event)\"\n (keyup.enter)=\"onSave.emit($event)\" color=\"danger\"\n >\n <ion-label [innerHTML]=\"'COMMON.BTN_SAVE_WITH_SHORTCUT'|translate\" [title]=\"'COMMON.BTN_SAVE_WITH_SHORTCUT_HELP'|translate\"></ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n</ion-toolbar>\n", styles: [":host{width:100%}:host ion-toolbar{height:var(--app-form-buttons-bar-height);padding:0 6px}:host ion-col{padding:0}ion-menu-toggle button{top:4px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i4.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i4.IonRow, selector: "ion-row" }, { kind: "component", type: i4.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i5.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i8.NotEmptyArrayPipe, name: "isNotEmptyArray" }] });
50
+ ], ngImport: i0, template: "\n<ion-toolbar [class]=\"classList\">\n <ion-row class=\"ion-no-padding\" nowrap>\n <!-- show menu button -->\n <ion-col size=\"auto\" class=\"hidden-xs hidden-sm\">\n <ion-menu-toggle>\n <button\n mat-icon-button\n color=\"accent\"\n [title]=\"'COMMON.BTN_SHOW_MENU' | translate\"\n (click)=\"menu.toggleSplitPaneWhen()\">\n <mat-icon><span>&#xbb;</span></mat-icon>\n </button>\n </ion-menu-toggle>\n </ion-col>\n\n <ion-col class=\"app-form-buttons-bar-content\">\n <ng-content></ng-content>\n </ion-col>\n\n <ion-col size=\"auto\" class=\"app-form-buttons-bar-buttons\">\n\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- close (go back) -->\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"onBack.emit($event)\"\n (keyup.enter)=\"onBack.emit($event)\"\n *ngIf=\"onBack.observers | isNotEmptyArray\"\n class=\"back\">\n <ion-label translate>COMMON.BTN_CLOSE</ion-label>\n </ion-button>\n\n <!-- reload -->\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"onCancel.emit($event)\"\n (keyup.enter)=\"onCancel.emit($event)\"\n [disabled]=\"disabledCancel\"\n class=\"cancel\">\n <ion-icon slot=\"start\" name=\"refresh\"></ion-icon>\n <ion-label translate>COMMON.BTN_RESET</ion-label>\n </ion-button>\n\n <!-- next -->\n <ion-button fill=\"solid\" (click)=\"onNext.emit($event)\" (keyup.enter)=\"onNext.emit($event)\" *ngIf=\"onNext.observers | isNotEmptyArray\"\n class=\"next\">\n <ion-label translate>COMMON.BTN_NEXT</ion-label>\n <ion-icon slot=\"end\" name=\"arrow-forward\"></ion-icon>\n </ion-button>\n\n <!-- save -->\n <ion-button [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onSave.emit($event)\"\n (keyup.enter)=\"onSave.emit($event)\" color=\"danger\"\n [disabled]=\"disabled\"\n class=\"save\">\n <ion-label [innerHTML]=\"'COMMON.BTN_SAVE_WITH_SHORTCUT'|translate\" [title]=\"'COMMON.BTN_SAVE_WITH_SHORTCUT_HELP'|translate\"></ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n</ion-toolbar>\n", styles: [":host{width:100%}:host ion-toolbar{height:var(--app-form-buttons-bar-height);padding:0 6px}:host ion-col{padding:0}ion-menu-toggle button{top:4px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i4.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i4.IonRow, selector: "ion-row" }, { kind: "component", type: i4.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i5.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i8.NotEmptyArrayPipe, name: "isNotEmptyArray" }] });
51
51
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: FormButtonsBarComponent, decorators: [{
52
52
  type: Component,
53
53
  args: [{ selector: 'app-form-buttons-bar', providers: [
54
54
  { provide: FormButtonsBarToken, useExisting: FormButtonsBarComponent }
55
- ], template: "\n<ion-toolbar [class]=\"classList\">\n <ion-row class=\"ion-no-padding\" nowrap>\n <!-- show menu button -->\n <ion-col size=\"auto\" class=\"hidden-xs hidden-sm\">\n <ion-menu-toggle>\n <button\n mat-icon-button\n color=\"accent\"\n [title]=\"'COMMON.BTN_SHOW_MENU' | translate\"\n (click)=\"menu.toggleSplitPaneWhen()\">\n <mat-icon><span>&#xbb;</span></mat-icon>\n </button>\n </ion-menu-toggle>\n </ion-col>\n\n <ion-col class=\"app-form-buttons-bar-content\">\n <ng-content></ng-content>\n </ion-col>\n\n <ion-col size=\"auto\">\n\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- close (go back) -->\n <ion-button\n *ngIf=\"onBack.observers | isNotEmptyArray\"\n fill=\"clear\" color=\"dark\"\n (click)=\"onBack.emit($event)\"\n (keyup.enter)=\"onBack.emit($event)\"\n >\n <ion-label translate>COMMON.BTN_CLOSE</ion-label>\n </ion-button>\n\n <!-- reload -->\n <ion-button\n *ngIf=\"onCancel.observers | isNotEmptyArray\"\n fill=\"clear\" color=\"dark\"\n [disabled]=\"disabledCancel\"\n (click)=\"onCancel.emit($event)\"\n (keyup.enter)=\"onCancel.emit($event)\"\n >\n <ion-icon slot=\"start\" name=\"refresh\"></ion-icon>\n <ion-label translate>COMMON.BTN_RESET</ion-label>\n </ion-button>\n\n <!-- next -->\n <ion-button\n *ngIf=\"onNext.observers | isNotEmptyArray\"\n fill=\"solid\"\n (click)=\"onNext.emit($event)\"\n (keyup.enter)=\"onNext.emit($event)\"\n >\n <ion-label translate>COMMON.BTN_NEXT</ion-label>\n <ion-icon slot=\"end\" name=\"arrow-forward\"></ion-icon>\n </ion-button>\n\n <!-- save -->\n <ion-button\n *ngIf=\"onSave.observers | isNotEmptyArray\"\n [fill]=\"disabled ? 'clear' : 'solid'\"\n [disabled]=\"disabled\"\n (click)=\"onSave.emit($event)\"\n (keyup.enter)=\"onSave.emit($event)\" color=\"danger\"\n >\n <ion-label [innerHTML]=\"'COMMON.BTN_SAVE_WITH_SHORTCUT'|translate\" [title]=\"'COMMON.BTN_SAVE_WITH_SHORTCUT_HELP'|translate\"></ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n</ion-toolbar>\n", styles: [":host{width:100%}:host ion-toolbar{height:var(--app-form-buttons-bar-height);padding:0 6px}:host ion-col{padding:0}ion-menu-toggle button{top:4px}\n"] }]
55
+ ], template: "\n<ion-toolbar [class]=\"classList\">\n <ion-row class=\"ion-no-padding\" nowrap>\n <!-- show menu button -->\n <ion-col size=\"auto\" class=\"hidden-xs hidden-sm\">\n <ion-menu-toggle>\n <button\n mat-icon-button\n color=\"accent\"\n [title]=\"'COMMON.BTN_SHOW_MENU' | translate\"\n (click)=\"menu.toggleSplitPaneWhen()\">\n <mat-icon><span>&#xbb;</span></mat-icon>\n </button>\n </ion-menu-toggle>\n </ion-col>\n\n <ion-col class=\"app-form-buttons-bar-content\">\n <ng-content></ng-content>\n </ion-col>\n\n <ion-col size=\"auto\" class=\"app-form-buttons-bar-buttons\">\n\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- close (go back) -->\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"onBack.emit($event)\"\n (keyup.enter)=\"onBack.emit($event)\"\n *ngIf=\"onBack.observers | isNotEmptyArray\"\n class=\"back\">\n <ion-label translate>COMMON.BTN_CLOSE</ion-label>\n </ion-button>\n\n <!-- reload -->\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"onCancel.emit($event)\"\n (keyup.enter)=\"onCancel.emit($event)\"\n [disabled]=\"disabledCancel\"\n class=\"cancel\">\n <ion-icon slot=\"start\" name=\"refresh\"></ion-icon>\n <ion-label translate>COMMON.BTN_RESET</ion-label>\n </ion-button>\n\n <!-- next -->\n <ion-button fill=\"solid\" (click)=\"onNext.emit($event)\" (keyup.enter)=\"onNext.emit($event)\" *ngIf=\"onNext.observers | isNotEmptyArray\"\n class=\"next\">\n <ion-label translate>COMMON.BTN_NEXT</ion-label>\n <ion-icon slot=\"end\" name=\"arrow-forward\"></ion-icon>\n </ion-button>\n\n <!-- save -->\n <ion-button [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onSave.emit($event)\"\n (keyup.enter)=\"onSave.emit($event)\" color=\"danger\"\n [disabled]=\"disabled\"\n class=\"save\">\n <ion-label [innerHTML]=\"'COMMON.BTN_SAVE_WITH_SHORTCUT'|translate\" [title]=\"'COMMON.BTN_SAVE_WITH_SHORTCUT_HELP'|translate\"></ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n</ion-toolbar>\n", styles: [":host{width:100%}:host ion-toolbar{height:var(--app-form-buttons-bar-height);padding:0 6px}:host ion-col{padding:0}ion-menu-toggle button{top:4px}\n"] }]
56
56
  }], ctorParameters: function () { return [{ type: i1.Hotkeys }, { type: i2.MenuService }]; }, propDecorators: { disabled: [{
57
57
  type: Input
58
58
  }], disabledCancel: [{
@@ -68,4 +68,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
68
68
  }], onBack: [{
69
69
  type: Output
70
70
  }] } });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1idXR0b25zLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvZm9ybS9idXR0b25zL2Zvcm0tYnV0dG9ucy1iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2Zvcm0vYnV0dG9ucy9mb3JtLWJ1dHRvbnMtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFaEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUMsTUFBTSxFQUFNLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFHM0MsTUFBTSxPQUFnQixtQkFBbUI7Q0FLeEM7QUFVRCxNQUFNLE9BQU8sdUJBQXVCO0lBYWxDLFlBQW9CLE9BQWdCLEVBQzNCLElBQWlCO1FBRE4sWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUMzQixTQUFJLEdBQUosSUFBSSxDQUFhO1FBWmxCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVsQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBR3RCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQ3JDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQ25DLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQ25DLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBTTNDLFNBQVM7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFDLENBQUM7YUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2pDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXBELFNBQVM7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFDLENBQUM7YUFDdEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUN6RCxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ25ELENBQUM7UUFFRixTQUFTO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFDLENBQUM7YUFDMUYsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBRWpDO2FBQ0EsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7cUhBOUNVLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLG9PQUp2QjtRQUNULEVBQUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBQztLQUNyRSwwQkNuQkgsaXdFQXNFQTs0RkRqRGEsdUJBQXVCO2tCQVJuQyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQjt3QkFDVCxFQUFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLHlCQUF5QixFQUFDO3FCQUNyRTt3SEFNUSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SG90a2V5c30gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2hvdGtleXMvaG90a2V5cy5zZXJ2aWNlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TWVudVNlcnZpY2V9IGZyb20gJy4uLy4uL21lbnUvbWVudS5zZXJ2aWNlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZvcm1CdXR0b25zQmFyVG9rZW4ge1xuICBhYnN0cmFjdCBvbkNhbmNlbDogRXZlbnRFbWl0dGVyPEV2ZW50PjtcbiAgYWJzdHJhY3Qgb25TYXZlOiBFdmVudEVtaXR0ZXI8RXZlbnQ+O1xuICBhYnN0cmFjdCBvbk5leHQ6IEV2ZW50RW1pdHRlcjxFdmVudD47XG4gIGFic3RyYWN0IG9uQmFjazogRXZlbnRFbWl0dGVyPEV2ZW50Pjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWZvcm0tYnV0dG9ucy1iYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1idXR0b25zLWJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tYnV0dG9ucy1iYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge3Byb3ZpZGU6IEZvcm1CdXR0b25zQmFyVG9rZW4sIHVzZUV4aXN0aW5nOiBGb3JtQnV0dG9uc0JhckNvbXBvbmVudH1cbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUJ1dHRvbnNCYXJDb21wb25lbnQgaW1wbGVtZW50cyBGb3JtQnV0dG9uc0JhclRva2VuLCBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZENhbmNlbCA9IGZhbHNlO1xuICBASW5wdXQoKSBjbGFzc0xpc3Q6IHN0cmluZztcblxuICBAT3V0cHV0KCkgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uTmV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvbkJhY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaG90a2V5czogSG90a2V5cyxcbiAgICBwdWJsaWMgbWVudTogTWVudVNlcnZpY2VcbiAgICApIHtcblxuICAgIC8vIEN0cmwrU1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBob3RrZXlzLmFkZFNob3J0Y3V0KHtrZXlzOiAnY29udHJvbC5zJywgZGVzY3JpcHRpb246ICdDT01NT04uQlROX1NBVkUnfSlcbiAgICAgICAgLnBpcGUoZmlsdGVyKGUgPT4gIXRoaXMuZGlzYWJsZWQpKVxuICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5vblNhdmUuZW1pdChldmVudCkpKTtcblxuICAgIC8vIEN0cmwrWlxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBob3RrZXlzLmFkZFNob3J0Y3V0KHtrZXlzOiAnY29udHJvbC56JywgZGVzY3JpcHRpb246ICdDT01NT04uQlROX1JFU0VUJ30pXG4gICAgICAgIC5waXBlKGZpbHRlcihlID0+ICF0aGlzLmRpc2FibGVkICYmICF0aGlzLmRpc2FibGVkQ2FuY2VsKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMub25DYW5jZWwuZW1pdChldmVudCkpXG4gICAgKTtcblxuICAgIC8vIEVzY2FwZVxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBob3RrZXlzLmFkZFNob3J0Y3V0KHtrZXlzOiAnZXNjYXBlJywgZGVzY3JpcHRpb246ICdDT01NT04uQlROX0NMT1NFJywgcHJldmVudERlZmF1bHQ6IGZhbHNlfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKGUgPT4gIWUuZGVmYXVsdFByZXZlbnRlZCksXG4gICAgICAgICAgLy90YXAoKCkgPT4gY29uc29sZS5kZWJ1ZygnW2Zvcm0tYnV0dG9ucy1iYXJdIEVtaXQgYmFjayBldmVudCAoa2V5ZG93bi5lc2NhcGUpJykpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMub25CYWNrLmVtaXQoZXZlbnQpKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQ2FuY2VsLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblNhdmUuY29tcGxldGUoKTtcbiAgICB0aGlzLm9uTmV4dC5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25CYWNrLmNvbXBsZXRlKCk7XG4gIH1cblxufVxuIiwiXG48aW9uLXRvb2xiYXIgW2NsYXNzXT1cImNsYXNzTGlzdFwiPlxuICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCIgbm93cmFwPlxuICAgIDwhLS0gc2hvdyBtZW51IGJ1dHRvbiAtLT5cbiAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiIGNsYXNzPVwiaGlkZGVuLXhzIGhpZGRlbi1zbVwiPlxuICAgICAgPGlvbi1tZW51LXRvZ2dsZT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fU0hPV19NRU5VJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm1lbnUudG9nZ2xlU3BsaXRQYW5lV2hlbigpXCI+XG4gICAgICAgICAgPG1hdC1pY29uPjxzcGFuPiYjeGJiOzwvc3Bhbj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvaW9uLW1lbnUtdG9nZ2xlPlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDxpb24tY29sIGNsYXNzPVwiYXBwLWZvcm0tYnV0dG9ucy1iYXItY29udGVudFwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PWVuZF1cIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgIDwhLS0gY2xvc2UgKGdvIGJhY2spIC0tPlxuICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgKm5nSWY9XCJvbkJhY2sub2JzZXJ2ZXJzIHwgaXNOb3RFbXB0eUFycmF5XCJcbiAgICAgICAgZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQmFjay5lbWl0KCRldmVudClcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25CYWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fQ0xPU0U8L2lvbi1sYWJlbD5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgPCEtLSByZWxvYWQgLS0+XG4gICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAqbmdJZj1cIm9uQ2FuY2VsLm9ic2VydmVycyB8IGlzTm90RW1wdHlBcnJheVwiXG4gICAgICAgIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZENhbmNlbFwiXG4gICAgICAgIChjbGljayk9XCJvbkNhbmNlbC5lbWl0KCRldmVudClcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25DYW5jZWwuZW1pdCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJyZWZyZXNoXCI+PC9pb24taWNvbj5cbiAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9SRVNFVDwvaW9uLWxhYmVsPlxuICAgICAgPC9pb24tYnV0dG9uPlxuXG4gICAgICA8IS0tIG5leHQgLS0+XG4gICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAqbmdJZj1cIm9uTmV4dC5vYnNlcnZlcnMgfCBpc05vdEVtcHR5QXJyYXlcIlxuICAgICAgICBmaWxsPVwic29saWRcIlxuICAgICAgICAoY2xpY2spPVwib25OZXh0LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJvbk5leHQuZW1pdCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9ORVhUPC9pb24tbGFiZWw+XG4gICAgICAgIDxpb24taWNvbiBzbG90PVwiZW5kXCIgbmFtZT1cImFycm93LWZvcndhcmRcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuXG4gICAgICA8IS0tIHNhdmUgLS0+XG4gICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAqbmdJZj1cIm9uU2F2ZS5vYnNlcnZlcnMgfCBpc05vdEVtcHR5QXJyYXlcIlxuICAgICAgICBbZmlsbF09XCJkaXNhYmxlZCA/ICdjbGVhcicgOiAnc29saWQnXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uU2F2ZS5lbWl0KCRldmVudClcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25TYXZlLmVtaXQoJGV2ZW50KVwiIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgID5cbiAgICAgICAgPGlvbi1sYWJlbCBbaW5uZXJIVE1MXT1cIidDT01NT04uQlROX1NBVkVfV0lUSF9TSE9SVENVVCd8dHJhbnNsYXRlXCIgW3RpdGxlXT1cIidDT01NT04uQlROX1NBVkVfV0lUSF9TSE9SVENVVF9IRUxQJ3x0cmFuc2xhdGVcIj48L2lvbi1sYWJlbD5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cbjwvaW9uLXRvb2xiYXI+XG4iXX0=
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1idXR0b25zLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvZm9ybS9idXR0b25zL2Zvcm0tYnV0dG9ucy1iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2Zvcm0vYnV0dG9ucy9mb3JtLWJ1dHRvbnMtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFaEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUMsTUFBTSxFQUFNLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFHM0MsTUFBTSxPQUFnQixtQkFBbUI7Q0FLeEM7QUFVRCxNQUFNLE9BQU8sdUJBQXVCO0lBYWxDLFlBQW9CLE9BQWdCLEVBQzNCLElBQWlCO1FBRE4sWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUMzQixTQUFJLEdBQUosSUFBSSxDQUFhO1FBWmxCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVsQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBR3RCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQ3JDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQ25DLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQ25DLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBTTNDLFNBQVM7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFDLENBQUM7YUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2pDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXBELFNBQVM7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFDLENBQUM7YUFDdEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUN6RCxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ25ELENBQUM7UUFFRixTQUFTO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFDLENBQUM7YUFDMUYsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBRWpDO2FBQ0EsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7cUhBOUNVLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLG9PQUp2QjtRQUNULEVBQUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBQztLQUNyRSwwQkNuQkgseXhFQTJEQTs0RkR0Q2EsdUJBQXVCO2tCQVJuQyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQjt3QkFDVCxFQUFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLHlCQUF5QixFQUFDO3FCQUNyRTt3SEFNUSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SG90a2V5c30gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2hvdGtleXMvaG90a2V5cy5zZXJ2aWNlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TWVudVNlcnZpY2V9IGZyb20gJy4uLy4uL21lbnUvbWVudS5zZXJ2aWNlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZvcm1CdXR0b25zQmFyVG9rZW4ge1xuICBhYnN0cmFjdCBvbkNhbmNlbDogRXZlbnRFbWl0dGVyPEV2ZW50PjtcbiAgYWJzdHJhY3Qgb25TYXZlOiBFdmVudEVtaXR0ZXI8RXZlbnQ+O1xuICBhYnN0cmFjdCBvbk5leHQ6IEV2ZW50RW1pdHRlcjxFdmVudD47XG4gIGFic3RyYWN0IG9uQmFjazogRXZlbnRFbWl0dGVyPEV2ZW50Pjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWZvcm0tYnV0dG9ucy1iYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1idXR0b25zLWJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tYnV0dG9ucy1iYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge3Byb3ZpZGU6IEZvcm1CdXR0b25zQmFyVG9rZW4sIHVzZUV4aXN0aW5nOiBGb3JtQnV0dG9uc0JhckNvbXBvbmVudH1cbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUJ1dHRvbnNCYXJDb21wb25lbnQgaW1wbGVtZW50cyBGb3JtQnV0dG9uc0JhclRva2VuLCBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZENhbmNlbCA9IGZhbHNlO1xuICBASW5wdXQoKSBjbGFzc0xpc3Q6IHN0cmluZztcblxuICBAT3V0cHV0KCkgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uTmV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvbkJhY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaG90a2V5czogSG90a2V5cyxcbiAgICBwdWJsaWMgbWVudTogTWVudVNlcnZpY2VcbiAgICApIHtcblxuICAgIC8vIEN0cmwrU1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBob3RrZXlzLmFkZFNob3J0Y3V0KHtrZXlzOiAnY29udHJvbC5zJywgZGVzY3JpcHRpb246ICdDT01NT04uQlROX1NBVkUnfSlcbiAgICAgICAgLnBpcGUoZmlsdGVyKGUgPT4gIXRoaXMuZGlzYWJsZWQpKVxuICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5vblNhdmUuZW1pdChldmVudCkpKTtcblxuICAgIC8vIEN0cmwrWlxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBob3RrZXlzLmFkZFNob3J0Y3V0KHtrZXlzOiAnY29udHJvbC56JywgZGVzY3JpcHRpb246ICdDT01NT04uQlROX1JFU0VUJ30pXG4gICAgICAgIC5waXBlKGZpbHRlcihlID0+ICF0aGlzLmRpc2FibGVkICYmICF0aGlzLmRpc2FibGVkQ2FuY2VsKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMub25DYW5jZWwuZW1pdChldmVudCkpXG4gICAgKTtcblxuICAgIC8vIEVzY2FwZVxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBob3RrZXlzLmFkZFNob3J0Y3V0KHtrZXlzOiAnZXNjYXBlJywgZGVzY3JpcHRpb246ICdDT01NT04uQlROX0NMT1NFJywgcHJldmVudERlZmF1bHQ6IGZhbHNlfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKGUgPT4gIWUuZGVmYXVsdFByZXZlbnRlZCksXG4gICAgICAgICAgLy90YXAoKCkgPT4gY29uc29sZS5kZWJ1ZygnW2Zvcm0tYnV0dG9ucy1iYXJdIEVtaXQgYmFjayBldmVudCAoa2V5ZG93bi5lc2NhcGUpJykpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMub25CYWNrLmVtaXQoZXZlbnQpKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQ2FuY2VsLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblNhdmUuY29tcGxldGUoKTtcbiAgICB0aGlzLm9uTmV4dC5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25CYWNrLmNvbXBsZXRlKCk7XG4gIH1cblxufVxuIiwiXG48aW9uLXRvb2xiYXIgW2NsYXNzXT1cImNsYXNzTGlzdFwiPlxuICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCIgbm93cmFwPlxuICAgIDwhLS0gc2hvdyBtZW51IGJ1dHRvbiAtLT5cbiAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiIGNsYXNzPVwiaGlkZGVuLXhzIGhpZGRlbi1zbVwiPlxuICAgICAgPGlvbi1tZW51LXRvZ2dsZT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fU0hPV19NRU5VJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm1lbnUudG9nZ2xlU3BsaXRQYW5lV2hlbigpXCI+XG4gICAgICAgICAgPG1hdC1pY29uPjxzcGFuPiYjeGJiOzwvc3Bhbj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvaW9uLW1lbnUtdG9nZ2xlPlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDxpb24tY29sIGNsYXNzPVwiYXBwLWZvcm0tYnV0dG9ucy1iYXItY29udGVudFwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCIgY2xhc3M9XCJhcHAtZm9ybS1idXR0b25zLWJhci1idXR0b25zXCI+XG5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PWVuZF1cIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgIDwhLS0gY2xvc2UgKGdvIGJhY2spIC0tPlxuICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgKGNsaWNrKT1cIm9uQmFjay5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQmFjay5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvbkJhY2sub2JzZXJ2ZXJzIHwgaXNOb3RFbXB0eUFycmF5XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFja1wiPlxuICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uQlROX0NMT1NFPC9pb24tbGFiZWw+XG4gICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgIDwhLS0gcmVsb2FkIC0tPlxuICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgKGNsaWNrKT1cIm9uQ2FuY2VsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25DYW5jZWwuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZENhbmNlbFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNhbmNlbFwiPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cInJlZnJlc2hcIj48L2lvbi1pY29uPlxuICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uQlROX1JFU0VUPC9pb24tbGFiZWw+XG4gICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgIDwhLS0gbmV4dCAtLT5cbiAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJzb2xpZFwiIChjbGljayk9XCJvbk5leHQuZW1pdCgkZXZlbnQpXCIgKGtleXVwLmVudGVyKT1cIm9uTmV4dC5lbWl0KCRldmVudClcIiAqbmdJZj1cIm9uTmV4dC5vYnNlcnZlcnMgfCBpc05vdEVtcHR5QXJyYXlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuZXh0XCI+XG4gICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fTkVYVDwvaW9uLWxhYmVsPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImVuZFwiIG5hbWU9XCJhcnJvdy1mb3J3YXJkXCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgPCEtLSBzYXZlIC0tPlxuICAgICAgPGlvbi1idXR0b24gW2ZpbGxdPVwiZGlzYWJsZWQgPyAnY2xlYXInIDogJ3NvbGlkJ1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TYXZlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25TYXZlLmVtaXQoJGV2ZW50KVwiIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNhdmVcIj5cbiAgICAgICAgPGlvbi1sYWJlbCBbaW5uZXJIVE1MXT1cIidDT01NT04uQlROX1NBVkVfV0lUSF9TSE9SVENVVCd8dHJhbnNsYXRlXCIgW3RpdGxlXT1cIidDT01NT04uQlROX1NBVkVfV0lUSF9TSE9SVENVVF9IRUxQJ3x0cmFuc2xhdGVcIj48L2lvbi1sYWJlbD5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cbjwvaW9uLXRvb2xiYXI+XG4iXX0=