ngx-wapp-components 1.11.7 → 1.11.8

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.
@@ -1,5 +1,5 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { QBDataTypeEnum } from '../../shared/models/enums.model';
2
+ import { OperatorEnum, QBDataTypeEnum } from '../../shared/models/enums.model';
3
3
  import { QueryResultType } from '../../shared/models/filter-panel/query-results.model';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/forms";
@@ -145,9 +145,11 @@ export class WFilterPanelComponent {
145
145
  advancedQueryValue: queries.advanced,
146
146
  groupedQueryValue: queries.grouped
147
147
  };
148
- this.sessionStorage.setLastFilterPanelQuery(this.tenantId, storedQuery);
149
148
  queries = this.deleteFieldsWithoutValue(queries);
150
149
  queries = this.handleEmptyFieldsQuery(queries);
150
+ //La siguiente función, no gestiona agrupados
151
+ this.nullableFilterOperationHandle(queries.basic ? queries.basic : queries.advanced);
152
+ this.sessionStorage.setLastFilterPanelQuery(this.tenantId, storedQuery);
151
153
  this.searchClicked.emit(queries);
152
154
  }
153
155
  onClearClicked() {
@@ -169,6 +171,19 @@ export class WFilterPanelComponent {
169
171
  }
170
172
  return queries;
171
173
  }
174
+ nullableFilterOperationHandle(query) {
175
+ if ("rules" in query) {
176
+ query.rules.forEach((rule) => {
177
+ this.nullableFilterOperationHandle(rule);
178
+ });
179
+ }
180
+ else {
181
+ if (query.operator === OperatorEnum.Nullable) {
182
+ query.value == 1 ? query.operator = 'is not' : query.operator = 'is';
183
+ query.value = 'null';
184
+ }
185
+ }
186
+ }
172
187
  getQueryType() {
173
188
  if (!this.isAdvancedSearch) {
174
189
  return QueryResultType.Basic;
@@ -416,10 +431,10 @@ export class WFilterPanelComponent {
416
431
  }
417
432
  }
418
433
  WFilterPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WFilterPanelComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ApiService }, { token: i3.SessionStorageService }], target: i0.ɵɵFactoryTarget.Component });
