UNPKG

@xmagic/nz-formly

Version:

基于ng-zorro-antd UI 扩展的ngx-formly组件库

177 lines (175 loc) 19.4 kB
import { ChangeDetectionStrategy, Component, Optional } from '@angular/core'; import { FieldWrapper } from '@ngx-formly/core'; import { hasTplNameValue, resolveTplName } from '@xmagic/nz-formly/common'; import * as i0 from "@angular/core"; import * as i1 from "@xmagic/nz-formly/common"; import * as i2 from "@angular/common"; import * as i3 from "ng-zorro-antd/grid"; import * as i4 from "ng-zorro-antd/form"; import * as i5 from "ng-zorro-antd/core/outlet"; import * as i6 from "@ngx-formly/core"; export class FieldWrapperComponent extends FieldWrapper { fieldTemplates; constructor(fieldTemplates) { super(); this.fieldTemplates = fieldTemplates; } get nzTooltipTitle() { return resolveTplName(this.props, this.fieldTemplates, 'nzTooltipTitle'); } get nzExtra() { return resolveTplName(this.props, this.fieldTemplates, 'nzExtra'); } get hasLabel() { return hasTplNameValue(this.props, 'label'); } get label() { return resolveTplName(this.props, this.fieldTemplates, 'label'); } get nzSuccessTip() { return resolveTplName(this.props, this.fieldTemplates, 'nzSuccessTip'); } get nzValidatingTip() { return resolveTplName(this.props, this.fieldTemplates, 'nzValidatingTip'); } get nzWarningTip() { return resolveTplName(this.props, this.fieldTemplates, 'nzWarningTip'); } get hasError() { return (this.formControl?.dirty || this.formControl?.touched) && this.formControl.errors; } get validateStatus() { return this.hasError ? 'error' : this.props.nzValidateStatus; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FieldWrapperComponent, deps: [{ token: i1.FormlyBoxTemplates, optional: true }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FieldWrapperComponent, selector: "formly-field-wrapper", usesInheritance: true, ngImport: i0, template: ` <nz-form-item [class]="field.className"> <ng-container *ngIf="hasLabel && props.hideLabel !== true"> <nz-form-label *ngIf="hasLabel" [ngClass]="props.labelClass || formState.labelClass" [nzRequired]="props.required && props.hideRequiredMarker !== true" [nzFor]="id" [nzTooltipTitle]="nzTooltipTitle" [nzTooltipIcon]="props.nzTooltipIcon" [nzSpan]="props.labelNzSpan || formState.labelNzSpan" [nzNoColon]="props.nzNoColon || formState.nzNoColon" [nzFlex]="props.labelNzFlex || formState.labelNzFlex" [nzLg]="props.labelNzLg || formState.labelNzLg" [nzMd]="props.labelNzMd || formState.labelNzMd" [nzOffset]="props.labelNzOffset || formState.labelNzOffset" [nzOrder]="props.labelNzOrder || formState.labelNzOrder" [nzPull]="props.labelNzPull || formState.labelNzPull" [nzPush]="props.labelNzPush || formState.labelNzPush" [nzSm]="props.labelNzSm || formState.labelNzSm" [nzXl]="props.labelNzXl || formState.labelNzXl" [nzXs]="props.labelNzXs || formState.labelNzXs" [nzXXl]="props.labelNzXXl || formState.labelNzXXl" > <ng-container *nzStringTemplateOutlet="label; context: { $implicit: field, options: props }"> <div [innerHTML]="label"></div> </ng-container> </nz-form-label> </ng-container> <nz-form-control [ngClass]="props.controlClass || formState.controlClass" [nzValidateStatus]="validateStatus" [nzErrorTip]="errorTip" [nzAutoTips]="props.nzAutoTips || formState.nzAutoTips" [nzHasFeedback]="props.nzHasFeedback || formState.nzHasFeedback" [nzSuccessTip]="nzSuccessTip || formState.nzSuccessTip" [nzValidatingTip]="nzValidatingTip || formState.nzValidatingTip" [nzWarningTip]="nzWarningTip || formState.nzWarningTip" [nzDisableAutoTips]="props.nzDisableAutoTips || formState.nzDisableAutoTips" [nzExtra]="props.description || nzExtra" [nzSpan]="props.controlNzSpan || formState.controlNzSpan" [nzFlex]="props.controlNzFlex || formState.controlNzFlex" [nzLg]="props.controlNzLg || formState.controlNzLg" [nzMd]="props.controlNzMd || formState.controlNzMd" [nzOffset]="props.controlNzOffset || formState.controlNzOffset" [nzOrder]="props.controlNzOrder || formState.controlNzOrder" [nzPull]="props.controlNzPull || formState.controlNzPull" [nzPush]="props.controlNzPush || formState.controlNzPush" [nzSm]="props.controlNzSm || formState.controlNzSm" [nzXl]="props.controlNzXl || formState.controlNzXl" [nzXs]="props.controlNzXs || formState.controlNzXs" [nzXXl]="props.controlNzXXl || formState.controlNzXXl" > <ng-container #fieldComponent></ng-container> <ng-template #errorTip> <formly-validation-message *ngIf="hasError" [field]="field"></formly-validation-message> </ng-template> </nz-form-control> </nz-form-item> `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i3.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i4.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i4.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i4.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "directive", type: i5.NzStringTemplateOutletDirective, selector: "[nzStringTemplateOutlet]", inputs: ["nzStringTemplateOutletContext", "nzStringTemplateOutlet"], exportAs: ["nzStringTemplateOutlet"] }, { kind: "component", type: i6.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FieldWrapperComponent, decorators: [{ type: Component, args: [{ selector: 'formly-field-wrapper', template: ` <nz-form-item [class]="field.className"> <ng-container *ngIf="hasLabel && props.hideLabel !== true"> <nz-form-label *ngIf="hasLabel" [ngClass]="props.labelClass || formState.labelClass" [nzRequired]="props.required && props.hideRequiredMarker !== true" [nzFor]="id" [nzTooltipTitle]="nzTooltipTitle" [nzTooltipIcon]="props.nzTooltipIcon" [nzSpan]="props.labelNzSpan || formState.labelNzSpan" [nzNoColon]="props.nzNoColon || formState.nzNoColon" [nzFlex]="props.labelNzFlex || formState.labelNzFlex" [nzLg]="props.labelNzLg || formState.labelNzLg" [nzMd]="props.labelNzMd || formState.labelNzMd" [nzOffset]="props.labelNzOffset || formState.labelNzOffset" [nzOrder]="props.labelNzOrder || formState.labelNzOrder" [nzPull]="props.labelNzPull || formState.labelNzPull" [nzPush]="props.labelNzPush || formState.labelNzPush" [nzSm]="props.labelNzSm || formState.labelNzSm" [nzXl]="props.labelNzXl || formState.labelNzXl" [nzXs]="props.labelNzXs || formState.labelNzXs" [nzXXl]="props.labelNzXXl || formState.labelNzXXl" > <ng-container *nzStringTemplateOutlet="label; context: { $implicit: field, options: props }"> <div [innerHTML]="label"></div> </ng-container> </nz-form-label> </ng-container> <nz-form-control [ngClass]="props.controlClass || formState.controlClass" [nzValidateStatus]="validateStatus" [nzErrorTip]="errorTip" [nzAutoTips]="props.nzAutoTips || formState.nzAutoTips" [nzHasFeedback]="props.nzHasFeedback || formState.nzHasFeedback" [nzSuccessTip]="nzSuccessTip || formState.nzSuccessTip" [nzValidatingTip]="nzValidatingTip || formState.nzValidatingTip" [nzWarningTip]="nzWarningTip || formState.nzWarningTip" [nzDisableAutoTips]="props.nzDisableAutoTips || formState.nzDisableAutoTips" [nzExtra]="props.description || nzExtra" [nzSpan]="props.controlNzSpan || formState.controlNzSpan" [nzFlex]="props.controlNzFlex || formState.controlNzFlex" [nzLg]="props.controlNzLg || formState.controlNzLg" [nzMd]="props.controlNzMd || formState.controlNzMd" [nzOffset]="props.controlNzOffset || formState.controlNzOffset" [nzOrder]="props.controlNzOrder || formState.controlNzOrder" [nzPull]="props.controlNzPull || formState.controlNzPull" [nzPush]="props.controlNzPush || formState.controlNzPush" [nzSm]="props.controlNzSm || formState.controlNzSm" [nzXl]="props.controlNzXl || formState.controlNzXl" [nzXs]="props.controlNzXs || formState.controlNzXs" [nzXXl]="props.controlNzXXl || formState.controlNzXXl" > <ng-container #fieldComponent></ng-container> <ng-template #errorTip> <formly-validation-message *ngIf="hasError" [field]="field"></formly-validation-message> </ng-template> </nz-form-control> </nz-form-item> `, changeDetection: ChangeDetectionStrategy.OnPush }] }], ctorParameters: () => [{ type: i1.FormlyBoxTemplates, decorators: [{ type: Optional }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtd3JhcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvZmllbGQtd3JhcHBlci9maWVsZC13cmFwcGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFzQixlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7O0FBbUUvRixNQUFNLE9BQU8scUJBQXNCLFNBQVEsWUFBWTtJQUN0QjtJQUEvQixZQUErQixjQUFrQztRQUMvRCxLQUFLLEVBQUUsQ0FBQztRQURxQixtQkFBYyxHQUFkLGNBQWMsQ0FBb0I7SUFFakUsQ0FBQztJQUNELElBQUksY0FBYztRQUNoQixPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsSUFBSSxPQUFPO1FBQ1QsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUNELElBQUksWUFBWTtRQUNkLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQ0QsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFDRCxJQUFJLFlBQVk7UUFDZCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQzNGLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7SUFDL0QsQ0FBQzt3R0FsQ1UscUJBQXFCOzRGQUFyQixxQkFBcUIsbUZBL0R0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNERUOzs0RkFHVSxxQkFBcUI7a0JBakVqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNERUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs7MEJBRWMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpZWxkV3JhcHBlciB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlCb3hUZW1wbGF0ZXMsIGhhc1RwbE5hbWVWYWx1ZSwgcmVzb2x2ZVRwbE5hbWUgfSBmcm9tICdAeG1hZ2ljL256LWZvcm1seS9jb21tb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmb3JtbHktZmllbGQtd3JhcHBlcicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxuei1mb3JtLWl0ZW0gW2NsYXNzXT1cImZpZWxkLmNsYXNzTmFtZVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzTGFiZWwgJiYgcHJvcHMuaGlkZUxhYmVsICE9PSB0cnVlXCI+XHJcbiAgICAgICAgPG56LWZvcm0tbGFiZWxcclxuICAgICAgICAgICpuZ0lmPVwiaGFzTGFiZWxcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwicHJvcHMubGFiZWxDbGFzcyB8fCBmb3JtU3RhdGUubGFiZWxDbGFzc1wiXHJcbiAgICAgICAgICBbbnpSZXF1aXJlZF09XCJwcm9wcy5yZXF1aXJlZCAmJiBwcm9wcy5oaWRlUmVxdWlyZWRNYXJrZXIgIT09IHRydWVcIlxyXG4gICAgICAgICAgW256Rm9yXT1cImlkXCJcclxuICAgICAgICAgIFtuelRvb2x0aXBUaXRsZV09XCJuelRvb2x0aXBUaXRsZVwiXHJcbiAgICAgICAgICBbbnpUb29sdGlwSWNvbl09XCJwcm9wcy5uelRvb2x0aXBJY29uXCJcclxuICAgICAgICAgIFtuelNwYW5dPVwicHJvcHMubGFiZWxOelNwYW4gfHwgZm9ybVN0YXRlLmxhYmVsTnpTcGFuXCJcclxuICAgICAgICAgIFtuek5vQ29sb25dPVwicHJvcHMubnpOb0NvbG9uIHx8IGZvcm1TdGF0ZS5uek5vQ29sb25cIlxyXG4gICAgICAgICAgW256RmxleF09XCJwcm9wcy5sYWJlbE56RmxleCB8fCBmb3JtU3RhdGUubGFiZWxOekZsZXhcIlxyXG4gICAgICAgICAgW256TGddPVwicHJvcHMubGFiZWxOekxnIHx8IGZvcm1TdGF0ZS5sYWJlbE56TGdcIlxyXG4gICAgICAgICAgW256TWRdPVwicHJvcHMubGFiZWxOek1kIHx8IGZvcm1TdGF0ZS5sYWJlbE56TWRcIlxyXG4gICAgICAgICAgW256T2Zmc2V0XT1cInByb3BzLmxhYmVsTnpPZmZzZXQgfHwgZm9ybVN0YXRlLmxhYmVsTnpPZmZzZXRcIlxyXG4gICAgICAgICAgW256T3JkZXJdPVwicHJvcHMubGFiZWxOek9yZGVyIHx8IGZvcm1TdGF0ZS5sYWJlbE56T3JkZXJcIlxyXG4gICAgICAgICAgW256UHVsbF09XCJwcm9wcy5sYWJlbE56UHVsbCB8fCBmb3JtU3RhdGUubGFiZWxOelB1bGxcIlxyXG4gICAgICAgICAgW256UHVzaF09XCJwcm9wcy5sYWJlbE56UHVzaCB8fCBmb3JtU3RhdGUubGFiZWxOelB1c2hcIlxyXG4gICAgICAgICAgW256U21dPVwicHJvcHMubGFiZWxOelNtIHx8IGZvcm1TdGF0ZS5sYWJlbE56U21cIlxyXG4gICAgICAgICAgW256WGxdPVwicHJvcHMubGFiZWxOelhsIHx8IGZvcm1TdGF0ZS5sYWJlbE56WGxcIlxyXG4gICAgICAgICAgW256WHNdPVwicHJvcHMubGFiZWxOelhzIHx8IGZvcm1TdGF0ZS5sYWJlbE56WHNcIlxyXG4gICAgICAgICAgW256WFhsXT1cInByb3BzLmxhYmVsTnpYWGwgfHwgZm9ybVN0YXRlLmxhYmVsTnpYWGxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm56U3RyaW5nVGVtcGxhdGVPdXRsZXQ9XCJsYWJlbDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGZpZWxkLCBvcHRpb25zOiBwcm9wcyB9XCI+XHJcbiAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJsYWJlbFwiPjwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uei1mb3JtLWxhYmVsPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuei1mb3JtLWNvbnRyb2xcclxuICAgICAgICBbbmdDbGFzc109XCJwcm9wcy5jb250cm9sQ2xhc3MgfHwgZm9ybVN0YXRlLmNvbnRyb2xDbGFzc1wiXHJcbiAgICAgICAgW256VmFsaWRhdGVTdGF0dXNdPVwidmFsaWRhdGVTdGF0dXNcIlxyXG4gICAgICAgIFtuekVycm9yVGlwXT1cImVycm9yVGlwXCJcclxuICAgICAgICBbbnpBdXRvVGlwc109XCJwcm9wcy5uekF1dG9UaXBzIHx8IGZvcm1TdGF0ZS5uekF1dG9UaXBzXCJcclxuICAgICAgICBbbnpIYXNGZWVkYmFja109XCJwcm9wcy5uekhhc0ZlZWRiYWNrIHx8IGZvcm1TdGF0ZS5uekhhc0ZlZWRiYWNrXCJcclxuICAgICAgICBbbnpTdWNjZXNzVGlwXT1cIm56U3VjY2Vzc1RpcCB8fCBmb3JtU3RhdGUubnpTdWNjZXNzVGlwXCJcclxuICAgICAgICBbbnpWYWxpZGF0aW5nVGlwXT1cIm56VmFsaWRhdGluZ1RpcCB8fCBmb3JtU3RhdGUubnpWYWxpZGF0aW5nVGlwXCJcclxuICAgICAgICBbbnpXYXJuaW5nVGlwXT1cIm56V2FybmluZ1RpcCB8fCBmb3JtU3RhdGUubnpXYXJuaW5nVGlwXCJcclxuICAgICAgICBbbnpEaXNhYmxlQXV0b1RpcHNdPVwicHJvcHMubnpEaXNhYmxlQXV0b1RpcHMgfHwgZm9ybVN0YXRlLm56RGlzYWJsZUF1dG9UaXBzXCJcclxuICAgICAgICBbbnpFeHRyYV09XCJwcm9wcy5kZXNjcmlwdGlvbiB8fCBuekV4dHJhXCJcclxuICAgICAgICBbbnpTcGFuXT1cInByb3BzLmNvbnRyb2xOelNwYW4gfHwgZm9ybVN0YXRlLmNvbnRyb2xOelNwYW5cIlxyXG4gICAgICAgIFtuekZsZXhdPVwicHJvcHMuY29udHJvbE56RmxleCB8fCBmb3JtU3RhdGUuY29udHJvbE56RmxleFwiXHJcbiAgICAgICAgW256TGddPVwicHJvcHMuY29udHJvbE56TGcgfHwgZm9ybVN0YXRlLmNvbnRyb2xOekxnXCJcclxuICAgICAgICBbbnpNZF09XCJwcm9wcy5jb250cm9sTnpNZCB8fCBmb3JtU3RhdGUuY29udHJvbE56TWRcIlxyXG4gICAgICAgIFtuek9mZnNldF09XCJwcm9wcy5jb250cm9sTnpPZmZzZXQgfHwgZm9ybVN0YXRlLmNvbnRyb2xOek9mZnNldFwiXHJcbiAgICAgICAgW256T3JkZXJdPVwicHJvcHMuY29udHJvbE56T3JkZXIgfHwgZm9ybVN0YXRlLmNvbnRyb2xOek9yZGVyXCJcclxuICAgICAgICBbbnpQdWxsXT1cInByb3BzLmNvbnRyb2xOelB1bGwgfHwgZm9ybVN0YXRlLmNvbnRyb2xOelB1bGxcIlxyXG4gICAgICAgIFtuelB1c2hdPVwicHJvcHMuY29udHJvbE56UHVzaCB8fCBmb3JtU3RhdGUuY29udHJvbE56UHVzaFwiXHJcbiAgICAgICAgW256U21dPVwicHJvcHMuY29udHJvbE56U20gfHwgZm9ybVN0YXRlLmNvbnRyb2xOelNtXCJcclxuICAgICAgICBbbnpYbF09XCJwcm9wcy5jb250cm9sTnpYbCB8fCBmb3JtU3RhdGUuY29udHJvbE56WGxcIlxyXG4gICAgICAgIFtuelhzXT1cInByb3BzLmNvbnRyb2xOelhzIHx8IGZvcm1TdGF0ZS5jb250cm9sTnpYc1wiXHJcbiAgICAgICAgW256WFhsXT1cInByb3BzLmNvbnRyb2xOelhYbCB8fCBmb3JtU3RhdGUuY29udHJvbE56WFhsXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgI2ZpZWxkQ29tcG9uZW50PjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZXJyb3JUaXA+XHJcbiAgICAgICAgICA8Zm9ybWx5LXZhbGlkYXRpb24tbWVzc2FnZSAqbmdJZj1cImhhc0Vycm9yXCIgW2ZpZWxkXT1cImZpZWxkXCI+PC9mb3JtbHktdmFsaWRhdGlvbi1tZXNzYWdlPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvbnotZm9ybS1jb250cm9sPlxyXG4gICAgPC9uei1mb3JtLWl0ZW0+XHJcbiAgYCxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmllbGRXcmFwcGVyQ29tcG9uZW50IGV4dGVuZHMgRmllbGRXcmFwcGVyIHtcclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBwdWJsaWMgZmllbGRUZW1wbGF0ZXM6IEZvcm1seUJveFRlbXBsYXRlcykge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcbiAgZ2V0IG56VG9vbHRpcFRpdGxlKCkge1xyXG4gICAgcmV0dXJuIHJlc29sdmVUcGxOYW1lKHRoaXMucHJvcHMsIHRoaXMuZmllbGRUZW1wbGF0ZXMsICduelRvb2x0aXBUaXRsZScpO1xyXG4gIH1cclxuICBnZXQgbnpFeHRyYSgpIHtcclxuICAgIHJldHVybiByZXNvbHZlVHBsTmFtZSh0aGlzLnByb3BzLCB0aGlzLmZpZWxkVGVtcGxhdGVzLCAnbnpFeHRyYScpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0xhYmVsKCkge1xyXG4gICAgcmV0dXJuIGhhc1RwbE5hbWVWYWx1ZSh0aGlzLnByb3BzLCAnbGFiZWwnKTtcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbCgpIHtcclxuICAgIHJldHVybiByZXNvbHZlVHBsTmFtZSh0aGlzLnByb3BzLCB0aGlzLmZpZWxkVGVtcGxhdGVzLCAnbGFiZWwnKTtcclxuICB9XHJcbiAgZ2V0IG56U3VjY2Vzc1RpcCgpIHtcclxuICAgIHJldHVybiByZXNvbHZlVHBsTmFtZSh0aGlzLnByb3BzLCB0aGlzLmZpZWxkVGVtcGxhdGVzLCAnbnpTdWNjZXNzVGlwJyk7XHJcbiAgfVxyXG4gIGdldCBuelZhbGlkYXRpbmdUaXAoKSB7XHJcbiAgICByZXR1cm4gcmVzb2x2ZVRwbE5hbWUodGhpcy5wcm9wcywgdGhpcy5maWVsZFRlbXBsYXRlcywgJ256VmFsaWRhdGluZ1RpcCcpO1xyXG4gIH1cclxuICBnZXQgbnpXYXJuaW5nVGlwKCkge1xyXG4gICAgcmV0dXJuIHJlc29sdmVUcGxOYW1lKHRoaXMucHJvcHMsIHRoaXMuZmllbGRUZW1wbGF0ZXMsICdueldhcm5pbmdUaXAnKTtcclxuICB9XHJcblxyXG4gIGdldCBoYXNFcnJvcigpIHtcclxuICAgIHJldHVybiAodGhpcy5mb3JtQ29udHJvbD8uZGlydHkgfHwgdGhpcy5mb3JtQ29udHJvbD8udG91Y2hlZCkgJiYgdGhpcy5mb3JtQ29udHJvbC5lcnJvcnM7XHJcbiAgfVxyXG5cclxuICBnZXQgdmFsaWRhdGVTdGF0dXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oYXNFcnJvciA/ICdlcnJvcicgOiB0aGlzLnByb3BzLm56VmFsaWRhdGVTdGF0dXM7XHJcbiAgfVxyXG59XHJcbiJdfQ==