UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

71 lines 15.7 kB
import { Component, Input } from '@angular/core'; import { isEmpty, mapValues } from 'lodash-es'; import { BsModalRef } from 'ngx-bootstrap/modal'; import { Status, statusAlert, statusIcons } from '../common/status.model'; import * as i0 from "@angular/core"; import * as i1 from "ngx-bootstrap/modal"; import * as i2 from "@angular/common"; import * as i3 from "../i18n/c8y-translate.pipe"; import * as i4 from "../common/show-if-filter.pipe"; export class ConfirmModalComponent { set labels(labels) { const { ok = 'OK', cancel = 'Cancel' } = labels || {}; this._labels = { ok, cancel }; } get labels() { return this._labels; } constructor(modal) { this.modal = modal; this.status = Status.INFO; this._labels = { ok: 'OK', cancel: 'Cancel' }; this.result = new Promise((resolve, reject) => { this.dismiss = () => { reject(); this.modal.hide(); }; this.close = () => { resolve(isEmpty(this.confirmOptions) ? true : { confirmed: true, confirmOptions: mapValues(this.confirmOptions, option => option.checked) }); this.modal.hide(); }; }); } get classIcon() { return `dlt-c8y-icon-${statusIcons[this.status]}`; } get classAlert() { return statusAlert[this.status]; } ngOnDestroy() { this.dismiss(); } isHtml(str) { const doc = new DOMParser().parseFromString(str, 'text/html'); return Array.from(doc.body.childNodes).some(node => node.nodeType === Node.ELEMENT_NODE); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConfirmModalComponent, deps: [{ token: i1.BsModalRef }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ConfirmModalComponent, selector: "c8y-confirm-modal", inputs: { title: "title", body: "body", confirmOptions: "confirmOptions", status: "status", labels: "labels" }, ngImport: i0, template: "<div\n class=\"c8y-prompt alert\"\n [ngClass]=\"[classAlert]\"\n data-cy=\"prompt-alert\"\n>\n <h3\n class=\"m-b-16 d-flex a-i-center\"\n *ngIf=\"title\"\n >\n <i\n class=\"dlt-c8y-icon\"\n [ngClass]=\"[classIcon]\"\n ></i>\n <span id=\"modal-title\">{{ title | translate }}</span>\n </h3>\n <div id=\"modal-body\">\n <p\n class=\"text-break-word m-b-16\"\n *ngIf=\"!isHtml(body)\"\n >\n {{ body | translate }}\n </p>\n <div\n class=\"text-break-word m-b-16\"\n *ngIf=\"isHtml(body)\"\n [innerHTML]=\"body | translate\"\n ></div>\n <div\n class=\"c8y-checkbox plain m-b-8\"\n *ngFor=\"let co of confirmOptions | showIfFilter | async | keyvalue\"\n >\n <label\n class=\"c8y-checkbox\"\n [title]=\"co.value.text | translate\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"co.value.checked\"\n (change)=\"co.value.checked = !co.value.checked\"\n [disabled]=\"confirmOptions[co.value.disabledByKey]?.checked\"\n />\n <span></span>\n <span class=\"text-muted\">{{ co.value.text | translate }}</span>\n </label>\n </div>\n <ng-content></ng-content>\n </div>\n <div class=\"alert-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ labels.cancel | translate }}\"\n type=\"button\"\n *ngIf=\"labels.cancel !== null\"\n (click)=\"dismiss()\"\n data-cy=\"c8y-confirm-modal--cancel\"\n >\n {{ labels.cancel | translate }}\n </button>\n <button\n class=\"btn btn-primary m-t-xs-8\"\n title=\"{{ labels.ok | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n data-cy=\"c8y-confirm-modal--ok\"\n >\n {{ labels.ok | translate }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i4.ShowIfFilterPipe, name: "showIfFilter" }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConfirmModalComponent, decorators: [{ type: Component, args: [{ selector: 'c8y-confirm-modal', template: "<div\n class=\"c8y-prompt alert\"\n [ngClass]=\"[classAlert]\"\n data-cy=\"prompt-alert\"\n>\n <h3\n class=\"m-b-16 d-flex a-i-center\"\n *ngIf=\"title\"\n >\n <i\n class=\"dlt-c8y-icon\"\n [ngClass]=\"[classIcon]\"\n ></i>\n <span id=\"modal-title\">{{ title | translate }}</span>\n </h3>\n <div id=\"modal-body\">\n <p\n class=\"text-break-word m-b-16\"\n *ngIf=\"!isHtml(body)\"\n >\n {{ body | translate }}\n </p>\n <div\n class=\"text-break-word m-b-16\"\n *ngIf=\"isHtml(body)\"\n [innerHTML]=\"body | translate\"\n ></div>\n <div\n class=\"c8y-checkbox plain m-b-8\"\n *ngFor=\"let co of confirmOptions | showIfFilter | async | keyvalue\"\n >\n <label\n class=\"c8y-checkbox\"\n [title]=\"co.value.text | translate\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"co.value.checked\"\n (change)=\"co.value.checked = !co.value.checked\"\n [disabled]=\"confirmOptions[co.value.disabledByKey]?.checked\"\n />\n <span></span>\n <span class=\"text-muted\">{{ co.value.text | translate }}</span>\n </label>\n </div>\n <ng-content></ng-content>\n </div>\n <div class=\"alert-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ labels.cancel | translate }}\"\n type=\"button\"\n *ngIf=\"labels.cancel !== null\"\n (click)=\"dismiss()\"\n data-cy=\"c8y-confirm-modal--cancel\"\n >\n {{ labels.cancel | translate }}\n </button>\n <button\n class=\"btn btn-primary m-t-xs-8\"\n title=\"{{ labels.ok | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n data-cy=\"c8y-confirm-modal--ok\"\n >\n {{ labels.ok | translate }}\n </button>\n </div>\n</div>\n" }] }], ctorParameters: () => [{ type: i1.BsModalRef }], propDecorators: { title: [{ type: Input }], body: [{ type: Input }], confirmOptions: [{ type: Input }], status: [{ type: Input }], labels: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29uZmlybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL21vZGFsL21vZGFsLWNvbmZpcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS9tb2RhbC9tb2RhbC1jb25maXJtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQWMsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBeUJ0RixNQUFNLE9BQU8scUJBQXFCO0lBUWhDLElBQWEsTUFBTSxDQUFDLE1BQW1CO1FBQ3JDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLE1BQU0sR0FBRyxRQUFRLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBR0QsWUFBb0IsS0FBaUI7UUFBakIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQVg1QixXQUFNLEdBQWUsTUFBTSxDQUFDLElBQUksQ0FBQztRQVl4QyxJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2IsRUFBRSxFQUFFLElBQUk7WUFDUixNQUFNLEVBQUUsUUFBUTtTQUNqQixDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUM1QyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtnQkFDbEIsTUFBTSxFQUFFLENBQUM7Z0JBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQixDQUFDLENBQUM7WUFDRixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRTtnQkFDaEIsT0FBTyxDQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO29CQUMxQixDQUFDLENBQUMsSUFBSTtvQkFDTixDQUFDLENBQUM7d0JBQ0UsU0FBUyxFQUFFLElBQUk7d0JBQ2YsY0FBYyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztxQkFDekUsQ0FDTixDQUFDO2dCQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEIsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxnQkFBZ0IsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFzQjtRQUMzQixNQUFNLEdBQUcsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxHQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDeEUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDM0YsQ0FBQzsrR0F6RFUscUJBQXFCO21HQUFyQixxQkFBcUIseUtDN0JsQyxnekRBcUVBOzs0RkR4Q2EscUJBQXFCO2tCQUpqQyxTQUFTOytCQUNFLG1CQUFtQjsrRUFPcEIsS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDTyxNQUFNO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0VtcHR5LCBtYXBWYWx1ZXMgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3RhdHVzLCBzdGF0dXNBbGVydCwgc3RhdHVzSWNvbnMsIFN0YXR1c1R5cGUgfSBmcm9tICcuLi9jb21tb24vc3RhdHVzLm1vZGVsJztcbmltcG9ydCB7IE1vZGFsTGFiZWxzIH0gZnJvbSAnLi4vc2VsZWN0LW1vZGFsL3NlbGVjdC1tb2RhbC5tb2RlbCc7XG5pbXBvcnQgeyBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG4vKipcbiAqIERlZmluZXMgb3B0aW9ucyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbmZpcm0gZGlhbG9nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpcm1PcHRpb25zIHtcbiAgW2tleTogc3RyaW5nXTogQ29uZmlybU9wdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25maXJtT3B0aW9uIHtcbiAgdGV4dDogc3RyaW5nO1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgc2hvd0lmPzogYm9vbGVhbiB8ICgoKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPiB8IE9ic2VydmFibGU8Ym9vbGVhbj4pO1xuICAvKipcbiAgICogV2lsbCBkaXNhYmxlIHRoZSBjdXJyZW50IG9wdGlvbiB3aGVuIGFuIG9wdGlvbiB3aXRoIHRoZSBnaXZlbiBrZXkgaXMgc2VsZWN0ZWQuXG4gICAqL1xuICBkaXNhYmxlZEJ5S2V5Pzogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktY29uZmlybS1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC1jb25maXJtLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBDb25maXJtTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICByZXN1bHQ6IFByb21pc2U8Ym9vbGVhbiB8IHsgY29uZmlybWVkOiBib29sZWFuOyBjb25maXJtT3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gfT47XG4gIGRpc21pc3M6ICgpID0+IHZvaWQ7XG4gIGNsb3NlOiAoKSA9PiB2b2lkO1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBib2R5OiBzdHJpbmcgfCBTYWZlSHRtbDtcbiAgQElucHV0KCkgY29uZmlybU9wdGlvbnM6IENvbmZpcm1PcHRpb25zO1xuICBASW5wdXQoKSBzdGF0dXM6IFN0YXR1c1R5cGUgPSBTdGF0dXMuSU5GTztcbiAgQElucHV0KCkgc2V0IGxhYmVscyhsYWJlbHM6IE1vZGFsTGFiZWxzKSB7XG4gICAgY29uc3QgeyBvayA9ICdPSycsIGNhbmNlbCA9ICdDYW5jZWwnIH0gPSBsYWJlbHMgfHwge307XG4gICAgdGhpcy5fbGFiZWxzID0geyBvaywgY2FuY2VsIH07XG4gIH1cblxuICBnZXQgbGFiZWxzKCk6IE1vZGFsTGFiZWxzIHtcbiAgICByZXR1cm4gdGhpcy5fbGFiZWxzO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGFiZWxzOiBNb2RhbExhYmVscztcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtb2RhbDogQnNNb2RhbFJlZikge1xuICAgIHRoaXMuX2xhYmVscyA9IHtcbiAgICAgIG9rOiAnT0snLFxuICAgICAgY2FuY2VsOiAnQ2FuY2VsJ1xuICAgIH07XG4gICAgdGhpcy5yZXN1bHQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRpc21pc3MgPSAoKSA9PiB7XG4gICAgICAgIHJlamVjdCgpO1xuICAgICAgICB0aGlzLm1vZGFsLmhpZGUoKTtcbiAgICAgIH07XG4gICAgICB0aGlzLmNsb3NlID0gKCkgPT4ge1xuICAgICAgICByZXNvbHZlKFxuICAgICAgICAgIGlzRW1wdHkodGhpcy5jb25maXJtT3B0aW9ucylcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgY29uZmlybWVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbmZpcm1PcHRpb25zOiBtYXBWYWx1ZXModGhpcy5jb25maXJtT3B0aW9ucywgb3B0aW9uID0+IG9wdGlvbi5jaGVja2VkKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubW9kYWwuaGlkZSgpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBjbGFzc0ljb24oKSB7XG4gICAgcmV0dXJuIGBkbHQtYzh5LWljb24tJHtzdGF0dXNJY29uc1t0aGlzLnN0YXR1c119YDtcbiAgfVxuXG4gIGdldCBjbGFzc0FsZXJ0KCkge1xuICAgIHJldHVybiBzdGF0dXNBbGVydFt0aGlzLnN0YXR1c107XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRpc21pc3MoKTtcbiAgfVxuXG4gIGlzSHRtbChzdHI6IHN0cmluZyB8IFNhZmVIdG1sKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzdHIgYXMgc3RyaW5nLCAndGV4dC9odG1sJyk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oZG9jLmJvZHkuY2hpbGROb2Rlcykuc29tZShub2RlID0+IG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImM4eS1wcm9tcHQgYWxlcnRcIlxuICBbbmdDbGFzc109XCJbY2xhc3NBbGVydF1cIlxuICBkYXRhLWN5PVwicHJvbXB0LWFsZXJ0XCJcbj5cbiAgPGgzXG4gICAgY2xhc3M9XCJtLWItMTYgZC1mbGV4IGEtaS1jZW50ZXJcIlxuICAgICpuZ0lmPVwidGl0bGVcIlxuICA+XG4gICAgPGlcbiAgICAgIGNsYXNzPVwiZGx0LWM4eS1pY29uXCJcbiAgICAgIFtuZ0NsYXNzXT1cIltjbGFzc0ljb25dXCJcbiAgICA+PC9pPlxuICAgIDxzcGFuIGlkPVwibW9kYWwtdGl0bGVcIj57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgPC9oMz5cbiAgPGRpdiBpZD1cIm1vZGFsLWJvZHlcIj5cbiAgICA8cFxuICAgICAgY2xhc3M9XCJ0ZXh0LWJyZWFrLXdvcmQgbS1iLTE2XCJcbiAgICAgICpuZ0lmPVwiIWlzSHRtbChib2R5KVwiXG4gICAgPlxuICAgICAge3sgYm9keSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvcD5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInRleHQtYnJlYWstd29yZCBtLWItMTZcIlxuICAgICAgKm5nSWY9XCJpc0h0bWwoYm9keSlcIlxuICAgICAgW2lubmVySFRNTF09XCJib2R5IHwgdHJhbnNsYXRlXCJcbiAgICA+PC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3ggcGxhaW4gbS1iLThcIlxuICAgICAgKm5nRm9yPVwibGV0IGNvIG9mIGNvbmZpcm1PcHRpb25zIHwgc2hvd0lmRmlsdGVyIHwgYXN5bmMgfCBrZXl2YWx1ZVwiXG4gICAgPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiYzh5LWNoZWNrYm94XCJcbiAgICAgICAgW3RpdGxlXT1cImNvLnZhbHVlLnRleHQgfCB0cmFuc2xhdGVcIlxuICAgICAgPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIFtjaGVja2VkXT1cImNvLnZhbHVlLmNoZWNrZWRcIlxuICAgICAgICAgIChjaGFuZ2UpPVwiY28udmFsdWUuY2hlY2tlZCA9ICFjby52YWx1ZS5jaGVja2VkXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiY29uZmlybU9wdGlvbnNbY28udmFsdWUuZGlzYWJsZWRCeUtleV0/LmNoZWNrZWRcIlxuICAgICAgICAvPlxuICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiPnt7IGNvLnZhbHVlLnRleHQgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJhbGVydC1mb290ZXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICB0aXRsZT1cInt7IGxhYmVscy5jYW5jZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAqbmdJZj1cImxhYmVscy5jYW5jZWwgIT09IG51bGxcIlxuICAgICAgKGNsaWNrKT1cImRpc21pc3MoKVwiXG4gICAgICBkYXRhLWN5PVwiYzh5LWNvbmZpcm0tbW9kYWwtLWNhbmNlbFwiXG4gICAgPlxuICAgICAge3sgbGFiZWxzLmNhbmNlbCB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG0tdC14cy04XCJcbiAgICAgIHRpdGxlPVwie3sgbGFiZWxzLm9rIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgICAgZGF0YS1jeT1cImM4eS1jb25maXJtLW1vZGFsLS1va1wiXG4gICAgPlxuICAgICAge3sgbGFiZWxzLm9rIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=