419
- WFilterPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: WFilterPanelComponent, selector: "w-filter-panel", inputs: { authorizationApiUrl: ["apiUrl", "authorizationApiUrl"], commonDataApiUrl: "commonDataApiUrl", segmentationApiUrl: "segmentationApiUrl", token: "token", commonDataToken: "commonDataToken", segmentationToken: "segmentationToken", filterId: "filterId", dataIsLoadingSearchButton: "dataIsLoadingSearchButton", tenantId: "tenantId", translationsObject: "translationsObject" }, outputs: { searchClicked: "searchClicked", clearClicked: "clearClicked", lastQuery: "lastQuery" }, ngImport: i0, template: "<!-- TODO: Intentar otra vez pasar los componentes a los de w- porque no se alinena y el w-edit-select no va bien en field. \r\n Ahora se conservan los de p-w con estilos. -->\r\n<p-blockUI styleClass=\"w-filter-panel-blockui\" [autoZIndex]=\"false\" [target]=\"filterPanel\" [blocked]=\"dataIsLoadingSearchButton\"></p-blockUI>\r\n\r\n<p-card styleClass=\"w-filter-panel-no-style-card\" #filterPanel>\r\n <div *ngIf=\"queryConfigReady\" class=\"w-filter-panel-styles\">\r\n <div *ngIf=\"!filterPanelObject.allowAdvancedSearch; else baiscAndAdvanced\">\r\n <div [ngClass]=\"{ 'w-filter-panel-container-advanced' : isAdvancedSearch, 'w-filter-panel-container-basic' : !isAdvancedSearch }\">\r\n <ng-container *ngTemplateOutlet=\"basic\"></ng-container>\r\n <div class=\"flex justify-content-end button-gap\">\r\n <w-button [label]=\"translationsObject.clearButtonLabel\" type=\"tertiary\" size=\"small\" (onClick)=\"onClearClicked()\"></w-button>\r\n <w-button [label]=\"translationsObject.searchButtonLabel\" size=\"small\" (onClick)=\"onSearchClicked()\"></w-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #baiscAndAdvanced>\r\n <div [ngClass]=\"{ 'w-filter-panel-container-advanced' : isAdvancedSearch, 'w-filter-panel-container-basic' : !isAdvancedSearch }\">\r\n <div *ngIf=\"!isAdvancedSearch; else advancedView\">\r\n <ng-container *ngTemplateOutlet=\"basic\"></ng-container>\r\n </div>\r\n <ng-template #advancedView>\r\n <ng-container *ngTemplateOutlet=\"advanced\"></ng-container>\r\n </ng-template>\r\n\r\n <div class=\"flex justify-content-end button-gap\" [class.pt-3]=\"isAdvancedSearch\">\r\n <w-button [label]=\"translationsObject.clearButtonLabel\" type=\"tertiary\" size=\"small\" (onClick)=\"onClearClicked()\"></w-button>\r\n <w-button [label]=\"translationsObject.searchButtonLabel\" size=\"small\" (onClick)=\"onSearchClicked()\" [loading]=\"dataIsLoadingSearchButton\"></w-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</p-card>\r\n\r\n <ng-template #basic>\r\n <div *ngIf=\"filterPanelObject.allowAdvancedSearch\" class=\"flex justify-content-end flex-wrap\">\r\n <w-button [label]=\"translationsObject.advancedSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <div class=\"w-filter-panel-basic query-builder-style fadein animation-duration-500\">\r\n <query-builder [formControl]='queryCtrl' [config]='basicQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <ng-container *queryButtonGroup=\"let ruleset;\">\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown [disabled]=\"true\" class=\" w-edit-select-small\" *ngIf=\"false\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields; let value=value; let name=name; let index=index\">\r\n <span appendTo=\"body\" class=\"w-4 text-left w-filter-panel-input-text-label\" [class.w-filter-panel-boolean-label-width]=\"fieldIsBoolean(rule.field, getFields(rule.entity))\" optionLabel=\"name\" optionValue=\"value\">{{ getQueryFieldName(rule.field, getFields(rule.entity))}}</span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\" w-edit-select-small\" *ngIf=\"isAdvancedSearch\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <w-toggle-button size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"w-edit-calendar\" style=\"width: 100%;\">\r\n <w-edit-calendar appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-inputNumber inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-dropdown class=\"w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [filter]=\"true\" [showClear]=\"true\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-text-small-height w-edit-input-text-small\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Multiselect.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-multiSelect class=\"w-edit-multiselect-small\" [appendTo]=\"'body'\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" display=\"chip\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-multiSelect>\r\n </span>\r\n </ng-container>\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Address.toString(); let onChange=onChange\">\r\n <w-address-field [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [operator]=\"rule.operator\" [segmentationApiUrl]=\"segmentationApiUrl\" [segmentationApiToken]=\"segmentationToken\"></w-address-field>\r\n </ng-container>\r\n </query-builder>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!isAdvancedSearch && basicQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n\r\n </ng-template>\r\n\r\n <ng-template #advanced>\r\n <div [class.query-builder-style]=\"!filterPanelObject.allowRuleSet\" class=\"w-filter-panel-container fadein animation-duration-500\">\r\n <div *ngIf=\"filterPanelObject.allowRuleSet\" class=\"flex justify-content-end flex-wrap\">\r\n <w-button class=\"mb-2\" [label]=\"translationsObject.basicSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <query-builder [formControl]='advancedQueryCtrl' [config]='advancedQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowCollapse]='filterPanelObject.allowColapse' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <div *ngIf=\"filterPanelObject.allowRuleSet; else noRuleSet\">\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-template #noRuleSet>\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <div class=\"flex justify-content-end flex-wrap\">\r\n <w-button [label]=\"translationsObject.basicSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <span class=\"advanced-query-button-group gap-3\">\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n <ng-container *queryArrowIcon>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-angle-right\" class=\"p-button-rounded p-button-text\"></button>\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <w-button class=\"\" label=\"\" size=\"small\" type=\"tertiary\" icon=\"pi pi-times\" (onClick)=\"removeRule(rule)\"></w-button>\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <div *ngIf=\"ruleset\" class=\"w-filter-panel-switch-group-padding\">\r\n <w-select-button *ngIf=\"filterPanelObject.allowLogicalRule\" [stateOptions]=\"[{label: 'And', value: 'and'}, {label: 'Or', value: 'or'}]\"\r\n [(ngModel)]=\"ruleset.condition\"\r\n [size]=\"'small'\"\r\n (value)=\"ruleset.condition = $event\">\r\n </w-select-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown *ngIf=\"filterPanelObject.enityMode\" class=\"field-gap w-edit-select-small w-entity-dropdown\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n <span class=\"query-builder-field-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n <!-- <w-list-field class=\"field-gap\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" [operator]=\"'='\" (ngModelChange)=\"onChange($event, rule)\" [onlyDropdown]=\"true\"></w-list-field> -->\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <w-toggle-button class=\"field-gap toggle-button-align\" size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-edit-calendar class=\"field-gap\" appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [filter]=\"true\" [showClear]=\"true\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width field-gap\">\r\n <w-list-field [options]=\"options\" [(ngModel)]=\"rule.value\" [operator]=\"rule.operator\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></w-list-field>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\"field-gap query-builder-input-width w-edit-input-text-small-height w-edit-input-text-small\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Multiselect.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-multiSelect class=\"w-edit-multiselect-small\" [appendTo]=\"'body'\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" display=\"chip\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-multiSelect>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Address.toString(); let onChange=onChange\">\r\n <w-address-field [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [operator]=\"rule.operator\" [segmentationApiUrl]=\"segmentationApiUrl\" [segmentationApiToken]=\"segmentationToken\" [selectPlaceholder]=\"translationsObject.fieldsPlaceholders.list\"></w-address-field>\r\n </ng-container>\r\n </query-builder>\r\n\r\n <ng-container *ngIf=\"isAdvancedSearch && advancedQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- Grouped filter -->\r\n <div *ngIf=\"filterPanelObject.allowGrouped\">\r\n <div class=\"py-5\">\r\n <w-view-card-title-text [cardTitle]=\"translationsObject.groupedFilterTitle\"></w-view-card-title-text>\r\n </div>\r\n\r\n <query-builder [formControl]='groupedQueryCtrl' [config]='advancedQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowCollapse]='filterPanelObject.allowColapse' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <div class=\"flex gap-3 mb-3\">\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryArrowIcon>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-angle-right\" class=\"p-button-rounded p-button-text\"></button>\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <w-button class=\"\" label=\"\" size=\"small\" type=\"tertiary\" icon=\"pi pi-times\" (onClick)=\"removeRule(rule)\"></w-button>\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <div *ngIf=\"ruleset\">\r\n <w-select-button *ngIf=\"filterPanelObject.allowLogicalRule\" [stateOptions]=\"[{label: 'And', value: 'and'}, {label: 'Or', value: 'or'}]\"\r\n [(ngModel)]=\"ruleset.condition\"\r\n [size]=\"'small'\"\r\n (value)=\"ruleset.condition = $event\">\r\n </w-select-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" *ngIf=\"filterPanelObject.enityMode\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n <span class=\"query-builder-field-width\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <w-toggle-button class=\"mr-3\" size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-edit-calendar class=\"field-gap\" appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber class=\"mr-3\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-list-field [options]=\"options\" [(ngModel)]=\"rule.value\" [operator]=\"rule.operator\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></w-list-field>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\"mr-3 query-builder-input-width w-edit-input-text-small-height wapp-input\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n </query-builder>\r\n\r\n <ng-container *ngIf=\"isAdvancedSearch && groupedQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #noQueryData>\r\n <div class=\"flex justify-content-center flex-wrap card-container surface-50 mb-3\">\r\n <div class=\"flex align-items-center justify-content-center w-full h-4rem text-gray-900 border-round m-2\">\r\n {{translationsObject.noRulesLabel}}\r\n </div>\r\n </div>\r\n </ng-template>\r\n", styles: [".heading1{font-size:2.6666666667rem;line-height:3rem;font-weight:700}.heading2{font-size:2.3333333333rem;line-height:2.6666666667rem;font-weight:700}.heading3{font-size:2rem;line-height:2.3333333333rem;font-weight:700}.heading4{font-size:1.6666666667rem;line-height:2rem;font-weight:400}.heading5{font-size:1.5rem;line-height:1.8333333333rem;font-weight:600}.heading6{font-size:1.3333333333rem;line-height:1.6666666667rem;font-weight:400}.subtitle1,.w-tab-text,.w-panel-title-text,.w-sidebar-title-text{font-size:1.1666666667rem;line-height:1.3333333333rem;font-weight:600}.subtitle2,.w-table-th-text,.w-panel-subtitle-text,.w-input-small-label-text-typography,.w-input-small-label-text,.w-filter-panel-input-text-label,.w-input-small-label-disabled,.w-view-small-label-text-typography,.w-view-small-label-text,.w-button-small-text-label-text-typography,.w-button-small-text-label-text{font-size:1rem;line-height:1.3333333333rem;font-weight:600}.body,.w-image-file-uploader-navigators-text,.w-table-td-text,.w-chip-text,.w-panel-content,.w-input-small-select-options-text,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item,.w-input-small-placeholder-text-typography,.w-input-small-placeholder-text-disabled,.w-input-small-placeholder-text,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-label,:host ::ng-deep .w-edit-select-small .p-inputtext,::ng-deep .w-edit-input-text-small.p-inputtext,.w-view-small-value-text-typography,.w-view-small-value-text,.w-button-small-label-text-typography,.w-button-small-tertiary-label-text{font-size:1rem;line-height:1.3333333333rem;font-weight:400}.caption,.w-input-error-alert-text,.w-input-warning-alert-text,.w-input-success-alert-text{font-size:.6666666667rem;line-height:1rem;font-weight:400}.text846{color:#2e3134}.text700{color:#5f6368}.text500{color:#9aa0a6}.textWhite{color:#fff}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.focus,::ng-deep .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext:focus,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:focus,:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus,:host ::ng-deep .w-edit-multiselect-small .p-multiselect.p-focus,:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled).p-focus,.w-edit-input-text-small:focus{box-shadow:0 0 8px #00a6e980}.hover,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:hover,.w-edit-input-text-small:hover{border-radius:8px;border:1px solid #00b2eb}.input-generic-valid{border-radius:8px;border:1px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:1px solid #B3FFD3!important;box-shadow:0 0 8px #46ff9b80!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:1px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:1px solid #FFECB8!important;box-shadow:0 0 8px #ffcd4680!important;padding-left:16px}.input-generic-error-focus{border-radius:8px;border:1px solid #FFBDBD!important;box-shadow:0 0 8px #ff555580!important;padding-left:16px}.input-generic-error{border-radius:8px;border:1px solid #FFBDBD}.toggle-small-typography{font-size:12px;line-height:16px;font-weight:600}.w-button-small-tertiary-label-text,.w-button-small-text-label-text{color:#2e3134}.w-button-small-icon-text{font-size:12px}.w-control-button-small-label-text{font-size:12px;font-weight:600;line-height:16px}.w-control-button-x-small-icon-text,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-token .p-multiselect-token-icon{font-size:10px;font-weight:700}.w-control-button-small-icon-text,::ng-deep .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:700}.w-button-medium-label-text-typography,.w-button-medium-tertiary-label-text{font-size:16px;font-weight:400;line-height:16px}.w-button-medium-tertiary-label-text{color:#2e3134}.w-button-medium-icon-text{font-size:16px}.w-control-button-medium-label-text{font-size:14px;font-weight:600;line-height:16px}.w-control-button-medium-icon-text{font-size:12px;font-weight:700}.w-button-large-label-text-typography,.w-button-large-tertiary-label-text{font-size:20px;font-weight:400;line-height:24px}.w-button-large-tertiary-label-text{color:#2e3134}.w-button-x-small-label-text,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-token{font-size:10px;font-weight:600;line-height:10px}.w-button-small-only-label-text{font-size:12px;font-weight:600;line-height:16px}.w-button-large-icon-text{font-size:24px}.w-view-small-label-text,.w-view-small-value-text{color:#2e3134}.w-input-no-label-height{height:36px}.w-input-disabled,:host ::ng-deep .w-edit-select-small .p-disabled{background-color:#f1f3f4;border-color:#e8eaed;opacity:1}.w-input-small-label-text,.w-filter-panel-input-text-label,.w-input-small-label-disabled{color:#2e3134}.w-input-small-label-disabled{color:#9aa0a6}.w-input-small-label-text-content{padding:12px 8px 8px 0;margin:0}.w-input-small-label-text-content-no-top{padding-top:0}.w-input-small-placeholder-text,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-label,:host ::ng-deep .w-edit-select-small .p-inputtext,::ng-deep .w-edit-input-text-small.p-inputtext{color:#2e3134}.w-input-small-placeholder-text-only-color,:host ::ng-deep .w-edit-multiselect-small .p-multiselect .p-multiselect-label.p-placeholder,:host ::ng-deep .w-edit-select-small .p-dropdown .p-placeholder{color:#2e3134}.w-input-small-placeholder-text-disabled{color:#5f6368}.w-input-small-placeholder-text-disabled-only-color,:host ::ng-deep .w-edit-select-small .p-disabled .p-inputtext{color:#5f6368}.w-input-small-text-icon{color:#2e3134}.w-input-small-select-options-text,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item{color:#2e3134}.w-input-medium-label-text-typography,.w-input-medium-label-text,.w-input-medium-label-disabled{font-size:14px;font-weight:600;line-height:16px}.w-input-medium-label-text,.w-input-medium-label-disabled{color:#2e3134}.w-input-medium-label-disabled{color:#9aa0a6}.w-input-medium-placeholder-text-typography,.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text{font-size:16px;font-weight:400;line-height:24px}.w-input-medium-placeholder-text,.w-input-medium-placeholder-text-only-color{color:#2e3134}.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text-disabled-only-color{color:#5f6368}.w-input-medium-text-icon{color:#2e3134}.w-input-medium-select-options-text,:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item{font-size:16px;font-weight:400;line-height:24px;color:#2e3134}.w-input-success-alert-text{color:#00db5d;padding:8px 8px 0;margin-top:0}.w-input-warning-alert-text{color:#eeae00;padding:8px 8px 0;margin-top:0}.w-input-error-alert-text{color:#e50000;padding:8px 8px 0;margin-top:0}.w-input-alert-message-height{height:32px}.w-sidebar-title-text,.w-panel-title-text,.w-panel-subtitle-text{color:#2e3134}.w-panel-content{color:#5f6368}.w-tab-text,.w-chip-text{color:#2e3134}.w-badge-text{font-size:8px;font-weight:700;line-height:8px}.w-table-th-text{color:#2e3134}.w-table-td-text{color:#5f6368}.w-image-file-uploader-navigators-text{font-size:12px;color:#fff}.w-filter-panel-container-basic,.w-filter-panel-container-advanced{padding:16px 20px 20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a;margin-bottom:0}::ng-deep .w-filter-panel-basic .q-row{margin-top:6px!important;margin-bottom:6px!important;padding:0 0 0 6px!important}::ng-deep .w-filter-panel-container-advanced .q-row{padding:0!important;margin-bottom:8px!important}.field-gap{margin-right:8px}.button-gap{gap:16px}.w-filter-panel-switch-group-padding{padding-bottom:16px}::ng-deep .query-builder-style ul li{border:none!important;background:transparent!important;padding-left:0!important}::ng-deep .query-builder-style .q-connector:before{content:none!important}::ng-deep .query-builder-style .q-connector:after{border-width:0px!important}::ng-deep .query-builder-style .q-tree{padding:0!important}::ng-deep .query-builder-field-width .p-dropdown{width:20%}::ng-deep .query-builder-operator-width .p-dropdown{width:10%}.query-builder-input-width{width:40%}::ng-deep .query-builder-input-width .p-dropdown{width:40%}::ng-deep .query-builder-input-width .p-calendar{width:40%}::ng-deep .query-builder-input-width .w-edit-calendar-medium-display-block{width:40%}::ng-deep .w-edit-calendar .w-edit-calendar-styles{width:100%!important}.w-filter-panel-container.query-builder-style{display:flex;flex-direction:column;justify-content:space-between;position:relative}.advanced-query-button-group{position:absolute;bottom:0;left:0;margin-bottom:-46px}.w-edit-input-text-small-height{height:32px}::ng-deep .w-edit-input-text-small.p-inputtext{border-radius:8px;border-width:1px;padding:7px 11px;border:1px solid #e8eaed}.w-edit-input-text-small:focus{border-radius:8px;border:1px solid #d6f2ff;padding-left:11px}:host ::ng-deep .w-edit-calendar-display-blok{width:40%}:host ::ng-deep .w-edit-select-small .p-dropdown{height:32px;border-width:1px;border-radius:8px;border-color:#e8eaed}:host ::ng-deep .w-edit-select-small .p-inputtext{padding:0 0 0 12px;align-self:center}:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled):hover{border:1px solid #00b2eb}:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled).p-focus{border:1px solid #d6f2ff}:host ::ng-deep .w-edit-select-small .p-dropdown .p-dropdown-trigger{width:auto;height:28px;padding-right:12px}:host ::ng-deep .w-entity-dropdown .p-dropdown .p-dropdown-trigger{width:auto;height:28px;padding-right:12px;padding-left:12px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel{padding:8px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items{padding:0}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:8px;margin-bottom:4px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item:hover{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight{background:#d6f2ff;border-radius:8px;color:#000}::ng-deep .select-disabled .p-dropdown .p-dropdown-trigger{display:none}:host ::ng-deep .w-edit-multiselect-small .p-multiselect{border:1px solid #e8eaed;border-radius:8px}:host ::ng-deep p-multiselect.w-edit-multiselect-small.p-multiselect-clearable .p-multiselect-label-container{padding-right:20px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect:hover{border:1px solid #00b2eb}:host ::ng-deep .w-edit-multiselect-small .p-multiselect.p-focus{border:1px solid #d6f2ff}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-label{padding:7px 0 7px 11px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect.p-multiselect-chip .p-multiselect-label{padding:7px 0 7px 12px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-token{height:16px;padding:3px 12px;border-radius:7px;border-width:1px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel{border:1px solid #e8eaed}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext{padding:7px 35px 7px 11px;align-self:center}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items{padding:8px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item{padding:7px;margin-bottom:4px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item:hover{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item.p-highlight{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item:not(.p-highlight):not(.p-disabled):hover{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-multiselect-small .p-checkbox{height:16px;width:16px;border-width:1px}:host ::ng-deep .w-edit-multiselect-small .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px;border:1px solid #dadce0;align-self:center}:host ::ng-deep .w-edit-multiselect-small .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:700}:host ::ng-deep .w-edit-multiselect-small .p-checkbox .p-checkbox-box.p-highlight{border-color:#00b2eb;background:#00b2eb}:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{background-color:#dadce0;border:1px solid #dadce0}:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{background-color:#00b2eb;border:1px solid #d6f2ff}:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:not(.p-highlight).p-focus{background-color:#dadce0;border:1px solid #dadce0}:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:#00b2eb;background:#00b2eb}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-header{padding:7px 15px}:host ::ng-deep .w-edit-input-number-small-height .p-inputnumber .p-inputnumber-input{height:32px!important}.w-filter-panel-container-advanced .w-edit-input-number-small{width:40%!important}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input{border-radius:8px;border-width:1px;padding:7px 11px!important;width:100%;border:1px solid #e8eaed}::-webkit-input-placeholder{color:#5f6368}::-moz-placeholder{color:#5f6368}:-ms-input-placeholder{color:#5f6368}:-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:focus{border-radius:8px;border:1px solid #d6f2ff;padding-left:11px}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input::-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input::-webkit-input-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:-ms-input-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:disabled{background-color:#f1f3f4;border-color:#e8eaed;color:#5f6368;opacity:1}.w-filter-panel-input-text-label{padding:8px 6px 12px;margin:0}.w-filter-panel-basic-query-builder-input-width{width:100%!important}::ng-deep .w-filter-panel-basic-query-builder-input-width .p-dropdown{width:100%!important}::ng-deep .w-filter-panel-basic-query-builder-input-width .p-multiselect{width:100%!important}::ng-deep .w-filter-panel-basic .q-tree-container{margin:8px 0 16px}::ng-deep .w-filter-panel-basic .q-row:not(:nth-child(3n)){display:flex!important;width:33.3333%;padding-right:64px!important}::ng-deep .w-filter-panel-basic .q-row:nth-child(3n){display:flex!important;width:33.3333%;padding-right:0!important}::ng-deep .w-filter-panel-basic .q-tree{margin:0!important;display:flex;flex-wrap:wrap;justify-content:flex-start}.w-filter-panel-boolean-label-width{width:25.5%!important}::ng-deep .q-rule{border:none!important}:host ::ng-deep .w-filter-panel-no-style-card.p-card{box-shadow:none!important}:host ::ng-deep .w-filter-panel-no-style-card.p-card .p-card-content{padding:0!important}:host ::ng-deep .w-filter-panel-no-style-card.p-card .p-card-body{padding:0!important}::ng-deep .w-filter-panel-blockui.p-blockui{opacity:0!important}::ng-deep .p-multiselect-label-container{width:200px}::ng-deep .p-checkbox{height:32px;justify-content:start;align-content:center;align-items:center;display:grid}::ng-deep .p-checkbox{justify-content:start;align-content:center;align-items:center;display:grid}::ng-deep .p-checkbox{height:16px;width:16px;border-radius:4px;margin-right:12px}::ng-deep .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px}::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{background-color:#dadce0!important;border:1px solid #dadce0!important}::ng-deep .p-multiselect-panel .p-multiselect-items .p-multiselect-item .p-checkbox{margin-right:12px!important}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#1f5b72!important;background-color:#1f5b72!important}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{border-color:#1f5b72!important;background-color:#1f5b72!important}::ng-deep .p-multiselect-panel .p-multiselect-header .p-checkbox{margin-right:12px}::ng-deep .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext{height:28px!important}::ng-deep .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext:focus{border:1px solid #e8eaed;border-radius:8px}::ng-deep .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext:hover{border-radius:8px;border:1px solid #00b2eb}\n"], dependencies: [{ kind: "directive", type: i4.InputText, selector: "[pInputText]" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i7.Ripple, selector: "[pRipple]" }, { kind: "component", type: i8.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "overlayDirection", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i9.MultiSelect, selector: "p-multiSelect", inputs: ["style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "label", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove"] }, { kind: "component", type: i10.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: i11.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"] }, { kind: "directive", type: i11.QueryInputDirective, selector: "[queryInput]", inputs: ["queryInputType"] }, { kind: "directive", type: i11.QueryOperatorDirective, selector: "[queryOperator]" }, { kind: "directive", type: i11.QueryFieldDirective, selector: "[queryField]" }, { kind: "directive", type: i11.QueryEntityDirective, selector: "[queryEntity]" }, { kind: "directive", type: i11.QueryButtonGroupDirective, selector: "[queryButtonGroup]" }, { kind: "directive", type: i11.QuerySwitchGroupDirective, selector: "[querySwitchGroup]" }, { kind: "directive", type: i11.QueryRemoveButtonDirective, selector: "[queryRemoveButton]" }, { kind: "directive", type: i11.QueryArrowIconDirective, selector: "[queryArrowIcon]" }, { kind: "component", type: i12.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "component", type: i13.BlockUI, selector: "p-blockUI", inputs: ["target", "autoZIndex", "baseZIndex", "styleClass", "blocked"] }, { kind: "component", type: i14.WButtonComponent, selector: "w-button", inputs: ["type", "label", "size", "icon", "tooltipPosition", "tooltip", "disabled", "loading"], outputs: ["onClick"] }, { kind: "component", type: i15.WListFieldComponent, selector: "w-list-field", inputs: ["options", "operator", "placeholder", "onlyDropdown"] }, { kind: "component", type: i16.WViewCardTitleTextComponent, selector: "w-view-card-title-text", inputs: ["cardTitle"] }, { kind: "component", type: i17.WToggleButtonComponent, selector: "w-toggle-button", inputs: ["onLabel", "offLabel", "size", "onIcon", "offIcon", "tooltipPosition", "tooltip", "disabled", "formControl"], outputs: ["onChange"] }, { kind: "component", type: i18.WSelectButtonComponent, selector: "w-select-button", inputs: ["stateOptions", "size", "tooltipPosition", "tooltip", "disabled", "formControl"], outputs: ["onChange"] }, { kind: "component", type: i19.WEditCalendarComponent, selector: "w-edit-calendar", inputs: ["label", "showTime", "showSeconds", "timeOnly", "showIcon", "placeholder", "minDate", "maxDate", "disabled", "size", "formControl", "displayInlineBlock", "required", "requiredErrorDescription", "removePaddingTop"], outputs: ["onChange"] }, { kind: "component", type: i20.WAddressFieldComponent, selector: "w-address-field", inputs: ["operator", "selectPlaceholder", "segmentationApiUrl", "segmentationApiToken"] }] });
434
+ WFilterPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: WFilterPanelComponent, selector: "w-filter-panel", inputs: { authorizationApiUrl: ["apiUrl", "authorizationApiUrl"], commonDataApiUrl: "commonDataApiUrl", segmentationApiUrl: "segmentationApiUrl", token: "token", commonDataToken: "commonDataToken", segmentationToken: "segmentationToken", filterId: "filterId", dataIsLoadingSearchButton: "dataIsLoadingSearchButton", tenantId: "tenantId", translationsObject: "translationsObject" }, outputs: { searchClicked: "searchClicked", clearClicked: "clearClicked", lastQuery: "lastQuery" }, ngImport: i0, template: "<!-- TODO: Intentar otra vez pasar los componentes a los de w- porque no se alinena y el w-edit-select no va bien en field. \r\n Ahora se conservan los de p-w con estilos. -->\r\n<p-blockUI styleClass=\"w-filter-panel-blockui\" [autoZIndex]=\"false\" [target]=\"filterPanel\" [blocked]=\"dataIsLoadingSearchButton\"></p-blockUI>\r\n\r\n<p-card styleClass=\"w-filter-panel-no-style-card\" #filterPanel>\r\n <div *ngIf=\"queryConfigReady\" class=\"w-filter-panel-styles\">\r\n <div *ngIf=\"!filterPanelObject.allowAdvancedSearch; else baiscAndAdvanced\">\r\n <div [ngClass]=\"{ 'w-filter-panel-container-advanced' : isAdvancedSearch, 'w-filter-panel-container-basic' : !isAdvancedSearch }\">\r\n <ng-container *ngTemplateOutlet=\"basic\"></ng-container>\r\n <div class=\"flex justify-content-end button-gap\">\r\n <w-button [label]=\"translationsObject.clearButtonLabel\" type=\"tertiary\" size=\"small\" (onClick)=\"onClearClicked()\"></w-button>\r\n <w-button [label]=\"translationsObject.searchButtonLabel\" size=\"small\" (onClick)=\"onSearchClicked()\"></w-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #baiscAndAdvanced>\r\n <div [ngClass]=\"{ 'w-filter-panel-container-advanced' : isAdvancedSearch, 'w-filter-panel-container-basic' : !isAdvancedSearch }\">\r\n <div *ngIf=\"!isAdvancedSearch; else advancedView\">\r\n <ng-container *ngTemplateOutlet=\"basic\"></ng-container>\r\n </div>\r\n <ng-template #advancedView>\r\n <ng-container *ngTemplateOutlet=\"advanced\"></ng-container>\r\n </ng-template>\r\n\r\n <div class=\"flex justify-content-end button-gap\" [class.pt-3]=\"isAdvancedSearch\">\r\n <w-button [label]=\"translationsObject.clearButtonLabel\" type=\"tertiary\" size=\"small\" (onClick)=\"onClearClicked()\"></w-button>\r\n <w-button [label]=\"translationsObject.searchButtonLabel\" size=\"small\" (onClick)=\"onSearchClicked()\" [loading]=\"dataIsLoadingSearchButton\"></w-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</p-card>\r\n\r\n <ng-template #basic>\r\n <div *ngIf=\"filterPanelObject.allowAdvancedSearch\" class=\"flex justify-content-end flex-wrap\">\r\n <w-button [label]=\"translationsObject.advancedSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <div class=\"w-filter-panel-basic query-builder-style fadein animation-duration-500\">\r\n <query-builder [formControl]='queryCtrl' [config]='basicQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <ng-container *queryButtonGroup=\"let ruleset;\">\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown [disabled]=\"true\" class=\" w-edit-select-small\" *ngIf=\"false\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields; let value=value; let name=name; let index=index\">\r\n <span appendTo=\"body\" class=\"w-4 text-left w-filter-panel-input-text-label\" [class.w-filter-panel-boolean-label-width]=\"fieldIsBoolean(rule.field, getFields(rule.entity))\" optionLabel=\"name\" optionValue=\"value\">{{ getQueryFieldName(rule.field, getFields(rule.entity))}}</span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\" w-edit-select-small\" *ngIf=\"isAdvancedSearch\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <w-toggle-button size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"w-edit-calendar\" style=\"width: 100%;\">\r\n <w-edit-calendar appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-inputNumber inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-dropdown class=\"w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [filter]=\"true\" [showClear]=\"true\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-text-small-height w-edit-input-text-small\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Multiselect.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-multiSelect class=\"w-edit-multiselect-small\" [appendTo]=\"'body'\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" display=\"chip\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-multiSelect>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.NullableSelect.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-dropdown class=\"w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [filter]=\"true\" [showClear]=\"true\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Address.toString(); let onChange=onChange\">\r\n <w-address-field [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [operator]=\"rule.operator\" [segmentationApiUrl]=\"segmentationApiUrl\" [segmentationApiToken]=\"segmentationToken\"></w-address-field>\r\n </ng-container>\r\n </query-builder>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!isAdvancedSearch && basicQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n\r\n </ng-template>\r\n\r\n <ng-template #advanced>\r\n <div [class.query-builder-style]=\"!filterPanelObject.allowRuleSet\" class=\"w-filter-panel-container fadein animation-duration-500\">\r\n <div *ngIf=\"filterPanelObject.allowRuleSet\" class=\"flex justify-content-end flex-wrap\">\r\n <w-button class=\"mb-2\" [label]=\"translationsObject.basicSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <query-builder [formControl]='advancedQueryCtrl' [config]='advancedQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowCollapse]='filterPanelObject.allowColapse' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <div *ngIf=\"filterPanelObject.allowRuleSet; else noRuleSet\">\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-template #noRuleSet>\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <div class=\"flex justify-content-end flex-wrap\">\r\n <w-button [label]=\"translationsObject.basicSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <span class=\"advanced-query-button-group gap-3\">\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n <ng-container *queryArrowIcon>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-angle-right\" class=\"p-button-rounded p-button-text\"></button>\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <w-button class=\"\" label=\"\" size=\"small\" type=\"tertiary\" icon=\"pi pi-times\" (onClick)=\"removeRule(rule)\"></w-button>\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <div *ngIf=\"ruleset\" class=\"w-filter-panel-switch-group-padding\">\r\n <w-select-button *ngIf=\"filterPanelObject.allowLogicalRule\" [stateOptions]=\"[{label: 'And', value: 'and'}, {label: 'Or', value: 'or'}]\"\r\n [(ngModel)]=\"ruleset.condition\"\r\n [size]=\"'small'\"\r\n (value)=\"ruleset.condition = $event\">\r\n </w-select-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown *ngIf=\"filterPanelObject.enityMode\" class=\"field-gap w-edit-select-small w-entity-dropdown\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n <span class=\"query-builder-field-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n <!-- <w-list-field class=\"field-gap\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" [operator]=\"'='\" (ngModelChange)=\"onChange($event, rule)\" [onlyDropdown]=\"true\"></w-list-field> -->\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <w-toggle-button class=\"field-gap toggle-button-align\" size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-edit-calendar class=\"field-gap\" appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [filter]=\"true\" [showClear]=\"true\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width field-gap\">\r\n <w-list-field [options]=\"options\" [(ngModel)]=\"rule.value\" [operator]=\"rule.operator\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></w-list-field>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\"field-gap query-builder-input-width w-edit-input-text-small-height w-edit-input-text-small\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Multiselect.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-multiSelect class=\"w-edit-multiselect-small\" [appendTo]=\"'body'\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" display=\"chip\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-multiSelect>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Address.toString(); let onChange=onChange\">\r\n <w-address-field [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [operator]=\"rule.operator\" [segmentationApiUrl]=\"segmentationApiUrl\" [segmentationApiToken]=\"segmentationToken\" [selectPlaceholder]=\"translationsObject.fieldsPlaceholders.list\"></w-address-field>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.NullableSelect.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [filter]=\"true\" [showClear]=\"true\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n </query-builder>\r\n\r\n <ng-container *ngIf=\"isAdvancedSearch && advancedQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- Grouped filter -->\r\n <div *ngIf=\"filterPanelObject.allowGrouped\">\r\n <div class=\"py-5\">\r\n <w-view-card-title-text [cardTitle]=\"translationsObject.groupedFilterTitle\"></w-view-card-title-text>\r\n </div>\r\n\r\n <query-builder [formControl]='groupedQueryCtrl' [config]='advancedQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowCollapse]='filterPanelObject.allowColapse' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <div class=\"flex gap-3 mb-3\">\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryArrowIcon>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-angle-right\" class=\"p-button-rounded p-button-text\"></button>\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <w-button class=\"\" label=\"\" size=\"small\" type=\"tertiary\" icon=\"pi pi-times\" (onClick)=\"removeRule(rule)\"></w-button>\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <div *ngIf=\"ruleset\">\r\n <w-select-button *ngIf=\"filterPanelObject.allowLogicalRule\" [stateOptions]=\"[{label: 'And', value: 'and'}, {label: 'Or', value: 'or'}]\"\r\n [(ngModel)]=\"ruleset.condition\"\r\n [size]=\"'small'\"\r\n (value)=\"ruleset.condition = $event\">\r\n </w-select-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" *ngIf=\"filterPanelObject.enityMode\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n <span class=\"query-builder-field-width\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <w-toggle-button class=\"mr-3\" size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-edit-calendar class=\"field-gap\" appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber class=\"mr-3\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-list-field [options]=\"options\" [(ngModel)]=\"rule.value\" [operator]=\"rule.operator\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></w-list-field>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\"mr-3 query-builder-input-width w-edit-input-text-small-height wapp-input\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n </query-builder>\r\n\r\n <ng-container *ngIf=\"isAdvancedSearch && groupedQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #noQueryData>\r\n <div class=\"flex justify-content-center flex-wrap card-container surface-50 mb-3\">\r\n <div class=\"flex align-items-center justify-content-center w-full h-4rem text-gray-900 border-round m-2\">\r\n {{translationsObject.noRulesLabel}}\r\n </div>\r\n </div>\r\n </ng-template>\r\n", styles: [".heading1{font-size:2.6666666667rem;line-height:3rem;font-weight:700}.heading2{font-size:2.3333333333rem;line-height:2.6666666667rem;font-weight:700}.heading3{font-size:2rem;line-height:2.3333333333rem;font-weight:700}.heading4{font-size:1.6666666667rem;line-height:2rem;font-weight:400}.heading5{font-size:1.5rem;line-height:1.8333333333rem;font-weight:600}.heading6{font-size:1.3333333333rem;line-height:1.6666666667rem;font-weight:400}.subtitle1,.w-tab-text,.w-panel-title-text,.w-sidebar-title-text{font-size:1.1666666667rem;line-height:1.3333333333rem;font-weight:600}.subtitle2,.w-table-th-text,.w-panel-subtitle-text,.w-input-small-label-text-typography,.w-input-small-label-text,.w-filter-panel-input-text-label,.w-input-small-label-disabled,.w-view-small-label-text-typography,.w-view-small-label-text,.w-button-small-text-label-text-typography,.w-button-small-text-label-text{font-size:1rem;line-height:1.3333333333rem;font-weight:600}.body,.w-image-file-uploader-navigators-text,.w-table-td-text,.w-chip-text,.w-panel-content,.w-input-small-select-options-text,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item,.w-input-small-placeholder-text-typography,.w-input-small-placeholder-text-disabled,.w-input-small-placeholder-text,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-label,:host ::ng-deep .w-edit-select-small .p-inputtext,::ng-deep .w-edit-input-text-small.p-inputtext,.w-view-small-value-text-typography,.w-view-small-value-text,.w-button-small-label-text-typography,.w-button-small-tertiary-label-text{font-size:1rem;line-height:1.3333333333rem;font-weight:400}.caption,.w-input-error-alert-text,.w-input-warning-alert-text,.w-input-success-alert-text{font-size:.6666666667rem;line-height:1rem;font-weight:400}.text846{color:#2e3134}.text700{color:#5f6368}.text500{color:#9aa0a6}.textWhite{color:#fff}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.focus,::ng-deep .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext:focus,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:focus,:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus,:host ::ng-deep .w-edit-multiselect-small .p-multiselect.p-focus,:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled).p-focus,.w-edit-input-text-small:focus{box-shadow:0 0 8px #00a6e980}.hover,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:hover,.w-edit-input-text-small:hover{border-radius:8px;border:1px solid #00b2eb}.input-generic-valid{border-radius:8px;border:1px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:1px solid #B3FFD3!important;box-shadow:0 0 8px #46ff9b80!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:1px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:1px solid #FFECB8!important;box-shadow:0 0 8px #ffcd4680!important;padding-left:16px}.input-generic-error-focus{border-radius:8px;border:1px solid #FFBDBD!important;box-shadow:0 0 8px #ff555580!important;padding-left:16px}.input-generic-error{border-radius:8px;border:1px solid #FFBDBD}.toggle-small-typography{font-size:12px;line-height:16px;font-weight:600}.w-button-small-tertiary-label-text,.w-button-small-text-label-text{color:#2e3134}.w-button-small-icon-text{font-size:12px}.w-control-button-small-label-text{font-size:12px;font-weight:600;line-height:16px}.w-control-button-x-small-icon-text,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-token .p-multiselect-token-icon{font-size:10px;font-weight:700}.w-control-button-small-icon-text,::ng-deep .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:700}.w-button-medium-label-text-typography,.w-button-medium-tertiary-label-text{font-size:16px;font-weight:400;line-height:16px}.w-button-medium-tertiary-label-text{color:#2e3134}.w-button-medium-icon-text{font-size:16px}.w-control-button-medium-label-text{font-size:14px;font-weight:600;line-height:16px}.w-control-button-medium-icon-text{font-size:12px;font-weight:700}.w-button-large-label-text-typography,.w-button-large-tertiary-label-text{font-size:20px;font-weight:400;line-height:24px}.w-button-large-tertiary-label-text{color:#2e3134}.w-button-x-small-label-text,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-token{font-size:10px;font-weight:600;line-height:10px}.w-button-small-only-label-text{font-size:12px;font-weight:600;line-height:16px}.w-button-large-icon-text{font-size:24px}.w-view-small-label-text,.w-view-small-value-text{color:#2e3134}.w-input-no-label-height{height:36px}.w-input-disabled,:host ::ng-deep .w-edit-select-small .p-disabled{background-color:#f1f3f4;border-color:#e8eaed;opacity:1}.w-input-small-label-text,.w-filter-panel-input-text-label,.w-input-small-label-disabled{color:#2e3134}.w-input-small-label-disabled{color:#9aa0a6}.w-input-small-label-text-content{padding:12px 8px 8px 0;margin:0}.w-input-small-label-text-content-no-top{padding-top:0}.w-input-small-placeholder-text,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-label,:host ::ng-deep .w-edit-select-small .p-inputtext,::ng-deep .w-edit-input-text-small.p-inputtext{color:#2e3134}.w-input-small-placeholder-text-only-color,:host ::ng-deep .w-edit-multiselect-small .p-multiselect .p-multiselect-label.p-placeholder,:host ::ng-deep .w-edit-select-small .p-dropdown .p-placeholder{color:#2e3134}.w-input-small-placeholder-text-disabled{color:#5f6368}.w-input-small-placeholder-text-disabled-only-color,:host ::ng-deep .w-edit-select-small .p-disabled .p-inputtext{color:#5f6368}.w-input-small-text-icon{color:#2e3134}.w-input-small-select-options-text,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item{color:#2e3134}.w-input-medium-label-text-typography,.w-input-medium-label-text,.w-input-medium-label-disabled{font-size:14px;font-weight:600;line-height:16px}.w-input-medium-label-text,.w-input-medium-label-disabled{color:#2e3134}.w-input-medium-label-disabled{color:#9aa0a6}.w-input-medium-placeholder-text-typography,.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text{font-size:16px;font-weight:400;line-height:24px}.w-input-medium-placeholder-text,.w-input-medium-placeholder-text-only-color{color:#2e3134}.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text-disabled-only-color{color:#5f6368}.w-input-medium-text-icon{color:#2e3134}.w-input-medium-select-options-text,:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item{font-size:16px;font-weight:400;line-height:24px;color:#2e3134}.w-input-success-alert-text{color:#00db5d;padding:8px 8px 0;margin-top:0}.w-input-warning-alert-text{color:#eeae00;padding:8px 8px 0;margin-top:0}.w-input-error-alert-text{color:#e50000;padding:8px 8px 0;margin-top:0}.w-input-alert-message-height{height:32px}.w-sidebar-title-text,.w-panel-title-text,.w-panel-subtitle-text{color:#2e3134}.w-panel-content{color:#5f6368}.w-tab-text,.w-chip-text{color:#2e3134}.w-badge-text{font-size:8px;font-weight:700;line-height:8px}.w-table-th-text{color:#2e3134}.w-table-td-text{color:#5f6368}.w-image-file-uploader-navigators-text{font-size:12px;color:#fff}.w-filter-panel-container-basic,.w-filter-panel-container-advanced{padding:16px 20px 20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a;margin-bottom:0}::ng-deep .w-filter-panel-basic .q-row{margin-top:6px!important;margin-bottom:6px!important;padding:0 0 0 6px!important}::ng-deep .w-filter-panel-container-advanced .q-row{padding:0!important;margin-bottom:8px!important}.field-gap{margin-right:8px}.button-gap{gap:16px}.w-filter-panel-switch-group-padding{padding-bottom:16px}::ng-deep .query-builder-style ul li{border:none!important;background:transparent!important;padding-left:0!important}::ng-deep .query-builder-style .q-connector:before{content:none!important}::ng-deep .query-builder-style .q-connector:after{border-width:0px!important}::ng-deep .query-builder-style .q-tree{padding:0!important}::ng-deep .query-builder-field-width .p-dropdown{width:20%}::ng-deep .query-builder-operator-width .p-dropdown{width:10%}.query-builder-input-width{width:40%}::ng-deep .query-builder-input-width .p-dropdown{width:40%}::ng-deep .query-builder-input-width .p-calendar{width:40%}::ng-deep .query-builder-input-width .w-edit-calendar-medium-display-block{width:40%}::ng-deep .w-edit-calendar .w-edit-calendar-styles{width:100%!important}.w-filter-panel-container.query-builder-style{display:flex;flex-direction:column;justify-content:space-between;position:relative}.advanced-query-button-group{position:absolute;bottom:0;left:0;margin-bottom:-46px}.w-edit-input-text-small-height{height:32px}::ng-deep .w-edit-input-text-small.p-inputtext{border-radius:8px;border-width:1px;padding:7px 11px;border:1px solid #e8eaed}.w-edit-input-text-small:focus{border-radius:8px;border:1px solid #d6f2ff;padding-left:11px}:host ::ng-deep .w-edit-calendar-display-blok{width:40%}:host ::ng-deep .w-edit-select-small .p-dropdown{height:32px;border-width:1px;border-radius:8px;border-color:#e8eaed}:host ::ng-deep .w-edit-select-small .p-inputtext{padding:0 0 0 12px;align-self:center}:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled):hover{border:1px solid #00b2eb}:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled).p-focus{border:1px solid #d6f2ff}:host ::ng-deep .w-edit-select-small .p-dropdown .p-dropdown-trigger{width:auto;height:28px;padding-right:12px}:host ::ng-deep .w-entity-dropdown .p-dropdown .p-dropdown-trigger{width:auto;height:28px;padding-right:12px;padding-left:12px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel{padding:8px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items{padding:0}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:8px;margin-bottom:4px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item:hover{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight{background:#d6f2ff;border-radius:8px;color:#000}::ng-deep .select-disabled .p-dropdown .p-dropdown-trigger{display:none}:host ::ng-deep .w-edit-multiselect-small .p-multiselect{border:1px solid #e8eaed;border-radius:8px}:host ::ng-deep p-multiselect.w-edit-multiselect-small.p-multiselect-clearable .p-multiselect-label-container{padding-right:20px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect:hover{border:1px solid #00b2eb}:host ::ng-deep .w-edit-multiselect-small .p-multiselect.p-focus{border:1px solid #d6f2ff}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-label{padding:7px 0 7px 11px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect.p-multiselect-chip .p-multiselect-label{padding:7px 0 7px 12px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-token{height:16px;padding:3px 12px;border-radius:7px;border-width:1px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel{border:1px solid #e8eaed}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext{padding:7px 35px 7px 11px;align-self:center}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items{padding:8px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item{padding:7px;margin-bottom:4px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item:hover{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item.p-highlight{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item:not(.p-highlight):not(.p-disabled):hover{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-multiselect-small .p-checkbox{height:16px;width:16px;border-width:1px}:host ::ng-deep .w-edit-multiselect-small .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px;border:1px solid #dadce0;align-self:center}:host ::ng-deep .w-edit-multiselect-small .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:700}:host ::ng-deep .w-edit-multiselect-small .p-checkbox .p-checkbox-box.p-highlight{border-color:#00b2eb;background:#00b2eb}:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{background-color:#dadce0;border:1px solid #dadce0}:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{background-color:#00b2eb;border:1px solid #d6f2ff}:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:not(.p-highlight).p-focus{background-color:#dadce0;border:1px solid #dadce0}:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:#00b2eb;background:#00b2eb}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-header{padding:7px 15px}:host ::ng-deep .w-edit-input-number-small-height .p-inputnumber .p-inputnumber-input{height:32px!important}.w-filter-panel-container-advanced .w-edit-input-number-small{width:40%!important}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input{border-radius:8px;border-width:1px;padding:7px 11px!important;width:100%;border:1px solid #e8eaed}::-webkit-input-placeholder{color:#5f6368}::-moz-placeholder{color:#5f6368}:-ms-input-placeholder{color:#5f6368}:-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:focus{border-radius:8px;border:1px solid #d6f2ff;padding-left:11px}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input::-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input::-webkit-input-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:-ms-input-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:disabled{background-color:#f1f3f4;border-color:#e8eaed;color:#5f6368;opacity:1}.w-filter-panel-input-text-label{padding:8px 6px 12px;margin:0}.w-filter-panel-basic-query-builder-input-width{width:100%!important}::ng-deep .w-filter-panel-basic-query-builder-input-width .p-dropdown{width:100%!important}::ng-deep .w-filter-panel-basic-query-builder-input-width .p-multiselect{width:100%!important}::ng-deep .w-filter-panel-basic .q-tree-container{margin:8px 0 16px}::ng-deep .w-filter-panel-basic .q-row:not(:nth-child(3n)){display:flex!important;width:33.3333%;padding-right:64px!important}::ng-deep .w-filter-panel-basic .q-row:nth-child(3n){display:flex!important;width:33.3333%;padding-right:0!important}::ng-deep .w-filter-panel-basic .q-tree{margin:0!important;display:flex;flex-wrap:wrap;justify-content:flex-start}.w-filter-panel-boolean-label-width{width:25.5%!important}::ng-deep .q-rule{border:none!important}:host ::ng-deep .w-filter-panel-no-style-card.p-card{box-shadow:none!important}:host ::ng-deep .w-filter-panel-no-style-card.p-card .p-card-content{padding:0!important}:host ::ng-deep .w-filter-panel-no-style-card.p-card .p-card-body{padding:0!important}::ng-deep .w-filter-panel-blockui.p-blockui{opacity:0!important}::ng-deep .p-multiselect-label-container{width:200px}::ng-deep .p-checkbox{height:32px;justify-content:start;align-content:center;align-items:center;display:grid}::ng-deep .p-checkbox{justify-content:start;align-content:center;align-items:center;display:grid}::ng-deep .p-checkbox{height:16px;width:16px;border-radius:4px;margin-right:12px}::ng-deep .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px}::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{background-color:#dadce0!important;border:1px solid #dadce0!important}::ng-deep .p-multiselect-panel .p-multiselect-items .p-multiselect-item .p-checkbox{margin-right:12px!important}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#1f5b72!important;background-color:#1f5b72!important}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{border-color:#1f5b72!important;background-color:#1f5b72!important}::ng-deep .p-multiselect-panel .p-multiselect-header .p-checkbox{margin-right:12px}::ng-deep .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext{height:28px!important}::ng-deep .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext:focus{border:1px solid #e8eaed;border-radius:8px}::ng-deep .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext:hover{border-radius:8px;border:1px solid #00b2eb}\n"], dependencies: [{ kind: "directive", type: i4.InputText, selector: "[pInputText]" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i7.Ripple, selector: "[pRipple]" }, { kind: "component", type: i8.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "overlayDirection", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i9.MultiSelect, selector: "p-multiSelect", inputs: ["style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "label", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove"] }, { kind: "component", type: i10.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: i11.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"] }, { kind: "directive", type: i11.QueryInputDirective, selector: "[queryInput]", inputs: ["queryInputType"] }, { kind: "directive", type: i11.QueryOperatorDirective, selector: "[queryOperator]" }, { kind: "directive", type: i11.QueryFieldDirective, selector: "[queryField]" }, { kind: "directive", type: i11.QueryEntityDirective, selector: "[queryEntity]" }, { kind: "directive", type: i11.QueryButtonGroupDirective, selector: "[queryButtonGroup]" }, { kind: "directive", type: i11.QuerySwitchGroupDirective, selector: "[querySwitchGroup]" }, { kind: "directive", type: i11.QueryRemoveButtonDirective, selector: "[queryRemoveButton]" }, { kind: "directive", type: i11.QueryArrowIconDirective, selector: "[queryArrowIcon]" }, { kind: "component", type: i12.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "component", type: i13.BlockUI, selector: "p-blockUI", inputs: ["target", "autoZIndex", "baseZIndex", "styleClass", "blocked"] }, { kind: "component", type: i14.WButtonComponent, selector: "w-button", inputs: ["type", "label", "size", "icon", "tooltipPosition", "tooltip", "disabled", "loading"], outputs: ["onClick"] }, { kind: "component", type: i15.WListFieldComponent, selector: "w-list-field", inputs: ["options", "operator", "placeholder", "onlyDropdown"] }, { kind: "component", type: i16.WViewCardTitleTextComponent, selector: "w-view-card-title-text", inputs: ["cardTitle"] }, { kind: "component", type: i17.WToggleButtonComponent, selector: "w-toggle-button", inputs: ["onLabel", "offLabel", "size", "onIcon", "offIcon", "tooltipPosition", "tooltip", "disabled", "formControl"], outputs: ["onChange"] }, { kind: "component", type: i18.WSelectButtonComponent, selector: "w-select-button", inputs: ["stateOptions", "size", "tooltipPosition", "tooltip", "disabled", "formControl"], outputs: ["onChange"] }, { kind: "component", type: i19.WEditCalendarComponent, selector: "w-edit-calendar", inputs: ["label", "showTime", "showSeconds", "timeOnly", "showIcon", "placeholder", "minDate", "maxDate", "disabled", "size", "formControl", "displayInlineBlock", "required", "requiredErrorDescription", "removePaddingTop"], outputs: ["onChange"] }, { kind: "component", type: i20.WAddressFieldComponent, selector: "w-address-field", inputs: ["operator", "selectPlaceholder", "segmentationApiUrl", "segmentationApiToken"] }] });
420
435
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WFilterPanelComponent, decorators: [{
421
436
  type: Component,
422
- args: [{ selector: 'w-filter-panel', template: "<!-- TODO: Intentar otra vez pasar los componentes a los de w- porque no se alinena y el w-edit-select no va bien en field. \r\n Ahora se conservan los de p-w con estilos. -->\r\n<p-blockUI styleClass=\"w-filter-panel-blockui\" [autoZIndex]=\"false\" [target]=\"filterPanel\" [blocked]=\"dataIsLoadingSearchButton\"></p-blockUI>\r\n\r\n<p-card styleClass=\"w-filter-panel-no-style-card\" #filterPanel>\r\n <div *ngIf=\"queryConfigReady\" class=\"w-filter-panel-styles\">\r\n <div *ngIf=\"!filterPanelObject.allowAdvancedSearch; else baiscAndAdvanced\">\r\n <div [ngClass]=\"{ 'w-filter-panel-container-advanced' : isAdvancedSearch, 'w-filter-panel-container-basic' : !isAdvancedSearch }\">\r\n <ng-container *ngTemplateOutlet=\"basic\"></ng-container>\r\n <div class=\"flex justify-content-end button-gap\">\r\n <w-button [label]=\"translationsObject.clearButtonLabel\" type=\"tertiary\" size=\"small\" (onClick)=\"onClearClicked()\"></w-button>\r\n <w-button [label]=\"translationsObject.searchButtonLabel\" size=\"small\" (onClick)=\"onSearchClicked()\"></w-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #baiscAndAdvanced>\r\n <div [ngClass]=\"{ 'w-filter-panel-container-advanced' : isAdvancedSearch, 'w-filter-panel-container-basic' : !isAdvancedSearch }\">\r\n <div *ngIf=\"!isAdvancedSearch; else advancedView\">\r\n <ng-container *ngTemplateOutlet=\"basic\"></ng-container>\r\n </div>\r\n <ng-template #advancedView>\r\n <ng-container *ngTemplateOutlet=\"advanced\"></ng-container>\r\n </ng-template>\r\n\r\n <div class=\"flex justify-content-end button-gap\" [class.pt-3]=\"isAdvancedSearch\">\r\n <w-button [label]=\"translationsObject.clearButtonLabel\" type=\"tertiary\" size=\"small\" (onClick)=\"onClearClicked()\"></w-button>\r\n <w-button [label]=\"translationsObject.searchButtonLabel\" size=\"small\" (onClick)=\"onSearchClicked()\" [loading]=\"dataIsLoadingSearchButton\"></w-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</p-card>\r\n\r\n <ng-template #basic>\r\n <div *ngIf=\"filterPanelObject.allowAdvancedSearch\" class=\"flex justify-content-end flex-wrap\">\r\n <w-button [label]=\"translationsObject.advancedSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <div class=\"w-filter-panel-basic query-builder-style fadein animation-duration-500\">\r\n <query-builder [formControl]='queryCtrl' [config]='basicQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <ng-container *queryButtonGroup=\"let ruleset;\">\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown [disabled]=\"true\" class=\" w-edit-select-small\" *ngIf=\"false\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields; let value=value; let name=name; let index=index\">\r\n <span appendTo=\"body\" class=\"w-4 text-left w-filter-panel-input-text-label\" [class.w-filter-panel-boolean-label-width]=\"fieldIsBoolean(rule.field, getFields(rule.entity))\" optionLabel=\"name\" optionValue=\"value\">{{ getQueryFieldName(rule.field, getFields(rule.entity))}}</span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\" w-edit-select-small\" *ngIf=\"isAdvancedSearch\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <w-toggle-button size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"w-edit-calendar\" style=\"width: 100%;\">\r\n <w-edit-calendar appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-inputNumber inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-dropdown class=\"w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [filter]=\"true\" [showClear]=\"true\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-text-small-height w-edit-input-text-small\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Multiselect.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-multiSelect class=\"w-edit-multiselect-small\" [appendTo]=\"'body'\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" display=\"chip\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-multiSelect>\r\n </span>\r\n </ng-container>\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Address.toString(); let onChange=onChange\">\r\n <w-address-field [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [operator]=\"rule.operator\" [segmentationApiUrl]=\"segmentationApiUrl\" [segmentationApiToken]=\"segmentationToken\"></w-address-field>\r\n </ng-container>\r\n </query-builder>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!isAdvancedSearch && basicQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n\r\n </ng-template>\r\n\r\n <ng-template #advanced>\r\n <div [class.query-builder-style]=\"!filterPanelObject.allowRuleSet\" class=\"w-filter-panel-container fadein animation-duration-500\">\r\n <div *ngIf=\"filterPanelObject.allowRuleSet\" class=\"flex justify-content-end flex-wrap\">\r\n <w-button class=\"mb-2\" [label]=\"translationsObject.basicSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <query-builder [formControl]='advancedQueryCtrl' [config]='advancedQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowCollapse]='filterPanelObject.allowColapse' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <div *ngIf=\"filterPanelObject.allowRuleSet; else noRuleSet\">\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-template #noRuleSet>\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <div class=\"flex justify-content-end flex-wrap\">\r\n <w-button [label]=\"translationsObject.basicSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <span class=\"advanced-query-button-group gap-3\">\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n <ng-container *queryArrowIcon>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-angle-right\" class=\"p-button-rounded p-button-text\"></button>\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <w-button class=\"\" label=\"\" size=\"small\" type=\"tertiary\" icon=\"pi pi-times\" (onClick)=\"removeRule(rule)\"></w-button>\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <div *ngIf=\"ruleset\" class=\"w-filter-panel-switch-group-padding\">\r\n <w-select-button *ngIf=\"filterPanelObject.allowLogicalRule\" [stateOptions]=\"[{label: 'And', value: 'and'}, {label: 'Or', value: 'or'}]\"\r\n [(ngModel)]=\"ruleset.condition\"\r\n [size]=\"'small'\"\r\n (value)=\"ruleset.condition = $event\">\r\n </w-select-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown *ngIf=\"filterPanelObject.enityMode\" class=\"field-gap w-edit-select-small w-entity-dropdown\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n <span class=\"query-builder-field-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n <!-- <w-list-field class=\"field-gap\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" [operator]=\"'='\" (ngModelChange)=\"onChange($event, rule)\" [onlyDropdown]=\"true\"></w-list-field> -->\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <w-toggle-button class=\"field-gap toggle-button-align\" size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-edit-calendar class=\"field-gap\" appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [filter]=\"true\" [showClear]=\"true\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width field-gap\">\r\n <w-list-field [options]=\"options\" [(ngModel)]=\"rule.value\" [operator]=\"rule.operator\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></w-list-field>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\"field-gap query-builder-input-width w-edit-input-text-small-height w-edit-input-text-small\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Multiselect.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-multiSelect class=\"w-edit-multiselect-small\" [appendTo]=\"'body'\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" display=\"chip\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-multiSelect>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Address.toString(); let onChange=onChange\">\r\n <w-address-field [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [operator]=\"rule.operator\" [segmentationApiUrl]=\"segmentationApiUrl\" [segmentationApiToken]=\"segmentationToken\" [selectPlaceholder]=\"translationsObject.fieldsPlaceholders.list\"></w-address-field>\r\n </ng-container>\r\n </query-builder>\r\n\r\n <ng-container *ngIf=\"isAdvancedSearch && advancedQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- Grouped filter -->\r\n <div *ngIf=\"filterPanelObject.allowGrouped\">\r\n <div class=\"py-5\">\r\n <w-view-card-title-text [cardTitle]=\"translationsObject.groupedFilterTitle\"></w-view-card-title-text>\r\n </div>\r\n\r\n <query-builder [formControl]='groupedQueryCtrl' [config]='advancedQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowCollapse]='filterPanelObject.allowColapse' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <div class=\"flex gap-3 mb-3\">\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryArrowIcon>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-angle-right\" class=\"p-button-rounded p-button-text\"></button>\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <w-button class=\"\" label=\"\" size=\"small\" type=\"tertiary\" icon=\"pi pi-times\" (onClick)=\"removeRule(rule)\"></w-button>\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <div *ngIf=\"ruleset\">\r\n <w-select-button *ngIf=\"filterPanelObject.allowLogicalRule\" [stateOptions]=\"[{label: 'And', value: 'and'}, {label: 'Or', value: 'or'}]\"\r\n [(ngModel)]=\"ruleset.condition\"\r\n [size]=\"'small'\"\r\n (value)=\"ruleset.condition = $event\">\r\n </w-select-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" *ngIf=\"filterPanelObject.enityMode\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n <span class=\"query-builder-field-width\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <w-toggle-button class=\"mr-3\" size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-edit-calendar class=\"field-gap\" appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber class=\"mr-3\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-list-field [options]=\"options\" [(ngModel)]=\"rule.value\" [operator]=\"rule.operator\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></w-list-field>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\"mr-3 query-builder-input-width w-edit-input-text-small-height wapp-input\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n </query-builder>\r\n\r\n <ng-container *ngIf=\"isAdvancedSearch && groupedQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #noQueryData>\r\n <div class=\"flex justify-content-center flex-wrap card-container surface-50 mb-3\">\r\n <div class=\"flex align-items-center justify-content-center w-full h-4rem text-gray-900 border-round m-2\">\r\n {{translationsObject.noRulesLabel}}\r\n </div>\r\n </div>\r\n </ng-template>\r\n", styles: [".heading1{font-size:2.6666666667rem;line-height:3rem;font-weight:700}.heading2{font-size:2.3333333333rem;line-height:2.6666666667rem;font-weight:700}.heading3{font-size:2rem;line-height:2.3333333333rem;font-weight:700}.heading4{font-size:1.6666666667rem;line-height:2rem;font-weight:400}.heading5{font-size:1.5rem;line-height:1.8333333333rem;font-weight:600}.heading6{font-size:1.3333333333rem;line-height:1.6666666667rem;font-weight:400}.subtitle1,.w-tab-text,.w-panel-title-text,.w-sidebar-title-text{font-size:1.1666666667rem;line-height:1.3333333333rem;font-weight:600}.subtitle2,.w-table-th-text,.w-panel-subtitle-text,.w-input-small-label-text-typography,.w-input-small-label-text,.w-filter-panel-input-text-label,.w-input-small-label-disabled,.w-view-small-label-text-typography,.w-view-small-label-text,.w-button-small-text-label-text-typography,.w-button-small-text-label-text{font-size:1rem;line-height:1.3333333333rem;font-weight:600}.body,.w-image-file-uploader-navigators-text,.w-table-td-text,.w-chip-text,.w-panel-content,.w-input-small-select-options-text,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item,.w-input-small-placeholder-text-typography,.w-input-small-placeholder-text-disabled,.w-input-small-placeholder-text,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-label,:host ::ng-deep .w-edit-select-small .p-inputtext,::ng-deep .w-edit-input-text-small.p-inputtext,.w-view-small-value-text-typography,.w-view-small-value-text,.w-button-small-label-text-typography,.w-button-small-tertiary-label-text{font-size:1rem;line-height:1.3333333333rem;font-weight:400}.caption,.w-input-error-alert-text,.w-input-warning-alert-text,.w-input-success-alert-text{font-size:.6666666667rem;line-height:1rem;font-weight:400}.text846{color:#2e3134}.text700{color:#5f6368}.text500{color:#9aa0a6}.textWhite{color:#fff}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.focus,::ng-deep .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext:focus,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:focus,:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus,:host ::ng-deep .w-edit-multiselect-small .p-multiselect.p-focus,:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled).p-focus,.w-edit-input-text-small:focus{box-shadow:0 0 8px #00a6e980}.hover,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:hover,.w-edit-input-text-small:hover{border-radius:8px;border:1px solid #00b2eb}.input-generic-valid{border-radius:8px;border:1px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:1px solid #B3FFD3!important;box-shadow:0 0 8px #46ff9b80!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:1px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:1px solid #FFECB8!important;box-shadow:0 0 8px #ffcd4680!important;padding-left:16px}.input-generic-error-focus{border-radius:8px;border:1px solid #FFBDBD!important;box-shadow:0 0 8px #ff555580!important;padding-left:16px}.input-generic-error{border-radius:8px;border:1px solid #FFBDBD}.toggle-small-typography{font-size:12px;line-height:16px;font-weight:600}.w-button-small-tertiary-label-text,.w-button-small-text-label-text{color:#2e3134}.w-button-small-icon-text{font-size:12px}.w-control-button-small-label-text{font-size:12px;font-weight:600;line-height:16px}.w-control-button-x-small-icon-text,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-token .p-multiselect-token-icon{font-size:10px;font-weight:700}.w-control-button-small-icon-text,::ng-deep .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:700}.w-button-medium-label-text-typography,.w-button-medium-tertiary-label-text{font-size:16px;font-weight:400;line-height:16px}.w-button-medium-tertiary-label-text{color:#2e3134}.w-button-medium-icon-text{font-size:16px}.w-control-button-medium-label-text{font-size:14px;font-weight:600;line-height:16px}.w-control-button-medium-icon-text{font-size:12px;font-weight:700}.w-button-large-label-text-typography,.w-button-large-tertiary-label-text{font-size:20px;font-weight:400;line-height:24px}.w-button-large-tertiary-label-text{color:#2e3134}.w-button-x-small-label-text,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-token{font-size:10px;font-weight:600;line-height:10px}.w-button-small-only-label-text{font-size:12px;font-weight:600;line-height:16px}.w-button-large-icon-text{font-size:24px}.w-view-small-label-text,.w-view-small-value-text{color:#2e3134}.w-input-no-label-height{height:36px}.w-input-disabled,:host ::ng-deep .w-edit-select-small .p-disabled{background-color:#f1f3f4;border-color:#e8eaed;opacity:1}.w-input-small-label-text,.w-filter-panel-input-text-label,.w-input-small-label-disabled{color:#2e3134}.w-input-small-label-disabled{color:#9aa0a6}.w-input-small-label-text-content{padding:12px 8px 8px 0;margin:0}.w-input-small-label-text-content-no-top{padding-top:0}.w-input-small-placeholder-text,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-label,:host ::ng-deep .w-edit-select-small .p-inputtext,::ng-deep .w-edit-input-text-small.p-inputtext{color:#2e3134}.w-input-small-placeholder-text-only-color,:host ::ng-deep .w-edit-multiselect-small .p-multiselect .p-multiselect-label.p-placeholder,:host ::ng-deep .w-edit-select-small .p-dropdown .p-placeholder{color:#2e3134}.w-input-small-placeholder-text-disabled{color:#5f6368}.w-input-small-placeholder-text-disabled-only-color,:host ::ng-deep .w-edit-select-small .p-disabled .p-inputtext{color:#5f6368}.w-input-small-text-icon{color:#2e3134}.w-input-small-select-options-text,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item{color:#2e3134}.w-input-medium-label-text-typography,.w-input-medium-label-text,.w-input-medium-label-disabled{font-size:14px;font-weight:600;line-height:16px}.w-input-medium-label-text,.w-input-medium-label-disabled{color:#2e3134}.w-input-medium-label-disabled{color:#9aa0a6}.w-input-medium-placeholder-text-typography,.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text{font-size:16px;font-weight:400;line-height:24px}.w-input-medium-placeholder-text,.w-input-medium-placeholder-text-only-color{color:#2e3134}.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text-disabled-only-color{color:#5f6368}.w-input-medium-text-icon{color:#2e3134}.w-input-medium-select-options-text,:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item{font-size:16px;font-weight:400;line-height:24px;color:#2e3134}.w-input-success-alert-text{color:#00db5d;padding:8px 8px 0;margin-top:0}.w-input-warning-alert-text{color:#eeae00;padding:8px 8px 0;margin-top:0}.w-input-error-alert-text{color:#e50000;padding:8px 8px 0;margin-top:0}.w-input-alert-message-height{height:32px}.w-sidebar-title-text,.w-panel-title-text,.w-panel-subtitle-text{color:#2e3134}.w-panel-content{color:#5f6368}.w-tab-text,.w-chip-text{color:#2e3134}.w-badge-text{font-size:8px;font-weight:700;line-height:8px}.w-table-th-text{color:#2e3134}.w-table-td-text{color:#5f6368}.w-image-file-uploader-navigators-text{font-size:12px;color:#fff}.w-filter-panel-container-basic,.w-filter-panel-container-advanced{padding:16px 20px 20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a;margin-bottom:0}::ng-deep .w-filter-panel-basic .q-row{margin-top:6px!important;margin-bottom:6px!important;padding:0 0 0 6px!important}::ng-deep .w-filter-panel-container-advanced .q-row{padding:0!important;margin-bottom:8px!important}.field-gap{margin-right:8px}.button-gap{gap:16px}.w-filter-panel-switch-group-padding{padding-bottom:16px}::ng-deep .query-builder-style ul li{border:none!important;background:transparent!important;padding-left:0!important}::ng-deep .query-builder-style .q-connector:before{content:none!important}::ng-deep .query-builder-style .q-connector:after{border-width:0px!important}::ng-deep .query-builder-style .q-tree{padding:0!important}::ng-deep .query-builder-field-width .p-dropdown{width:20%}::ng-deep .query-builder-operator-width .p-dropdown{width:10%}.query-builder-input-width{width:40%}::ng-deep .query-builder-input-width .p-dropdown{width:40%}::ng-deep .query-builder-input-width .p-calendar{width:40%}::ng-deep .query-builder-input-width .w-edit-calendar-medium-display-block{width:40%}::ng-deep .w-edit-calendar .w-edit-calendar-styles{width:100%!important}.w-filter-panel-container.query-builder-style{display:flex;flex-direction:column;justify-content:space-between;position:relative}.advanced-query-button-group{position:absolute;bottom:0;left:0;margin-bottom:-46px}.w-edit-input-text-small-height{height:32px}::ng-deep .w-edit-input-text-small.p-inputtext{border-radius:8px;border-width:1px;padding:7px 11px;border:1px solid #e8eaed}.w-edit-input-text-small:focus{border-radius:8px;border:1px solid #d6f2ff;padding-left:11px}:host ::ng-deep .w-edit-calendar-display-blok{width:40%}:host ::ng-deep .w-edit-select-small .p-dropdown{height:32px;border-width:1px;border-radius:8px;border-color:#e8eaed}:host ::ng-deep .w-edit-select-small .p-inputtext{padding:0 0 0 12px;align-self:center}:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled):hover{border:1px solid #00b2eb}:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled).p-focus{border:1px solid #d6f2ff}:host ::ng-deep .w-edit-select-small .p-dropdown .p-dropdown-trigger{width:auto;height:28px;padding-right:12px}:host ::ng-deep .w-entity-dropdown .p-dropdown .p-dropdown-trigger{width:auto;height:28px;padding-right:12px;padding-left:12px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel{padding:8px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items{padding:0}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:8px;margin-bottom:4px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item:hover{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight{background:#d6f2ff;border-radius:8px;color:#000}::ng-deep .select-disabled .p-dropdown .p-dropdown-trigger{display:none}:host ::ng-deep .w-edit-multiselect-small .p-multiselect{border:1px solid #e8eaed;border-radius:8px}:host ::ng-deep p-multiselect.w-edit-multiselect-small.p-multiselect-clearable .p-multiselect-label-container{padding-right:20px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect:hover{border:1px solid #00b2eb}:host ::ng-deep .w-edit-multiselect-small .p-multiselect.p-focus{border:1px solid #d6f2ff}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-label{padding:7px 0 7px 11px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect.p-multiselect-chip .p-multiselect-label{padding:7px 0 7px 12px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-token{height:16px;padding:3px 12px;border-radius:7px;border-width:1px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel{border:1px solid #e8eaed}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext{padding:7px 35px 7px 11px;align-self:center}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items{padding:8px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item{padding:7px;margin-bottom:4px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item:hover{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item.p-highlight{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item:not(.p-highlight):not(.p-disabled):hover{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-multiselect-small .p-checkbox{height:16px;width:16px;border-width:1px}:host ::ng-deep .w-edit-multiselect-small .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px;border:1px solid #dadce0;align-self:center}:host ::ng-deep .w-edit-multiselect-small .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:700}:host ::ng-deep .w-edit-multiselect-small .p-checkbox .p-checkbox-box.p-highlight{border-color:#00b2eb;background:#00b2eb}:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{background-color:#dadce0;border:1px solid #dadce0}:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{background-color:#00b2eb;border:1px solid #d6f2ff}:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:not(.p-highlight).p-focus{background-color:#dadce0;border:1px solid #dadce0}:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:#00b2eb;background:#00b2eb}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-header{padding:7px 15px}:host ::ng-deep .w-edit-input-number-small-height .p-inputnumber .p-inputnumber-input{height:32px!important}.w-filter-panel-container-advanced .w-edit-input-number-small{width:40%!important}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input{border-radius:8px;border-width:1px;padding:7px 11px!important;width:100%;border:1px solid #e8eaed}::-webkit-input-placeholder{color:#5f6368}::-moz-placeholder{color:#5f6368}:-ms-input-placeholder{color:#5f6368}:-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:focus{border-radius:8px;border:1px solid #d6f2ff;padding-left:11px}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input::-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input::-webkit-input-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:-ms-input-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:disabled{background-color:#f1f3f4;border-color:#e8eaed;color:#5f6368;opacity:1}.w-filter-panel-input-text-label{padding:8px 6px 12px;margin:0}.w-filter-panel-basic-query-builder-input-width{width:100%!important}::ng-deep .w-filter-panel-basic-query-builder-input-width .p-dropdown{width:100%!important}::ng-deep .w-filter-panel-basic-query-builder-input-width .p-multiselect{width:100%!important}::ng-deep .w-filter-panel-basic .q-tree-container{margin:8px 0 16px}::ng-deep .w-filter-panel-basic .q-row:not(:nth-child(3n)){display:flex!important;width:33.3333%;padding-right:64px!important}::ng-deep .w-filter-panel-basic .q-row:nth-child(3n){display:flex!important;width:33.3333%;padding-right:0!important}::ng-deep .w-filter-panel-basic .q-tree{margin:0!important;display:flex;flex-wrap:wrap;justify-content:flex-start}.w-filter-panel-boolean-label-width{width:25.5%!important}::ng-deep .q-rule{border:none!important}:host ::ng-deep .w-filter-panel-no-style-card.p-card{box-shadow:none!important}:host ::ng-deep .w-filter-panel-no-style-card.p-card .p-card-content{padding:0!important}:host ::ng-deep .w-filter-panel-no-style-card.p-card .p-card-body{padding:0!important}::ng-deep .w-filter-panel-blockui.p-blockui{opacity:0!important}::ng-deep .p-multiselect-label-container{width:200px}::ng-deep .p-checkbox{height:32px;justify-content:start;align-content:center;align-items:center;display:grid}::ng-deep .p-checkbox{justify-content:start;align-content:center;align-items:center;display:grid}::ng-deep .p-checkbox{height:16px;width:16px;border-radius:4px;margin-right:12px}::ng-deep .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px}::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{background-color:#dadce0!important;border:1px solid #dadce0!important}::ng-deep .p-multiselect-panel .p-multiselect-items .p-multiselect-item .p-checkbox{margin-right:12px!important}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#1f5b72!important;background-color:#1f5b72!important}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{border-color:#1f5b72!important;background-color:#1f5b72!important}::ng-deep .p-multiselect-panel .p-multiselect-header .p-checkbox{margin-right:12px}::ng-deep .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext{height:28px!important}::ng-deep .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext:focus{border:1px solid #e8eaed;border-radius:8px}::ng-deep .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext:hover{border-radius:8px;border:1px solid #00b2eb}\n"] }]
437
+ args: [{ selector: 'w-filter-panel', template: "<!-- TODO: Intentar otra vez pasar los componentes a los de w- porque no se alinena y el w-edit-select no va bien en field. \r\n Ahora se conservan los de p-w con estilos. -->\r\n<p-blockUI styleClass=\"w-filter-panel-blockui\" [autoZIndex]=\"false\" [target]=\"filterPanel\" [blocked]=\"dataIsLoadingSearchButton\"></p-blockUI>\r\n\r\n<p-card styleClass=\"w-filter-panel-no-style-card\" #filterPanel>\r\n <div *ngIf=\"queryConfigReady\" class=\"w-filter-panel-styles\">\r\n <div *ngIf=\"!filterPanelObject.allowAdvancedSearch; else baiscAndAdvanced\">\r\n <div [ngClass]=\"{ 'w-filter-panel-container-advanced' : isAdvancedSearch, 'w-filter-panel-container-basic' : !isAdvancedSearch }\">\r\n <ng-container *ngTemplateOutlet=\"basic\"></ng-container>\r\n <div class=\"flex justify-content-end button-gap\">\r\n <w-button [label]=\"translationsObject.clearButtonLabel\" type=\"tertiary\" size=\"small\" (onClick)=\"onClearClicked()\"></w-button>\r\n <w-button [label]=\"translationsObject.searchButtonLabel\" size=\"small\" (onClick)=\"onSearchClicked()\"></w-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #baiscAndAdvanced>\r\n <div [ngClass]=\"{ 'w-filter-panel-container-advanced' : isAdvancedSearch, 'w-filter-panel-container-basic' : !isAdvancedSearch }\">\r\n <div *ngIf=\"!isAdvancedSearch; else advancedView\">\r\n <ng-container *ngTemplateOutlet=\"basic\"></ng-container>\r\n </div>\r\n <ng-template #advancedView>\r\n <ng-container *ngTemplateOutlet=\"advanced\"></ng-container>\r\n </ng-template>\r\n\r\n <div class=\"flex justify-content-end button-gap\" [class.pt-3]=\"isAdvancedSearch\">\r\n <w-button [label]=\"translationsObject.clearButtonLabel\" type=\"tertiary\" size=\"small\" (onClick)=\"onClearClicked()\"></w-button>\r\n <w-button [label]=\"translationsObject.searchButtonLabel\" size=\"small\" (onClick)=\"onSearchClicked()\" [loading]=\"dataIsLoadingSearchButton\"></w-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</p-card>\r\n\r\n <ng-template #basic>\r\n <div *ngIf=\"filterPanelObject.allowAdvancedSearch\" class=\"flex justify-content-end flex-wrap\">\r\n <w-button [label]=\"translationsObject.advancedSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <div class=\"w-filter-panel-basic query-builder-style fadein animation-duration-500\">\r\n <query-builder [formControl]='queryCtrl' [config]='basicQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <ng-container *queryButtonGroup=\"let ruleset;\">\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown [disabled]=\"true\" class=\" w-edit-select-small\" *ngIf=\"false\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields; let value=value; let name=name; let index=index\">\r\n <span appendTo=\"body\" class=\"w-4 text-left w-filter-panel-input-text-label\" [class.w-filter-panel-boolean-label-width]=\"fieldIsBoolean(rule.field, getFields(rule.entity))\" optionLabel=\"name\" optionValue=\"value\">{{ getQueryFieldName(rule.field, getFields(rule.entity))}}</span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\" w-edit-select-small\" *ngIf=\"isAdvancedSearch\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <w-toggle-button size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"w-edit-calendar\" style=\"width: 100%;\">\r\n <w-edit-calendar appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-inputNumber inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-dropdown class=\"w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [filter]=\"true\" [showClear]=\"true\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\" w-filter-panel-basic-query-builder-input-width w-edit-input-text-small-height w-edit-input-text-small\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Multiselect.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-multiSelect class=\"w-edit-multiselect-small\" [appendTo]=\"'body'\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" display=\"chip\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-multiSelect>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.NullableSelect.toString(); let onChange=onChange\">\r\n <span class=\"w-filter-panel-basic-query-builder-input-width\">\r\n <p-dropdown class=\"w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [filter]=\"true\" [showClear]=\"true\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Address.toString(); let onChange=onChange\">\r\n <w-address-field [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [operator]=\"rule.operator\" [segmentationApiUrl]=\"segmentationApiUrl\" [segmentationApiToken]=\"segmentationToken\"></w-address-field>\r\n </ng-container>\r\n </query-builder>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!isAdvancedSearch && basicQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n\r\n </ng-template>\r\n\r\n <ng-template #advanced>\r\n <div [class.query-builder-style]=\"!filterPanelObject.allowRuleSet\" class=\"w-filter-panel-container fadein animation-duration-500\">\r\n <div *ngIf=\"filterPanelObject.allowRuleSet\" class=\"flex justify-content-end flex-wrap\">\r\n <w-button class=\"mb-2\" [label]=\"translationsObject.basicSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <query-builder [formControl]='advancedQueryCtrl' [config]='advancedQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowCollapse]='filterPanelObject.allowColapse' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <div *ngIf=\"filterPanelObject.allowRuleSet; else noRuleSet\">\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button class=\"mr-2\" [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-template #noRuleSet>\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <div class=\"flex justify-content-end flex-wrap\">\r\n <w-button [label]=\"translationsObject.basicSearchTabLabel\" type=\"text\" (onClick)=\"updateSearchType()\"></w-button>\r\n </div>\r\n <span class=\"advanced-query-button-group gap-3\">\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n <ng-container *queryArrowIcon>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-angle-right\" class=\"p-button-rounded p-button-text\"></button>\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <w-button class=\"\" label=\"\" size=\"small\" type=\"tertiary\" icon=\"pi pi-times\" (onClick)=\"removeRule(rule)\"></w-button>\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <div *ngIf=\"ruleset\" class=\"w-filter-panel-switch-group-padding\">\r\n <w-select-button *ngIf=\"filterPanelObject.allowLogicalRule\" [stateOptions]=\"[{label: 'And', value: 'and'}, {label: 'Or', value: 'or'}]\"\r\n [(ngModel)]=\"ruleset.condition\"\r\n [size]=\"'small'\"\r\n (value)=\"ruleset.condition = $event\">\r\n </w-select-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown *ngIf=\"filterPanelObject.enityMode\" class=\"field-gap w-edit-select-small w-entity-dropdown\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n <span class=\"query-builder-field-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n <!-- <w-list-field class=\"field-gap\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" [operator]=\"'='\" (ngModelChange)=\"onChange($event, rule)\" [onlyDropdown]=\"true\"></w-list-field> -->\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <w-toggle-button class=\"field-gap toggle-button-align\" size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-edit-calendar class=\"field-gap\" appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [filter]=\"true\" [showClear]=\"true\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width field-gap\">\r\n <w-list-field [options]=\"options\" [(ngModel)]=\"rule.value\" [operator]=\"rule.operator\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></w-list-field>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\"field-gap query-builder-input-width w-edit-input-text-small-height w-edit-input-text-small\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Multiselect.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-multiSelect class=\"w-edit-multiselect-small\" [appendTo]=\"'body'\" [options]=\"options\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" display=\"chip\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-multiSelect>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.Address.toString(); let onChange=onChange\">\r\n <w-address-field [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [operator]=\"rule.operator\" [segmentationApiUrl]=\"segmentationApiUrl\" [segmentationApiToken]=\"segmentationToken\" [selectPlaceholder]=\"translationsObject.fieldsPlaceholders.list\"></w-address-field>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.NullableSelect.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-dropdown class=\"field-gap w-edit-select-small\" appendTo=\"body\" [options]=\"options\" [filter]=\"true\" [showClear]=\"true\" [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" optionLabel=\"name\" optionValue=\"value\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n </query-builder>\r\n\r\n <ng-container *ngIf=\"isAdvancedSearch && advancedQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- Grouped filter -->\r\n <div *ngIf=\"filterPanelObject.allowGrouped\">\r\n <div class=\"py-5\">\r\n <w-view-card-title-text [cardTitle]=\"translationsObject.groupedFilterTitle\"></w-view-card-title-text>\r\n </div>\r\n\r\n <query-builder [formControl]='groupedQueryCtrl' [config]='advancedQueryConfig' [allowRuleset]='filterPanelObject.allowRuleSet' [allowCollapse]='filterPanelObject.allowColapse' [allowRuleset]=\"filterPanelObject.allowRuleSet\" [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <div class=\"flex gap-3 mb-3\">\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleButtonLabel\" type=\"secondary\" size=\"small\" (onClick)=\"addRule()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.addRuleSetButtonLabel\" type=\"secondary\" icon=\"pi pi-plus\" size=\"small\" *ngIf=\"addRuleSet\" (onClick)=\"addRuleSet()\"></w-button>\r\n <w-button [label]=\"translationsObject.advancedSearch.removeRuleSetButtonLabel\" type=\"tertiary\" icon=\"pi pi-minus\" size=\"small\" *ngIf=\"removeRuleSet\" (onClick)=\"removeRuleSet()\"></w-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryArrowIcon>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-angle-right\" class=\"p-button-rounded p-button-text\"></button>\r\n </ng-container>\r\n\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <w-button class=\"\" label=\"\" size=\"small\" type=\"tertiary\" icon=\"pi pi-times\" (onClick)=\"removeRule(rule)\"></w-button>\r\n </ng-container>\r\n\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <div *ngIf=\"ruleset\">\r\n <w-select-button *ngIf=\"filterPanelObject.allowLogicalRule\" [stateOptions]=\"[{label: 'And', value: 'and'}, {label: 'Or', value: 'or'}]\"\r\n [(ngModel)]=\"ruleset.condition\"\r\n [size]=\"'small'\"\r\n (value)=\"ruleset.condition = $event\">\r\n </w-select-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *queryEntity=\"let rule; let entities=entities; let onChange=onChange\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" *ngIf=\"filterPanelObject.enityMode\" appendTo=\"body\" [options]=\"entities\" [(ngModel)]=\"rule.entity\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </ng-container>\r\n\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n <span class=\"query-builder-field-width\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" appendTo=\"body\" [options]=\"getFields(rule.entity)\" [(ngModel)]=\"rule.field\" optionLabel=\"name\" optionValue=\"value\" (ngModelChange)=\"onChange($event, rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\">\r\n <span class=\"query-builder-operator-width\">\r\n <p-dropdown class=\"mr-3 w-edit-select-small\" appendTo=\"body\" [(ngModel)]=\"rule.operator\" [options]=\"operators\" (ngModelChange)=\"onChange(rule)\"></p-dropdown>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Boolean.toString(); let onChange=onChange\">\r\n <w-toggle-button class=\"mr-3\" size=\"small\" [(ngModel)]=\"rule.value\" onLabel=\"True\" offLabel=\"False\" (ngModelChange)=\"onChange()\"></w-toggle-button>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; type: qbDataTypeEnum.Datetime.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-edit-calendar class=\"field-gap\" appendTo=\"body\" size=\"small\" [showIcon]=\"false\" [(ngModel)]=\"rule.value\" (onChange)=\"onChange()\" [showTime]=\"true\" [showSeconds]=\"true\" [placeholder]=\"translationsObject.fieldsPlaceholders.datetime\" [displayInlineBlock]=\"true\"></w-edit-calendar>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Decimal.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber class=\"mr-3\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" mode=\"decimal\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"5\" [min]=\"0\" [max]=\"100\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.decimal\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let options=options; type: qbDataTypeEnum.List.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <w-list-field [options]=\"options\" [(ngModel)]=\"rule.value\" [operator]=\"rule.operator\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.list\"></w-list-field>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Number.toString(); let onChange=onChange\">\r\n <span class=\"query-builder-input-width\">\r\n <p-inputNumber [useGrouping]=\"false\" inputStyleClass=\"flex flex-1\" styleClass=\"flex flex-1\" class=\"field-gap w-edit-input-number-small w-edit-input-number-small-height\" [(ngModel)]=\"rule.value\" inputId=\"minmax\" inputId=\"minmax\" [min]=\"0\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.number\"> </p-inputNumber>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *queryInput=\"let rule; let field=field; type: qbDataTypeEnum.Text.toString(); let onChange=onChange\">\r\n <input class=\"mr-3 query-builder-input-width w-edit-input-text-small-height wapp-input\" type=\"text\" pInputText [(ngModel)]=\"rule.value\" (ngModelChange)=\"onChange()\" [placeholder]=\"translationsObject.fieldsPlaceholders.text\"/>\r\n </ng-container>\r\n\r\n </query-builder>\r\n\r\n <ng-container *ngIf=\"isAdvancedSearch && groupedQuery.rules.length==0\" >\r\n <ng-container *ngTemplateOutlet=\"noQueryData\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #noQueryData>\r\n <div class=\"flex justify-content-center flex-wrap card-container surface-50 mb-3\">\r\n <div class=\"flex align-items-center justify-content-center w-full h-4rem text-gray-900 border-round m-2\">\r\n {{translationsObject.noRulesLabel}}\r\n </div>\r\n </div>\r\n </ng-template>\r\n", styles: [".heading1{font-size:2.6666666667rem;line-height:3rem;font-weight:700}.heading2{font-size:2.3333333333rem;line-height:2.6666666667rem;font-weight:700}.heading3{font-size:2rem;line-height:2.3333333333rem;font-weight:700}.heading4{font-size:1.6666666667rem;line-height:2rem;font-weight:400}.heading5{font-size:1.5rem;line-height:1.8333333333rem;font-weight:600}.heading6{font-size:1.3333333333rem;line-height:1.6666666667rem;font-weight:400}.subtitle1,.w-tab-text,.w-panel-title-text,.w-sidebar-title-text{font-size:1.1666666667rem;line-height:1.3333333333rem;font-weight:600}.subtitle2,.w-table-th-text,.w-panel-subtitle-text,.w-input-small-label-text-typography,.w-input-small-label-text,.w-filter-panel-input-text-label,.w-input-small-label-disabled,.w-view-small-label-text-typography,.w-view-small-label-text,.w-button-small-text-label-text-typography,.w-button-small-text-label-text{font-size:1rem;line-height:1.3333333333rem;font-weight:600}.body,.w-image-file-uploader-navigators-text,.w-table-td-text,.w-chip-text,.w-panel-content,.w-input-small-select-options-text,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item,.w-input-small-placeholder-text-typography,.w-input-small-placeholder-text-disabled,.w-input-small-placeholder-text,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-label,:host ::ng-deep .w-edit-select-small .p-inputtext,::ng-deep .w-edit-input-text-small.p-inputtext,.w-view-small-value-text-typography,.w-view-small-value-text,.w-button-small-label-text-typography,.w-button-small-tertiary-label-text{font-size:1rem;line-height:1.3333333333rem;font-weight:400}.caption,.w-input-error-alert-text,.w-input-warning-alert-text,.w-input-success-alert-text{font-size:.6666666667rem;line-height:1rem;font-weight:400}.text846{color:#2e3134}.text700{color:#5f6368}.text500{color:#9aa0a6}.textWhite{color:#fff}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.focus,::ng-deep .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext:focus,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:focus,:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus,:host ::ng-deep .w-edit-multiselect-small .p-multiselect.p-focus,:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled).p-focus,.w-edit-input-text-small:focus{box-shadow:0 0 8px #00a6e980}.hover,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:hover,.w-edit-input-text-small:hover{border-radius:8px;border:1px solid #00b2eb}.input-generic-valid{border-radius:8px;border:1px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:1px solid #B3FFD3!important;box-shadow:0 0 8px #46ff9b80!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:1px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:1px solid #FFECB8!important;box-shadow:0 0 8px #ffcd4680!important;padding-left:16px}.input-generic-error-focus{border-radius:8px;border:1px solid #FFBDBD!important;box-shadow:0 0 8px #ff555580!important;padding-left:16px}.input-generic-error{border-radius:8px;border:1px solid #FFBDBD}.toggle-small-typography{font-size:12px;line-height:16px;font-weight:600}.w-button-small-tertiary-label-text,.w-button-small-text-label-text{color:#2e3134}.w-button-small-icon-text{font-size:12px}.w-control-button-small-label-text{font-size:12px;font-weight:600;line-height:16px}.w-control-button-x-small-icon-text,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-token .p-multiselect-token-icon{font-size:10px;font-weight:700}.w-control-button-small-icon-text,::ng-deep .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:700}.w-button-medium-label-text-typography,.w-button-medium-tertiary-label-text{font-size:16px;font-weight:400;line-height:16px}.w-button-medium-tertiary-label-text{color:#2e3134}.w-button-medium-icon-text{font-size:16px}.w-control-button-medium-label-text{font-size:14px;font-weight:600;line-height:16px}.w-control-button-medium-icon-text{font-size:12px;font-weight:700}.w-button-large-label-text-typography,.w-button-large-tertiary-label-text{font-size:20px;font-weight:400;line-height:24px}.w-button-large-tertiary-label-text{color:#2e3134}.w-button-x-small-label-text,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-token{font-size:10px;font-weight:600;line-height:10px}.w-button-small-only-label-text{font-size:12px;font-weight:600;line-height:16px}.w-button-large-icon-text{font-size:24px}.w-view-small-label-text,.w-view-small-value-text{color:#2e3134}.w-input-no-label-height{height:36px}.w-input-disabled,:host ::ng-deep .w-edit-select-small .p-disabled{background-color:#f1f3f4;border-color:#e8eaed;opacity:1}.w-input-small-label-text,.w-filter-panel-input-text-label,.w-input-small-label-disabled{color:#2e3134}.w-input-small-label-disabled{color:#9aa0a6}.w-input-small-label-text-content{padding:12px 8px 8px 0;margin:0}.w-input-small-label-text-content-no-top{padding-top:0}.w-input-small-placeholder-text,:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-label,:host ::ng-deep .w-edit-select-small .p-inputtext,::ng-deep .w-edit-input-text-small.p-inputtext{color:#2e3134}.w-input-small-placeholder-text-only-color,:host ::ng-deep .w-edit-multiselect-small .p-multiselect .p-multiselect-label.p-placeholder,:host ::ng-deep .w-edit-select-small .p-dropdown .p-placeholder{color:#2e3134}.w-input-small-placeholder-text-disabled{color:#5f6368}.w-input-small-placeholder-text-disabled-only-color,:host ::ng-deep .w-edit-select-small .p-disabled .p-inputtext{color:#5f6368}.w-input-small-text-icon{color:#2e3134}.w-input-small-select-options-text,:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item{color:#2e3134}.w-input-medium-label-text-typography,.w-input-medium-label-text,.w-input-medium-label-disabled{font-size:14px;font-weight:600;line-height:16px}.w-input-medium-label-text,.w-input-medium-label-disabled{color:#2e3134}.w-input-medium-label-disabled{color:#9aa0a6}.w-input-medium-placeholder-text-typography,.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text{font-size:16px;font-weight:400;line-height:24px}.w-input-medium-placeholder-text,.w-input-medium-placeholder-text-only-color{color:#2e3134}.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text-disabled-only-color{color:#5f6368}.w-input-medium-text-icon{color:#2e3134}.w-input-medium-select-options-text,:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item{font-size:16px;font-weight:400;line-height:24px;color:#2e3134}.w-input-success-alert-text{color:#00db5d;padding:8px 8px 0;margin-top:0}.w-input-warning-alert-text{color:#eeae00;padding:8px 8px 0;margin-top:0}.w-input-error-alert-text{color:#e50000;padding:8px 8px 0;margin-top:0}.w-input-alert-message-height{height:32px}.w-sidebar-title-text,.w-panel-title-text,.w-panel-subtitle-text{color:#2e3134}.w-panel-content{color:#5f6368}.w-tab-text,.w-chip-text{color:#2e3134}.w-badge-text{font-size:8px;font-weight:700;line-height:8px}.w-table-th-text{color:#2e3134}.w-table-td-text{color:#5f6368}.w-image-file-uploader-navigators-text{font-size:12px;color:#fff}.w-filter-panel-container-basic,.w-filter-panel-container-advanced{padding:16px 20px 20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a;margin-bottom:0}::ng-deep .w-filter-panel-basic .q-row{margin-top:6px!important;margin-bottom:6px!important;padding:0 0 0 6px!important}::ng-deep .w-filter-panel-container-advanced .q-row{padding:0!important;margin-bottom:8px!important}.field-gap{margin-right:8px}.button-gap{gap:16px}.w-filter-panel-switch-group-padding{padding-bottom:16px}::ng-deep .query-builder-style ul li{border:none!important;background:transparent!important;padding-left:0!important}::ng-deep .query-builder-style .q-connector:before{content:none!important}::ng-deep .query-builder-style .q-connector:after{border-width:0px!important}::ng-deep .query-builder-style .q-tree{padding:0!important}::ng-deep .query-builder-field-width .p-dropdown{width:20%}::ng-deep .query-builder-operator-width .p-dropdown{width:10%}.query-builder-input-width{width:40%}::ng-deep .query-builder-input-width .p-dropdown{width:40%}::ng-deep .query-builder-input-width .p-calendar{width:40%}::ng-deep .query-builder-input-width .w-edit-calendar-medium-display-block{width:40%}::ng-deep .w-edit-calendar .w-edit-calendar-styles{width:100%!important}.w-filter-panel-container.query-builder-style{display:flex;flex-direction:column;justify-content:space-between;position:relative}.advanced-query-button-group{position:absolute;bottom:0;left:0;margin-bottom:-46px}.w-edit-input-text-small-height{height:32px}::ng-deep .w-edit-input-text-small.p-inputtext{border-radius:8px;border-width:1px;padding:7px 11px;border:1px solid #e8eaed}.w-edit-input-text-small:focus{border-radius:8px;border:1px solid #d6f2ff;padding-left:11px}:host ::ng-deep .w-edit-calendar-display-blok{width:40%}:host ::ng-deep .w-edit-select-small .p-dropdown{height:32px;border-width:1px;border-radius:8px;border-color:#e8eaed}:host ::ng-deep .w-edit-select-small .p-inputtext{padding:0 0 0 12px;align-self:center}:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled):hover{border:1px solid #00b2eb}:host ::ng-deep .w-edit-select-small .p-dropdown:not(.p-disabled).p-focus{border:1px solid #d6f2ff}:host ::ng-deep .w-edit-select-small .p-dropdown .p-dropdown-trigger{width:auto;height:28px;padding-right:12px}:host ::ng-deep .w-entity-dropdown .p-dropdown .p-dropdown-trigger{width:auto;height:28px;padding-right:12px;padding-left:12px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel{padding:8px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items{padding:0}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:8px;margin-bottom:4px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item:hover{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-select-small .p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight{background:#d6f2ff;border-radius:8px;color:#000}::ng-deep .select-disabled .p-dropdown .p-dropdown-trigger{display:none}:host ::ng-deep .w-edit-multiselect-small .p-multiselect{border:1px solid #e8eaed;border-radius:8px}:host ::ng-deep p-multiselect.w-edit-multiselect-small.p-multiselect-clearable .p-multiselect-label-container{padding-right:20px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect:hover{border:1px solid #00b2eb}:host ::ng-deep .w-edit-multiselect-small .p-multiselect.p-focus{border:1px solid #d6f2ff}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-label{padding:7px 0 7px 11px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect.p-multiselect-chip .p-multiselect-label{padding:7px 0 7px 12px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-token{height:16px;padding:3px 12px;border-radius:7px;border-width:1px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel{border:1px solid #e8eaed}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext{padding:7px 35px 7px 11px;align-self:center}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items{padding:8px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item{padding:7px;margin-bottom:4px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item:hover{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item.p-highlight{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-items .p-multiselect-item:not(.p-highlight):not(.p-disabled):hover{background:#d6f2ff;border-radius:8px}:host ::ng-deep .w-edit-multiselect-small .p-checkbox{height:16px;width:16px;border-width:1px}:host ::ng-deep .w-edit-multiselect-small .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px;border:1px solid #dadce0;align-self:center}:host ::ng-deep .w-edit-multiselect-small .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:700}:host ::ng-deep .w-edit-multiselect-small .p-checkbox .p-checkbox-box.p-highlight{border-color:#00b2eb;background:#00b2eb}:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{background-color:#dadce0;border:1px solid #dadce0}:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{background-color:#00b2eb;border:1px solid #d6f2ff}:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:not(.p-highlight).p-focus{background-color:#dadce0;border:1px solid #dadce0}:host ::ng-deep .w-edit-multiselect-small .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:#00b2eb;background:#00b2eb}:host ::ng-deep .w-edit-multiselect-small .p-multiselect-panel .p-multiselect-header{padding:7px 15px}:host ::ng-deep .w-edit-input-number-small-height .p-inputnumber .p-inputnumber-input{height:32px!important}.w-filter-panel-container-advanced .w-edit-input-number-small{width:40%!important}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input{border-radius:8px;border-width:1px;padding:7px 11px!important;width:100%;border:1px solid #e8eaed}::-webkit-input-placeholder{color:#5f6368}::-moz-placeholder{color:#5f6368}:-ms-input-placeholder{color:#5f6368}:-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:focus{border-radius:8px;border:1px solid #d6f2ff;padding-left:11px}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input::-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input::-webkit-input-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:-ms-input-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:-moz-placeholder{color:#5f6368}:host ::ng-deep .w-edit-input-number-small .p-inputnumber .p-inputnumber-input:disabled{background-color:#f1f3f4;border-color:#e8eaed;color:#5f6368;opacity:1}.w-filter-panel-input-text-label{padding:8px 6px 12px;margin:0}.w-filter-panel-basic-query-builder-input-width{width:100%!important}::ng-deep .w-filter-panel-basic-query-builder-input-width .p-dropdown{width:100%!important}::ng-deep .w-filter-panel-basic-query-builder-input-width .p-multiselect{width:100%!important}::ng-deep .w-filter-panel-basic .q-tree-container{margin:8px 0 16px}::ng-deep .w-filter-panel-basic .q-row:not(:nth-child(3n)){display:flex!important;width:33.3333%;padding-right:64px!important}::ng-deep .w-filter-panel-basic .q-row:nth-child(3n){display:flex!important;width:33.3333%;padding-right:0!important}::ng-deep .w-filter-panel-basic .q-tree{margin:0!important;display:flex;flex-wrap:wrap;justify-content:flex-start}.w-filter-panel-boolean-label-width{width:25.5%!important}::ng-deep .q-rule{border:none!important}:host ::ng-deep .w-filter-panel-no-style-card.p-card{box-shadow:none!important}:host ::ng-deep .w-filter-panel-no-style-card.p-card .p-card-content{padding:0!important}:host ::ng-deep .w-filter-panel-no-style-card.p-card .p-card-body{padding:0!important}::ng-deep .w-filter-panel-blockui.p-blockui{opacity:0!important}::ng-deep .p-multiselect-label-container{width:200px}::ng-deep .p-checkbox{height:32px;justify-content:start;align-content:center;align-items:center;display:grid}::ng-deep .p-checkbox{justify-content:start;align-content:center;align-items:center;display:grid}::ng-deep .p-checkbox{height:16px;width:16px;border-radius:4px;margin-right:12px}::ng-deep .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px}::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{background-color:#dadce0!important;border:1px solid #dadce0!important}::ng-deep .p-multiselect-panel .p-multiselect-items .p-multiselect-item .p-checkbox{margin-right:12px!important}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#1f5b72!important;background-color:#1f5b72!important}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{border-color:#1f5b72!important;background-color:#1f5b72!important}::ng-deep .p-multiselect-panel .p-multiselect-header .p-checkbox{margin-right:12px}::ng-deep .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext{height:28px!important}::ng-deep .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext:focus{border:1px solid #e8eaed;border-radius:8px}::ng-deep .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext:hover{border-radius:8px;border:1px solid #00b2eb}\n"] }]
423
438
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.ApiService }, { type: i3.SessionStorageService }]; }, propDecorators: { authorizationApiUrl: [{
424
439
  type: Input,
425
440
  args: ['apiUrl']
@@ -460,4 +475,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
460
475
  type: Output,
461
476
  args: ['lastQuery']
462
477
  }] } });
463
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidy1maWx0ZXItcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2FwcC1jb21wb25lbnRzL3NyYy9saWIvbWlzYy93LWZpbHRlci1wYW5lbC93LWZpbHRlci1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93YXBwLWNvbXBvbmVudHMvc3JjL2xpYi9taXNjL3ctZmlsdGVyLXBhbmVsL3ctZmlsdGVyLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSWpFLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sc0RBQXNELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZckcsTUFBTSxPQUFPLHFCQUFxQjtJQXFGaEMsWUFDVSxXQUF3QixFQUN4QixVQUFzQixFQUN0QixjQUFxQztRQUZyQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQXBGeEMsOEJBQXlCLEdBQVksS0FBSyxDQUFDO1FBRWxELHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsbUJBQWMsR0FBRyxjQUFjLENBQUM7UUFDaEMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRzVDLGVBQVUsR0FBUTtZQUNoQixTQUFTLEVBQUUsS0FBSztZQUNoQixLQUFLLEVBQUUsRUFBRTtTQUNWLENBQUM7UUFDRixpQkFBWSxHQUFRO1lBQ2xCLFNBQVMsRUFBRSxLQUFLO1lB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SW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUUJEYXRhVHlwZUVudW0gfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2VudW1zLm1vZGVsJztcclxuaW1wb3J0IHsgUWJQYW5lbEZpbHRlciB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvZmlsdGVyLXBhbmVsL3FiLXBhbmVsLWZpbHRlci5tb2RlbCc7XHJcbmltcG9ydCB7IEVudGl0eSwgRW50aXR5TWFwLCBGaWVsZCwgRmllbGRNYXAsIFF1ZXJ5QnVpbGRlckNvbmZpZywgUnVsZSwgUnVsZVNldCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvZmlsdGVyLXBhbmVsL2ZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyUGFuZWxUcmFuc2xhdGlvbnMgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2ZpbHRlci1wYW5lbC9maWx0ZXItcGFuZWwtdHJhbnNsYXRpb25zLm1vZGVsJztcclxuaW1wb3J0IHsgUXVlcnlSZXN1bHRUeXBlLCBRdWVyeVJlc3VsdHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2ZpbHRlci1wYW5lbC9xdWVyeS1yZXN1bHRzLm1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyRmllbGQgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2ZpbHRlci1wYW5lbC9maWx0ZXItZmllbGQubW9kZWxzJztcclxuaW1wb3J0IHsgUWJGaWx0ZXJFbnRpdHkgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2ZpbHRlci1wYW5lbC9xYi1maWx0ZXItZW50aXR5Lm1vZGVsJztcclxuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlL2FwaS9hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0b3JlZEZpbHRlclBhbmVsUXVlcnkgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL3N0b3JlZC1maWx0ZXItcGFuZWwtcXVlcnkubW9kZWwnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd3LWZpbHRlci1wYW5lbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ctZmlsdGVyLXBhbmVsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi93LWZpbHRlci1wYW5lbC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXRmlsdGVyUGFuZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHB1YmxpYyBxdWVyeUN0cmwhOiBGb3JtQ29udHJvbDtcclxuICBwdWJsaWMgYWR2YW5jZWRRdWVyeUN0cmwhOiBGb3JtQ29udHJvbDtcclxuICBwdWJsaWMgZ3JvdXBlZFF1ZXJ5Q3RybCE6IEZvcm1Db250cm9sO1xyXG4gIHB1YmxpYyBwZXJzaXN0VmFsdWVPbkZpZWxkQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgXHJcbiAgcXVlcnlDb25maWdSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzQWR2YW5jZWRTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBxYkRhdGFUeXBlRW51bSA9IFFCRGF0YVR5cGVFbnVtO1xyXG4gIHFiRGF0YUVudW1zID0gT2JqZWN0LnZhbHVlcyhRQkRhdGFUeXBlRW51bSk7XHJcbiAgYmFzaWNRdWVyeUNvbmZpZyE6IGFueTtcclxuICBhZHZhbmNlZFF1ZXJ5Q29uZmlnITogYW55O1xyXG4gIGJhc2ljUXVlcnk6IGFueSA9IHtcclxuICAgIGNvbmRpdGlvbjogJ2FuZCcsXHJcbiAgICBydWxlczogW11cclxuICB9O1xyXG4gIGdyb3VwZWRRdWVyeTogYW55ID0ge1xyXG4gICAgY29uZGl0aW9uOiAnYW5kJyxcclxuICAgIHJ1bGVzOiBbXVxyXG4gIH07XHJcbiAgYWR2YW5jZWRRdWVyeTogYW55ID0ge1xyXG4gICAgY29uZGl0aW9uOiAnYW5kJyxcclxuICAgIHJ1bGVzOiBbXVxyXG4gIH07XHJcbiAgZmlsdGVyUGFuZWxPYmplY3QhOiBRYlBhbmVsRmlsdGVyO1xyXG4gIGVudGl0eUNvbmZpZ0dyb3VwZWQ6IFF1ZXJ5QnVpbGRlckNvbmZpZyA9IHsgZmllbGRzOiB7fSB9O1xyXG4gIGVudGl0aWVzOiBhbnlbXSA9IFtdO1xyXG4gIGRlZmF1bHRWYWx1ZXM6IGFueVtdID0gW107XHJcbiAgZGVmYXVsdE9wZXJhdG9yczogYW55W10gPSBbXTtcclxuICBzdG9yZWRRdWVyeSE6IFN0b3JlZEZpbHRlclBhbmVsUXVlcnk7XHJcbiAgcGFyZW50Um91dGUhOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgnYXBpVXJsJykgYXV0aG9yaXphdGlvbkFwaVVybCE6IHN0cmluZztcclxuICBASW5wdXQoJ2NvbW1vbkRhdGFBcGlVcmwnKSBjb21tb25EYXRhQXBpVXJsITogc3RyaW5nO1xyXG4gIEBJbnB1dCgnc2VnbWVudGF0aW9uQXBpVXJsJykgc2VnbWVudGF0aW9uQXBpVXJsITogc3RyaW5nO1xyXG4gIEBJbnB1dCgndG9rZW4nKSB0b2tlbiE6IHN0cmluZztcclxuICBASW5wdXQoJ2NvbW1vbkRhdGFUb2tlbicpIGNvbW1vbkRhdGFUb2tlbiE6IHN0cmluZztcclxuICBASW5wdXQoJ3NlZ21lbnRhdGlvblRva2VuJykgc2VnbWVudGF0aW9uVG9rZW4hOiBzdHJpbmc7XHJcbiAgQElucHV0KCdmaWx0ZXJJZCcpIGZpbHRlcklkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgnZGF0YUlzTG9hZGluZ1NlYXJjaEJ1dHRvbicpIGRhdGFJc0xvYWRpbmdTZWFyY2hCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoJ3RlbmFudElkJykgdGVuYW50SWQhOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgndHJhbnNsYXRpb25zT2JqZWN0JykgdHJhbnNsYXRpb25zT2JqZWN0OiBGaWx0ZXJQYW5lbFRyYW5zbGF0aW9ucyA9IHtcclxuICAgIGJhc2ljU2VhcmNoVGFiTGFiZWw6ICdCYXNpYyBzZWFyY2gnLFxyXG4gICAgYWR2YW5jZWRTZWFyY2hUYWJMYWJlbDogJ0FkdmFuY2VkIHNlYXJjaCcsXHJcbiAgICBncm91cGVkRmlsdGVyVGl0bGU6ICdHcm91cGVkIGZpbHRlcicsXHJcbiAgICBhZHZhbmNlZFNlYXJjaDoge1xyXG4gICAgICBhbmRCdXR0b25MYWJlbDogJ0FuZCcsXHJcbiAgICAgIG9yQnV0dG9uTGFiZWw6ICdPcicsXHJcbiAgICAgIGFkZFJ1bGVCdXR0b25MYWJlbDogJ0FkZCBmaWx0ZXInLFxyXG4gICAgICBhZGRSdWxlU2V0QnV0dG9uTGFiZWw6ICdBZGQgZmlsdGVyIHNldCcsXHJcbiAgICAgIHJlbW92ZVJ1bGVTZXRCdXR0b25MYWJlbDogJ1JlbW92ZSBydWxlIHNldCdcclxuICAgIH0sXHJcbiAgICBub1J1bGVzTGFiZWw6ICdBZGQgZmlsdGVyIG9yIGZpbHRlciBzZXQgdG8gc3RhcnQnLFxyXG4gICAgc2VhcmNoQnV0dG9uTGFiZWw6ICdDbGVhcicsXHJcbiAgICBjbGVhckJ1dHRvbkxhYmVsOiAnQ2xlYXInLFxyXG4gICAgZmllbGRzUGxhY2Vob2xkZXJzOiB7XHJcbiAgICAgIGJvb2xlYW46IHtcclxuICAgICAgICAgIHRydWU6ICdUcnVlJyxcclxuICAgICAgICAgIGZhbHNlOiAnRmFsc2UnXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlY2ltYWw6ICdJbnNlcnQgZGVjaW1hbCBudW1iZXInLFxyXG4gICAgICBsaXN0OiAnU2VsZWN0IGFuIG9wdGlvbicsXHJcbiAgICAgIG51bWJlcjogJ0luc2VydCBhIG51bWJlcicsXHJcbiAgICAgIHRleHQ6ICdJbnNlcnQgdGV4dCcsXHJcbiAgICAgIGRhdGV0aW1lOiAnU2VsZWN0IGEgZGF0ZSdcclxuICAgIH0sXHJcbiAgICBvcGVyYXRvcnM6IHtcclxuICAgICAgY29udGFpbnM6J2NvbnRhaW5zJ1xyXG4gICAgfSxcclxuICAgIGZpZWxkczoge1xyXG4gICAgICBJZGxlRGVhZGxpbmU6ICdJZCcsXHJcbiAgICAgIG5hbWU6ICdOYW1lJyxcclxuICAgICAgY29kZTogJ0NvZGUnLFxyXG4gICAgICBkZWxldGU6ICdEZWxldGVkJyxcclxuICAgICAgY291bnRyeTogJ0NvdW50cnknXHJcbiAgICB9XHJcbiAgfTtcclxuICBcclxuICBAT3V0cHV0KCdzZWFyY2hDbGlja2VkJykgc2VhcmNoQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UXVlcnlSZXN1bHRzPigpO1xyXG4gIEBPdXRwdXQoJ2NsZWFyQ2xpY2tlZCcpIGNsZWFyQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCdsYXN0UXVlcnknKSBsYXN0UXVlcnkgPSBuZXcgRXZlbnRFbWl0dGVyPFF1ZXJ5UmVzdWx0cz4oKTtcclxuICBcclxuICBzdGF0ZU9wdGlvbnM6IGFueVtdID0gW3sgbGFiZWw6IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0LmFkdmFuY2VkU2VhcmNoLmFuZEJ1dHRvbkxhYmVsLCB2YWx1ZTogJ2FuZCcgfSwgeyBsYWJlbDogdGhpcy50cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2gub3JCdXR0b25MYWJlbCwgdmFsdWU6ICdvcicgfV07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsIFxyXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlzQWR2YW5jZWRTZWFyY2ggPSB0aGlzLnNlc3Npb25TdG9yYWdlLmdldExhc3RGaWx0ZXJQYW5lbFF1ZXJ5KHRoaXMudGVuYW50SWQsIHRoaXMuZmlsdGVySWQpPy5hZHZhbmNlZFF1ZXJ5VmFsdWUgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB0aGlzLnN0b3JlZFF1ZXJ5PSB0aGlzLnNlc3Npb25TdG9yYWdlLmdldExhc3RGaWx0ZXJQYW5lbFF1ZXJ5KHRoaXMudGVuYW50SWQsIHRoaXMuZmlsdGVySWQpXHJcbiAgICB0aGlzLmdldFF1ZXJ5QnVpbGRlckZpbHRlclBhbmVsKCk7XHJcbiAgfVxyXG4gIFxyXG4gIGluaXRRdWVyeUJ1aWxkZXJDb250cm9scygpIHtcclxuICAgIHRoaXMucXVlcnlDdHJsID0gdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKHRoaXMuYmFzaWNRdWVyeSk7XHJcbiAgICB0aGlzLmFkdmFuY2VkUXVlcnlDdHJsID0gdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKHRoaXMuYWR2YW5jZWRRdWVyeSk7XHJcbiAgICBpZih0aGlzLmZpbHRlclBhbmVsT2JqZWN0LmFsbG93R3JvdXBlZCkge1xyXG4gICAgICB0aGlzLmdyb3VwZWRRdWVyeUN0cmwgPSB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wodGhpcy5ncm91cGVkUXVlcnkpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZih0aGlzLnN0b3JlZFF1ZXJ5KSB7XHJcbiAgICAgIGxldCBsYXN0UXVlcnk6IFF1ZXJ5UmVzdWx0cyA9IHtcclxuICAgICAgICB0eXBlOiB0aGlzLmdldFF1ZXJ5VHlwZSgpLFxyXG4gICAgICAgIGJhc2ljOiB0aGlzLnN0b3JlZFF1ZXJ5Py5iYXNpY1F1ZXJ5VmFsdWUgPyBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnN0b3JlZFF1ZXJ5Py5iYXNpY1F1ZXJ5VmFsdWUpIDogbnVsbCxcclxuICAgICAgICBhZHZhbmNlZDogdGhpcy5zdG9yZWRRdWVyeT8uYWR2YW5jZWRRdWVyeVZhbHVlID8gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zdG9yZWRRdWVyeT8uYWR2YW5jZWRRdWVyeVZhbHVlKSA6IG51bGwsXHJcbiAgICAgICAgZ3JvdXBlZDogdGhpcy5pc0FkdmFuY2VkU2VhcmNoICYmIHRoaXMuZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dHcm91cGVkICYmIHRoaXMuZ3JvdXBlZFF1ZXJ5Q3RybCA/IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ3JvdXBlZFF1ZXJ5Q3RybD8udmFsdWUpIDogbnVsbFxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN0b3JlZFF1ZXJ5LmJhc2ljUXVlcnlWYWx1ZSA/IFxyXG4gICAgICAgIHRoaXMuc3RvcmVkUXVlcnkuYmFzaWNRdWVyeVZhbHVlID0gdGhpcy5zdHJpbmdEYXRlUGFyc2UodGhpcy5zdG9yZWRRdWVyeS5iYXNpY1F1ZXJ5VmFsdWUpIDpcclxuICAgICAgICB0aGlzLnN0b3JlZFF1ZXJ5LmFkdmFuY2VkUXVlcnlWYWx1ZSA9IHRoaXMuc3RyaW5nRGF0ZVBhcnNlKHRoaXMuc3RvcmVkUXVlcnkuYWR2YW5jZWRRdWVyeVZhbHVlKTtcclxuXHJcbiAgICAgIGxhc3RRdWVyeSA9IHRoaXMuZGVsZXRlRmllbGRzV2l0aG91dFZhbHVlKGxhc3RRdWVyeSk7XHJcbiAgICAgIGxhc3RRdWVyeSA9IHRoaXMuaGFuZGxlRW1wdHlGaWVsZHNRdWVyeShsYXN0UXVlcnkpO1xyXG4gICAgICB0aGlzLmxhc3RRdWVyeS5lbWl0KGxhc3RRdWVyeSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL0RldGVjdGEgbGFzIGZlY2hhcyBlbiBzdHJpbmcgeSBsYXMgY29udmllcnRlIGEgRGF0ZVxyXG4gIHN0cmluZ0RhdGVQYXJzZShxdWVyeTogYW55KSB7XHJcbiAgICBjb25zdCBkYXRlRm9ybWF0UmVnRXhwID0gL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfS5cXGR7M31aJC87XHJcbiAgICBjb25zdCBkYXRlc0luZGV4ZXM6IG51bWJlcltdID0gcXVlcnkucnVsZXNcclxuICAgICAgICAgICAgICAgICAgLm1hcCgocnVsZTogYW55LCBpbmRleDpudW1iZXIpID0+IChkYXRlRm9ybWF0UmVnRXhwLnRlc3QocnVsZS52YWx1ZSkgPyBpbmRleCA6IC0xKSlcclxuICAgICAgICAgICAgICAgICAgLmZpbHRlcigoaW5kZXg6bnVtYmVyKSA9PiBpbmRleCAhPT0gLTEpO1xyXG5cclxuICAgICAgZGF0ZXNJbmRleGVzLmZvckVhY2goZGF0ZUluZGV4ID0+IHtcclxuICAgICAgICBxdWVyeS5ydWxlc1tkYXRlSW5kZXhdLnZhbHVlID0gbmV3IERhdGUocXVlcnkucnVsZXNbZGF0ZUluZGV4XS52YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gcXVlcnk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWFyY2hUeXBlKCkge1xyXG4gICAgdGhpcy5pc0FkdmFuY2VkU2VhcmNoID0gIXRoaXMuaXNBZHZhbmNlZFNlYXJjaDtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoQ2xpY2tlZCgpIHtcclxuICAgIGxldCBxdWVyaWVzOiBRdWVyeVJlc3VsdHMgPSB7XHJcbiAgICAgIHR5cGU6IHRoaXMuZ2V0UXVlcnlUeXBlKCksXHJcbiAgICAgIGJhc2ljOiB0aGlzLmlzQWR2YW5jZWRTZWFyY2ggPyBudWxsIDogT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5xdWVyeUN0cmwudmFsdWUpLFxyXG4gICAgICBhZHZhbmNlZDogdGhpcy5pc0FkdmFuY2VkU2VhcmNoID8gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5hZHZhbmNlZFF1ZXJ5Q3RybC52YWx1ZSkgOiBudWxsLFxyXG4gICAgICBncm91cGVkOiB0aGlzLmlzQWR2YW5jZWRTZWFyY2ggJiYgdGhpcy5maWx0ZXJQYW5lbE9iamVjdC5hbGxvd0dyb3VwZWQgPyBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdyb3VwZWRRdWVyeUN0cmwudmFsdWUpIDogbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0RW50aXR5KHF1ZXJpZXMpO1xyXG5cclxuICAgIHF1ZXJpZXMgPSB0aGlzLmluaXRpYWxpemVPcGVyYXRvcnMocXVlcmllcyk7XHJcbiAgICBcclxuICAgIGxldCBzdG9yZWRRdWVyeTogU3RvcmVkRmlsdGVyUGFuZWxRdWVyeSA9IHtcclxuICAgICAgaWQ6IHRoaXMuZmlsdGVySWQsXHJcbiAgICAgIGJhc2ljUXVlcnlWYWx1ZTogcXVlcmllcy5iYXNpYyxcclxuICAgICAgYWR2YW5jZWRRdWVyeVZhbHVlOiBxdWVyaWVzLmFkdmFuY2VkLFxyXG4gICAgICBncm91cGVkUXVlcnlWYWx1ZTogcXVlcmllcy5ncm91cGVkXHJcbiAgICB9XHJcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlLnNldExhc3RGaWx0ZXJQYW5lbFF1ZXJ5KHRoaXMudGVuYW50SWQsIHN0b3JlZFF1ZXJ5KTtcclxuICAgIFxyXG4gICAgcXVlcmllcyA9IHRoaXMuZGVsZXRlRmllbGRzV2l0aG91dFZhbHVlKHF1ZXJpZXMpO1xyXG4gICAgcXVlcmllcyA9IHRoaXMuaGFuZGxlRW1wdHlGaWVsZHNRdWVyeShxdWVyaWVzKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaENsaWNrZWQuZW1pdChxdWVyaWVzKTtcclxuICB9XHJcblxyXG4gIG9uQ2xlYXJDbGlja2VkKCkge1xyXG4gICAgdGhpcy5yZXNldEJhc2ljUXVlcnlWYWx1ZXMoKTtcclxuICAgIHRoaXMuYWR2YW5jZWRRdWVyeS5ydWxlcyA9IFtdO1xyXG4gICAgdGhpcy5ncm91cGVkUXVlcnkucnVsZXMgPSBbXTtcclxuICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlTGFzdEZpbHRlclBhbmVsUXVlcnkodGhpcy50ZW5hbnRJZCwgdGhpcy5maWx0ZXJJZCk7XHJcbiAgICB0aGlzLmNsZWFyQ2xpY2tlZC5lbWl0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRW1wdHlGaWVsZHNRdWVyeShxdWVyaWVzOiBRdWVyeVJlc3VsdHMpOiBRdWVyeVJlc3VsdHMge1xyXG4gICAgaWYocXVlcmllcy5hZHZhbmNlZCAhPSBudWxsICYmIHF1ZXJpZXMuYWR2YW5jZWQ/LnJ1bGVzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHF1ZXJpZXMudHlwZSA9IDBcclxuICAgIH1cclxuICAgIGlmKHF1ZXJpZXMuYmFzaWMgIT0gbnVsbCAmJiBxdWVyaWVzLmJhc2ljPy5ydWxlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICBxdWVyaWVzLnR5cGUgPSAwXHJcbiAgICB9XHJcbiAgICBpZihxdWVyaWVzLmdyb3VwZWQgIT0gbnVsbCAmJiBxdWVyaWVzLmdyb3VwZWQ/LnJ1bGVzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHF1ZXJpZXMudHlwZSA9IDBcclxuICAgIH1cclxuICAgIHJldHVybiBxdWVyaWVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0UXVlcnlUeXBlKCk6IFF1ZXJ5UmVzdWx0VHlwZSB7XHJcbiAgICBpZighdGhpcy5pc0FkdmFuY2VkU2VhcmNoKSB7XHJcbiAgICAgIHJldHVybiBRdWVyeVJlc3VsdFR5cGUuQmFzaWM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZih0aGlzLmlzQWR2YW5jZWRTZWFyY2ggJiYgdGhpcy5ncm91cGVkUXVlcnlDdHJsPy52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBRdWVyeVJlc3VsdFR5cGUuR3JvdXBlZFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBRdWVyeVJlc3VsdFR5cGUuQWR2YW5jZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEVudGl0eShxdWVyaWVzOiBRdWVyeVJlc3VsdHMpIHtcclxuICAgIGlmKHRoaXMuZ2V0UXVlcnlUeXBlKCkgPT0gUXVlcnlSZXN1bHRUeXBlLkJhc2ljKSB7XHJcbiAgICAgIHF1ZXJpZXMuYmFzaWMhLnJ1bGVzID0gcXVlcmllcy5iYXNpYyEucnVsZXMubWFwKChyOmFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBmaWVsZDogci5maWVsZCxcclxuICAgICAgICAgIG9wZXJhdG9yOiByLm9wZXJhdG9yLFxyXG4gICAgICAgICAgdmFsdWU6IHIudmFsdWUsXHJcbiAgICAgICAgICBlbnRpdHk6IHRoaXMuZW50aXRpZXMuZmluZChlID0+IGUuZmllbGRKc29uTmFtZSA9PSByLmZpZWxkKS5lbnRpdHlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRRdWVyeUJ1aWxkZXJGaWx0ZXJQYW5lbCgpIHtcclxuICAgIHRoaXMuYXBpU2VydmljZS5nZXRGaWx0ZXJQYW5lbCh0aGlzLmF1dGhvcml6YXRpb25BcGlVcmwsIHRoaXMudG9rZW4sIHRoaXMuY29tbW9uRGF0YUFwaVVybCwgdGhpcy5jb21tb25EYXRhVG9rZW4sIHRoaXMuZmlsdGVySWQpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHFiUGFuZWxGaWx0ZXI6IFFiUGFuZWxGaWx0ZXIpID0+IHtcclxuICAgICAgICB0aGlzLmZpbHRlclBhbmVsT2JqZWN0ID0gcWJQYW5lbEZpbHRlcjtcclxuICAgICAgICBsZXQgYmFzaWNGaWx0ZXJJZHM6IG51bWJlcltdID0gcWJQYW5lbEZpbHRlci5xYnBhbmVsVG9GaWVsZHMuZmlsdGVyKHBhbmVsVG9GaWVsZCA9PiBwYW5lbFRvRmllbGQuYmFzaWMpLm1hcChwYW5lbFRvRmllbGQgPT4gcGFuZWxUb0ZpZWxkLnFiZmlsdGVyRmllbGRJZCk7XHJcbiAgICAgICAgbGV0IGFkdmFuY2VkRmlsdGVySWRzOiBudW1iZXJbXSA9IHFiUGFuZWxGaWx0ZXIucWJwYW5lbFRvRmllbGRzLmZpbHRlcihwYW5lbFRvRmllbGQgPT4gIXBhbmVsVG9GaWVsZC5iYXNpYykubWFwKHBhbmVsVG9GaWVsZCA9PiBwYW5lbFRvRmllbGQucWJmaWx0ZXJGaWVsZElkKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZXMgPSBxYlBhbmVsRmlsdGVyLnFicGFuZWxUb0ZpZWxkcy5tYXAocGFuZWxUb0ZpZWxkID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHFiZmlsdGVyRmllbGRJZDogcGFuZWxUb0ZpZWxkLnFiZmlsdGVyRmllbGRJZCxcclxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBwYW5lbFRvRmllbGQuZGVmYXVsdFZhbHVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmRlZmF1bHRPcGVyYXRvcnMgPSBxYlBhbmVsRmlsdGVyLnFicGFuZWxUb0ZpZWxkcy5tYXAocGFuZWxUb0ZpZWxkID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHFiZmlsdGVyRmllbGRJZDogcGFuZWxUb0ZpZWxkLnFiZmlsdGVyRmllbGRJZCxcclxuICAgICAgICAgICAgcWJkZWZhdWx0T3BlcmF0b3I6IHBhbmVsVG9GaWVsZC5xYmRlZmF1bHRPcGVyYXRvclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IGZpbHRlckVudGl0eTogUWJGaWx0ZXJFbnRpdHlbXSA9IHFiUGFuZWxGaWx0ZXIucWJwYW5lbFRvRmllbGRzLm1hcChwYW5lbFRvRmllbGQgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHBhbmVsVG9GaWVsZC5xYmZpbHRlckZpZWxkLnFiZmlsdGVyRW50aXR5LmlkLCBcclxuICAgICAgICAgICAgYmFzaWM6IHBhbmVsVG9GaWVsZC5iYXNpYyxcclxuICAgICAgICAgICAgbmFtZTogcGFuZWxUb0ZpZWxkLnFiZmlsdGVyRmllbGQucWJmaWx0ZXJFbnRpdHkubmFtZSwgXHJcbiAgICAgICAgICAgIGpzb25OYW1lOiBwYW5lbFRvRmllbGQucWJmaWx0ZXJGaWVsZC5xYmZpbHRlckVudGl0eS5qc29uTmFtZSwgXHJcbiAgICAgICAgICAgIGZpZWxkczogW11cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IGZpbHRlckZpZWxkczogRmlsdGVyRmllbGRbXSA9IHFiUGFuZWxGaWx0ZXIucWJwYW5lbFRvRmllbGRzLm1hcChwID0+IHAucWJmaWx0ZXJGaWVsZCk7XHJcbiAgICAgICAgZmlsdGVyRW50aXR5LmZvckVhY2goKGVudGl0eTogUWJGaWx0ZXJFbnRpdHksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICBsZXQgZmllbGRzID0gZmlsdGVyRmllbGRzLmZpbHRlcihlID0+IGUucWJmaWx0ZXJFbnRpdHkuaWQgPT0gZW50aXR5LmlkKTtcclxuICAgICAgICAgICBmaWx0ZXJFbnRpdHlbaW5kZXhdLmZpZWxkcyA9IGZpZWxkcyA7XHJcbiAgICAgICAgfSlcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmJhc2ljUXVlcnlDb25maWcgPSB0aGlzLmluaXRRdWVyeUJ1aWxkZXIoZmlsdGVyRW50aXR5KTtcclxuICAgICAgICB0aGlzLmJhc2ljUXVlcnlDb25maWcgPSB0aGlzLmZpbHRlckZpZWxkc0J5SWQodGhpcy5iYXNpY1F1ZXJ5Q29uZmlnLCBiYXNpY0ZpbHRlcklkcyk7XHJcbiAgICAgICAgdGhpcy5iYXNpY1F1ZXJ5Q29uZmlnLmZpZWxkcyA9IHRoaXMudHJhbnNsYXRlRmllbGRzKHRoaXMuYmFzaWNRdWVyeUNvbmZpZy5maWVsZHMpO1xyXG4gICAgICAgIHRoaXMuYWR2YW5jZWRRdWVyeUNvbmZpZyA9IHRoaXMuaW5pdFF1ZXJ5QnVpbGRlcihmaWx0ZXJFbnRpdHkpO1xyXG4gICAgICAgIHRoaXMuYWR2YW5jZWRRdWVyeUNvbmZpZyA9IHRoaXMuZmlsdGVyRmllbGRzQnlJZCh0aGlzLmFkdmFuY2VkUXVlcnlDb25maWcsIGFkdmFuY2VkRmlsdGVySWRzKTtcclxuICAgICAgICB0aGlzLmFkdmFuY2VkUXVlcnlDb25maWcuZmllbGRzID0gdGhpcy50cmFuc2xhdGVGaWVsZHModGhpcy5hZHZhbmNlZFF1ZXJ5Q29uZmlnLmZpZWxkcyk7XHJcbiAgICAgICAgbGV0IHJ1bGVzID0gT2JqZWN0LmtleXModGhpcy5iYXNpY1F1ZXJ5Q29uZmlnLmZpZWxkcylcclxuICAgICAgICAgIC5tYXAoZmllbGRLZXkgPT4geyBcclxuICAgICAgICAgICAgbGV0IGRlZmF1bHRPcGVyYXRvciA9IHRoaXMuZGVmYXVsdE9wZXJhdG9ycy5maW5kKG9wZXJhdG9yID0+IG9wZXJhdG9yLnFiZmlsdGVyRmllbGRJZCA9PSB0aGlzLmJhc2ljUXVlcnlDb25maWcuZmllbGRzW2ZpZWxkS2V5XS5pZCAmJiBvcGVyYXRvci5xYmRlZmF1bHRPcGVyYXRvciAhPSBudWxsKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBmaWVsZDogZmllbGRLZXksIFxyXG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmJhc2ljUXVlcnlDb25maWcuZmllbGRzW2ZpZWxkS2V5XS5kZWZhdWx0VmFsdWUhLFxyXG4gICAgICAgICAgICAgIG9wZXJhdG9yOiBkZWZhdWx0T3BlcmF0b3IgPyBkZWZhdWx0T3BlcmF0b3IucWJkZWZhdWx0T3BlcmF0b3Iuc3ltYm9sIDogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZih0aGlzLnN0b3JlZFF1ZXJ5ICYmIHRoaXMuc3RvcmVkUXVlcnk/LmlkID09IHRoaXMuZmlsdGVySWQgJiYgdGhpcy5zdG9yZWRRdWVyeT8uYmFzaWNRdWVyeVZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzaWNRdWVyeSA9IHRoaXMuc3RvcmVkUXVlcnkuYmFzaWNRdWVyeVZhbHVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNpY1F1ZXJ5ID0ge1xyXG4gICAgICAgICAgICAgIGNvbmRpdGlvbjogJ2FuZCcsXHJcbiAgICAgICAgICAgICAgcnVsZXM6IHJ1bGVzXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZih0aGlzLnN0b3JlZFF1ZXJ5ICYmIHRoaXMuc3RvcmVkUXVlcnk/LmlkID09IHRoaXMuZmlsdGVySWQgJiYgdGhpcy5zdG9yZWRRdWVyeT8uYWR2YW5jZWRRdWVyeVZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWR2YW5jZWRRdWVyeSA9IHRoaXMuc3RvcmVkUXVlcnkuYWR2YW5jZWRRdWVyeVZhbHVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hZHZhbmNlZFF1ZXJ5ID0ge1xyXG4gICAgICAgICAgICAgIGNvbmRpdGlvbjogJ2FuZCcsXHJcbiAgICAgICAgICAgICAgcnVsZXM6IFtdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucXVlcnlDb25maWdSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pbml0UXVlcnlCdWlsZGVyQ29udHJvbHMoKTtcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGluaXRRdWVyeUJ1aWxkZXIoZmlsdGVyRW50aXRpZXM6IFFiRmlsdGVyRW50aXR5W10pIHtcclxuICAgIGxldCBlbnRpdHlDb25maWdBdXg6IFF1ZXJ5QnVpbGRlckNvbmZpZyA9IHsgZmllbGRzOiB7fSB9O1xyXG4gICAgbGV0IGVudGl0aWVzQXJyYXk6IEVudGl0eU1hcFtdID0gW107XHJcbiAgICBcclxuICAgIGZpbHRlckVudGl0aWVzLm1hcCgoZSwgaW5kZXgpID0+IHtcclxuICAgICAgbGV0IGVudGl0eTogRW50aXR5ID0geyBuYW1lOiBlLmpzb25OYW1lIH07XHJcbiAgICAgIHJldHVybiBlbnRpdGllc0FycmF5W2luZGV4XSA9IHsgW2UuanNvbk5hbWVdOiBlbnRpdHkgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBlbnRpdGllc01hcDogRW50aXR5TWFwID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgZW50aXRpZXNBcnJheSkge1xyXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZW50aXR5KTtcclxuXHJcbiAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIGlmKHRoaXMudHJhbnNsYXRpb25zT2JqZWN0LmVudGl0aWVzKSB7XHJcbiAgICAgICAgICBsZXQgZW50aXRpZXNUcmFuc2xhdGlvbnNLZXlzID0gT2JqZWN0LmtleXModGhpcy50cmFuc2xhdGlvbnNPYmplY3QuZW50aXRpZXMpO1xyXG4gICAgICAgICAgbGV0IHRyYW5zbGF0aW9uID0gZW50aXRpZXNUcmFuc2xhdGlvbnNLZXlzLmZpbmQodHJhbnNsYXRpb25LZXkgPT4gdHJhbnNsYXRpb25LZXkgPT0ga2V5KTtcclxuICAgICAgICAgIGlmKHRyYW5zbGF0aW9uKSB7XHJcbiAgICAgICAgICAgIGVudGl0aWVzTWFwW2tleV0gPSB7IG5hbWU6IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0LmVudGl0aWVzW2tleV0gfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZW50aXRpZXNNYXBba2V5XSA9IGVudGl0eVtrZXldXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGVudGl0aWVzTWFwW2tleV0gPSBlbnRpdHlba2V5XVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBlbnRpdHlDb25maWdBdXguZW50aXRpZXMgPSBlbnRpdGllc01hcDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZmllbGRzOiBGaWVsZE1hcFtdID0gW107XHJcbiAgICBmaWx0ZXJFbnRpdGllcy5mb3JFYWNoKChmaWx0ZXJFbnRpdHkpID0+IHtcclxuICAgICAgcmV0dXJuIGZpbHRlckVudGl0eS5maWVsZHMuZmlsdGVyKChmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQpID0+IHtcclxuICAgICAgICBsZXQgaW5kZXg6IG51bWJlciA9IGZpZWxkcy5sZW5ndGggPz8gMDtcclxuICAgICAgICBsZXQgb3BlcmF0b3JzRmxhdEFycmF5ID0gZmlsdGVyRmllbGQub3BlcmF0b3JzLm1hcCgobzphbnkpID0+IG8uc3ltYm9sKTtcclxuICAgICAgICBsZXQgZGVmYXVsdE9wZXJhdG9yID0gdGhpcy5kZWZhdWx0T3BlcmF0b3JzLmZpbmQob3BlcmF0b3IgPT4gb3BlcmF0b3IucWJmaWx0ZXJGaWVsZElkID09IGZpbHRlckZpZWxkLmlkKTtcclxuICAgICAgICBsZXQgZmllbGQ6IEZpZWxkID0ge1xyXG4gICAgICAgICAgaWQ6IGZpbHRlckZpZWxkLmlkLFxyXG4gICAgICAgICAgbmFtZTogZmlsdGVyRmllbGQubmFtZSxcclxuICAgICAgICAgIG9wZXJhdG9yczogZGVmYXVsdE9wZXJhdG9yLnFiZGVmYXVsdE9wZXJhdG9yPy5zeW1ib2wgPyB0aGlzLm1vdmVFbGVtZW50VG9GaXJzdFBsYWNlKG9wZXJhdG9yc0ZsYXRBcnJheSwgZGVmYXVsdE9wZXJhdG9yLnFiZGVmYXVsdE9wZXJhdG9yPy5zeW1ib2wpIDogb3BlcmF0b3JzRmxhdEFycmF5LFxyXG4gICAgICAgICAgdHlwZTogdGhpcy5nZXREYXRhVHlwZShmaWx0ZXJGaWVsZC5kYXRhVHlwZSksXHJcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuZm9ybWF0RGVmYXVsdFZhbHVlKHRoaXMuZGVmYXVsdFZhbHVlcy5maW5kKHZhbHVlID0+IHZhbHVlLnFiZmlsdGVyRmllbGRJZCA9PSBmaWx0ZXJGaWVsZC5pZCkuZGVmYXVsdFZhbHVlLCBmaWx0ZXJGaWVsZC5kYXRhVHlwZSksXHJcbiAgICAgICAgICBkZWZhdWx0T3BlcmF0b3I6IGRlZmF1bHRPcGVyYXRvci5xYmRlZmF1bHRPcGVyYXRvcj8uc3ltYm9sLFxyXG4gICAgICAgICAgZW50aXR5OiBmaWx0ZXJFbnRpdHkuanNvbk5hbWUsXHJcbiAgICAgICAgICBvcHRpb25zOiBmaWx0ZXJGaWVsZC5saXN0T2ZWYWx1ZXMsXHJcbiAgICAgICAgICB2YWxpZGF0b3I6IChydWxlOiBSdWxlLCBwYXJlbnQ6IFJ1bGVTZXQpOiBhbnkgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgaWYgKHJ1bGUub3BlcmF0b3IgIT09IFwiaXMgbnVsbFwiICYmIHJ1bGUub3BlcmF0b3IgIT09IFwiaXMgbm90IG51bGxcIikge1xyXG4gICAgICAgICAgICAgIGlmIChydWxlLnZhbHVlID09PSB1bmRlZmluZWQgfHwgcnVsZS52YWx1ZSA9PT0gbnVsbCB8fCBydWxlLnZhbHVlID09PSAnJyB8fCBydWxlLnZhbHVlLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlZDogJ2VtcHR5IGZpZWxkJyB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbnRpdGllcy5wdXNoKHtmaWVsZEpzb25OYW1lOiBmaWx0ZXJGaWVsZC5qc29uTmFtZSwgZW50aXR5OiBmaWVsZC5lbnRpdHl9KTtcclxuICAgICAgICBmaWVsZHNbaW5kZXhdID0geyBbZmlsdGVyRmllbGQuanNvbk5hbWVdOiBmaWVsZCB9O1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBmaWVsZHNNYXA6IEZpZWxkTWFwID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZpZWxkKTtcclxuICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgZmllbGRzTWFwW2tleV0gPSBmaWVsZFtrZXldO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGVudGl0eUNvbmZpZ0F1eC5maWVsZHMgPSBmaWVsZHNNYXA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW50aXR5Q29uZmlnQXV4O1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyRmllbGRzQnlJZChmaWVsZHNPYmo6IGFueSwgaWRBcnJheTogbnVtYmVyW10pOiBhbnkge1xyXG4gICAgY29uc3QgZmlsdGVyZWRGaWVsZHM6IGFueSA9IHt9O1xyXG4gICAgXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmaWVsZHNPYmouZmllbGRzKSB7XHJcbiAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzT2JqLmZpZWxkc1trZXldO1xyXG4gICAgICBpZiAoaWRBcnJheS5pbmNsdWRlcyhmaWVsZC5pZCkpIHtcclxuICAgICAgICBmaWx0ZXJlZEZpZWxkc1trZXldID0gZmllbGQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uZmllbGRzT2JqLFxyXG4gICAgICBmaWVsZHM6IGZpbHRlcmVkRmllbGRzLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHRyYW5zbGF0ZUZpZWxkcyhmaWVsZHM6IEZpZWxkTWFwKSB7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmaWVsZHMpIHtcclxuICAgICAgaWYgKGZpZWxkcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgZmllbGRzW2tleV0uZmllbGQgPSBrZXk7XHJcbiAgICAgICAgZmllbGRzW2tleV0ubmFtZSA9IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1trZXldO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmllbGRzO1xyXG4gIH1cclxuXHJcbiAgbW92ZUVsZW1lbnRUb0ZpcnN0UGxhY2UoYXJyYXk6IGFueVtdLCBlbGVtZW50VG9GaXJzdFBsYWNlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGluZGV4ID0gYXJyYXkuaW5kZXhPZihlbGVtZW50VG9GaXJzdFBsYWNlKTtcclxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgYXJyYXkudW5zaGlmdChlbGVtZW50VG9GaXJzdFBsYWNlKTsgXHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXREZWZhdWx0VmFsdWUodmFsdWU6IGFueSwgdHlwZTogUUJEYXRhVHlwZUVudW0pIHtcclxuICAgIGlmKHZhbHVlKSB7XHJcbiAgICAgIGlmKHR5cGUgPT0gUUJEYXRhVHlwZUVudW0uQm9vbGVhbikge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XHJcbiAgICAgIH1cclxuICAgICAgaWYodHlwZSA9PSB0aGlzLnFiRGF0YVR5cGVFbnVtLk51bWJlciB8fCB0eXBlID09IHRoaXMucWJEYXRhVHlwZUVudW0uRGVjaW1hbCB8fCB0eXBlID09IHRoaXMucWJEYXRhVHlwZUVudW0uTGlzdCl7XHJcbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0gXHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXREYXRhVHlwZShpZDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5xYkRhdGFFbnVtcy5maW5kKHZhbHVlID0+IHZhbHVlID09PSBpZCk/LnRvU3RyaW5nKCkgPz8gXCJcIjtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUZpZWxkc1dpdGhvdXRWYWx1ZShqc29uOiBhbnkpIHtcclxuICAgIGlmIChqc29uLmJhc2ljICYmIGpzb24uYmFzaWMucnVsZXMpIHtcclxuICAgICAganNvbi5iYXNpYy5ydWxlcyA9IGpzb24uYmFzaWMucnVsZXMuZmlsdGVyKChydWxlOiBhbnkpID0+IHJ1bGUudmFsdWUgIT0gbnVsbCk7XHJcbiAgICAgIGpzb24uYmFzaWMucnVsZXMgPSBqc29uLmJhc2ljLnJ1bGVzLmZpbHRlcigocnVsZTogYW55KSA9PiBydWxlLnZhbHVlICE9IHVuZGVmaW5lZCk7XHJcbiAgICAgIGpzb24uYmFzaWMucnVsZXMgPSBqc29uLmJhc2ljLnJ1bGVzLmZpbHRlcigocnVsZTogYW55KSA9PiBydWxlLnZhbHVlICE9PSBcIlwiKTtcclxuICAgIH1cclxuICAgIGlmKGpzb24uYWR2YW5jZWQgJiYganNvbi5hZHZhbmNlZC5ydWxlcz8ubGVuZ3RoICE9IDApIHtcclxuICAgICAganNvbi5hZHZhbmNlZC5ydWxlcyA9IGpzb24uYWR2YW5jZWQucnVsZXMuZmlsdGVyKChydWxlOiBhbnkpID0+IHJ1bGUucnVsZXM/Lmxlbmd0aCAhPSAwKTtcclxuICAgIH1cclxuICAgIGlmKGpzb24uZ3JvdXBlZCAmJiBqc29uLmdyb3VwZWQ/LnJ1bGVzLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgIGpzb24uZ3JvdXBlZC5ydWxlcyA9IGpzb24uZ3JvdXBlZC5ydWxlcy5maWx0ZXIoKHJ1bGU6IGFueSkgPT4gcnVsZS5ydWxlcz8ubGVuZ3RoICE9IDApO1xyXG4gICAgfVxyXG4gICAgaWYoanNvbi5ncm91cGVkICYmIGpzb24uZ3JvdXBlZD8ucnVsZXMubGVuZ3RoID09IDApIHtcclxuICAgICAganNvbi5ncm91cGVkID0gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBqc29uO1xyXG4gIH1cclxuICBcclxuICBpbml0aWFsaXplT3BlcmF0b3JzKGpzb246IGFueSkge1xyXG4gICAgaWYgKGpzb24uYmFzaWMgJiYganNvbi5iYXNpYy5ydWxlcykge1xyXG4gICAgICBqc29uLmJhc2ljLnJ1bGVzLmZvckVhY2goKHJ1bGU6YW55KSA9PiB7XHJcbiAgICAgICAgaWYoIXJ1bGUub3BlcmF0b3IpIHtcclxuICAgICAgICAgIHJ1bGUub3BlcmF0b3IgPSBcIj1cIjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGpzb247XHJcbiAgfVxyXG5cclxuICByZXNldEJhc2ljUXVlcnlWYWx1ZXMoKSB7XHJcbiAgICB0aGlzLmJhc2ljUXVlcnkucnVsZXMuZm9yRWFjaCgocnVsZTogUnVsZSkgPT4ge1xyXG4gICAgICBpZihydWxlLnZhbHVlIHx8IHJ1bGUudmFsdWUgPT0gMCl7XHJcbiAgICAgICAgcnVsZS52YWx1ZSA9IG51bGxcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRRdWVyeUZpZWxkTmFtZShmaWVsZE5hbWU6IHN0cmluZywgZmllbGRzOiBGaWVsZE1hcCkge1xyXG4gICAgY29uc3QgZmllbGRFbnRyeSA9IE9iamVjdC5rZXlzKGZpZWxkcykuZmluZChrZXkgPT4gZmllbGRzW2tleV0uZmllbGQgPT09IGZpZWxkTmFtZSk7XHJcblxyXG4gICAgcmV0dXJuIGZpZWxkRW50cnkgJiYgZmllbGRzW2ZpZWxkRW50cnldLm5hbWUgPyBmaWVsZHNbZmllbGRFbnRyeV0ubmFtZSA6IGZpZWxkTmFtZTtcclxuICB9XHJcblxyXG4gIGZpZWxkSXNCb29sZWFuKGZpZWxkTmFtZTogc3RyaW5nLCBmaWVsZHM6IEZpZWxkTWFwKSB7XHJcbiAgICBjb25zdCBmaWVsZEVudHJ5ID0gT2JqZWN0LmtleXMoZmllbGRzKS5maW5kKGtleSA9PiBmaWVsZHNba2V5XS5maWVsZCA9PT0gZmllbGROYW1lKTtcclxuXHJcbiAgICByZXR1cm4gZmllbGRzW2ZpZWxkRW50cnkhXS50eXBlID09IFFCRGF0YVR5cGVFbnVtLkJvb2xlYW4udG9TdHJpbmcoKSA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG59XHJcbiIsIjwhLS0gVE9ETzogSW50ZW50YXIgb3RyYSB2ZXogcGFzYXIgbG9zIGNvbXBvbmVudGVzIGEgbG9zIGRlIHctIHBvcnF1ZSBubyBzZSBhbGluZW5hIHkgZWwgdy1lZGl0LXNlbGVjdCBubyB2YSBiaWVuIGVuIGZpZWxkLiBcclxuICBBaG9yYSBzZSBjb25zZXJ2YW4gbG9zIGRlIHAtdyBjb24gZXN0aWxvcy4gLS0+XHJcbjxwLWJsb2NrVUkgc3R5bGVDbGFzcz1cInctZmlsdGVyLXBhbmVsLWJsb2NrdWlcIiBbYXV0b1pJbmRleF09XCJmYWxzZVwiIFt0YXJnZXRdPVwiZmlsdGVyUGFuZWxcIiBbYmxvY2tlZF09XCJkYXRhSXNMb2FkaW5nU2VhcmNoQnV0dG9uXCI+PC9wLWJsb2NrVUk+XHJcblxyXG48cC1jYXJkIHN0eWxlQ2xhc3M9XCJ3LWZpbHRlci1wYW5lbC1uby1zdHlsZS1jYXJkXCIgI2ZpbHRlclBhbmVsPlxyXG4gIDxkaXYgKm5nSWY9XCJxdWVyeUNvbmZpZ1JlYWR5XCIgY2xhc3M9XCJ3LWZpbHRlci1wYW5lbC1zdHlsZXNcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cIiFmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd0FkdmFuY2VkU2VhcmNoOyBlbHNlIGJhaXNjQW5kQWR2YW5jZWRcIj5cclxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3ctZmlsdGVyLXBhbmVsLWNvbnRhaW5lci1hZHZhbmNlZCcgOiBpc0FkdmFuY2VkU2VhcmNoLCAndy1maWx0ZXItcGFuZWwtY29udGFpbmVyLWJhc2ljJyA6ICFpc0FkdmFuY2VkU2VhcmNoIH1cIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJiYXNpY1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCBidXR0b24tZ2FwXCI+XHJcbiAgICAgICAgICAgIDx3LWJ1dHRvbiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmNsZWFyQnV0dG9uTGFiZWxcIiB0eXBlPVwidGVydGlhcnlcIiBzaXplPVwic21hbGxcIiAob25DbGljayk9XCJvbkNsZWFyQ2xpY2tlZCgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3Quc2VhcmNoQnV0dG9uTGFiZWxcIiBzaXplPVwic21hbGxcIiAob25DbGljayk9XCJvblNlYXJjaENsaWNrZWQoKVwiPjwvdy1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI2JhaXNjQW5kQWR2YW5jZWQ+XHJcbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICd3LWZpbHRlci1wYW5lbC1jb250YWluZXItYWR2YW5jZWQnIDogaXNBZHZhbmNlZFNlYXJjaCwgJ3ctZmlsdGVyLXBhbmVsLWNvbnRhaW5lci1iYXNpYycgOiAhaXNBZHZhbmNlZFNlYXJjaCB9XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNBZHZhbmNlZFNlYXJjaDsgZWxzZSBhZHZhbmNlZFZpZXdcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmFzaWNcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYWR2YW5jZWRWaWV3PlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZHZhbmNlZFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCBidXR0b24tZ2FwXCIgW2NsYXNzLnB0LTNdPVwiaXNBZHZhbmNlZFNlYXJjaFwiPlxyXG4gICAgICAgICAgICAgIDx3LWJ1dHRvbiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmNsZWFyQnV0dG9uTGFiZWxcIiB0eXBlPVwidGVydGlhcnlcIiBzaXplPVwic21hbGxcIiAob25DbGljayk9XCJvbkNsZWFyQ2xpY2tlZCgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5zZWFyY2hCdXR0b25MYWJlbFwiIHNpemU9XCJzbWFsbFwiIChvbkNsaWNrKT1cIm9uU2VhcmNoQ2xpY2tlZCgpXCIgW2xvYWRpbmddPVwiZGF0YUlzTG9hZGluZ1NlYXJjaEJ1dHRvblwiPjwvdy1idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvZGl2PlxyXG48L3AtY2FyZD5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNiYXNpYz5cclxuICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd0FkdmFuY2VkU2VhcmNoXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgZmxleC13cmFwXCI+XHJcbiAgICAgIDx3LWJ1dHRvbiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmFkdmFuY2VkU2VhcmNoVGFiTGFiZWxcIiB0eXBlPVwidGV4dFwiIChvbkNsaWNrKT1cInVwZGF0ZVNlYXJjaFR5cGUoKVwiPjwvdy1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ3LWZpbHRlci1wYW5lbC1iYXNpYyBxdWVyeS1idWlsZGVyLXN0eWxlIGZhZGVpbiBhbmltYXRpb24tZHVyYXRpb24tNTAwXCI+XHJcbiAgICAgIDxxdWVyeS1idWlsZGVyIFtmb3JtQ29udHJvbF09J3F1ZXJ5Q3RybCcgW2NvbmZpZ109J2Jhc2ljUXVlcnlDb25maWcnIFthbGxvd1J1bGVzZXRdPSdmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd1J1bGVTZXQnIFthbGxvd1J1bGVzZXRdPVwiZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dSdWxlU2V0XCIgW3BlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2VdPSdwZXJzaXN0VmFsdWVPbkZpZWxkQ2hhbmdlJz5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUJ1dHRvbkdyb3VwPVwibGV0IHJ1bGVzZXQ7XCI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5UmVtb3ZlQnV0dG9uPVwibGV0IHJ1bGU7IGxldCByZW1vdmVSdWxlPXJlbW92ZVJ1bGVcIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlTd2l0Y2hHcm91cD1cImxldCBydWxlc2V0OyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlFbnRpdHk9XCJsZXQgcnVsZTsgbGV0IGVudGl0aWVzPWVudGl0aWVzOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgIDxwLWRyb3Bkb3duIFtkaXNhYmxlZF09XCJ0cnVlXCIgY2xhc3M9XCIgdy1lZGl0LXNlbGVjdC1zbWFsbFwiICpuZ0lmPVwiZmFsc2VcIiBhcHBlbmRUbz1cImJvZHlcIiBbb3B0aW9uc109XCJlbnRpdGllc1wiIFsobmdNb2RlbCldPVwicnVsZS5lbnRpdHlcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50LCBydWxlKVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlGaWVsZD1cImxldCBydWxlOyBsZXQgZmllbGRzPWZpZWxkczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlOyBsZXQgZ2V0RmllbGRzID0gZ2V0RmllbGRzOyBsZXQgdmFsdWU9dmFsdWU7IGxldCBuYW1lPW5hbWU7IGxldCBpbmRleD1pbmRleFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGFwcGVuZFRvPVwiYm9keVwiIGNsYXNzPVwidy00IHRleHQtbGVmdCB3LWZpbHRlci1wYW5lbC1pbnB1dC10ZXh0LWxhYmVsXCIgW2NsYXNzLnctZmlsdGVyLXBhbmVsLWJvb2xlYW4tbGFiZWwtd2lkdGhdPVwiZmllbGRJc0Jvb2xlYW4ocnVsZS5maWVsZCwgZ2V0RmllbGRzKHJ1bGUuZW50aXR5KSlcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCI+e3sgZ2V0UXVlcnlGaWVsZE5hbWUocnVsZS5maWVsZCwgZ2V0RmllbGRzKHJ1bGUuZW50aXR5KSl9fTwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlPcGVyYXRvcj1cImxldCBydWxlOyBsZXQgb3BlcmF0b3JzPW9wZXJhdG9yczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1vcGVyYXRvci13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwiIHctZWRpdC1zZWxlY3Qtc21hbGxcIiAqbmdJZj1cImlzQWR2YW5jZWRTZWFyY2hcIiBhcHBlbmRUbz1cImJvZHlcIiBbKG5nTW9kZWwpXT1cInJ1bGUub3BlcmF0b3JcIiBbb3B0aW9uc109XCJvcGVyYXRvcnNcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZShydWxlKVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkJvb2xlYW4udG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItb3BlcmF0b3Itd2lkdGhcIj5cclxuICAgICAgICAgICAgPHctdG9nZ2xlLWJ1dHRvbiBzaXplPVwic21hbGxcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiBvbkxhYmVsPVwiVHJ1ZVwiIG9mZkxhYmVsPVwiRmFsc2VcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCI+PC93LXRvZ2dsZS1idXR0b24+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgdHlwZTogcWJEYXRhVHlwZUVudW0uRGF0ZXRpbWUudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidy1lZGl0LWNhbGVuZGFyXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICA8dy1lZGl0LWNhbGVuZGFyIGFwcGVuZFRvPVwiYm9keVwiIHNpemU9XCJzbWFsbFwiIFtzaG93SWNvbl09XCJmYWxzZVwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChvbkNoYW5nZSk9XCJvbkNoYW5nZSgpXCIgW3Nob3dUaW1lXT1cInRydWVcIiBbc2hvd1NlY29uZHNdPVwidHJ1ZVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLmRhdGV0aW1lXCIgW2Rpc3BsYXlJbmxpbmVCbG9ja109XCJ0cnVlXCI+PC93LWVkaXQtY2FsZW5kYXI+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgZmllbGQ9ZmllbGQ7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkRlY2ltYWwudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidy1maWx0ZXItcGFuZWwtYmFzaWMtcXVlcnktYnVpbGRlci1pbnB1dC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIGlucHV0U3R5bGVDbGFzcz1cImZsZXggZmxleC0xXCIgc3R5bGVDbGFzcz1cImZsZXggZmxleC0xXCIgY2xhc3M9XCIgdy1maWx0ZXItcGFuZWwtYmFzaWMtcXVlcnktYnVpbGRlci1pbnB1dC13aWR0aCB3LWVkaXQtaW5wdXQtbnVtYmVyLXNtYWxsIHctZWRpdC1pbnB1dC1udW1iZXItc21hbGwtaGVpZ2h0XCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgaW5wdXRJZD1cIm1pbm1heFwiIGlucHV0SWQ9XCJtaW5tYXhcIiBtb2RlPVwiZGVjaW1hbFwiIFttaW5GcmFjdGlvbkRpZ2l0c109XCIyXCIgW21heEZyYWN0aW9uRGlnaXRzXT1cIjVcIiBbbWluXT1cIjBcIiBbbWF4XT1cIjEwMFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5kZWNpbWFsXCI+IDwvcC1pbnB1dE51bWJlcj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBvcHRpb25zPW9wdGlvbnM7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkxpc3QudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidy1maWx0ZXItcGFuZWwtYmFzaWMtcXVlcnktYnVpbGRlci1pbnB1dC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwidy1lZGl0LXNlbGVjdC1zbWFsbFwiIGFwcGVuZFRvPVwiYm9keVwiIFtvcHRpb25zXT1cIm9wdGlvbnNcIiBbZmlsdGVyXT1cInRydWVcIiBbc2hvd0NsZWFyXT1cInRydWVcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgb3B0aW9uTGFiZWw9XCJuYW1lXCIgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLmxpc3RcIj48L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgZmllbGQ9ZmllbGQ7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLk51bWJlci50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbdXNlR3JvdXBpbmddPVwiZmFsc2VcIiBpbnB1dFN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIHN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIGNsYXNzPVwiIHctZmlsdGVyLXBhbmVsLWJhc2ljLXF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGggdy1lZGl0LWlucHV0LW51bWJlci1zbWFsbCB3LWVkaXQtaW5wdXQtbnVtYmVyLXNtYWxsLWhlaWdodFwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIGlucHV0SWQ9XCJtaW5tYXhcIiBpbnB1dElkPVwibWlubWF4XCIgW21pbl09XCIwXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLm51bWJlclwiPiA8L3AtaW5wdXROdW1iZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IGZpZWxkPWZpZWxkOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5UZXh0LnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiIHctZmlsdGVyLXBhbmVsLWJhc2ljLXF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGggdy1lZGl0LWlucHV0LXRleHQtc21hbGwtaGVpZ2h0IHctZWRpdC1pbnB1dC10ZXh0LXNtYWxsXCIgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy50ZXh0XCIvPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBvcHRpb25zPW9wdGlvbnM7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLk11bHRpc2VsZWN0LnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInctZmlsdGVyLXBhbmVsLWJhc2ljLXF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBjbGFzcz1cInctZWRpdC1tdWx0aXNlbGVjdC1zbWFsbFwiIFthcHBlbmRUb109XCInYm9keSdcIiBbb3B0aW9uc109XCJvcHRpb25zXCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIG9wdGlvblZhbHVlPVwidmFsdWVcIiBkaXNwbGF5PVwiY2hpcFwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLmxpc3RcIj48L3AtbXVsdGlTZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBvcHRpb25zPW9wdGlvbnM7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkFkZHJlc3MudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICA8dy1hZGRyZXNzLWZpZWxkIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbb3BlcmF0b3JdPVwicnVsZS5vcGVyYXRvclwiIFtzZWdtZW50YXRpb25BcGlVcmxdPVwic2VnbWVudGF0aW9uQXBpVXJsXCIgW3NlZ21lbnRhdGlvbkFwaVRva2VuXT1cInNlZ21lbnRhdGlvblRva2VuXCI+PC93LWFkZHJlc3MtZmllbGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvcXVlcnktYnVpbGRlcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNBZHZhbmNlZFNlYXJjaCAmJiBiYXNpY1F1ZXJ5LnJ1bGVzLmxlbmd0aD09MFwiID5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vUXVlcnlEYXRhXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNhZHZhbmNlZD5cclxuICAgIDxkaXYgW2NsYXNzLnF1ZXJ5LWJ1aWxkZXItc3R5bGVdPVwiIWZpbHRlclBhbmVsT2JqZWN0LmFsbG93UnVsZVNldFwiIGNsYXNzPVwidy1maWx0ZXItcGFuZWwtY29udGFpbmVyIGZhZGVpbiBhbmltYXRpb24tZHVyYXRpb24tNTAwXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd1J1bGVTZXRcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCBmbGV4LXdyYXBcIj5cclxuICAgICAgICA8dy1idXR0b24gY2xhc3M9XCJtYi0yXCIgW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5iYXNpY1NlYXJjaFRhYkxhYmVsXCIgdHlwZT1cInRleHRcIiAob25DbGljayk9XCJ1cGRhdGVTZWFyY2hUeXBlKClcIj48L3ctYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHF1ZXJ5LWJ1aWxkZXIgW2Zvcm1Db250cm9sXT0nYWR2YW5jZWRRdWVyeUN0cmwnIFtjb25maWddPSdhZHZhbmNlZFF1ZXJ5Q29uZmlnJyBbYWxsb3dSdWxlc2V0XT0nZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dSdWxlU2V0JyBbYWxsb3dDb2xsYXBzZV09J2ZpbHRlclBhbmVsT2JqZWN0LmFsbG93Q29sYXBzZScgW2FsbG93UnVsZXNldF09XCJmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd1J1bGVTZXRcIiBbcGVyc2lzdFZhbHVlT25GaWVsZENoYW5nZV09J3BlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2UnPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImZpbHRlclBhbmVsT2JqZWN0LmFsbG93UnVsZVNldDsgZWxzZSBub1J1bGVTZXRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlCdXR0b25Hcm91cD1cImxldCBydWxlc2V0OyBsZXQgYWRkUnVsZT1hZGRSdWxlOyBsZXQgYWRkUnVsZVNldD1hZGRSdWxlU2V0OyBsZXQgcmVtb3ZlUnVsZVNldD1yZW1vdmVSdWxlU2V0XCI+XHJcbiAgICAgICAgICAgICAgICA8dy1idXR0b24gY2xhc3M9XCJtci0yXCIgW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5hZGRSdWxlQnV0dG9uTGFiZWxcIiB0eXBlPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCIgKG9uQ2xpY2spPVwiYWRkUnVsZSgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDx3LWJ1dHRvbiBjbGFzcz1cIm1yLTJcIiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmFkdmFuY2VkU2VhcmNoLmFkZFJ1bGVTZXRCdXR0b25MYWJlbFwiIHR5cGU9XCJzZWNvbmRhcnlcIiBpY29uPVwicGkgcGktcGx1c1wiIHNpemU9XCJzbWFsbFwiICpuZ0lmPVwiYWRkUnVsZVNldFwiIChvbkNsaWNrKT1cImFkZFJ1bGVTZXQoKVwiPjwvdy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8dy1idXR0b24gY2xhc3M9XCJtci0yXCIgW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5yZW1vdmVSdWxlU2V0QnV0dG9uTGFiZWxcIiB0eXBlPVwidGVydGlhcnlcIiBpY29uPVwicGkgcGktbWludXNcIiBzaXplPVwic21hbGxcIiAqbmdJZj1cInJlbW92ZVJ1bGVTZXRcIiAob25DbGljayk9XCJyZW1vdmVSdWxlU2V0KClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9SdWxlU2V0PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUJ1dHRvbkdyb3VwPVwibGV0IHJ1bGVzZXQ7IGxldCBhZGRSdWxlPWFkZFJ1bGU7IGxldCBhZGRSdWxlU2V0PWFkZFJ1bGVTZXQ7IGxldCByZW1vdmVSdWxlU2V0PXJlbW92ZVJ1bGVTZXRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGZsZXgtd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYmFzaWNTZWFyY2hUYWJMYWJlbFwiIHR5cGU9XCJ0ZXh0XCIgKG9uQ2xpY2spPVwidXBkYXRlU2VhcmNoVHlwZSgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkdmFuY2VkLXF1ZXJ5LWJ1dHRvbi1ncm91cCBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2guYWRkUnVsZUJ1dHRvbkxhYmVsXCIgdHlwZT1cInNlY29uZGFyeVwiIHNpemU9XCJzbWFsbFwiIChvbkNsaWNrKT1cImFkZFJ1bGUoKVwiPjwvdy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5hZGRSdWxlU2V0QnV0dG9uTGFiZWxcIiB0eXBlPVwic2Vjb25kYXJ5XCIgaWNvbj1cInBpIHBpLXBsdXNcIiBzaXplPVwic21hbGxcIiAqbmdJZj1cImFkZFJ1bGVTZXRcIiAob25DbGljayk9XCJhZGRSdWxlU2V0KClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2gucmVtb3ZlUnVsZVNldEJ1dHRvbkxhYmVsXCIgdHlwZT1cInRlcnRpYXJ5XCIgaWNvbj1cInBpIHBpLW1pbnVzXCIgc2l6ZT1cInNtYWxsXCIgKm5nSWY9XCJyZW1vdmVSdWxlU2V0XCIgKG9uQ2xpY2spPVwicmVtb3ZlUnVsZVNldCgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5QXJyb3dJY29uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWFuZ2xlLXJpZ2h0XCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5UmVtb3ZlQnV0dG9uPVwibGV0IHJ1bGU7IGxldCByZW1vdmVSdWxlPXJlbW92ZVJ1bGVcIj5cclxuICAgICAgICAgICAgPHctYnV0dG9uIGNsYXNzPVwiXCIgbGFiZWw9XCJcIiBzaXplPVwic21hbGxcIiB0eXBlPVwidGVydGlhcnlcIiBpY29uPVwicGkgcGktdGltZXNcIiAob25DbGljayk9XCJyZW1vdmVSdWxlKHJ1bGUpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5U3dpdGNoR3JvdXA9XCJsZXQgcnVsZXNldDsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJydWxlc2V0XCIgY2xhc3M9XCJ3LWZpbHRlci1wYW5lbC1zd2l0Y2gtZ3JvdXAtcGFkZGluZ1wiPlxyXG4gICAgICAgICAgICAgIDx3LXNlbGVjdC1idXR0b24gKm5nSWY9XCJmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd0xvZ2ljYWxSdWxlXCIgW3N0YXRlT3B0aW9uc109XCJbe2xhYmVsOiAnQW5kJywgdmFsdWU6ICdhbmQnfSwge2xhYmVsOiAnT3InLCB2YWx1ZTogJ29yJ31dXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicnVsZXNldC5jb25kaXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUpPVwicnVsZXNldC5jb25kaXRpb24gPSAkZXZlbnRcIj5cclxuICAgICAgICAgICAgICA8L3ctc2VsZWN0LWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUVudGl0eT1cImxldCBydWxlOyBsZXQgZW50aXRpZXM9ZW50aXRpZXM7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8cC1kcm9wZG93biAqbmdJZj1cImZpbHRlclBhbmVsT2JqZWN0LmVuaXR5TW9kZVwiIGNsYXNzPVwiZmllbGQtZ2FwIHctZWRpdC1zZWxlY3Qtc21hbGwgdy1lbnRpdHktZHJvcGRvd25cIiBhcHBlbmRUbz1cImJvZHlcIiBbb3B0aW9uc109XCJlbnRpdGllc1wiIFsobmdNb2RlbCldPVwicnVsZS5lbnRpdHlcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50LCBydWxlKVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5RmllbGQ9XCJsZXQgcnVsZTsgbGV0IGZpZWxkcz1maWVsZHM7IGxldCBvbkNoYW5nZT1vbkNoYW5nZTsgbGV0IGdldEZpZWxkcyA9IGdldEZpZWxkc1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItZmllbGQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1kcm9wZG93biBjbGFzcz1cImZpZWxkLWdhcCB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgYXBwZW5kVG89XCJib2R5XCIgW29wdGlvbnNdPVwiZ2V0RmllbGRzKHJ1bGUuZW50aXR5KVwiIFsobmdNb2RlbCldPVwicnVsZS5maWVsZFwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIG9wdGlvblZhbHVlPVwidmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIHJ1bGUpXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgIDwhLS0gPHctbGlzdC1maWVsZCBjbGFzcz1cImZpZWxkLWdhcFwiIGFwcGVuZFRvPVwiYm9keVwiIFtvcHRpb25zXT1cImdldEZpZWxkcyhydWxlLmVudGl0eSlcIiBbKG5nTW9kZWwpXT1cInJ1bGUuZmllbGRcIiBbb3BlcmF0b3JdPVwiJz0nXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50LCBydWxlKVwiIFtvbmx5RHJvcGRvd25dPVwidHJ1ZVwiPjwvdy1saXN0LWZpZWxkPiAtLT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlPcGVyYXRvcj1cImxldCBydWxlOyBsZXQgb3BlcmF0b3JzPW9wZXJhdG9yczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1vcGVyYXRvci13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwiZmllbGQtZ2FwIHctZWRpdC1zZWxlY3Qtc21hbGxcIiBhcHBlbmRUbz1cImJvZHlcIiBbKG5nTW9kZWwpXT1cInJ1bGUub3BlcmF0b3JcIiBbb3B0aW9uc109XCJvcGVyYXRvcnNcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZShydWxlKVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5Cb29sZWFuLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8dy10b2dnbGUtYnV0dG9uIGNsYXNzPVwiZmllbGQtZ2FwIHRvZ2dsZS1idXR0b24tYWxpZ25cIiBzaXplPVwic21hbGxcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiBvbkxhYmVsPVwiVHJ1ZVwiIG9mZkxhYmVsPVwiRmFsc2VcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCI+PC93LXRvZ2dsZS1idXR0b24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkRhdGV0aW1lLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8dy1lZGl0LWNhbGVuZGFyIGNsYXNzPVwiZmllbGQtZ2FwXCIgYXBwZW5kVG89XCJib2R5XCIgc2l6ZT1cInNtYWxsXCIgW3Nob3dJY29uXT1cImZhbHNlXCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbc2hvd1RpbWVdPVwidHJ1ZVwiIFtzaG93U2Vjb25kc109XCJ0cnVlXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMuZGF0ZXRpbWVcIiBbZGlzcGxheUlubGluZUJsb2NrXT1cInRydWVcIj48L3ctZWRpdC1jYWxlbmRhcj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgZmllbGQ9ZmllbGQ7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkRlY2ltYWwudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1pbnB1dC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIGlucHV0U3R5bGVDbGFzcz1cImZsZXggZmxleC0xXCIgc3R5bGVDbGFzcz1cImZsZXggZmxleC0xXCIgY2xhc3M9XCJmaWVsZC1nYXAgdy1lZGl0LWlucHV0LW51bWJlci1zbWFsbCB3LWVkaXQtaW5wdXQtbnVtYmVyLXNtYWxsLWhlaWdodFwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIGlucHV0SWQ9XCJtaW5tYXhcIiBpbnB1dElkPVwibWlubWF4XCIgbW9kZT1cImRlY2ltYWxcIiBbbWluRnJhY3Rpb25EaWdpdHNdPVwiMlwiIFttYXhGcmFjdGlvbkRpZ2l0c109XCI1XCIgW21pbl09XCIwXCIgW21heF09XCIxMDBcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMuZGVjaW1hbFwiPiA8L3AtaW5wdXROdW1iZXI+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IG9wdGlvbnM9b3B0aW9uczsgdHlwZTogcWJEYXRhVHlwZUVudW0uTGlzdC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtZHJvcGRvd24gY2xhc3M9XCJmaWVsZC1nYXAgdy1lZGl0LXNlbGVjdC1zbWFsbFwiIGFwcGVuZFRvPVwiYm9keVwiIFtvcHRpb25zXT1cIm9wdGlvbnNcIiBbZmlsdGVyXT1cInRydWVcIiBbc2hvd0NsZWFyXT1cInRydWVcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgb3B0aW9uTGFiZWw9XCJuYW1lXCIgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLmxpc3RcIj48L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IG9wdGlvbnM9b3B0aW9uczsgdHlwZTogcWJEYXRhVHlwZUVudW0uTGlzdC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoIGZpZWxkLWdhcFwiPlxyXG4gICAgICAgICAgICAgIDx3LWxpc3QtZmllbGQgW29wdGlvbnNdPVwib3B0aW9uc1wiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIFtvcGVyYXRvcl09XCJydWxlLm9wZXJhdG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLmxpc3RcIj48L3ctbGlzdC1maWVsZD5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgZmllbGQ9ZmllbGQ7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLk51bWJlci50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXIgW3VzZUdyb3VwaW5nXT1cImZhbHNlXCIgaW5wdXRTdHlsZUNsYXNzPVwiZmxleCBmbGV4LTFcIiBzdHlsZUNsYXNzPVwiZmxleCBmbGV4LTFcIiBjbGFzcz1cImZpZWxkLWdhcCB3LWVkaXQtaW5wdXQtbnVtYmVyLXNtYWxsIHctZWRpdC1pbnB1dC1udW1iZXItc21hbGwtaGVpZ2h0XCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgaW5wdXRJZD1cIm1pbm1heFwiIGlucHV0SWQ9XCJtaW5tYXhcIiBbbWluXT1cIjBcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubnVtYmVyXCI+IDwvcC1pbnB1dE51bWJlcj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgZmllbGQ9ZmllbGQ7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLlRleHQudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZpZWxkLWdhcCBxdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoIHctZWRpdC1pbnB1dC10ZXh0LXNtYWxsLWhlaWdodCB3LWVkaXQtaW5wdXQtdGV4dC1zbWFsbFwiIHR5cGU9XCJ0ZXh0XCIgcElucHV0VGV4dCBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMudGV4dFwiLz5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IG9wdGlvbnM9b3B0aW9uczsgdHlwZTogcWJEYXRhVHlwZUVudW0uTXVsdGlzZWxlY3QudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1pbnB1dC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IGNsYXNzPVwidy1lZGl0LW11bHRpc2VsZWN0LXNtYWxsXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiIFtvcHRpb25zXT1cIm9wdGlvbnNcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgb3B0aW9uTGFiZWw9XCJuYW1lXCIgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiIGRpc3BsYXk9XCJjaGlwXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubGlzdFwiPjwvcC1tdWx0aVNlbGVjdD5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgb3B0aW9ucz1vcHRpb25zOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5BZGRyZXNzLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8dy1hZGRyZXNzLWZpZWxkIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbb3BlcmF0b3JdPVwicnVsZS5vcGVyYXRvclwiIFtzZWdtZW50YXRpb25BcGlVcmxdPVwic2VnbWVudGF0aW9uQXBpVXJsXCIgW3NlZ21lbnRhdGlvbkFwaVRva2VuXT1cInNlZ21lbnRhdGlvblRva2VuXCIgW3NlbGVjdFBsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubGlzdFwiPjwvdy1hZGRyZXNzLWZpZWxkPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvcXVlcnktYnVpbGRlcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0FkdmFuY2VkU2VhcmNoICYmIGFkdmFuY2VkUXVlcnkucnVsZXMubGVuZ3RoPT0wXCIgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub1F1ZXJ5RGF0YVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS0gR3JvdXBlZCBmaWx0ZXIgLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd0dyb3VwZWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktNVwiPlxyXG4gICAgICAgICAgPHctdmlldy1jYXJkLXRpdGxlLXRleHQgW2NhcmRUaXRsZV09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZ3JvdXBlZEZpbHRlclRpdGxlXCI+PC93LXZpZXctY2FyZC10aXRsZS10ZXh0PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8cXVlcnktYnVpbGRlciBbZm9ybUNvbnRyb2xdPSdncm91cGVkUXVlcnlDdHJsJyBbY29uZmlnXT0nYWR2YW5jZWRRdWVyeUNvbmZpZycgW2FsbG93UnVsZXNldF09J2ZpbHRlclBhbmVsT2JqZWN0LmFsbG93UnVsZVNldCcgW2FsbG93Q29sbGFwc2VdPSdmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd0NvbGFwc2UnIFthbGxvd1J1bGVzZXRdPVwiZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dSdWxlU2V0XCIgW3BlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2VdPSdwZXJzaXN0VmFsdWVPbkZpZWxkQ2hhbmdlJz5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5QnV0dG9uR3JvdXA9XCJsZXQgcnVsZXNldDsgbGV0IGFkZFJ1bGU9YWRkUnVsZTsgbGV0IGFkZFJ1bGVTZXQ9YWRkUnVsZVNldDsgbGV0IHJlbW92ZVJ1bGVTZXQ9cmVtb3ZlUnVsZVNldFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2guYWRkUnVsZUJ1dHRvbkxhYmVsXCIgdHlwZT1cInNlY29uZGFyeVwiIHNpemU9XCJzbWFsbFwiIChvbkNsaWNrKT1cImFkZFJ1bGUoKVwiPjwvdy1idXR0b24+XHJcbiAgICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2guYWRkUnVsZVNldEJ1dHRvbkxhYmVsXCIgdHlwZT1cInNlY29uZGFyeVwiIGljb249XCJwaSBwaS1wbHVzXCIgc2l6ZT1cInNtYWxsXCIgKm5nSWY9XCJhZGRSdWxlU2V0XCIgKG9uQ2xpY2spPVwiYWRkUnVsZVNldCgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5yZW1vdmVSdWxlU2V0QnV0dG9uTGFiZWxcIiB0eXBlPVwidGVydGlhcnlcIiBpY29uPVwicGkgcGktbWludXNcIiBzaXplPVwic21hbGxcIiAqbmdJZj1cInJlbW92ZVJ1bGVTZXRcIiAob25DbGljayk9XCJyZW1vdmVSdWxlU2V0KClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5QXJyb3dJY29uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWFuZ2xlLXJpZ2h0XCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5UmVtb3ZlQnV0dG9uPVwibGV0IHJ1bGU7IGxldCByZW1vdmVSdWxlPXJlbW92ZVJ1bGVcIj5cclxuICAgICAgICAgICAgPHctYnV0dG9uIGNsYXNzPVwiXCIgbGFiZWw9XCJcIiBzaXplPVwic21hbGxcIiB0eXBlPVwidGVydGlhcnlcIiBpY29uPVwicGkgcGktdGltZXNcIiAob25DbGljayk9XCJyZW1vdmVSdWxlKHJ1bGUpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5U3dpdGNoR3JvdXA9XCJsZXQgcnVsZXNldDsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJydWxlc2V0XCI+XHJcbiAgICAgICAgICAgICAgPHctc2VsZWN0LWJ1dHRvbiAqbmdJZj1cImZpbHRlclBhbmVsT2JqZWN0LmFsbG93TG9naWNhbFJ1bGVcIiBbc3RhdGVPcHRpb25zXT1cIlt7bGFiZWw6ICdBbmQnLCB2YWx1ZTogJ2FuZCd9LCB7bGFiZWw6ICdPcicsIHZhbHVlOiAnb3InfV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJydWxlc2V0LmNvbmRpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCInc21hbGwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSk9XCJydWxlc2V0LmNvbmRpdGlvbiA9ICRldmVudFwiPlxyXG4gICAgICAgICAgICAgIDwvdy1zZWxlY3QtYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5RW50aXR5PVwibGV0IHJ1bGU7IGxldCBlbnRpdGllcz1lbnRpdGllczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwibXItMyB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgKm5nSWY9XCJmaWx0ZXJQYW5lbE9iamVjdC5lbml0eU1vZGVcIiBhcHBlbmRUbz1cImJvZHlcIiBbb3B0aW9uc109XCJlbnRpdGllc1wiIFsobmdNb2RlbCldPVwicnVsZS5lbnRpdHlcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50LCBydWxlKVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5RmllbGQ9XCJsZXQgcnVsZTsgbGV0IGZpZWxkcz1maWVsZHM7IGxldCBvbkNoYW5nZT1vbkNoYW5nZTsgbGV0IGdldEZpZWxkcyA9IGdldEZpZWxkc1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItZmllbGQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1kcm9wZG93biBjbGFzcz1cIm1yLTMgdy1lZGl0LXNlbGVjdC1zbWFsbFwiIGFwcGVuZFRvPVwiYm9keVwiIFtvcHRpb25zXT1cImdldEZpZWxkcyhydWxlLmVudGl0eSlcIiBbKG5nTW9kZWwpXT1cInJ1bGUuZmllbGRcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50LCBydWxlKVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlPcGVyYXRvcj1cImxldCBydWxlOyBsZXQgb3BlcmF0b3JzPW9wZXJhdG9yczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1vcGVyYXRvci13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwibXItMyB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgYXBwZW5kVG89XCJib2R5XCIgWyhuZ01vZGVsKV09XCJydWxlLm9wZXJhdG9yXCIgW29wdGlvbnNdPVwib3BlcmF0b3JzXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UocnVsZSlcIj48L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgdHlwZTogcWJEYXRhVHlwZUVudW0uQm9vbGVhbi50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHctdG9nZ2xlLWJ1dHRvbiBjbGFzcz1cIm1yLTNcIiBzaXplPVwic21hbGxcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiBvbkxhYmVsPVwiVHJ1ZVwiIG9mZkxhYmVsPVwiRmFsc2VcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCI+PC93LXRvZ2dsZS1idXR0b24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkRhdGV0aW1lLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8dy1lZGl0LWNhbGVuZGFyIGNsYXNzPVwiZmllbGQtZ2FwXCIgYXBwZW5kVG89XCJib2R5XCIgc2l6ZT1cInNtYWxsXCIgW3Nob3dJY29uXT1cImZhbHNlXCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbc2hvd1RpbWVdPVwidHJ1ZVwiIFtzaG93U2Vjb25kc109XCJ0cnVlXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMuZGF0ZXRpbWVcIiBbZGlzcGxheUlubGluZUJsb2NrXT1cInRydWVcIj48L3ctZWRpdC1jYWxlbmRhcj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgZmllbGQ9ZmllbGQ7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkRlY2ltYWwudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1pbnB1dC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIGNsYXNzPVwibXItM1wiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIGlucHV0SWQ9XCJtaW5tYXhcIiBpbnB1dElkPVwibWlubWF4XCIgbW9kZT1cImRlY2ltYWxcIiBbbWluRnJhY3Rpb25EaWdpdHNdPVwiMlwiIFttYXhGcmFjdGlvbkRpZ2l0c109XCI1XCIgW21pbl09XCIwXCIgW21heF09XCIxMDBcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMuZGVjaW1hbFwiPiA8L3AtaW5wdXROdW1iZXI+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IG9wdGlvbnM9b3B0aW9uczsgdHlwZTogcWJEYXRhVHlwZUVudW0uTGlzdC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHctbGlzdC1maWVsZCBbb3B0aW9uc109XCJvcHRpb25zXCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgW29wZXJhdG9yXT1cInJ1bGUub3BlcmF0b3JcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubGlzdFwiPjwvdy1saXN0LWZpZWxkPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uTnVtYmVyLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbdXNlR3JvdXBpbmddPVwiZmFsc2VcIiBpbnB1dFN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIHN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIGNsYXNzPVwiZmllbGQtZ2FwIHctZWRpdC1pbnB1dC1udW1iZXItc21hbGwgdy1lZGl0LWlucHV0LW51bWJlci1zbWFsbC1oZWlnaHRcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiBpbnB1dElkPVwibWlubWF4XCIgaW5wdXRJZD1cIm1pbm1heFwiIFttaW5dPVwiMFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5udW1iZXJcIj4gPC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uVGV4dC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwibXItMyBxdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoIHctZWRpdC1pbnB1dC10ZXh0LXNtYWxsLWhlaWdodCB3YXBwLWlucHV0XCIgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy50ZXh0XCIvPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwvcXVlcnktYnVpbGRlcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQWR2YW5jZWRTZWFyY2ggJiYgZ3JvdXBlZFF1ZXJ5LnJ1bGVzLmxlbmd0aD09MFwiID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub1F1ZXJ5RGF0YVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjbm9RdWVyeURhdGE+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtd3JhcCBjYXJkLWNvbnRhaW5lciBzdXJmYWNlLTUwIG1iLTNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgdy1mdWxsIGgtNHJlbSB0ZXh0LWdyYXktOTAwIGJvcmRlci1yb3VuZCBtLTJcIj5cclxuICAgICAgICB7e3RyYW5zbGF0aW9uc09iamVjdC5ub1J1bGVzTGFiZWx9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
478
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidy1maWx0ZXItcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2FwcC1jb21wb25lbnRzL3NyYy9saWIvbWlzYy93LWZpbHRlci1wYW5lbC93LWZpbHRlci1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93YXBwLWNvbXBvbmVudHMvc3JjL2xpYi9taXNjL3ctZmlsdGVyLXBhbmVsL3ctZmlsdGVyLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUkvRSxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLHNEQUFzRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWXJHLE1BQU0sT0FBTyxxQkFBcUI7SUFxRmhDLFlBQ1UsV0FBd0IsRUFDeEIsVUFBc0IsRUFDdEIsY0FBcUM7UUFGckMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUFwRnhDLDhCQUF5QixHQUFZLEtBQUssQ0FBQztRQUVsRCxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLG1CQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUc1QyxlQUFVLEdBQVE7WUFDaEIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO1FBQ0YsaUJBQVksR0FBUTtZQUNsQixTQUFTLEVB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OytCQUNFLGdCQUFnQjsrSkFvQ1QsbUJBQW1CO3NCQUFuQyxLQUFLO3VCQUFDLFFBQVE7Z0JBQ1ksZ0JBQWdCO3NCQUExQyxLQUFLO3VCQUFDLGtCQUFrQjtnQkFDSSxrQkFBa0I7c0JBQTlDLEtBQUs7dUJBQUMsb0JBQW9CO2dCQUNYLEtBQUs7c0JBQXBCLEtBQUs7dUJBQUMsT0FBTztnQkFDWSxlQUFlO3NCQUF4QyxLQUFLO3VCQUFDLGlCQUFpQjtnQkFDSSxpQkFBaUI7c0JBQTVDLEtBQUs7dUJBQUMsbUJBQW1CO2dCQUNQLFFBQVE7c0JBQTFCLEtBQUs7dUJBQUMsVUFBVTtnQkFDbUIseUJBQXlCO3NCQUE1RCxLQUFLO3VCQUFDLDJCQUEyQjtnQkFDZixRQUFRO3NCQUExQixLQUFLO3VCQUFDLFVBQVU7Z0JBRVksa0JBQWtCO3NCQUE5QyxLQUFLO3VCQUFDLG9CQUFvQjtnQkFxQ0YsYUFBYTtzQkFBckMsTUFBTTt1QkFBQyxlQUFlO2dCQUNDLFlBQVk7c0JBQW5DLE1BQU07dUJBQUMsY0FBYztnQkFDRCxTQUFTO3NCQUE3QixNQUFNO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT3BlcmF0b3JFbnVtLCBRQkRhdGFUeXBlRW51bSB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvZW51bXMubW9kZWwnO1xyXG5pbXBvcnQgeyBRYlBhbmVsRmlsdGVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9maWx0ZXItcGFuZWwvcWItcGFuZWwtZmlsdGVyLm1vZGVsJztcclxuaW1wb3J0IHsgRW50aXR5LCBFbnRpdHlNYXAsIEZpZWxkLCBGaWVsZE1hcCwgUXVlcnlCdWlsZGVyQ29uZmlnLCBSdWxlLCBSdWxlU2V0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9maWx0ZXItcGFuZWwvZmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBGaWx0ZXJQYW5lbFRyYW5zbGF0aW9ucyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvZmlsdGVyLXBhbmVsL2ZpbHRlci1wYW5lbC10cmFuc2xhdGlvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBRdWVyeVJlc3VsdFR5cGUsIFF1ZXJ5UmVzdWx0cyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvZmlsdGVyLXBhbmVsL3F1ZXJ5LXJlc3VsdHMubW9kZWwnO1xyXG5pbXBvcnQgeyBGaWx0ZXJGaWVsZCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvZmlsdGVyLXBhbmVsL2ZpbHRlci1maWVsZC5tb2RlbHMnO1xyXG5pbXBvcnQgeyBRYkZpbHRlckVudGl0eSB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvZmlsdGVyLXBhbmVsL3FiLWZpbHRlci1lbnRpdHkubW9kZWwnO1xyXG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2UvYXBpL2FwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RvcmVkRmlsdGVyUGFuZWxRdWVyeSB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvc3RvcmVkLWZpbHRlci1wYW5lbC1xdWVyeS5tb2RlbCc7XHJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zZXNzaW9uLXN0b3JhZ2Uuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3ctZmlsdGVyLXBhbmVsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdy1maWx0ZXItcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3ctZmlsdGVyLXBhbmVsLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFdGaWx0ZXJQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHVibGljIHF1ZXJ5Q3RybCE6IEZvcm1Db250cm9sO1xyXG4gIHB1YmxpYyBhZHZhbmNlZFF1ZXJ5Q3RybCE6IEZvcm1Db250cm9sO1xyXG4gIHB1YmxpYyBncm91cGVkUXVlcnlDdHJsITogRm9ybUNvbnRyb2w7XHJcbiAgcHVibGljIHBlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICBxdWVyeUNvbmZpZ1JlYWR5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNBZHZhbmNlZFNlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHFiRGF0YVR5cGVFbnVtID0gUUJEYXRhVHlwZUVudW07XHJcbiAgcWJEYXRhRW51bXMgPSBPYmplY3QudmFsdWVzKFFCRGF0YVR5cGVFbnVtKTtcclxuICBiYXNpY1F1ZXJ5Q29uZmlnITogYW55O1xyXG4gIGFkdmFuY2VkUXVlcnlDb25maWchOiBhbnk7XHJcbiAgYmFzaWNRdWVyeTogYW55ID0ge1xyXG4gICAgY29uZGl0aW9uOiAnYW5kJyxcclxuICAgIHJ1bGVzOiBbXVxyXG4gIH07XHJcbiAgZ3JvdXBlZFF1ZXJ5OiBhbnkgPSB7XHJcbiAgICBjb25kaXRpb246ICdhbmQnLFxyXG4gICAgcnVsZXM6IFtdXHJcbiAgfTtcclxuICBhZHZhbmNlZFF1ZXJ5OiBhbnkgPSB7XHJcbiAgICBjb25kaXRpb246ICdhbmQnLFxyXG4gICAgcnVsZXM6IFtdXHJcbiAgfTtcclxuICBmaWx0ZXJQYW5lbE9iamVjdCE6IFFiUGFuZWxGaWx0ZXI7XHJcbiAgZW50aXR5Q29uZmlnR3JvdXBlZDogUXVlcnlCdWlsZGVyQ29uZmlnID0geyBmaWVsZHM6IHt9IH07XHJcbiAgZW50aXRpZXM6IGFueVtdID0gW107XHJcbiAgZGVmYXVsdFZhbHVlczogYW55W10gPSBbXTtcclxuICBkZWZhdWx0T3BlcmF0b3JzOiBhbnlbXSA9IFtdO1xyXG4gIHN0b3JlZFF1ZXJ5ITogU3RvcmVkRmlsdGVyUGFuZWxRdWVyeTtcclxuICBwYXJlbnRSb3V0ZSE6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCdhcGlVcmwnKSBhdXRob3JpemF0aW9uQXBpVXJsITogc3RyaW5nO1xyXG4gIEBJbnB1dCgnY29tbW9uRGF0YUFwaVVybCcpIGNvbW1vbkRhdGFBcGlVcmwhOiBzdHJpbmc7XHJcbiAgQElucHV0KCdzZWdtZW50YXRpb25BcGlVcmwnKSBzZWdtZW50YXRpb25BcGlVcmwhOiBzdHJpbmc7XHJcbiAgQElucHV0KCd0b2tlbicpIHRva2VuITogc3RyaW5nO1xyXG4gIEBJbnB1dCgnY29tbW9uRGF0YVRva2VuJykgY29tbW9uRGF0YVRva2VuITogc3RyaW5nO1xyXG4gIEBJbnB1dCgnc2VnbWVudGF0aW9uVG9rZW4nKSBzZWdtZW50YXRpb25Ub2tlbiE6IHN0cmluZztcclxuICBASW5wdXQoJ2ZpbHRlcklkJykgZmlsdGVySWQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCdkYXRhSXNMb2FkaW5nU2VhcmNoQnV0dG9uJykgZGF0YUlzTG9hZGluZ1NlYXJjaEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgndGVuYW50SWQnKSB0ZW5hbnRJZCE6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCd0cmFuc2xhdGlvbnNPYmplY3QnKSB0cmFuc2xhdGlvbnNPYmplY3Q6IEZpbHRlclBhbmVsVHJhbnNsYXRpb25zID0ge1xyXG4gICAgYmFzaWNTZWFyY2hUYWJMYWJlbDogJ0Jhc2ljIHNlYXJjaCcsXHJcbiAgICBhZHZhbmNlZFNlYXJjaFRhYkxhYmVsOiAnQWR2YW5jZWQgc2VhcmNoJyxcclxuICAgIGdyb3VwZWRGaWx0ZXJUaXRsZTogJ0dyb3VwZWQgZmlsdGVyJyxcclxuICAgIGFkdmFuY2VkU2VhcmNoOiB7XHJcbiAgICAgIGFuZEJ1dHRvbkxhYmVsOiAnQW5kJyxcclxuICAgICAgb3JCdXR0b25MYWJlbDogJ09yJyxcclxuICAgICAgYWRkUnVsZUJ1dHRvbkxhYmVsOiAnQWRkIGZpbHRlcicsXHJcbiAgICAgIGFkZFJ1bGVTZXRCdXR0b25MYWJlbDogJ0FkZCBmaWx0ZXIgc2V0JyxcclxuICAgICAgcmVtb3ZlUnVsZVNldEJ1dHRvbkxhYmVsOiAnUmVtb3ZlIHJ1bGUgc2V0J1xyXG4gICAgfSxcclxuICAgIG5vUnVsZXNMYWJlbDogJ0FkZCBmaWx0ZXIgb3IgZmlsdGVyIHNldCB0byBzdGFydCcsXHJcbiAgICBzZWFyY2hCdXR0b25MYWJlbDogJ0NsZWFyJyxcclxuICAgIGNsZWFyQnV0dG9uTGFiZWw6ICdDbGVhcicsXHJcbiAgICBmaWVsZHNQbGFjZWhvbGRlcnM6IHtcclxuICAgICAgYm9vbGVhbjoge1xyXG4gICAgICAgICAgdHJ1ZTogJ1RydWUnLFxyXG4gICAgICAgICAgZmFsc2U6ICdGYWxzZSdcclxuICAgICAgfSxcclxuICAgICAgZGVjaW1hbDogJ0luc2VydCBkZWNpbWFsIG51bWJlcicsXHJcbiAgICAgIGxpc3Q6ICdTZWxlY3QgYW4gb3B0aW9uJyxcclxuICAgICAgbnVtYmVyOiAnSW5zZXJ0IGEgbnVtYmVyJyxcclxuICAgICAgdGV4dDogJ0luc2VydCB0ZXh0JyxcclxuICAgICAgZGF0ZXRpbWU6ICdTZWxlY3QgYSBkYXRlJ1xyXG4gICAgfSxcclxuICAgIG9wZXJhdG9yczoge1xyXG4gICAgICBjb250YWluczonY29udGFpbnMnXHJcbiAgICB9LFxyXG4gICAgZmllbGRzOiB7XHJcbiAgICAgIElkbGVEZWFkbGluZTogJ0lkJyxcclxuICAgICAgbmFtZTogJ05hbWUnLFxyXG4gICAgICBjb2RlOiAnQ29kZScsXHJcbiAgICAgIGRlbGV0ZTogJ0RlbGV0ZWQnLFxyXG4gICAgICBjb3VudHJ5OiAnQ291bnRyeSdcclxuICAgIH1cclxuICB9O1xyXG4gIFxyXG4gIEBPdXRwdXQoJ3NlYXJjaENsaWNrZWQnKSBzZWFyY2hDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxRdWVyeVJlc3VsdHM+KCk7XHJcbiAgQE91dHB1dCgnY2xlYXJDbGlja2VkJykgY2xlYXJDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoJ2xhc3RRdWVyeScpIGxhc3RRdWVyeSA9IG5ldyBFdmVudEVtaXR0ZXI8UXVlcnlSZXN1bHRzPigpO1xyXG4gIFxyXG4gIHN0YXRlT3B0aW9uczogYW55W10gPSBbeyBsYWJlbDogdGhpcy50cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2guYW5kQnV0dG9uTGFiZWwsIHZhbHVlOiAnYW5kJyB9LCB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5vckJ1dHRvbkxhYmVsLCB2YWx1ZTogJ29yJyB9XTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgXHJcbiAgICBwcml2YXRlIGFwaVNlcnZpY2U6IEFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNlc3Npb25TdG9yYWdlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaXNBZHZhbmNlZFNlYXJjaCA9IHRoaXMuc2Vzc2lvblN0b3JhZ2UuZ2V0TGFzdEZpbHRlclBhbmVsUXVlcnkodGhpcy50ZW5hbnRJZCwgdGhpcy5maWx0ZXJJZCk/LmFkdmFuY2VkUXVlcnlWYWx1ZSA/IHRydWUgOiBmYWxzZTtcclxuICAgIHRoaXMuc3RvcmVkUXVlcnk9IHRoaXMuc2Vzc2lvblN0b3JhZ2UuZ2V0TGFzdEZpbHRlclBhbmVsUXVlcnkodGhpcy50ZW5hbnRJZCwgdGhpcy5maWx0ZXJJZClcclxuICAgIHRoaXMuZ2V0UXVlcnlCdWlsZGVyRmlsdGVyUGFuZWwoKTtcclxuICB9XHJcbiAgXHJcbiAgaW5pdFF1ZXJ5QnVpbGRlckNvbnRyb2xzKCkge1xyXG4gICAgdGhpcy5xdWVyeUN0cmwgPSB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wodGhpcy5iYXNpY1F1ZXJ5KTtcclxuICAgIHRoaXMuYWR2YW5jZWRRdWVyeUN0cmwgPSB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wodGhpcy5hZHZhbmNlZFF1ZXJ5KTtcclxuICAgIGlmKHRoaXMuZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dHcm91cGVkKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBlZFF1ZXJ5Q3RybCA9IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbCh0aGlzLmdyb3VwZWRRdWVyeSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmKHRoaXMuc3RvcmVkUXVlcnkpIHtcclxuICAgICAgbGV0IGxhc3RRdWVyeTogUXVlcnlSZXN1bHRzID0ge1xyXG4gICAgICAgIHR5cGU6IHRoaXMuZ2V0UXVlcnlUeXBlKCksXHJcbiAgICAgICAgYmFzaWM6IHRoaXMuc3RvcmVkUXVlcnk/LmJhc2ljUXVlcnlWYWx1ZSA/IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc3RvcmVkUXVlcnk/LmJhc2ljUXVlcnlWYWx1ZSkgOiBudWxsLFxyXG4gICAgICAgIGFkdmFuY2VkOiB0aGlzLnN0b3JlZFF1ZXJ5Py5hZHZhbmNlZFF1ZXJ5VmFsdWUgPyBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnN0b3JlZFF1ZXJ5Py5hZHZhbmNlZFF1ZXJ5VmFsdWUpIDogbnVsbCxcclxuICAgICAgICBncm91cGVkOiB0aGlzLmlzQWR2YW5jZWRTZWFyY2ggJiYgdGhpcy5maWx0ZXJQYW5lbE9iamVjdC5hbGxvd0dyb3VwZWQgJiYgdGhpcy5ncm91cGVkUXVlcnlDdHJsID8gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5ncm91cGVkUXVlcnlDdHJsPy52YWx1ZSkgOiBudWxsXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3RvcmVkUXVlcnkuYmFzaWNRdWVyeVZhbHVlID8gXHJcbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyeS5iYXNpY1F1ZXJ5VmFsdWUgPSB0aGlzLnN0cmluZ0RhdGVQYXJzZSh0aGlzLnN0b3JlZFF1ZXJ5LmJhc2ljUXVlcnlWYWx1ZSkgOlxyXG4gICAgICAgIHRoaXMuc3RvcmVkUXVlcnkuYWR2YW5jZWRRdWVyeVZhbHVlID0gdGhpcy5zdHJpbmdEYXRlUGFyc2UodGhpcy5zdG9yZWRRdWVyeS5hZHZhbmNlZFF1ZXJ5VmFsdWUpO1xyXG5cclxuICAgICAgbGFzdFF1ZXJ5ID0gdGhpcy5kZWxldGVGaWVsZHNXaXRob3V0VmFsdWUobGFzdFF1ZXJ5KTtcclxuICAgICAgbGFzdFF1ZXJ5ID0gdGhpcy5oYW5kbGVFbXB0eUZpZWxkc1F1ZXJ5KGxhc3RRdWVyeSk7XHJcbiAgICAgIHRoaXMubGFzdFF1ZXJ5LmVtaXQobGFzdFF1ZXJ5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vRGV0ZWN0YSBsYXMgZmVjaGFzIGVuIHN0cmluZyB5IGxhcyBjb252aWVydGUgYSBEYXRlXHJcbiAgc3RyaW5nRGF0ZVBhcnNlKHF1ZXJ5OiBhbnkpIHtcclxuICAgIGNvbnN0IGRhdGVGb3JtYXRSZWdFeHAgPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9LlxcZHszfVokLztcclxuICAgIGNvbnN0IGRhdGVzSW5kZXhlczogbnVtYmVyW10gPSBxdWVyeS5ydWxlc1xyXG4gICAgICAgICAgICAgICAgICAubWFwKChydWxlOiBhbnksIGluZGV4Om51bWJlcikgPT4gKGRhdGVGb3JtYXRSZWdFeHAudGVzdChydWxlLnZhbHVlKSA/IGluZGV4IDogLTEpKVxyXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChpbmRleDpudW1iZXIpID0+IGluZGV4ICE9PSAtMSk7XHJcblxyXG4gICAgICBkYXRlc0luZGV4ZXMuZm9yRWFjaChkYXRlSW5kZXggPT4ge1xyXG4gICAgICAgIHF1ZXJ5LnJ1bGVzW2RhdGVJbmRleF0udmFsdWUgPSBuZXcgRGF0ZShxdWVyeS5ydWxlc1tkYXRlSW5kZXhdLnZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBxdWVyeTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlYXJjaFR5cGUoKSB7XHJcbiAgICB0aGlzLmlzQWR2YW5jZWRTZWFyY2ggPSAhdGhpcy5pc0FkdmFuY2VkU2VhcmNoO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hDbGlja2VkKCkge1xyXG4gICAgbGV0IHF1ZXJpZXM6IFF1ZXJ5UmVzdWx0cyA9IHtcclxuICAgICAgdHlwZTogdGhpcy5nZXRRdWVyeVR5cGUoKSxcclxuICAgICAgYmFzaWM6IHRoaXMuaXNBZHZhbmNlZFNlYXJjaCA/IG51bGwgOiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnF1ZXJ5Q3RybC52YWx1ZSksXHJcbiAgICAgIGFkdmFuY2VkOiB0aGlzLmlzQWR2YW5jZWRTZWFyY2ggPyBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmFkdmFuY2VkUXVlcnlDdHJsLnZhbHVlKSA6IG51bGwsXHJcbiAgICAgIGdyb3VwZWQ6IHRoaXMuaXNBZHZhbmNlZFNlYXJjaCAmJiB0aGlzLmZpbHRlclBhbmVsT2JqZWN0LmFsbG93R3JvdXBlZCA/IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ3JvdXBlZFF1ZXJ5Q3RybC52YWx1ZSkgOiBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRFbnRpdHkocXVlcmllcyk7XHJcblxyXG4gICAgcXVlcmllcyA9IHRoaXMuaW5pdGlhbGl6ZU9wZXJhdG9ycyhxdWVyaWVzKTtcclxuICAgIFxyXG4gICAgbGV0IHN0b3JlZFF1ZXJ5OiBTdG9yZWRGaWx0ZXJQYW5lbFF1ZXJ5ID0ge1xyXG4gICAgICBpZDogdGhpcy5maWx0ZXJJZCxcclxuICAgICAgYmFzaWNRdWVyeVZhbHVlOiBxdWVyaWVzLmJhc2ljLFxyXG4gICAgICBhZHZhbmNlZFF1ZXJ5VmFsdWU6IHF1ZXJpZXMuYWR2YW5jZWQsXHJcbiAgICAgIGdyb3VwZWRRdWVyeVZhbHVlOiBxdWVyaWVzLmdyb3VwZWRcclxuICAgIH1cclxuICAgIFxyXG4gICAgcXVlcmllcyA9IHRoaXMuZGVsZXRlRmllbGRzV2l0aG91dFZhbHVlKHF1ZXJpZXMpO1xyXG4gICAgcXVlcmllcyA9IHRoaXMuaGFuZGxlRW1wdHlGaWVsZHNRdWVyeShxdWVyaWVzKTtcclxuICAgIC8vTGEgc2lndWllbnRlIGZ1bmNpw7NuLCBubyBnZXN0aW9uYSBhZ3J1cGFkb3NcclxuICAgIHRoaXMubnVsbGFibGVGaWx0ZXJPcGVyYXRpb25IYW5kbGUocXVlcmllcy5iYXNpYyA/IHF1ZXJpZXMuYmFzaWMgOiBxdWVyaWVzLmFkdmFuY2VkKTtcclxuICAgIFxyXG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5zZXRMYXN0RmlsdGVyUGFuZWxRdWVyeSh0aGlzLnRlbmFudElkLCBzdG9yZWRRdWVyeSk7XHJcbiAgICBcclxuICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHF1ZXJpZXMpO1xyXG4gIH1cclxuXHJcbiAgb25DbGVhckNsaWNrZWQoKSB7XHJcbiAgICB0aGlzLnJlc2V0QmFzaWNRdWVyeVZhbHVlcygpO1xyXG4gICAgdGhpcy5hZHZhbmNlZFF1ZXJ5LnJ1bGVzID0gW107XHJcbiAgICB0aGlzLmdyb3VwZWRRdWVyeS5ydWxlcyA9IFtdO1xyXG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVMYXN0RmlsdGVyUGFuZWxRdWVyeSh0aGlzLnRlbmFudElkLCB0aGlzLmZpbHRlcklkKTtcclxuICAgIHRoaXMuY2xlYXJDbGlja2VkLmVtaXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFbXB0eUZpZWxkc1F1ZXJ5KHF1ZXJpZXM6IFF1ZXJ5UmVzdWx0cyk6IFF1ZXJ5UmVzdWx0cyB7XHJcbiAgICBpZihxdWVyaWVzLmFkdmFuY2VkICE9IG51bGwgJiYgcXVlcmllcy5hZHZhbmNlZD8ucnVsZXMubGVuZ3RoID09IDApIHtcclxuICAgICAgcXVlcmllcy50eXBlID0gMFxyXG4gICAgfVxyXG4gICAgaWYocXVlcmllcy5iYXNpYyAhPSBudWxsICYmIHF1ZXJpZXMuYmFzaWM/LnJ1bGVzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHF1ZXJpZXMudHlwZSA9IDBcclxuICAgIH1cclxuICAgIGlmKHF1ZXJpZXMuZ3JvdXBlZCAhPSBudWxsICYmIHF1ZXJpZXMuZ3JvdXBlZD8ucnVsZXMubGVuZ3RoID09IDApIHtcclxuICAgICAgcXVlcmllcy50eXBlID0gMFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHF1ZXJpZXM7XHJcbiAgfVxyXG5cclxuICBudWxsYWJsZUZpbHRlck9wZXJhdGlvbkhhbmRsZShxdWVyeTogYW55KSB7XHJcbiAgICBpZiAoXCJydWxlc1wiIGluIHF1ZXJ5KSB7XHJcbiAgICAgIHF1ZXJ5LnJ1bGVzLmZvckVhY2goKHJ1bGU6IFJ1bGVTZXQgfCBSdWxlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5udWxsYWJsZUZpbHRlck9wZXJhdGlvbkhhbmRsZShydWxlKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocXVlcnkub3BlcmF0b3IgPT09IE9wZXJhdG9yRW51bS5OdWxsYWJsZSkge1xyXG4gICAgICAgIHF1ZXJ5LnZhbHVlID09IDEgPyBxdWVyeS5vcGVyYXRvciA9ICdpcyBub3QnIDogcXVlcnkub3BlcmF0b3IgPSAnaXMnO1xyXG4gICAgICAgIHF1ZXJ5LnZhbHVlID0gJ251bGwnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRRdWVyeVR5cGUoKTogUXVlcnlSZXN1bHRUeXBlIHtcclxuICAgIGlmKCF0aGlzLmlzQWR2YW5jZWRTZWFyY2gpIHtcclxuICAgICAgcmV0dXJuIFF1ZXJ5UmVzdWx0VHlwZS5CYXNpYztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmKHRoaXMuaXNBZHZhbmNlZFNlYXJjaCAmJiB0aGlzLmdyb3VwZWRRdWVyeUN0cmw/LnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIFF1ZXJ5UmVzdWx0VHlwZS5Hcm91cGVkXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIFF1ZXJ5UmVzdWx0VHlwZS5BZHZhbmNlZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0RW50aXR5KHF1ZXJpZXM6IFF1ZXJ5UmVzdWx0cykge1xyXG4gICAgaWYodGhpcy5nZXRRdWVyeVR5cGUoKSA9PSBRdWVyeVJlc3VsdFR5cGUuQmFzaWMpIHtcclxuICAgICAgcXVlcmllcy5iYXNpYyEucnVsZXMgPSBxdWVyaWVzLmJhc2ljIS5ydWxlcy5tYXAoKHI6YW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGZpZWxkOiByLmZpZWxkLFxyXG4gICAgICAgICAgb3BlcmF0b3I6IHIub3BlcmF0b3IsXHJcbiAgICAgICAgICB2YWx1ZTogci52YWx1ZSxcclxuICAgICAgICAgIGVudGl0eTogdGhpcy5lbnRpdGllcy5maW5kKGUgPT4gZS5maWVsZEpzb25OYW1lID09IHIuZmllbGQpLmVudGl0eVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFF1ZXJ5QnVpbGRlckZpbHRlclBhbmVsKCkge1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlLmdldEZpbHRlclBhbmVsKHRoaXMuYXV0aG9yaXphdGlvbkFwaVVybCwgdGhpcy50b2tlbiwgdGhpcy5jb21tb25EYXRhQXBpVXJsLCB0aGlzLmNvbW1vbkRhdGFUb2tlbiwgdGhpcy5maWx0ZXJJZClcclxuICAgICAgLnN1YnNjcmliZSgocWJQYW5lbEZpbHRlcjogUWJQYW5lbEZpbHRlcikgPT4ge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFuZWxPYmplY3QgPSBxYlBhbmVsRmlsdGVyO1xyXG4gICAgICAgIGxldCBiYXNpY0ZpbHRlcklkczogbnVtYmVyW10gPSBxYlBhbmVsRmlsdGVyLnFicGFuZWxUb0ZpZWxkcy5maWx0ZXIocGFuZWxUb0ZpZWxkID0+IHBhbmVsVG9GaWVsZC5iYXNpYykubWFwKHBhbmVsVG9GaWVsZCA9PiBwYW5lbFRvRmllbGQucWJmaWx0ZXJGaWVsZElkKTtcclxuICAgICAgICBsZXQgYWR2YW5jZWRGaWx0ZXJJZHM6IG51bWJlcltdID0gcWJQYW5lbEZpbHRlci5xYnBhbmVsVG9GaWVsZHMuZmlsdGVyKHBhbmVsVG9GaWVsZCA9PiAhcGFuZWxUb0ZpZWxkLmJhc2ljKS5tYXAocGFuZWxUb0ZpZWxkID0+IHBhbmVsVG9GaWVsZC5xYmZpbHRlckZpZWxkSWQpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlcyA9IHFiUGFuZWxGaWx0ZXIucWJwYW5lbFRvRmllbGRzLm1hcChwYW5lbFRvRmllbGQgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcWJmaWx0ZXJGaWVsZElkOiBwYW5lbFRvRmllbGQucWJmaWx0ZXJGaWVsZElkLFxyXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IHBhbmVsVG9GaWVsZC5kZWZhdWx0VmFsdWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZGVmYXVsdE9wZXJhdG9ycyA9IHFiUGFuZWxGaWx0ZXIucWJwYW5lbFRvRmllbGRzLm1hcChwYW5lbFRvRmllbGQgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcWJmaWx0ZXJGaWVsZElkOiBwYW5lbFRvRmllbGQucWJmaWx0ZXJGaWVsZElkLFxyXG4gICAgICAgICAgICBxYmRlZmF1bHRPcGVyYXRvcjogcGFuZWxUb0ZpZWxkLnFiZGVmYXVsdE9wZXJhdG9yXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICBsZXQgZmlsdGVyRW50aXR5OiBRYkZpbHRlckVudGl0eVtdID0gcWJQYW5lbEZpbHRlci5xYnBhbmVsVG9GaWVsZHMubWFwKHBhbmVsVG9GaWVsZCA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpZDogcGFuZWxUb0ZpZWxkLnFiZmlsdGVyRmllbGQucWJmaWx0ZXJFbnRpdHkuaWQsIFxyXG4gICAgICAgICAgICBiYXNpYzogcGFuZWxUb0ZpZWxkLmJhc2ljLFxyXG4gICAgICAgICAgICBuYW1lOiBwYW5lbFRvRmllbGQucWJmaWx0ZXJGaWVsZC5xYmZpbHRlckVudGl0eS5uYW1lLCBcclxuICAgICAgICAgICAganNvbk5hbWU6IHBhbmVsVG9GaWVsZC5xYmZpbHRlckZpZWxkLnFiZmlsdGVyRW50aXR5Lmpzb25OYW1lLCBcclxuICAgICAgICAgICAgZmllbGRzOiBbXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gcWJQYW5lbEZpbHRlci5xYnBhbmVsVG9GaWVsZHMubWFwKHAgPT4gcC5xYmZpbHRlckZpZWxkKTtcclxuICAgICAgICBmaWx0ZXJFbnRpdHkuZm9yRWFjaCgoZW50aXR5OiBRYkZpbHRlckVudGl0eSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgIGxldCBmaWVsZHMgPSBmaWx0ZXJGaWVsZHMuZmlsdGVyKGUgPT4gZS5xYmZpbHRlckVudGl0eS5pZCA9PSBlbnRpdHkuaWQpO1xyXG4gICAgICAgICAgIGZpbHRlckVudGl0eVtpbmRleF0uZmllbGRzID0gZmllbGRzIDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuYmFzaWNRdWVyeUNvbmZpZyA9IHRoaXMuaW5pdFF1ZXJ5QnVpbGRlcihmaWx0ZXJFbnRpdHkpO1xyXG4gICAgICAgIHRoaXMuYmFzaWNRdWVyeUNvbmZpZyA9IHRoaXMuZmlsdGVyRmllbGRzQnlJZCh0aGlzLmJhc2ljUXVlcnlDb25maWcsIGJhc2ljRmlsdGVySWRzKTtcclxuICAgICAgICB0aGlzLmJhc2ljUXVlcnlDb25maWcuZmllbGRzID0gdGhpcy50cmFuc2xhdGVGaWVsZHModGhpcy5iYXNpY1F1ZXJ5Q29uZmlnLmZpZWxkcyk7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlZFF1ZXJ5Q29uZmlnID0gdGhpcy5pbml0UXVlcnlCdWlsZGVyKGZpbHRlckVudGl0eSk7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlZFF1ZXJ5Q29uZmlnID0gdGhpcy5maWx0ZXJGaWVsZHNCeUlkKHRoaXMuYWR2YW5jZWRRdWVyeUNvbmZpZywgYWR2YW5jZWRGaWx0ZXJJZHMpO1xyXG4gICAgICAgIHRoaXMuYWR2YW5jZWRRdWVyeUNvbmZpZy5maWVsZHMgPSB0aGlzLnRyYW5zbGF0ZUZpZWxkcyh0aGlzLmFkdmFuY2VkUXVlcnlDb25maWcuZmllbGRzKTtcclxuICAgICAgICBsZXQgcnVsZXMgPSBPYmplY3Qua2V5cyh0aGlzLmJhc2ljUXVlcnlDb25maWcuZmllbGRzKVxyXG4gICAgICAgICAgLm1hcChmaWVsZEtleSA9PiB7IFxyXG4gICAgICAgICAgICBsZXQgZGVmYXVsdE9wZXJhdG9yID0gdGhpcy5kZWZhdWx0T3BlcmF0b3JzLmZpbmQob3BlcmF0b3IgPT4gb3BlcmF0b3IucWJmaWx0ZXJGaWVsZElkID09IHRoaXMuYmFzaWNRdWVyeUNvbmZpZy5maWVsZHNbZmllbGRLZXldLmlkICYmIG9wZXJhdG9yLnFiZGVmYXVsdE9wZXJhdG9yICE9IG51bGwpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIGZpZWxkOiBmaWVsZEtleSwgXHJcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuYmFzaWNRdWVyeUNvbmZpZy5maWVsZHNbZmllbGRLZXldLmRlZmF1bHRWYWx1ZSEsXHJcbiAgICAgICAgICAgICAgb3BlcmF0b3I6IGRlZmF1bHRPcGVyYXRvciA/IGRlZmF1bHRPcGVyYXRvci5xYmRlZmF1bHRPcGVyYXRvci5zeW1ib2wgOiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmKHRoaXMuc3RvcmVkUXVlcnkgJiYgdGhpcy5zdG9yZWRRdWVyeT8uaWQgPT0gdGhpcy5maWx0ZXJJZCAmJiB0aGlzLnN0b3JlZFF1ZXJ5Py5iYXNpY1F1ZXJ5VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNpY1F1ZXJ5ID0gdGhpcy5zdG9yZWRRdWVyeS5iYXNpY1F1ZXJ5VmFsdWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmJhc2ljUXVlcnkgPSB7XHJcbiAgICAgICAgICAgICAgY29uZGl0aW9uOiAnYW5kJyxcclxuICAgICAgICAgICAgICBydWxlczogcnVsZXNcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKHRoaXMuc3RvcmVkUXVlcnkgJiYgdGhpcy5zdG9yZWRRdWVyeT8uaWQgPT0gdGhpcy5maWx0ZXJJZCAmJiB0aGlzLnN0b3JlZFF1ZXJ5Py5hZHZhbmNlZFF1ZXJ5VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hZHZhbmNlZFF1ZXJ5ID0gdGhpcy5zdG9yZWRRdWVyeS5hZHZhbmNlZFF1ZXJ5VmFsdWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFkdmFuY2VkUXVlcnkgPSB7XHJcbiAgICAgICAgICAgICAgY29uZGl0aW9uOiAnYW5kJyxcclxuICAgICAgICAgICAgICBydWxlczogW11cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5xdWVyeUNvbmZpZ1JlYWR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmluaXRRdWVyeUJ1aWxkZXJDb250cm9scygpO1xyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgaW5pdFF1ZXJ5QnVpbGRlcihmaWx0ZXJFbnRpdGllczogUWJGaWx0ZXJFbnRpdHlbXSkge1xyXG4gICAgbGV0IGVudGl0eUNvbmZpZ0F1eDogUXVlcnlCdWlsZGVyQ29uZmlnID0geyBmaWVsZHM6IHt9IH07XHJcbiAgICBsZXQgZW50aXRpZXNBcnJheTogRW50aXR5TWFwW10gPSBbXTtcclxuICAgIFxyXG4gICAgZmlsdGVyRW50aXRpZXMubWFwKChlLCBpbmRleCkgPT4ge1xyXG4gICAgICBsZXQgZW50aXR5OiBFbnRpdHkgPSB7IG5hbWU6IGUuanNvbk5hbWUgfTtcclxuICAgICAgcmV0dXJuIGVudGl0aWVzQXJyYXlbaW5kZXhdID0geyBbZS5qc29uTmFtZV06IGVudGl0eSB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGVudGl0aWVzTWFwOiBFbnRpdHlNYXAgPSB7fTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBlbnRpdGllc0FycmF5KSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhlbnRpdHkpO1xyXG5cclxuICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgaWYodGhpcy50cmFuc2xhdGlvbnNPYmplY3QuZW50aXRpZXMpIHtcclxuICAgICAgICAgIGxldCBlbnRpdGllc1RyYW5zbGF0aW9uc0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5lbnRpdGllcyk7XHJcbiAgICAgICAgICBsZXQgdHJhbnNsYXRpb24gPSBlbnRpdGllc1RyYW5zbGF0aW9uc0tleXMuZmluZCh0cmFuc2xhdGlvbktleSA9PiB0cmFuc2xhdGlvbktleSA9PSBrZXkpO1xyXG4gICAgICAgICAgaWYodHJhbnNsYXRpb24pIHtcclxuICAgICAgICAgICAgZW50aXRpZXNNYXBba2V5XSA9IHsgbmFtZTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3QuZW50aXRpZXNba2V5XSB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlbnRpdGllc01hcFtrZXldID0gZW50aXR5W2tleV1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZW50aXRpZXNNYXBba2V5XSA9IGVudGl0eVtrZXldXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGVudGl0eUNvbmZpZ0F1eC5lbnRpdGllcyA9IGVudGl0aWVzTWFwO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmaWVsZHM6IEZpZWxkTWFwW10gPSBbXTtcclxuICAgIGZpbHRlckVudGl0aWVzLmZvckVhY2goKGZpbHRlckVudGl0eSkgPT4ge1xyXG4gICAgICByZXR1cm4gZmlsdGVyRW50aXR5LmZpZWxkcy5maWx0ZXIoKGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCkgPT4ge1xyXG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyID0gZmllbGRzLmxlbmd0aCA/PyAwO1xyXG4gICAgICAgIGxldCBvcGVyYXRvcnNGbGF0QXJyYXkgPSBmaWx0ZXJGaWVsZC5vcGVyYXRvcnMubWFwKChvOmFueSkgPT4gby5zeW1ib2wpO1xyXG4gICAgICAgIGxldCBkZWZhdWx0T3BlcmF0b3IgPSB0aGlzLmRlZmF1bHRPcGVyYXRvcnMuZmluZChvcGVyYXRvciA9PiBvcGVyYXRvci5xYmZpbHRlckZpZWxkSWQgPT0gZmlsdGVyRmllbGQuaWQpO1xyXG4gICAgICAgIGxldCBmaWVsZDogRmllbGQgPSB7XHJcbiAgICAgICAgICBpZDogZmlsdGVyRmllbGQuaWQsXHJcbiAgICAgICAgICBuYW1lOiBmaWx0ZXJGaWVsZC5uYW1lLFxyXG4gICAgICAgICAgb3BlcmF0b3JzOiBkZWZhdWx0T3BlcmF0b3IucWJkZWZhdWx0T3BlcmF0b3I/LnN5bWJvbCA/IHRoaXMubW92ZUVsZW1lbnRUb0ZpcnN0UGxhY2Uob3BlcmF0b3JzRmxhdEFycmF5LCBkZWZhdWx0T3BlcmF0b3IucWJkZWZhdWx0T3BlcmF0b3I/LnN5bWJvbCkgOiBvcGVyYXRvcnNGbGF0QXJyYXksXHJcbiAgICAgICAgICB0eXBlOiB0aGlzLmdldERhdGFUeXBlKGZpbHRlckZpZWxkLmRhdGFUeXBlKSxcclxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5mb3JtYXREZWZhdWx0VmFsdWUodGhpcy5kZWZhdWx0VmFsdWVzLmZpbmQodmFsdWUgPT4gdmFsdWUucWJmaWx0ZXJGaWVsZElkID09IGZpbHRlckZpZWxkLmlkKS5kZWZhdWx0VmFsdWUsIGZpbHRlckZpZWxkLmRhdGFUeXBlKSxcclxuICAgICAgICAgIGRlZmF1bHRPcGVyYXRvcjogZGVmYXVsdE9wZXJhdG9yLnFiZGVmYXVsdE9wZXJhdG9yPy5zeW1ib2wsXHJcbiAgICAgICAgICBlbnRpdHk6IGZpbHRlckVudGl0eS5qc29uTmFtZSxcclxuICAgICAgICAgIG9wdGlvbnM6IGZpbHRlckZpZWxkLmxpc3RPZlZhbHVlcyxcclxuICAgICAgICAgIHZhbGlkYXRvcjogKHJ1bGU6IFJ1bGUsIHBhcmVudDogUnVsZVNldCk6IGFueSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBpZiAocnVsZS5vcGVyYXRvciAhPT0gXCJpcyBudWxsXCIgJiYgcnVsZS5vcGVyYXRvciAhPT0gXCJpcyBub3QgbnVsbFwiKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHJ1bGUudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBydWxlLnZhbHVlID09PSBudWxsIHx8IHJ1bGUudmFsdWUgPT09ICcnIHx8IHJ1bGUudmFsdWUubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiAnZW1wdHkgZmllbGQnIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVudGl0aWVzLnB1c2goe2ZpZWxkSnNvbk5hbWU6IGZpbHRlckZpZWxkLmpzb25OYW1lLCBlbnRpdHk6IGZpZWxkLmVudGl0eX0pO1xyXG4gICAgICAgIGZpZWxkc1tpbmRleF0gPSB7IFtmaWx0ZXJGaWVsZC5qc29uTmFtZV06IGZpZWxkIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGZpZWxkc01hcDogRmllbGRNYXAgPSB7fTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xyXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmllbGQpO1xyXG4gICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBmaWVsZHNNYXBba2V5XSA9IGZpZWxkW2tleV07XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZW50aXR5Q29uZmlnQXV4LmZpZWxkcyA9IGZpZWxkc01hcDtcclxuICAgIH1cclxuICAgIHJldHVybiBlbnRpdHlDb25maWdBdXg7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJGaWVsZHNCeUlkKGZpZWxkc09iajogYW55LCBpZEFycmF5OiBudW1iZXJbXSk6IGFueSB7XHJcbiAgICBjb25zdCBmaWx0ZXJlZEZpZWxkczogYW55ID0ge307XHJcbiAgICBcclxuICAgIGZvciAoY29uc3Qga2V5IGluIGZpZWxkc09iai5maWVsZHMpIHtcclxuICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHNPYmouZmllbGRzW2tleV07XHJcbiAgICAgIGlmIChpZEFycmF5LmluY2x1ZGVzKGZpZWxkLmlkKSkge1xyXG4gICAgICAgIGZpbHRlcmVkRmllbGRzW2tleV0gPSBmaWVsZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5maWVsZHNPYmosXHJcbiAgICAgIGZpZWxkczogZmlsdGVyZWRGaWVsZHMsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgdHJhbnNsYXRlRmllbGRzKGZpZWxkczogRmllbGRNYXApIHtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIGZpZWxkcykge1xyXG4gICAgICBpZiAoZmllbGRzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICBmaWVsZHNba2V5XS5maWVsZCA9IGtleTtcclxuICAgICAgICBmaWVsZHNba2V5XS5uYW1lID0gdGhpcy50cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzW2tleV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmaWVsZHM7XHJcbiAgfVxyXG5cclxuICBtb3ZlRWxlbWVudFRvRmlyc3RQbGFjZShhcnJheTogYW55W10sIGVsZW1lbnRUb0ZpcnN0UGxhY2U6IHN0cmluZykge1xyXG4gICAgY29uc3QgaW5kZXggPSBhcnJheS5pbmRleE9mKGVsZW1lbnRUb0ZpcnN0UGxhY2UpO1xyXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICBhcnJheS51bnNoaWZ0KGVsZW1lbnRUb0ZpcnN0UGxhY2UpOyBcclxuICAgIH1cclxuICAgIHJldHVybiBhcnJheTtcclxuICB9XHJcblxyXG4gIGZvcm1hdERlZmF1bHRWYWx1ZSh2YWx1ZTogYW55LCB0eXBlOiBRQkRhdGFUeXBlRW51bSkge1xyXG4gICAgaWYodmFsdWUpIHtcclxuICAgICAgaWYodHlwZSA9PSBRQkRhdGFUeXBlRW51bS5Cb29sZWFuKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJztcclxuICAgICAgfVxyXG4gICAgICBpZih0eXBlID09IHRoaXMucWJEYXRhVHlwZUVudW0uTnVtYmVyIHx8IHR5cGUgPT0gdGhpcy5xYkRhdGFUeXBlRW51bS5EZWNpbWFsIHx8IHR5cGUgPT0gdGhpcy5xYkRhdGFUeXBlRW51bS5MaXN0KXtcclxuICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSBcclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldERhdGFUeXBlKGlkOiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLnFiRGF0YUVudW1zLmZpbmQodmFsdWUgPT4gdmFsdWUgPT09IGlkKT8udG9TdHJpbmcoKSA/PyBcIlwiO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlRmllbGRzV2l0aG91dFZhbHVlKGpzb246IGFueSkge1xyXG4gICAgaWYgKGpzb24uYmFzaWMgJiYganNvbi5iYXNpYy5ydWxlcykge1xyXG4gICAgICBqc29uLmJhc2ljLnJ1bGVzID0ganNvbi5iYXNpYy5ydWxlcy5maWx0ZXIoKHJ1bGU6IGFueSkgPT4gcnVsZS52YWx1ZSAhPSBudWxsKTtcclxuICAgICAganNvbi5iYXNpYy5ydWxlcyA9IGpzb24uYmFzaWMucnVsZXMuZmlsdGVyKChydWxlOiBhbnkpID0+IHJ1bGUudmFsdWUgIT0gdW5kZWZpbmVkKTtcclxuICAgICAganNvbi5iYXNpYy5ydWxlcyA9IGpzb24uYmFzaWMucnVsZXMuZmlsdGVyKChydWxlOiBhbnkpID0+IHJ1bGUudmFsdWUgIT09IFwiXCIpO1xyXG4gICAgfVxyXG4gICAgaWYoanNvbi5hZHZhbmNlZCAmJiBqc29uLmFkdmFuY2VkLnJ1bGVzPy5sZW5ndGggIT0gMCkge1xyXG4gICAgICBqc29uLmFkdmFuY2VkLnJ1bGVzID0ganNvbi5hZHZhbmNlZC5ydWxlcy5maWx0ZXIoKHJ1bGU6IGFueSkgPT4gcnVsZS5ydWxlcz8ubGVuZ3RoICE9IDApO1xyXG4gICAgfVxyXG4gICAgaWYoanNvbi5ncm91cGVkICYmIGpzb24uZ3JvdXBlZD8ucnVsZXMubGVuZ3RoICE9IDApIHtcclxuICAgICAganNvbi5ncm91cGVkLnJ1bGVzID0ganNvbi5ncm91cGVkLnJ1bGVzLmZpbHRlcigocnVsZTogYW55KSA9PiBydWxlLnJ1bGVzPy5sZW5ndGggIT0gMCk7XHJcbiAgICB9XHJcbiAgICBpZihqc29uLmdyb3VwZWQgJiYganNvbi5ncm91cGVkPy5ydWxlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICBqc29uLmdyb3VwZWQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGpzb247XHJcbiAgfVxyXG4gIFxyXG4gIGluaXRpYWxpemVPcGVyYXRvcnMoanNvbjogYW55KSB7XHJcbiAgICBpZiAoanNvbi5iYXNpYyAmJiBqc29uLmJhc2ljLnJ1bGVzKSB7XHJcbiAgICAgIGpzb24uYmFzaWMucnVsZXMuZm9yRWFjaCgocnVsZTphbnkpID0+IHtcclxuICAgICAgICBpZighcnVsZS5vcGVyYXRvcikge1xyXG4gICAgICAgICAgcnVsZS5vcGVyYXRvciA9IFwiPVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ganNvbjtcclxuICB9XHJcblxyXG4gIHJlc2V0QmFzaWNRdWVyeVZhbHVlcygpIHtcclxuICAgIHRoaXMuYmFzaWNRdWVyeS5ydWxlcy5mb3JFYWNoKChydWxlOiBSdWxlKSA9PiB7XHJcbiAgICAgIGlmKHJ1bGUudmFsdWUgfHwgcnVsZS52YWx1ZSA9PSAwKXtcclxuICAgICAgICBydWxlLnZhbHVlID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFF1ZXJ5RmllbGROYW1lKGZpZWxkTmFtZTogc3RyaW5nLCBmaWVsZHM6IEZpZWxkTWFwKSB7XHJcbiAgICBjb25zdCBmaWVsZEVudHJ5ID0gT2JqZWN0LmtleXMoZmllbGRzKS5maW5kKGtleSA9PiBmaWVsZHNba2V5XS5maWVsZCA9PT0gZmllbGROYW1lKTtcclxuXHJcbiAgICByZXR1cm4gZmllbGRFbnRyeSAmJiBmaWVsZHNbZmllbGRFbnRyeV0ubmFtZSA/IGZpZWxkc1tmaWVsZEVudHJ5XS5uYW1lIDogZmllbGROYW1lO1xyXG4gIH1cclxuXHJcbiAgZmllbGRJc0Jvb2xlYW4oZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkczogRmllbGRNYXApIHtcclxuICAgIGNvbnN0IGZpZWxkRW50cnkgPSBPYmplY3Qua2V5cyhmaWVsZHMpLmZpbmQoa2V5ID0+IGZpZWxkc1trZXldLmZpZWxkID09PSBmaWVsZE5hbWUpO1xyXG5cclxuICAgIHJldHVybiBmaWVsZHNbZmllbGRFbnRyeSFdLnR5cGUgPT0gUUJEYXRhVHlwZUVudW0uQm9vbGVhbi50b1N0cmluZygpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPCEtLSBUT0RPOiBJbnRlbnRhciBvdHJhIHZleiBwYXNhciBsb3MgY29tcG9uZW50ZXMgYSBsb3MgZGUgdy0gcG9ycXVlIG5vIHNlIGFsaW5lbmEgeSBlbCB3LWVkaXQtc2VsZWN0IG5vIHZhIGJpZW4gZW4gZmllbGQuIFxyXG4gIEFob3JhIHNlIGNvbnNlcnZhbiBsb3MgZGUgcC13IGNvbiBlc3RpbG9zLiAtLT5cclxuPHAtYmxvY2tVSSBzdHlsZUNsYXNzPVwidy1maWx0ZXItcGFuZWwtYmxvY2t1aVwiIFthdXRvWkluZGV4XT1cImZhbHNlXCIgW3RhcmdldF09XCJmaWx0ZXJQYW5lbFwiIFtibG9ja2VkXT1cImRhdGFJc0xvYWRpbmdTZWFyY2hCdXR0b25cIj48L3AtYmxvY2tVST5cclxuXHJcbjxwLWNhcmQgc3R5bGVDbGFzcz1cInctZmlsdGVyLXBhbmVsLW5vLXN0eWxlLWNhcmRcIiAjZmlsdGVyUGFuZWw+XHJcbiAgPGRpdiAqbmdJZj1cInF1ZXJ5Q29uZmlnUmVhZHlcIiBjbGFzcz1cInctZmlsdGVyLXBhbmVsLXN0eWxlc1wiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWZpbHRlclBhbmVsT2JqZWN0LmFsbG93QWR2YW5jZWRTZWFyY2g7IGVsc2UgYmFpc2NBbmRBZHZhbmNlZFwiPlxyXG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAndy1maWx0ZXItcGFuZWwtY29udGFpbmVyLWFkdmFuY2VkJyA6IGlzQWR2YW5jZWRTZWFyY2gsICd3LWZpbHRlci1wYW5lbC1jb250YWluZXItYmFzaWMnIDogIWlzQWR2YW5jZWRTZWFyY2ggfVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJhc2ljXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJ1dHRvbi1nYXBcIj5cclxuICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuY2xlYXJCdXR0b25MYWJlbFwiIHR5cGU9XCJ0ZXJ0aWFyeVwiIHNpemU9XCJzbWFsbFwiIChvbkNsaWNrKT1cIm9uQ2xlYXJDbGlja2VkKClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5zZWFyY2hCdXR0b25MYWJlbFwiIHNpemU9XCJzbWFsbFwiIChvbkNsaWNrKT1cIm9uU2VhcmNoQ2xpY2tlZCgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjYmFpc2NBbmRBZHZhbmNlZD5cclxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3ctZmlsdGVyLXBhbmVsLWNvbnRhaW5lci1hZHZhbmNlZCcgOiBpc0FkdmFuY2VkU2VhcmNoLCAndy1maWx0ZXItcGFuZWwtY29udGFpbmVyLWJhc2ljJyA6ICFpc0FkdmFuY2VkU2VhcmNoIH1cIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0FkdmFuY2VkU2VhcmNoOyBlbHNlIGFkdmFuY2VkVmlld1wiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJiYXNpY1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNhZHZhbmNlZFZpZXc+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFkdmFuY2VkXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJ1dHRvbi1nYXBcIiBbY2xhc3MucHQtM109XCJpc0FkdmFuY2VkU2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuY2xlYXJCdXR0b25MYWJlbFwiIHR5cGU9XCJ0ZXJ0aWFyeVwiIHNpemU9XCJzbWFsbFwiIChvbkNsaWNrKT1cIm9uQ2xlYXJDbGlja2VkKClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDx3LWJ1dHRvbiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LnNlYXJjaEJ1dHRvbkxhYmVsXCIgc2l6ZT1cInNtYWxsXCIgKG9uQ2xpY2spPVwib25TZWFyY2hDbGlja2VkKClcIiBbbG9hZGluZ109XCJkYXRhSXNMb2FkaW5nU2VhcmNoQnV0dG9uXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9kaXY+XHJcbjwvcC1jYXJkPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2Jhc2ljPlxyXG4gICAgPGRpdiAqbmdJZj1cImZpbHRlclBhbmVsT2JqZWN0LmFsbG93QWR2YW5jZWRTZWFyY2hcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCBmbGV4LXdyYXBcIj5cclxuICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2hUYWJMYWJlbFwiIHR5cGU9XCJ0ZXh0XCIgKG9uQ2xpY2spPVwidXBkYXRlU2VhcmNoVHlwZSgpXCI+PC93LWJ1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInctZmlsdGVyLXBhbmVsLWJhc2ljIHF1ZXJ5LWJ1aWxkZXItc3R5bGUgZmFkZWluIGFuaW1hdGlvbi1kdXJhdGlvbi01MDBcIj5cclxuICAgICAgPHF1ZXJ5LWJ1aWxkZXIgW2Zvcm1Db250cm9sXT0ncXVlcnlDdHJsJyBbY29uZmlnXT0nYmFzaWNRdWVyeUNvbmZpZycgW2FsbG93UnVsZXNldF09J2ZpbHRlclBhbmVsT2JqZWN0LmFsbG93UnVsZVNldCcgW2FsbG93UnVsZXNldF09XCJmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd1J1bGVTZXRcIiBbcGVyc2lzdFZhbHVlT25GaWVsZENoYW5nZV09J3BlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2UnPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5QnV0dG9uR3JvdXA9XCJsZXQgcnVsZXNldDtcIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlSZW1vdmVCdXR0b249XCJsZXQgcnVsZTsgbGV0IHJlbW92ZVJ1bGU9cmVtb3ZlUnVsZVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeVN3aXRjaEdyb3VwPVwibGV0IHJ1bGVzZXQ7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUVudGl0eT1cImxldCBydWxlOyBsZXQgZW50aXRpZXM9ZW50aXRpZXM7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgPHAtZHJvcGRvd24gW2Rpc2FibGVkXT1cInRydWVcIiBjbGFzcz1cIiB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgKm5nSWY9XCJmYWxzZVwiIGFwcGVuZFRvPVwiYm9keVwiIFtvcHRpb25zXT1cImVudGl0aWVzXCIgWyhuZ01vZGVsKV09XCJydWxlLmVudGl0eVwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIG9wdGlvblZhbHVlPVwidmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIHJ1bGUpXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUZpZWxkPVwibGV0IHJ1bGU7IGxldCBmaWVsZHM9ZmllbGRzOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2U7IGxldCBnZXRGaWVsZHMgPSBnZXRGaWVsZHM7IGxldCB2YWx1ZT12YWx1ZTsgbGV0IG5hbWU9bmFtZTsgbGV0IGluZGV4PWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gYXBwZW5kVG89XCJib2R5XCIgY2xhc3M9XCJ3LTQgdGV4dC1sZWZ0IHctZmlsdGVyLXBhbmVsLWlucHV0LXRleHQtbGFiZWxcIiBbY2xhc3Mudy1maWx0ZXItcGFuZWwtYm9vbGVhbi1sYWJlbC13aWR0aF09XCJmaWVsZElzQm9vbGVhbihydWxlLmZpZWxkLCBnZXRGaWVsZHMocnVsZS5lbnRpdHkpKVwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIG9wdGlvblZhbHVlPVwidmFsdWVcIj57eyBnZXRRdWVyeUZpZWxkTmFtZShydWxlLmZpZWxkLCBnZXRGaWVsZHMocnVsZS5lbnRpdHkpKX19PC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeU9wZXJhdG9yPVwibGV0IHJ1bGU7IGxldCBvcGVyYXRvcnM9b3BlcmF0b3JzOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLW9wZXJhdG9yLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtZHJvcGRvd24gY2xhc3M9XCIgdy1lZGl0LXNlbGVjdC1zbWFsbFwiICpuZ0lmPVwiaXNBZHZhbmNlZFNlYXJjaFwiIGFwcGVuZFRvPVwiYm9keVwiIFsobmdNb2RlbCldPVwicnVsZS5vcGVyYXRvclwiIFtvcHRpb25zXT1cIm9wZXJhdG9yc1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKHJ1bGUpXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgdHlwZTogcWJEYXRhVHlwZUVudW0uQm9vbGVhbi50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1vcGVyYXRvci13aWR0aFwiPlxyXG4gICAgICAgICAgICA8dy10b2dnbGUtYnV0dG9uIHNpemU9XCJzbWFsbFwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIG9uTGFiZWw9XCJUcnVlXCIgb2ZmTGFiZWw9XCJGYWxzZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIj48L3ctdG9nZ2xlLWJ1dHRvbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5EYXRldGltZS50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3LWVkaXQtY2FsZW5kYXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxyXG4gICAgICAgICAgICAgIDx3LWVkaXQtY2FsZW5kYXIgYXBwZW5kVG89XCJib2R5XCIgc2l6ZT1cInNtYWxsXCIgW3Nob3dJY29uXT1cImZhbHNlXCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbc2hvd1RpbWVdPVwidHJ1ZVwiIFtzaG93U2Vjb25kc109XCJ0cnVlXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMuZGF0ZXRpbWVcIiBbZGlzcGxheUlubGluZUJsb2NrXT1cInRydWVcIj48L3ctZWRpdC1jYWxlbmRhcj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uRGVjaW1hbC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3LWZpbHRlci1wYW5lbC1iYXNpYy1xdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXIgaW5wdXRTdHlsZUNsYXNzPVwiZmxleCBmbGV4LTFcIiBzdHlsZUNsYXNzPVwiZmxleCBmbGV4LTFcIiBjbGFzcz1cIiB3LWZpbHRlci1wYW5lbC1iYXNpYy1xdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoIHctZWRpdC1pbnB1dC1udW1iZXItc21hbGwgdy1lZGl0LWlucHV0LW51bWJlci1zbWFsbC1oZWlnaHRcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiBpbnB1dElkPVwibWlubWF4XCIgaW5wdXRJZD1cIm1pbm1heFwiIG1vZGU9XCJkZWNpbWFsXCIgW21pbkZyYWN0aW9uRGlnaXRzXT1cIjJcIiBbbWF4RnJhY3Rpb25EaWdpdHNdPVwiNVwiIFttaW5dPVwiMFwiIFttYXhdPVwiMTAwXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLmRlY2ltYWxcIj4gPC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IG9wdGlvbnM9b3B0aW9uczsgdHlwZTogcWJEYXRhVHlwZUVudW0uTGlzdC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3LWZpbHRlci1wYW5lbC1iYXNpYy1xdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtZHJvcGRvd24gY2xhc3M9XCJ3LWVkaXQtc2VsZWN0LXNtYWxsXCIgYXBwZW5kVG89XCJib2R5XCIgW29wdGlvbnNdPVwib3B0aW9uc1wiIFtmaWx0ZXJdPVwidHJ1ZVwiIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubGlzdFwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uTnVtYmVyLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIFt1c2VHcm91cGluZ109XCJmYWxzZVwiIGlucHV0U3R5bGVDbGFzcz1cImZsZXggZmxleC0xXCIgc3R5bGVDbGFzcz1cImZsZXggZmxleC0xXCIgY2xhc3M9XCIgdy1maWx0ZXItcGFuZWwtYmFzaWMtcXVlcnktYnVpbGRlci1pbnB1dC13aWR0aCB3LWVkaXQtaW5wdXQtbnVtYmVyLXNtYWxsIHctZWRpdC1pbnB1dC1udW1iZXItc21hbGwtaGVpZ2h0XCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgaW5wdXRJZD1cIm1pbm1heFwiIGlucHV0SWQ9XCJtaW5tYXhcIiBbbWluXT1cIjBcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubnVtYmVyXCI+IDwvcC1pbnB1dE51bWJlcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgZmllbGQ9ZmllbGQ7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLlRleHQudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCIgdy1maWx0ZXItcGFuZWwtYmFzaWMtcXVlcnktYnVpbGRlci1pbnB1dC13aWR0aCB3LWVkaXQtaW5wdXQtdGV4dC1zbWFsbC1oZWlnaHQgdy1lZGl0LWlucHV0LXRleHQtc21hbGxcIiB0eXBlPVwidGV4dFwiIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLnRleHRcIi8+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IG9wdGlvbnM9b3B0aW9uczsgdHlwZTogcWJEYXRhVHlwZUVudW0uTXVsdGlzZWxlY3QudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidy1maWx0ZXItcGFuZWwtYmFzaWMtcXVlcnktYnVpbGRlci1pbnB1dC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IGNsYXNzPVwidy1lZGl0LW11bHRpc2VsZWN0LXNtYWxsXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiIFtvcHRpb25zXT1cIm9wdGlvbnNcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgb3B0aW9uTGFiZWw9XCJuYW1lXCIgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiIGRpc3BsYXk9XCJjaGlwXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubGlzdFwiPjwvcC1tdWx0aVNlbGVjdD5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBvcHRpb25zPW9wdGlvbnM7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLk51bGxhYmxlU2VsZWN0LnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3LWZpbHRlci1wYW5lbC1iYXNpYy1xdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwidy1lZGl0LXNlbGVjdC1zbWFsbFwiIGFwcGVuZFRvPVwiYm9keVwiIFtvcHRpb25zXT1cIm9wdGlvbnNcIiBbZmlsdGVyXT1cInRydWVcIiBbc2hvd0NsZWFyXT1cInRydWVcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgb3B0aW9uTGFiZWw9XCJuYW1lXCIgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZmllbGRzUGxhY2Vob2xkZXJzLmxpc3RcIj48L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IG9wdGlvbnM9b3B0aW9uczsgdHlwZTogcWJEYXRhVHlwZUVudW0uQWRkcmVzcy50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgIDx3LWFkZHJlc3MtZmllbGQgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtvcGVyYXRvcl09XCJydWxlLm9wZXJhdG9yXCIgW3NlZ21lbnRhdGlvbkFwaVVybF09XCJzZWdtZW50YXRpb25BcGlVcmxcIiBbc2VnbWVudGF0aW9uQXBpVG9rZW5dPVwic2VnbWVudGF0aW9uVG9rZW5cIj48L3ctYWRkcmVzcy1maWVsZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9xdWVyeS1idWlsZGVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0FkdmFuY2VkU2VhcmNoICYmIGJhc2ljUXVlcnkucnVsZXMubGVuZ3RoPT0wXCIgPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9RdWVyeURhdGFcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FkdmFuY2VkPlxyXG4gICAgPGRpdiBbY2xhc3MucXVlcnktYnVpbGRlci1zdHlsZV09XCIhZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dSdWxlU2V0XCIgY2xhc3M9XCJ3LWZpbHRlci1wYW5lbC1jb250YWluZXIgZmFkZWluIGFuaW1hdGlvbi1kdXJhdGlvbi01MDBcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cImZpbHRlclBhbmVsT2JqZWN0LmFsbG93UnVsZVNldFwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGZsZXgtd3JhcFwiPlxyXG4gICAgICAgIDx3LWJ1dHRvbiBjbGFzcz1cIm1iLTJcIiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmJhc2ljU2VhcmNoVGFiTGFiZWxcIiB0eXBlPVwidGV4dFwiIChvbkNsaWNrKT1cInVwZGF0ZVNlYXJjaFR5cGUoKVwiPjwvdy1idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8cXVlcnktYnVpbGRlciBbZm9ybUNvbnRyb2xdPSdhZHZhbmNlZFF1ZXJ5Q3RybCcgW2NvbmZpZ109J2FkdmFuY2VkUXVlcnlDb25maWcnIFthbGxvd1J1bGVzZXRdPSdmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd1J1bGVTZXQnIFthbGxvd0NvbGxhcHNlXT0nZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dDb2xhcHNlJyBbYWxsb3dSdWxlc2V0XT1cImZpbHRlclBhbmVsT2JqZWN0LmFsbG93UnVsZVNldFwiIFtwZXJzaXN0VmFsdWVPbkZpZWxkQ2hhbmdlXT0ncGVyc2lzdFZhbHVlT25GaWVsZENoYW5nZSc+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dSdWxlU2V0OyBlbHNlIG5vUnVsZVNldFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUJ1dHRvbkdyb3VwPVwibGV0IHJ1bGVzZXQ7IGxldCBhZGRSdWxlPWFkZFJ1bGU7IGxldCBhZGRSdWxlU2V0PWFkZFJ1bGVTZXQ7IGxldCByZW1vdmVSdWxlU2V0PXJlbW92ZVJ1bGVTZXRcIj5cclxuICAgICAgICAgICAgICAgIDx3LWJ1dHRvbiBjbGFzcz1cIm1yLTJcIiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmFkdmFuY2VkU2VhcmNoLmFkZFJ1bGVCdXR0b25MYWJlbFwiIHR5cGU9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIiAob25DbGljayk9XCJhZGRSdWxlKClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPHctYnV0dG9uIGNsYXNzPVwibXItMlwiIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2guYWRkUnVsZVNldEJ1dHRvbkxhYmVsXCIgdHlwZT1cInNlY29uZGFyeVwiIGljb249XCJwaSBwaS1wbHVzXCIgc2l6ZT1cInNtYWxsXCIgKm5nSWY9XCJhZGRSdWxlU2V0XCIgKG9uQ2xpY2spPVwiYWRkUnVsZVNldCgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDx3LWJ1dHRvbiBjbGFzcz1cIm1yLTJcIiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmFkdmFuY2VkU2VhcmNoLnJlbW92ZVJ1bGVTZXRCdXR0b25MYWJlbFwiIHR5cGU9XCJ0ZXJ0aWFyeVwiIGljb249XCJwaSBwaS1taW51c1wiIHNpemU9XCJzbWFsbFwiICpuZ0lmPVwicmVtb3ZlUnVsZVNldFwiIChvbkNsaWNrKT1cInJlbW92ZVJ1bGVTZXQoKVwiPjwvdy1idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNub1J1bGVTZXQ+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5QnV0dG9uR3JvdXA9XCJsZXQgcnVsZXNldDsgbGV0IGFkZFJ1bGU9YWRkUnVsZTsgbGV0IGFkZFJ1bGVTZXQ9YWRkUnVsZVNldDsgbGV0IHJlbW92ZVJ1bGVTZXQ9cmVtb3ZlUnVsZVNldFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgZmxleC13cmFwXCI+XHJcbiAgICAgICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5iYXNpY1NlYXJjaFRhYkxhYmVsXCIgdHlwZT1cInRleHRcIiAob25DbGljayk9XCJ1cGRhdGVTZWFyY2hUeXBlKClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWR2YW5jZWQtcXVlcnktYnV0dG9uLWdyb3VwIGdhcC0zXCI+XHJcbiAgICAgICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5hZGRSdWxlQnV0dG9uTGFiZWxcIiB0eXBlPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCIgKG9uQ2xpY2spPVwiYWRkUnVsZSgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDx3LWJ1dHRvbiBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmFkdmFuY2VkU2VhcmNoLmFkZFJ1bGVTZXRCdXR0b25MYWJlbFwiIHR5cGU9XCJzZWNvbmRhcnlcIiBpY29uPVwicGkgcGktcGx1c1wiIHNpemU9XCJzbWFsbFwiICpuZ0lmPVwiYWRkUnVsZVNldFwiIChvbkNsaWNrKT1cImFkZFJ1bGVTZXQoKVwiPjwvdy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5yZW1vdmVSdWxlU2V0QnV0dG9uTGFiZWxcIiB0eXBlPVwidGVydGlhcnlcIiBpY29uPVwicGkgcGktbWludXNcIiBzaXplPVwic21hbGxcIiAqbmdJZj1cInJlbW92ZVJ1bGVTZXRcIiAob25DbGljayk9XCJyZW1vdmVSdWxlU2V0KClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlBcnJvd0ljb24+XHJcbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktYW5nbGUtcmlnaHRcIiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlSZW1vdmVCdXR0b249XCJsZXQgcnVsZTsgbGV0IHJlbW92ZVJ1bGU9cmVtb3ZlUnVsZVwiPlxyXG4gICAgICAgICAgICA8dy1idXR0b24gY2xhc3M9XCJcIiBsYWJlbD1cIlwiIHNpemU9XCJzbWFsbFwiIHR5cGU9XCJ0ZXJ0aWFyeVwiIGljb249XCJwaSBwaS10aW1lc1wiIChvbkNsaWNrKT1cInJlbW92ZVJ1bGUocnVsZSlcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlTd2l0Y2hHcm91cD1cImxldCBydWxlc2V0OyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJ1bGVzZXRcIiBjbGFzcz1cInctZmlsdGVyLXBhbmVsLXN3aXRjaC1ncm91cC1wYWRkaW5nXCI+XHJcbiAgICAgICAgICAgICAgPHctc2VsZWN0LWJ1dHRvbiAqbmdJZj1cImZpbHRlclBhbmVsT2JqZWN0LmFsbG93TG9naWNhbFJ1bGVcIiBbc3RhdGVPcHRpb25zXT1cIlt7bGFiZWw6ICdBbmQnLCB2YWx1ZTogJ2FuZCd9LCB7bGFiZWw6ICdPcicsIHZhbHVlOiAnb3InfV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJydWxlc2V0LmNvbmRpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCInc21hbGwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSk9XCJydWxlc2V0LmNvbmRpdGlvbiA9ICRldmVudFwiPlxyXG4gICAgICAgICAgICAgIDwvdy1zZWxlY3QtYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5RW50aXR5PVwibGV0IHJ1bGU7IGxldCBlbnRpdGllcz1lbnRpdGllczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxwLWRyb3Bkb3duICpuZ0lmPVwiZmlsdGVyUGFuZWxPYmplY3QuZW5pdHlNb2RlXCIgY2xhc3M9XCJmaWVsZC1nYXAgdy1lZGl0LXNlbGVjdC1zbWFsbCB3LWVudGl0eS1kcm9wZG93blwiIGFwcGVuZFRvPVwiYm9keVwiIFtvcHRpb25zXT1cImVudGl0aWVzXCIgWyhuZ01vZGVsKV09XCJydWxlLmVudGl0eVwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIG9wdGlvblZhbHVlPVwidmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIHJ1bGUpXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlGaWVsZD1cImxldCBydWxlOyBsZXQgZmllbGRzPWZpZWxkczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlOyBsZXQgZ2V0RmllbGRzID0gZ2V0RmllbGRzXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1maWVsZC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwiZmllbGQtZ2FwIHctZWRpdC1zZWxlY3Qtc21hbGxcIiBhcHBlbmRUbz1cImJvZHlcIiBbb3B0aW9uc109XCJnZXRGaWVsZHMocnVsZS5lbnRpdHkpXCIgWyhuZ01vZGVsKV09XCJydWxlLmZpZWxkXCIgb3B0aW9uTGFiZWw9XCJuYW1lXCIgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudCwgcnVsZSlcIj48L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgPCEtLSA8dy1saXN0LWZpZWxkIGNsYXNzPVwiZmllbGQtZ2FwXCIgYXBwZW5kVG89XCJib2R5XCIgW29wdGlvbnNdPVwiZ2V0RmllbGRzKHJ1bGUuZW50aXR5KVwiIFsobmdNb2RlbCldPVwicnVsZS5maWVsZFwiIFtvcGVyYXRvcl09XCInPSdcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIHJ1bGUpXCIgW29ubHlEcm9wZG93bl09XCJ0cnVlXCI+PC93LWxpc3QtZmllbGQ+IC0tPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeU9wZXJhdG9yPVwibGV0IHJ1bGU7IGxldCBvcGVyYXRvcnM9b3BlcmF0b3JzOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLW9wZXJhdG9yLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtZHJvcGRvd24gY2xhc3M9XCJmaWVsZC1nYXAgdy1lZGl0LXNlbGVjdC1zbWFsbFwiIGFwcGVuZFRvPVwiYm9keVwiIFsobmdNb2RlbCldPVwicnVsZS5vcGVyYXRvclwiIFtvcHRpb25zXT1cIm9wZXJhdG9yc1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKHJ1bGUpXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkJvb2xlYW4udG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDx3LXRvZ2dsZS1idXR0b24gY2xhc3M9XCJmaWVsZC1nYXAgdG9nZ2xlLWJ1dHRvbi1hbGlnblwiIHNpemU9XCJzbWFsbFwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIG9uTGFiZWw9XCJUcnVlXCIgb2ZmTGFiZWw9XCJGYWxzZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIj48L3ctdG9nZ2xlLWJ1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgdHlwZTogcWJEYXRhVHlwZUVudW0uRGF0ZXRpbWUudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1pbnB1dC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDx3LWVkaXQtY2FsZW5kYXIgY2xhc3M9XCJmaWVsZC1nYXBcIiBhcHBlbmRUbz1cImJvZHlcIiBzaXplPVwic21hbGxcIiBbc2hvd0ljb25dPVwiZmFsc2VcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiAob25DaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtzaG93VGltZV09XCJ0cnVlXCIgW3Nob3dTZWNvbmRzXT1cInRydWVcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5kYXRldGltZVwiIFtkaXNwbGF5SW5saW5lQmxvY2tdPVwidHJ1ZVwiPjwvdy1lZGl0LWNhbGVuZGFyPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uRGVjaW1hbC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXIgaW5wdXRTdHlsZUNsYXNzPVwiZmxleCBmbGV4LTFcIiBzdHlsZUNsYXNzPVwiZmxleCBmbGV4LTFcIiBjbGFzcz1cImZpZWxkLWdhcCB3LWVkaXQtaW5wdXQtbnVtYmVyLXNtYWxsIHctZWRpdC1pbnB1dC1udW1iZXItc21hbGwtaGVpZ2h0XCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgaW5wdXRJZD1cIm1pbm1heFwiIGlucHV0SWQ9XCJtaW5tYXhcIiBtb2RlPVwiZGVjaW1hbFwiIFttaW5GcmFjdGlvbkRpZ2l0c109XCIyXCIgW21heEZyYWN0aW9uRGlnaXRzXT1cIjVcIiBbbWluXT1cIjBcIiBbbWF4XT1cIjEwMFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5kZWNpbWFsXCI+IDwvcC1pbnB1dE51bWJlcj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgb3B0aW9ucz1vcHRpb25zOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5MaXN0LnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1kcm9wZG93biBjbGFzcz1cImZpZWxkLWdhcCB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgYXBwZW5kVG89XCJib2R5XCIgW29wdGlvbnNdPVwib3B0aW9uc1wiIFtmaWx0ZXJdPVwidHJ1ZVwiIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubGlzdFwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgb3B0aW9ucz1vcHRpb25zOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5MaXN0LnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGggZmllbGQtZ2FwXCI+XHJcbiAgICAgICAgICAgICAgPHctbGlzdC1maWVsZCBbb3B0aW9uc109XCJvcHRpb25zXCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgW29wZXJhdG9yXT1cInJ1bGUub3BlcmF0b3JcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubGlzdFwiPjwvdy1saXN0LWZpZWxkPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uTnVtYmVyLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbdXNlR3JvdXBpbmddPVwiZmFsc2VcIiBpbnB1dFN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIHN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIGNsYXNzPVwiZmllbGQtZ2FwIHctZWRpdC1pbnB1dC1udW1iZXItc21hbGwgdy1lZGl0LWlucHV0LW51bWJlci1zbWFsbC1oZWlnaHRcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiBpbnB1dElkPVwibWlubWF4XCIgaW5wdXRJZD1cIm1pbm1heFwiIFttaW5dPVwiMFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5udW1iZXJcIj4gPC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uVGV4dC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZmllbGQtZ2FwIHF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGggdy1lZGl0LWlucHV0LXRleHQtc21hbGwtaGVpZ2h0IHctZWRpdC1pbnB1dC10ZXh0LXNtYWxsXCIgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy50ZXh0XCIvPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgb3B0aW9ucz1vcHRpb25zOyB0eXBlOiBxYkRhdGFUeXBlRW51bS5NdWx0aXNlbGVjdC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgY2xhc3M9XCJ3LWVkaXQtbXVsdGlzZWxlY3Qtc21hbGxcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgW29wdGlvbnNdPVwib3B0aW9uc1wiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgZGlzcGxheT1cImNoaXBcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5saXN0XCI+PC9wLW11bHRpU2VsZWN0PlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBvcHRpb25zPW9wdGlvbnM7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkFkZHJlc3MudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDx3LWFkZHJlc3MtZmllbGQgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiIFtvcGVyYXRvcl09XCJydWxlLm9wZXJhdG9yXCIgW3NlZ21lbnRhdGlvbkFwaVVybF09XCJzZWdtZW50YXRpb25BcGlVcmxcIiBbc2VnbWVudGF0aW9uQXBpVG9rZW5dPVwic2VnbWVudGF0aW9uVG9rZW5cIiBbc2VsZWN0UGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5saXN0XCI+PC93LWFkZHJlc3MtZmllbGQ+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBvcHRpb25zPW9wdGlvbnM7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLk51bGxhYmxlU2VsZWN0LnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1kcm9wZG93biBjbGFzcz1cImZpZWxkLWdhcCB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgYXBwZW5kVG89XCJib2R5XCIgW29wdGlvbnNdPVwib3B0aW9uc1wiIFtmaWx0ZXJdPVwidHJ1ZVwiIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubGlzdFwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvcXVlcnktYnVpbGRlcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0FkdmFuY2VkU2VhcmNoICYmIGFkdmFuY2VkUXVlcnkucnVsZXMubGVuZ3RoPT0wXCIgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub1F1ZXJ5RGF0YVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS0gR3JvdXBlZCBmaWx0ZXIgLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd0dyb3VwZWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktNVwiPlxyXG4gICAgICAgICAgPHctdmlldy1jYXJkLXRpdGxlLXRleHQgW2NhcmRUaXRsZV09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZ3JvdXBlZEZpbHRlclRpdGxlXCI+PC93LXZpZXctY2FyZC10aXRsZS10ZXh0PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8cXVlcnktYnVpbGRlciBbZm9ybUNvbnRyb2xdPSdncm91cGVkUXVlcnlDdHJsJyBbY29uZmlnXT0nYWR2YW5jZWRRdWVyeUNvbmZpZycgW2FsbG93UnVsZXNldF09J2ZpbHRlclBhbmVsT2JqZWN0LmFsbG93UnVsZVNldCcgW2FsbG93Q29sbGFwc2VdPSdmaWx0ZXJQYW5lbE9iamVjdC5hbGxvd0NvbGFwc2UnIFthbGxvd1J1bGVzZXRdPVwiZmlsdGVyUGFuZWxPYmplY3QuYWxsb3dSdWxlU2V0XCIgW3BlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2VdPSdwZXJzaXN0VmFsdWVPbkZpZWxkQ2hhbmdlJz5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5QnV0dG9uR3JvdXA9XCJsZXQgcnVsZXNldDsgbGV0IGFkZFJ1bGU9YWRkUnVsZTsgbGV0IGFkZFJ1bGVTZXQ9YWRkUnVsZVNldDsgbGV0IHJlbW92ZVJ1bGVTZXQ9cmVtb3ZlUnVsZVNldFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2guYWRkUnVsZUJ1dHRvbkxhYmVsXCIgdHlwZT1cInNlY29uZGFyeVwiIHNpemU9XCJzbWFsbFwiIChvbkNsaWNrKT1cImFkZFJ1bGUoKVwiPjwvdy1idXR0b24+XHJcbiAgICAgICAgICAgICAgPHctYnV0dG9uIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuYWR2YW5jZWRTZWFyY2guYWRkUnVsZVNldEJ1dHRvbkxhYmVsXCIgdHlwZT1cInNlY29uZGFyeVwiIGljb249XCJwaSBwaS1wbHVzXCIgc2l6ZT1cInNtYWxsXCIgKm5nSWY9XCJhZGRSdWxlU2V0XCIgKG9uQ2xpY2spPVwiYWRkUnVsZVNldCgpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8dy1idXR0b24gW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5hZHZhbmNlZFNlYXJjaC5yZW1vdmVSdWxlU2V0QnV0dG9uTGFiZWxcIiB0eXBlPVwidGVydGlhcnlcIiBpY29uPVwicGkgcGktbWludXNcIiBzaXplPVwic21hbGxcIiAqbmdJZj1cInJlbW92ZVJ1bGVTZXRcIiAob25DbGljayk9XCJyZW1vdmVSdWxlU2V0KClcIj48L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5QXJyb3dJY29uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWFuZ2xlLXJpZ2h0XCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5UmVtb3ZlQnV0dG9uPVwibGV0IHJ1bGU7IGxldCByZW1vdmVSdWxlPXJlbW92ZVJ1bGVcIj5cclxuICAgICAgICAgICAgPHctYnV0dG9uIGNsYXNzPVwiXCIgbGFiZWw9XCJcIiBzaXplPVwic21hbGxcIiB0eXBlPVwidGVydGlhcnlcIiBpY29uPVwicGkgcGktdGltZXNcIiAob25DbGljayk9XCJyZW1vdmVSdWxlKHJ1bGUpXCI+PC93LWJ1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5U3dpdGNoR3JvdXA9XCJsZXQgcnVsZXNldDsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJydWxlc2V0XCI+XHJcbiAgICAgICAgICAgICAgPHctc2VsZWN0LWJ1dHRvbiAqbmdJZj1cImZpbHRlclBhbmVsT2JqZWN0LmFsbG93TG9naWNhbFJ1bGVcIiBbc3RhdGVPcHRpb25zXT1cIlt7bGFiZWw6ICdBbmQnLCB2YWx1ZTogJ2FuZCd9LCB7bGFiZWw6ICdPcicsIHZhbHVlOiAnb3InfV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJydWxlc2V0LmNvbmRpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCInc21hbGwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSk9XCJydWxlc2V0LmNvbmRpdGlvbiA9ICRldmVudFwiPlxyXG4gICAgICAgICAgICAgIDwvdy1zZWxlY3QtYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5RW50aXR5PVwibGV0IHJ1bGU7IGxldCBlbnRpdGllcz1lbnRpdGllczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwibXItMyB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgKm5nSWY9XCJmaWx0ZXJQYW5lbE9iamVjdC5lbml0eU1vZGVcIiBhcHBlbmRUbz1cImJvZHlcIiBbb3B0aW9uc109XCJlbnRpdGllc1wiIFsobmdNb2RlbCldPVwicnVsZS5lbnRpdHlcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50LCBydWxlKVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5RmllbGQ9XCJsZXQgcnVsZTsgbGV0IGZpZWxkcz1maWVsZHM7IGxldCBvbkNoYW5nZT1vbkNoYW5nZTsgbGV0IGdldEZpZWxkcyA9IGdldEZpZWxkc1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItZmllbGQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1kcm9wZG93biBjbGFzcz1cIm1yLTMgdy1lZGl0LXNlbGVjdC1zbWFsbFwiIGFwcGVuZFRvPVwiYm9keVwiIFtvcHRpb25zXT1cImdldEZpZWxkcyhydWxlLmVudGl0eSlcIiBbKG5nTW9kZWwpXT1cInJ1bGUuZmllbGRcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50LCBydWxlKVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlPcGVyYXRvcj1cImxldCBydWxlOyBsZXQgb3BlcmF0b3JzPW9wZXJhdG9yczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1vcGVyYXRvci13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwibXItMyB3LWVkaXQtc2VsZWN0LXNtYWxsXCIgYXBwZW5kVG89XCJib2R5XCIgWyhuZ01vZGVsKV09XCJydWxlLm9wZXJhdG9yXCIgW29wdGlvbnNdPVwib3BlcmF0b3JzXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UocnVsZSlcIj48L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgdHlwZTogcWJEYXRhVHlwZUVudW0uQm9vbGVhbi50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHctdG9nZ2xlLWJ1dHRvbiBjbGFzcz1cIm1yLTNcIiBzaXplPVwic21hbGxcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiBvbkxhYmVsPVwiVHJ1ZVwiIG9mZkxhYmVsPVwiRmFsc2VcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCI+PC93LXRvZ2dsZS1idXR0b24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkRhdGV0aW1lLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8dy1lZGl0LWNhbGVuZGFyIGNsYXNzPVwiZmllbGQtZ2FwXCIgYXBwZW5kVG89XCJib2R5XCIgc2l6ZT1cInNtYWxsXCIgW3Nob3dJY29uXT1cImZhbHNlXCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbc2hvd1RpbWVdPVwidHJ1ZVwiIFtzaG93U2Vjb25kc109XCJ0cnVlXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMuZGF0ZXRpbWVcIiBbZGlzcGxheUlubGluZUJsb2NrXT1cInRydWVcIj48L3ctZWRpdC1jYWxlbmRhcj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgZmllbGQ9ZmllbGQ7IHR5cGU6IHFiRGF0YVR5cGVFbnVtLkRlY2ltYWwudG9TdHJpbmcoKTsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlcnktYnVpbGRlci1pbnB1dC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIGNsYXNzPVwibXItM1wiIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIGlucHV0SWQ9XCJtaW5tYXhcIiBpbnB1dElkPVwibWlubWF4XCIgbW9kZT1cImRlY2ltYWxcIiBbbWluRnJhY3Rpb25EaWdpdHNdPVwiMlwiIFttYXhGcmFjdGlvbkRpZ2l0c109XCI1XCIgW21pbl09XCIwXCIgW21heF09XCIxMDBcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMuZGVjaW1hbFwiPiA8L3AtaW5wdXROdW1iZXI+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IG9wdGlvbnM9b3B0aW9uczsgdHlwZTogcWJEYXRhVHlwZUVudW0uTGlzdC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHctbGlzdC1maWVsZCBbb3B0aW9uc109XCJvcHRpb25zXCIgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCIgW29wZXJhdG9yXT1cInJ1bGUub3BlcmF0b3JcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9uc09iamVjdC5maWVsZHNQbGFjZWhvbGRlcnMubGlzdFwiPjwvdy1saXN0LWZpZWxkPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uTnVtYmVyLnRvU3RyaW5nKCk7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaW5wdXQtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbdXNlR3JvdXBpbmddPVwiZmFsc2VcIiBpbnB1dFN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIHN0eWxlQ2xhc3M9XCJmbGV4IGZsZXgtMVwiIGNsYXNzPVwiZmllbGQtZ2FwIHctZWRpdC1pbnB1dC1udW1iZXItc21hbGwgdy1lZGl0LWlucHV0LW51bWJlci1zbWFsbC1oZWlnaHRcIiBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIiBpbnB1dElkPVwibWlubWF4XCIgaW5wdXRJZD1cIm1pbm1heFwiIFttaW5dPVwiMFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy5udW1iZXJcIj4gPC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBmaWVsZD1maWVsZDsgdHlwZTogcWJEYXRhVHlwZUVudW0uVGV4dC50b1N0cmluZygpOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwibXItMyBxdWVyeS1idWlsZGVyLWlucHV0LXdpZHRoIHctZWRpdC1pbnB1dC10ZXh0LXNtYWxsLWhlaWdodCB3YXBwLWlucHV0XCIgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zT2JqZWN0LmZpZWxkc1BsYWNlaG9sZGVycy50ZXh0XCIvPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwvcXVlcnktYnVpbGRlcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQWR2YW5jZWRTZWFyY2ggJiYgZ3JvdXBlZFF1ZXJ5LnJ1bGVzLmxlbmd0aD09MFwiID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub1F1ZXJ5RGF0YVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjbm9RdWVyeURhdGE+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtd3JhcCBjYXJkLWNvbnRhaW5lciBzdXJmYWNlLTUwIG1iLTNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgdy1mdWxsIGgtNHJlbSB0ZXh0LWdyYXktOTAwIGJvcmRlci1yb3VuZCBtLTJcIj5cclxuICAgICAgICB7e3RyYW5zbGF0aW9uc09iamVjdC5ub1J1bGVzTGFiZWx9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiJdfQ==