ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
404 lines (403 loc) • 31 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, ElementRef, EventEmitter, Input, Output, ViewEncapsulation, HostBinding, NgZone } from '@angular/core';
import { CustomInputService } from './custom-input.service';
var CustomInput = /** @class */ (function () {
function CustomInput(_ref, _customInputService, _ngZone) {
var _this = this;
this._ref = _ref;
this._customInputService = _customInputService;
this._ngZone = _ngZone;
this.keyboardPrefixCls = 'am-number-keyboard';
this.focus = false;
this._value = '';
this._defaultValue = '';
this._placeholder = '';
this._editable = true;
this._disabled = false;
this._setFocus = false;
this.onChange = new EventEmitter();
this.onBlur = new EventEmitter();
this.onFocus = new EventEmitter();
this.clsFakeContainer = true;
this.inputFocus = function () {
_this.removeBlurListener();
/** @type {?} */
var focus = _this.focus;
if (!focus || _this._setFocus) {
_this.onInputFocus();
}
setTimeout(function () {
_this.addBlurListener();
}, 50);
};
this.doBlur = function (ev) {
/** @type {?} */
var value = _this._value;
/** @type {?} */
var parentFound = false;
/** @type {?} */
var isInput = false;
/** @type {?} */
var isKeyboard = false;
/** @type {?} */
var isClear = false;
/** @type {?} */
var target = ev.target;
while (target && target !== null && !parentFound) {
if (target === _this._ref.nativeElement) {
parentFound = true;
}
if (target.localName === 'custominput') {
isInput = true;
}
if (target.localName === 'customkeyboard') {
isKeyboard = true;
}
if (target.className.indexOf('am-input-clear') >= 0) {
isClear = true;
}
target = target.parentElement;
}
// 当点击目标是本身的时候,获取焦点、不隐藏keyboard
// 当点击目标不是本身但是其他的custom-input时,失去焦点、不隐藏keyboard
// 当点击目标是keyboard时,不失去焦点,不隐藏keyboard
if (parentFound) {
_this.focus = true;
}
else if (isInput) {
_this._setFocus = false;
_this.focus = false;
_this.onBlur.emit(_this._value);
}
if (_this.focus && isKeyboard) {
_this.focus = true;
_this.onKeyboardClick(CustomInputService.clickValue);
}
if (!parentFound && !isInput && !isKeyboard && !isClear && !_this._setFocus) {
_this.focus = false;
_this._setFocus = false;
_this.onBlur.emit(_this._value);
CustomInputService.hideKeyboard();
}
_this.setFakeInputCls();
};
this.removeBlurListener = function () {
document.removeEventListener('click', _this.doBlur, false);
};
this.addBlurListener = function () {
document.addEventListener('click', _this.doBlur, false);
};
this.onInputBlur = function (value) {
_this.focus = false;
_this.setFakeInputCls();
_this.onBlur.emit(_this._value);
CustomInputService.hideKeyboard();
};
this.onInputFocus = function () {
_this.onFocus.emit(_this._value);
_this.focus = true;
_this._setFocus = false;
_this.setFakeInputCls();
setTimeout(function () {
CustomInputService.showKeyboard();
}, 100);
};
this.setFakeInputCls = function () {
var _a;
_this.fakeInputCls = (_a = {},
_a["fake-input"] = true,
_a['fake-input-disabled'] = _this._disabled,
_a['focus'] = _this.focus,
_a);
};
this.setContainerCls = function () {
_this.clsFakeContainerLeft = _this._moneyKeyboardAlign === 'left';
};
this.onKeyboardClick = function (keyboardItemValue) {
/** @type {?} */
var valueAfterChange;
// 删除键
if (keyboardItemValue === 'delete') {
valueAfterChange = _this._value.substring(0, _this._value.length - 1);
_this.onChange.emit(valueAfterChange);
// 确认键
}
else if (keyboardItemValue === 'confirm') {
valueAfterChange = _this._value;
_this.onChange.emit(valueAfterChange);
_this.onInputBlur(_this._value);
// 收起键
}
else if (keyboardItemValue === 'hide') {
valueAfterChange = _this._value;
_this.onInputBlur(valueAfterChange);
}
else {
if (_this._maxLength !== undefined &&
+_this._maxLength >= 0 &&
(_this._value + keyboardItemValue).length > _this._maxLength) {
valueAfterChange = (_this._value + keyboardItemValue).substr(0, _this._maxLength);
_this.onChange.emit(valueAfterChange);
}
else {
valueAfterChange = _this._value + keyboardItemValue;
_this.onChange.emit(valueAfterChange);
}
}
_this._ngZone.run(function () {
_this._value = valueAfterChange;
});
};
}
Object.defineProperty(CustomInput.prototype, "value", {
get: /**
* @return {?}
*/
function () {
return this._value;
},
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
if (typeof v === undefined || v === null) {
this._value = '';
}
else if (this._maxLength !== undefined && this._maxLength >= 0) {
this._value = v.substr(0, this._maxLength);
}
else {
this._value = v;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(CustomInput.prototype, "defaultValue", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._defaultValue = value;
this._value = this._defaultValue;
},
enumerable: true,
configurable: true
});
Object.defineProperty(CustomInput.prototype, "maxLength", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._maxLength = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(CustomInput.prototype, "placeholder", {
get: /**
* @return {?}
*/
function () {
return this._placeholder;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._placeholder = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(CustomInput.prototype, "editable", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._editable = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(CustomInput.prototype, "disabled", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._disabled = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(CustomInput.prototype, "moneyKeyboardAlign", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._moneyKeyboardAlign = value;
this.setContainerCls();
},
enumerable: true,
configurable: true
});
Object.defineProperty(CustomInput.prototype, "setFocus", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value) {
this._setFocus = value.focus;
if (this._setFocus) {
this.inputFocus();
}
}
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
CustomInput.prototype.onFakeInputClick = /**
* @return {?}
*/
function () {
if (this._preventKeyboard) {
return;
}
this.inputFocus();
};
/**
* @return {?}
*/
CustomInput.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this._preventKeyboard = this._disabled || !this._editable;
this.setFakeInputCls();
this.setContainerCls();
};
/**
* @return {?}
*/
CustomInput.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.removeBlurListener();
if (CustomInputService) {
CustomInputService.hideKeyboard();
CustomInputService.compRef = null;
}
/** @type {?} */
var container = document.querySelector("#" + this.keyboardPrefixCls + "-container");
if (container) {
container.remove();
}
};
CustomInput.decorators = [
{ type: Component, args: [{
selector: 'CustomInput',
template: "<div *ngIf=\"value===''\" class=\"fake-input-placeholder\">\n {{placeholder}}\n</div>\n<div [ngClass]=\"fakeInputCls\" (click)=\"onFakeInputClick()\">\n {{value}}\n</div>\n",
encapsulation: ViewEncapsulation.None,
providers: [CustomInputService]
}] }
];
/** @nocollapse */
CustomInput.ctorParameters = function () { return [
{ type: ElementRef },
{ type: CustomInputService },
{ type: NgZone }
]; };
CustomInput.propDecorators = {
value: [{ type: Input }],
defaultValue: [{ type: Input }],
maxLength: [{ type: Input }],
placeholder: [{ type: Input }],
editable: [{ type: Input }],
disabled: [{ type: Input }],
moneyKeyboardAlign: [{ type: Input }],
setFocus: [{ type: Input }],
onChange: [{ type: Output }],
onBlur: [{ type: Output }],
onFocus: [{ type: Output }],
clsFakeContainer: [{ type: HostBinding, args: ['class.fake-input-container',] }],
clsFakeContainerLeft: [{ type: HostBinding, args: ['class.fake-input-container-left',] }]
};
return CustomInput;
}());
export { CustomInput };
if (false) {
/** @type {?} */
CustomInput.prototype.keyboardPrefixCls;
/** @type {?} */
CustomInput.prototype.fakeInputCls;
/** @type {?} */
CustomInput.prototype.focus;
/** @type {?} */
CustomInput.prototype._value;
/** @type {?} */
CustomInput.prototype._defaultValue;
/** @type {?} */
CustomInput.prototype._placeholder;
/** @type {?} */
CustomInput.prototype._maxLength;
/** @type {?} */
CustomInput.prototype._editable;
/** @type {?} */
CustomInput.prototype._disabled;
/** @type {?} */
CustomInput.prototype._setFocus;
/** @type {?} */
CustomInput.prototype._preventKeyboard;
/** @type {?} */
CustomInput.prototype._moneyKeyboardAlign;
/** @type {?} */
CustomInput.prototype.onChange;
/** @type {?} */
CustomInput.prototype.onBlur;
/** @type {?} */
CustomInput.prototype.onFocus;
/** @type {?} */
CustomInput.prototype.clsFakeContainer;
/** @type {?} */
CustomInput.prototype.clsFakeContainerLeft;
/** @type {?} */
CustomInput.prototype.inputFocus;
/** @type {?} */
CustomInput.prototype.doBlur;
/** @type {?} */
CustomInput.prototype.removeBlurListener;
/** @type {?} */
CustomInput.prototype.addBlurListener;
/** @type {?} */
CustomInput.prototype.onInputBlur;
/** @type {?} */
CustomInput.prototype.onInputFocus;
/** @type {?} */
CustomInput.prototype.setFakeInputCls;
/** @type {?} */
CustomInput.prototype.setContainerCls;
/** @type {?} */
CustomInput.prototype.onKeyboardClick;
/** @type {?} */
CustomInput.prototype._ref;
/** @type {?} */
CustomInput.prototype._customInputService;
/** @type {?} */
CustomInput.prototype._ngZone;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsiaW5wdXQtaXRlbS9jdXN0b20taW5wdXQvY3VzdG9tLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBR04saUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0lBc0YxRCxxQkFBb0IsSUFBZ0IsRUFBVSxtQkFBdUMsRUFBVSxPQUFlO1FBQTlHLGlCQUFrSDtRQUE5RixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQVE7aUNBN0VsRixvQkFBb0I7cUJBRS9CLEtBQUs7c0JBRUcsRUFBRTs2QkFDSyxFQUFFOzRCQUNILEVBQUU7eUJBRUosSUFBSTt5QkFDSixLQUFLO3lCQUNMLEtBQUs7d0JBd0RKLElBQUksWUFBWSxFQUFPO3NCQUV6QixJQUFJLFlBQVksRUFBTzt1QkFFdEIsSUFBSSxZQUFZLEVBQU87Z0NBR3hCLElBQUk7MEJBYW5CO1lBQ1gsS0FBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7O1lBQzFCLElBQU0sS0FBSyxHQUFHLEtBQUksQ0FBQyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFJLENBQUMsU0FBUyxFQUFFO2dCQUM1QixLQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDckI7WUFDRCxVQUFVLENBQUM7Z0JBQ1QsS0FBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQ3hCLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDUjtzQkFFUSxVQUFBLEVBQUU7O1lBQ1QsSUFBTSxLQUFLLEdBQUcsS0FBSSxDQUFDLE1BQU0sQ0FBQzs7WUFFMUIsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDOztZQUV4QixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7O1lBRXBCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQzs7WUFDdkIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDOztZQUNwQixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ3ZCLE9BQU8sTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2hELElBQUksTUFBTSxLQUFLLEtBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUN0QyxXQUFXLEdBQUcsSUFBSSxDQUFDO2lCQUNwQjtnQkFDRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssYUFBYSxFQUFFO29CQUN0QyxPQUFPLEdBQUcsSUFBSSxDQUFDO2lCQUNoQjtnQkFDRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssZ0JBQWdCLEVBQUU7b0JBQ3pDLFVBQVUsR0FBRyxJQUFJLENBQUM7aUJBQ25CO2dCQUNELElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ25ELE9BQU8sR0FBRyxJQUFJLENBQUM7aUJBQ2hCO2dCQUNELE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO2FBQy9COzs7O1lBSUQsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsS0FBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7YUFDbkI7aUJBQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQ2xCLEtBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixLQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDbkIsS0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQy9CO1lBQ0QsSUFBSSxLQUFJLENBQUMsS0FBSyxJQUFJLFVBQVUsRUFBRTtnQkFDNUIsS0FBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ2xCLEtBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDckQ7WUFDRCxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSSxDQUFDLFNBQVMsRUFBRTtnQkFDMUUsS0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Z0JBQ25CLEtBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixLQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlCLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ25DO1lBQ0QsS0FBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO2tDQUVvQjtZQUNuQixRQUFRLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLEtBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0Q7K0JBRWlCO1lBQ2hCLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsS0FBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN4RDsyQkFFYSxVQUFBLEtBQUs7WUFDakIsS0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbkIsS0FBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLEtBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNuQzs0QkFFYztZQUNiLEtBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQixLQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNsQixLQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixLQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsVUFBVSxDQUFDO2dCQUNULGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ25DLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDVDsrQkFFaUI7O1lBQ2hCLEtBQUksQ0FBQyxZQUFZO2dCQUNmLEdBQUMsWUFBWSxJQUFHLElBQUk7Z0JBQ3BCLEdBQUMscUJBQXFCLElBQUcsS0FBSSxDQUFDLFNBQVM7Z0JBQ3ZDLEdBQUMsT0FBTyxJQUFHLEtBQUksQ0FBQyxLQUFLO21CQUN0QixDQUFDO1NBQ0g7K0JBRWlCO1lBQ2hCLEtBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFJLENBQUMsbUJBQW1CLEtBQUssTUFBTSxDQUFDO1NBQ2pFOytCQUVpQixVQUFBLGlCQUFpQjs7WUFDakMsSUFBSSxnQkFBZ0IsQ0FBQzs7WUFFckIsSUFBSSxpQkFBaUIsS0FBSyxRQUFRLEVBQUU7Z0JBQ2xDLGdCQUFnQixHQUFHLEtBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDcEUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzs7YUFFdEM7aUJBQU0sSUFBSSxpQkFBaUIsS0FBSyxTQUFTLEVBQUU7Z0JBQzFDLGdCQUFnQixHQUFHLEtBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQy9CLEtBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3JDLEtBQUksQ0FBQyxXQUFXLENBQUMsS0FBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDOzthQUUvQjtpQkFBTSxJQUFJLGlCQUFpQixLQUFLLE1BQU0sRUFBRTtnQkFDdkMsZ0JBQWdCLEdBQUcsS0FBSSxDQUFDLE1BQU0sQ0FBQztnQkFDL0IsS0FBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQ3BDO2lCQUFNO2dCQUNMLElBQ0UsS0FBSSxDQUFDLFVBQVUsS0FBSyxTQUFTO29CQUM3QixDQUFDLEtBQUksQ0FBQyxVQUFVLElBQUksQ0FBQztvQkFDckIsQ0FBQyxLQUFJLENBQUMsTUFBTSxHQUFHLGlCQUFpQixDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUksQ0FBQyxVQUFVLEVBQzFEO29CQUNBLGdCQUFnQixHQUFHLENBQUMsS0FBSSxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNoRixLQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2lCQUN0QztxQkFBTTtvQkFDTCxnQkFBZ0IsR0FBRyxLQUFJLENBQUMsTUFBTSxHQUFHLGlCQUFpQixDQUFDO29CQUNuRCxLQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2lCQUN0QzthQUNGO1lBQ0QsS0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ2YsS0FBSSxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQzthQUNoQyxDQUFDLENBQUM7U0FDSjtLQXhJaUg7SUEvRGxILHNCQUNJLDhCQUFLOzs7O1FBRFQ7WUFFRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDcEI7Ozs7O1FBQ0QsVUFBVSxDQUFTO1lBQ2pCLElBQUksT0FBTyxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO2FBQ2xCO2lCQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLEVBQUU7Z0JBQ2hFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzVDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQ2pCO1NBQ0Y7OztPQVRBO0lBVUQsc0JBQ0kscUNBQVk7Ozs7O1FBRGhCLFVBQ2lCLEtBQWE7WUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQ2xDOzs7T0FBQTtJQUNELHNCQUNJLGtDQUFTOzs7OztRQURiLFVBQ2MsS0FBYTtZQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztTQUN6Qjs7O09BQUE7SUFDRCxzQkFDSSxvQ0FBVzs7OztRQURmO1lBRUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCOzs7OztRQUNELFVBQWdCLEtBQWE7WUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDM0I7OztPQUhBO0lBSUQsc0JBQ0ksaUNBQVE7Ozs7O1FBRFosVUFDYSxLQUFjO1lBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1NBQ3hCOzs7T0FBQTtJQUNELHNCQUNJLGlDQUFROzs7OztRQURaLFVBQ2EsS0FBYztZQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUN4Qjs7O09BQUE7SUFDRCxzQkFDSSwyQ0FBa0I7Ozs7O1FBRHRCLFVBQ3VCLEtBQWE7WUFDbEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztZQUNqQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDeEI7OztPQUFBO0lBQ0Qsc0JBQ0ksaUNBQVE7Ozs7O1FBRFosVUFDYSxLQUFLO1lBQ2hCLElBQUksS0FBSyxFQUFFO2dCQUNULElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDN0IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUNsQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7aUJBQ25CO2FBQ0Y7U0FDRjs7O09BQUE7Ozs7SUFlRCxzQ0FBZ0I7OztJQUFoQjtRQUNFLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztLQUNuQjs7OztJQW1JRCw4QkFBUTs7O0lBQVI7UUFDRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDMUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztLQUN4Qjs7OztJQUVELGlDQUFXOzs7SUFBWDtRQUNFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksa0JBQWtCLEVBQUU7WUFDdEIsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEMsa0JBQWtCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztTQUNuQzs7UUFDRCxJQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQUksSUFBSSxDQUFDLGlCQUFpQixlQUFZLENBQUMsQ0FBQztRQUNqRixJQUFJLFNBQVMsRUFBRTtZQUNiLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNwQjtLQUNGOztnQkE5T0YsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxhQUFhO29CQUN2QiwwTEFBNEM7b0JBQzVDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxTQUFTLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDaEM7Ozs7Z0JBakJDLFVBQVU7Z0JBVUgsa0JBQWtCO2dCQUZ6QixNQUFNOzs7d0JBeUJMLEtBQUs7K0JBYUwsS0FBSzs0QkFLTCxLQUFLOzhCQUlMLEtBQUs7MkJBT0wsS0FBSzsyQkFJTCxLQUFLO3FDQUlMLEtBQUs7MkJBS0wsS0FBSzsyQkFTTCxNQUFNO3lCQUVOLE1BQU07MEJBRU4sTUFBTTttQ0FHTixXQUFXLFNBQUMsNEJBQTRCO3VDQUV4QyxXQUFXLFNBQUMsaUNBQWlDOztzQkEvRmhEOztTQW9CYSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgSG9zdEJpbmRpbmcsXG4gIE5nWm9uZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEN1c3RvbUlucHV0U2VydmljZSB9IGZyb20gJy4vY3VzdG9tLWlucHV0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdDdXN0b21JbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20taW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtDdXN0b21JbnB1dFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbUlucHV0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBrZXlib2FyZFByZWZpeENsczogc3RyaW5nID0gJ2FtLW51bWJlci1rZXlib2FyZCc7XG4gIGZha2VJbnB1dENsczogb2JqZWN0O1xuICBmb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfZGVmYXVsdFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9tYXhMZW5ndGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9zZXRGb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9wcmV2ZW50S2V5Ym9hcmQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX21vbmV5S2V5Ym9hcmRBbGlnbjogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUodjogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSAnJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuX21heExlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX21heExlbmd0aCA+PSAwKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHYuc3Vic3RyKDAsIHRoaXMuX21heExlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGRlZmF1bHRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG1heExlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4TGVuZ3RoID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICB9XG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZWRpdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9lZGl0YWJsZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG1vbmV5S2V5Ym9hcmRBbGlnbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbW9uZXlLZXlib2FyZEFsaWduID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDb250YWluZXJDbHMoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgc2V0Rm9jdXModmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX3NldEZvY3VzID0gdmFsdWUuZm9jdXM7XG4gICAgICBpZiAodGhpcy5fc2V0Rm9jdXMpIHtcbiAgICAgICAgdGhpcy5pbnB1dEZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBPdXRwdXQoKVxuICBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uQmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mYWtlLWlucHV0LWNvbnRhaW5lcicpXG4gIGNsc0Zha2VDb250YWluZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZha2UtaW5wdXQtY29udGFpbmVyLWxlZnQnKVxuICBjbHNGYWtlQ29udGFpbmVyTGVmdDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgX2N1c3RvbUlucHV0U2VydmljZTogQ3VzdG9tSW5wdXRTZXJ2aWNlLCBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSkge31cblxuICBvbkZha2VJbnB1dENsaWNrKCkge1xuICAgIGlmICh0aGlzLl9wcmV2ZW50S2V5Ym9hcmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbnB1dEZvY3VzKCk7XG4gIH1cblxuICBpbnB1dEZvY3VzID0gKCkgPT4ge1xuICAgIHRoaXMucmVtb3ZlQmx1ckxpc3RlbmVyKCk7XG4gICAgY29uc3QgZm9jdXMgPSB0aGlzLmZvY3VzO1xuICAgIGlmICghZm9jdXMgfHwgdGhpcy5fc2V0Rm9jdXMpIHtcbiAgICAgIHRoaXMub25JbnB1dEZvY3VzKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hZGRCbHVyTGlzdGVuZXIoKTtcbiAgICB9LCA1MCk7XG4gIH07XG5cbiAgZG9CbHVyID0gZXYgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgLy8g54K55Ye75piv5ZCm5piv57uE5Lu25pys6LqrXG4gICAgbGV0IHBhcmVudEZvdW5kID0gZmFsc2U7XG4gICAgLy8g54K55Ye755uu5qCH5piv5ZCm5pivY3VzdG9tLWlucHV0XG4gICAgbGV0IGlzSW5wdXQgPSBmYWxzZTtcbiAgICAvLyDngrnlh7vnm67moIfmmK/lkKbmmK9jdXN0b20ta2V5Ym9hcmRcbiAgICBsZXQgaXNLZXlib2FyZCA9IGZhbHNlO1xuICAgIGxldCBpc0NsZWFyID0gZmFsc2U7XG4gICAgbGV0IHRhcmdldCA9IGV2LnRhcmdldDtcbiAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPT0gbnVsbCAmJiAhcGFyZW50Rm91bmQpIHtcbiAgICAgIGlmICh0YXJnZXQgPT09IHRoaXMuX3JlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHBhcmVudEZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQubG9jYWxOYW1lID09PSAnY3VzdG9taW5wdXQnKSB7XG4gICAgICAgIGlzSW5wdXQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRhcmdldC5sb2NhbE5hbWUgPT09ICdjdXN0b21rZXlib2FyZCcpIHtcbiAgICAgICAgaXNLZXlib2FyZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKCdhbS1pbnB1dC1jbGVhcicpID49IDApIHtcbiAgICAgICAgaXNDbGVhciA9IHRydWU7XG4gICAgICB9XG4gICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50RWxlbWVudDtcbiAgICB9XG4gICAgLy8g5b2T54K55Ye755uu5qCH5piv5pys6Lqr55qE5pe25YCZ77yM6I635Y+W54Sm54K544CB5LiN6ZqQ6JePa2V5Ym9hcmRcbiAgICAvLyDlvZPngrnlh7vnm67moIfkuI3mmK/mnKzouqvkvYbmmK/lhbbku5bnmoRjdXN0b20taW5wdXTml7bvvIzlpLHljrvnhKbngrnjgIHkuI3pmpDol49rZXlib2FyZFxuICAgIC8vIOW9k+eCueWHu+ebruagh+aYr2tleWJvYXJk5pe277yM5LiN5aSx5Y6754Sm54K577yM5LiN6ZqQ6JePa2V5Ym9hcmRcbiAgICBpZiAocGFyZW50Rm91bmQpIHtcbiAgICAgIHRoaXMuZm9jdXMgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaXNJbnB1dCkge1xuICAgICAgdGhpcy5fc2V0Rm9jdXMgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9jdXMgPSBmYWxzZTtcbiAgICAgIHRoaXMub25CbHVyLmVtaXQodGhpcy5fdmFsdWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb2N1cyAmJiBpc0tleWJvYXJkKSB7XG4gICAgICB0aGlzLmZvY3VzID0gdHJ1ZTtcbiAgICAgIHRoaXMub25LZXlib2FyZENsaWNrKEN1c3RvbUlucHV0U2VydmljZS5jbGlja1ZhbHVlKTtcbiAgICB9XG4gICAgaWYgKCFwYXJlbnRGb3VuZCAmJiAhaXNJbnB1dCAmJiAhaXNLZXlib2FyZCAmJiAhaXNDbGVhciAmJiAhdGhpcy5fc2V0Rm9jdXMpIHtcbiAgICAgIHRoaXMuZm9jdXMgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3NldEZvY3VzID0gZmFsc2U7XG4gICAgICB0aGlzLm9uQmx1ci5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICAgIEN1c3RvbUlucHV0U2VydmljZS5oaWRlS2V5Ym9hcmQoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRGYWtlSW5wdXRDbHMoKTtcbiAgfTtcblxuICByZW1vdmVCbHVyTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvQmx1ciwgZmFsc2UpO1xuICB9O1xuXG4gIGFkZEJsdXJMaXN0ZW5lciA9ICgpID0+IHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9CbHVyLCBmYWxzZSk7XG4gIH07XG5cbiAgb25JbnB1dEJsdXIgPSB2YWx1ZSA9PiB7XG4gICAgdGhpcy5mb2N1cyA9IGZhbHNlO1xuICAgIHRoaXMuc2V0RmFrZUlucHV0Q2xzKCk7XG4gICAgdGhpcy5vbkJsdXIuZW1pdCh0aGlzLl92YWx1ZSk7XG4gICAgQ3VzdG9tSW5wdXRTZXJ2aWNlLmhpZGVLZXlib2FyZCgpO1xuICB9O1xuXG4gIG9uSW5wdXRGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLm9uRm9jdXMuZW1pdCh0aGlzLl92YWx1ZSk7XG4gICAgdGhpcy5mb2N1cyA9IHRydWU7XG4gICAgdGhpcy5fc2V0Rm9jdXMgPSBmYWxzZTtcbiAgICB0aGlzLnNldEZha2VJbnB1dENscygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgQ3VzdG9tSW5wdXRTZXJ2aWNlLnNob3dLZXlib2FyZCgpO1xuICAgIH0sIDEwMCk7XG4gIH07XG5cbiAgc2V0RmFrZUlucHV0Q2xzID0gKCkgPT4ge1xuICAgIHRoaXMuZmFrZUlucHV0Q2xzID0ge1xuICAgICAgW2BmYWtlLWlucHV0YF06IHRydWUsXG4gICAgICBbJ2Zha2UtaW5wdXQtZGlzYWJsZWQnXTogdGhpcy5fZGlzYWJsZWQsXG4gICAgICBbJ2ZvY3VzJ106IHRoaXMuZm9jdXNcbiAgICB9O1xuICB9O1xuXG4gIHNldENvbnRhaW5lckNscyA9ICgpID0+IHtcbiAgICB0aGlzLmNsc0Zha2VDb250YWluZXJMZWZ0ID0gdGhpcy5fbW9uZXlLZXlib2FyZEFsaWduID09PSAnbGVmdCc7XG4gIH07XG5cbiAgb25LZXlib2FyZENsaWNrID0ga2V5Ym9hcmRJdGVtVmFsdWUgPT4ge1xuICAgIGxldCB2YWx1ZUFmdGVyQ2hhbmdlO1xuICAgIC8vIOWIoOmZpOmUrlxuICAgIGlmIChrZXlib2FyZEl0ZW1WYWx1ZSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIHZhbHVlQWZ0ZXJDaGFuZ2UgPSB0aGlzLl92YWx1ZS5zdWJzdHJpbmcoMCwgdGhpcy5fdmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodmFsdWVBZnRlckNoYW5nZSk7XG4gICAgICAvLyDnoa7orqTplK5cbiAgICB9IGVsc2UgaWYgKGtleWJvYXJkSXRlbVZhbHVlID09PSAnY29uZmlybScpIHtcbiAgICAgIHZhbHVlQWZ0ZXJDaGFuZ2UgPSB0aGlzLl92YWx1ZTtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh2YWx1ZUFmdGVyQ2hhbmdlKTtcbiAgICAgIHRoaXMub25JbnB1dEJsdXIodGhpcy5fdmFsdWUpO1xuICAgICAgLy8g5pS26LW36ZSuXG4gICAgfSBlbHNlIGlmIChrZXlib2FyZEl0ZW1WYWx1ZSA9PT0gJ2hpZGUnKSB7XG4gICAgICB2YWx1ZUFmdGVyQ2hhbmdlID0gdGhpcy5fdmFsdWU7XG4gICAgICB0aGlzLm9uSW5wdXRCbHVyKHZhbHVlQWZ0ZXJDaGFuZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuX21heExlbmd0aCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICt0aGlzLl9tYXhMZW5ndGggPj0gMCAmJlxuICAgICAgICAodGhpcy5fdmFsdWUgKyBrZXlib2FyZEl0ZW1WYWx1ZSkubGVuZ3RoID4gdGhpcy5fbWF4TGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgdmFsdWVBZnRlckNoYW5nZSA9ICh0aGlzLl92YWx1ZSArIGtleWJvYXJkSXRlbVZhbHVlKS5zdWJzdHIoMCwgdGhpcy5fbWF4TGVuZ3RoKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHZhbHVlQWZ0ZXJDaGFuZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWVBZnRlckNoYW5nZSA9IHRoaXMuX3ZhbHVlICsga2V5Ym9hcmRJdGVtVmFsdWU7XG4gICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh2YWx1ZUFmdGVyQ2hhbmdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlQWZ0ZXJDaGFuZ2U7XG4gICAgfSk7XG4gIH07XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fcHJldmVudEtleWJvYXJkID0gdGhpcy5fZGlzYWJsZWQgfHwgIXRoaXMuX2VkaXRhYmxlO1xuICAgIHRoaXMuc2V0RmFrZUlucHV0Q2xzKCk7XG4gICAgdGhpcy5zZXRDb250YWluZXJDbHMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVtb3ZlQmx1ckxpc3RlbmVyKCk7XG4gICAgaWYgKEN1c3RvbUlucHV0U2VydmljZSkge1xuICAgICAgQ3VzdG9tSW5wdXRTZXJ2aWNlLmhpZGVLZXlib2FyZCgpO1xuICAgICAgQ3VzdG9tSW5wdXRTZXJ2aWNlLmNvbXBSZWYgPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHt0aGlzLmtleWJvYXJkUHJlZml4Q2xzfS1jb250YWluZXJgKTtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=