UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

435 lines (434 loc) 31.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Input, Output, EventEmitter } from '@angular/core'; import { AbstractSimpleDropdown } from './AbstractSimpleDropdown'; import { NeedFocusService } from '../../../service/NeedFocusService.service'; import { I18N } from '../../../decorator/I18N.decorator'; import { Option } from '../../../decorator/Option.decorator'; import { PhloxAppInfoService } from '../../../service/PhloxAppInfoService.service'; var /** @type {?} */ TYPE_NAME = "phx-simple-dropdown"; var SimpleDropdownList = /** @class */ (function (_super) { tslib_1.__extends(SimpleDropdownList, _super); function SimpleDropdownList(needFocusService, elementRef, phloxAppInfoService) { return _super.call(this, needFocusService, elementRef, phloxAppInfoService) || this; } /** * @param {?} inputValue * @param {?} results * @return {?} */ SimpleDropdownList.prototype.onValidationEnd = /** * @param {?} inputValue * @param {?} results * @return {?} */ function (inputValue, results) { }; /** * @param {?} data * @param {?} inputVal * @return {?} */ SimpleDropdownList.prototype.onDataChange = /** * @param {?} data * @param {?} inputVal * @return {?} */ function (data, inputVal) { }; /** * @param {?} oldValue * @param {?} inputVal * @param {?=} data * @return {?} */ SimpleDropdownList.prototype.onDataChangePrevented = /** * @param {?} oldValue * @param {?} inputVal * @param {?=} data * @return {?} */ function (oldValue, inputVal, data) { this._setData(oldValue, true, null, false); }; /** * @param {?} $event * @return {?} */ SimpleDropdownList.prototype.doFocus = /** * @param {?} $event * @return {?} */ function ($event) { if (this.isDisabled()) { $(this.elementRef.nativeElement).find(".dropdown > button").blur(); } else { $(this.elementRef.nativeElement).find(".dropdown > button").focus(); } }; // Override /** * @param {?} $event * @return {?} */ SimpleDropdownList.prototype.doBlur = /** * @param {?} $event * @return {?} */ function ($event) { $(this.elementRef.nativeElement).find(".dropdown > button").blur(); }; // Override /** * @return {?} */ SimpleDropdownList.prototype.getDropdownPopupSelector = /** * @return {?} */ function () { return '.menu'; }; /** * @return {?} */ SimpleDropdownList.prototype.getSelectedItem = /** * @return {?} */ function () { var /** @type {?} */ sItem = _super.prototype.getSelectedItem.call(this); if (sItem != null) { return /** @type {?} */ (sItem); } return null; }; /** * @return {?} */ SimpleDropdownList.prototype.getItems = /** * @return {?} */ function () { return this.items; }; SimpleDropdownList.TYPE_NAME = TYPE_NAME; SimpleDropdownList.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: "<div class=\"phx-simple-dropdown\">\n\t<div class=\"dropdown-container fluid\">\n\t\t<div class=\"dropdown\">\n\t\t\t<button type=\"button\" [style.width]=\"getWidth()\" [style.height]=\"getHeight()\" (click)=\"click($event)\" (focusin)=\"onFocusing($event)\" (blur)=\"onLostFocusing($event)\">\n\t\t\t\t<div class=\"label-side\">\n\t\t\t\t\t<div class=\"table-wrapper fluid\" *ngIf=\"getSelectedItem() !== null\">\n\t\t\t\t\t\t\t<div class=\"table-cell-wrapper middle\" [style.text-align]=\"getAlign()\">\n\t\t\t\t\t\t\t\t{{ getSelectedItem().selectedLabel !== null && getSelectedItem().selectedLabel !== undefined ? getSelectedItem().selectedLabel\n\t\t\t\t\t\t\t\t: getSelectedItem().label }}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"arrow-side\">\n\t\t\t\t\t<div class=\"flex-center\">\n\t\t\t\t\t\t<div class=\"down-triangle\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t</button>\n\t\t</div>\n\t\t<ul class=\"menu\" [class.show]=\"isShow()\" [style.width]=\"getDropdownWidth()\" [style.max-height]=\"getDropdownHeight()\">\n\t\t\t<li *ngFor=\"let item of getItems(); let i = index;\" (click)=\"onSelectItemClicked($event, i)\" [class.selected]=\"isIndexSelected(i)\"\n\t\t\t [style.text-align]=\"getAlign()\">\n\t\t\t\t{{item.label}}\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n", },] }, ]; /** @nocollapse */ SimpleDropdownList.ctorParameters = function () { return [ { type: NeedFocusService, }, { type: ElementRef, }, { type: PhloxAppInfoService, }, ]; }; SimpleDropdownList.propDecorators = { "dataParent": [{ type: Input },], "ignoreParentData": [{ type: Input },], "data": [{ type: Input },], "ignoreParentDisabled": [{ type: Input },], "delegateHistory": [{ type: Input },], "onDisabled": [{ type: Input },], "onEnabled": [{ type: Input },], "loadingEnabled": [{ type: Input },], "i18nKey": [{ type: Input },], "bypass": [{ type: Input, args: ['i18nBypass',] },], "options": [{ type: Input },], "disabled": [{ type: Input },], "field": [{ type: Input },], "name": [{ type: Input },], "typeOfData": [{ type: Input },], "readOnly": [{ type: Input },], "help": [{ type: Input },], "dataComparator": [{ type: Input, args: ['comparator',] },], "items": [{ type: Input },], "align": [{ type: Input },], "width": [{ type: Input },], "height": [{ type: Input },], "dropdownWidth": [{ type: Input },], "dropdownHeight": [{ type: Input },], "loadEvent": [{ type: Output, args: ['phxLoad',] },], "startValidateEvent": [{ type: Output, args: ['phxStartValidate',] },], "endValidateEvent": [{ type: Output, args: ['phxEndValidate',] },], "beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },], "focusEvent": [{ type: Output, args: ['phxFocus',] },], "beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },], "lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },], "beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },], "changeEvent": [{ type: Output, args: ['phxChange',] },], "beforeSelectEvent": [{ type: Output, args: ['phxBeforeSelect',] },], "selectEvent": [{ type: Output, args: ['phxSelect',] },], "beforeClickEvent": [{ type: Output, args: ['phxClick',] },], "clickEvent": [{ type: Output, args: ['phxClick',] },], "beforeShowEvent": [{ type: Output, args: ['phxBeforeShow',] },], "showEvent": [{ type: Output, args: ['phxShow',] },], "beforeHideEvent": [{ type: Output, args: ['phxBeforeHide',] },], "hideEvent": [{ type: Output, args: ['phxHide',] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], SimpleDropdownList.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], SimpleDropdownList.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], SimpleDropdownList.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], SimpleDropdownList.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], SimpleDropdownList.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], SimpleDropdownList.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], SimpleDropdownList.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], SimpleDropdownList.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleDropdownList.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], SimpleDropdownList.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], SimpleDropdownList.prototype, "disabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleDropdownList.prototype, "field", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleDropdownList.prototype, "name", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleDropdownList.prototype, "typeOfData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], SimpleDropdownList.prototype, "readOnly", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Object) ], SimpleDropdownList.prototype, "help", void 0); tslib_1.__decorate([ Option('comparator'), tslib_1.__metadata("design:type", Object) ], SimpleDropdownList.prototype, "dataComparator", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Array) ], SimpleDropdownList.prototype, "items", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleDropdownList.prototype, "align", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleDropdownList.prototype, "width", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleDropdownList.prototype, "height", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleDropdownList.prototype, "dropdownWidth", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleDropdownList.prototype, "dropdownHeight", void 0); tslib_1.__decorate([ Option('load'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "loadEvent", void 0); tslib_1.__decorate([ Option('startValidate'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "startValidateEvent", void 0); tslib_1.__decorate([ Option('endValidate'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "endValidateEvent", void 0); tslib_1.__decorate([ Option('beforeFocus'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "beforeFocusEvent", void 0); tslib_1.__decorate([ Option('focus'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "focusEvent", void 0); tslib_1.__decorate([ Option('beforeLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "beforeLostFocusEvent", void 0); tslib_1.__decorate([ Option('lostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "lostFocusEvent", void 0); tslib_1.__decorate([ Option('beforeChange'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "beforeChangeEvent", void 0); tslib_1.__decorate([ Option('change'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "changeEvent", void 0); tslib_1.__decorate([ Option('beforeSelect'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "beforeSelectEvent", void 0); tslib_1.__decorate([ Option('select'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "selectEvent", void 0); tslib_1.__decorate([ Option('beforeClick'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "beforeClickEvent", void 0); tslib_1.__decorate([ Option('click'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "clickEvent", void 0); tslib_1.__decorate([ Option('beforeShow'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "beforeShowEvent", void 0); tslib_1.__decorate([ Option('show'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "showEvent", void 0); tslib_1.__decorate([ Option('beforeHide'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "beforeHideEvent", void 0); tslib_1.__decorate([ Option('hide'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleDropdownList.prototype, "hideEvent", void 0); return SimpleDropdownList; }(AbstractSimpleDropdown)); export { SimpleDropdownList }; function SimpleDropdownList_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ SimpleDropdownList.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ SimpleDropdownList.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ SimpleDropdownList.propDecorators; /** @type {?} */ SimpleDropdownList.TYPE_NAME; /** @type {?} */ SimpleDropdownList.prototype.dataParent; /** @type {?} */ SimpleDropdownList.prototype.ignoreParentData; /** @type {?} */ SimpleDropdownList.prototype.data; /** @type {?} */ SimpleDropdownList.prototype.ignoreParentDisabled; /** @type {?} */ SimpleDropdownList.prototype.delegateHistory; /** @type {?} */ SimpleDropdownList.prototype.onDisabled; /** @type {?} */ SimpleDropdownList.prototype.onEnabled; /** @type {?} */ SimpleDropdownList.prototype.loadingEnabled; /** @type {?} */ SimpleDropdownList.prototype.i18nKey; /** @type {?} */ SimpleDropdownList.prototype.bypass; /** @type {?} */ SimpleDropdownList.prototype.options; /** @type {?} */ SimpleDropdownList.prototype.disabled; /** @type {?} */ SimpleDropdownList.prototype.field; /** @type {?} */ SimpleDropdownList.prototype.name; /** @type {?} */ SimpleDropdownList.prototype.typeOfData; /** @type {?} */ SimpleDropdownList.prototype.readOnly; /** @type {?} */ SimpleDropdownList.prototype.help; /** @type {?} */ SimpleDropdownList.prototype.dataComparator; /** @type {?} */ SimpleDropdownList.prototype.items; /** @type {?} */ SimpleDropdownList.prototype.align; /** @type {?} */ SimpleDropdownList.prototype.width; /** @type {?} */ SimpleDropdownList.prototype.height; /** @type {?} */ SimpleDropdownList.prototype.dropdownWidth; /** @type {?} */ SimpleDropdownList.prototype.dropdownHeight; /** @type {?} */ SimpleDropdownList.prototype.loadEvent; /** @type {?} */ SimpleDropdownList.prototype.startValidateEvent; /** @type {?} */ SimpleDropdownList.prototype.endValidateEvent; /** @type {?} */ SimpleDropdownList.prototype.beforeFocusEvent; /** @type {?} */ SimpleDropdownList.prototype.focusEvent; /** @type {?} */ SimpleDropdownList.prototype.beforeLostFocusEvent; /** @type {?} */ SimpleDropdownList.prototype.lostFocusEvent; /** @type {?} */ SimpleDropdownList.prototype.beforeChangeEvent; /** @type {?} */ SimpleDropdownList.prototype.changeEvent; /** @type {?} */ SimpleDropdownList.prototype.beforeSelectEvent; /** @type {?} */ SimpleDropdownList.prototype.selectEvent; /** @type {?} */ SimpleDropdownList.prototype.beforeClickEvent; /** @type {?} */ SimpleDropdownList.prototype.clickEvent; /** @type {?} */ SimpleDropdownList.prototype.beforeShowEvent; /** @type {?} */ SimpleDropdownList.prototype.showEvent; /** @type {?} */ SimpleDropdownList.prototype.beforeHideEvent; /** @type {?} */ SimpleDropdownList.prototype.hideEvent; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2ltcGxlRHJvcGRvd25MaXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9kYXRhdmlldy9pbnB1dC9TaW1wbGVEcm9wZG93bkxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFHN0UsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUluRixxQkFBTSxTQUFTLEdBQVcscUJBQXFCLENBQUM7O0lBa0NSLDhDQUFzQjtJQWlKNUQsNEJBQVksZ0JBQWtDLEVBQUUsVUFBc0IsRUFBRSxtQkFBd0M7ZUFDOUcsa0JBQU0sZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixDQUFDO0tBQ3pEOzs7Ozs7SUFFUyw0Q0FBZTs7Ozs7SUFBekIsVUFBMEIsVUFBZSxFQUFFLE9BQTJCO0tBQ3JFOzs7Ozs7SUFFUyx5Q0FBWTs7Ozs7SUFBdEIsVUFBdUIsSUFBUyxFQUFFLFFBQWE7S0FDOUM7Ozs7Ozs7SUFFUyxrREFBcUI7Ozs7OztJQUEvQixVQUFnQyxRQUFhLEVBQUUsUUFBYSxFQUFFLElBQVU7UUFDdEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztLQUM1Qzs7Ozs7SUFFUyxvQ0FBTzs7OztJQUFq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Q0FDTSxZQUFZOzs2QkE3TG5DO0VBK0N3QyxzQkFBc0I7U0FBakQsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdFNpbXBsZURyb3Bkb3duIH0gZnJvbSAnLi9BYnN0cmFjdFNpbXBsZURyb3Bkb3duJztcbmltcG9ydCB7IElIYXNEYXRhIH0gZnJvbSAnLi4vLi4vSUhhc0RhdGEnO1xuaW1wb3J0IHsgSURhdGFDb21wYXJhdG9yIH0gZnJvbSAnLi4vLi4vSURhdGFDb21wYXJhdG9yJztcbmltcG9ydCB7IE5lZWRGb2N1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL05lZWRGb2N1c1NlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBEZWZhdWx0U2VsZWN0SXRlbU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWwvRGVmYXVsdFNlbGVjdEl0ZW1Nb2RlbCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWwvVmFsaWRhdGlvblJlc3VsdCc7XG5pbXBvcnQgeyBJMThOIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9yL0kxOE4uZGVjb3JhdG9yJztcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcbmltcG9ydCB7IFBobG94QXBwSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL1BobG94QXBwSW5mb1NlcnZpY2Uuc2VydmljZSc7XG5cbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1zaW1wbGUtZHJvcGRvd25cIjtcblxuQENvbXBvbmVudCh7XG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gIHNlbGVjdG9yOiBUWVBFX05BTUUsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInBoeC1zaW1wbGUtZHJvcGRvd25cIj5cblx0PGRpdiBjbGFzcz1cImRyb3Bkb3duLWNvbnRhaW5lciBmbHVpZFwiPlxuXHRcdDxkaXYgY2xhc3M9XCJkcm9wZG93blwiPlxuXHRcdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLndpZHRoXT1cImdldFdpZHRoKClcIiBbc3R5bGUuaGVpZ2h0XT1cImdldEhlaWdodCgpXCIgKGNsaWNrKT1cImNsaWNrKCRldmVudClcIiAoZm9jdXNpbik9XCJvbkZvY3VzaW5nKCRldmVudClcIiAoYmx1cik9XCJvbkxvc3RGb2N1c2luZygkZXZlbnQpXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJsYWJlbC1zaWRlXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLXdyYXBwZXIgZmx1aWRcIiAqbmdJZj1cImdldFNlbGVjdGVkSXRlbSgpICE9PSBudWxsXCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS1jZWxsLXdyYXBwZXIgbWlkZGxlXCIgW3N0eWxlLnRleHQtYWxpZ25dPVwiZ2V0QWxpZ24oKVwiPlxuXHRcdFx0XHRcdFx0XHRcdHt7IGdldFNlbGVjdGVkSXRlbSgpLnNlbGVjdGVkTGFiZWwgIT09IG51bGwgJiYgZ2V0U2VsZWN0ZWRJdGVtKCkuc2VsZWN0ZWRMYWJlbCAhPT0gdW5kZWZpbmVkID8gZ2V0U2VsZWN0ZWRJdGVtKCkuc2VsZWN0ZWRMYWJlbFxuXHRcdFx0XHRcdFx0XHRcdDogZ2V0U2VsZWN0ZWRJdGVtKCkubGFiZWwgfX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJhcnJvdy1zaWRlXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZsZXgtY2VudGVyXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZG93bi10cmlhbmdsZVwiPjwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHQ8L2J1dHRvbj5cblx0XHQ8L2Rpdj5cblx0XHQ8dWwgY2xhc3M9XCJtZW51XCIgW2NsYXNzLnNob3ddPVwiaXNTaG93KClcIiBbc3R5bGUud2lkdGhdPVwiZ2V0RHJvcGRvd25XaWR0aCgpXCIgW3N0eWxlLm1heC1oZWlnaHRdPVwiZ2V0RHJvcGRvd25IZWlnaHQoKVwiPlxuXHRcdFx0PGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEl0ZW1zKCk7IGxldCBpID0gaW5kZXg7XCIgKGNsaWNrKT1cIm9uU2VsZWN0SXRlbUNsaWNrZWQoJGV2ZW50LCBpKVwiIFtjbGFzcy5zZWxlY3RlZF09XCJpc0luZGV4U2VsZWN0ZWQoaSlcIlxuXHRcdFx0IFtzdHlsZS50ZXh0LWFsaWduXT1cImdldEFsaWduKClcIj5cblx0XHRcdFx0e3tpdGVtLmxhYmVsfX1cblx0XHRcdDwvbGk+XG5cdFx0PC91bD5cblx0PC9kaXY+XG48L2Rpdj5cbmAsXG59KVxuZXhwb3J0IGNsYXNzIFNpbXBsZURyb3Bkb3duTGlzdCBleHRlbmRzIEFic3RyYWN0U2ltcGxlRHJvcGRvd24gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcblxuICAvLyBSZS1kZWNsYXJlIGZpZWxkIHRvIGRlY2xhcmUgbmcgQElucHV0LlxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0RhdGFcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkYXRhUGFyZW50OiBJSGFzRGF0YTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREYXRhOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRhdGE6IGFueTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkZWxlZ2F0ZUhpc3Rvcnk6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgb25EaXNhYmxlZDogRnVuY3Rpb247XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgb25FbmFibGVkOiBGdW5jdGlvbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBsb2FkaW5nRW5hYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBpMThuS2V5OiBzdHJpbmc7XG4gIEBJbnB1dCgnaTE4bkJ5cGFzcycpXG4gIEBPcHRpb24oJ2kxOG5CeXBhc3MnKVxuICBwcm90ZWN0ZWQgYnlwYXNzOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgb3B0aW9uczogYW55O1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRpc2FibGVkOiBib29sZWFuO1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdERhdGFWaWV3XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZmllbGQ6IHN0cmluZztcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RJbnB1dERhdGFWaWV3XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIHR5cGVPZkRhdGE6IHN0cmluZztcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCByZWFkT25seTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQEkxOE4oKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGhlbHA6IGFueTtcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RTZWxlY3RJdGVtc1xuICBASW5wdXQoJ2NvbXBhcmF0b3InKVxuICBAT3B0aW9uKCdjb21wYXJhdG9yJylcbiAgcHJvdGVjdGVkIGRhdGFDb21wYXJhdG9yOiBJRGF0YUNvbXBhcmF0b3I8YW55PjtcbiAgQElucHV0KClcbiAgQEkxOE4oKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGl0ZW1zOiBEZWZhdWx0U2VsZWN0SXRlbU1vZGVsW107XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0U2VsZWN0T25lSXRlbVxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdFNpbXBsZURyb3Bkb3duXG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgYWxpZ246IHN0cmluZztcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCB3aWR0aDogc3RyaW5nO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGhlaWdodDogc3RyaW5nO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRyb3Bkb3duV2lkdGg6IHN0cmluZztcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkcm9wZG93bkhlaWdodDogc3RyaW5nO1xuXG4gIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBAT3V0cHV0LlxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0RhdGFcbiAgQE91dHB1dCgncGh4TG9hZCcpXG4gIEBPcHRpb24oJ2xvYWQnKVxuICBwcm90ZWN0ZWQgbG9hZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3REYXRhVmlld1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdElucHV0RGF0YVZpZXdcbiAgQE91dHB1dCgncGh4U3RhcnRWYWxpZGF0ZScpXG4gIEBPcHRpb24oJ3N0YXJ0VmFsaWRhdGUnKVxuICBwcm90ZWN0ZWQgc3RhcnRWYWxpZGF0ZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4RW5kVmFsaWRhdGUnKVxuICBAT3B0aW9uKCdlbmRWYWxpZGF0ZScpXG4gIHByb3RlY3RlZCBlbmRWYWxpZGF0ZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4QmVmb3JlRm9jdXMnKVxuICBAT3B0aW9uKCdiZWZvcmVGb2N1cycpXG4gIHByb3RlY3RlZCBiZWZvcmVGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4Rm9jdXMnKVxuICBAT3B0aW9uKCdmb2N1cycpXG4gIHByb3RlY3RlZCBmb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4QmVmb3JlTG9zdEZvY3VzJylcbiAgQE9wdGlvbignYmVmb3JlTG9zdEZvY3VzJylcbiAgcHJvdGVjdGVkIGJlZm9yZUxvc3RGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4TG9zdEZvY3VzJylcbiAgQE9wdGlvbignbG9zdEZvY3VzJylcbiAgcHJvdGVjdGVkIGxvc3RGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4QmVmb3JlQ2hhbmdlJylcbiAgQE9wdGlvbignYmVmb3JlQ2hhbmdlJylcbiAgcHJvdGVjdGVkIGJlZm9yZUNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4Q2hhbmdlJylcbiAgQE9wdGlvbignY2hhbmdlJylcbiAgcHJvdGVjdGVkIGNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RTZWxlY3RJdGVtc1xuICBAT3V0cHV0KCdwaHhCZWZvcmVTZWxlY3QnKVxuICBAT3B0aW9uKCdiZWZvcmVTZWxlY3QnKVxuICBwcm90ZWN0ZWQgYmVmb3JlU2VsZWN0RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhTZWxlY3QnKVxuICBAT3B0aW9uKCdzZWxlY3QnKVxuICBwcm90ZWN0ZWQgc2VsZWN0RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdFNlbGVjdE9uZUl0ZW1cbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RTaW1wbGVEcm9wZG93blxuICBAT3V0cHV0KCdwaHhDbGljaycpXG4gIEBPcHRpb24oJ2JlZm9yZUNsaWNrJylcbiAgcHJvdGVjdGVkIGJlZm9yZUNsaWNrRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhDbGljaycpXG4gIEBPcHRpb24oJ2NsaWNrJylcbiAgcHJvdGVjdGVkIGNsaWNrRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhCZWZvcmVTaG93JylcbiAgQE9wdGlvbignYmVmb3JlU2hvdycpXG4gIHByb3RlY3RlZCBiZWZvcmVTaG93RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhTaG93JylcbiAgQE9wdGlvbignc2hvdycpXG4gIHByb3RlY3RlZCBzaG93RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhCZWZvcmVIaWRlJylcbiAgQE9wdGlvbignYmVmb3JlSGlkZScpXG4gIHByb3RlY3RlZCBiZWZvcmVIaWRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhIaWRlJylcbiAgQE9wdGlvbignaGlkZScpXG4gIHByb3RlY3RlZCBoaWRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG5cbiAgY29uc3RydWN0b3IobmVlZEZvY3VzU2VydmljZTogTmVlZEZvY3VzU2VydmljZSwgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcGhsb3hBcHBJbmZvU2VydmljZTogUGhsb3hBcHBJbmZvU2VydmljZSkge1xuICAgIHN1cGVyKG5lZWRGb2N1c1NlcnZpY2UsIGVsZW1lbnRSZWYsIHBobG94QXBwSW5mb1NlcnZpY2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uVmFsaWRhdGlvbkVuZChpbnB1dFZhbHVlOiBhbnksIHJlc3VsdHM6IFZhbGlkYXRpb25SZXN1bHRbXSk6IHZvaWQge1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uRGF0YUNoYW5nZShkYXRhOiBhbnksIGlucHV0VmFsOiBhbnkpOiB2b2lkIHtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkRhdGFDaGFuZ2VQcmV2ZW50ZWQob2xkVmFsdWU6IGFueSwgaW5wdXRWYWw6IGFueSwgZGF0YT86IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3NldERhdGEob2xkVmFsdWUsIHRydWUsIG51bGwsIGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkb0ZvY3VzKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKCkpIHtcbiAgICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoXCIuZHJvcGRvd24gPiBidXR0b25cIikuYmx1cigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKFwiLmRyb3Bkb3duID4gYnV0dG9uXCIpLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gT3ZlcnJpZGVcbiAgcHJvdGVjdGVkIGRvQmx1cigkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZChcIi5kcm9wZG93biA+IGJ1dHRvblwiKS5ibHVyKCk7XG4gIH1cblxuICAvLyBPdmVycmlkZVxuICBwcm90ZWN0ZWQgZ2V0RHJvcGRvd25Qb3B1cFNlbGVjdG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcubWVudSc7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRJdGVtKCk6IERlZmF1bHRTZWxlY3RJdGVtTW9kZWwgeyBcbiAgICBsZXQgc0l0ZW0gPSBzdXBlci5nZXRTZWxlY3RlZEl0ZW0oKTtcblxuICAgIGlmIChzSXRlbSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gc0l0ZW0gYXMgRGVmYXVsdFNlbGVjdEl0ZW1Nb2RlbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJdGVtcygpOiBEZWZhdWx0U2VsZWN0SXRlbU1vZGVsW10ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zO1xuICB9XG59XG4iXX0=