UNPKG

ngx-pluto

Version:
336 lines 24.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewEncapsulation, Input, forwardRef, HostListener, Output, EventEmitter, ViewChild, ElementRef } from "@angular/core"; import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from "@angular/forms"; import { Utils } from "../utils"; /** * 输入框 * * <example-url>https://stackblitz.com/edit/np-input-sample?embed=1&file=src/app/app.component.html</example-url> */ var NpInput = /** @class */ (function () { function NpInput() { this.uuid = Utils.ID(); this.navigationKeys = [ 'Backspace', 'Delete', 'Tab', 'Escape', 'Enter', 'Home', 'End', 'ArrowLeft', 'ArrowRight', 'Clear', 'Copy', 'Paste' ]; this.currentLen = 0; this.chineseReg = /[^\x00-\xff]/g; /** * 占位符 */ this.placeholder = ''; /** * 最大长度 * * Default -1 indicate that the length of input is not limited */ this.maxLen = -1; /** * 只允许填写数字 */ this.numberOnly = false; this.emitChange = (/** * @param {?} _ * @return {?} */ function (_) { }); this.onBlur = new EventEmitter(); } /** * @return {?} */ NpInput.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @param {?} changes * @return {?} */ NpInput.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { if (changes) { } }; /** * @param {?} event * @return {?} */ NpInput.prototype.onChange = /** * @param {?} event * @return {?} */ function (event) { this.emitChange(this.val); }; /** * @param {?} event * @return {?} */ NpInput.prototype.onInputBlur = /** * @param {?} event * @return {?} */ function (event) { this.emitChange(this.val); this.onBlur.next({ value: this.val, event: event }); }; /** * @param {?} obj * @return {?} */ NpInput.prototype.writeValue = /** * @param {?} obj * @return {?} */ function (obj) { if (obj || obj === '') { this.val = obj; if (this.maxLen > -1) { this.calculateCurrentLen(); } } }; /** * @param {?} fn * @return {?} */ NpInput.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this.emitChange = fn; }; /** * @param {?} fn * @return {?} */ NpInput.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { }; /** * @param {?} control * @return {?} */ NpInput.prototype.validate = /** * @param {?} control * @return {?} */ function (control) { // TODO: customize validation return null; }; /** * @return {?} */ NpInput.prototype.focus = /** * @return {?} */ function () { this.npInput.nativeElement.focus(); }; /** * @param {?} e * @return {?} */ NpInput.prototype.onKeyup = /** * @param {?} e * @return {?} */ function (e) { if (this.maxLen === -1) { return; } if (this.maxLen > -1) { this.calculateCurrentLen(); this.val = this.val ? this.val.substring(0, this.maxLen) : ''; } if (this.numberOnly) { this.val = this.val ? this.val.replace(this.chineseReg, '') : ''; } }; /** * @param {?} e * @return {?} */ NpInput.prototype.onKeyDown = /** * @param {?} e * @return {?} */ function (e) { if (!this.isTriggerKeyEvents()) { return; } if (this.navigationKeys.indexOf(e.key) > -1 || // Allow: navigation keys: backspace, delete, arrows etc. (e.key === 'a' && e.ctrlKey === true) || // Allow: Ctrl+A (e.key === 'c' && e.ctrlKey === true) || // Allow: Ctrl+C (e.key === 'v' && e.ctrlKey === true) || // Allow: Ctrl+V (e.key === 'x' && e.ctrlKey === true) || // Allow: Ctrl+X (e.key === 'a' && e.metaKey === true) || // Allow: Cmd+A (Mac) (e.key === 'c' && e.metaKey === true) || // Allow: Cmd+C (Mac) (e.key === 'v' && e.metaKey === true) || // Allow: Cmd+V (Mac) (e.key === 'x' && e.metaKey === true) // Allow: Cmd+X (Mac) ) { return; } if (this.maxLen > -1) { /** @type {?} */ var hightlightText = window.getSelection() + ''; if (this.val && this.val.length >= this.maxLen && hightlightText === '') { e.preventDefault(); } } if (this.numberOnly) { if (isNaN(Number(e.key))) { e.preventDefault(); } } }; /** * @private * @return {?} */ NpInput.prototype.calculateCurrentLen = /** * @private * @return {?} */ function () { this.currentLen = this.val ? this.val.toString().length : 0; this.currentLen = this.currentLen > this.maxLen ? this.maxLen : this.currentLen; }; /** * @private * @return {?} */ NpInput.prototype.isTriggerKeyEvents = /** * @private * @return {?} */ function () { return this.maxLen !== -1 || this.numberOnly; }; NpInput.decorators = [ { type: Component, args: [{ selector: "np-input", template: "<div class=\"np-input-wrapper flex-wrap row-flex\">\r\n <div class=\"flex-wrap col-flex\" *ngIf=\"label\">\r\n <label for=\"np-input\" class=\"np-input-lbl\">\r\n <span class=\"form-required\" *ngIf=\"isRequired\">*</span>\r\n {{ label }}\r\n </label>\r\n </div>\r\n <div class=\"flex-wrap col-flex input-container\">\r\n <input #npInput [id]=\"'np-input' + uuid\" class=\"np-input\" type=\"text\" [(ngModel)]=\"val\" [placeholder]=\"placeholder\"\r\n (change)=\"onChange($event)\" (keyup)=\"onChange($event)\" (blur)=\"onInputBlur($event)\"\r\n [attr.disabled]=\"isDisabled ? '' : null\" [class.disabled]=\"isDisabled\"\r\n [style.padding-right.px]=\"(maxLen > -1 && maxLen < 1000) ? '65' : '10'\" autocomplete=\"off\">\r\n <span class=\"error-message\" *ngIf=\"errorMessage\">{{ errorMessage }}</span>\r\n <div class=\"np-len\" *ngIf=\"maxLen > -1 && maxLen < 1000\">\r\n <span class=\"cur-length\">{{ currentLen }}</span> / <span>{{ maxLen }}</span>\r\n </div>\r\n </div>\r\n</div>\r\n", encapsulation: ViewEncapsulation.None, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return NpInput; })), multi: true, }, { provide: NG_VALIDATORS, useExisting: forwardRef((/** * @return {?} */ function () { return NpInput; })), multi: true, } ], styles: [".backdrop-transparent{opacity:0}.flex-wrap{display:flex}.wrap{flex-wrap:wrap}.col-flex{flex-direction:column}.row-flex{flex-direction:row}.middle-flex{justify-content:center;align-items:center}.space-between{justify-content:space-between;align-items:center}.align-center{align-items:center}.np-row{display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.np-column{display:flex;flex-direction:column;flex-basis:100%;flex:1}.np-input-wrapper{align-items:baseline;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.np-input-wrapper .np-input-lbl{width:80px;margin-right:20px;text-align:right;font-size:13px;font-weight:700;height:34px;line-height:34px}.np-input-wrapper .input-container{position:relative}.np-input-wrapper .input-container .np-len{position:absolute;right:5px;height:34px;line-height:34px;font-size:14px}.np-input-wrapper .np-input{box-sizing:border-box;background-image:none;border-radius:1px;display:inline-block;padding:5px 65px 5px 10px;margin:0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:220px;height:34px;line-height:20px}.np-input-wrapper .np-input:focus{outline:0!important;outline-offset:unset;border-width:1px}.np-input-wrapper .error-message{display:block;font-size:10px;margin:5px}"] }] } ]; /** @nocollapse */ NpInput.ctorParameters = function () { return []; }; NpInput.propDecorators = { label: [{ type: Input }], isRequired: [{ type: Input }], placeholder: [{ type: Input }], errorMessage: [{ type: Input }], isDisabled: [{ type: Input }], maxLen: [{ type: Input }], numberOnly: [{ type: Input }], npInput: [{ type: ViewChild, args: ['npInput',] }], onBlur: [{ type: Output }], onKeyup: [{ type: HostListener, args: ['keyup', ['$event'],] }], onKeyDown: [{ type: HostListener, args: ['keydown', ['$event'],] }] }; return NpInput; }()); export { NpInput }; if (false) { /** @type {?} */ NpInput.prototype.uuid; /** @type {?} */ NpInput.prototype.val; /** * @type {?} * @private */ NpInput.prototype.navigationKeys; /** @type {?} */ NpInput.prototype.currentLen; /** @type {?} */ NpInput.prototype.chineseReg; /** * 标签 * @type {?} */ NpInput.prototype.label; /** * 是否必填 - 必填则有红色*号在标签前面;否则没有 * @type {?} */ NpInput.prototype.isRequired; /** * 占位符 * @type {?} */ NpInput.prototype.placeholder; /** * 错误信息 - 将以红色字体显示在输入框下方 * @type {?} */ NpInput.prototype.errorMessage; /** * 是否禁用 * @type {?} */ NpInput.prototype.isDisabled; /** * 最大长度 * * Default -1 indicate that the length of input is not limited * @type {?} */ NpInput.prototype.maxLen; /** * 只允许填写数字 * @type {?} */ NpInput.prototype.numberOnly; /** * @type {?} * @private */ NpInput.prototype.emitChange; /** @type {?} */ NpInput.prototype.npInput; /** @type {?} */ NpInput.prototype.onBlur; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtcGx1dG8vIiwic291cmNlcyI6WyJsaWIvaW5wdXQvaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQTJCLEtBQUssRUFBVSxVQUFVLEVBQStDLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDek4sT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBc0UsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0SSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7QUFPakM7SUErREU7UUE3Q0EsU0FBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUdWLG1CQUFjLEdBQUc7WUFDdkIsV0FBVztZQUNYLFFBQVE7WUFDUixLQUFLO1lBQ0wsUUFBUTtZQUNSLE9BQU87WUFDUCxNQUFNO1lBQ04sS0FBSztZQUNMLFdBQVc7WUFDWCxZQUFZO1lBQ1osT0FBTztZQUNQLE1BQU07WUFDTixPQUFPO1NBQ1IsQ0FBQztRQUNGLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFDdkIsZUFBVSxHQUFHLGVBQWUsQ0FBQzs7OztRQU9wQixnQkFBVyxHQUFXLEVBQUUsQ0FBQzs7Ozs7O1FBVXpCLFdBQU0sR0FBVyxDQUFDLENBQUMsQ0FBQzs7OztRQUVwQixlQUFVLEdBQVksS0FBSyxDQUFDO1FBRTdCLGVBQVU7Ozs7UUFBRyxVQUFDLENBQU0sSUFBTyxDQUFDLEVBQUM7UUFJM0IsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFFM0IsQ0FBQzs7OztJQUVqQiwwQkFBUTs7O0lBQVIsY0FBYSxDQUFDOzs7OztJQUVkLDZCQUFXOzs7O0lBQVgsVUFBWSxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sRUFBRSxHQUFHO0lBQ2xCLENBQUM7Ozs7O0lBRUQsMEJB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RXZCLDZCQUE2Qjs7Ozs7SUFFN0IsOEJBQWtDOzs7OztJQUVsQywrQkFBOEI7Ozs7O0lBRTlCLDZCQUE2Qjs7Ozs7OztJQU03Qix5QkFBNkI7Ozs7O0lBRTdCLDZCQUFxQzs7Ozs7SUFFckMsNkJBQXFDOztJQUVyQywwQkFBdUQ7O0lBRXZELHlCQUEyQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBJbnB1dCwgT25Jbml0LCBmb3J3YXJkUmVmLCBDaGFuZ2VEZXRlY3RvclJlZiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBIb3N0TGlzdGVuZXIsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgTkdfVkFMSURBVE9SUywgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgVmFsaWRhdGlvbkVycm9ycywgQWJzdHJhY3RDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcblxyXG4vKipcclxuICog6L6T5YWl5qGGXHJcbiAqIFxyXG4gKiA8ZXhhbXBsZS11cmw+aHR0cHM6Ly9zdGFja2JsaXR6LmNvbS9lZGl0L25wLWlucHV0LXNhbXBsZT9lbWJlZD0xJmZpbGU9c3JjL2FwcC9hcHAuY29tcG9uZW50Lmh0bWw8L2V4YW1wbGUtdXJsPlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IGBucC1pbnB1dGAsXHJcbiAgdGVtcGxhdGVVcmw6ICdpbnB1dC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnaW5wdXQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOcElucHV0KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOcElucHV0KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTnBJbnB1dCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcclxuICB1dWlkID0gVXRpbHMuSUQoKTtcclxuXHJcbiAgdmFsOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uS2V5cyA9IFtcclxuICAgICdCYWNrc3BhY2UnLFxyXG4gICAgJ0RlbGV0ZScsXHJcbiAgICAnVGFiJyxcclxuICAgICdFc2NhcGUnLFxyXG4gICAgJ0VudGVyJyxcclxuICAgICdIb21lJyxcclxuICAgICdFbmQnLFxyXG4gICAgJ0Fycm93TGVmdCcsXHJcbiAgICAnQXJyb3dSaWdodCcsXHJcbiAgICAnQ2xlYXInLFxyXG4gICAgJ0NvcHknLFxyXG4gICAgJ1Bhc3RlJ1xyXG4gIF07XHJcbiAgY3VycmVudExlbjogbnVtYmVyID0gMDtcclxuICBjaGluZXNlUmVnID0gL1teXFx4MDAtXFx4ZmZdL2c7XHJcblxyXG4gIC8qKuagh+etviAqL1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XHJcbiAgLyoq5piv5ZCm5b+F5aGrIC0g5b+F5aGr5YiZ5pyJ57qi6ImyKuWPt+WcqOagh+etvuWJjemdou+8m+WQpuWImeayoeaciSAqL1xyXG4gIEBJbnB1dCgpIGlzUmVxdWlyZWQ6IGJvb2xlYW47XHJcbiAgLyoq5Y2g5L2N56ymICovXHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xyXG4gIC8qKumUmeivr+S/oeaBryAtIOWwhuS7pee6ouiJsuWtl+S9k+aYvuekuuWcqOi+k+WFpeahhuS4i+aWuSAqL1xyXG4gIEBJbnB1dCgpIGVycm9yTWVzc2FnZTogc3RyaW5nO1xyXG4gIC8qKuaYr+WQpuemgeeUqCAqL1xyXG4gIEBJbnB1dCgpIGlzRGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICog5pyA5aSn6ZW/5bqmXHJcbiAgICogXHJcbiAgICogRGVmYXVsdCAtMSBpbmRpY2F0ZSB0aGF0IHRoZSBsZW5ndGggb2YgaW5wdXQgaXMgbm90IGxpbWl0ZWRcclxuICAgKi9cclxuICBASW5wdXQoKSBtYXhMZW46IG51bWJlciA9IC0xO1xyXG4gIC8qKuWPquWFgeiuuOWhq+WGmeaVsOWtlyAqL1xyXG4gIEBJbnB1dCgpIG51bWJlck9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBlbWl0Q2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xyXG5cclxuICBAVmlld0NoaWxkKCducElucHV0JykgbnBJbnB1dDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gIEBPdXRwdXQoKSBvbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMpIHsgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5lbWl0Q2hhbmdlKHRoaXMudmFsKTtcclxuICB9XHJcblxyXG4gIG9uSW5wdXRCbHVyKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuZW1pdENoYW5nZSh0aGlzLnZhbCk7XHJcbiAgICB0aGlzLm9uQmx1ci5uZXh0KHsgdmFsdWU6IHRoaXMudmFsLCBldmVudDogZXZlbnQgfSk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICBpZiAob2JqIHx8IG9iaiA9PT0gJycpIHtcclxuICAgICAgdGhpcy52YWwgPSBvYmo7XHJcbiAgICAgIGlmICh0aGlzLm1heExlbiA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVDdXJyZW50TGVuKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5lbWl0Q2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7IH1cclxuXHJcbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XHJcbiAgICAvLyBUT0RPOiBjdXN0b21pemUgdmFsaWRhdGlvblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBmb2N1cygpIHtcclxuICAgIHRoaXMubnBJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pXHJcbiAgb25LZXl1cChlOiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5tYXhMZW4gPT09IC0xKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5tYXhMZW4gPiAtMSkge1xyXG4gICAgICB0aGlzLmNhbGN1bGF0ZUN1cnJlbnRMZW4oKTtcclxuICAgICAgdGhpcy52YWwgPSB0aGlzLnZhbCA/IHRoaXMudmFsLnN1YnN0cmluZygwLCB0aGlzLm1heExlbikgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5udW1iZXJPbmx5KSB7XHJcbiAgICAgIHRoaXMudmFsID0gdGhpcy52YWwgPyB0aGlzLnZhbC5yZXBsYWNlKHRoaXMuY2hpbmVzZVJlZywgJycpIDogJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBvbktleURvd24oZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmlzVHJpZ2dlcktleUV2ZW50cygpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uS2V5cy5pbmRleE9mKGUua2V5KSA+IC0xIHx8ICAvLyBBbGxvdzogbmF2aWdhdGlvbiBrZXlzOiBiYWNrc3BhY2UsIGRlbGV0ZSwgYXJyb3dzIGV0Yy5cclxuICAgICAgKGUua2V5ID09PSAnYScgJiYgZS5jdHJsS2V5ID09PSB0cnVlKSB8fCAgICAvLyBBbGxvdzogQ3RybCtBXHJcbiAgICAgIChlLmtleSA9PT0gJ2MnICYmIGUuY3RybEtleSA9PT0gdHJ1ZSkgfHwgICAgLy8gQWxsb3c6IEN0cmwrQ1xyXG4gICAgICAoZS5rZXkgPT09ICd2JyAmJiBlLmN0cmxLZXkgPT09IHRydWUpIHx8ICAgIC8vIEFsbG93OiBDdHJsK1ZcclxuICAgICAgKGUua2V5ID09PSAneCcgJiYgZS5jdHJsS2V5ID09PSB0cnVlKSB8fCAgICAvLyBBbGxvdzogQ3RybCtYXHJcbiAgICAgIChlLmtleSA9PT0gJ2EnICYmIGUubWV0YUtleSA9PT0gdHJ1ZSkgfHwgICAgLy8gQWxsb3c6IENtZCtBIChNYWMpXHJcbiAgICAgIChlLmtleSA9PT0gJ2MnICYmIGUubWV0YUtleSA9PT0gdHJ1ZSkgfHwgICAgLy8gQWxsb3c6IENtZCtDIChNYWMpXHJcbiAgICAgIChlLmtleSA9PT0gJ3YnICYmIGUubWV0YUtleSA9PT0gdHJ1ZSkgfHwgICAgLy8gQWxsb3c6IENtZCtWIChNYWMpXHJcbiAgICAgIChlLmtleSA9PT0gJ3gnICYmIGUubWV0YUtleSA9PT0gdHJ1ZSkgICAgICAgLy8gQWxsb3c6IENtZCtYIChNYWMpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm1heExlbiA+IC0xKSB7XHJcbiAgICAgIGxldCBoaWdodGxpZ2h0VGV4dCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKSArICcnO1xyXG4gICAgICBpZiAodGhpcy52YWwgJiYgdGhpcy52YWwubGVuZ3RoID49IHRoaXMubWF4TGVuICYmIGhpZ2h0bGlnaHRUZXh0ID09PSAnJykge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm51bWJlck9ubHkpIHtcclxuICAgICAgaWYgKGlzTmFOKE51bWJlcihlLmtleSkpKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZUN1cnJlbnRMZW4oKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRMZW4gPSB0aGlzLnZhbCA/IHRoaXMudmFsLnRvU3RyaW5nKCkubGVuZ3RoIDogMDtcclxuICAgIHRoaXMuY3VycmVudExlbiA9IHRoaXMuY3VycmVudExlbiA+IHRoaXMubWF4TGVuID8gdGhpcy5tYXhMZW4gOiB0aGlzLmN1cnJlbnRMZW47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVHJpZ2dlcktleUV2ZW50cygpIHtcclxuICAgIHJldHVybiB0aGlzLm1heExlbiAhPT0gLTEgfHwgdGhpcy5udW1iZXJPbmx5O1xyXG4gIH1cclxufVxyXG5cclxuXHJcbiJdfQ==