survey-angular-ui
Version:
survey.js is a JavaScript Survey Library. It is a modern way to add a survey to your website. It uses JSON for survey metadata and results.
118 lines • 21.6 kB
JavaScript
import { Component, Input, ViewChild } from "@angular/core";
import { BaseAngular } from "../base-angular";
import { getComponentName } from "../question";
import * as i0 from "@angular/core";
import * as i1 from "../components/matrix-actions/drag-drop-icon/drag-drop-icon";
import * as i2 from "../components/action-bar/action-bar.component";
import * as i3 from "../errors.component";
import * as i4 from "../survey-string.component";
import * as i5 from "./matrixrequiredheader.component";
import * as i6 from "./selectbase-item";
import * as i7 from "../comment-other.component";
import * as i8 from "@angular/common";
import * as i9 from "../utils/dynamic.directive";
import * as i10 from "../utils/ng-show.directive";
export class MatrixDropdownCellComponent extends BaseAngular {
getModel() {
if (this.cell.hasQuestion) {
return this.cell.question;
}
if (!!this.cell.column) {
return this.cell.column;
}
return null;
}
get row() {
return this.cell.row;
}
ngDoCheck() {
var _a;
super.ngDoCheck();
if (this.cell.isErrorsCell && ((_a = this.cell) === null || _a === void 0 ? void 0 : _a.question)) {
this.cell.question.registerFunctionOnPropertiesValueChanged(["errors", "visible"], () => {
this.update();
}, "__ngSubscription");
}
}
get panelComponentName() {
const panel = this.cell.panel;
const survey = panel.survey;
if (!!survey) {
const name = survey.getElementWrapperComponentName(panel);
if (!!name) {
return name;
}
}
return "panel";
}
get panelComponentData() {
const panel = this.cell.panel;
const survey = panel.survey;
let data;
if (!!survey) {
data = survey.getElementWrapperComponentData(panel);
}
return {
componentName: "panel",
componentData: {
model: panel,
data: data
}
};
}
getComponentName(element) { return getComponentName(element); }
getCellStyle() {
if (!!this.cell.width || !!this.cell.minWidth)
return { width: this.cell.width, minWidth: this.cell.minWidth };
return null;
}
get isRequiredCell() {
return !!this.cell.column && this.cell.column.isRenderedRequired;
}
ngAfterViewInit() {
var _a;
if (!this.cell.hasQuestion || !this.question || !this.question.survey)
return;
const el = (_a = this.cellContainer) === null || _a === void 0 ? void 0 : _a.nativeElement;
if (el) {
const cellQ = this.cell.question;
var options = {
cell: this.cell.cell,
cellQuestion: cellQ,
htmlElement: el,
row: this.cell.row,
column: this.cell.cell.column,
};
this.question.survey.matrixAfterCellRender(options);
cellQ.afterRenderCore(el);
}
}
ngOnDestroy() {
var _a;
super.ngOnDestroy();
if (this.cell.isErrorsCell && ((_a = this.cell) === null || _a === void 0 ? void 0 : _a.question)) {
this.cell.question.unRegisterFunctionOnPropertiesValueChanged(["errors", "visible"], "__ngSubscription");
}
}
get canRender() {
return this.question && this.question.survey && this.cell.isVisible;
}
}
MatrixDropdownCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixDropdownCellComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
MatrixDropdownCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MatrixDropdownCellComponent, selector: "sv-ng-matrixdropdown-cell", inputs: { question: "question", cell: "cell" }, viewQueries: [{ propertyName: "cellContainer", first: true, predicate: ["cellContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <td [class]=\"cell.className\" *ngIf=\"canRender\" [title]=\"cell.getTitle()\"\n [style]=\"getCellStyle()\" [attr.colspan]=\"cell.colSpans\" (focusin)=\"cell.focusIn()\" #cellContainer>\n <sv-ng-matrix-drag-drop-icon *ngIf=\"cell.isDragHandlerCell\"\n [model]=\"$any({ data: { row: row, question: question } })\"></sv-ng-matrix-drag-drop-icon>\n <sv-action-bar *ngIf=\"cell.isActionsCell\" [model]=\"cell.item.getData()\" [handleClick]=\"false\"></sv-action-bar>\n <ng-container *ngIf=\"cell.hasPanel\">\n <ng-template [component]=\"{ name: panelComponentName, data: panelComponentData }\"></ng-template>\n </ng-container>\n <div *ngIf=\"cell.isErrorsCell && cell.question?.hasVisibleErrors\" [element]=\"cell.question\" sv-ng-errors></div>\n <span *ngIf=\"cell.showResponsiveTitle\" [class]=\"cell.responsiveTitleCss\">\n <sv-ng-string [model]=\"cell.responsiveLocTitle\"></sv-ng-string>\n <sv-ng-matrixheaderrequired [column]=\"cell.column\" [question]=\"cell.matrix\">\n </sv-ng-matrixheaderrequired>\n </span>\n <div *ngIf=\"cell.hasQuestion\" [class]=\"cell.cellQuestionWrapperClassName\"\n [visible]=\"cell.question.isVisible\">\n <ng-container *ngIf=\"!cell.isChoice && cell.question.isDefaultRendering()\">\n <ng-template\n [component]=\"{ name: question.getCellWrapperComponentName(cell.cell), data: { componentData: question.getCellWrapperComponentData(cell.cell)} }\">\n <ng-template\n [component]=\"{ name: getComponentName(cell.question), data: { model: cell.question } }\"></ng-template>\n </ng-template>\n </ng-container>\n <ng-template *ngIf=\"!cell.isChoice && !cell.question.isDefaultRendering()\"\n [component]=\"{ name: cell.question.getComponentName(), data: { model: cell.question } }\">\n </ng-template>\n <ng-container *ngIf=\"cell.isItemChoice\">\n <ng-template\n [component]=\"{ name: question.getCellWrapperComponentName(cell.cell), data: { componentData: question.getCellWrapperComponentData(cell.cell)} }\">\n <sv-ng-selebase-item [showLabel]=\"false\" [inputType]=\"cell.isCheckbox ? 'checkbox': 'radio'\"\n [question]=\"cell.question\" [model]=\"cell.item\"></sv-ng-selebase-item>\n </ng-template>\n </ng-container>\n <div *ngIf=\"cell.isOtherChoice\" [class]=\"cell.question.getCommentAreaCss(true)\" [question]=\"cell.question\"\n sv-ng-comment-other></div>\n </div>\n <ng-container *ngIf=\"cell.hasTitle\">\n <ng-template\n [component]=\"{ name: question.getCellWrapperComponentName($any(cell)), data: { componentData: question.getCellWrapperComponentData($any(cell))} }\">\n <sv-ng-string [model]=\"cell.locTitle\"></sv-ng-string>\n <span *ngIf=\"isRequiredCell\" [class]=\"question.cssClasses.cellRequiredMark\">{{ cell.requiredMark }}</span>\n </ng-template>\n </ng-container>\n </td>\n</ng-template>", styles: [":host { display: none; }"], components: [{ type: i1.MatrixDynamicDragDropIconComponent, selector: "sv-ng-matrix-drag-drop-icon", inputs: ["model"] }, { type: i2.ActionBarComponent, selector: "sv-action-bar, sv-ng-action-bar", inputs: ["model", "handleClick"] }, { type: i3.ErrorsComponent, selector: "'[sv-ng-errors]'", inputs: ["element", "location"] }, { type: i4.SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: i5.MatrixRequiredHeader, selector: "sv-ng-matrixheaderrequired", inputs: ["column", "question"] }, { type: i6.SelectBaseItemComponent, selector: "['sv-ng-selectbase-item'], sv-ng-selebase-item", inputs: ["question", "model", "inputType", "showLabel"] }, { type: i7.SurveyCommentOtherComponent, selector: "sv-ng-comment-other, '[sv-ng-comment-other]'", inputs: ["question"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.DynamicComponentDirective, selector: "[component]", inputs: ["component"] }, { type: i10.VisibleDirective, selector: "[visible]", inputs: ["visible"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixDropdownCellComponent, decorators: [{
type: Component,
args: [{
selector: "sv-ng-matrixdropdown-cell",
templateUrl: "./matrixdropdowncell.component.html",
styles: [":host { display: none; }"]
}]
}], propDecorators: { question: [{
type: Input
}], cell: [{
type: Input
}], cellContainer: [{
type: ViewChild,
args: ["cellContainer"]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0cml4ZHJvcGRvd25jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9xdWVzdGlvbnMvbWF0cml4ZHJvcGRvd25jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9xdWVzdGlvbnMvbWF0cml4ZHJvcGRvd25jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFROUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7QUFPL0MsTUFBTSxPQUFPLDJCQUE0QixTQUFRLFdBQXFCO0lBS3BFLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDM0I7UUFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ3pCO1FBQ0QsT0FBTyxJQUFXLENBQUM7SUFDckIsQ0FBQztJQUNELElBQVcsR0FBRztRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDdkIsQ0FBQztJQUNlLFNBQVM7O1FBQ3ZCLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFJLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsUUFBUSxDQUFBLEVBQUU7WUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFD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QUEsSUFBSSxDQUFDLElBQUksMENBQUUsUUFBUSxDQUFBLEVBQUU7WUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsMENBQTBDLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztTQUMxRztJQUNILENBQUM7SUFDRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3RFLENBQUM7O3lIQXJGVSwyQkFBMkI7NkdBQTNCLDJCQUEyQix3UENoQnhDLHU3RkE2Q2M7NEZEN0JELDJCQUEyQjtrQkFMdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxXQUFXLEVBQUUscUNBQXFDO29CQUNsRCxNQUFNLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztpQkFDckM7OEJBRVUsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRXNCLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBCYXNlQW5ndWxhciB9IGZyb20gXCIuLi9iYXNlLWFuZ3VsYXJcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBnZXRDb21wb25lbnROYW1lIH0gZnJvbSBcIi4uL3F1ZXN0aW9uXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJzdi1uZy1tYXRyaXhkcm9wZG93bi1jZWxsXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vbWF0cml4ZHJvcGRvd25jZWxsLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlczogW1wiOmhvc3QgeyBkaXNwbGF5OiBub25lOyB9XCJdXG59KVxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duQ2VsbENvbXBvbmVudCBleHRlbmRzIEJhc2VBbmd1bGFyPFF1ZXN0aW9uPiB7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uITogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZTtcbiAgQElucHV0KCkgY2VsbCE6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGw7XG5cbiAgQFZpZXdDaGlsZChcImNlbGxDb250YWluZXJcIikgY2VsbENvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBnZXRNb2RlbCgpIHtcbiAgICBpZiAodGhpcy5jZWxsLmhhc1F1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5jZWxsLnF1ZXN0aW9uO1xuICAgIH1cbiAgICBpZiAoISF0aGlzLmNlbGwuY29sdW1uKSB7XG4gICAgICByZXR1cm4gdGhpcy5jZWxsLmNvbHVtbjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGwgYXMgYW55O1xuICB9XG4gIHB1YmxpYyBnZXQgcm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5jZWxsLnJvdztcbiAgfVxuICBwdWJsaWMgb3ZlcnJpZGUgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLm5nRG9DaGVjaygpO1xuICAgIGlmICh0aGlzLmNlbGwuaXNFcnJvcnNDZWxsICYmIHRoaXMuY2VsbD8ucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuY2VsbC5xdWVzdGlvbi5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFtcImVycm9yc1wiLCBcInZpc2libGVcIl0sICgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgIH0sIFwiX19uZ1N1YnNjcmlwdGlvblwiKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBwYW5lbENvbXBvbmVudE5hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYW5lbCA9IHRoaXMuY2VsbC5wYW5lbDtcbiAgICBjb25zdCBzdXJ2ZXkgPSA8U3VydmV5TW9kZWw+cGFuZWwuc3VydmV5O1xuICAgIGlmICghIXN1cnZleSkge1xuICAgICAgY29uc3QgbmFtZSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUocGFuZWwpO1xuICAgICAgaWYgKCEhbmFtZSkge1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFwicGFuZWxcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhbmVsQ29tcG9uZW50RGF0YSgpOiBhbnkge1xuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5jZWxsLnBhbmVsO1xuICAgIGNvbnN0IHN1cnZleSA9IDxTdXJ2ZXlNb2RlbD5wYW5lbC5zdXJ2ZXk7XG4gICAgbGV0IGRhdGE6IGFueTtcbiAgICBpZiAoISFzdXJ2ZXkpIHtcbiAgICAgIGRhdGEgPSBzdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKHBhbmVsKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBvbmVudE5hbWU6IFwicGFuZWxcIixcbiAgICAgIGNvbXBvbmVudERhdGE6IHtcbiAgICAgICAgbW9kZWw6IHBhbmVsLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGdldENvbXBvbmVudE5hbWUoZWxlbWVudDogUXVlc3Rpb24pIHsgcmV0dXJuIGdldENvbXBvbmVudE5hbWUoZWxlbWVudCk7IH1cbiAgZ2V0Q2VsbFN0eWxlKCkge1xuICAgIGlmICghIXRoaXMuY2VsbC53aWR0aCB8fCAhIXRoaXMuY2VsbC5taW5XaWR0aClcbiAgICAgIHJldHVybiB7IHdpZHRoOiB0aGlzLmNlbGwud2lkdGgsIG1pbldpZHRoOiB0aGlzLmNlbGwubWluV2lkdGggfTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZWRDZWxsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuY2VsbC5jb2x1bW4gJiYgdGhpcy5jZWxsLmNvbHVtbi5pc1JlbmRlcmVkUmVxdWlyZWQ7XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICghdGhpcy5jZWxsLmhhc1F1ZXN0aW9uIHx8ICF0aGlzLnF1ZXN0aW9uIHx8ICF0aGlzLnF1ZXN0aW9uLnN1cnZleSkgcmV0dXJuO1xuICAgIGNvbnN0IGVsID0gdGhpcy5jZWxsQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChlbCkge1xuICAgICAgY29uc3QgY2VsbFEgPSB0aGlzLmNlbGwucXVlc3Rpb247XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLmNlbGwsXG4gICAgICAgIGNlbGxRdWVzdGlvbjogY2VsbFEsXG4gICAgICAgIGh0bWxFbGVtZW50OiBlbCxcbiAgICAgICAgcm93OiB0aGlzLmNlbGwucm93LFxuICAgICAgICBjb2x1bW46IHRoaXMuY2VsbC5jZWxsLmNvbHVtbixcbiAgICAgIH07XG4gICAgICB0aGlzLnF1ZXN0aW9uLnN1cnZleS5tYXRyaXhBZnRlckNlbGxSZW5kZXIob3B0aW9ucyk7XG4gICAgICBjZWxsUS5hZnRlclJlbmRlckNvcmUoZWwpO1xuICAgIH1cbiAgfVxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIGlmICh0aGlzLmNlbGwuaXNFcnJvcnNDZWxsICYmIHRoaXMuY2VsbD8ucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuY2VsbC5xdWVzdGlvbi51blJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoW1wiZXJyb3JzXCIsIFwidmlzaWJsZVwiXSwgXCJfX25nU3Vic2NyaXB0aW9uXCIpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGNhblJlbmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbiAmJiB0aGlzLnF1ZXN0aW9uLnN1cnZleSAmJiB0aGlzLmNlbGwuaXNWaXNpYmxlO1xuICB9XG59IiwiPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZT5cbiAgPHRkIFtjbGFzc109XCJjZWxsLmNsYXNzTmFtZVwiICpuZ0lmPVwiY2FuUmVuZGVyXCIgW3RpdGxlXT1cImNlbGwuZ2V0VGl0bGUoKVwiXG4gICAgW3N0eWxlXT1cImdldENlbGxTdHlsZSgpXCIgW2F0dHIuY29sc3Bhbl09XCJjZWxsLmNvbFNwYW5zXCIgKGZvY3VzaW4pPVwiY2VsbC5mb2N1c0luKClcIiAjY2VsbENvbnRhaW5lcj5cbiAgICA8c3YtbmctbWF0cml4LWRyYWctZHJvcC1pY29uICpuZ0lmPVwiY2VsbC5pc0RyYWdIYW5kbGVyQ2VsbFwiXG4gICAgICBbbW9kZWxdPVwiJGFueSh7IGRhdGE6IHsgcm93OiByb3csIHF1ZXN0aW9uOiBxdWVzdGlvbiB9IH0pXCI+PC9zdi1uZy1tYXRyaXgtZHJhZy1kcm9wLWljb24+XG4gICAgPHN2LWFjdGlvbi1iYXIgKm5nSWY9XCJjZWxsLmlzQWN0aW9uc0NlbGxcIiBbbW9kZWxdPVwiY2VsbC5pdGVtLmdldERhdGEoKVwiIFtoYW5kbGVDbGlja109XCJmYWxzZVwiPjwvc3YtYWN0aW9uLWJhcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2VsbC5oYXNQYW5lbFwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtjb21wb25lbnRdPVwieyBuYW1lOiBwYW5lbENvbXBvbmVudE5hbWUsIGRhdGE6IHBhbmVsQ29tcG9uZW50RGF0YSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2ICpuZ0lmPVwiY2VsbC5pc0Vycm9yc0NlbGwgJiYgY2VsbC5xdWVzdGlvbj8uaGFzVmlzaWJsZUVycm9yc1wiIFtlbGVtZW50XT1cImNlbGwucXVlc3Rpb25cIiBzdi1uZy1lcnJvcnM+PC9kaXY+XG4gICAgPHNwYW4gKm5nSWY9XCJjZWxsLnNob3dSZXNwb25zaXZlVGl0bGVcIiBbY2xhc3NdPVwiY2VsbC5yZXNwb25zaXZlVGl0bGVDc3NcIj5cbiAgICAgIDxzdi1uZy1zdHJpbmcgW21vZGVsXT1cImNlbGwucmVzcG9uc2l2ZUxvY1RpdGxlXCI+PC9zdi1uZy1zdHJpbmc+XG4gICAgICA8c3YtbmctbWF0cml4aGVhZGVycmVxdWlyZWQgW2NvbHVtbl09XCJjZWxsLmNvbHVtblwiIFtxdWVzdGlvbl09XCJjZWxsLm1hdHJpeFwiPlxuICAgICAgPC9zdi1uZy1tYXRyaXhoZWFkZXJyZXF1aXJlZD5cbiAgICA8L3NwYW4+XG4gICAgPGRpdiAqbmdJZj1cImNlbGwuaGFzUXVlc3Rpb25cIiBbY2xhc3NdPVwiY2VsbC5jZWxsUXVlc3Rpb25XcmFwcGVyQ2xhc3NOYW1lXCJcbiAgICAgIFt2aXNpYmxlXT1cImNlbGwucXVlc3Rpb24uaXNWaXNpYmxlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNlbGwuaXNDaG9pY2UgJiYgY2VsbC5xdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVwiPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICBbY29tcG9uZW50XT1cInsgbmFtZTogcXVlc3Rpb24uZ2V0Q2VsbFdyYXBwZXJDb21wb25lbnROYW1lKGNlbGwuY2VsbCksIGRhdGE6IHsgY29tcG9uZW50RGF0YTogcXVlc3Rpb24uZ2V0Q2VsbFdyYXBwZXJDb21wb25lbnREYXRhKGNlbGwuY2VsbCl9IH1cIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtjb21wb25lbnRdPVwieyBuYW1lOiBnZXRDb21wb25lbnROYW1lKGNlbGwucXVlc3Rpb24pLCBkYXRhOiB7IG1vZGVsOiBjZWxsLnF1ZXN0aW9uIH0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIiFjZWxsLmlzQ2hvaWNlICYmICFjZWxsLnF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZygpXCJcbiAgICAgICAgW2NvbXBvbmVudF09XCJ7IG5hbWU6IGNlbGwucXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLCBkYXRhOiB7IG1vZGVsOiBjZWxsLnF1ZXN0aW9uIH0gfVwiPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjZWxsLmlzSXRlbUNob2ljZVwiPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICBbY29tcG9uZW50XT1cInsgbmFtZTogcXVlc3Rpb24uZ2V0Q2VsbFdyYXBwZXJDb21wb25lbnROYW1lKGNlbGwuY2VsbCksIGRhdGE6IHsgY29tcG9uZW50RGF0YTogcXVlc3Rpb24uZ2V0Q2VsbFdyYXBwZXJDb21wb25lbnREYXRhKGNlbGwuY2VsbCl9IH1cIj5cbiAgICAgICAgICA8c3Ytbmctc2VsZWJhc2UtaXRlbSBbc2hvd0xhYmVsXT1cImZhbHNlXCIgW2lucHV0VHlwZV09XCJjZWxsLmlzQ2hlY2tib3ggPyAnY2hlY2tib3gnOiAncmFkaW8nXCJcbiAgICAgICAgICAgIFtxdWVzdGlvbl09XCJjZWxsLnF1ZXN0aW9uXCIgW21vZGVsXT1cImNlbGwuaXRlbVwiPjwvc3Ytbmctc2VsZWJhc2UtaXRlbT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiAqbmdJZj1cImNlbGwuaXNPdGhlckNob2ljZVwiIFtjbGFzc109XCJjZWxsLnF1ZXN0aW9uLmdldENvbW1lbnRBcmVhQ3NzKHRydWUpXCIgW3F1ZXN0aW9uXT1cImNlbGwucXVlc3Rpb25cIlxuICAgICAgICBzdi1uZy1jb21tZW50LW90aGVyPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjZWxsLmhhc1RpdGxlXCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW2NvbXBvbmVudF09XCJ7IG5hbWU6IHF1ZXN0aW9uLmdldENlbGxXcmFwcGVyQ29tcG9uZW50TmFtZSgkYW55KGNlbGwpKSwgZGF0YTogeyBjb21wb25lbnREYXRhOiBxdWVzdGlvbi5nZXRDZWxsV3JhcHBlckNvbXBvbmVudERhdGEoJGFueShjZWxsKSl9IH1cIj5cbiAgICAgICAgPHN2LW5nLXN0cmluZyBbbW9kZWxdPVwiY2VsbC5sb2NUaXRsZVwiPjwvc3Ytbmctc3RyaW5nPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzUmVxdWlyZWRDZWxsXCIgW2NsYXNzXT1cInF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbFJlcXVpcmVkTWFya1wiPnt7IGNlbGwucmVxdWlyZWRNYXJrIH19PC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC90ZD5cbjwvbmctdGVtcGxhdGU+Il19