UNPKG

design-angular-kit

Version:

Un toolkit Angular conforme alle linee guida di design per i servizi web della PA

74 lines 15.1 kB
import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { RouterLink } from '@angular/router'; import { TranslateModule } from '@ngx-translate/core'; import { ItBackButtonComponent } from '../../navigation/back-button/back-button.component'; import { ItButtonDirective } from '../../core/button/button.directive'; import { inputToBoolean } from '../../../utils/coercion'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "@ngx-translate/core"; export class ItErrorPageComponent { constructor(route) { this.route = route; /** * Show/Hide error code * @default true - show */ this.showErrorCode = true; /** * Show/Hide back button * @default true - show */ this.showBackButton = true; /** * Show/Hide home button * @default true - show */ this.showHomeButton = true; this.route.data.subscribe(data => { if (!this.errorCode && data['errorCode']) { this.errorCode = data['errorCode']; // Get errorCode from route data } if (data['showErrorCode'] !== undefined) { this.showErrorCode = data['showErrorCode']; // Get showErrorCode from route data } if (!this.errorTitle && data['errorTitle']) { this.errorTitle = data['errorTitle']; // Get errorTitle from route data } if (!this.errorDescription && data['errorDescription']) { this.errorDescription = data['errorDescription']; // Get errorDescription from route data } if (data['showBackButton'] !== undefined) { this.showBackButton = data['showBackButton']; // Get showBackButton from route data } if (data['showHomeButton'] !== undefined) { this.showHomeButton = data['showHomeButton']; // Get showHomeButton from route data } }); } get isDefaultErrorCode() { return this.errorCode === 404 || this.errorCode === 403 || this.errorCode === 500; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItErrorPageComponent, deps: [{ token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItErrorPageComponent, isStandalone: true, selector: "it-error-page", inputs: { errorCode: "errorCode", showErrorCode: ["showErrorCode", "showErrorCode", inputToBoolean], errorTitle: "errorTitle", errorDescription: "errorDescription", showBackButton: ["showBackButton", "showBackButton", inputToBoolean], showHomeButton: ["showHomeButton", "showHomeButton", inputToBoolean] }, ngImport: i0, template: "<div class=\"container text-center mt-5\">\n @if (errorCode && showErrorCode) {\n <h1>{{ errorCode }}</h1>\n }\n <h2>\n @if (!errorTitle && isDefaultErrorCode) {\n {{ 'it.utils.error-page.' + errorCode + '.title' | translate }}\n } @else {\n {{ errorTitle || 'it.errors.generic' | translate }}\n }\n </h2>\n\n <p class=\"mt-3 w-75 mx-auto\">\n @if (!errorDescription && isDefaultErrorCode) {\n {{ 'it.utils.error-page.' + errorCode + '.description' | translate }}\n } @else {\n {{ errorDescription || 'it.errors.generic-support-message' | translate }}\n }\n </p>\n\n @if (showBackButton || showHomeButton) {\n <div class=\"mt-5\">\n @if (showBackButton) {\n <it-back-button></it-back-button>\n }\n @if (showHomeButton) {\n <a itButton=\"outline-primary\" class=\"ms-3\" routerLink=\"/\" title=\"{{ 'it.utils.error-page.go-to-homepage' | translate }}\">\n {{ 'it.utils.error-page.go-to-homepage' | translate }}\n </a>\n }\n </div>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: ItBackButtonComponent, selector: "it-back-button", inputs: ["buttonStyle", "direction", "showIcon", "showText", "backFn"], exportAs: ["itBackButton"] }, { kind: "directive", type: ItButtonDirective, selector: "[itButton]", inputs: ["itButton", "size", "block", "disabled", "type"], exportAs: ["itButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItErrorPageComponent, decorators: [{ type: Component, args: [{ standalone: true, selector: 'it-error-page', changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, RouterLink, ItBackButtonComponent, ItButtonDirective], template: "<div class=\"container text-center mt-5\">\n @if (errorCode && showErrorCode) {\n <h1>{{ errorCode }}</h1>\n }\n <h2>\n @if (!errorTitle && isDefaultErrorCode) {\n {{ 'it.utils.error-page.' + errorCode + '.title' | translate }}\n } @else {\n {{ errorTitle || 'it.errors.generic' | translate }}\n }\n </h2>\n\n <p class=\"mt-3 w-75 mx-auto\">\n @if (!errorDescription && isDefaultErrorCode) {\n {{ 'it.utils.error-page.' + errorCode + '.description' | translate }}\n } @else {\n {{ errorDescription || 'it.errors.generic-support-message' | translate }}\n }\n </p>\n\n @if (showBackButton || showHomeButton) {\n <div class=\"mt-5\">\n @if (showBackButton) {\n <it-back-button></it-back-button>\n }\n @if (showHomeButton) {\n <a itButton=\"outline-primary\" class=\"ms-3\" routerLink=\"/\" title=\"{{ 'it.utils.error-page.go-to-homepage' | translate }}\">\n {{ 'it.utils.error-page.go-to-homepage' | translate }}\n </a>\n }\n </div>\n }\n</div>\n" }] }], ctorParameters: () => [{ type: i1.ActivatedRoute }], propDecorators: { errorCode: [{ type: Input }], showErrorCode: [{ type: Input, args: [{ transform: inputToBoolean }] }], errorTitle: [{ type: Input }], errorDescription: [{ type: Input }], showBackButton: [{ type: Input, args: [{ transform: inputToBoolean }] }], showHomeButton: [{ type: Input, args: [{ transform: inputToBoolean }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItcGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL3V0aWxzL2Vycm9yLXBhZ2UvZXJyb3ItcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL3V0aWxzL2Vycm9yLXBhZ2UvZXJyb3ItcGFnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQWtCLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7QUFTekQsTUFBTSxPQUFPLG9CQUFvQjtJQXNDL0IsWUFBNkIsS0FBcUI7UUFBckIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFoQ2xEOzs7V0FHRztRQUNtQyxrQkFBYSxHQUFhLElBQUksQ0FBQztRQWdCckU7OztXQUdHO1FBQ21DLG1CQUFjLEdBQWEsSUFBSSxDQUFDO1FBRXRFOzs7V0FHRztRQUNtQyxtQkFBYyxHQUFhLElBQUksQ0FBQztRQUdwRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsZ0NBQWdDO1lBQ3RFLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxvQ0FBb0M7WUFDbEYsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGlDQUFpQztZQUN6RSxDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyx1Q0FBdUM7WUFDM0YsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxxQ0FBcUM7WUFDckYsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxxQ0FBcUM7WUFDckYsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxHQUFHLENBQUM7SUFDcEYsQ0FBQzs4R0EvRFUsb0JBQW9CO2tHQUFwQixvQkFBb0IscUlBVVgsY0FBYyx3SEFvQmQsY0FBYyx3REFNZCxjQUFjLDZCQ2xEcEMsMGhDQWlDQSwyQ0RyQlksZUFBZSw0RkFBRSxVQUFVLG9PQUFFLHFCQUFxQiwrSkFBRSxpQkFBaUI7OzJGQUVwRSxvQkFBb0I7a0JBUGhDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLGVBQWUsbUJBRVIsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLENBQUM7bUZBTXZFLFNBQVM7c0JBQWpCLEtBQUs7Z0JBTWdDLGFBQWE7c0JBQWxELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO2dCQU8zQixVQUFVO3NCQUFsQixLQUFLO2dCQU9HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFNZ0MsY0FBYztzQkFBbkQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUU7Z0JBTUUsY0FBYztzQkFBbkQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBJdEJhY2tCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9uYXZpZ2F0aW9uL2JhY2stYnV0dG9uL2JhY2stYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJdEJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2NvcmUvYnV0dG9uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgaW5wdXRUb0Jvb2xlYW4gfSBmcm9tICcuLi8uLi8uLi91dGlscy9jb2VyY2lvbic7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2l0LWVycm9yLXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vZXJyb3ItcGFnZS5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbVHJhbnNsYXRlTW9kdWxlLCBSb3V0ZXJMaW5rLCBJdEJhY2tCdXR0b25Db21wb25lbnQsIEl0QnV0dG9uRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgSXRFcnJvclBhZ2VDb21wb25lbnQge1xuICAvKipcbiAgICogVGhlIGVycm9yIGNvZGUgdG8gc2hvd1xuICAgKi9cbiAgQElucHV0KCkgZXJyb3JDb2RlOiBudW1iZXIgfCA0MDQgfCA0MDMgfCA1MDAgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNob3cvSGlkZSBlcnJvciBjb2RlXG4gICAqIEBkZWZhdWx0IHRydWUgLSBzaG93XG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIHNob3dFcnJvckNvZGU/OiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQ3VzdG9tIGVycm9yIHRpdGxlXG4gICAqIC0gSWYgc2V0IGl0IHdpbGwgYmUgZGlzcGxheWVkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgdGl0bGUuXG4gICAqIC0gSXQgaXMgcG9zc2libGUgdG8gdXNlIGkxOG4ga2V5c1xuICAgKi9cbiAgQElucHV0KCkgZXJyb3JUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gZXJyb3IgZGVzY3JpcHRpb25cbiAgICogLSBJZiBzZXQgaXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBkZXNjcmlwdGlvbi5cbiAgICogLSBJdCBpcyBwb3NzaWJsZSB0byB1c2UgaTE4biBrZXlzXG4gICAqL1xuICBASW5wdXQoKSBlcnJvckRlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNob3cvSGlkZSBiYWNrIGJ1dHRvblxuICAgKiBAZGVmYXVsdCB0cnVlIC0gc2hvd1xuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBpbnB1dFRvQm9vbGVhbiB9KSBzaG93QmFja0J1dHRvbj86IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTaG93L0hpZGUgaG9tZSBidXR0b25cbiAgICogQGRlZmF1bHQgdHJ1ZSAtIHNob3dcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgc2hvd0hvbWVCdXR0b24/OiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge1xuICAgIHRoaXMucm91dGUuZGF0YS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZXJyb3JDb2RlICYmIGRhdGFbJ2Vycm9yQ29kZSddKSB7XG4gICAgICAgIHRoaXMuZXJyb3JDb2RlID0gZGF0YVsnZXJyb3JDb2RlJ107IC8vIEdldCBlcnJvckNvZGUgZnJvbSByb3V0ZSBkYXRhXG4gICAgICB9XG4gICAgICBpZiAoZGF0YVsnc2hvd0Vycm9yQ29kZSddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zaG93RXJyb3JDb2RlID0gZGF0YVsnc2hvd0Vycm9yQ29kZSddOyAvLyBHZXQgc2hvd0Vycm9yQ29kZSBmcm9tIHJvdXRlIGRhdGFcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5lcnJvclRpdGxlICYmIGRhdGFbJ2Vycm9yVGl0bGUnXSkge1xuICAgICAgICB0aGlzLmVycm9yVGl0bGUgPSBkYXRhWydlcnJvclRpdGxlJ107IC8vIEdldCBlcnJvclRpdGxlIGZyb20gcm91dGUgZGF0YVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmVycm9yRGVzY3JpcHRpb24gJiYgZGF0YVsnZXJyb3JEZXNjcmlwdGlvbiddKSB7XG4gICAgICAgIHRoaXMuZXJyb3JEZXNjcmlwdGlvbiA9IGRhdGFbJ2Vycm9yRGVzY3JpcHRpb24nXTsgLy8gR2V0IGVycm9yRGVzY3JpcHRpb24gZnJvbSByb3V0ZSBkYXRhXG4gICAgICB9XG4gICAgICBpZiAoZGF0YVsnc2hvd0JhY2tCdXR0b24nXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2hvd0JhY2tCdXR0b24gPSBkYXRhWydzaG93QmFja0J1dHRvbiddOyAvLyBHZXQgc2hvd0JhY2tCdXR0b24gZnJvbSByb3V0ZSBkYXRhXG4gICAgICB9XG4gICAgICBpZiAoZGF0YVsnc2hvd0hvbWVCdXR0b24nXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2hvd0hvbWVCdXR0b24gPSBkYXRhWydzaG93SG9tZUJ1dHRvbiddOyAvLyBHZXQgc2hvd0hvbWVCdXR0b24gZnJvbSByb3V0ZSBkYXRhXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgaXNEZWZhdWx0RXJyb3JDb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVycm9yQ29kZSA9PT0gNDA0IHx8IHRoaXMuZXJyb3JDb2RlID09PSA0MDMgfHwgdGhpcy5lcnJvckNvZGUgPT09IDUwMDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lciB0ZXh0LWNlbnRlciBtdC01XCI+XG4gIEBpZiAoZXJyb3JDb2RlICYmIHNob3dFcnJvckNvZGUpIHtcbiAgICA8aDE+e3sgZXJyb3JDb2RlIH19PC9oMT5cbiAgfVxuICA8aDI+XG4gICAgQGlmICghZXJyb3JUaXRsZSAmJiBpc0RlZmF1bHRFcnJvckNvZGUpIHtcbiAgICAgIHt7ICdpdC51dGlscy5lcnJvci1wYWdlLicgKyBlcnJvckNvZGUgKyAnLnRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIH0gQGVsc2Uge1xuICAgICAge3sgZXJyb3JUaXRsZSB8fCAnaXQuZXJyb3JzLmdlbmVyaWMnIHwgdHJhbnNsYXRlIH19XG4gICAgfVxuICA8L2gyPlxuXG4gIDxwIGNsYXNzPVwibXQtMyB3LTc1IG14LWF1dG9cIj5cbiAgICBAaWYgKCFlcnJvckRlc2NyaXB0aW9uICYmIGlzRGVmYXVsdEVycm9yQ29kZSkge1xuICAgICAge3sgJ2l0LnV0aWxzLmVycm9yLXBhZ2UuJyArIGVycm9yQ29kZSArICcuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgfSBAZWxzZSB7XG4gICAgICB7eyBlcnJvckRlc2NyaXB0aW9uIHx8ICdpdC5lcnJvcnMuZ2VuZXJpYy1zdXBwb3J0LW1lc3NhZ2UnIHwgdHJhbnNsYXRlIH19XG4gICAgfVxuICA8L3A+XG5cbiAgQGlmIChzaG93QmFja0J1dHRvbiB8fCBzaG93SG9tZUJ1dHRvbikge1xuICAgIDxkaXYgY2xhc3M9XCJtdC01XCI+XG4gICAgICBAaWYgKHNob3dCYWNrQnV0dG9uKSB7XG4gICAgICAgIDxpdC1iYWNrLWJ1dHRvbj48L2l0LWJhY2stYnV0dG9uPlxuICAgICAgfVxuICAgICAgQGlmIChzaG93SG9tZUJ1dHRvbikge1xuICAgICAgICA8YSBpdEJ1dHRvbj1cIm91dGxpbmUtcHJpbWFyeVwiIGNsYXNzPVwibXMtM1wiIHJvdXRlckxpbms9XCIvXCIgdGl0bGU9XCJ7eyAnaXQudXRpbHMuZXJyb3ItcGFnZS5nby10by1ob21lcGFnZScgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICB7eyAnaXQudXRpbHMuZXJyb3ItcGFnZS5nby10by1ob21lcGFnZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9hPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==