@wemake4u/form-player-se 1.0.7 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/directives/register.directive.mjs +5 -5
- package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +5 -5
- package/esm2022/lib/dynamic-fields/dynamic-fields.interface.mjs +2 -0
- package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +12 -3
- package/esm2022/lib/services/programmability.service.mjs +13 -2
- package/esm2022/lib/utils/patchForm.mjs +2 -2
- package/fesm2022/wemake4u-form-player-se.mjs +32 -12
- package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
- package/lib/directives/register.directive.d.ts +3 -3
- package/lib/dynamic-fields/dynamic-fields.component.d.ts +3 -2
- package/lib/dynamic-fields/dynamic-fields.interface.d.ts +4 -0
- package/lib/services/programmability.service.d.ts +1 -0
- package/package.json +1 -1
|
@@ -266,9 +266,9 @@ export class DynamicFieldsComponent {
|
|
|
266
266
|
return of([]);
|
|
267
267
|
}
|
|
268
268
|
}
|
|
269
|
-
|
|
269
|
+
addItem(component) {
|
|
270
270
|
const formArray = this.getFormArray(this.getControlFromPath(component.path));
|
|
271
|
-
formArray.
|
|
271
|
+
formArray.addItem();
|
|
272
272
|
}
|
|
273
273
|
removeItem(component, index) {
|
|
274
274
|
const formArray = this.getFormArray(this.getControlFromPath(component.path));
|
|
@@ -519,7 +519,7 @@ export class DynamicFieldsComponent {
|
|
|
519
519
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DynamicFieldsComponent, isStandalone: true, selector: "app-dynamic-fields", inputs: { rows: "rows", formGroup: "formGroup" }, providers: [
|
|
520
520
|
RegisterService,
|
|
521
521
|
ProgrammabilityService
|
|
522
|
-
], ngImport: i0, template: "<ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [class]=\"getClass(component)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\">\r\n <ngx-sirio-input type=\"text\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"Texts.TypeToSearch\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ngx-sirio-input type=\"number\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n number\r\n [defaultValue]=\"evaluateNumber(component.defaultValue)\"\r\n [minimum]=\"evaluateNumber(component.minimum)\"\r\n [maximum]=\"evaluateNumber(component.maximum)\"\r\n [decimalDigits]=\"evaluateNumber(component.decimalDigits)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker ariaLabel=\"date\"\r\n [label]=\"evaluateString(component.dateLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n isoDate\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker ariaLabel=\"time\"\r\n [label]=\"evaluateString(component.timeLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <ngx-sirio-input type=\"textarea\"\r\n ariaLabel=\"textarea\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\">\r\n <ngx-sirio-file-upload ariaLabel=\"filepicker\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ Texts.Upload }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\" [rows]=\"createUploadTables(component)\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [collapse]=\"component.collapseTo\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n <!--Reset View Context-->\r\n <div tabindex=\"0\" style=\"display:none\"></div>\r\n <div class=\"flex\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n <ng-container *ngIf=\"component.tooltip\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.tooltip))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(component.content))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(component.alt)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\">\r\n <ng-container [formArrayName]=\"component.path\" [repeat]=\"evaluateNumber(component.repetitions)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <ng-container *ngIf=\"getFormArray(formGroup.get(component.path)).controls.length > 0\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"Texts.ScrollLeft\"\r\n [rightArrowLabel]=\"Texts.ScrollRight\"\r\n [tabCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"component.label + ' ' + (i + 1)\">\r\n <ng-container *ngIf=\"i === dynamiclisttab.activeIndex\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container> \r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel #panel accordionPanel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"component.label + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <ng-container *ngIf=\"panel.panelIsOpen\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true}\"\r\n #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addNewItem(component)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ Texts.AddItem }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"{\r\n 'group-outline': component.showOutline === true,\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(component.path))\"\r\n [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <ag-grid-angular [modules]=\"getGridModules(component)\"\r\n [gridOptions]=\"getGridOptions(component)\"\r\n [rowSource]=\"(getGridData(component) | async) || []\"\r\n [style.height.px]=\"component.height\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n </div>\r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-button>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label [for]=\"component.id\">{{ evaluateString(component.label) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(component.label)\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"Texts.Close\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(component.title)\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\">\r\n <ngx-sirio-slider [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tooltip -->\r\n <ng-container *ngSwitchCase=\"'tooltip'\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"\r\n #tooltip\r\n [register]=\"component\"\r\n [componentRef]=\"tooltip\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <p *ngIf=\"component.title\" class=\"sirio-tooltip-heading sirio-space-down\">\r\n {{ evaluateString(component.title) }}\r\n </p>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <ngx-sirio-tab #tab\r\n [register]=\"component\"\r\n [componentRef]=\"tab\"\r\n [leftArrowLabel]=\"Texts.ScrollLeft\"\r\n [rightArrowLabel]=\"Texts.ScrollRight\"\r\n tabControl>\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ng-container *disableForm=\"{\r\n disabled: evaluateBoolean(panel.disabled),\r\n formGroup: formGroup,\r\n path: panel.path\r\n }\">\r\n </ng-container>\r\n <ngx-sirio-tab-item [label]=\"evaluateString(panel.label)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled) ?? false\"\r\n *ngIf=\"evaluateConditional(panel.conditional)\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(panel.path))\"\r\n [rows]=\"getTemplate(panel.template)?.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <ngx-sirio-accordion\r\n #accordion\r\n [register]=\"component\"\r\n [componentRef]=\"accordion\">\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ng-container *disableForm=\"{\r\n disabled: evaluateBoolean(panel.disabled),\r\n formGroup: formGroup,\r\n path: panel.path\r\n }\">\r\n </ng-container>\r\n <ngx-sirio-accordion-panel *ngIf=\"evaluateConditional(panel.conditional)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled)\">\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(panel.label)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(panel.path))\"\r\n [rows]=\"getTemplate(panel.template)?.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion> \r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n", styles: [".flex{display:flex}.field-set{align-items:start}.field-set>.col-host>*{margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-top .row{align-items:baseline}.group-center .row{align-items:center}.group-bottom .row{align-items:end}.text-paragraph p{margin-bottom:0!important}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-control.fp-disabled .sirio-input-group .sirio-input-group-text,.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text{border:0px}.sirio-control.fp-readonly label:hover{color:#454d56}.sirio-control.fp-readonly input.sirio-form-control,.sirio-control.fp-readonly .sirio-dropdown .sirio-dropdown-select,.sirio-control.fp-readonly textarea.sirio-form-control{background:none!important;border:0px;padding:0}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text{background:none}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text span{color:#5b6571}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text.prefix{padding-left:0}.sirio-upload.sirio-control.fp-readonly label,.sirio-upload.sirio-control.fp-disabled label{pointer-events:none}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}.ag-cell-value .btn-small-group{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.ag-cell-value .btn-small .sirio-btn{padding:.25rem .0625rem;margin:2px}\n"], dependencies: [{ kind: "component", type: DynamicFieldsComponent, selector: "app-dynamic-fields", inputs: ["rows", "formGroup"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i10.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i10.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i11.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i11.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i11.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i11.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i11.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: AdornerDirective, selector: "[prefixAdorner], [suffixAdorner]", inputs: ["prefixAdorner", "suffixAdorner"] }, { kind: "directive", type: DisableDirective, selector: "[disableControl], [readonly]", inputs: ["disableControl", "readonly", "placeholder", "componentRef"] }, { kind: "directive", type: DisplayDirective, selector: "[hide], [show]", inputs: ["hide", "show"] }, { kind: "directive", type: FrameSecurityDirective, selector: "[frameSecurity]", inputs: ["frameSecurity"] }, { kind: "directive", type: DropdownDirective, selector: "[dropdown]" }, { kind: "directive", type: UpdateBlurDirective, selector: "[updateBlur]" }, { kind: "directive", type: RepeatDirective, selector: "[repeat]", inputs: ["repeat"] }, { kind: "directive", type: TabDirective, selector: "[tabCount]", inputs: ["tabCount"] }, { kind: "directive", type: GridDirective, selector: "[rowSource]", inputs: ["rowSource"] }, { kind: "directive", type: RegisterDirective, selector: "[register]", inputs: ["register", "componentRef"] }, { kind: "directive", type: AccordionDirective, selector: "[accordionCount]", inputs: ["accordionCount"] }, { kind: "directive", type: DateDirective, selector: "[isoDate]" }, { kind: "directive", type: NumberDirective, selector: "[number]", inputs: ["defaultValue", "minimum", "maximum", "decimalDigits"] }, { kind: "directive", type: TextDirective, selector: "[textcase], [maxlength]", inputs: ["textcase", "maxlength"] }, { kind: "directive", type: DisableFormDirective, selector: "[disableForm]", inputs: ["disableForm"] }, { kind: "directive", type: TabControlDirective, selector: "[tabControl]" }, { kind: "directive", type: CollapseDirective, selector: "[collapse]", inputs: ["collapse"] }, { kind: "directive", type: AccordionPanelDirective, selector: "[accordionPanel]" }, { kind: "component", type: SirioInputComponent, selector: "ngx-sirio-input", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "type", "name", "placeholder", "textHelp", "textFeedback", "rows", "cols", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "role"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "directive", type: SirioValidationDirective, selector: "[validation]", inputs: ["canValidate", "isWarning", "showWhenValid"] }, { kind: "component", type: SirioSelectComponent, selector: "ngx-sirio-select", inputs: ["placeholder", "disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "isMultiple", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy"], outputs: ["focusEvent", "blurEvent", "keydownEvent"] }, { kind: "component", type: SirioSelectOptionComponent, selector: "ngx-sirio-select-option", inputs: ["value"], outputs: ["optionSelected", "blurEvent"] }, { kind: "component", type: SirioSelectPanelComponent, selector: "ngx-sirio-select-panel", outputs: ["optionSelected", "panelOpened", "panelClosed"] }, { kind: "component", type: SirioCheckboxGroupComponent, selector: "ngx-sirio-checkbox-group", inputs: ["textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioCheckboxComponent, selector: "ngx-sirio-checkbox", inputs: ["disabled", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "disabledState", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioDatepickerComponent, selector: "ngx-sirio-datepicker", inputs: ["name", "placeholder", "textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "value", "disabledState"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent", "datechangeEvent"] }, { kind: "component", type: SirioTimepickerComponent, selector: "ngx-sirio-timepicker", inputs: ["name", "label", "labelPopover", "ariaLabelPopoverButton", "placeholder", "textHelp", "textFeedback", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioRadioGroupComponent, selector: "ngx-sirio-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioRadioButtonComponent, selector: "ngx-sirio-radio-button", inputs: ["disabledState", "label", "name", "textHelp", "textFeedback", "ariaInvalid", "ariaDescribedBy", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioTabComponent, selector: "ngx-sirio-tab", inputs: ["isVertical", "isNavLine", "leftArrowLabel", "rightArrowLabel", "tabActive"], outputs: ["tabChange"] }, { kind: "component", type: SirioTabItemComponent, selector: "ngx-sirio-tab-item", inputs: ["label", "disabled", "icon"] }, { kind: "component", type: SirioAccordionComponent, selector: "ngx-sirio-accordion", inputs: ["dark"] }, { kind: "component", type: SirioAccordionPanelComponent, selector: "ngx-sirio-accordion-panel", inputs: ["active", "disabled"], outputs: ["opened", "closed"] }, { kind: "component", type: SirioAccordionHeaderComponent, selector: "ngx-sirio-accordion-header" }, { kind: "component", type: SirioAccordionBodyComponent, selector: "ngx-sirio-accordion-body" }, { kind: "component", type: SirioButtonComponent, selector: "ngx-sirio-button", inputs: ["ariaExpanded", "ariaControls", "ariaActivedescendant", "ariaHaspopup", "ariaLabel", "ariaRequired", "ariaInvalid", "ariaDescribedby", "icon", "title", "role", "color", "isFloating", "isExtended", "isLight", "isSmall", "disabled", "isDropdown", "type", "dismissType", "isBtnBlock"], outputs: ["clickEvent", "focusEvent", "blurEvent"] }, { kind: "component", type: SirioFileUploadComponent, selector: "ngx-sirio-file-upload", inputs: ["multiple", "color", "accept", "maxFiles", "showFilelist", "label", "labelPopover", "ariaLabelPopoverButton", "name", "textHelp", "textFeedback", "ariaLabel", "ariaLabelDeleteFileButton", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "fileUploadedEvent", "fileDeletedEvent", "uploadErrorEvent", "blurEvent"] }, { kind: "component", type: SirioToggleComponent, selector: "ngx-sirio-toggle", inputs: ["name", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipCheckboxGroupComponent, selector: "ngx-sirio-chip-checkbox-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipRadioGroupComponent, selector: "ngx-sirio-chip-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioInputChipComponent, selector: "ngx-sirio-input-chip", inputs: ["disabledState", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "type", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioAlertComponent, selector: "ngx-sirio-alert", inputs: ["type", "labelClose", "isVisible"], outputs: ["closeEvent"] }, { kind: "component", type: SirioAlertMessageComponent, selector: "ngx-sirio-alert-message" }, { kind: "component", type: SirioSliderComponent, selector: "ngx-sirio-slider", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "description", "min", "max", "ariaInvalid", "ariaDescribedBy", "textHelp", "textFeedback"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioNotifyComponent, selector: "ngx-sirio-notify", inputs: ["isDark"] }, { kind: "component", type: SirioNotifyBodyComponent, selector: "ngx-sirio-notify-body", inputs: ["title"] }, { kind: "directive", type: SirioTooltipDirective, selector: "[sirioTooltip]", inputs: ["sirioTooltip", "content", "hasAction", "hasPopover", "actionLabel", "actionIconClass", "clickOutside", "position", "customTemplate"], outputs: ["clickEvent"] }, { kind: "component", type: TemplateWrapperComponent, selector: "app-template-wrapper", inputs: ["template", "context"] }, { kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
522
|
+
], ngImport: i0, template: "<ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [class]=\"getClass(component)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\">\r\n <ngx-sirio-input type=\"text\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"Texts.TypeToSearch\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ngx-sirio-input type=\"number\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n number\r\n [defaultValue]=\"evaluateNumber(component.defaultValue)\"\r\n [minimum]=\"evaluateNumber(component.minimum)\"\r\n [maximum]=\"evaluateNumber(component.maximum)\"\r\n [decimalDigits]=\"evaluateNumber(component.decimalDigits)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker ariaLabel=\"date\"\r\n [label]=\"evaluateString(component.dateLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n isoDate\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker ariaLabel=\"time\"\r\n [label]=\"evaluateString(component.timeLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <ngx-sirio-input type=\"textarea\"\r\n ariaLabel=\"textarea\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\">\r\n <ngx-sirio-file-upload ariaLabel=\"filepicker\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ Texts.Upload }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\" [rows]=\"createUploadTables(component)\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [collapse]=\"component.collapseTo\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n <!--Reset View Context-->\r\n <div tabindex=\"0\" style=\"display:none\"></div>\r\n <div class=\"flex\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n <ng-container *ngIf=\"component.tooltip\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.tooltip))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(component.content))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(component.alt)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\">\r\n <ng-container [formArrayName]=\"component.path\" [repeat]=\"evaluateNumber(component.repetitions)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <ng-container *ngIf=\"getFormArray(formGroup.get(component.path)).controls.length > 0\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"Texts.ScrollLeft\"\r\n [rightArrowLabel]=\"Texts.ScrollRight\"\r\n [tabCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"component.label + ' ' + (i + 1)\">\r\n <ng-container *ngIf=\"i === dynamiclisttab.activeIndex\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container> \r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel #panel accordionPanel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"component.label + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <ng-container *ngIf=\"panel.panelIsOpen\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true}\"\r\n #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addItem(component)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ Texts.AddItem }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"{\r\n 'group-outline': component.showOutline === true,\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(component.path))\"\r\n [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <ag-grid-angular [modules]=\"getGridModules(component)\"\r\n [gridOptions]=\"getGridOptions(component)\"\r\n [rowSource]=\"(getGridData(component) | async) || []\"\r\n [style.height.px]=\"component.height\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n </div>\r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-button>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label [for]=\"component.id\">{{ evaluateString(component.label) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(component.label)\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"Texts.Close\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(component.title)\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\">\r\n <ngx-sirio-slider [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tooltip -->\r\n <ng-container *ngSwitchCase=\"'tooltip'\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"\r\n #tooltip\r\n [register]=\"component\"\r\n [componentRef]=\"tooltip\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <p *ngIf=\"component.title\" class=\"sirio-tooltip-heading sirio-space-down\">\r\n {{ evaluateString(component.title) }}\r\n </p>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <ngx-sirio-tab #tab\r\n [register]=\"component\"\r\n [componentRef]=\"tab\"\r\n [leftArrowLabel]=\"Texts.ScrollLeft\"\r\n [rightArrowLabel]=\"Texts.ScrollRight\"\r\n tabControl>\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ng-container *disableForm=\"{\r\n disabled: evaluateBoolean(panel.disabled),\r\n formGroup: formGroup,\r\n path: panel.path\r\n }\">\r\n </ng-container>\r\n <ngx-sirio-tab-item [label]=\"evaluateString(panel.label)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled) ?? false\"\r\n *ngIf=\"evaluateConditional(panel.conditional)\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(panel.path))\"\r\n [rows]=\"getTemplate(panel.template)?.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <ngx-sirio-accordion\r\n #accordion\r\n [register]=\"component\"\r\n [componentRef]=\"accordion\">\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ng-container *disableForm=\"{\r\n disabled: evaluateBoolean(panel.disabled),\r\n formGroup: formGroup,\r\n path: panel.path\r\n }\">\r\n </ng-container>\r\n <ngx-sirio-accordion-panel *ngIf=\"evaluateConditional(panel.conditional)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled)\">\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(panel.label)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(panel.path))\"\r\n [rows]=\"getTemplate(panel.template)?.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion> \r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n", styles: [".flex{display:flex}.field-set{align-items:start}.field-set>.col-host>*{margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-top .row{align-items:baseline}.group-center .row{align-items:center}.group-bottom .row{align-items:end}.text-paragraph p{margin-bottom:0!important}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-control.fp-disabled .sirio-input-group .sirio-input-group-text,.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text{border:0px}.sirio-control.fp-readonly label:hover{color:#454d56}.sirio-control.fp-readonly input.sirio-form-control,.sirio-control.fp-readonly .sirio-dropdown .sirio-dropdown-select,.sirio-control.fp-readonly textarea.sirio-form-control{background:none!important;border:0px;padding:0}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text{background:none}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text span{color:#5b6571}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text.prefix{padding-left:0}.sirio-upload.sirio-control.fp-readonly label,.sirio-upload.sirio-control.fp-disabled label{pointer-events:none}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}.ag-cell-value .btn-small-group{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.ag-cell-value .btn-small .sirio-btn{padding:.25rem .0625rem;margin:2px}\n"], dependencies: [{ kind: "component", type: DynamicFieldsComponent, selector: "app-dynamic-fields", inputs: ["rows", "formGroup"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i10.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i10.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i11.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i11.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i11.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i11.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i11.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: AdornerDirective, selector: "[prefixAdorner], [suffixAdorner]", inputs: ["prefixAdorner", "suffixAdorner"] }, { kind: "directive", type: DisableDirective, selector: "[disableControl], [readonly]", inputs: ["disableControl", "readonly", "placeholder", "componentRef"] }, { kind: "directive", type: DisplayDirective, selector: "[hide], [show]", inputs: ["hide", "show"] }, { kind: "directive", type: FrameSecurityDirective, selector: "[frameSecurity]", inputs: ["frameSecurity"] }, { kind: "directive", type: DropdownDirective, selector: "[dropdown]" }, { kind: "directive", type: UpdateBlurDirective, selector: "[updateBlur]" }, { kind: "directive", type: RepeatDirective, selector: "[repeat]", inputs: ["repeat"] }, { kind: "directive", type: TabDirective, selector: "[tabCount]", inputs: ["tabCount"] }, { kind: "directive", type: GridDirective, selector: "[rowSource]", inputs: ["rowSource"] }, { kind: "directive", type: RegisterDirective, selector: "[register]", inputs: ["register", "componentRef"] }, { kind: "directive", type: AccordionDirective, selector: "[accordionCount]", inputs: ["accordionCount"] }, { kind: "directive", type: DateDirective, selector: "[isoDate]" }, { kind: "directive", type: NumberDirective, selector: "[number]", inputs: ["defaultValue", "minimum", "maximum", "decimalDigits"] }, { kind: "directive", type: TextDirective, selector: "[textcase], [maxlength]", inputs: ["textcase", "maxlength"] }, { kind: "directive", type: DisableFormDirective, selector: "[disableForm]", inputs: ["disableForm"] }, { kind: "directive", type: TabControlDirective, selector: "[tabControl]" }, { kind: "directive", type: CollapseDirective, selector: "[collapse]", inputs: ["collapse"] }, { kind: "directive", type: AccordionPanelDirective, selector: "[accordionPanel]" }, { kind: "component", type: SirioInputComponent, selector: "ngx-sirio-input", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "type", "name", "placeholder", "textHelp", "textFeedback", "rows", "cols", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "role"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "directive", type: SirioValidationDirective, selector: "[validation]", inputs: ["canValidate", "isWarning", "showWhenValid"] }, { kind: "component", type: SirioSelectComponent, selector: "ngx-sirio-select", inputs: ["placeholder", "disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "isMultiple", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy"], outputs: ["focusEvent", "blurEvent", "keydownEvent"] }, { kind: "component", type: SirioSelectOptionComponent, selector: "ngx-sirio-select-option", inputs: ["value"], outputs: ["optionSelected", "blurEvent"] }, { kind: "component", type: SirioSelectPanelComponent, selector: "ngx-sirio-select-panel", outputs: ["optionSelected", "panelOpened", "panelClosed"] }, { kind: "component", type: SirioCheckboxGroupComponent, selector: "ngx-sirio-checkbox-group", inputs: ["textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioCheckboxComponent, selector: "ngx-sirio-checkbox", inputs: ["disabled", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "disabledState", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioDatepickerComponent, selector: "ngx-sirio-datepicker", inputs: ["name", "placeholder", "textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "value", "disabledState"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent", "datechangeEvent"] }, { kind: "component", type: SirioTimepickerComponent, selector: "ngx-sirio-timepicker", inputs: ["name", "label", "labelPopover", "ariaLabelPopoverButton", "placeholder", "textHelp", "textFeedback", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioRadioGroupComponent, selector: "ngx-sirio-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioRadioButtonComponent, selector: "ngx-sirio-radio-button", inputs: ["disabledState", "label", "name", "textHelp", "textFeedback", "ariaInvalid", "ariaDescribedBy", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioTabComponent, selector: "ngx-sirio-tab", inputs: ["isVertical", "isNavLine", "leftArrowLabel", "rightArrowLabel", "tabActive"], outputs: ["tabChange"] }, { kind: "component", type: SirioTabItemComponent, selector: "ngx-sirio-tab-item", inputs: ["label", "disabled", "icon"] }, { kind: "component", type: SirioAccordionComponent, selector: "ngx-sirio-accordion", inputs: ["dark"] }, { kind: "component", type: SirioAccordionPanelComponent, selector: "ngx-sirio-accordion-panel", inputs: ["active", "disabled"], outputs: ["opened", "closed"] }, { kind: "component", type: SirioAccordionHeaderComponent, selector: "ngx-sirio-accordion-header" }, { kind: "component", type: SirioAccordionBodyComponent, selector: "ngx-sirio-accordion-body" }, { kind: "component", type: SirioButtonComponent, selector: "ngx-sirio-button", inputs: ["ariaExpanded", "ariaControls", "ariaActivedescendant", "ariaHaspopup", "ariaLabel", "ariaRequired", "ariaInvalid", "ariaDescribedby", "icon", "title", "role", "color", "isFloating", "isExtended", "isLight", "isSmall", "disabled", "isDropdown", "type", "dismissType", "isBtnBlock"], outputs: ["clickEvent", "focusEvent", "blurEvent"] }, { kind: "component", type: SirioFileUploadComponent, selector: "ngx-sirio-file-upload", inputs: ["multiple", "color", "accept", "maxFiles", "showFilelist", "label", "labelPopover", "ariaLabelPopoverButton", "name", "textHelp", "textFeedback", "ariaLabel", "ariaLabelDeleteFileButton", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "fileUploadedEvent", "fileDeletedEvent", "uploadErrorEvent", "blurEvent"] }, { kind: "component", type: SirioToggleComponent, selector: "ngx-sirio-toggle", inputs: ["name", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipCheckboxGroupComponent, selector: "ngx-sirio-chip-checkbox-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipRadioGroupComponent, selector: "ngx-sirio-chip-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioInputChipComponent, selector: "ngx-sirio-input-chip", inputs: ["disabledState", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "type", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioAlertComponent, selector: "ngx-sirio-alert", inputs: ["type", "labelClose", "isVisible"], outputs: ["closeEvent"] }, { kind: "component", type: SirioAlertMessageComponent, selector: "ngx-sirio-alert-message" }, { kind: "component", type: SirioSliderComponent, selector: "ngx-sirio-slider", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "description", "min", "max", "ariaInvalid", "ariaDescribedBy", "textHelp", "textFeedback"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioNotifyComponent, selector: "ngx-sirio-notify", inputs: ["isDark"] }, { kind: "component", type: SirioNotifyBodyComponent, selector: "ngx-sirio-notify-body", inputs: ["title"] }, { kind: "directive", type: SirioTooltipDirective, selector: "[sirioTooltip]", inputs: ["sirioTooltip", "content", "hasAction", "hasPopover", "actionLabel", "actionIconClass", "clickOutside", "position", "customTemplate"], outputs: ["clickEvent"] }, { kind: "component", type: TemplateWrapperComponent, selector: "app-template-wrapper", inputs: ["template", "context"] }, { kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
523
523
|
}
|
|
524
524
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicFieldsComponent, decorators: [{
|
|
525
525
|
type: Component,
|
|
@@ -542,10 +542,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
542
542
|
AgGridAngular], providers: [
|
|
543
543
|
RegisterService,
|
|
544
544
|
ProgrammabilityService
|
|
545
|
-
], encapsulation: ViewEncapsulation.None, template: "<ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [class]=\"getClass(component)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\">\r\n <ngx-sirio-input type=\"text\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"Texts.TypeToSearch\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ngx-sirio-input type=\"number\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n number\r\n [defaultValue]=\"evaluateNumber(component.defaultValue)\"\r\n [minimum]=\"evaluateNumber(component.minimum)\"\r\n [maximum]=\"evaluateNumber(component.maximum)\"\r\n [decimalDigits]=\"evaluateNumber(component.decimalDigits)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker ariaLabel=\"date\"\r\n [label]=\"evaluateString(component.dateLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n isoDate\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker ariaLabel=\"time\"\r\n [label]=\"evaluateString(component.timeLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <ngx-sirio-input type=\"textarea\"\r\n ariaLabel=\"textarea\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\">\r\n <ngx-sirio-file-upload ariaLabel=\"filepicker\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ Texts.Upload }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\" [rows]=\"createUploadTables(component)\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [collapse]=\"component.collapseTo\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n <!--Reset View Context-->\r\n <div tabindex=\"0\" style=\"display:none\"></div>\r\n <div class=\"flex\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n <ng-container *ngIf=\"component.tooltip\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.tooltip))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(component.content))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(component.alt)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\">\r\n <ng-container [formArrayName]=\"component.path\" [repeat]=\"evaluateNumber(component.repetitions)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <ng-container *ngIf=\"getFormArray(formGroup.get(component.path)).controls.length > 0\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"Texts.ScrollLeft\"\r\n [rightArrowLabel]=\"Texts.ScrollRight\"\r\n [tabCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"component.label + ' ' + (i + 1)\">\r\n <ng-container *ngIf=\"i === dynamiclisttab.activeIndex\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container> \r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel #panel accordionPanel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"component.label + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <ng-container *ngIf=\"panel.panelIsOpen\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true}\"\r\n #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addNewItem(component)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ Texts.AddItem }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"{\r\n 'group-outline': component.showOutline === true,\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(component.path))\"\r\n [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <ag-grid-angular [modules]=\"getGridModules(component)\"\r\n [gridOptions]=\"getGridOptions(component)\"\r\n [rowSource]=\"(getGridData(component) | async) || []\"\r\n [style.height.px]=\"component.height\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n </div>\r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-button>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label [for]=\"component.id\">{{ evaluateString(component.label) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(component.label)\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"Texts.Close\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(component.title)\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\">\r\n <ngx-sirio-slider [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tooltip -->\r\n <ng-container *ngSwitchCase=\"'tooltip'\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"\r\n #tooltip\r\n [register]=\"component\"\r\n [componentRef]=\"tooltip\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <p *ngIf=\"component.title\" class=\"sirio-tooltip-heading sirio-space-down\">\r\n {{ evaluateString(component.title) }}\r\n </p>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <ngx-sirio-tab #tab\r\n [register]=\"component\"\r\n [componentRef]=\"tab\"\r\n [leftArrowLabel]=\"Texts.ScrollLeft\"\r\n [rightArrowLabel]=\"Texts.ScrollRight\"\r\n tabControl>\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ng-container *disableForm=\"{\r\n disabled: evaluateBoolean(panel.disabled),\r\n formGroup: formGroup,\r\n path: panel.path\r\n }\">\r\n </ng-container>\r\n <ngx-sirio-tab-item [label]=\"evaluateString(panel.label)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled) ?? false\"\r\n *ngIf=\"evaluateConditional(panel.conditional)\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(panel.path))\"\r\n [rows]=\"getTemplate(panel.template)?.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <ngx-sirio-accordion\r\n #accordion\r\n [register]=\"component\"\r\n [componentRef]=\"accordion\">\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ng-container *disableForm=\"{\r\n disabled: evaluateBoolean(panel.disabled),\r\n formGroup: formGroup,\r\n path: panel.path\r\n }\">\r\n </ng-container>\r\n <ngx-sirio-accordion-panel *ngIf=\"evaluateConditional(panel.conditional)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled)\">\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(panel.label)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(panel.path))\"\r\n [rows]=\"getTemplate(panel.template)?.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion> \r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n", styles: [".flex{display:flex}.field-set{align-items:start}.field-set>.col-host>*{margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-top .row{align-items:baseline}.group-center .row{align-items:center}.group-bottom .row{align-items:end}.text-paragraph p{margin-bottom:0!important}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-control.fp-disabled .sirio-input-group .sirio-input-group-text,.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text{border:0px}.sirio-control.fp-readonly label:hover{color:#454d56}.sirio-control.fp-readonly input.sirio-form-control,.sirio-control.fp-readonly .sirio-dropdown .sirio-dropdown-select,.sirio-control.fp-readonly textarea.sirio-form-control{background:none!important;border:0px;padding:0}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text{background:none}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text span{color:#5b6571}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text.prefix{padding-left:0}.sirio-upload.sirio-control.fp-readonly label,.sirio-upload.sirio-control.fp-disabled label{pointer-events:none}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}.ag-cell-value .btn-small-group{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.ag-cell-value .btn-small .sirio-btn{padding:.25rem .0625rem;margin:2px}\n"] }]
|
|
545
|
+
], encapsulation: ViewEncapsulation.None, template: "<ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [class]=\"getClass(component)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\">\r\n <ngx-sirio-input type=\"text\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"Texts.TypeToSearch\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ngx-sirio-input type=\"number\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n number\r\n [defaultValue]=\"evaluateNumber(component.defaultValue)\"\r\n [minimum]=\"evaluateNumber(component.minimum)\"\r\n [maximum]=\"evaluateNumber(component.maximum)\"\r\n [decimalDigits]=\"evaluateNumber(component.decimalDigits)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker ariaLabel=\"date\"\r\n [label]=\"evaluateString(component.dateLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n isoDate\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker ariaLabel=\"time\"\r\n [label]=\"evaluateString(component.timeLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <ngx-sirio-input type=\"textarea\"\r\n ariaLabel=\"textarea\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\">\r\n <ngx-sirio-file-upload ariaLabel=\"filepicker\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ Texts.Upload }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\" [rows]=\"createUploadTables(component)\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [collapse]=\"component.collapseTo\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n <!--Reset View Context-->\r\n <div tabindex=\"0\" style=\"display:none\"></div>\r\n <div class=\"flex\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n <ng-container *ngIf=\"component.tooltip\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.tooltip))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(component.content))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(component.alt)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\">\r\n <ng-container [formArrayName]=\"component.path\" [repeat]=\"evaluateNumber(component.repetitions)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <ng-container *ngIf=\"getFormArray(formGroup.get(component.path)).controls.length > 0\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"Texts.ScrollLeft\"\r\n [rightArrowLabel]=\"Texts.ScrollRight\"\r\n [tabCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"component.label + ' ' + (i + 1)\">\r\n <ng-container *ngIf=\"i === dynamiclisttab.activeIndex\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container> \r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel #panel accordionPanel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"component.label + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <ng-container *ngIf=\"panel.panelIsOpen\">\r\n <div [ngClass]=\"{\r\n'group-top': component.verticalAlignment === 'start',\r\n'group-center': component.verticalAlignment === 'center',\r\n'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true}\"\r\n #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addItem(component)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ Texts.AddItem }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"{\r\n 'group-outline': component.showOutline === true,\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(component.path))\"\r\n [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <ag-grid-angular [modules]=\"getGridModules(component)\"\r\n [gridOptions]=\"getGridOptions(component)\"\r\n [rowSource]=\"(getGridData(component) | async) || []\"\r\n [style.height.px]=\"component.height\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n </div>\r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-button>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label [for]=\"component.id\">{{ evaluateString(component.label) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(component.label)\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"Texts.Close\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(component.title)\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\">\r\n <ngx-sirio-slider [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tooltip -->\r\n <ng-container *ngSwitchCase=\"'tooltip'\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"\r\n #tooltip\r\n [register]=\"component\"\r\n [componentRef]=\"tooltip\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <p *ngIf=\"component.title\" class=\"sirio-tooltip-heading sirio-space-down\">\r\n {{ evaluateString(component.title) }}\r\n </p>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <ngx-sirio-tab #tab\r\n [register]=\"component\"\r\n [componentRef]=\"tab\"\r\n [leftArrowLabel]=\"Texts.ScrollLeft\"\r\n [rightArrowLabel]=\"Texts.ScrollRight\"\r\n tabControl>\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ng-container *disableForm=\"{\r\n disabled: evaluateBoolean(panel.disabled),\r\n formGroup: formGroup,\r\n path: panel.path\r\n }\">\r\n </ng-container>\r\n <ngx-sirio-tab-item [label]=\"evaluateString(panel.label)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled) ?? false\"\r\n *ngIf=\"evaluateConditional(panel.conditional)\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(panel.path))\"\r\n [rows]=\"getTemplate(panel.template)?.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <ngx-sirio-accordion\r\n #accordion\r\n [register]=\"component\"\r\n [componentRef]=\"accordion\">\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ng-container *disableForm=\"{\r\n disabled: evaluateBoolean(panel.disabled),\r\n formGroup: formGroup,\r\n path: panel.path\r\n }\">\r\n </ng-container>\r\n <ngx-sirio-accordion-panel *ngIf=\"evaluateConditional(panel.conditional)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled)\">\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(panel.label)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(panel.path))\"\r\n [rows]=\"getTemplate(panel.template)?.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion> \r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n", styles: [".flex{display:flex}.field-set{align-items:start}.field-set>.col-host>*{margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-top .row{align-items:baseline}.group-center .row{align-items:center}.group-bottom .row{align-items:end}.text-paragraph p{margin-bottom:0!important}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-control.fp-disabled .sirio-input-group .sirio-input-group-text,.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text{border:0px}.sirio-control.fp-readonly label:hover{color:#454d56}.sirio-control.fp-readonly input.sirio-form-control,.sirio-control.fp-readonly .sirio-dropdown .sirio-dropdown-select,.sirio-control.fp-readonly textarea.sirio-form-control{background:none!important;border:0px;padding:0}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text{background:none}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text span{color:#5b6571}.sirio-control.fp-readonly .sirio-input-group .sirio-input-group-text.prefix{padding-left:0}.sirio-upload.sirio-control.fp-readonly label,.sirio-upload.sirio-control.fp-disabled label{pointer-events:none}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}.ag-cell-value .btn-small-group{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.ag-cell-value .btn-small .sirio-btn{padding:.25rem .0625rem;margin:2px}\n"] }]
|
|
546
546
|
}], ctorParameters: () => [{ type: i1.SanitizeService }, { type: i2.MarkdownService }, { type: i3.MimeService }, { type: i4.ProgrammabilityService }, { type: i5.EventService }, { type: i6.FormatterService }, { type: i7.WeakService }, { type: i8.RegisterService }, { type: i9.MetadataService }, { type: i0.ElementRef }], propDecorators: { rows: [{
|
|
547
547
|
type: Input
|
|
548
548
|
}], formGroup: [{
|
|
549
549
|
type: Input
|
|
550
550
|
}] } });
|
|
551
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1maWVsZHMvZHluYW1pYy1maWVsZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1maWVsZHMvZHluYW1pYy1maWVsZHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsaUJBQWlCLEVBQTZCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFlLFNBQVMsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJbEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFJN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVHLE9BQU8sRUFBRSxZQUFZLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBELE9BQU8sRUFDTCxtQkFBbUIsRUFBRSx3QkFBd0IsRUFDM0Msb0JBQW9CLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQzNFLDJCQUEyQixFQUFFLHNCQUFzQixFQUFFLHdCQUF3QixFQUFFLHdCQUF3QixFQUN2Ryx3QkFBd0IsRUFBRSx5QkFBeUIsRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFDN0YsdUJBQXVCLEVBQUUsNEJBQTRCLEVBQUUsNkJBQTZCLEVBQUUsMkJBQTJCLEVBQ2pILG9CQUFvQixFQUFFLHdCQUF3QixFQUM5QyxvQkFBb0IsRUFBRSwrQkFBK0IsRUFBRSw0QkFBNEIsRUFBRSx1QkFBdUIsRUFDNUcsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CLEVBQ3JFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixFQUNwRyxxQkFBcUIsRUFFeEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFDRyxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxzQkFBc0IsRUFDeEUsWUFBWSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFDL0MsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQzlDLFdBQVcsRUFBRSxhQUFhLEVBQ2xDLDJCQUEyQixFQUNYLG9CQUFvQixFQUFFLGVBQWUsRUFDeEQsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFL0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBK0I1QyxNQUFNLE9BQU8sc0JBQXNCO0lBTWI7SUFDUjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFkSCxJQUFJLENBQXlCO0lBQzdCLFNBQVMsQ0FBYTtJQUUvQixLQUFLLEdBQUcsS0FBSyxDQUFDO0lBRWQsWUFBb0IsU0FBMEIsRUFDbEMsUUFBeUIsRUFDekIsSUFBaUIsRUFDakIsZUFBdUMsRUFDdkMsTUFBb0IsRUFDcEIsU0FBMkIsRUFDM0IsSUFBaUIsRUFDakIsUUFBeUIsRUFDekIsUUFBeUIsRUFDekIsRUFBYztRQVROLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQ2xDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDcEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixPQUFFLEdBQUYsRUFBRSxDQUFZO0lBRzFCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGVBQWU7UUFDYixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVEsQ0FBQyxTQUFjO1FBQ3JCLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQztRQUM1QixJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDOUIsT0FBTyxPQUFPLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO1FBQ3pELENBQUM7YUFDSSxDQUFDO1lBQ0osT0FBTyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLFNBQWM7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBZ0IsQ0FBQztRQUNqRSxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUNqRCxDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTLENBQUMsU0FBYztRQUN0QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFnQixDQUFDO1FBQ2pFLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFBO0lBQzFFLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBb0I7UUFDakMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBOEI7UUFDNUMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBNkI7UUFDMUMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBb0I7UUFDOUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RSxNQUFNLFFBQVEsR0FBRyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQ25ELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBb0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFtQixFQUFFLFlBQXFCLElBQUk7UUFDckQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBb0I7UUFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsS0FBSyxHQUFHLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDbkQsSUFBSSxLQUFLLEtBQUssT0FBTztnQkFDbkIsT0FBTyxJQUFJLENBQUM7WUFDZCxNQUFNLFdBQVcsR0FBbUIsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNyRyxPQUFPLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBRSxLQUFzQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDM0YsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsV0FBZ0I7UUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFckQsT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUErQjtRQUMxQyxJQUFJLENBQUMsQ0FBQyxPQUFPLFlBQVksU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBK0I7UUFDMUMsSUFBSSxDQUFDLENBQUMsT0FBTyxZQUFZLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBbUI7UUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSTtZQUNsQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRW5CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELElBQUksR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3pHLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVk7UUFDakIsTUFBTSxRQUFRLEdBQUcsYUFBYSxJQUFJLEdBQUcsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUNuRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUEsQ0FBQztJQUVGLFFBQVEsQ0FBQyxJQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQUEsQ0FBQztJQUVGLFlBQVksQ0FBQyxVQUFrQjtRQUM3QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFBQSxDQUFDO0lBRUYsV0FBVyxDQUFDLFNBQWMsRUFBRSxLQUFVO1FBQ3BDLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsTUFBTSxPQUFPLEdBQWlCO2dCQUM1QixJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO2dCQUM1QyxTQUFTLEVBQUUsU0FBUztnQkFDcEIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixLQUFLLEVBQUUsS0FBSzthQUNiLENBQUM7WUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxTQUFjO1FBQ3RCLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JCLFNBQVM7WUFDVCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsQ0FBQzthQUNJLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzdCLGNBQWM7WUFDZCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsQ0FBQzthQUNJLElBQUksU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDcEMsYUFBYTtZQUNiLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDekQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFDSSxDQUFDO1lBQ0osVUFBVTtZQUNWLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLFNBQWM7UUFDM0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO1lBQ3RELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQyxPQUFPO2dCQUNMLGFBQWEsRUFBRTtvQkFDYixjQUFjLEVBQUUsQ0FBQyxTQUFTLENBQUMsY0FBYyxLQUFLLElBQUksQ0FBQztvQkFDbkQsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLGNBQWMsS0FBSyxJQUFJLENBQUM7d0JBQzlDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWE7aUJBQ2xDO2dCQUNELFVBQVUsRUFBRSxVQUFVO2dCQUN0QixVQUFVLEVBQUUsVUFBVTtnQkFDdEIsa0JBQWtCLEVBQUUsUUFBUTtnQkFDNUIsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQzNDLFVBQVUsRUFBRSxLQUFLO2dCQUNqQix1QkFBdUIsRUFBRSxJQUFJO2dCQUM3QixLQUFLLEVBQUUsS0FBSztnQkFDWixXQUFXLEVBQUUsQ0FBQyxNQUFzQixFQUFFLEVBQUU7b0JBQ3RDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsQ0FBQzthQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsU0FBYztRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7WUFDdEQsT0FBTztnQkFDTCx3QkFBd0I7Z0JBQ3RCLHNCQUFzQjtnQkFDdEIsZ0JBQWdCO2dCQUNoQixZQUFZO2dCQUNaLGVBQWU7Z0JBQ2YsMkJBQTJCO2dCQUMzQixnQkFBZ0I7Z0JBQ2hCLGtCQUFrQjtnQkFDbEIsZ0JBQWdCO2dCQUNoQixvQkFBb0I7Z0JBQ3BCLGVBQWU7Z0JBQ2YsZ0JBQWdCO2FBQ25CLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsU0FBYztRQUN4QixJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN6QixhQUFhO1lBQ2IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFDSSxDQUFDO1lBQ0osVUFBVTtZQUNWLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQWM7UUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUUsU0FBaUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQWMsRUFBRSxLQUFhO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdFLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELGtCQUFrQixDQUFDLFNBQWM7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1lBQzFELE9BQU87Z0JBQ0w7b0JBQ0UsVUFBVSxFQUFFO3dCQUNWOzRCQUNFLE1BQU0sRUFBRSxPQUFPOzRCQUNmLFFBQVEsRUFBRTtnQ0FDUixTQUFTLEVBQUUsSUFBSTs2QkFDaEI7NEJBQ0QsU0FBUyxFQUFFO2dDQUNUO29DQUNFLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSTtvQ0FDbkIsS0FBSyxFQUFFLE1BQU07b0NBQ2IsTUFBTSxFQUFFLENBQUM7aUNBQ1Y7Z0NBQ0Q7b0NBQ0UsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJO29DQUNuQixLQUFLLEVBQUUsTUFBTTtvQ0FDYixRQUFRLEVBQUUsU0FBUztvQ0FDbkIsT0FBTyxFQUFFLE9BQU87aUNBQ2pCO2dDQUNEO29DQUNFLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSTtvQ0FDbkIsS0FBSyxFQUFFLE1BQU07aUNBQ2Q7Z0NBQ0Q7b0NBQ0UsS0FBSyxFQUFFLEtBQUs7b0NBQ1osT0FBTyxFQUFFLEVBQUU7b0NBQ1gsT0FBTyxFQUFFLEVBQUU7b0NBQ1gsT0FBTyxFQUFFLFFBQVE7b0NBQ2pCLFFBQVEsRUFBRSxXQUFXO2lDQUN0QjtnQ0FDRDtvQ0FDRSxPQUFPLEVBQUUsRUFBRTtvQ0FDWCxPQUFPLEVBQUUsRUFBRTtvQ0FDWCxPQUFPLEVBQUUsUUFBUTtvQ0FDakIsUUFBUSxFQUFFLFdBQVc7aUNBQ3RCOzZCQUNGOzRCQUNELFlBQVksRUFBRSxHQUFHLEdBQUcsU0FBUyxDQUFDLEdBQUc7NEJBQ2pDLFFBQVEsRUFBRSxHQUFHOzRCQUNiLGFBQWEsRUFBRSxTQUFTLENBQUMsV0FBVzs0QkFDcEMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxRQUFRO3lCQUMvQjtxQkFDRjtpQkFDRjthQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBK0M7UUFDMUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFVLEVBQUUsRUFBRTtZQUNoQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztnQkFDbkUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BCLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQTtRQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDbEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTt3QkFDcEMsS0FBSyxFQUFFOzRCQUNMLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDbkIsQ0FBQzt3QkFDRCxRQUFRLEVBQUUsS0FBSzt3QkFDZixVQUFVLEVBQUUsS0FBSztxQkFDbEIsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxVQUFVO1FBQ2hCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQzlELDBFQUEwRSxDQUMzRSxDQUFDO1FBRUYsS0FBSyxJQUFJLEVBQUUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBRSxFQUFrQixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxFQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM1QixNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sU0FBUyxHQUFHO1FBQ2xCLEdBQUcsaUJBQWlCO1FBQ3BCLHVCQUF1QixFQUFFLHNCQUFzQjtRQUMvQyxJQUFJLEVBQUUsR0FBRztLQUNWLENBQUM7SUFFTSxTQUFTLEdBQUcsV0FBVztTQUM1QixRQUFRLENBQUMsYUFBYSxDQUFDO1NBQ3ZCLFVBQVUsQ0FBQztRQUNWLGVBQWUsRUFBRSxTQUFTO1FBQzFCLFdBQVcsRUFBRSxTQUFTO1FBQ3RCLGtCQUFrQixFQUFFLE9BQU87UUFDM0IsYUFBYSxFQUFFLFNBQVM7UUFDeEIsWUFBWSxFQUFFLElBQUk7UUFDbEIsVUFBVSxFQUFFLFNBQVM7UUFDckIsUUFBUSxFQUFFLEVBQUU7UUFDWixxQkFBcUIsRUFBRSxTQUFTO1FBQ2hDLGtCQUFrQixFQUFFLElBQUk7UUFDeEIsNkJBQTZCLEVBQUUsU0FBUztRQUN4Qyw2QkFBNkIsRUFBRSxDQUFDO1FBQ2hDLGNBQWMsRUFBRSxFQUFFO1FBQ2xCLGdCQUFnQixFQUFFLEdBQUc7UUFDckIsZUFBZSxFQUFFLEtBQUs7UUFDdEIsZUFBZSxFQUFFLFNBQVM7UUFDMUIsU0FBUyxFQUFFLElBQUk7S0FDaEIsQ0FBQyxDQUFDO0lBRUcsY0FBYyxDQUFDLFNBQWM7UUFDbkMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RCxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUc7Z0JBQ2pCLFVBQVUsRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDeEIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSTtnQkFDakMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSTtnQkFDOUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSTtnQkFDOUIsZUFBZSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQztnQkFDeEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxNQUFNLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQztnQkFDcEUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQ3hFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLE9BQU8sSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUN0RSxHQUFHLENBQUMsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ25FLEdBQUcsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDN0QsR0FBRyxDQUFDLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoRSxHQUFHLENBQUMsT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3pFLEdBQUcsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDekUsY0FBYyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7Z0JBQzdDLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQzthQUMzQyxDQUFDLENBQUMsQ0FBQztZQUVKLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JFLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ1gsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLFVBQVUsRUFBRSxLQUFLLENBQUMsT0FBTztvQkFDekIsU0FBUyxFQUFFLEtBQUs7b0JBQ2hCLFlBQVksRUFBRSxLQUFLO29CQUNuQixNQUFNLEVBQUUsT0FBTztvQkFDZixrQkFBa0IsRUFBRTt3QkFDbEIsU0FBUyxFQUFFLFNBQVM7d0JBQ3BCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztxQkFDMUI7b0JBQ0QsWUFBWSxFQUFFLG1CQUFtQjtvQkFDakMscUJBQXFCLEVBQUUsU0FBUyxDQUFDLGtCQUFrQjtpQkFDcEQsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7YUFDSSxDQUFDO1lBQ0osT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFNBQWM7UUFDckMsT0FBTyxDQUFDLE9BQU8sU0FBUyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksU0FBUyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRU8sZUFBZSxDQUFDLFNBQWM7UUFDcEMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0MsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWTtRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVPLFlBQVk7UUFDbEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxNQUFXO1FBQ2xDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLFFBQVEsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN0QixLQUFLLFNBQVM7b0JBQ1osT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUQsS0FBSyxVQUFVO29CQUNiLE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9ELEtBQUssTUFBTTtvQkFDVCxPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdELENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxNQUFXO1FBQ2pDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLFFBQVEsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN0QixLQUFLLFdBQVc7b0JBQ2QsT0FBTywwQkFBMEIsQ0FBQztnQkFDcEMsS0FBSyxXQUFXO29CQUNkLE9BQU8scUJBQXFCLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQVU7UUFDaEMsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDO1lBQ3JCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVPLG1CQUFtQjtRQUN4QixVQUFVLENBQUMsT0FBZSxDQUFDLElBQUksQ0FBQyxHQUFHO1lBQ2xDLElBQUksRUFBRTtnQkFDSixVQUFVO2dCQUNWLFFBQVE7Z0JBQ1IsU0FBUztnQkFDVCxXQUFXO2dCQUNYLFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxRQUFRO2FBQ1Q7WUFDRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7WUFDMUQsTUFBTSxFQUFFO2dCQUNOLFNBQVM7Z0JBQ1QsVUFBVTtnQkFDVixPQUFPO2dCQUNQLFFBQVE7Z0JBQ1IsUUFBUTtnQkFDUixRQUFRO2dCQUNSLFFBQVE7Z0JBQ1IsUUFBUTtnQkFDUixXQUFXO2dCQUNYLFNBQVM7Z0JBQ1QsVUFBVTtnQkFDVixVQUFVO2FBQ1g7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsS0FBSztnQkFDTCxLQUFLO2dCQUNMLEtBQUs7Z0JBQ0wsS0FBSztnQkFDTCxLQUFLO2dCQUNMLEtBQUs7Z0JBQ0wsS0FBSztnQkFDTCxLQUFLO2dCQUNMLEtBQUs7Z0JBQ0wsS0FBSztnQkFDTCxLQUFLO2dCQUNMLEtBQUs7YUFDTjtZQUNELEtBQUssRUFBRSxNQUFNO1lBQ2IsS0FBSyxFQUFFLFNBQVM7WUFDaEIsTUFBTSxFQUFFLFlBQVk7WUFDcEIsU0FBUyxFQUFFLENBQUM7U0FDYixDQUFDO0lBQ0osQ0FBQztJQUFBLENBQUM7d0dBOWZTLHNCQUFzQjs0RkFBdEIsc0JBQXNCLG1IQU50QjtZQUNULGVBQWU7WUFDZixzQkFBc0I7U0FDdkIsMEJDN0ZILDRzZ0RBMHhCQSxreUxEMXJCYSxzQkFBc0IsNkZBdkJ2QixZQUFZLHFxQkFBRSxtQkFBbUIsNDhCQUN2QyxnQkFBZ0IseUhBQUUsZ0JBQWdCLGdKQUFFLGdCQUFnQixxRkFBRSxzQkFBc0IsdUZBQzVFLGlCQUFpQix1REFBRSxtQkFBbUIseURBQUUsZUFBZSx5RUFBRSxZQUFZLDZFQUFFLGFBQWEsK0VBQ3BGLGlCQUFpQiw2RkFBRSxrQkFBa0IseUZBQUUsYUFBYSxzREFBRSxlQUFlLHNIQUFFLGFBQWEsdUdBQ3BGLG9CQUFvQixtRkFBRSxtQkFBbUIseURBQUUsaUJBQWlCLDZFQUFFLHVCQUF1Qiw2REFDckYsbUJBQW1CLDJYQUFFLHdCQUF3QixnSEFDN0Msb0JBQW9CLGtUQUFFLDBCQUEwQixpSUFBRSx5QkFBeUIsOEhBQzNFLDJCQUEyQiw0UkFBRSxzQkFBc0IscVBBQUUsd0JBQXdCLG1YQUFFLHdCQUF3QixnV0FDdkcsd0JBQXdCLGtTQUFFLHlCQUF5QixzUEFBRSxpQkFBaUIseUtBQUUscUJBQXFCLHNHQUM3Rix1QkFBdUIsa0ZBQUUsNEJBQTRCLHFJQUFFLDZCQUE2Qix1RUFBRSwyQkFBMkIscUVBQ2pILG9CQUFvQixxWkFBRSx3QkFBd0IsdWFBQzlDLG9CQUFvQixvUEFBRSwrQkFBK0IsMFNBQUUsNEJBQTRCLHVTQUFFLHVCQUF1QixtUEFDNUcsbUJBQW1CLGtJQUFFLDBCQUEwQixvRUFBRSxvQkFBb0IsaVVBQ3JFLG9CQUFvQixpRkFBRSx3QkFBd0IscUZBQzlDLHFCQUFxQixvT0FDckIsd0JBQXdCLGtHQUN4QixhQUFhOzs0RkFPTixzQkFBc0I7a0JBN0JsQyxTQUFTOytCQUNFLG9CQUFvQixjQUlsQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CO3dCQUN2QyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0I7d0JBQzVFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsYUFBYTt3QkFDcEYsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxhQUFhO3dCQUNwRixvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUI7d0JBQ3JGLG1CQUFtQixFQUFFLHdCQUF3Qjt3QkFDN0Msb0JBQW9CLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCO3dCQUMzRSwyQkFBMkIsRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsRUFBRSx3QkFBd0I7d0JBQ3ZHLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGlCQUFpQixFQUFFLHFCQUFxQjt3QkFDN0YsdUJBQXVCLEVBQUUsNEJBQTRCLEVBQUUsNkJBQTZCLEVBQUUsMkJBQTJCO3dCQUNqSCxvQkFBb0IsRUFBRSx3QkFBd0I7d0JBQzlDLG9CQUFvQixFQUFFLCtCQUErQixFQUFFLDRCQUE0QixFQUFFLHVCQUF1Qjt3QkFDNUcsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CO3dCQUNyRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSwwQkFBMEIsRUFBRSx3QkFBd0I7d0JBQ3BHLHFCQUFxQjt3QkFDckIsd0JBQXdCO3dCQUN4QixhQUFhLENBQUMsYUFDUDt3QkFDVCxlQUFlO3dCQUNmLHNCQUFzQjtxQkFDdkIsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTswVkFHNUIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBFbGVtZW50UmVmLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIEZvcm1BcnJheSwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTYWZlSHRtbCwgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IERhdGVwaWNrZXIgfSBmcm9tICd2YW5pbGxhanMtZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IFNhbml0aXplU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Nhbml0aXplLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXJrZG93blNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYXJrZG93bi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWltZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9taW1lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFdmVudFNlcnZpY2UsIENvbW1hbmRFdmVudCB9IGZyb20gJy4uL3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtYXR0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZm9ybWF0dGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXZWFrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3dlYWsuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlZ2lzdGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3JlZ2lzdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQnV0dG9uQ29sb3JzIH0gZnJvbSAnbmd4LXNpcmlvLWxpYic7XHJcbmltcG9ydCB7IEFkb3JuZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Fkb3JuZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRGlzYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGlzYWJsZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBEaXNwbGF5RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kaXNwbGF5LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlcGVhdERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvcmVwZWF0LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEZyYW1lU2VjdXJpdHlEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2ZyYW1lc2VjdXJpdHkuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRHJvcGRvd25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Ryb3Bkb3duLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRhYkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGFiLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEFjY29yZGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYWNjb3JkaW9uLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEdyaWREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2dyaWQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgUmVnaXN0ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3JlZ2lzdGVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFVwZGF0ZUJsdXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3VwZGF0ZWJsdXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBOdW1iZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL251bWJlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90ZXh0LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IERpc2FibGVGb3JtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kaXNhYmxlZm9ybS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUYWJDb250cm9sRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90YWJjb250cm9sLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbGxhcHNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jb2xsYXBzZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBBY2NvcmRpb25QYW5lbERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYWNjb3JkaW9ucGFuZWwuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVGVtcGxhdGVXcmFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcmVkL3RlbXBsYXRlLXdyYXBwZXIvdGVtcGxhdGUtd3JhcHBlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBPYmplY3RVUkxSZW5kZXJlckNvbXBvbmVudCwgRGVsZXRlUm93Q2VsbFJlbmRlcmVyLCBBY3Rpb25zQ2VsbFJlbmRlcmVyIH0gZnJvbSAnLi4vdXRpbHMvZ3JpZENlbGxzJztcclxuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTaXJpb0lucHV0Q29tcG9uZW50LCBTaXJpb1ZhbGlkYXRpb25EaXJlY3RpdmVcclxuICAsIFNpcmlvU2VsZWN0Q29tcG9uZW50LCBTaXJpb1NlbGVjdE9wdGlvbkNvbXBvbmVudCwgU2lyaW9TZWxlY3RQYW5lbENvbXBvbmVudFxyXG4gICwgU2lyaW9DaGVja2JveEdyb3VwQ29tcG9uZW50LCBTaXJpb0NoZWNrYm94Q29tcG9uZW50LCBTaXJpb0RhdGVwaWNrZXJDb21wb25lbnQsIFNpcmlvVGltZXBpY2tlckNvbXBvbmVudFxyXG4gICwgU2lyaW9SYWRpb0dyb3VwQ29tcG9uZW50LCBTaXJpb1JhZGlvQnV0dG9uQ29tcG9uZW50LCBTaXJpb1RhYkNvbXBvbmVudCwgU2lyaW9UYWJJdGVtQ29tcG9uZW50XHJcbiAgLCBTaXJpb0FjY29yZGlvbkNvbXBvbmVudCwgU2lyaW9BY2NvcmRpb25QYW5lbENvbXBvbmVudCwgU2lyaW9BY2NvcmRpb25IZWFkZXJDb21wb25lbnQsIFNpcmlvQWNjb3JkaW9uQm9keUNvbXBvbmVudFxyXG4gICwgU2lyaW9CdXR0b25Db21wb25lbnQsIFNpcmlvRmlsZVVwbG9hZENvbXBvbmVudFxyXG4gICwgU2lyaW9Ub2dnbGVDb21wb25lbnQsIFNpcmlvQ2hpcENoZWNrYm94R3JvdXBDb21wb25lbnQsIFNpcmlvQ2hpcFJhZGlvR3JvdXBDb21wb25lbnQsIFNpcmlvSW5wdXRDaGlwQ29tcG9uZW50XHJcbiAgLCBTaXJpb0FsZXJ0Q29tcG9uZW50LCBTaXJpb0FsZXJ0TWVzc2FnZUNvbXBvbmVudCwgU2lyaW9TbGlkZXJDb21wb25lbnRcclxuICAsIFNpcmlvTm90aWZ5Q29tcG9uZW50LCBTaXJpb05vdGlmeUJvZHlDb21wb25lbnQsIFNpcmlvTm90aWZ5QWN0aW9uQ29tcG9uZW50LCBTaXJpb05vdGlmeUxpbmtDb21wb25lbnRcclxuICAsIFNpcmlvVG9vbHRpcERpcmVjdGl2ZVxyXG4gICwgTmd4U2lyaW9FdmVudFxyXG59IGZyb20gJ25neC1zaXJpby1saWInO1xyXG5cclxuaW1wb3J0IHsgQWdHcmlkQW5ndWxhciB9IGZyb20gJ2FnLWdyaWQtYW5ndWxhcic7XHJcbmltcG9ydCB7XHJcbiAgTW9kdWxlLCBQYWdpbmF0aW9uTW9kdWxlLCBDbGllbnRTaWRlUm93TW9kZWxNb2R1bGUsIEluZmluaXRlUm93TW9kZWxNb2R1bGVcclxuICAsIExvY2FsZU1vZHVsZSwgQ2VsbFN0eWxlTW9kdWxlLCBWYWxpZGF0aW9uTW9kdWxlXHJcbiAgLCBUZXh0RmlsdGVyTW9kdWxlLCBOdW1iZXJGaWx0ZXJNb2R1bGUsIERhdGVGaWx0ZXJNb2R1bGVcclxuICAsIENvbERlZiwgdGhlbWVRdWFydHosIGljb25TZXRBbHBpbmUsIEdyaWRPcHRpb25zLCBWYWx1ZUZvcm1hdHRlclBhcmFtc1xyXG4gICwgQ2xpZW50U2lkZVJvd01vZGVsQXBpTW9kdWxlXHJcbiAgLCBHcmlkUmVhZHlFdmVudCwgQ29sdW1uQXV0b1NpemVNb2R1bGUsIENvbHVtbkFwaU1vZHVsZVxyXG59IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuaW1wb3J0IHsgQUdfR1JJRF9MT0NBTEVfSVQgfSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvbG9jYWxlJztcclxuXHJcbmltcG9ydCB7IEdyaWRVdGlscyB9IGZyb20gJy4uL3V0aWxzL2dyaWRVdGlscyc7XHJcblxyXG5pbXBvcnQgeyBUZXh0cyB9IGZyb20gJy4uL2xvY2FsZS9sb2NhbGUtaXQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZHluYW1pYy1maWVsZHMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9keW5hbWljLWZpZWxkcy5jb21wb25lbnQuY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXHJcbiAgICAsIEFkb3JuZXJEaXJlY3RpdmUsIERpc2FibGVEaXJlY3RpdmUsIERpc3BsYXlEaXJlY3RpdmUsIEZyYW1lU2VjdXJpdHlEaXJlY3RpdmVcclxuICAgICwgRHJvcGRvd25EaXJlY3RpdmUsIFVwZGF0ZUJsdXJEaXJlY3RpdmUsIFJlcGVhdERpcmVjdGl2ZSwgVGFiRGlyZWN0aXZlLCBHcmlkRGlyZWN0aXZlXHJcbiAgICAsIFJlZ2lzdGVyRGlyZWN0aXZlLCBBY2NvcmRpb25EaXJlY3RpdmUsIERhdGVEaXJlY3RpdmUsIE51bWJlckRpcmVjdGl2ZSwgVGV4dERpcmVjdGl2ZVxyXG4gICAgLCBEaXNhYmxlRm9ybURpcmVjdGl2ZSwgVGFiQ29udHJvbERpcmVjdGl2ZSwgQ29sbGFwc2VEaXJlY3RpdmUsIEFjY29yZGlvblBhbmVsRGlyZWN0aXZlXHJcbiAgICAsIFNpcmlvSW5wdXRDb21wb25lbnQsIFNpcmlvVmFsaWRhdGlvbkRpcmVjdGl2ZVxyXG4gICAgLCBTaXJpb1NlbGVjdENvbXBvbmVudCwgU2lyaW9TZWxlY3RPcHRpb25Db21wb25lbnQsIFNpcmlvU2VsZWN0UGFuZWxDb21wb25lbnRcclxuICAgICwgU2lyaW9DaGVja2JveEdyb3VwQ29tcG9uZW50LCBTaXJpb0NoZWNrYm94Q29tcG9uZW50LCBTaXJpb0RhdGVwaWNrZXJDb21wb25lbnQsIFNpcmlvVGltZXBpY2tlckNvbXBvbmVudFxyXG4gICAgLCBTaXJpb1JhZGlvR3JvdXBDb21wb25lbnQsIFNpcmlvUmFkaW9CdXR0b25Db21wb25lbnQsIFNpcmlvVGFiQ29tcG9uZW50LCBTaXJpb1RhYkl0ZW1Db21wb25lbnRcclxuICAgICwgU2lyaW9BY2NvcmRpb25Db21wb25lbnQsIFNpcmlvQWNjb3JkaW9uUGFuZWxDb21wb25lbnQsIFNpcmlvQWNjb3JkaW9uSGVhZGVyQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvbkJvZHlDb21wb25lbnRcclxuICAgICwgU2lyaW9CdXR0b25Db21wb25lbnQsIFNpcmlvRmlsZVVwbG9hZENvbXBvbmVudFxyXG4gICAgLCBTaXJpb1RvZ2dsZUNvbXBvbmVudCwgU2lyaW9DaGlwQ2hlY2tib3hHcm91cENvbXBvbmVudCwgU2lyaW9DaGlwUmFkaW9Hcm91cENvbXBvbmVudCwgU2lyaW9JbnB1dENoaXBDb21wb25lbnRcclxuICAgICwgU2lyaW9BbGVydENvbXBvbmVudCwgU2lyaW9BbGVydE1lc3NhZ2VDb21wb25lbnQsIFNpcmlvU2xpZGVyQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvTm90aWZ5Q29tcG9uZW50LCBTaXJpb05vdGlmeUJvZHlDb21wb25lbnQsIFNpcmlvTm90aWZ5QWN0aW9uQ29tcG9uZW50LCBTaXJpb05vdGlmeUxpbmtDb21wb25lbnRcclxuICAgICwgU2lyaW9Ub29sdGlwRGlyZWN0aXZlXHJcbiAgICAsIFRlbXBsYXRlV3JhcHBlckNvbXBvbmVudFxyXG4gICAgLCBBZ0dyaWRBbmd1bGFyXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIFJlZ2lzdGVyU2VydmljZSxcclxuICAgIFByb2dyYW1tYWJpbGl0eVNlcnZpY2VcclxuICBdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNGaWVsZHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIHJvd3M6IEFycmF5PGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgZm9ybUdyb3VwITogRm9ybUdyb3VwO1xyXG5cclxuICBUZXh0cyA9IFRleHRzO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogU2FuaXRpemVTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgbWFya2Rvd246IE1hcmtkb3duU2VydmljZVxyXG4gICAgLCBwcml2YXRlIG1pbWU6IE1pbWVTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgcHJvZ3JhbW1hYmlsaXR5OiBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZXZlbnRzOiBFdmVudFNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBmb3JtYXR0ZXI6IEZvcm1hdHRlclNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSB3ZWFrOiBXZWFrU2VydmljZVxyXG4gICAgLCBwcml2YXRlIHJlZ2lzdGVyOiBSZWdpc3RlclNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBtZXRhZGF0YTogTWV0YWRhdGFTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZWw6IEVsZW1lbnRSZWZcclxuICApXHJcbiAge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZURhdGVwaWNrZXIoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmZvY3VzRmlyc3QoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVnaXN0ZXIoKTogUmVnaXN0ZXJTZXJ2aWNlIHtcclxuICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2xhc3MoY29tcG9uZW50OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29sSG9zdCA9IFwiY29sLWhvc3QgXCI7XHJcbiAgICBpZiAoY29tcG9uZW50LmxheW91dD8uY29sdW1ucykge1xyXG4gICAgICByZXR1cm4gY29sSG9zdCArIFwiY29sLW1kLVwiICsgY29tcG9uZW50LmxheW91dD8uY29sdW1ucztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gY29sSG9zdCArIFwiY29sXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldChjb21wb25lbnQua2V5KSBhcyBGb3JtQ29udHJvbDtcclxuICAgIHJldHVybiAhY29udHJvbCB8fCBjb250cm9sLnZhbGlkIHx8ICFjb250cm9sLmVycm9yc1xyXG4gICAgICA/ICcnXHJcbiAgICAgIDogY29udHJvbC5lcnJvcnNbJ21lc3NhZ2UnXTtcclxuICB9XHJcblxyXG4gIGlzV2FybmluZyhjb21wb25lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldChjb21wb25lbnQua2V5KSBhcyBGb3JtQ29udHJvbDtcclxuICAgIHJldHVybiAoY29udHJvbCAmJiBjb250cm9sLmVycm9ycyAmJiBjb250cm9sLmVycm9yc1snd2FybmluZyddKSB8fCBmYWxzZVxyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVTdHJpbmcodmFsdWU6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlU3RyaW5nKHRoaXMuZm9ybUdyb3VwLCB2YWx1ZSk7ICAgIFxyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVCb29sZWFuKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZUJvb2xlYW4odGhpcy5mb3JtR3JvdXAsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlTnVtYmVyKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVOdW1iZXIodGhpcy5mb3JtR3JvdXAsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlVXJsKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogU2FmZVJlc291cmNlVXJsIHtcclxuICAgIGNvbnN0IHVybCA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlU3RyaW5nKHRoaXMuZm9ybUdyb3VwLCB2YWx1ZSk7XHJcbiAgICBjb25zdCB3YXRjaEtleSA9IGA6c2FmZVVybCgke3VybH0pYDtcclxuICAgIHJldHVybiB0aGlzLndlYWsuY2FsbCh0aGlzLmZvcm1Hcm91cCwgd2F0Y2hLZXksICgpID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLnNhbml0aXplU2FmZVVybCh1cmwpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZVRlbXBsYXRlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZVRlbXBsYXRlKHRoaXMuZm9ybUdyb3VwLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZSh0ZXh0OiBzdHJpbmcgfCBudWxsLCBjYWNoZWFibGU6IGJvb2xlYW4gPSB0cnVlKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZSh0aGlzLmZvcm1Hcm91cCwgdGV4dCwgeyBjYWNoZWFibGU6IGNhY2hlYWJsZSB9KTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlQ29sb3IodmFsdWU6IHN0cmluZyB8IG51bGwpOiBCdXR0b25Db2xvcnMgfCBudWxsIHtcclxuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5ldmFsdWF0ZVN0cmluZyh2YWx1ZSk7XHJcbiAgICBjb25zdCB3YXRjaEtleSA9IGA6YnV0dG9uQ29sb3IoJHtjb2xvcn0pYDtcclxuICAgIHJldHVybiB0aGlzLndlYWsuY2FsbCh0aGlzLmZvcm1Hcm91cCwgd2F0Y2hLZXksICgpID0+IHtcclxuICAgICAgaWYgKGNvbG9yID09PSBcImdob3N0XCIpXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIGNvbnN0IHZhbGlkQ29sb3JzOiBCdXR0b25Db2xvcnNbXSA9IFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAndGVydGlhcnknLCAndGVydGlhcnktbGlnaHQnLCAnZGFuZ2VyJ107XHJcbiAgICAgIHJldHVybiB2YWxpZENvbG9ycy5pbmNsdWRlcyhjb2xvciBhcyBCdXR0b25Db2xvcnMpID8gKGNvbG9yIGFzIEJ1dHRvbkNvbG9ycykgOiAncHJpbWFyeSc7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlQ29uZGl0aW9uYWwoY29uZGl0aW9uYWw6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgaGlkZSA9IHRoaXMuZXZhbHVhdGVCb29sZWFuKGNvbmRpdGlvbmFsPy5oaWRlKTtcclxuICAgIGNvbnN0IHNob3cgPSB0aGlzLmV2YWx1YXRlQm9vbGVhbihjb25kaXRpb25hbD8uc2hvdyk7XHJcbiAgICBcclxuICAgIHJldHVybiAhKGhpZGUgPT09IHRydWUgfHwgc2hvdyA9PT0gZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcGxhdGUodmFsdWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5tZXRhZGF0YS5nZXRGb3JtQnlOYW1lKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1Hcm91cChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsKTogRm9ybUdyb3VwIHtcclxuICAgIGlmICghKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29udHJvbCBpcyBub3QgYSBGb3JtR3JvdXAnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb250cm9sO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUFycmF5KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwpOiBGb3JtQXJyYXkge1xyXG4gICAgaWYgKCEoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb250cm9sIGlzIG5vdCBhIEZvcm1BcnJheScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBnZXRDb250cm9sRnJvbVBhdGgocGF0aDogc3RyaW5nIHwgbnVsbCk6IEFic3RyYWN0Q29udHJvbCB8IG51bGwge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHBhdGhcclxuICAgICAgPyB0aGlzLmZvcm1Hcm91cC5nZXQocGF0aClcclxuICAgICAgOiB0aGlzLmZvcm1Hcm91cDtcclxuXHJcbiAgICBpZiAoIWNvbnRyb2wpIHsgICAgICBcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3JtR3JvdXAgZG9lcyBub3QgY29udGFpbiBhIGNvbnRyb2wgd2l0aCBwYXRoICcke3BhdGh9J2AsIHsgY2F1c2U6IHRoaXMuZm9ybUdyb3VwIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICB0b0hUTUwodGV4dDogc3RyaW5nKTogU2FmZUh0bWwge1xyXG4gICAgY29uc3Qgd2F0Y2hLZXkgPSBgOnNhZmVIdG1sKCR7dGV4dH0pYDtcclxuICAgIHJldHVybiB0aGlzLndlYWsuY2FsbCh0aGlzLmZvcm1Hcm91cCwgd2F0Y2hLZXksICgpID0+IHtcclxuICAgICAgY29uc3QgaHRtbCA9IHRoaXMubWFya2Rvd24udG9IdG1sKHRleHQpO1xyXG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuc2FuaXRpemVTYWZlSHRtbChodG1sKTtcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIHNhbml0aXplKGh0bWw6IHN0cmluZyk6IFNhZmVIdG1sIHtcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5zYW5pdGl6ZVNhZmVIdG1sKGh0bWwpO1xyXG4gIH07XHJcblxyXG4gIGdldE1pbWVUeXBlcyhleHRlbnNpb25zOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubWltZS5nZXRNaW1lVHlwZXMoZXh0ZW5zaW9ucyk7XHJcbiAgfTtcclxuXHJcbiAgY2xpY2tCdXR0b24oY29tcG9uZW50OiBhbnksIGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChjb21wb25lbnQuY2xpY2spIHtcclxuICAgICAgdGhpcy5ldmFsdWF0ZShjb21wb25lbnQuY2xpY2ssIGZhbHNlKTtcclxuICAgIH1cclxuICAgIGlmIChjb21wb25lbnQuY29tbWFuZCkge1xyXG4gICAgICBjb25zdCBjb21tYW5kOiBDb21tYW5kRXZlbnQgPSB7XHJcbiAgICAgICAgbmFtZTogdGhpcy5ldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuY29tbWFuZCksXHJcbiAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsXHJcbiAgICAgICAgZm9ybUdyb3VwOiB0aGlzLmZvcm1Hcm91cCxcclxuICAgICAgICBldmVudDogZXZlbnRcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5ldmVudHMuZW1pdENvbW1hbmQoY29tbWFuZCk7XHJcbiAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgZ2V0VmFsdWVzKGNvbXBvbmVudDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmIChjb21wb25lbnQudmFsdWVzKSB7XHJcbiAgICAgIC8vIFN0YXRpY1xyXG4gICAgICByZXR1cm4gb2YoY29tcG9uZW50LnZhbHVlcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb21wb25lbnQudmFsdWVzS2V5KSB7XHJcbiAgICAgIC8vIEZpZWxkIHZhbHVlXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZXZhbHVhdGUoY29tcG9uZW50LnZhbHVlc0tleSk7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldEFzT2JzZXJ2YWJsZShyZXN1bHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29tcG9uZW50LnZhbHVlc0V4cHJlc3Npb24pIHtcclxuICAgICAgLy8gRXhwcmVzc2lvblxyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmV2YWx1YXRlKGNvbXBvbmVudC52YWx1ZXNFeHByZXNzaW9uKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0QXNPYnNlcnZhYmxlKHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gTm90aGluZ1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfSAgICBcclxuICB9XHJcblxyXG4gIGdldEdyaWRPcHRpb25zKGNvbXBvbmVudDogYW55KTogR3JpZE9wdGlvbnMge1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKGNvbXBvbmVudCwgJ2dldEdyaWRPcHRpb25zJywgKCkgPT4ge1xyXG4gICAgICBjb25zdCBjb2x1bW5EZWZzID0gdGhpcy5nZXRHcmlkQ29sdW1ucyhjb21wb25lbnQpO1xyXG4gICAgICBjb25zdCBwYWdpbmF0aW9uID0gdGhpcy5nZXRHcmlkUGFnaW5hYmxlKGNvbXBvbmVudCk7XHJcbiAgICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5nZXRHcmlkUGFnZVNpemUoY29tcG9uZW50KTtcclxuICAgICAgY29uc3QgdGV4dHMgPSB0aGlzLmdldEdyaWRUZXh0cygpO1xyXG4gICAgICBjb25zdCB0aGVtZSA9IHRoaXMuZ2V0R3JpZFRoZW1lKCk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZGVmYXVsdENvbERlZjoge1xyXG4gICAgICAgICAgZmxvYXRpbmdGaWx0ZXI6IChjb21wb25lbnQuZmxvYXRpbmdGaWx0ZXIgPT09IHRydWUpLFxyXG4gICAgICAgICAgaGVhZGVyQ2xhc3M6IChjb21wb25lbnQuZmxvYXRpbmdGaWx0ZXIgPT09IHRydWUpXHJcbiAgICAgICAgICAgID8gJ3Nob3ctZmlsdGVyJyA6ICdoaWRlLWZpbHRlcidcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbHVtbkRlZnM6IGNvbHVtbkRlZnMsXHJcbiAgICAgICAgcGFnaW5hdGlvbjogcGFnaW5hdGlvbixcclxuICAgICAgICBwYWdpbmF0aW9uUGFnZVNpemU6IHBhZ2VTaXplLFxyXG4gICAgICAgIHBhZ2luYXRpb25QYWdlU2l6ZVNlbGVjdG9yOiBbNSwgMTAsIDIwLCA1MF0sXHJcbiAgICAgICAgbG9jYWxlVGV4dDogdGV4dHMsXHJcbiAgICAgICAgZW5hYmxlQ2VsbFRleHRTZWxlY3Rpb246IHRydWUsXHJcbiAgICAgICAgdGhlbWU6IHRoZW1lLFxyXG4gICAgICAgIG9uR3JpZFJlYWR5OiAocGFyYW1zOiBHcmlkUmVhZHlFdmVudCkgPT4ge1xyXG4gICAgICAgICAgcGFyYW1zLmFwaS5hdXRvU2l6ZUNvbHVtbnMoW1wiYWN0aW9uc1wiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRHcmlkTW9kdWxlcyhjb21wb25lbnQ6IGFueSk6IE1vZHVsZVtdIHtcclxuICAgIHJldHVybiB0aGlzLndlYWsuY2FsbChjb21wb25lbnQsICdnZXRHcmlkTW9kdWxlcycsICgpID0+IHtcclxuICAgICAgcmV0dXJuIFtcclxuICAgICAgICBDbGllbnRTaWRlUm93TW9kZWxNb2R1bGVcclxuICAgICAgICAsIEluZmluaXRlUm93TW9kZWxNb2R1bGVcclxuICAgICAgICAsIFBhZ2luYXRpb25Nb2R1bGVcclxuICAgICAgICAsIExvY2FsZU1vZHVsZVxyXG4gICAgICAgICwgQ2VsbFN0eWxlTW9kdWxlXHJcbiAgICAgICAgLCBDbGllbnRTaWRlUm93TW9kZWxBcGlNb2R1bGVcclxuICAgICAgICAsIFRleHRGaWx0ZXJNb2R1bGVcclxuICAgICAgICAsIE51bWJlckZpbHRlck1vZHVsZVxyXG4gICAgICAgICwgRGF0ZUZpbHRlck1vZHVsZVxyXG4gICAgICAgICwgQ29sdW1uQXV0b1NpemVNb2R1bGVcclxuICAgICAgICAsIENvbHVtbkFwaU1vZHVsZVxyXG4gICAgICAgICwgVmFsaWRhdGlvbk1vZHVsZVxyXG4gICAgICBdO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRHcmlkRGF0YShjb21wb25lbnQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoY29tcG9uZW50LmRhdGFTb3VyY2UpIHtcclxuICAgICAgLy8gRXhwcmVzc2lvblxyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmV2YWx1YXRlKGNvbXBvbmVudC5kYXRhU291cmNlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0QXNPYnNlcnZhYmxlKHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gTm90aGluZ1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkTmV3SXRlbShjb21wb25lbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5nZXRGb3JtQXJyYXkodGhpcy5nZXRDb250cm9sRnJvbVBhdGgoY29tcG9uZW50LnBhdGgpKTtcclxuICAgIChmb3JtQXJyYXkgYXMgYW55KS5hZGROZXdJdGVtKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVJdGVtKGNvbXBvbmVudDogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmdldEZvcm1BcnJheSh0aGlzLmdldENvbnRyb2xGcm9tUGF0aChjb21wb25lbnQucGF0aCkpO1xyXG4gICAgZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVVwbG9hZFRhYmxlcyhjb21wb25lbnQ6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwoY29tcG9uZW50LCAnY3JlYXRlVXBsb2FkVGFibGVzJywgKCkgPT4ge1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbXBvbmVudHM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInRhYmxlXCIsXHJcbiAgICAgICAgICAgICAgXCJsYXlvdXRcIjoge1xyXG4gICAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IG51bGxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogVGV4dHMuTmFtZSxcclxuICAgICAgICAgICAgICAgICAgXCJrZXlcIjogXCJuYW1lXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZmxleFwiOiAxXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBcImxhYmVsXCI6IFRleHRzLlNpemUsXHJcbiAgICAgICAgICAgICAgICAgIFwia2V5XCI6IFwic2l6ZVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvcm1hdFwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgICAgICAgXCJhbGlnblwiOiBcInJpZ2h0XCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogVGV4dHMuVHlwZSxcclxuICAgICAgICAgICAgICAgICAgXCJrZXlcIjogXCJ0eXBlXCIgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwia2V5XCI6IFwidXJsXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiA1MCxcclxuICAgICAgICAgICAgICAgICAgXCJhbGlnblwiOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvcm1hdFwiOiBcIm9iamVjdFVSTFwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBcImxhYmVsXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwid2lkdGhcIjogNTAsXHJcbiAgICAgICAgICAgICAgICAgIFwiYWxpZ25cIjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJkZWxldGVSb3dcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgXCJkYXRhU291cmNlXCI6IFwiPVwiICsgY29tcG9uZW50LmtleSxcclxuICAgICAgICAgICAgICBcImhlaWdodFwiOiAyMDAsXHJcbiAgICAgICAgICAgICAgXCJjb25kaXRpb25hbFwiOiBjb21wb25lbnQuY29uZGl0aW9uYWwsXHJcbiAgICAgICAgICAgICAgXCJkaXNhYmxlZFwiOiBjb21wb25lbnQuZGlzYWJsZWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmlsZVVwbG9hZGVkKCRldmVudDogTmd4U2lyaW9FdmVudDxTaXJpb0ZpbGVVcGxvYWRDb21wb25lbnQ+KSB7XHJcbiAgICBjb25zdCByZW1vdmVGaWxlID0gKGZpbGU6IEZpbGUpID0+IHtcclxuICAgICAgaWYgKCRldmVudC5jb21wb25lbnQuY29udHJvbCkge1xyXG4gICAgICAgIGNvbnN0IG5ld0ZpbGVzID0gJGV2ZW50LmNvbXBvbmVudC5maWxlTGlzdC5maWx0ZXIoZiA9PiBmICE9PSBmaWxlKTtcclxuICAgICAgICAkZXZlbnQuY29tcG9uZW50LmNvbnRyb2wuc2V0VmFsdWUobmV3RmlsZXMpO1xyXG4gICAgICAgIGFkZFJlbW92ZShuZXdGaWxlcyk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0ZpbGVzO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhZGRSZW1vdmUgPSAoZmlsZXM6IEZpbGVbXSkgPT4ge1xyXG4gICAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICAgIGlmICghKCdyZW1vdmUnIGluIGZpbGUpKSB7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmlsZSwgJ3JlbW92ZScsIHtcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZW1vdmVGaWxlKHRoaXMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgfSk7IFxyXG4gICAgfTtcclxuXHJcbiAgICBhZGRSZW1vdmUoJGV2ZW50LmNvbXBvbmVudC5maWxlTGlzdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzRmlyc3QoKSB7XHJcbiAgICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAnYnV0dG9uLCBbaHJlZl0sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknXHJcbiAgICApO1xyXG5cclxuICAgIGZvciAobGV0IGVsIG9mIGZvY3VzYWJsZUVsZW1lbnRzKSB7XHJcbiAgICAgIGlmICghKGVsIGFzIEhUTUxFbGVtZW50KS5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHtcclxuICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH0gICAgICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ3JpZFRleHRzID0ge1xyXG4gICAgLi4uQUdfR1JJRF9MT0NBTEVfSVQsXHJcbiAgICBcInBhZ2VTaXplU2VsZWN0b3JMYWJlbFwiOiBcIkVsZW1lbnRpIHBlciBwYWdpbmE6XCIsXHJcbiAgICBcInRvXCI6IFwiLVwiLFxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZ3JpZFRoZW1lID0gdGhlbWVRdWFydHpcclxuICAgIC53aXRoUGFydChpY29uU2V0QWxwaW5lKVxyXG4gICAgLndpdGhQYXJhbXMoe1xyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI0ZBRkFGQVwiLFxyXG4gICAgICBib3JkZXJDb2xvcjogXCIjRDlFNEY3XCIsXHJcbiAgICAgIGJyb3dzZXJDb2xvclNjaGVtZTogXCJsaWdodFwiLFxyXG4gICAgICBjZWxsVGV4dENvbG9yOiBcIiMwMDEyMUFcIixcclxuICAgICAgY29sdW1uQm9yZGVyOiB0cnVlLFxyXG4gICAgICBmb250RmFtaWx5OiBcImluaGVyaXRcIixcclxuICAgICAgZm9udFNpemU6IDE2LFxyXG4gICAgICBoZWFkZXJCYWNrZ3JvdW5kQ29sb3I6IFwiIzAwMjQ2MFwiLFxyXG4gICAgICBoZWFkZXJDb2x1bW5Cb3JkZXI6IHRydWUsXHJcbiAgICAgIGhlYWRlckNvbHVtblJlc2l6ZUhhbmRsZUNvbG9yOiBcIiNGMkY2RkNcIixcclxuICAgICAgaGVhZGVyQ29sdW1uUmVzaXplSGFuZGxlV2lkdGg6IDIsXHJcbiAgICAgIGhlYWRlckZvbnRTaXplOiAxNixcclxuICAgICAgaGVhZGVyRm9udFdlaWdodDogNjAwLFxyXG4gICAgICBoZWFkZXJSb3dCb3JkZXI6IGZhbHNlLFxyXG4gICAgICBoZWFkZXJUZXh0Q29sb3I6IFwiI0YyRjZGQ1wiLFxyXG4gICAgICByb3dCb3JkZXI6IHRydWVcclxuICAgIH0pO1xyXG5cclxuICBwcml2YXRlIGdldEdyaWRDb2x1bW5zKGNvbXBvbmVudDogYW55KTogQ29sRGVmW10ge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29tcG9uZW50LmNvbHVtbnMpKSB7XHJcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSBjb21wb25lbnQuY29sdW1ucy5tYXAoKGNvbHVtbjogYW55KSA9PiAoe1xyXG4gICAgICAgIGZpZWxkOiBjb2x1bW4ua2V5LFxyXG4gICAgICAgIGhlYWRlck5hbWU6IGNvbHVtbi5sYWJlbCxcclxuICAgICAgICByZXNpemFibGU6IGNvbHVtbi5yZXNpemUgPT09IHRydWUsXHJcbiAgICAgICAgc29ydGFibGU6IGNvbHVtbi5zb3J0ID09PSB0cnVlLFxyXG4gICAgICAgIGZpbHRlcjogY29sdW1uLmZpbHRlciA9PT0gdHJ1ZSxcclxuICAgICAgICBzdXBwcmVzc01vdmFibGU6ICEoY29sdW1uLm1vdmUgPT09IHRydWUpLFxyXG4gICAgICAgIC4uLihjb2x1bW4uZmxleCA9PT0gdHJ1ZSAmJiB7IGZsZXg6IDEgfSksXHJcbiAgICAgICAgLi4uKGNvbHVtbi5hbGlnbiA9PT0gXCJsZWZ0XCIgJiYgeyBjZWxsU3R5bGU6IHsgdGV4dEFsaWduOiAnbGVmdCcgfSB9KSxcclxuICAgICAgICAuLi4oY29sdW1uLmFsaWduID09PSBcImNlbnRlclwiICYmIHsgY2VsbFN0eWxlOiB7IHRleHRBbGlnbjogJ2NlbnRlcicgfSB9KSxcclxuICAgICAgICAuLi4oY29sdW1uLmFsaWduID09PSBcInJpZ2h0XCIgJiYgeyBjZWxsU3R5bGU6IHsgdGV4dEFsaWduOiAncmlnaHQnIH0gfSksXHJcbiAgICAgICAgLi4uKHR5cGVvZiBjb2x1bW4ucGlubmVkID09PSBcInN0cmluZ1wiICYmIHsgcGlubmVkOiBjb2x1bW4ucGlubmVkIH0pLFxyXG4gICAgICAgIC4uLih0eXBlb2YgY29sdW1uLmZsZXggPT09IFwibnVtYmVyXCIgJiYgeyBmbGV4OiBjb2x1bW4uZmxleCB9KSxcclxuICAgICAgICAuLi4odHlwZW9mIGNvbHVtbi53aWR0aCA9PT0gXCJudW1iZXJcIiAmJiB7IHdpZHRoOiBjb2x1bW4ud2lkdGggfSksXHJcbiAgICAgICAgLi4uKHR5cGVvZiBjb2x1bW4ubWluV2lkdGggPT09IFwibnVtYmVyXCIgJiYgeyBtaW5XaWR0aDogY29sdW1uLm1pbldpZHRoIH0pLFxyXG4gICAgICAgIC4uLih0eXBlb2YgY29sdW1uLm1heFdpZHRoID09PSBcIm51bWJlclwiICYmIHsgbWF4V2lkdGg6IGNvbHVtbi5tYXhXaWR0aCB9KSxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogdGhpcy5nZXRHcmlkRm9ybWF0dGVyKGNvbHVtbiksXHJcbiAgICAgICAgY2VsbFJlbmRlcmVyOiB0aGlzLmdldEdyaWRSZW5kZXJlcihjb2x1bW4pXHJcbiAgICAgIH0pKTtcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbXBvbmVudC5hY3Rpb25zKSAmJiBjb21wb25lbnQuYWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29sdW1ucy5wdXNoKHtcclxuICAgICAgICAgIGNvbElkOiAnYWN0aW9ucycsXHJcbiAgICAgICAgICBoZWFkZXJOYW1lOiBUZXh0cy5BY3Rpb25zLFxyXG4gICAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGNlbGxEYXRhVHlwZTogZmFsc2UsXHJcbiAgICAgICAgICBwaW5uZWQ6IFwicmlnaHRcIixcclxuICAgICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczoge1xyXG4gICAgICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcclxuICAgICAgICAgICAgZm9ybUdyb3VwOiB0aGlzLmZvcm1Hcm91cFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNlbGxSZW5kZXJlcjogQWN0aW9uc0NlbGxSZW5kZXJlcixcclxuICAgICAgICAgIHN1cHByZXNzS2V5Ym9hcmRFdmVudDogR3JpZFV0aWxzLm5hdmlnYXRlSW5zaWRlQ2VsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY29sdW1ucztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEdyaWRQYWdpbmFibGUoY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodHlwZW9mIGNvbXBvbmVudC5yb3dDb3VudCA9PT0gJ251bWJlcicgJiYgY29tcG9uZW50LnJvd0NvdW50ID4gMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEdyaWRQYWdlU2l6ZShjb21wb25lbnQ6IGFueSkge1xyXG4gICAgaWYgKHR5cGVvZiBjb21wb25lbnQucm93Q291bnQgPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHJldHVybiBjb21wb25lbnQucm93Q291bnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEdyaWRUZXh0cygpIHtcclxuICAgIHJldHVybiB0aGlzLmdyaWRUZXh0cztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZFRoZW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JpZFRoZW1lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRHcmlkRm9ybWF0dGVyKGNvbHVtbjogYW55KTogKChwYXJhbTogVmFsdWVGb3JtYXR0ZXJQYXJhbXMpID0+IHN0cmluZykgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKGNvbHVtbi5mb3JtYXQpIHtcclxuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0KSB7XHJcbiAgICAgICAgY2FzZSAnaW50ZWdlcic6XHJcbiAgICAgICAgICByZXR1cm4gcGFyYW1zID0+IHRoaXMuZm9ybWF0dGVyLmZvcm1hdEludGVnZXIocGFyYW1zLnZhbHVlKTtcclxuICAgICAgICBjYXNlICdjdXJyZW5jeSc6XHJcbiAgICAgICAgICByZXR1cm4gcGFyYW1zID0+IHRoaXMuZm9ybWF0dGVyLmZvcm1hdEN1cnJlbmN5KHBhcmFtcy52YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgICByZXR1cm4gcGFyYW1zID0+IHRoaXMuZm9ybWF0dGVyLmZvcm1hdERhdGUocGFyYW1zLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZFJlbmRlcmVyKGNvbHVtbjogYW55KTogYW55IHtcclxuICAgIGlmIChjb2x1bW4uZm9ybWF0KSB7XHJcbiAgICAgIHN3aXRjaCAoY29sdW1uLmZvcm1hdCkge1xyXG4gICAgICAgIGNhc2UgJ29iamVjdFVSTCc6XHJcbiAgICAgICAgICByZXR1cm4gT2JqZWN0VVJMUmVuZGVyZXJDb21wb25lbnQ7XHJcbiAgICAgICAgY2FzZSBcImRlbGV0ZVJvd1wiOlxyXG4gICAgICAgICAgcmV0dXJuIERlbGV0ZVJvd0NlbGxSZW5kZXJlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QXNPYnNlcnZhYmxlKHZhbHVlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpXHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIHJldHVybiBvZih2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyZURhdGVwaWNrZXIoKSB7XHJcbiAgICAoRGF0ZXBpY2tlci5sb2NhbGVzIGFzIGFueSlbJ2l0J10gPSB7XHJcbiAgICAgIGRheXM6IFtcclxuICAgICAgICAnRG9tZW5pY2EnLFxyXG4gICAgICAgICdMdW5lZMOsJyxcclxuICAgICAgICAnTWFydGVkw6wnLFxyXG4gICAgICAgICdNZXJjb2xlZMOsJyxcclxuICAgICAgICAnR2lvdmVkw6wnLFxyXG4gICAgICAgICdWZW5lcmTDrCcsXHJcbiAgICAgICAgJ1NhYmF0bycsXHJcbiAgICAgIF0sXHJcbiAgICAgIGRheXNNaW46IFsnRG9tJywgJ0x1bicsICdNYXInLCAnTWVyJywgJ0dpbycsICdWZW4nLCAnU2FiJ10sXHJcbiAgICAgIG1vbnRoczogW1xyXG4gICAgICAgICdHZW5uYWlvJyxcclxuICAgICAgICAnRmViYnJhaW8nLFxyXG4gICAgICAgICdNYXJ6bycsXHJcbiAgICAgICAgJ0FwcmlsZScsXHJcbiAgICAgICAgJ01hZ2dpbycsXHJcbiAgICAgICAgJ0dpdWdubycsXHJcbiAgICAgICAgJ0x1Z2xpbycsXHJcbiAgICAgICAgJ0Fnb3N0bycsXHJcbiAgICAgICAgJ1NldHRlbWJyZScsXHJcbiAgICAgICAgJ090dG9icmUnLFxyXG4gICAgICAgICdOb3ZlbWJyZScsXHJcbiAgICAgICAgJ0RpY2VtYnJlJyxcclxuICAgICAgXSxcclxuICAgICAgbW9udGhzU2hvcnQ6IFtcclxuICAgICAgICAnR2VuJyxcclxuICAgICAgICAnRmViJyxcclxuICAgICAgICAnTWFyJyxcclxuICAgICAgICAnQXByJyxcclxuICAgICAgICAnTWFnJyxcclxuICAgICAgICAnR2l1JyxcclxuICAgICAgICAnTHVnJyxcclxuICAgICAgICAnQWdvJyxcclxuICAgICAgICAnU2V0JyxcclxuICAgICAgICAnT3R0JyxcclxuICAgICAgICAnTm92JyxcclxuICAgICAgICAnRGljJyxcclxuICAgICAgXSxcclxuICAgICAgdG9kYXk6ICdPZ2dpJyxcclxuICAgICAgY2xlYXI6ICdQdWxpc2NpJyxcclxuICAgICAgZm9ybWF0OiAnZGQvbW0veXl5eScsXHJcbiAgICAgIHdlZWtTdGFydDogMVxyXG4gICAgfTtcclxuICB9O1xyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dzXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93IGZpZWxkLXNldFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29tcG9uZW50IG9mIHJvdy5jb21wb25lbnRzXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbXBvbmVudC50eXBlXCI+XHJcbiAgICAgICAgPGRpdiBbY2xhc3NdPVwiZ2V0Q2xhc3MoY29tcG9uZW50KVwiPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIHRleHRmaWVsZCAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0ZmllbGQnXCI+XHJcbiAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbD1cImlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb21wb25lbnQucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlZml4QWRvcm5lcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuYXBwZWFyYW5jZT8ucHJlZml4QWRvcm5lcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdWZmaXhBZG9ybmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5hcHBlYXJhbmNlPy5zdWZmaXhBZG9ybmVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dGNhc2VdPVwiY29tcG9uZW50LnRleHRDYXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5tYXhMZW5ndGgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVCbHVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RleHRmaWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGV4dGZpZWxkXCI+XHJcbiAgICAgICAgICAgIDwvbmd4LXNpcmlvLWlucHV0PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gc2VsZWN0IC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIj5cclxuICAgICAgICAgICAgPG5neC1zaXJpby1zZWxlY3QgYXJpYUxhYmVsPVwic2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb21wb25lbnQucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwic2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1zZWxlY3QtcGFuZWwgYXJpYUxhYmVsPVwiaXRlbXNcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQgKm5nSWY9XCJjb21wb25lbnQuc2VhcmNoYWJsZVwiIGNsYXNzPVwic2VhcmNoYWJsZVwiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cIlRleHRzLlR5cGVUb1NlYXJjaFwiPjwvbmd4LXNpcmlvLWlucHV0PlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1zZWxlY3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgKGdldFZhbHVlcyhjb21wb25lbnQpIHwgYXN5bmMpIHx8IFtdXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPnt7IG9wdGlvbi5sYWJlbCB9fTwvbmd4LXNpcmlvLXNlbGVjdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tc2VsZWN0LXBhbmVsPlxyXG4gICAgICAgICAgICA8L25neC1zaXJpby1zZWxlY3Q+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0YWdsaXN0IC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhZ2xpc3QnXCI+XHJcbiAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2VsZWN0IGFyaWFMYWJlbD1cInNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29tcG9uZW50LnBsYWNlaG9sZGVyIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc011bHRpcGxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RhZ2xpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGFnbGlzdFwiPlxyXG4gICAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2VsZWN0LXBhbmVsIGFyaWFMYWJlbD1cIml0ZW1zXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiAoZ2V0VmFsdWVzKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+e3sgb3B0aW9uLmxhYmVsIH19PC9uZ3gtc2lyaW8tc2VsZWN0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L25neC1zaXJpby1zZWxlY3QtcGFuZWw+XHJcbiAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNlbGVjdD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIG51bWJlciAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XHJcbiAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbXBvbmVudC5wbGFjZWhvbGRlciB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXhBZG9ybmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5hcHBlYXJhbmNlPy5wcmVmaXhBZG9ybmVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N1ZmZpeEFkb3JuZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmFwcGVhcmFuY2U/LnN1ZmZpeEFkb3JuZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0VmFsdWVdPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50LmRlZmF1bHRWYWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5pbXVtXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5taW5pbXVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heGltdW1dPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50Lm1heGltdW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVjaW1hbERpZ2l0c109XCJldmFsdWF0ZU51bWJlcihjb21wb25lbnQuZGVjaW1hbERpZ2l0cylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJsdXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJudW1iZXJcIj5cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8taW5wdXQ+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkYXRldGltZSAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29tcG9uZW50LnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gZGF0ZSAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tZGF0ZXBpY2tlciBhcmlhTGFiZWw9XCJkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRhdGVMYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29tcG9uZW50LnBsYWNlaG9sZGVyIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc29EYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2RhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImRhdGVcIj5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0aW1lIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby10aW1lcGlja2VyIGFyaWFMYWJlbD1cInRpbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudGltZUxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb21wb25lbnQucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0aW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0aW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby10aW1lcGlja2VyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBjaGVja2JveCAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29tcG9uZW50LnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdG9nZ2xlIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0b2dnbGUnXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXRvZ2dsZSBhcmlhTGFiZWw9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RvZ2dsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRvZ2dsZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpIH19XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby10b2dnbGU+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkZWZhdWx0IC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tY2hlY2tib3ggYXJpYUxhYmVsPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpIH19XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby1jaGVja2JveD5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gcmFkaW8gLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbXBvbmVudC5zdWJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGNoaXAgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoaXAnXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWNoaXAtcmFkaW8tZ3JvdXAgYXJpYUxhYmVsPVwicmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NoaXByYWRpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiY2hpcHJhZGlvXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQtY2hpcCAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1pbnB1dC1jaGlwPlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hpcC1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRlZmF1bHQgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1yYWRpby1ncm91cCBhcmlhTGFiZWw9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNyYWRpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJyYWRpb1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXJhZGlvLWJ1dHRvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIGNoZWNrbGlzdCAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2xpc3QnXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbXBvbmVudC5zdWJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGNoaXAgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoaXAnXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWNoaXAtY2hlY2tib3gtZ3JvdXAgYXJpYUxhYmVsPVwiY2hlY2tsaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjaGlwY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImNoaXBjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWlucHV0LWNoaXAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiAoZ2V0VmFsdWVzKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8taW5wdXQtY2hpcD5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWNoaXAtY2hlY2tib3gtZ3JvdXA+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkZWZhdWx0IC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tY2hlY2tib3gtZ3JvdXAgYXJpYUxhYmVsPVwiY2hlY2tsaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tY2hlY2tib3ggKm5nRm9yPVwibGV0IG9wdGlvbiBvZiAoZ2V0VmFsdWVzKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hlY2tib3gtZ3JvdXA+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIHRleHRhcmVhIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRhcmVhJ1wiPlxyXG4gICAgICAgICAgICA8bmd4LXNpcmlvLWlucHV0IHR5cGU9XCJ0ZXh0YXJlYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwidGV4dGFyZWFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbXBvbmVudC5wbGFjZWhvbGRlciB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRjYXNlXT1cImNvbXBvbmVudC50ZXh0Q2FzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heGxlbmd0aF09XCJldmFsdWF0ZU51bWJlcihjb21wb25lbnQubWF4TGVuZ3RoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQmx1clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0YXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGV4dGFyZWFcIj5cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8taW5wdXQ+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBmaWxlcGlja2VyIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGVwaWNrZXInXCI+XHJcbiAgICAgICAgICAgIDxuZ3gtc2lyaW8tZmlsZS11cGxvYWQgYXJpYUxhYmVsPVwiZmlsZXBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXB0XT1cImdldE1pbWVUeXBlcyhjb21wb25lbnQuYWNjZXB0KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQubXVsdGlwbGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZVVwbG9hZGVkRXZlbnQpPVwiZmlsZVVwbG9hZGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93RmlsZWxpc3RdPVwiIWNvbXBvbmVudC5zaG93RGV0YWlsc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2ZpbGVwaWNrZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImZpbGVwaWNrZXJcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhcyBmYS1hcnJvdy11cFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICB7eyBUZXh0cy5VcGxvYWQgfX1cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8tZmlsZS11cGxvYWQ+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuc2hvd0RldGFpbHNcIj5cclxuICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgW3Jvd3NdPVwiY3JlYXRlVXBsb2FkVGFibGVzKGNvbXBvbmVudClcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0ZXh0IC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICBbY29sbGFwc2VdPVwiY29tcG9uZW50LmNvbGxhcHNlVG9cIlxyXG4gICAgICAgICAgICAgICAgICN0ZXh0XHJcbiAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPCEtLVJlc2V0IFZpZXcgQ29udGV4dC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgdGFiaW5kZXg9XCIwXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcGFyYWdyYXBoXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJ0b0hUTUwoZXZhbHVhdGVUZW1wbGF0ZShjb21wb25lbnQudGV4dCkpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQudG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YXBwLXRlbXBsYXRlLXdyYXBwZXIgI3Rvb2x0aXBXcmFwcGVyIFt0ZW1wbGF0ZV09XCJ0b29sdGlwVGVtcGxhdGVcIiBbY29udGV4dF09XCJ7IGNvbXBvbmVudDogY29tcG9uZW50IH1cIj48L2FwcC10ZW1wbGF0ZS13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2lyaW8tbGFiZWwtcG9wb3ZlciBmYXMgZmEtaW5mby1jaXJjbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmlvVG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtoYXNQb3BvdmVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21UZW1wbGF0ZV09XCJ0b29sdGlwV3JhcHBlci5nZXRUZW1wbGF0ZVJlZigpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG9vbHRpcFRlbXBsYXRlIGxldC1jb21wb25lbnQ9XCJjb21wb25lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lyaW8tdG9vbHRpcC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wYXJhZ3JhcGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGNvbXBvbmVudC50b29sdGlwKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gaHRtbCAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidodG1sJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaHRtbC1wYXJhZ3JhcGhcIlxyXG4gICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJzYW5pdGl6ZShldmFsdWF0ZVRlbXBsYXRlKGNvbXBvbmVudC5jb250ZW50KSlcIlxyXG4gICAgICAgICAgICAgICAgICNodG1sXHJcbiAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJodG1sXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gaW1hZ2UgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCI+XHJcbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuc291cmNlKVwiXHJcbiAgICAgICAgICAgICAgICAgW2FsdF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuYWx0KVwiXHJcbiAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlO2hlaWdodDogMTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgICNpbWFnZVxyXG4gICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiaW1hZ2VcIj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIGR5bmFtaWNsaXN0IC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2R5bmFtaWNsaXN0J1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtQXJyYXlOYW1lXT1cImNvbXBvbmVudC5wYXRoXCIgW3JlcGVhdF09XCJldmFsdWF0ZU51bWJlcihjb21wb25lbnQucmVwZXRpdGlvbnMpXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29tcG9uZW50LnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRGb3JtQXJyYXkoZm9ybUdyb3VwLmdldChjb21wb25lbnQucGF0aCkpLmNvbnRyb2xzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIHRhYiAtLT5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhYidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJkeW5hbWljbGlzdHRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby10YWIgW2xlZnRBcnJvd0xhYmVsXT1cIlRleHRzLlNjcm9sbExlZnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JpZ2h0QXJyb3dMYWJlbF09XCJUZXh0cy5TY3JvbGxSaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFiQ291bnRdPVwiZ2V0Rm9ybUFycmF5KGZvcm1Hcm91cC5nZXQoY29tcG9uZW50LnBhdGgpKS5jb250cm9scy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2R5bmFtaWNsaXN0dGFiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEZvcm1BcnJheShmb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5wYXRoKSkuY29udHJvbHM7IGxldCBpID0gaW5kZXg7XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tdGFiLWl0ZW0gW2xhYmVsXT1cImNvbXBvbmVudC5sYWJlbCArICcgJyArIChpICsgMSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpID09PSBkeW5hbWljbGlzdHRhYi5hY3RpdmVJbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIntcclxuJ2dyb3VwLXRvcCc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ3N0YXJ0JyxcclxuJ2dyb3VwLWNlbnRlcic6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2NlbnRlcicsXHJcbidncm91cC1ib3R0b20nOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdlbmQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKGl0ZW0pXCIgW3Jvd3NdPVwiY29tcG9uZW50LnJvd3NcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50LmFsbG93QWRkUmVtb3ZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpyaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlSXRlbShjb21wb25lbnQsIGkpXCIgY2xhc3M9XCJyZW1vdmUtaXRlbVwiIFtjb2xvcl09XCJudWxsXCIgaWNvbj1cImZhcyBmYS10cmFzaFwiPnt7IFRleHRzLlJlbW92ZUl0ZW0gfX08L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tdGFiLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gYWNjb3JkaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYWNjb3JkaW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImR5bmFtaWNsaXN0YWNjb3JkaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvbiBbYWNjb3JkaW9uQ291bnRdPVwiZ2V0Rm9ybUFycmF5KGZvcm1Hcm91cC5nZXQoY29tcG9uZW50LnBhdGgpKS5jb250cm9scy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2R5bmFtaWNsaXN0YWNjb3JkaW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEZvcm1BcnJheShmb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5wYXRoKSkuY29udHJvbHM7IGxldCBpID0gaW5kZXg7XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uLXBhbmVsICNwYW5lbCBhY2NvcmRpb25QYW5lbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVyVGV4dF09XCJjb21wb25lbnQubGFiZWwgKyAnICcgKyAoaSArIDEpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uLWJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYW5lbC5wYW5lbElzT3BlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwie1xyXG4nZ3JvdXAtdG9wJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnc3RhcnQnLFxyXG4nZ3JvdXAtY2VudGVyJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnY2VudGVyJyxcclxuJ2dyb3VwLWJvdHRvbSc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2VuZCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKGl0ZW0pXCIgW3Jvd3NdPVwiY29tcG9uZW50LnJvd3NcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBvbmVudC5hbGxvd0FkZFJlbW92ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpyaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYnV0dG9uIChjbGljayk9XCJyZW1vdmVJdGVtKGNvbXBvbmVudCwgaSlcIiBjbGFzcz1cInJlbW92ZS1pdGVtXCIgW2NvbG9yXT1cIm51bGxcIiBpY29uPVwiZmFzIGZhLXRyYXNoXCI+e3sgVGV4dHMuUmVtb3ZlSXRlbSB9fTwvbmd4LXNpcmlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24tYm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24tcGFuZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gZGVmYXVsdCAtLT5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydncm91cC1vdXRsaW5lJzogY29tcG9uZW50LnNob3dPdXRsaW5lID09PSB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAjZHluYW1pY2xpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJkeW5hbWljbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7IGV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbCkgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRGb3JtQXJyYXkoZm9ybUdyb3VwLmdldChjb21wb25lbnQucGF0aCkpLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4O1wiIFtmb3JtR3JvdXBOYW1lXT1cImlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgJ2dyb3VwLXRvcCc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ3N0YXJ0JyxcclxuICAgICAgICAnZ3JvdXAtY2VudGVyJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnY2VudGVyJyxcclxuICAgICAgICAnZ3JvdXAtYm90dG9tJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnZW5kJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cChpdGVtKVwiIFtyb3dzXT1cImNvbXBvbmVudC5yb3dzXCI+PC9hcHAtZHluYW1pYy1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBvbmVudC5hbGxvd0FkZFJlbW92ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246cmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1idXR0b24gKGNsaWNrKT1cInJlbW92ZUl0ZW0oY29tcG9uZW50LCBpKVwiIGNsYXNzPVwicmVtb3ZlLWl0ZW1cIiBbY29sb3JdPVwibnVsbFwiIGljb249XCJmYXMgZmEtdHJhc2hcIj57eyBUZXh0cy5SZW1vdmVJdGVtIH19PC9uZ3gtc2lyaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuYWxsb3dBZGRSZW1vdmVcIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1idXR0b24gKGNsaWNrKT1cImFkZE5ld0l0ZW0oY29tcG9uZW50KVwiIGNsYXNzPVwiYWRkLWl0ZW1cIiBbY29sb3JdPVwibnVsbFwiIGljb249XCJmYXMgZmEtcGx1c1wiPnt7IFRleHRzLkFkZEl0ZW0gfX08L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBncm91cCAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidncm91cCdcIj5cclxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgJ2dyb3VwLW91dGxpbmUnOiBjb21wb25lbnQuc2hvd091dGxpbmUgPT09IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgJ2dyb3VwLXRvcCc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAnZ3JvdXAtY2VudGVyJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnY2VudGVyJyxcclxuICAgICAgICAgICAgICAgICAnZ3JvdXAtYm90dG9tJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnZW5kJ31cIlxyXG4gICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbD57eyBldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZGl2ICNncm91cFxyXG4gICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKGdldENvbnRyb2xGcm9tUGF0aChjb21wb25lbnQucGF0aCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiY29tcG9uZW50LnJvd3NcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0YWJsZSAtLT5cclxuICAgICAgICAgIDxkaXYgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGFibGUnXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsPnt7IGV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbCkgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgW21vZHVsZXNdPVwiZ2V0R3JpZE1vZHVsZXMoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwiZ2V0R3JpZE9wdGlvbnMoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93U291cmNlXT1cIihnZXRHcmlkRGF0YShjb21wb25lbnQpIHwgYXN5bmMpIHx8IFtdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY29tcG9uZW50LmhlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGFibGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0YWJsZVwiIC8+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gYnV0dG9uIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2J1dHRvbidcIj5cclxuICAgICAgICAgICAgPG5neC1zaXJpby1idXR0b24gKGNsaWNrRXZlbnQpPVwiY2xpY2tCdXR0b24oY29tcG9uZW50LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImV2YWx1YXRlQ29sb3IoY29tcG9uZW50LmNvbG9yKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5pY29uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIHt7IGV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbCkgfX1cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gc2VwYXJhdG9yIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NlcGFyYXRvcidcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvclwiXHJcbiAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAjc2VwYXJhdG9yXHJcbiAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJzZXBhcmF0b3JcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBzcGFjZXIgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3BhY2VyJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDEwMCVcIlxyXG4gICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjb21wb25lbnQuaGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAjc3BhY2VyXHJcbiAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJzcGFjZXJcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBpZnJhbWUgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaWZyYW1lJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cImNvbXBvbmVudC5pZFwiPnt7IGV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbCkgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxpZnJhbWUgW3NyY109XCJldmFsdWF0ZVVybChjb21wb25lbnQudXJsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiJzEwMCUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY29tcG9uZW50LmhlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZnJhbWVTZWN1cml0eV09XCJjb21wb25lbnQuc2VjdXJpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgI2lmcmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImlmcmFtZVwiPlxyXG4gICAgICAgICAgICAgIDwvaWZyYW1lPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIGFsZXJ0IC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FsZXJ0J1wiPlxyXG4gICAgICAgICAgICA8bmd4LXNpcmlvLWFsZXJ0IFt0eXBlXT1cImNvbXBvbmVudC5yb2xlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxDbG9zZV09XCJUZXh0cy5DbG9zZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYWxlcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImFsZXJ0XCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1hbGVydC1tZXNzYWdlPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcGFyYWdyYXBoXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJ0b0hUTUwoZXZhbHVhdGVUZW1wbGF0ZShjb21wb25lbnQudGV4dCkpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25neC1zaXJpby1hbGVydC1tZXNzYWdlPlxyXG4gICAgICAgICAgICA8L25neC1zaXJpby1hbGVydD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIG5vdGljZSAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidub3RpY2UnXCI+XHJcbiAgICAgICAgICAgIDxuZ3gtc2lyaW8tbm90aWZ5IFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbm90aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cIm5vdGljZVwiPlxyXG4gICAgICAgICAgICAgIDxuZ3gtc2lyaW8tbm90aWZ5LWJvZHkgW3RpdGxlXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50aXRsZSlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXBhcmFncmFwaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidG9IVE1MKGV2YWx1YXRlVGVtcGxhdGUoY29tcG9uZW50LnRleHQpKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tbm90aWZ5LWJvZHk+XHJcbiAgICAgICAgICAgIDwvbmd4LXNpcmlvLW5vdGlmeT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIHJhbmdlIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JhbmdlJ1wiPlxyXG4gICAgICAgICAgICA8bmd4LXNpcmlvLXNsaWRlciBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5yYW5nZT8ubWluKSA/PyAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heF09XCJldmFsdWF0ZU51bWJlcihjb21wb25lbnQucmFuZ2U/Lm1heCkgPz8gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNyYW5nZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJyYW5nZVwiPlxyXG4gICAgICAgICAgICA8L25neC1zaXJpby1zbGlkZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0b29sdGlwIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3Rvb2x0aXAnXCI+XHJcbiAgICAgICAgICAgIDxhcHAtdGVtcGxhdGUtd3JhcHBlciAjdG9vbHRpcFdyYXBwZXIgW3RlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZVwiIFtjb250ZXh0XT1cInsgY29tcG9uZW50OiBjb21wb25lbnQgfVwiPjwvYXBwLXRlbXBsYXRlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzaXJpby1sYWJlbC1wb3BvdmVyIGZhcyBmYS1pbmZvLWNpcmNsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICBzaXJpb1Rvb2x0aXBcclxuICAgICAgICAgICAgICAgICAgICBbaGFzUG9wb3Zlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tVGVtcGxhdGVdPVwidG9vbHRpcFdyYXBwZXIuZ2V0VGVtcGxhdGVSZWYoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgI3Rvb2x0aXBcclxuICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRvb2x0aXBcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0b29sdGlwVGVtcGxhdGUgbGV0LWNvbXBvbmVudD1cImNvbXBvbmVudFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaXJpby10b29sdGlwLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiY29tcG9uZW50LnRpdGxlXCIgY2xhc3M9XCJzaXJpby10b29sdGlwLWhlYWRpbmcgc2lyaW8tc3BhY2UtZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudGl0bGUpIH19XHJcbiAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wYXJhZ3JhcGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGNvbXBvbmVudC50ZXh0KSlcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gdGFiIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhYidcIj5cclxuICAgICAgICAgICAgPG5neC1zaXJpby10YWIgI3RhYlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGFiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbGVmdEFycm93TGFiZWxdPVwiVGV4dHMuU2Nyb2xsTGVmdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JpZ2h0QXJyb3dMYWJlbF09XCJUZXh0cy5TY3JvbGxSaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiQ29udHJvbD5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYW5lbCBvZiBjb21wb25lbnQucGFuZWxzXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkaXNhYmxlRm9ybT1cIntcclxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGV2YWx1YXRlQm9vbGVhbihwYW5lbC5kaXNhYmxlZCksXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cDogZm9ybUdyb3VwLFxyXG4gICAgICAgICAgICAgICAgICBwYXRoOiBwYW5lbC5wYXRoXHJcbiAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tdGFiLWl0ZW0gW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKHBhbmVsLmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJldmFsdWF0ZUJvb2xlYW4ocGFuZWwuZGlzYWJsZWQpID8/IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJldmFsdWF0ZUNvbmRpdGlvbmFsKHBhbmVsLmNvbmRpdGlvbmFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICdncm91cC10b3AnOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXAtY2VudGVyJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnY2VudGVyJyxcclxuICAgICAgICAgICAgICAgICAgICAgICdncm91cC1ib3R0b20nOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdlbmQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKGdldENvbnRyb2xGcm9tUGF0aChwYW5lbC5wYXRoKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93c109XCJnZXRUZW1wbGF0ZShwYW5lbC50ZW1wbGF0ZSk/LnJvd3NcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby10YWItaXRlbT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8tdGFiPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gYWNjb3JkaW9uIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FjY29yZGlvbidcIj5cclxuICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb25cclxuICAgICAgICAgICAgICAgICNhY2NvcmRpb25cclxuICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJhY2NvcmRpb25cIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYW5lbCBvZiBjb21wb25lbnQucGFuZWxzXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkaXNhYmxlRm9ybT1cIntcclxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBldmFsdWF0ZUJvb2xlYW4ocGFuZWwuZGlzYWJsZWQpLFxyXG4gICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwOiBmb3JtR3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgICBwYXRoOiBwYW5lbC5wYXRoXHJcbiAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvbi1wYW5lbCAqbmdJZj1cImV2YWx1YXRlQ29uZGl0aW9uYWwocGFuZWwuY29uZGl0aW9uYWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJldmFsdWF0ZUJvb2xlYW4ocGFuZWwuZGlzYWJsZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJUZXh0XT1cImV2YWx1YXRlU3RyaW5nKHBhbmVsLmxhYmVsKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24tYm9keT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICdncm91cC10b3AnOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXAtY2VudGVyJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnY2VudGVyJyxcclxuICAgICAgICAgICAgICAgICAgICAgICdncm91cC1ib3R0b20nOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdlbmQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cChnZXRDb250cm9sRnJvbVBhdGgocGFuZWwucGF0aCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93c109XCJnZXRUZW1wbGF0ZShwYW5lbC50ZW1wbGF0ZSk/LnJvd3NcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24tYm9keT5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uPiAgICAgICAgICAgIFxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
|
|
551
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1maWVsZHMvZHluYW1pYy1maWVsZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1maWVsZHMvZHluYW1pYy1maWVsZHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsaUJBQWlCLEVBQTZCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsU0FBUyxFQUFlLFNBQVMsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJbEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFJN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFB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QUNFLG9CQUFvQixjQUlsQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CO3dCQUN2QyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0I7d0JBQzVFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsYUFBYTt3QkFDcEYsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxhQUFhO3dCQUNwRixvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUI7d0JBQ3JGLG1CQUFtQixFQUFFLHdCQUF3Qjt3QkFDN0Msb0JBQW9CLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCO3dCQUMzRSwyQkFBMkIsRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsRUFBRSx3QkFBd0I7d0JBQ3ZHLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGlCQUFpQixFQUFFLHFCQUFxQjt3QkFDN0YsdUJBQXVCLEVBQUUsNEJBQTRCLEVBQUUsNkJBQTZCLEVBQUUsMkJBQTJCO3dCQUNqSCxvQkFBb0IsRUFBRSx3QkFBd0I7d0JBQzlDLG9CQUFvQixFQUFFLCtCQUErQixFQUFFLDRCQUE0QixFQUFFLHVCQUF1Qjt3QkFDNUcsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CO3dCQUNyRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSwwQkFBMEIsRUFBRSx3QkFBd0I7d0JBQ3BHLHFCQUFxQjt3QkFDckIsd0JBQXdCO3dCQUN4QixhQUFhLENBQUMsYUFDUDt3QkFDVCxlQUFlO3dCQUNmLHNCQUFzQjtxQkFDdkIsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTswVkFHNUIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBFbGVtZW50UmVmLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IElEeW5hbWljRmllbGRzQ29tcG9uZW50IH0gZnJvbSAnLi9keW5hbWljLWZpZWxkcy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBGb3JtQXJyYXksIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU2FmZUh0bWwsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBEYXRlcGlja2VyIH0gZnJvbSAndmFuaWxsYWpzLWRhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBTYW5pdGl6ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zYW5pdGl6ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFya2Rvd25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWFya2Rvd24uc2VydmljZSc7XHJcbmltcG9ydCB7IE1pbWVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWltZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlLCBDb21tYW5kRXZlbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybWF0dGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zvcm1hdHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2Vha1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy93ZWFrLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZWdpc3RlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZWdpc3Rlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWV0YWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEJ1dHRvbkNvbG9ycyB9IGZyb20gJ25neC1zaXJpby1saWInO1xyXG5pbXBvcnQgeyBBZG9ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9hZG9ybmVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IERpc2FibGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Rpc2FibGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRGlzcGxheURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGlzcGxheS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBSZXBlYXREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3JlcGVhdC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGcmFtZVNlY3VyaXR5RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9mcmFtZXNlY3VyaXR5LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IERyb3Bkb3duRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kcm9wZG93bi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUYWJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RhYi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBBY2NvcmRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2FjY29yZGlvbi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBHcmlkRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9ncmlkLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlZ2lzdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9yZWdpc3Rlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBVcGRhdGVCbHVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy91cGRhdGVibHVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IERhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2RhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgTnVtYmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9udW1iZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVGV4dERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGV4dC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBEaXNhYmxlRm9ybURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGlzYWJsZWZvcm0uZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVGFiQ29udHJvbERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGFiY29udHJvbC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb2xsYXBzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvY29sbGFwc2UuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQWNjb3JkaW9uUGFuZWxEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2FjY29yZGlvbnBhbmVsLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlV3JhcHBlckNvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZC90ZW1wbGF0ZS13cmFwcGVyL3RlbXBsYXRlLXdyYXBwZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgT2JqZWN0VVJMUmVuZGVyZXJDb21wb25lbnQsIERlbGV0ZVJvd0NlbGxSZW5kZXJlciwgQWN0aW9uc0NlbGxSZW5kZXJlciB9IGZyb20gJy4uL3V0aWxzL2dyaWRDZWxscyc7XHJcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgU2lyaW9JbnB1dENvbXBvbmVudCwgU2lyaW9WYWxpZGF0aW9uRGlyZWN0aXZlXHJcbiAgLCBTaXJpb1NlbGVjdENvbXBvbmVudCwgU2lyaW9TZWxlY3RPcHRpb25Db21wb25lbnQsIFNpcmlvU2VsZWN0UGFuZWxDb21wb25lbnRcclxuICAsIFNpcmlvQ2hlY2tib3hHcm91cENvbXBvbmVudCwgU2lyaW9DaGVja2JveENvbXBvbmVudCwgU2lyaW9EYXRlcGlja2VyQ29tcG9uZW50LCBTaXJpb1RpbWVwaWNrZXJDb21wb25lbnRcclxuICAsIFNpcmlvUmFkaW9Hcm91cENvbXBvbmVudCwgU2lyaW9SYWRpb0J1dHRvbkNvbXBvbmVudCwgU2lyaW9UYWJDb21wb25lbnQsIFNpcmlvVGFiSXRlbUNvbXBvbmVudFxyXG4gICwgU2lyaW9BY2NvcmRpb25Db21wb25lbnQsIFNpcmlvQWNjb3JkaW9uUGFuZWxDb21wb25lbnQsIFNpcmlvQWNjb3JkaW9uSGVhZGVyQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvbkJvZHlDb21wb25lbnRcclxuICAsIFNpcmlvQnV0dG9uQ29tcG9uZW50LCBTaXJpb0ZpbGVVcGxvYWRDb21wb25lbnRcclxuICAsIFNpcmlvVG9nZ2xlQ29tcG9uZW50LCBTaXJpb0NoaXBDaGVja2JveEdyb3VwQ29tcG9uZW50LCBTaXJpb0NoaXBSYWRpb0dyb3VwQ29tcG9uZW50LCBTaXJpb0lucHV0Q2hpcENvbXBvbmVudFxyXG4gICwgU2lyaW9BbGVydENvbXBvbmVudCwgU2lyaW9BbGVydE1lc3NhZ2VDb21wb25lbnQsIFNpcmlvU2xpZGVyQ29tcG9uZW50XHJcbiAgLCBTaXJpb05vdGlmeUNvbXBvbmVudCwgU2lyaW9Ob3RpZnlCb2R5Q29tcG9uZW50LCBTaXJpb05vdGlmeUFjdGlvbkNvbXBvbmVudCwgU2lyaW9Ob3RpZnlMaW5rQ29tcG9uZW50XHJcbiAgLCBTaXJpb1Rvb2x0aXBEaXJlY3RpdmVcclxuICAsIE5neFNpcmlvRXZlbnRcclxufSBmcm9tICduZ3gtc2lyaW8tbGliJztcclxuXHJcbmltcG9ydCB7IEFnR3JpZEFuZ3VsYXIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xyXG5pbXBvcnQge1xyXG4gIE1vZHVsZSwgUGFnaW5hdGlvbk1vZHVsZSwgQ2xpZW50U2lkZVJvd01vZGVsTW9kdWxlLCBJbmZpbml0ZVJvd01vZGVsTW9kdWxlXHJcbiAgLCBMb2NhbGVNb2R1bGUsIENlbGxTdHlsZU1vZHVsZSwgVmFsaWRhdGlvbk1vZHVsZVxyXG4gICwgVGV4dEZpbHRlck1vZHVsZSwgTnVtYmVyRmlsdGVyTW9kdWxlLCBEYXRlRmlsdGVyTW9kdWxlXHJcbiAgLCBDb2xEZWYsIHRoZW1lUXVhcnR6LCBpY29uU2V0QWxwaW5lLCBHcmlkT3B0aW9ucywgVmFsdWVGb3JtYXR0ZXJQYXJhbXNcclxuICAsIENsaWVudFNpZGVSb3dNb2RlbEFwaU1vZHVsZVxyXG4gICwgR3JpZFJlYWR5RXZlbnQsIENvbHVtbkF1dG9TaXplTW9kdWxlLCBDb2x1bW5BcGlNb2R1bGVcclxufSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcbmltcG9ydCB7IEFHX0dSSURfTE9DQUxFX0lUIH0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2xvY2FsZSc7XHJcblxyXG5pbXBvcnQgeyBHcmlkVXRpbHMgfSBmcm9tICcuLi91dGlscy9ncmlkVXRpbHMnO1xyXG5cclxuaW1wb3J0IHsgVGV4dHMgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxlLWl0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWR5bmFtaWMtZmllbGRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1maWVsZHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vZHluYW1pYy1maWVsZHMuY29tcG9uZW50LmNzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZVxyXG4gICAgLCBBZG9ybmVyRGlyZWN0aXZlLCBEaXNhYmxlRGlyZWN0aXZlLCBEaXNwbGF5RGlyZWN0aXZlLCBGcmFtZVNlY3VyaXR5RGlyZWN0aXZlXHJcbiAgICAsIERyb3Bkb3duRGlyZWN0aXZlLCBVcGRhdGVCbHVyRGlyZWN0aXZlLCBSZXBlYXREaXJlY3RpdmUsIFRhYkRpcmVjdGl2ZSwgR3JpZERpcmVjdGl2ZVxyXG4gICAgLCBSZWdpc3RlckRpcmVjdGl2ZSwgQWNjb3JkaW9uRGlyZWN0aXZlLCBEYXRlRGlyZWN0aXZlLCBOdW1iZXJEaXJlY3RpdmUsIFRleHREaXJlY3RpdmVcclxuICAgICwgRGlzYWJsZUZvcm1EaXJlY3RpdmUsIFRhYkNvbnRyb2xEaXJlY3RpdmUsIENvbGxhcHNlRGlyZWN0aXZlLCBBY2NvcmRpb25QYW5lbERpcmVjdGl2ZVxyXG4gICAgLCBTaXJpb0lucHV0Q29tcG9uZW50LCBTaXJpb1ZhbGlkYXRpb25EaXJlY3RpdmVcclxuICAgICwgU2lyaW9TZWxlY3RDb21wb25lbnQsIFNpcmlvU2VsZWN0T3B0aW9uQ29tcG9uZW50LCBTaXJpb1NlbGVjdFBhbmVsQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvQ2hlY2tib3hHcm91cENvbXBvbmVudCwgU2lyaW9DaGVja2JveENvbXBvbmVudCwgU2lyaW9EYXRlcGlja2VyQ29tcG9uZW50LCBTaXJpb1RpbWVwaWNrZXJDb21wb25lbnRcclxuICAgICwgU2lyaW9SYWRpb0dyb3VwQ29tcG9uZW50LCBTaXJpb1JhZGlvQnV0dG9uQ29tcG9uZW50LCBTaXJpb1RhYkNvbXBvbmVudCwgU2lyaW9UYWJJdGVtQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvQWNjb3JkaW9uQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvblBhbmVsQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvbkhlYWRlckNvbXBvbmVudCwgU2lyaW9BY2NvcmRpb25Cb2R5Q29tcG9uZW50XHJcbiAgICAsIFNpcmlvQnV0dG9uQ29tcG9uZW50LCBTaXJpb0ZpbGVVcGxvYWRDb21wb25lbnRcclxuICAgICwgU2lyaW9Ub2dnbGVDb21wb25lbnQsIFNpcmlvQ2hpcENoZWNrYm94R3JvdXBDb21wb25lbnQsIFNpcmlvQ2hpcFJhZGlvR3JvdXBDb21wb25lbnQsIFNpcmlvSW5wdXRDaGlwQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvQWxlcnRDb21wb25lbnQsIFNpcmlvQWxlcnRNZXNzYWdlQ29tcG9uZW50LCBTaXJpb1NsaWRlckNvbXBvbmVudFxyXG4gICAgLCBTaXJpb05vdGlmeUNvbXBvbmVudCwgU2lyaW9Ob3RpZnlCb2R5Q29tcG9uZW50LCBTaXJpb05vdGlmeUFjdGlvbkNvbXBvbmVudCwgU2lyaW9Ob3RpZnlMaW5rQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvVG9vbHRpcERpcmVjdGl2ZVxyXG4gICAgLCBUZW1wbGF0ZVdyYXBwZXJDb21wb25lbnRcclxuICAgICwgQWdHcmlkQW5ndWxhcl0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBSZWdpc3RlclNlcnZpY2UsXHJcbiAgICBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljRmllbGRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBJRHluYW1pY0ZpZWxkc0NvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgcm93czogQXJyYXk8YW55PiB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBmb3JtR3JvdXAhOiBGb3JtR3JvdXA7XHJcblxyXG4gIFRleHRzID0gVGV4dHM7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBTYW5pdGl6ZVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBtYXJrZG93bjogTWFya2Rvd25TZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgbWltZTogTWltZVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBwcm9ncmFtbWFiaWxpdHk6IFByb2dyYW1tYWJpbGl0eVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBldmVudHM6IEV2ZW50U2VydmljZVxyXG4gICAgLCBwcml2YXRlIGZvcm1hdHRlcjogRm9ybWF0dGVyU2VydmljZVxyXG4gICAgLCBwcml2YXRlIHdlYWs6IFdlYWtTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgcmVnaXN0ZXI6IFJlZ2lzdGVyU2VydmljZVxyXG4gICAgLCBwcml2YXRlIG1ldGFkYXRhOiBNZXRhZGF0YVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBlbDogRWxlbWVudFJlZlxyXG4gIClcclxuICB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlndXJlRGF0ZXBpY2tlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZm9jdXNGaXJzdCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRSZWdpc3RlcigpOiBSZWdpc3RlclNlcnZpY2Uge1xyXG4gICAgcmV0dXJuIHRoaXMucmVnaXN0ZXI7XHJcbiAgfVxyXG5cclxuICBnZXRDbGFzcyhjb21wb25lbnQ6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb2xIb3N0ID0gXCJjb2wtaG9zdCBcIjtcclxuICAgIGlmIChjb21wb25lbnQubGF5b3V0Py5jb2x1bW5zKSB7XHJcbiAgICAgIHJldHVybiBjb2xIb3N0ICsgXCJjb2wtbWQtXCIgKyBjb21wb25lbnQubGF5b3V0Py5jb2x1bW5zO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBjb2xIb3N0ICsgXCJjb2xcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRleHRGZWVkYmFjayhjb21wb25lbnQ6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5rZXkpIGFzIEZvcm1Db250cm9sO1xyXG4gICAgcmV0dXJuICFjb250cm9sIHx8IGNvbnRyb2wudmFsaWQgfHwgIWNvbnRyb2wuZXJyb3JzXHJcbiAgICAgID8gJydcclxuICAgICAgOiBjb250cm9sLmVycm9yc1snbWVzc2FnZSddO1xyXG4gIH1cclxuXHJcbiAgaXNXYXJuaW5nKGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5rZXkpIGFzIEZvcm1Db250cm9sO1xyXG4gICAgcmV0dXJuIChjb250cm9sICYmIGNvbnRyb2wuZXJyb3JzICYmIGNvbnRyb2wuZXJyb3JzWyd3YXJuaW5nJ10pIHx8IGZhbHNlXHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZVN0cmluZyh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVTdHJpbmcodGhpcy5mb3JtR3JvdXAsIHZhbHVlKTsgICAgXHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZUJvb2xlYW4odmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlQm9vbGVhbih0aGlzLmZvcm1Hcm91cCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVOdW1iZXIodmFsdWU6IG51bWJlciB8IHN0cmluZyB8IG51bGwpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZU51bWJlcih0aGlzLmZvcm1Hcm91cCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVVcmwodmFsdWU6IHN0cmluZyB8IG51bGwpOiBTYWZlUmVzb3VyY2VVcmwge1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVTdHJpbmcodGhpcy5mb3JtR3JvdXAsIHZhbHVlKTtcclxuICAgIGNvbnN0IHdhdGNoS2V5ID0gYDpzYWZlVXJsKCR7dXJsfSlgO1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKHRoaXMuZm9ybUdyb3VwLCB3YXRjaEtleSwgKCkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuc2FuaXRpemVTYWZlVXJsKHVybCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlVGVtcGxhdGUodmFsdWU6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlVGVtcGxhdGUodGhpcy5mb3JtR3JvdXAsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlKHRleHQ6IHN0cmluZyB8IG51bGwsIGNhY2hlYWJsZTogYm9vbGVhbiA9IHRydWUpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKHRoaXMuZm9ybUdyb3VwLCB0ZXh0LCB7IGNhY2hlYWJsZTogY2FjaGVhYmxlIH0pO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVDb2xvcih2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IEJ1dHRvbkNvbG9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgY29sb3IgPSB0aGlzLmV2YWx1YXRlU3RyaW5nKHZhbHVlKTtcclxuICAgIGNvbnN0IHdhdGNoS2V5ID0gYDpidXR0b25Db2xvcigke2NvbG9yfSlgO1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKHRoaXMuZm9ybUdyb3VwLCB3YXRjaEtleSwgKCkgPT4ge1xyXG4gICAgICBpZiAoY29sb3IgPT09IFwiZ2hvc3RcIilcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgY29uc3QgdmFsaWRDb2xvcnM6IEJ1dHRvbkNvbG9yc1tdID0gWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICd0ZXJ0aWFyeScsICd0ZXJ0aWFyeS1saWdodCcsICdkYW5nZXInXTtcclxuICAgICAgcmV0dXJuIHZhbGlkQ29sb3JzLmluY2x1ZGVzKGNvbG9yIGFzIEJ1dHRvbkNvbG9ycykgPyAoY29sb3IgYXMgQnV0dG9uQ29sb3JzKSA6ICdwcmltYXJ5JztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVDb25kaXRpb25hbChjb25kaXRpb25hbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBoaWRlID0gdGhpcy5ldmFsdWF0ZUJvb2xlYW4oY29uZGl0aW9uYWw/LmhpZGUpO1xyXG4gICAgY29uc3Qgc2hvdyA9IHRoaXMuZXZhbHVhdGVCb29sZWFuKGNvbmRpdGlvbmFsPy5zaG93KTtcclxuICAgIFxyXG4gICAgcmV0dXJuICEoaGlkZSA9PT0gdHJ1ZSB8fCBzaG93ID09PSBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZSh2YWx1ZTogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm1ldGFkYXRhLmdldEZvcm1CeU5hbWUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUdyb3VwKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwpOiBGb3JtR3JvdXAge1xyXG4gICAgaWYgKCEoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb250cm9sIGlzIG5vdCBhIEZvcm1Hcm91cCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtQXJyYXkoY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCk6IEZvcm1BcnJheSB7XHJcbiAgICBpZiAoIShjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnRyb2wgaXMgbm90IGEgRm9ybUFycmF5Jyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udHJvbDtcclxuICB9XHJcblxyXG4gIGdldENvbnRyb2xGcm9tUGF0aChwYXRoOiBzdHJpbmcgfCBudWxsKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XHJcbiAgICBjb25zdCBjb250cm9sID0gcGF0aFxyXG4gICAgICA/IHRoaXMuZm9ybUdyb3VwLmdldChwYXRoKVxyXG4gICAgICA6IHRoaXMuZm9ybUdyb3VwO1xyXG5cclxuICAgIGlmICghY29udHJvbCkgeyAgICAgIFxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvcm1Hcm91cCBkb2VzIG5vdCBjb250YWluIGEgY29udHJvbCB3aXRoIHBhdGggJyR7cGF0aH0nYCwgeyBjYXVzZTogdGhpcy5mb3JtR3JvdXAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udHJvbDtcclxuICB9XHJcblxyXG4gIHRvSFRNTCh0ZXh0OiBzdHJpbmcpOiBTYWZlSHRtbCB7XHJcbiAgICBjb25zdCB3YXRjaEtleSA9IGA6c2FmZUh0bWwoJHt0ZXh0fSlgO1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKHRoaXMuZm9ybUdyb3VwLCB3YXRjaEtleSwgKCkgPT4ge1xyXG4gICAgICBjb25zdCBodG1sID0gdGhpcy5tYXJrZG93bi50b0h0bWwodGV4dCk7XHJcbiAgICAgIHJldHVybiB0aGlzLnNhbml0aXplci5zYW5pdGl6ZVNhZmVIdG1sKGh0bWwpO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgc2FuaXRpemUoaHRtbDogc3RyaW5nKTogU2FmZUh0bWwge1xyXG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLnNhbml0aXplU2FmZUh0bWwoaHRtbCk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0TWltZVR5cGVzKGV4dGVuc2lvbnM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5taW1lLmdldE1pbWVUeXBlcyhleHRlbnNpb25zKTtcclxuICB9O1xyXG5cclxuICBjbGlja0J1dHRvbihjb21wb25lbnQ6IGFueSwgZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGNvbXBvbmVudC5jbGljaykge1xyXG4gICAgICB0aGlzLmV2YWx1YXRlKGNvbXBvbmVudC5jbGljaywgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbXBvbmVudC5jb21tYW5kKSB7XHJcbiAgICAgIGNvbnN0IGNvbW1hbmQ6IENvbW1hbmRFdmVudCA9IHtcclxuICAgICAgICBuYW1lOiB0aGlzLmV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5jb21tYW5kKSxcclxuICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcclxuICAgICAgICBmb3JtR3JvdXA6IHRoaXMuZm9ybUdyb3VwLFxyXG4gICAgICAgIGV2ZW50OiBldmVudFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmV2ZW50cy5lbWl0Q29tbWFuZChjb21tYW5kKTtcclxuICAgIH0gICAgXHJcbiAgfVxyXG5cclxuICBnZXRWYWx1ZXMoY29tcG9uZW50OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKGNvbXBvbmVudC52YWx1ZXMpIHtcclxuICAgICAgLy8gU3RhdGljXHJcbiAgICAgIHJldHVybiBvZihjb21wb25lbnQudmFsdWVzKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbXBvbmVudC52YWx1ZXNLZXkpIHtcclxuICAgICAgLy8gRmllbGQgdmFsdWVcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5ldmFsdWF0ZShjb21wb25lbnQudmFsdWVzS2V5KTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0QXNPYnNlcnZhYmxlKHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb21wb25lbnQudmFsdWVzRXhwcmVzc2lvbikge1xyXG4gICAgICAvLyBFeHByZXNzaW9uXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZXZhbHVhdGUoY29tcG9uZW50LnZhbHVlc0V4cHJlc3Npb24pO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRBc09ic2VydmFibGUocmVzdWx0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBOb3RoaW5nXHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgZ2V0R3JpZE9wdGlvbnMoY29tcG9uZW50OiBhbnkpOiBHcmlkT3B0aW9ucyB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwoY29tcG9uZW50LCAnZ2V0R3JpZE9wdGlvbnMnLCAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbHVtbkRlZnMgPSB0aGlzLmdldEdyaWRDb2x1bW5zKGNvbXBvbmVudCk7XHJcbiAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLmdldEdyaWRQYWdpbmFibGUoY29tcG9uZW50KTtcclxuICAgICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLmdldEdyaWRQYWdlU2l6ZShjb21wb25lbnQpO1xyXG4gICAgICBjb25zdCB0ZXh0cyA9IHRoaXMuZ2V0R3JpZFRleHRzKCk7XHJcbiAgICAgIGNvbnN0IHRoZW1lID0gdGhpcy5nZXRHcmlkVGhlbWUoKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBkZWZhdWx0Q29sRGVmOiB7XHJcbiAgICAgICAgICBmbG9hdGluZ0ZpbHRlcjogKGNvbXBvbmVudC5mbG9hdGluZ0ZpbHRlciA9PT0gdHJ1ZSksXHJcbiAgICAgICAgICBoZWFkZXJDbGFzczogKGNvbXBvbmVudC5mbG9hdGluZ0ZpbHRlciA9PT0gdHJ1ZSlcclxuICAgICAgICAgICAgPyAnc2hvdy1maWx0ZXInIDogJ2hpZGUtZmlsdGVyJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29sdW1uRGVmczogY29sdW1uRGVmcyxcclxuICAgICAgICBwYWdpbmF0aW9uOiBwYWdpbmF0aW9uLFxyXG4gICAgICAgIHBhZ2luYXRpb25QYWdlU2l6ZTogcGFnZVNpemUsXHJcbiAgICAgICAgcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3I6IFs1LCAxMCwgMjAsIDUwXSxcclxuICAgICAgICBsb2NhbGVUZXh0OiB0ZXh0cyxcclxuICAgICAgICBlbmFibGVDZWxsVGV4dFNlbGVjdGlvbjogdHJ1ZSxcclxuICAgICAgICB0aGVtZTogdGhlbWUsXHJcbiAgICAgICAgb25HcmlkUmVhZHk6IChwYXJhbXM6IEdyaWRSZWFkeUV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBwYXJhbXMuYXBpLmF1dG9TaXplQ29sdW1ucyhbXCJhY3Rpb25zXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEdyaWRNb2R1bGVzKGNvbXBvbmVudDogYW55KTogTW9kdWxlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKGNvbXBvbmVudCwgJ2dldEdyaWRNb2R1bGVzJywgKCkgPT4ge1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIENsaWVudFNpZGVSb3dNb2RlbE1vZHVsZVxyXG4gICAgICAgICwgSW5maW5pdGVSb3dNb2RlbE1vZHVsZVxyXG4gICAgICAgICwgUGFnaW5hdGlvbk1vZHVsZVxyXG4gICAgICAgICwgTG9jYWxlTW9kdWxlXHJcbiAgICAgICAgLCBDZWxsU3R5bGVNb2R1bGVcclxuICAgICAgICAsIENsaWVudFNpZGVSb3dNb2RlbEFwaU1vZHVsZVxyXG4gICAgICAgICwgVGV4dEZpbHRlck1vZHVsZVxyXG4gICAgICAgICwgTnVtYmVyRmlsdGVyTW9kdWxlXHJcbiAgICAgICAgLCBEYXRlRmlsdGVyTW9kdWxlXHJcbiAgICAgICAgLCBDb2x1bW5BdXRvU2l6ZU1vZHVsZVxyXG4gICAgICAgICwgQ29sdW1uQXBpTW9kdWxlXHJcbiAgICAgICAgLCBWYWxpZGF0aW9uTW9kdWxlXHJcbiAgICAgIF07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEdyaWREYXRhKGNvbXBvbmVudDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmIChjb21wb25lbnQuZGF0YVNvdXJjZSkge1xyXG4gICAgICAvLyBFeHByZXNzaW9uXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZXZhbHVhdGUoY29tcG9uZW50LmRhdGFTb3VyY2UpO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRBc09ic2VydmFibGUocmVzdWx0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBOb3RoaW5nXHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRJdGVtKGNvbXBvbmVudDogYW55KSB7XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmdldEZvcm1BcnJheSh0aGlzLmdldENvbnRyb2xGcm9tUGF0aChjb21wb25lbnQucGF0aCkpO1xyXG4gICAgKGZvcm1BcnJheSBhcyBhbnkpLmFkZEl0ZW0oKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUl0ZW0oY29tcG9uZW50OiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZ2V0Rm9ybUFycmF5KHRoaXMuZ2V0Q29udHJvbEZyb21QYXRoKGNvbXBvbmVudC5wYXRoKSk7XHJcbiAgICBmb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlVXBsb2FkVGFibGVzKGNvbXBvbmVudDogYW55KTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLndlYWsuY2FsbChjb21wb25lbnQsICdjcmVhdGVVcGxvYWRUYWJsZXMnLCAoKSA9PiB7XHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29tcG9uZW50czogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGFibGVcIixcclxuICAgICAgICAgICAgICBcImxheW91dFwiOiB7XHJcbiAgICAgICAgICAgICAgICBcImNvbHVtbnNcIjogbnVsbFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiBUZXh0cy5OYW1lLFxyXG4gICAgICAgICAgICAgICAgICBcImtleVwiOiBcIm5hbWVcIixcclxuICAgICAgICAgICAgICAgICAgXCJmbGV4XCI6IDFcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogVGV4dHMuU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgXCJrZXlcIjogXCJzaXplXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICAgICAgICBcImFsaWduXCI6IFwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiBUZXh0cy5UeXBlLFxyXG4gICAgICAgICAgICAgICAgICBcImtleVwiOiBcInR5cGVcIiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJrZXlcIjogXCJ1cmxcIixcclxuICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcIndpZHRoXCI6IDUwLFxyXG4gICAgICAgICAgICAgICAgICBcImFsaWduXCI6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwib2JqZWN0VVJMXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiA1MCxcclxuICAgICAgICAgICAgICAgICAgXCJhbGlnblwiOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvcm1hdFwiOiBcImRlbGV0ZVJvd1wiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBcImRhdGFTb3VyY2VcIjogXCI9XCIgKyBjb21wb25lbnQua2V5LFxyXG4gICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IDIwMCxcclxuICAgICAgICAgICAgICBcImNvbmRpdGlvbmFsXCI6IGNvbXBvbmVudC5jb25kaXRpb25hbCxcclxuICAgICAgICAgICAgICBcImRpc2FibGVkXCI6IGNvbXBvbmVudC5kaXNhYmxlZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgICBdO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmaWxlVXBsb2FkZWQoJGV2ZW50OiBOZ3hTaXJpb0V2ZW50PFNpcmlvRmlsZVVwbG9hZENvbXBvbmVudD4pIHtcclxuICAgIGNvbnN0IHJlbW92ZUZpbGUgPSAoZmlsZTogRmlsZSkgPT4ge1xyXG4gICAgICBpZiAoJGV2ZW50LmNvbXBvbmVudC5jb250cm9sKSB7XHJcbiAgICAgICAgY29uc3QgbmV3RmlsZXMgPSAkZXZlbnQuY29tcG9uZW50LmZpbGVMaXN0LmZpbHRlcihmID0+IGYgIT09IGZpbGUpO1xyXG4gICAgICAgICRldmVudC5jb21wb25lbnQuY29udHJvbC5zZXRWYWx1ZShuZXdGaWxlcyk7XHJcbiAgICAgICAgYWRkUmVtb3ZlKG5ld0ZpbGVzKTtcclxuICAgICAgICByZXR1cm4gbmV3RmlsZXM7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFkZFJlbW92ZSA9IChmaWxlczogRmlsZVtdKSA9PiB7XHJcbiAgICAgIGZpbGVzLmZvckVhY2goZmlsZSA9PiB7XHJcbiAgICAgICAgaWYgKCEoJ3JlbW92ZScgaW4gZmlsZSkpIHtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWxlLCAncmVtb3ZlJywge1xyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJlbW92ZUZpbGUodGhpcyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgICB9KTsgXHJcbiAgICB9O1xyXG5cclxuICAgIGFkZFJlbW92ZSgkZXZlbnQuY29tcG9uZW50LmZpbGVMaXN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNGaXJzdCgpIHtcclxuICAgIGNvbnN0IGZvY3VzYWJsZUVsZW1lbnRzID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICAgICdidXR0b24sIFtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKSdcclxuICAgICk7XHJcblxyXG4gICAgZm9yIChsZXQgZWwgb2YgZm9jdXNhYmxlRWxlbWVudHMpIHtcclxuICAgICAgaWYgKCEoZWwgYXMgSFRNTEVsZW1lbnQpLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkge1xyXG4gICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuZm9jdXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfSAgICAgIFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBncmlkVGV4dHMgPSB7XHJcbiAgICAuLi5BR19HUklEX0xPQ0FMRV9JVCxcclxuICAgIFwicGFnZVNpemVTZWxlY3RvckxhYmVsXCI6IFwiRWxlbWVudGkgcGVyIHBhZ2luYTpcIixcclxuICAgIFwidG9cIjogXCItXCIsXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBncmlkVGhlbWUgPSB0aGVtZVF1YXJ0elxyXG4gICAgLndpdGhQYXJ0KGljb25TZXRBbHBpbmUpXHJcbiAgICAud2l0aFBhcmFtcyh7XHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjRkFGQUZBXCIsXHJcbiAgICAgIGJvcmRlckNvbG9yOiBcIiNEOUU0RjdcIixcclxuICAgICAgYnJvd3NlckNvbG9yU2NoZW1lOiBcImxpZ2h0XCIsXHJcbiAgICAgIGNlbGxUZXh0Q29sb3I6IFwiIzAwMTIxQVwiLFxyXG4gICAgICBjb2x1bW5Cb3JkZXI6IHRydWUsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiaW5oZXJpdFwiLFxyXG4gICAgICBmb250U2l6ZTogMTYsXHJcbiAgICAgIGhlYWRlckJhY2tncm91bmRDb2xvcjogXCIjMDAyNDYwXCIsXHJcbiAgICAgIGhlYWRlckNvbHVtbkJvcmRlcjogdHJ1ZSxcclxuICAgICAgaGVhZGVyQ29sdW1uUmVzaXplSGFuZGxlQ29sb3I6IFwiI0YyRjZGQ1wiLFxyXG4gICAgICBoZWFkZXJDb2x1bW5SZXNpemVIYW5kbGVXaWR0aDogMixcclxuICAgICAgaGVhZGVyRm9udFNpemU6IDE2LFxyXG4gICAgICBoZWFkZXJGb250V2VpZ2h0OiA2MDAsXHJcbiAgICAgIGhlYWRlclJvd0JvcmRlcjogZmFsc2UsXHJcbiAgICAgIGhlYWRlclRleHRDb2xvcjogXCIjRjJGNkZDXCIsXHJcbiAgICAgIHJvd0JvcmRlcjogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZENvbHVtbnMoY29tcG9uZW50OiBhbnkpOiBDb2xEZWZbXSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb21wb25lbnQuY29sdW1ucykpIHtcclxuICAgICAgY29uc3QgY29sdW1ucyA9IGNvbXBvbmVudC5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnkpID0+ICh7XHJcbiAgICAgICAgZmllbGQ6IGNvbHVtbi5rZXksXHJcbiAgICAgICAgaGVhZGVyTmFtZTogY29sdW1uLmxhYmVsLFxyXG4gICAgICAgIHJlc2l6YWJsZTogY29sdW1uLnJlc2l6ZSA9PT0gdHJ1ZSxcclxuICAgICAgICBzb3J0YWJsZTogY29sdW1uLnNvcnQgPT09IHRydWUsXHJcbiAgICAgICAgZmlsdGVyOiBjb2x1bW4uZmlsdGVyID09PSB0cnVlLFxyXG4gICAgICAgIHN1cHByZXNzTW92YWJsZTogIShjb2x1bW4ubW92ZSA9PT0gdHJ1ZSksXHJcbiAgICAgICAgLi4uKGNvbHVtbi5mbGV4ID09PSB0cnVlICYmIHsgZmxleDogMSB9KSxcclxuICAgICAgICAuLi4oY29sdW1uLmFsaWduID09PSBcImxlZnRcIiAmJiB7IGNlbGxTdHlsZTogeyB0ZXh0QWxpZ246ICdsZWZ0JyB9IH0pLFxyXG4gICAgICAgIC4uLihjb2x1bW4uYWxpZ24gPT09IFwiY2VudGVyXCIgJiYgeyBjZWxsU3R5bGU6IHsgdGV4dEFsaWduOiAnY2VudGVyJyB9IH0pLFxyXG4gICAgICAgIC4uLihjb2x1bW4uYWxpZ24gPT09IFwicmlnaHRcIiAmJiB7IGNlbGxTdHlsZTogeyB0ZXh0QWxpZ246ICdyaWdodCcgfSB9KSxcclxuICAgICAgICAuLi4odHlwZW9mIGNvbHVtbi5waW5uZWQgPT09IFwic3RyaW5nXCIgJiYgeyBwaW5uZWQ6IGNvbHVtbi5waW5uZWQgfSksXHJcbiAgICAgICAgLi4uKHR5cGVvZiBjb2x1bW4uZmxleCA9PT0gXCJudW1iZXJcIiAmJiB7IGZsZXg6IGNvbHVtbi5mbGV4IH0pLFxyXG4gICAgICAgIC4uLih0eXBlb2YgY29sdW1uLndpZHRoID09PSBcIm51bWJlclwiICYmIHsgd2lkdGg6IGNvbHVtbi53aWR0aCB9KSxcclxuICAgICAgICAuLi4odHlwZW9mIGNvbHVtbi5taW5XaWR0aCA9PT0gXCJudW1iZXJcIiAmJiB7IG1pbldpZHRoOiBjb2x1bW4ubWluV2lkdGggfSksXHJcbiAgICAgICAgLi4uKHR5cGVvZiBjb2x1bW4ubWF4V2lkdGggPT09IFwibnVtYmVyXCIgJiYgeyBtYXhXaWR0aDogY29sdW1uLm1heFdpZHRoIH0pLFxyXG4gICAgICAgIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmdldEdyaWRGb3JtYXR0ZXIoY29sdW1uKSxcclxuICAgICAgICBjZWxsUmVuZGVyZXI6IHRoaXMuZ2V0R3JpZFJlbmRlcmVyKGNvbHVtbilcclxuICAgICAgfSkpO1xyXG5cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29tcG9uZW50LmFjdGlvbnMpICYmIGNvbXBvbmVudC5hY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb2x1bW5zLnB1c2goe1xyXG4gICAgICAgICAgY29sSWQ6ICdhY3Rpb25zJyxcclxuICAgICAgICAgIGhlYWRlck5hbWU6IFRleHRzLkFjdGlvbnMsXHJcbiAgICAgICAgICByZXNpemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgY2VsbERhdGFUeXBlOiBmYWxzZSxcclxuICAgICAgICAgIHBpbm5lZDogXCJyaWdodFwiLFxyXG4gICAgICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxyXG4gICAgICAgICAgICBmb3JtR3JvdXA6IHRoaXMuZm9ybUdyb3VwXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY2VsbFJlbmRlcmVyOiBBY3Rpb25zQ2VsbFJlbmRlcmVyLFxyXG4gICAgICAgICAgc3VwcHJlc3NLZXlib2FyZEV2ZW50OiBHcmlkVXRpbHMubmF2aWdhdGVJbnNpZGVDZWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjb2x1bW5zO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZFBhZ2luYWJsZShjb21wb25lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0eXBlb2YgY29tcG9uZW50LnJvd0NvdW50ID09PSAnbnVtYmVyJyAmJiBjb21wb25lbnQucm93Q291bnQgPiAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZFBhZ2VTaXplKGNvbXBvbmVudDogYW55KSB7XHJcbiAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5yb3dDb3VudCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIGNvbXBvbmVudC5yb3dDb3VudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZFRleHRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JpZFRleHRzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRHcmlkVGhlbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ncmlkVGhlbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEdyaWRGb3JtYXR0ZXIoY29sdW1uOiBhbnkpOiAoKHBhcmFtOiBWYWx1ZUZvcm1hdHRlclBhcmFtcykgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoY29sdW1uLmZvcm1hdCkge1xyXG4gICAgICBzd2l0Y2ggKGNvbHVtbi5mb3JtYXQpIHtcclxuICAgICAgICBjYXNlICdpbnRlZ2VyJzpcclxuICAgICAgICAgIHJldHVybiBwYXJhbXMgPT4gdGhpcy5mb3JtYXR0ZXIuZm9ybWF0SW50ZWdlcihwYXJhbXMudmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ2N1cnJlbmN5JzpcclxuICAgICAgICAgIHJldHVybiBwYXJhbXMgPT4gdGhpcy5mb3JtYXR0ZXIuZm9ybWF0Q3VycmVuY3kocGFyYW1zLnZhbHVlKTtcclxuICAgICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICAgIHJldHVybiBwYXJhbXMgPT4gdGhpcy5mb3JtYXR0ZXIuZm9ybWF0RGF0ZShwYXJhbXMudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRHcmlkUmVuZGVyZXIoY29sdW1uOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKGNvbHVtbi5mb3JtYXQpIHtcclxuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0KSB7XHJcbiAgICAgICAgY2FzZSAnb2JqZWN0VVJMJzpcclxuICAgICAgICAgIHJldHVybiBPYmplY3RVUkxSZW5kZXJlckNvbXBvbmVudDtcclxuICAgICAgICBjYXNlIFwiZGVsZXRlUm93XCI6XHJcbiAgICAgICAgICByZXR1cm4gRGVsZXRlUm93Q2VsbFJlbmRlcmVyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBc09ic2VydmFibGUodmFsdWU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSlcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgcmV0dXJuIG9mKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uZmlndXJlRGF0ZXBpY2tlcigpIHtcclxuICAgIChEYXRlcGlja2VyLmxvY2FsZXMgYXMgYW55KVsnaXQnXSA9IHtcclxuICAgICAgZGF5czogW1xyXG4gICAgICAgICdEb21lbmljYScsXHJcbiAgICAgICAgJ0x1bmVkw6wnLFxyXG4gICAgICAgICdNYXJ0ZWTDrCcsXHJcbiAgICAgICAgJ01lcmNvbGVkw6wnLFxyXG4gICAgICAgICdHaW92ZWTDrCcsXHJcbiAgICAgICAgJ1ZlbmVyZMOsJyxcclxuICAgICAgICAnU2FiYXRvJyxcclxuICAgICAgXSxcclxuICAgICAgZGF5c01pbjogWydEb20nLCAnTHVuJywgJ01hcicsICdNZXInLCAnR2lvJywgJ1ZlbicsICdTYWInXSxcclxuICAgICAgbW9udGhzOiBbXHJcbiAgICAgICAgJ0dlbm5haW8nLFxyXG4gICAgICAgICdGZWJicmFpbycsXHJcbiAgICAgICAgJ01hcnpvJyxcclxuICAgICAgICAnQXByaWxlJyxcclxuICAgICAgICAnTWFnZ2lvJyxcclxuICAgICAgICAnR2l1Z25vJyxcclxuICAgICAgICAnTHVnbGlvJyxcclxuICAgICAgICAnQWdvc3RvJyxcclxuICAgICAgICAnU2V0dGVtYnJlJyxcclxuICAgICAgICAnT3R0b2JyZScsXHJcbiAgICAgICAgJ05vdmVtYnJlJyxcclxuICAgICAgICAnRGljZW1icmUnLFxyXG4gICAgICBdLFxyXG4gICAgICBtb250aHNTaG9ydDogW1xyXG4gICAgICAgICdHZW4nLFxyXG4gICAgICAgICdGZWInLFxyXG4gICAgICAgICdNYXInLFxyXG4gICAgICAgICdBcHInLFxyXG4gICAgICAgICdNYWcnLFxyXG4gICAgICAgICdHaXUnLFxyXG4gICAgICAgICdMdWcnLFxyXG4gICAgICAgICdBZ28nLFxyXG4gICAgICAgICdTZXQnLFxyXG4gICAgICAgICdPdHQnLFxyXG4gICAgICAgICdOb3YnLFxyXG4gICAgICAgICdEaWMnLFxyXG4gICAgICBdLFxyXG4gICAgICB0b2RheTogJ09nZ2knLFxyXG4gICAgICBjbGVhcjogJ1B1bGlzY2knLFxyXG4gICAgICBmb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuICAgICAgd2Vla1N0YXJ0OiAxXHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIHJvd3NcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3cgZmllbGQtc2V0XCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb21wb25lbnQgb2Ygcm93LmNvbXBvbmVudHNcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29tcG9uZW50LnR5cGVcIj5cclxuICAgICAgICA8ZGl2IFtjbGFzc109XCJnZXRDbGFzcyhjb21wb25lbnQpXCI+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gdGV4dGZpZWxkIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRmaWVsZCdcIj5cclxuICAgICAgICAgICAgPG5neC1zaXJpby1pbnB1dCB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbXBvbmVudC5wbGFjZWhvbGRlciB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXhBZG9ybmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5hcHBlYXJhbmNlPy5wcmVmaXhBZG9ybmVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N1ZmZpeEFkb3JuZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmFwcGVhcmFuY2U/LnN1ZmZpeEFkb3JuZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0Y2FzZV09XCJjb21wb25lbnQudGV4dENhc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50Lm1heExlbmd0aClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJsdXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGV4dGZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0ZXh0ZmllbGRcIj5cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8taW5wdXQ+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBzZWxlY3QgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2VsZWN0J1wiPlxyXG4gICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdCBhcmlhTGFiZWw9XCJzZWxlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbXBvbmVudC5wbGFjZWhvbGRlciB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3NlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJzZWxlY3RcIj5cclxuICAgICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdC1wYW5lbCBhcmlhTGFiZWw9XCJpdGVtc1wiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1pbnB1dCAqbmdJZj1cImNvbXBvbmVudC5zZWFyY2hhYmxlXCIgY2xhc3M9XCJzZWFyY2hhYmxlXCIgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwiVGV4dHMuVHlwZVRvU2VhcmNoXCI+PC9uZ3gtc2lyaW8taW5wdXQ+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiAoZ2V0VmFsdWVzKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+e3sgb3B0aW9uLmxhYmVsIH19PC9uZ3gtc2lyaW8tc2VsZWN0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L25neC1zaXJpby1zZWxlY3QtcGFuZWw+XHJcbiAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNlbGVjdD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIHRhZ2xpc3QgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGFnbGlzdCdcIj5cclxuICAgICAgICAgICAgPG5neC1zaXJpby1zZWxlY3QgYXJpYUxhYmVsPVwic2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb21wb25lbnQucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTXVsdGlwbGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGFnbGlzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0YWdsaXN0XCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1zZWxlY3QtcGFuZWwgYXJpYUxhYmVsPVwiaXRlbXNcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2VsZWN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj57eyBvcHRpb24ubGFiZWwgfX08L25neC1zaXJpby1zZWxlY3Qtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNlbGVjdC1wYW5lbD5cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8tc2VsZWN0PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gbnVtYmVyIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgPG5neC1zaXJpby1pbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw9XCJpbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29tcG9uZW50LnBsYWNlaG9sZGVyIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeEFkb3JuZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmFwcGVhcmFuY2U/LnByZWZpeEFkb3JuZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3VmZml4QWRvcm5lcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuYXBwZWFyYW5jZT8uc3VmZml4QWRvcm5lcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJldmFsdWF0ZU51bWJlcihjb21wb25lbnQuZGVmYXVsdFZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pbmltdW1dPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50Lm1pbmltdW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4aW11bV09XCJldmFsdWF0ZU51bWJlcihjb21wb25lbnQubWF4aW11bSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWNpbWFsRGlnaXRzXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5kZWNpbWFsRGlnaXRzKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQmx1clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICNudW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cIm51bWJlclwiPlxyXG4gICAgICAgICAgICA8L25neC1zaXJpby1pbnB1dD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIGRhdGV0aW1lIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkYXRlIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1kYXRlcGlja2VyIGFyaWFMYWJlbD1cImRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGF0ZUxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb21wb25lbnQucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzb0RhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiZGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIHRpbWUgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXRpbWVwaWNrZXIgYXJpYUxhYmVsPVwidGltZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50aW1lTGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbXBvbmVudC5wbGFjZWhvbGRlciB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RpbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRpbWVcIj5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXRpbWVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIGNoZWNrYm94IC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0b2dnbGUgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RvZ2dsZSdcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tdG9nZ2xlIGFyaWFMYWJlbD1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdG9nZ2xlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidG9nZ2xlXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbCkgfX1cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXRvZ2dsZT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRlZmF1bHQgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1jaGVja2JveCBhcmlhTGFiZWw9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbCkgfX1cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiByYWRpbyAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidyYWRpbydcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29tcG9uZW50LnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gY2hpcCAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hpcCdcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tY2hpcC1yYWRpby1ncm91cCBhcmlhTGFiZWw9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjY2hpcHJhZGlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJjaGlwcmFkaW9cIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1pbnB1dC1jaGlwICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgKGdldFZhbHVlcyhjb21wb25lbnQpIHwgYXN5bmMpIHx8IFtdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWlucHV0LWNoaXA+XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby1jaGlwLXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gZGVmYXVsdCAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXJhZGlvLWdyb3VwIGFyaWFMYWJlbD1cInJhZGlvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3JhZGlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInJhZGlvXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tcmFkaW8tYnV0dG9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgKGdldFZhbHVlcyhjb21wb25lbnQpIHwgYXN5bmMpIHx8IFtdXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gY2hlY2tsaXN0IC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrbGlzdCdcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29tcG9uZW50LnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gY2hpcCAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hpcCdcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tY2hpcC1jaGVja2JveC1ncm91cCBhcmlhTGFiZWw9XCJjaGVja2xpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NoaXBjaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiY2hpcGNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQtY2hpcCAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1pbnB1dC1jaGlwPlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hpcC1jaGVja2JveC1ncm91cD5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRlZmF1bHQgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1jaGVja2JveC1ncm91cCBhcmlhTGFiZWw9XCJjaGVja2xpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1jaGVja2JveCAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby1jaGVja2JveC1ncm91cD5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gdGV4dGFyZWEgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dGFyZWEnXCI+XHJcbiAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQgdHlwZT1cInRleHRhcmVhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw9XCJ0ZXh0YXJlYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29tcG9uZW50LnBsYWNlaG9sZGVyIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dGNhc2VdPVwiY29tcG9uZW50LnRleHRDYXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5tYXhMZW5ndGgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVCbHVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RleHRhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0ZXh0YXJlYVwiPlxyXG4gICAgICAgICAgICA8L25neC1zaXJpby1pbnB1dD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIGZpbGVwaWNrZXIgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZmlsZXBpY2tlcidcIj5cclxuICAgICAgICAgICAgPG5neC1zaXJpby1maWxlLXVwbG9hZCBhcmlhTGFiZWw9XCJmaWxlcGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRdPVwiZ2V0TWltZVR5cGVzKGNvbXBvbmVudC5hY2NlcHQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5tdWx0aXBsZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlVXBsb2FkZWRFdmVudCk9XCJmaWxlVXBsb2FkZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dGaWxlbGlzdF09XCIhY29tcG9uZW50LnNob3dEZXRhaWxzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZmlsZXBpY2tlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiZmlsZXBpY2tlclwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmFzIGZhLWFycm93LXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIHt7IFRleHRzLlVwbG9hZCB9fVxyXG4gICAgICAgICAgICA8L25neC1zaXJpby1maWxlLXVwbG9hZD5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBvbmVudC5zaG93RGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1maWVsZHMgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBbcm93c109XCJjcmVhdGVVcGxvYWRUYWJsZXMoY29tcG9uZW50KVwiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIHRleHQgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cclxuICAgICAgICAgICAgPGRpdiBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgIFtjb2xsYXBzZV09XCJjb21wb25lbnQuY29sbGFwc2VUb1wiXHJcbiAgICAgICAgICAgICAgICAgI3RleHRcclxuICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRleHRcIj5cclxuICAgICAgICAgICAgICA8IS0tUmVzZXQgVmlldyBDb250ZXh0LS0+XHJcbiAgICAgICAgICAgICAgPGRpdiB0YWJpbmRleD1cIjBcIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wYXJhZ3JhcGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGNvbXBvbmVudC50ZXh0KSlcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBvbmVudC50b29sdGlwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxhcHAtdGVtcGxhdGUtd3JhcHBlciAjdG9vbHRpcFdyYXBwZXIgW3RlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZVwiIFtjb250ZXh0XT1cInsgY29tcG9uZW50OiBjb21wb25lbnQgfVwiPjwvYXBwLXRlbXBsYXRlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzaXJpby1sYWJlbC1wb3BvdmVyIGZhcyBmYS1pbmZvLWNpcmNsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyaW9Ub29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2hhc1BvcG92ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbVRlbXBsYXRlXT1cInRvb2x0aXBXcmFwcGVyLmdldFRlbXBsYXRlUmVmKClcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0b29sdGlwVGVtcGxhdGUgbGV0LWNvbXBvbmVudD1cImNvbXBvbmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaXJpby10b29sdGlwLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXBhcmFncmFwaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidG9IVE1MKGV2YWx1YXRlVGVtcGxhdGUoY29tcG9uZW50LnRvb2x0aXApKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBodG1sIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2h0bWwnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJodG1sLXBhcmFncmFwaFwiXHJcbiAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInNhbml0aXplKGV2YWx1YXRlVGVtcGxhdGUoY29tcG9uZW50LmNvbnRlbnQpKVwiXHJcbiAgICAgICAgICAgICAgICAgI2h0bWxcclxuICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImh0bWxcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBpbWFnZSAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbWFnZSdcIj5cclxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5zb3VyY2UpXCJcclxuICAgICAgICAgICAgICAgICBbYWx0XT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5hbHQpXCJcclxuICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO1wiXHJcbiAgICAgICAgICAgICAgICAgI2ltYWdlXHJcbiAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJpbWFnZVwiPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gZHluYW1pY2xpc3QgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZHluYW1pY2xpc3QnXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1BcnJheU5hbWVdPVwiY29tcG9uZW50LnBhdGhcIiBbcmVwZWF0XT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5yZXBldGl0aW9ucylcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvcm1BcnJheShmb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5wYXRoKSkuY29udHJvbHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdGFiIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGFiJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImR5bmFtaWNsaXN0dGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXRhYiBbbGVmdEFycm93TGFiZWxdPVwiVGV4dHMuU2Nyb2xsTGVmdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmlnaHRBcnJvd0xhYmVsXT1cIlRleHRzLlNjcm9sbFJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJDb3VudF09XCJnZXRGb3JtQXJyYXkoZm9ybUdyb3VwLmdldChjb21wb25lbnQucGF0aCkpLmNvbnRyb2xzLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZHluYW1pY2xpc3R0YWI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0Rm9ybUFycmF5KGZvcm1Hcm91cC5nZXQoY29tcG9uZW50LnBhdGgpKS5jb250cm9sczsgbGV0IGkgPSBpbmRleDtcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby10YWItaXRlbSBbbGFiZWxdPVwiY29tcG9uZW50LmxhYmVsICsgJyAnICsgKGkgKyAxKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImkgPT09IGR5bmFtaWNsaXN0dGFiLmFjdGl2ZUluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwie1xyXG4nZ3JvdXAtdG9wJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnc3RhcnQnLFxyXG4nZ3JvdXAtY2VudGVyJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnY2VudGVyJyxcclxuJ2dyb3VwLWJvdHRvbSc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2VuZCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1maWVsZHMgW2Zvcm1Hcm91cF09XCJnZXRGb3JtR3JvdXAoaXRlbSlcIiBbcm93c109XCJjb21wb25lbnQucm93c1wiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuYWxsb3dBZGRSZW1vdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOnJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYnV0dG9uIChjbGljayk9XCJyZW1vdmVJdGVtKGNvbXBvbmVudCwgaSlcIiBjbGFzcz1cInJlbW92ZS1pdGVtXCIgW2NvbG9yXT1cIm51bGxcIiBpY29uPVwiZmFzIGZhLXRyYXNoXCI+e3sgVGV4dHMuUmVtb3ZlSXRlbSB9fTwvbmd4LXNpcmlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby10YWItaXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby10YWI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBhY2NvcmRpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhY2NvcmRpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiZHluYW1pY2xpc3RhY2NvcmRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uIFthY2NvcmRpb25Db3VudF09XCJnZXRGb3JtQXJyYXkoZm9ybUdyb3VwLmdldChjb21wb25lbnQucGF0aCkpLmNvbnRyb2xzLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZHluYW1pY2xpc3RhY2NvcmRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0Rm9ybUFycmF5KGZvcm1Hcm91cC5nZXQoY29tcG9uZW50LnBhdGgpKS5jb250cm9sczsgbGV0IGkgPSBpbmRleDtcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24tcGFuZWwgI3BhbmVsIGFjY29yZGlvblBhbmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24taGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJUZXh0XT1cImNvbXBvbmVudC5sYWJlbCArICcgJyArIChpICsgMSlcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24taGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24tYm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhbmVsLnBhbmVsSXNPcGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7XHJcbidncm91cC10b3AnOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdzdGFydCcsXHJcbidncm91cC1jZW50ZXInOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdjZW50ZXInLFxyXG4nZ3JvdXAtYm90dG9tJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnZW5kJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1maWVsZHMgW2Zvcm1Hcm91cF09XCJnZXRGb3JtR3JvdXAoaXRlbSlcIiBbcm93c109XCJjb21wb25lbnQucm93c1wiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50LmFsbG93QWRkUmVtb3ZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOnJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1idXR0b24gKGNsaWNrKT1cInJlbW92ZUl0ZW0oY29tcG9uZW50LCBpKVwiIGNsYXNzPVwicmVtb3ZlLWl0ZW1cIiBbY29sb3JdPVwibnVsbFwiIGljb249XCJmYXMgZmEtdHJhc2hcIj57eyBUZXh0cy5SZW1vdmVJdGVtIH19PC9uZ3gtc2lyaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbi1ib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkZWZhdWx0IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2dyb3VwLW91dGxpbmUnOiBjb21wb25lbnQuc2hvd091dGxpbmUgPT09IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICNkeW5hbWljbGlzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImR5bmFtaWNsaXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEZvcm1BcnJheShmb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5wYXRoKSkuY29udHJvbHM7IGxldCBpID0gaW5kZXg7XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAnZ3JvdXAtdG9wJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnc3RhcnQnLFxyXG4gICAgICAgICdncm91cC1jZW50ZXInOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdjZW50ZXInLFxyXG4gICAgICAgICdncm91cC1ib3R0b20nOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdlbmQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKGl0ZW0pXCIgW3Jvd3NdPVwiY29tcG9uZW50LnJvd3NcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50LmFsbG93QWRkUmVtb3ZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpyaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlSXRlbShjb21wb25lbnQsIGkpXCIgY2xhc3M9XCJyZW1vdmUtaXRlbVwiIFtjb2xvcl09XCJudWxsXCIgaWNvbj1cImZhcyBmYS10cmFzaFwiPnt7IFRleHRzLlJlbW92ZUl0ZW0gfX08L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBvbmVudC5hbGxvd0FkZFJlbW92ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiAoY2xpY2spPVwiYWRkSXRlbShjb21wb25lbnQpXCIgY2xhc3M9XCJhZGQtaXRlbVwiIFtjb2xvcl09XCJudWxsXCIgaWNvbj1cImZhcyBmYS1wbHVzXCI+e3sgVGV4dHMuQWRkSXRlbSB9fTwvbmd4LXNpcmlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIGdyb3VwIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2dyb3VwJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAnZ3JvdXAtb3V0bGluZSc6IGNvbXBvbmVudC5zaG93T3V0bGluZSA9PT0gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAnZ3JvdXAtdG9wJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgICdncm91cC1jZW50ZXInOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAgICdncm91cC1ib3R0b20nOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdlbmQnfVwiXHJcbiAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsPnt7IGV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbCkgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgI2dyb3VwXHJcbiAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1maWVsZHMgW2Zvcm1Hcm91cF09XCJnZXRGb3JtR3JvdXAoZ2V0Q29udHJvbEZyb21QYXRoKGNvbXBvbmVudC5wYXRoKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93c109XCJjb21wb25lbnQucm93c1wiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIHRhYmxlIC0tPlxyXG4gICAgICAgICAgPGRpdiBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0YWJsZSdcIj5cclxuICAgICAgICAgICAgICA8bGFiZWw+e3sgZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGFnLWdyaWQtYW5ndWxhciBbbW9kdWxlc109XCJnZXRHcmlkTW9kdWxlcyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncmlkT3B0aW9uc109XCJnZXRHcmlkT3B0aW9ucyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dTb3VyY2VdPVwiKGdldEdyaWREYXRhKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjb21wb25lbnQuaGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0YWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRhYmxlXCIgLz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBidXR0b24gLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYnV0dG9uJ1wiPlxyXG4gICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiAoY2xpY2tFdmVudCk9XCJjbGlja0J1dHRvbihjb21wb25lbnQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiZXZhbHVhdGVDb2xvcihjb21wb25lbnQuY29sb3IpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50Lmljb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAge3sgZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKSB9fVxyXG4gICAgICAgICAgICA8L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBzZXBhcmF0b3IgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2VwYXJhdG9yJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yXCJcclxuICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICNzZXBhcmF0b3JcclxuICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInNlcGFyYXRvclwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIHNwYWNlciAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzcGFjZXInXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXHJcbiAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImNvbXBvbmVudC5oZWlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICNzcGFjZXJcclxuICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInNwYWNlclwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIGlmcmFtZSAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpZnJhbWUnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiY29tcG9uZW50LmlkXCI+e3sgZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlmcmFtZSBbc3JjXT1cImV2YWx1YXRlVXJsKGNvbXBvbmVudC51cmwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCInMTAwJSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjb21wb25lbnQuaGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtmcmFtZVNlY3VyaXR5XT1cImNvbXBvbmVudC5zZWN1cml0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAjaWZyYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiaWZyYW1lXCI+XHJcbiAgICAgICAgICAgICAgPC9pZnJhbWU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gYWxlcnQgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYWxlcnQnXCI+XHJcbiAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWxlcnQgW3R5cGVdPVwiY29tcG9uZW50LnJvbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENsb3NlXT1cIlRleHRzLkNsb3NlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhbGVydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiYWxlcnRcIj5cclxuICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFsZXJ0LW1lc3NhZ2U+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wYXJhZ3JhcGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGNvbXBvbmVudC50ZXh0KSlcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFsZXJ0LW1lc3NhZ2U+XHJcbiAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFsZXJ0PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gbm90aWNlIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ25vdGljZSdcIj5cclxuICAgICAgICAgICAgPG5neC1zaXJpby1ub3RpZnkgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNub3RpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwibm90aWNlXCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1ub3RpZnktYm9keSBbdGl0bGVdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRpdGxlKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcGFyYWdyYXBoXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJ0b0hUTUwoZXZhbHVhdGVUZW1wbGF0ZShjb21wb25lbnQudGV4dCkpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25neC1zaXJpby1ub3RpZnktYm9keT5cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8tbm90aWZ5PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gcmFuZ2UgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncmFuZ2UnXCI+XHJcbiAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2xpZGVyIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50LnJhbmdlPy5taW4pID8/IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4XT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5yYW5nZT8ubWF4KSA/PyAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3JhbmdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInJhbmdlXCI+XHJcbiAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNsaWRlcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIHRvb2x0aXAgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndG9vbHRpcCdcIj5cclxuICAgICAgICAgICAgPGFwcC10ZW1wbGF0ZS13cmFwcGVyICN0b29sdGlwV3JhcHBlciBbdGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlXCIgW2NvbnRleHRdPVwieyBjb21wb25lbnQ6IGNvbXBvbmVudCB9XCI+PC9hcHAtdGVtcGxhdGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNpcmlvLWxhYmVsLXBvcG92ZXIgZmFzIGZhLWluZm8tY2lyY2xlXCJcclxuICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNpcmlvVG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgIFtoYXNQb3BvdmVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXN0b21UZW1wbGF0ZV09XCJ0b29sdGlwV3JhcHBlci5nZXRUZW1wbGF0ZVJlZigpXCJcclxuICAgICAgICAgICAgICAgICAgICAjdG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidG9vbHRpcFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Rvb2x0aXBUZW1wbGF0ZSBsZXQtY29tcG9uZW50PVwiY29tcG9uZW50XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpcmlvLXRvb2x0aXAtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJjb21wb25lbnQudGl0bGVcIiBjbGFzcz1cInNpcmlvLXRvb2x0aXAtaGVhZGluZyBzaXJpby1zcGFjZS1kb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50aXRsZSkgfX1cclxuICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXBhcmFncmFwaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidG9IVE1MKGV2YWx1YXRlVGVtcGxhdGUoY29tcG9uZW50LnRleHQpKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0YWIgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGFiJ1wiPlxyXG4gICAgICAgICAgICA8bmd4LXNpcmlvLXRhYiAjdGFiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0YWJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsZWZ0QXJyb3dMYWJlbF09XCJUZXh0cy5TY3JvbGxMZWZ0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcmlnaHRBcnJvd0xhYmVsXT1cIlRleHRzLlNjcm9sbFJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJDb250cm9sPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhbmVsIG9mIGNvbXBvbmVudC5wYW5lbHNcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRpc2FibGVGb3JtPVwie1xyXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZXZhbHVhdGVCb29sZWFuKHBhbmVsLmRpc2FibGVkKSxcclxuICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwOiBmb3JtR3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgIHBhdGg6IHBhbmVsLnBhdGhcclxuICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby10YWItaXRlbSBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcocGFuZWwubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImV2YWx1YXRlQm9vbGVhbihwYW5lbC5kaXNhYmxlZCkgPz8gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV2YWx1YXRlQ29uZGl0aW9uYWwocGFuZWwuY29uZGl0aW9uYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgJ2dyb3VwLXRvcCc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICdncm91cC1jZW50ZXInOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ2dyb3VwLWJvdHRvbSc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2VuZCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1maWVsZHMgW2Zvcm1Hcm91cF09XCJnZXRGb3JtR3JvdXAoZ2V0Q29udHJvbEZyb21QYXRoKHBhbmVsLnBhdGgpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImdldFRlbXBsYXRlKHBhbmVsLnRlbXBsYXRlKT8ucm93c1wiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXRhYi1pdGVtPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25neC1zaXJpby10YWI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBhY2NvcmRpb24gLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYWNjb3JkaW9uJ1wiPlxyXG4gICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvblxyXG4gICAgICAgICAgICAgICAgI2FjY29yZGlvblxyXG4gICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImFjY29yZGlvblwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhbmVsIG9mIGNvbXBvbmVudC5wYW5lbHNcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRpc2FibGVGb3JtPVwie1xyXG4gICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGV2YWx1YXRlQm9vbGVhbihwYW5lbC5kaXNhYmxlZCksXHJcbiAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXA6IGZvcm1Hcm91cCxcclxuICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhbmVsLnBhdGhcclxuICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uLXBhbmVsICpuZ0lmPVwiZXZhbHVhdGVDb25kaXRpb25hbChwYW5lbC5jb25kaXRpb25hbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImV2YWx1YXRlQm9vbGVhbihwYW5lbC5kaXNhYmxlZClcIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24taGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lclRleHRdPVwiZXZhbHVhdGVTdHJpbmcocGFuZWwubGFiZWwpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24taGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvbi1ib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgJ2dyb3VwLXRvcCc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICdncm91cC1jZW50ZXInOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ2dyb3VwLWJvdHRvbSc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2VuZCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKGdldENvbnRyb2xGcm9tUGF0aChwYW5lbC5wYXRoKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImdldFRlbXBsYXRlKHBhbmVsLnRlbXBsYXRlKT8ucm93c1wiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbi1ib2R5PlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24+ICAgICAgICAgICAgXHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
|