@dbg-riskit/angular-view
Version:
76 lines • 14.8 kB
JavaScript
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/material/card";
import * as i2 from "@angular/material/progress-spinner";
import * as i3 from "@angular/common";
export const RISK_ERROR_SELECTOR = 'risk-error';
export const RISK_GOOD_SELECTOR = 'risk-good';
export const RISK_INFO_SELECTOR = 'risk-info';
export const RISK_MESSAGE_SELECTOR = 'risk-message';
export const RISK_WARN_SELECTOR = 'risk-warn';
export const RISK_INITIAL_LOAD_SELECTOR = 'risk-initial-load';
export const RISK_NO_DATA_SELECTOR = 'risk-no-data';
export const RISK_UPDATE_FAILED_SELECTOR = 'risk-update-failed';
export const COMPONENT_SELECTOR = RISK_ERROR_SELECTOR + ', ' + RISK_GOOD_SELECTOR + ', ' + RISK_INFO_SELECTOR + ', '
+ RISK_MESSAGE_SELECTOR + ', ' + RISK_WARN_SELECTOR + ', '
+ RISK_INITIAL_LOAD_SELECTOR + ', ' + RISK_NO_DATA_SELECTOR + ', '
+ RISK_UPDATE_FAILED_SELECTOR;
const COLOR_EQUALS = 'color === "';
export class MessageComponent {
constructor(elementRef) {
const tagName = elementRef.nativeElement.tagName.toLowerCase();
this._initialLoad = tagName === RISK_INITIAL_LOAD_SELECTOR;
this._noData = tagName === RISK_NO_DATA_SELECTOR;
this._updateError = tagName === RISK_UPDATE_FAILED_SELECTOR;
switch (tagName) {
case RISK_INFO_SELECTOR:
case RISK_NO_DATA_SELECTOR:
this._color = RISK_INFO_SELECTOR;
break;
case RISK_WARN_SELECTOR:
case RISK_INITIAL_LOAD_SELECTOR:
this._color = RISK_WARN_SELECTOR;
break;
case RISK_ERROR_SELECTOR:
case RISK_UPDATE_FAILED_SELECTOR:
this._color = RISK_ERROR_SELECTOR;
break;
case RISK_GOOD_SELECTOR:
this._color = RISK_GOOD_SELECTOR;
break;
default:
this._color = null;
}
}
get color() {
return this._color;
}
get initialLoad() {
return this._initialLoad;
}
get noData() {
return this._noData;
}
get updateError() {
return this._updateError;
}
}
MessageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: MessageComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
MessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.6", type: MessageComponent, selector: "risk-error, risk-good, risk-info, risk-message, risk-warn, risk-initial-load, risk-no-data, risk-update-failed", inputs: { message: "message" }, host: { properties: { "class.risk-message": "true", "class.risk-message-error": "color === \"risk-error\"", "class.risk-message-warn": "color === \"risk-warn\"", "class.risk-message-good": "color === \"risk-good\"", "class.risk-message-info": "color === \"risk-info\"", "class.risk-message-initial-load": "initialLoad", "class.risk-message-no-data": "noData", "class.risk-message-update-error": "updateError" } }, ngImport: i0, template: "<mat-card [ngClass]=\"color\">\n <ng-template [ngIf]=\"initialLoad\">\n <mat-spinner [diameter]=\"50\"></mat-spinner>\n Loading...\n </ng-template>\n <ng-template [ngIf]=\"noData\">No data available.</ng-template>\n <ng-template [ngIf]=\"updateError\">Failed to update the data: {{message}}.</ng-template>\n <ng-template [ngIf]=\"!initialLoad && !noData && !updateError\">{{message}}</ng-template>\n <ng-content></ng-content>\n</mat-card>", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host(.risk-message-initial-load) .mat-card{display:-webkit-flex;display:flex;line-height:50px;padding:15px 24px}:host(.risk-message-initial-load) .mat-card .mat-spinner{margin-right:15px}\n"], components: [{ type: i1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: MessageComponent, decorators: [{
type: Component,
args: [{ selector: COMPONENT_SELECTOR, host: {
'[class.risk-message]': 'true',
'[class.risk-message-error]': COLOR_EQUALS + RISK_ERROR_SELECTOR + '"',
'[class.risk-message-warn]': COLOR_EQUALS + RISK_WARN_SELECTOR + '"',
'[class.risk-message-good]': COLOR_EQUALS + RISK_GOOD_SELECTOR + '"',
'[class.risk-message-info]': COLOR_EQUALS + RISK_INFO_SELECTOR + '"',
'[class.risk-message-initial-load]': 'initialLoad',
'[class.risk-message-no-data]': 'noData',
'[class.risk-message-update-error]': 'updateError'
}, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, template: "<mat-card [ngClass]=\"color\">\n <ng-template [ngIf]=\"initialLoad\">\n <mat-spinner [diameter]=\"50\"></mat-spinner>\n Loading...\n </ng-template>\n <ng-template [ngIf]=\"noData\">No data available.</ng-template>\n <ng-template [ngIf]=\"updateError\">Failed to update the data: {{message}}.</ng-template>\n <ng-template [ngIf]=\"!initialLoad && !noData && !updateError\">{{message}}</ng-template>\n <ng-content></ng-content>\n</mat-card>", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host(.risk-message-initial-load) .mat-card{display:-webkit-flex;display:flex;line-height:50px;padding:15px 24px}:host(.risk-message-initial-load) .mat-card .mat-spinner{margin-right:15px}\n"] }]
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { message: [{
type: Input,
args: ['message']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wa2cvZGJnLXJpc2tpdC9hbmd1bGFyLXZpZXcvc3JjL2xpYi9tZXNzYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3BrZy9kYmctcmlza2l0L2FuZ3VsYXItdmlldy9zcmMvbGliL21lc3NhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7O0FBRXBGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLFlBQVksQ0FBQztBQUNoRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLGNBQWMsQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUM7QUFFOUMsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsbUJBQW1CLENBQUM7QUFDOUQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsY0FBYyxDQUFDO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLG9CQUFvQixDQUFDO0FBRWhFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixHQUFHLElBQUksR0FBRyxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsa0JBQWtCLEdBQUcsSUFBSTtNQUNoRixxQkFBcUIsR0FBRyxJQUFJLEdBQUcsa0JBQWtCLEdBQUcsSUFBSTtNQUN4RCwwQkFBMEIsR0FBRyxJQUFJLEdBQUcscUJBQXFCLEdBQUcsSUFBSTtNQUNoRSwyQkFBMkIsQ0FBQztBQUVoRSxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUM7QUFzQm5DLE1BQU0sT0FBTyxnQkFBZ0I7SUFjekIsWUFBbUIsVUFBc0I7UUFDckMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0QsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLEtBQUssMEJBQTBCLENBQUM7UUFDM0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLEtBQUsscUJBQXFCLENBQUM7UUFDakQsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLEtBQUssMkJBQTJCLENBQUM7UUFDNUQsUUFBUSxPQUFPLEVBQUU7WUFDYixLQUFLLGtCQUFrQixDQUFDO1lBQ3hCLEtBQUsscUJBQXFCO2dCQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLGtCQUFrQixDQUFDO2dCQUNqQyxNQUFNO1lBQ1YsS0FBSyxrQkFBa0IsQ0FBQztZQUN4QixLQUFLLDBCQUEwQjtnQkFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQztnQkFDakMsTUFBTTtZQUNWLEtBQUssbUJBQW1CLENBQUM7WUFDekIsS0FBSywyQkFBMkI7Z0JBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUM7Z0JBQ2xDLE1BQU07WUFDVixLQUFLLGtCQUFrQjtnQkFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQztnQkFDakMsTUFBTTtZQUNWO2dCQUNJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQzFCO0lBQ0wsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7OzZHQXREUSxnQkFBZ0I7aUdBQWhCLGdCQUFnQixvbEJDdkM3Qix3ZEFTVzsyRkQ4QkUsZ0JBQWdCO2tCQXBCNUIsU0FBUzsrQkFDZSxrQkFBa0IsUUFNbEI7d0JBQ2pCLHNCQUFzQixFQUFlLE1BQU07d0JBQzNDLDRCQUE0QixFQUFTLFlBQVksR0FBRyxtQkFBbUIsR0FBRyxHQUFHO3dCQUM3RSwyQkFBMkIsRUFBVSxZQUFZLEdBQUcsa0JBQWtCLEdBQUcsR0FBRzt3QkFDNUUsMkJBQTJCLEVBQVUsWUFBWSxHQUFHLGtCQUFrQixHQUFHLEdBQUc7d0JBQzVFLDJCQUEyQixFQUFVLFlBQVksR0FBRyxrQkFBa0IsR0FBRyxHQUFHO3dCQUM1RSxtQ0FBbUMsRUFBRSxhQUFhO3dCQUNsRCw4QkFBOEIsRUFBTyxRQUFRO3dCQUM3QyxtQ0FBbUMsRUFBRSxhQUFhO3FCQUNyRCxtQkFDb0IsdUJBQXVCLENBQUMsTUFBTSx1QkFDOUIsS0FBSztpR0FjbkIsT0FBTztzQkFEYixLQUFLO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IFJJU0tfRVJST1JfU0VMRUNUT1IgPSAncmlzay1lcnJvcic7XG5leHBvcnQgY29uc3QgUklTS19HT09EX1NFTEVDVE9SID0gJ3Jpc2stZ29vZCc7XG5leHBvcnQgY29uc3QgUklTS19JTkZPX1NFTEVDVE9SID0gJ3Jpc2staW5mbyc7XG5leHBvcnQgY29uc3QgUklTS19NRVNTQUdFX1NFTEVDVE9SID0gJ3Jpc2stbWVzc2FnZSc7XG5leHBvcnQgY29uc3QgUklTS19XQVJOX1NFTEVDVE9SID0gJ3Jpc2std2Fybic7XG5cbmV4cG9ydCBjb25zdCBSSVNLX0lOSVRJQUxfTE9BRF9TRUxFQ1RPUiA9ICdyaXNrLWluaXRpYWwtbG9hZCc7XG5leHBvcnQgY29uc3QgUklTS19OT19EQVRBX1NFTEVDVE9SID0gJ3Jpc2stbm8tZGF0YSc7XG5leHBvcnQgY29uc3QgUklTS19VUERBVEVfRkFJTEVEX1NFTEVDVE9SID0gJ3Jpc2stdXBkYXRlLWZhaWxlZCc7XG5cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfU0VMRUNUT1IgPSBSSVNLX0VSUk9SX1NFTEVDVE9SICsgJywgJyArIFJJU0tfR09PRF9TRUxFQ1RPUiArICcsICcgKyBSSVNLX0lORk9fU0VMRUNUT1IgKyAnLCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBSSVNLX01FU1NBR0VfU0VMRUNUT1IgKyAnLCAnICsgUklTS19XQVJOX1NFTEVDVE9SICsgJywgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgUklTS19JTklUSUFMX0xPQURfU0VMRUNUT1IgKyAnLCAnICsgUklTS19OT19EQVRBX1NFTEVDVE9SICsgJywgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgUklTS19VUERBVEVfRkFJTEVEX1NFTEVDVE9SO1xuXG5jb25zdCBDT0xPUl9FUVVBTFMgPSAnY29sb3IgPT09IFwiJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3IgICAgICAgICAgIDogQ09NUE9ORU5UX1NFTEVDVE9SLFxuICAgIHRlbXBsYXRlVXJsICAgICAgICA6ICdtZXNzYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHMgICAgICAgICAgOiBbXG4gICAgICAgICcuLi8uLi8uLi9jb21wb25lbnQuc2NzcycsXG4gICAgICAgICdtZXNzYWdlLmNvbXBvbmVudC5zY3NzJ1xuICAgIF0sXG4gICAgaG9zdCAgICAgICAgICAgICAgIDoge1xuICAgICAgICAnW2NsYXNzLnJpc2stbWVzc2FnZV0nICAgICAgICAgICAgIDogJ3RydWUnLFxuICAgICAgICAnW2NsYXNzLnJpc2stbWVzc2FnZS1lcnJvcl0nICAgICAgIDogQ09MT1JfRVFVQUxTICsgUklTS19FUlJPUl9TRUxFQ1RPUiArICdcIicsXG4gICAgICAgICdbY2xhc3Mucmlzay1tZXNzYWdlLXdhcm5dJyAgICAgICAgOiBDT0xPUl9FUVVBTFMgKyBSSVNLX1dBUk5fU0VMRUNUT1IgKyAnXCInLFxuICAgICAgICAnW2NsYXNzLnJpc2stbWVzc2FnZS1nb29kXScgICAgICAgIDogQ09MT1JfRVFVQUxTICsgUklTS19HT09EX1NFTEVDVE9SICsgJ1wiJyxcbiAgICAgICAgJ1tjbGFzcy5yaXNrLW1lc3NhZ2UtaW5mb10nICAgICAgICA6IENPTE9SX0VRVUFMUyArIFJJU0tfSU5GT19TRUxFQ1RPUiArICdcIicsXG4gICAgICAgICdbY2xhc3Mucmlzay1tZXNzYWdlLWluaXRpYWwtbG9hZF0nOiAnaW5pdGlhbExvYWQnLFxuICAgICAgICAnW2NsYXNzLnJpc2stbWVzc2FnZS1uby1kYXRhXScgICAgIDogJ25vRGF0YScsXG4gICAgICAgICdbY2xhc3Mucmlzay1tZXNzYWdlLXVwZGF0ZS1lcnJvcl0nOiAndXBkYXRlRXJyb3InXG4gICAgfSxcbiAgICBjaGFuZ2VEZXRlY3Rpb24gICAgOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2Vcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZUNvbXBvbmVudCB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pbml0aWFsTG9hZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ub0RhdGE6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdXBkYXRlRXJyb3I6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29sb3I6IHR5cGVvZiBSSVNLX0dPT0RfU0VMRUNUT1JcbiAgICAgICAgfCB0eXBlb2YgUklTS19JTkZPX1NFTEVDVE9SXG4gICAgICAgIHwgdHlwZW9mIFJJU0tfRVJST1JfU0VMRUNUT1JcbiAgICAgICAgfCB0eXBlb2YgUklTS19XQVJOX1NFTEVDVE9SXG4gICAgICAgIHwgbnVsbDtcblxuICAgIEBJbnB1dCgnbWVzc2FnZScpXG4gICAgcHVibGljIG1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbExvYWQgPSB0YWdOYW1lID09PSBSSVNLX0lOSVRJQUxfTE9BRF9TRUxFQ1RPUjtcbiAgICAgICAgdGhpcy5fbm9EYXRhID0gdGFnTmFtZSA9PT0gUklTS19OT19EQVRBX1NFTEVDVE9SO1xuICAgICAgICB0aGlzLl91cGRhdGVFcnJvciA9IHRhZ05hbWUgPT09IFJJU0tfVVBEQVRFX0ZBSUxFRF9TRUxFQ1RPUjtcbiAgICAgICAgc3dpdGNoICh0YWdOYW1lKSB7XG4gICAgICAgICAgICBjYXNlIFJJU0tfSU5GT19TRUxFQ1RPUjpcbiAgICAgICAgICAgIGNhc2UgUklTS19OT19EQVRBX1NFTEVDVE9SOlxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbG9yID0gUklTS19JTkZPX1NFTEVDVE9SO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSSVNLX1dBUk5fU0VMRUNUT1I6XG4gICAgICAgICAgICBjYXNlIFJJU0tfSU5JVElBTF9MT0FEX1NFTEVDVE9SOlxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbG9yID0gUklTS19XQVJOX1NFTEVDVE9SO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSSVNLX0VSUk9SX1NFTEVDVE9SOlxuICAgICAgICAgICAgY2FzZSBSSVNLX1VQREFURV9GQUlMRURfU0VMRUNUT1I6XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sb3IgPSBSSVNLX0VSUk9SX1NFTEVDVE9SO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSSVNLX0dPT0RfU0VMRUNUT1I6XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sb3IgPSBSSVNLX0dPT0RfU0VMRUNUT1I7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbG9yID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sb3IoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGluaXRpYWxMb2FkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5pdGlhbExvYWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBub0RhdGEoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub0RhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB1cGRhdGVFcnJvcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZUVycm9yO1xuICAgIH1cbn1cbiIsIjxtYXQtY2FyZCBbbmdDbGFzc109XCJjb2xvclwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpbml0aWFsTG9hZFwiPlxuICAgICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgTG9hZGluZy4uLlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIm5vRGF0YVwiPk5vIGRhdGEgYXZhaWxhYmxlLjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInVwZGF0ZUVycm9yXCI+RmFpbGVkIHRvIHVwZGF0ZSB0aGUgZGF0YToge3ttZXNzYWdlfX0uPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWluaXRpYWxMb2FkICYmICFub0RhdGEgJiYgIXVwZGF0ZUVycm9yXCI+e3ttZXNzYWdlfX08L25nLXRlbXBsYXRlPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbWF0LWNhcmQ+Il19