@eqproject/eqp-dynamic-module 3.0.0 → 3.0.1
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/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +3 -3
- package/esm2022/lib/components/private/add-form-field/add-form-field.component.mjs +4 -3
- package/esm2022/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +3 -3
- package/esm2022/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.mjs +1 -1
- package/esm2022/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.mjs +1 -1
- package/esm2022/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.mjs +3 -3
- package/esm2022/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.mjs +1 -1
- package/esm2022/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.mjs +1 -1
- package/esm2022/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.mjs +1 -1
- package/esm2022/lib/components/private/graphs/graphs.component.mjs +1 -1
- package/esm2022/lib/components/private/trigger-creator/trigger-creator.component.mjs +3 -3
- package/esm2022/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.mjs +1 -1
- package/esm2022/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.mjs +1 -1
- package/esm2022/lib/components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component.mjs +3 -3
- package/esm2022/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.mjs +1 -1
- package/esm2022/lib/components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component.mjs +1 -1
- package/esm2022/lib/components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component.mjs +1 -1
- package/fesm2022/eqproject-eqp-dynamic-module.mjs +24 -23
- package/fesm2022/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -622,6 +622,7 @@ export class AddFormFieldComponent {
|
|
|
622
622
|
: [];
|
|
623
623
|
// Filtro i valori ottenuti dall'enumeratore per escludere tutti i valori per le
|
|
624
624
|
// grandezze di schermo già selezionatead esclusione dei valori selezionati.
|
|
625
|
+
console.log("COLSPANSIZES", colSizeClassEnumArray, selectedDimensionsCompilazione, this.field);
|
|
625
626
|
this.availableColSpanSizesCompilazione = colSizeClassEnumArray.filter((value) => !selectedDimensionsCompilazione.find((col) => value.value.includes(col.substring(4, 6)) && value.value != col));
|
|
626
627
|
this.availableColSpanSizesRisposta = colSizeClassEnumArray.filter((value) => !selectedDimensionsRisposta.find((col) => value.value.includes(col.substring(4, 6)) && value.value != col));
|
|
627
628
|
}
|
|
@@ -1169,11 +1170,11 @@ export class AddFormFieldComponent {
|
|
|
1169
1170
|
console.log("onChangeDMContestualization()", this.field.DataGetter.DataGetterContestualization);
|
|
1170
1171
|
}
|
|
1171
1172
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AddFormFieldComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.EnumHelper }, { token: i3.MatDialog }, { token: i0.ChangeDetectorRef }, { token: i4.HttpClient }, { token: i5.UtilityHelperService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1172
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AddFormFieldComponent, selector: "eqp-dynamic-module-add-form-field", inputs: { form: "form", endPointConfiguration: "endPointConfiguration", field: "field", indexField: "indexField", formFieldsGroups: "formFieldsGroups", availableFields: "availableFields", fieldTypesToExclude: "fieldTypesToExclude", QueryEditorComponent: "QueryEditorComponent", contestualization: "contestualization" }, outputs: { out: "out", saveFieldEvent: "saveFieldEvent" }, viewQueries: [{ propertyName: "textFieldFormTemplate", first: true, predicate: ["textFieldFormTemplate"], descendants: true, static: true }, { propertyName: "labelFieldFormTemplate", first: true, predicate: ["labelFieldFormTemplate"], descendants: true, static: true }, { propertyName: "textareaFieldFormTemplate", first: true, predicate: ["textareaFieldFormTemplate"], descendants: true, static: true }, { propertyName: "booleadFieldFormTemplate", first: true, predicate: ["booleadFieldFormTemplate"], descendants: true, static: true }, { propertyName: "dateFieldFormTemplate", first: true, predicate: ["dateFieldFormTemplate"], descendants: true, static: true }, { propertyName: "numericFieldFormTemplate", first: true, predicate: ["numericFieldFormTemplate"], descendants: true, static: true }, { propertyName: "attachmentFieldFormTemplate", first: true, predicate: ["attachmentFieldFormTemplate"], descendants: true, static: true }, { propertyName: "imageFieldFormTemplate", first: true, predicate: ["imageFieldFormTemplate"], descendants: true, static: true }, { propertyName: "imageWithMarkersFieldFormTemplate", first: true, predicate: ["imageWithMarkersFieldFormTemplate"], descendants: true, static: true }, { propertyName: "imageFieldSelectorFormTemplate", first: true, predicate: ["imageFieldSelectorFormTemplate"], descendants: true, static: true }, { propertyName: "listValueFieldFormTemplate", first: true, predicate: ["listValueFieldFormTemplate"], descendants: true, static: true }, { propertyName: "lookupFieldFormTemplate", first: true, predicate: ["lookupFieldFormTemplate"], descendants: true, static: true }, { propertyName: "dataGetterTemplate", first: true, predicate: ["dataGetterTemplate"], descendants: true, static: true }, { propertyName: "dialogFormula", first: true, predicate: ["dialogFormula"], descendants: true, static: true }, { propertyName: "buttonImagesKeyValueInputColumn", first: true, predicate: ["buttonImagesKeyValueInputColumn"], descendants: true, static: true }, { propertyName: "GenericListImagesImageTemplate", first: true, predicate: ["GenericListImagesImageTemplate"], descendants: true, static: true }, { propertyName: "GenericListImagesKeyTemplate", first: true, predicate: ["GenericListImagesKeyTemplate"], descendants: true, static: true }, { propertyName: "GenericListImagesValueTemplate", first: true, predicate: ["GenericListImagesValueTemplate"], descendants: true, static: true }, { propertyName: "imageSelectorAttachments", first: true, predicate: ["imageSelectorAttachments"], descendants: true }, { propertyName: "imageAttachment", first: true, predicate: ["imageAttachment"], descendants: true }, { propertyName: "dialogQE", first: true, predicate: ["dialogQE"], descendants: true, static: true }], ngImport: i0, template: "<!-- <div class=\"add-form-field bigwrapper\" style=\"max-height: 100vh !important; overflow-x: hidden; overflow-y: auto;\"> -->\r\n\r\n<mat-card class=\"add-form-field\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n {{indexField != null && indexField >= 0 ? \"Modifica\" : \"Aggiungi\"}} campo\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n\r\n <div class=\"container-fluid containerContent \">\r\n <form [formGroup]=\"fieldFormGroup\" style=\"height: 100%;\">\r\n <!--#region AREA PRINCIPALE -->\r\n <div class=\"row eqp-dform-add-form-field-main\">\r\n <!--#region TIPO CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 tipoCampo\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['FieldType'].status != 'VALID' && fieldFormGroup.controls['FieldType'].touched }\">\r\n Tipo campo *\r\n </mat-label>\r\n <eqp-select [enumData]=\"FieldTypeEnum\" [(ngModelInput)]=\"field.FieldType\"\r\n [showCancelButton]=\"false\" (ngModelInputChange)=\"onFieldTypeChange()\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'FieldType'\"\r\n [enumDataToExclude]=\"fieldTypesToExclude\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO CAMPO -->\r\n\r\n <!--#region CODICE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['Label'].status != 'VALID' && fieldFormGroup.controls['Label'].touched }\">\r\n Codice *\r\n </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"Label\" required matInput [(ngModel)]=\"field.Label\"\r\n (keypress)=\"omit_special_char($event)\" spellcheck=\"false\" autocomplete=\"off\"\r\n (focusout)=\"stringSanitizer(field.Label)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Label') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['pattern']\">\r\n Si possono inserire solo lettere a-z\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion CODICE -->\r\n\r\n <!--#region DESCRIZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['Description'].status != 'VALID' && fieldFormGroup.controls['Description'].touched }\">\r\n Descrizione *\r\n </mat-label>\r\n <mat-form-field>\r\n <input name=\"Description\" formControlName=\"Description\" required matInput\r\n [(ngModel)]=\"field.Description\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Description)\">\r\n <!-- <mat-error *ngIf=\"!field.Description.valid && field.FormFormGroup.controls[field.Description].touched\"> -->\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Description') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Description'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Description'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion DESCRIZIONE -->\r\n\r\n <!--#region SEZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\" *ngIf=\"formFieldsGroups\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['FieldGroup'].status != 'VALID' && fieldFormGroup.controls['FieldGroup'].touched }\">Sezione\r\n *</mat-label>\r\n <eqp-select [arrayData]=\"formFieldsGroups\" [(ngModelInput)]=\"field.FieldGroup\"\r\n [arrayKeyProperty]=\"'Name'\" [arrayValueProperty]=\"'Name'\" [formGroupInput]=\"fieldFormGroup\"\r\n [formControlNameInput]=\"'FieldGroup'\" required>\r\n </eqp-select>\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldGroup') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['FieldGroup'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </div>\r\n <!--#endregion SEZIONE -->\r\n\r\n <!--#region OBBLIGATORIO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Required\" formControlName=\"Required\"\r\n color=\"primary\">\r\n Obbligatorio\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion OBBLIGATORIO -->\r\n\r\n <!--#region READONLY -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Readonly\" formControlName=\"Readonly\"\r\n color=\"primary\">\r\n ReadOnly\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion READONLY -->\r\n\r\n </div>\r\n <!--#endregion AREA PRINCIPALE -->\r\n\r\n <!--#region AREA TABS -->\r\n <mat-tab-group class=\"eqp-dform-add-form-field-tabs\" mat-stretch-tabs=\"false\" mat-align-tabs=\"start\">\r\n <!--#region STILE COMPILAZIONE -->\r\n <mat-tab label=\"Stile Compilazione\">\r\n <div class=\"row\">\r\n\r\n <!--#region LARGHEZZA CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Larghezza campo</mat-label>\r\n <eqp-select [arrayData]=\"availableColSpanSizesCompilazione\" [(ngModelInput)]=\"field.ColSpanSizes\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n (ngModelInputChange)=\"onColSpanSizeSelect()\" [isMultiSelect]=\"true\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'ColSpanSizes'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion LARGHEZZA CAMPO -->\r\n\r\n <!--#region LABEL CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Label css </mat-label>\r\n <mat-form-field>\r\n <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" matInput\r\n [(ngModel)]=\"field.LabelstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.LabelstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('LabelstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['LabelstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LABEL CSS -->\r\n\r\n <!--#region FIELD CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Field css </mat-label>\r\n <mat-form-field>\r\n <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" matInput\r\n [(ngModel)]=\"field.FieldstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.FieldstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['FieldstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FIELD CSS -->\r\n \r\n <!--#region VISIBLE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n <div class=\" align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n Visibile\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n <!--#endregion VISIBLE -->\r\n\r\n <!--#region INVISIBILE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"field.InListView\">\r\n <div class=\" align-self-center\">\r\n Tipo di invisibilit\u00E0 del campo\r\n <eqp-select [enumData]=\"fieldInvisibilityEnum\" [(ngModelInput)]=\"field.Invisibility\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'Invisibility'\">\r\n </eqp-select>\r\n </div>\r\n </div>\r\n <!--#endregion INVISIBLE -->\r\n\r\n <!--#region VISIBLE IF -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> VisibleIf </mat-label>\r\n <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('VisibleIf') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['VisibleIf'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput [(ngModel)]=\"field.VisibleIf\"\r\n [matAutocomplete]=\"VisibleIfAutocomplete\" (keyup)=\"setVisibleIfAutocompleteOptions($event)\"\r\n (focus)=\"setVisibleIfAutocompleteOptions(null)\" (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-autocomplete #VisibleIfAutocomplete=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of VisibleIfAutocompleteOptions\" [value]=\"option.value\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field> -->\r\n </div>\r\n <!--#endregion VISIBLE IF -->\r\n\r\n <!--#region TOOLTIP -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Tooltip </mat-label>\r\n <mat-form-field>\r\n <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput [(ngModel)]=\"field.Tooltip\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Tooltip') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Tooltip'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['Tooltip'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion TOOLTIP -->\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion STILE COMPILAZIONE -->\r\n\r\n <!--#region STILE DELLA RISPSOTA -->\r\n <mat-tab label=\"Stile Risposta\">\r\n <div class=\"row\">\r\n\r\n <!--#region LARGHEZZA CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Larghezza campo</mat-label>\r\n <eqp-select [arrayData]=\"availableColSpanSizesRisposta\" [(ngModelInput)]=\"field.AnswerStyle.ColSpanSizes\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n (ngModelInputChange)=\"onColSpanSizeSelect()\" [isMultiSelect]=\"true\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AnswerStyleColSpanSizes'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion LARGHEZZA CAMPO -->\r\n\r\n <!--#region LABEL CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Label css </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleLabelstyleCSS\" formControlName=\"AnswerStyleLabelstyleCSS\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.LabelstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.LabelstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('LabelstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleLabelstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LABEL CSS -->\r\n\r\n <!--#region FIELD CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Field css </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleFieldstyleCSS\" formControlName=\"AnswerStyleFieldstyleCSS\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.FieldstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.FieldstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleFieldstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FIELD CSS -->\r\n\r\n <!--#region VISIBLE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"(field.AnswerStyle.VisibleIf != null || field.AnswerStyle.VisibleIf != undefined) && field.AnswerStyle.VisibleIf != ''\">\r\n <div class=\" align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.AnswerStyle.InListView\" formControlName=\"AnswerStyleInListView\"\r\n color=\"primary\" [disabled]=\"fieldFormGroup.controls['AnswerStyleInListView'].disabled\">\r\n Visibile\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n <!--#endregion VISIBLE -->\r\n \r\n <!--#region INVISIBILE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"field.AnswerStyle.InListView\">\r\n <div class=\" align-self-center\">\r\n Tipo di invisibilit\u00E0 del campo\r\n <eqp-select [enumData]=\"fieldInvisibilityEnum\" [(ngModelInput)]=\"field.AnswerStyle.Invisibility\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AnswerStyleInvisibility'\">\r\n </eqp-select>\r\n </div>\r\n </div>\r\n <!--#endregion INVISIBLE -->\r\n\r\n <!--#region VISIBLE IF -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> VisibleIf </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleVisibleIf\" formControlName=\"AnswerStyleVisibleIf\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.VisibleIf\" (click)=\"openAnswerStyleVisibleIfDialog()\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.VisibleIf)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('VisibleIf') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleVisibleIf'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput [(ngModel)]=\"field.VisibleIf\"\r\n [matAutocomplete]=\"VisibleIfAutocomplete\" (keyup)=\"setVisibleIfAutocompleteOptions($event)\"\r\n (focus)=\"setVisibleIfAutocompleteOptions(null)\" (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-autocomplete #VisibleIfAutocomplete=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of VisibleIfAutocompleteOptions\" [value]=\"option.value\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field> -->\r\n </div>\r\n <!--#endregion VISIBLE IF -->\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion STILE DELLA RISPSOTA -->\r\n\r\n <!--#region SPECIFICHE -->\r\n <mat-tab label=\"Specifiche\">\r\n <div class=\"row\">\r\n <ng-container *ngTemplateOutlet=\"fieldTypeFormTemplate\">\r\n </ng-container>\r\n </div>\r\n </mat-tab>\r\n <!--#endregion SPECIFICHE -->\r\n\r\n <!--#region MODALITA' RECUPERO DATI -->\r\n <mat-tab label=\"Modalit\u00E0 recupero dati\">\r\n <div class=\"row\">\r\n\r\n\r\n\r\n <eqp-select [enumData]=\"dataGetterTypeEnum\" [(ngModelInput)]=\"field.DataGetter.DataGetterType\"\r\n [showCancelButton]=\"false\" (ngModelInputChange)=\"onDataGetterTypeChange()\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DataGetterType'\">\r\n </eqp-select>\r\n \r\n <div class=\"col-md-4\" [hidden]=\"field.DataGetter.DataGetterType != dataGetterTypeEnum.Manuale\">\r\n <mat-label> Valore di Default </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DataGetterValue\" matInput [(ngModel)]=\"field.DataGetter.DataGetterValue\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div>\r\n \r\n <div class=\"col-md-4\" [hidden]=\"field.DataGetter.DataGetterType != dataGetterTypeEnum.Formula\">\r\n <mat-label> Formula (Javascript) </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"Formula\" matInput [(ngModel)]=\"field.Formula\"\r\n (click)=\"openFormulaDialog()\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Formula)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Formula') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Formula'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Formula'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n \r\n <div class=\"col-md-4\" *ngIf=\"field.DataGetter.DataGetterType == dataGetterTypeEnum['Da database']\">\r\n \r\n <div class=\"col-12 mt-4 configuraQueryEditor\">\r\n <div class=\"row\">\r\n <div class=\"col-10\">Configura in Query Editor</div>\r\n <div class=\"col-2\">\r\n <button class=\"btn btn-primary\" (click)=\"openDBGetter()\" *ngIf=\"field.DataGetter.DataGetterValue == null\">Procedi</button>\r\n <button class=\"btn btn-success\" (click)=\"openDBGetter()\" *ngIf=\"field.DataGetter.DataGetterValue != null\">Modifica</button>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n <div class=\"col-6\">Seleziona colonna</div>\r\n <div class=\"col-6\">\r\n <eqp-select [arrayData]=\"columnKeys\" [(ngModelInput)]=\"field.DataGetter.DataGetterColumnForce\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n [showCancelButton]=\"true\">\r\n </eqp-select>\r\n </div> \r\n </div>\r\n \r\n </div>\r\n \r\n \r\n </div>\r\n \r\n <div class=\"col-md-4\" *ngIf=\"field.DataGetter.DataGetterType == dataGetterTypeEnum['Da modulo dinamico']\">\r\n \r\n <div class=\"col-12 mt-4\" *ngIf=\"forms.length > 0\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">Modulo</div>\r\n <div class=\"col-6\">\r\n <eqp-select [placeholder]=\"'Seleziona modulo'\" [arrayData]=\"forms\" [(ngModelInput)]=\"DMModule\" [isSearchable]=\"true\"\r\n [arrayKeyProperty]=\"'Code'\" [arrayValueProperty]=\"'Name'\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DMModule'\"\r\n (ngModelInputChange)=\"onChangeDMModule()\">\r\n </eqp-select>\r\n </div> \r\n </div>\r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null && DMModule != null\">\r\n <div class=\"col-6\">Campo</div>\r\n <div class=\"col-6\">\r\n <eqp-select [placeholder]=\"'Seleziona campo'\" [arrayData]=\"DMFields\" [(ngModelInput)]=\"DMField\" [isSearchable]=\"true\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'key'\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DMField'\"\r\n (ngModelInputChange)=\"onChangeDMField()\">\r\n </eqp-select>\r\n </div> \r\n </div>\r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n <div class=\"col-6\">Cardinalit\u00E0</div>\r\n <div class=\"col-6\">\r\n <eqp-select [enumData]=\"DMGetterCardinalities\" [(ngModelInput)]=\"field.DataGetter.DataGetterCardinality\"\r\n [showCancelButton]=\"false\">\r\n </eqp-select>\r\n </div> \r\n </div> \r\n \r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n <div class=\"col-6\">Contestualizzazione</div>\r\n <div class=\"col-6\">\r\n <eqp-select [arrayData]=\"contestualization\" [arrayKeyProperty]=\"'entityTableName'\" [arrayValueProperty]=\"'entityTableName'\" [(ngModelInput)]=\"field.DataGetter.DataGetterContestualization\"\r\n [showCancelButton]=\"true\" (ngModelInputChange)=\"onChangeDMContestualization()\">\r\n </eqp-select>\r\n </div> \r\n </div> \r\n \r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion MODALITA' RECUPERO DATI -->\r\n\r\n </mat-tab-group>\r\n <!--#region AREA TABS -->\r\n\r\n <!--#region listValueFieldFormTemplate vallues -->\r\n \r\n <!--#endregion listValueFieldFormTemplate vallues -->\r\n\r\n </form>\r\n </div>\r\n </mat-card-content>\r\n\r\n <mat-card-footer>\r\n\r\n <div class=\"d-flex justify-content-end mt-2 mb-1 me-3\"> \r\n <!-- <div class=\"buttonsForma\"> -->\r\n <button class=\"btn mat-raised-button cancel\" (click)=\"saveAndExitAddField(false)\" type=\"button\">\r\n Annulla\r\n </button>\r\n <span class=\"me-2\"></span>\r\n <button class=\"mr-2 save\" mat-raised-button color=\"primary\" (click)=\"saveAndExitAddField(true)\"\r\n [disabled]=\"disableSaveField()\" type=\"button\">\r\n Salva\r\n </button>\r\n <!-- </div> -->\r\n </div>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!-- </div> -->\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI DI TESTO -->\r\n<ng-template #textFieldFormTemplate>\r\n <!--#region MASCHERA -->\r\n <div class=\"col-sm-12 col-md-6\">\r\n <mat-label>Maschera</mat-label>\r\n <eqp-select [enumData]=\"TextMaskEnum\" [(ngModelInput)]=\"field.TextMask\" [formGroupInput]=\"fieldFormGroup\"\r\n [formControlNameInput]=\"'TextMask'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion MASCHERA -->\r\n\r\n <!--#region SPEECH TO TEXT -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\" [hidden]=\"field.Readonly\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Microphone\" formControlName=\"Microphone\" color=\"primary\">\r\n Speech-To-Text\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SPEECH TO TEXT -->\r\n\r\n <!--#region LUNGHEZZA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['MinLenght'].status != 'VALID' && fieldFormGroup.controls['MinLenght'].touched }\">\r\n Lunghezza minima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMin\" formControlName=\"MinLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MinLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MINIMA -->\r\n\r\n <!--#region LUNGHEZZA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['MaxLenght'].status != 'VALID' && fieldFormGroup.controls['MaxLenght'].touched }\">\r\n Lunghezza massima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMax\" formControlName=\"MaxLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MaxLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI DI TESTO -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 ETICHETTA -->\r\n<ng-template #labelFieldFormTemplate>\r\n\r\n <!--#region ETICHETTA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-form-field>\r\n\r\n <textarea name=\"Etichetta\" placeholder=\"Etichetta\" matInput formControlName=\"Etichetta\" [(ngModel)]=\"field.Etichetta\"></textarea>\r\n\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion ETICHETTA -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 ETICHETTA -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI AREA DI TESTO -->\r\n<ng-template #textareaFieldFormTemplate>\r\n <!--#region RIGHE -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Righe </mat-label>\r\n <mat-form-field class=\"righe\">\r\n <input id=\"rows\" formControlName=\"Rows\" type=\"number\" [min]=\"0\" matInput [(ngModel)]=\"field.Rows\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.Rows)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Rows') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Rows'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Rows'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion RIGHE -->\r\n\r\n <!--#region SpeechToText -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\" [hidden]=\"field.Readonly\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Microphone\" formControlName=\"Microphone\" color=\"primary\">\r\n Speech-To-Text\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SpeechToText -->\r\n\r\n <!--#region LUNGHEZZA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Lunghezza minima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMin\" formControlName=\"MinLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MinLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MINIMA -->\r\n\r\n <!--#region LUNGHEZZA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Lunghezza massima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMax\" formControlName=\"MaxLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MaxLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI AREA DI TESTO -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI BOOLEANI -->\r\n<ng-template #booleadFieldFormTemplate>\r\n <!--#region A TRE STATI -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsTristate\" formControlName=\"IsTristate\" color=\"primary\">\r\n A tre stati\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion A TRE STATI -->\r\n\r\n <!--#region TIPO PRESENTAZIONE -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label>Tipo di presentazione *</mat-label>\r\n <eqp-select [enumData]=\"BoolPresentantioEnum\" [(ngModelInput)]=\"field.PresetationType\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'PresetationType'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO PRESENTAZIONE -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI BOOLEANI -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI DATA -->\r\n<ng-template #dateFieldFormTemplate>\r\n <!--#region TIPO DI DATA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label>Tipo di data</mat-label>\r\n <eqp-select [enumData]=\"DateTimeTypeEnum\" [(ngModelInput)]=\"field.IsOnlyDate\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'IsOnlyDate'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO DI DATA -->\r\n\r\n <!--#region FORMATO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Formato </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DateFormat\" matInput [(ngModel)]=\"field.DateFormat\"\r\n [matTooltip]=\"'Indicare il formato seguendo la guida del pacchetto momentjs.'\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Formato)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Formato') }} -->\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FORMATO -->\r\n\r\n <!--#region DATA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label> Data minima </mat-label>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo data']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"mode.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Data e ora']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"mode.DATETIMEPICKER\" [outputFormat]=\"'DD/MM/YYYY HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo orario']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"mode.TIMEPICKER\" [outputFormat]=\"'HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <!--#endregion DATA MINIMA -->\r\n\r\n <!--#region DATA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label> Data massima </mat-label>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo data']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"mode.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Data e ora']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"mode.DATETIMEPICKER\" [outputFormat]=\"'DD/MM/YYYY HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo orario']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"mode.TIMEPICKER\" [outputFormat]=\"'HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <!--#endregion DATA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI DATA -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI NUMERICI -->\r\n<ng-template #numericFieldFormTemplate>\r\n <!--#region VALORE INTERO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsInteger\" formControlName=\"IsInteger\" color=\"primary\">\r\n Valore intero\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion VALORE INTERO -->\r\n\r\n <!--#region SEPARATORE DECIMALI -->\r\n <div *ngIf=\"!field.IsInteger\" class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Separatore decimali </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DecimalSeparator\" matInput [(ngModel)]=\"field.DecimalSeparator\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.DecimalSeparator)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('DecimalSeparator') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalSeparator'].errors?.['pattern']\">\r\n Non \u00E8 possibile inserire dei numeri.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalSeparator'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SEPARATORE DECIMALI -->\r\n\r\n <!--#region PRECISIONE DECIMALI -->\r\n <div *ngIf=\"!field.IsInteger\" class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Precisione decimali </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DecimalPrecision\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.DecimalPrecision\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.DecimalPrecision)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('DecimalPrecision') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalPrecision'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalPrecision'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion PRECISIONE DECIMALI -->\r\n\r\n <!--#region SEPARATORE MIGLIAIA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Separatore migliaia </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ThousandsSeparator\" matInput [(ngModel)]=\"field.ThousandsSeparator\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.ThousandsSeparator)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('ThousandsSeparator') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['ThousandsSeparator'].errors?.['pattern']\">\r\n Non \u00E8 possibile inserire dei numeri.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['ThousandsSeparator'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SEPARATORE MIGLIAIA -->\r\n\r\n <!--#region SIMBOLO VALUTA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n matTooltip=\"Simbolo prima del valore\"\r\n matTooltipClass=\"example-tooltip-uppercase\"\r\n > Simbolo valuta </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"CurrencySymbol\" matInput [(ngModel)]=\"field.CurrencySymbol\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.CurrencySymbol)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('CurrencySymbol') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['CurrencySymbol'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SIMBOLO VALUTA -->\r\n\r\n <!--#region UNITA DI MISURA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n matTooltip=\"Simbolo dopo il valore\"\r\n matTooltipClass=\"example-tooltip-uppercase\"\r\n > Unit\u00E0 di misura </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MeasureUnit\" matInput [(ngModel)]=\"field.MeasureUnit\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.MeasureUnit)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MeasureUnit') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MeasureUnit'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion UNITA DI MISURA -->\r\n\r\n <!--#region VALORE MINIMO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Valore minimo </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MinValue\" type=\"number\" matInput [(ngModel)]=\"field.MinValue\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinValue)\"\r\n pattern=\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinValue') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinValue'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinValue'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion VALORE MINIMO -->\r\n\r\n <!--#region VALORE MASSIMO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Valore massimo </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MaxValue\" type=\"number\" matInput [(ngModel)]=\"field.MaxValue\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxValue)\"\r\n pattern=\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxValue') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxValue'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxValue'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion VALORE MASSIMO -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI NUMERICI -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI ALLEGATO -->\r\n<ng-template #attachmentFieldFormTemplate>\r\n <!--#region ALLEGATI MULTIPLI -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiAttach\" formControlName=\"IsMultiAttach\" color=\"primary\">\r\n Allegati multipli\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion ALLEGATI MULTIPLI -->\r\n\r\n <!--#region ESTENSIONI ACCETTATE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Estensioni accettate</mat-label>\r\n <eqp-select [arrayData]=\"AvailableFileExtensions.concat(AvailableImageExtensions)\"\r\n [(ngModelInput)]=\"field.AllowedExtensions\" [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AllowedExtensions'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion ESTENSIONI ACCETTATE -->\r\n\r\n <!-- <div class=\"col-sm-12 mt-2\">\r\n <div class=\"row mt-2\">\r\n <div class=\"col-sm-12 col-md-6\">\r\n <div class=\"header-title-standard\">\r\n Elenco metadata\r\n </div>\r\n </div>\r\n <div class=\"col-sm-12 col-md-6 text-right buttonsForm\">\r\n <button class=\"btn btn-primary save\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"openMetadataDialog()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px;\">Aggiungi allegato</span>\r\n </button>\r\n </div>\r\n </div>\r\n <eqp-table #metadataFieldsTable [createMatCard]=\"false\" [columns]=\"metadataColumns\"\r\n [data]=\"field.MetadataFields\" [emptyTableMessage]=\"'Nessun metadata inserito'\" [searchText]=\"'Cerca'\">\r\n </eqp-table>\r\n </div> -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI ALLEGATO -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI LISTA DI VALORI -->\r\n<ng-template #listValueFieldFormTemplate>\r\n <!--#region SCELTA MULTIPLA -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiChoiche\" formControlName=\"IsMultiChoiche\" color=\"primary\">\r\n Scelta multipla\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SCELTA MULTIPLA -->\r\n\r\n <!--#region TIPO DI PRESENTAZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Tipo di presentazione*</mat-label>\r\n <eqp-select [enumData]=\"ListPresentationEnum\" [(ngModelInput)]=\"field.PresentationMode\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'PresentationMode'\"\r\n (ngModelInputChange)=\"onPresentationModeChange()\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO DI PRESENTAZIONE -->\r\n\r\n\r\n <!--#region GESTIONE OPZIONI -->\r\n <div class=\"col-sm-12 mt-2\">\r\n\r\n <mat-label> area dei valori da inserire </mat-label>\r\n <mat-form-field>\r\n <textarea matInput \r\n placeholder=\"key1|value1;key2|value2\" \r\n [(ngModel)]=\"field.ValueString\"\r\n spellcheck=\"false\" \r\n autocomplete=\"off\"\r\n >\r\n </textarea>\r\n </mat-form-field>\r\n\r\n <div class=\"row\" *ngIf=\"countValuePairs(field.ValuePairs) > 0\">\r\n <h4 class=\"key-value-list-section-title\"> </h4>\r\n <div class=\"col-md-4\">\r\n <mat-label> Label opzione (invio per confermare)</mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"keyValueObject.key\" (keyup)=\"onMultiSelectInputKeyup($event, null)\"\r\n spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <mat-label> Valore opzione (invio per confermare)</mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"keyValueObject.value\" (keyup)=\"onMultiSelectInputKeyup($event, null)\"\r\n spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-4 align-self-center\">\r\n <span class=\"mr-3\">Opzioni inserite:</span>\r\n <ul class=\"value-pairs-list\">\r\n <li *ngFor=\"let keyValuePair of getDictionaryKeyValue()\">\r\n <mat-icon class=\"mr-1\" (click)=\"deleteKeyFromDictionary(keyValuePair.key)\">close\r\n </mat-icon>\r\n <span><b>Label: </b> {{keyValuePair.key}} - <b>Valore: </b> {{keyValuePair.value}}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div> \r\n\r\n </div> \r\n <!--#endregion GESTIONE OPZIONI -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI LISTA DI VALORI -->\r\n\r\n\r\n\r\n\r\n<!--#region FORM LISTA IMMAGINI -->\r\n<ng-template #imageFieldSelectorFormTemplate>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-3 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Altezza in Pixel delle immagini scalate </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ResizedImagesHeightPx') }}\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n <div class=\"col-3 col-xs-12 col-middle\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiChoiche\" formControlName=\"IsMultiChoiche\" color=\"primary\">\r\n Scelta multipla\r\n </mat-slide-toggle>\r\n </div> \r\n </div>\r\n\r\n <eqp-attachments #imageSelectorAttachments [attachmentsList]=\"field.AttachmentList\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"true\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\" (localEditedAttachments)=\"catchButtonImagesChange($event)\"\r\n [attachmentsColumns]=\"configColumnListImages\">\r\n </eqp-attachments>\r\n\r\n \r\n</ng-template>\r\n<!--#endregion FORM LISTA IMMAGINI -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI IMMAGINE -->\r\n<ng-template #imageFieldFormTemplate>\r\n <div class=\"row\">\r\n <div class=\"col-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.EnableDrawing\" formControlName=\"EnableDrawing\" color=\"primary\">\r\n Immagine disegnabile?\r\n </mat-slide-toggle>\r\n </div> \r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-4 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Altezza in Pixel delle immagini scalate </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ResizedImagesHeightPx') }}\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Etichetta </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonKey\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Valore </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonValue\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n </div> \r\n\r\n <div class=\"col-sm-12 col-md-8 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <eqp-attachments [attachmentsList]=\"[field.DynAttachment]\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"false\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\"\r\n (localEditedAttachments)=\"catchButtonImageChange($event)\" (onDeleteAttachment)=\"deleteImage($event)\" #imageAttachment>\r\n </eqp-attachments>\r\n <ng-template #readonlyProfileImage>\r\n <img *ngIf=\"field.DynAttachment\"\r\n src=\"data:{{field.DynAttachment.FileContentType}};base64,{{field.DynAttachment.FileDataBase64}}\"\r\n alt=\"\">\r\n </ng-template> \r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI IMMAGINE -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI IMMAGINE CON MARKERS -->\r\n<ng-template #imageWithMarkersFieldFormTemplate>\r\n <div class=\"row\">\r\n <div class=\"col-4 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Altezza in Pixel delle immagini scalate </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ResizedImagesHeightPx') }}\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Etichetta </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonKey\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Valore </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonValue\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n </div> \r\n\r\n <div class=\"col-sm-12 col-md-8 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <eqp-attachments [attachmentsList]=\"[field.DynAttachment]\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"false\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\"\r\n (localEditedAttachments)=\"catchButtonImageWithMarkersChange($event)\" (onDeleteAttachment)=\"deleteImage($event)\" #imageAttachment>\r\n </eqp-attachments>\r\n <ng-template #readonlyProfileImage>\r\n <img *ngIf=\"field.DynAttachment\"\r\n src=\"data:{{field.DynAttachment.FileContentType}};base64,{{field.DynAttachment.FileDataBase64}}\"\r\n alt=\"\">\r\n </ng-template> \r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI IMMAGINE CON MARKERS -->\r\n\r\n\r\n\r\n\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI LOOKUP -->\r\n<ng-template #lookupFieldFormTemplate>\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.UseAsGetOrDiscard\" formControlName=\"UseAsGetOrDiscard\" color=\"primary\"\r\n matTooltip=\"Se true la lookup viene visualizzata in una modale per lo scegli scarta\">\r\n Usa per scegli o scarta\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"col-sm-12 col-md-4 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Nome entit\u00E0 </mat-label>\r\n <mat-form-field matTooltip=\"Nome dell'entit\u00E0 relazionata\">\r\n <input formControlName=\"EntitySourceName\" required matInput [(ngModel)]=\"field.EntitySourceName\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.EntitySourceName)\">\r\n <mat-error>\r\n {{ getFormValidationErrors('EntitySourceName') }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-sm-12 mt-2\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <mat-label> Nomi dei campi (invio per confermare) </mat-label>\r\n <mat-form-field\r\n matTooltip=\"Elenco di campi ordinato che verr\u00E0 visualizzato nella lookup (premere invio per confermare)\">\r\n <input matInput (keyup)=\"onMultiSelectInputKeyup($event, 'FieldNames')\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-8 align-self-center\">\r\n <span class=\"mr-3\">Nomi selezionati:</span>\r\n <div class=\"extension-container\" *ngFor=\"let extension of field.FieldNames; let i = index\">\r\n <span>{{extension}}</span>\r\n <mat-icon class=\"ml-1\" (click)=\"field.FieldNames.splice(i,1)\">close\r\n </mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI LOOKUP -->\r\n\r\n<!-- DIALOG PER AGGIUNGERE UN METADATA NEI CAMPI DI TIPO ALLEGATO O IMMAGINE -->\r\n<!-- <ng-template #dialogMetadata>\r\n <eqp-dynamic-module-add-form-field [field]=\"selectedMetadata\" [availableFields]=\"availableFields\"\r\n [indexField]=\"indexSelectedMetadata\" (saveFieldEvent)=\"onSaveMetadata($event)\" [fieldTypesToExclude]=\"[6,7,10]\">\r\n </eqp-dynamic-module-add-form-field>\r\n</ng-template> -->\r\n\r\n<ng-template #buttonImagesKeyValueInputColumn let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> {{col.display}} </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\" required spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n</ng-template>\r\n<!--DIALOG PER SEMPLIFICARE LA SCRITTURA DEL CAMPO FORMULA-->\r\n<ng-template #dialogFormula>\r\n <eqp-dynamic-module-add-formula-component>\r\n </eqp-dynamic-module-add-formula-component>\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesImageTemplate let-row=\"row\" let-col=\"col\">\r\n <img src=\"data:image/jpeg;base64, {{row[col.key]}}\" class=\"GenericListImagesImageTemplate\">\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesKeyTemplate let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> Chiave </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\">\r\n </mat-form-field>\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesValueTemplate let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> Valore </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\">\r\n </mat-form-field>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER QUERY EDITOR -->\r\n<ng-template #dialogQE>\r\n <ng-template [appDynamicLoader] [data]=\"QueryEditorComponent\" (out)=\"onExternalComponentOut($event);\">\r\n </ng-template>\r\n</ng-template>\r\n ", styles: [".mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale3d(0,0,0);background-color:var(--mat-ripple-color, rgba(0, 0, 0, .1))}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.mat-app-background{background-color:var(--mat-app-background-color, transparent);color:var(--mat-app-text-color, inherit)}.add-form-field{max-height:100%;height:100%;overflow:hidden}.add-form-field mat-card-header{min-height:3rem}.add-form-field mat-card-content{height:calc(100% - 6rem);max-height:calc(100% - 6rem);overflow:auto;margin:0;padding:0 2rem 2rem}.add-form-field mat-card-content .eqp-dform-add-form-field-main{height:60%}.add-form-field mat-card-content .eqp-dform-add-form-field-tabs{height:40%}.add-form-field mat-card-footer{min-height:3rem}.extension-container{display:inline-block;font-size:15px;border:1px solid var(--primary);border-radius:15px;margin-right:10px}.extension-container mat-icon{vertical-align:middle;font-size:15px;height:15px;width:15px;color:var(--danger);margin-right:10px;cursor:pointer}.extension-container span{margin-left:10px}.key-value-list-section-title{background:linear-gradient(to right,var(--gray) 0%,rgb(255,255,255) 100%) left bottom #fff no-repeat;background-size:100% 1px}.value-pairs-list{list-style:none;padding:0}.value-pairs-list mat-icon{vertical-align:middle;font-size:15px;height:15px;width:15px;color:var(--danger);margin-right:10px;cursor:pointer}::ng-deep .mat-dialog-container{border-radius:10px}.row.title{background-color:#ebebeb;padding:20px 0 20px 50px}.row.title mat-icon.add{background:#fff;color:#7b7b7b;height:40px;width:40px;border-radius:10px;font-size:27px;padding:7px 6px 6px 7px;margin:0 7px 0 0}.row.title .header-title-standard{display:flex;align-items:center;font-size:19px;font-weight:700;color:gray}.row:not(.title){margin:15px 0 0}form{margin:25px 0 0}.col-middle{display:flex;align-items:center}::ng-deep .mat-select-arrow{color:transparent!important}input[type=number]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none}.increasableValues{display:flex}.increasableValues .col-sm-12{display:flex;flex-direction:column;margin:0 3em 0 0}.increasableValues .col-sm-12 .mat-form-field{height:79px;line-height:34px;width:50%}.increasableValues .col-sm-12 .mat-form-field ::ng-deep .mat-form-field-flex{width:230px;border:1px solid #e7e7e9;border-radius:10px;padding:7px 0 0 20px!important;margin-top:10px;background-color:#fff}.increasableValues .col-sm-12 .mat-form-field ::ng-deep .mat-form-field-flex .mat-form-field-infix{display:flex;margin:-10px 0 0}.increasableValues .col-sm-12 .mat-form-field ::ng-deep .mat-form-field-flex .mat-form-field-infix input{margin:0;border:none;height:100%}.increasableValues .col-sm-12 .mat-form-field div.buttons{display:flex;flex-direction:column;margin:-10px 0 0;border-right:1px solid #F4F4F4;padding:10px 14px 0 0}.increasableValues .col-sm-12 .mat-form-field div.buttons button.up{height:17px;width:21px;background:url(/assets/images/arrow.png) no-repeat;background-size:20px;background-position-y:1px;background-position-x:1px;-webkit-transform:rotate(180deg);border:none;opacity:.3;cursor:pointer}.increasableValues .col-sm-12 .mat-form-field div.buttons button.down{height:50px;width:23px;background:url(/assets/images/arrow.png) no-repeat no-repeat;background-size:20px;border:none;opacity:.3;background-position-y:21px;background-position-x:0px;cursor:pointer}.increasableValues .col-sm-12 .mat-form-field input{margin:-14px 0 0 63px;font-size:18px}.second .col-sm-12{margin:0 1em 0 0}.date ::ng-deep mat-form-field .mat-form-field-wrapper .mat-form-field-label-wrapper label{display:none}.date ::ng-deep mat-form-field .mat-form-field-wrapper .mat-form-field-suffix{display:inline}.GenericListImagesImageTemplate{height:100%}.configuraQueryEditor{display:flex;justify-content:center;flex-flow:column}eqp-attachments ::ng-deep div button{padding:5px 35px;background:linear-gradient(to right,#1e31eb,#693dda);border-radius:10px}eqp-attachments ::ng-deep div button span mat-icon{margin-right:5px}eqp-attachments ::ng-deep div button.eqp-attachments-delete-btn{color:#fff}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .row:first-child{padding:20px 40px;background-color:#ebebeb;color:gray;font-size:19px;font-weight:700}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .mat-form-field-label-wrapper label{margin-top:21px;margin-left:25px}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .btn-primary[disabled]{padding:7px 35px;border-radius:10px;font-size:14px;background-color:#dbdbdc!important;color:#000;background:none}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .btn-primary:not(disabled){padding:7px 35px;border-radius:10px;font-size:14px;background:linear-gradient(to right,#1e31eb,#693dda);color:#fff}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form button{margin:0 10px 0 0!important;border:1px solid #1E31EB;padding:7px 35px;border-radius:10px;font-size:14px}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form button[disabled]{border:none}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .ng-star-inserted .justify-content-center button{padding:4px;margin:0;border:none;left:8px}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .row:last-child{padding:50px 20px 20px 0}eqp-table ::ng-deep mat-form-field:not(.mat-paginator-page-size-select) .mat-form-field-wrapper input{background-color:#ebebeb!important;background:url(data:image/png;base64,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) no-repeat;background-size:19px;background-position:19px;padding:15px 0 15px 53px!important}eqp-table ::ng-deep mat-form-field:not(.mat-paginator-page-size-select) .mat-form-field-wrapper input:focus{background-color:#fff!important;border:1px solid #e7e7e9}eqp-table ::ng-deep mat-form-field:not(.mat-paginator-page-size-select) .mat-form-field-wrapper .mat-form-field-label-wrapper label{margin-top:21px;margin-left:55px}eqp-table ::ng-deep mat-header-row{background-color:#ebebeb;border-bottom-width:0px}eqp-table ::ng-deep mat-header-row .mat-column-Required{flex:none!important}eqp-table ::ng-deep .mat-sort-header-button{color:#3b3a3b;font-size:15px}eqp-table ::ng-deep .mat-row{background-color:#fff;margin:10px 0;box-shadow:0 3px 7px -3px #0003;padding:5px 0}eqp-table ::ng-deep .mat-row .mat-column-Required{flex:0 0 8%!important}eqp-table ::ng-deep .mat-row mat-cell eqp-select{margin-top:16px}eqp-table ::ng-deep .mat-row mat-cell eqp-select .mat-form-field-wrapper{padding-bottom:0}eqp-table ::ng-deep .mat-row .mat-cell:last-child span i.success-color{background-color:#383fec;color:#fff!important;padding:6px;border-radius:3px}@media screen and (max-width: 1100px){.row:not(.title){margin:0!important}.second{display:flex;flex-direction:column}.second .col-sm-12{margin:0}.buttonsForm{padding:0 30px 20px 0;margin:50px 0 0}}@media screen and (max-width: 766px){.increasableValues{display:flex;flex-direction:column}.increasableValues .col-sm-12{margin:0 0 -1.5em}.second{display:flex;flex-direction:column}.second .col-sm-12{margin:0 0 -3.4em}.buttonsForm{margin:55px 0 0!important;padding:0 13px 20px 0;transform:translateY(110px)}}@media screen and (max-width: 577px){.increasableValues .col-sm-12{margin:0 0 1.5em}}:host ::ng-deep .mat-input-element{width:100%;width:-moz-available;width:-webkit-fill-available;width:fill-available}\n"], dependencies: [{ kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i9.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i10.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i10.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i10.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i10.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i10.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i11.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i11.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i13.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i14.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i14.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i14.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i15.EqpAttachmentsComponent, selector: "eqp-attachments", inputs: ["disableAction", "showHeader", "headerTitle", "attachmentsList", "showMatCard", "multipleAttachment", "loadMultipleFiles", "attachmentsColumns", "emptyTableMessage", "allowOnlyImages", "acceptedFileTypes", "isDisabled", "showInlinePreview", "getAttachmentEndpoint", "productionBaseUrl", "compressionOptions", "allowedTypes", "isEqpTableMultiLanguage", "tablePaginatorVisible", "isTableSearcheable", "tablePaginatorSize", "separatedUploadButtons", "showPreview", "singleAttachmentDragAndDrop", "cropOptions", "cropDialogClass", "downloadTooltipPosition", "openLinkLabel", "addButtonLabel", "downloadLabel", "deleteLabel", "fileNameLabel", "previewLabel", "uploadFileLabel", "confirmLabel", "abortLabel", "saveLabel", "exitLabel", "uploadWithDropboxLabel", "cropLabel", "eqpTableSearchText", "deleteDialogTitle", "deleteDialogMessage", "noImageSelectedErrorMessage", "wrongTypeSelectedErrorMessage", "videoPreviewErrorMessage", "flipHorinzontalLabel", "flipVerticalLabel", "rotateRightLabel", "rotateLeftLabel"], outputs: ["localEditedAttachments", "abortAddAttachment", "downloadAttachment", "onDeleteAttachment"] }, { kind: "component", type: i2.EqpSelectComponent, selector: "eqp-select", inputs: ["placeholder", "enumData", "enumDataToExclude", "arrayData", "arrayKeyProperty", "arrayValueProperty", "ngModelOptions", "ngModelInput", "formGroupInput", "formControlNameInput", "isRequired", "isDisabled", "isMultiLanguage", "multilanguagePrefixKey", "isAlphabeticalOrderable", "suffixIcon", "prefixIcon", "isMultiSelect", "showCancelButton", "isSearchable", "noResultSearchText", "isReadonly", "isSearchWhileComposing", "appendToInput", "dropdownPosition", "selectOnTab", "selectAll", "selectAllText", "selectableGroupAsModel", "clearAllText", "customOption", "customLabel", "class", "data"], outputs: ["ngModelInputChange", "formControlChange"] }, { kind: "component", type: i16.TmwDateTimePickerComponent, selector: "tmw-datetimepicker", inputs: ["debugMode", "ngModelInput", "formGroupInput", "formControlNameInput", "pickerMode", "timeType", "label", "placeholder", "hint", "minDate", "maxDate", "locale", "inputFormat", "outputFormat", "forSaveLocalOnDB", "disabled", "readonly", "currentDateAsDefault", "showSpinners", "touchUi", "enableMeridian", "hideTime", "stepHour", "showHours", "hourLabel", "stepMinute", "showMinutes", "minuteLabel", "stepSecond", "showSeconds", "secondLabel", "disableMinute", "dayLabel", "monthLabel", "yearLabel", "highLightedDates", "highLightedAriaFormat"], outputs: ["ngModelInputChange"] }, { kind: "component", type: i17.AddFormulaComponent, selector: "eqp-dynamic-module-add-formula-component" }, { kind: "directive", type: i18.DynamicLoaderDirective, selector: "[appDynamicLoader]", inputs: ["data"], outputs: ["out"] }] });
|
|
1173
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AddFormFieldComponent, selector: "eqp-dynamic-module-add-form-field", inputs: { form: "form", endPointConfiguration: "endPointConfiguration", field: "field", indexField: "indexField", formFieldsGroups: "formFieldsGroups", availableFields: "availableFields", fieldTypesToExclude: "fieldTypesToExclude", QueryEditorComponent: "QueryEditorComponent", contestualization: "contestualization" }, outputs: { out: "out", saveFieldEvent: "saveFieldEvent" }, viewQueries: [{ propertyName: "textFieldFormTemplate", first: true, predicate: ["textFieldFormTemplate"], descendants: true, static: true }, { propertyName: "labelFieldFormTemplate", first: true, predicate: ["labelFieldFormTemplate"], descendants: true, static: true }, { propertyName: "textareaFieldFormTemplate", first: true, predicate: ["textareaFieldFormTemplate"], descendants: true, static: true }, { propertyName: "booleadFieldFormTemplate", first: true, predicate: ["booleadFieldFormTemplate"], descendants: true, static: true }, { propertyName: "dateFieldFormTemplate", first: true, predicate: ["dateFieldFormTemplate"], descendants: true, static: true }, { propertyName: "numericFieldFormTemplate", first: true, predicate: ["numericFieldFormTemplate"], descendants: true, static: true }, { propertyName: "attachmentFieldFormTemplate", first: true, predicate: ["attachmentFieldFormTemplate"], descendants: true, static: true }, { propertyName: "imageFieldFormTemplate", first: true, predicate: ["imageFieldFormTemplate"], descendants: true, static: true }, { propertyName: "imageWithMarkersFieldFormTemplate", first: true, predicate: ["imageWithMarkersFieldFormTemplate"], descendants: true, static: true }, { propertyName: "imageFieldSelectorFormTemplate", first: true, predicate: ["imageFieldSelectorFormTemplate"], descendants: true, static: true }, { propertyName: "listValueFieldFormTemplate", first: true, predicate: ["listValueFieldFormTemplate"], descendants: true, static: true }, { propertyName: "lookupFieldFormTemplate", first: true, predicate: ["lookupFieldFormTemplate"], descendants: true, static: true }, { propertyName: "dataGetterTemplate", first: true, predicate: ["dataGetterTemplate"], descendants: true, static: true }, { propertyName: "dialogFormula", first: true, predicate: ["dialogFormula"], descendants: true, static: true }, { propertyName: "buttonImagesKeyValueInputColumn", first: true, predicate: ["buttonImagesKeyValueInputColumn"], descendants: true, static: true }, { propertyName: "GenericListImagesImageTemplate", first: true, predicate: ["GenericListImagesImageTemplate"], descendants: true, static: true }, { propertyName: "GenericListImagesKeyTemplate", first: true, predicate: ["GenericListImagesKeyTemplate"], descendants: true, static: true }, { propertyName: "GenericListImagesValueTemplate", first: true, predicate: ["GenericListImagesValueTemplate"], descendants: true, static: true }, { propertyName: "imageSelectorAttachments", first: true, predicate: ["imageSelectorAttachments"], descendants: true }, { propertyName: "imageAttachment", first: true, predicate: ["imageAttachment"], descendants: true }, { propertyName: "dialogQE", first: true, predicate: ["dialogQE"], descendants: true, static: true }], ngImport: i0, template: "<!-- <div class=\"add-form-field bigwrapper\" style=\"max-height: 100vh !important; overflow-x: hidden; overflow-y: auto;\"> -->\r\n\r\n<mat-card class=\"add-form-field\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n {{indexField != null && indexField >= 0 ? \"Modifica\" : \"Aggiungi\"}} campo\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n\r\n <div class=\"container-fluid containerContent \">\r\n <form [formGroup]=\"fieldFormGroup\" style=\"height: 100%;\">\r\n <!--#region AREA PRINCIPALE -->\r\n <div class=\"row eqp-dform-add-form-field-main\">\r\n <!--#region TIPO CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 tipoCampo\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['FieldType'].status != 'VALID' && fieldFormGroup.controls['FieldType'].touched }\">\r\n Tipo campo *\r\n </mat-label>\r\n <eqp-select [enumData]=\"FieldTypeEnum\" [(ngModelInput)]=\"field.FieldType\"\r\n [showCancelButton]=\"false\" (ngModelInputChange)=\"onFieldTypeChange()\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'FieldType'\"\r\n [enumDataToExclude]=\"fieldTypesToExclude\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO CAMPO -->\r\n\r\n <!--#region CODICE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['Label'].status != 'VALID' && fieldFormGroup.controls['Label'].touched }\">\r\n Codice *\r\n </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"Label\" required matInput [(ngModel)]=\"field.Label\"\r\n (keypress)=\"omit_special_char($event)\" spellcheck=\"false\" autocomplete=\"off\"\r\n (focusout)=\"stringSanitizer(field.Label)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Label') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['pattern']\">\r\n Si possono inserire solo lettere a-z\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion CODICE -->\r\n\r\n <!--#region DESCRIZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['Description'].status != 'VALID' && fieldFormGroup.controls['Description'].touched }\">\r\n Descrizione *\r\n </mat-label>\r\n <mat-form-field>\r\n <input name=\"Description\" formControlName=\"Description\" required matInput\r\n [(ngModel)]=\"field.Description\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Description)\">\r\n <!-- <mat-error *ngIf=\"!field.Description.valid && field.FormFormGroup.controls[field.Description].touched\"> -->\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Description') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Description'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Description'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion DESCRIZIONE -->\r\n\r\n <!--#region SEZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\" *ngIf=\"formFieldsGroups\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['FieldGroup'].status != 'VALID' && fieldFormGroup.controls['FieldGroup'].touched }\">Sezione\r\n *</mat-label>\r\n <eqp-select [arrayData]=\"formFieldsGroups\" [(ngModelInput)]=\"field.FieldGroup\"\r\n [arrayKeyProperty]=\"'Name'\" [arrayValueProperty]=\"'Name'\" [formGroupInput]=\"fieldFormGroup\"\r\n [formControlNameInput]=\"'FieldGroup'\" required [includeFullObject]=\"false\">\r\n </eqp-select>\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldGroup') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['FieldGroup'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </div>\r\n <!--#endregion SEZIONE -->\r\n\r\n <!--#region OBBLIGATORIO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Required\" formControlName=\"Required\"\r\n color=\"primary\">\r\n Obbligatorio\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion OBBLIGATORIO -->\r\n\r\n <!--#region READONLY -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Readonly\" formControlName=\"Readonly\"\r\n color=\"primary\">\r\n ReadOnly\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion READONLY -->\r\n\r\n </div>\r\n <!--#endregion AREA PRINCIPALE -->\r\n\r\n <!--#region AREA TABS -->\r\n <mat-tab-group class=\"eqp-dform-add-form-field-tabs\" mat-stretch-tabs=\"false\" mat-align-tabs=\"start\">\r\n <!--#region STILE COMPILAZIONE -->\r\n <mat-tab label=\"Stile Compilazione\">\r\n <div class=\"row\">\r\n\r\n <!--#region LARGHEZZA CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Larghezza campo</mat-label>\r\n <eqp-select [arrayData]=\"availableColSpanSizesCompilazione\" [(ngModelInput)]=\"field.ColSpanSizes\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n (ngModelInputChange)=\"onColSpanSizeSelect()\" [isMultiSelect]=\"true\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'ColSpanSizes'\" [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion LARGHEZZA CAMPO -->\r\n\r\n <!--#region LABEL CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Label css </mat-label>\r\n <mat-form-field>\r\n <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" matInput\r\n [(ngModel)]=\"field.LabelstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.LabelstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('LabelstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['LabelstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LABEL CSS -->\r\n\r\n <!--#region FIELD CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Field css </mat-label>\r\n <mat-form-field>\r\n <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" matInput\r\n [(ngModel)]=\"field.FieldstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.FieldstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['FieldstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FIELD CSS -->\r\n \r\n <!--#region VISIBLE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n <div class=\" align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n Visibile\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n <!--#endregion VISIBLE -->\r\n\r\n <!--#region INVISIBILE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"field.InListView\">\r\n <div class=\" align-self-center\">\r\n Tipo di invisibilit\u00E0 del campo\r\n <eqp-select [enumData]=\"fieldInvisibilityEnum\" [(ngModelInput)]=\"field.Invisibility\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'Invisibility'\" [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n </div>\r\n <!--#endregion INVISIBLE -->\r\n\r\n <!--#region VISIBLE IF -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> VisibleIf </mat-label>\r\n <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('VisibleIf') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['VisibleIf'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput [(ngModel)]=\"field.VisibleIf\"\r\n [matAutocomplete]=\"VisibleIfAutocomplete\" (keyup)=\"setVisibleIfAutocompleteOptions($event)\"\r\n (focus)=\"setVisibleIfAutocompleteOptions(null)\" (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-autocomplete #VisibleIfAutocomplete=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of VisibleIfAutocompleteOptions\" [value]=\"option.value\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field> -->\r\n </div>\r\n <!--#endregion VISIBLE IF -->\r\n\r\n <!--#region TOOLTIP -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Tooltip </mat-label>\r\n <mat-form-field>\r\n <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput [(ngModel)]=\"field.Tooltip\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Tooltip') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Tooltip'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['Tooltip'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion TOOLTIP -->\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion STILE COMPILAZIONE -->\r\n\r\n <!--#region STILE DELLA RISPSOTA -->\r\n <mat-tab label=\"Stile Risposta\">\r\n <div class=\"row\">\r\n\r\n <!--#region LARGHEZZA CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Larghezza campo</mat-label>\r\n <eqp-select [arrayData]=\"availableColSpanSizesRisposta\" [(ngModelInput)]=\"field.AnswerStyle.ColSpanSizes\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n (ngModelInputChange)=\"onColSpanSizeSelect()\" [isMultiSelect]=\"true\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AnswerStyleColSpanSizes'\" [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion LARGHEZZA CAMPO -->\r\n\r\n <!--#region LABEL CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Label css </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleLabelstyleCSS\" formControlName=\"AnswerStyleLabelstyleCSS\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.LabelstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.LabelstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('LabelstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleLabelstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LABEL CSS -->\r\n\r\n <!--#region FIELD CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Field css </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleFieldstyleCSS\" formControlName=\"AnswerStyleFieldstyleCSS\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.FieldstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.FieldstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleFieldstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FIELD CSS -->\r\n\r\n <!--#region VISIBLE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"(field.AnswerStyle.VisibleIf != null || field.AnswerStyle.VisibleIf != undefined) && field.AnswerStyle.VisibleIf != ''\">\r\n <div class=\" align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.AnswerStyle.InListView\" formControlName=\"AnswerStyleInListView\"\r\n color=\"primary\" [disabled]=\"fieldFormGroup.controls['AnswerStyleInListView'].disabled\">\r\n Visibile\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n <!--#endregion VISIBLE -->\r\n \r\n <!--#region INVISIBILE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"field.AnswerStyle.InListView\">\r\n <div class=\" align-self-center\">\r\n Tipo di invisibilit\u00E0 del campo\r\n <eqp-select [enumData]=\"fieldInvisibilityEnum\" [(ngModelInput)]=\"field.AnswerStyle.Invisibility\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AnswerStyleInvisibility'\" [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n </div>\r\n <!--#endregion INVISIBLE -->\r\n\r\n <!--#region VISIBLE IF -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> VisibleIf </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleVisibleIf\" formControlName=\"AnswerStyleVisibleIf\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.VisibleIf\" (click)=\"openAnswerStyleVisibleIfDialog()\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.VisibleIf)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('VisibleIf') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleVisibleIf'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput [(ngModel)]=\"field.VisibleIf\"\r\n [matAutocomplete]=\"VisibleIfAutocomplete\" (keyup)=\"setVisibleIfAutocompleteOptions($event)\"\r\n (focus)=\"setVisibleIfAutocompleteOptions(null)\" (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-autocomplete #VisibleIfAutocomplete=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of VisibleIfAutocompleteOptions\" [value]=\"option.value\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field> -->\r\n </div>\r\n <!--#endregion VISIBLE IF -->\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion STILE DELLA RISPSOTA -->\r\n\r\n <!--#region SPECIFICHE -->\r\n <mat-tab label=\"Specifiche\">\r\n <div class=\"row\">\r\n <ng-container *ngTemplateOutlet=\"fieldTypeFormTemplate\">\r\n </ng-container>\r\n </div>\r\n </mat-tab>\r\n <!--#endregion SPECIFICHE -->\r\n\r\n <!--#region MODALITA' RECUPERO DATI -->\r\n <mat-tab label=\"Modalit\u00E0 recupero dati\">\r\n <div class=\"row\">\r\n\r\n\r\n\r\n <eqp-select [enumData]=\"dataGetterTypeEnum\" [(ngModelInput)]=\"field.DataGetter.DataGetterType\"\r\n [showCancelButton]=\"false\" (ngModelInputChange)=\"onDataGetterTypeChange()\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DataGetterType'\">\r\n </eqp-select>\r\n \r\n <div class=\"col-md-4\" [hidden]=\"field.DataGetter.DataGetterType != dataGetterTypeEnum.Manuale\">\r\n <mat-label> Valore di Default </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DataGetterValue\" matInput [(ngModel)]=\"field.DataGetter.DataGetterValue\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div>\r\n \r\n <div class=\"col-md-4\" [hidden]=\"field.DataGetter.DataGetterType != dataGetterTypeEnum.Formula\">\r\n <mat-label> Formula (Javascript) </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"Formula\" matInput [(ngModel)]=\"field.Formula\"\r\n (click)=\"openFormulaDialog()\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Formula)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Formula') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Formula'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Formula'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n \r\n <div class=\"col-md-4\" *ngIf=\"field.DataGetter.DataGetterType == dataGetterTypeEnum['Da database']\">\r\n \r\n <div class=\"col-12 mt-4 configuraQueryEditor\">\r\n <div class=\"row\">\r\n <div class=\"col-10\">Configura in Query Editor</div>\r\n <div class=\"col-2\">\r\n <button class=\"btn btn-primary\" (click)=\"openDBGetter()\" *ngIf=\"field.DataGetter.DataGetterValue == null\">Procedi</button>\r\n <button class=\"btn btn-success\" (click)=\"openDBGetter()\" *ngIf=\"field.DataGetter.DataGetterValue != null\">Modifica</button>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n <div class=\"col-6\">Seleziona colonna</div>\r\n <div class=\"col-6\">\r\n <eqp-select [arrayData]=\"columnKeys\" [(ngModelInput)]=\"field.DataGetter.DataGetterColumnForce\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n [showCancelButton]=\"true\">\r\n </eqp-select>\r\n </div> \r\n </div>\r\n \r\n </div>\r\n \r\n \r\n </div>\r\n \r\n <div class=\"col-md-4\" *ngIf=\"field.DataGetter.DataGetterType == dataGetterTypeEnum['Da modulo dinamico']\">\r\n \r\n <div class=\"col-12 mt-4\" *ngIf=\"forms.length > 0\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">Modulo</div>\r\n <div class=\"col-6\">\r\n <eqp-select [placeholder]=\"'Seleziona modulo'\" [arrayData]=\"forms\" [(ngModelInput)]=\"DMModule\" [isSearchable]=\"true\"\r\n [arrayKeyProperty]=\"'Code'\" [arrayValueProperty]=\"'Name'\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DMModule'\"\r\n (ngModelInputChange)=\"onChangeDMModule()\">\r\n </eqp-select>\r\n </div> \r\n </div>\r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null && DMModule != null\">\r\n <div class=\"col-6\">Campo</div>\r\n <div class=\"col-6\">\r\n <eqp-select [placeholder]=\"'Seleziona campo'\" [arrayData]=\"DMFields\" [(ngModelInput)]=\"DMField\" [isSearchable]=\"true\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'key'\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DMField'\"\r\n (ngModelInputChange)=\"onChangeDMField()\">\r\n </eqp-select>\r\n </div> \r\n </div>\r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n <div class=\"col-6\">Cardinalit\u00E0</div>\r\n <div class=\"col-6\">\r\n <eqp-select [enumData]=\"DMGetterCardinalities\" [(ngModelInput)]=\"field.DataGetter.DataGetterCardinality\"\r\n [showCancelButton]=\"false\">\r\n </eqp-select>\r\n </div> \r\n </div> \r\n \r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n <div class=\"col-6\">Contestualizzazione</div>\r\n <div class=\"col-6\">\r\n <eqp-select [arrayData]=\"contestualization\" [arrayKeyProperty]=\"'entityTableName'\" [arrayValueProperty]=\"'entityTableName'\" [(ngModelInput)]=\"field.DataGetter.DataGetterContestualization\"\r\n [showCancelButton]=\"true\" (ngModelInputChange)=\"onChangeDMContestualization()\">\r\n </eqp-select>\r\n </div> \r\n </div> \r\n \r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion MODALITA' RECUPERO DATI -->\r\n\r\n </mat-tab-group>\r\n <!--#region AREA TABS -->\r\n\r\n <!--#region listValueFieldFormTemplate vallues -->\r\n \r\n <!--#endregion listValueFieldFormTemplate vallues -->\r\n\r\n </form>\r\n </div>\r\n </mat-card-content>\r\n\r\n <mat-card-footer>\r\n\r\n <div class=\"d-flex justify-content-end mt-2 mb-1 me-3\"> \r\n <!-- <div class=\"buttonsForma\"> -->\r\n <button class=\"btn mat-raised-button cancel\" (click)=\"saveAndExitAddField(false)\" type=\"button\">\r\n Annulla\r\n </button>\r\n <span class=\"me-2\"></span>\r\n <button class=\"mr-2 save\" mat-raised-button color=\"primary\" (click)=\"saveAndExitAddField(true)\"\r\n [disabled]=\"disableSaveField()\" type=\"button\">\r\n Salva\r\n </button>\r\n <!-- </div> -->\r\n </div>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!-- </div> -->\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI DI TESTO -->\r\n<ng-template #textFieldFormTemplate>\r\n <!--#region MASCHERA -->\r\n <div class=\"col-sm-12 col-md-6\">\r\n <mat-label>Maschera</mat-label>\r\n <eqp-select [enumData]=\"TextMaskEnum\" [(ngModelInput)]=\"field.TextMask\" [formGroupInput]=\"fieldFormGroup\"\r\n [formControlNameInput]=\"'TextMask'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion MASCHERA -->\r\n\r\n <!--#region SPEECH TO TEXT -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\" [hidden]=\"field.Readonly\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Microphone\" formControlName=\"Microphone\" color=\"primary\">\r\n Speech-To-Text\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SPEECH TO TEXT -->\r\n\r\n <!--#region LUNGHEZZA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['MinLenght'].status != 'VALID' && fieldFormGroup.controls['MinLenght'].touched }\">\r\n Lunghezza minima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMin\" formControlName=\"MinLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MinLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MINIMA -->\r\n\r\n <!--#region LUNGHEZZA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['MaxLenght'].status != 'VALID' && fieldFormGroup.controls['MaxLenght'].touched }\">\r\n Lunghezza massima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMax\" formControlName=\"MaxLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MaxLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI DI TESTO -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 ETICHETTA -->\r\n<ng-template #labelFieldFormTemplate>\r\n\r\n <!--#region ETICHETTA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-form-field>\r\n\r\n <textarea name=\"Etichetta\" placeholder=\"Etichetta\" matInput formControlName=\"Etichetta\" [(ngModel)]=\"field.Etichetta\"></textarea>\r\n\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion ETICHETTA -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 ETICHETTA -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI AREA DI TESTO -->\r\n<ng-template #textareaFieldFormTemplate>\r\n <!--#region RIGHE -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Righe </mat-label>\r\n <mat-form-field class=\"righe\">\r\n <input id=\"rows\" formControlName=\"Rows\" type=\"number\" [min]=\"0\" matInput [(ngModel)]=\"field.Rows\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.Rows)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Rows') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Rows'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Rows'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion RIGHE -->\r\n\r\n <!--#region SpeechToText -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\" [hidden]=\"field.Readonly\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Microphone\" formControlName=\"Microphone\" color=\"primary\">\r\n Speech-To-Text\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SpeechToText -->\r\n\r\n <!--#region LUNGHEZZA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Lunghezza minima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMin\" formControlName=\"MinLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MinLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MINIMA -->\r\n\r\n <!--#region LUNGHEZZA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Lunghezza massima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMax\" formControlName=\"MaxLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MaxLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI AREA DI TESTO -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI BOOLEANI -->\r\n<ng-template #booleadFieldFormTemplate>\r\n <!--#region A TRE STATI -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsTristate\" formControlName=\"IsTristate\" color=\"primary\">\r\n A tre stati\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion A TRE STATI -->\r\n\r\n <!--#region TIPO PRESENTAZIONE -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label>Tipo di presentazione *</mat-label>\r\n <eqp-select [enumData]=\"BoolPresentantioEnum\" [(ngModelInput)]=\"field.PresetationType\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'PresetationType'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO PRESENTAZIONE -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI BOOLEANI -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI DATA -->\r\n<ng-template #dateFieldFormTemplate>\r\n <!--#region TIPO DI DATA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label>Tipo di data</mat-label>\r\n <eqp-select [enumData]=\"DateTimeTypeEnum\" [(ngModelInput)]=\"field.IsOnlyDate\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'IsOnlyDate'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO DI DATA -->\r\n\r\n <!--#region FORMATO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Formato </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DateFormat\" matInput [(ngModel)]=\"field.DateFormat\"\r\n [matTooltip]=\"'Indicare il formato seguendo la guida del pacchetto momentjs.'\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Formato)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Formato') }} -->\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FORMATO -->\r\n\r\n <!--#region DATA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label> Data minima </mat-label>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo data']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"mode.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Data e ora']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"mode.DATETIMEPICKER\" [outputFormat]=\"'DD/MM/YYYY HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo orario']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"mode.TIMEPICKER\" [outputFormat]=\"'HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <!--#endregion DATA MINIMA -->\r\n\r\n <!--#region DATA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label> Data massima </mat-label>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo data']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"mode.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Data e ora']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"mode.DATETIMEPICKER\" [outputFormat]=\"'DD/MM/YYYY HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo orario']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"mode.TIMEPICKER\" [outputFormat]=\"'HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <!--#endregion DATA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI DATA -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI NUMERICI -->\r\n<ng-template #numericFieldFormTemplate>\r\n <!--#region VALORE INTERO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsInteger\" formControlName=\"IsInteger\" color=\"primary\">\r\n Valore intero\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion VALORE INTERO -->\r\n\r\n <!--#region SEPARATORE DECIMALI -->\r\n <div *ngIf=\"!field.IsInteger\" class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Separatore decimali </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DecimalSeparator\" matInput [(ngModel)]=\"field.DecimalSeparator\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.DecimalSeparator)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('DecimalSeparator') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalSeparator'].errors?.['pattern']\">\r\n Non \u00E8 possibile inserire dei numeri.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalSeparator'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SEPARATORE DECIMALI -->\r\n\r\n <!--#region PRECISIONE DECIMALI -->\r\n <div *ngIf=\"!field.IsInteger\" class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Precisione decimali </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DecimalPrecision\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.DecimalPrecision\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.DecimalPrecision)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('DecimalPrecision') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalPrecision'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalPrecision'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion PRECISIONE DECIMALI -->\r\n\r\n <!--#region SEPARATORE MIGLIAIA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Separatore migliaia </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ThousandsSeparator\" matInput [(ngModel)]=\"field.ThousandsSeparator\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.ThousandsSeparator)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('ThousandsSeparator') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['ThousandsSeparator'].errors?.['pattern']\">\r\n Non \u00E8 possibile inserire dei numeri.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['ThousandsSeparator'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SEPARATORE MIGLIAIA -->\r\n\r\n <!--#region SIMBOLO VALUTA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n matTooltip=\"Simbolo prima del valore\"\r\n matTooltipClass=\"example-tooltip-uppercase\"\r\n > Simbolo valuta </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"CurrencySymbol\" matInput [(ngModel)]=\"field.CurrencySymbol\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.CurrencySymbol)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('CurrencySymbol') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['CurrencySymbol'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SIMBOLO VALUTA -->\r\n\r\n <!--#region UNITA DI MISURA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n matTooltip=\"Simbolo dopo il valore\"\r\n matTooltipClass=\"example-tooltip-uppercase\"\r\n > Unit\u00E0 di misura </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MeasureUnit\" matInput [(ngModel)]=\"field.MeasureUnit\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.MeasureUnit)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MeasureUnit') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MeasureUnit'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion UNITA DI MISURA -->\r\n\r\n <!--#region VALORE MINIMO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Valore minimo </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MinValue\" type=\"number\" matInput [(ngModel)]=\"field.MinValue\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinValue)\"\r\n pattern=\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinValue') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinValue'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinValue'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion VALORE MINIMO -->\r\n\r\n <!--#region VALORE MASSIMO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Valore massimo </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MaxValue\" type=\"number\" matInput [(ngModel)]=\"field.MaxValue\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxValue)\"\r\n pattern=\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxValue') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxValue'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxValue'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion VALORE MASSIMO -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI NUMERICI -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI ALLEGATO -->\r\n<ng-template #attachmentFieldFormTemplate>\r\n <!--#region ALLEGATI MULTIPLI -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiAttach\" formControlName=\"IsMultiAttach\" color=\"primary\">\r\n Allegati multipli\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion ALLEGATI MULTIPLI -->\r\n\r\n <!--#region ESTENSIONI ACCETTATE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Estensioni accettate</mat-label>\r\n <eqp-select [arrayData]=\"AvailableFileExtensions.concat(AvailableImageExtensions)\"\r\n [(ngModelInput)]=\"field.AllowedExtensions\" [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AllowedExtensions'\" [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion ESTENSIONI ACCETTATE -->\r\n\r\n <!-- <div class=\"col-sm-12 mt-2\">\r\n <div class=\"row mt-2\">\r\n <div class=\"col-sm-12 col-md-6\">\r\n <div class=\"header-title-standard\">\r\n Elenco metadata\r\n </div>\r\n </div>\r\n <div class=\"col-sm-12 col-md-6 text-right buttonsForm\">\r\n <button class=\"btn btn-primary save\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"openMetadataDialog()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px;\">Aggiungi allegato</span>\r\n </button>\r\n </div>\r\n </div>\r\n <eqp-table #metadataFieldsTable [createMatCard]=\"false\" [columns]=\"metadataColumns\"\r\n [data]=\"field.MetadataFields\" [emptyTableMessage]=\"'Nessun metadata inserito'\" [searchText]=\"'Cerca'\">\r\n </eqp-table>\r\n </div> -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI ALLEGATO -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI LISTA DI VALORI -->\r\n<ng-template #listValueFieldFormTemplate>\r\n <!--#region SCELTA MULTIPLA -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiChoiche\" formControlName=\"IsMultiChoiche\" color=\"primary\">\r\n Scelta multipla\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SCELTA MULTIPLA -->\r\n\r\n <!--#region TIPO DI PRESENTAZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Tipo di presentazione*</mat-label>\r\n <eqp-select [enumData]=\"ListPresentationEnum\" [(ngModelInput)]=\"field.PresentationMode\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'PresentationMode'\"\r\n (ngModelInputChange)=\"onPresentationModeChange()\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO DI PRESENTAZIONE -->\r\n\r\n\r\n <!--#region GESTIONE OPZIONI -->\r\n <div class=\"col-sm-12 mt-2\">\r\n\r\n <mat-label> area dei valori da inserire </mat-label>\r\n <mat-form-field>\r\n <textarea matInput \r\n placeholder=\"key1|value1;key2|value2\" \r\n [(ngModel)]=\"field.ValueString\"\r\n spellcheck=\"false\" \r\n autocomplete=\"off\"\r\n >\r\n </textarea>\r\n </mat-form-field>\r\n\r\n <div class=\"row\" *ngIf=\"countValuePairs(field.ValuePairs) > 0\">\r\n <h4 class=\"key-value-list-section-title\"> </h4>\r\n <div class=\"col-md-4\">\r\n <mat-label> Label opzione (invio per confermare)</mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"keyValueObject.key\" (keyup)=\"onMultiSelectInputKeyup($event, null)\"\r\n spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <mat-label> Valore opzione (invio per confermare)</mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"keyValueObject.value\" (keyup)=\"onMultiSelectInputKeyup($event, null)\"\r\n spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-4 align-self-center\">\r\n <span class=\"mr-3\">Opzioni inserite:</span>\r\n <ul class=\"value-pairs-list\">\r\n <li *ngFor=\"let keyValuePair of getDictionaryKeyValue()\">\r\n <mat-icon class=\"mr-1\" (click)=\"deleteKeyFromDictionary(keyValuePair.key)\">close\r\n </mat-icon>\r\n <span><b>Label: </b> {{keyValuePair.key}} - <b>Valore: </b> {{keyValuePair.value}}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div> \r\n\r\n </div> \r\n <!--#endregion GESTIONE OPZIONI -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI LISTA DI VALORI -->\r\n\r\n\r\n\r\n\r\n<!--#region FORM LISTA IMMAGINI -->\r\n<ng-template #imageFieldSelectorFormTemplate>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-3 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Altezza in Pixel delle immagini scalate </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ResizedImagesHeightPx') }}\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n <div class=\"col-3 col-xs-12 col-middle\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiChoiche\" formControlName=\"IsMultiChoiche\" color=\"primary\">\r\n Scelta multipla\r\n </mat-slide-toggle>\r\n </div> \r\n </div>\r\n\r\n <eqp-attachments #imageSelectorAttachments [attachmentsList]=\"field.AttachmentList\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"true\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\" (localEditedAttachments)=\"catchButtonImagesChange($event)\"\r\n [attachmentsColumns]=\"configColumnListImages\">\r\n </eqp-attachments>\r\n\r\n \r\n</ng-template>\r\n<!--#endregion FORM LISTA IMMAGINI -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI IMMAGINE -->\r\n<ng-template #imageFieldFormTemplate>\r\n <div class=\"row\">\r\n <div class=\"col-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.EnableDrawing\" formControlName=\"EnableDrawing\" color=\"primary\">\r\n Immagine disegnabile?\r\n </mat-slide-toggle>\r\n </div> \r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-4 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Altezza in Pixel delle immagini scalate </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ResizedImagesHeightPx') }}\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Etichetta </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonKey\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Valore </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonValue\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n </div> \r\n\r\n <div class=\"col-sm-12 col-md-8 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <eqp-attachments [attachmentsList]=\"[field.DynAttachment]\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"false\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\"\r\n (localEditedAttachments)=\"catchButtonImageChange($event)\" (onDeleteAttachment)=\"deleteImage($event)\" #imageAttachment>\r\n </eqp-attachments>\r\n <ng-template #readonlyProfileImage>\r\n <img *ngIf=\"field.DynAttachment\"\r\n src=\"data:{{field.DynAttachment.FileContentType}};base64,{{field.DynAttachment.FileDataBase64}}\"\r\n alt=\"\">\r\n </ng-template> \r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI IMMAGINE -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI IMMAGINE CON MARKERS -->\r\n<ng-template #imageWithMarkersFieldFormTemplate>\r\n <div class=\"row\">\r\n <div class=\"col-4 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Altezza in Pixel delle immagini scalate </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ResizedImagesHeightPx') }}\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Etichetta </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonKey\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Valore </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonValue\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n </div> \r\n\r\n <div class=\"col-sm-12 col-md-8 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <eqp-attachments [attachmentsList]=\"[field.DynAttachment]\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"false\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\"\r\n (localEditedAttachments)=\"catchButtonImageWithMarkersChange($event)\" (onDeleteAttachment)=\"deleteImage($event)\" #imageAttachment>\r\n </eqp-attachments>\r\n <ng-template #readonlyProfileImage>\r\n <img *ngIf=\"field.DynAttachment\"\r\n src=\"data:{{field.DynAttachment.FileContentType}};base64,{{field.DynAttachment.FileDataBase64}}\"\r\n alt=\"\">\r\n </ng-template> \r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI IMMAGINE CON MARKERS -->\r\n\r\n\r\n\r\n\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI LOOKUP -->\r\n<ng-template #lookupFieldFormTemplate>\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.UseAsGetOrDiscard\" formControlName=\"UseAsGetOrDiscard\" color=\"primary\"\r\n matTooltip=\"Se true la lookup viene visualizzata in una modale per lo scegli scarta\">\r\n Usa per scegli o scarta\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"col-sm-12 col-md-4 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Nome entit\u00E0 </mat-label>\r\n <mat-form-field matTooltip=\"Nome dell'entit\u00E0 relazionata\">\r\n <input formControlName=\"EntitySourceName\" required matInput [(ngModel)]=\"field.EntitySourceName\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.EntitySourceName)\">\r\n <mat-error>\r\n {{ getFormValidationErrors('EntitySourceName') }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-sm-12 mt-2\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <mat-label> Nomi dei campi (invio per confermare) </mat-label>\r\n <mat-form-field\r\n matTooltip=\"Elenco di campi ordinato che verr\u00E0 visualizzato nella lookup (premere invio per confermare)\">\r\n <input matInput (keyup)=\"onMultiSelectInputKeyup($event, 'FieldNames')\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-8 align-self-center\">\r\n <span class=\"mr-3\">Nomi selezionati:</span>\r\n <div class=\"extension-container\" *ngFor=\"let extension of field.FieldNames; let i = index\">\r\n <span>{{extension}}</span>\r\n <mat-icon class=\"ml-1\" (click)=\"field.FieldNames.splice(i,1)\">close\r\n </mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI LOOKUP -->\r\n\r\n<!-- DIALOG PER AGGIUNGERE UN METADATA NEI CAMPI DI TIPO ALLEGATO O IMMAGINE -->\r\n<!-- <ng-template #dialogMetadata>\r\n <eqp-dynamic-module-add-form-field [field]=\"selectedMetadata\" [availableFields]=\"availableFields\"\r\n [indexField]=\"indexSelectedMetadata\" (saveFieldEvent)=\"onSaveMetadata($event)\" [fieldTypesToExclude]=\"[6,7,10]\">\r\n </eqp-dynamic-module-add-form-field>\r\n</ng-template> -->\r\n\r\n<ng-template #buttonImagesKeyValueInputColumn let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> {{col.display}} </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\" required spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n</ng-template>\r\n<!--DIALOG PER SEMPLIFICARE LA SCRITTURA DEL CAMPO FORMULA-->\r\n<ng-template #dialogFormula>\r\n <eqp-dynamic-module-add-formula-component>\r\n </eqp-dynamic-module-add-formula-component>\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesImageTemplate let-row=\"row\" let-col=\"col\">\r\n <img src=\"data:image/jpeg;base64, {{row[col.key]}}\" class=\"GenericListImagesImageTemplate\">\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesKeyTemplate let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> Chiave </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\">\r\n </mat-form-field>\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesValueTemplate let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> Valore </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\">\r\n </mat-form-field>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER QUERY EDITOR -->\r\n<ng-template #dialogQE>\r\n <ng-template [appDynamicLoader] [data]=\"QueryEditorComponent\" (out)=\"onExternalComponentOut($event);\">\r\n </ng-template>\r\n</ng-template>\r\n ", styles: [".mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale3d(0,0,0);background-color:var(--mat-ripple-color, rgba(0, 0, 0, .1))}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.mat-app-background{background-color:var(--mat-app-background-color, transparent);color:var(--mat-app-text-color, inherit)}.add-form-field{max-height:100%;height:100%;overflow:hidden}.add-form-field mat-card-header{min-height:3rem}.add-form-field mat-card-content{height:calc(100% - 6rem);max-height:calc(100% - 6rem);overflow:auto;margin:0;padding:0 2rem 2rem}.add-form-field mat-card-content .eqp-dform-add-form-field-main{height:60%}.add-form-field mat-card-content .eqp-dform-add-form-field-tabs{height:40%}.add-form-field mat-card-footer{min-height:3rem}.extension-container{display:inline-block;font-size:15px;border:1px solid var(--primary);border-radius:15px;margin-right:10px}.extension-container mat-icon{vertical-align:middle;font-size:15px;height:15px;width:15px;color:var(--danger);margin-right:10px;cursor:pointer}.extension-container span{margin-left:10px}.key-value-list-section-title{background:linear-gradient(to right,var(--gray) 0%,rgb(255,255,255) 100%) left bottom #fff no-repeat;background-size:100% 1px}.value-pairs-list{list-style:none;padding:0}.value-pairs-list mat-icon{vertical-align:middle;font-size:15px;height:15px;width:15px;color:var(--danger);margin-right:10px;cursor:pointer}::ng-deep .mat-dialog-container{border-radius:10px}.row.title{background-color:#ebebeb;padding:20px 0 20px 50px}.row.title mat-icon.add{background:#fff;color:#7b7b7b;height:40px;width:40px;border-radius:10px;font-size:27px;padding:7px 6px 6px 7px;margin:0 7px 0 0}.row.title .header-title-standard{display:flex;align-items:center;font-size:19px;font-weight:700;color:gray}.row:not(.title){margin:15px 0 0}form{margin:25px 0 0}.col-middle{display:flex;align-items:center}::ng-deep .mat-select-arrow{color:transparent!important}input[type=number]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none}.increasableValues{display:flex}.increasableValues .col-sm-12{display:flex;flex-direction:column;margin:0 3em 0 0}.increasableValues .col-sm-12 .mat-form-field{height:79px;line-height:34px;width:50%}.increasableValues .col-sm-12 .mat-form-field ::ng-deep .mat-form-field-flex{width:230px;border:1px solid #e7e7e9;border-radius:10px;padding:7px 0 0 20px!important;margin-top:10px;background-color:#fff}.increasableValues .col-sm-12 .mat-form-field ::ng-deep .mat-form-field-flex .mat-form-field-infix{display:flex;margin:-10px 0 0}.increasableValues .col-sm-12 .mat-form-field ::ng-deep .mat-form-field-flex .mat-form-field-infix input{margin:0;border:none;height:100%}.increasableValues .col-sm-12 .mat-form-field div.buttons{display:flex;flex-direction:column;margin:-10px 0 0;border-right:1px solid #F4F4F4;padding:10px 14px 0 0}.increasableValues .col-sm-12 .mat-form-field div.buttons button.up{height:17px;width:21px;background:url(/assets/images/arrow.png) no-repeat;background-size:20px;background-position-y:1px;background-position-x:1px;-webkit-transform:rotate(180deg);border:none;opacity:.3;cursor:pointer}.increasableValues .col-sm-12 .mat-form-field div.buttons button.down{height:50px;width:23px;background:url(/assets/images/arrow.png) no-repeat no-repeat;background-size:20px;border:none;opacity:.3;background-position-y:21px;background-position-x:0px;cursor:pointer}.increasableValues .col-sm-12 .mat-form-field input{margin:-14px 0 0 63px;font-size:18px}.second .col-sm-12{margin:0 1em 0 0}.date ::ng-deep mat-form-field .mat-form-field-wrapper .mat-form-field-label-wrapper label{display:none}.date ::ng-deep mat-form-field .mat-form-field-wrapper .mat-form-field-suffix{display:inline}.GenericListImagesImageTemplate{height:100%}.configuraQueryEditor{display:flex;justify-content:center;flex-flow:column}eqp-attachments ::ng-deep div button{padding:5px 35px;background:linear-gradient(to right,#1e31eb,#693dda);border-radius:10px}eqp-attachments ::ng-deep div button span mat-icon{margin-right:5px}eqp-attachments ::ng-deep div button.eqp-attachments-delete-btn{color:#fff}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .row:first-child{padding:20px 40px;background-color:#ebebeb;color:gray;font-size:19px;font-weight:700}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .mat-form-field-label-wrapper label{margin-top:21px;margin-left:25px}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .btn-primary[disabled]{padding:7px 35px;border-radius:10px;font-size:14px;background-color:#dbdbdc!important;color:#000;background:none}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .btn-primary:not(disabled){padding:7px 35px;border-radius:10px;font-size:14px;background:linear-gradient(to right,#1e31eb,#693dda);color:#fff}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form button{margin:0 10px 0 0!important;border:1px solid #1E31EB;padding:7px 35px;border-radius:10px;font-size:14px}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form button[disabled]{border:none}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .ng-star-inserted .justify-content-center button{padding:4px;margin:0;border:none;left:8px}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .row:last-child{padding:50px 20px 20px 0}eqp-table ::ng-deep mat-form-field:not(.mat-paginator-page-size-select) .mat-form-field-wrapper input{background-color:#ebebeb!important;background:url(data:image/png;base64,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) no-repeat;background-size:19px;background-position:19px;padding:15px 0 15px 53px!important}eqp-table ::ng-deep mat-form-field:not(.mat-paginator-page-size-select) .mat-form-field-wrapper input:focus{background-color:#fff!important;border:1px solid #e7e7e9}eqp-table ::ng-deep mat-form-field:not(.mat-paginator-page-size-select) .mat-form-field-wrapper .mat-form-field-label-wrapper label{margin-top:21px;margin-left:55px}eqp-table ::ng-deep mat-header-row{background-color:#ebebeb;border-bottom-width:0px}eqp-table ::ng-deep mat-header-row .mat-column-Required{flex:none!important}eqp-table ::ng-deep .mat-sort-header-button{color:#3b3a3b;font-size:15px}eqp-table ::ng-deep .mat-row{background-color:#fff;margin:10px 0;box-shadow:0 3px 7px -3px #0003;padding:5px 0}eqp-table ::ng-deep .mat-row .mat-column-Required{flex:0 0 8%!important}eqp-table ::ng-deep .mat-row mat-cell eqp-select{margin-top:16px}eqp-table ::ng-deep .mat-row mat-cell eqp-select .mat-form-field-wrapper{padding-bottom:0}eqp-table ::ng-deep .mat-row .mat-cell:last-child span i.success-color{background-color:#383fec;color:#fff!important;padding:6px;border-radius:3px}@media screen and (max-width: 1100px){.row:not(.title){margin:0!important}.second{display:flex;flex-direction:column}.second .col-sm-12{margin:0}.buttonsForm{padding:0 30px 20px 0;margin:50px 0 0}}@media screen and (max-width: 766px){.increasableValues{display:flex;flex-direction:column}.increasableValues .col-sm-12{margin:0 0 -1.5em}.second{display:flex;flex-direction:column}.second .col-sm-12{margin:0 0 -3.4em}.buttonsForm{margin:55px 0 0!important;padding:0 13px 20px 0;transform:translateY(110px)}}@media screen and (max-width: 577px){.increasableValues .col-sm-12{margin:0 0 1.5em}}:host ::ng-deep .mat-input-element{width:100%;width:-moz-available;width:-webkit-fill-available;width:fill-available}\n"], dependencies: [{ kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i9.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i10.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i10.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i10.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i10.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i10.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i11.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i11.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i13.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i14.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i14.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i14.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i15.EqpAttachmentsComponent, selector: "eqp-attachments", inputs: ["disableAction", "showHeader", "headerTitle", "attachmentsList", "showMatCard", "multipleAttachment", "loadMultipleFiles", "attachmentsColumns", "emptyTableMessage", "allowOnlyImages", "acceptedFileTypes", "isDisabled", "showInlinePreview", "getAttachmentEndpoint", "productionBaseUrl", "compressionOptions", "allowedTypes", "isEqpTableMultiLanguage", "tablePaginatorVisible", "isTableSearcheable", "tablePaginatorSize", "separatedUploadButtons", "showPreview", "singleAttachmentDragAndDrop", "cropOptions", "cropDialogClass", "downloadTooltipPosition", "openLinkLabel", "addButtonLabel", "downloadLabel", "deleteLabel", "fileNameLabel", "previewLabel", "uploadFileLabel", "confirmLabel", "abortLabel", "saveLabel", "exitLabel", "uploadWithDropboxLabel", "cropLabel", "eqpTableSearchText", "deleteDialogTitle", "deleteDialogMessage", "noImageSelectedErrorMessage", "wrongTypeSelectedErrorMessage", "videoPreviewErrorMessage", "flipHorinzontalLabel", "flipVerticalLabel", "rotateRightLabel", "rotateLeftLabel"], outputs: ["localEditedAttachments", "abortAddAttachment", "downloadAttachment", "onDeleteAttachment"] }, { kind: "component", type: i2.EqpSelectComponent, selector: "eqp-select", inputs: ["placeholder", "enumData", "enumDataToExclude", "arrayData", "arrayKeyProperty", "arrayValueProperty", "ngModelOptions", "ngModelInput", "formGroupInput", "formControlNameInput", "isRequired", "isDisabled", "isMultiLanguage", "multilanguagePrefixKey", "isAlphabeticalOrderable", "suffixIcon", "prefixIcon", "isMultiSelect", "includeFullObject", "showCancelButton", "isSearchable", "searchText", "noResultSearchText", "data"], outputs: ["ngModelInputChange"] }, { kind: "component", type: i16.TmwDateTimePickerComponent, selector: "tmw-datetimepicker", inputs: ["debugMode", "ngModelInput", "formGroupInput", "formControlNameInput", "pickerMode", "timeType", "label", "placeholder", "hint", "minDate", "maxDate", "locale", "inputFormat", "outputFormat", "forSaveLocalOnDB", "disabled", "readonly", "currentDateAsDefault", "showSpinners", "touchUi", "enableMeridian", "hideTime", "stepHour", "showHours", "hourLabel", "stepMinute", "showMinutes", "minuteLabel", "stepSecond", "showSeconds", "secondLabel", "disableMinute", "dayLabel", "monthLabel", "yearLabel", "highLightedDates", "highLightedAriaFormat"], outputs: ["ngModelInputChange"] }, { kind: "component", type: i17.AddFormulaComponent, selector: "eqp-dynamic-module-add-formula-component" }, { kind: "directive", type: i18.DynamicLoaderDirective, selector: "[appDynamicLoader]", inputs: ["data"], outputs: ["out"] }] });
|
|
1173
1174
|
}
|
|
1174
1175
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AddFormFieldComponent, decorators: [{
|
|
1175
1176
|
type: Component,
|
|
1176
|
-
args: [{ selector: "eqp-dynamic-module-add-form-field", template: "<!-- <div class=\"add-form-field bigwrapper\" style=\"max-height: 100vh !important; overflow-x: hidden; overflow-y: auto;\"> -->\r\n\r\n<mat-card class=\"add-form-field\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n {{indexField != null && indexField >= 0 ? \"Modifica\" : \"Aggiungi\"}} campo\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n\r\n <div class=\"container-fluid containerContent \">\r\n <form [formGroup]=\"fieldFormGroup\" style=\"height: 100%;\">\r\n <!--#region AREA PRINCIPALE -->\r\n <div class=\"row eqp-dform-add-form-field-main\">\r\n <!--#region TIPO CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 tipoCampo\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['FieldType'].status != 'VALID' && fieldFormGroup.controls['FieldType'].touched }\">\r\n Tipo campo *\r\n </mat-label>\r\n <eqp-select [enumData]=\"FieldTypeEnum\" [(ngModelInput)]=\"field.FieldType\"\r\n [showCancelButton]=\"false\" (ngModelInputChange)=\"onFieldTypeChange()\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'FieldType'\"\r\n [enumDataToExclude]=\"fieldTypesToExclude\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO CAMPO -->\r\n\r\n <!--#region CODICE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['Label'].status != 'VALID' && fieldFormGroup.controls['Label'].touched }\">\r\n Codice *\r\n </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"Label\" required matInput [(ngModel)]=\"field.Label\"\r\n (keypress)=\"omit_special_char($event)\" spellcheck=\"false\" autocomplete=\"off\"\r\n (focusout)=\"stringSanitizer(field.Label)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Label') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['pattern']\">\r\n Si possono inserire solo lettere a-z\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion CODICE -->\r\n\r\n <!--#region DESCRIZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['Description'].status != 'VALID' && fieldFormGroup.controls['Description'].touched }\">\r\n Descrizione *\r\n </mat-label>\r\n <mat-form-field>\r\n <input name=\"Description\" formControlName=\"Description\" required matInput\r\n [(ngModel)]=\"field.Description\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Description)\">\r\n <!-- <mat-error *ngIf=\"!field.Description.valid && field.FormFormGroup.controls[field.Description].touched\"> -->\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Description') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Description'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Description'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion DESCRIZIONE -->\r\n\r\n <!--#region SEZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\" *ngIf=\"formFieldsGroups\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['FieldGroup'].status != 'VALID' && fieldFormGroup.controls['FieldGroup'].touched }\">Sezione\r\n *</mat-label>\r\n <eqp-select [arrayData]=\"formFieldsGroups\" [(ngModelInput)]=\"field.FieldGroup\"\r\n [arrayKeyProperty]=\"'Name'\" [arrayValueProperty]=\"'Name'\" [formGroupInput]=\"fieldFormGroup\"\r\n [formControlNameInput]=\"'FieldGroup'\" required>\r\n </eqp-select>\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldGroup') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['FieldGroup'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </div>\r\n <!--#endregion SEZIONE -->\r\n\r\n <!--#region OBBLIGATORIO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Required\" formControlName=\"Required\"\r\n color=\"primary\">\r\n Obbligatorio\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion OBBLIGATORIO -->\r\n\r\n <!--#region READONLY -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Readonly\" formControlName=\"Readonly\"\r\n color=\"primary\">\r\n ReadOnly\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion READONLY -->\r\n\r\n </div>\r\n <!--#endregion AREA PRINCIPALE -->\r\n\r\n <!--#region AREA TABS -->\r\n <mat-tab-group class=\"eqp-dform-add-form-field-tabs\" mat-stretch-tabs=\"false\" mat-align-tabs=\"start\">\r\n <!--#region STILE COMPILAZIONE -->\r\n <mat-tab label=\"Stile Compilazione\">\r\n <div class=\"row\">\r\n\r\n <!--#region LARGHEZZA CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Larghezza campo</mat-label>\r\n <eqp-select [arrayData]=\"availableColSpanSizesCompilazione\" [(ngModelInput)]=\"field.ColSpanSizes\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n (ngModelInputChange)=\"onColSpanSizeSelect()\" [isMultiSelect]=\"true\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'ColSpanSizes'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion LARGHEZZA CAMPO -->\r\n\r\n <!--#region LABEL CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Label css </mat-label>\r\n <mat-form-field>\r\n <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" matInput\r\n [(ngModel)]=\"field.LabelstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.LabelstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('LabelstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['LabelstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LABEL CSS -->\r\n\r\n <!--#region FIELD CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Field css </mat-label>\r\n <mat-form-field>\r\n <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" matInput\r\n [(ngModel)]=\"field.FieldstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.FieldstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['FieldstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FIELD CSS -->\r\n \r\n <!--#region VISIBLE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n <div class=\" align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n Visibile\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n <!--#endregion VISIBLE -->\r\n\r\n <!--#region INVISIBILE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"field.InListView\">\r\n <div class=\" align-self-center\">\r\n Tipo di invisibilit\u00E0 del campo\r\n <eqp-select [enumData]=\"fieldInvisibilityEnum\" [(ngModelInput)]=\"field.Invisibility\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'Invisibility'\">\r\n </eqp-select>\r\n </div>\r\n </div>\r\n <!--#endregion INVISIBLE -->\r\n\r\n <!--#region VISIBLE IF -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> VisibleIf </mat-label>\r\n <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('VisibleIf') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['VisibleIf'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput [(ngModel)]=\"field.VisibleIf\"\r\n [matAutocomplete]=\"VisibleIfAutocomplete\" (keyup)=\"setVisibleIfAutocompleteOptions($event)\"\r\n (focus)=\"setVisibleIfAutocompleteOptions(null)\" (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-autocomplete #VisibleIfAutocomplete=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of VisibleIfAutocompleteOptions\" [value]=\"option.value\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field> -->\r\n </div>\r\n <!--#endregion VISIBLE IF -->\r\n\r\n <!--#region TOOLTIP -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Tooltip </mat-label>\r\n <mat-form-field>\r\n <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput [(ngModel)]=\"field.Tooltip\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Tooltip') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Tooltip'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['Tooltip'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion TOOLTIP -->\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion STILE COMPILAZIONE -->\r\n\r\n <!--#region STILE DELLA RISPSOTA -->\r\n <mat-tab label=\"Stile Risposta\">\r\n <div class=\"row\">\r\n\r\n <!--#region LARGHEZZA CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Larghezza campo</mat-label>\r\n <eqp-select [arrayData]=\"availableColSpanSizesRisposta\" [(ngModelInput)]=\"field.AnswerStyle.ColSpanSizes\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n (ngModelInputChange)=\"onColSpanSizeSelect()\" [isMultiSelect]=\"true\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AnswerStyleColSpanSizes'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion LARGHEZZA CAMPO -->\r\n\r\n <!--#region LABEL CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Label css </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleLabelstyleCSS\" formControlName=\"AnswerStyleLabelstyleCSS\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.LabelstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.LabelstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('LabelstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleLabelstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LABEL CSS -->\r\n\r\n <!--#region FIELD CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Field css </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleFieldstyleCSS\" formControlName=\"AnswerStyleFieldstyleCSS\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.FieldstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.FieldstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleFieldstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FIELD CSS -->\r\n\r\n <!--#region VISIBLE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"(field.AnswerStyle.VisibleIf != null || field.AnswerStyle.VisibleIf != undefined) && field.AnswerStyle.VisibleIf != ''\">\r\n <div class=\" align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.AnswerStyle.InListView\" formControlName=\"AnswerStyleInListView\"\r\n color=\"primary\" [disabled]=\"fieldFormGroup.controls['AnswerStyleInListView'].disabled\">\r\n Visibile\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n <!--#endregion VISIBLE -->\r\n \r\n <!--#region INVISIBILE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"field.AnswerStyle.InListView\">\r\n <div class=\" align-self-center\">\r\n Tipo di invisibilit\u00E0 del campo\r\n <eqp-select [enumData]=\"fieldInvisibilityEnum\" [(ngModelInput)]=\"field.AnswerStyle.Invisibility\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AnswerStyleInvisibility'\">\r\n </eqp-select>\r\n </div>\r\n </div>\r\n <!--#endregion INVISIBLE -->\r\n\r\n <!--#region VISIBLE IF -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> VisibleIf </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleVisibleIf\" formControlName=\"AnswerStyleVisibleIf\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.VisibleIf\" (click)=\"openAnswerStyleVisibleIfDialog()\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.VisibleIf)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('VisibleIf') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleVisibleIf'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput [(ngModel)]=\"field.VisibleIf\"\r\n [matAutocomplete]=\"VisibleIfAutocomplete\" (keyup)=\"setVisibleIfAutocompleteOptions($event)\"\r\n (focus)=\"setVisibleIfAutocompleteOptions(null)\" (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-autocomplete #VisibleIfAutocomplete=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of VisibleIfAutocompleteOptions\" [value]=\"option.value\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field> -->\r\n </div>\r\n <!--#endregion VISIBLE IF -->\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion STILE DELLA RISPSOTA -->\r\n\r\n <!--#region SPECIFICHE -->\r\n <mat-tab label=\"Specifiche\">\r\n <div class=\"row\">\r\n <ng-container *ngTemplateOutlet=\"fieldTypeFormTemplate\">\r\n </ng-container>\r\n </div>\r\n </mat-tab>\r\n <!--#endregion SPECIFICHE -->\r\n\r\n <!--#region MODALITA' RECUPERO DATI -->\r\n <mat-tab label=\"Modalit\u00E0 recupero dati\">\r\n <div class=\"row\">\r\n\r\n\r\n\r\n <eqp-select [enumData]=\"dataGetterTypeEnum\" [(ngModelInput)]=\"field.DataGetter.DataGetterType\"\r\n [showCancelButton]=\"false\" (ngModelInputChange)=\"onDataGetterTypeChange()\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DataGetterType'\">\r\n </eqp-select>\r\n \r\n <div class=\"col-md-4\" [hidden]=\"field.DataGetter.DataGetterType != dataGetterTypeEnum.Manuale\">\r\n <mat-label> Valore di Default </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DataGetterValue\" matInput [(ngModel)]=\"field.DataGetter.DataGetterValue\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div>\r\n \r\n <div class=\"col-md-4\" [hidden]=\"field.DataGetter.DataGetterType != dataGetterTypeEnum.Formula\">\r\n <mat-label> Formula (Javascript) </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"Formula\" matInput [(ngModel)]=\"field.Formula\"\r\n (click)=\"openFormulaDialog()\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Formula)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Formula') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Formula'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Formula'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n \r\n <div class=\"col-md-4\" *ngIf=\"field.DataGetter.DataGetterType == dataGetterTypeEnum['Da database']\">\r\n \r\n <div class=\"col-12 mt-4 configuraQueryEditor\">\r\n <div class=\"row\">\r\n <div class=\"col-10\">Configura in Query Editor</div>\r\n <div class=\"col-2\">\r\n <button class=\"btn btn-primary\" (click)=\"openDBGetter()\" *ngIf=\"field.DataGetter.DataGetterValue == null\">Procedi</button>\r\n <button class=\"btn btn-success\" (click)=\"openDBGetter()\" *ngIf=\"field.DataGetter.DataGetterValue != null\">Modifica</button>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n <div class=\"col-6\">Seleziona colonna</div>\r\n <div class=\"col-6\">\r\n <eqp-select [arrayData]=\"columnKeys\" [(ngModelInput)]=\"field.DataGetter.DataGetterColumnForce\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n [showCancelButton]=\"true\">\r\n </eqp-select>\r\n </div> \r\n </div>\r\n \r\n </div>\r\n \r\n \r\n </div>\r\n \r\n <div class=\"col-md-4\" *ngIf=\"field.DataGetter.DataGetterType == dataGetterTypeEnum['Da modulo dinamico']\">\r\n \r\n <div class=\"col-12 mt-4\" *ngIf=\"forms.length > 0\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">Modulo</div>\r\n <div class=\"col-6\">\r\n <eqp-select [placeholder]=\"'Seleziona modulo'\" [arrayData]=\"forms\" [(ngModelInput)]=\"DMModule\" [isSearchable]=\"true\"\r\n [arrayKeyProperty]=\"'Code'\" [arrayValueProperty]=\"'Name'\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DMModule'\"\r\n (ngModelInputChange)=\"onChangeDMModule()\">\r\n </eqp-select>\r\n </div> \r\n </div>\r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null && DMModule != null\">\r\n <div class=\"col-6\">Campo</div>\r\n <div class=\"col-6\">\r\n <eqp-select [placeholder]=\"'Seleziona campo'\" [arrayData]=\"DMFields\" [(ngModelInput)]=\"DMField\" [isSearchable]=\"true\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'key'\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DMField'\"\r\n (ngModelInputChange)=\"onChangeDMField()\">\r\n </eqp-select>\r\n </div> \r\n </div>\r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n <div class=\"col-6\">Cardinalit\u00E0</div>\r\n <div class=\"col-6\">\r\n <eqp-select [enumData]=\"DMGetterCardinalities\" [(ngModelInput)]=\"field.DataGetter.DataGetterCardinality\"\r\n [showCancelButton]=\"false\">\r\n </eqp-select>\r\n </div> \r\n </div> \r\n \r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n <div class=\"col-6\">Contestualizzazione</div>\r\n <div class=\"col-6\">\r\n <eqp-select [arrayData]=\"contestualization\" [arrayKeyProperty]=\"'entityTableName'\" [arrayValueProperty]=\"'entityTableName'\" [(ngModelInput)]=\"field.DataGetter.DataGetterContestualization\"\r\n [showCancelButton]=\"true\" (ngModelInputChange)=\"onChangeDMContestualization()\">\r\n </eqp-select>\r\n </div> \r\n </div> \r\n \r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion MODALITA' RECUPERO DATI -->\r\n\r\n </mat-tab-group>\r\n <!--#region AREA TABS -->\r\n\r\n <!--#region listValueFieldFormTemplate vallues -->\r\n \r\n <!--#endregion listValueFieldFormTemplate vallues -->\r\n\r\n </form>\r\n </div>\r\n </mat-card-content>\r\n\r\n <mat-card-footer>\r\n\r\n <div class=\"d-flex justify-content-end mt-2 mb-1 me-3\"> \r\n <!-- <div class=\"buttonsForma\"> -->\r\n <button class=\"btn mat-raised-button cancel\" (click)=\"saveAndExitAddField(false)\" type=\"button\">\r\n Annulla\r\n </button>\r\n <span class=\"me-2\"></span>\r\n <button class=\"mr-2 save\" mat-raised-button color=\"primary\" (click)=\"saveAndExitAddField(true)\"\r\n [disabled]=\"disableSaveField()\" type=\"button\">\r\n Salva\r\n </button>\r\n <!-- </div> -->\r\n </div>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!-- </div> -->\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI DI TESTO -->\r\n<ng-template #textFieldFormTemplate>\r\n <!--#region MASCHERA -->\r\n <div class=\"col-sm-12 col-md-6\">\r\n <mat-label>Maschera</mat-label>\r\n <eqp-select [enumData]=\"TextMaskEnum\" [(ngModelInput)]=\"field.TextMask\" [formGroupInput]=\"fieldFormGroup\"\r\n [formControlNameInput]=\"'TextMask'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion MASCHERA -->\r\n\r\n <!--#region SPEECH TO TEXT -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\" [hidden]=\"field.Readonly\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Microphone\" formControlName=\"Microphone\" color=\"primary\">\r\n Speech-To-Text\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SPEECH TO TEXT -->\r\n\r\n <!--#region LUNGHEZZA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['MinLenght'].status != 'VALID' && fieldFormGroup.controls['MinLenght'].touched }\">\r\n Lunghezza minima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMin\" formControlName=\"MinLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MinLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MINIMA -->\r\n\r\n <!--#region LUNGHEZZA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['MaxLenght'].status != 'VALID' && fieldFormGroup.controls['MaxLenght'].touched }\">\r\n Lunghezza massima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMax\" formControlName=\"MaxLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MaxLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI DI TESTO -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 ETICHETTA -->\r\n<ng-template #labelFieldFormTemplate>\r\n\r\n <!--#region ETICHETTA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-form-field>\r\n\r\n <textarea name=\"Etichetta\" placeholder=\"Etichetta\" matInput formControlName=\"Etichetta\" [(ngModel)]=\"field.Etichetta\"></textarea>\r\n\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion ETICHETTA -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 ETICHETTA -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI AREA DI TESTO -->\r\n<ng-template #textareaFieldFormTemplate>\r\n <!--#region RIGHE -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Righe </mat-label>\r\n <mat-form-field class=\"righe\">\r\n <input id=\"rows\" formControlName=\"Rows\" type=\"number\" [min]=\"0\" matInput [(ngModel)]=\"field.Rows\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.Rows)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Rows') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Rows'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Rows'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion RIGHE -->\r\n\r\n <!--#region SpeechToText -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\" [hidden]=\"field.Readonly\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Microphone\" formControlName=\"Microphone\" color=\"primary\">\r\n Speech-To-Text\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SpeechToText -->\r\n\r\n <!--#region LUNGHEZZA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Lunghezza minima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMin\" formControlName=\"MinLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MinLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MINIMA -->\r\n\r\n <!--#region LUNGHEZZA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Lunghezza massima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMax\" formControlName=\"MaxLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MaxLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI AREA DI TESTO -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI BOOLEANI -->\r\n<ng-template #booleadFieldFormTemplate>\r\n <!--#region A TRE STATI -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsTristate\" formControlName=\"IsTristate\" color=\"primary\">\r\n A tre stati\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion A TRE STATI -->\r\n\r\n <!--#region TIPO PRESENTAZIONE -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label>Tipo di presentazione *</mat-label>\r\n <eqp-select [enumData]=\"BoolPresentantioEnum\" [(ngModelInput)]=\"field.PresetationType\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'PresetationType'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO PRESENTAZIONE -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI BOOLEANI -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI DATA -->\r\n<ng-template #dateFieldFormTemplate>\r\n <!--#region TIPO DI DATA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label>Tipo di data</mat-label>\r\n <eqp-select [enumData]=\"DateTimeTypeEnum\" [(ngModelInput)]=\"field.IsOnlyDate\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'IsOnlyDate'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO DI DATA -->\r\n\r\n <!--#region FORMATO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Formato </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DateFormat\" matInput [(ngModel)]=\"field.DateFormat\"\r\n [matTooltip]=\"'Indicare il formato seguendo la guida del pacchetto momentjs.'\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Formato)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Formato') }} -->\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FORMATO -->\r\n\r\n <!--#region DATA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label> Data minima </mat-label>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo data']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"mode.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Data e ora']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"mode.DATETIMEPICKER\" [outputFormat]=\"'DD/MM/YYYY HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo orario']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"mode.TIMEPICKER\" [outputFormat]=\"'HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <!--#endregion DATA MINIMA -->\r\n\r\n <!--#region DATA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label> Data massima </mat-label>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo data']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"mode.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Data e ora']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"mode.DATETIMEPICKER\" [outputFormat]=\"'DD/MM/YYYY HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo orario']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"mode.TIMEPICKER\" [outputFormat]=\"'HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <!--#endregion DATA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI DATA -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI NUMERICI -->\r\n<ng-template #numericFieldFormTemplate>\r\n <!--#region VALORE INTERO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsInteger\" formControlName=\"IsInteger\" color=\"primary\">\r\n Valore intero\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion VALORE INTERO -->\r\n\r\n <!--#region SEPARATORE DECIMALI -->\r\n <div *ngIf=\"!field.IsInteger\" class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Separatore decimali </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DecimalSeparator\" matInput [(ngModel)]=\"field.DecimalSeparator\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.DecimalSeparator)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('DecimalSeparator') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalSeparator'].errors?.['pattern']\">\r\n Non \u00E8 possibile inserire dei numeri.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalSeparator'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SEPARATORE DECIMALI -->\r\n\r\n <!--#region PRECISIONE DECIMALI -->\r\n <div *ngIf=\"!field.IsInteger\" class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Precisione decimali </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DecimalPrecision\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.DecimalPrecision\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.DecimalPrecision)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('DecimalPrecision') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalPrecision'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalPrecision'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion PRECISIONE DECIMALI -->\r\n\r\n <!--#region SEPARATORE MIGLIAIA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Separatore migliaia </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ThousandsSeparator\" matInput [(ngModel)]=\"field.ThousandsSeparator\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.ThousandsSeparator)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('ThousandsSeparator') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['ThousandsSeparator'].errors?.['pattern']\">\r\n Non \u00E8 possibile inserire dei numeri.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['ThousandsSeparator'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SEPARATORE MIGLIAIA -->\r\n\r\n <!--#region SIMBOLO VALUTA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n matTooltip=\"Simbolo prima del valore\"\r\n matTooltipClass=\"example-tooltip-uppercase\"\r\n > Simbolo valuta </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"CurrencySymbol\" matInput [(ngModel)]=\"field.CurrencySymbol\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.CurrencySymbol)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('CurrencySymbol') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['CurrencySymbol'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SIMBOLO VALUTA -->\r\n\r\n <!--#region UNITA DI MISURA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n matTooltip=\"Simbolo dopo il valore\"\r\n matTooltipClass=\"example-tooltip-uppercase\"\r\n > Unit\u00E0 di misura </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MeasureUnit\" matInput [(ngModel)]=\"field.MeasureUnit\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.MeasureUnit)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MeasureUnit') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MeasureUnit'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion UNITA DI MISURA -->\r\n\r\n <!--#region VALORE MINIMO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Valore minimo </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MinValue\" type=\"number\" matInput [(ngModel)]=\"field.MinValue\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinValue)\"\r\n pattern=\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinValue') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinValue'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinValue'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion VALORE MINIMO -->\r\n\r\n <!--#region VALORE MASSIMO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Valore massimo </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MaxValue\" type=\"number\" matInput [(ngModel)]=\"field.MaxValue\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxValue)\"\r\n pattern=\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxValue') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxValue'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxValue'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion VALORE MASSIMO -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI NUMERICI -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI ALLEGATO -->\r\n<ng-template #attachmentFieldFormTemplate>\r\n <!--#region ALLEGATI MULTIPLI -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiAttach\" formControlName=\"IsMultiAttach\" color=\"primary\">\r\n Allegati multipli\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion ALLEGATI MULTIPLI -->\r\n\r\n <!--#region ESTENSIONI ACCETTATE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Estensioni accettate</mat-label>\r\n <eqp-select [arrayData]=\"AvailableFileExtensions.concat(AvailableImageExtensions)\"\r\n [(ngModelInput)]=\"field.AllowedExtensions\" [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AllowedExtensions'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion ESTENSIONI ACCETTATE -->\r\n\r\n <!-- <div class=\"col-sm-12 mt-2\">\r\n <div class=\"row mt-2\">\r\n <div class=\"col-sm-12 col-md-6\">\r\n <div class=\"header-title-standard\">\r\n Elenco metadata\r\n </div>\r\n </div>\r\n <div class=\"col-sm-12 col-md-6 text-right buttonsForm\">\r\n <button class=\"btn btn-primary save\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"openMetadataDialog()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px;\">Aggiungi allegato</span>\r\n </button>\r\n </div>\r\n </div>\r\n <eqp-table #metadataFieldsTable [createMatCard]=\"false\" [columns]=\"metadataColumns\"\r\n [data]=\"field.MetadataFields\" [emptyTableMessage]=\"'Nessun metadata inserito'\" [searchText]=\"'Cerca'\">\r\n </eqp-table>\r\n </div> -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI ALLEGATO -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI LISTA DI VALORI -->\r\n<ng-template #listValueFieldFormTemplate>\r\n <!--#region SCELTA MULTIPLA -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiChoiche\" formControlName=\"IsMultiChoiche\" color=\"primary\">\r\n Scelta multipla\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SCELTA MULTIPLA -->\r\n\r\n <!--#region TIPO DI PRESENTAZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Tipo di presentazione*</mat-label>\r\n <eqp-select [enumData]=\"ListPresentationEnum\" [(ngModelInput)]=\"field.PresentationMode\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'PresentationMode'\"\r\n (ngModelInputChange)=\"onPresentationModeChange()\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO DI PRESENTAZIONE -->\r\n\r\n\r\n <!--#region GESTIONE OPZIONI -->\r\n <div class=\"col-sm-12 mt-2\">\r\n\r\n <mat-label> area dei valori da inserire </mat-label>\r\n <mat-form-field>\r\n <textarea matInput \r\n placeholder=\"key1|value1;key2|value2\" \r\n [(ngModel)]=\"field.ValueString\"\r\n spellcheck=\"false\" \r\n autocomplete=\"off\"\r\n >\r\n </textarea>\r\n </mat-form-field>\r\n\r\n <div class=\"row\" *ngIf=\"countValuePairs(field.ValuePairs) > 0\">\r\n <h4 class=\"key-value-list-section-title\"> </h4>\r\n <div class=\"col-md-4\">\r\n <mat-label> Label opzione (invio per confermare)</mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"keyValueObject.key\" (keyup)=\"onMultiSelectInputKeyup($event, null)\"\r\n spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <mat-label> Valore opzione (invio per confermare)</mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"keyValueObject.value\" (keyup)=\"onMultiSelectInputKeyup($event, null)\"\r\n spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-4 align-self-center\">\r\n <span class=\"mr-3\">Opzioni inserite:</span>\r\n <ul class=\"value-pairs-list\">\r\n <li *ngFor=\"let keyValuePair of getDictionaryKeyValue()\">\r\n <mat-icon class=\"mr-1\" (click)=\"deleteKeyFromDictionary(keyValuePair.key)\">close\r\n </mat-icon>\r\n <span><b>Label: </b> {{keyValuePair.key}} - <b>Valore: </b> {{keyValuePair.value}}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div> \r\n\r\n </div> \r\n <!--#endregion GESTIONE OPZIONI -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI LISTA DI VALORI -->\r\n\r\n\r\n\r\n\r\n<!--#region FORM LISTA IMMAGINI -->\r\n<ng-template #imageFieldSelectorFormTemplate>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-3 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Altezza in Pixel delle immagini scalate </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ResizedImagesHeightPx') }}\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n <div class=\"col-3 col-xs-12 col-middle\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiChoiche\" formControlName=\"IsMultiChoiche\" color=\"primary\">\r\n Scelta multipla\r\n </mat-slide-toggle>\r\n </div> \r\n </div>\r\n\r\n <eqp-attachments #imageSelectorAttachments [attachmentsList]=\"field.AttachmentList\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"true\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\" (localEditedAttachments)=\"catchButtonImagesChange($event)\"\r\n [attachmentsColumns]=\"configColumnListImages\">\r\n </eqp-attachments>\r\n\r\n \r\n</ng-template>\r\n<!--#endregion FORM LISTA IMMAGINI -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI IMMAGINE -->\r\n<ng-template #imageFieldFormTemplate>\r\n <div class=\"row\">\r\n <div class=\"col-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.EnableDrawing\" formControlName=\"EnableDrawing\" color=\"primary\">\r\n Immagine disegnabile?\r\n </mat-slide-toggle>\r\n </div> \r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-4 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Altezza in Pixel delle immagini scalate </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ResizedImagesHeightPx') }}\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Etichetta </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonKey\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Valore </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonValue\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n </div> \r\n\r\n <div class=\"col-sm-12 col-md-8 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <eqp-attachments [attachmentsList]=\"[field.DynAttachment]\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"false\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\"\r\n (localEditedAttachments)=\"catchButtonImageChange($event)\" (onDeleteAttachment)=\"deleteImage($event)\" #imageAttachment>\r\n </eqp-attachments>\r\n <ng-template #readonlyProfileImage>\r\n <img *ngIf=\"field.DynAttachment\"\r\n src=\"data:{{field.DynAttachment.FileContentType}};base64,{{field.DynAttachment.FileDataBase64}}\"\r\n alt=\"\">\r\n </ng-template> \r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI IMMAGINE -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI IMMAGINE CON MARKERS -->\r\n<ng-template #imageWithMarkersFieldFormTemplate>\r\n <div class=\"row\">\r\n <div class=\"col-4 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Altezza in Pixel delle immagini scalate </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ResizedImagesHeightPx') }}\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Etichetta </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonKey\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Valore </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonValue\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n </div> \r\n\r\n <div class=\"col-sm-12 col-md-8 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <eqp-attachments [attachmentsList]=\"[field.DynAttachment]\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"false\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\"\r\n (localEditedAttachments)=\"catchButtonImageWithMarkersChange($event)\" (onDeleteAttachment)=\"deleteImage($event)\" #imageAttachment>\r\n </eqp-attachments>\r\n <ng-template #readonlyProfileImage>\r\n <img *ngIf=\"field.DynAttachment\"\r\n src=\"data:{{field.DynAttachment.FileContentType}};base64,{{field.DynAttachment.FileDataBase64}}\"\r\n alt=\"\">\r\n </ng-template> \r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI IMMAGINE CON MARKERS -->\r\n\r\n\r\n\r\n\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI LOOKUP -->\r\n<ng-template #lookupFieldFormTemplate>\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.UseAsGetOrDiscard\" formControlName=\"UseAsGetOrDiscard\" color=\"primary\"\r\n matTooltip=\"Se true la lookup viene visualizzata in una modale per lo scegli scarta\">\r\n Usa per scegli o scarta\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"col-sm-12 col-md-4 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Nome entit\u00E0 </mat-label>\r\n <mat-form-field matTooltip=\"Nome dell'entit\u00E0 relazionata\">\r\n <input formControlName=\"EntitySourceName\" required matInput [(ngModel)]=\"field.EntitySourceName\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.EntitySourceName)\">\r\n <mat-error>\r\n {{ getFormValidationErrors('EntitySourceName') }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-sm-12 mt-2\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <mat-label> Nomi dei campi (invio per confermare) </mat-label>\r\n <mat-form-field\r\n matTooltip=\"Elenco di campi ordinato che verr\u00E0 visualizzato nella lookup (premere invio per confermare)\">\r\n <input matInput (keyup)=\"onMultiSelectInputKeyup($event, 'FieldNames')\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-8 align-self-center\">\r\n <span class=\"mr-3\">Nomi selezionati:</span>\r\n <div class=\"extension-container\" *ngFor=\"let extension of field.FieldNames; let i = index\">\r\n <span>{{extension}}</span>\r\n <mat-icon class=\"ml-1\" (click)=\"field.FieldNames.splice(i,1)\">close\r\n </mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI LOOKUP -->\r\n\r\n<!-- DIALOG PER AGGIUNGERE UN METADATA NEI CAMPI DI TIPO ALLEGATO O IMMAGINE -->\r\n<!-- <ng-template #dialogMetadata>\r\n <eqp-dynamic-module-add-form-field [field]=\"selectedMetadata\" [availableFields]=\"availableFields\"\r\n [indexField]=\"indexSelectedMetadata\" (saveFieldEvent)=\"onSaveMetadata($event)\" [fieldTypesToExclude]=\"[6,7,10]\">\r\n </eqp-dynamic-module-add-form-field>\r\n</ng-template> -->\r\n\r\n<ng-template #buttonImagesKeyValueInputColumn let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> {{col.display}} </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\" required spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n</ng-template>\r\n<!--DIALOG PER SEMPLIFICARE LA SCRITTURA DEL CAMPO FORMULA-->\r\n<ng-template #dialogFormula>\r\n <eqp-dynamic-module-add-formula-component>\r\n </eqp-dynamic-module-add-formula-component>\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesImageTemplate let-row=\"row\" let-col=\"col\">\r\n <img src=\"data:image/jpeg;base64, {{row[col.key]}}\" class=\"GenericListImagesImageTemplate\">\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesKeyTemplate let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> Chiave </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\">\r\n </mat-form-field>\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesValueTemplate let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> Valore </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\">\r\n </mat-form-field>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER QUERY EDITOR -->\r\n<ng-template #dialogQE>\r\n <ng-template [appDynamicLoader] [data]=\"QueryEditorComponent\" (out)=\"onExternalComponentOut($event);\">\r\n </ng-template>\r\n</ng-template>\r\n ", styles: [".mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale3d(0,0,0);background-color:var(--mat-ripple-color, rgba(0, 0, 0, .1))}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.mat-app-background{background-color:var(--mat-app-background-color, transparent);color:var(--mat-app-text-color, inherit)}.add-form-field{max-height:100%;height:100%;overflow:hidden}.add-form-field mat-card-header{min-height:3rem}.add-form-field mat-card-content{height:calc(100% - 6rem);max-height:calc(100% - 6rem);overflow:auto;margin:0;padding:0 2rem 2rem}.add-form-field mat-card-content .eqp-dform-add-form-field-main{height:60%}.add-form-field mat-card-content .eqp-dform-add-form-field-tabs{height:40%}.add-form-field mat-card-footer{min-height:3rem}.extension-container{display:inline-block;font-size:15px;border:1px solid var(--primary);border-radius:15px;margin-right:10px}.extension-container mat-icon{vertical-align:middle;font-size:15px;height:15px;width:15px;color:var(--danger);margin-right:10px;cursor:pointer}.extension-container span{margin-left:10px}.key-value-list-section-title{background:linear-gradient(to right,var(--gray) 0%,rgb(255,255,255) 100%) left bottom #fff no-repeat;background-size:100% 1px}.value-pairs-list{list-style:none;padding:0}.value-pairs-list mat-icon{vertical-align:middle;font-size:15px;height:15px;width:15px;color:var(--danger);margin-right:10px;cursor:pointer}::ng-deep .mat-dialog-container{border-radius:10px}.row.title{background-color:#ebebeb;padding:20px 0 20px 50px}.row.title mat-icon.add{background:#fff;color:#7b7b7b;height:40px;width:40px;border-radius:10px;font-size:27px;padding:7px 6px 6px 7px;margin:0 7px 0 0}.row.title .header-title-standard{display:flex;align-items:center;font-size:19px;font-weight:700;color:gray}.row:not(.title){margin:15px 0 0}form{margin:25px 0 0}.col-middle{display:flex;align-items:center}::ng-deep .mat-select-arrow{color:transparent!important}input[type=number]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none}.increasableValues{display:flex}.increasableValues .col-sm-12{display:flex;flex-direction:column;margin:0 3em 0 0}.increasableValues .col-sm-12 .mat-form-field{height:79px;line-height:34px;width:50%}.increasableValues .col-sm-12 .mat-form-field ::ng-deep .mat-form-field-flex{width:230px;border:1px solid #e7e7e9;border-radius:10px;padding:7px 0 0 20px!important;margin-top:10px;background-color:#fff}.increasableValues .col-sm-12 .mat-form-field ::ng-deep .mat-form-field-flex .mat-form-field-infix{display:flex;margin:-10px 0 0}.increasableValues .col-sm-12 .mat-form-field ::ng-deep .mat-form-field-flex .mat-form-field-infix input{margin:0;border:none;height:100%}.increasableValues .col-sm-12 .mat-form-field div.buttons{display:flex;flex-direction:column;margin:-10px 0 0;border-right:1px solid #F4F4F4;padding:10px 14px 0 0}.increasableValues .col-sm-12 .mat-form-field div.buttons button.up{height:17px;width:21px;background:url(/assets/images/arrow.png) no-repeat;background-size:20px;background-position-y:1px;background-position-x:1px;-webkit-transform:rotate(180deg);border:none;opacity:.3;cursor:pointer}.increasableValues .col-sm-12 .mat-form-field div.buttons button.down{height:50px;width:23px;background:url(/assets/images/arrow.png) no-repeat no-repeat;background-size:20px;border:none;opacity:.3;background-position-y:21px;background-position-x:0px;cursor:pointer}.increasableValues .col-sm-12 .mat-form-field input{margin:-14px 0 0 63px;font-size:18px}.second .col-sm-12{margin:0 1em 0 0}.date ::ng-deep mat-form-field .mat-form-field-wrapper .mat-form-field-label-wrapper label{display:none}.date ::ng-deep mat-form-field .mat-form-field-wrapper .mat-form-field-suffix{display:inline}.GenericListImagesImageTemplate{height:100%}.configuraQueryEditor{display:flex;justify-content:center;flex-flow:column}eqp-attachments ::ng-deep div button{padding:5px 35px;background:linear-gradient(to right,#1e31eb,#693dda);border-radius:10px}eqp-attachments ::ng-deep div button span mat-icon{margin-right:5px}eqp-attachments ::ng-deep div button.eqp-attachments-delete-btn{color:#fff}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .row:first-child{padding:20px 40px;background-color:#ebebeb;color:gray;font-size:19px;font-weight:700}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .mat-form-field-label-wrapper label{margin-top:21px;margin-left:25px}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .btn-primary[disabled]{padding:7px 35px;border-radius:10px;font-size:14px;background-color:#dbdbdc!important;color:#000;background:none}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .btn-primary:not(disabled){padding:7px 35px;border-radius:10px;font-size:14px;background:linear-gradient(to right,#1e31eb,#693dda);color:#fff}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form button{margin:0 10px 0 0!important;border:1px solid #1E31EB;padding:7px 35px;border-radius:10px;font-size:14px}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form button[disabled]{border:none}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .ng-star-inserted .justify-content-center button{padding:4px;margin:0;border:none;left:8px}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .row:last-child{padding:50px 20px 20px 0}eqp-table ::ng-deep mat-form-field:not(.mat-paginator-page-size-select) .mat-form-field-wrapper input{background-color:#ebebeb!important;background:url(data:image/png;base64,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) no-repeat;background-size:19px;background-position:19px;padding:15px 0 15px 53px!important}eqp-table ::ng-deep mat-form-field:not(.mat-paginator-page-size-select) .mat-form-field-wrapper input:focus{background-color:#fff!important;border:1px solid #e7e7e9}eqp-table ::ng-deep mat-form-field:not(.mat-paginator-page-size-select) .mat-form-field-wrapper .mat-form-field-label-wrapper label{margin-top:21px;margin-left:55px}eqp-table ::ng-deep mat-header-row{background-color:#ebebeb;border-bottom-width:0px}eqp-table ::ng-deep mat-header-row .mat-column-Required{flex:none!important}eqp-table ::ng-deep .mat-sort-header-button{color:#3b3a3b;font-size:15px}eqp-table ::ng-deep .mat-row{background-color:#fff;margin:10px 0;box-shadow:0 3px 7px -3px #0003;padding:5px 0}eqp-table ::ng-deep .mat-row .mat-column-Required{flex:0 0 8%!important}eqp-table ::ng-deep .mat-row mat-cell eqp-select{margin-top:16px}eqp-table ::ng-deep .mat-row mat-cell eqp-select .mat-form-field-wrapper{padding-bottom:0}eqp-table ::ng-deep .mat-row .mat-cell:last-child span i.success-color{background-color:#383fec;color:#fff!important;padding:6px;border-radius:3px}@media screen and (max-width: 1100px){.row:not(.title){margin:0!important}.second{display:flex;flex-direction:column}.second .col-sm-12{margin:0}.buttonsForm{padding:0 30px 20px 0;margin:50px 0 0}}@media screen and (max-width: 766px){.increasableValues{display:flex;flex-direction:column}.increasableValues .col-sm-12{margin:0 0 -1.5em}.second{display:flex;flex-direction:column}.second .col-sm-12{margin:0 0 -3.4em}.buttonsForm{margin:55px 0 0!important;padding:0 13px 20px 0;transform:translateY(110px)}}@media screen and (max-width: 577px){.increasableValues .col-sm-12{margin:0 0 1.5em}}:host ::ng-deep .mat-input-element{width:100%;width:-moz-available;width:-webkit-fill-available;width:fill-available}\n"] }]
|
|
1177
|
+
args: [{ selector: "eqp-dynamic-module-add-form-field", template: "<!-- <div class=\"add-form-field bigwrapper\" style=\"max-height: 100vh !important; overflow-x: hidden; overflow-y: auto;\"> -->\r\n\r\n<mat-card class=\"add-form-field\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n {{indexField != null && indexField >= 0 ? \"Modifica\" : \"Aggiungi\"}} campo\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n\r\n <div class=\"container-fluid containerContent \">\r\n <form [formGroup]=\"fieldFormGroup\" style=\"height: 100%;\">\r\n <!--#region AREA PRINCIPALE -->\r\n <div class=\"row eqp-dform-add-form-field-main\">\r\n <!--#region TIPO CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 tipoCampo\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['FieldType'].status != 'VALID' && fieldFormGroup.controls['FieldType'].touched }\">\r\n Tipo campo *\r\n </mat-label>\r\n <eqp-select [enumData]=\"FieldTypeEnum\" [(ngModelInput)]=\"field.FieldType\"\r\n [showCancelButton]=\"false\" (ngModelInputChange)=\"onFieldTypeChange()\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'FieldType'\"\r\n [enumDataToExclude]=\"fieldTypesToExclude\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO CAMPO -->\r\n\r\n <!--#region CODICE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['Label'].status != 'VALID' && fieldFormGroup.controls['Label'].touched }\">\r\n Codice *\r\n </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"Label\" required matInput [(ngModel)]=\"field.Label\"\r\n (keypress)=\"omit_special_char($event)\" spellcheck=\"false\" autocomplete=\"off\"\r\n (focusout)=\"stringSanitizer(field.Label)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Label') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['pattern']\">\r\n Si possono inserire solo lettere a-z\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion CODICE -->\r\n\r\n <!--#region DESCRIZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['Description'].status != 'VALID' && fieldFormGroup.controls['Description'].touched }\">\r\n Descrizione *\r\n </mat-label>\r\n <mat-form-field>\r\n <input name=\"Description\" formControlName=\"Description\" required matInput\r\n [(ngModel)]=\"field.Description\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Description)\">\r\n <!-- <mat-error *ngIf=\"!field.Description.valid && field.FormFormGroup.controls[field.Description].touched\"> -->\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Description') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Description'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Description'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion DESCRIZIONE -->\r\n\r\n <!--#region SEZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\" *ngIf=\"formFieldsGroups\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['FieldGroup'].status != 'VALID' && fieldFormGroup.controls['FieldGroup'].touched }\">Sezione\r\n *</mat-label>\r\n <eqp-select [arrayData]=\"formFieldsGroups\" [(ngModelInput)]=\"field.FieldGroup\"\r\n [arrayKeyProperty]=\"'Name'\" [arrayValueProperty]=\"'Name'\" [formGroupInput]=\"fieldFormGroup\"\r\n [formControlNameInput]=\"'FieldGroup'\" required [includeFullObject]=\"false\">\r\n </eqp-select>\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldGroup') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['FieldGroup'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </div>\r\n <!--#endregion SEZIONE -->\r\n\r\n <!--#region OBBLIGATORIO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Required\" formControlName=\"Required\"\r\n color=\"primary\">\r\n Obbligatorio\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion OBBLIGATORIO -->\r\n\r\n <!--#region READONLY -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Readonly\" formControlName=\"Readonly\"\r\n color=\"primary\">\r\n ReadOnly\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion READONLY -->\r\n\r\n </div>\r\n <!--#endregion AREA PRINCIPALE -->\r\n\r\n <!--#region AREA TABS -->\r\n <mat-tab-group class=\"eqp-dform-add-form-field-tabs\" mat-stretch-tabs=\"false\" mat-align-tabs=\"start\">\r\n <!--#region STILE COMPILAZIONE -->\r\n <mat-tab label=\"Stile Compilazione\">\r\n <div class=\"row\">\r\n\r\n <!--#region LARGHEZZA CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Larghezza campo</mat-label>\r\n <eqp-select [arrayData]=\"availableColSpanSizesCompilazione\" [(ngModelInput)]=\"field.ColSpanSizes\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n (ngModelInputChange)=\"onColSpanSizeSelect()\" [isMultiSelect]=\"true\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'ColSpanSizes'\" [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion LARGHEZZA CAMPO -->\r\n\r\n <!--#region LABEL CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Label css </mat-label>\r\n <mat-form-field>\r\n <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" matInput\r\n [(ngModel)]=\"field.LabelstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.LabelstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('LabelstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['LabelstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LABEL CSS -->\r\n\r\n <!--#region FIELD CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Field css </mat-label>\r\n <mat-form-field>\r\n <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" matInput\r\n [(ngModel)]=\"field.FieldstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.FieldstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['FieldstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FIELD CSS -->\r\n \r\n <!--#region VISIBLE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n <div class=\" align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n Visibile\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n <!--#endregion VISIBLE -->\r\n\r\n <!--#region INVISIBILE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"field.InListView\">\r\n <div class=\" align-self-center\">\r\n Tipo di invisibilit\u00E0 del campo\r\n <eqp-select [enumData]=\"fieldInvisibilityEnum\" [(ngModelInput)]=\"field.Invisibility\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'Invisibility'\" [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n </div>\r\n <!--#endregion INVISIBLE -->\r\n\r\n <!--#region VISIBLE IF -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> VisibleIf </mat-label>\r\n <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('VisibleIf') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['VisibleIf'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput [(ngModel)]=\"field.VisibleIf\"\r\n [matAutocomplete]=\"VisibleIfAutocomplete\" (keyup)=\"setVisibleIfAutocompleteOptions($event)\"\r\n (focus)=\"setVisibleIfAutocompleteOptions(null)\" (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-autocomplete #VisibleIfAutocomplete=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of VisibleIfAutocompleteOptions\" [value]=\"option.value\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field> -->\r\n </div>\r\n <!--#endregion VISIBLE IF -->\r\n\r\n <!--#region TOOLTIP -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Tooltip </mat-label>\r\n <mat-form-field>\r\n <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput [(ngModel)]=\"field.Tooltip\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Tooltip') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Tooltip'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['Tooltip'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion TOOLTIP -->\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion STILE COMPILAZIONE -->\r\n\r\n <!--#region STILE DELLA RISPSOTA -->\r\n <mat-tab label=\"Stile Risposta\">\r\n <div class=\"row\">\r\n\r\n <!--#region LARGHEZZA CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Larghezza campo</mat-label>\r\n <eqp-select [arrayData]=\"availableColSpanSizesRisposta\" [(ngModelInput)]=\"field.AnswerStyle.ColSpanSizes\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n (ngModelInputChange)=\"onColSpanSizeSelect()\" [isMultiSelect]=\"true\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AnswerStyleColSpanSizes'\" [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion LARGHEZZA CAMPO -->\r\n\r\n <!--#region LABEL CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Label css </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleLabelstyleCSS\" formControlName=\"AnswerStyleLabelstyleCSS\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.LabelstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.LabelstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('LabelstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleLabelstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LABEL CSS -->\r\n\r\n <!--#region FIELD CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Field css </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleFieldstyleCSS\" formControlName=\"AnswerStyleFieldstyleCSS\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.FieldstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.FieldstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleFieldstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FIELD CSS -->\r\n\r\n <!--#region VISIBLE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"(field.AnswerStyle.VisibleIf != null || field.AnswerStyle.VisibleIf != undefined) && field.AnswerStyle.VisibleIf != ''\">\r\n <div class=\" align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.AnswerStyle.InListView\" formControlName=\"AnswerStyleInListView\"\r\n color=\"primary\" [disabled]=\"fieldFormGroup.controls['AnswerStyleInListView'].disabled\">\r\n Visibile\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n <!--#endregion VISIBLE -->\r\n \r\n <!--#region INVISIBILE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"field.AnswerStyle.InListView\">\r\n <div class=\" align-self-center\">\r\n Tipo di invisibilit\u00E0 del campo\r\n <eqp-select [enumData]=\"fieldInvisibilityEnum\" [(ngModelInput)]=\"field.AnswerStyle.Invisibility\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AnswerStyleInvisibility'\" [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n </div>\r\n <!--#endregion INVISIBLE -->\r\n\r\n <!--#region VISIBLE IF -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> VisibleIf </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleVisibleIf\" formControlName=\"AnswerStyleVisibleIf\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.VisibleIf\" (click)=\"openAnswerStyleVisibleIfDialog()\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.VisibleIf)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('VisibleIf') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleVisibleIf'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput [(ngModel)]=\"field.VisibleIf\"\r\n [matAutocomplete]=\"VisibleIfAutocomplete\" (keyup)=\"setVisibleIfAutocompleteOptions($event)\"\r\n (focus)=\"setVisibleIfAutocompleteOptions(null)\" (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-autocomplete #VisibleIfAutocomplete=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of VisibleIfAutocompleteOptions\" [value]=\"option.value\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field> -->\r\n </div>\r\n <!--#endregion VISIBLE IF -->\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion STILE DELLA RISPSOTA -->\r\n\r\n <!--#region SPECIFICHE -->\r\n <mat-tab label=\"Specifiche\">\r\n <div class=\"row\">\r\n <ng-container *ngTemplateOutlet=\"fieldTypeFormTemplate\">\r\n </ng-container>\r\n </div>\r\n </mat-tab>\r\n <!--#endregion SPECIFICHE -->\r\n\r\n <!--#region MODALITA' RECUPERO DATI -->\r\n <mat-tab label=\"Modalit\u00E0 recupero dati\">\r\n <div class=\"row\">\r\n\r\n\r\n\r\n <eqp-select [enumData]=\"dataGetterTypeEnum\" [(ngModelInput)]=\"field.DataGetter.DataGetterType\"\r\n [showCancelButton]=\"false\" (ngModelInputChange)=\"onDataGetterTypeChange()\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DataGetterType'\">\r\n </eqp-select>\r\n \r\n <div class=\"col-md-4\" [hidden]=\"field.DataGetter.DataGetterType != dataGetterTypeEnum.Manuale\">\r\n <mat-label> Valore di Default </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DataGetterValue\" matInput [(ngModel)]=\"field.DataGetter.DataGetterValue\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div>\r\n \r\n <div class=\"col-md-4\" [hidden]=\"field.DataGetter.DataGetterType != dataGetterTypeEnum.Formula\">\r\n <mat-label> Formula (Javascript) </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"Formula\" matInput [(ngModel)]=\"field.Formula\"\r\n (click)=\"openFormulaDialog()\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Formula)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Formula') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Formula'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Formula'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n \r\n <div class=\"col-md-4\" *ngIf=\"field.DataGetter.DataGetterType == dataGetterTypeEnum['Da database']\">\r\n \r\n <div class=\"col-12 mt-4 configuraQueryEditor\">\r\n <div class=\"row\">\r\n <div class=\"col-10\">Configura in Query Editor</div>\r\n <div class=\"col-2\">\r\n <button class=\"btn btn-primary\" (click)=\"openDBGetter()\" *ngIf=\"field.DataGetter.DataGetterValue == null\">Procedi</button>\r\n <button class=\"btn btn-success\" (click)=\"openDBGetter()\" *ngIf=\"field.DataGetter.DataGetterValue != null\">Modifica</button>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n <div class=\"col-6\">Seleziona colonna</div>\r\n <div class=\"col-6\">\r\n <eqp-select [arrayData]=\"columnKeys\" [(ngModelInput)]=\"field.DataGetter.DataGetterColumnForce\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n [showCancelButton]=\"true\">\r\n </eqp-select>\r\n </div> \r\n </div>\r\n \r\n </div>\r\n \r\n \r\n </div>\r\n \r\n <div class=\"col-md-4\" *ngIf=\"field.DataGetter.DataGetterType == dataGetterTypeEnum['Da modulo dinamico']\">\r\n \r\n <div class=\"col-12 mt-4\" *ngIf=\"forms.length > 0\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">Modulo</div>\r\n <div class=\"col-6\">\r\n <eqp-select [placeholder]=\"'Seleziona modulo'\" [arrayData]=\"forms\" [(ngModelInput)]=\"DMModule\" [isSearchable]=\"true\"\r\n [arrayKeyProperty]=\"'Code'\" [arrayValueProperty]=\"'Name'\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DMModule'\"\r\n (ngModelInputChange)=\"onChangeDMModule()\">\r\n </eqp-select>\r\n </div> \r\n </div>\r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null && DMModule != null\">\r\n <div class=\"col-6\">Campo</div>\r\n <div class=\"col-6\">\r\n <eqp-select [placeholder]=\"'Seleziona campo'\" [arrayData]=\"DMFields\" [(ngModelInput)]=\"DMField\" [isSearchable]=\"true\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'key'\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DMField'\"\r\n (ngModelInputChange)=\"onChangeDMField()\">\r\n </eqp-select>\r\n </div> \r\n </div>\r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n <div class=\"col-6\">Cardinalit\u00E0</div>\r\n <div class=\"col-6\">\r\n <eqp-select [enumData]=\"DMGetterCardinalities\" [(ngModelInput)]=\"field.DataGetter.DataGetterCardinality\"\r\n [showCancelButton]=\"false\">\r\n </eqp-select>\r\n </div> \r\n </div> \r\n \r\n <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n <div class=\"col-6\">Contestualizzazione</div>\r\n <div class=\"col-6\">\r\n <eqp-select [arrayData]=\"contestualization\" [arrayKeyProperty]=\"'entityTableName'\" [arrayValueProperty]=\"'entityTableName'\" [(ngModelInput)]=\"field.DataGetter.DataGetterContestualization\"\r\n [showCancelButton]=\"true\" (ngModelInputChange)=\"onChangeDMContestualization()\">\r\n </eqp-select>\r\n </div> \r\n </div> \r\n \r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion MODALITA' RECUPERO DATI -->\r\n\r\n </mat-tab-group>\r\n <!--#region AREA TABS -->\r\n\r\n <!--#region listValueFieldFormTemplate vallues -->\r\n \r\n <!--#endregion listValueFieldFormTemplate vallues -->\r\n\r\n </form>\r\n </div>\r\n </mat-card-content>\r\n\r\n <mat-card-footer>\r\n\r\n <div class=\"d-flex justify-content-end mt-2 mb-1 me-3\"> \r\n <!-- <div class=\"buttonsForma\"> -->\r\n <button class=\"btn mat-raised-button cancel\" (click)=\"saveAndExitAddField(false)\" type=\"button\">\r\n Annulla\r\n </button>\r\n <span class=\"me-2\"></span>\r\n <button class=\"mr-2 save\" mat-raised-button color=\"primary\" (click)=\"saveAndExitAddField(true)\"\r\n [disabled]=\"disableSaveField()\" type=\"button\">\r\n Salva\r\n </button>\r\n <!-- </div> -->\r\n </div>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!-- </div> -->\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI DI TESTO -->\r\n<ng-template #textFieldFormTemplate>\r\n <!--#region MASCHERA -->\r\n <div class=\"col-sm-12 col-md-6\">\r\n <mat-label>Maschera</mat-label>\r\n <eqp-select [enumData]=\"TextMaskEnum\" [(ngModelInput)]=\"field.TextMask\" [formGroupInput]=\"fieldFormGroup\"\r\n [formControlNameInput]=\"'TextMask'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion MASCHERA -->\r\n\r\n <!--#region SPEECH TO TEXT -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\" [hidden]=\"field.Readonly\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Microphone\" formControlName=\"Microphone\" color=\"primary\">\r\n Speech-To-Text\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SPEECH TO TEXT -->\r\n\r\n <!--#region LUNGHEZZA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['MinLenght'].status != 'VALID' && fieldFormGroup.controls['MinLenght'].touched }\">\r\n Lunghezza minima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMin\" formControlName=\"MinLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MinLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MINIMA -->\r\n\r\n <!--#region LUNGHEZZA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['MaxLenght'].status != 'VALID' && fieldFormGroup.controls['MaxLenght'].touched }\">\r\n Lunghezza massima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMax\" formControlName=\"MaxLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MaxLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI DI TESTO -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 ETICHETTA -->\r\n<ng-template #labelFieldFormTemplate>\r\n\r\n <!--#region ETICHETTA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-form-field>\r\n\r\n <textarea name=\"Etichetta\" placeholder=\"Etichetta\" matInput formControlName=\"Etichetta\" [(ngModel)]=\"field.Etichetta\"></textarea>\r\n\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion ETICHETTA -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 ETICHETTA -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI AREA DI TESTO -->\r\n<ng-template #textareaFieldFormTemplate>\r\n <!--#region RIGHE -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Righe </mat-label>\r\n <mat-form-field class=\"righe\">\r\n <input id=\"rows\" formControlName=\"Rows\" type=\"number\" [min]=\"0\" matInput [(ngModel)]=\"field.Rows\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.Rows)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Rows') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Rows'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Rows'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion RIGHE -->\r\n\r\n <!--#region SpeechToText -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\" [hidden]=\"field.Readonly\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Microphone\" formControlName=\"Microphone\" color=\"primary\">\r\n Speech-To-Text\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SpeechToText -->\r\n\r\n <!--#region LUNGHEZZA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Lunghezza minima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMin\" formControlName=\"MinLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MinLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MINIMA -->\r\n\r\n <!--#region LUNGHEZZA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Lunghezza massima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMax\" formControlName=\"MaxLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MaxLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI AREA DI TESTO -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI BOOLEANI -->\r\n<ng-template #booleadFieldFormTemplate>\r\n <!--#region A TRE STATI -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsTristate\" formControlName=\"IsTristate\" color=\"primary\">\r\n A tre stati\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion A TRE STATI -->\r\n\r\n <!--#region TIPO PRESENTAZIONE -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label>Tipo di presentazione *</mat-label>\r\n <eqp-select [enumData]=\"BoolPresentantioEnum\" [(ngModelInput)]=\"field.PresetationType\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'PresetationType'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO PRESENTAZIONE -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI BOOLEANI -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI DATA -->\r\n<ng-template #dateFieldFormTemplate>\r\n <!--#region TIPO DI DATA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label>Tipo di data</mat-label>\r\n <eqp-select [enumData]=\"DateTimeTypeEnum\" [(ngModelInput)]=\"field.IsOnlyDate\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'IsOnlyDate'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO DI DATA -->\r\n\r\n <!--#region FORMATO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Formato </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DateFormat\" matInput [(ngModel)]=\"field.DateFormat\"\r\n [matTooltip]=\"'Indicare il formato seguendo la guida del pacchetto momentjs.'\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Formato)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Formato') }} -->\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FORMATO -->\r\n\r\n <!--#region DATA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label> Data minima </mat-label>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo data']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"mode.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Data e ora']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"mode.DATETIMEPICKER\" [outputFormat]=\"'DD/MM/YYYY HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo orario']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"mode.TIMEPICKER\" [outputFormat]=\"'HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <!--#endregion DATA MINIMA -->\r\n\r\n <!--#region DATA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label> Data massima </mat-label>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo data']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"mode.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Data e ora']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"mode.DATETIMEPICKER\" [outputFormat]=\"'DD/MM/YYYY HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo orario']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"mode.TIMEPICKER\" [outputFormat]=\"'HH:mm'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <!--#endregion DATA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI DATA -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI NUMERICI -->\r\n<ng-template #numericFieldFormTemplate>\r\n <!--#region VALORE INTERO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsInteger\" formControlName=\"IsInteger\" color=\"primary\">\r\n Valore intero\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion VALORE INTERO -->\r\n\r\n <!--#region SEPARATORE DECIMALI -->\r\n <div *ngIf=\"!field.IsInteger\" class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Separatore decimali </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DecimalSeparator\" matInput [(ngModel)]=\"field.DecimalSeparator\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.DecimalSeparator)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('DecimalSeparator') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalSeparator'].errors?.['pattern']\">\r\n Non \u00E8 possibile inserire dei numeri.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalSeparator'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SEPARATORE DECIMALI -->\r\n\r\n <!--#region PRECISIONE DECIMALI -->\r\n <div *ngIf=\"!field.IsInteger\" class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Precisione decimali </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DecimalPrecision\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.DecimalPrecision\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.DecimalPrecision)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('DecimalPrecision') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalPrecision'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalPrecision'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion PRECISIONE DECIMALI -->\r\n\r\n <!--#region SEPARATORE MIGLIAIA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Separatore migliaia </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ThousandsSeparator\" matInput [(ngModel)]=\"field.ThousandsSeparator\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.ThousandsSeparator)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('ThousandsSeparator') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['ThousandsSeparator'].errors?.['pattern']\">\r\n Non \u00E8 possibile inserire dei numeri.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['ThousandsSeparator'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SEPARATORE MIGLIAIA -->\r\n\r\n <!--#region SIMBOLO VALUTA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n matTooltip=\"Simbolo prima del valore\"\r\n matTooltipClass=\"example-tooltip-uppercase\"\r\n > Simbolo valuta </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"CurrencySymbol\" matInput [(ngModel)]=\"field.CurrencySymbol\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.CurrencySymbol)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('CurrencySymbol') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['CurrencySymbol'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SIMBOLO VALUTA -->\r\n\r\n <!--#region UNITA DI MISURA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n matTooltip=\"Simbolo dopo il valore\"\r\n matTooltipClass=\"example-tooltip-uppercase\"\r\n > Unit\u00E0 di misura </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MeasureUnit\" matInput [(ngModel)]=\"field.MeasureUnit\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.MeasureUnit)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MeasureUnit') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MeasureUnit'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion UNITA DI MISURA -->\r\n\r\n <!--#region VALORE MINIMO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Valore minimo </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MinValue\" type=\"number\" matInput [(ngModel)]=\"field.MinValue\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinValue)\"\r\n pattern=\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinValue') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinValue'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinValue'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion VALORE MINIMO -->\r\n\r\n <!--#region VALORE MASSIMO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Valore massimo </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MaxValue\" type=\"number\" matInput [(ngModel)]=\"field.MaxValue\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxValue)\"\r\n pattern=\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxValue') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxValue'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxValue'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion VALORE MASSIMO -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI NUMERICI -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI ALLEGATO -->\r\n<ng-template #attachmentFieldFormTemplate>\r\n <!--#region ALLEGATI MULTIPLI -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiAttach\" formControlName=\"IsMultiAttach\" color=\"primary\">\r\n Allegati multipli\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion ALLEGATI MULTIPLI -->\r\n\r\n <!--#region ESTENSIONI ACCETTATE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Estensioni accettate</mat-label>\r\n <eqp-select [arrayData]=\"AvailableFileExtensions.concat(AvailableImageExtensions)\"\r\n [(ngModelInput)]=\"field.AllowedExtensions\" [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AllowedExtensions'\" [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion ESTENSIONI ACCETTATE -->\r\n\r\n <!-- <div class=\"col-sm-12 mt-2\">\r\n <div class=\"row mt-2\">\r\n <div class=\"col-sm-12 col-md-6\">\r\n <div class=\"header-title-standard\">\r\n Elenco metadata\r\n </div>\r\n </div>\r\n <div class=\"col-sm-12 col-md-6 text-right buttonsForm\">\r\n <button class=\"btn btn-primary save\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"openMetadataDialog()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px;\">Aggiungi allegato</span>\r\n </button>\r\n </div>\r\n </div>\r\n <eqp-table #metadataFieldsTable [createMatCard]=\"false\" [columns]=\"metadataColumns\"\r\n [data]=\"field.MetadataFields\" [emptyTableMessage]=\"'Nessun metadata inserito'\" [searchText]=\"'Cerca'\">\r\n </eqp-table>\r\n </div> -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI ALLEGATO -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI LISTA DI VALORI -->\r\n<ng-template #listValueFieldFormTemplate>\r\n <!--#region SCELTA MULTIPLA -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiChoiche\" formControlName=\"IsMultiChoiche\" color=\"primary\">\r\n Scelta multipla\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SCELTA MULTIPLA -->\r\n\r\n <!--#region TIPO DI PRESENTAZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Tipo di presentazione*</mat-label>\r\n <eqp-select [enumData]=\"ListPresentationEnum\" [(ngModelInput)]=\"field.PresentationMode\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'PresentationMode'\"\r\n (ngModelInputChange)=\"onPresentationModeChange()\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO DI PRESENTAZIONE -->\r\n\r\n\r\n <!--#region GESTIONE OPZIONI -->\r\n <div class=\"col-sm-12 mt-2\">\r\n\r\n <mat-label> area dei valori da inserire </mat-label>\r\n <mat-form-field>\r\n <textarea matInput \r\n placeholder=\"key1|value1;key2|value2\" \r\n [(ngModel)]=\"field.ValueString\"\r\n spellcheck=\"false\" \r\n autocomplete=\"off\"\r\n >\r\n </textarea>\r\n </mat-form-field>\r\n\r\n <div class=\"row\" *ngIf=\"countValuePairs(field.ValuePairs) > 0\">\r\n <h4 class=\"key-value-list-section-title\"> </h4>\r\n <div class=\"col-md-4\">\r\n <mat-label> Label opzione (invio per confermare)</mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"keyValueObject.key\" (keyup)=\"onMultiSelectInputKeyup($event, null)\"\r\n spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <mat-label> Valore opzione (invio per confermare)</mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"keyValueObject.value\" (keyup)=\"onMultiSelectInputKeyup($event, null)\"\r\n spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-4 align-self-center\">\r\n <span class=\"mr-3\">Opzioni inserite:</span>\r\n <ul class=\"value-pairs-list\">\r\n <li *ngFor=\"let keyValuePair of getDictionaryKeyValue()\">\r\n <mat-icon class=\"mr-1\" (click)=\"deleteKeyFromDictionary(keyValuePair.key)\">close\r\n </mat-icon>\r\n <span><b>Label: </b> {{keyValuePair.key}} - <b>Valore: </b> {{keyValuePair.value}}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div> \r\n\r\n </div> \r\n <!--#endregion GESTIONE OPZIONI -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI LISTA DI VALORI -->\r\n\r\n\r\n\r\n\r\n<!--#region FORM LISTA IMMAGINI -->\r\n<ng-template #imageFieldSelectorFormTemplate>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-3 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Altezza in Pixel delle immagini scalate </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ResizedImagesHeightPx') }}\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n <div class=\"col-3 col-xs-12 col-middle\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiChoiche\" formControlName=\"IsMultiChoiche\" color=\"primary\">\r\n Scelta multipla\r\n </mat-slide-toggle>\r\n </div> \r\n </div>\r\n\r\n <eqp-attachments #imageSelectorAttachments [attachmentsList]=\"field.AttachmentList\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"true\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\" (localEditedAttachments)=\"catchButtonImagesChange($event)\"\r\n [attachmentsColumns]=\"configColumnListImages\">\r\n </eqp-attachments>\r\n\r\n \r\n</ng-template>\r\n<!--#endregion FORM LISTA IMMAGINI -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI IMMAGINE -->\r\n<ng-template #imageFieldFormTemplate>\r\n <div class=\"row\">\r\n <div class=\"col-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.EnableDrawing\" formControlName=\"EnableDrawing\" color=\"primary\">\r\n Immagine disegnabile?\r\n </mat-slide-toggle>\r\n </div> \r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-4 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Altezza in Pixel delle immagini scalate </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ResizedImagesHeightPx') }}\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Etichetta </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonKey\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Valore </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonValue\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n </div> \r\n\r\n <div class=\"col-sm-12 col-md-8 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <eqp-attachments [attachmentsList]=\"[field.DynAttachment]\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"false\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\"\r\n (localEditedAttachments)=\"catchButtonImageChange($event)\" (onDeleteAttachment)=\"deleteImage($event)\" #imageAttachment>\r\n </eqp-attachments>\r\n <ng-template #readonlyProfileImage>\r\n <img *ngIf=\"field.DynAttachment\"\r\n src=\"data:{{field.DynAttachment.FileContentType}};base64,{{field.DynAttachment.FileDataBase64}}\"\r\n alt=\"\">\r\n </ng-template> \r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI IMMAGINE -->\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI IMMAGINE CON MARKERS -->\r\n<ng-template #imageWithMarkersFieldFormTemplate>\r\n <div class=\"row\">\r\n <div class=\"col-4 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Altezza in Pixel delle immagini scalate </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ResizedImagesHeightPx') }}\r\n </mat-error>\r\n </mat-form-field> \r\n </div>\r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Etichetta </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonKey\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n <mat-label> Valore </mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"field.DynAttachment.ButtonValue\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field> \r\n </div> \r\n </div> \r\n\r\n <div class=\"col-sm-12 col-md-8 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <eqp-attachments [attachmentsList]=\"[field.DynAttachment]\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"false\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\"\r\n (localEditedAttachments)=\"catchButtonImageWithMarkersChange($event)\" (onDeleteAttachment)=\"deleteImage($event)\" #imageAttachment>\r\n </eqp-attachments>\r\n <ng-template #readonlyProfileImage>\r\n <img *ngIf=\"field.DynAttachment\"\r\n src=\"data:{{field.DynAttachment.FileContentType}};base64,{{field.DynAttachment.FileDataBase64}}\"\r\n alt=\"\">\r\n </ng-template> \r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI IMMAGINE CON MARKERS -->\r\n\r\n\r\n\r\n\r\n\r\n<!--#region FORM PROPRIET\u00C0 CAMPI LOOKUP -->\r\n<ng-template #lookupFieldFormTemplate>\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.UseAsGetOrDiscard\" formControlName=\"UseAsGetOrDiscard\" color=\"primary\"\r\n matTooltip=\"Se true la lookup viene visualizzata in una modale per lo scegli scarta\">\r\n Usa per scegli o scarta\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"col-sm-12 col-md-4 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Nome entit\u00E0 </mat-label>\r\n <mat-form-field matTooltip=\"Nome dell'entit\u00E0 relazionata\">\r\n <input formControlName=\"EntitySourceName\" required matInput [(ngModel)]=\"field.EntitySourceName\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.EntitySourceName)\">\r\n <mat-error>\r\n {{ getFormValidationErrors('EntitySourceName') }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-sm-12 mt-2\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <mat-label> Nomi dei campi (invio per confermare) </mat-label>\r\n <mat-form-field\r\n matTooltip=\"Elenco di campi ordinato che verr\u00E0 visualizzato nella lookup (premere invio per confermare)\">\r\n <input matInput (keyup)=\"onMultiSelectInputKeyup($event, 'FieldNames')\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-8 align-self-center\">\r\n <span class=\"mr-3\">Nomi selezionati:</span>\r\n <div class=\"extension-container\" *ngFor=\"let extension of field.FieldNames; let i = index\">\r\n <span>{{extension}}</span>\r\n <mat-icon class=\"ml-1\" (click)=\"field.FieldNames.splice(i,1)\">close\r\n </mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIET\u00C0 CAMPI LOOKUP -->\r\n\r\n<!-- DIALOG PER AGGIUNGERE UN METADATA NEI CAMPI DI TIPO ALLEGATO O IMMAGINE -->\r\n<!-- <ng-template #dialogMetadata>\r\n <eqp-dynamic-module-add-form-field [field]=\"selectedMetadata\" [availableFields]=\"availableFields\"\r\n [indexField]=\"indexSelectedMetadata\" (saveFieldEvent)=\"onSaveMetadata($event)\" [fieldTypesToExclude]=\"[6,7,10]\">\r\n </eqp-dynamic-module-add-form-field>\r\n</ng-template> -->\r\n\r\n<ng-template #buttonImagesKeyValueInputColumn let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> {{col.display}} </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\" required spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n</ng-template>\r\n<!--DIALOG PER SEMPLIFICARE LA SCRITTURA DEL CAMPO FORMULA-->\r\n<ng-template #dialogFormula>\r\n <eqp-dynamic-module-add-formula-component>\r\n </eqp-dynamic-module-add-formula-component>\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesImageTemplate let-row=\"row\" let-col=\"col\">\r\n <img src=\"data:image/jpeg;base64, {{row[col.key]}}\" class=\"GenericListImagesImageTemplate\">\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesKeyTemplate let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> Chiave </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\">\r\n </mat-form-field>\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesValueTemplate let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> Valore </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\">\r\n </mat-form-field>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER QUERY EDITOR -->\r\n<ng-template #dialogQE>\r\n <ng-template [appDynamicLoader] [data]=\"QueryEditorComponent\" (out)=\"onExternalComponentOut($event);\">\r\n </ng-template>\r\n</ng-template>\r\n ", styles: [".mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale3d(0,0,0);background-color:var(--mat-ripple-color, rgba(0, 0, 0, .1))}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.mat-app-background{background-color:var(--mat-app-background-color, transparent);color:var(--mat-app-text-color, inherit)}.add-form-field{max-height:100%;height:100%;overflow:hidden}.add-form-field mat-card-header{min-height:3rem}.add-form-field mat-card-content{height:calc(100% - 6rem);max-height:calc(100% - 6rem);overflow:auto;margin:0;padding:0 2rem 2rem}.add-form-field mat-card-content .eqp-dform-add-form-field-main{height:60%}.add-form-field mat-card-content .eqp-dform-add-form-field-tabs{height:40%}.add-form-field mat-card-footer{min-height:3rem}.extension-container{display:inline-block;font-size:15px;border:1px solid var(--primary);border-radius:15px;margin-right:10px}.extension-container mat-icon{vertical-align:middle;font-size:15px;height:15px;width:15px;color:var(--danger);margin-right:10px;cursor:pointer}.extension-container span{margin-left:10px}.key-value-list-section-title{background:linear-gradient(to right,var(--gray) 0%,rgb(255,255,255) 100%) left bottom #fff no-repeat;background-size:100% 1px}.value-pairs-list{list-style:none;padding:0}.value-pairs-list mat-icon{vertical-align:middle;font-size:15px;height:15px;width:15px;color:var(--danger);margin-right:10px;cursor:pointer}::ng-deep .mat-dialog-container{border-radius:10px}.row.title{background-color:#ebebeb;padding:20px 0 20px 50px}.row.title mat-icon.add{background:#fff;color:#7b7b7b;height:40px;width:40px;border-radius:10px;font-size:27px;padding:7px 6px 6px 7px;margin:0 7px 0 0}.row.title .header-title-standard{display:flex;align-items:center;font-size:19px;font-weight:700;color:gray}.row:not(.title){margin:15px 0 0}form{margin:25px 0 0}.col-middle{display:flex;align-items:center}::ng-deep .mat-select-arrow{color:transparent!important}input[type=number]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none}.increasableValues{display:flex}.increasableValues .col-sm-12{display:flex;flex-direction:column;margin:0 3em 0 0}.increasableValues .col-sm-12 .mat-form-field{height:79px;line-height:34px;width:50%}.increasableValues .col-sm-12 .mat-form-field ::ng-deep .mat-form-field-flex{width:230px;border:1px solid #e7e7e9;border-radius:10px;padding:7px 0 0 20px!important;margin-top:10px;background-color:#fff}.increasableValues .col-sm-12 .mat-form-field ::ng-deep .mat-form-field-flex .mat-form-field-infix{display:flex;margin:-10px 0 0}.increasableValues .col-sm-12 .mat-form-field ::ng-deep .mat-form-field-flex .mat-form-field-infix input{margin:0;border:none;height:100%}.increasableValues .col-sm-12 .mat-form-field div.buttons{display:flex;flex-direction:column;margin:-10px 0 0;border-right:1px solid #F4F4F4;padding:10px 14px 0 0}.increasableValues .col-sm-12 .mat-form-field div.buttons button.up{height:17px;width:21px;background:url(/assets/images/arrow.png) no-repeat;background-size:20px;background-position-y:1px;background-position-x:1px;-webkit-transform:rotate(180deg);border:none;opacity:.3;cursor:pointer}.increasableValues .col-sm-12 .mat-form-field div.buttons button.down{height:50px;width:23px;background:url(/assets/images/arrow.png) no-repeat no-repeat;background-size:20px;border:none;opacity:.3;background-position-y:21px;background-position-x:0px;cursor:pointer}.increasableValues .col-sm-12 .mat-form-field input{margin:-14px 0 0 63px;font-size:18px}.second .col-sm-12{margin:0 1em 0 0}.date ::ng-deep mat-form-field .mat-form-field-wrapper .mat-form-field-label-wrapper label{display:none}.date ::ng-deep mat-form-field .mat-form-field-wrapper .mat-form-field-suffix{display:inline}.GenericListImagesImageTemplate{height:100%}.configuraQueryEditor{display:flex;justify-content:center;flex-flow:column}eqp-attachments ::ng-deep div button{padding:5px 35px;background:linear-gradient(to right,#1e31eb,#693dda);border-radius:10px}eqp-attachments ::ng-deep div button span mat-icon{margin-right:5px}eqp-attachments ::ng-deep div button.eqp-attachments-delete-btn{color:#fff}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .row:first-child{padding:20px 40px;background-color:#ebebeb;color:gray;font-size:19px;font-weight:700}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .mat-form-field-label-wrapper label{margin-top:21px;margin-left:25px}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .btn-primary[disabled]{padding:7px 35px;border-radius:10px;font-size:14px;background-color:#dbdbdc!important;color:#000;background:none}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .btn-primary:not(disabled){padding:7px 35px;border-radius:10px;font-size:14px;background:linear-gradient(to right,#1e31eb,#693dda);color:#fff}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form button{margin:0 10px 0 0!important;border:1px solid #1E31EB;padding:7px 35px;border-radius:10px;font-size:14px}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form button[disabled]{border:none}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .ng-star-inserted .justify-content-center button{padding:4px;margin:0;border:none;left:8px}::ng-deep mat-dialog-container .container-fluid.eqp-attachments-dialog-add-container form .row:last-child{padding:50px 20px 20px 0}eqp-table ::ng-deep mat-form-field:not(.mat-paginator-page-size-select) .mat-form-field-wrapper input{background-color:#ebebeb!important;background:url(data:image/png;base64,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) no-repeat;background-size:19px;background-position:19px;padding:15px 0 15px 53px!important}eqp-table ::ng-deep mat-form-field:not(.mat-paginator-page-size-select) .mat-form-field-wrapper input:focus{background-color:#fff!important;border:1px solid #e7e7e9}eqp-table ::ng-deep mat-form-field:not(.mat-paginator-page-size-select) .mat-form-field-wrapper .mat-form-field-label-wrapper label{margin-top:21px;margin-left:55px}eqp-table ::ng-deep mat-header-row{background-color:#ebebeb;border-bottom-width:0px}eqp-table ::ng-deep mat-header-row .mat-column-Required{flex:none!important}eqp-table ::ng-deep .mat-sort-header-button{color:#3b3a3b;font-size:15px}eqp-table ::ng-deep .mat-row{background-color:#fff;margin:10px 0;box-shadow:0 3px 7px -3px #0003;padding:5px 0}eqp-table ::ng-deep .mat-row .mat-column-Required{flex:0 0 8%!important}eqp-table ::ng-deep .mat-row mat-cell eqp-select{margin-top:16px}eqp-table ::ng-deep .mat-row mat-cell eqp-select .mat-form-field-wrapper{padding-bottom:0}eqp-table ::ng-deep .mat-row .mat-cell:last-child span i.success-color{background-color:#383fec;color:#fff!important;padding:6px;border-radius:3px}@media screen and (max-width: 1100px){.row:not(.title){margin:0!important}.second{display:flex;flex-direction:column}.second .col-sm-12{margin:0}.buttonsForm{padding:0 30px 20px 0;margin:50px 0 0}}@media screen and (max-width: 766px){.increasableValues{display:flex;flex-direction:column}.increasableValues .col-sm-12{margin:0 0 -1.5em}.second{display:flex;flex-direction:column}.second .col-sm-12{margin:0 0 -3.4em}.buttonsForm{margin:55px 0 0!important;padding:0 13px 20px 0;transform:translateY(110px)}}@media screen and (max-width: 577px){.increasableValues .col-sm-12{margin:0 0 1.5em}}:host ::ng-deep .mat-input-element{width:100%;width:-moz-available;width:-webkit-fill-available;width:fill-available}\n"] }]
|
|
1177
1178
|
}], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.EnumHelper }, { type: i3.MatDialog }, { type: i0.ChangeDetectorRef }, { type: i4.HttpClient }, { type: i5.UtilityHelperService }], propDecorators: { form: [{
|
|
1178
1179
|
type: Input
|
|
1179
1180
|
}], endPointConfiguration: [{
|
|
@@ -1260,4 +1261,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1260
1261
|
type: ViewChild,
|
|
1261
1262
|
args: ["dialogQE", { static: true }]
|
|
1262
1263
|
}] } });
|
|
1263
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZvcm0tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2FkZC1mb3JtLWZpZWxkL2FkZC1mb3JtLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9hZGQtZm9ybS1maWVsZC9hZGQtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUwsa0JBQWtCLEVBSWxCLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFDTCxjQUFjLEdBSWYsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQWdCLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDckIsYUFBYSxFQUNkLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUVMLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FDekIsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLEVBRUwsb0JBQW9CLEdBQ3JCLE1BQU0sMkNBQTJDLENBQUM7QUFDbkQsT0FBTyxFQUVMLGdCQUFnQixHQUNqQixNQUFNLHdDQUF3QyxDQUFDO0FBRWhELE9BQU8sRUFDTCxvQkFBb0IsR0FFckIsTUFBTSw2Q0FBNkMsQ0FBQztBQUlyRCxPQUFPLEVBQ0wsWUFBWSxHQUViLE1BQU0sd0NBQXdDLENBQUM7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QUFpQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFvQkMsOEJBQThCO3NCQUE1RixTQUFTO3VCQUFDLGdDQUFnQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDQSw0QkFBNEI7c0JBQXhGLFNBQVM7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNJLDhCQUE4QjtzQkFBNUYsU0FBUzt1QkFBQyxnQ0FBZ0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0gsd0JBQXdCO3NCQUFqRixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDUCxlQUFlO3NCQUEvRCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFNTixRQUFRO3NCQUFoRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcclxuICBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRpb25FcnJvcnMsXHJcbiAgVmFsaWRhdG9yRm4sXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7XHJcbiAgQXR0YWNobWVudFR5cGUsXHJcbiAgRXFwQXR0YWNobWVudERpYWxvZ1NlcnZpY2UsXHJcbiAgRXFwQXR0YWNobWVudHNDb21wb25lbnQsXHJcbiAgSUF0dGFjaG1lbnREVE8sXHJcbn0gZnJvbSBcIkBlcXByb2plY3QvZXFwLWF0dGFjaG1lbnRzXCI7XHJcbmltcG9ydCB7IEVudW1IZWxwZXIgfSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtc2VsZWN0XCI7XHJcbmltcG9ydCB7IENvbmZpZ0NvbHVtbiwgVHlwZUNvbHVtbiB9IGZyb20gXCJAZXFwcm9qZWN0L2VxcC10YWJsZVwiO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGaWVsZCxcclxuICBDb2xTcGFuU2l6ZXNFbnVtLFxyXG4gIERhdGFHZXR0ZXJDYXJkaW5hbGl0eUVudW0sXHJcbiAgRmllbGRJbnZpc2liaWxpdHlFbnVtLFxyXG4gIEZpZWxkVHlwZUVudW1cclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEF0dGFjaG1lbnRGaWVsZCxcclxuICBBdmFpbGFibGVGaWxlRXh0ZW5zaW9ucyxcclxuICBBdmFpbGFibGVJbWFnZUV4dGVuc2lvbnMsXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvYXR0YWNobWVudEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgQm9vbGVhbkZpZWxkLFxyXG4gIEJvb2xQcmVzZW50YW50aW9FbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2Jvb2xlYW5GaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIERhdGVGaWVsZCxcclxuICBEYXRlVGltZVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2RhdGVGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJbWFnZUZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvaW1hZ2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIExpc3RQcmVzZW50YXRpb25FbnVtLFxyXG4gIExpc3RWYWx1ZUZpZWxkLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IExvb2t1cEZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvbG9va3VwRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgTnVtZXJpY0ZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFRleHRhcmVhRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy90ZXh0YXJlYUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgVGV4dE1hc2tFbnVtLFxyXG4gIFRleHRGaWVsZCxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy90ZXh0RmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRm9ybUZpZWxkR3JvdXAsIEZvcm0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBJbWFnZVNlbGVjdG9yRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZXFwLWR5bmFtaWMtbW9kdWxlLWRpYWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExhYmVsRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9sYWJlbEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEltYWdlV2l0aE1hcmtlcnNGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2ltYWdlV2l0aE1hcmtlcnNGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50RmllbGRUeXBlRW51bSwgRHluQXR0YWNobWVudCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluQXR0YWNobWVudFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tIFwiLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBEYXRhR2V0dGVyVHlwZUVudW0sIERhdGFHZXR0ZXIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgUXVlcnlFZGl0b3JNb2RlRW51bSB9IGZyb20gXCIuLi9kYmdldHRlci9kYmdldHRlci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgTW9kZUVudW0sIFRpbWVUeXBlRW51bSB9IGZyb20gXCJ0bXctcGlja2VyXCI7XHJcbmltcG9ydCB7IEVuZFBvaW50Q29uZmlndXJhdGlvbiwgRW5kUG9pbnREYXRhUGFyYW1zLCBQYXJhbVR5cGVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgQ29udGVzdHVhbGl6YXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2dldHRlci5tb2RlbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtLWZpZWxkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9hZGQtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9hZGQtZm9ybS1maWVsZC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZEZvcm1GaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgXHJcbiAgQElucHV0KCkgZm9ybTogRm9ybTtcclxuICBASW5wdXQoKSBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSBmaWVsZDogQmFzZUZpZWxkIHwgYW55O1xyXG4gIEBJbnB1dCgpIGluZGV4RmllbGQ6IG51bWJlcjtcclxuICBASW5wdXQoKSBmb3JtRmllbGRzR3JvdXBzOiBBcnJheTxGb3JtRmllbGRHcm91cD47XHJcbiAgLyoqIEVsZW5jbyBkZWkgRmllbGQgY3JlYXRpIG5lbGxhIGZvcm0sIHVzYXRpIHBlciBwb3BvbGFyZSBsJ2F1dG9jb21wbGV0ZSBkZWxsYSBwcm9wcmlldMOgIEZvcm11bGEuICovXHJcbiAgQElucHV0KCkgYXZhaWxhYmxlRmllbGRzOiBBcnJheTxCYXNlRmllbGQ+O1xyXG4gIEBJbnB1dCgpIGZpZWxkVHlwZXNUb0V4Y2x1ZGU6IEFycmF5PEZpZWxkVHlwZUVudW0+ID0gW0ZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXV07XHJcbiAgQElucHV0KCkgUXVlcnlFZGl0b3JDb21wb25lbnQ6IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhOyAvLyBMJ2ludGVybyBjb21wb25lbnRlIHF1ZXJ5IEVkaXRvclxyXG4gIEBJbnB1dCgpIGNvbnRlc3R1YWxpemF0aW9uOiBBcnJheTxDb250ZXN0dWFsaXphdGlvbj4gPSBudWxsO1xyXG5cclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuICBAT3V0cHV0KCkgc2F2ZUZpZWxkRXZlbnQ6IEV2ZW50RW1pdHRlcjxCYXNlRmllbGQgfCBhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxCYXNlRmllbGQgfCBhbnk+KCk7XHJcblxyXG4gIHJlc2l6ZWRJbWFnZXNIZWlnaHRQeDogbnVtYmVyO1xyXG4gIGZpZWxkRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGtleVZhbHVlT2JqZWN0OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0gPSB7IGtleTogXCJcIiwgdmFsdWU6IFwiXCIgfTtcclxuICBhdmFpbGFibGVDb2xTcGFuU2l6ZXNDb21waWxhemlvbmU6IEFycmF5PENvbFNwYW5TaXplc0VudW0+ID0gW107XHJcbiAgYXZhaWxhYmxlQ29sU3BhblNpemVzUmlzcG9zdGE6IEFycmF5PENvbFNwYW5TaXplc0VudW0+ID0gW107XHJcbiAgZm9ybXVsYUF1dG9jb21wbGV0ZU9wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PjtcclxuICBWaXNpYmxlSWZBdXRvY29tcGxldGVPcHRpb25zOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT47XHJcbiAgQXZhaWxhYmxlRmlsZUV4dGVuc2lvbnMgPSBBdmFpbGFibGVGaWxlRXh0ZW5zaW9ucztcclxuICBBdmFpbGFibGVJbWFnZUV4dGVuc2lvbnMgPSBBdmFpbGFibGVJbWFnZUV4dGVuc2lvbnM7XHJcbiAgZmllbGRJbnZpc2liaWxpdHlFbnVtID0gRmllbGRJbnZpc2liaWxpdHlFbnVtO1xyXG4gIGNvbHVtbktleXM6IEFycmF5PHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4gPSBuZXcgQXJyYXk8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PigpO1xyXG5cclxuICAvLyNyZWdpb24gVGVtcGxhdGUgZGVpIHZhcmkgcGV6emkgZGkgZm9ybSBwZXIgbGEgY3JlYXppb25lIGRpIHVuIGNhbXBvKGluIGJhc2UgYWwgdGlwbyBzY2VsdG8pLlxyXG4gIGZpZWxkVHlwZUZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwidGV4dEZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgdGV4dEZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJsYWJlbEZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgbGFiZWxGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwidGV4dGFyZWFGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHRleHRhcmVhRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImJvb2xlYWRGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGJvb2xlYWRGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZGF0ZUZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZGF0ZUZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJudW1lcmljRmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBudW1lcmljRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImF0dGFjaG1lbnRGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGF0dGFjaG1lbnRGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiaW1hZ2VGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGltYWdlRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImltYWdlV2l0aE1hcmtlcnNGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGltYWdlV2l0aE1hcmtlcnNGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiaW1hZ2VGaWVsZFNlbGVjdG9yRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgaW1hZ2VGaWVsZFNlbGVjdG9yRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJsaXN0VmFsdWVGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGxpc3RWYWx1ZUZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJsb29rdXBGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGxvb2t1cEZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkYXRhR2V0dGVyVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkYXRhR2V0dGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47ICBcclxuICBcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGdlc3RpcmUgaSBtZXRhZGF0YSBuZWkgY2FtcGkgdGkgZGlwbyBBbGxlZ2F0byBvIEltbWFnaW5lXHJcbiAgbWV0YWRhdGFDb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+O1xyXG4gIC8vQFZpZXdDaGlsZCgnbWV0YWRhdGFGaWVsZHNUYWJsZScsIHsgc3RhdGljOiBmYWxzZSB9KSBtZXRhZGF0YUZpZWxkc1RhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuICBzZWxlY3RlZE1ldGFkYXRhOiBCYXNlRmllbGQ7XHJcbiAgLy9pbmRleFNlbGVjdGVkTWV0YWRhdGE6IG51bWJlcjtcclxuICAvL2RpYWxvZ01ldGFkYXRhUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgZGlhbG9nRm9ybXVsYVJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIGRpYWxvZ1Zpc2libGVJZlJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIC8vQFZpZXdDaGlsZCgnZGlhbG9nTWV0YWRhdGEnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dNZXRhZGF0YTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nRm9ybXVsYVwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dGb3JtdWxhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgZ2VzdGlyZSBsZSBpbW1hZ2luaSBuZWkgY2FwaSBkaSB0aXBvIGVsZW5jbyBnZW5lcmljb1xyXG4gIEBWaWV3Q2hpbGQoXCJidXR0b25JbWFnZXNLZXlWYWx1ZUlucHV0Q29sdW1uXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgYnV0dG9uSW1hZ2VzS2V5VmFsdWVJbnB1dENvbHVtbjogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEVudW1lcmF0b3JpIHVzYXRpIG5lbGwnaHRtbFxyXG4gIEZpZWxkVHlwZUVudW0gPSBGaWVsZFR5cGVFbnVtO1xyXG4gIEJvb2xQcmVzZW50YW50aW9FbnVtID0gQm9vbFByZXNlbnRhbnRpb0VudW07XHJcbiAgRGF0ZVRpbWVUeXBlRW51bSA9IERhdGVUaW1lVHlwZUVudW07XHJcbiAgTGlzdFByZXNlbnRhdGlvbkVudW0gPSBMaXN0UHJlc2VudGF0aW9uRW51bTtcclxuICBUZXh0TWFza0VudW0gPSBUZXh0TWFza0VudW07XHJcbiAgQXR0YWNobWVudFR5cGUgPSBBdHRhY2htZW50VHlwZTtcclxuICBhdHRhY2htZW50RmllbGRUeXBlRW51bSA9IEF0dGFjaG1lbnRGaWVsZFR5cGVFbnVtO1xyXG4gIGRhdGFHZXR0ZXJUeXBlRW51bSA9IERhdGFHZXR0ZXJUeXBlRW51bTtcclxuICBzdWJzY3JpcHRpb246IGFueTtcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBHZXN0aW9uZSBkZWxsZSBsaXN0ZSBkaSBpbW1hZ2luaVxyXG4gIGNvbmZpZ0NvbHVtbkxpc3RJbWFnZXM6IEFycmF5PENvbmZpZ0NvbHVtbj4gPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIGNvbmZpZ0NvbHVtbkltYWdlOiBBcnJheTxDb25maWdDb2x1bW4+ID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuICBAVmlld0NoaWxkKCdHZW5lcmljTGlzdEltYWdlc0ltYWdlVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBHZW5lcmljTGlzdEltYWdlc0ltYWdlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnR2VuZXJpY0xpc3RJbWFnZXNLZXlUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIEdlbmVyaWNMaXN0SW1hZ2VzS2V5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnR2VuZXJpY0xpc3RJbWFnZXNWYWx1ZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgR2VuZXJpY0xpc3RJbWFnZXNWYWx1ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ2ltYWdlU2VsZWN0b3JBdHRhY2htZW50cycsIHsgc3RhdGljOiBmYWxzZSB9KSBpbWFnZVNlbGVjdG9yQXR0YWNobWVudHM6IEVxcEF0dGFjaG1lbnRzQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ2ltYWdlQXR0YWNobWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBpbWFnZUF0dGFjaG1lbnQ6IEVxcEF0dGFjaG1lbnRzQ29tcG9uZW50O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyBEQiBHZXR0ZXJcclxuICBkaWFsb2dRRVJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIC8vQFZpZXdDaGlsZCgnZGlhbG9nTWV0YWRhdGEnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dNZXRhZGF0YTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nUUVcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nUUU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8vIFRNVy1QSUNLRVJcclxuICBtb2RlID0gTW9kZUVudW1cclxuICB0aW1lVHlwZSA9IFRpbWVUeXBlRW51bVxyXG5cclxuICAvLyBETSBHZXR0ZXJcclxuICBmb3JtczogQXJyYXk8Rm9ybT4gPSBuZXcgQXJyYXk8Rm9ybT4oKTtcclxuICBETU1vZHVsZTogYW55O1xyXG4gIERNRmllbGQ6IGFueTtcclxuICBETUZpZWxkczogQXJyYXk8eyBrZXk6IHN0cmluZyB9PjtcclxuICBETUdldHRlckNhcmRpbmFsaXRpZXMgPSBEYXRhR2V0dGVyQ2FyZGluYWxpdHlFbnVtO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgZW51bUhlbHBlcjogRW51bUhlbHBlcixcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIgPT0gbnVsbCl7IHRoaXMuZmllbGQuRGF0YUdldHRlciA9IG5ldyBEYXRhR2V0dGVyKCk7IH1cclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtW1wiRGEgbW9kdWxvIGRpbmFtaWNvXCJdKXtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRBbGxNb2R1bGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IFwidW5kZWZpbmVkXCIgJiYgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSAhPSBudWxsKXtcclxuICAgICAgdGhpcy5jcmVhdGVDb2x1bW5LZXlzKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUuUGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmZpZWxkVHlwZXNUb0V4Y2x1ZGUuaW5jbHVkZXMoRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZmllbGRUeXBlc1RvRXhjbHVkZS5wdXNoKEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkZpZWxkVHlwZUNoYW5nZShmYWxzZSk7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUZpZWxkcyA9IHRoaXMuYXZhaWxhYmxlRmllbGRzXHJcbiAgICAgID8gdGhpcy5hdmFpbGFibGVGaWVsZHMuZmlsdGVyKChmKSA9PiBmICE9IHRoaXMuZmllbGQpXHJcbiAgICAgIDogW107XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgaSB2YWxvcmkgZGEgc3VnZ2VyaXJlIG5lbGwnYXV0b2NvbXBsZXRlIGRlbCBjYW1wbyBGb3JtdWxhLlxyXG4gICAqIFZpZW5lIHNjYXRlbmF0byBhbCBmb2N1cyAoaW4gcXVlc3RvIGNhc28gdmllbmUgcGFzc2F0byBpbCBwYXJhbWV0cm8gYSBudWxsIHBlciBkaWZmZXJlbnppYXJsb1xyXG4gICAqIGRhbGwnZXZlbnRvIGRpIGNsaWNrIHN1bGxhIHRhc3RpZXJhKSBlIGFsIGtleXVwIHN1bGwnaW5wdXQgKGlsIHBhcmFtZXRybyDDqCBkaXZlcnNvIGRhIG51bGwpLlxyXG4gICAqIEBwYXJhbSBrZXlib2FyZEV2ZW50IEV2ZW50byBzY2F0ZW5hdG8gYWwga2V5dXAgc3VsbGEgdGFzdGllcmEuIFNlIG51bGwgYWxsb3JhIGlsIG1ldG9kbyDDqCBzdGF0byBpbnZvY2F0byBkYWwgZm9jdXMgc3VsbCdpbnB1dC5cclxuICAgKiBAc3VtbWFyeSBBZ2dpb3JuYSBsJ2VsZW5jbyBkZWkgc3VnZ2VyaW1lbnRpIHBlciBsJ2F1dG9jb21wbGV0ZSBzZSBsJ3V0ZW50ZSBlc2VndWUgaWwgZm9jdXMgc3VsbCdpbnB1dFxyXG4gICAqIG9wcHVyZSBhbCBrZXl1cCBzdWxsYSB0YXN0aWVyYSBkaSB1biB0YXN0byBkaXZlcnNvIGRhbGxlIGZyZWNjZS5cclxuICAgKi9cclxuICAvLyBzZXRGb3JtdWxhQXV0b2NvbXBsZXRlT3B0aW9ucyhrZXlib2FyZEV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgLy8gICAvLyBDcmVvIGwnYXJyYXkgcGVyIGwnYXV0b2NvbXBsZXRlIHNvbG8gc2Ugc3RvIGZhY2VuZG8gaWwgZm9jdXMgc3VsbCdpbnB1dCBvIHNlIHN0byBwcmVtZW5kbyB1biB0YXN0b1xyXG4gIC8vICAgLy8gc3VsbGEgdGFzdGllcmEgZGl2ZXJzbyBkYWxsZSBmcmVjY2UgKGluIHF1ZXN0J3VsdGltbyBjYXNvLCBzZSBub24gdmllbmUgZXNlZ3VpdG8gaWwgZmlsdHJvIHN1bGwnZXZlbnRvLFxyXG4gIC8vICAgLy8gbm9uIHNpIHB1w7Igc2VsZXppb25hcmUgdW4gc3VnZ2VyaW1lbnRvIGRlbGwnYXV0b2NvbXBsZXRlIHBlcmNow6ggYWwgY2xpY2sgdmVycmViYmUgcmljYXJpY2F0byBsJ2FycmF5IGVcclxuICAvLyAgIC8vIHNpIHByZWRlcmViYmUgbGEgc2VsZXppb25lIGFwcGVuYSBmYXR0YSkuXHJcbiAgLy8gICBpZiAoIWtleWJvYXJkRXZlbnQgfHwgIWtleWJvYXJkRXZlbnQuY29kZS5pbmNsdWRlcyhcIkFycm93XCIpKSB7XHJcbiAgLy8gICAgIHRoaXMuZm9ybXVsYUF1dG9jb21wbGV0ZU9wdGlvbnMgPSBVdGlsaXR5SGVscGVyU2VydmljZS5HZXRBdXRvY29tcGxldGVPcHRpb25zKHRoaXMuYXZhaWxhYmxlRmllbGRzLCB0aGlzLmZpZWxkLkZvcm11bGEpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICBzZXRWaXNpYmxlSWZBdXRvY29tcGxldGVPcHRpb25zKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIC8vIENyZW8gbCdhcnJheSBwZXIgbCdhdXRvY29tcGxldGUgc29sbyBzZSBzdG8gZmFjZW5kbyBpbCBmb2N1cyBzdWxsJ2lucHV0IG8gc2Ugc3RvIHByZW1lbmRvIHVuIHRhc3RvXHJcbiAgICAvLyBzdWxsYSB0YXN0aWVyYSBkaXZlcnNvIGRhbGxlIGZyZWNjZSAoaW4gcXVlc3QndWx0aW1vIGNhc28sIHNlIG5vbiB2aWVuZSBlc2VndWl0byBpbCBmaWx0cm8gc3VsbCdldmVudG8sXHJcbiAgICAvLyBub24gc2kgcHXDsiBzZWxlemlvbmFyZSB1biBzdWdnZXJpbWVudG8gZGVsbCdhdXRvY29tcGxldGUgcGVyY2jDqCBhbCBjbGljayB2ZXJyZWJiZSByaWNhcmljYXRvIGwnYXJyYXkgZVxyXG4gICAgLy8gc2kgcHJlZGVyZWJiZSBsYSBzZWxlemlvbmUgYXBwZW5hIGZhdHRhKS5cclxuICAgIGlmICgha2V5Ym9hcmRFdmVudCB8fCAha2V5Ym9hcmRFdmVudC5jb2RlLmluY2x1ZGVzKFwiQXJyb3dcIikpIHtcclxuICAgICAgdGhpcy5WaXNpYmxlSWZBdXRvY29tcGxldGVPcHRpb25zID1cclxuICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5HZXRBdXRvY29tcGxldGVPcHRpb25zKFxyXG4gICAgICAgICAgdGhpcy5hdmFpbGFibGVGaWVsZHMsXHJcbiAgICAgICAgICB0aGlzLmZpZWxkLlZpc2libGVJZlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9taXRfc3BlY2lhbF9jaGFyKGV2ZW50KSB7XHJcbiAgICB2YXIgaztcclxuICAgIGsgPSBldmVudC5rZXlDb2RlOyAvLyAgICAgICAgIGsgPSBldmVudC5rZXlDb2RlOyAgKEJvdGggY2FuIGJlIHVzZWQpXHJcbiAgICBpZiAoayA9PSAzNCkge1xyXG4gICAgICBldmVudC5rZXlDb2RlID0gMDtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYSBpbCBGb3JtR3JvdXAgcGVyIGwnYWdnaXVudGEgZGkgdW4gbnVvdm8gY2FtcG8gYWxsJ2ludGVybm8gZGVsbGEgZm9ybS5cclxuICAgKiBNZXRvZG8gcmljaGlhbWF0byBvZ25pIHZvbHRhIGNoZSBjYW1iaWEgaWwgdGlwbyBkZWwgY2FtcG8gc2NlbHRvIG8gdmllbmUgYWdnaXVudG8vbW9kaWZpY2F0byB1biBGaWVsZFxyXG4gICAqL1xyXG4gIGNyZWF0ZUZpZWxkRm9ybSgpIHtcclxuICAgIHRoaXMuZmllbGRGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgTGFiZWw6IFtcclxuICAgICAgICB0aGlzLmZpZWxkLkxhYmVsLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbCxcclxuICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl5bYS16QS1aIF0qJFwiKSxcclxuICAgICAgICBdLFxyXG4gICAgICBdLFxyXG4gICAgICBEZXNjcmlwdGlvbjogW1xyXG4gICAgICAgIHRoaXMuZmllbGQuRGVzY3JpcHRpb24sXHJcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgXSxcclxuICAgICAgUmVhZG9ubHk6IFt0aGlzLmZpZWxkLlJlYWRvbmx5XSxcclxuICAgICAgUmVxdWlyZWQ6IFt0aGlzLmZpZWxkLlJlcXVpcmVkXSxcclxuICAgICAgRmllbGRUeXBlOiBbXHJcbiAgICAgICAgdGhpcy5maWVsZC5GaWVsZFR5cGUsXHJcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgXSxcclxuICAgICAgRE1Nb2R1bGU6IFtudWxsXSwgICAgICBcclxuICAgICAgRE1GaWVsZDogW251bGxdLCAgICAgIFxyXG4gICAgICBEYXRhR2V0dGVyVHlwZTogW1xyXG4gICAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSxcclxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIF0sICAgICAgXHJcbiAgICAgIENvbFNwYW5TaXplczogW3RoaXMuZmllbGQuQ29sU3BhblNpemVzXSxcclxuICAgICAgSW5MaXN0VmlldzogW3RoaXMuZmllbGQuSW5MaXN0Vmlld10sXHJcbiAgICAgIEludmlzaWJpbGl0eTogW3RoaXMuZmllbGQuSW52aXNpYmlsaXR5XSxcclxuICAgICAgVmlzaWJsZUlmOiBbdGhpcy5maWVsZC5WaXNpYmxlSWYsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgVG9vbHRpcDogW3RoaXMuZmllbGQuVG9vbHRpcCwgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG4gICAgICBMYWJlbHN0eWxlQ1NTOiBbdGhpcy5maWVsZC5MYWJlbHN0eWxlQ1NTLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIEZpZWxkc3R5bGVDU1M6IFt0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgRm9ybXVsYTogW3RoaXMuZmllbGQuRm9ybXVsYSwgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG4gICAgICBEYXRhR2V0dGVyVmFsdWU6IFt0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcblxyXG4gICAgICBBbnN3ZXJTdHlsZUxhYmVsc3R5bGVDU1M6IFt0aGlzLmZpZWxkLkFuc3dlclN0eWxlLkxhYmVsc3R5bGVDU1MsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgQW5zd2VyU3R5bGVGaWVsZHN0eWxlQ1NTOiBbdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5GaWVsZHN0eWxlQ1NTLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIEFuc3dlclN0eWxlVmlzaWJsZUlmOiBbdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgQW5zd2VyU3R5bGVDb2xTcGFuU2l6ZXM6IFt0aGlzLmZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplc10sXHJcbiAgICAgIEFuc3dlclN0eWxlSW5MaXN0VmlldzogW3RoaXMuZmllbGQuQW5zd2VyU3R5bGUuSW5MaXN0Vmlld10sXHJcbiAgICAgIEFuc3dlclN0eWxlSW52aXNpYmlsaXR5OiBbdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5JbnZpc2liaWxpdHldLFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybUZpZWxkc0dyb3Vwcykge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgXCJGaWVsZEdyb3VwXCIsXHJcbiAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCh0aGlzLmZpZWxkLkZpZWxkR3JvdXAsIFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHF1ZXN0aW9uUG9sbChjb250cm9sOiBGb3JtQ29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICAvLyBjJ8OoIHVuIEZvcm1Db250cm9sIGNoZSDDqCB2dW90byBjaGUgZGEgcHJvYmxlbWkgKHByb2JhYmlsbWVudGUgdHlwZSBEYXRhLCBjYW1wbyBGb3JtYXRvKVxyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5zdHJpbmdDaGVja1BhcmVudGVzaXMoXHJcbiAgICAgICAgICBjb250cm9sLnZhbHVlLFxyXG4gICAgICAgICAgY29udHJvbC5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IFwiTWlzc2luZyBQYXJlbnRoZXNpc1wiOiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuICBzdHJpbmdTYW5pdGFpemVkVmFsaWRhdG9yKGNvbnRyb2w6IEZvcm1Db250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIC8vIGMnw6ggdW4gRm9ybUNvbnRyb2wgY2hlIMOoIHZ1b3RvIGNoZSBkYSBwcm9ibGVtaSAocHJvYmFiaWxtZW50ZSB0eXBlIERhdGEsIGNhbXBvIEZvcm1hdG8pXHJcbiAgICBpZiAoY29udHJvbC52YWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIFV0aWxpdHlIZWxwZXJTZXJ2aWNlLnN0cmluZ0NoZWNrUGFyZW50ZXNpcyhcclxuICAgICAgICAgIGNvbnRyb2wudmFsdWUsXHJcbiAgICAgICAgICBjb250cm9sLmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgXCJMYSBmb3JtdWxhIG5vbiDDqCB2YWxpZGFcIjogdHJ1ZSB9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gZ2V0QWxsRm9ybVZhbGlkYXRpb25FcnJvcnMoKSB7XHJcbiAgLy8gICBPYmplY3Qua2V5cyh0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAvLyAgICAgY29uc3QgY29udHJvbEVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9XHJcbiAgLy8gICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5nZXQoa2V5KS5lcnJvcnM7XHJcbiAgLy8gICAgIGlmIChjb250cm9sRXJyb3JzICE9IG51bGwpIHtcclxuICAvLyAgICAgICBPYmplY3Qua2V5cyhjb250cm9sRXJyb3JzKS5mb3JFYWNoKChrZXlFcnJvcikgPT4ge1xyXG4gIC8vICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgLy8gICAgICAgICAgIFwiS2V5IGNvbnRyb2w6IFwiICsga2V5ICsgXCIsIGtleUVycm9yOiBcIiArIGtleUVycm9yICsgXCIsIGVyciB2YWx1ZTogXCIsXHJcbiAgLy8gICAgICAgICAgIGNvbnRyb2xFcnJvcnNba2V5RXJyb3JdXHJcbiAgLy8gICAgICAgICApO1xyXG4gIC8vICAgICAgIH0pO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGlhbWF0byBkYWkgbWF0LWVycm9yIHBlciBwcmVuZGVyZSBnbGkgZXJyb3JpIGdlbmVyYXRpIHJlbGF0aXZpIGFsIGNhbXBvLlxyXG4gICAqIEBwYXJhbSBjb250cm9sIMOoIGlsIG5vbWUgZGVsIEdyb3VwQ29udHJvbCBkaSBjdWkgbGVnZ2VyZSBzZSBjaSBzb25vIGVycm9yaVxyXG4gICAqL1xyXG4gIGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKGNvbnRyb2w6IHN0cmluZykge1xyXG4gICAgaWYgKGNvbnRyb2wgPT0gXCJMYWJlbFwiKSBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdnZXRGb3JtVmFsaWRhdGlvbkVycm9ycycsIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJMYWJlbFwiXSk7XHJcblxyXG4gICAgY29uc3QgY29udHJvbEVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbY29udHJvbF0uZXJyb3JzO1xyXG4gICAgbGV0IGVycm9ycyA9IFtdO1xyXG4gICAgbGV0IHZhbHVlcyA9IFtdO1xyXG4gICAgaWYgKGNvbnRyb2xFcnJvcnMgIT0gbnVsbCkge1xyXG4gICAgICBPYmplY3Qua2V5cyhjb250cm9sRXJyb3JzKS5mb3JFYWNoKChrZXlFcnJvcikgPT4ge1xyXG4gICAgICAgIGVycm9ycy5wdXNoKGtleUVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2NvbnRyb2w6ICcsIGNvbnRyb2wpO1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdlcnJvcnM6ICcsIGVycm9ycyk7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ3ZhbHVlczogJywgdmFsdWVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlcnJvcnMuam9pbihcIiwgXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIG9uRmllbGRUeXBlQ2hhbmdlXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoaWFtYXRvIHF1YW5kbyBjYW1iaWEgaWwgRmllbGRUeXBlIGRlbCBCYXNlRmllbGQgY2hlIHNpIHN0YSBhZ2dpdW5nZW5kby9tb2RpZmljYW5kby5cclxuICAgKiBSaWNyZWEgbCdvZ2dldHRvIGZpZWxkIHBvcG9sYW5kbyBzb2xvIGxlIHByb3ByaWV0w6AgZGVsIEJhc2VGaWVsZCBpbnNlcml0ZSBkYWxsJ3V0ZW50ZVxyXG4gICAqIChxdWVsbGUgY29tdW5pIGEgdHV0dGUgbGUgdGlwb2xvZ2llIGRpIGNhbXBvKSwgcmljcmVhIGxhIGZvcm0gZSwgaW4gYmFzZSBhbCBGaWVsZFR5cGUgc2NlbHRvLFxyXG4gICAqIGFnZ2l1bmdlIGFsbGEgZm9ybSBpIEZvcm1Db250cm9sIG5lY2Vzc2FyaSBlIHNlbGV6aW9uYSBpbCB0ZW1wbGF0ZSBjb3JyZXR0byBkYSB1c2FyZS5cclxuICAgKiBAcGFyYW0gcmVzdG9yZUZpZWxkIFNlIFRSVUUgcmlwcmlzdGluYSBpIHZhbG9yaSBiYXNlIChlcmVkaXRhdGkgZGFsIG1vZGVsbG8gQmFzZUZpZWxkKSBkZWwgY2FtcG8gYWdnaXVudG8vbW9kaWZpY2F0b1xyXG4gICAqL1xyXG4gIG9uRmllbGRUeXBlQ2hhbmdlKHJlc3RvcmVGaWVsZDogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGlmIChyZXN0b3JlRmllbGQpIHtcclxuICAgICAgdGhpcy5yZXN0b3JlQmFzZUZpZWxkUHJvcGVydGllcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY3JlYXRlRmllbGRGb3JtKCk7XHJcbiAgICB0aGlzLm9uQ29sU3BhblNpemVTZWxlY3QoKTtcclxuICAgIGlmICgodGhpcy5maWVsZCBhcyBCYXNlRmllbGQpLkluTGlzdFZpZXcgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCh0aGlzLmZpZWxkIGFzIEJhc2VGaWVsZCkuSW52aXNpYmlsaXR5ID09IG51bGwpIHtcclxuICAgICAgdGhpcy5maWVsZC5JbnZpc2liaWxpdHkgPSBGaWVsZEludmlzaWJpbGl0eUVudW0uTkFTQ09TVE87XHJcbiAgICB9ICAgIFxyXG4gICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSBudWxsO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5maWVsZC5GaWVsZFR5cGUpIHtcclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBDQU1QTyBESSBURVNUT1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBkaSB0ZXN0b1wiXTpcclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgVGV4dEZpZWxkKS5NaWNyb3Bob25lID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuTWljcm9waG9uZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlRleHRNYXNrXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIFRleHRGaWVsZCkuVGV4dE1hc2spXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1heExlbmdodFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBUZXh0RmllbGQpLk1heExlbmdodCwgW1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbCxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlswLTldKiRcIiksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNaW5MZW5naHRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dEZpZWxkKS5NaW5MZW5naHQsIFtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl5bMC05XSokXCIpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWljcm9waG9uZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBUZXh0RmllbGQpLk1pY3JvcGhvbmUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMudGV4dEZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gQ0FNUE8gREkgVEVTVE9cclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBMQUJFTFxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bJ0V0aWNoZXR0YSddOlxyXG4gICAgICAgIGlmICgodGhpcy5maWVsZCBhcyBMYWJlbEZpZWxkKS5FdGljaGV0dGEgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5FdGljaGV0dGEgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJFdGljaGV0dGFcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgTGFiZWxGaWVsZCkuRXRpY2hldHRhKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmxhYmVsRmllbGRGb3JtVGVtcGxhdGU7ICAgXHJcbiAgICAgICAgYnJlYWs7ICAgICBcclxuICAgICAgLy8jZW5kcmVnaW9uIExBQkVMXHJcblxyXG4gICAgICAvLyNyZWdpb24gQVJFQSBESSBURVNUTyBcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQXJlYSBkaSB0ZXN0b1wiXTpcclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWljcm9waG9uZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLk1pY3JvcGhvbmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiUm93c1wiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5Sb3dzLCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNYXhMZW5naHRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWF4TGVuZ2h0LCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNaW5MZW5naHRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWluTGVuZ2h0LCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNaWNyb3Bob25lXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1pY3JvcGhvbmUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMudGV4dGFyZWFGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIEFSRUEgREkgVEVTVE8gXHJcblxyXG4gICAgICAvLyNyZWdpb24gQk9PTEVBTk9cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkJvb2xlYW5vOlxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIklzVHJpc3RhdGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgQm9vbGVhbkZpZWxkKS5Jc1RyaXN0YXRlKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiUHJlc2V0YXRpb25UeXBlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBCb29sZWFuRmllbGQpLlByZXNldGF0aW9uVHlwZSxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmJvb2xlYWRGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIEJPT0xFQU5PXHJcblxyXG4gICAgICAvLyNyZWdpb24gREFUQSBFL0kgT1JBXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAgICAgICBpZiAodGhpcy5maWVsZC5Jc09ubHlEYXRlID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuSXNPbmx5RGF0ZSA9IERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIGRhdGFcIl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIklzT25seURhdGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlLCBbXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1pbkRhdGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIERhdGVGaWVsZCkuTWluRGF0ZSxcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGxcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1heERhdGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIERhdGVGaWVsZCkuTWF4RGF0ZSxcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGxcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkRhdGVGb3JtYXRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmRhdGVGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIERBVEEgRS9JIE9SQVxyXG5cclxuICAgICAgLy8jcmVnaW9uIENBTVBPIE5VTUVSSUNPXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdOlxyXG4gICAgICAgIGlmICgodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLklzSW50ZWdlciA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLklzSW50ZWdlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIklzSW50ZWdlclwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLklzSW50ZWdlcilcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1pblZhbHVlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuTWluVmFsdWUsIFtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl4tP1swLTldKygsWzAtOV0rfFxcLlswLTldKyk/JFwiKSwgLy8oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNYXhWYWx1ZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLk1heFZhbHVlLCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeLT9bMC05XSsoLFswLTldK3xcXC5bMC05XSspPyRcIiksIC8vKFwiXlswLTldKiRcIiksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRGVjaW1hbFNlcGFyYXRvclwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5EZWNpbWFsU2VwYXJhdG9yLFxyXG4gICAgICAgICAgICBbdGhpcy5xdWVzdGlvblBvbGwsIFZhbGlkYXRvcnMucGF0dGVybihcIl5bYS16QS1aIC0vJywuXy9cXFxcXjw+XStcIildXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJEZWNpbWFsUHJlY2lzaW9uXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLkRlY2ltYWxQcmVjaXNpb24sXHJcbiAgICAgICAgICAgIFt0aGlzLnF1ZXN0aW9uUG9sbCwgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlswLTldKyRcIildXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJUaG91c2FuZHNTZXBhcmF0b3JcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuVGhvdXNhbmRzU2VwYXJhdG9yLFxyXG4gICAgICAgICAgICBbdGhpcy5xdWVzdGlvblBvbGwsIFZhbGlkYXRvcnMucGF0dGVybihcIl5bYS16QS1aIC0vJywuXy9cXFxcXjw+XStcIildXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJDdXJyZW5jeVN5bWJvbFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbCxcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGxcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1lYXN1cmVVbml0XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLk1lYXN1cmVVbml0LFxyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLm51bWVyaWNGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIENBTVBPIE5VTUVSSUNPXHJcblxyXG4gICAgICAvLyNyZWdpb24gQUxMRUdBVE9cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkFsbGVnYXRvOlxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiQWxsb3dlZEV4dGVuc2lvbnNcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuQWxsb3dlZEV4dGVuc2lvbnNcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiSXNNdWx0aUF0dGFjaFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBBdHRhY2htZW50RmllbGQpLklzTXVsdGlBdHRhY2gpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMuYXR0YWNobWVudEZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gQUxMRUdBVE9cclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBJTU1BR0lORVxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW0uSW1tYWdpbmU6XHJcbiAgICAgIGlmICh0eXBlb2YgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRHluQXR0YWNobWVudCA9PSBcInVuZGVmaW5lZFwiKXtcclxuICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5EeW5BdHRhY2htZW50ID0gbnVsbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5FbmFibGVEcmF3aW5nID09IFwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkVuYWJsZURyYXdpbmcgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4LFxyXG4gICAgICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZCxWYWxpZGF0b3JzLm1heCg0MzIwKV1cclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeCA9ICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeCAhPSBudWxsID8gKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4IDogMTI4O1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkVuYWJsZURyYXdpbmdcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRW5hYmxlRHJhd2luZylcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMuaW1hZ2VGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uID0gbmV3IEF0dGFjaG1lbnRGaWVsZCgpO1xyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRW5hYmxlRHJhd2luZ1wiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5FbmFibGVEcmF3aW5nKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJJbWFnZUlzQ29udGV4dHVhbEF0dGFjaG1lbnRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkltYWdlSXNDb250ZXh0dWFsQXR0YWNobWVudFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gSW1wb3N0byBpIEZvcm1Db250cm9sIHZhcmlhYmlsaS5cclxuICAgICAgICB0aGlzLm9uSW1hZ2VJc0NvbnRleHR1YWxBdHRhY2htZW50Q2hhbmdlKCk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmltYWdlRmllbGRGb3JtVGVtcGxhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgKi9cclxuICAgICAgLy8jZW5kcmVnaW9uIElNTUFHSU5FXHJcblxyXG4gICAgICAvLyNyZWdpb24gRUxFTkNPIEdFTkVSSUNPXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLkluTGlzdFZpZXcgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5Jbkxpc3RWaWV3ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5JbnZpc2liaWxpdHkgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5JbnZpc2liaWxpdHkgPSBGaWVsZEludmlzaWJpbGl0eUVudW0uTkFTQ09TVE87XHJcbiAgICAgICAgfSAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiSXNNdWx0aUNob2ljaGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLklzTXVsdGlDaG9pY2hlKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiUHJlc2VudGF0aW9uTW9kZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlByZXNlbnRhdGlvbk1vZGUsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5saXN0VmFsdWVGaWVsZEZvcm1UZW1wbGF0ZTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBFTEVOQ08gR0VORVJJQ09cclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBFTEVOQ08gSU1NQUdJTklcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGltbWFnaW5pXCJdOlxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIklzTXVsdGlDaG9pY2hlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuSXNNdWx0aUNob2ljaGUpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4LFxyXG4gICAgICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZCxWYWxpZGF0b3JzLm1heCg0MzIwKV1cclxuICAgICAgICAgIClcclxuICAgICAgICApOyAgICAgICAgXHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmltYWdlRmllbGRTZWxlY3RvckZvcm1UZW1wbGF0ZTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBFTEVOQ08gSU1NQUdJTkkgICAgIFxyXG5cclxuICAgICAgLy8jcmVnaW9uIElNTUFHSU5FIENPTiBNQVJLRVJcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiSW1tYWdpbmUgY29uIG1hcmtlcnNcIl06XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiUmVzaXplZEltYWdlc0hlaWdodFB4XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZVdpdGhNYXJrZXJzRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeCxcclxuICAgICAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWQsVmFsaWRhdG9ycy5tYXgoNDMyMCldXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTsgICAgICAgIFxyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5pbWFnZVdpdGhNYXJrZXJzRmllbGRGb3JtVGVtcGxhdGU7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gSU1NQUdJTkUgQ09OIE1BUktFUiAgICAgICAgXHJcblxyXG4gICAgICAvLyNyZWdpb24gTE9PS1VQXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5Mb29rdXA6XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRW50aXR5U291cmNlTmFtZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTG9va3VwRmllbGQpLkVudGl0eVNvdXJjZU5hbWUsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlVzZUFzR2V0T3JEaXNjYXJkXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIExvb2t1cEZpZWxkKS5Vc2VBc0dldE9yRGlzY2FyZClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5sb29rdXBGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIExPT0tVUFxyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBbXHJcbiAgICAgICAgRmllbGRUeXBlRW51bS5BbGxlZ2F0byxcclxuICAgICAgICBGaWVsZFR5cGVFbnVtLkltbWFnaW5lLFxyXG4gICAgICAgIEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXSxcclxuICAgICAgXS5pbmNsdWRlcyh0aGlzLmZpZWxkLkZpZWxkVHlwZSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm11bGEgPSBudWxsO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiRm9ybXVsYVwiXS5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJJbkxpc3RWaWV3XCJdLmRpc2FibGUoKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkludmlzaWJpbGl0eVwiXS5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiRm9ybXVsYVwiXS5lbmFibGUoKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkluTGlzdFZpZXdcIl0uZW5hYmxlKCk7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJJbnZpc2liaWxpdHlcIl0uZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIFtcclxuICAgICAgICBGaWVsZFR5cGVFbnVtLkFsbGVnYXRvLFxyXG4gICAgICAgIEZpZWxkVHlwZUVudW0uSW1tYWdpbmUsXHJcbiAgICAgICAgRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdLFxyXG4gICAgICAgIEZpZWxkVHlwZUVudW1bXCJEYXRhIGUvbyBvcmFcIl0sXHJcbiAgICAgIF0uaW5jbHVkZXModGhpcy5maWVsZC5GaWVsZFR5cGUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkxhYmVsc3R5bGVDU1NcIl0uZGlzYWJsZSgpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiRmllbGRzdHlsZUNTU1wiXS5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiTGFiZWxzdHlsZUNTU1wiXS5lbmFibGUoKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkZpZWxkc3R5bGVDU1NcIl0uZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoW0ZpZWxkVHlwZUVudW0uQm9vbGVhbm9dLmluY2x1ZGVzKHRoaXMuZmllbGQuRmllbGRUeXBlKSkge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiTGFiZWxzdHlsZUNTU1wiXS5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiTGFiZWxzdHlsZUNTU1wiXS5lbmFibGUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uRmllbGRUeXBlQ2hhbmdlXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkRhdGFHZXR0ZXJUeXBlQ2hhbmdlXHJcbiAgYXN5bmMgb25EYXRhR2V0dGVyVHlwZUNoYW5nZSgpe1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW1bJ0RhIG1vZHVsbyBkaW5hbWljbyddICYmIHRoaXMuZm9ybXMubGVuZ3RoID09IDApe1xyXG4gICAgICB0aGlzLmdldEFsbE1vZHVsZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlICE9IERhdGFHZXR0ZXJUeXBlRW51bS5Gb3JtdWxhKXtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtdWxhID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMuRE1Nb2R1bGUgPSBudWxsO1xyXG4gICAgdGhpcy5ETUZpZWxkID0gbnVsbDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uRGF0YUdldHRlclR5cGVDaGFuZ2VcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdmFsb3JlIGRlbGxhIHByb3ByaWV0w6AgSW1hZ2VJc0NvbnRleHR1YWxBdHRhY2htZW50IG5lbCBjYXNvXHJcbiAgICogZGkgY2FtcGkgZGkgdGlwbyBJbW1hZ2luZS4gU2UgVFJVRSBhbGxvcmEgcmltdW92ZSBpIEZvcm1Db250cm9sIHBlciBsZSBwcm9wcmlldMOgIElzTXVsdGlBdHRhY2hcclxuICAgKiBlIEFsbG93ZWRFeHRlbnNpb25zIGUgYWdnaXVuZ2UgaSBGb3JtQ29udHJvbCBwZXIgbGUgcHJvcHJpZXTDoCBJbWdOYW1lIGUgQ29udGV4dHVhbEF0dGFjaG1lbnQsXHJcbiAgICogYWx0cmltZW50aSBpbCBjb250cmFyaW8uXHJcbiAgICovXHJcbiAgb25JbWFnZUlzQ29udGV4dHVhbEF0dGFjaG1lbnRDaGFuZ2UoKSB7XHJcbiAgICBcclxuICAgIC8qXHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5JbWdOYW1lID0gbnVsbDtcclxuICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uQWxsb3dlZEV4dGVuc2lvbnMgPSBbXTtcclxuICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uSXNNdWx0aUF0dGFjaCA9IGZhbHNlO1xyXG4gICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQ29udGV4dHVhbEF0dGFjaG1lbnQgPSBudWxsO1xyXG5cclxuICAgIGlmICgodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5JbWFnZUlzQ29udGV4dHVhbEF0dGFjaG1lbnQpIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5yZW1vdmVDb250cm9sKFwiSXNNdWx0aUF0dGFjaFwiKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5yZW1vdmVDb250cm9sKFwiQWxsb3dlZEV4dGVuc2lvbnNcIik7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICBcIkltZ05hbWVcIixcclxuICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuSW1nTmFtZSxcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgICApXHJcbiAgICAgICk7ICAgICAgXHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICBcIkNvbnRleHR1YWxBdHRhY2htZW50XCIsXHJcbiAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkNvbnRleHR1YWxBdHRhY2htZW50LFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAucmVtb3ZlQ29udHJvbChcIkltZ05hbWVcIik7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAucmVtb3ZlQ29udHJvbChcIkNvbnRleHR1YWxBdHRhY2htZW50XCIpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgXCJJc011bHRpQXR0YWNoXCIsXHJcbiAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uSXNNdWx0aUF0dGFjaFxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgIFwiQWxsb3dlZEV4dGVuc2lvbnNcIixcclxuICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5BbGxvd2VkRXh0ZW5zaW9uc1xyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgICovXHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbnRlcmNldHRhcmUgbCdhZ2dpdW50YSBkaSB1biBhbGxlZ2F0byBuZWkgY2FtcGkgZGkgdGlwbyBJbW1hZ2luZSBwZXIgYWdnaW9ybmFyZVxyXG4gICAqIGlsIHZhbG9yZSBkZWxsYSBwcm9wcmlldMOgIENvbnRleHR1YWxBdHRhY2htZW50IGUgbGEgdmFsaWRhemlvbmUgZGVsIHJlbGF0aXZvIEZvcm1Db250cm9sLlxyXG4gICAqIEBwYXJhbSBldmVudCBBcnJheSBjb250ZW5lbnRlIGwnZWxlbmNvIGFnZ2lvcm5hdG8gZGVnbGkgYWxsZWdhdGkgY2FyaWNhdGkgKG5lbCBub3N0cm8gY2FzbyBuZSBjb250aWVuZSBhbCBwacO5IDEpLlxyXG4gICAqL1xyXG4gIGNhdGNoQ29udGV4dHVhbEF0dGFjaG1lbnRDaGFuZ2UoZXZlbnQ6IEFycmF5PElBdHRhY2htZW50RFRPPikge1xyXG4gICAgLypcclxuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkNvbnRleHR1YWxBdHRhY2htZW50ID0gZXZlbnRbMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5Db250ZXh0dWFsQXR0YWNobWVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiQ29udGV4dHVhbEF0dGFjaG1lbnRcIl0uc2V0VmFsdWUoXHJcbiAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkNvbnRleHR1YWxBdHRhY2htZW50XHJcbiAgICApO1xyXG4gICAgKi9cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbGxhIHNlbGV6aW9uZSBkaSB1bmEgY2xhc3NlIG5lbGxhIHNlbGVjdCBwZXIgbGUgY29sb25uZSBkaSBib290c3RyYXBcclxuICAgKiBkYSB1c2FyZSBuZWxsYSB2aXN1YWxpenphemlvbmUgZGVsIGNhbXBvLiBRdWVzdGEgZnVuemlvbmUgbWFuaXBvbGEgbGEgc29yZ2VudGUgZGF0aSBwZXJcclxuICAgKiBsYSBlcXAtc2VsZWN0IGluIG1vZG8gZGEgZXNjbHVkZXJlIGkgdmFsb3JpIGRlbGwnZW51bWVyYXRvcmUgY2hlIGZhbm5vIHJpZmVyaW1lbnRvIGFkXHJcbiAgICogdW5hIGxhcmdoZXp6YSBkaSBzY2hlcm1vIGdpw6Agc2VsZXppb25hdGEuIEVzZW1waW86IHBlciBnbGkgc2NoZXJtaSBwaWNjb2xpIChzbSkgbCd1dGVudGVcclxuICAgKiBzZWxlemlvbmEgbGEgY2xhc3NlIFwiY29sLXNtLTZcIiwgYWwgY2hhbmdlIGRlbCB2YWxvcmUgcXVlc3RvIG1ldG9kbyByaW11b3ZlIGRhbGxhIHNlbGVjdFxyXG4gICAqIHR1dHRpIGdsaSBhbHRyaSB2YWxvcmkgcGVyIGxhIGdyYW5kZXp6YSBkaSBzY2hlcm1vIHNlbGV6aW9uYXRhLlxyXG4gICAqL1xyXG4gIG9uQ29sU3BhblNpemVTZWxlY3QoKSB7XHJcbiAgICAvLyBSZWN1cGVybyBsJ2FycmF5IGRlZ2xpIG9nZ2V0dGkgY2hpYXZlLXZhbG9yZSBjaGUgcmFwcHJlc2V0YSBsJ2VudW1lcmF0b3JlXHJcbiAgICBsZXQgY29sU2l6ZUNsYXNzRW51bUFycmF5ID0gdGhpcy5lbnVtSGVscGVyLmdldEVudW1BcnJheShcclxuICAgICAgQ29sU3BhblNpemVzRW51bSxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIG51bGxcclxuICAgICk7XHJcbiAgICAvLyBDb3N0cnVpc2NvIGwnYXJyYXkgZGVsbGUgY2xhc3NpIHNlbGV6aW9uYXRlIGRhbGwndXRlbnRlIGluIGZvcm1hdG8gc3RyaW5nYVxyXG4gICAgbGV0IHNlbGVjdGVkRGltZW5zaW9uc0NvbXBpbGF6aW9uZTogQXJyYXk8c3RyaW5nPiA9IHRoaXMuZmllbGQuQ29sU3BhblNpemVzXHJcbiAgICAgID8gdGhpcy5maWVsZC5Db2xTcGFuU2l6ZXMubWFwKChjb2wpID0+IENvbFNwYW5TaXplc0VudW1bY29sXSlcclxuICAgICAgOiBbXTtcclxuICAgICAgbGV0IHNlbGVjdGVkRGltZW5zaW9uc1Jpc3Bvc3RhOiBBcnJheTxzdHJpbmc+ID0gdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5Db2xTcGFuU2l6ZXNcclxuICAgICAgPyB0aGlzLmZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplcy5tYXAoKGNvbCkgPT4gQ29sU3BhblNpemVzRW51bVtjb2xdKVxyXG4gICAgICA6IFtdOyAgICAgIFxyXG4gICAgLy8gRmlsdHJvIGkgdmFsb3JpIG90dGVudXRpIGRhbGwnZW51bWVyYXRvcmUgcGVyIGVzY2x1ZGVyZSB0dXR0aSBpIHZhbG9yaSBwZXIgbGVcclxuICAgIC8vIGdyYW5kZXp6ZSBkaSBzY2hlcm1vIGdpw6Agc2VsZXppb25hdGVhZCBlc2NsdXNpb25lIGRlaSB2YWxvcmkgc2VsZXppb25hdGkuXHJcbiAgICB0aGlzLmF2YWlsYWJsZUNvbFNwYW5TaXplc0NvbXBpbGF6aW9uZSA9IGNvbFNpemVDbGFzc0VudW1BcnJheS5maWx0ZXIoXHJcbiAgICAgICh2YWx1ZTogeyBrZXk6IG51bWJlcjsgdmFsdWU6IHN0cmluZyB9KSA9PlxyXG4gICAgICAgICFzZWxlY3RlZERpbWVuc2lvbnNDb21waWxhemlvbmUuZmluZChcclxuICAgICAgICAgIChjb2wpID0+XHJcbiAgICAgICAgICAgIHZhbHVlLnZhbHVlLmluY2x1ZGVzKGNvbC5zdWJzdHJpbmcoNCwgNikpICYmIHZhbHVlLnZhbHVlICE9IGNvbFxyXG4gICAgICAgIClcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUNvbFNwYW5TaXplc1Jpc3Bvc3RhID0gY29sU2l6ZUNsYXNzRW51bUFycmF5LmZpbHRlcihcclxuICAgICAgKHZhbHVlOiB7IGtleTogbnVtYmVyOyB2YWx1ZTogc3RyaW5nIH0pID0+XHJcbiAgICAgICAgIXNlbGVjdGVkRGltZW5zaW9uc1Jpc3Bvc3RhLmZpbmQoXHJcbiAgICAgICAgICAoY29sKSA9PlxyXG4gICAgICAgICAgICB2YWx1ZS52YWx1ZS5pbmNsdWRlcyhjb2wuc3Vic3RyaW5nKDQsIDYpKSAmJiB2YWx1ZS52YWx1ZSAhPSBjb2xcclxuICAgICAgICApXHJcbiAgICApOyAgICBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBjYW1iaW8gZGVsIHRpcG8gZGkgdmlzdWFsaXp6YXppb25lIHNjZWx0YSBwZXIgaSBjYW1waSBkaSB0aXBvIGVsZW5jbyBnZW5lcmljby5cclxuICAgKiBTZSB2aWVuZSBzY2VsdGEgbGEgdmlzdWFsaXp6YXppb25lIGFkIGltbWFnaW5pIHN2dW90YSBsYSBsaXN0YSBkZWxsZSBjb3BwaWUgY2hpYXZlLXZhbG9yZSBpbnNlcml0ZVxyXG4gICAqIGluIHByZWNlZGVuemEsIGFsdHJpbWVudGkgc3Z1b3RhIGxhIGxpc3RhIGRlbGxlIGltbWFnaW5pIGNhcmljYXRlLlxyXG4gICAqL1xyXG4gIG9uUHJlc2VudGF0aW9uTW9kZUNoYW5nZSgpIHtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gYWwgc2FsdmF0YWdnaW8gZGVnbGkgYWxsZWdhdGkgcXVhbmRvIHZpZW5lIGNvbmZpZ3VyYXRvIHVuIGNhbXBvIGRpIHRpcG8gXCJFbGVuY28gZ2VuZXJpY29cIlxyXG4gICAqIGNvbiBpbCB0aXBvIGRpIHZpc3VhbGl6emF6aW9uZSBhZCBpbW1hZ2luaS4gSW50ZXJjZXR0YSBsJ2VsZW5jbyBhZ2dpb3JuYXRvIGRlbGxlIGltbWFnaW5pIGNhcmljYXRlIGUgbG9cclxuICAgKiBtZW1vcml6emEgbmVsbCdvZ2dldHRvIGZpZWxkIGNvcnJlbnRlLlxyXG4gICAqIEBwYXJhbSBhdHRhY2htZW50cyBBcnJheSBhZ2dpb3JuYXRvIGRlZ2xpIGFsbGVnYXRpIGNhcmljYXRpLlxyXG4gICAqL1xyXG4gIGNhdGNoQnV0dG9uSW1hZ2VzQ2hhbmdlKGF0dGFjaG1lbnRzOiBBcnJheTxJQXR0YWNobWVudERUTz4pIHtcclxuXHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0ID0gYXR0YWNobWVudHMgYXMgQXJyYXk8RHluQXR0YWNobWVudD47XHJcblxyXG4gICAgICAodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0LmZvckVhY2goKGF0dGFjaG1lbnQ6IER5bkF0dGFjaG1lbnQpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIGF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9PSBcInVuZGVmaW5lZFwiKXtcclxuXHJcbiAgICAgICAgICB2YXIgbXlCYXNlNjQgPSBcImRhdGE6aW1hZ2UvXCIrYXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkrXCI7YmFzZTY0LFwiICsgYXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NDtcclxuICAgICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAgICAgICBpbWcuc3JjID0gbXlCYXNlNjQ7XHJcbiAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICBhdHRhY2htZW50LkltYWdlV2lkdGhQeCA9IGltZy53aWR0aDtcclxuICAgICAgICAgICAgICBhdHRhY2htZW50LkltYWdlSGVpZ2h0UHggPSBpbWcuaGVpZ2h0O1xyXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnQuQXR0YWNobWVudEZpZWxkVHlwZSA9IEF0dGFjaG1lbnRGaWVsZFR5cGVFbnVtLkVMRU5DT19JTU1BR0lOSTtcclxuICAgICAgICAgICAgICBpZiAoc2VsZi5pbWFnZVNlbGVjdG9yQXR0YWNobWVudHMpeyBzZWxmLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cy5yZWxvYWREYXRhKCk7IH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICB9XHJcblxyXG4gIGNhdGNoQnV0dG9uSW1hZ2VDaGFuZ2UoYXR0YWNobWVudHM6IEFycmF5PElBdHRhY2htZW50RFRPPikge1xyXG5cclxuICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkR5bkF0dGFjaG1lbnQgPSBhdHRhY2htZW50c1sxXSBhcyBEeW5BdHRhY2htZW50O1xyXG5cclxuICAgICAgaWYgKHRoaXMuZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsICYmIHR5cGVvZiB0aGlzLmZpZWxkLkR5bkF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9PSBcInVuZGVmaW5lZFwiKXtcclxuXHJcbiAgICAgICAgdmFyIG15QmFzZTY0ID0gXCJkYXRhOmltYWdlL1wiK3RoaXMuZmllbGQuRHluQXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkrXCI7YmFzZTY0LFwiICsgdGhpcy5maWVsZC5EeW5BdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0O1xyXG4gICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAgICAgaW1nLnNyYyA9IG15QmFzZTY0O1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsZnVuY3Rpb24oKXtcclxuICAgICAgICAgIHNlbGYuZmllbGQuRHluQXR0YWNobWVudC5JbWFnZVdpZHRoUHggPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICBzZWxmLmZpZWxkLkR5bkF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICBzZWxmLmZpZWxkLkR5bkF0dGFjaG1lbnQuQXR0YWNobWVudEZpZWxkVHlwZSA9IEF0dGFjaG1lbnRGaWVsZFR5cGVFbnVtLklNTUFHSU5FO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSAgICAgIFxyXG4gICAgICBcclxuICB9ICBcclxuXHJcbiAgY2F0Y2hCdXR0b25JbWFnZVdpdGhNYXJrZXJzQ2hhbmdlKGF0dGFjaG1lbnRzOiBBcnJheTxJQXR0YWNobWVudERUTz4pIHtcclxuXHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZVdpdGhNYXJrZXJzRmllbGQpLkR5bkF0dGFjaG1lbnQgPSBhdHRhY2htZW50c1sxXSBhcyBEeW5BdHRhY2htZW50O1xyXG5cclxuICAgICAgaWYgKHRoaXMuZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsICYmIHR5cGVvZiB0aGlzLmZpZWxkLkR5bkF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9PSBcInVuZGVmaW5lZFwiKXtcclxuXHJcbiAgICAgICAgdmFyIG15QmFzZTY0ID0gXCJkYXRhOmltYWdlL1wiK3RoaXMuZmllbGQuRHluQXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkrXCI7YmFzZTY0LFwiICsgdGhpcy5maWVsZC5EeW5BdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0O1xyXG4gICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAgICAgaW1nLnNyYyA9IG15QmFzZTY0O1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsZnVuY3Rpb24oKXtcclxuICAgICAgICAgIHNlbGYuZmllbGQuRHluQXR0YWNobWVudC5JbWFnZVdpZHRoUHggPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICBzZWxmLmZpZWxkLkR5bkF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICBzZWxmLmZpZWxkLkR5bkF0dGFjaG1lbnQuQXR0YWNobWVudEZpZWxkVHlwZSA9IEF0dGFjaG1lbnRGaWVsZFR5cGVFbnVtLklNTUFHSU5FX0NPTl9NQVJLRVJTO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSAgICAgIFxyXG4gICAgICBcclxuICB9ICAgIFxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hpYW1hdG8gYWwga2V5dXAgZGVnbGkgaW5wdXQgdGVzdHVhbGkgY2hlIHByZXZlZG9ubyBsJ2FnZ2l1bnRhIGRlbCB2YWxvcmUgaW5zZXJpdG8gaW4gdW4gYXJyYXkuXHJcbiAgICogU2UgbCd1dGVudGUgcHJlbWUgaWwgdGFzdG8gaW52aW8sIGluIGJhc2UgYWwgdGlwbyBkaSBjYW1wbyBjaGUgc3RhIGluc2VyZW5kby9tb2RpZmljYW5kbywgcXVlc3RvIG1ldG9kb1xyXG4gICAqIGFnZ2l1bmdlIGlsIHZhbG9yZSBpbnNlcml0byBkYWxsJ3V0ZW50ZSBuZWxsYSBsaXN0YSBkaSBzdHJpbmdoZSBjb3JyZXR0YSAoaW4gaW5wdXQgdmllbmUgcGFzc2F0byBpbCBub21lXHJcbiAgICogZGVsbGEgcHJvcHJpZXTDoCBpbiBjdWkgaW5zZXJpcmUgbGEgc3RyaW5nYSkuXHJcbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBjaGUgcmFwcHJlc2VudGEgaWwga2V5dXAgZGVsbCd1dGVudGVcclxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIE5vbWUgZGVsbGEgcHJvcHJpZXTDoCBkZWwgZmllbGQgaW4gY3VpIGluc2VyaXJlIGxhIHN0cmluZ2EgZGlnaXRhdGEuXHJcbiAgICovXHJcbiAgb25NdWx0aVNlbGVjdElucHV0S2V5dXAoZXZlbnQsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gXCJFbnRlclwiIHx8IGV2ZW50LmNvZGUgPT09IFwiTnVtcGFkRW50ZXJcIikge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkxvb2t1cDpcclxuICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW0uQWxsZWdhdG86XHJcbiAgICAgICAgICBpZiAoIXRoaXMuZmllbGRbcHJvcGVydHlOYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpZWxkW3Byb3BlcnR5TmFtZV0gPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5maWVsZFtwcm9wZXJ0eU5hbWVdLnB1c2goZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lIGNvbiBtYXJrZXJzXCJdOlxyXG4gICAgICAgICAgICBicmVhazsgICAgICAgICAgXHJcbiAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkltbWFnaW5lOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOlxyXG4gICAgICAgICAgaWYgKCF0aGlzLmtleVZhbHVlT2JqZWN0LmtleSB8fCAhdGhpcy5rZXlWYWx1ZU9iamVjdC52YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoISh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKSB7XHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzID0ge307XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1t0aGlzLmtleVZhbHVlT2JqZWN0LmtleV0gPVxyXG4gICAgICAgICAgICB0aGlzLmtleVZhbHVlT2JqZWN0LnZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5rZXlWYWx1ZU9iamVjdCA9IHsga2V5OiBcIlwiLCB2YWx1ZTogXCJcIiB9O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hpYW1hdG8gcGVyIG1vc3RyYXJlIGNvbWUgZWxlbmNvIGxlIG9wemlvbmkgYWdnaXVudGUgaW4gdW4gY2FtcG8gZGkgdGlwbyBcIkVsZW5jbyBnZW5lcmljb1wiLlxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIGFycmF5IGRpIG9nZ2V0dGkgZGVsIHRpcG8geyBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9IGNvbiBpIHZhbG9yaSBpbnNlcml0aSBkYWxsJ3V0ZW50ZS5cclxuICAgKi9cclxuICBnZXREaWN0aW9uYXJ5S2V5VmFsdWUoKSB7XHJcbiAgICBpZiAoKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKCh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKS5tYXAoKGspID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAga2V5OiBrLFxyXG4gICAgICAgICAgdmFsdWU6ICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaW11b3ZlcmUgdW5hIG9wemlvbmUgYWdnaXVudGEgYWwgY2FtcG8gZGkgdGlwbyBcIkVsZW5jbyBnZW5lcmljb1wiXHJcbiAgICogQHBhcmFtIGtleSBOb21lIGRlbGxhIGNoaWF2ZSBkYSByaW11b3ZlcmVcclxuICAgKi9cclxuICBkZWxldGVLZXlGcm9tRGljdGlvbmFyeShrZXk6IHN0cmluZykge1xyXG4gICAgZGVsZXRlICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tleV07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgcGVyIGFnZ2l1bmdlcmUvbW9kaWZpY2FyZSB1biBtZXRhZGF0YSBpbiB1biBjYW1wbyBkaSB0aXBvIEFsbGVnYXRvIG8gSW1tYWdpbmUuXHJcbiAgICogQHBhcmFtIG1ldGFkYXRhIE1ldGFkYXRhIGRhIG1vZGlmaWNhcmUsIHNlIG51bGwgYWxsb3JhIG5lIHN0byBjcmVhbmRvIHVubyBudW92by5cclxuICAgKi9cclxuICAvLyBvcGVuTWV0YWRhdGFEaWFsb2coZmllbGQ6IEJhc2VGaWVsZCA9IG51bGwpIHtcclxuICAvLyAgIGlmIChmaWVsZCkge1xyXG4gIC8vICAgICBpZiAodGhpcy5maWVsZC5GaWVsZFR5cGUgPT09IEZpZWxkVHlwZUVudW0uQWxsZWdhdG8pIHtcclxuICAvLyAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRNZXRhZGF0YSA9ICh0aGlzLmZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuTWV0YWRhdGFGaWVsZHMuaW5kZXhPZihmaWVsZCk7XHJcbiAgLy8gICAgICAgdGhpcy5zZWxlY3RlZE1ldGFkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmaWVsZCkpO1xyXG4gIC8vICAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGQuRmllbGRUeXBlID09PSBGaWVsZFR5cGVFbnVtLkltbWFnaW5lKSB7XHJcbiAgLy8gICAgICAgdGhpcy5pbmRleFNlbGVjdGVkTWV0YWRhdGEgPSAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzLmluZGV4T2YoZmllbGQpO1xyXG4gIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRNZXRhZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZmllbGQpKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgdGhpcy5zZWxlY3RlZE1ldGFkYXRhID0gbmV3IEJhc2VGaWVsZCgpO1xyXG4gIC8vICAgICB0aGlzLmluZGV4U2VsZWN0ZWRNZXRhZGF0YSA9IG51bGw7XHJcbiAgLy8gICB9XHJcbiAgLy8gICB0aGlzLmRpYWxvZ01ldGFkYXRhUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ01ldGFkYXRhLCB7XHJcbiAgLy8gICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAvLyAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgLy8gICAgIHdpZHRoOiAnNzUlJ1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyNyZWdpb24gb3BlbkZvcm11bGFEaWFsb2dcclxuICBvcGVuRm9ybXVsYURpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nRm9ybXVsYVJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGb3JtdWxhLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZmllbGRzOiB0aGlzLmF2YWlsYWJsZUZpZWxkcyxcclxuICAgICAgICBmb3JtdWxhOiB0aGlzLmZpZWxkLkZvcm11bGEsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlhbG9nRm9ybXVsYVJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuZmllbGQuRm9ybXVsYSA9IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCkgPT0gXCJcIiA/IG51bGwgOiByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuRm9ybXVsYURpYWxvZ1xyXG5cclxuICAvLyNyZWdpb24gb3BlblZpc2libGVJZkRpYWxvZ1xyXG4gIG9wZW5WaXNpYmxlSWZEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1Zpc2libGVJZlJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGb3JtdWxhLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZmllbGRzOiB0aGlzLmF2YWlsYWJsZUZpZWxkcyxcclxuICAgICAgICBmb3JtdWxhOiB0aGlzLmZpZWxkLlZpc2libGVJZixcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kaWFsb2dWaXNpYmxlSWZSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLmZpZWxkLlZpc2libGVJZiA9IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCkgPT0gXCJcIiA/IG51bGwgOiByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuVmlzaWJsZUlmRGlhbG9nXHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuQW5zd2VyU3R5bGVWaXNpYmxlSWZEaWFsb2dcclxuICBvcGVuQW5zd2VyU3R5bGVWaXNpYmxlSWZEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1Zpc2libGVJZlJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGb3JtdWxhLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZmllbGRzOiB0aGlzLmF2YWlsYWJsZUZpZWxkcyxcclxuICAgICAgICBmb3JtdWxhOiB0aGlzLmZpZWxkLkFuc3dlclN0eWxlLlZpc2libGVJZixcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kaWFsb2dWaXNpYmxlSWZSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLmZpZWxkLkFuc3dlclN0eWxlLlZpc2libGVJZiA9IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCkgPT0gXCJcIiA/IG51bGwgOiByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuQW5zd2VyU3R5bGVWaXNpYmxlSWZEaWFsb2dcclxuXHJcbiAgc3RyaW5nU2FuaXRpemVyKHZhbHVlKSB7XHJcbiAgICBpZiAoIVV0aWxpdHlIZWxwZXJTZXJ2aWNlLnN0cmluZ0NoZWNrUGFyZW50ZXNpcyh2YWx1ZSkpIHtcclxuICAgICAgLy8gYWxlcnQoXCJlcnJvcmUhXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gZGFsbCdvdXRwdXQgZGFsIGRpYWxvZyBwZXIgYWdnaXVuZ2VyZS9tb2RpZmljYXJlIHVuIG1ldGFkYXRhXHJcbiAgICogbmVpIGNhbXBpIGRpIHRpcG8gQWxsZWdhdG8gbyBJbW1hZ2luZS4gUHJpbWEgZGkgYWdnaXVuZ2VyZSBpbCBtZXRhZGF0YSBuZWxsJ2VsZW5jb1xyXG4gICAqIGNvbnRvbGxhIHNlIGVzaXN0ZSB1biBhbHRybyBtZXRhZGF0YSBjb24gbG8gc3Rlc3NvIG5vbWUgZSBuZWwgY2FzbyBnZW5lcmEgdW4gZXJyb3JlXHJcbiAgICogKGkgbWV0YWRhdGEsIGNvbWUgcGVyIGkgY2FtcGkgZGVsbGEgZm9ybSwgZGV2b25vIGF2ZXJlIHVuIG5vbWUgdW5pdm9jbykuXHJcbiAgICogQHBhcmFtIG1ldGFkYXRhIE1ldGFkYXRhIGFnZ2l1bnRvIG8gbW9kaWZpY2F0bywgc2UgbnVsbCBhbGxvcmEgaWwgZGlhbG9nIMOoIHN0YXRvIGNoaXVzbyBzZW56YSBmYXJlIG1vZGlmaWNoZS5cclxuICAgKi9cclxuICAvLyBvblNhdmVNZXRhZGF0YShtZXRhZGF0YTogQmFzZUZpZWxkKSB7XHJcbiAgLy8gICBpZiAobWV0YWRhdGEpIHtcclxuICAvLyAgICAgaWYgKFxyXG4gIC8vICAgICAgICh0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PT0gRmllbGRUeXBlRW51bS5BbGxlZ2F0b1xyXG4gIC8vICAgICAgICAgJiYgKHRoaXMuZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5NZXRhZGF0YUZpZWxkc1xyXG4gIC8vICAgICAgICAgJiYgKHRoaXMuZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5NZXRhZGF0YUZpZWxkcy5maW5kKFxyXG4gIC8vICAgICAgICAgICAobSwgaSkgPT4gbS5MYWJlbCA9PT0gbWV0YWRhdGEuTGFiZWxcclxuICAvLyAgICAgICAgICAgICAmJiAodGhpcy5pbmRleFNlbGVjdGVkTWV0YWRhdGEgPT0gbnVsbCA/IHRydWUgOiB0aGlzLmluZGV4U2VsZWN0ZWRNZXRhZGF0YSAhPT0gaSlcclxuICAvLyAgICAgICAgIClcclxuICAvLyAgICAgICApIHx8XHJcbiAgLy8gICAgICAgKHRoaXMuZmllbGQuRmllbGRUeXBlID09PSBGaWVsZFR5cGVFbnVtLkltbWFnaW5lXHJcbiAgLy8gICAgICAgICAmJiAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzXHJcbiAgLy8gICAgICAgICAmJiAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzLmZpbmQoXHJcbiAgLy8gICAgICAgICAgIChtLCBpKSA9PiBtLkxhYmVsID09PSBtZXRhZGF0YS5MYWJlbFxyXG4gIC8vICAgICAgICAgICAgICYmICh0aGlzLmluZGV4U2VsZWN0ZWRNZXRhZGF0YSA9PSBudWxsID8gdHJ1ZSA6IHRoaXMuaW5kZXhTZWxlY3RlZE1ldGFkYXRhICE9PSBpKVxyXG4gIC8vICAgICAgICAgKVxyXG4gIC8vICAgICAgIClcclxuICAvLyAgICAgKSB7XHJcbiAgLy8gICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZygnSW1wb3NzaWJpbGUgaW5zZXJpcmUgZHVlIG1ldGFkYXRhIGNvbiBsYSBzdGVzc2EgbGFiZWwuJyk7XHJcbiAgLy8gICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgbWV0YWRhdGEgY29uIGxhIHN0ZXNzYSBsYWJlbC4nKTtcclxuICAvLyAgICAgfVxyXG5cclxuICAvLyAgICAgaWYgKHRoaXMuaW5kZXhTZWxlY3RlZE1ldGFkYXRhICE9IG51bGwgJiYgdGhpcy5pbmRleFNlbGVjdGVkTWV0YWRhdGEgPj0gMCkge1xyXG4gIC8vICAgICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PT0gRmllbGRUeXBlRW51bS5BbGxlZ2F0bykge1xyXG4gIC8vICAgICAgICAgKHRoaXMuZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5NZXRhZGF0YUZpZWxkc1t0aGlzLmluZGV4U2VsZWN0ZWRNZXRhZGF0YV0gPSBtZXRhZGF0YTtcclxuICAvLyAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGQuRmllbGRUeXBlID09PSBGaWVsZFR5cGVFbnVtLkltbWFnaW5lKSB7XHJcbiAgLy8gICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZE1ldGFkYXRhXSA9IG1ldGFkYXRhO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICBpZiAodGhpcy5maWVsZC5GaWVsZFR5cGUgPT09IEZpZWxkVHlwZUVudW0uQWxsZWdhdG8pIHtcclxuICAvLyAgICAgICAgIGlmICghKHRoaXMuZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5NZXRhZGF0YUZpZWxkcykge1xyXG4gIC8vICAgICAgICAgICAodGhpcy5maWVsZCBhcyBBdHRhY2htZW50RmllbGQpLk1ldGFkYXRhRmllbGRzID0gbmV3IEFycmF5PEJhc2VGaWVsZD4oKTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgICh0aGlzLmZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuTWV0YWRhdGFGaWVsZHMucHVzaChtZXRhZGF0YSk7XHJcbiAgLy8gICAgICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PT0gRmllbGRUeXBlRW51bS5JbW1hZ2luZSkge1xyXG4gIC8vICAgICAgICAgaWYgKCEodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzKSB7XHJcbiAgLy8gICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uTWV0YWRhdGFGaWVsZHMgPSBuZXcgQXJyYXk8QmFzZUZpZWxkPigpO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5NZXRhZGF0YUZpZWxkcy5wdXNoKG1ldGFkYXRhKTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyAgIHRoaXMuZGlhbG9nTWV0YWRhdGFSZWYuY2xvc2UoKTtcclxuICAvLyAgIHRoaXMuc2V0TWV0YWRhdGFPcmRpbmFsUG9zaXRpb24oKTtcclxuICAvLyAgIHRoaXMucmVsb2FkTWV0YWRhdGFUYWJsZSgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8jcmVnaW9uIGRpc2FibGVTYXZlRmllbGRcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGRpc2FiaWxpdGFyZSBpbCBwdWxzYW50ZSBwZXIgc2FsdmFyZSBpbCBjYW1wbyBpbnNlcml0by9tb2RpZmljYXRvLlxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIGJvb2xlYW5vLCBzZSB0cnVlIGlsIHNhbHZhdGFnZ2lvIHZpZW5lIGRpc2FiaWxpdGF0by5cclxuICAgKi9cclxuICBkaXNhYmxlU2F2ZUZpZWxkKCk6IGJvb2xlYW4ge1xyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkRm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLmZpZWxkLkZpZWxkVHlwZSkge1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Gb3JtdWxhICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLkZvcm11bGEgIT0gXCJcIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKCEodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycykge1xyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycyA9IHt9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmcgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmcgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlU3RyaW5nICE9IFwiXCIpe1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgISh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzIHx8XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycy5sZW5ndGggPT09IDBcclxuICAgICAgICApO1xyXG4gICAgICAgIFxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gaW1tYWdpbmlcIl06IFxyXG5cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICAhKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5BdHRhY2htZW50TGlzdCB8fFxyXG4gICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuQXR0YWNobWVudExpc3QubGVuZ3RoID09PSAwIHx8XHJcbiAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5BdHRhY2htZW50TGlzdC5maW5kKFxyXG4gICAgICAgICAgKGkpID0+IChpLkJ1dHRvbktleSA9PSBudWxsIHx8IGkuQnV0dG9uS2V5ID09PSBcInVuZGVmaW5lZFwiIHx8IGkuQnV0dG9uS2V5ID09ICcnKSB8fCAoaS5CdXR0b25WYWx1ZSA9PSBudWxsIHx8IGkuQnV0dG9uVmFsdWUgPT09IFwidW5kZWZpbmVkXCIgfHwgaS5CdXR0b25WYWx1ZSA9PSAnJylcclxuICAgICAgICApICE9IG51bGxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5Mb29rdXA6XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICEodGhpcy5maWVsZCBhcyBMb29rdXBGaWVsZCkuRmllbGROYW1lcyB8fFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTG9va3VwRmllbGQpLkZpZWxkTmFtZXMubGVuZ3RoID09PSAwXHJcbiAgICAgICAgKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBkaXNhYmxlU2F2ZUZpZWxkXHJcblxyXG4gIC8vI3JlZ2lvbiBzYXZlQW5kRXhpdEFkZEZpZWxkXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGlsIGNhbXBvIGluc2VyaXRvL21vZGlmaWNhdG8uXHJcbiAgICogU2Ugw6ggc3RhdG8gaW5zZXJpdG8gdW4gZmllbGQgY29uIGxhIHN0ZXNzYSBsYWJlbCB2aWVuZSBnZW5lcmF0byB1biBlcnJvcmUgKGxlIGxhYmVsIGRldm9ubyBlc3NlcmUgdW5pdm9jaGUpLlxyXG4gICAqIFVuYSB2b2x0YSBhZ2dpdW50by9hZ2dpb3JuYXRvIGlsIGNhbXBvIG5lbGwnZWxlbmNvIGRlaSBGaWVsZCBkZWxsYSBGb3JtIGNoaXVkZSBpbCBkaWFsb2cgZSByaWNhcmljYSBsYSB0YWJlbGxhXHJcbiAgICogY2hlIG1vc3RyYSBsJ2VsZW5jbyBkZWkgY2FtcGkgYWdnaXVudGkgYWxsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHNhdmVBbmRFeGl0QWRkRmllbGQoc2F2ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKTtcclxuICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIGlmICh0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cyl7IHRoaXMuaW1hZ2VTZWxlY3RvckF0dGFjaG1lbnRzLnJlbG9hZERhdGEoKTsgfVxyXG4gICAgaWYgKHNhdmUpIHtcclxuICAgICAgLy8gcmV0cm9jb21wYXRpYmlsaXTDoCBjb24gdmFsdWVwYWlycyBwZXIgRWxlbmNvIEdlbmVyaWNvXHJcbiAgICAgIGlmKHRoaXMuZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl0pIHtcclxuICAgICAgICBpZigoKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLkZvcm11bGEgJiYgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLkZvcm11bGEgIT0gXCJcIikgfHwgKCh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVN0cmluZyAmJiAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmcgIT0gXCJcIikpe1xyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGltbWFnaW5pXCJdKSB7XHJcbiAgICAgICAgaWYoKCh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuQXR0YWNobWVudExpc3QubGVuZ3RoID4gMCkpe1xyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5BdHRhY2htZW50TGlzdC5mb3JFYWNoKChhdHRhY2htZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnQuUmVzaXplZEltYWdlSGVpZ2h0UHggPSAodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtLkltbWFnaW5lKSB7XHJcbiAgICAgICAgaWYoKCh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkR5bkF0dGFjaG1lbnQgIT0gbnVsbCkpe1xyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRHluQXR0YWNobWVudC5SZXNpemVkSW1hZ2VIZWlnaHRQeCA9ICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gICAgICBcclxuICAgICAgaWYodGhpcy5maWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkltbWFnaW5lIGNvbiBtYXJrZXJzXCJdKSB7XHJcbiAgICAgICAgaWYoKCh0aGlzLmZpZWxkIGFzIEltYWdlV2l0aE1hcmtlcnNGaWVsZCkuRHluQXR0YWNobWVudCAhPSBudWxsKSl7XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZVdpdGhNYXJrZXJzRmllbGQpLkR5bkF0dGFjaG1lbnQuUmVzaXplZEltYWdlSGVpZ2h0UHggPSAodGhpcy5maWVsZCBhcyBJbWFnZVdpdGhNYXJrZXJzRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gICAgICAgICBcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnYWRkLWZvcm0tZmllbGQgc2F2ZScsIHRoaXMuZmllbGQpXHJcbiAgICAgIHRoaXMuc2F2ZUZpZWxkRXZlbnQuZW1pdCh0aGlzLmZpZWxkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2F2ZUZpZWxkRXZlbnQuZW1pdChudWxsKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHNhdmVBbmRFeGl0QWRkRmllbGRcclxuXHJcbiAgLy8jcmVnaW9uIHJlc3RvcmVCYXNlRmllbGRQcm9wZXJ0aWVzXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaXByaXN0aW5hcmUgbCdvZ2dldHRvIGZpZWxkIGFsIGNhbWJpbyBkZWwgdGlwbyBzZWxlemlvbmF0by5cclxuICAgKiBMYXNjaWEgdmFsb3JpenphdGUgc29sbyBsZSBwcm9wcmlldMOgIGRlbGwnb2dnZXR0byBCYXNlRmllbGQgY29tdW5lIGEgdHV0dGkgaSB0aXBpIGRpIGNhbXBvLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVzdG9yZUJhc2VGaWVsZFByb3BlcnRpZXMoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZCkge1xyXG4gICAgICBjb25zdCB0bXBCYXNlRmllbGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmllbGQpKTtcclxuICAgICAgdGhpcy5maWVsZCA9IG5ldyBCYXNlRmllbGQoKTtcclxuICAgICAgdGhpcy5maWVsZC5MYWJlbCA9IHRtcEJhc2VGaWVsZC5MYWJlbDtcclxuICAgICAgdGhpcy5maWVsZC5EZXNjcmlwdGlvbiA9IHRtcEJhc2VGaWVsZC5EZXNjcmlwdGlvbjtcclxuICAgICAgdGhpcy5maWVsZC5SZXF1aXJlZCA9IHRtcEJhc2VGaWVsZC5SZXF1aXJlZDtcclxuICAgICAgdGhpcy5maWVsZC5GaWVsZFR5cGUgPSB0bXBCYXNlRmllbGQuRmllbGRUeXBlO1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm11bGEgPSB0bXBCYXNlRmllbGQuRm9ybXVsYTtcclxuICAgICAgdGhpcy5maWVsZC5Db2xTcGFuU2l6ZXMgPSB0bXBCYXNlRmllbGQuQ29sU3BhblNpemVzO1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSB0bXBCYXNlRmllbGQuSW5MaXN0VmlldztcclxuICAgICAgdGhpcy5maWVsZC5JbnZpc2liaWxpdHkgPSB0bXBCYXNlRmllbGQuSW52aXNpYmlsaXR5O1xyXG4gICAgICB0aGlzLmZpZWxkLlRvb2x0aXAgPSB0bXBCYXNlRmllbGQuVG9vbHRpcDtcclxuICAgICAgdGhpcy5maWVsZC5SZWFkb25seSA9IHRtcEJhc2VGaWVsZC5SZWFkb25seTtcclxuICAgICAgdGhpcy5maWVsZC5GaWVsZEdyb3VwID0gdG1wQmFzZUZpZWxkLkZpZWxkR3JvdXA7XHJcbiAgICAgIHRoaXMuZmllbGQuVmlzaWJsZUlmID0gdG1wQmFzZUZpZWxkLlZpc2libGVJZjtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jcmVnaW9uIHJlc3RvcmVCYXNlRmllbGRQcm9wZXJ0aWVzXHJcblxyXG4gIGNvdW50VmFsdWVQYWlycyh2YWx1ZVBhaXJzKTogbnVtYmVye1xyXG4gICAgaWYodmFsdWVQYWlycyl7XHJcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZVBhaXJzKS5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyZUNvbHVtbnMoKXtcclxuXHJcbiAgICAvLyBMaXN0YSBHZW5lcmljYSBkaSBpbW1hZ2luaVxyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzID0gW107XHJcblxyXG4gICAgICB0aGlzLmNvbmZpZ0NvbHVtbkxpc3RJbWFnZXMucHVzaCh7XHJcbiAgICAgICAga2V5OiAnYWN0aW9uJywgZGlzcGxheTogJycsIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbiwgYnV0dG9uTWVudUljb246ICdtb3JlX3ZlcnQnLCBzdHlsZXM6IHsgZmxleDogJzAgMCA2JScgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IG5hbWU6ICdFbGltaW5hJywgaWNvbjogJ2RlbGV0ZScsIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kZWxldGVMaXN0SW1hZ2UoZWxlbWVudCwgaW5kZXgsIGNvbCkgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJTcG9zdGEgc3VcIixcclxuICAgICAgICAgICAgaWNvbjogXCJhcnJvd191cHdhcmRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMubW92ZUVsZW1lbnQoZWxlbWVudCwgdHJ1ZSksXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiAoZWxlbWVudCkgPT4gdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5pbmRleE9mKGVsZW1lbnQpID09PSAwLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJTcG9zdGEgZ2nDuVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93X2Rvd253YXJkXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIGZhbHNlKSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuaW5kZXhPZihlbGVtZW50KSA+PSB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0Lmxlbmd0aCAtIDEsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF1cclxuICAgICAgfSk7IFxyXG5cclxuICAgIHRoaXMuY29uZmlnQ29sdW1uTGlzdEltYWdlcy5wdXNoKHtcclxuICAgICAga2V5OlwiRmlsZURhdGFCYXNlNjRcIixcclxuICAgICAgZGlzcGxheTogXCJJbW1hZ2luZVwiLFxyXG4gICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgIGV4dGVybmFsVGVtcGxhdGU6IHRoaXMuR2VuZXJpY0xpc3RJbWFnZXNJbWFnZVRlbXBsYXRlLFxyXG4gICAgfSk7ICAgIFxyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICBrZXk6XCJCdXR0b25LZXlcIixcclxuICAgICAgZGlzcGxheTogXCJDaGlhdmVcIixcclxuICAgICAgdHlwZTogVHlwZUNvbHVtbi5FeHRlcm5hbFRlbXBsYXRlLFxyXG4gICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLkdlbmVyaWNMaXN0SW1hZ2VzS2V5VGVtcGxhdGUsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuY29uZmlnQ29sdW1uTGlzdEltYWdlcy5wdXNoKHtcclxuICAgICAga2V5OlwiQnV0dG9uVmFsdWVcIixcclxuICAgICAgZGlzcGxheTogXCJWYWxvcmVcIixcclxuICAgICAgdHlwZTogVHlwZUNvbHVtbi5FeHRlcm5hbFRlbXBsYXRlLFxyXG4gICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLkdlbmVyaWNMaXN0SW1hZ2VzVmFsdWVUZW1wbGF0ZSxcclxuICAgIH0pOyAgIFxyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICBrZXk6XCJJbWFnZVdpZHRoUHhcIixcclxuICAgICAgZGlzcGxheTogXCJMYXJnaGV6emFcIlxyXG4gICAgfSk7ICAgICBcclxuICAgIHRoaXMuY29uZmlnQ29sdW1uTGlzdEltYWdlcy5wdXNoKHtcclxuICAgICAga2V5OlwiSW1hZ2VIZWlnaHRQeFwiLFxyXG4gICAgICBkaXNwbGF5OiBcIkFsdGV6emFcIlxyXG4gICAgfSk7ICAgICAgICAgICAgXHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtb3ZlRWxlbWVudChcclxuICAgIGVsZW1lbnQ6IER5bkF0dGFjaG1lbnQsXHJcbiAgICBtb3ZlVXA6IGJvb2xlYW5cclxuICApIHtcclxuICAgIGNvbnN0IHN0YXJ0aW5nSW5kZXggPSB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0LmluZGV4T2YoZWxlbWVudCk7XHJcbiAgICBjb25zdCBlbmRpbmdJbmRleCA9IHN0YXJ0aW5nSW5kZXggKyAobW92ZVVwID8gLTEgOiAxKTtcclxuXHJcbiAgICB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0LnNwbGljZShzdGFydGluZ0luZGV4LCAxKTtcclxuICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3Quc3BsaWNlKGVuZGluZ0luZGV4LCAwLCBlbGVtZW50KTtcclxuXHJcbiAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICBpZiAodGhpcy5pbWFnZVNlbGVjdG9yQXR0YWNobWVudHMpeyB0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cy5yZWxvYWREYXRhKCk7IH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5BdHRhY2htZW50TGlzdCkge1xyXG4gICAgICB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0LmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgZmllbGQuT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5pbmRleE9mKGZpZWxkKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKXtcclxuICAgIHRoaXMucmVzaXplZEltYWdlc0hlaWdodFB4ID0gdGhpcy5maWVsZC5SZXNpemVkSW1hZ2VzSGVpZ2h0UHg7XHJcbiAgfVxyXG5cclxuICBkZWxldGVMaXN0SW1hZ2UoZWw6IER5bkF0dGFjaG1lbnQsIGk6IG51bWJlciwgY29sOiBudW1iZXIpe1xyXG4gICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkNvbmZpcm0oJ0VsaW1pbmFyZSBxdWVzdGEgaW1tYWdpbmU/JywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3Quc3BsaWNlKGVsLm9yaWdpbmFsSW5kZXgsIDEpO1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cyl7IHRoaXMuaW1hZ2VTZWxlY3RvckF0dGFjaG1lbnRzLnJlbG9hZERhdGEoKTsgfVxyXG5cclxuICAgICB9LCBmYWxzZSwgJ1JpY2hpZXN0YSBjb25mZXJtYScpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlSW1hZ2UoZWw6IER5bkF0dGFjaG1lbnQpe1xyXG4gICAgdGhpcy5maWVsZC5EeW5BdHRhY2htZW50ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIERCIEdFVFRFUlxyXG4gIG9wZW5EQkdldHRlcigpe1xyXG4gICAgaWYgKHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQgIT0gbnVsbCAmJiAhdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy51c2VEeW5hbWljTW9kdWxlTW9jayl7XHJcblxyXG4gICAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5tb2RlID0gUXVlcnlFZGl0b3JNb2RlRW51bS5DT01QT1NFUjtcclxuICAgICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcubG9hZFF1ZXJ5U3RhdHVzZXMgPSB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlO1xyXG5cclxuICAgICAgdGhpcy5kaWFsb2dRRVJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dRRSwge1xyXG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICBwYW5lbENsYXNzOiAncXVlcnktZWRpdG9yLW1vZGFsJyxcclxuICAgICAgICB3aWR0aDogJzkwJSdcclxuICAgICAgfSk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoJy4vYXNzZXRzL21vY2t1cHMvbW9ja2VkRnJvbVF1ZXJ5RWRpdG9yX1FVRVJZX1dJVEhfUVVFU1RJT04udHh0Jywge3Jlc3BvbnNlVHlwZTogJ3RleHQnfSlcclxuICAgICAgLnN1YnNjcmliZShtb2NrZWRGcm9tUXVlcnlFZGl0b3IgPT4ge1xyXG4gICAgICAgIHRoaXMudHJlYXREYXRhRnJvbVF1ZXJ5RWRpdG9yKEpTT04ucGFyc2UobW9ja2VkRnJvbVF1ZXJ5RWRpdG9yKS5QYXJhbXMpO1xyXG4gICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VRRU1vZGFsKCl7XHJcbiAgICB0aGlzLmRpYWxvZ1FFUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCl7XHJcbiAgICBpZiAoZXYuQmVoYXZpb3Vycy5pbmRleE9mKFwic2VuZC1vdXRcIikgIT0gLTEpeyB0aGlzLm91dC5lbWl0KGV2KTsgfVxyXG4gICAgaWYgKGV2LkJlaGF2aW91cnMuaW5kZXhPZihcImNsb3NlLW1vZGFsXCIpICE9IC0xKXsgdGhpcy5jbG9zZVFFTW9kYWwoKTsgfSAgIFxyXG4gICAgaWYgKGV2LkJlaGF2aW91cnMuaW5kZXhPZihcInNhdmUtcXVlcnlcIikgIT0gLTEpeyBcclxuICAgICAgXHJcbiAgICAgIHRoaXMudHJlYXREYXRhRnJvbVF1ZXJ5RWRpdG9yKGV2LlBhcmFtcyk7XHJcblxyXG4gICAgIH1cclxuICB9XHJcblxyXG4gIHRyZWF0RGF0YUZyb21RdWVyeUVkaXRvcihkYXRhOiBhbnkpe1xyXG4gICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSA9IGRhdGE7XHJcbiAgICB0aGlzLmNyZWF0ZUNvbHVtbktleXMoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVDb2x1bW5LZXlzKGRhdGEpe1xyXG4gICAgaWYgKGRhdGEgPT0gbnVsbCAmJiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGwpeyBkYXRhID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZTsgfVxyXG4gICAgaWYgKGRhdGEgIT0gbnVsbCAmJiB0eXBlb2YgZGF0YSAhPSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBkYXRhLnNlbGVjdGVkRmllbGRzICE9IFwidW5kZWZpbmVkXCIpe1xyXG4gICAgICB0aGlzLmNvbHVtbktleXMgPSBuZXcgQXJyYXk8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PigpO1xyXG4gICAgICBkYXRhLnNlbGVjdGVkRmllbGRzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29sdW1uS2V5cy5wdXNoKHtrZXk6IGtleS5EYXRhYmFzZVRhYmxlTmFtZStcIl9cIitrZXkuUHJvcGVydHlOYW1lK1wiX19cIitrZXkuQ3VycmVudFRyYW5zbGF0ZS5yZXBsYWNlKFwiIFwiLFwiX1wiKSwgdmFsdWU6IGtleS5DdXJyZW50VHJhbnNsYXRlfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QWxsTW9kdWxlcygpe1xyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICBQYXJhbU5hbWU6IFwib3JnYWlkXCIsXHJcbiAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5PcmdhSUQsXHJcbiAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QWxsRm9ybUVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBBcnJheTxGb3JtPikgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybXMgPSByZXM7XHJcbiAgICAgICAgdGhpcy5mb3JtcyA9IHRoaXMuZm9ybXMuc29ydCgodW5vLCBkdWUpID0+IHVuby5OYW1lLmxvY2FsZUNvbXBhcmUoZHVlLk5hbWUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5ETUZpZWxkID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5ETU1vZHVsZSA9PSBudWxsICYmIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbCl7XHJcbiAgICAgICAgICB0aGlzLkRNTW9kdWxlID0gdGhpcy5mb3Jtcy5maW5kKHggPT4geC5Db2RlID09IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5ETU1vZHVsZS5GaWVsZHMgPSBKU09OLnBhcnNlKHRoaXMuRE1Nb2R1bGUuSnNvbkZpZWxkcyk7XHJcbiAgICAgICAgICB0aGlzLkRNRmllbGRzID0gbmV3IEFycmF5PHsga2V5OiBzdHJpbmcgfT4oKTtcclxuICAgICAgICAgIHRoaXMuRE1Nb2R1bGUuRmllbGRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ETUZpZWxkcy5wdXNoKHsga2V5OiBlbGVtZW50LlZhbHVlLk5hbWUgfSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLkRNRmllbGRzID0gdGhpcy5ETUZpZWxkcy5zb3J0KCh1bm8sIGR1ZSkgPT4gdW5vLmtleS5sb2NhbGVDb21wYXJlKGR1ZS5rZXkpKTtcclxuICBcclxuICAgICAgICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlICE9IG51bGwpe1xyXG4gICAgICAgICAgICB0aGlzLkRNRmllbGQgPSB0aGlzLkRNRmllbGRzLmZpbmQoeCA9PiB4LmtleSA9PSB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlKTtcclxuICAgICAgICAgIH0gICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4geyB9XHJcbiAgICApOyAgICBcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlRE1Nb2R1bGUoKXtcclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5ETU1vZHVsZVwiLHRoaXMuRE1Nb2R1bGUsdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSk7XHJcbiAgICBpZiAodGhpcy5ETU1vZHVsZSAhPSBudWxsKXtcclxuICAgICAgdGhpcy5ETU1vZHVsZS5GaWVsZHMgPSBKU09OLnBhcnNlKHRoaXMuRE1Nb2R1bGUuSnNvbkZpZWxkcyk7XHJcbiAgICAgIHRoaXMuRE1GaWVsZHMgPSBuZXcgQXJyYXk8eyBrZXk6IHN0cmluZyB9PigpO1xyXG4gICAgICB0aGlzLkRNTW9kdWxlLkZpZWxkcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIHRoaXMuRE1GaWVsZHMucHVzaCh7IGtleTogZWxlbWVudC5WYWx1ZS5OYW1lIH0pO1xyXG4gICAgICB9KTtcclxuICBcclxuICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSA9IHRoaXMuRE1Nb2R1bGUuQ29kZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuRE1Nb2R1bGUgPSBudWxsO1xyXG4gICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5ETUZpZWxkID0gbnVsbDtcclxuICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZURNRmllbGQoKXtcclxuICAgIGlmICh0aGlzLkRNRmllbGQgIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPSB0aGlzLkRNRmllbGQua2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZURNQ29udGVzdHVhbGl6YXRpb24oKXtcclxuICAgIGNvbnNvbGUubG9nKFwib25DaGFuZ2VETUNvbnRlc3R1YWxpemF0aW9uKClcIiwgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb250ZXN0dWFsaXphdGlvbik7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8IS0tIDxkaXYgY2xhc3M9XCJhZGQtZm9ybS1maWVsZCBiaWd3cmFwcGVyXCIgc3R5bGU9XCJtYXgtaGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50OyBvdmVyZmxvdy14OiBoaWRkZW47IG92ZXJmbG93LXk6IGF1dG87XCI+IC0tPlxyXG5cclxuPG1hdC1jYXJkIGNsYXNzPVwiYWRkLWZvcm0tZmllbGRcIj5cclxuICAgIDxtYXQtY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgPG1hdC1jYXJkLXRpdGxlPlxyXG4gICAgICAgICAgICB7e2luZGV4RmllbGQgIT0gbnVsbCAmJiBpbmRleEZpZWxkID49IDAgPyBcIk1vZGlmaWNhXCIgOiBcIkFnZ2l1bmdpXCJ9fSBjYW1wb1xyXG4gICAgICAgIDwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuXHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBjb250YWluZXJDb250ZW50IFwiPlxyXG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBBUkVBIFBSSU5DSVBBTEUgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGVxcC1kZm9ybS1hZGQtZm9ybS1maWVsZC1tYWluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gVElQTyBDQU1QTyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgdGlwb0NhbXBvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndGV4dC1kYW5nZXInOiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRmllbGRUeXBlJ10uc3RhdHVzICE9ICdWQUxJRCcgJiYgZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0ZpZWxkVHlwZSddLnRvdWNoZWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlwbyBjYW1wbyAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbZW51bURhdGFdPVwiRmllbGRUeXBlRW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5GaWVsZFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIiAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uRmllbGRUeXBlQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidGaWVsZFR5cGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbnVtRGF0YVRvRXhjbHVkZV09XCJmaWVsZFR5cGVzVG9FeGNsdWRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBUSVBPIENBTVBPIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBDT0RJQ0UgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndGV4dC1kYW5nZXInOiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTGFiZWwnXS5zdGF0dXMgIT0gJ1ZBTElEJyAmJiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTGFiZWwnXS50b3VjaGVkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGljZSAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiTGFiZWxcIiByZXF1aXJlZCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLkxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5MYWJlbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTGFiZWwnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydMYWJlbCddLmVycm9ycz8uWydyZXF1aXJlZCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmJsaWdhdG9yaW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0xhYmVsJ10uZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2kgcG9zc29ubyBpbnNlcmlyZSBzb2xvIGxldHRlcmUgYS16XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydMYWJlbCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gQ09ESUNFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBERVNDUklaSU9ORSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydEZXNjcmlwdGlvbiddLnN0YXR1cyAhPSAnVkFMSUQnICYmIGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydEZXNjcmlwdGlvbiddLnRvdWNoZWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpemlvbmUgKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJEZXNjcmlwdGlvblwiIGZvcm1Db250cm9sTmFtZT1cIkRlc2NyaXB0aW9uXCIgcmVxdWlyZWQgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLkRlc2NyaXB0aW9uXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuRGVzY3JpcHRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZXJyb3IgKm5nSWY9XCIhZmllbGQuRGVzY3JpcHRpb24udmFsaWQgJiYgZmllbGQuRm9ybUZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5EZXNjcmlwdGlvbl0udG91Y2hlZFwiPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRGVzY3JpcHRpb24nKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydEZXNjcmlwdGlvbiddLmVycm9ycz8uWydyZXF1aXJlZCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmJsaWdhdG9yaW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Rlc2NyaXB0aW9uJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBERVNDUklaSU9ORSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gU0VaSU9ORSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIiAqbmdJZj1cImZvcm1GaWVsZHNHcm91cHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydGaWVsZEdyb3VwJ10uc3RhdHVzICE9ICdWQUxJRCcgJiYgZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0ZpZWxkR3JvdXAnXS50b3VjaGVkIH1cIj5TZXppb25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiZm9ybUZpZWxkc0dyb3Vwc1wiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5GaWVsZEdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidOYW1lJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ05hbWUnXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInRmllbGRHcm91cCdcIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRmllbGRHcm91cCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydGaWVsZEdyb3VwJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JibGlnYXRvcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFNFWklPTkUgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIE9CQkxJR0FUT1JJTyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiZmllbGQuUmVxdWlyZWRcIiBmb3JtQ29udHJvbE5hbWU9XCJSZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iYmxpZ2F0b3Jpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gT0JCTElHQVRPUklPIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBSRUFET05MWSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiZmllbGQuUmVhZG9ubHlcIiBmb3JtQ29udHJvbE5hbWU9XCJSZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRPbmx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBSRUFET05MWSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIEFSRUEgUFJJTkNJUEFMRSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBBUkVBIFRBQlMgLS0+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXRhYi1ncm91cCBjbGFzcz1cImVxcC1kZm9ybS1hZGQtZm9ybS1maWVsZC10YWJzXCIgbWF0LXN0cmV0Y2gtdGFicz1cImZhbHNlXCIgbWF0LWFsaWduLXRhYnM9XCJzdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFNUSUxFIENPTVBJTEFaSU9ORSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIlN0aWxlIENvbXBpbGF6aW9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gTEFSR0hFWlpBIENBTVBPIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5MYXJnaGV6emEgY2FtcG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cImF2YWlsYWJsZUNvbFNwYW5TaXplc0NvbXBpbGF6aW9uZVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5Db2xTcGFuU2l6ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCIna2V5J1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ3ZhbHVlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25Db2xTcGFuU2l6ZVNlbGVjdCgpXCIgW2lzTXVsdGlTZWxlY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInQ29sU3BhblNpemVzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gTEFSR0hFWlpBIENBTVBPIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIExBQkVMIENTUyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+IExhYmVsIGNzcyA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiTGFiZWxzdHlsZUNTU1wiIGZvcm1Db250cm9sTmFtZT1cIkxhYmVsc3R5bGVDU1NcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5MYWJlbHN0eWxlQ1NTXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTGFiZWxzdHlsZUNTUylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ0xhYmVsc3R5bGVDU1MnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTGFiZWxzdHlsZUNTUyddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBMQUJFTCBDU1MgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gRklFTEQgQ1NTIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gRmllbGQgY3NzIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJGaWVsZHN0eWxlQ1NTXCIgZm9ybUNvbnRyb2xOYW1lPVwiRmllbGRzdHlsZUNTU1wiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLkZpZWxkc3R5bGVDU1NcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5GaWVsZHN0eWxlQ1NTKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRmllbGRzdHlsZUNTUycpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydGaWVsZHN0eWxlQ1NTJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIEZJRUxEIENTUyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBWSVNJQkxFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yIGFsaWduLXNlbGYtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIihmaWVsZC5WaXNpYmxlSWYgIT0gbnVsbCB8fCBmaWVsZC5WaXNpYmxlSWYgIT0gdW5kZWZpbmVkKSAmJiBmaWVsZC5WaXNpYmxlSWYgIT0gJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiZmllbGQuSW5MaXN0Vmlld1wiIGZvcm1Db250cm9sTmFtZT1cIkluTGlzdFZpZXdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydJbkxpc3RWaWV3J10uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2liaWxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gVklTSUJMRSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBJTlZJU0lCSUxFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yIGFsaWduLXNlbGYtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkLkluTGlzdFZpZXdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpcG8gZGkgaW52aXNpYmlsaXTDoCBkZWwgY2FtcG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cImZpZWxkSW52aXNpYmlsaXR5RW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5JbnZpc2liaWxpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0ludmlzaWJpbGl0eSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIElOVklTSUJMRSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBWSVNJQkxFIElGIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmlzaWJsZUlmIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJWaXNpYmxlSWZcIiBmb3JtQ29udHJvbE5hbWU9XCJWaXNpYmxlSWZcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5WaXNpYmxlSWZcIiAoY2xpY2spPVwib3BlblZpc2libGVJZkRpYWxvZygpXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuVmlzaWJsZUlmKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnVmlzaWJsZUlmJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ1Zpc2libGVJZiddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiVmlzaWJsZUlmXCIgZm9ybUNvbnRyb2xOYW1lPVwiVmlzaWJsZUlmXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5WaXNpYmxlSWZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cIlZpc2libGVJZkF1dG9jb21wbGV0ZVwiIChrZXl1cCk9XCJzZXRWaXNpYmxlSWZBdXRvY29tcGxldGVPcHRpb25zKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwic2V0VmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9ucyhudWxsKVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuVmlzaWJsZUlmKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNWaXNpYmxlSWZBdXRvY29tcGxldGU9XCJtYXRBdXRvY29tcGxldGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBWaXNpYmxlSWZBdXRvY29tcGxldGVPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb24ubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFZJU0lCTEUgSUYgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gVE9PTFRJUCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+IFRvb2x0aXAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIlRvb2x0aXBcIiBmb3JtQ29udHJvbE5hbWU9XCJUb29sdGlwXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5Ub29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuVG9vbHRpcClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ1Rvb2x0aXAnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snVG9vbHRpcCddLmVycm9ycz8uWydyZXF1aXJlZCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iYmxpZ2F0b3Jpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ1Rvb2x0aXAnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gVE9PTFRJUCAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBTVElMRSBDT01QSUxBWklPTkUgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFNUSUxFIERFTExBIFJJU1BTT1RBIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiU3RpbGUgUmlzcG9zdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIExBUkdIRVpaQSBDQU1QTyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+TGFyZ2hlenphIGNhbXBvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJhdmFpbGFibGVDb2xTcGFuU2l6ZXNSaXNwb3N0YVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5BbnN3ZXJTdHlsZS5Db2xTcGFuU2l6ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCIna2V5J1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ3ZhbHVlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25Db2xTcGFuU2l6ZVNlbGVjdCgpXCIgW2lzTXVsdGlTZWxlY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInQW5zd2VyU3R5bGVDb2xTcGFuU2l6ZXMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBMQVJHSEVaWkEgQ0FNUE8gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gTEFCRUwgQ1NTIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gTGFiZWwgY3NzIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJBbnN3ZXJTdHlsZUxhYmVsc3R5bGVDU1NcIiBmb3JtQ29udHJvbE5hbWU9XCJBbnN3ZXJTdHlsZUxhYmVsc3R5bGVDU1NcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5BbnN3ZXJTdHlsZS5MYWJlbHN0eWxlQ1NTXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuQW5zd2VyU3R5bGUuTGFiZWxzdHlsZUNTUylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ0xhYmVsc3R5bGVDU1MnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snQW5zd2VyU3R5bGVMYWJlbHN0eWxlQ1NTJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIExBQkVMIENTUyAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBGSUVMRCBDU1MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBGaWVsZCBjc3MgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkFuc3dlclN0eWxlRmllbGRzdHlsZUNTU1wiIGZvcm1Db250cm9sTmFtZT1cIkFuc3dlclN0eWxlRmllbGRzdHlsZUNTU1wiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLkFuc3dlclN0eWxlLkZpZWxkc3R5bGVDU1NcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5BbnN3ZXJTdHlsZS5GaWVsZHN0eWxlQ1NTKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRmllbGRzdHlsZUNTUycpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydBbnN3ZXJTdHlsZUZpZWxkc3R5bGVDU1MnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gRklFTEQgQ1NTIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFZJU0lCTEUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgYWxpZ24tc2VsZi1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiKGZpZWxkLkFuc3dlclN0eWxlLlZpc2libGVJZiAhPSBudWxsIHx8IGZpZWxkLkFuc3dlclN0eWxlLlZpc2libGVJZiAhPSB1bmRlZmluZWQpICYmIGZpZWxkLkFuc3dlclN0eWxlLlZpc2libGVJZiAhPSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3XCIgZm9ybUNvbnRyb2xOYW1lPVwiQW5zd2VyU3R5bGVJbkxpc3RWaWV3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFtkaXNhYmxlZF09XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snQW5zd2VyU3R5bGVJbkxpc3RWaWV3J10uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2liaWxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gVklTSUJMRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gSU5WSVNJQklMRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiBhbGlnbi1zZWxmLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBhbGlnbi1zZWxmLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXBvIGRpIGludmlzaWJpbGl0w6AgZGVsIGNhbXBvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJmaWVsZEludmlzaWJpbGl0eUVudW1cIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuQW5zd2VyU3R5bGUuSW52aXNpYmlsaXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidBbnN3ZXJTdHlsZUludmlzaWJpbGl0eSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIElOVklTSUJMRSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBWSVNJQkxFIElGIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmlzaWJsZUlmIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJBbnN3ZXJTdHlsZVZpc2libGVJZlwiIGZvcm1Db250cm9sTmFtZT1cIkFuc3dlclN0eWxlVmlzaWJsZUlmXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmXCIgKGNsaWNrKT1cIm9wZW5BbnN3ZXJTdHlsZVZpc2libGVJZkRpYWxvZygpXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnVmlzaWJsZUlmJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Fuc3dlclN0eWxlVmlzaWJsZUlmJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJWaXNpYmxlSWZcIiBmb3JtQ29udHJvbE5hbWU9XCJWaXNpYmxlSWZcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlZpc2libGVJZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiVmlzaWJsZUlmQXV0b2NvbXBsZXRlXCIgKGtleXVwKT1cInNldFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJzZXRWaXNpYmxlSWZBdXRvY29tcGxldGVPcHRpb25zKG51bGwpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5WaXNpYmxlSWYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI1Zpc2libGVJZkF1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdGlvbi5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gVklTSUJMRSBJRiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBTVElMRSBERUxMQSBSSVNQU09UQSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gU1BFQ0lGSUNIRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIlNwZWNpZmljaGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkVHlwZUZvcm1UZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBTUEVDSUZJQ0hFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBNT0RBTElUQScgUkVDVVBFUk8gREFUSSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIk1vZGFsaXTDoCByZWN1cGVybyBkYXRpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJkYXRhR2V0dGVyVHlwZUVudW1cIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25EYXRhR2V0dGVyVHlwZUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInRGF0YUdldHRlclR5cGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCIgW2hpZGRlbl09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlICE9IGRhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIGRpIERlZmF1bHQgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRGF0YUdldHRlclZhbHVlXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIiBbaGlkZGVuXT1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgIT0gZGF0YUdldHRlclR5cGVFbnVtLkZvcm11bGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBGb3JtdWxhIChKYXZhc2NyaXB0KSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJGb3JtdWxhXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5Gb3JtdWxhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRm9ybXVsYURpYWxvZygpXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5Gb3JtdWxhKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRm9ybXVsYScpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydGb3JtdWxhJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JibGlnYXRvcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRm9ybXVsYSddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBkYXRhR2V0dGVyVHlwZUVudW1bJ0RhIGRhdGFiYXNlJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG10LTQgY29uZmlndXJhUXVlcnlFZGl0b3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPkNvbmZpZ3VyYSBpbiBRdWVyeSBFZGl0b3I8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwib3BlbkRCR2V0dGVyKClcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID09IG51bGxcIj5Qcm9jZWRpPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJvcGVuREJHZXR0ZXIoKVwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbFwiPk1vZGlmaWNhPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlNlbGV6aW9uYSBjb2xvbm5hPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cImNvbHVtbktleXNcIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gZGF0YUdldHRlclR5cGVFbnVtWydEYSBtb2R1bG8gZGluYW1pY28nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtNFwiICpuZ0lmPVwiZm9ybXMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5Nb2R1bG88L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtwbGFjZWhvbGRlcl09XCInU2VsZXppb25hIG1vZHVsbydcIiBbYXJyYXlEYXRhXT1cImZvcm1zXCIgWyhuZ01vZGVsSW5wdXQpXT1cIkRNTW9kdWxlXCIgW2lzU2VhcmNoYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInQ29kZSdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidOYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidETU1vZHVsZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25DaGFuZ2VETU1vZHVsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbCAmJiBETU1vZHVsZSAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5DYW1wbzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW3BsYWNlaG9sZGVyXT1cIidTZWxlemlvbmEgY2FtcG8nXCIgW2FycmF5RGF0YV09XCJETUZpZWxkc1wiIFsobmdNb2RlbElucHV0KV09XCJETUZpZWxkXCIgW2lzU2VhcmNoYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCIna2V5J1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ2tleSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInRE1GaWVsZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25DaGFuZ2VETUZpZWxkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5DYXJkaW5hbGl0w6A8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJETUdldHRlckNhcmRpbmFsaXRpZXNcIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ2FyZGluYWxpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPkNvbnRlc3R1YWxpenphemlvbmU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiY29udGVzdHVhbGl6YXRpb25cIiBbYXJyYXlLZXlQcm9wZXJ0eV09XCInZW50aXR5VGFibGVOYW1lJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ2VudGl0eVRhYmxlTmFtZSdcIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29udGVzdHVhbGl6YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cInRydWVcIiAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uQ2hhbmdlRE1Db250ZXN0dWFsaXphdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIE1PREFMSVRBJyBSRUNVUEVSTyBEQVRJIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cclxuICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEFSRUEgVEFCUyAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBsaXN0VmFsdWVGaWVsZEZvcm1UZW1wbGF0ZSB2YWxsdWVzIC0tPlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBsaXN0VmFsdWVGaWVsZEZvcm1UZW1wbGF0ZSB2YWxsdWVzIC0tPlxyXG5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgIDxtYXQtY2FyZC1mb290ZXI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtdC0yIG1iLTEgbWUtM1wiPiBcclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnV0dG9uc0Zvcm1hXCI+IC0tPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIG1hdC1yYWlzZWQtYnV0dG9uIGNhbmNlbFwiIChjbGljayk9XCJzYXZlQW5kRXhpdEFkZEZpZWxkKGZhbHNlKVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgICAgICAgIEFubnVsbGFcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTIgc2F2ZVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzYXZlQW5kRXhpdEFkZEZpZWxkKHRydWUpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlU2F2ZUZpZWxkKClcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICBTYWx2YVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPCEtLSA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuPC9tYXQtY2FyZD5cclxuXHJcbjwhLS0gPC9kaXY+IC0tPlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBESSBURVNUTyAtLT5cclxuPG5nLXRlbXBsYXRlICN0ZXh0RmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8IS0tI3JlZ2lvbiBNQVNDSEVSQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTZcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPk1hc2NoZXJhPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cIlRleHRNYXNrRW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5UZXh0TWFza1wiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiXHJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInVGV4dE1hc2snXCI+XHJcbiAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBNQVNDSEVSQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBTUEVFQ0ggVE8gVEVYVCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCIgW2hpZGRlbl09XCJmaWVsZC5SZWFkb25seVwiPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiZmllbGQuTWljcm9waG9uZVwiIGZvcm1Db250cm9sTmFtZT1cIk1pY3JvcGhvbmVcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgU3BlZWNoLVRvLVRleHRcclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFNQRUVDSCBUTyBURVhUIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIExVTkdIRVpaQSBNSU5JTUEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02XCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNaW5MZW5naHQnXS5zdGF0dXMgIT0gJ1ZBTElEJyAmJiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluTGVuZ2h0J10udG91Y2hlZCB9XCI+XHJcbiAgICAgICAgICAgIEx1bmdoZXp6YSBtaW5pbWEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJsZW5ndGhNaW5cIiBmb3JtQ29udHJvbE5hbWU9XCJNaW5MZW5naHRcIiB0eXBlPVwibnVtYmVyXCIgW21pbl09XCIwXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuTWluTGVuZ2h0XCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5NaW5MZW5naHQpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdNaW5MZW5naHQnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluTGVuZ2h0J10uZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnNlcmlyZSB1biB2YWxvcmUgbnVtZXJpY28uXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluTGVuZ2h0J10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBMVU5HSEVaWkEgTUlOSU1BIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIExVTkdIRVpaQSBNQVNTSU1BIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndGV4dC1kYW5nZXInOiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWF4TGVuZ2h0J10uc3RhdHVzICE9ICdWQUxJRCcgJiYgZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heExlbmdodCddLnRvdWNoZWQgfVwiPlxyXG4gICAgICAgICAgICBMdW5naGV6emEgbWFzc2ltYSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImxlbmd0aE1heFwiIGZvcm1Db250cm9sTmFtZT1cIk1heExlbmdodFwiIHR5cGU9XCJudW1iZXJcIiBbbWluXT1cIjBcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5NYXhMZW5naHRcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLk1heExlbmdodClcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ01heExlbmdodCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhMZW5naHQnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhMZW5naHQnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIExVTkdIRVpaQSBNQVNTSU1BIC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgREkgVEVTVE8gLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgRVRJQ0hFVFRBIC0tPlxyXG48bmctdGVtcGxhdGUgI2xhYmVsRmllbGRGb3JtVGVtcGxhdGU+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gRVRJQ0hFVFRBIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT1cIkV0aWNoZXR0YVwiIHBsYWNlaG9sZGVyPVwiRXRpY2hldHRhXCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRXRpY2hldHRhXCIgWyhuZ01vZGVsKV09XCJmaWVsZC5FdGljaGV0dGFcIj48L3RleHRhcmVhPlxyXG5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBFVElDSEVUVEEgLS0+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgRVRJQ0hFVFRBIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIEFSRUEgREkgVEVTVE8gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjdGV4dGFyZWFGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDwhLS0jcmVnaW9uIFJJR0hFIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IFJpZ2hlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInJpZ2hlXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInJvd3NcIiBmb3JtQ29udHJvbE5hbWU9XCJSb3dzXCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwiMFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuUm93c1wiXHJcbiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLlJvd3MpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdSb3dzJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ1Jvd3MnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydSb3dzJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBSSUdIRSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBTcGVlY2hUb1RleHQgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTIgIGFsaWduLXNlbGYtY2VudGVyXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiIFtoaWRkZW5dPVwiZmllbGQuUmVhZG9ubHlcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLk1pY3JvcGhvbmVcIiBmb3JtQ29udHJvbE5hbWU9XCJNaWNyb3Bob25lXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgIFNwZWVjaC1Uby1UZXh0XHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBTcGVlY2hUb1RleHQgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gTFVOR0hFWlpBIE1JTklNQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBMdW5naGV6emEgbWluaW1hIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGlkPVwibGVuZ3RoTWluXCIgZm9ybUNvbnRyb2xOYW1lPVwiTWluTGVuZ2h0XCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwiMFwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLk1pbkxlbmdodFwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWluTGVuZ2h0KVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWluTGVuZ2h0JykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01pbkxlbmdodCddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01pbkxlbmdodCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gTFVOR0hFWlpBIE1JTklNQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBMVU5HSEVaWkEgTUFTU0lNQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBMdW5naGV6emEgbWFzc2ltYSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImxlbmd0aE1heFwiIGZvcm1Db250cm9sTmFtZT1cIk1heExlbmdodFwiIHR5cGU9XCJudW1iZXJcIiBbbWluXT1cIjBcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5NYXhMZW5naHRcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLk1heExlbmdodClcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ01heExlbmdodCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhMZW5naHQnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhMZW5naHQnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIExVTkdIRVpaQSBNQVNTSU1BIC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgQVJFQSBESSBURVNUTyAtLT5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBCT09MRUFOSSAtLT5cclxuPG5nLXRlbXBsYXRlICNib29sZWFkRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8IS0tI3JlZ2lvbiBBIFRSRSBTVEFUSSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Jc1RyaXN0YXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiSXNUcmlzdGF0ZVwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICBBIHRyZSBzdGF0aVxyXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gQSBUUkUgU1RBVEkgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gVElQTyBQUkVTRU5UQVpJT05FIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5UaXBvIGRpIHByZXNlbnRhemlvbmUgKjwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJCb29sUHJlc2VudGFudGlvRW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5QcmVzZXRhdGlvblR5cGVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInUHJlc2V0YXRpb25UeXBlJ1wiPlxyXG4gICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gVElQTyBQUkVTRU5UQVpJT05FIC0tPlxyXG5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIEJPT0xFQU5JIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIERBVEEgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGF0ZUZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPCEtLSNyZWdpb24gVElQTyBESSBEQVRBIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5UaXBvIGRpIGRhdGE8L21hdC1sYWJlbD5cclxuICAgICAgICA8ZXFwLXNlbGVjdCBbZW51bURhdGFdPVwiRGF0ZVRpbWVUeXBlRW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5Jc09ubHlEYXRlXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0lzT25seURhdGUnXCI+XHJcbiAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBUSVBPIERJIERBVEEgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gRk9STUFUTyAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBGb3JtYXRvIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIkRhdGVGb3JtYXRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLkRhdGVGb3JtYXRcIlxyXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ0luZGljYXJlIGlsIGZvcm1hdG8gc2VndWVuZG8gbGEgZ3VpZGEgZGVsIHBhY2NoZXR0byBtb21lbnRqcy4nXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5Gb3JtYXRvKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRm9ybWF0bycpIH19IC0tPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBGT1JNQVRPIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIERBVEEgTUlOSU1BIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gRGF0YSBtaW5pbWEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlciAqbmdJZj1cImZpZWxkLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnU29sbyBkYXRhJ11cIiBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuTWluRGF0ZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInTWluRGF0ZSdcIlxyXG4gICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlLkRBVEVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgKm5nSWY9XCJmaWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ0RhdGEgZSBvcmEnXVwiIGNsYXNzPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5NaW5EYXRlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidNaW5EYXRlJ1wiXHJcbiAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGUuREFURVRJTUVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZIEhIOm1tJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgKm5nSWY9XCJmaWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ1NvbG8gb3JhcmlvJ11cIiBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuTWluRGF0ZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInTWluRGF0ZSdcIlxyXG4gICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlLlRJTUVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidISDptbSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gREFUQSBNSU5JTUEgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gREFUQSBNQVNTSU1BIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gRGF0YSBtYXNzaW1hIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgKm5nSWY9XCJmaWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ1NvbG8gZGF0YSddXCIgY2xhc3M9XCJkYXRlXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLk1heERhdGVcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ01heERhdGUnXCJcclxuICAgICAgICAgICAgW3BpY2tlck1vZGVdPVwibW9kZS5EQVRFUElDS0VSXCIgW291dHB1dEZvcm1hdF09XCInREQvTU0vWVlZWSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyICpuZ0lmPVwiZmllbGQuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydEYXRhIGUgb3JhJ11cIiBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuTWF4RGF0ZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInTWF4RGF0ZSdcIlxyXG4gICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlLkRBVEVUSU1FUElDS0VSXCIgW291dHB1dEZvcm1hdF09XCInREQvTU0vWVlZWSBISDptbSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyICpuZ0lmPVwiZmllbGQuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydTb2xvIG9yYXJpbyddXCIgY2xhc3M9XCJkYXRlXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLk1heERhdGVcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ01heERhdGUnXCJcclxuICAgICAgICAgICAgW3BpY2tlck1vZGVdPVwibW9kZS5USU1FUElDS0VSXCIgW291dHB1dEZvcm1hdF09XCInSEg6bW0nXCIgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCI+XHJcbiAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIERBVEEgTUFTU0lNQSAtLT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIERBVEEgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgTlVNRVJJQ0kgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjbnVtZXJpY0ZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPCEtLSNyZWdpb24gVkFMT1JFIElOVEVSTyAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Jc0ludGVnZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJJc0ludGVnZXJcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgVmFsb3JlIGludGVyb1xyXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gVkFMT1JFIElOVEVSTyAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBTRVBBUkFUT1JFIERFQ0lNQUxJIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIiFmaWVsZC5Jc0ludGVnZXJcIiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IFNlcGFyYXRvcmUgZGVjaW1hbGkgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRGVjaW1hbFNlcGFyYXRvclwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRGVjaW1hbFNlcGFyYXRvclwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkRlY2ltYWxTZXBhcmF0b3IpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdEZWNpbWFsU2VwYXJhdG9yJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0RlY2ltYWxTZXBhcmF0b3InXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5vbiDDqCBwb3NzaWJpbGUgaW5zZXJpcmUgZGVpIG51bWVyaS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydEZWNpbWFsU2VwYXJhdG9yJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBTRVBBUkFUT1JFIERFQ0lNQUxJIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFBSRUNJU0lPTkUgREVDSU1BTEkgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWZpZWxkLklzSW50ZWdlclwiIGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gUHJlY2lzaW9uZSBkZWNpbWFsaSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJEZWNpbWFsUHJlY2lzaW9uXCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwiMFwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLkRlY2ltYWxQcmVjaXNpb25cIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkRlY2ltYWxQcmVjaXNpb24pXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdEZWNpbWFsUHJlY2lzaW9uJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0RlY2ltYWxQcmVjaXNpb24nXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydEZWNpbWFsUHJlY2lzaW9uJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBQUkVDSVNJT05FIERFQ0lNQUxJIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFNFUEFSQVRPUkUgTUlHTElBSUEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gU2VwYXJhdG9yZSBtaWdsaWFpYSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJUaG91c2FuZHNTZXBhcmF0b3JcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlRob3VzYW5kc1NlcGFyYXRvclwiXHJcbiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLlRob3VzYW5kc1NlcGFyYXRvcilcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ1Rob3VzYW5kc1NlcGFyYXRvcicpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydUaG91c2FuZHNTZXBhcmF0b3InXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5vbiDDqCBwb3NzaWJpbGUgaW5zZXJpcmUgZGVpIG51bWVyaS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydUaG91c2FuZHNTZXBhcmF0b3InXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFNFUEFSQVRPUkUgTUlHTElBSUEgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gU0lNQk9MTyBWQUxVVEEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgIG1hdFRvb2x0aXA9XCJTaW1ib2xvIHByaW1hIGRlbCB2YWxvcmVcIlxyXG4gICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImV4YW1wbGUtdG9vbHRpcC11cHBlcmNhc2VcIlxyXG4gICAgICAgID4gU2ltYm9sbyB2YWx1dGEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiQ3VycmVuY3lTeW1ib2xcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLkN1cnJlbmN5U3ltYm9sXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuQ3VycmVuY3lTeW1ib2wpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdDdXJyZW5jeVN5bWJvbCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydDdXJyZW5jeVN5bWJvbCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gU0lNQk9MTyBWQUxVVEEgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gVU5JVEEgREkgTUlTVVJBIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICBtYXRUb29sdGlwPVwiU2ltYm9sbyBkb3BvIGlsIHZhbG9yZVwiXHJcbiAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiZXhhbXBsZS10b29sdGlwLXVwcGVyY2FzZVwiXHJcbiAgICAgICAgPiBVbml0w6AgZGkgbWlzdXJhIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIk1lYXN1cmVVbml0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5NZWFzdXJlVW5pdFwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLk1lYXN1cmVVbml0KVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWVhc3VyZVVuaXQnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWVhc3VyZVVuaXQnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFVOSVRBIERJIE1JU1VSQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBWQUxPUkUgTUlOSU1PIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IFZhbG9yZSBtaW5pbW8gPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiTWluVmFsdWVcIiB0eXBlPVwibnVtYmVyXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5NaW5WYWx1ZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWluVmFsdWUpXCJcclxuICAgICAgICAgICAgICAgIHBhdHRlcm49XCJeLT9bMC05XSsoLFswLTldK3xcXC5bMC05XSspPyRcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ01pblZhbHVlJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01pblZhbHVlJ10uZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnNlcmlyZSB1biB2YWxvcmUgbnVtZXJpY28uXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluVmFsdWUnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFZBTE9SRSBNSU5JTU8gLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gVkFMT1JFIE1BU1NJTU8gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIG1hc3NpbW8gPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiTWF4VmFsdWVcIiB0eXBlPVwibnVtYmVyXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5NYXhWYWx1ZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWF4VmFsdWUpXCJcclxuICAgICAgICAgICAgICAgIHBhdHRlcm49XCJeLT9bMC05XSsoLFswLTldK3xcXC5bMC05XSspPyRcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ01heFZhbHVlJykgfX0gIC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhWYWx1ZSddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heFZhbHVlJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBWQUxPUkUgTUFTU0lNTyAtLT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIE5VTUVSSUNJIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIEFMTEVHQVRPIC0tPlxyXG48bmctdGVtcGxhdGUgI2F0dGFjaG1lbnRGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDwhLS0jcmVnaW9uIEFMTEVHQVRJIE1VTFRJUExJIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLklzTXVsdGlBdHRhY2hcIiBmb3JtQ29udHJvbE5hbWU9XCJJc011bHRpQXR0YWNoXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgIEFsbGVnYXRpIG11bHRpcGxpXHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBBTExFR0FUSSBNVUxUSVBMSSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBFU1RFTlNJT05JIEFDQ0VUVEFURSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+RXN0ZW5zaW9uaSBhY2NldHRhdGU8L21hdC1sYWJlbD5cclxuICAgICAgICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cIkF2YWlsYWJsZUZpbGVFeHRlbnNpb25zLmNvbmNhdChBdmFpbGFibGVJbWFnZUV4dGVuc2lvbnMpXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkFsbG93ZWRFeHRlbnNpb25zXCIgW2FycmF5S2V5UHJvcGVydHldPVwiJ2tleSdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIid2YWx1ZSdcIlxyXG4gICAgICAgICAgICBbaXNNdWx0aVNlbGVjdF09XCJ0cnVlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidBbGxvd2VkRXh0ZW5zaW9ucydcIj5cclxuICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIEVTVEVOU0lPTkkgQUNDRVRUQVRFIC0tPlxyXG5cclxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBtdC0yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGUtc3RhbmRhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICBFbGVuY28gbWV0YWRhdGFcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiB0ZXh0LXJpZ2h0IGJ1dHRvbnNGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHNhdmVcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk1ldGFkYXRhRGlhbG9nKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4O1wiPkFnZ2l1bmdpIGFsbGVnYXRvPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxlcXAtdGFibGUgI21ldGFkYXRhRmllbGRzVGFibGUgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIiBbY29sdW1uc109XCJtZXRhZGF0YUNvbHVtbnNcIlxyXG4gICAgICAgICAgICBbZGF0YV09XCJmaWVsZC5NZXRhZGF0YUZpZWxkc1wiIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuIG1ldGFkYXRhIGluc2VyaXRvJ1wiIFtzZWFyY2hUZXh0XT1cIidDZXJjYSdcIj5cclxuICAgICAgICA8L2VxcC10YWJsZT5cclxuICAgIDwvZGl2PiAtLT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIEFMTEVHQVRPIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIExJU1RBIERJIFZBTE9SSSAtLT5cclxuPG5nLXRlbXBsYXRlICNsaXN0VmFsdWVGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDwhLS0jcmVnaW9uIFNDRUxUQSBNVUxUSVBMQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Jc011bHRpQ2hvaWNoZVwiIGZvcm1Db250cm9sTmFtZT1cIklzTXVsdGlDaG9pY2hlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgIFNjZWx0YSBtdWx0aXBsYVxyXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gU0NFTFRBIE1VTFRJUExBIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFRJUE8gREkgUFJFU0VOVEFaSU9ORSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+VGlwbyBkaSBwcmVzZW50YXppb25lKjwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJMaXN0UHJlc2VudGF0aW9uRW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5QcmVzZW50YXRpb25Nb2RlXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ1ByZXNlbnRhdGlvbk1vZGUnXCJcclxuICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvblByZXNlbnRhdGlvbk1vZGVDaGFuZ2UoKVwiPlxyXG4gICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gVElQTyBESSBQUkVTRU5UQVpJT05FIC0tPlxyXG5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBHRVNUSU9ORSBPUFpJT05JIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBtdC0yXCI+XHJcblxyXG4gICAgICAgIDxtYXQtbGFiZWw+IGFyZWEgZGVpIHZhbG9yaSBkYSBpbnNlcmlyZSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwia2V5MXx2YWx1ZTE7a2V5Mnx2YWx1ZTJcIiBcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuVmFsdWVTdHJpbmdcIlxyXG4gICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCIgXHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L3RleHRhcmVhPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImNvdW50VmFsdWVQYWlycyhmaWVsZC5WYWx1ZVBhaXJzKSA+IDBcIj5cclxuICAgICAgICAgICAgPGg0IGNsYXNzPVwia2V5LXZhbHVlLWxpc3Qtc2VjdGlvbi10aXRsZVwiPiA8L2g0PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+IExhYmVsIG9wemlvbmUgKGludmlvIHBlciBjb25mZXJtYXJlKTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImtleVZhbHVlT2JqZWN0LmtleVwiIChrZXl1cCk9XCJvbk11bHRpU2VsZWN0SW5wdXRLZXl1cCgkZXZlbnQsIG51bGwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBWYWxvcmUgb3B6aW9uZSAoaW52aW8gcGVyIGNvbmZlcm1hcmUpPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwia2V5VmFsdWVPYmplY3QudmFsdWVcIiAoa2V5dXApPVwib25NdWx0aVNlbGVjdElucHV0S2V5dXAoJGV2ZW50LCBudWxsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCAgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItM1wiPk9wemlvbmkgaW5zZXJpdGU6PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwidmFsdWUtcGFpcnMtbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQga2V5VmFsdWVQYWlyIG9mIGdldERpY3Rpb25hcnlLZXlWYWx1ZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1yLTFcIiAoY2xpY2spPVwiZGVsZXRlS2V5RnJvbURpY3Rpb25hcnkoa2V5VmFsdWVQYWlyLmtleSlcIj5jbG9zZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48Yj5MYWJlbDogPC9iPiB7e2tleVZhbHVlUGFpci5rZXl9fSAtIDxiPlZhbG9yZTogPC9iPiB7e2tleVZhbHVlUGFpci52YWx1ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4gXHJcblxyXG4gICAgPC9kaXY+ICAgIFxyXG4gICAgPCEtLSNlbmRyZWdpb24gR0VTVElPTkUgT1BaSU9OSSAtLT5cclxuXHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBMSVNUQSBESSBWQUxPUkkgLS0+XHJcblxyXG5cclxuXHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIExJU1RBIElNTUFHSU5JIC0tPlxyXG48bmctdGVtcGxhdGUgI2ltYWdlRmllbGRTZWxlY3RvckZvcm1UZW1wbGF0ZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIGNvbC14cy0xMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD4gQWx0ZXp6YSBpbiBQaXhlbCBkZWxsZSBpbW1hZ2luaSBzY2FsYXRlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiUmVzaXplZEltYWdlc0hlaWdodFB4XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5SZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiByZXF1aXJlZCBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChjaGFuZ2UpPVwic2V0UmVzaXplZEltYWdlc0hlaWdodFB4KClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ1Jlc2l6ZWRJbWFnZXNIZWlnaHRQeCcpIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBjb2wteHMtMTIgY29sLW1pZGRsZVwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Jc011bHRpQ2hvaWNoZVwiIGZvcm1Db250cm9sTmFtZT1cIklzTXVsdGlDaG9pY2hlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICBTY2VsdGEgbXVsdGlwbGFcclxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZXFwLWF0dGFjaG1lbnRzICNpbWFnZVNlbGVjdG9yQXR0YWNobWVudHMgW2F0dGFjaG1lbnRzTGlzdF09XCJmaWVsZC5BdHRhY2htZW50TGlzdFwiIFtzaG93TWF0Q2FyZF09XCJmYWxzZVwiIFthbGxvd09ubHlJbWFnZXNdPVwidHJ1ZVwiXHJcbiAgICBbaXNEaXNhYmxlZF09XCJmYWxzZVwiIFtzaG93SW5saW5lUHJldmlld109XCJ0cnVlXCIgW211bHRpcGxlQXR0YWNobWVudF09XCJ0cnVlXCIgW3Nob3dIZWFkZXJdPVwiZmFsc2VcIlxyXG4gICAgW2FsbG93ZWRUeXBlc109XCJbQXR0YWNobWVudFR5cGUuRklMRV1cIiAobG9jYWxFZGl0ZWRBdHRhY2htZW50cyk9XCJjYXRjaEJ1dHRvbkltYWdlc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgIFthdHRhY2htZW50c0NvbHVtbnNdPVwiY29uZmlnQ29sdW1uTGlzdEltYWdlc1wiPlxyXG4gICAgPC9lcXAtYXR0YWNobWVudHM+XHJcblxyXG4gIFxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIExJU1RBIElNTUFHSU5JIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIElNTUFHSU5FIC0tPlxyXG48bmctdGVtcGxhdGUgI2ltYWdlRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5FbmFibGVEcmF3aW5nXCIgZm9ybUNvbnRyb2xOYW1lPVwiRW5hYmxlRHJhd2luZ1wiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgSW1tYWdpbmUgZGlzZWduYWJpbGU/XHJcbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICA8L2Rpdj4gICBcclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wteHMtMTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEFsdGV6emEgaW4gUGl4ZWwgZGVsbGUgaW1tYWdpbmkgc2NhbGF0ZSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuUmVzaXplZEltYWdlc0hlaWdodFB4XCIgcmVxdWlyZWQgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAoY2hhbmdlKT1cInNldFJlc2l6ZWRJbWFnZXNIZWlnaHRQeCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdSZXNpemVkSW1hZ2VzSGVpZ2h0UHgnKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+ICBcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLXhzLTEyXCIgKm5nSWY9XCJmaWVsZC5EeW5BdHRhY2htZW50ICE9IG51bGxcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD4gRXRpY2hldHRhIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EeW5BdHRhY2htZW50LkJ1dHRvbktleVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+ICBcclxuICAgICAgICA8L2Rpdj4gICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wteHMtMTJcIiAqbmdJZj1cImZpZWxkLkR5bkF0dGFjaG1lbnQgIT0gbnVsbFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPiBWYWxvcmUgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLkR5bkF0dGFjaG1lbnQuQnV0dG9uVmFsdWVcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgXHJcbiAgICA8L2Rpdj4gICAgXHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtOCBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxlcXAtYXR0YWNobWVudHMgW2F0dGFjaG1lbnRzTGlzdF09XCJbZmllbGQuRHluQXR0YWNobWVudF1cIiBbc2hvd01hdENhcmRdPVwiZmFsc2VcIiBbYWxsb3dPbmx5SW1hZ2VzXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbaXNEaXNhYmxlZF09XCJmYWxzZVwiIFtzaG93SW5saW5lUHJldmlld109XCJ0cnVlXCIgW211bHRpcGxlQXR0YWNobWVudF09XCJmYWxzZVwiIFtzaG93SGVhZGVyXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgW2FsbG93ZWRUeXBlc109XCJbQXR0YWNobWVudFR5cGUuRklMRV1cIlxyXG4gICAgICAgICAgICAobG9jYWxFZGl0ZWRBdHRhY2htZW50cyk9XCJjYXRjaEJ1dHRvbkltYWdlQ2hhbmdlKCRldmVudClcIiAob25EZWxldGVBdHRhY2htZW50KT1cImRlbGV0ZUltYWdlKCRldmVudClcIiAjaW1hZ2VBdHRhY2htZW50PlxyXG4gICAgICAgIDwvZXFwLWF0dGFjaG1lbnRzPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVhZG9ubHlQcm9maWxlSW1hZ2U+XHJcbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJmaWVsZC5EeW5BdHRhY2htZW50XCJcclxuICAgICAgICAgICAgICBzcmM9XCJkYXRhOnt7ZmllbGQuRHluQXR0YWNobWVudC5GaWxlQ29udGVudFR5cGV9fTtiYXNlNjQse3tmaWVsZC5EeW5BdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0fX1cIlxyXG4gICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT4gICAgICAgIFxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBJTU1BR0lORSAtLT5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBJTU1BR0lORSBDT04gTUFSS0VSUyAtLT5cclxuPG5nLXRlbXBsYXRlICNpbWFnZVdpdGhNYXJrZXJzRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC14cy0xMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD4gQWx0ZXp6YSBpbiBQaXhlbCBkZWxsZSBpbW1hZ2luaSBzY2FsYXRlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiUmVzaXplZEltYWdlc0hlaWdodFB4XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5SZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiByZXF1aXJlZCBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChjaGFuZ2UpPVwic2V0UmVzaXplZEltYWdlc0hlaWdodFB4KClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ1Jlc2l6ZWRJbWFnZXNIZWlnaHRQeCcpIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wteHMtMTJcIiAqbmdJZj1cImZpZWxkLkR5bkF0dGFjaG1lbnQgIT0gbnVsbFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPiBFdGljaGV0dGEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLkR5bkF0dGFjaG1lbnQuQnV0dG9uS2V5XCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC14cy0xMlwiICpuZ0lmPVwiZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IFZhbG9yZSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRHluQXR0YWNobWVudC5CdXR0b25WYWx1ZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+ICBcclxuICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICBcclxuICAgIDwvZGl2PiAgICBcclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC04IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPGVxcC1hdHRhY2htZW50cyBbYXR0YWNobWVudHNMaXN0XT1cIltmaWVsZC5EeW5BdHRhY2htZW50XVwiIFtzaG93TWF0Q2FyZF09XCJmYWxzZVwiIFthbGxvd09ubHlJbWFnZXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtpc0Rpc2FibGVkXT1cImZhbHNlXCIgW3Nob3dJbmxpbmVQcmV2aWV3XT1cInRydWVcIiBbbXVsdGlwbGVBdHRhY2htZW50XT1cImZhbHNlXCIgW3Nob3dIZWFkZXJdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbYWxsb3dlZFR5cGVzXT1cIltBdHRhY2htZW50VHlwZS5GSUxFXVwiXHJcbiAgICAgICAgICAgIChsb2NhbEVkaXRlZEF0dGFjaG1lbnRzKT1cImNhdGNoQnV0dG9uSW1hZ2VXaXRoTWFya2Vyc0NoYW5nZSgkZXZlbnQpXCIgKG9uRGVsZXRlQXR0YWNobWVudCk9XCJkZWxldGVJbWFnZSgkZXZlbnQpXCIgI2ltYWdlQXR0YWNobWVudD5cclxuICAgICAgICA8L2VxcC1hdHRhY2htZW50cz5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3JlYWRvbmx5UHJvZmlsZUltYWdlPlxyXG4gICAgICAgICAgICA8aW1nICpuZ0lmPVwiZmllbGQuRHluQXR0YWNobWVudFwiXHJcbiAgICAgICAgICAgICAgc3JjPVwiZGF0YTp7e2ZpZWxkLkR5bkF0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlfX07YmFzZTY0LHt7ZmllbGQuRHluQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NH19XCJcclxuICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+ICAgICAgICBcclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgSU1NQUdJTkUgQ09OIE1BUktFUlMgLS0+XHJcblxyXG5cclxuXHJcblxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIExPT0tVUCAtLT5cclxuPG5nLXRlbXBsYXRlICNsb29rdXBGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Vc2VBc0dldE9yRGlzY2FyZFwiIGZvcm1Db250cm9sTmFtZT1cIlVzZUFzR2V0T3JEaXNjYXJkXCIgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlNlIHRydWUgbGEgbG9va3VwIHZpZW5lIHZpc3VhbGl6emF0YSBpbiB1bmEgbW9kYWxlIHBlciBsbyBzY2VnbGkgc2NhcnRhXCI+XHJcbiAgICAgICAgICAgIFVzYSBwZXIgc2NlZ2xpIG8gc2NhcnRhXHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gTm9tZSBlbnRpdMOgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBtYXRUb29sdGlwPVwiTm9tZSBkZWxsJ2VudGl0w6AgcmVsYXppb25hdGFcIj5cclxuICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIkVudGl0eVNvdXJjZU5hbWVcIiByZXF1aXJlZCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLkVudGl0eVNvdXJjZU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5FbnRpdHlTb3VyY2VOYW1lKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ0VudGl0eVNvdXJjZU5hbWUnKSB9fVxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIG10LTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gTm9taSBkZWkgY2FtcGkgKGludmlvIHBlciBjb25mZXJtYXJlKSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJFbGVuY28gZGkgY2FtcGkgb3JkaW5hdG8gY2hlIHZlcnLDoCB2aXN1YWxpenphdG8gbmVsbGEgbG9va3VwIChwcmVtZXJlIGludmlvIHBlciBjb25mZXJtYXJlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAoa2V5dXApPVwib25NdWx0aVNlbGVjdElucHV0S2V5dXAoJGV2ZW50LCAnRmllbGROYW1lcycpXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04ICBhbGlnbi1zZWxmLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci0zXCI+Tm9taSBzZWxlemlvbmF0aTo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXh0ZW5zaW9uLWNvbnRhaW5lclwiICpuZ0Zvcj1cImxldCBleHRlbnNpb24gb2YgZmllbGQuRmllbGROYW1lczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ZXh0ZW5zaW9ufX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWwtMVwiIChjbGljayk9XCJmaWVsZC5GaWVsZE5hbWVzLnNwbGljZShpLDEpXCI+Y2xvc2VcclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBMT09LVVAgLS0+XHJcblxyXG48IS0tIERJQUxPRyBQRVIgQUdHSVVOR0VSRSBVTiBNRVRBREFUQSBORUkgQ0FNUEkgREkgVElQTyBBTExFR0FUTyBPIElNTUFHSU5FIC0tPlxyXG48IS0tIDxuZy10ZW1wbGF0ZSAjZGlhbG9nTWV0YWRhdGE+XHJcbiAgICA8ZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtLWZpZWxkIFtmaWVsZF09XCJzZWxlY3RlZE1ldGFkYXRhXCIgW2F2YWlsYWJsZUZpZWxkc109XCJhdmFpbGFibGVGaWVsZHNcIlxyXG4gICAgICAgIFtpbmRleEZpZWxkXT1cImluZGV4U2VsZWN0ZWRNZXRhZGF0YVwiIChzYXZlRmllbGRFdmVudCk9XCJvblNhdmVNZXRhZGF0YSgkZXZlbnQpXCIgW2ZpZWxkVHlwZXNUb0V4Y2x1ZGVdPVwiWzYsNywxMF1cIj5cclxuICAgIDwvZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtLWZpZWxkPlxyXG48L25nLXRlbXBsYXRlPiAtLT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnV0dG9uSW1hZ2VzS2V5VmFsdWVJbnB1dENvbHVtbiBsZXQtcm93PVwicm93XCIgbGV0LWNvbD1cImNvbFwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IHt7Y29sLmRpc3BsYXl9fSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJyb3dbY29sLmtleV1cIiByZXF1aXJlZCBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS1ESUFMT0cgUEVSIFNFTVBMSUZJQ0FSRSBMQSBTQ1JJVFRVUkEgREVMIENBTVBPIEZPUk1VTEEtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dGb3JtdWxhPlxyXG4gICAgPGVxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybXVsYS1jb21wb25lbnQ+XHJcbiAgICA8L2VxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybXVsYS1jb21wb25lbnQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI0dlbmVyaWNMaXN0SW1hZ2VzSW1hZ2VUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LWNvbD1cImNvbFwiPlxyXG4gICAgPGltZyBzcmM9XCJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCB7e3Jvd1tjb2wua2V5XX19XCIgY2xhc3M9XCJHZW5lcmljTGlzdEltYWdlc0ltYWdlVGVtcGxhdGVcIj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjR2VuZXJpY0xpc3RJbWFnZXNLZXlUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LWNvbD1cImNvbFwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IENoaWF2ZSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJyb3dbY29sLmtleV1cIj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI0dlbmVyaWNMaXN0SW1hZ2VzVmFsdWVUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LWNvbD1cImNvbFwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IFZhbG9yZSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJyb3dbY29sLmtleV1cIj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBRVUVSWSBFRElUT1IgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nUUU+XHJcbiAgICA8bmctdGVtcGxhdGUgW2FwcER5bmFtaWNMb2FkZXJdIFtkYXRhXT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCIgKG91dCk9XCJvbkV4dGVybmFsQ29tcG9uZW50T3V0KCRldmVudCk7XCI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L25nLXRlbXBsYXRlPlxyXG4gICJdfQ==
|
|
1264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZvcm0tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2FkZC1mb3JtLWZpZWxkL2FkZC1mb3JtLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9hZGQtZm9ybS1maWVsZC9hZGQtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUwsa0JBQWtCLEVBSWxCLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFDTCxjQUFjLEdBSWYsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQWdCLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDckIsYUFBYSxFQUNkLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUVMLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FDekIsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLEVBRUwsb0JBQW9CLEdBQ3JCLE1BQU0sMkNBQTJDLENBQUM7QUFDbkQsT0FBTyxFQUVMLGdCQUFnQixHQUNqQixNQUFNLHdDQUF3QyxDQUFDO0FBRWhELE9BQU8sRUFDTCxvQkFBb0IsR0FFckIsTUFBTSw2Q0FBNkMsQ0FBQztBQUlyRCxPQUFPLEVBQ0wsWUFBWSxHQUViLE1BQU0sd0NBQXdDLENBQUM7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QUExRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSzVDLCtCQUErQjtzQkFEOUIsU0FBUzt1QkFBQyxpQ0FBaUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBb0JDLDhCQUE4QjtzQkFBNUYsU0FBUzt1QkFBQyxnQ0FBZ0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0EsNEJBQTRCO3NCQUF4RixTQUFTO3VCQUFDLDhCQUE4QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSSw4QkFBOEI7c0JBQTVGLFNBQVM7dUJBQUMsZ0NBQWdDLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNILHdCQUF3QjtzQkFBakYsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ1AsZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBTU4sUUFBUTtzQkFBaEQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIEZvcm1Db250cm9sLFxyXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcclxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1Hcm91cCxcclxuICBWYWxpZGF0aW9uRXJyb3JzLFxyXG4gIFZhbGlkYXRvckZuLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQge1xyXG4gIEF0dGFjaG1lbnRUeXBlLFxyXG4gIEVxcEF0dGFjaG1lbnREaWFsb2dTZXJ2aWNlLFxyXG4gIEVxcEF0dGFjaG1lbnRzQ29tcG9uZW50LFxyXG4gIElBdHRhY2htZW50RFRPLFxyXG59IGZyb20gXCJAZXFwcm9qZWN0L2VxcC1hdHRhY2htZW50c1wiO1xyXG5pbXBvcnQgeyBFbnVtSGVscGVyIH0gZnJvbSBcIkBlcXByb2plY3QvZXFwLXNlbGVjdFwiO1xyXG5pbXBvcnQgeyBDb25maWdDb2x1bW4sIFR5cGVDb2x1bW4gfSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtdGFibGVcIjtcclxuaW1wb3J0IHtcclxuICBCYXNlRmllbGQsXHJcbiAgQ29sU3BhblNpemVzRW51bSxcclxuICBEYXRhR2V0dGVyQ2FyZGluYWxpdHlFbnVtLFxyXG4gIEZpZWxkSW52aXNpYmlsaXR5RW51bSxcclxuICBGaWVsZFR5cGVFbnVtXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBBdHRhY2htZW50RmllbGQsXHJcbiAgQXZhaWxhYmxlRmlsZUV4dGVuc2lvbnMsXHJcbiAgQXZhaWxhYmxlSW1hZ2VFeHRlbnNpb25zLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2F0dGFjaG1lbnRGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEJvb2xlYW5GaWVsZCxcclxuICBCb29sUHJlc2VudGFudGlvRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9ib29sZWFuRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBEYXRlRmllbGQsXHJcbiAgRGF0ZVRpbWVUeXBlRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9kYXRlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgSW1hZ2VGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2ltYWdlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBMaXN0UHJlc2VudGF0aW9uRW51bSxcclxuICBMaXN0VmFsdWVGaWVsZCxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBMb29rdXBGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xvb2t1cEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL251bWVyaWNGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBUZXh0YXJlYUZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvdGV4dGFyZWFGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIFRleHRNYXNrRW51bSxcclxuICBUZXh0RmllbGQsXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvdGV4dEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZvcm1GaWVsZEdyb3VwLCBGb3JtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgSW1hZ2VTZWxlY3RvckZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvaW1hZ2VTZWxlY3RvckZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2VxcC1keW5hbWljLW1vZHVsZS1kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMYWJlbEZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvbGFiZWxGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJbWFnZVdpdGhNYXJrZXJzRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVdpdGhNYXJrZXJzRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgQXR0YWNobWVudEZpZWxkVHlwZUVudW0sIER5bkF0dGFjaG1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bkF0dGFjaG1lbnRcIjtcclxuaW1wb3J0IHsgRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGEsIGV2ZW50T3V0IH0gZnJvbSBcIi4uLy4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy1sb2FkZXIvZHluYW1pYy1sb2FkZXIuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgRGF0YUdldHRlclR5cGVFbnVtLCBEYXRhR2V0dGVyIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IFF1ZXJ5RWRpdG9yTW9kZUVudW0gfSBmcm9tIFwiLi4vZGJnZXR0ZXIvZGJnZXR0ZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IE1vZGVFbnVtLCBUaW1lVHlwZUVudW0gfSBmcm9tIFwidG13LXBpY2tlclwiO1xyXG5pbXBvcnQgeyBFbmRQb2ludENvbmZpZ3VyYXRpb24sIEVuZFBvaW50RGF0YVBhcmFtcywgUGFyYW1UeXBlRW51bSB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IENvbnRlc3R1YWxpemF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9nZXR0ZXIubW9kZWxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImVxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybS1maWVsZFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vYWRkLWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vYWRkLWZvcm0tZmllbGQuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRGb3JtRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIFxyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm07XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgZmllbGQ6IEJhc2VGaWVsZCB8IGFueTtcclxuICBASW5wdXQoKSBpbmRleEZpZWxkOiBudW1iZXI7XHJcbiAgQElucHV0KCkgZm9ybUZpZWxkc0dyb3VwczogQXJyYXk8Rm9ybUZpZWxkR3JvdXA+O1xyXG4gIC8qKiBFbGVuY28gZGVpIEZpZWxkIGNyZWF0aSBuZWxsYSBmb3JtLCB1c2F0aSBwZXIgcG9wb2xhcmUgbCdhdXRvY29tcGxldGUgZGVsbGEgcHJvcHJpZXTDoCBGb3JtdWxhLiAqL1xyXG4gIEBJbnB1dCgpIGF2YWlsYWJsZUZpZWxkczogQXJyYXk8QmFzZUZpZWxkPjtcclxuICBASW5wdXQoKSBmaWVsZFR5cGVzVG9FeGNsdWRlOiBBcnJheTxGaWVsZFR5cGVFbnVtPiA9IFtGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl1dO1xyXG4gIEBJbnB1dCgpIFF1ZXJ5RWRpdG9yQ29tcG9uZW50OiBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YTsgLy8gTCdpbnRlcm8gY29tcG9uZW50ZSBxdWVyeSBFZGl0b3JcclxuICBASW5wdXQoKSBjb250ZXN0dWFsaXphdGlvbjogQXJyYXk8Q29udGVzdHVhbGl6YXRpb24+ID0gbnVsbDtcclxuXHJcbiAgQE91dHB1dCgpIG91dDogRXZlbnRFbWl0dGVyPGV2ZW50T3V0PiA9IG5ldyBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+KCk7XHJcbiAgQE91dHB1dCgpIHNhdmVGaWVsZEV2ZW50OiBFdmVudEVtaXR0ZXI8QmFzZUZpZWxkIHwgYW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8QmFzZUZpZWxkIHwgYW55PigpO1xyXG5cclxuICByZXNpemVkSW1hZ2VzSGVpZ2h0UHg6IG51bWJlcjtcclxuICBmaWVsZEZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcclxuICBrZXlWYWx1ZU9iamVjdDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9ID0geyBrZXk6IFwiXCIsIHZhbHVlOiBcIlwiIH07XHJcbiAgYXZhaWxhYmxlQ29sU3BhblNpemVzQ29tcGlsYXppb25lOiBBcnJheTxDb2xTcGFuU2l6ZXNFbnVtPiA9IFtdO1xyXG4gIGF2YWlsYWJsZUNvbFNwYW5TaXplc1Jpc3Bvc3RhOiBBcnJheTxDb2xTcGFuU2l6ZXNFbnVtPiA9IFtdO1xyXG4gIGZvcm11bGFBdXRvY29tcGxldGVPcHRpb25zOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT47XHJcbiAgVmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9uczogQXJyYXk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+O1xyXG4gIEF2YWlsYWJsZUZpbGVFeHRlbnNpb25zID0gQXZhaWxhYmxlRmlsZUV4dGVuc2lvbnM7XHJcbiAgQXZhaWxhYmxlSW1hZ2VFeHRlbnNpb25zID0gQXZhaWxhYmxlSW1hZ2VFeHRlbnNpb25zO1xyXG4gIGZpZWxkSW52aXNpYmlsaXR5RW51bSA9IEZpZWxkSW52aXNpYmlsaXR5RW51bTtcclxuICBjb2x1bW5LZXlzOiBBcnJheTx7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+ID0gbmV3IEFycmF5PHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4oKTtcclxuXHJcbiAgLy8jcmVnaW9uIFRlbXBsYXRlIGRlaSB2YXJpIHBlenppIGRpIGZvcm0gcGVyIGxhIGNyZWF6aW9uZSBkaSB1biBjYW1wbyhpbiBiYXNlIGFsIHRpcG8gc2NlbHRvKS5cclxuICBmaWVsZFR5cGVGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcInRleHRGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHRleHRGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwibGFiZWxGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGxhYmVsRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcInRleHRhcmVhRmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICB0ZXh0YXJlYUZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJib29sZWFkRmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBib29sZWFkRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImRhdGVGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGRhdGVGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwibnVtZXJpY0ZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgbnVtZXJpY0ZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJhdHRhY2htZW50RmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBhdHRhY2htZW50RmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImltYWdlRmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBpbWFnZUZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJpbWFnZVdpdGhNYXJrZXJzRmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBpbWFnZVdpdGhNYXJrZXJzRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImltYWdlRmllbGRTZWxlY3RvckZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGltYWdlRmllbGRTZWxlY3RvckZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwibGlzdFZhbHVlRmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBsaXN0VmFsdWVGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwibG9va3VwRmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBsb29rdXBGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZGF0YUdldHRlclRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZGF0YUdldHRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+OyAgXHJcbiAgXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBnZXN0aXJlIGkgbWV0YWRhdGEgbmVpIGNhbXBpIHRpIGRpcG8gQWxsZWdhdG8gbyBJbW1hZ2luZVxyXG4gIG1ldGFkYXRhQ29sdW1uczogQXJyYXk8Q29uZmlnQ29sdW1uPjtcclxuICAvL0BWaWV3Q2hpbGQoJ21ldGFkYXRhRmllbGRzVGFibGUnLCB7IHN0YXRpYzogZmFsc2UgfSkgbWV0YWRhdGFGaWVsZHNUYWJsZTogRXFwVGFibGVDb21wb25lbnQ7XHJcbiAgc2VsZWN0ZWRNZXRhZGF0YTogQmFzZUZpZWxkO1xyXG4gIC8vaW5kZXhTZWxlY3RlZE1ldGFkYXRhOiBudW1iZXI7XHJcbiAgLy9kaWFsb2dNZXRhZGF0YVJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIGRpYWxvZ0Zvcm11bGFSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBkaWFsb2dWaXNpYmxlSWZSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICAvL0BWaWV3Q2hpbGQoJ2RpYWxvZ01ldGFkYXRhJywgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nTWV0YWRhdGE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0Zvcm11bGFcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nRm9ybXVsYTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGdlc3RpcmUgbGUgaW1tYWdpbmkgbmVpIGNhcGkgZGkgdGlwbyBlbGVuY28gZ2VuZXJpY29cclxuICBAVmlld0NoaWxkKFwiYnV0dG9uSW1hZ2VzS2V5VmFsdWVJbnB1dENvbHVtblwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGJ1dHRvbkltYWdlc0tleVZhbHVlSW5wdXRDb2x1bW46IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBFbnVtZXJhdG9yaSB1c2F0aSBuZWxsJ2h0bWxcclxuICBGaWVsZFR5cGVFbnVtID0gRmllbGRUeXBlRW51bTtcclxuICBCb29sUHJlc2VudGFudGlvRW51bSA9IEJvb2xQcmVzZW50YW50aW9FbnVtO1xyXG4gIERhdGVUaW1lVHlwZUVudW0gPSBEYXRlVGltZVR5cGVFbnVtO1xyXG4gIExpc3RQcmVzZW50YXRpb25FbnVtID0gTGlzdFByZXNlbnRhdGlvbkVudW07XHJcbiAgVGV4dE1hc2tFbnVtID0gVGV4dE1hc2tFbnVtO1xyXG4gIEF0dGFjaG1lbnRUeXBlID0gQXR0YWNobWVudFR5cGU7XHJcbiAgYXR0YWNobWVudEZpZWxkVHlwZUVudW0gPSBBdHRhY2htZW50RmllbGRUeXBlRW51bTtcclxuICBkYXRhR2V0dGVyVHlwZUVudW0gPSBEYXRhR2V0dGVyVHlwZUVudW07XHJcbiAgc3Vic2NyaXB0aW9uOiBhbnk7XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gR2VzdGlvbmUgZGVsbGUgbGlzdGUgZGkgaW1tYWdpbmlcclxuICBjb25maWdDb2x1bW5MaXN0SW1hZ2VzOiBBcnJheTxDb25maWdDb2x1bW4+ID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuICBjb25maWdDb2x1bW5JbWFnZTogQXJyYXk8Q29uZmlnQ29sdW1uPiA9IG5ldyBBcnJheTxDb25maWdDb2x1bW4+KCk7XHJcbiAgQFZpZXdDaGlsZCgnR2VuZXJpY0xpc3RJbWFnZXNJbWFnZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgR2VuZXJpY0xpc3RJbWFnZXNJbWFnZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ0dlbmVyaWNMaXN0SW1hZ2VzS2V5VGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBHZW5lcmljTGlzdEltYWdlc0tleVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ0dlbmVyaWNMaXN0SW1hZ2VzVmFsdWVUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIEdlbmVyaWNMaXN0SW1hZ2VzVmFsdWVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdpbWFnZVNlbGVjdG9yQXR0YWNobWVudHMnLCB7IHN0YXRpYzogZmFsc2UgfSkgaW1hZ2VTZWxlY3RvckF0dGFjaG1lbnRzOiBFcXBBdHRhY2htZW50c0NvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdpbWFnZUF0dGFjaG1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgaW1hZ2VBdHRhY2htZW50OiBFcXBBdHRhY2htZW50c0NvbXBvbmVudDtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8gREIgR2V0dGVyXHJcbiAgZGlhbG9nUUVSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICAvL0BWaWV3Q2hpbGQoJ2RpYWxvZ01ldGFkYXRhJywgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nTWV0YWRhdGE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ1FFXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ1FFOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvLyBUTVctUElDS0VSXHJcbiAgbW9kZSA9IE1vZGVFbnVtXHJcbiAgdGltZVR5cGUgPSBUaW1lVHlwZUVudW1cclxuXHJcbiAgLy8gRE0gR2V0dGVyXHJcbiAgZm9ybXM6IEFycmF5PEZvcm0+ID0gbmV3IEFycmF5PEZvcm0+KCk7XHJcbiAgRE1Nb2R1bGU6IGFueTtcclxuICBETUZpZWxkOiBhbnk7XHJcbiAgRE1GaWVsZHM6IEFycmF5PHsga2V5OiBzdHJpbmcgfT47XHJcbiAgRE1HZXR0ZXJDYXJkaW5hbGl0aWVzID0gRGF0YUdldHRlckNhcmRpbmFsaXR5RW51bTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGVudW1IZWxwZXI6IEVudW1IZWxwZXIsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5SGVscGVyU2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyID09IG51bGwpeyB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIgPSBuZXcgRGF0YUdldHRlcigpOyB9XHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlICE9IG51bGwgJiYgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bVtcIkRhIG1vZHVsbyBkaW5hbWljb1wiXSl7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0QWxsTW9kdWxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSAhPSBcInVuZGVmaW5lZFwiICYmIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMuY3JlYXRlQ29sdW1uS2V5cyh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlLlBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5maWVsZFR5cGVzVG9FeGNsdWRlLmluY2x1ZGVzKEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmZpZWxkVHlwZXNUb0V4Y2x1ZGUucHVzaChGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25GaWVsZFR5cGVDaGFuZ2UoZmFsc2UpO1xyXG4gICAgdGhpcy5hdmFpbGFibGVGaWVsZHMgPSB0aGlzLmF2YWlsYWJsZUZpZWxkc1xyXG4gICAgICA/IHRoaXMuYXZhaWxhYmxlRmllbGRzLmZpbHRlcigoZikgPT4gZiAhPSB0aGlzLmZpZWxkKVxyXG4gICAgICA6IFtdO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgaW1wb3N0YXJlIGkgdmFsb3JpIGRhIHN1Z2dlcmlyZSBuZWxsJ2F1dG9jb21wbGV0ZSBkZWwgY2FtcG8gRm9ybXVsYS5cclxuICAgKiBWaWVuZSBzY2F0ZW5hdG8gYWwgZm9jdXMgKGluIHF1ZXN0byBjYXNvIHZpZW5lIHBhc3NhdG8gaWwgcGFyYW1ldHJvIGEgbnVsbCBwZXIgZGlmZmVyZW56aWFybG9cclxuICAgKiBkYWxsJ2V2ZW50byBkaSBjbGljayBzdWxsYSB0YXN0aWVyYSkgZSBhbCBrZXl1cCBzdWxsJ2lucHV0IChpbCBwYXJhbWV0cm8gw6ggZGl2ZXJzbyBkYSBudWxsKS5cclxuICAgKiBAcGFyYW0ga2V5Ym9hcmRFdmVudCBFdmVudG8gc2NhdGVuYXRvIGFsIGtleXVwIHN1bGxhIHRhc3RpZXJhLiBTZSBudWxsIGFsbG9yYSBpbCBtZXRvZG8gw6ggc3RhdG8gaW52b2NhdG8gZGFsIGZvY3VzIHN1bGwnaW5wdXQuXHJcbiAgICogQHN1bW1hcnkgQWdnaW9ybmEgbCdlbGVuY28gZGVpIHN1Z2dlcmltZW50aSBwZXIgbCdhdXRvY29tcGxldGUgc2UgbCd1dGVudGUgZXNlZ3VlIGlsIGZvY3VzIHN1bGwnaW5wdXRcclxuICAgKiBvcHB1cmUgYWwga2V5dXAgc3VsbGEgdGFzdGllcmEgZGkgdW4gdGFzdG8gZGl2ZXJzbyBkYWxsZSBmcmVjY2UuXHJcbiAgICovXHJcbiAgLy8gc2V0Rm9ybXVsYUF1dG9jb21wbGV0ZU9wdGlvbnMoa2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gIC8vICAgLy8gQ3JlbyBsJ2FycmF5IHBlciBsJ2F1dG9jb21wbGV0ZSBzb2xvIHNlIHN0byBmYWNlbmRvIGlsIGZvY3VzIHN1bGwnaW5wdXQgbyBzZSBzdG8gcHJlbWVuZG8gdW4gdGFzdG9cclxuICAvLyAgIC8vIHN1bGxhIHRhc3RpZXJhIGRpdmVyc28gZGFsbGUgZnJlY2NlIChpbiBxdWVzdCd1bHRpbW8gY2Fzbywgc2Ugbm9uIHZpZW5lIGVzZWd1aXRvIGlsIGZpbHRybyBzdWxsJ2V2ZW50byxcclxuICAvLyAgIC8vIG5vbiBzaSBwdcOyIHNlbGV6aW9uYXJlIHVuIHN1Z2dlcmltZW50byBkZWxsJ2F1dG9jb21wbGV0ZSBwZXJjaMOoIGFsIGNsaWNrIHZlcnJlYmJlIHJpY2FyaWNhdG8gbCdhcnJheSBlXHJcbiAgLy8gICAvLyBzaSBwcmVkZXJlYmJlIGxhIHNlbGV6aW9uZSBhcHBlbmEgZmF0dGEpLlxyXG4gIC8vICAgaWYgKCFrZXlib2FyZEV2ZW50IHx8ICFrZXlib2FyZEV2ZW50LmNvZGUuaW5jbHVkZXMoXCJBcnJvd1wiKSkge1xyXG4gIC8vICAgICB0aGlzLmZvcm11bGFBdXRvY29tcGxldGVPcHRpb25zID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuR2V0QXV0b2NvbXBsZXRlT3B0aW9ucyh0aGlzLmF2YWlsYWJsZUZpZWxkcywgdGhpcy5maWVsZC5Gb3JtdWxhKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcbiAgc2V0VmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9ucyhrZXlib2FyZEV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAvLyBDcmVvIGwnYXJyYXkgcGVyIGwnYXV0b2NvbXBsZXRlIHNvbG8gc2Ugc3RvIGZhY2VuZG8gaWwgZm9jdXMgc3VsbCdpbnB1dCBvIHNlIHN0byBwcmVtZW5kbyB1biB0YXN0b1xyXG4gICAgLy8gc3VsbGEgdGFzdGllcmEgZGl2ZXJzbyBkYWxsZSBmcmVjY2UgKGluIHF1ZXN0J3VsdGltbyBjYXNvLCBzZSBub24gdmllbmUgZXNlZ3VpdG8gaWwgZmlsdHJvIHN1bGwnZXZlbnRvLFxyXG4gICAgLy8gbm9uIHNpIHB1w7Igc2VsZXppb25hcmUgdW4gc3VnZ2VyaW1lbnRvIGRlbGwnYXV0b2NvbXBsZXRlIHBlcmNow6ggYWwgY2xpY2sgdmVycmViYmUgcmljYXJpY2F0byBsJ2FycmF5IGVcclxuICAgIC8vIHNpIHByZWRlcmViYmUgbGEgc2VsZXppb25lIGFwcGVuYSBmYXR0YSkuXHJcbiAgICBpZiAoIWtleWJvYXJkRXZlbnQgfHwgIWtleWJvYXJkRXZlbnQuY29kZS5pbmNsdWRlcyhcIkFycm93XCIpKSB7XHJcbiAgICAgIHRoaXMuVmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9ucyA9XHJcbiAgICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuR2V0QXV0b2NvbXBsZXRlT3B0aW9ucyhcclxuICAgICAgICAgIHRoaXMuYXZhaWxhYmxlRmllbGRzLFxyXG4gICAgICAgICAgdGhpcy5maWVsZC5WaXNpYmxlSWZcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICBvbWl0X3NwZWNpYWxfY2hhcihldmVudCkge1xyXG4gICAgdmFyIGs7XHJcbiAgICBrID0gZXZlbnQua2V5Q29kZTsgLy8gICAgICAgICBrID0gZXZlbnQua2V5Q29kZTsgIChCb3RoIGNhbiBiZSB1c2VkKVxyXG4gICAgaWYgKGsgPT0gMzQpIHtcclxuICAgICAgZXZlbnQua2V5Q29kZSA9IDA7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWEgaWwgRm9ybUdyb3VwIHBlciBsJ2FnZ2l1bnRhIGRpIHVuIG51b3ZvIGNhbXBvIGFsbCdpbnRlcm5vIGRlbGxhIGZvcm0uXHJcbiAgICogTWV0b2RvIHJpY2hpYW1hdG8gb2duaSB2b2x0YSBjaGUgY2FtYmlhIGlsIHRpcG8gZGVsIGNhbXBvIHNjZWx0byBvIHZpZW5lIGFnZ2l1bnRvL21vZGlmaWNhdG8gdW4gRmllbGRcclxuICAgKi9cclxuICBjcmVhdGVGaWVsZEZvcm0oKSB7XHJcbiAgICB0aGlzLmZpZWxkRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIExhYmVsOiBbXHJcbiAgICAgICAgdGhpcy5maWVsZC5MYWJlbCxcclxuICAgICAgICBbXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeW2EtekEtWiBdKiRcIiksXHJcbiAgICAgICAgXSxcclxuICAgICAgXSxcclxuICAgICAgRGVzY3JpcHRpb246IFtcclxuICAgICAgICB0aGlzLmZpZWxkLkRlc2NyaXB0aW9uLFxyXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIF0sXHJcbiAgICAgIFJlYWRvbmx5OiBbdGhpcy5maWVsZC5SZWFkb25seV0sXHJcbiAgICAgIFJlcXVpcmVkOiBbdGhpcy5maWVsZC5SZXF1aXJlZF0sXHJcbiAgICAgIEZpZWxkVHlwZTogW1xyXG4gICAgICAgIHRoaXMuZmllbGQuRmllbGRUeXBlLFxyXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIF0sXHJcbiAgICAgIERNTW9kdWxlOiBbbnVsbF0sICAgICAgXHJcbiAgICAgIERNRmllbGQ6IFtudWxsXSwgICAgICBcclxuICAgICAgRGF0YUdldHRlclR5cGU6IFtcclxuICAgICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUsXHJcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBdLCAgICAgIFxyXG4gICAgICBDb2xTcGFuU2l6ZXM6IFt0aGlzLmZpZWxkLkNvbFNwYW5TaXplc10sXHJcbiAgICAgIEluTGlzdFZpZXc6IFt0aGlzLmZpZWxkLkluTGlzdFZpZXddLFxyXG4gICAgICBJbnZpc2liaWxpdHk6IFt0aGlzLmZpZWxkLkludmlzaWJpbGl0eV0sXHJcbiAgICAgIFZpc2libGVJZjogW3RoaXMuZmllbGQuVmlzaWJsZUlmLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIFRvb2x0aXA6IFt0aGlzLmZpZWxkLlRvb2x0aXAsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgTGFiZWxzdHlsZUNTUzogW3RoaXMuZmllbGQuTGFiZWxzdHlsZUNTUywgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG4gICAgICBGaWVsZHN0eWxlQ1NTOiBbdGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIEZvcm11bGE6IFt0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgRGF0YUdldHRlclZhbHVlOiBbdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSwgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG5cclxuICAgICAgQW5zd2VyU3R5bGVMYWJlbHN0eWxlQ1NTOiBbdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5MYWJlbHN0eWxlQ1NTLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIEFuc3dlclN0eWxlRmllbGRzdHlsZUNTUzogW3RoaXMuZmllbGQuQW5zd2VyU3R5bGUuRmllbGRzdHlsZUNTUywgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG4gICAgICBBbnN3ZXJTdHlsZVZpc2libGVJZjogW3RoaXMuZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIEFuc3dlclN0eWxlQ29sU3BhblNpemVzOiBbdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5Db2xTcGFuU2l6ZXNdLFxyXG4gICAgICBBbnN3ZXJTdHlsZUluTGlzdFZpZXc6IFt0aGlzLmZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXddLFxyXG4gICAgICBBbnN3ZXJTdHlsZUludmlzaWJpbGl0eTogW3RoaXMuZmllbGQuQW5zd2VyU3R5bGUuSW52aXNpYmlsaXR5XSxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm1GaWVsZHNHcm91cHMpIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgIFwiRmllbGRHcm91cFwiLFxyXG4gICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wodGhpcy5maWVsZC5GaWVsZEdyb3VwLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICBxdWVzdGlvblBvbGwoY29udHJvbDogRm9ybUNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgLy8gYyfDqCB1biBGb3JtQ29udHJvbCBjaGUgw6ggdnVvdG8gY2hlIGRhIHByb2JsZW1pIChwcm9iYWJpbG1lbnRlIHR5cGUgRGF0YSwgY2FtcG8gRm9ybWF0bylcclxuICAgIGlmIChjb250cm9sLnZhbHVlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2Uuc3RyaW5nQ2hlY2tQYXJlbnRlc2lzKFxyXG4gICAgICAgICAgY29udHJvbC52YWx1ZSxcclxuICAgICAgICAgIGNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBcIk1pc3NpbmcgUGFyZW50aGVzaXNcIjogdHJ1ZSB9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgc3RyaW5nU2FuaXRhaXplZFZhbGlkYXRvcihjb250cm9sOiBGb3JtQ29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICAvLyBjJ8OoIHVuIEZvcm1Db250cm9sIGNoZSDDqCB2dW90byBjaGUgZGEgcHJvYmxlbWkgKHByb2JhYmlsbWVudGUgdHlwZSBEYXRhLCBjYW1wbyBGb3JtYXRvKVxyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5zdHJpbmdDaGVja1BhcmVudGVzaXMoXHJcbiAgICAgICAgICBjb250cm9sLnZhbHVlLFxyXG4gICAgICAgICAgY29udHJvbC5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IFwiTGEgZm9ybXVsYSBub24gw6ggdmFsaWRhXCI6IHRydWUgfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIGdldEFsbEZvcm1WYWxpZGF0aW9uRXJyb3JzKCkge1xyXG4gIC8vICAgT2JqZWN0LmtleXModGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgLy8gICAgIGNvbnN0IGNvbnRyb2xFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPVxyXG4gIC8vICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuZ2V0KGtleSkuZXJyb3JzO1xyXG4gIC8vICAgICBpZiAoY29udHJvbEVycm9ycyAhPSBudWxsKSB7XHJcbiAgLy8gICAgICAgT2JqZWN0LmtleXMoY29udHJvbEVycm9ycykuZm9yRWFjaCgoa2V5RXJyb3IpID0+IHtcclxuICAvLyAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gIC8vICAgICAgICAgICBcIktleSBjb250cm9sOiBcIiArIGtleSArIFwiLCBrZXlFcnJvcjogXCIgKyBrZXlFcnJvciArIFwiLCBlcnIgdmFsdWU6IFwiLFxyXG4gIC8vICAgICAgICAgICBjb250cm9sRXJyb3JzW2tleUVycm9yXVxyXG4gIC8vICAgICAgICAgKTtcclxuICAvLyAgICAgICB9KTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hpYW1hdG8gZGFpIG1hdC1lcnJvciBwZXIgcHJlbmRlcmUgZ2xpIGVycm9yaSBnZW5lcmF0aSByZWxhdGl2aSBhbCBjYW1wby5cclxuICAgKiBAcGFyYW0gY29udHJvbCDDqCBpbCBub21lIGRlbCBHcm91cENvbnRyb2wgZGkgY3VpIGxlZ2dlcmUgc2UgY2kgc29ubyBlcnJvcmlcclxuICAgKi9cclxuICBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycyhjb250cm9sOiBzdHJpbmcpIHtcclxuICAgIGlmIChjb250cm9sID09IFwiTGFiZWxcIikgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMnLCB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiTGFiZWxcIl0pO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2xFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPVxyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xdLmVycm9ycztcclxuICAgIGxldCBlcnJvcnMgPSBbXTtcclxuICAgIGxldCB2YWx1ZXMgPSBbXTtcclxuICAgIGlmIChjb250cm9sRXJyb3JzICE9IG51bGwpIHtcclxuICAgICAgT2JqZWN0LmtleXMoY29udHJvbEVycm9ycykuZm9yRWFjaCgoa2V5RXJyb3IpID0+IHtcclxuICAgICAgICBlcnJvcnMucHVzaChrZXlFcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdjb250cm9sOiAnLCBjb250cm9sKTtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnZXJyb3JzOiAnLCBlcnJvcnMpO1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCd2YWx1ZXM6ICcsIHZhbHVlcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXJyb3JzLmpvaW4oXCIsIFwiKTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBvbkZpZWxkVHlwZUNoYW5nZVxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGlhbWF0byBxdWFuZG8gY2FtYmlhIGlsIEZpZWxkVHlwZSBkZWwgQmFzZUZpZWxkIGNoZSBzaSBzdGEgYWdnaXVuZ2VuZG8vbW9kaWZpY2FuZG8uXHJcbiAgICogUmljcmVhIGwnb2dnZXR0byBmaWVsZCBwb3BvbGFuZG8gc29sbyBsZSBwcm9wcmlldMOgIGRlbCBCYXNlRmllbGQgaW5zZXJpdGUgZGFsbCd1dGVudGVcclxuICAgKiAocXVlbGxlIGNvbXVuaSBhIHR1dHRlIGxlIHRpcG9sb2dpZSBkaSBjYW1wbyksIHJpY3JlYSBsYSBmb3JtIGUsIGluIGJhc2UgYWwgRmllbGRUeXBlIHNjZWx0byxcclxuICAgKiBhZ2dpdW5nZSBhbGxhIGZvcm0gaSBGb3JtQ29udHJvbCBuZWNlc3NhcmkgZSBzZWxlemlvbmEgaWwgdGVtcGxhdGUgY29ycmV0dG8gZGEgdXNhcmUuXHJcbiAgICogQHBhcmFtIHJlc3RvcmVGaWVsZCBTZSBUUlVFIHJpcHJpc3RpbmEgaSB2YWxvcmkgYmFzZSAoZXJlZGl0YXRpIGRhbCBtb2RlbGxvIEJhc2VGaWVsZCkgZGVsIGNhbXBvIGFnZ2l1bnRvL21vZGlmaWNhdG9cclxuICAgKi9cclxuICBvbkZpZWxkVHlwZUNoYW5nZShyZXN0b3JlRmllbGQ6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBpZiAocmVzdG9yZUZpZWxkKSB7XHJcbiAgICAgIHRoaXMucmVzdG9yZUJhc2VGaWVsZFByb3BlcnRpZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNyZWF0ZUZpZWxkRm9ybSgpO1xyXG4gICAgdGhpcy5vbkNvbFNwYW5TaXplU2VsZWN0KCk7XHJcbiAgICBpZiAoKHRoaXMuZmllbGQgYXMgQmFzZUZpZWxkKS5Jbkxpc3RWaWV3ID09IG51bGwpIHtcclxuICAgICAgdGhpcy5maWVsZC5Jbkxpc3RWaWV3ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICgodGhpcy5maWVsZCBhcyBCYXNlRmllbGQpLkludmlzaWJpbGl0eSA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuSW52aXNpYmlsaXR5ID0gRmllbGRJbnZpc2liaWxpdHlFbnVtLk5BU0NPU1RPO1xyXG4gICAgfSAgICBcclxuICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gbnVsbDtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuZmllbGQuRmllbGRUeXBlKSB7XHJcblxyXG4gICAgICAvLyNyZWdpb24gQ0FNUE8gREkgVEVTVE9cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gZGkgdGVzdG9cIl06XHJcbiAgICAgICAgaWYgKCh0aGlzLmZpZWxkIGFzIFRleHRGaWVsZCkuTWljcm9waG9uZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLk1pY3JvcGhvbmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJUZXh0TWFza1wiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBUZXh0RmllbGQpLlRleHRNYXNrKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNYXhMZW5naHRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dEZpZWxkKS5NYXhMZW5naHQsIFtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl5bMC05XSokXCIpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWluTGVuZ2h0XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIFRleHRGaWVsZCkuTWluTGVuZ2h0LCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1pY3JvcGhvbmVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dEZpZWxkKS5NaWNyb3Bob25lKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLnRleHRGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIENBTVBPIERJIFRFU1RPXHJcblxyXG4gICAgICAvLyNyZWdpb24gTEFCRUxcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydFdGljaGV0dGEnXTpcclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgTGFiZWxGaWVsZCkuRXRpY2hldHRhID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuRXRpY2hldHRhID0gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRXRpY2hldHRhXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIExhYmVsRmllbGQpLkV0aWNoZXR0YSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5sYWJlbEZpZWxkRm9ybVRlbXBsYXRlOyAgIFxyXG4gICAgICAgIGJyZWFrOyAgICAgXHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBMQUJFTFxyXG5cclxuICAgICAgLy8jcmVnaW9uIEFSRUEgREkgVEVTVE8gXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFyZWEgZGkgdGVzdG9cIl06XHJcbiAgICAgICAgaWYgKCh0aGlzLmZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1pY3JvcGhvbmUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5NaWNyb3Bob25lID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlJvd3NcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuUm93cywgW1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbCxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlswLTldKiRcIiksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWF4TGVuZ2h0XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1heExlbmdodCwgW1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbCxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlswLTldKiRcIiksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWluTGVuZ2h0XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1pbkxlbmdodCwgW1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbCxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlswLTldKiRcIiksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWljcm9waG9uZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5NaWNyb3Bob25lKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLnRleHRhcmVhRmllbGRGb3JtVGVtcGxhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBBUkVBIERJIFRFU1RPIFxyXG5cclxuICAgICAgLy8jcmVnaW9uIEJPT0xFQU5PXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5Cb29sZWFubzpcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJJc1RyaXN0YXRlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIEJvb2xlYW5GaWVsZCkuSXNUcmlzdGF0ZSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlByZXNldGF0aW9uVHlwZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgQm9vbGVhbkZpZWxkKS5QcmVzZXRhdGlvblR5cGUsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5ib29sZWFkRmllbGRGb3JtVGVtcGxhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBCT09MRUFOT1xyXG5cclxuICAgICAgLy8jcmVnaW9uIERBVEEgRS9JIE9SQVxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJEYXRhIGUvbyBvcmFcIl06XHJcbiAgICAgICAgaWYgKHRoaXMuZmllbGQuSXNPbmx5RGF0ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLklzT25seURhdGUgPSBEYXRlVGltZVR5cGVFbnVtW1wiU29sbyBkYXRhXCJdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJJc09ubHlEYXRlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSwgW1xyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbCxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNaW5EYXRlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBEYXRlRmllbGQpLk1pbkRhdGUsXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNYXhEYXRlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBEYXRlRmllbGQpLk1heERhdGUsXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJEYXRlRm9ybWF0XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIERhdGVGaWVsZCkuRGF0ZUZvcm1hdClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5kYXRlRmllbGRGb3JtVGVtcGxhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBEQVRBIEUvSSBPUkFcclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBDQU1QTyBOVU1FUklDT1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXTpcclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5Jc0ludGVnZXIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5Jc0ludGVnZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJJc0ludGVnZXJcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5Jc0ludGVnZXIpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNaW5WYWx1ZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLk1pblZhbHVlLCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeLT9bMC05XSsoLFswLTldK3xcXC5bMC05XSspPyRcIiksIC8vKFwiXlswLTldKiRcIiksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWF4VmFsdWVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5NYXhWYWx1ZSwgW1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbCxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXi0/WzAtOV0rKCxbMC05XSt8XFwuWzAtOV0rKT8kXCIpLCAvLyhcIl5bMC05XSokXCIpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkRlY2ltYWxTZXBhcmF0b3JcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuRGVjaW1hbFNlcGFyYXRvcixcclxuICAgICAgICAgICAgW3RoaXMucXVlc3Rpb25Qb2xsLCBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeW2EtekEtWiAtLycsLl8vXFxcXF48Pl0rXCIpXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRGVjaW1hbFByZWNpc2lvblwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5EZWNpbWFsUHJlY2lzaW9uLFxyXG4gICAgICAgICAgICBbdGhpcy5xdWVzdGlvblBvbGwsIFZhbGlkYXRvcnMucGF0dGVybihcIl5bMC05XSskXCIpXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiVGhvdXNhbmRzU2VwYXJhdG9yXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLlRob3VzYW5kc1NlcGFyYXRvcixcclxuICAgICAgICAgICAgW3RoaXMucXVlc3Rpb25Qb2xsLCBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeW2EtekEtWiAtLycsLl8vXFxcXF48Pl0rXCIpXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiQ3VycmVuY3lTeW1ib2xcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuQ3VycmVuY3lTeW1ib2wsXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNZWFzdXJlVW5pdFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5NZWFzdXJlVW5pdCxcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGxcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5udW1lcmljRmllbGRGb3JtVGVtcGxhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBDQU1QTyBOVU1FUklDT1xyXG5cclxuICAgICAgLy8jcmVnaW9uIEFMTEVHQVRPXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5BbGxlZ2F0bzpcclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkFsbG93ZWRFeHRlbnNpb25zXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBBdHRhY2htZW50RmllbGQpLkFsbG93ZWRFeHRlbnNpb25zXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIklzTXVsdGlBdHRhY2hcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5Jc011bHRpQXR0YWNoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmF0dGFjaG1lbnRGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIEFMTEVHQVRPXHJcblxyXG4gICAgICAvLyNyZWdpb24gSU1NQUdJTkVcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkltbWFnaW5lOlxyXG4gICAgICBpZiAodHlwZW9mICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkR5bkF0dGFjaG1lbnQgPT0gXCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRHluQXR0YWNobWVudCA9IG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRW5hYmxlRHJhd2luZyA9PSBcInVuZGVmaW5lZFwiKXtcclxuICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5FbmFibGVEcmF3aW5nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeCxcclxuICAgICAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWQsVmFsaWRhdG9ycy5tYXgoNDMyMCldXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5SZXNpemVkSW1hZ2VzSGVpZ2h0UHggPSAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5SZXNpemVkSW1hZ2VzSGVpZ2h0UHggIT0gbnVsbCA/ICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeCA6IDEyODtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJFbmFibGVEcmF3aW5nXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkVuYWJsZURyYXdpbmcpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmltYWdlRmllbGRGb3JtVGVtcGxhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbiA9IG5ldyBBdHRhY2htZW50RmllbGQoKTtcclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkVuYWJsZURyYXdpbmdcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRW5hYmxlRHJhd2luZylcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiSW1hZ2VJc0NvbnRleHR1YWxBdHRhY2htZW50XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5JbWFnZUlzQ29udGV4dHVhbEF0dGFjaG1lbnRcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIEltcG9zdG8gaSBGb3JtQ29udHJvbCB2YXJpYWJpbGkuXHJcbiAgICAgICAgdGhpcy5vbkltYWdlSXNDb250ZXh0dWFsQXR0YWNobWVudENoYW5nZSgpO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5pbWFnZUZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAgICovXHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBJTU1BR0lORVxyXG5cclxuICAgICAgLy8jcmVnaW9uIEVMRU5DTyBHRU5FUklDT1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcbiAgICAgICAgaWYgKCh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Jbkxpc3RWaWV3ID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuSW5MaXN0VmlldyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuSW52aXNpYmlsaXR5ID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuSW52aXNpYmlsaXR5ID0gRmllbGRJbnZpc2liaWxpdHlFbnVtLk5BU0NPU1RPO1xyXG4gICAgICAgIH0gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIklzTXVsdGlDaG9pY2hlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Jc011bHRpQ2hvaWNoZSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlByZXNlbnRhdGlvbk1vZGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5QcmVzZW50YXRpb25Nb2RlLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMubGlzdFZhbHVlRmllbGRGb3JtVGVtcGxhdGU7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gRUxFTkNPIEdFTkVSSUNPXHJcblxyXG4gICAgICAvLyNyZWdpb24gRUxFTkNPIElNTUFHSU5JXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBpbW1hZ2luaVwiXTpcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJJc011bHRpQ2hvaWNoZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLklzTXVsdGlDaG9pY2hlKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiUmVzaXplZEltYWdlc0hlaWdodFB4XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeCxcclxuICAgICAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWQsVmFsaWRhdG9ycy5tYXgoNDMyMCldXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTsgICAgICAgIFxyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5pbWFnZUZpZWxkU2VsZWN0b3JGb3JtVGVtcGxhdGU7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gRUxFTkNPIElNTUFHSU5JICAgICBcclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBJTU1BR0lORSBDT04gTUFSS0VSXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lIGNvbiBtYXJrZXJzXCJdOlxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VXaXRoTWFya2Vyc0ZpZWxkKS5SZXNpemVkSW1hZ2VzSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLFZhbGlkYXRvcnMubWF4KDQzMjApXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7ICAgICAgICBcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMuaW1hZ2VXaXRoTWFya2Vyc0ZpZWxkRm9ybVRlbXBsYXRlO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIElNTUFHSU5FIENPTiBNQVJLRVIgICAgICAgIFxyXG5cclxuICAgICAgLy8jcmVnaW9uIExPT0tVUFxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW0uTG9va3VwOlxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkVudGl0eVNvdXJjZU5hbWVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExvb2t1cEZpZWxkKS5FbnRpdHlTb3VyY2VOYW1lLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJVc2VBc0dldE9yRGlzY2FyZFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBMb29rdXBGaWVsZCkuVXNlQXNHZXRPckRpc2NhcmQpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMubG9va3VwRmllbGRGb3JtVGVtcGxhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBMT09LVVBcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgW1xyXG4gICAgICAgIEZpZWxkVHlwZUVudW0uQWxsZWdhdG8sXHJcbiAgICAgICAgRmllbGRUeXBlRW51bS5JbW1hZ2luZSxcclxuICAgICAgICBGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl0sXHJcbiAgICAgIF0uaW5jbHVkZXModGhpcy5maWVsZC5GaWVsZFR5cGUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtdWxhID0gbnVsbDtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkZvcm11bGFcIl0uZGlzYWJsZSgpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiSW5MaXN0Vmlld1wiXS5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJJbnZpc2liaWxpdHlcIl0uZGlzYWJsZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkZvcm11bGFcIl0uZW5hYmxlKCk7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJJbkxpc3RWaWV3XCJdLmVuYWJsZSgpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiSW52aXNpYmlsaXR5XCJdLmVuYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBbXHJcbiAgICAgICAgRmllbGRUeXBlRW51bS5BbGxlZ2F0byxcclxuICAgICAgICBGaWVsZFR5cGVFbnVtLkltbWFnaW5lLFxyXG4gICAgICAgIEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXSxcclxuICAgICAgICBGaWVsZFR5cGVFbnVtW1wiRGF0YSBlL28gb3JhXCJdLFxyXG4gICAgICBdLmluY2x1ZGVzKHRoaXMuZmllbGQuRmllbGRUeXBlKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJMYWJlbHN0eWxlQ1NTXCJdLmRpc2FibGUoKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkZpZWxkc3R5bGVDU1NcIl0uZGlzYWJsZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkxhYmVsc3R5bGVDU1NcIl0uZW5hYmxlKCk7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJGaWVsZHN0eWxlQ1NTXCJdLmVuYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKFtGaWVsZFR5cGVFbnVtLkJvb2xlYW5vXS5pbmNsdWRlcyh0aGlzLmZpZWxkLkZpZWxkVHlwZSkpIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkxhYmVsc3R5bGVDU1NcIl0uZGlzYWJsZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkxhYmVsc3R5bGVDU1NcIl0uZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvbkZpZWxkVHlwZUNoYW5nZVxyXG5cclxuICAvLyNyZWdpb24gb25EYXRhR2V0dGVyVHlwZUNoYW5nZVxyXG4gIGFzeW5jIG9uRGF0YUdldHRlclR5cGVDaGFuZ2UoKXtcclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtWydEYSBtb2R1bG8gZGluYW1pY28nXSAmJiB0aGlzLmZvcm1zLmxlbmd0aCA9PSAwKXtcclxuICAgICAgdGhpcy5nZXRBbGxNb2R1bGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSAhPSBEYXRhR2V0dGVyVHlwZUVudW0uRm9ybXVsYSl7XHJcbiAgICAgIHRoaXMuZmllbGQuRm9ybXVsYSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLkRNTW9kdWxlID0gbnVsbDtcclxuICAgIHRoaXMuRE1GaWVsZCA9IG51bGw7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvbkRhdGFHZXR0ZXJUeXBlQ2hhbmdlXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBjYW1iaW8gZGVsIHZhbG9yZSBkZWxsYSBwcm9wcmlldMOgIEltYWdlSXNDb250ZXh0dWFsQXR0YWNobWVudCBuZWwgY2Fzb1xyXG4gICAqIGRpIGNhbXBpIGRpIHRpcG8gSW1tYWdpbmUuIFNlIFRSVUUgYWxsb3JhIHJpbXVvdmUgaSBGb3JtQ29udHJvbCBwZXIgbGUgcHJvcHJpZXTDoCBJc011bHRpQXR0YWNoXHJcbiAgICogZSBBbGxvd2VkRXh0ZW5zaW9ucyBlIGFnZ2l1bmdlIGkgRm9ybUNvbnRyb2wgcGVyIGxlIHByb3ByaWV0w6AgSW1nTmFtZSBlIENvbnRleHR1YWxBdHRhY2htZW50LFxyXG4gICAqIGFsdHJpbWVudGkgaWwgY29udHJhcmlvLlxyXG4gICAqL1xyXG4gIG9uSW1hZ2VJc0NvbnRleHR1YWxBdHRhY2htZW50Q2hhbmdlKCkge1xyXG4gICAgXHJcbiAgICAvKlxyXG4gICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuSW1nTmFtZSA9IG51bGw7XHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLkFsbG93ZWRFeHRlbnNpb25zID0gW107XHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLklzTXVsdGlBdHRhY2ggPSBmYWxzZTtcclxuICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkNvbnRleHR1YWxBdHRhY2htZW50ID0gbnVsbDtcclxuXHJcbiAgICBpZiAoKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuSW1hZ2VJc0NvbnRleHR1YWxBdHRhY2htZW50KSB7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAucmVtb3ZlQ29udHJvbChcIklzTXVsdGlBdHRhY2hcIik7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAucmVtb3ZlQ29udHJvbChcIkFsbG93ZWRFeHRlbnNpb25zXCIpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgXCJJbWdOYW1lXCIsXHJcbiAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkltZ05hbWUsXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgKVxyXG4gICAgICApOyAgICAgIFxyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgXCJDb250ZXh0dWFsQXR0YWNobWVudFwiLFxyXG4gICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5Db250ZXh0dWFsQXR0YWNobWVudCxcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJJbWdOYW1lXCIpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJDb250ZXh0dWFsQXR0YWNobWVudFwiKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgIFwiSXNNdWx0aUF0dGFjaFwiLFxyXG4gICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLklzTXVsdGlBdHRhY2hcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICBcIkFsbG93ZWRFeHRlbnNpb25zXCIsXHJcbiAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uQWxsb3dlZEV4dGVuc2lvbnNcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAqL1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgaW50ZXJjZXR0YXJlIGwnYWdnaXVudGEgZGkgdW4gYWxsZWdhdG8gbmVpIGNhbXBpIGRpIHRpcG8gSW1tYWdpbmUgcGVyIGFnZ2lvcm5hcmVcclxuICAgKiBpbCB2YWxvcmUgZGVsbGEgcHJvcHJpZXTDoCBDb250ZXh0dWFsQXR0YWNobWVudCBlIGxhIHZhbGlkYXppb25lIGRlbCByZWxhdGl2byBGb3JtQ29udHJvbC5cclxuICAgKiBAcGFyYW0gZXZlbnQgQXJyYXkgY29udGVuZW50ZSBsJ2VsZW5jbyBhZ2dpb3JuYXRvIGRlZ2xpIGFsbGVnYXRpIGNhcmljYXRpIChuZWwgbm9zdHJvIGNhc28gbmUgY29udGllbmUgYWwgcGnDuSAxKS5cclxuICAgKi9cclxuICBjYXRjaENvbnRleHR1YWxBdHRhY2htZW50Q2hhbmdlKGV2ZW50OiBBcnJheTxJQXR0YWNobWVudERUTz4pIHtcclxuICAgIC8qXHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5Db250ZXh0dWFsQXR0YWNobWVudCA9IGV2ZW50WzBdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQ29udGV4dHVhbEF0dGFjaG1lbnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkNvbnRleHR1YWxBdHRhY2htZW50XCJdLnNldFZhbHVlKFxyXG4gICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5Db250ZXh0dWFsQXR0YWNobWVudFxyXG4gICAgKTtcclxuICAgICovXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gYWxsYSBzZWxlemlvbmUgZGkgdW5hIGNsYXNzZSBuZWxsYSBzZWxlY3QgcGVyIGxlIGNvbG9ubmUgZGkgYm9vdHN0cmFwXHJcbiAgICogZGEgdXNhcmUgbmVsbGEgdmlzdWFsaXp6YXppb25lIGRlbCBjYW1wby4gUXVlc3RhIGZ1bnppb25lIG1hbmlwb2xhIGxhIHNvcmdlbnRlIGRhdGkgcGVyXHJcbiAgICogbGEgZXFwLXNlbGVjdCBpbiBtb2RvIGRhIGVzY2x1ZGVyZSBpIHZhbG9yaSBkZWxsJ2VudW1lcmF0b3JlIGNoZSBmYW5ubyByaWZlcmltZW50byBhZFxyXG4gICAqIHVuYSBsYXJnaGV6emEgZGkgc2NoZXJtbyBnacOgIHNlbGV6aW9uYXRhLiBFc2VtcGlvOiBwZXIgZ2xpIHNjaGVybWkgcGljY29saSAoc20pIGwndXRlbnRlXHJcbiAgICogc2VsZXppb25hIGxhIGNsYXNzZSBcImNvbC1zbS02XCIsIGFsIGNoYW5nZSBkZWwgdmFsb3JlIHF1ZXN0byBtZXRvZG8gcmltdW92ZSBkYWxsYSBzZWxlY3RcclxuICAgKiB0dXR0aSBnbGkgYWx0cmkgdmFsb3JpIHBlciBsYSBncmFuZGV6emEgZGkgc2NoZXJtbyBzZWxlemlvbmF0YS5cclxuICAgKi9cclxuICBvbkNvbFNwYW5TaXplU2VsZWN0KCkge1xyXG4gICAgLy8gUmVjdXBlcm8gbCdhcnJheSBkZWdsaSBvZ2dldHRpIGNoaWF2ZS12YWxvcmUgY2hlIHJhcHByZXNldGEgbCdlbnVtZXJhdG9yZVxyXG4gICAgbGV0IGNvbFNpemVDbGFzc0VudW1BcnJheSA9IHRoaXMuZW51bUhlbHBlci5nZXRFbnVtQXJyYXkoXHJcbiAgICAgIENvbFNwYW5TaXplc0VudW0sXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICBudWxsXHJcbiAgICApO1xyXG4gICAgLy8gQ29zdHJ1aXNjbyBsJ2FycmF5IGRlbGxlIGNsYXNzaSBzZWxlemlvbmF0ZSBkYWxsJ3V0ZW50ZSBpbiBmb3JtYXRvIHN0cmluZ2FcclxuICAgIGxldCBzZWxlY3RlZERpbWVuc2lvbnNDb21waWxhemlvbmU6IEFycmF5PHN0cmluZz4gPSB0aGlzLmZpZWxkLkNvbFNwYW5TaXplc1xyXG4gICAgICA/IHRoaXMuZmllbGQuQ29sU3BhblNpemVzLm1hcCgoY29sKSA9PiBDb2xTcGFuU2l6ZXNFbnVtW2NvbF0pXHJcbiAgICAgIDogW107XHJcbiAgICAgIGxldCBzZWxlY3RlZERpbWVuc2lvbnNSaXNwb3N0YTogQXJyYXk8c3RyaW5nPiA9IHRoaXMuZmllbGQuQW5zd2VyU3R5bGUuQ29sU3BhblNpemVzXHJcbiAgICAgID8gdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5Db2xTcGFuU2l6ZXMubWFwKChjb2wpID0+IENvbFNwYW5TaXplc0VudW1bY29sXSlcclxuICAgICAgOiBbXTsgICAgICBcclxuICAgIC8vIEZpbHRybyBpIHZhbG9yaSBvdHRlbnV0aSBkYWxsJ2VudW1lcmF0b3JlIHBlciBlc2NsdWRlcmUgdHV0dGkgaSB2YWxvcmkgcGVyIGxlXHJcbiAgICAvLyBncmFuZGV6emUgZGkgc2NoZXJtbyBnacOgIHNlbGV6aW9uYXRlYWQgZXNjbHVzaW9uZSBkZWkgdmFsb3JpIHNlbGV6aW9uYXRpLlxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiQ09MU1BBTlNJWkVTXCIsIGNvbFNpemVDbGFzc0VudW1BcnJheSwgc2VsZWN0ZWREaW1lbnNpb25zQ29tcGlsYXppb25lLCB0aGlzLmZpZWxkKTtcclxuXHJcbiAgICB0aGlzLmF2YWlsYWJsZUNvbFNwYW5TaXplc0NvbXBpbGF6aW9uZSA9IGNvbFNpemVDbGFzc0VudW1BcnJheS5maWx0ZXIoXHJcbiAgICAgICh2YWx1ZTogeyBrZXk6IG51bWJlcjsgdmFsdWU6IHN0cmluZyB9KSA9PlxyXG4gICAgICAgICFzZWxlY3RlZERpbWVuc2lvbnNDb21waWxhemlvbmUuZmluZChcclxuICAgICAgICAgIChjb2wpID0+XHJcbiAgICAgICAgICAgIHZhbHVlLnZhbHVlLmluY2x1ZGVzKGNvbC5zdWJzdHJpbmcoNCwgNikpICYmIHZhbHVlLnZhbHVlICE9IGNvbFxyXG4gICAgICAgIClcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUNvbFNwYW5TaXplc1Jpc3Bvc3RhID0gY29sU2l6ZUNsYXNzRW51bUFycmF5LmZpbHRlcihcclxuICAgICAgKHZhbHVlOiB7IGtleTogbnVtYmVyOyB2YWx1ZTogc3RyaW5nIH0pID0+XHJcbiAgICAgICAgIXNlbGVjdGVkRGltZW5zaW9uc1Jpc3Bvc3RhLmZpbmQoXHJcbiAgICAgICAgICAoY29sKSA9PlxyXG4gICAgICAgICAgICB2YWx1ZS52YWx1ZS5pbmNsdWRlcyhjb2wuc3Vic3RyaW5nKDQsIDYpKSAmJiB2YWx1ZS52YWx1ZSAhPSBjb2xcclxuICAgICAgICApXHJcbiAgICApOyAgICBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBjYW1iaW8gZGVsIHRpcG8gZGkgdmlzdWFsaXp6YXppb25lIHNjZWx0YSBwZXIgaSBjYW1waSBkaSB0aXBvIGVsZW5jbyBnZW5lcmljby5cclxuICAgKiBTZSB2aWVuZSBzY2VsdGEgbGEgdmlzdWFsaXp6YXppb25lIGFkIGltbWFnaW5pIHN2dW90YSBsYSBsaXN0YSBkZWxsZSBjb3BwaWUgY2hpYXZlLXZhbG9yZSBpbnNlcml0ZVxyXG4gICAqIGluIHByZWNlZGVuemEsIGFsdHJpbWVudGkgc3Z1b3RhIGxhIGxpc3RhIGRlbGxlIGltbWFnaW5pIGNhcmljYXRlLlxyXG4gICAqL1xyXG4gIG9uUHJlc2VudGF0aW9uTW9kZUNoYW5nZSgpIHtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gYWwgc2FsdmF0YWdnaW8gZGVnbGkgYWxsZWdhdGkgcXVhbmRvIHZpZW5lIGNvbmZpZ3VyYXRvIHVuIGNhbXBvIGRpIHRpcG8gXCJFbGVuY28gZ2VuZXJpY29cIlxyXG4gICAqIGNvbiBpbCB0aXBvIGRpIHZpc3VhbGl6emF6aW9uZSBhZCBpbW1hZ2luaS4gSW50ZXJjZXR0YSBsJ2VsZW5jbyBhZ2dpb3JuYXRvIGRlbGxlIGltbWFnaW5pIGNhcmljYXRlIGUgbG9cclxuICAgKiBtZW1vcml6emEgbmVsbCdvZ2dldHRvIGZpZWxkIGNvcnJlbnRlLlxyXG4gICAqIEBwYXJhbSBhdHRhY2htZW50cyBBcnJheSBhZ2dpb3JuYXRvIGRlZ2xpIGFsbGVnYXRpIGNhcmljYXRpLlxyXG4gICAqL1xyXG4gIGNhdGNoQnV0dG9uSW1hZ2VzQ2hhbmdlKGF0dGFjaG1lbnRzOiBBcnJheTxJQXR0YWNobWVudERUTz4pIHtcclxuXHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0ID0gYXR0YWNobWVudHMgYXMgQXJyYXk8RHluQXR0YWNobWVudD47XHJcblxyXG4gICAgICAodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0LmZvckVhY2goKGF0dGFjaG1lbnQ6IER5bkF0dGFjaG1lbnQpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIGF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9PSBcInVuZGVmaW5lZFwiKXtcclxuXHJcbiAgICAgICAgICB2YXIgbXlCYXNlNjQgPSBcImRhdGE6aW1hZ2UvXCIrYXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkrXCI7YmFzZTY0LFwiICsgYXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NDtcclxuICAgICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAgICAgICBpbWcuc3JjID0gbXlCYXNlNjQ7XHJcbiAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICBhdHRhY2htZW50LkltYWdlV2lkdGhQeCA9IGltZy53aWR0aDtcclxuICAgICAgICAgICAgICBhdHRhY2htZW50LkltYWdlSGVpZ2h0UHggPSBpbWcuaGVpZ2h0O1xyXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnQuQXR0YWNobWVudEZpZWxkVHlwZSA9IEF0dGFjaG1lbnRGaWVsZFR5cGVFbnVtLkVMRU5DT19JTU1BR0lOSTtcclxuICAgICAgICAgICAgICBpZiAoc2VsZi5pbWFnZVNlbGVjdG9yQXR0YWNobWVudHMpeyBzZWxmLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cy5yZWxvYWREYXRhKCk7IH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICB9XHJcblxyXG4gIGNhdGNoQnV0dG9uSW1hZ2VDaGFuZ2UoYXR0YWNobWVudHM6IEFycmF5PElBdHRhY2htZW50RFRPPikge1xyXG5cclxuICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkR5bkF0dGFjaG1lbnQgPSBhdHRhY2htZW50c1sxXSBhcyBEeW5BdHRhY2htZW50O1xyXG5cclxuICAgICAgaWYgKHRoaXMuZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsICYmIHR5cGVvZiB0aGlzLmZpZWxkLkR5bkF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9PSBcInVuZGVmaW5lZFwiKXtcclxuXHJcbiAgICAgICAgdmFyIG15QmFzZTY0ID0gXCJkYXRhOmltYWdlL1wiK3RoaXMuZmllbGQuRHluQXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkrXCI7YmFzZTY0LFwiICsgdGhpcy5maWVsZC5EeW5BdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0O1xyXG4gICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAgICAgaW1nLnNyYyA9IG15QmFzZTY0O1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsZnVuY3Rpb24oKXtcclxuICAgICAgICAgIHNlbGYuZmllbGQuRHluQXR0YWNobWVudC5JbWFnZVdpZHRoUHggPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICBzZWxmLmZpZWxkLkR5bkF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICBzZWxmLmZpZWxkLkR5bkF0dGFjaG1lbnQuQXR0YWNobWVudEZpZWxkVHlwZSA9IEF0dGFjaG1lbnRGaWVsZFR5cGVFbnVtLklNTUFHSU5FO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSAgICAgIFxyXG4gICAgICBcclxuICB9ICBcclxuXHJcbiAgY2F0Y2hCdXR0b25JbWFnZVdpdGhNYXJrZXJzQ2hhbmdlKGF0dGFjaG1lbnRzOiBBcnJheTxJQXR0YWNobWVudERUTz4pIHtcclxuXHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZVdpdGhNYXJrZXJzRmllbGQpLkR5bkF0dGFjaG1lbnQgPSBhdHRhY2htZW50c1sxXSBhcyBEeW5BdHRhY2htZW50O1xyXG5cclxuICAgICAgaWYgKHRoaXMuZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsICYmIHR5cGVvZiB0aGlzLmZpZWxkLkR5bkF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9PSBcInVuZGVmaW5lZFwiKXtcclxuXHJcbiAgICAgICAgdmFyIG15QmFzZTY0ID0gXCJkYXRhOmltYWdlL1wiK3RoaXMuZmllbGQuRHluQXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkrXCI7YmFzZTY0LFwiICsgdGhpcy5maWVsZC5EeW5BdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0O1xyXG4gICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAgICAgaW1nLnNyYyA9IG15QmFzZTY0O1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsZnVuY3Rpb24oKXtcclxuICAgICAgICAgIHNlbGYuZmllbGQuRHluQXR0YWNobWVudC5JbWFnZVdpZHRoUHggPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICBzZWxmLmZpZWxkLkR5bkF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICBzZWxmLmZpZWxkLkR5bkF0dGFjaG1lbnQuQXR0YWNobWVudEZpZWxkVHlwZSA9IEF0dGFjaG1lbnRGaWVsZFR5cGVFbnVtLklNTUFHSU5FX0NPTl9NQVJLRVJTO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSAgICAgIFxyXG4gICAgICBcclxuICB9ICAgIFxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hpYW1hdG8gYWwga2V5dXAgZGVnbGkgaW5wdXQgdGVzdHVhbGkgY2hlIHByZXZlZG9ubyBsJ2FnZ2l1bnRhIGRlbCB2YWxvcmUgaW5zZXJpdG8gaW4gdW4gYXJyYXkuXHJcbiAgICogU2UgbCd1dGVudGUgcHJlbWUgaWwgdGFzdG8gaW52aW8sIGluIGJhc2UgYWwgdGlwbyBkaSBjYW1wbyBjaGUgc3RhIGluc2VyZW5kby9tb2RpZmljYW5kbywgcXVlc3RvIG1ldG9kb1xyXG4gICAqIGFnZ2l1bmdlIGlsIHZhbG9yZSBpbnNlcml0byBkYWxsJ3V0ZW50ZSBuZWxsYSBsaXN0YSBkaSBzdHJpbmdoZSBjb3JyZXR0YSAoaW4gaW5wdXQgdmllbmUgcGFzc2F0byBpbCBub21lXHJcbiAgICogZGVsbGEgcHJvcHJpZXTDoCBpbiBjdWkgaW5zZXJpcmUgbGEgc3RyaW5nYSkuXHJcbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBjaGUgcmFwcHJlc2VudGEgaWwga2V5dXAgZGVsbCd1dGVudGVcclxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIE5vbWUgZGVsbGEgcHJvcHJpZXTDoCBkZWwgZmllbGQgaW4gY3VpIGluc2VyaXJlIGxhIHN0cmluZ2EgZGlnaXRhdGEuXHJcbiAgICovXHJcbiAgb25NdWx0aVNlbGVjdElucHV0S2V5dXAoZXZlbnQsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gXCJFbnRlclwiIHx8IGV2ZW50LmNvZGUgPT09IFwiTnVtcGFkRW50ZXJcIikge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkxvb2t1cDpcclxuICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW0uQWxsZWdhdG86XHJcbiAgICAgICAgICBpZiAoIXRoaXMuZmllbGRbcHJvcGVydHlOYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpZWxkW3Byb3BlcnR5TmFtZV0gPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5maWVsZFtwcm9wZXJ0eU5hbWVdLnB1c2goZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lIGNvbiBtYXJrZXJzXCJdOlxyXG4gICAgICAgICAgICBicmVhazsgICAgICAgICAgXHJcbiAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkltbWFnaW5lOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOlxyXG4gICAgICAgICAgaWYgKCF0aGlzLmtleVZhbHVlT2JqZWN0LmtleSB8fCAhdGhpcy5rZXlWYWx1ZU9iamVjdC52YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoISh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKSB7XHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzID0ge307XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1t0aGlzLmtleVZhbHVlT2JqZWN0LmtleV0gPVxyXG4gICAgICAgICAgICB0aGlzLmtleVZhbHVlT2JqZWN0LnZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5rZXlWYWx1ZU9iamVjdCA9IHsga2V5OiBcIlwiLCB2YWx1ZTogXCJcIiB9O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hpYW1hdG8gcGVyIG1vc3RyYXJlIGNvbWUgZWxlbmNvIGxlIG9wemlvbmkgYWdnaXVudGUgaW4gdW4gY2FtcG8gZGkgdGlwbyBcIkVsZW5jbyBnZW5lcmljb1wiLlxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIGFycmF5IGRpIG9nZ2V0dGkgZGVsIHRpcG8geyBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9IGNvbiBpIHZhbG9yaSBpbnNlcml0aSBkYWxsJ3V0ZW50ZS5cclxuICAgKi9cclxuICBnZXREaWN0aW9uYXJ5S2V5VmFsdWUoKSB7XHJcbiAgICBpZiAoKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKCh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKS5tYXAoKGspID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAga2V5OiBrLFxyXG4gICAgICAgICAgdmFsdWU6ICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaW11b3ZlcmUgdW5hIG9wemlvbmUgYWdnaXVudGEgYWwgY2FtcG8gZGkgdGlwbyBcIkVsZW5jbyBnZW5lcmljb1wiXHJcbiAgICogQHBhcmFtIGtleSBOb21lIGRlbGxhIGNoaWF2ZSBkYSByaW11b3ZlcmVcclxuICAgKi9cclxuICBkZWxldGVLZXlGcm9tRGljdGlvbmFyeShrZXk6IHN0cmluZykge1xyXG4gICAgZGVsZXRlICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tleV07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgcGVyIGFnZ2l1bmdlcmUvbW9kaWZpY2FyZSB1biBtZXRhZGF0YSBpbiB1biBjYW1wbyBkaSB0aXBvIEFsbGVnYXRvIG8gSW1tYWdpbmUuXHJcbiAgICogQHBhcmFtIG1ldGFkYXRhIE1ldGFkYXRhIGRhIG1vZGlmaWNhcmUsIHNlIG51bGwgYWxsb3JhIG5lIHN0byBjcmVhbmRvIHVubyBudW92by5cclxuICAgKi9cclxuICAvLyBvcGVuTWV0YWRhdGFEaWFsb2coZmllbGQ6IEJhc2VGaWVsZCA9IG51bGwpIHtcclxuICAvLyAgIGlmIChmaWVsZCkge1xyXG4gIC8vICAgICBpZiAodGhpcy5maWVsZC5GaWVsZFR5cGUgPT09IEZpZWxkVHlwZUVudW0uQWxsZWdhdG8pIHtcclxuICAvLyAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRNZXRhZGF0YSA9ICh0aGlzLmZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuTWV0YWRhdGFGaWVsZHMuaW5kZXhPZihmaWVsZCk7XHJcbiAgLy8gICAgICAgdGhpcy5zZWxlY3RlZE1ldGFkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmaWVsZCkpO1xyXG4gIC8vICAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGQuRmllbGRUeXBlID09PSBGaWVsZFR5cGVFbnVtLkltbWFnaW5lKSB7XHJcbiAgLy8gICAgICAgdGhpcy5pbmRleFNlbGVjdGVkTWV0YWRhdGEgPSAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzLmluZGV4T2YoZmllbGQpO1xyXG4gIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRNZXRhZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZmllbGQpKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgdGhpcy5zZWxlY3RlZE1ldGFkYXRhID0gbmV3IEJhc2VGaWVsZCgpO1xyXG4gIC8vICAgICB0aGlzLmluZGV4U2VsZWN0ZWRNZXRhZGF0YSA9IG51bGw7XHJcbiAgLy8gICB9XHJcbiAgLy8gICB0aGlzLmRpYWxvZ01ldGFkYXRhUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ01ldGFkYXRhLCB7XHJcbiAgLy8gICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAvLyAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgLy8gICAgIHdpZHRoOiAnNzUlJ1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyNyZWdpb24gb3BlbkZvcm11bGFEaWFsb2dcclxuICBvcGVuRm9ybXVsYURpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nRm9ybXVsYVJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGb3JtdWxhLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZmllbGRzOiB0aGlzLmF2YWlsYWJsZUZpZWxkcyxcclxuICAgICAgICBmb3JtdWxhOiB0aGlzLmZpZWxkLkZvcm11bGEsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlhbG9nRm9ybXVsYVJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuZmllbGQuRm9ybXVsYSA9IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCkgPT0gXCJcIiA/IG51bGwgOiByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuRm9ybXVsYURpYWxvZ1xyXG5cclxuICAvLyNyZWdpb24gb3BlblZpc2libGVJZkRpYWxvZ1xyXG4gIG9wZW5WaXNpYmxlSWZEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1Zpc2libGVJZlJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGb3JtdWxhLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZmllbGRzOiB0aGlzLmF2YWlsYWJsZUZpZWxkcyxcclxuICAgICAgICBmb3JtdWxhOiB0aGlzLmZpZWxkLlZpc2libGVJZixcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kaWFsb2dWaXNpYmxlSWZSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLmZpZWxkLlZpc2libGVJZiA9IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCkgPT0gXCJcIiA/IG51bGwgOiByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuVmlzaWJsZUlmRGlhbG9nXHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuQW5zd2VyU3R5bGVWaXNpYmxlSWZEaWFsb2dcclxuICBvcGVuQW5zd2VyU3R5bGVWaXNpYmxlSWZEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1Zpc2libGVJZlJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGb3JtdWxhLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZmllbGRzOiB0aGlzLmF2YWlsYWJsZUZpZWxkcyxcclxuICAgICAgICBmb3JtdWxhOiB0aGlzLmZpZWxkLkFuc3dlclN0eWxlLlZpc2libGVJZixcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kaWFsb2dWaXNpYmxlSWZSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLmZpZWxkLkFuc3dlclN0eWxlLlZpc2libGVJZiA9IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCkgPT0gXCJcIiA/IG51bGwgOiByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuQW5zd2VyU3R5bGVWaXNpYmxlSWZEaWFsb2dcclxuXHJcbiAgc3RyaW5nU2FuaXRpemVyKHZhbHVlKSB7XHJcbiAgICBpZiAoIVV0aWxpdHlIZWxwZXJTZXJ2aWNlLnN0cmluZ0NoZWNrUGFyZW50ZXNpcyh2YWx1ZSkpIHtcclxuICAgICAgLy8gYWxlcnQoXCJlcnJvcmUhXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gZGFsbCdvdXRwdXQgZGFsIGRpYWxvZyBwZXIgYWdnaXVuZ2VyZS9tb2RpZmljYXJlIHVuIG1ldGFkYXRhXHJcbiAgICogbmVpIGNhbXBpIGRpIHRpcG8gQWxsZWdhdG8gbyBJbW1hZ2luZS4gUHJpbWEgZGkgYWdnaXVuZ2VyZSBpbCBtZXRhZGF0YSBuZWxsJ2VsZW5jb1xyXG4gICAqIGNvbnRvbGxhIHNlIGVzaXN0ZSB1biBhbHRybyBtZXRhZGF0YSBjb24gbG8gc3Rlc3NvIG5vbWUgZSBuZWwgY2FzbyBnZW5lcmEgdW4gZXJyb3JlXHJcbiAgICogKGkgbWV0YWRhdGEsIGNvbWUgcGVyIGkgY2FtcGkgZGVsbGEgZm9ybSwgZGV2b25vIGF2ZXJlIHVuIG5vbWUgdW5pdm9jbykuXHJcbiAgICogQHBhcmFtIG1ldGFkYXRhIE1ldGFkYXRhIGFnZ2l1bnRvIG8gbW9kaWZpY2F0bywgc2UgbnVsbCBhbGxvcmEgaWwgZGlhbG9nIMOoIHN0YXRvIGNoaXVzbyBzZW56YSBmYXJlIG1vZGlmaWNoZS5cclxuICAgKi9cclxuICAvLyBvblNhdmVNZXRhZGF0YShtZXRhZGF0YTogQmFzZUZpZWxkKSB7XHJcbiAgLy8gICBpZiAobWV0YWRhdGEpIHtcclxuICAvLyAgICAgaWYgKFxyXG4gIC8vICAgICAgICh0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PT0gRmllbGRUeXBlRW51bS5BbGxlZ2F0b1xyXG4gIC8vICAgICAgICAgJiYgKHRoaXMuZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5NZXRhZGF0YUZpZWxkc1xyXG4gIC8vICAgICAgICAgJiYgKHRoaXMuZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5NZXRhZGF0YUZpZWxkcy5maW5kKFxyXG4gIC8vICAgICAgICAgICAobSwgaSkgPT4gbS5MYWJlbCA9PT0gbWV0YWRhdGEuTGFiZWxcclxuICAvLyAgICAgICAgICAgICAmJiAodGhpcy5pbmRleFNlbGVjdGVkTWV0YWRhdGEgPT0gbnVsbCA/IHRydWUgOiB0aGlzLmluZGV4U2VsZWN0ZWRNZXRhZGF0YSAhPT0gaSlcclxuICAvLyAgICAgICAgIClcclxuICAvLyAgICAgICApIHx8XHJcbiAgLy8gICAgICAgKHRoaXMuZmllbGQuRmllbGRUeXBlID09PSBGaWVsZFR5cGVFbnVtLkltbWFnaW5lXHJcbiAgLy8gICAgICAgICAmJiAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzXHJcbiAgLy8gICAgICAgICAmJiAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzLmZpbmQoXHJcbiAgLy8gICAgICAgICAgIChtLCBpKSA9PiBtLkxhYmVsID09PSBtZXRhZGF0YS5MYWJlbFxyXG4gIC8vICAgICAgICAgICAgICYmICh0aGlzLmluZGV4U2VsZWN0ZWRNZXRhZGF0YSA9PSBudWxsID8gdHJ1ZSA6IHRoaXMuaW5kZXhTZWxlY3RlZE1ldGFkYXRhICE9PSBpKVxyXG4gIC8vICAgICAgICAgKVxyXG4gIC8vICAgICAgIClcclxuICAvLyAgICAgKSB7XHJcbiAgLy8gICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZygnSW1wb3NzaWJpbGUgaW5zZXJpcmUgZHVlIG1ldGFkYXRhIGNvbiBsYSBzdGVzc2EgbGFiZWwuJyk7XHJcbiAgLy8gICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgbWV0YWRhdGEgY29uIGxhIHN0ZXNzYSBsYWJlbC4nKTtcclxuICAvLyAgICAgfVxyXG5cclxuICAvLyAgICAgaWYgKHRoaXMuaW5kZXhTZWxlY3RlZE1ldGFkYXRhICE9IG51bGwgJiYgdGhpcy5pbmRleFNlbGVjdGVkTWV0YWRhdGEgPj0gMCkge1xyXG4gIC8vICAgICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PT0gRmllbGRUeXBlRW51bS5BbGxlZ2F0bykge1xyXG4gIC8vICAgICAgICAgKHRoaXMuZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5NZXRhZGF0YUZpZWxkc1t0aGlzLmluZGV4U2VsZWN0ZWRNZXRhZGF0YV0gPSBtZXRhZGF0YTtcclxuICAvLyAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGQuRmllbGRUeXBlID09PSBGaWVsZFR5cGVFbnVtLkltbWFnaW5lKSB7XHJcbiAgLy8gICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZE1ldGFkYXRhXSA9IG1ldGFkYXRhO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICBpZiAodGhpcy5maWVsZC5GaWVsZFR5cGUgPT09IEZpZWxkVHlwZUVudW0uQWxsZWdhdG8pIHtcclxuICAvLyAgICAgICAgIGlmICghKHRoaXMuZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5NZXRhZGF0YUZpZWxkcykge1xyXG4gIC8vICAgICAgICAgICAodGhpcy5maWVsZCBhcyBBdHRhY2htZW50RmllbGQpLk1ldGFkYXRhRmllbGRzID0gbmV3IEFycmF5PEJhc2VGaWVsZD4oKTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgICh0aGlzLmZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuTWV0YWRhdGFGaWVsZHMucHVzaChtZXRhZGF0YSk7XHJcbiAgLy8gICAgICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PT0gRmllbGRUeXBlRW51bS5JbW1hZ2luZSkge1xyXG4gIC8vICAgICAgICAgaWYgKCEodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzKSB7XHJcbiAgLy8gICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uTWV0YWRhdGFGaWVsZHMgPSBuZXcgQXJyYXk8QmFzZUZpZWxkPigpO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5NZXRhZGF0YUZpZWxkcy5wdXNoKG1ldGFkYXRhKTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyAgIHRoaXMuZGlhbG9nTWV0YWRhdGFSZWYuY2xvc2UoKTtcclxuICAvLyAgIHRoaXMuc2V0TWV0YWRhdGFPcmRpbmFsUG9zaXRpb24oKTtcclxuICAvLyAgIHRoaXMucmVsb2FkTWV0YWRhdGFUYWJsZSgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8jcmVnaW9uIGRpc2FibGVTYXZlRmllbGRcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGRpc2FiaWxpdGFyZSBpbCBwdWxzYW50ZSBwZXIgc2FsdmFyZSBpbCBjYW1wbyBpbnNlcml0by9tb2RpZmljYXRvLlxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIGJvb2xlYW5vLCBzZSB0cnVlIGlsIHNhbHZhdGFnZ2lvIHZpZW5lIGRpc2FiaWxpdGF0by5cclxuICAgKi9cclxuICBkaXNhYmxlU2F2ZUZpZWxkKCk6IGJvb2xlYW4ge1xyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkRm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLmZpZWxkLkZpZWxkVHlwZSkge1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Gb3JtdWxhICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLkZvcm11bGEgIT0gXCJcIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKCEodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycykge1xyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycyA9IHt9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmcgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmcgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlU3RyaW5nICE9IFwiXCIpe1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgISh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzIHx8XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycy5sZW5ndGggPT09IDBcclxuICAgICAgICApO1xyXG4gICAgICAgIFxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gaW1tYWdpbmlcIl06IFxyXG5cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICAhKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5BdHRhY2htZW50TGlzdCB8fFxyXG4gICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuQXR0YWNobWVudExpc3QubGVuZ3RoID09PSAwIHx8XHJcbiAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5BdHRhY2htZW50TGlzdC5maW5kKFxyXG4gICAgICAgICAgKGkpID0+IChpLkJ1dHRvbktleSA9PSBudWxsIHx8IGkuQnV0dG9uS2V5ID09PSBcInVuZGVmaW5lZFwiIHx8IGkuQnV0dG9uS2V5ID09ICcnKSB8fCAoaS5CdXR0b25WYWx1ZSA9PSBudWxsIHx8IGkuQnV0dG9uVmFsdWUgPT09IFwidW5kZWZpbmVkXCIgfHwgaS5CdXR0b25WYWx1ZSA9PSAnJylcclxuICAgICAgICApICE9IG51bGxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5Mb29rdXA6XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICEodGhpcy5maWVsZCBhcyBMb29rdXBGaWVsZCkuRmllbGROYW1lcyB8fFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTG9va3VwRmllbGQpLkZpZWxkTmFtZXMubGVuZ3RoID09PSAwXHJcbiAgICAgICAgKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBkaXNhYmxlU2F2ZUZpZWxkXHJcblxyXG4gIC8vI3JlZ2lvbiBzYXZlQW5kRXhpdEFkZEZpZWxkXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGlsIGNhbXBvIGluc2VyaXRvL21vZGlmaWNhdG8uXHJcbiAgICogU2Ugw6ggc3RhdG8gaW5zZXJpdG8gdW4gZmllbGQgY29uIGxhIHN0ZXNzYSBsYWJlbCB2aWVuZSBnZW5lcmF0byB1biBlcnJvcmUgKGxlIGxhYmVsIGRldm9ubyBlc3NlcmUgdW5pdm9jaGUpLlxyXG4gICAqIFVuYSB2b2x0YSBhZ2dpdW50by9hZ2dpb3JuYXRvIGlsIGNhbXBvIG5lbGwnZWxlbmNvIGRlaSBGaWVsZCBkZWxsYSBGb3JtIGNoaXVkZSBpbCBkaWFsb2cgZSByaWNhcmljYSBsYSB0YWJlbGxhXHJcbiAgICogY2hlIG1vc3RyYSBsJ2VsZW5jbyBkZWkgY2FtcGkgYWdnaXVudGkgYWxsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHNhdmVBbmRFeGl0QWRkRmllbGQoc2F2ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKTtcclxuICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIGlmICh0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cyl7IHRoaXMuaW1hZ2VTZWxlY3RvckF0dGFjaG1lbnRzLnJlbG9hZERhdGEoKTsgfVxyXG4gICAgaWYgKHNhdmUpIHtcclxuICAgICAgLy8gcmV0cm9jb21wYXRpYmlsaXTDoCBjb24gdmFsdWVwYWlycyBwZXIgRWxlbmNvIEdlbmVyaWNvXHJcbiAgICAgIGlmKHRoaXMuZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl0pIHtcclxuICAgICAgICBpZigoKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLkZvcm11bGEgJiYgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLkZvcm11bGEgIT0gXCJcIikgfHwgKCh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVN0cmluZyAmJiAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmcgIT0gXCJcIikpe1xyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGltbWFnaW5pXCJdKSB7XHJcbiAgICAgICAgaWYoKCh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuQXR0YWNobWVudExpc3QubGVuZ3RoID4gMCkpe1xyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5BdHRhY2htZW50TGlzdC5mb3JFYWNoKChhdHRhY2htZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnQuUmVzaXplZEltYWdlSGVpZ2h0UHggPSAodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtLkltbWFnaW5lKSB7XHJcbiAgICAgICAgaWYoKCh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkR5bkF0dGFjaG1lbnQgIT0gbnVsbCkpe1xyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRHluQXR0YWNobWVudC5SZXNpemVkSW1hZ2VIZWlnaHRQeCA9ICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gICAgICBcclxuICAgICAgaWYodGhpcy5maWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkltbWFnaW5lIGNvbiBtYXJrZXJzXCJdKSB7XHJcbiAgICAgICAgaWYoKCh0aGlzLmZpZWxkIGFzIEltYWdlV2l0aE1hcmtlcnNGaWVsZCkuRHluQXR0YWNobWVudCAhPSBudWxsKSl7XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZVdpdGhNYXJrZXJzRmllbGQpLkR5bkF0dGFjaG1lbnQuUmVzaXplZEltYWdlSGVpZ2h0UHggPSAodGhpcy5maWVsZCBhcyBJbWFnZVdpdGhNYXJrZXJzRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gICAgICAgICBcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnYWRkLWZvcm0tZmllbGQgc2F2ZScsIHRoaXMuZmllbGQpXHJcbiAgICAgIHRoaXMuc2F2ZUZpZWxkRXZlbnQuZW1pdCh0aGlzLmZpZWxkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2F2ZUZpZWxkRXZlbnQuZW1pdChudWxsKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHNhdmVBbmRFeGl0QWRkRmllbGRcclxuXHJcbiAgLy8jcmVnaW9uIHJlc3RvcmVCYXNlRmllbGRQcm9wZXJ0aWVzXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaXByaXN0aW5hcmUgbCdvZ2dldHRvIGZpZWxkIGFsIGNhbWJpbyBkZWwgdGlwbyBzZWxlemlvbmF0by5cclxuICAgKiBMYXNjaWEgdmFsb3JpenphdGUgc29sbyBsZSBwcm9wcmlldMOgIGRlbGwnb2dnZXR0byBCYXNlRmllbGQgY29tdW5lIGEgdHV0dGkgaSB0aXBpIGRpIGNhbXBvLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVzdG9yZUJhc2VGaWVsZFByb3BlcnRpZXMoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZCkge1xyXG4gICAgICBjb25zdCB0bXBCYXNlRmllbGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmllbGQpKTtcclxuICAgICAgdGhpcy5maWVsZCA9IG5ldyBCYXNlRmllbGQoKTtcclxuICAgICAgdGhpcy5maWVsZC5MYWJlbCA9IHRtcEJhc2VGaWVsZC5MYWJlbDtcclxuICAgICAgdGhpcy5maWVsZC5EZXNjcmlwdGlvbiA9IHRtcEJhc2VGaWVsZC5EZXNjcmlwdGlvbjtcclxuICAgICAgdGhpcy5maWVsZC5SZXF1aXJlZCA9IHRtcEJhc2VGaWVsZC5SZXF1aXJlZDtcclxuICAgICAgdGhpcy5maWVsZC5GaWVsZFR5cGUgPSB0bXBCYXNlRmllbGQuRmllbGRUeXBlO1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm11bGEgPSB0bXBCYXNlRmllbGQuRm9ybXVsYTtcclxuICAgICAgdGhpcy5maWVsZC5Db2xTcGFuU2l6ZXMgPSB0bXBCYXNlRmllbGQuQ29sU3BhblNpemVzO1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSB0bXBCYXNlRmllbGQuSW5MaXN0VmlldztcclxuICAgICAgdGhpcy5maWVsZC5JbnZpc2liaWxpdHkgPSB0bXBCYXNlRmllbGQuSW52aXNpYmlsaXR5O1xyXG4gICAgICB0aGlzLmZpZWxkLlRvb2x0aXAgPSB0bXBCYXNlRmllbGQuVG9vbHRpcDtcclxuICAgICAgdGhpcy5maWVsZC5SZWFkb25seSA9IHRtcEJhc2VGaWVsZC5SZWFkb25seTtcclxuICAgICAgdGhpcy5maWVsZC5GaWVsZEdyb3VwID0gdG1wQmFzZUZpZWxkLkZpZWxkR3JvdXA7XHJcbiAgICAgIHRoaXMuZmllbGQuVmlzaWJsZUlmID0gdG1wQmFzZUZpZWxkLlZpc2libGVJZjtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jcmVnaW9uIHJlc3RvcmVCYXNlRmllbGRQcm9wZXJ0aWVzXHJcblxyXG4gIGNvdW50VmFsdWVQYWlycyh2YWx1ZVBhaXJzKTogbnVtYmVye1xyXG4gICAgaWYodmFsdWVQYWlycyl7XHJcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZVBhaXJzKS5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyZUNvbHVtbnMoKXtcclxuXHJcbiAgICAvLyBMaXN0YSBHZW5lcmljYSBkaSBpbW1hZ2luaVxyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzID0gW107XHJcblxyXG4gICAgICB0aGlzLmNvbmZpZ0NvbHVtbkxpc3RJbWFnZXMucHVzaCh7XHJcbiAgICAgICAga2V5OiAnYWN0aW9uJywgZGlzcGxheTogJycsIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbiwgYnV0dG9uTWVudUljb246ICdtb3JlX3ZlcnQnLCBzdHlsZXM6IHsgZmxleDogJzAgMCA2JScgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IG5hbWU6ICdFbGltaW5hJywgaWNvbjogJ2RlbGV0ZScsIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kZWxldGVMaXN0SW1hZ2UoZWxlbWVudCwgaW5kZXgsIGNvbCkgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJTcG9zdGEgc3VcIixcclxuICAgICAgICAgICAgaWNvbjogXCJhcnJvd191cHdhcmRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMubW92ZUVsZW1lbnQoZWxlbWVudCwgdHJ1ZSksXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiAoZWxlbWVudCkgPT4gdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5pbmRleE9mKGVsZW1lbnQpID09PSAwLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJTcG9zdGEgZ2nDuVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93X2Rvd253YXJkXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIGZhbHNlKSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuaW5kZXhPZihlbGVtZW50KSA+PSB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0Lmxlbmd0aCAtIDEsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF1cclxuICAgICAgfSk7IFxyXG5cclxuICAgIHRoaXMuY29uZmlnQ29sdW1uTGlzdEltYWdlcy5wdXNoKHtcclxuICAgICAga2V5OlwiRmlsZURhdGFCYXNlNjRcIixcclxuICAgICAgZGlzcGxheTogXCJJbW1hZ2luZVwiLFxyXG4gICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgIGV4dGVybmFsVGVtcGxhdGU6IHRoaXMuR2VuZXJpY0xpc3RJbWFnZXNJbWFnZVRlbXBsYXRlLFxyXG4gICAgfSk7ICAgIFxyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICBrZXk6XCJCdXR0b25LZXlcIixcclxuICAgICAgZGlzcGxheTogXCJDaGlhdmVcIixcclxuICAgICAgdHlwZTogVHlwZUNvbHVtbi5FeHRlcm5hbFRlbXBsYXRlLFxyXG4gICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLkdlbmVyaWNMaXN0SW1hZ2VzS2V5VGVtcGxhdGUsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuY29uZmlnQ29sdW1uTGlzdEltYWdlcy5wdXNoKHtcclxuICAgICAga2V5OlwiQnV0dG9uVmFsdWVcIixcclxuICAgICAgZGlzcGxheTogXCJWYWxvcmVcIixcclxuICAgICAgdHlwZTogVHlwZUNvbHVtbi5FeHRlcm5hbFRlbXBsYXRlLFxyXG4gICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLkdlbmVyaWNMaXN0SW1hZ2VzVmFsdWVUZW1wbGF0ZSxcclxuICAgIH0pOyAgIFxyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICBrZXk6XCJJbWFnZVdpZHRoUHhcIixcclxuICAgICAgZGlzcGxheTogXCJMYXJnaGV6emFcIlxyXG4gICAgfSk7ICAgICBcclxuICAgIHRoaXMuY29uZmlnQ29sdW1uTGlzdEltYWdlcy5wdXNoKHtcclxuICAgICAga2V5OlwiSW1hZ2VIZWlnaHRQeFwiLFxyXG4gICAgICBkaXNwbGF5OiBcIkFsdGV6emFcIlxyXG4gICAgfSk7ICAgICAgICAgICAgXHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtb3ZlRWxlbWVudChcclxuICAgIGVsZW1lbnQ6IER5bkF0dGFjaG1lbnQsXHJcbiAgICBtb3ZlVXA6IGJvb2xlYW5cclxuICApIHtcclxuICAgIGNvbnN0IHN0YXJ0aW5nSW5kZXggPSB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0LmluZGV4T2YoZWxlbWVudCk7XHJcbiAgICBjb25zdCBlbmRpbmdJbmRleCA9IHN0YXJ0aW5nSW5kZXggKyAobW92ZVVwID8gLTEgOiAxKTtcclxuXHJcbiAgICB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0LnNwbGljZShzdGFydGluZ0luZGV4LCAxKTtcclxuICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3Quc3BsaWNlKGVuZGluZ0luZGV4LCAwLCBlbGVtZW50KTtcclxuXHJcbiAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICBpZiAodGhpcy5pbWFnZVNlbGVjdG9yQXR0YWNobWVudHMpeyB0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cy5yZWxvYWREYXRhKCk7IH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5BdHRhY2htZW50TGlzdCkge1xyXG4gICAgICB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0LmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgZmllbGQuT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5pbmRleE9mKGZpZWxkKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKXtcclxuICAgIHRoaXMucmVzaXplZEltYWdlc0hlaWdodFB4ID0gdGhpcy5maWVsZC5SZXNpemVkSW1hZ2VzSGVpZ2h0UHg7XHJcbiAgfVxyXG5cclxuICBkZWxldGVMaXN0SW1hZ2UoZWw6IER5bkF0dGFjaG1lbnQsIGk6IG51bWJlciwgY29sOiBudW1iZXIpe1xyXG4gICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkNvbmZpcm0oJ0VsaW1pbmFyZSBxdWVzdGEgaW1tYWdpbmU/JywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3Quc3BsaWNlKGVsLm9yaWdpbmFsSW5kZXgsIDEpO1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cyl7IHRoaXMuaW1hZ2VTZWxlY3RvckF0dGFjaG1lbnRzLnJlbG9hZERhdGEoKTsgfVxyXG5cclxuICAgICB9LCBmYWxzZSwgJ1JpY2hpZXN0YSBjb25mZXJtYScpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlSW1hZ2UoZWw6IER5bkF0dGFjaG1lbnQpe1xyXG4gICAgdGhpcy5maWVsZC5EeW5BdHRhY2htZW50ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIERCIEdFVFRFUlxyXG4gIG9wZW5EQkdldHRlcigpe1xyXG4gICAgaWYgKHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQgIT0gbnVsbCAmJiAhdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy51c2VEeW5hbWljTW9kdWxlTW9jayl7XHJcblxyXG4gICAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5tb2RlID0gUXVlcnlFZGl0b3JNb2RlRW51bS5DT01QT1NFUjtcclxuICAgICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcubG9hZFF1ZXJ5U3RhdHVzZXMgPSB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlO1xyXG5cclxuICAgICAgdGhpcy5kaWFsb2dRRVJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dRRSwge1xyXG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICBwYW5lbENsYXNzOiAncXVlcnktZWRpdG9yLW1vZGFsJyxcclxuICAgICAgICB3aWR0aDogJzkwJSdcclxuICAgICAgfSk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoJy4vYXNzZXRzL21vY2t1cHMvbW9ja2VkRnJvbVF1ZXJ5RWRpdG9yX1FVRVJZX1dJVEhfUVVFU1RJT04udHh0Jywge3Jlc3BvbnNlVHlwZTogJ3RleHQnfSlcclxuICAgICAgLnN1YnNjcmliZShtb2NrZWRGcm9tUXVlcnlFZGl0b3IgPT4ge1xyXG4gICAgICAgIHRoaXMudHJlYXREYXRhRnJvbVF1ZXJ5RWRpdG9yKEpTT04ucGFyc2UobW9ja2VkRnJvbVF1ZXJ5RWRpdG9yKS5QYXJhbXMpO1xyXG4gICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VRRU1vZGFsKCl7XHJcbiAgICB0aGlzLmRpYWxvZ1FFUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCl7XHJcbiAgICBpZiAoZXYuQmVoYXZpb3Vycy5pbmRleE9mKFwic2VuZC1vdXRcIikgIT0gLTEpeyB0aGlzLm91dC5lbWl0KGV2KTsgfVxyXG4gICAgaWYgKGV2LkJlaGF2aW91cnMuaW5kZXhPZihcImNsb3NlLW1vZGFsXCIpICE9IC0xKXsgdGhpcy5jbG9zZVFFTW9kYWwoKTsgfSAgIFxyXG4gICAgaWYgKGV2LkJlaGF2aW91cnMuaW5kZXhPZihcInNhdmUtcXVlcnlcIikgIT0gLTEpeyBcclxuICAgICAgXHJcbiAgICAgIHRoaXMudHJlYXREYXRhRnJvbVF1ZXJ5RWRpdG9yKGV2LlBhcmFtcyk7XHJcblxyXG4gICAgIH1cclxuICB9XHJcblxyXG4gIHRyZWF0RGF0YUZyb21RdWVyeUVkaXRvcihkYXRhOiBhbnkpe1xyXG4gICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSA9IGRhdGE7XHJcbiAgICB0aGlzLmNyZWF0ZUNvbHVtbktleXMoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVDb2x1bW5LZXlzKGRhdGEpe1xyXG4gICAgaWYgKGRhdGEgPT0gbnVsbCAmJiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGwpeyBkYXRhID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZTsgfVxyXG4gICAgaWYgKGRhdGEgIT0gbnVsbCAmJiB0eXBlb2YgZGF0YSAhPSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBkYXRhLnNlbGVjdGVkRmllbGRzICE9IFwidW5kZWZpbmVkXCIpe1xyXG4gICAgICB0aGlzLmNvbHVtbktleXMgPSBuZXcgQXJyYXk8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PigpO1xyXG4gICAgICBkYXRhLnNlbGVjdGVkRmllbGRzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29sdW1uS2V5cy5wdXNoKHtrZXk6IGtleS5EYXRhYmFzZVRhYmxlTmFtZStcIl9cIitrZXkuUHJvcGVydHlOYW1lK1wiX19cIitrZXkuQ3VycmVudFRyYW5zbGF0ZS5yZXBsYWNlKFwiIFwiLFwiX1wiKSwgdmFsdWU6IGtleS5DdXJyZW50VHJhbnNsYXRlfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QWxsTW9kdWxlcygpe1xyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICBQYXJhbU5hbWU6IFwib3JnYWlkXCIsXHJcbiAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5PcmdhSUQsXHJcbiAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QWxsRm9ybUVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBBcnJheTxGb3JtPikgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybXMgPSByZXM7XHJcbiAgICAgICAgdGhpcy5mb3JtcyA9IHRoaXMuZm9ybXMuc29ydCgodW5vLCBkdWUpID0+IHVuby5OYW1lLmxvY2FsZUNvbXBhcmUoZHVlLk5hbWUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5ETUZpZWxkID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5ETU1vZHVsZSA9PSBudWxsICYmIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbCl7XHJcbiAgICAgICAgICB0aGlzLkRNTW9kdWxlID0gdGhpcy5mb3Jtcy5maW5kKHggPT4geC5Db2RlID09IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5ETU1vZHVsZS5GaWVsZHMgPSBKU09OLnBhcnNlKHRoaXMuRE1Nb2R1bGUuSnNvbkZpZWxkcyk7XHJcbiAgICAgICAgICB0aGlzLkRNRmllbGRzID0gbmV3IEFycmF5PHsga2V5OiBzdHJpbmcgfT4oKTtcclxuICAgICAgICAgIHRoaXMuRE1Nb2R1bGUuRmllbGRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ETUZpZWxkcy5wdXNoKHsga2V5OiBlbGVtZW50LlZhbHVlLk5hbWUgfSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLkRNRmllbGRzID0gdGhpcy5ETUZpZWxkcy5zb3J0KCh1bm8sIGR1ZSkgPT4gdW5vLmtleS5sb2NhbGVDb21wYXJlKGR1ZS5rZXkpKTtcclxuICBcclxuICAgICAgICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlICE9IG51bGwpe1xyXG4gICAgICAgICAgICB0aGlzLkRNRmllbGQgPSB0aGlzLkRNRmllbGRzLmZpbmQoeCA9PiB4LmtleSA9PSB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlKTtcclxuICAgICAgICAgIH0gICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4geyB9XHJcbiAgICApOyAgICBcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlRE1Nb2R1bGUoKXtcclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5ETU1vZHVsZVwiLHRoaXMuRE1Nb2R1bGUsdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSk7XHJcbiAgICBpZiAodGhpcy5ETU1vZHVsZSAhPSBudWxsKXtcclxuICAgICAgdGhpcy5ETU1vZHVsZS5GaWVsZHMgPSBKU09OLnBhcnNlKHRoaXMuRE1Nb2R1bGUuSnNvbkZpZWxkcyk7XHJcbiAgICAgIHRoaXMuRE1GaWVsZHMgPSBuZXcgQXJyYXk8eyBrZXk6IHN0cmluZyB9PigpO1xyXG4gICAgICB0aGlzLkRNTW9kdWxlLkZpZWxkcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIHRoaXMuRE1GaWVsZHMucHVzaCh7IGtleTogZWxlbWVudC5WYWx1ZS5OYW1lIH0pO1xyXG4gICAgICB9KTtcclxuICBcclxuICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSA9IHRoaXMuRE1Nb2R1bGUuQ29kZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuRE1Nb2R1bGUgPSBudWxsO1xyXG4gICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5ETUZpZWxkID0gbnVsbDtcclxuICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZURNRmllbGQoKXtcclxuICAgIGlmICh0aGlzLkRNRmllbGQgIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPSB0aGlzLkRNRmllbGQua2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZURNQ29udGVzdHVhbGl6YXRpb24oKXtcclxuICAgIGNvbnNvbGUubG9nKFwib25DaGFuZ2VETUNvbnRlc3R1YWxpemF0aW9uKClcIiwgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb250ZXN0dWFsaXphdGlvbik7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8IS0tIDxkaXYgY2xhc3M9XCJhZGQtZm9ybS1maWVsZCBiaWd3cmFwcGVyXCIgc3R5bGU9XCJtYXgtaGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50OyBvdmVyZmxvdy14OiBoaWRkZW47IG92ZXJmbG93LXk6IGF1dG87XCI+IC0tPlxyXG5cclxuPG1hdC1jYXJkIGNsYXNzPVwiYWRkLWZvcm0tZmllbGRcIj5cclxuICAgIDxtYXQtY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgPG1hdC1jYXJkLXRpdGxlPlxyXG4gICAgICAgICAgICB7e2luZGV4RmllbGQgIT0gbnVsbCAmJiBpbmRleEZpZWxkID49IDAgPyBcIk1vZGlmaWNhXCIgOiBcIkFnZ2l1bmdpXCJ9fSBjYW1wb1xyXG4gICAgICAgIDwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuXHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBjb250YWluZXJDb250ZW50IFwiPlxyXG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBBUkVBIFBSSU5DSVBBTEUgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGVxcC1kZm9ybS1hZGQtZm9ybS1maWVsZC1tYWluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gVElQTyBDQU1QTyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgdGlwb0NhbXBvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndGV4dC1kYW5nZXInOiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRmllbGRUeXBlJ10uc3RhdHVzICE9ICdWQUxJRCcgJiYgZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0ZpZWxkVHlwZSddLnRvdWNoZWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlwbyBjYW1wbyAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbZW51bURhdGFdPVwiRmllbGRUeXBlRW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5GaWVsZFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIiAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uRmllbGRUeXBlQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidGaWVsZFR5cGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbnVtRGF0YVRvRXhjbHVkZV09XCJmaWVsZFR5cGVzVG9FeGNsdWRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBUSVBPIENBTVBPIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBDT0RJQ0UgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndGV4dC1kYW5nZXInOiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTGFiZWwnXS5zdGF0dXMgIT0gJ1ZBTElEJyAmJiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTGFiZWwnXS50b3VjaGVkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGljZSAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiTGFiZWxcIiByZXF1aXJlZCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLkxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5MYWJlbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTGFiZWwnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydMYWJlbCddLmVycm9ycz8uWydyZXF1aXJlZCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmJsaWdhdG9yaW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0xhYmVsJ10uZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2kgcG9zc29ubyBpbnNlcmlyZSBzb2xvIGxldHRlcmUgYS16XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydMYWJlbCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gQ09ESUNFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBERVNDUklaSU9ORSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydEZXNjcmlwdGlvbiddLnN0YXR1cyAhPSAnVkFMSUQnICYmIGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydEZXNjcmlwdGlvbiddLnRvdWNoZWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpemlvbmUgKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJEZXNjcmlwdGlvblwiIGZvcm1Db250cm9sTmFtZT1cIkRlc2NyaXB0aW9uXCIgcmVxdWlyZWQgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLkRlc2NyaXB0aW9uXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuRGVzY3JpcHRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZXJyb3IgKm5nSWY9XCIhZmllbGQuRGVzY3JpcHRpb24udmFsaWQgJiYgZmllbGQuRm9ybUZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5EZXNjcmlwdGlvbl0udG91Y2hlZFwiPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRGVzY3JpcHRpb24nKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydEZXNjcmlwdGlvbiddLmVycm9ycz8uWydyZXF1aXJlZCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmJsaWdhdG9yaW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Rlc2NyaXB0aW9uJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBERVNDUklaSU9ORSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gU0VaSU9ORSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIiAqbmdJZj1cImZvcm1GaWVsZHNHcm91cHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydGaWVsZEdyb3VwJ10uc3RhdHVzICE9ICdWQUxJRCcgJiYgZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0ZpZWxkR3JvdXAnXS50b3VjaGVkIH1cIj5TZXppb25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiZm9ybUZpZWxkc0dyb3Vwc1wiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5GaWVsZEdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidOYW1lJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ05hbWUnXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInRmllbGRHcm91cCdcIiByZXF1aXJlZCAgW2luY2x1ZGVGdWxsT2JqZWN0XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ0ZpZWxkR3JvdXAnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRmllbGRHcm91cCddLmVycm9ycz8uWydyZXF1aXJlZCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iYmxpZ2F0b3Jpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBTRVpJT05FIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBPQkJMSUdBVE9SSU8gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLlJlcXVpcmVkXCIgZm9ybUNvbnRyb2xOYW1lPVwiUmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmJsaWdhdG9yaW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIE9CQkxJR0FUT1JJTyAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gUkVBRE9OTFkgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLlJlYWRvbmx5XCIgZm9ybUNvbnRyb2xOYW1lPVwiUmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkT25seVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gUkVBRE9OTFkgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBBUkVBIFBSSU5DSVBBTEUgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gQVJFQSBUQUJTIC0tPlxyXG4gICAgICAgICAgICAgICAgPG1hdC10YWItZ3JvdXAgY2xhc3M9XCJlcXAtZGZvcm0tYWRkLWZvcm0tZmllbGQtdGFic1wiIG1hdC1zdHJldGNoLXRhYnM9XCJmYWxzZVwiIG1hdC1hbGlnbi10YWJzPVwic3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBTVElMRSBDT01QSUxBWklPTkUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJTdGlsZSBDb21waWxhemlvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIExBUkdIRVpaQSBDQU1QTyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+TGFyZ2hlenphIGNhbXBvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJhdmFpbGFibGVDb2xTcGFuU2l6ZXNDb21waWxhemlvbmVcIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuQ29sU3BhblNpemVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ2tleSdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIid2YWx1ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uQ29sU3BhblNpemVTZWxlY3QoKVwiIFtpc011bHRpU2VsZWN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0NvbFNwYW5TaXplcydcIiBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIExBUkdIRVpaQSBDQU1QTyAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBMQUJFTCBDU1MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBMYWJlbCBjc3MgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkxhYmVsc3R5bGVDU1NcIiBmb3JtQ29udHJvbE5hbWU9XCJMYWJlbHN0eWxlQ1NTXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuTGFiZWxzdHlsZUNTU1wiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkxhYmVsc3R5bGVDU1MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdMYWJlbHN0eWxlQ1NTJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0xhYmVsc3R5bGVDU1MnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gTEFCRUwgQ1NTIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEZJRUxEIENTUyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+IEZpZWxkIGNzcyA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiRmllbGRzdHlsZUNTU1wiIGZvcm1Db250cm9sTmFtZT1cIkZpZWxkc3R5bGVDU1NcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5GaWVsZHN0eWxlQ1NTXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuRmllbGRzdHlsZUNTUylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ0ZpZWxkc3R5bGVDU1MnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRmllbGRzdHlsZUNTUyddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBGSUVMRCBDU1MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gVklTSUJMRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiBhbGlnbi1zZWxmLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIoZmllbGQuVmlzaWJsZUlmICE9IG51bGwgfHwgZmllbGQuVmlzaWJsZUlmICE9IHVuZGVmaW5lZCkgJiYgZmllbGQuVmlzaWJsZUlmICE9ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBhbGlnbi1zZWxmLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLkluTGlzdFZpZXdcIiBmb3JtQ29udHJvbE5hbWU9XCJJbkxpc3RWaWV3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFtkaXNhYmxlZF09XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snSW5MaXN0VmlldyddLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXNpYmlsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFZJU0lCTEUgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gSU5WSVNJQklMRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiBhbGlnbi1zZWxmLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZC5Jbkxpc3RWaWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBhbGlnbi1zZWxmLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXBvIGRpIGludmlzaWJpbGl0w6AgZGVsIGNhbXBvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJmaWVsZEludmlzaWJpbGl0eUVudW1cIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuSW52aXNpYmlsaXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidJbnZpc2liaWxpdHknXCIgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gSU5WSVNJQkxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFZJU0lCTEUgSUYgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBWaXNpYmxlSWYgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIlZpc2libGVJZlwiIGZvcm1Db250cm9sTmFtZT1cIlZpc2libGVJZlwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLlZpc2libGVJZlwiIChjbGljayk9XCJvcGVuVmlzaWJsZUlmRGlhbG9nKClcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5WaXNpYmxlSWYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdWaXNpYmxlSWYnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snVmlzaWJsZUlmJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJWaXNpYmxlSWZcIiBmb3JtQ29udHJvbE5hbWU9XCJWaXNpYmxlSWZcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlZpc2libGVJZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiVmlzaWJsZUlmQXV0b2NvbXBsZXRlXCIgKGtleXVwKT1cInNldFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJzZXRWaXNpYmxlSWZBdXRvY29tcGxldGVPcHRpb25zKG51bGwpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5WaXNpYmxlSWYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI1Zpc2libGVJZkF1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdGlvbi5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gVklTSUJMRSBJRiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBUT09MVElQIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gVG9vbHRpcCA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiVG9vbHRpcFwiIGZvcm1Db250cm9sTmFtZT1cIlRvb2x0aXBcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5Ub29sdGlwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnVG9vbHRpcCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydUb29sdGlwJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JibGlnYXRvcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snVG9vbHRpcCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBUT09MVElQIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFNUSUxFIENPTVBJTEFaSU9ORSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gU1RJTEUgREVMTEEgUklTUFNPVEEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJTdGlsZSBSaXNwb3N0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gTEFSR0hFWlpBIENBTVBPIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5MYXJnaGV6emEgY2FtcG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cImF2YWlsYWJsZUNvbFNwYW5TaXplc1Jpc3Bvc3RhXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNvbFNwYW5TaXplU2VsZWN0KClcIiBbaXNNdWx0aVNlbGVjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidBbnN3ZXJTdHlsZUNvbFNwYW5TaXplcydcIiBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIExBUkdIRVpaQSBDQU1QTyAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBMQUJFTCBDU1MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBMYWJlbCBjc3MgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkFuc3dlclN0eWxlTGFiZWxzdHlsZUNTU1wiIGZvcm1Db250cm9sTmFtZT1cIkFuc3dlclN0eWxlTGFiZWxzdHlsZUNTU1wiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLkFuc3dlclN0eWxlLkxhYmVsc3R5bGVDU1NcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5BbnN3ZXJTdHlsZS5MYWJlbHN0eWxlQ1NTKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTGFiZWxzdHlsZUNTUycpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydBbnN3ZXJTdHlsZUxhYmVsc3R5bGVDU1MnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gTEFCRUwgQ1NTIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEZJRUxEIENTUyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+IEZpZWxkIGNzcyA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiQW5zd2VyU3R5bGVGaWVsZHN0eWxlQ1NTXCIgZm9ybUNvbnRyb2xOYW1lPVwiQW5zd2VyU3R5bGVGaWVsZHN0eWxlQ1NTXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuQW5zd2VyU3R5bGUuRmllbGRzdHlsZUNTU1wiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkFuc3dlclN0eWxlLkZpZWxkc3R5bGVDU1MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGaWVsZHN0eWxlQ1NTJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Fuc3dlclN0eWxlRmllbGRzdHlsZUNTUyddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBGSUVMRCBDU1MgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gVklTSUJMRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiBhbGlnbi1zZWxmLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIoZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmICE9IG51bGwgfHwgZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmICE9IHVuZGVmaW5lZCkgJiYgZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmICE9ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBhbGlnbi1zZWxmLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXdcIiBmb3JtQ29udHJvbE5hbWU9XCJBbnN3ZXJTdHlsZUluTGlzdFZpZXdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydBbnN3ZXJTdHlsZUluTGlzdFZpZXcnXS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaWJpbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBWSVNJQkxFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBJTlZJU0lCSUxFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yIGFsaWduLXNlbGYtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpcG8gZGkgaW52aXNpYmlsaXTDoCBkZWwgY2FtcG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cImZpZWxkSW52aXNpYmlsaXR5RW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5BbnN3ZXJTdHlsZS5JbnZpc2liaWxpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0Fuc3dlclN0eWxlSW52aXNpYmlsaXR5J1wiIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gSU5WSVNJQkxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFZJU0lCTEUgSUYgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBWaXNpYmxlSWYgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkFuc3dlclN0eWxlVmlzaWJsZUlmXCIgZm9ybUNvbnRyb2xOYW1lPVwiQW5zd2VyU3R5bGVWaXNpYmxlSWZcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWZcIiAoY2xpY2spPVwib3BlbkFuc3dlclN0eWxlVmlzaWJsZUlmRGlhbG9nKClcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdWaXNpYmxlSWYnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snQW5zd2VyU3R5bGVWaXNpYmxlSWYnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIlZpc2libGVJZlwiIGZvcm1Db250cm9sTmFtZT1cIlZpc2libGVJZlwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuVmlzaWJsZUlmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJWaXNpYmxlSWZBdXRvY29tcGxldGVcIiAoa2V5dXApPVwic2V0VmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9ucygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cInNldFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnMobnVsbClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLlZpc2libGVJZilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjVmlzaWJsZUlmQXV0b2NvbXBsZXRlPVwibWF0QXV0b2NvbXBsZXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgVmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3B0aW9uLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBWSVNJQkxFIElGIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFNUSUxFIERFTExBIFJJU1BTT1RBIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBTUEVDSUZJQ0hFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiU3BlY2lmaWNoZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRUeXBlRm9ybVRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFNQRUNJRklDSEUgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIE1PREFMSVRBJyBSRUNVUEVSTyBEQVRJIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiTW9kYWxpdMOgIHJlY3VwZXJvIGRhdGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cImRhdGFHZXR0ZXJUeXBlRW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cImZhbHNlXCIgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkRhdGFHZXR0ZXJUeXBlQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidEYXRhR2V0dGVyVHlwZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIiBbaGlkZGVuXT1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgIT0gZGF0YUdldHRlclR5cGVFbnVtLk1hbnVhbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBWYWxvcmUgZGkgRGVmYXVsdCA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJEYXRhR2V0dGVyVmFsdWVcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiIFtoaWRkZW5dPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSAhPSBkYXRhR2V0dGVyVHlwZUVudW0uRm9ybXVsYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+IEZvcm11bGEgKEphdmFzY3JpcHQpIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIkZvcm11bGFcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLkZvcm11bGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Gb3JtdWxhRGlhbG9nKClcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkZvcm11bGEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGb3JtdWxhJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Zvcm11bGEnXS5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmJsaWdhdG9yaW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydGb3JtdWxhJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCIgKm5nSWY9XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IGRhdGFHZXR0ZXJUeXBlRW51bVsnRGEgZGF0YWJhc2UnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtNCBjb25maWd1cmFRdWVyeUVkaXRvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+Q29uZmlndXJhIGluIFF1ZXJ5IEVkaXRvcjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJvcGVuREJHZXR0ZXIoKVwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgPT0gbnVsbFwiPlByb2NlZGk8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cIm9wZW5EQkdldHRlcigpXCIgKm5nSWY9XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSAhPSBudWxsXCI+TW9kaWZpY2E8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+U2VsZXppb25hIGNvbG9ubmE8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiY29sdW1uS2V5c1wiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ2tleSdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIid2YWx1ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBkYXRhR2V0dGVyVHlwZUVudW1bJ0RhIG1vZHVsbyBkaW5hbWljbyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtdC00XCIgKm5nSWY9XCJmb3Jtcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPk1vZHVsbzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW3BsYWNlaG9sZGVyXT1cIidTZWxlemlvbmEgbW9kdWxvJ1wiIFthcnJheURhdGFdPVwiZm9ybXNcIiBbKG5nTW9kZWxJbnB1dCldPVwiRE1Nb2R1bGVcIiBbaXNTZWFyY2hhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidDb2RlJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ05hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0RNTW9kdWxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNoYW5nZURNTW9kdWxlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSAhPSBudWxsICYmIERNTW9kdWxlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPkNhbXBvPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbcGxhY2Vob2xkZXJdPVwiJ1NlbGV6aW9uYSBjYW1wbydcIiBbYXJyYXlEYXRhXT1cIkRNRmllbGRzXCIgWyhuZ01vZGVsSW5wdXQpXT1cIkRNRmllbGRcIiBbaXNTZWFyY2hhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIna2V5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidETUZpZWxkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNoYW5nZURNRmllbGQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPkNhcmRpbmFsaXTDoDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cIkRNR2V0dGVyQ2FyZGluYWxpdGllc1wiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDYXJkaW5hbGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+Q29udGVzdHVhbGl6emF6aW9uZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJjb250ZXN0dWFsaXphdGlvblwiIFthcnJheUtleVByb3BlcnR5XT1cIidlbnRpdHlUYWJsZU5hbWUnXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInZW50aXR5VGFibGVOYW1lJ1wiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb250ZXN0dWFsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwidHJ1ZVwiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25DaGFuZ2VETUNvbnRlc3R1YWxpemF0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gTU9EQUxJVEEnIFJFQ1VQRVJPIERBVEkgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gQVJFQSBUQUJTIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIGxpc3RWYWx1ZUZpZWxkRm9ybVRlbXBsYXRlIHZhbGx1ZXMgLS0+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIGxpc3RWYWx1ZUZpZWxkRm9ybVRlbXBsYXRlIHZhbGx1ZXMgLS0+XHJcblxyXG4gICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgPG1hdC1jYXJkLWZvb3Rlcj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG10LTIgbWItMSBtZS0zXCI+IFxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJidXR0b25zRm9ybWFcIj4gLS0+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gbWF0LXJhaXNlZC1idXR0b24gY2FuY2VsXCIgKGNsaWNrKT1cInNhdmVBbmRFeGl0QWRkRmllbGQoZmFsc2UpXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgQW5udWxsYVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibXItMiBzYXZlXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNhdmVBbmRFeGl0QWRkRmllbGQodHJ1ZSlcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVTYXZlRmllbGQoKVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgICAgICAgIFNhbHZhXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8IS0tIDwvZGl2PiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG48L21hdC1jYXJkPlxyXG5cclxuPCEtLSA8L2Rpdj4gLS0+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIERJIFRFU1RPIC0tPlxyXG48bmctdGVtcGxhdGUgI3RleHRGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDwhLS0jcmVnaW9uIE1BU0NIRVJBIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNlwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+TWFzY2hlcmE8L21hdC1sYWJlbD5cclxuICAgICAgICA8ZXFwLXNlbGVjdCBbZW51bURhdGFdPVwiVGV4dE1hc2tFbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLlRleHRNYXNrXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCJcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidUZXh0TWFzaydcIj5cclxuICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIE1BU0NIRVJBIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFNQRUVDSCBUTyBURVhUIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIiBbaGlkZGVuXT1cImZpZWxkLlJlYWRvbmx5XCI+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5NaWNyb3Bob25lXCIgZm9ybUNvbnRyb2xOYW1lPVwiTWljcm9waG9uZVwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICBTcGVlY2gtVG8tVGV4dFxyXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gU1BFRUNIIFRPIFRFWFQgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gTFVOR0hFWlpBIE1JTklNQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTZcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RleHQtZGFuZ2VyJzogZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01pbkxlbmdodCddLnN0YXR1cyAhPSAnVkFMSUQnICYmIGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNaW5MZW5naHQnXS50b3VjaGVkIH1cIj5cclxuICAgICAgICAgICAgTHVuZ2hlenphIG1pbmltYSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImxlbmd0aE1pblwiIGZvcm1Db250cm9sTmFtZT1cIk1pbkxlbmdodFwiIHR5cGU9XCJudW1iZXJcIiBbbWluXT1cIjBcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5NaW5MZW5naHRcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLk1pbkxlbmdodClcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ01pbkxlbmdodCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNaW5MZW5naHQnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNaW5MZW5naHQnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIExVTkdIRVpaQSBNSU5JTUEgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gTFVOR0hFWlpBIE1BU1NJTUEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02XCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhMZW5naHQnXS5zdGF0dXMgIT0gJ1ZBTElEJyAmJiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWF4TGVuZ2h0J10udG91Y2hlZCB9XCI+XHJcbiAgICAgICAgICAgIEx1bmdoZXp6YSBtYXNzaW1hIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGlkPVwibGVuZ3RoTWF4XCIgZm9ybUNvbnRyb2xOYW1lPVwiTWF4TGVuZ2h0XCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwiMFwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLk1heExlbmdodFwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWF4TGVuZ2h0KVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWF4TGVuZ2h0JykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heExlbmdodCddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heExlbmdodCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gTFVOR0hFWlpBIE1BU1NJTUEgLS0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBESSBURVNUTyAtLT5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBFVElDSEVUVEEgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjbGFiZWxGaWVsZEZvcm1UZW1wbGF0ZT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBFVElDSEVUVEEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTIgIGFsaWduLXNlbGYtY2VudGVyXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPVwiRXRpY2hldHRhXCIgcGxhY2Vob2xkZXI9XCJFdGljaGV0dGFcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJFdGljaGV0dGFcIiBbKG5nTW9kZWwpXT1cImZpZWxkLkV0aWNoZXR0YVwiPjwvdGV4dGFyZWE+XHJcblxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIEVUSUNIRVRUQSAtLT5cclxuXHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBFVElDSEVUVEEgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgQVJFQSBESSBURVNUTyAtLT5cclxuPG5nLXRlbXBsYXRlICN0ZXh0YXJlYUZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPCEtLSNyZWdpb24gUklHSEUgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gUmlnaGUgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwicmlnaGVcIj5cclxuICAgICAgICAgICAgPGlucHV0IGlkPVwicm93c1wiIGZvcm1Db250cm9sTmFtZT1cIlJvd3NcIiB0eXBlPVwibnVtYmVyXCIgW21pbl09XCIwXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5Sb3dzXCJcclxuICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuUm93cylcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ1Jvd3MnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snUm93cyddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ1Jvd3MnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFJJR0hFIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFNwZWVjaFRvVGV4dCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCIgW2hpZGRlbl09XCJmaWVsZC5SZWFkb25seVwiPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiZmllbGQuTWljcm9waG9uZVwiIGZvcm1Db250cm9sTmFtZT1cIk1pY3JvcGhvbmVcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgU3BlZWNoLVRvLVRleHRcclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFNwZWVjaFRvVGV4dCAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBMVU5HSEVaWkEgTUlOSU1BIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IEx1bmdoZXp6YSBtaW5pbWEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJsZW5ndGhNaW5cIiBmb3JtQ29udHJvbE5hbWU9XCJNaW5MZW5naHRcIiB0eXBlPVwibnVtYmVyXCIgW21pbl09XCIwXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuTWluTGVuZ2h0XCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5NaW5MZW5naHQpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdNaW5MZW5naHQnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluTGVuZ2h0J10uZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnNlcmlyZSB1biB2YWxvcmUgbnVtZXJpY28uXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluTGVuZ2h0J10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBMVU5HSEVaWkEgTUlOSU1BIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIExVTkdIRVpaQSBNQVNTSU1BIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IEx1bmdoZXp6YSBtYXNzaW1hIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGlkPVwibGVuZ3RoTWF4XCIgZm9ybUNvbnRyb2xOYW1lPVwiTWF4TGVuZ2h0XCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwiMFwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLk1heExlbmdodFwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWF4TGVuZ2h0KVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWF4TGVuZ2h0JykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heExlbmdodCddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heExlbmdodCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gTFVOR0hFWlpBIE1BU1NJTUEgLS0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBBUkVBIERJIFRFU1RPIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIEJPT0xFQU5JIC0tPlxyXG48bmctdGVtcGxhdGUgI2Jvb2xlYWRGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDwhLS0jcmVnaW9uIEEgVFJFIFNUQVRJIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLklzVHJpc3RhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJJc1RyaXN0YXRlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgIEEgdHJlIHN0YXRpXHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBBIFRSRSBTVEFUSSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBUSVBPIFBSRVNFTlRBWklPTkUgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZGkgcHJlc2VudGF6aW9uZSAqPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cIkJvb2xQcmVzZW50YW50aW9FbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLlByZXNldGF0aW9uVHlwZVwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cImZhbHNlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidQcmVzZXRhdGlvblR5cGUnXCI+XHJcbiAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBUSVBPIFBSRVNFTlRBWklPTkUgLS0+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgQk9PTEVBTkkgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgREFUQSAtLT5cclxuPG5nLXRlbXBsYXRlICNkYXRlRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8IS0tI3JlZ2lvbiBUSVBPIERJIERBVEEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZGkgZGF0YTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJEYXRlVGltZVR5cGVFbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLklzT25seURhdGVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInSXNPbmx5RGF0ZSdcIj5cclxuICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFRJUE8gREkgREFUQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBGT1JNQVRPIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IEZvcm1hdG8gPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRGF0ZUZvcm1hdFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRGF0ZUZvcm1hdFwiXHJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInSW5kaWNhcmUgaWwgZm9ybWF0byBzZWd1ZW5kbyBsYSBndWlkYSBkZWwgcGFjY2hldHRvIG1vbWVudGpzLidcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkZvcm1hdG8pXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGb3JtYXRvJykgfX0gLS0+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIEZPUk1BVE8gLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gREFUQSBNSU5JTUEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBEYXRhIG1pbmltYSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyICpuZ0lmPVwiZmllbGQuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydTb2xvIGRhdGEnXVwiIGNsYXNzPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5NaW5EYXRlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidNaW5EYXRlJ1wiXHJcbiAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGUuREFURVBJQ0tFUlwiIFtvdXRwdXRGb3JtYXRdPVwiJ0REL01NL1lZWVknXCIgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCI+XHJcbiAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlciAqbmdJZj1cImZpZWxkLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnRGF0YSBlIG9yYSddXCIgY2xhc3M9XCJkYXRlXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLk1pbkRhdGVcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ01pbkRhdGUnXCJcclxuICAgICAgICAgICAgW3BpY2tlck1vZGVdPVwibW9kZS5EQVRFVElNRVBJQ0tFUlwiIFtvdXRwdXRGb3JtYXRdPVwiJ0REL01NL1lZWVkgSEg6bW0nXCIgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCI+XHJcbiAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlciAqbmdJZj1cImZpZWxkLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnU29sbyBvcmFyaW8nXVwiIGNsYXNzPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5NaW5EYXRlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidNaW5EYXRlJ1wiXHJcbiAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGUuVElNRVBJQ0tFUlwiIFtvdXRwdXRGb3JtYXRdPVwiJ0hIOm1tJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBEQVRBIE1JTklNQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBEQVRBIE1BU1NJTUEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBEYXRhIG1hc3NpbWEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlciAqbmdJZj1cImZpZWxkLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnU29sbyBkYXRhJ11cIiBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuTWF4RGF0ZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInTWF4RGF0ZSdcIlxyXG4gICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlLkRBVEVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgKm5nSWY9XCJmaWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ0RhdGEgZSBvcmEnXVwiIGNsYXNzPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5NYXhEYXRlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidNYXhEYXRlJ1wiXHJcbiAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGUuREFURVRJTUVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZIEhIOm1tJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgKm5nSWY9XCJmaWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ1NvbG8gb3JhcmlvJ11cIiBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuTWF4RGF0ZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInTWF4RGF0ZSdcIlxyXG4gICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlLlRJTUVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidISDptbSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gREFUQSBNQVNTSU1BIC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgREFUQSAtLT5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBOVU1FUklDSSAtLT5cclxuPG5nLXRlbXBsYXRlICNudW1lcmljRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8IS0tI3JlZ2lvbiBWQUxPUkUgSU5URVJPIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLklzSW50ZWdlclwiIGZvcm1Db250cm9sTmFtZT1cIklzSW50ZWdlclwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICBWYWxvcmUgaW50ZXJvXHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBWQUxPUkUgSU5URVJPIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFNFUEFSQVRPUkUgREVDSU1BTEkgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWZpZWxkLklzSW50ZWdlclwiIGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gU2VwYXJhdG9yZSBkZWNpbWFsaSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJEZWNpbWFsU2VwYXJhdG9yXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EZWNpbWFsU2VwYXJhdG9yXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuRGVjaW1hbFNlcGFyYXRvcilcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ0RlY2ltYWxTZXBhcmF0b3InKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRGVjaW1hbFNlcGFyYXRvciddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgTm9uIMOoIHBvc3NpYmlsZSBpbnNlcmlyZSBkZWkgbnVtZXJpLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0RlY2ltYWxTZXBhcmF0b3InXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFNFUEFSQVRPUkUgREVDSU1BTEkgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gUFJFQ0lTSU9ORSBERUNJTUFMSSAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCIhZmllbGQuSXNJbnRlZ2VyXCIgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBQcmVjaXNpb25lIGRlY2ltYWxpIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIkRlY2ltYWxQcmVjaXNpb25cIiB0eXBlPVwibnVtYmVyXCIgW21pbl09XCIwXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuRGVjaW1hbFByZWNpc2lvblwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuRGVjaW1hbFByZWNpc2lvbilcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ0RlY2ltYWxQcmVjaXNpb24nKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRGVjaW1hbFByZWNpc2lvbiddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0RlY2ltYWxQcmVjaXNpb24nXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFBSRUNJU0lPTkUgREVDSU1BTEkgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gU0VQQVJBVE9SRSBNSUdMSUFJQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBTZXBhcmF0b3JlIG1pZ2xpYWlhIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIlRob3VzYW5kc1NlcGFyYXRvclwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuVGhvdXNhbmRzU2VwYXJhdG9yXCJcclxuICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuVGhvdXNhbmRzU2VwYXJhdG9yKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnVGhvdXNhbmRzU2VwYXJhdG9yJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ1Rob3VzYW5kc1NlcGFyYXRvciddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgTm9uIMOoIHBvc3NpYmlsZSBpbnNlcmlyZSBkZWkgbnVtZXJpLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ1Rob3VzYW5kc1NlcGFyYXRvciddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gU0VQQVJBVE9SRSBNSUdMSUFJQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBTSU1CT0xPIFZBTFVUQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgbWF0VG9vbHRpcD1cIlNpbWJvbG8gcHJpbWEgZGVsIHZhbG9yZVwiXHJcbiAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiZXhhbXBsZS10b29sdGlwLXVwcGVyY2FzZVwiXHJcbiAgICAgICAgPiBTaW1ib2xvIHZhbHV0YSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJDdXJyZW5jeVN5bWJvbFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuQ3VycmVuY3lTeW1ib2xcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5DdXJyZW5jeVN5bWJvbClcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ0N1cnJlbmN5U3ltYm9sJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0N1cnJlbmN5U3ltYm9sJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBTSU1CT0xPIFZBTFVUQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBVTklUQSBESSBNSVNVUkEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgIG1hdFRvb2x0aXA9XCJTaW1ib2xvIGRvcG8gaWwgdmFsb3JlXCJcclxuICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJleGFtcGxlLXRvb2x0aXAtdXBwZXJjYXNlXCJcclxuICAgICAgICA+IFVuaXTDoCBkaSBtaXN1cmEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiTWVhc3VyZVVuaXRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLk1lYXN1cmVVbml0XCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWVhc3VyZVVuaXQpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdNZWFzdXJlVW5pdCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNZWFzdXJlVW5pdCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gVU5JVEEgREkgTUlTVVJBIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFZBTE9SRSBNSU5JTU8gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIG1pbmltbyA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJNaW5WYWx1ZVwiIHR5cGU9XCJudW1iZXJcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLk1pblZhbHVlXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5NaW5WYWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgcGF0dGVybj1cIl4tP1swLTldKygsWzAtOV0rfFxcLlswLTldKyk/JFwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWluVmFsdWUnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluVmFsdWUnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNaW5WYWx1ZSddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gVkFMT1JFIE1JTklNTyAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBWQUxPUkUgTUFTU0lNTyAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBWYWxvcmUgbWFzc2ltbyA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJNYXhWYWx1ZVwiIHR5cGU9XCJudW1iZXJcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLk1heFZhbHVlXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5NYXhWYWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgcGF0dGVybj1cIl4tP1swLTldKygsWzAtOV0rfFxcLlswLTldKyk/JFwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWF4VmFsdWUnKSB9fSAgLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heFZhbHVlJ10uZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnNlcmlyZSB1biB2YWxvcmUgbnVtZXJpY28uXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWF4VmFsdWUnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFZBTE9SRSBNQVNTSU1PIC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgTlVNRVJJQ0kgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgQUxMRUdBVE8gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjYXR0YWNobWVudEZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPCEtLSNyZWdpb24gQUxMRUdBVEkgTVVMVElQTEkgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgIGFsaWduLXNlbGYtY2VudGVyXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiZmllbGQuSXNNdWx0aUF0dGFjaFwiIGZvcm1Db250cm9sTmFtZT1cIklzTXVsdGlBdHRhY2hcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgQWxsZWdhdGkgbXVsdGlwbGlcclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIEFMTEVHQVRJIE1VTFRJUExJIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIEVTVEVOU0lPTkkgQUNDRVRUQVRFIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5Fc3RlbnNpb25pIGFjY2V0dGF0ZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiQXZhaWxhYmxlRmlsZUV4dGVuc2lvbnMuY29uY2F0KEF2YWlsYWJsZUltYWdlRXh0ZW5zaW9ucylcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuQWxsb3dlZEV4dGVuc2lvbnNcIiBbYXJyYXlLZXlQcm9wZXJ0eV09XCIna2V5J1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ3ZhbHVlJ1wiXHJcbiAgICAgICAgICAgIFtpc011bHRpU2VsZWN0XT1cInRydWVcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0FsbG93ZWRFeHRlbnNpb25zJ1wiIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gRVNURU5TSU9OSSBBQ0NFVFRBVEUgLS0+XHJcblxyXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIG10LTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZS1zdGFuZGFyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEVsZW5jbyBtZXRhZGF0YVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IHRleHQtcmlnaHQgYnV0dG9uc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgc2F2ZVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuTWV0YWRhdGFEaWFsb2coKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7XCI+QWdnaXVuZ2kgYWxsZWdhdG88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGVxcC10YWJsZSAjbWV0YWRhdGFGaWVsZHNUYWJsZSBbY3JlYXRlTWF0Q2FyZF09XCJmYWxzZVwiIFtjb2x1bW5zXT1cIm1ldGFkYXRhQ29sdW1uc1wiXHJcbiAgICAgICAgICAgIFtkYXRhXT1cImZpZWxkLk1ldGFkYXRhRmllbGRzXCIgW2VtcHR5VGFibGVNZXNzYWdlXT1cIidOZXNzdW4gbWV0YWRhdGEgaW5zZXJpdG8nXCIgW3NlYXJjaFRleHRdPVwiJ0NlcmNhJ1wiPlxyXG4gICAgICAgIDwvZXFwLXRhYmxlPlxyXG4gICAgPC9kaXY+IC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgQUxMRUdBVE8gLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgTElTVEEgREkgVkFMT1JJIC0tPlxyXG48bmctdGVtcGxhdGUgI2xpc3RWYWx1ZUZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPCEtLSNyZWdpb24gU0NFTFRBIE1VTFRJUExBIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLklzTXVsdGlDaG9pY2hlXCIgZm9ybUNvbnRyb2xOYW1lPVwiSXNNdWx0aUNob2ljaGVcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgU2NlbHRhIG11bHRpcGxhXHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBTQ0VMVEEgTVVMVElQTEEgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gVElQTyBESSBQUkVTRU5UQVpJT05FIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5UaXBvIGRpIHByZXNlbnRhemlvbmUqPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cIkxpc3RQcmVzZW50YXRpb25FbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInUHJlc2VudGF0aW9uTW9kZSdcIlxyXG4gICAgICAgICAgICAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uUHJlc2VudGF0aW9uTW9kZUNoYW5nZSgpXCI+XHJcbiAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBUSVBPIERJIFBSRVNFTlRBWklPTkUgLS0+XHJcblxyXG5cclxuICAgIDwhLS0jcmVnaW9uIEdFU1RJT05FIE9QWklPTkkgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIG10LTJcIj5cclxuXHJcbiAgICAgICAgPG1hdC1sYWJlbD4gYXJlYSBkZWkgdmFsb3JpIGRhIGluc2VyaXJlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IFxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJrZXkxfHZhbHVlMTtrZXkyfHZhbHVlMlwiIFxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5WYWx1ZVN0cmluZ1wiXHJcbiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIiBcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvdGV4dGFyZWE+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiY291bnRWYWx1ZVBhaXJzKGZpZWxkLlZhbHVlUGFpcnMpID4gMFwiPlxyXG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJrZXktdmFsdWUtbGlzdC1zZWN0aW9uLXRpdGxlXCI+IDwvaDQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gTGFiZWwgb3B6aW9uZSAoaW52aW8gcGVyIGNvbmZlcm1hcmUpPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwia2V5VmFsdWVPYmplY3Qua2V5XCIgKGtleXVwKT1cIm9uTXVsdGlTZWxlY3RJbnB1dEtleXVwKCRldmVudCwgbnVsbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+IFZhbG9yZSBvcHppb25lIChpbnZpbyBwZXIgY29uZmVybWFyZSk8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJrZXlWYWx1ZU9iamVjdC52YWx1ZVwiIChrZXl1cCk9XCJvbk11bHRpU2VsZWN0SW5wdXRLZXl1cCgkZXZlbnQsIG51bGwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00ICBhbGlnbi1zZWxmLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci0zXCI+T3B6aW9uaSBpbnNlcml0ZTo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJ2YWx1ZS1wYWlycy1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBrZXlWYWx1ZVBhaXIgb2YgZ2V0RGljdGlvbmFyeUtleVZhbHVlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibXItMVwiIChjbGljayk9XCJkZWxldGVLZXlGcm9tRGljdGlvbmFyeShrZXlWYWx1ZVBhaXIua2V5KVwiPmNsb3NlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiPkxhYmVsOiA8L2I+IHt7a2V5VmFsdWVQYWlyLmtleX19IC0gPGI+VmFsb3JlOiA8L2I+IHt7a2V5VmFsdWVQYWlyLnZhbHVlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PiBcclxuXHJcbiAgICA8L2Rpdj4gICAgXHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBHRVNUSU9ORSBPUFpJT05JIC0tPlxyXG5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIExJU1RBIERJIFZBTE9SSSAtLT5cclxuXHJcblxyXG5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gTElTVEEgSU1NQUdJTkkgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjaW1hZ2VGaWVsZFNlbGVjdG9yRm9ybVRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTMgY29sLXhzLTEyXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPiBBbHRlenphIGluIFBpeGVsIGRlbGxlIGltbWFnaW5pIHNjYWxhdGUgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiIHJlcXVpcmVkIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGNoYW5nZSk9XCJzZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnUmVzaXplZEltYWdlc0hlaWdodFB4JykgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIGNvbC14cy0xMiBjb2wtbWlkZGxlXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLklzTXVsdGlDaG9pY2hlXCIgZm9ybUNvbnRyb2xOYW1lPVwiSXNNdWx0aUNob2ljaGVcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgIFNjZWx0YSBtdWx0aXBsYVxyXG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgPC9kaXY+ICAgICAgICBcclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxlcXAtYXR0YWNobWVudHMgI2ltYWdlU2VsZWN0b3JBdHRhY2htZW50cyBbYXR0YWNobWVudHNMaXN0XT1cImZpZWxkLkF0dGFjaG1lbnRMaXN0XCIgW3Nob3dNYXRDYXJkXT1cImZhbHNlXCIgW2FsbG93T25seUltYWdlc109XCJ0cnVlXCJcclxuICAgIFtpc0Rpc2FibGVkXT1cImZhbHNlXCIgW3Nob3dJbmxpbmVQcmV2aWV3XT1cInRydWVcIiBbbXVsdGlwbGVBdHRhY2htZW50XT1cInRydWVcIiBbc2hvd0hlYWRlcl09XCJmYWxzZVwiXHJcbiAgICBbYWxsb3dlZFR5cGVzXT1cIltBdHRhY2htZW50VHlwZS5GSUxFXVwiIChsb2NhbEVkaXRlZEF0dGFjaG1lbnRzKT1cImNhdGNoQnV0dG9uSW1hZ2VzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgW2F0dGFjaG1lbnRzQ29sdW1uc109XCJjb25maWdDb2x1bW5MaXN0SW1hZ2VzXCI+XHJcbiAgICA8L2VxcC1hdHRhY2htZW50cz5cclxuXHJcbiAgXHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gTElTVEEgSU1NQUdJTkkgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgSU1NQUdJTkUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjaW1hZ2VGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLkVuYWJsZURyYXdpbmdcIiBmb3JtQ29udHJvbE5hbWU9XCJFbmFibGVEcmF3aW5nXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICBJbW1hZ2luZSBkaXNlZ25hYmlsZT9cclxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgIDwvZGl2PiAgIFxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC14cy0xMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD4gQWx0ZXp6YSBpbiBQaXhlbCBkZWxsZSBpbW1hZ2luaSBzY2FsYXRlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiUmVzaXplZEltYWdlc0hlaWdodFB4XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5SZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiByZXF1aXJlZCBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChjaGFuZ2UpPVwic2V0UmVzaXplZEltYWdlc0hlaWdodFB4KClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ1Jlc2l6ZWRJbWFnZXNIZWlnaHRQeCcpIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wteHMtMTJcIiAqbmdJZj1cImZpZWxkLkR5bkF0dGFjaG1lbnQgIT0gbnVsbFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPiBFdGljaGV0dGEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLkR5bkF0dGFjaG1lbnQuQnV0dG9uS2V5XCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC14cy0xMlwiICpuZ0lmPVwiZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IFZhbG9yZSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRHluQXR0YWNobWVudC5CdXR0b25WYWx1ZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+ICBcclxuICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICBcclxuICAgIDwvZGl2PiAgICBcclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC04IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPGVxcC1hdHRhY2htZW50cyBbYXR0YWNobWVudHNMaXN0XT1cIltmaWVsZC5EeW5BdHRhY2htZW50XVwiIFtzaG93TWF0Q2FyZF09XCJmYWxzZVwiIFthbGxvd09ubHlJbWFnZXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtpc0Rpc2FibGVkXT1cImZhbHNlXCIgW3Nob3dJbmxpbmVQcmV2aWV3XT1cInRydWVcIiBbbXVsdGlwbGVBdHRhY2htZW50XT1cImZhbHNlXCIgW3Nob3dIZWFkZXJdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbYWxsb3dlZFR5cGVzXT1cIltBdHRhY2htZW50VHlwZS5GSUxFXVwiXHJcbiAgICAgICAgICAgIChsb2NhbEVkaXRlZEF0dGFjaG1lbnRzKT1cImNhdGNoQnV0dG9uSW1hZ2VDaGFuZ2UoJGV2ZW50KVwiIChvbkRlbGV0ZUF0dGFjaG1lbnQpPVwiZGVsZXRlSW1hZ2UoJGV2ZW50KVwiICNpbWFnZUF0dGFjaG1lbnQ+XHJcbiAgICAgICAgPC9lcXAtYXR0YWNobWVudHM+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZWFkb25seVByb2ZpbGVJbWFnZT5cclxuICAgICAgICAgICAgPGltZyAqbmdJZj1cImZpZWxkLkR5bkF0dGFjaG1lbnRcIlxyXG4gICAgICAgICAgICAgIHNyYz1cImRhdGE6e3tmaWVsZC5EeW5BdHRhY2htZW50LkZpbGVDb250ZW50VHlwZX19O2Jhc2U2NCx7e2ZpZWxkLkR5bkF0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjR9fVwiXHJcbiAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPiAgICAgICAgXHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIElNTUFHSU5FIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIElNTUFHSU5FIENPTiBNQVJLRVJTIC0tPlxyXG48bmctdGVtcGxhdGUgI2ltYWdlV2l0aE1hcmtlcnNGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLXhzLTEyXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPiBBbHRlenphIGluIFBpeGVsIGRlbGxlIGltbWFnaW5pIHNjYWxhdGUgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiIHJlcXVpcmVkIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGNoYW5nZSk9XCJzZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnUmVzaXplZEltYWdlc0hlaWdodFB4JykgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC14cy0xMlwiICpuZ0lmPVwiZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEV0aWNoZXR0YSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRHluQXR0YWNobWVudC5CdXR0b25LZXlcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+ICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLXhzLTEyXCIgKm5nSWY9XCJmaWVsZC5EeW5BdHRhY2htZW50ICE9IG51bGxcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EeW5BdHRhY2htZW50LkJ1dHRvblZhbHVlXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgIFxyXG4gICAgPC9kaXY+ICAgIFxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTggbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8ZXFwLWF0dGFjaG1lbnRzIFthdHRhY2htZW50c0xpc3RdPVwiW2ZpZWxkLkR5bkF0dGFjaG1lbnRdXCIgW3Nob3dNYXRDYXJkXT1cImZhbHNlXCIgW2FsbG93T25seUltYWdlc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiZmFsc2VcIiBbc2hvd0lubGluZVByZXZpZXddPVwidHJ1ZVwiIFttdWx0aXBsZUF0dGFjaG1lbnRdPVwiZmFsc2VcIiBbc2hvd0hlYWRlcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFthbGxvd2VkVHlwZXNdPVwiW0F0dGFjaG1lbnRUeXBlLkZJTEVdXCJcclxuICAgICAgICAgICAgKGxvY2FsRWRpdGVkQXR0YWNobWVudHMpPVwiY2F0Y2hCdXR0b25JbWFnZVdpdGhNYXJrZXJzQ2hhbmdlKCRldmVudClcIiAob25EZWxldGVBdHRhY2htZW50KT1cImRlbGV0ZUltYWdlKCRldmVudClcIiAjaW1hZ2VBdHRhY2htZW50PlxyXG4gICAgICAgIDwvZXFwLWF0dGFjaG1lbnRzPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVhZG9ubHlQcm9maWxlSW1hZ2U+XHJcbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJmaWVsZC5EeW5BdHRhY2htZW50XCJcclxuICAgICAgICAgICAgICBzcmM9XCJkYXRhOnt7ZmllbGQuRHluQXR0YWNobWVudC5GaWxlQ29udGVudFR5cGV9fTtiYXNlNjQse3tmaWVsZC5EeW5BdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0fX1cIlxyXG4gICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT4gICAgICAgIFxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBJTU1BR0lORSBDT04gTUFSS0VSUyAtLT5cclxuXHJcblxyXG5cclxuXHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgTE9PS1VQIC0tPlxyXG48bmctdGVtcGxhdGUgI2xvb2t1cEZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLlVzZUFzR2V0T3JEaXNjYXJkXCIgZm9ybUNvbnRyb2xOYW1lPVwiVXNlQXNHZXRPckRpc2NhcmRcIiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiU2UgdHJ1ZSBsYSBsb29rdXAgdmllbmUgdmlzdWFsaXp6YXRhIGluIHVuYSBtb2RhbGUgcGVyIGxvIHNjZWdsaSBzY2FydGFcIj5cclxuICAgICAgICAgICAgVXNhIHBlciBzY2VnbGkgbyBzY2FydGFcclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBOb21lIGVudGl0w6AgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIG1hdFRvb2x0aXA9XCJOb21lIGRlbGwnZW50aXTDoCByZWxhemlvbmF0YVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRW50aXR5U291cmNlTmFtZVwiIHJlcXVpcmVkIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRW50aXR5U291cmNlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkVudGl0eVNvdXJjZU5hbWUpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRW50aXR5U291cmNlTmFtZScpIH19XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgbXQtMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBOb21pIGRlaSBjYW1waSAoaW52aW8gcGVyIGNvbmZlcm1hcmUpIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkVsZW5jbyBkaSBjYW1waSBvcmRpbmF0byBjaGUgdmVycsOgIHZpc3VhbGl6emF0byBuZWxsYSBsb29rdXAgKHByZW1lcmUgaW52aW8gcGVyIGNvbmZlcm1hcmUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IChrZXl1cCk9XCJvbk11bHRpU2VsZWN0SW5wdXRLZXl1cCgkZXZlbnQsICdGaWVsZE5hbWVzJylcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTggIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTNcIj5Ob21pIHNlbGV6aW9uYXRpOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHRlbnNpb24tY29udGFpbmVyXCIgKm5nRm9yPVwibGV0IGV4dGVuc2lvbiBvZiBmaWVsZC5GaWVsZE5hbWVzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tleHRlbnNpb259fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtbC0xXCIgKGNsaWNrKT1cImZpZWxkLkZpZWxkTmFtZXMuc3BsaWNlKGksMSlcIj5jbG9zZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIExPT0tVUCAtLT5cclxuXHJcbjwhLS0gRElBTE9HIFBFUiBBR0dJVU5HRVJFIFVOIE1FVEFEQVRBIE5FSSBDQU1QSSBESSBUSVBPIEFMTEVHQVRPIE8gSU1NQUdJTkUgLS0+XHJcbjwhLS0gPG5nLXRlbXBsYXRlICNkaWFsb2dNZXRhZGF0YT5cclxuICAgIDxlcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGQgW2ZpZWxkXT1cInNlbGVjdGVkTWV0YWRhdGFcIiBbYXZhaWxhYmxlRmllbGRzXT1cImF2YWlsYWJsZUZpZWxkc1wiXHJcbiAgICAgICAgW2luZGV4RmllbGRdPVwiaW5kZXhTZWxlY3RlZE1ldGFkYXRhXCIgKHNhdmVGaWVsZEV2ZW50KT1cIm9uU2F2ZU1ldGFkYXRhKCRldmVudClcIiBbZmllbGRUeXBlc1RvRXhjbHVkZV09XCJbNiw3LDEwXVwiPlxyXG4gICAgPC9lcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+IC0tPlxyXG5cclxuPG5nLXRlbXBsYXRlICNidXR0b25JbWFnZXNLZXlWYWx1ZUlucHV0Q29sdW1uIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4ge3tjb2wuZGlzcGxheX19IDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJvd1tjb2wua2V5XVwiIHJlcXVpcmVkIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLURJQUxPRyBQRVIgU0VNUExJRklDQVJFIExBIFNDUklUVFVSQSBERUwgQ0FNUE8gRk9STVVMQS0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0Zvcm11bGE+XHJcbiAgICA8ZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtdWxhLWNvbXBvbmVudD5cclxuICAgIDwvZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtdWxhLWNvbXBvbmVudD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjR2VuZXJpY0xpc3RJbWFnZXNJbWFnZVRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8aW1nIHNyYz1cImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsIHt7cm93W2NvbC5rZXldfX1cIiBjbGFzcz1cIkdlbmVyaWNMaXN0SW1hZ2VzSW1hZ2VUZW1wbGF0ZVwiPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNHZW5lcmljTGlzdEltYWdlc0tleVRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gQ2hpYXZlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJvd1tjb2wua2V5XVwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjR2VuZXJpY0xpc3RJbWFnZXNWYWx1ZVRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJvd1tjb2wua2V5XVwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIFFVRVJZIEVESVRPUiAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dRRT5cclxuICAgIDxuZy10ZW1wbGF0ZSBbYXBwRHluYW1pY0xvYWRlcl0gW2RhdGFdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIiAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KTtcIj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiAgIl19
|