UNPKG

@cisstech/nge

Version:

NG Essentials is a collection of libraries for Angular developers.

50 lines 17.1 kB
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/router"; import * as i3 from "@cisstech/nge/pipes"; export class ListItemArticleComponent { constructor() { this.articleTags = []; this.didClickTag = new EventEmitter(); this.didClickTagItem = new EventEmitter(); this.didClickTitle = new EventEmitter(); this.isTagsCliclable = false; } ngOnInit() { this.isTagsCliclable = this.didClickTag.observed || this.didClickTagItem.observed; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ListItemArticleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: ListItemArticleComponent, selector: "ui-list-item-article", inputs: { articleTitle: "articleTitle", articleUrl: "articleUrl", articleBannerUrl: "articleBannerUrl", articleBannerAlt: "articleBannerAlt", articleIconUrl: "articleIconUrl", articleIconAlt: "articleIconAlt", articleDescription: "articleDescription", articleTags: "articleTags", articleIconTemplate: "articleIconTemplate", articleTagIconTemplate: "articleTagIconTemplate" }, outputs: { didClickTag: "didClickTag", didClickTagItem: "didClickTagItem", didClickTitle: "didClickTitle" }, ngImport: i0, template: "<article class=\"mat-elevation-z1\" [class.bordered]=\"!articleBannerUrl\">\n <img class=\"article-banner\" [src]=\"articleBannerUrl\" [alt]=\"articleBannerAlt\" *ngIf=\"articleBannerUrl\">\n <div class=\"article-content-wrapper\">\n <header class=\"article-header\">\n <div class=\"article-image\">\n <ng-container *ngIf=\"articleIconTemplate; else: noImageTemplate\">\n <ng-container *ngTemplateOutlet=\"articleIconTemplate\"></ng-container>\n </ng-container>\n <ng-template #noImageTemplate>\n <img *ngIf=\"articleIconUrl\" [src]=\"articleIconUrl\" [alt]=\"articleIconAlt\">\n </ng-template>\n </div>\n @if (articleTitle|istemplate) {\n <h3\n class=\"article-title\"\n [routerLink]=\"articleUrl\"\n (click)=\"didClickTitle.emit()\">\n <ng-container *ngTemplateOutlet=\"articleTitle\" />\n </h3>\n } @else {\n <div\n class=\"article-title\"\n [routerLink]=\"articleUrl\"\n (click)=\"didClickTitle.emit()\">\n {{articleTitle}}\n </div>\n }\n </header>\n <p class=\"article-description\">\n @if (articleDescription|istemplate) {\n <ng-container *ngTemplateOutlet=\"articleDescription\" />\n } @else {\n {{articleDescription}}\n }\n </p>\n <div class=\"article-tags\" [class.clickable]=\"isTagsCliclable\" *ngIf=\"articleTags?.length\">\n @for (tag of articleTags; track $index) {\n @if(tag|isstring) {\n <div class=\"article-tag\" (click)=\"didClickTag.emit(tag)\">\n @if (articleTagIconTemplate) {\n <div class=\"article-tag-icon\">\n <ng-container *ngTemplateOutlet=\"articleTagIconTemplate; context: { text: tag }\" />\n </div>\n }\n {{tag}}\n </div>\n } @else {\n <div class=\"article-tag\" [style.--article-tag-background-color]=\"tag.color ?? '#5d7092'\" (click)=\"didClickTagItem.emit(tag)\">\n @if (articleTagIconTemplate) {\n <div class=\"article-tag-icon\">\n <ng-container *ngTemplateOutlet=\"articleTagIconTemplate; context: { text: tag.text, data: tag.data }\" />\n </div>\n }\n {{tag.text}}\n </div>\n }\n }\n </div>\n <footer class=\"article-footer\">\n <ng-content></ng-content>\n </footer>\n </div>\n</article>\n", styles: [":host{display:block;--border-color: #5d7092}article{border-radius:.5rem;transition:box-shadow .5s}article.bordered{border-left:2px solid var(--border-color)}article:hover{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.article-content-wrapper{padding:12px}.article-tags,.article-header,.article-description{margin:0 0 8px}.article-banner{width:100%;height:275px;border-top-left-radius:.5rem;border-top-right-radius:.5rem;object-fit:cover}.article-header{display:flex;align-items:center}.article-image{width:24px;height:24px}.article-image::ng-deep>*{width:24px;height:24px;border-radius:50%;object-fit:contain}.article-title{margin:0 0 0 8px;cursor:pointer}.article-tags{display:flex;align-items:center;flex-wrap:wrap;gap:4px}.article-tag{--article-tag-background-color: #5d7092;background-color:var(--article-tag-background-color);color:#000000de;color:#fff;transition:box-shadow .28s cubic-bezier(.4,0,.2,1);display:inline-flex;border-radius:.25rem;padding:.25rem .5rem;font-weight:400;align-items:center}.article-tag:hover{opacity:.8}.article-tag .article-tag-icon{margin-right:4px}.article-tags.clickable .article-tag{cursor:pointer}.article-footer{display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i3.IsTemplatePipe, name: "istemplate" }, { kind: "pipe", type: i3.IsStringPipe, name: "isstring" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ListItemArticleComponent, decorators: [{ type: Component, args: [{ selector: 'ui-list-item-article', changeDetection: ChangeDetectionStrategy.OnPush, template: "<article class=\"mat-elevation-z1\" [class.bordered]=\"!articleBannerUrl\">\n <img class=\"article-banner\" [src]=\"articleBannerUrl\" [alt]=\"articleBannerAlt\" *ngIf=\"articleBannerUrl\">\n <div class=\"article-content-wrapper\">\n <header class=\"article-header\">\n <div class=\"article-image\">\n <ng-container *ngIf=\"articleIconTemplate; else: noImageTemplate\">\n <ng-container *ngTemplateOutlet=\"articleIconTemplate\"></ng-container>\n </ng-container>\n <ng-template #noImageTemplate>\n <img *ngIf=\"articleIconUrl\" [src]=\"articleIconUrl\" [alt]=\"articleIconAlt\">\n </ng-template>\n </div>\n @if (articleTitle|istemplate) {\n <h3\n class=\"article-title\"\n [routerLink]=\"articleUrl\"\n (click)=\"didClickTitle.emit()\">\n <ng-container *ngTemplateOutlet=\"articleTitle\" />\n </h3>\n } @else {\n <div\n class=\"article-title\"\n [routerLink]=\"articleUrl\"\n (click)=\"didClickTitle.emit()\">\n {{articleTitle}}\n </div>\n }\n </header>\n <p class=\"article-description\">\n @if (articleDescription|istemplate) {\n <ng-container *ngTemplateOutlet=\"articleDescription\" />\n } @else {\n {{articleDescription}}\n }\n </p>\n <div class=\"article-tags\" [class.clickable]=\"isTagsCliclable\" *ngIf=\"articleTags?.length\">\n @for (tag of articleTags; track $index) {\n @if(tag|isstring) {\n <div class=\"article-tag\" (click)=\"didClickTag.emit(tag)\">\n @if (articleTagIconTemplate) {\n <div class=\"article-tag-icon\">\n <ng-container *ngTemplateOutlet=\"articleTagIconTemplate; context: { text: tag }\" />\n </div>\n }\n {{tag}}\n </div>\n } @else {\n <div class=\"article-tag\" [style.--article-tag-background-color]=\"tag.color ?? '#5d7092'\" (click)=\"didClickTagItem.emit(tag)\">\n @if (articleTagIconTemplate) {\n <div class=\"article-tag-icon\">\n <ng-container *ngTemplateOutlet=\"articleTagIconTemplate; context: { text: tag.text, data: tag.data }\" />\n </div>\n }\n {{tag.text}}\n </div>\n }\n }\n </div>\n <footer class=\"article-footer\">\n <ng-content></ng-content>\n </footer>\n </div>\n</article>\n", styles: [":host{display:block;--border-color: #5d7092}article{border-radius:.5rem;transition:box-shadow .5s}article.bordered{border-left:2px solid var(--border-color)}article:hover{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.article-content-wrapper{padding:12px}.article-tags,.article-header,.article-description{margin:0 0 8px}.article-banner{width:100%;height:275px;border-top-left-radius:.5rem;border-top-right-radius:.5rem;object-fit:cover}.article-header{display:flex;align-items:center}.article-image{width:24px;height:24px}.article-image::ng-deep>*{width:24px;height:24px;border-radius:50%;object-fit:contain}.article-title{margin:0 0 0 8px;cursor:pointer}.article-tags{display:flex;align-items:center;flex-wrap:wrap;gap:4px}.article-tag{--article-tag-background-color: #5d7092;background-color:var(--article-tag-background-color);color:#000000de;color:#fff;transition:box-shadow .28s cubic-bezier(.4,0,.2,1);display:inline-flex;border-radius:.25rem;padding:.25rem .5rem;font-weight:400;align-items:center}.article-tag:hover{opacity:.8}.article-tag .article-tag-icon{margin-right:4px}.article-tags.clickable .article-tag{cursor:pointer}.article-footer{display:flex;align-items:center}\n"] }] }], propDecorators: { articleTitle: [{ type: Input }], articleUrl: [{ type: Input }], articleBannerUrl: [{ type: Input }], articleBannerAlt: [{ type: Input }], articleIconUrl: [{ type: Input }], articleIconAlt: [{ type: Input }], articleDescription: [{ type: Input }], articleTags: [{ type: Input }], articleIconTemplate: [{ type: Input }], articleTagIconTemplate: [{ type: Input }], didClickTag: [{ type: Output }], didClickTagItem: [{ type: Output }], didClickTitle: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLWFydGljbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdlL3VpL2xpc3Qvc3JjL2xpc3QtaXRlbS1hcnRpY2xlL2xpc3QtaXRlbS1hcnRpY2xlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nZS91aS9saXN0L3NyYy9saXN0LWl0ZW0tYXJ0aWNsZS9saXN0LWl0ZW0tYXJ0aWNsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFBOzs7OztBQVNwSCxNQUFNLE9BQU8sd0JBQXdCO0lBTnJDO1FBY1csZ0JBQVcsR0FBNkIsRUFBRSxDQUFBO1FBS3pDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQTtRQUN4QyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUE7UUFDakQsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO1FBRWxDLG9CQUFlLEdBQUcsS0FBSyxDQUFBO0tBS2xDO0lBSEMsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUE7SUFDbkYsQ0FBQzs4R0FyQlUsd0JBQXdCO2tHQUF4Qix3QkFBd0IsaWlCQ1RyQyw4MkVBK0RBOzsyRkR0RGEsd0JBQXdCO2tCQU5wQyxTQUFTOytCQUNFLHNCQUFzQixtQkFHZix1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBMaXN0SXRlbVRhZyB9IGZyb20gJy4uL2xpc3QnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3VpLWxpc3QtaXRlbS1hcnRpY2xlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3QtaXRlbS1hcnRpY2xlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC1pdGVtLWFydGljbGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIExpc3RJdGVtQXJ0aWNsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGFydGljbGVUaXRsZT86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT5cbiAgQElucHV0KCkgYXJ0aWNsZVVybD86IHN0cmluZyB8IGFueVtdXG4gIEBJbnB1dCgpIGFydGljbGVCYW5uZXJVcmw/OiBzdHJpbmdcbiAgQElucHV0KCkgYXJ0aWNsZUJhbm5lckFsdD86IHN0cmluZ1xuICBASW5wdXQoKSBhcnRpY2xlSWNvblVybD86IHN0cmluZ1xuICBASW5wdXQoKSBhcnRpY2xlSWNvbkFsdD86IHN0cmluZ1xuICBASW5wdXQoKSBhcnRpY2xlRGVzY3JpcHRpb24/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+XG4gIEBJbnB1dCgpIGFydGljbGVUYWdzOiBzdHJpbmdbXSB8IExpc3RJdGVtVGFnW10gPSBbXVxuXG4gIEBJbnB1dCgpIGFydGljbGVJY29uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+XG4gIEBJbnB1dCgpIGFydGljbGVUYWdJY29uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7IHRleHQ6IHN0cmluZzsgZGF0YT86IGFueSB9PlxuXG4gIEBPdXRwdXQoKSBkaWRDbGlja1RhZyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpXG4gIEBPdXRwdXQoKSBkaWRDbGlja1RhZ0l0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RJdGVtVGFnPigpXG4gIEBPdXRwdXQoKSBkaWRDbGlja1RpdGxlID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgcHJvdGVjdGVkIGlzVGFnc0NsaWNsYWJsZSA9IGZhbHNlXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1RhZ3NDbGljbGFibGUgPSB0aGlzLmRpZENsaWNrVGFnLm9ic2VydmVkIHx8IHRoaXMuZGlkQ2xpY2tUYWdJdGVtLm9ic2VydmVkXG4gIH1cbn1cbiIsIjxhcnRpY2xlIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MVwiIFtjbGFzcy5ib3JkZXJlZF09XCIhYXJ0aWNsZUJhbm5lclVybFwiPlxuICA8aW1nIGNsYXNzPVwiYXJ0aWNsZS1iYW5uZXJcIiBbc3JjXT1cImFydGljbGVCYW5uZXJVcmxcIiBbYWx0XT1cImFydGljbGVCYW5uZXJBbHRcIiAqbmdJZj1cImFydGljbGVCYW5uZXJVcmxcIj5cbiAgPGRpdiBjbGFzcz1cImFydGljbGUtY29udGVudC13cmFwcGVyXCI+XG4gICAgPGhlYWRlciBjbGFzcz1cImFydGljbGUtaGVhZGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXJ0aWNsZS1pbWFnZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXJ0aWNsZUljb25UZW1wbGF0ZTsgZWxzZTogbm9JbWFnZVRlbXBsYXRlXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFydGljbGVJY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JbWFnZVRlbXBsYXRlPlxuICAgICAgICAgIDxpbWcgKm5nSWY9XCJhcnRpY2xlSWNvblVybFwiIFtzcmNdPVwiYXJ0aWNsZUljb25VcmxcIiBbYWx0XT1cImFydGljbGVJY29uQWx0XCI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoYXJ0aWNsZVRpdGxlfGlzdGVtcGxhdGUpIHtcbiAgICAgICAgPGgzXG4gICAgICAgIGNsYXNzPVwiYXJ0aWNsZS10aXRsZVwiXG4gICAgICAgIFtyb3V0ZXJMaW5rXT1cImFydGljbGVVcmxcIlxuICAgICAgICAoY2xpY2spPVwiZGlkQ2xpY2tUaXRsZS5lbWl0KClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFydGljbGVUaXRsZVwiIC8+XG4gICAgICA8L2gzPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYXJ0aWNsZS10aXRsZVwiXG4gICAgICAgIFtyb3V0ZXJMaW5rXT1cImFydGljbGVVcmxcIlxuICAgICAgICAoY2xpY2spPVwiZGlkQ2xpY2tUaXRsZS5lbWl0KClcIj5cbiAgICAgICAge3thcnRpY2xlVGl0bGV9fVxuICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9oZWFkZXI+XG4gICAgPHAgY2xhc3M9XCJhcnRpY2xlLWRlc2NyaXB0aW9uXCI+XG4gICAgICBAaWYgKGFydGljbGVEZXNjcmlwdGlvbnxpc3RlbXBsYXRlKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhcnRpY2xlRGVzY3JpcHRpb25cIiAvPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIHt7YXJ0aWNsZURlc2NyaXB0aW9ufX1cbiAgICAgIH1cbiAgICA8L3A+XG4gICAgPGRpdiBjbGFzcz1cImFydGljbGUtdGFnc1wiIFtjbGFzcy5jbGlja2FibGVdPVwiaXNUYWdzQ2xpY2xhYmxlXCIgKm5nSWY9XCJhcnRpY2xlVGFncz8ubGVuZ3RoXCI+XG4gICAgQGZvciAodGFnIG9mIGFydGljbGVUYWdzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgIEBpZih0YWd8aXNzdHJpbmcpIHtcbiAgICAgICA8ZGl2IGNsYXNzPVwiYXJ0aWNsZS10YWdcIiAoY2xpY2spPVwiZGlkQ2xpY2tUYWcuZW1pdCh0YWcpXCI+XG4gICAgICAgICAgIEBpZiAoYXJ0aWNsZVRhZ0ljb25UZW1wbGF0ZSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFydGljbGUtdGFnLWljb25cIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFydGljbGVUYWdJY29uVGVtcGxhdGU7IGNvbnRleHQ6IHsgdGV4dDogdGFnIH1cIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt7dGFnfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImFydGljbGUtdGFnXCIgW3N0eWxlLi0tYXJ0aWNsZS10YWctYmFja2dyb3VuZC1jb2xvcl09XCJ0YWcuY29sb3IgPz8gJyM1ZDcwOTInXCIgKGNsaWNrKT1cImRpZENsaWNrVGFnSXRlbS5lbWl0KHRhZylcIj5cbiAgICAgICAgICBAaWYgKGFydGljbGVUYWdJY29uVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnRpY2xlLXRhZy1pY29uXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhcnRpY2xlVGFnSWNvblRlbXBsYXRlOyBjb250ZXh0OiB7IHRleHQ6IHRhZy50ZXh0LCBkYXRhOiB0YWcuZGF0YSB9XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICB7e3RhZy50ZXh0fX1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuICAgIDwvZGl2PlxuICAgIDxmb290ZXIgY2xhc3M9XCJhcnRpY2xlLWZvb3RlclwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZm9vdGVyPlxuICA8L2Rpdj5cbjwvYXJ0aWNsZT5cbiJdfQ==