mmhglobal-dynamicform 2.0.0-beta.16 → 2.0.0-beta.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/esm2020/lib/zquerybuilder/zquerybuilder.component.mjs +9 -3
- package/fesm2015/mmhglobal-dynamicform.mjs +8 -2
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +8 -2
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/zquerybuilder/zquerybuilder.component.d.ts +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -70,6 +70,9 @@ export class ZquerybuilderComponent {
|
|
|
70
70
|
if (this.data['AllowRuleset'] === false) {
|
|
71
71
|
this.allowRuleset = this.data['AllowRuleset'];
|
|
72
72
|
}
|
|
73
|
+
if (this.data['Filters']) {
|
|
74
|
+
this.filters = ZComponentHelper.getGroupEvalValue.call(this, this.data['Filters'], this.group);
|
|
75
|
+
}
|
|
73
76
|
this.fields = this.fieldService.getFormFieldCode(this.data.Value, "FormField", null, null);
|
|
74
77
|
try {
|
|
75
78
|
this.fields.subscribe(data => {
|
|
@@ -87,6 +90,9 @@ export class ZquerybuilderComponent {
|
|
|
87
90
|
}
|
|
88
91
|
else {
|
|
89
92
|
const selectOptions = field['SelectOptions'];
|
|
93
|
+
if (this.filters) {
|
|
94
|
+
selectOptions['Filters'] = this.filters;
|
|
95
|
+
}
|
|
90
96
|
const param = Object.assign({}, DefaultPageSettingParams);
|
|
91
97
|
param.pageSize = selectOptions['PageSize'];
|
|
92
98
|
param.columns = selectOptions['Columns'];
|
|
@@ -169,10 +175,10 @@ export class ZquerybuilderComponent {
|
|
|
169
175
|
}
|
|
170
176
|
}
|
|
171
177
|
ZquerybuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZquerybuilderComponent, deps: [{ token: i1.FieldService }, { token: i1.ResourceApiService }, { token: i1.WebApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
172
|
-
ZquerybuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ZquerybuilderComponent, selector: "app-zquerybuilder", inputs: { classNames: "classNames", data: "data", group: "group", form: "form" }, viewQueries: [{ propertyName: "queryBuilder", first: true, predicate: QueryBuilderComponent, descendants: true }], ngImport: i0, template: "<ion-item *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <ion-label [attr.for]=\"data.Value\"\r\n *ngIf=\"data.ShowLabel === undefined || data.ShowLabel\"\r\n [position]=\"data.LabelPosition ? data.LabelPosition : 'stacked'\">\r\n {{data.Label}}\r\n <ion-text *ngIf=\"(!!componentProperties.isRequiredField ? group[componentProperties.isRequiredField] : componentProperties.isRequired)\"\r\n color=\"danger\">*</ion-text>\r\n </ion-label>\r\n <div class=\"qbcontainer\">\r\n <query-builder [(ngModel)]='queryCtrl'\r\n [(config)]='currentConfig'\r\n [allowRuleset]='allowRuleset'\r\n [allowCollapse]='allowCollapse'\r\n [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <!--AND OR Swtich-->\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"ruleset.condition\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"conditionList\"\r\n [disabled]=\"isDisabled\"\r\n style=\"text-transform: uppercase;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Rule RuleSet Remove Rule Set Button-->\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <!--Add Rule Button-->\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRule()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add</span>\r\n </ion-button>\r\n <!--Add RuleSet Button-->\r\n <ion-button *ngIf=\"addRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add Rule Set</span>\r\n </ion-button>\r\n <!--Remove RuleSet Button-->\r\n <ion-button *ngIf=\"removeRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'times'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule Set</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Remove Rule Button-->\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRule(rule)\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'minus'\"\r\n style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Name dropdown-->\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields=getFields\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.field\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getFields(rule.entity)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Operator dropdown-->\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\" style=\"padding:10px\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.operator\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getOperators(operators, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Text Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'string'; let onChange=onChange\">\r\n <kendo-textbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [clearButton]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n class=\"customTextbox\">\r\n </kendo-textbox>\r\n </ng-container>\r\n <!--TextArea Field-->\r\n <ng-container *queryInput=\"let rule; type: 'textarea'; let onChange=onChange\">\r\n <kendo-textarea [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [rows]=\"5\"\r\n [cols]=\"40\"\r\n resizable=\"none\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-textarea>\r\n </ng-container>\r\n <!--Number Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'number'; let onChange=onChange\">\r\n <kendo-numerictextbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [value]=\"value\"\r\n [decimals]=\"0\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-numerictextbox>\r\n </ng-container>\r\n <!--Date Field-->\r\n <ng-container *queryInput=\"let rule; type: 'date'; let onChange=onChange\">\r\n <kendo-datepicker [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n calendarType=\"classic\"\r\n [value]=\"value\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-datepicker>\r\n </ng-container>\r\n <!--Category Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'category'; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--DropDown MultiSelect Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'multiselect'; let onChange=onChange\">\r\n <kendo-multiselect [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [autoClose]=\"false\"\r\n style=\"width:30%\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-multiselect>\r\n </ng-container>\r\n <!--Boolean Field-->\r\n <ng-container *queryInput=\"let rule; type: 'boolean'; let onChange=onChange\">\r\n <input type=\"checkbox\"\r\n [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n class=\"customCheckBox\"\r\n [disabled]=\"isDisabled\"\r\n kendoCheckBox />\r\n </ng-container>\r\n </query-builder>\r\n <br>\r\n <div *ngIf=\"data.ShowQueryResult\">\r\n <div>\r\n <label>Query Result</label>\r\n </div>\r\n <textarea class=\"output\"\r\n resizable=\"none\"\r\n [rows]=\"10\"\r\n [cols]=\"40\">{{queryCtrl | json}}</textarea>\r\n <br>\r\n </div>\r\n <div style=\"width:100%\" slot=\"end\">\r\n <ion-button *ngIf=\"!isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(true, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Apply</span>\r\n </ion-button>\r\n <ion-button *ngIf=\"isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(false, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Undo Apply</span>\r\n </ion-button>\r\n </div>\r\n </div>\r\n</ion-item>\r\n", styles: [".qbcontainer{border-radius:5px;border:1px solid rgba(0,0,0,.08);padding:10px;margin:10px 0;width:100%}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}:host ::ng-deep query-builder .k-dropdown .k-dropdown-wrap,:host ::ng-deep query-builder .k-dropdowntree .k-dropdown-wrap{background-color:#fff}:host ::ng-deep query-builder .customTextbox{width:calc(100% - 440px);min-width:230px}:host ::ng-deep query-builder .customCheckBox{width:27px;height:27px}:host ::ng-deep query-builder .buttonadd{background-color:#479400;color:#fff;border-color:#479400}:host ::ng-deep query-builder .buttonremove{background-color:#f04141;color:#fff;border-color:#f04141;margin-top:0}.buttonapply{background-color:#5596e6;color:#fff;border-color:#5596e6}\n"], components: [{ type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { type: i3.QueryBuilderComponent, selector: "query-builder", inputs: ["data", "allowRuleset", "allowCollapse", "emptyMessage", "config", "persistValueOnFieldChange", "value", "disabled", "classNames", "operatorMap", "parentValue", "parentArrowIconTemplate", "parentInputTemplates", "parentOperatorTemplate", "parentFieldTemplate", "parentEntityTemplate", "parentSwitchGroupTemplate", "parentButtonGroupTemplate", "parentRemoveButtonTemplate", "parentEmptyWarningTemplate", "parentChangeCallback", "parentTouchedCallback"] }, { type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["listHeight", "disabled", "readonly", "filterable", "ignoreCase", "delay", "tabindex", "id", "data", "value", "popupSettings", "itemDisabled", "virtual", "valuePrimitive", "tabIndex", "size", "rounded", "fillMode", "iconClass", "loading", "textField", "valueField", "defaultItem"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i6.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "size", "rounded", "fillMode", "tabIndex", "successIcon", "errorIcon", "clearButtonIcon", "placeholder", "maxlength"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { type: i6.TextAreaComponent, selector: "kendo-textarea", inputs: ["focusableId", "flow", "tabindex", "resizable", "tabIndex", "size", "rounded", "fillMode", "rows", "cols", "maxlength"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoTextArea"] }, { type: i6.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "decimals", "step", "spinners", "rangeValidation", "tabindex", "changeValueOnScroll", "selectOnFocus", "value", "format", "tabIndex", "size", "rounded", "fillMode", "max", "min", "placeholder", "maxlength"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }, { type: i7.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "navigation", "min", "max", "incompleteDateValidation", "focusedDate", "format", "twoDigitYearMax", "placeholder", "tabindex", "title", "rangeValidation", "disabledDatesValidation", "weekNumber", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "popupSettings", "value", "tabIndex", "disabledDates", "size", "rounded", "fillMode", "formatPlaceholder"], outputs: ["valueChange", "focus", "blur", "open", "close"], exportAs: ["kendo-datepicker"] }, { type: i4.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["focusableId", "autoClose", "tabindex", "disabled", "readonly", "filterable", "listHeight", "clearButton", "tagMapper", "allowCustom", "valueNormalizer", "data", "value", "tabIndex", "size", "rounded", "fillMode", "placeholder", "itemDisabled", "checkboxes", "virtual", "popupSettings", "valuePrimitive", "loading", "valueField", "textField"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "removeTag"], exportAs: ["kendoMultiSelect"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.QuerySwitchGroupDirective, selector: "[querySwitchGroup]" }, { type: i3.QueryButtonGroupDirective, selector: "[queryButtonGroup]" }, { type: i3.QueryRemoveButtonDirective, selector: "[queryRemoveButton]" }, { type: i3.QueryFieldDirective, selector: "[queryField]" }, { type: i3.QueryOperatorDirective, selector: "[queryOperator]" }, { type: i3.QueryInputDirective, selector: "[queryInput]", inputs: ["queryInputType"] }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i6.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }], pipes: { "json": i8.JsonPipe } });
|
|
178
|
+
ZquerybuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ZquerybuilderComponent, selector: "app-zquerybuilder", inputs: { classNames: "classNames", data: "data", group: "group", form: "form" }, viewQueries: [{ propertyName: "queryBuilder", first: true, predicate: QueryBuilderComponent, descendants: true }], ngImport: i0, template: "<ion-item *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <ion-label [attr.for]=\"data.Value\"\r\n *ngIf=\"data.ShowLabel === undefined || data.ShowLabel\"\r\n [position]=\"data.LabelPosition ? data.LabelPosition : 'stacked'\">\r\n {{data.Label}}\r\n <ion-text *ngIf=\"(!!componentProperties.isRequiredField ? group[componentProperties.isRequiredField] : componentProperties.isRequired)\"\r\n color=\"danger\">*</ion-text>\r\n </ion-label>\r\n <div class=\"qbcontainer\">\r\n <query-builder [(ngModel)]='queryCtrl'\r\n [(config)]='currentConfig'\r\n [allowRuleset]='allowRuleset'\r\n [allowCollapse]='allowCollapse'\r\n [filters]='filters'\r\n [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <!--AND OR Swtich-->\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"ruleset.condition\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"conditionList\"\r\n [disabled]=\"isDisabled\"\r\n style=\"text-transform: uppercase;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Rule RuleSet Remove Rule Set Button-->\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <!--Add Rule Button-->\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRule()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add</span>\r\n </ion-button>\r\n <!--Add RuleSet Button-->\r\n <ion-button *ngIf=\"addRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add Rule Set</span>\r\n </ion-button>\r\n <!--Remove RuleSet Button-->\r\n <ion-button *ngIf=\"removeRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'times'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule Set</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Remove Rule Button-->\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRule(rule)\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'minus'\"\r\n style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Name dropdown-->\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields=getFields\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.field\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getFields(rule.entity)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Operator dropdown-->\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\" style=\"padding:10px\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.operator\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getOperators(operators, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Text Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'string'; let onChange=onChange\">\r\n <kendo-textbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [clearButton]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n class=\"customTextbox\">\r\n </kendo-textbox>\r\n </ng-container>\r\n <!--TextArea Field-->\r\n <ng-container *queryInput=\"let rule; type: 'textarea'; let onChange=onChange\">\r\n <kendo-textarea [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [rows]=\"5\"\r\n [cols]=\"40\"\r\n resizable=\"none\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-textarea>\r\n </ng-container>\r\n <!--Number Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'number'; let onChange=onChange\">\r\n <kendo-numerictextbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [value]=\"value\"\r\n [decimals]=\"0\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-numerictextbox>\r\n </ng-container>\r\n <!--Date Field-->\r\n <ng-container *queryInput=\"let rule; type: 'date'; let onChange=onChange\">\r\n <kendo-datepicker [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n calendarType=\"classic\"\r\n [value]=\"value\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-datepicker>\r\n </ng-container>\r\n <!--Category Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'category'; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--DropDown MultiSelect Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'multiselect'; let onChange=onChange\">\r\n <kendo-multiselect [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [autoClose]=\"false\"\r\n style=\"width:30%\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-multiselect>\r\n </ng-container>\r\n <!--Boolean Field-->\r\n <ng-container *queryInput=\"let rule; type: 'boolean'; let onChange=onChange\">\r\n <input type=\"checkbox\"\r\n [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n class=\"customCheckBox\"\r\n [disabled]=\"isDisabled\"\r\n kendoCheckBox />\r\n </ng-container>\r\n </query-builder>\r\n <br>\r\n <div *ngIf=\"data.ShowQueryResult\">\r\n <div>\r\n <label>Query Result</label>\r\n </div>\r\n <textarea class=\"output\"\r\n resizable=\"none\"\r\n [rows]=\"10\"\r\n [cols]=\"40\">{{queryCtrl | json}}</textarea>\r\n <br>\r\n </div>\r\n <div style=\"width:100%\" slot=\"end\">\r\n <ion-button *ngIf=\"!isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(true, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Apply</span>\r\n </ion-button>\r\n <ion-button *ngIf=\"isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(false, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Undo Apply</span>\r\n </ion-button>\r\n </div>\r\n </div>\r\n</ion-item>\r\n", styles: [".qbcontainer{border-radius:5px;border:1px solid rgba(0,0,0,.08);padding:10px;margin:10px 0;width:100%}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}:host ::ng-deep query-builder .k-dropdown .k-dropdown-wrap,:host ::ng-deep query-builder .k-dropdowntree .k-dropdown-wrap{background-color:#fff}:host ::ng-deep query-builder .customTextbox{width:calc(100% - 440px);min-width:230px}:host ::ng-deep query-builder .customCheckBox{width:27px;height:27px}:host ::ng-deep query-builder .buttonadd{background-color:#479400;color:#fff;border-color:#479400}:host ::ng-deep query-builder .buttonremove{background-color:#f04141;color:#fff;border-color:#f04141;margin-top:0}.buttonapply{background-color:#5596e6;color:#fff;border-color:#5596e6}\n"], components: [{ type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { type: i3.QueryBuilderComponent, selector: "query-builder", inputs: ["data", "allowRuleset", "allowCollapse", "emptyMessage", "config", "persistValueOnFieldChange", "value", "disabled", "classNames", "operatorMap", "parentValue", "parentArrowIconTemplate", "parentInputTemplates", "parentOperatorTemplate", "parentFieldTemplate", "parentEntityTemplate", "parentSwitchGroupTemplate", "parentButtonGroupTemplate", "parentRemoveButtonTemplate", "parentEmptyWarningTemplate", "parentChangeCallback", "parentTouchedCallback"] }, { type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["listHeight", "disabled", "readonly", "filterable", "ignoreCase", "delay", "tabindex", "id", "data", "value", "popupSettings", "itemDisabled", "virtual", "valuePrimitive", "tabIndex", "size", "rounded", "fillMode", "iconClass", "loading", "textField", "valueField", "defaultItem"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i6.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "size", "rounded", "fillMode", "tabIndex", "successIcon", "errorIcon", "clearButtonIcon", "placeholder", "maxlength"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { type: i6.TextAreaComponent, selector: "kendo-textarea", inputs: ["focusableId", "flow", "tabindex", "resizable", "tabIndex", "size", "rounded", "fillMode", "rows", "cols", "maxlength"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoTextArea"] }, { type: i6.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "decimals", "step", "spinners", "rangeValidation", "tabindex", "changeValueOnScroll", "selectOnFocus", "value", "format", "tabIndex", "size", "rounded", "fillMode", "max", "min", "placeholder", "maxlength"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }, { type: i7.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "navigation", "min", "max", "incompleteDateValidation", "focusedDate", "format", "twoDigitYearMax", "placeholder", "tabindex", "title", "rangeValidation", "disabledDatesValidation", "weekNumber", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "popupSettings", "value", "tabIndex", "disabledDates", "size", "rounded", "fillMode", "formatPlaceholder"], outputs: ["valueChange", "focus", "blur", "open", "close"], exportAs: ["kendo-datepicker"] }, { type: i4.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["focusableId", "autoClose", "tabindex", "disabled", "readonly", "filterable", "listHeight", "clearButton", "tagMapper", "allowCustom", "valueNormalizer", "data", "value", "tabIndex", "size", "rounded", "fillMode", "placeholder", "itemDisabled", "checkboxes", "virtual", "popupSettings", "valuePrimitive", "loading", "valueField", "textField"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "removeTag"], exportAs: ["kendoMultiSelect"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.QuerySwitchGroupDirective, selector: "[querySwitchGroup]" }, { type: i3.QueryButtonGroupDirective, selector: "[queryButtonGroup]" }, { type: i3.QueryRemoveButtonDirective, selector: "[queryRemoveButton]" }, { type: i3.QueryFieldDirective, selector: "[queryField]" }, { type: i3.QueryOperatorDirective, selector: "[queryOperator]" }, { type: i3.QueryInputDirective, selector: "[queryInput]", inputs: ["queryInputType"] }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i6.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }], pipes: { "json": i8.JsonPipe } });
|
|
173
179
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZquerybuilderComponent, decorators: [{
|
|
174
180
|
type: Component,
|
|
175
|
-
args: [{ selector: 'app-zquerybuilder', template: "<ion-item *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <ion-label [attr.for]=\"data.Value\"\r\n *ngIf=\"data.ShowLabel === undefined || data.ShowLabel\"\r\n [position]=\"data.LabelPosition ? data.LabelPosition : 'stacked'\">\r\n {{data.Label}}\r\n <ion-text *ngIf=\"(!!componentProperties.isRequiredField ? group[componentProperties.isRequiredField] : componentProperties.isRequired)\"\r\n color=\"danger\">*</ion-text>\r\n </ion-label>\r\n <div class=\"qbcontainer\">\r\n <query-builder [(ngModel)]='queryCtrl'\r\n [(config)]='currentConfig'\r\n [allowRuleset]='allowRuleset'\r\n [allowCollapse]='allowCollapse'\r\n [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <!--AND OR Swtich-->\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"ruleset.condition\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"conditionList\"\r\n [disabled]=\"isDisabled\"\r\n style=\"text-transform: uppercase;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Rule RuleSet Remove Rule Set Button-->\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <!--Add Rule Button-->\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRule()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add</span>\r\n </ion-button>\r\n <!--Add RuleSet Button-->\r\n <ion-button *ngIf=\"addRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add Rule Set</span>\r\n </ion-button>\r\n <!--Remove RuleSet Button-->\r\n <ion-button *ngIf=\"removeRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'times'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule Set</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Remove Rule Button-->\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRule(rule)\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'minus'\"\r\n style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Name dropdown-->\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields=getFields\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.field\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getFields(rule.entity)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Operator dropdown-->\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\" style=\"padding:10px\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.operator\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getOperators(operators, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Text Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'string'; let onChange=onChange\">\r\n <kendo-textbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [clearButton]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n class=\"customTextbox\">\r\n </kendo-textbox>\r\n </ng-container>\r\n <!--TextArea Field-->\r\n <ng-container *queryInput=\"let rule; type: 'textarea'; let onChange=onChange\">\r\n <kendo-textarea [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [rows]=\"5\"\r\n [cols]=\"40\"\r\n resizable=\"none\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-textarea>\r\n </ng-container>\r\n <!--Number Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'number'; let onChange=onChange\">\r\n <kendo-numerictextbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [value]=\"value\"\r\n [decimals]=\"0\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-numerictextbox>\r\n </ng-container>\r\n <!--Date Field-->\r\n <ng-container *queryInput=\"let rule; type: 'date'; let onChange=onChange\">\r\n <kendo-datepicker [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n calendarType=\"classic\"\r\n [value]=\"value\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-datepicker>\r\n </ng-container>\r\n <!--Category Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'category'; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--DropDown MultiSelect Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'multiselect'; let onChange=onChange\">\r\n <kendo-multiselect [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [autoClose]=\"false\"\r\n style=\"width:30%\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-multiselect>\r\n </ng-container>\r\n <!--Boolean Field-->\r\n <ng-container *queryInput=\"let rule; type: 'boolean'; let onChange=onChange\">\r\n <input type=\"checkbox\"\r\n [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n class=\"customCheckBox\"\r\n [disabled]=\"isDisabled\"\r\n kendoCheckBox />\r\n </ng-container>\r\n </query-builder>\r\n <br>\r\n <div *ngIf=\"data.ShowQueryResult\">\r\n <div>\r\n <label>Query Result</label>\r\n </div>\r\n <textarea class=\"output\"\r\n resizable=\"none\"\r\n [rows]=\"10\"\r\n [cols]=\"40\">{{queryCtrl | json}}</textarea>\r\n <br>\r\n </div>\r\n <div style=\"width:100%\" slot=\"end\">\r\n <ion-button *ngIf=\"!isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(true, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Apply</span>\r\n </ion-button>\r\n <ion-button *ngIf=\"isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(false, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Undo Apply</span>\r\n </ion-button>\r\n </div>\r\n </div>\r\n</ion-item>\r\n", styles: [".qbcontainer{border-radius:5px;border:1px solid rgba(0,0,0,.08);padding:10px;margin:10px 0;width:100%}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}:host ::ng-deep query-builder .k-dropdown .k-dropdown-wrap,:host ::ng-deep query-builder .k-dropdowntree .k-dropdown-wrap{background-color:#fff}:host ::ng-deep query-builder .customTextbox{width:calc(100% - 440px);min-width:230px}:host ::ng-deep query-builder .customCheckBox{width:27px;height:27px}:host ::ng-deep query-builder .buttonadd{background-color:#479400;color:#fff;border-color:#479400}:host ::ng-deep query-builder .buttonremove{background-color:#f04141;color:#fff;border-color:#f04141;margin-top:0}.buttonapply{background-color:#5596e6;color:#fff;border-color:#5596e6}\n"] }]
|
|
181
|
+
args: [{ selector: 'app-zquerybuilder', template: "<ion-item *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <ion-label [attr.for]=\"data.Value\"\r\n *ngIf=\"data.ShowLabel === undefined || data.ShowLabel\"\r\n [position]=\"data.LabelPosition ? data.LabelPosition : 'stacked'\">\r\n {{data.Label}}\r\n <ion-text *ngIf=\"(!!componentProperties.isRequiredField ? group[componentProperties.isRequiredField] : componentProperties.isRequired)\"\r\n color=\"danger\">*</ion-text>\r\n </ion-label>\r\n <div class=\"qbcontainer\">\r\n <query-builder [(ngModel)]='queryCtrl'\r\n [(config)]='currentConfig'\r\n [allowRuleset]='allowRuleset'\r\n [allowCollapse]='allowCollapse'\r\n [filters]='filters'\r\n [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <!--AND OR Swtich-->\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"ruleset.condition\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"conditionList\"\r\n [disabled]=\"isDisabled\"\r\n style=\"text-transform: uppercase;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Rule RuleSet Remove Rule Set Button-->\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <!--Add Rule Button-->\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRule()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add</span>\r\n </ion-button>\r\n <!--Add RuleSet Button-->\r\n <ion-button *ngIf=\"addRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add Rule Set</span>\r\n </ion-button>\r\n <!--Remove RuleSet Button-->\r\n <ion-button *ngIf=\"removeRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'times'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule Set</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Remove Rule Button-->\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRule(rule)\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'minus'\"\r\n style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Name dropdown-->\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields=getFields\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.field\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getFields(rule.entity)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Operator dropdown-->\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\" style=\"padding:10px\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.operator\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getOperators(operators, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Text Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'string'; let onChange=onChange\">\r\n <kendo-textbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [clearButton]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n class=\"customTextbox\">\r\n </kendo-textbox>\r\n </ng-container>\r\n <!--TextArea Field-->\r\n <ng-container *queryInput=\"let rule; type: 'textarea'; let onChange=onChange\">\r\n <kendo-textarea [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [rows]=\"5\"\r\n [cols]=\"40\"\r\n resizable=\"none\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-textarea>\r\n </ng-container>\r\n <!--Number Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'number'; let onChange=onChange\">\r\n <kendo-numerictextbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [value]=\"value\"\r\n [decimals]=\"0\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-numerictextbox>\r\n </ng-container>\r\n <!--Date Field-->\r\n <ng-container *queryInput=\"let rule; type: 'date'; let onChange=onChange\">\r\n <kendo-datepicker [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n calendarType=\"classic\"\r\n [value]=\"value\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-datepicker>\r\n </ng-container>\r\n <!--Category Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'category'; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--DropDown MultiSelect Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'multiselect'; let onChange=onChange\">\r\n <kendo-multiselect [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [autoClose]=\"false\"\r\n style=\"width:30%\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-multiselect>\r\n </ng-container>\r\n <!--Boolean Field-->\r\n <ng-container *queryInput=\"let rule; type: 'boolean'; let onChange=onChange\">\r\n <input type=\"checkbox\"\r\n [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n class=\"customCheckBox\"\r\n [disabled]=\"isDisabled\"\r\n kendoCheckBox />\r\n </ng-container>\r\n </query-builder>\r\n <br>\r\n <div *ngIf=\"data.ShowQueryResult\">\r\n <div>\r\n <label>Query Result</label>\r\n </div>\r\n <textarea class=\"output\"\r\n resizable=\"none\"\r\n [rows]=\"10\"\r\n [cols]=\"40\">{{queryCtrl | json}}</textarea>\r\n <br>\r\n </div>\r\n <div style=\"width:100%\" slot=\"end\">\r\n <ion-button *ngIf=\"!isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(true, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Apply</span>\r\n </ion-button>\r\n <ion-button *ngIf=\"isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(false, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Undo Apply</span>\r\n </ion-button>\r\n </div>\r\n </div>\r\n</ion-item>\r\n", styles: [".qbcontainer{border-radius:5px;border:1px solid rgba(0,0,0,.08);padding:10px;margin:10px 0;width:100%}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}:host ::ng-deep query-builder .k-dropdown .k-dropdown-wrap,:host ::ng-deep query-builder .k-dropdowntree .k-dropdown-wrap{background-color:#fff}:host ::ng-deep query-builder .customTextbox{width:calc(100% - 440px);min-width:230px}:host ::ng-deep query-builder .customCheckBox{width:27px;height:27px}:host ::ng-deep query-builder .buttonadd{background-color:#479400;color:#fff;border-color:#479400}:host ::ng-deep query-builder .buttonremove{background-color:#f04141;color:#fff;border-color:#f04141;margin-top:0}.buttonapply{background-color:#5596e6;color:#fff;border-color:#5596e6}\n"] }]
|
|
176
182
|
}], ctorParameters: function () { return [{ type: i1.FieldService }, { type: i1.ResourceApiService }, { type: i1.WebApiService }]; }, propDecorators: { queryBuilder: [{
|
|
177
183
|
type: ViewChild,
|
|
178
184
|
args: [QueryBuilderComponent, { static: false }]
|
|
@@ -201,4 +207,4 @@ export function toQueryRule(queryBuilderModel) {
|
|
|
201
207
|
}
|
|
202
208
|
return rule;
|
|
203
209
|
}
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienF1ZXJ5YnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96cXVlcnlidWlsZGVyL3pxdWVyeWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenF1ZXJ5YnVpbGRlci96cXVlcnlidWlsZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEUsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsR0FBRyxFQUFrQixNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBOEMscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRywyQ0FBMkM7QUFDM0MsT0FBTyxFQUNTLGdCQUFnQixFQUFFLG9CQUFvQixFQUNoQyx3QkFBd0IsRUFDN0MsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7QUFTekIsTUFBTSxPQUFPLHNCQUFzQjtJQXdCakMsWUFDVSxZQUEwQixFQUMxQixrQkFBc0MsRUFDdEMsYUFBNEI7UUFGNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXBCdEMsMkJBQTJCO1FBQzNCLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFTix3QkFBbUIsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFFakQsa0JBQWEsR0FBdUI7WUFDekMsTUFBTSxFQUFFLEVBQUU7WUFDVixrQkFBa0IsRUFBRSxJQUFJO1NBQ3pCLENBQUM7UUFDSyxpQkFBWSxHQUFZLElB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QUFNO1FBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLFlBQVksS0FBSztZQUNuRCxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEtBQUs7WUFDakcsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3ZHO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBRdWVyeUJ1aWxkZXJDb25maWcsIFF1ZXJ5QnVpbGRlckNsYXNzTmFtZXMsIFF1ZXJ5QnVpbGRlckNvbXBvbmVudCB9IGZyb20gJ2FuZ3VsYXIyLXF1ZXJ5LWJ1aWxkZXInO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIEZpZWxkU2VydmljZSwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudFByb3BlcnRpZXMsIFpGaWVsZCwgWkdyb3VwLFxyXG4gIEZvbnRBd2VTb21lU2VydmljZSwgRGVmYXVsdFBhZ2VTZXR0aW5nUGFyYW1zLCBXZWJBcGlTZXJ2aWNlLCBSZXNvdXJjZUFwaVNlcnZpY2VcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXpxdWVyeWJ1aWxkZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi96cXVlcnlidWlsZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi96cXVlcnlidWlsZGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBacXVlcnlidWlsZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKFF1ZXJ5QnVpbGRlckNvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pIHF1ZXJ5QnVpbGRlcjogUXVlcnlCdWlsZGVyQ29tcG9uZW50O1xyXG4gIEBJbnB1dCgpIGNsYXNzTmFtZXM6IFF1ZXJ5QnVpbGRlckNsYXNzTmFtZXM7XHJcbiAgQElucHV0KCkgZGF0YTogWkZpZWxkO1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBaR3JvdXA7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICAvL3FiSXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBxYkl0ZW1zID0ge307XHJcblxyXG4gIHB1YmxpYyBjb21wb25lbnRQcm9wZXJ0aWVzID0gbmV3IFpDb21wb25lbnRQcm9wZXJ0aWVzKCk7XHJcbiAgcHVibGljIHF1ZXJ5Q3RybDogYW55O1xyXG4gIHB1YmxpYyBjdXJyZW50Q29uZmlnOiBRdWVyeUJ1aWxkZXJDb25maWcgPSB7XHJcbiAgICBmaWVsZHM6IHt9LFxyXG4gICAgYWxsb3dFbXB0eVJ1bGVzZXRzOiB0cnVlXHJcbiAgfTtcclxuICBwdWJsaWMgYWxsb3dSdWxlc2V0OiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgYWxsb3dDb2xsYXBzZTogYm9vbGVhbj0gZmFsc2U7XHJcbiAgcHVibGljIHBlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTsgXHJcbiAgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcnVsZTogYW55O1xyXG4gIHB1YmxpYyB2YWx1ZTogYW55O1xyXG4gIHByaXZhdGUgZmllbGRzOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmaWVsZFNlcnZpY2U6IEZpZWxkU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzb3VyY2VBcGlTZXJ2aWNlOiBSZXNvdXJjZUFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdlYkFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2VcclxuICApIHtcclxuICB9XHJcbiAgICBcclxuICBuZ09uSW5pdCgpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0Q29tcG9uZW50UHJvcGVydGllcyh0aGlzKTtcclxuICAgIFpDb21wb25lbnRIZWxwZXIucmVnaXN0ZXJDb21wb25lbnQodGhpcyk7XHJcbiAgICAgXHJcbiAgICBpZiAodGhpcy5kYXRhWydBbGxvd0NvbGxhcHNlJ10gPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5hbGxvd0NvbGxhcHNlID0gdGhpcy5kYXRhWydBbGxvd0NvbGxhcHNlJ107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YVsnQWxsb3dSdWxlc2V0J10gPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuYWxsb3dSdWxlc2V0ID0gdGhpcy5kYXRhWydBbGxvd1J1bGVzZXQnXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpZWxkcyA9IHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUodGhpcy5kYXRhLlZhbHVlLCBcIkZvcm1GaWVsZFwiLCBudWxsLCBudWxsKTsgXHJcbiAgICAgXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmZpZWxkcy5zdWJzY3JpYmUoZGF0YSA9PiB7IFxyXG4gICAgICAgIGRhdGEuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gSGFuZGxlIE9wdGlvbnNcclxuICAgICAgICAgIGxldCBvcHRpb25MaXN0ID0gW107XHJcblxyXG4gICAgICAgICAgaWYgKGZpZWxkLlR5cGUgPT0gJ2NhdGVnb3J5JyB8fCBmaWVsZC5UeXBlID09ICdtdWx0aXNlbGVjdCcpIHtcclxuICAgICAgICAgICAgaWYgKGZpZWxkWydWYWx1ZU9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICAgIGZpZWxkWydWYWx1ZU9wdGlvbnMnXS5mb3JFYWNoKCh2YWx1ZU9wdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBuYW1lOiB2YWx1ZU9wdGlvbi5OYW1lLFxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVPcHRpb24uVmFsdWVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBmaWVsZFsnU2VsZWN0T3B0aW9ucyddO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBwYXJhbSA9IE9iamVjdC5hc3NpZ24oe30sIERlZmF1bHRQYWdlU2V0dGluZ1BhcmFtcyk7XHJcbiAgICAgICAgICAgICAgcGFyYW0ucGFnZVNpemUgPSBzZWxlY3RPcHRpb25zWydQYWdlU2l6ZSddO1xyXG4gICAgICAgICAgICAgIHBhcmFtLmNvbHVtbnMgPSBzZWxlY3RPcHRpb25zWydDb2x1bW5zJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uZmlsdGVycyArPSBzZWxlY3RPcHRpb25zWydGaWx0ZXJzJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uc29ydENvbHVtbk5hbWUgPSBzZWxlY3RPcHRpb25zWydTb3J0Q29sdW1uTmFtZSddO1xyXG4gICAgICAgICAgICAgIHBhcmFtLnNvcnRPcmRlciA9IHNlbGVjdE9wdGlvbnNbJ1NvcnRPcmRlciddO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLndlYkFwaVNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5odHRwUG9zdCQodGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0UGFnZVVybChzZWxlY3RPcHRpb25zWydSZXNvdXJjZVVSTCddKSwgcGFyYW0pXHJcbiAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgbWFwKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcC5kYXRhU2V0LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbVtzZWxlY3RPcHRpb25zWydOYW1lJ11dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVtzZWxlY3RPcHRpb25zWydWYWx1ZSddXVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xYkl0ZW1zW2ZpZWxkLlZhbHVlXVsnb3B0aW9ucyddID0gb3B0aW9uTGlzdFxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIERlZmF1bHQgcnVsZSB0byBkaXNwbGF5XHJcbiAgICAgICAgICB0aGlzLnFiSXRlbXNbZmllbGQuVmFsdWVdID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBmaWVsZC5OYW1lLFxyXG4gICAgICAgICAgICB2YWx1ZTogZmllbGQuVmFsdWUsXHJcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLlR5cGUsXHJcbiAgICAgICAgICAgIG9wZXJhdG9yTGlzdDogZmllbGRbJ09wZXJhdG9ycyddLFxyXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25MaXN0LFxyXG4gICAgICAgICAgICBudWxsYWJsZTogZmllbGRbJ0lzTnVsbGFibGUnXSxcclxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBmaWVsZFsnRGVmYXVsdFZhbHVlJ10gPyBmaWVsZFsnRGVmYXVsdFZhbHVlJ10gOiBudWxsXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICBcclxuICAgICAgICB0aGlzLmN1cnJlbnRDb25maWcgPSB7XHJcbiAgICAgICAgICBmaWVsZHM6IHRoaXMucWJJdGVtcyxcclxuICAgICAgICAgIGFsbG93RW1wdHlSdWxlc2V0czogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgIFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIGFwcGVuZCBkZWZhdWx0IHF1ZXJ5IGlmIGFueS5cclxuICAgICAgaWYgKHRoaXMuZGF0YVsnRGVmYXVsdFF1ZXJ5J10pIHtcclxuICAgICAgICBsZXQgZGVmYXVsdFF1ZXJ5VmFsdWVTdHJpbmcgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgICB0aGlzLFxyXG4gICAgICAgICAgdGhpcy5kYXRhWydEZWZhdWx0UXVlcnknXSxcclxuICAgICAgICAgIHRoaXMuZ3JvdXBcclxuICAgICAgICApOyBcclxuXHJcbiAgICAgICAgaWYgKGRlZmF1bHRRdWVyeVZhbHVlU3RyaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFF1ZXJ5VmFsdWUoZGVmYXVsdFF1ZXJ5VmFsdWVTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcImVycm9yOiBcIiwgZXJyb3IpO1xyXG4gICAgfSBcclxuICB9XHJcbiAgICBcclxuICBwdWJsaWMgY29tcGxldGVSdWxlKGlzVW5kbzogYm9vbGVhbiwgcXVlcnlWYWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc1VuZG87IFxyXG4gICAgY29uc3QgcWJSZXN1bHRWYWx1ZU5hbWUgPSB0aGlzLmRhdGEuVHlwZSArICdfJyArIHRoaXMuZGF0YS5WYWx1ZTtcclxuICAgIHRoaXMuZ3JvdXBbcWJSZXN1bHRWYWx1ZU5hbWVdID0gdGhpcy5xdWVyeUJ1aWxkZXIudmFsdWUgIFxyXG5cclxuICAgIGlmIChxdWVyeVZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBbcWJSZXN1bHRWYWx1ZU5hbWVdID0gcXVlcnlWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzVW5kbykge1xyXG4gICAgICB0aGlzLmdyb3VwW3FiUmVzdWx0VmFsdWVOYW1lXSA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmdyb3VwLnpNb2RlbCkge1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUodGhpcy5kYXRhLlZhbHVlLCB0aGlzLmdyb3VwW3FiUmVzdWx0VmFsdWVOYW1lXSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YVsnT25BcHBseUNsaWNrJ10gJiYgIXF1ZXJ5VmFsdWUpIHtcclxuICAgICAgbGV0IGNhbGxGdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgdGhpcy5kYXRhWydPbkFwcGx5Q2xpY2snXSxcclxuICAgICAgICB0aGlzLmdyb3VwXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKHRoaXMpO1xyXG4gICAgICBuZXdGdW5jKHRoaXMuZ3JvdXAsIHRoaXMuZ3JvdXBbcWJSZXN1bHRWYWx1ZU5hbWVdLCB0aGlzLmZpZWxkcyk7XHJcbiAgICB9IFxyXG4gIH1cclxuICAgXHJcbiAgcHVibGljIGJvb3RzdHJhcENsYXNzTmFtZXM6IFF1ZXJ5QnVpbGRlckNsYXNzTmFtZXMgPSB7XHJcbiAgICBhcnJvd0ljb246ICdmYSBmYS1jaGV2cm9uLXJpZ2h0IHB4LTInLFxyXG4gICAgYnV0dG9uOiAnYnRuJyxcclxuICAgIGJ1dHRvbkdyb3VwOiAnYnRuLWdyb3VwJyxcclxuICAgIHJpZ2h0QWxpZ246ICdvcmRlci0xMiBtbC1hdXRvJyxcclxuICAgIHN3aXRjaFJvdzogJ2QtZmxleCBweC0yJyxcclxuICAgIHN3aXRjaEdyb3VwOiAnZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlcicsXHJcbiAgICBzd2l0Y2hSYWRpbzogJ2N1c3RvbS1jb250cm9sLWlucHV0JyxcclxuICAgIHN3aXRjaExhYmVsOiAnY3VzdG9tLWNvbnRyb2wtbGFiZWwnLFxyXG4gICAgc3dpdGNoQ29udHJvbDogJ2N1c3RvbS1jb250cm9sIGN1c3RvbS1yYWRpbyBjdXN0b20tY29udHJvbC1pbmxpbmUnLFxyXG4gICAgcm93OiAncm93IHAtMiBtLTEnLFxyXG4gICAgcnVsZTogJ2JvcmRlcicsXHJcbiAgICBydWxlU2V0OiAnYm9yZGVyJyxcclxuICAgIGludmFsaWRSdWxlU2V0OiAnYWxlcnQgYWxlcnQtZGFuZ2VyJyxcclxuICAgIGVtcHR5V2FybmluZzogJ3RleHQtZGFuZ2VyIG14LWF1dG8nLFxyXG4gICAgb3BlcmF0b3JDb250cm9sOiAnZm9ybS1jb250cm9sJyxcclxuICAgIG9wZXJhdG9yQ29udHJvbFNpemU6ICdjb2wtYXV0byBwci0wJyxcclxuICAgIGZpZWxkQ29udHJvbDogJ2Zvcm0tY29udHJvbCcsXHJcbiAgICBmaWVsZENvbnRyb2xTaXplOiAnY29sLWF1dG8gcHItMCcsXHJcbiAgICBlbnRpdHlDb250cm9sOiAnZm9ybS1jb250cm9sJyxcclxuICAgIGVudGl0eUNvbnRyb2xTaXplOiAnY29sLWF1dG8gcHItMCcsXHJcbiAgICBpbnB1dENvbnRyb2w6ICdmb3JtLWNvbnRyb2wnLFxyXG4gICAgaW5wdXRDb250cm9sU2l6ZTogJ2NvbC1hdXRvJ1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBjb25kaXRpb25MaXN0OiBBcnJheTxzdHJpbmc+ID0gW1xyXG4gICAgXCJBTkRcIixcclxuICAgIFwiT1JcIlxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBnZXRPcGVyYXRvcnMoZGVmYXVsdE9wZXJhdG9yTGlzdDogYW55LCBydWxlOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLnFiSXRlbXNbcnVsZS5maWVsZF0ub3BlcmF0b3JMaXN0ID8gdGhpcy5xYkl0ZW1zW3J1bGUuZmllbGRdLm9wZXJhdG9yTGlzdCA6IGRlZmF1bHRPcGVyYXRvckxpc3Q7XHJcbiAgfVxyXG4gICBcclxuICBwdWJsaWMgZ2V0T3B0aW9uTGlzdChvcHRpb25zTGlzdDogYW55LCBydWxlOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLnFiSXRlbXNbcnVsZS5maWVsZF0ub3B0aW9ucyA/IHRoaXMucWJJdGVtc1tydWxlLmZpZWxkXS5vcHRpb25zIDogb3B0aW9uc0xpc3Q7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0UXVlcnlWYWx1ZShxdWVyeVZhbHVlU3RyaW5nOiBzdHJpbmcpIHtcclxuICAgIGlmIChxdWVyeVZhbHVlU3RyaW5nKSB7XHJcbiAgICAgIGNvbnN0IGRlZmF1bHRRdWVyeVZhbHVlSnNvbiA9IHRvUXVlcnlSdWxlKEpTT04ucGFyc2UocXVlcnlWYWx1ZVN0cmluZykpO1xyXG4gICAgICB0aGlzLnF1ZXJ5Q3RybCA9IGRlZmF1bHRRdWVyeVZhbHVlSnNvbjtcclxuXHJcbiAgICAgIC8vIGRlZmF1bHQgbG9jayB0aGUgcXVlcnkgYnVpbGRlciBpZiB0aGVyZSBkZWZhdWx0IHF1ZXJ5XHJcbiAgICAgIHRoaXMuY29tcGxldGVSdWxlKHRydWUsIGRlZmF1bHRRdWVyeVZhbHVlSnNvbik7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5UnVsZSB7XHJcbiAgY29uZGl0aW9uOiBzdHJpbmc7XHJcbiAgcnVsZXM6IFF1ZXJ5UnVsZVtdO1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIG9wZXJhdG9yOiBzdHJpbmc7XHJcbiAgdmFsdWU6IHN0cmluZ1tdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdG9RdWVyeVJ1bGUocXVlcnlCdWlsZGVyTW9kZWw6IGFueSk6IFF1ZXJ5UnVsZSB7XHJcbiAgbGV0IHJ1bGUgPSA8UXVlcnlSdWxlPnt9O1xyXG4gIGlmIChxdWVyeUJ1aWxkZXJNb2RlbC5jb25kaXRpb24pIHtcclxuICAgIHJ1bGUuY29uZGl0aW9uID0gcXVlcnlCdWlsZGVyTW9kZWwuY29uZGl0aW9uO1xyXG4gICAgcnVsZS5ydWxlcyA9IHF1ZXJ5QnVpbGRlck1vZGVsLnJ1bGVzLm1hcChxID0+IHRvUXVlcnlSdWxlKHEpKTtcclxuICB9IGVsc2Uge1xyXG4gICAgcnVsZS5maWVsZCA9IHF1ZXJ5QnVpbGRlck1vZGVsLmZpZWxkO1xyXG4gICAgcnVsZS50eXBlID0gcXVlcnlCdWlsZGVyTW9kZWwudHlwZTtcclxuICAgIHJ1bGUub3BlcmF0b3IgPSBxdWVyeUJ1aWxkZXJNb2RlbC5vcGVyYXRvcjtcclxuICAgIHJ1bGUudmFsdWUgPSBxdWVyeUJ1aWxkZXJNb2RlbC52YWx1ZSBpbnN0YW5jZW9mIEFycmF5XHJcbiAgICAgID8gcXVlcnlCdWlsZGVyTW9kZWwudHlwZSA9PT0gJ2RhdGUnID8gbmV3IERhdGUocXVlcnlCdWlsZGVyTW9kZWwudmFsdWUpIDogcXVlcnlCdWlsZGVyTW9kZWwudmFsdWVcclxuICAgICAgOiBbcXVlcnlCdWlsZGVyTW9kZWwudHlwZSA9PT0gJ2RhdGUnID8gbmV3IERhdGUocXVlcnlCdWlsZGVyTW9kZWwudmFsdWUpIDogcXVlcnlCdWlsZGVyTW9kZWwudmFsdWVdO1xyXG4gIH1cclxuICByZXR1cm4gcnVsZTtcclxufVxyXG4iLCI8aW9uLWl0ZW0gKm5nSWY9XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIj5cclxuICA8aW9uLWxhYmVsIFthdHRyLmZvcl09XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5TaG93TGFiZWwgPT09IHVuZGVmaW5lZCB8fCBkYXRhLlNob3dMYWJlbFwiXHJcbiAgICAgICAgICAgICBbcG9zaXRpb25dPVwiZGF0YS5MYWJlbFBvc2l0aW9uID8gZGF0YS5MYWJlbFBvc2l0aW9uIDogJ3N0YWNrZWQnXCI+XHJcbiAgICB7e2RhdGEuTGFiZWx9fVxyXG4gICAgPGlvbi10ZXh0ICpuZ0lmPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlcXVpcmVkRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWRGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWQpXCJcclxuICAgICAgICAgICAgICBjb2xvcj1cImRhbmdlclwiPio8L2lvbi10ZXh0PlxyXG4gIDwvaW9uLWxhYmVsPlxyXG4gIDxkaXYgY2xhc3M9XCJxYmNvbnRhaW5lclwiPlxyXG4gICAgPHF1ZXJ5LWJ1aWxkZXIgWyhuZ01vZGVsKV09J3F1ZXJ5Q3RybCdcclxuICAgICAgICAgICAgICAgICAgIFsoY29uZmlnKV09J2N1cnJlbnRDb25maWcnXHJcbiAgICAgICAgICAgICAgICAgICBbYWxsb3dSdWxlc2V0XT0nYWxsb3dSdWxlc2V0J1xyXG4gICAgICAgICAgICAgICAgICAgW2FsbG93Q29sbGFwc2VdPSdhbGxvd0NvbGxhcHNlJ1xyXG4gICAgICAgICAgICAgICAgICAgW3BlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2VdPSdwZXJzaXN0VmFsdWVPbkZpZWxkQ2hhbmdlJz5cclxuICAgICAgPCEtLUFORCBPUiBTd3RpY2gtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlTd2l0Y2hHcm91cD1cImxldCBydWxlc2V0OyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICA8a2VuZG8tZHJvcGRvd25saXN0IFsobmdNb2RlbCldPVwicnVsZXNldC5jb25kaXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50LCBydWxlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJjb25kaXRpb25MaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcIj5cclxuICAgICAgICA8L2tlbmRvLWRyb3Bkb3dubGlzdD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS1SdWxlIFJ1bGVTZXQgUmVtb3ZlIFJ1bGUgU2V0IEJ1dHRvbi0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpxdWVyeUJ1dHRvbkdyb3VwPVwibGV0IHJ1bGVzZXQ7IGxldCBhZGRSdWxlPWFkZFJ1bGU7IGxldCBhZGRSdWxlU2V0PWFkZFJ1bGVTZXQ7IGxldCByZW1vdmVSdWxlU2V0PXJlbW92ZVJ1bGVTZXRcIj5cclxuICAgICAgICA8IS0tQWRkIFJ1bGUgQnV0dG9uLS0+XHJcbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb25nPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRSdWxlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbmFkZFwiPlxyXG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiJ3BsdXMnXCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiA1cHg7XCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpb24tdGV4dC1jYXBpdGFsaXplXCI+QWRkPC9zcGFuPlxyXG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICA8IS0tQWRkIFJ1bGVTZXQgQnV0dG9uLS0+XHJcbiAgICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCJhZGRSdWxlU2V0XCJcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwib3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJvbmc9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFJ1bGVTZXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uYWRkXCI+XHJcbiAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCIncGx1cydcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDVweDtcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlvbi10ZXh0LWNhcGl0YWxpemVcIj5BZGQgUnVsZSBTZXQ8L3NwYW4+XHJcbiAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgIDwhLS1SZW1vdmUgUnVsZVNldCBCdXR0b24tLT5cclxuICAgICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cInJlbW92ZVJ1bGVTZXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9uZz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUnVsZVNldCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25yZW1vdmVcIj5cclxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cIid0aW1lcydcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDVweDtcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlvbi10ZXh0LWNhcGl0YWxpemVcIj5SZW1vdmUgUnVsZSBTZXQ8L3NwYW4+XHJcbiAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLVJlbW92ZSBSdWxlIEJ1dHRvbi0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpxdWVyeVJlbW92ZUJ1dHRvbj1cImxldCBydWxlOyBsZXQgcmVtb3ZlUnVsZT1yZW1vdmVSdWxlXCI+XHJcbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb25nPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVSdWxlKHJ1bGUpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25yZW1vdmVcIj5cclxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cIidtaW51cydcIlxyXG4gICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiA1cHg7XCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpb24tdGV4dC1jYXBpdGFsaXplXCI+UmVtb3ZlIFJ1bGU8L3NwYW4+XHJcbiAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLU5hbWUgZHJvcGRvd24tLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlGaWVsZD1cImxldCBydWxlOyBsZXQgZmllbGRzPWZpZWxkczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlOyBsZXQgZ2V0RmllbGRzPWdldEZpZWxkc1wiPlxyXG4gICAgICAgIDxrZW5kby1kcm9wZG93bmxpc3QgWyhuZ01vZGVsKV09XCJydWxlLmZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudCwgcnVsZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZ2V0RmllbGRzKHJ1bGUuZW50aXR5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RmllbGQ9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlUHJpbWl0aXZlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OjEwcHg7XCI+XHJcbiAgICAgICAgPC9rZW5kby1kcm9wZG93bmxpc3Q+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8IS0tT3BlcmF0b3IgZHJvcGRvd24tLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlPcGVyYXRvcj1cImxldCBydWxlOyBsZXQgb3BlcmF0b3JzPW9wZXJhdG9yczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCIgc3R5bGU9XCJwYWRkaW5nOjEwcHhcIj5cclxuICAgICAgICA8a2VuZG8tZHJvcGRvd25saXN0IFsobmdNb2RlbCldPVwicnVsZS5vcGVyYXRvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIHJ1bGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImdldE9wZXJhdG9ycyhvcGVyYXRvcnMsIHJ1bGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVQcmltaXRpdmVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctcmlnaHQ6MTBweDtcIj5cclxuICAgICAgICA8L2tlbmRvLWRyb3Bkb3dubGlzdD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS1UZXh0IEZpZWxkLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IGZpZWxkPWZpZWxkOyB0eXBlOiAnc3RyaW5nJzsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgPGtlbmRvLXRleHRib3ggWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJCdXR0b25dPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tVGV4dGJveFwiPlxyXG4gICAgICAgIDwva2VuZG8tdGV4dGJveD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS1UZXh0QXJlYSBGaWVsZC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IHR5cGU6ICd0ZXh0YXJlYSc7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgIDxrZW5kby10ZXh0YXJlYSBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xzXT1cIjQwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXphYmxlPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCI+XHJcbiAgICAgICAgPC9rZW5kby10ZXh0YXJlYT5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS1OdW1iZXIgRmllbGQtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgZmllbGQ9ZmllbGQ7IHR5cGU6ICdudW1iZXInOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICA8a2VuZG8tbnVtZXJpY3RleHRib3ggWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWNpbWFsc109XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIj5cclxuICAgICAgICA8L2tlbmRvLW51bWVyaWN0ZXh0Ym94PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLURhdGUgRmllbGQtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyB0eXBlOiAnZGF0ZSc7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgIDxrZW5kby1kYXRlcGlja2VyIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJUeXBlPVwiY2xhc3NpY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiPlxyXG4gICAgICAgIDwva2VuZG8tZGF0ZXBpY2tlcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS1DYXRlZ29yeSBGaWVsZC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBvcHRpb25zPW9wdGlvbnM7IHR5cGU6ICdjYXRlZ29yeSc7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgIDxrZW5kby1kcm9wZG93bmxpc3QgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZ2V0T3B0aW9uTGlzdChvcHRpb25zLCBydWxlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RmllbGQ9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlUHJpbWl0aXZlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIj5cclxuICAgICAgICA8L2tlbmRvLWRyb3Bkb3dubGlzdD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS1Ecm9wRG93biBNdWx0aVNlbGVjdCBGaWVsZC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBvcHRpb25zPW9wdGlvbnM7IHR5cGU6ICdtdWx0aXNlbGVjdCc7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgIDxrZW5kby1tdWx0aXNlbGVjdCBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZ2V0T3B0aW9uTGlzdChvcHRpb25zLCBydWxlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVQcmltaXRpdmVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOjMwJVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCI+XHJcbiAgICAgICAgPC9rZW5kby1tdWx0aXNlbGVjdD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS1Cb29sZWFuIEZpZWxkLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgdHlwZTogJ2Jvb2xlYW4nOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tQ2hlY2tCb3hcIlxyXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgIGtlbmRvQ2hlY2tCb3ggLz5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3F1ZXJ5LWJ1aWxkZXI+XHJcbiAgICA8YnI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZGF0YS5TaG93UXVlcnlSZXN1bHRcIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8bGFiZWw+UXVlcnkgUmVzdWx0PC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cIm91dHB1dFwiXHJcbiAgICAgICAgICAgICAgICByZXNpemFibGU9XCJub25lXCJcclxuICAgICAgICAgICAgICAgIFtyb3dzXT1cIjEwXCJcclxuICAgICAgICAgICAgICAgIFtjb2xzXT1cIjQwXCI+e3txdWVyeUN0cmwgfCBqc29ufX08L3RleHRhcmVhPlxyXG4gICAgICA8YnI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDoxMDAlXCIgc2xvdD1cImVuZFwiPlxyXG4gICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cIiFpc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb25nPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29tcGxldGVSdWxlKHRydWUsIG51bGwpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25hcHBseVwiPlxyXG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cIidzYXZlJ1wiIHN0eWxlPVwicGFkZGluZy1yaWdodDogNXB4O1wiPjwvZmEtaWNvbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImlvbi10ZXh0LWNhcGl0YWxpemVcIj5BcHBseTwvc3Bhbj5cclxuICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cImlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJvbmc9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb21wbGV0ZVJ1bGUoZmFsc2UsIG51bGwpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25hcHBseVwiPlxyXG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cIidzYXZlJ1wiIHN0eWxlPVwicGFkZGluZy1yaWdodDogNXB4O1wiPjwvZmEtaWNvbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImlvbi10ZXh0LWNhcGl0YWxpemVcIj5VbmRvIEFwcGx5PC9zcGFuPlxyXG4gICAgICA8L2lvbi1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9pb24taXRlbT5cclxuIl19
|
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienF1ZXJ5YnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96cXVlcnlidWlsZGVyL3pxdWVyeWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenF1ZXJ5YnVpbGRlci96cXVlcnlidWlsZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEUsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsR0FBRyxFQUFrQixNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBOEMscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRywyQ0FBMkM7QUFDM0MsT0FBTyxFQUNTLGdCQUFnQixFQUFFLG9CQUFvQixFQUNoQyx3QkFBd0IsRUFDN0MsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7QUFTekIsTUFBTSxPQUFPLHNCQUFzQjtJQXlCakMsWUFDVSxZQUEwQixFQUMxQixrQkFBc0MsRUFDdEMsYUFBNEI7UUFGNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXJCdEMsMkJBQTJCO1FBQzNCLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFTix3QkFBbUIsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFFakQsa0JBQWEsR0FBdUI7WUFDekMsTUFBTSxFQUFFLEVBQUU7WUFDVixrQkFBa0IsRUFBRSxJQUFJO1NBQ3pCLENBQUM7UUFDSyxpQkFBWSxHQUFZLElBQUksQ0FBQztRQUM3QixrQkFBYSxHQUFXLEtBQUssQ0FBQztRQUM5Qiw4QkFBeUIsR0FBWSxLQUFLLENBQUM7UUFDM0MsZUFBVSxHQUFZLEtBQUssQ0FBQztRQWdKNUIsd0JBQW1CLEdBQTJCO1lBQ25ELFNBQVMsRUFBRSwwQkFBMEI7WUFDckMsTUFBTSxFQUFFLEtBQUs7WUFDYixXQUFXLEVBQUUsV0FBVztZQUN4QixVQUFVLEVBQUUsa0JBQWtCO1lBQzlCLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLFdBQVcsRUFBRSwyQkFBMkI7WUFDeEMsV0FBVyxFQUFFLHNCQUFzQjtZQUNuQyxXQUFXLEVBQUUsc0JBQXNCO1lBQ25DLGFBQWEsRUFBRSxtREFBbUQ7WUFDbEUsR0FBRyxFQUFFLGFBQWE7WUFDbEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxPQUFPLEVBQUUsUUFBUTtZQUNqQixjQUFjLEVBQUUsb0JBQW9CO1lBQ3BDLFlBQVksRUFBRSxxQkFBcUI7WUFDbkMsZUFBZSxFQUFFLGNBQWM7WUFDL0IsbUJBQW1CLEVBQUUsZUFBZTtZQUNwQyxZQUFZLEVBQUUsY0FBYztZQUM1QixnQkFBZ0IsRUFBRSxlQUFlO1lBQ2pDLGFBQWEsRUFBRSxjQUFjO1lBQzdCLGlCQUFpQixFQUFFLGVBQWU7WUFDbEMsWUFBWSxFQUFFLGNBQWM7WUFDNUIsZ0JBQWdCLEVBQUUsVUFBVTtTQUM3QixDQUFDO1FBRUssa0JBQWEsR0FBa0I7WUFDcEMsS0FBSztZQUNMLElBQUk7U0FDTCxDQUFDO0lBaktGLENBQUM7SUFFRCxRQUFRO1FBQ04sZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUN2QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDakQ7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUMvQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDcEQsSUFBSSxFQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3BCLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFM0YsSUFBSTtZQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7b0JBQzFCLGlCQUFpQjtvQkFDakIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO29CQUNwQixJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksYUFBYSxFQUFFO3dCQUMzRCxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRTs0QkFDekIsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQWdCLEVBQUUsRUFBRTtnQ0FDakQsVUFBVSxDQUFDLElBQUksQ0FBQztvQ0FDZCxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7b0NBQ3RCLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztpQ0FDekIsQ0FBQyxDQUFDOzRCQUNMLENBQUMsQ0FBQyxDQUFDO3lCQUNKOzZCQUNJOzRCQUNILE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQzs0QkFFN0MsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dDQUNoQixhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzs2QkFDekM7NEJBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsd0JBQXdCLENBQUMsQ0FBQzs0QkFDMUQsS0FBSyxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQzNDLEtBQUssQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDOzRCQUN6QyxLQUFLLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQzs0QkFDMUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzs0QkFDdkQsS0FBSyxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7NEJBRTdDLElBQUksQ0FBQyxhQUFhO2lDQUNmLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztpQ0FDbEYsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dDQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7b0NBQ2pDLFVBQVUsQ0FBQyxJQUFJLENBQUM7d0NBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7d0NBQ2pDLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FDQUNwQyxDQUFDLENBQUM7Z0NBQ0wsQ0FBQyxDQUFDLENBQUE7Z0NBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxDQUFBOzRCQUNuRCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO3lCQUNqQjtxQkFDRjtvQkFFRCwwQkFBMEI7b0JBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHO3dCQUMxQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7d0JBQ2hCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSzt3QkFDbEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO3dCQUNoQixZQUFZLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQzt3QkFDaEMsT0FBTyxFQUFFLFVBQVU7d0JBQ25CLFFBQVEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDO3dCQUM3QixZQUFZLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7cUJBQ25FLENBQUE7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLGFBQWEsR0FBRztvQkFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPO29CQUNwQixrQkFBa0IsRUFBRSxJQUFJO2lCQUN6QixDQUFDO1lBRUosQ0FBQyxDQUFDLENBQUM7WUFFSCwrQkFBK0I7WUFDL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUM3QixJQUFJLHVCQUF1QixHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDbkUsSUFBSSxFQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQ3pCLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztnQkFFRixJQUFJLHVCQUF1QixFQUFFO29CQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUM7aUJBQzdDO2FBQ0Y7U0FDRjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRU0sWUFBWSxDQUFDLE1BQWUsRUFBRSxVQUFlO1FBQ2xELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQTtRQUV2RCxJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxVQUFVLENBQUM7U0FDNUM7UUFFRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNwQztRQUVELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDckIsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUY7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDNUMsSUFBSSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUNwRCxJQUFJLEVBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFDekIsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO1lBQ0YsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2pFO0lBQ0gsQ0FBQztJQWdDTSxZQUFZLENBQUMsbUJBQXdCLEVBQUUsSUFBUztRQUNyRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQztJQUM3RyxDQUFDO0lBRU0sYUFBYSxDQUFDLFdBQWdCLEVBQUUsSUFBUztRQUM5QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDM0YsQ0FBQztJQUVNLGFBQWEsQ0FBQyxnQkFBd0I7UUFDM0MsSUFBSSxnQkFBZ0IsRUFBRTtZQUNwQixNQUFNLHFCQUFxQixHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDO1lBRXZDLHdEQUF3RDtZQUN4RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQzs7b0hBak5VLHNCQUFzQjt3R0FBdEIsc0JBQXNCLHlMQUN0QixxQkFBcUIsZ0RDeEJsQyxxeFRBd01BOzRGRGpMYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsbUJBQW1CO2dLQUt3QixZQUFZO3NCQUFoRSxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDMUMsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSzs7QUF3TlIsTUFBTSxVQUFVLFdBQVcsQ0FBQyxpQkFBc0I7SUFDaEQsSUFBSSxJQUFJLEdBQWMsRUFBRSxDQUFDO0lBQ3pCLElBQUksaUJBQWlCLENBQUMsU0FBUyxFQUFFO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUMsU0FBUyxDQUFDO1FBQzdDLElBQUksQ0FBQyxLQUFLLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9EO1NBQU07UUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztRQUMzQyxJQUFJLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssWUFBWSxLQUFLO1lBQ25ELENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsS0FBSztZQUNqRyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDdkc7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFF1ZXJ5QnVpbGRlckNvbmZpZywgUXVlcnlCdWlsZGVyQ2xhc3NOYW1lcywgUXVlcnlCdWlsZGVyQ29tcG9uZW50IH0gZnJvbSAnYW5ndWxhcjItcXVlcnktYnVpbGRlcic7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7XHJcbiAgRmllbGRTZXJ2aWNlLCBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50UHJvcGVydGllcywgWkZpZWxkLCBaR3JvdXAsXHJcbiAgRm9udEF3ZVNvbWVTZXJ2aWNlLCBEZWZhdWx0UGFnZVNldHRpbmdQYXJhbXMsIFdlYkFwaVNlcnZpY2UsIFJlc291cmNlQXBpU2VydmljZVxyXG59IGZyb20gJ21taGdsb2JhbC16Y29yZSc7XHJcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtenF1ZXJ5YnVpbGRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3pxdWVyeWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3pxdWVyeWJ1aWxkZXIuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFpxdWVyeWJ1aWxkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoUXVlcnlCdWlsZGVyQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSkgcXVlcnlCdWlsZGVyOiBRdWVyeUJ1aWxkZXJDb21wb25lbnQ7XHJcbiAgQElucHV0KCkgY2xhc3NOYW1lczogUXVlcnlCdWlsZGVyQ2xhc3NOYW1lcztcclxuICBASW5wdXQoKSBkYXRhOiBaRmllbGQ7XHJcbiAgQElucHV0KCkgZ3JvdXA6IFpHcm91cDtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIC8vcWJJdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIHFiSXRlbXMgPSB7fTtcclxuXHJcbiAgcHVibGljIGNvbXBvbmVudFByb3BlcnRpZXMgPSBuZXcgWkNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuICBwdWJsaWMgcXVlcnlDdHJsOiBhbnk7XHJcbiAgcHVibGljIGN1cnJlbnRDb25maWc6IFF1ZXJ5QnVpbGRlckNvbmZpZyA9IHtcclxuICAgIGZpZWxkczoge30sXHJcbiAgICBhbGxvd0VtcHR5UnVsZXNldHM6IHRydWVcclxuICB9O1xyXG4gIHB1YmxpYyBhbGxvd1J1bGVzZXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBhbGxvd0NvbGxhcHNlOiBib29sZWFuPSBmYWxzZTtcclxuICBwdWJsaWMgcGVyc2lzdFZhbHVlT25GaWVsZENoYW5nZTogYm9vbGVhbiA9IGZhbHNlOyBcclxuICBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBydWxlOiBhbnk7XHJcbiAgcHVibGljIHZhbHVlOiBhbnk7XHJcbiAgcHJpdmF0ZSBmaWVsZHM6IGFueTtcclxuICBwdWJsaWMgZmlsdGVyczogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3ZWJBcGlTZXJ2aWNlOiBXZWJBcGlTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG4gICAgXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudFByb3BlcnRpZXModGhpcyk7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG4gICAgIFxyXG4gICAgaWYgKHRoaXMuZGF0YVsnQWxsb3dDb2xsYXBzZSddID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuYWxsb3dDb2xsYXBzZSA9IHRoaXMuZGF0YVsnQWxsb3dDb2xsYXBzZSddO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRhdGFbJ0FsbG93UnVsZXNldCddID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLmFsbG93UnVsZXNldCA9IHRoaXMuZGF0YVsnQWxsb3dSdWxlc2V0J107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YVsnRmlsdGVycyddKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVycyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIHRoaXMuZGF0YVsnRmlsdGVycyddLFxyXG4gICAgICAgIHRoaXMuZ3JvdXBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpZWxkcyA9IHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUodGhpcy5kYXRhLlZhbHVlLCBcIkZvcm1GaWVsZFwiLCBudWxsLCBudWxsKTsgXHJcbiAgICAgXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmZpZWxkcy5zdWJzY3JpYmUoZGF0YSA9PiB7IFxyXG4gICAgICAgIGRhdGEuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gSGFuZGxlIE9wdGlvbnNcclxuICAgICAgICAgIGxldCBvcHRpb25MaXN0ID0gW107XHJcbiAgICAgICAgICBpZiAoZmllbGQuVHlwZSA9PSAnY2F0ZWdvcnknIHx8IGZpZWxkLlR5cGUgPT0gJ211bHRpc2VsZWN0Jykge1xyXG4gICAgICAgICAgICBpZiAoZmllbGRbJ1ZhbHVlT3B0aW9ucyddKSB7XHJcbiAgICAgICAgICAgICAgZmllbGRbJ1ZhbHVlT3B0aW9ucyddLmZvckVhY2goKHZhbHVlT3B0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbkxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHZhbHVlT3B0aW9uLk5hbWUsXHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZU9wdGlvbi5WYWx1ZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0T3B0aW9ucyA9IGZpZWxkWydTZWxlY3RPcHRpb25zJ107XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnMpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdE9wdGlvbnNbJ0ZpbHRlcnMnXSA9IHRoaXMuZmlsdGVycztcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdFBhZ2VTZXR0aW5nUGFyYW1zKTtcclxuICAgICAgICAgICAgICBwYXJhbS5wYWdlU2l6ZSA9IHNlbGVjdE9wdGlvbnNbJ1BhZ2VTaXplJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uY29sdW1ucyA9IHNlbGVjdE9wdGlvbnNbJ0NvbHVtbnMnXTtcclxuICAgICAgICAgICAgICBwYXJhbS5maWx0ZXJzICs9IHNlbGVjdE9wdGlvbnNbJ0ZpbHRlcnMnXTtcclxuICAgICAgICAgICAgICBwYXJhbS5zb3J0Q29sdW1uTmFtZSA9IHNlbGVjdE9wdGlvbnNbJ1NvcnRDb2x1bW5OYW1lJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uc29ydE9yZGVyID0gc2VsZWN0T3B0aW9uc1snU29ydE9yZGVyJ107XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMud2ViQXBpU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLmh0dHBQb3N0JCh0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRQYWdlVXJsKHNlbGVjdE9wdGlvbnNbJ1Jlc291cmNlVVJMJ10pLCBwYXJhbSlcclxuICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICBtYXAoKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNwLmRhdGFTZXQuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtW3NlbGVjdE9wdGlvbnNbJ05hbWUnXV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtW3NlbGVjdE9wdGlvbnNbJ1ZhbHVlJ11dXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnFiSXRlbXNbZmllbGQuVmFsdWVdWydvcHRpb25zJ10gPSBvcHRpb25MaXN0XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRGVmYXVsdCBydWxlIHRvIGRpc3BsYXlcclxuICAgICAgICAgIHRoaXMucWJJdGVtc1tmaWVsZC5WYWx1ZV0gPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGZpZWxkLk5hbWUsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmaWVsZC5WYWx1ZSxcclxuICAgICAgICAgICAgdHlwZTogZmllbGQuVHlwZSxcclxuICAgICAgICAgICAgb3BlcmF0b3JMaXN0OiBmaWVsZFsnT3BlcmF0b3JzJ10sXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbkxpc3QsXHJcbiAgICAgICAgICAgIG51bGxhYmxlOiBmaWVsZFsnSXNOdWxsYWJsZSddLFxyXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGZpZWxkWydEZWZhdWx0VmFsdWUnXSA/IGZpZWxkWydEZWZhdWx0VmFsdWUnXSA6IG51bGxcclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgIFxyXG4gICAgICAgIHRoaXMuY3VycmVudENvbmZpZyA9IHtcclxuICAgICAgICAgIGZpZWxkczogdGhpcy5xYkl0ZW1zLFxyXG4gICAgICAgICAgYWxsb3dFbXB0eVJ1bGVzZXRzOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICAgXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gYXBwZW5kIGRlZmF1bHQgcXVlcnkgaWYgYW55LlxyXG4gICAgICBpZiAodGhpcy5kYXRhWydEZWZhdWx0UXVlcnknXSkge1xyXG4gICAgICAgIGxldCBkZWZhdWx0UXVlcnlWYWx1ZVN0cmluZyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICAgIHRoaXMsXHJcbiAgICAgICAgICB0aGlzLmRhdGFbJ0RlZmF1bHRRdWVyeSddLFxyXG4gICAgICAgICAgdGhpcy5ncm91cFxyXG4gICAgICAgICk7IFxyXG5cclxuICAgICAgICBpZiAoZGVmYXVsdFF1ZXJ5VmFsdWVTdHJpbmcpIHtcclxuICAgICAgICAgIHRoaXMuc2V0UXVlcnlWYWx1ZShkZWZhdWx0UXVlcnlWYWx1ZVN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiZXJyb3I6IFwiLCBlcnJvcik7XHJcbiAgICB9IFxyXG4gIH1cclxuICAgIFxyXG4gIHB1YmxpYyBjb21wbGV0ZVJ1bGUoaXNVbmRvOiBib29sZWFuLCBxdWVyeVZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzVW5kbzsgXHJcbiAgICBjb25zdCBxYlJlc3VsdFZhbHVlTmFtZSA9IHRoaXMuZGF0YS5UeXBlICsgJ18nICsgdGhpcy5kYXRhLlZhbHVlO1xyXG4gICAgdGhpcy5ncm91cFtxYlJlc3VsdFZhbHVlTmFtZV0gPSB0aGlzLnF1ZXJ5QnVpbGRlci52YWx1ZSAgXHJcblxyXG4gICAgaWYgKHF1ZXJ5VmFsdWUpIHtcclxuICAgICAgdGhpcy5ncm91cFtxYlJlc3VsdFZhbHVlTmFtZV0gPSBxdWVyeVZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNVbmRvKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBbcWJSZXN1bHRWYWx1ZU5hbWVdID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZ3JvdXAuek1vZGVsKSB7XHJcbiAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZSh0aGlzLmRhdGEuVmFsdWUsIHRoaXMuZ3JvdXBbcWJSZXN1bHRWYWx1ZU5hbWVdLCB0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhWydPbkFwcGx5Q2xpY2snXSAmJiAhcXVlcnlWYWx1ZSkge1xyXG4gICAgICBsZXQgY2FsbEZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICB0aGlzLmRhdGFbJ09uQXBwbHlDbGljayddLFxyXG4gICAgICAgIHRoaXMuZ3JvdXBcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgbmV3RnVuYyA9IGNhbGxGdW5jLmJpbmQodGhpcyk7XHJcbiAgICAgIG5ld0Z1bmModGhpcy5ncm91cCwgdGhpcy5ncm91cFtxYlJlc3VsdFZhbHVlTmFtZV0sIHRoaXMuZmllbGRzKTtcclxuICAgIH0gXHJcbiAgfVxyXG4gICBcclxuICBwdWJsaWMgYm9vdHN0cmFwQ2xhc3NOYW1lczogUXVlcnlCdWlsZGVyQ2xhc3NOYW1lcyA9IHtcclxuICAgIGFycm93SWNvbjogJ2ZhIGZhLWNoZXZyb24tcmlnaHQgcHgtMicsXHJcbiAgICBidXR0b246ICdidG4nLFxyXG4gICAgYnV0dG9uR3JvdXA6ICdidG4tZ3JvdXAnLFxyXG4gICAgcmlnaHRBbGlnbjogJ29yZGVyLTEyIG1sLWF1dG8nLFxyXG4gICAgc3dpdGNoUm93OiAnZC1mbGV4IHB4LTInLFxyXG4gICAgc3dpdGNoR3JvdXA6ICdkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyJyxcclxuICAgIHN3aXRjaFJhZGlvOiAnY3VzdG9tLWNvbnRyb2wtaW5wdXQnLFxyXG4gICAgc3dpdGNoTGFiZWw6ICdjdXN0b20tY29udHJvbC1sYWJlbCcsXHJcbiAgICBzd2l0Y2hDb250cm9sOiAnY3VzdG9tLWNvbnRyb2wgY3VzdG9tLXJhZGlvIGN1c3RvbS1jb250cm9sLWlubGluZScsXHJcbiAgICByb3c6ICdyb3cgcC0yIG0tMScsXHJcbiAgICBydWxlOiAnYm9yZGVyJyxcclxuICAgIHJ1bGVTZXQ6ICdib3JkZXInLFxyXG4gICAgaW52YWxpZFJ1bGVTZXQ6ICdhbGVydCBhbGVydC1kYW5nZXInLFxyXG4gICAgZW1wdHlXYXJuaW5nOiAndGV4dC1kYW5nZXIgbXgtYXV0bycsXHJcbiAgICBvcGVyYXRvckNvbnRyb2w6ICdmb3JtLWNvbnRyb2wnLFxyXG4gICAgb3BlcmF0b3JDb250cm9sU2l6ZTogJ2NvbC1hdXRvIHByLTAnLFxyXG4gICAgZmllbGRDb250cm9sOiAnZm9ybS1jb250cm9sJyxcclxuICAgIGZpZWxkQ29udHJvbFNpemU6ICdjb2wtYXV0byBwci0wJyxcclxuICAgIGVudGl0eUNvbnRyb2w6ICdmb3JtLWNvbnRyb2wnLFxyXG4gICAgZW50aXR5Q29udHJvbFNpemU6ICdjb2wtYXV0byBwci0wJyxcclxuICAgIGlucHV0Q29udHJvbDogJ2Zvcm0tY29udHJvbCcsXHJcbiAgICBpbnB1dENvbnRyb2xTaXplOiAnY29sLWF1dG8nXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGNvbmRpdGlvbkxpc3Q6IEFycmF5PHN0cmluZz4gPSBbXHJcbiAgICBcIkFORFwiLFxyXG4gICAgXCJPUlwiXHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGdldE9wZXJhdG9ycyhkZWZhdWx0T3BlcmF0b3JMaXN0OiBhbnksIHJ1bGU6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMucWJJdGVtc1tydWxlLmZpZWxkXS5vcGVyYXRvckxpc3QgPyB0aGlzLnFiSXRlbXNbcnVsZS5maWVsZF0ub3BlcmF0b3JMaXN0IDogZGVmYXVsdE9wZXJhdG9yTGlzdDtcclxuICB9XHJcbiAgIFxyXG4gIHB1YmxpYyBnZXRPcHRpb25MaXN0KG9wdGlvbnNMaXN0OiBhbnksIHJ1bGU6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMucWJJdGVtc1tydWxlLmZpZWxkXS5vcHRpb25zID8gdGhpcy5xYkl0ZW1zW3J1bGUuZmllbGRdLm9wdGlvbnMgOiBvcHRpb25zTGlzdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRRdWVyeVZhbHVlKHF1ZXJ5VmFsdWVTdHJpbmc6IHN0cmluZykge1xyXG4gICAgaWYgKHF1ZXJ5VmFsdWVTdHJpbmcpIHtcclxuICAgICAgY29uc3QgZGVmYXVsdFF1ZXJ5VmFsdWVKc29uID0gdG9RdWVyeVJ1bGUoSlNPTi5wYXJzZShxdWVyeVZhbHVlU3RyaW5nKSk7XHJcbiAgICAgIHRoaXMucXVlcnlDdHJsID0gZGVmYXVsdFF1ZXJ5VmFsdWVKc29uO1xyXG5cclxuICAgICAgLy8gZGVmYXVsdCBsb2NrIHRoZSBxdWVyeSBidWlsZGVyIGlmIHRoZXJlIGRlZmF1bHQgcXVlcnlcclxuICAgICAgdGhpcy5jb21wbGV0ZVJ1bGUodHJ1ZSwgZGVmYXVsdFF1ZXJ5VmFsdWVKc29uKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlSdWxlIHtcclxuICBjb25kaXRpb246IHN0cmluZztcclxuICBydWxlczogUXVlcnlSdWxlW107XHJcbiAgZmllbGQ6IHN0cmluZztcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgb3BlcmF0b3I6IHN0cmluZztcclxuICB2YWx1ZTogc3RyaW5nW107XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0b1F1ZXJ5UnVsZShxdWVyeUJ1aWxkZXJNb2RlbDogYW55KTogUXVlcnlSdWxlIHtcclxuICBsZXQgcnVsZSA9IDxRdWVyeVJ1bGU+e307XHJcbiAgaWYgKHF1ZXJ5QnVpbGRlck1vZGVsLmNvbmRpdGlvbikge1xyXG4gICAgcnVsZS5jb25kaXRpb24gPSBxdWVyeUJ1aWxkZXJNb2RlbC5jb25kaXRpb247XHJcbiAgICBydWxlLnJ1bGVzID0gcXVlcnlCdWlsZGVyTW9kZWwucnVsZXMubWFwKHEgPT4gdG9RdWVyeVJ1bGUocSkpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBydWxlLmZpZWxkID0gcXVlcnlCdWlsZGVyTW9kZWwuZmllbGQ7XHJcbiAgICBydWxlLnR5cGUgPSBxdWVyeUJ1aWxkZXJNb2RlbC50eXBlO1xyXG4gICAgcnVsZS5vcGVyYXRvciA9IHF1ZXJ5QnVpbGRlck1vZGVsLm9wZXJhdG9yO1xyXG4gICAgcnVsZS52YWx1ZSA9IHF1ZXJ5QnVpbGRlck1vZGVsLnZhbHVlIGluc3RhbmNlb2YgQXJyYXlcclxuICAgICAgPyBxdWVyeUJ1aWxkZXJNb2RlbC50eXBlID09PSAnZGF0ZScgPyBuZXcgRGF0ZShxdWVyeUJ1aWxkZXJNb2RlbC52YWx1ZSkgOiBxdWVyeUJ1aWxkZXJNb2RlbC52YWx1ZVxyXG4gICAgICA6IFtxdWVyeUJ1aWxkZXJNb2RlbC50eXBlID09PSAnZGF0ZScgPyBuZXcgRGF0ZShxdWVyeUJ1aWxkZXJNb2RlbC52YWx1ZSkgOiBxdWVyeUJ1aWxkZXJNb2RlbC52YWx1ZV07XHJcbiAgfVxyXG4gIHJldHVybiBydWxlO1xyXG59XHJcbiIsIjxpb24taXRlbSAqbmdJZj1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiPlxyXG4gIDxpb24tbGFiZWwgW2F0dHIuZm9yXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgKm5nSWY9XCJkYXRhLlNob3dMYWJlbCA9PT0gdW5kZWZpbmVkIHx8IGRhdGEuU2hvd0xhYmVsXCJcclxuICAgICAgICAgICAgIFtwb3NpdGlvbl09XCJkYXRhLkxhYmVsUG9zaXRpb24gPyBkYXRhLkxhYmVsUG9zaXRpb24gOiAnc3RhY2tlZCdcIj5cclxuICAgIHt7ZGF0YS5MYWJlbH19XHJcbiAgICA8aW9uLXRleHQgKm5nSWY9XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWRGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZXF1aXJlZEZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZXF1aXJlZClcIlxyXG4gICAgICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCI+KjwvaW9uLXRleHQ+XHJcbiAgPC9pb24tbGFiZWw+XHJcbiAgPGRpdiBjbGFzcz1cInFiY29udGFpbmVyXCI+XHJcbiAgICA8cXVlcnktYnVpbGRlciBbKG5nTW9kZWwpXT0ncXVlcnlDdHJsJ1xyXG4gICAgICAgICAgICAgICAgICAgWyhjb25maWcpXT0nY3VycmVudENvbmZpZydcclxuICAgICAgICAgICAgICAgICAgIFthbGxvd1J1bGVzZXRdPSdhbGxvd1J1bGVzZXQnXHJcbiAgICAgICAgICAgICAgICAgICBbYWxsb3dDb2xsYXBzZV09J2FsbG93Q29sbGFwc2UnXHJcbiAgICAgICAgICAgICAgICAgICBbZmlsdGVyc109J2ZpbHRlcnMnXHJcbiAgICAgICAgICAgICAgICAgICBbcGVyc2lzdFZhbHVlT25GaWVsZENoYW5nZV09J3BlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2UnPlxyXG4gICAgICA8IS0tQU5EIE9SIFN3dGljaC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpxdWVyeVN3aXRjaEdyb3VwPVwibGV0IHJ1bGVzZXQ7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgIDxrZW5kby1kcm9wZG93bmxpc3QgWyhuZ01vZGVsKV09XCJydWxlc2V0LmNvbmRpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIHJ1bGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImNvbmRpdGlvbkxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1wiPlxyXG4gICAgICAgIDwva2VuZG8tZHJvcGRvd25saXN0PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLVJ1bGUgUnVsZVNldCBSZW1vdmUgUnVsZSBTZXQgQnV0dG9uLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5QnV0dG9uR3JvdXA9XCJsZXQgcnVsZXNldDsgbGV0IGFkZFJ1bGU9YWRkUnVsZTsgbGV0IGFkZFJ1bGVTZXQ9YWRkUnVsZVNldDsgbGV0IHJlbW92ZVJ1bGVTZXQ9cmVtb3ZlUnVsZVNldFwiPlxyXG4gICAgICAgIDwhLS1BZGQgUnVsZSBCdXR0b24tLT5cclxuICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJvbmc9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFJ1bGUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uYWRkXCI+XHJcbiAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCIncGx1cydcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDVweDtcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlvbi10ZXh0LWNhcGl0YWxpemVcIj5BZGQ8L3NwYW4+XHJcbiAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgIDwhLS1BZGQgUnVsZVNldCBCdXR0b24tLT5cclxuICAgICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cImFkZFJ1bGVTZXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9uZz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkUnVsZVNldCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25hZGRcIj5cclxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cIidwbHVzJ1wiIHN0eWxlPVwicGFkZGluZy1yaWdodDogNXB4O1wiPjwvZmEtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW9uLXRleHQtY2FwaXRhbGl6ZVwiPkFkZCBSdWxlIFNldDwvc3Bhbj5cclxuICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgPCEtLVJlbW92ZSBSdWxlU2V0IEJ1dHRvbi0tPlxyXG4gICAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwicmVtb3ZlUnVsZVNldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb25nPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVSdWxlU2V0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbnJlbW92ZVwiPlxyXG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiJ3RpbWVzJ1wiIHN0eWxlPVwicGFkZGluZy1yaWdodDogNXB4O1wiPjwvZmEtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW9uLXRleHQtY2FwaXRhbGl6ZVwiPlJlbW92ZSBSdWxlIFNldDwvc3Bhbj5cclxuICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8IS0tUmVtb3ZlIFJ1bGUgQnV0dG9uLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5UmVtb3ZlQnV0dG9uPVwibGV0IHJ1bGU7IGxldCByZW1vdmVSdWxlPXJlbW92ZVJ1bGVcIj5cclxuICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJvbmc9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVJ1bGUocnVsZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbnJlbW92ZVwiPlxyXG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiJ21pbnVzJ1wiXHJcbiAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDVweDtcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlvbi10ZXh0LWNhcGl0YWxpemVcIj5SZW1vdmUgUnVsZTwvc3Bhbj5cclxuICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8IS0tTmFtZSBkcm9wZG93bi0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpxdWVyeUZpZWxkPVwibGV0IHJ1bGU7IGxldCBmaWVsZHM9ZmllbGRzOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2U7IGxldCBnZXRGaWVsZHM9Z2V0RmllbGRzXCI+XHJcbiAgICAgICAgPGtlbmRvLWRyb3Bkb3dubGlzdCBbKG5nTW9kZWwpXT1cInJ1bGUuZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50LCBydWxlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJnZXRGaWVsZHMocnVsZS5lbnRpdHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVQcmltaXRpdmVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctcmlnaHQ6MTBweDtcIj5cclxuICAgICAgICA8L2tlbmRvLWRyb3Bkb3dubGlzdD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS1PcGVyYXRvciBkcm9wZG93bi0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpxdWVyeU9wZXJhdG9yPVwibGV0IHJ1bGU7IGxldCBvcGVyYXRvcnM9b3BlcmF0b3JzOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIiBzdHlsZT1cInBhZGRpbmc6MTBweFwiPlxyXG4gICAgICAgIDxrZW5kby1kcm9wZG93bmxpc3QgWyhuZ01vZGVsKV09XCJydWxlLm9wZXJhdG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudCwgcnVsZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZ2V0T3BlcmF0b3JzKG9wZXJhdG9ycywgcnVsZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZVByaW1pdGl2ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1yaWdodDoxMHB4O1wiPlxyXG4gICAgICAgIDwva2VuZG8tZHJvcGRvd25saXN0PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLVRleHQgRmllbGQtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgZmllbGQ9ZmllbGQ7IHR5cGU6ICdzdHJpbmcnOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICA8a2VuZG8tdGV4dGJveCBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtjbGVhckJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b21UZXh0Ym94XCI+XHJcbiAgICAgICAgPC9rZW5kby10ZXh0Ym94PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLVRleHRBcmVhIEZpZWxkLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgdHlwZTogJ3RleHRhcmVhJzsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgPGtlbmRvLXRleHRhcmVhIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcm93c109XCI1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHNdPVwiNDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNpemFibGU9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIj5cclxuICAgICAgICA8L2tlbmRvLXRleHRhcmVhPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLU51bWJlciBGaWVsZC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogJ251bWJlcic7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgIDxrZW5kby1udW1lcmljdGV4dGJveCBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlY2ltYWxzXT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiPlxyXG4gICAgICAgIDwva2VuZG8tbnVtZXJpY3RleHRib3g+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8IS0tRGF0ZSBGaWVsZC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IHR5cGU6ICdkYXRlJzsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgPGtlbmRvLWRhdGVwaWNrZXIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxlbmRhclR5cGU9XCJjbGFzc2ljXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCI+XHJcbiAgICAgICAgPC9rZW5kby1kYXRlcGlja2VyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLUNhdGVnb3J5IEZpZWxkLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IG9wdGlvbnM9b3B0aW9uczsgdHlwZTogJ2NhdGVnb3J5JzsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgPGtlbmRvLWRyb3Bkb3dubGlzdCBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJnZXRPcHRpb25MaXN0KG9wdGlvbnMsIHJ1bGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVQcmltaXRpdmVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiPlxyXG4gICAgICAgIDwva2VuZG8tZHJvcGRvd25saXN0PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLURyb3BEb3duIE11bHRpU2VsZWN0IEZpZWxkLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IG9wdGlvbnM9b3B0aW9uczsgdHlwZTogJ211bHRpc2VsZWN0JzsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgPGtlbmRvLW11bHRpc2VsZWN0IFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJnZXRPcHRpb25MaXN0KG9wdGlvbnMsIHJ1bGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZVByaW1pdGl2ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MzAlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIj5cclxuICAgICAgICA8L2tlbmRvLW11bHRpc2VsZWN0PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLUJvb2xlYW4gRmllbGQtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyB0eXBlOiAnYm9vbGVhbic7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b21DaGVja0JveFwiXHJcbiAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAga2VuZG9DaGVja0JveCAvPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvcXVlcnktYnVpbGRlcj5cclxuICAgIDxicj5cclxuICAgIDxkaXYgKm5nSWY9XCJkYXRhLlNob3dRdWVyeVJlc3VsdFwiPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxsYWJlbD5RdWVyeSBSZXN1bHQ8L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHRleHRhcmVhIGNsYXNzPVwib3V0cHV0XCJcclxuICAgICAgICAgICAgICAgIHJlc2l6YWJsZT1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgW3Jvd3NdPVwiMTBcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHNdPVwiNDBcIj57e3F1ZXJ5Q3RybCB8IGpzb259fTwvdGV4dGFyZWE+XHJcbiAgICAgIDxicj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBzdHlsZT1cIndpZHRoOjEwMCVcIiBzbG90PVwiZW5kXCI+XHJcbiAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwiIWlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJvbmc9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb21wbGV0ZVJ1bGUodHJ1ZSwgbnVsbClcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbmFwcGx5XCI+XHJcbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiJ3NhdmUnXCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiA1cHg7XCI+PC9mYS1pY29uPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW9uLXRleHQtY2FwaXRhbGl6ZVwiPkFwcGx5PC9zcGFuPlxyXG4gICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9uZz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbXBsZXRlUnVsZShmYWxzZSwgbnVsbClcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbmFwcGx5XCI+XHJcbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiJ3NhdmUnXCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiA1cHg7XCI+PC9mYS1pY29uPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW9uLXRleHQtY2FwaXRhbGl6ZVwiPlVuZG8gQXBwbHk8L3NwYW4+XHJcbiAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2lvbi1pdGVtPlxyXG4iXX0=
|
|
@@ -9086,6 +9086,9 @@ class ZquerybuilderComponent {
|
|
|
9086
9086
|
if (this.data['AllowRuleset'] === false) {
|
|
9087
9087
|
this.allowRuleset = this.data['AllowRuleset'];
|
|
9088
9088
|
}
|
|
9089
|
+
if (this.data['Filters']) {
|
|
9090
|
+
this.filters = ZComponentHelper.getGroupEvalValue.call(this, this.data['Filters'], this.group);
|
|
9091
|
+
}
|
|
9089
9092
|
this.fields = this.fieldService.getFormFieldCode(this.data.Value, "FormField", null, null);
|
|
9090
9093
|
try {
|
|
9091
9094
|
this.fields.subscribe(data => {
|
|
@@ -9103,6 +9106,9 @@ class ZquerybuilderComponent {
|
|
|
9103
9106
|
}
|
|
9104
9107
|
else {
|
|
9105
9108
|
const selectOptions = field['SelectOptions'];
|
|
9109
|
+
if (this.filters) {
|
|
9110
|
+
selectOptions['Filters'] = this.filters;
|
|
9111
|
+
}
|
|
9106
9112
|
const param = Object.assign({}, DefaultPageSettingParams);
|
|
9107
9113
|
param.pageSize = selectOptions['PageSize'];
|
|
9108
9114
|
param.columns = selectOptions['Columns'];
|
|
@@ -9185,10 +9191,10 @@ class ZquerybuilderComponent {
|
|
|
9185
9191
|
}
|
|
9186
9192
|
}
|
|
9187
9193
|
ZquerybuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZquerybuilderComponent, deps: [{ token: i1.FieldService }, { token: i1.ResourceApiService }, { token: i1.WebApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
9188
|
-
ZquerybuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ZquerybuilderComponent, selector: "app-zquerybuilder", inputs: { classNames: "classNames", data: "data", group: "group", form: "form" }, viewQueries: [{ propertyName: "queryBuilder", first: true, predicate: QueryBuilderComponent, descendants: true }], ngImport: i0, template: "<ion-item *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <ion-label [attr.for]=\"data.Value\"\r\n *ngIf=\"data.ShowLabel === undefined || data.ShowLabel\"\r\n [position]=\"data.LabelPosition ? data.LabelPosition : 'stacked'\">\r\n {{data.Label}}\r\n <ion-text *ngIf=\"(!!componentProperties.isRequiredField ? group[componentProperties.isRequiredField] : componentProperties.isRequired)\"\r\n color=\"danger\">*</ion-text>\r\n </ion-label>\r\n <div class=\"qbcontainer\">\r\n <query-builder [(ngModel)]='queryCtrl'\r\n [(config)]='currentConfig'\r\n [allowRuleset]='allowRuleset'\r\n [allowCollapse]='allowCollapse'\r\n [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <!--AND OR Swtich-->\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"ruleset.condition\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"conditionList\"\r\n [disabled]=\"isDisabled\"\r\n style=\"text-transform: uppercase;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Rule RuleSet Remove Rule Set Button-->\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <!--Add Rule Button-->\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRule()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add</span>\r\n </ion-button>\r\n <!--Add RuleSet Button-->\r\n <ion-button *ngIf=\"addRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add Rule Set</span>\r\n </ion-button>\r\n <!--Remove RuleSet Button-->\r\n <ion-button *ngIf=\"removeRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'times'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule Set</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Remove Rule Button-->\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRule(rule)\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'minus'\"\r\n style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Name dropdown-->\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields=getFields\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.field\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getFields(rule.entity)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Operator dropdown-->\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\" style=\"padding:10px\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.operator\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getOperators(operators, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Text Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'string'; let onChange=onChange\">\r\n <kendo-textbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [clearButton]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n class=\"customTextbox\">\r\n </kendo-textbox>\r\n </ng-container>\r\n <!--TextArea Field-->\r\n <ng-container *queryInput=\"let rule; type: 'textarea'; let onChange=onChange\">\r\n <kendo-textarea [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [rows]=\"5\"\r\n [cols]=\"40\"\r\n resizable=\"none\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-textarea>\r\n </ng-container>\r\n <!--Number Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'number'; let onChange=onChange\">\r\n <kendo-numerictextbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [value]=\"value\"\r\n [decimals]=\"0\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-numerictextbox>\r\n </ng-container>\r\n <!--Date Field-->\r\n <ng-container *queryInput=\"let rule; type: 'date'; let onChange=onChange\">\r\n <kendo-datepicker [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n calendarType=\"classic\"\r\n [value]=\"value\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-datepicker>\r\n </ng-container>\r\n <!--Category Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'category'; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--DropDown MultiSelect Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'multiselect'; let onChange=onChange\">\r\n <kendo-multiselect [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [autoClose]=\"false\"\r\n style=\"width:30%\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-multiselect>\r\n </ng-container>\r\n <!--Boolean Field-->\r\n <ng-container *queryInput=\"let rule; type: 'boolean'; let onChange=onChange\">\r\n <input type=\"checkbox\"\r\n [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n class=\"customCheckBox\"\r\n [disabled]=\"isDisabled\"\r\n kendoCheckBox />\r\n </ng-container>\r\n </query-builder>\r\n <br>\r\n <div *ngIf=\"data.ShowQueryResult\">\r\n <div>\r\n <label>Query Result</label>\r\n </div>\r\n <textarea class=\"output\"\r\n resizable=\"none\"\r\n [rows]=\"10\"\r\n [cols]=\"40\">{{queryCtrl | json}}</textarea>\r\n <br>\r\n </div>\r\n <div style=\"width:100%\" slot=\"end\">\r\n <ion-button *ngIf=\"!isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(true, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Apply</span>\r\n </ion-button>\r\n <ion-button *ngIf=\"isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(false, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Undo Apply</span>\r\n </ion-button>\r\n </div>\r\n </div>\r\n</ion-item>\r\n", styles: [".qbcontainer{border-radius:5px;border:1px solid rgba(0,0,0,.08);padding:10px;margin:10px 0;width:100%}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}:host ::ng-deep query-builder .k-dropdown .k-dropdown-wrap,:host ::ng-deep query-builder .k-dropdowntree .k-dropdown-wrap{background-color:#fff}:host ::ng-deep query-builder .customTextbox{width:calc(100% - 440px);min-width:230px}:host ::ng-deep query-builder .customCheckBox{width:27px;height:27px}:host ::ng-deep query-builder .buttonadd{background-color:#479400;color:#fff;border-color:#479400}:host ::ng-deep query-builder .buttonremove{background-color:#f04141;color:#fff;border-color:#f04141;margin-top:0}.buttonapply{background-color:#5596e6;color:#fff;border-color:#5596e6}\n"], components: [{ type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { type: i3$6.QueryBuilderComponent, selector: "query-builder", inputs: ["data", "allowRuleset", "allowCollapse", "emptyMessage", "config", "persistValueOnFieldChange", "value", "disabled", "classNames", "operatorMap", "parentValue", "parentArrowIconTemplate", "parentInputTemplates", "parentOperatorTemplate", "parentFieldTemplate", "parentEntityTemplate", "parentSwitchGroupTemplate", "parentButtonGroupTemplate", "parentRemoveButtonTemplate", "parentEmptyWarningTemplate", "parentChangeCallback", "parentTouchedCallback"] }, { type: i6$3.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["listHeight", "disabled", "readonly", "filterable", "ignoreCase", "delay", "tabindex", "id", "data", "value", "popupSettings", "itemDisabled", "virtual", "valuePrimitive", "tabIndex", "size", "rounded", "fillMode", "iconClass", "loading", "textField", "valueField", "defaultItem"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i3$3.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "size", "rounded", "fillMode", "tabIndex", "successIcon", "errorIcon", "clearButtonIcon", "placeholder", "maxlength"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { type: i3$3.TextAreaComponent, selector: "kendo-textarea", inputs: ["focusableId", "flow", "tabindex", "resizable", "tabIndex", "size", "rounded", "fillMode", "rows", "cols", "maxlength"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoTextArea"] }, { type: i3$3.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "decimals", "step", "spinners", "rangeValidation", "tabindex", "changeValueOnScroll", "selectOnFocus", "value", "format", "tabIndex", "size", "rounded", "fillMode", "max", "min", "placeholder", "maxlength"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }, { type: i2$1.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "navigation", "min", "max", "incompleteDateValidation", "focusedDate", "format", "twoDigitYearMax", "placeholder", "tabindex", "title", "rangeValidation", "disabledDatesValidation", "weekNumber", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "popupSettings", "value", "tabIndex", "disabledDates", "size", "rounded", "fillMode", "formatPlaceholder"], outputs: ["valueChange", "focus", "blur", "open", "close"], exportAs: ["kendo-datepicker"] }, { type: i6$3.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["focusableId", "autoClose", "tabindex", "disabled", "readonly", "filterable", "listHeight", "clearButton", "tagMapper", "allowCustom", "valueNormalizer", "data", "value", "tabIndex", "size", "rounded", "fillMode", "placeholder", "itemDisabled", "checkboxes", "virtual", "popupSettings", "valuePrimitive", "loading", "valueField", "textField"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "removeTag"], exportAs: ["kendoMultiSelect"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3$6.QuerySwitchGroupDirective, selector: "[querySwitchGroup]" }, { type: i3$6.QueryButtonGroupDirective, selector: "[queryButtonGroup]" }, { type: i3$6.QueryRemoveButtonDirective, selector: "[queryRemoveButton]" }, { type: i3$6.QueryFieldDirective, selector: "[queryField]" }, { type: i3$6.QueryOperatorDirective, selector: "[queryOperator]" }, { type: i3$6.QueryInputDirective, selector: "[queryInput]", inputs: ["queryInputType"] }, { type: i4$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i3$3.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }], pipes: { "json": i5.JsonPipe } });
|
|
9194
|
+
ZquerybuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ZquerybuilderComponent, selector: "app-zquerybuilder", inputs: { classNames: "classNames", data: "data", group: "group", form: "form" }, viewQueries: [{ propertyName: "queryBuilder", first: true, predicate: QueryBuilderComponent, descendants: true }], ngImport: i0, template: "<ion-item *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <ion-label [attr.for]=\"data.Value\"\r\n *ngIf=\"data.ShowLabel === undefined || data.ShowLabel\"\r\n [position]=\"data.LabelPosition ? data.LabelPosition : 'stacked'\">\r\n {{data.Label}}\r\n <ion-text *ngIf=\"(!!componentProperties.isRequiredField ? group[componentProperties.isRequiredField] : componentProperties.isRequired)\"\r\n color=\"danger\">*</ion-text>\r\n </ion-label>\r\n <div class=\"qbcontainer\">\r\n <query-builder [(ngModel)]='queryCtrl'\r\n [(config)]='currentConfig'\r\n [allowRuleset]='allowRuleset'\r\n [allowCollapse]='allowCollapse'\r\n [filters]='filters'\r\n [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <!--AND OR Swtich-->\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"ruleset.condition\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"conditionList\"\r\n [disabled]=\"isDisabled\"\r\n style=\"text-transform: uppercase;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Rule RuleSet Remove Rule Set Button-->\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <!--Add Rule Button-->\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRule()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add</span>\r\n </ion-button>\r\n <!--Add RuleSet Button-->\r\n <ion-button *ngIf=\"addRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add Rule Set</span>\r\n </ion-button>\r\n <!--Remove RuleSet Button-->\r\n <ion-button *ngIf=\"removeRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'times'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule Set</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Remove Rule Button-->\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRule(rule)\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'minus'\"\r\n style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Name dropdown-->\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields=getFields\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.field\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getFields(rule.entity)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Operator dropdown-->\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\" style=\"padding:10px\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.operator\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getOperators(operators, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Text Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'string'; let onChange=onChange\">\r\n <kendo-textbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [clearButton]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n class=\"customTextbox\">\r\n </kendo-textbox>\r\n </ng-container>\r\n <!--TextArea Field-->\r\n <ng-container *queryInput=\"let rule; type: 'textarea'; let onChange=onChange\">\r\n <kendo-textarea [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [rows]=\"5\"\r\n [cols]=\"40\"\r\n resizable=\"none\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-textarea>\r\n </ng-container>\r\n <!--Number Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'number'; let onChange=onChange\">\r\n <kendo-numerictextbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [value]=\"value\"\r\n [decimals]=\"0\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-numerictextbox>\r\n </ng-container>\r\n <!--Date Field-->\r\n <ng-container *queryInput=\"let rule; type: 'date'; let onChange=onChange\">\r\n <kendo-datepicker [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n calendarType=\"classic\"\r\n [value]=\"value\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-datepicker>\r\n </ng-container>\r\n <!--Category Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'category'; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--DropDown MultiSelect Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'multiselect'; let onChange=onChange\">\r\n <kendo-multiselect [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [autoClose]=\"false\"\r\n style=\"width:30%\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-multiselect>\r\n </ng-container>\r\n <!--Boolean Field-->\r\n <ng-container *queryInput=\"let rule; type: 'boolean'; let onChange=onChange\">\r\n <input type=\"checkbox\"\r\n [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n class=\"customCheckBox\"\r\n [disabled]=\"isDisabled\"\r\n kendoCheckBox />\r\n </ng-container>\r\n </query-builder>\r\n <br>\r\n <div *ngIf=\"data.ShowQueryResult\">\r\n <div>\r\n <label>Query Result</label>\r\n </div>\r\n <textarea class=\"output\"\r\n resizable=\"none\"\r\n [rows]=\"10\"\r\n [cols]=\"40\">{{queryCtrl | json}}</textarea>\r\n <br>\r\n </div>\r\n <div style=\"width:100%\" slot=\"end\">\r\n <ion-button *ngIf=\"!isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(true, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Apply</span>\r\n </ion-button>\r\n <ion-button *ngIf=\"isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(false, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Undo Apply</span>\r\n </ion-button>\r\n </div>\r\n </div>\r\n</ion-item>\r\n", styles: [".qbcontainer{border-radius:5px;border:1px solid rgba(0,0,0,.08);padding:10px;margin:10px 0;width:100%}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}:host ::ng-deep query-builder .k-dropdown .k-dropdown-wrap,:host ::ng-deep query-builder .k-dropdowntree .k-dropdown-wrap{background-color:#fff}:host ::ng-deep query-builder .customTextbox{width:calc(100% - 440px);min-width:230px}:host ::ng-deep query-builder .customCheckBox{width:27px;height:27px}:host ::ng-deep query-builder .buttonadd{background-color:#479400;color:#fff;border-color:#479400}:host ::ng-deep query-builder .buttonremove{background-color:#f04141;color:#fff;border-color:#f04141;margin-top:0}.buttonapply{background-color:#5596e6;color:#fff;border-color:#5596e6}\n"], components: [{ type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { type: i3$6.QueryBuilderComponent, selector: "query-builder", inputs: ["data", "allowRuleset", "allowCollapse", "emptyMessage", "config", "persistValueOnFieldChange", "value", "disabled", "classNames", "operatorMap", "parentValue", "parentArrowIconTemplate", "parentInputTemplates", "parentOperatorTemplate", "parentFieldTemplate", "parentEntityTemplate", "parentSwitchGroupTemplate", "parentButtonGroupTemplate", "parentRemoveButtonTemplate", "parentEmptyWarningTemplate", "parentChangeCallback", "parentTouchedCallback"] }, { type: i6$3.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["listHeight", "disabled", "readonly", "filterable", "ignoreCase", "delay", "tabindex", "id", "data", "value", "popupSettings", "itemDisabled", "virtual", "valuePrimitive", "tabIndex", "size", "rounded", "fillMode", "iconClass", "loading", "textField", "valueField", "defaultItem"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i3$3.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "size", "rounded", "fillMode", "tabIndex", "successIcon", "errorIcon", "clearButtonIcon", "placeholder", "maxlength"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { type: i3$3.TextAreaComponent, selector: "kendo-textarea", inputs: ["focusableId", "flow", "tabindex", "resizable", "tabIndex", "size", "rounded", "fillMode", "rows", "cols", "maxlength"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoTextArea"] }, { type: i3$3.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "decimals", "step", "spinners", "rangeValidation", "tabindex", "changeValueOnScroll", "selectOnFocus", "value", "format", "tabIndex", "size", "rounded", "fillMode", "max", "min", "placeholder", "maxlength"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }, { type: i2$1.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "navigation", "min", "max", "incompleteDateValidation", "focusedDate", "format", "twoDigitYearMax", "placeholder", "tabindex", "title", "rangeValidation", "disabledDatesValidation", "weekNumber", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "popupSettings", "value", "tabIndex", "disabledDates", "size", "rounded", "fillMode", "formatPlaceholder"], outputs: ["valueChange", "focus", "blur", "open", "close"], exportAs: ["kendo-datepicker"] }, { type: i6$3.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["focusableId", "autoClose", "tabindex", "disabled", "readonly", "filterable", "listHeight", "clearButton", "tagMapper", "allowCustom", "valueNormalizer", "data", "value", "tabIndex", "size", "rounded", "fillMode", "placeholder", "itemDisabled", "checkboxes", "virtual", "popupSettings", "valuePrimitive", "loading", "valueField", "textField"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "removeTag"], exportAs: ["kendoMultiSelect"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3$6.QuerySwitchGroupDirective, selector: "[querySwitchGroup]" }, { type: i3$6.QueryButtonGroupDirective, selector: "[queryButtonGroup]" }, { type: i3$6.QueryRemoveButtonDirective, selector: "[queryRemoveButton]" }, { type: i3$6.QueryFieldDirective, selector: "[queryField]" }, { type: i3$6.QueryOperatorDirective, selector: "[queryOperator]" }, { type: i3$6.QueryInputDirective, selector: "[queryInput]", inputs: ["queryInputType"] }, { type: i4$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i3$3.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }], pipes: { "json": i5.JsonPipe } });
|
|
9189
9195
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZquerybuilderComponent, decorators: [{
|
|
9190
9196
|
type: Component,
|
|
9191
|
-
args: [{ selector: 'app-zquerybuilder', template: "<ion-item *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <ion-label [attr.for]=\"data.Value\"\r\n *ngIf=\"data.ShowLabel === undefined || data.ShowLabel\"\r\n [position]=\"data.LabelPosition ? data.LabelPosition : 'stacked'\">\r\n {{data.Label}}\r\n <ion-text *ngIf=\"(!!componentProperties.isRequiredField ? group[componentProperties.isRequiredField] : componentProperties.isRequired)\"\r\n color=\"danger\">*</ion-text>\r\n </ion-label>\r\n <div class=\"qbcontainer\">\r\n <query-builder [(ngModel)]='queryCtrl'\r\n [(config)]='currentConfig'\r\n [allowRuleset]='allowRuleset'\r\n [allowCollapse]='allowCollapse'\r\n [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <!--AND OR Swtich-->\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"ruleset.condition\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"conditionList\"\r\n [disabled]=\"isDisabled\"\r\n style=\"text-transform: uppercase;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Rule RuleSet Remove Rule Set Button-->\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <!--Add Rule Button-->\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRule()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add</span>\r\n </ion-button>\r\n <!--Add RuleSet Button-->\r\n <ion-button *ngIf=\"addRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add Rule Set</span>\r\n </ion-button>\r\n <!--Remove RuleSet Button-->\r\n <ion-button *ngIf=\"removeRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'times'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule Set</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Remove Rule Button-->\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRule(rule)\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'minus'\"\r\n style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Name dropdown-->\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields=getFields\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.field\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getFields(rule.entity)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Operator dropdown-->\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\" style=\"padding:10px\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.operator\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getOperators(operators, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Text Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'string'; let onChange=onChange\">\r\n <kendo-textbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [clearButton]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n class=\"customTextbox\">\r\n </kendo-textbox>\r\n </ng-container>\r\n <!--TextArea Field-->\r\n <ng-container *queryInput=\"let rule; type: 'textarea'; let onChange=onChange\">\r\n <kendo-textarea [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [rows]=\"5\"\r\n [cols]=\"40\"\r\n resizable=\"none\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-textarea>\r\n </ng-container>\r\n <!--Number Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'number'; let onChange=onChange\">\r\n <kendo-numerictextbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [value]=\"value\"\r\n [decimals]=\"0\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-numerictextbox>\r\n </ng-container>\r\n <!--Date Field-->\r\n <ng-container *queryInput=\"let rule; type: 'date'; let onChange=onChange\">\r\n <kendo-datepicker [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n calendarType=\"classic\"\r\n [value]=\"value\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-datepicker>\r\n </ng-container>\r\n <!--Category Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'category'; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--DropDown MultiSelect Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'multiselect'; let onChange=onChange\">\r\n <kendo-multiselect [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [autoClose]=\"false\"\r\n style=\"width:30%\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-multiselect>\r\n </ng-container>\r\n <!--Boolean Field-->\r\n <ng-container *queryInput=\"let rule; type: 'boolean'; let onChange=onChange\">\r\n <input type=\"checkbox\"\r\n [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n class=\"customCheckBox\"\r\n [disabled]=\"isDisabled\"\r\n kendoCheckBox />\r\n </ng-container>\r\n </query-builder>\r\n <br>\r\n <div *ngIf=\"data.ShowQueryResult\">\r\n <div>\r\n <label>Query Result</label>\r\n </div>\r\n <textarea class=\"output\"\r\n resizable=\"none\"\r\n [rows]=\"10\"\r\n [cols]=\"40\">{{queryCtrl | json}}</textarea>\r\n <br>\r\n </div>\r\n <div style=\"width:100%\" slot=\"end\">\r\n <ion-button *ngIf=\"!isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(true, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Apply</span>\r\n </ion-button>\r\n <ion-button *ngIf=\"isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(false, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Undo Apply</span>\r\n </ion-button>\r\n </div>\r\n </div>\r\n</ion-item>\r\n", styles: [".qbcontainer{border-radius:5px;border:1px solid rgba(0,0,0,.08);padding:10px;margin:10px 0;width:100%}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}:host ::ng-deep query-builder .k-dropdown .k-dropdown-wrap,:host ::ng-deep query-builder .k-dropdowntree .k-dropdown-wrap{background-color:#fff}:host ::ng-deep query-builder .customTextbox{width:calc(100% - 440px);min-width:230px}:host ::ng-deep query-builder .customCheckBox{width:27px;height:27px}:host ::ng-deep query-builder .buttonadd{background-color:#479400;color:#fff;border-color:#479400}:host ::ng-deep query-builder .buttonremove{background-color:#f04141;color:#fff;border-color:#f04141;margin-top:0}.buttonapply{background-color:#5596e6;color:#fff;border-color:#5596e6}\n"] }]
|
|
9197
|
+
args: [{ selector: 'app-zquerybuilder', template: "<ion-item *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <ion-label [attr.for]=\"data.Value\"\r\n *ngIf=\"data.ShowLabel === undefined || data.ShowLabel\"\r\n [position]=\"data.LabelPosition ? data.LabelPosition : 'stacked'\">\r\n {{data.Label}}\r\n <ion-text *ngIf=\"(!!componentProperties.isRequiredField ? group[componentProperties.isRequiredField] : componentProperties.isRequired)\"\r\n color=\"danger\">*</ion-text>\r\n </ion-label>\r\n <div class=\"qbcontainer\">\r\n <query-builder [(ngModel)]='queryCtrl'\r\n [(config)]='currentConfig'\r\n [allowRuleset]='allowRuleset'\r\n [allowCollapse]='allowCollapse'\r\n [filters]='filters'\r\n [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <!--AND OR Swtich-->\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"ruleset.condition\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"conditionList\"\r\n [disabled]=\"isDisabled\"\r\n style=\"text-transform: uppercase;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Rule RuleSet Remove Rule Set Button-->\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <!--Add Rule Button-->\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRule()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add</span>\r\n </ion-button>\r\n <!--Add RuleSet Button-->\r\n <ion-button *ngIf=\"addRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add Rule Set</span>\r\n </ion-button>\r\n <!--Remove RuleSet Button-->\r\n <ion-button *ngIf=\"removeRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'times'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule Set</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Remove Rule Button-->\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRule(rule)\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'minus'\"\r\n style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Name dropdown-->\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields=getFields\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.field\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getFields(rule.entity)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Operator dropdown-->\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\" style=\"padding:10px\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.operator\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getOperators(operators, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Text Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'string'; let onChange=onChange\">\r\n <kendo-textbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [clearButton]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n class=\"customTextbox\">\r\n </kendo-textbox>\r\n </ng-container>\r\n <!--TextArea Field-->\r\n <ng-container *queryInput=\"let rule; type: 'textarea'; let onChange=onChange\">\r\n <kendo-textarea [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [rows]=\"5\"\r\n [cols]=\"40\"\r\n resizable=\"none\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-textarea>\r\n </ng-container>\r\n <!--Number Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'number'; let onChange=onChange\">\r\n <kendo-numerictextbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [value]=\"value\"\r\n [decimals]=\"0\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-numerictextbox>\r\n </ng-container>\r\n <!--Date Field-->\r\n <ng-container *queryInput=\"let rule; type: 'date'; let onChange=onChange\">\r\n <kendo-datepicker [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n calendarType=\"classic\"\r\n [value]=\"value\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-datepicker>\r\n </ng-container>\r\n <!--Category Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'category'; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--DropDown MultiSelect Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'multiselect'; let onChange=onChange\">\r\n <kendo-multiselect [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [autoClose]=\"false\"\r\n style=\"width:30%\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-multiselect>\r\n </ng-container>\r\n <!--Boolean Field-->\r\n <ng-container *queryInput=\"let rule; type: 'boolean'; let onChange=onChange\">\r\n <input type=\"checkbox\"\r\n [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n class=\"customCheckBox\"\r\n [disabled]=\"isDisabled\"\r\n kendoCheckBox />\r\n </ng-container>\r\n </query-builder>\r\n <br>\r\n <div *ngIf=\"data.ShowQueryResult\">\r\n <div>\r\n <label>Query Result</label>\r\n </div>\r\n <textarea class=\"output\"\r\n resizable=\"none\"\r\n [rows]=\"10\"\r\n [cols]=\"40\">{{queryCtrl | json}}</textarea>\r\n <br>\r\n </div>\r\n <div style=\"width:100%\" slot=\"end\">\r\n <ion-button *ngIf=\"!isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(true, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Apply</span>\r\n </ion-button>\r\n <ion-button *ngIf=\"isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(false, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Undo Apply</span>\r\n </ion-button>\r\n </div>\r\n </div>\r\n</ion-item>\r\n", styles: [".qbcontainer{border-radius:5px;border:1px solid rgba(0,0,0,.08);padding:10px;margin:10px 0;width:100%}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}:host ::ng-deep query-builder .k-dropdown .k-dropdown-wrap,:host ::ng-deep query-builder .k-dropdowntree .k-dropdown-wrap{background-color:#fff}:host ::ng-deep query-builder .customTextbox{width:calc(100% - 440px);min-width:230px}:host ::ng-deep query-builder .customCheckBox{width:27px;height:27px}:host ::ng-deep query-builder .buttonadd{background-color:#479400;color:#fff;border-color:#479400}:host ::ng-deep query-builder .buttonremove{background-color:#f04141;color:#fff;border-color:#f04141;margin-top:0}.buttonapply{background-color:#5596e6;color:#fff;border-color:#5596e6}\n"] }]
|
|
9192
9198
|
}], ctorParameters: function () { return [{ type: i1.FieldService }, { type: i1.ResourceApiService }, { type: i1.WebApiService }]; }, propDecorators: { queryBuilder: [{
|
|
9193
9199
|
type: ViewChild,
|
|
9194
9200
|
args: [QueryBuilderComponent, { static: false }]
|