UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

358 lines 54.7 kB
var ResourceStringPickerComponent_1; import { __decorate, __metadata } from "tslib"; import { Component, Injector, QueryList, ViewChild, ViewChildren } from '@angular/core'; import { DropdownComponent } from '../dropdown/dropdown.component'; import { SmeInternalFormFieldComponent } from '../form/form-field/form-field.component'; import { ValidationAlertSeverity } from '../form/validation-alert/validation-alert'; import { SmeSchemaProperty } from '../schema/schema-decorator'; import { SchemaFieldLoaderComponentBase, SimplePropertySchemaFieldLoaderComponent } from '../schema/schema-field-host.component'; import { SchemaPrimitiveType } from '../schema/schema-models'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "../form/form-field/form-field-accessor.directive"; import * as i3 from "../form/form-field/form-field-validator.directive"; import * as i4 from "../form/form-field/form-field-async-validator.directive"; import * as i5 from "@angular/common"; import * as i6 from "../dropdown/dropdown.component"; import * as i7 from "../form/validation-alert/validation-alert.component"; import * as i8 from "../data-table/data-table-column.component"; import * as i9 from "../data-table/data-table.component"; import * as i10 from "../tooltip/tooltip.directive"; const _c0 = ["dropDown"]; const _c1 = ["tree"]; const _c2 = ["type", "resource-string-picker"]; function ResourceStringPickerComponent_span_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span", 18); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r0.strings.MsftSmeShell.Angular.Common.Form.Validation.required); } } function ResourceStringPickerComponent_span_4_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "span", 19); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵproperty("title", ctx_r1.details); } } function ResourceStringPickerComponent_sme_tree_table_16_Template(rf, ctx) { if (rf & 1) { const _r9 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "sme-tree-table", 20, 21); i0.ɵɵlistener("selectionChange", function ResourceStringPickerComponent_sme_tree_table_16_Template_sme_tree_table_selectionChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r8.treeSelection = $event); }); i0.ɵɵelement(2, "sme-tree-table-column", 22, 23)(4, "sme-tree-table-column", 24); i0.ɵɵelementEnd(); } if (rf & 2) { const _r7 = i0.ɵɵreference(3); const ctx_r5 = i0.ɵɵnextContext(); i0.ɵɵproperty("items", ctx_r5.treeData)("showLeftMargin", false)("selection", ctx_r5.treeSelection)("defaultSortColumn", _r7)("defaultSortMode", 1); i0.ɵɵadvance(2); i0.ɵɵproperty("getTooltipHandler", ctx_r5.getKeyColumnTooltip); i0.ɵɵadvance(2); i0.ɵɵproperty("getTooltipHandler", ctx_r5.getValueColumnTooltip); } } /* eslint-disable max-len */ /* eslint-enable max-len */ export class ResourceStringPickerLoaderComponent extends SimplePropertySchemaFieldLoaderComponent { } /** @nocollapse */ ResourceStringPickerLoaderComponent.ɵfac = /** @pureOrBreakMyCode */ function () { let ɵResourceStringPickerLoaderComponent_BaseFactory; return function ResourceStringPickerLoaderComponent_Factory(t) { return (ɵResourceStringPickerLoaderComponent_BaseFactory || (ɵResourceStringPickerLoaderComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ResourceStringPickerLoaderComponent)))(t || ResourceStringPickerLoaderComponent); }; }(); /** @nocollapse */ ResourceStringPickerLoaderComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: ResourceStringPickerLoaderComponent, selectors: [["ng-component"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 10, consts: [["type", "resource-string-picker", 3, "ngModel", "name", "label", "readonly", "disabled", "required", "description", "pendingMessage", "customAsyncValidateDisabled", "customAsyncValidateDebounceTime", "ngModelChange", "customValidate", "customAsyncValidate"], ["field", ""]], template: function ResourceStringPickerLoaderComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "sme-form-field", 0, 1); i0.ɵɵlistener("ngModelChange", function ResourceStringPickerLoaderComponent_Template_sme_form_field_ngModelChange_0_listener($event) { return ctx.data = $event; })("customValidate", function ResourceStringPickerLoaderComponent_Template_sme_form_field_customValidate_0_listener($event) { return ctx.resolveFunction(ctx.propertySchema.customValidation)($event); })("customAsyncValidate", function ResourceStringPickerLoaderComponent_Template_sme_form_field_customAsyncValidate_0_listener($event) { return ctx.propertySchema.customAsyncValidation && ctx.resolveFunction(ctx.propertySchema.customAsyncValidation.handler)($event); }); i0.ɵɵelementEnd(); } if (rf & 2) { i0.ɵɵproperty("ngModel", ctx.data)("name", ctx.propertySchema.name)("label", ctx.localize(ctx.propertySchema.label))("readonly", !!ctx.evalExpression(ctx.propertySchema.readonlyCondition))("disabled", !!(ctx.propertySchema.disabledCondition && ctx.evalExpression(ctx.propertySchema.disabledCondition)))("required", ctx.propertySchema.required)("description", ctx.localize(ctx.propertySchema.description))("pendingMessage", ctx.propertySchema.customAsyncValidation && ctx.localize(ctx.propertySchema.customAsyncValidation.pendingMessage))("customAsyncValidateDisabled", ctx.shouldCustomAsyncValidationBeDisabled())("customAsyncValidateDebounceTime", ctx.propertySchema.customAsyncValidation && +ctx.propertySchema.customAsyncValidation.handler); } }, dependencies: function () { return [i1.NgControlStatus, i1.RequiredValidator, i1.NgModel, i2.FormFieldAccessorDirective, i3.FormFieldValidatorDirective, i4.FormFieldAsyncValidatorDirective, ResourceStringPickerComponent]; }, encapsulation: 2 }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ResourceStringPickerLoaderComponent, [{ type: Component, args: [{ template: ` <sme-form-field #field type="resource-string-picker" [(ngModel)]="data" [name]="propertySchema.name" [label]="localize(propertySchema.label)" (customValidate)="resolveFunction(propertySchema.customValidation)($event)" [readonly]="!!evalExpression(propertySchema.readonlyCondition)" [disabled]="!!(propertySchema.disabledCondition && evalExpression(propertySchema.disabledCondition))" [required]="propertySchema.required" [description]="localize(propertySchema.description)" (customAsyncValidate)="propertySchema.customAsyncValidation && resolveFunction(propertySchema.customAsyncValidation.handler)($event)" [pendingMessage]="propertySchema.customAsyncValidation && localize(propertySchema.customAsyncValidation.pendingMessage)" [customAsyncValidateDisabled]="shouldCustomAsyncValidationBeDisabled()" [customAsyncValidateDebounceTime]="propertySchema.customAsyncValidation && +propertySchema.customAsyncValidation.handler" ></sme-form-field> ` }] }], null, null); })(); /** * Accessible json field implementation */ let ResourceStringPickerComponent = ResourceStringPickerComponent_1 = class ResourceStringPickerComponent extends SmeInternalFormFieldComponent { /** * Initializes a new instance of the JsonFormFieldComponent */ constructor(injector) { super(injector); this.resourceStrings = MsftSme.getStrings().MsftSmeShell.Angular.SchemaForm.Editor.ResourceStringPicker; this.isTreeJustOpen = true; this.textBoxHasFocus = false; this.pathToNavigateWhichMissedDueToTreeWasBusy = ''; this.treeData = []; } get treeSelection() { return this.internalTreeSelection; } set treeSelection(treeNodeDataItem) { this.internalTreeSelection = treeNodeDataItem; if (!this.isTreeJustOpen && treeNodeDataItem && !this.textBoxHasFocus) { this.displayValue = treeNodeDataItem.data.path; } } get displayValue() { return this.internalDisplayValue; } set displayValue(value) { this.internalDisplayValue = value; if (this.ngIsInitialized) { if (value) { if (value.indexOf('!') === 0) { this.value = SchemaFieldLoaderComponentBase.resourceActualTextPrefix + value.substring(1); } else { this.value = SchemaFieldLoaderComponentBase.resourceKeyPrefix + value; } } else { this.value = ''; } } } /** * The source name to use for logging */ get logSourceName() { return 'ResouceStringPickerComponent'; } onTextBoxFocused() { this.textBoxHasFocus = true; } onTextBoxBlurred() { this.textBoxHasFocus = false; } onTextChange(text) { this.navigateToTree(text.target.value); } onValueChanged(value) { if (value) { if (value.indexOf(SchemaFieldLoaderComponentBase.resourceKeyPrefix) === 0) { this.internalDisplayValue = value.substring(SchemaFieldLoaderComponentBase.resourceKeyPrefix.length); } else if (value.indexOf(SchemaFieldLoaderComponentBase.resourceActualTextPrefix) === 0) { let actualText = value.substring(SchemaFieldLoaderComponentBase.resourceActualTextPrefix.length); if (actualText[0] !== '!') { actualText = '!' + actualText; } this.internalDisplayValue = actualText; } else { this.internalDisplayValue = 'Error:' + value; } } else { this.internalDisplayValue = ''; } } /** * Creates the idBag used by this component to store unique element ids. * id values will be assigned be the @see BaseComponent super class. */ createIdBag() { return { detailsSpan: '' }; } ngOnInit() { super.ngOnInit(); this.loadResourceStringData(this.strings, this.treeData, ''); this.isTreeJustOpen = true; } getTextBoxTooltip() { if (this.displayValue) { if (this.displayValue[0] === '!') { return this.resourceStrings.ActualTextPrefix + this.displayValue; } else { const localizedText = this.getActualTextByResourceStringKey(this.displayValue); return this.displayValue + ': ' + (localizedText || '[' + this.resourceStrings.InvalidResourceKey + ']'); } } return '[' + this.resourceStrings.NoResourceKeyMessage + ']'; } getKeyColumnTooltip(data) { return data.key; } getValueColumnTooltip(data) { return data.value || ''; } openDropdown(event) { this.dropDownComponent.onToggleClick(event, true); this.isTreeJustOpen = true; setTimeout(() => { this.navigateToTree(this.displayValue); this.isTreeJustOpen = false; }); } navigateToTree(path) { const treeTableComponent = this.treeTableComponents.toArray()[0]; if (treeTableComponent) { if (!(treeTableComponent.nodeNavigatingTask && treeTableComponent.nodeNavigatingTask.isRunning)) { treeTableComponent.navigateByPath(path.split('.'), node => node.data.key, () => { if (this.pathToNavigateWhichMissedDueToTreeWasBusy) { const newPath = this.pathToNavigateWhichMissedDueToTreeWasBusy; this.pathToNavigateWhichMissedDueToTreeWasBusy = ''; this.navigateToTree(newPath); } }, null, 0, true, true); } else { this.pathToNavigateWhichMissedDueToTreeWasBusy = path; } } } /** * Performs validation that is internal to this control * @param c The form control attached to this instance */ validate(c) { if (this.value) { if (this.value.indexOf(SchemaFieldLoaderComponentBase.resourceKeyPrefix) === 0) { const resourceKey = this.value.replace(SchemaFieldLoaderComponentBase.resourceKeyPrefix, ''); if (resourceKey && !this.getActualTextByResourceStringKey(resourceKey)) { return { cannotFindResourceKey: { valid: false, message: this.resourceStrings.CannotFindResourceKey.format(resourceKey), severity: ValidationAlertSeverity.Error } }; } } else if (this.value.indexOf(SchemaFieldLoaderComponentBase.resourceActualTextPrefix) !== 0) { return { notANumber: { valid: false, message: this.resourceStrings.WrongFormatActualText, severity: ValidationAlertSeverity.Error } }; } } return super.validate(c); } loadResourceStringData(resourceStringObject, nodeList, path) { for (const key in resourceStringObject) { if (resourceStringObject.hasOwnProperty(key)) { const node = { data: { key: key, path: path + key } }; if (typeof resourceStringObject[key] === 'object') { node.children = []; this.loadResourceStringData(resourceStringObject[key], node.children, node.data.path + '.'); } else { node.data.value = resourceStringObject[key]; ResourceStringPickerComponent_1.resourceCache[node.data.path] = node.data.value; } nodeList.push(node); } } } getActualTextByResourceStringKey(key) { let result = ''; if (key) { result = ResourceStringPickerComponent_1.resourceCache[key]; } return result; } }; ResourceStringPickerComponent.resourceCache = {}; /** @nocollapse */ ResourceStringPickerComponent.ɵfac = function ResourceStringPickerComponent_Factory(t) { return new (t || ResourceStringPickerComponent)(i0.ɵɵdirectiveInject(i0.Injector)); }; /** @nocollapse */ ResourceStringPickerComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: ResourceStringPickerComponent, selectors: [["sme-form-field", "type", "resource-string-picker"]], viewQuery: function ResourceStringPickerComponent_Query(rf, ctx) { if (rf & 1) { i0.ɵɵviewQuery(_c0, 5); i0.ɵɵviewQuery(_c1, 5); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dropDownComponent = _t.first); i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.treeTableComponents = _t); } }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c2, decls: 20, vars: 23, consts: [["aria-hidden", "true", 1, "sme-arrange-stack-h"], [1, "sme-position-flex-auto"], ["class", "sme-position-flex-none sme-margin-left-xs", 4, "ngIf"], ["class", "sme-position-flex-none sme-icon sme-icon-info sme-margin-left-xs", 3, "title", 4, "ngIf"], [1, "sme-resource-string-picker"], [1, "sme-combobox", "sme-focus-zone", 3, "autoToggle", "disabled"], ["dropDown", ""], ["role", "combobox", 1, "sme-combobox-header", "sme-dropdown-toggle"], ["dropdownHeader", ""], ["type", "text", "spellcheck", "false", "autocapitalize", "off", "autocomplete", "off", 3, "ngModel", "title", "ngModelChange", "focus", "blur", "input"], ["textInput", ""], ["type", "button", "tabindex", "-1", "role", "presentation", "aria-hidden", "true", 1, "sme-button-trigger", "sme-button-auto-width", 3, "click"], [1, "sme-icon", "sme-icon-chevronDown"], [1, "sme-dropdown-content", "sme-theme-light", "sme-border-inset-sm", "sme-border-color-white-80", 3, "id"], [1, "sme-resource-string-picker-tree", "sme-layout-relative"], ["class", "sme-layout-absolute-phone-up sme-position-inset-none", 3, "items", "showLeftMargin", "selection", "defaultSortColumn", "defaultSortMode", "selectionChange", 4, "ngIf"], [1, "sme-screen-reader", 3, "id"], [3, "alert"], [1, "sme-position-flex-none", "sme-margin-left-xs"], [1, "sme-position-flex-none", "sme-icon", "sme-icon-info", "sme-margin-left-xs", 3, "title"], [1, "sme-layout-absolute-phone-up", "sme-position-inset-none", 3, "items", "showLeftMargin", "selection", "defaultSortColumn", "defaultSortMode", "selectionChange"], ["tree", ""], ["field", "key", "header", "Key", "sortable", "true", "width", "60%", 3, "getTooltipHandler"], ["defaultSortColumn", ""], ["field", "value", "header", "Value", "sortable", "true", 3, "getTooltipHandler"]], template: function ResourceStringPickerComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "label", 0)(1, "span", 1); i0.ɵɵtext(2); i0.ɵɵelementEnd(); i0.ɵɵtemplate(3, ResourceStringPickerComponent_span_3_Template, 2, 1, "span", 2); i0.ɵɵtemplate(4, ResourceStringPickerComponent_span_4_Template, 1, 1, "span", 3); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "div", 4)(6, "sme-dropdown", 5, 6)(8, "div", 7, 8)(10, "input", 9, 10); i0.ɵɵlistener("ngModelChange", function ResourceStringPickerComponent_Template_input_ngModelChange_10_listener($event) { return ctx.displayValue = $event; })("focus", function ResourceStringPickerComponent_Template_input_focus_10_listener() { return ctx.onTextBoxFocused(); })("blur", function ResourceStringPickerComponent_Template_input_blur_10_listener() { return ctx.onTextBoxBlurred(); })("input", function ResourceStringPickerComponent_Template_input_input_10_listener($event) { return ctx.onTextChange($event); }); i0.ɵɵelementEnd(); i0.ɵɵelementStart(12, "button", 11); i0.ɵɵlistener("click", function ResourceStringPickerComponent_Template_button_click_12_listener($event) { return ctx.openDropdown($event); }); i0.ɵɵelement(13, "span", 12); i0.ɵɵelementEnd()(); i0.ɵɵelementStart(14, "div", 13)(15, "div", 14); i0.ɵɵtemplate(16, ResourceStringPickerComponent_sme_tree_table_16_Template, 5, 7, "sme-tree-table", 15); i0.ɵɵelementEnd()()()(); i0.ɵɵelementStart(17, "span", 16); i0.ɵɵtext(18); i0.ɵɵelementEnd(); i0.ɵɵelement(19, "sme-validation-alert", 17); } if (rf & 2) { const _r2 = i0.ɵɵreference(7); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx.label); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.required); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.details); i0.ɵɵadvance(2); i0.ɵɵproperty("autoToggle", false)("disabled", ctx.disabled); i0.ɵɵadvance(2); i0.ɵɵattribute("aria-owns", ctx.idBag.dropDownContent)("aria-expanded", _r2.isOpen); i0.ɵɵadvance(2); i0.ɵɵproperty("ngModel", ctx.displayValue)("title", ctx.getTextBoxTooltip()); i0.ɵɵattribute("aria-controls", ctx.idBag.dropDownContent)("aria-label", ctx.label)("disabled", ctx.disabled ? true : null)("aria-describedby", ctx.idBag.detailsSpan)("aria-autocomplete", "none"); i0.ɵɵadvance(2); i0.ɵɵclassProp("sme-toggled", _r2.isOpen); i0.ɵɵattribute("disabled", ctx.disabled ? true : null)("aria-pressed", _r2.isOpen); i0.ɵɵadvance(2); i0.ɵɵproperty("id", ctx.idBag.dropDownContent); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", _r2.isOpen); i0.ɵɵadvance(1); i0.ɵɵproperty("id", ctx.idBag.detailsSpan); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx.details); i0.ɵɵadvance(1); i0.ɵɵproperty("alert", ctx.alert); } }, dependencies: [i5.NgIf, i6.DropdownComponent, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel, i7.ValidationAlertComponent, i8.DataTableColumnComponent, i9.TreeTableComponent, i10.TooltipDirective], styles: [".sme-resource-string-picker-tree[_ngcontent-%COMP%]{height:250px;min-width:450px}div.sme-dropdown-content[_ngcontent-%COMP%]{border-top-width:1px;margin-top:-1px}"] }); ResourceStringPickerComponent = ResourceStringPickerComponent_1 = __decorate([ SmeSchemaProperty({ type: SchemaPrimitiveType.String, format: 'resource-string-picker', description: 'A form editor field control used to pick up resource string', loaderComponent: ResourceStringPickerLoaderComponent, tags: ['form-editor'] }), __metadata("design:paramtypes", [Injector]) ], ResourceStringPickerComponent); export { ResourceStringPickerComponent }; (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ResourceStringPickerComponent, [{ type: Component, args: [{ selector: 'sme-form-field[type="resource-string-picker"]', template: "<label class=\"sme-arrange-stack-h\" aria-hidden=\"true\">\r\n <span class=\"sme-position-flex-auto\">{{label}}</span>\r\n <span class=\"sme-position-flex-none sme-margin-left-xs\" *ngIf=\"required\">{{strings.MsftSmeShell.Angular.Common.Form.Validation.required}}</span>\r\n <span class=\"sme-position-flex-none sme-icon sme-icon-info sme-margin-left-xs\" *ngIf=\"details\" [title]=\"details\"> </span>\r\n</label>\r\n<div class=\"sme-resource-string-picker\">\r\n <sme-dropdown #dropDown [autoToggle]=\"false\" class=\"sme-combobox sme-focus-zone\" [disabled]=\"disabled\">\r\n <div #dropdownHeader role=\"combobox\" class=\"sme-combobox-header sme-dropdown-toggle\"\r\n [attr.aria-owns]=\"idBag.dropDownContent\" [attr.aria-expanded]=\"dropDown.isOpen\">\r\n <input #textInput type=\"text\" [(ngModel)]=\"displayValue\" [attr.aria-controls]=\"idBag.dropDownContent\" [attr.aria-label]=\"label\"\r\n [attr.disabled]=\"disabled ? true : null\" [attr.aria-describedby]=\"idBag.detailsSpan\" [attr.aria-autocomplete]=\"'none'\"\r\n spellcheck=\"false\" autocapitalize=\"off\" autocomplete=\"off\" (focus)=\"onTextBoxFocused()\" (blur)=\"onTextBoxBlurred()\"\r\n [title]=\"getTextBoxTooltip()\" (input)=\"onTextChange($event)\"/>\r\n <button type=\"button\" [attr.disabled]=\"disabled ? true : null\" tabindex=\"-1\" role=\"presentation\" aria-hidden=\"true\" [attr.aria-pressed]=\"dropDown.isOpen\"\r\n [class.sme-toggled]=\"dropDown.isOpen\" class=\"sme-button-trigger sme-button-auto-width\" (click)=\"openDropdown($event)\">\r\n <span class=\"sme-icon sme-icon-chevronDown\"></span>\r\n </button>\r\n </div>\r\n <div class=\"sme-dropdown-content sme-theme-light sme-border-inset-sm sme-border-color-white-80\" [id]=\"idBag.dropDownContent\">\r\n <div class=\"sme-resource-string-picker-tree sme-layout-relative\">\r\n <sme-tree-table #tree *ngIf=\"dropDown.isOpen\" [items]=\"treeData\" class=\"sme-layout-absolute-phone-up sme-position-inset-none\" [showLeftMargin]=\"false\"\r\n [(selection)]=\"treeSelection\" [defaultSortColumn]=\"defaultSortColumn\" [defaultSortMode]=\"1\">\r\n <sme-tree-table-column #defaultSortColumn field=\"key\" header=\"Key\" sortable=\"true\" width=\"60%\" [getTooltipHandler]=\"getKeyColumnTooltip\">\r\n </sme-tree-table-column>\r\n <sme-tree-table-column field=\"value\" header=\"Value\" sortable=\"true\" [getTooltipHandler]=\"getValueColumnTooltip\">\r\n </sme-tree-table-column>\r\n </sme-tree-table>\r\n </div>\r\n </div>\r\n </sme-dropdown>\r\n</div>\r\n<span class=\"sme-screen-reader\" [id]=\"idBag.detailsSpan\">{{details}}</span>\r\n<sme-validation-alert [alert]=\"alert\"></sme-validation-alert>\r\n", styles: [".sme-resource-string-picker-tree{height:250px;min-width:450px}div.sme-dropdown-content{border-top-width:1px;margin-top:-1px}\n"] }] }], function () { return [{ type: i0.Injector }]; }, { dropDownComponent: [{ type: ViewChild, args: ['dropDown'] }], treeTableComponents: [{ type: ViewChildren, args: ['tree'] }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2Utc3RyaW5nLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9zY2hlbWEtZm9ybS9yZXNvdXJjZS1zdHJpbmctcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3NjaGVtYS1mb3JtL3Jlc291cmNlLXN0cmluZy1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUtoRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqSSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztJQ1IxRCxnQ0FBeUU7SUFBQSxZQUFnRTtJQUFBLGlCQUFPOzs7SUFBdkUsZUFBZ0U7SUFBaEUseUZBQWdFOzs7SUFDekksMkJBQXlIOzs7SUFBMUIsc0NBQWlCOzs7O0lBaUJwRyw4Q0FDZ0c7SUFBNUYseVFBQTZCO0lBQzdCLGdEQUN3QixnQ0FBQTtJQUc1QixpQkFBaUI7Ozs7SUFONkIsdUNBQWtCLHlCQUFBLG1DQUFBLDBCQUFBLHNCQUFBO0lBRW1DLGVBQXlDO0lBQXpDLDhEQUF5QztJ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cUM7UUFEbkIsc0RBQXdDLDRCQUFBO1FBSzhCLGVBQTRCO1FBQTVCLDhDQUE0QjtRQUU3RixlQUFxQjtRQUFyQixpQ0FBcUI7UUFXNUIsZUFBd0I7UUFBeEIsMENBQXdCO1FBQUMsZUFBVztRQUFYLGlDQUFXO1FBQzlDLGVBQWU7UUFBZixpQ0FBZTs7QURleEIsNkJBQTZCO0lBWnpDLGlCQUFpQixDQUFDO1FBQ2YsSUFBSSxFQUFFLG1CQUFtQixDQUFDLE1BQU07UUFDaEMsTUFBTSxFQUFFLHdCQUF3QjtRQUNoQyxXQUFXLEVBQUUsNkRBQTZEO1FBQzFFLGVBQWUsRUFBRSxtQ0FBbUM7UUFDcEQsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDO0tBQ3hCLENBQUM7cUNBa0VnQixRQUFRO0dBNURiLDZCQUE2QixDQW1PekM7U0FuT1ksNkJBQTZCO3VGQUE3Qiw2QkFBNkI7Y0FMekMsU0FBUzsyQkFDSSwrQ0FBK0M7MkRBNEJqRCxpQkFBaUI7a0JBRHhCLFNBQVM7bUJBQUMsVUFBVTtZQUliLG1CQUFtQjtrQkFEMUIsWUFBWTttQkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25Jbml0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdHJpbmdzIH0gZnJvbSAnLi4vLi4vZ2VuZXJhdGVkL3N0cmluZ3MnO1xyXG5pbXBvcnQgeyBUcmVlTm9kZURhdGFJdGVtIH0gZnJvbSAnLi4vZGF0YS10YWJsZS9kYXRhLXRhYmxlLWNvbnRyYWN0JztcclxuaW1wb3J0IHsgVHJlZVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eSB9IGZyb20gJy4uL2Zvcm0vdmFsaWRhdGlvbi1hbGVydC92YWxpZGF0aW9uLWFsZXJ0JztcclxuaW1wb3J0IHsgU21lU2NoZW1hUHJvcGVydHkgfSBmcm9tICcuLi9zY2hlbWEvc2NoZW1hLWRlY29yYXRvcic7XHJcbmltcG9ydCB7IFNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50QmFzZSwgU2ltcGxlUHJvcGVydHlTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL3NjaGVtYS9zY2hlbWEtZmllbGQtaG9zdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTY2hlbWFQcmltaXRpdmVUeXBlIH0gZnJvbSAnLi4vc2NoZW1hL3NjaGVtYS1tb2RlbHMnO1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICA8c21lLWZvcm0tZmllbGQgI2ZpZWxkIHR5cGU9XCJyZXNvdXJjZS1zdHJpbmctcGlja2VyXCIgWyhuZ01vZGVsKV09XCJkYXRhXCIgW25hbWVdPVwicHJvcGVydHlTY2hlbWEubmFtZVwiXHJcbiAgICAgICAgW2xhYmVsXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmxhYmVsKVwiXHJcbiAgICAgICAgKGN1c3RvbVZhbGlkYXRlKT1cInJlc29sdmVGdW5jdGlvbihwcm9wZXJ0eVNjaGVtYS5jdXN0b21WYWxpZGF0aW9uKSgkZXZlbnQpXCJcclxuICAgICAgICBbcmVhZG9ubHldPVwiISFldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5yZWFkb25seUNvbmRpdGlvbilcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhIShwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbiAmJiBldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbikpXCJcclxuICAgICAgICBbcmVxdWlyZWRdPVwicHJvcGVydHlTY2hlbWEucmVxdWlyZWRcIiBbZGVzY3JpcHRpb25dPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAoY3VzdG9tQXN5bmNWYWxpZGF0ZSk9XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgcmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5oYW5kbGVyKSgkZXZlbnQpXCJcclxuICAgICAgICBbcGVuZGluZ01lc3NhZ2VdPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmIGxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5wZW5kaW5nTWVzc2FnZSlcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGlzYWJsZWRdPVwic2hvdWxkQ3VzdG9tQXN5bmNWYWxpZGF0aW9uQmVEaXNhYmxlZCgpXCJcclxuICAgICAgICBbY3VzdG9tQXN5bmNWYWxpZGF0ZURlYm91bmNlVGltZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgK3Byb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5oYW5kbGVyXCJcclxuICAgICAgICA+PC9zbWUtZm9ybS1maWVsZD5cclxuICAgIGBcclxufSlcclxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXHJcbmV4cG9ydCBjbGFzcyBSZXNvdXJjZVN0cmluZ1BpY2tlckxvYWRlckNvbXBvbmVudCBleHRlbmRzIFNpbXBsZVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQge1xyXG59XHJcblxyXG4vKipcclxuICogQWNjZXNzaWJsZSBqc29uIGZpZWxkIGltcGxlbWVudGF0aW9uXHJcbiAqL1xyXG5AU21lU2NoZW1hUHJvcGVydHkoe1xyXG4gICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICBmb3JtYXQ6ICdyZXNvdXJjZS1zdHJpbmctcGlja2VyJyxcclxuICAgIGRlc2NyaXB0aW9uOiAnQSBmb3JtIGVkaXRvciBmaWVsZCBjb250cm9sIHVzZWQgdG8gcGljayB1cCByZXNvdXJjZSBzdHJpbmcnLFxyXG4gICAgbG9hZGVyQ29tcG9uZW50OiBSZXNvdXJjZVN0cmluZ1BpY2tlckxvYWRlckNvbXBvbmVudCxcclxuICAgIHRhZ3M6IFsnZm9ybS1lZGl0b3InXVxyXG59KVxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWZvcm0tZmllbGRbdHlwZT1cInJlc291cmNlLXN0cmluZy1waWNrZXJcIl0nLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vcmVzb3VyY2Utc3RyaW5nLXBpY2tlci5jb21wb25lbnQuY3NzJ10sXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmVzb3VyY2Utc3RyaW5nLXBpY2tlci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc291cmNlU3RyaW5nUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQ8c3RyaW5nPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyByZXNvdXJjZUNhY2hlOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcblxyXG4gICAgcHVibGljIHJlc291cmNlU3RyaW5ncyA9IE1zZnRTbWUuZ2V0U3RyaW5nczxTdHJpbmdzPigpLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlJlc291cmNlU3RyaW5nUGlja2VyO1xyXG5cclxuICAgIHByaXZhdGUgaW50ZXJuYWxEaXNwbGF5VmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgaXNUcmVlSnVzdE9wZW4gPSB0cnVlO1xyXG4gICAgcHJpdmF0ZSB0ZXh0Qm94SGFzRm9jdXMgPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIHBhdGhUb05hdmlnYXRlV2hpY2hNaXNzZWREdWVUb1RyZWVXYXNCdXN5ID0gJyc7XHJcbiAgICBwcml2YXRlIGludGVybmFsVHJlZVNlbGVjdGlvbjogVHJlZU5vZGVEYXRhSXRlbTtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRyZWVTZWxlY3Rpb24oKTogVHJlZU5vZGVEYXRhSXRlbSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxUcmVlU2VsZWN0aW9uO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCB0cmVlU2VsZWN0aW9uKHRyZWVOb2RlRGF0YUl0ZW06IFRyZWVOb2RlRGF0YUl0ZW0pIHtcclxuICAgICAgICB0aGlzLmludGVybmFsVHJlZVNlbGVjdGlvbiA9IHRyZWVOb2RlRGF0YUl0ZW07XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc1RyZWVKdXN0T3BlbiAmJiB0cmVlTm9kZURhdGFJdGVtICYmICF0aGlzLnRleHRCb3hIYXNGb2N1cykge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRyZWVOb2RlRGF0YUl0ZW0uZGF0YS5wYXRoO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBAVmlld0NoaWxkKCdkcm9wRG93bicpXHJcbiAgICBwcml2YXRlIGRyb3BEb3duQ29tcG9uZW50OiBEcm9wZG93bkNvbXBvbmVudDtcclxuXHJcbiAgICBAVmlld0NoaWxkcmVuKCd0cmVlJylcclxuICAgIHByaXZhdGUgdHJlZVRhYmxlQ29tcG9uZW50czogUXVlcnlMaXN0PFRyZWVUYWJsZUNvbXBvbmVudD47XHJcblxyXG4gICAgcHVibGljIHRyZWVEYXRhOiBUcmVlTm9kZURhdGFJdGVtW10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsRGlzcGxheVZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBkaXNwbGF5VmFsdWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxEaXNwbGF5VmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5uZ0lzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5kZXhPZignIScpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50QmFzZS5yZXNvdXJjZUFjdHVhbFRleHRQcmVmaXggKyB2YWx1ZS5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudEJhc2UucmVzb3VyY2VLZXlQcmVmaXggKyB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzb3VyY2UgbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBsb2dTb3VyY2VOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiAnUmVzb3VjZVN0cmluZ1BpY2tlckNvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgSnNvbkZvcm1GaWVsZENvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25UZXh0Qm94Rm9jdXNlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRleHRCb3hIYXNGb2N1cyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uVGV4dEJveEJsdXJyZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50ZXh0Qm94SGFzRm9jdXMgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25UZXh0Q2hhbmdlKHRleHQ6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVUb1RyZWUodGV4dC50YXJnZXQudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKFNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50QmFzZS5yZXNvdXJjZUtleVByZWZpeCkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxEaXNwbGF5VmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoU2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnRCYXNlLnJlc291cmNlS2V5UHJlZml4Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZihTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudEJhc2UucmVzb3VyY2VBY3R1YWxUZXh0UHJlZml4KSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGFjdHVhbFRleHQgPSB2YWx1ZS5zdWJzdHJpbmcoU2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnRCYXNlLnJlc291cmNlQWN0dWFsVGV4dFByZWZpeC5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdHVhbFRleHRbMF0gIT09ICchJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbFRleHQgPSAnIScgKyBhY3R1YWxUZXh0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbERpc3BsYXlWYWx1ZSA9IGFjdHVhbFRleHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsRGlzcGxheVZhbHVlID0gJ0Vycm9yOicgKyB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxEaXNwbGF5VmFsdWUgPSAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIHRoZSBpZEJhZyB1c2VkIGJ5IHRoaXMgY29tcG9uZW50IHRvIHN0b3JlIHVuaXF1ZSBlbGVtZW50IGlkcy5cclxuICAgICAqIGlkIHZhbHVlcyB3aWxsIGJlIGFzc2lnbmVkIGJlIHRoZSBAc2VlIEJhc2VDb21wb25lbnQgc3VwZXIgY2xhc3MuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBjcmVhdGVJZEJhZygpOiBNc2Z0U21lLlN0cmluZ01hcDxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkZXRhaWxzU3BhbjogJydcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMubG9hZFJlc291cmNlU3RyaW5nRGF0YSh0aGlzLnN0cmluZ3MsIHRoaXMudHJlZURhdGEsICcnKTtcclxuICAgICAgICB0aGlzLmlzVHJlZUp1c3RPcGVuID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VGV4dEJveFRvb2x0aXAoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNwbGF5VmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzcGxheVZhbHVlWzBdID09PSAnIScpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlU3RyaW5ncy5BY3R1YWxUZXh0UHJlZml4ICsgdGhpcy5kaXNwbGF5VmFsdWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbGl6ZWRUZXh0ID0gdGhpcy5nZXRBY3R1YWxUZXh0QnlSZXNvdXJjZVN0cmluZ0tleSh0aGlzLmRpc3BsYXlWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5VmFsdWUgKyAnOiAnICsgKGxvY2FsaXplZFRleHQgfHwgJ1snICsgdGhpcy5yZXNvdXJjZVN0cmluZ3MuSW52YWxpZFJlc291cmNlS2V5ICsgJ10nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICdbJyArIHRoaXMucmVzb3VyY2VTdHJpbmdzLk5vUmVzb3VyY2VLZXlNZXNzYWdlICsgJ10nO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRLZXlDb2x1bW5Ub29sdGlwKGRhdGE6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGEua2V5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRWYWx1ZUNvbHVtblRvb2x0aXAoZGF0YTogYW55KTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gZGF0YS52YWx1ZSB8fCAnJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3BlbkRyb3Bkb3duKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRyb3BEb3duQ29tcG9uZW50Lm9uVG9nZ2xlQ2xpY2soZXZlbnQsIHRydWUpO1xyXG4gICAgICAgIHRoaXMuaXNUcmVlSnVzdE9wZW4gPSB0cnVlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9UcmVlKHRoaXMuZGlzcGxheVZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5pc1RyZWVKdXN0T3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuYXZpZ2F0ZVRvVHJlZShwYXRoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB0cmVlVGFibGVDb21wb25lbnQgPSB0aGlzLnRyZWVUYWJsZUNvbXBvbmVudHMudG9BcnJheSgpWzBdO1xyXG4gICAgICAgIGlmICh0cmVlVGFibGVDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgaWYgKCEodHJlZVRhYmxlQ29tcG9uZW50Lm5vZGVOYXZpZ2F0aW5nVGFzayAmJiB0cmVlVGFibGVDb21wb25lbnQubm9kZU5hdmlnYXRpbmdUYXNrLmlzUnVubmluZykpIHtcclxuICAgICAgICAgICAgICAgIHRyZWVUYWJsZUNvbXBvbmVudC5uYXZpZ2F0ZUJ5UGF0aChcclxuICAgICAgICAgICAgICAgICAgICBwYXRoLnNwbGl0KCcuJyksXHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9PiBub2RlLmRhdGEua2V5LCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhdGhUb05hdmlnYXRlV2hpY2hNaXNzZWREdWVUb1RyZWVXYXNCdXN5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdQYXRoID0gdGhpcy5wYXRoVG9OYXZpZ2F0ZVdoaWNoTWlzc2VkRHVlVG9UcmVlV2FzQnVzeTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGF0aFRvTmF2aWdhdGVXaGljaE1pc3NlZER1ZVRvVHJlZVdhc0J1c3kgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb1RyZWUobmV3UGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXRoVG9OYXZpZ2F0ZVdoaWNoTWlzc2VkRHVlVG9UcmVlV2FzQnVzeSA9IHBhdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtcyB2YWxpZGF0aW9uIHRoYXQgaXMgaW50ZXJuYWwgdG8gdGhpcyBjb250cm9sXHJcbiAgICAgKiBAcGFyYW0gYyBUaGUgZm9ybSBjb250cm9sIGF0dGFjaGVkIHRvIHRoaXMgaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRlKGM6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUuaW5kZXhPZihTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudEJhc2UucmVzb3VyY2VLZXlQcmVmaXgpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNvdXJjZUtleSA9IHRoaXMudmFsdWUucmVwbGFjZShTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudEJhc2UucmVzb3VyY2VLZXlQcmVmaXgsICcnKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZUtleSAmJiAhdGhpcy5nZXRBY3R1YWxUZXh0QnlSZXNvdXJjZVN0cmluZ0tleShyZXNvdXJjZUtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5ub3RGaW5kUmVzb3VyY2VLZXk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucmVzb3VyY2VTdHJpbmdzLkNhbm5vdEZpbmRSZXNvdXJjZUtleS5mb3JtYXQocmVzb3VyY2VLZXkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6IFZhbGlkYXRpb25BbGVydFNldmVyaXR5LkVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWUuaW5kZXhPZihTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudEJhc2UucmVzb3VyY2VBY3R1YWxUZXh0UHJlZml4KSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBub3RBTnVtYmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5yZXNvdXJjZVN0cmluZ3MuV3JvbmdGb3JtYXRBY3R1YWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eTogVmFsaWRhdGlvbkFsZXJ0U2V2ZXJpdHkuRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3VwZXIudmFsaWRhdGUoYyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkUmVzb3VyY2VTdHJpbmdEYXRhKHJlc291cmNlU3RyaW5nT2JqZWN0OiBhbnksIG5vZGVMaXN0OiBUcmVlTm9kZURhdGFJdGVtW10sIHBhdGg6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJlc291cmNlU3RyaW5nT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNvdXJjZVN0cmluZ09iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlOiBUcmVlTm9kZURhdGFJdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGggKyBrZXlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzb3VyY2VTdHJpbmdPYmplY3Rba2V5XSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUmVzb3VyY2VTdHJpbmdEYXRhKHJlc291cmNlU3RyaW5nT2JqZWN0W2tleV0sIG5vZGUuY2hpbGRyZW4sIG5vZGUuZGF0YS5wYXRoICsgJy4nKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5kYXRhLnZhbHVlID0gcmVzb3VyY2VTdHJpbmdPYmplY3Rba2V5XTtcclxuICAgICAgIC