UNPKG

ng-zorro-antd-mobile

Version:

An enterprise-class mobile UI components based on Ant Design and Angular

122 lines 17.7 kB
import { Component, forwardRef, Input, ElementRef, TemplateRef, ViewEncapsulation, HostBinding } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "ng-zorro-antd-mobile/icon"; export class StepComponent { get status() { return this._status; } set status(value) { if (value) { this._status = value; this.isCustomStatus = true; this.setIcon(); this.setClass(); } } get icon() { return this._icon; } set icon(value) { if (value) { this._icon = value; this.isCustomIcon = true; this.setClass(); } } set currentIndex(current) { this._currentIndex = current; if (!this.isCustomStatus) { this._status = current > this.stepNumber ? StepStatusEnum.FINISH : current === this.stepNumber ? this.outStatus || '' : StepStatusEnum.WAIT; this.setIcon(); this.setClass(); } } constructor(_el) { this._el = _el; this.prefixCls = 'am-steps'; this.stepItemCls = {}; this.iconCls = { [`${this.prefixCls}-icon`]: true }; this.isIconString = true; this.outStatus = 'process'; this.isCustomStatus = false; this.isCustomIcon = false; this.title = null; this.description = null; this._currentIndex = 0; this.clsStepItem = true; } isTemplateRef(value) { return value instanceof TemplateRef; } setClass() { this.stepItemCls = { [`${this.prefixCls}-item-${this.status}`]: true, [`${this.prefixCls}-item-custom`]: this.isCustomIcon || (this.icon && this._currentIndex !== this.stepNumber) }; } setIcon() { if (!this.isCustomIcon) { switch (this._status) { case StepStatusEnum.FINISH: this._icon = 'check-circle-o'; break; case StepStatusEnum.ERROR: this._icon = 'cross-circle-o'; break; case StepStatusEnum.WAIT: this._icon = 'ellipsis'; break; default: break; } } } ngOnInit() { } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: StepComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: StepComponent, selector: "Step, nzm-step", inputs: { status: "status", title: "title", description: "description", icon: "icon" }, host: { properties: { "class.am-steps-item": "this.clsStepItem" } }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StepComponent), multi: true } ], ngImport: i0, template: "<div [ngClass]=\"stepItemCls\">\n <div class=\"{{ prefixCls }}-item-tail\">\n {{ tailContent }}\n </div>\n <div class=\"{{ prefixCls }}-item-icon\">\n <span *ngIf=\"isTemplateRef(icon)\" [ngClass]=\"iconCls\">\n <ng-template [ngTemplateOutlet]=\"icon\"></ng-template>\n </span>\n <span *ngIf=\"!isTemplateRef(icon) && (status === 'error' || status === 'finish' || status === 'wait')\" [ngClass]=\"iconCls\">\n <Icon [type]=\"icon\" [size]=\"iconSize\"> </Icon>\n </span>\n <span *ngIf=\"!isTemplateRef(icon) && !(status === 'error' || status === 'finish' || status === 'wait')\" [ngClass]=\"iconCls\"\n >{{ stepNumber }}\n </span>\n </div>\n <div class=\"{{ prefixCls }}-item-content\">\n <div class=\"{{ prefixCls }}-item-title\">\n <ng-container *ngIf=\"!isTemplateRef(title); else titleTemplate\">{{ title }}</ng-container>\n </div>\n <div *ngIf=\"description\" class=\"{{ prefixCls }}-item-description\">\n <ng-container *ngIf=\"!isTemplateRef(description); else descriptionTemplate\">{{ description }}</ng-container>\n </div>\n </div>\n</div>\n<ng-template #titleTemplate>\n <ng-template [ngTemplateOutlet]=\"title\"></ng-template>\n</ng-template>\n<ng-template #descriptionTemplate>\n <ng-template [ngTemplateOutlet]=\"description\"></ng-template>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IconComponent, selector: "Icon, nzm-icon", inputs: ["color", "type", "src", "size"] }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: StepComponent, decorators: [{ type: Component, args: [{ selector: 'Step, nzm-step', encapsulation: ViewEncapsulation.None, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StepComponent), multi: true } ], template: "<div [ngClass]=\"stepItemCls\">\n <div class=\"{{ prefixCls }}-item-tail\">\n {{ tailContent }}\n </div>\n <div class=\"{{ prefixCls }}-item-icon\">\n <span *ngIf=\"isTemplateRef(icon)\" [ngClass]=\"iconCls\">\n <ng-template [ngTemplateOutlet]=\"icon\"></ng-template>\n </span>\n <span *ngIf=\"!isTemplateRef(icon) && (status === 'error' || status === 'finish' || status === 'wait')\" [ngClass]=\"iconCls\">\n <Icon [type]=\"icon\" [size]=\"iconSize\"> </Icon>\n </span>\n <span *ngIf=\"!isTemplateRef(icon) && !(status === 'error' || status === 'finish' || status === 'wait')\" [ngClass]=\"iconCls\"\n >{{ stepNumber }}\n </span>\n </div>\n <div class=\"{{ prefixCls }}-item-content\">\n <div class=\"{{ prefixCls }}-item-title\">\n <ng-container *ngIf=\"!isTemplateRef(title); else titleTemplate\">{{ title }}</ng-container>\n </div>\n <div *ngIf=\"description\" class=\"{{ prefixCls }}-item-description\">\n <ng-container *ngIf=\"!isTemplateRef(description); else descriptionTemplate\">{{ description }}</ng-container>\n </div>\n </div>\n</div>\n<ng-template #titleTemplate>\n <ng-template [ngTemplateOutlet]=\"title\"></ng-template>\n</ng-template>\n<ng-template #descriptionTemplate>\n <ng-template [ngTemplateOutlet]=\"description\"></ng-template>\n</ng-template>\n" }] }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { status: [{ type: Input }], title: [{ type: Input }], description: [{ type: Input }], icon: [{ type: Input }], clsStepItem: [{ type: HostBinding, args: ['class.am-steps-item'] }] } }); export var StepStatusEnum; (function (StepStatusEnum) { StepStatusEnum["WAIT"] = "wait"; StepStatusEnum["PROCESS"] = "process"; StepStatusEnum["FINISH"] = "finish"; StepStatusEnum["ERROR"] = "error"; })(StepStatusEnum || (StepStatusEnum = {})); export var StepDirectionEnum; (function (StepDirectionEnum) { StepDirectionEnum["VERTICAL"] = "vertical"; StepDirectionEnum["HORIZONTAL"] = "horizontal"; })(StepDirectionEnum || (StepDirectionEnum = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21wb25lbnRzL3N0ZXBzL3N0ZXAvc3RlcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb21wb25lbnRzL3N0ZXBzL3N0ZXAvc3RlcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFVBQVUsRUFDVixLQUFLLEVBQ0wsVUFBVSxFQUNWLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBY25ELE1BQU0sT0FBTyxhQUFhO0lBaUJ4QixJQUNJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLEtBQXFCO1FBQzlCLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUtELElBQ0ksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsS0FBZ0M7UUFDdkMsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN6QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBRUQsSUFBSSxZQUFZLENBQUMsT0FBZTtRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLE9B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Z0JBR0YsSUFBSTtzQkFEUCxLQUFLO2dCQXlCTixXQUFXO3NCQURWLFdBQVc7dUJBQUMscUJBQXFCOztBQXFDcEMsTUFBTSxDQUFOLElBQVksY0FLWDtBQUxELFdBQVksY0FBYztJQUN4QiwrQkFBYSxDQUFBO0lBQ2IscUNBQW1CLENBQUE7SUFDbkIsbUNBQWlCLENBQUE7SUFDakIsaUNBQWUsQ0FBQTtBQUNqQixDQUFDLEVBTFcsY0FBYyxLQUFkLGNBQWMsUUFLekI7QUFDRCxNQUFNLENBQU4sSUFBWSxpQkFHWDtBQUhELFdBQVksaUJBQWlCO0lBQzNCLDBDQUFxQixDQUFBO0lBQ3JCLDhDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFIVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBRzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBFbGVtZW50UmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIEhvc3RCaW5kaW5nXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1N0ZXAsIG56bS1zdGVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0ZXAuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFN0ZXBDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgU3RlcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByZWZpeENscyA9ICdhbS1zdGVwcyc7XG4gIHN0ZXBJdGVtQ2xzID0ge307XG4gIGljb25DbHM6IG9iamVjdCA9IHtcbiAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWljb25gXTogdHJ1ZVxuICB9O1xuICB0YWlsQ29udGVudDogc3RyaW5nO1xuICBzdGVwTnVtYmVyOiBudW1iZXI7XG4gIGlzSWNvblN0cmluZzogYm9vbGVhbiA9IHRydWU7XG4gIGljb25TaXplOiBzdHJpbmc7XG4gIG91dFN0YXR1cyA9ICdwcm9jZXNzJztcblxuICBwcml2YXRlIF9zdGF0dXM6IFN0ZXBTdGF0dXNFbnVtO1xuICBwcml2YXRlIF9pY29uOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIGlzQ3VzdG9tU3RhdHVzID0gZmFsc2U7XG4gIHByaXZhdGUgaXNDdXN0b21JY29uID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IHN0YXR1cygpOiBTdGVwU3RhdHVzRW51bSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cztcbiAgfVxuICBzZXQgc3RhdHVzKHZhbHVlOiBTdGVwU3RhdHVzRW51bSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fc3RhdHVzID0gdmFsdWU7XG4gICAgICB0aGlzLmlzQ3VzdG9tU3RhdHVzID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0SWNvbigpO1xuICAgICAgdGhpcy5zZXRDbGFzcygpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICB0aXRsZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG4gIEBJbnB1dCgpXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gbnVsbDtcbiAgQElucHV0KClcbiAgZ2V0IGljb24oKTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2ljb247XG4gIH1cbiAgc2V0IGljb24odmFsdWU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX2ljb24gPSB2YWx1ZTtcbiAgICAgIHRoaXMuaXNDdXN0b21JY29uID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0Q2xhc3MoKTtcbiAgICB9XG4gIH1cblxuICBzZXQgY3VycmVudEluZGV4KGN1cnJlbnQ6IG51bWJlcikge1xuICAgIHRoaXMuX2N1cnJlbnRJbmRleCA9IGN1cnJlbnQ7XG4gICAgaWYgKCF0aGlzLmlzQ3VzdG9tU3RhdHVzKSB7XG4gICAgICB0aGlzLl9zdGF0dXMgPSBjdXJyZW50ID4gdGhpcy5zdGVwTnVtYmVyID8gU3RlcFN0YXR1c0VudW0uRklOSVNIIDogY3VycmVudCA9PT0gdGhpcy5zdGVwTnVtYmVyID9cbiAgICAgICAgdGhpcy5vdXRTdGF0dXMgfHwgKCcnIGFzIGFueSkgOiBTdGVwU3RhdHVzRW51bS5XQUlUO1xuICAgICAgdGhpcy5zZXRJY29uKCk7XG4gICAgICB0aGlzLnNldENsYXNzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY3VycmVudEluZGV4ID0gMDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXN0ZXBzLWl0ZW0nKVxuICBjbHNTdGVwSXRlbTogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYpIHsgfVxuXG4gIGlzVGVtcGxhdGVSZWYodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgfVxuXG4gIHNldENsYXNzKCkge1xuICAgIHRoaXMuc3RlcEl0ZW1DbHMgPSB7XG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWl0ZW0tJHt0aGlzLnN0YXR1c31gXTogdHJ1ZSxcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30taXRlbS1jdXN0b21gXTogdGhpcy5pc0N1c3RvbUljb24gfHwgKHRoaXMuaWNvbiAmJiB0aGlzLl9jdXJyZW50SW5kZXggIT09IHRoaXMuc3RlcE51bWJlcilcbiAgICB9O1xuICB9XG5cbiAgc2V0SWNvbigpIHtcbiAgICBpZiAoIXRoaXMuaXNDdXN0b21JY29uKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuX3N0YXR1cykge1xuICAgICAgICBjYXNlIFN0ZXBTdGF0dXNFbnVtLkZJTklTSDpcbiAgICAgICAgICB0aGlzLl9pY29uID0gJ2NoZWNrLWNpcmNsZS1vJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTdGVwU3RhdHVzRW51bS5FUlJPUjpcbiAgICAgICAgICB0aGlzLl9pY29uID0gJ2Nyb3NzLWNpcmNsZS1vJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTdGVwU3RhdHVzRW51bS5XQUlUOlxuICAgICAgICAgIHRoaXMuX2ljb24gPSAnZWxsaXBzaXMnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkgeyB9XG59XG5cbmV4cG9ydCBlbnVtIFN0ZXBTdGF0dXNFbnVtIHtcbiAgV0FJVCA9ICd3YWl0JyxcbiAgUFJPQ0VTUyA9ICdwcm9jZXNzJyxcbiAgRklOSVNIID0gJ2ZpbmlzaCcsXG4gIEVSUk9SID0gJ2Vycm9yJ1xufVxuZXhwb3J0IGVudW0gU3RlcERpcmVjdGlvbkVudW0ge1xuICBWRVJUSUNBTCA9ICd2ZXJ0aWNhbCcsXG4gIEhPUklaT05UQUwgPSAnaG9yaXpvbnRhbCdcbn1cbiIsIjxkaXYgW25nQ2xhc3NdPVwic3RlcEl0ZW1DbHNcIj5cbiAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1pdGVtLXRhaWxcIj5cbiAgICB7eyB0YWlsQ29udGVudCB9fVxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1pdGVtLWljb25cIj5cbiAgICA8c3BhbiAqbmdJZj1cImlzVGVtcGxhdGVSZWYoaWNvbilcIiBbbmdDbGFzc109XCJpY29uQ2xzXCI+XG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaWNvblwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiIWlzVGVtcGxhdGVSZWYoaWNvbikgJiYgKHN0YXR1cyA9PT0gJ2Vycm9yJyB8fCBzdGF0dXMgPT09ICdmaW5pc2gnIHx8IHN0YXR1cyA9PT0gJ3dhaXQnKVwiIFtuZ0NsYXNzXT1cImljb25DbHNcIj5cbiAgICAgIDxJY29uIFt0eXBlXT1cImljb25cIiBbc2l6ZV09XCJpY29uU2l6ZVwiPiA8L0ljb24+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiIWlzVGVtcGxhdGVSZWYoaWNvbikgJiYgIShzdGF0dXMgPT09ICdlcnJvcicgfHwgc3RhdHVzID09PSAnZmluaXNoJyB8fCBzdGF0dXMgPT09ICd3YWl0JylcIiBbbmdDbGFzc109XCJpY29uQ2xzXCJcbiAgICAgID57eyBzdGVwTnVtYmVyIH19XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1pdGVtLWNvbnRlbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LWl0ZW0tdGl0bGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZVJlZih0aXRsZSk7IGVsc2UgdGl0bGVUZW1wbGF0ZVwiPnt7IHRpdGxlIH19PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImRlc2NyaXB0aW9uXCIgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0taXRlbS1kZXNjcmlwdGlvblwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlUmVmKGRlc2NyaXB0aW9uKTsgZWxzZSBkZXNjcmlwdGlvblRlbXBsYXRlXCI+e3sgZGVzY3JpcHRpb24gfX08L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjdGl0bGVUZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRpdGxlXCI+PC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2Rlc2NyaXB0aW9uVGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJkZXNjcmlwdGlvblwiPjwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19