UNPKG

@neocomplexx/ngx-neo-directives-mat

Version:
164 lines 21.4 kB
import { __decorate, __metadata } from "tslib"; import { Directive, ElementRef, HostListener, Input, Renderer2, OnInit } from '@angular/core'; import { NgModel } from '@angular/forms'; let NeoNumbersDirective = class NeoNumbersDirective { constructor(el, renderer, model) { this.el = el; this.renderer = renderer; this.model = model; this.allowNullValue = false; } ngOnInit() { if (this.allowNullValue === "") this.allowNullValue = true; this.regex = new RegExp('^\\d+$'); this.el.nativeElement.type = "number"; } blockPaste(e) { const clipboardData = e.clipboardData || window['clipboardData']; let pastedData = clipboardData.getData('text/plain').split(",").join("."); let posPoint = pastedData.lastIndexOf('.'); if (posPoint > -1) { pastedData = pastedData.substring(0, posPoint).split(".").join(""); } const onlyNumbers = Array.from(pastedData).map(x => this.isOnlyNumber(x)).reduce((prev, el) => prev && el, true); const isCorrect = this.regex.test(pastedData); if (isCorrect && this.el.nativeElement.max && pastedData.length > this.el.nativeElement.max.length) pastedData = pastedData.substr(0, this.el.nativeElement.max.length); setTimeout(() => { if (onlyNumbers && isCorrect) { this.el.nativeElement.value = pastedData; } else { this.el.nativeElement.value = '0'; } }, 10); } onfocus() { if (this.el.nativeElement.value == "0") { this.el.nativeElement.value = null; } } onBlur() { let current = this.el.nativeElement.value; if (current == "") { if (this.allowNullValue) { this.el.nativeElement.value = null; this.model.control.setValue(null); } else { this.el.nativeElement.value = "0"; this.model.control.setValue(0); } } else { this.el.nativeElement.type = "text"; this.el.nativeElement.type = "number"; if (this.el.nativeElement.max && this.el.nativeElement.valueAsNumber > +this.el.nativeElement.max) { this.el.nativeElement.value = this.el.nativeElement.max; this.model.control.setValue(this.el.nativeElement.valueAsNumber); } } } onKeyUp(event) { console.log(event); let current = this.el.nativeElement.value; current = current.split("-").join(""); let posPoint = current.indexOf('.'); if (posPoint > -1) { current = current.substring(0, posPoint); this.el.nativeElement.value = current; } if (this.isSpecial(event) || current == "") { if (event.keyCode == 8 || current != "") { this.prev = current; } return; } if (!this.isOnlyNumber(event)) { event.preventDefault(); event.stopPropagation(); return false; } if (this.el.nativeElement.max && this.el.nativeElement.valueAsNumber > +this.el.nativeElement.max) { this.el.nativeElement.value = current.substring(0, current.length - 1); } } onKeyDown(event) { if (this.isSpecial(event)) { return; } if (!this.isOnlyNumber(event)) { event.preventDefault(); event.stopPropagation(); return false; } let current = this.el.nativeElement.value; this.prev = current; } isSpecial(e) { return e.key === 'Delete' || (e.key === 'Tab' || e.keyCode == 9) || (e.key === 'Backspace' || e.keyCode == 8) || e.key === 'ArrowLeft' || e.altKey || e.ctrlKey || e.key === 'Home' || e.key === 'End' || e.key === 'PageDown' || e.key === 'PageUp' || e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'ArrowRight' || e.key === 'Control' || e.key === 'Alt' || e.key === 'Shift' || (e.keyIdentifier == 'Down' || e.keyIdentifier == 'Up' || e.keyIdentifier == 'Left' || e.keyIdentifier == 'Right'); } isOnlyNumber(e) { if (e instanceof KeyboardEvent) { return ((e.key >= '0' && e.key <= '9') || (e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105)); } else { return (e >= '0' && e <= '9'); } } }; NeoNumbersDirective.ctorParameters = () => [ { type: ElementRef }, { type: Renderer2 }, { type: NgModel } ]; __decorate([ Input(), __metadata("design:type", Object) ], NeoNumbersDirective.prototype, "isNumber", void 0); __decorate([ Input('allowNullValue'), __metadata("design:type", Object) ], NeoNumbersDirective.prototype, "allowNullValue", void 0); __decorate([ HostListener('paste', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [ClipboardEvent]), __metadata("design:returntype", void 0) ], NeoNumbersDirective.prototype, "blockPaste", null); __decorate([ HostListener('focus'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], NeoNumbersDirective.prototype, "onfocus", null); __decorate([ HostListener('blur'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], NeoNumbersDirective.prototype, "onBlur", null); __decorate([ HostListener('keyup', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [KeyboardEvent]), __metadata("design:returntype", void 0) ], NeoNumbersDirective.prototype, "onKeyUp", null); __decorate([ HostListener('keydown', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [KeyboardEvent]), __metadata("design:returntype", void 0) ], NeoNumbersDirective.prototype, "onKeyDown", null); NeoNumbersDirective = __decorate([ Directive({ selector: '[isNumber]' }), __metadata("design:paramtypes", [ElementRef, Renderer2, NgModel]) ], NeoNumbersDirective); export { NeoNumbersDirective }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVvLW51bWJlcnMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5lb2NvbXBsZXh4L25neC1uZW8tZGlyZWN0aXZlcy1tYXQvIiwic291cmNlcyI6WyJsaWIvbmVvLW51bWJlcnMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3pDLElBQWEsbUJBQW1CLEdBQWhDLE1BQWEsbUJBQW1CO0lBTTVCLFlBQW9CLEVBQWMsRUFBVSxRQUFtQixFQUFVLEtBQWM7UUFBbkUsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFTO1FBSjlELG1CQUFjLEdBQUcsS0FBSyxDQUFDO0lBS2hELENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBUyxJQUFJLENBQUMsY0FBYyxLQUFLLEVBQUU7WUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUNoRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUE7SUFDekMsQ0FBQztJQUVrQyxVQUFVLENBQUMsQ0FBaUI7UUFDM0QsTUFBTSxhQUFhLEdBQWlCLENBQUMsQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9FLElBQUksVUFBVSxHQUFXLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVsRixJQUFJ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Y0FBYzs7cURBc0I5RDtBQUVzQjtJQUF0QixZQUFZLENBQUMsT0FBTyxDQUFDOzs7O2tEQUlyQjtBQUVxQjtJQUFyQixZQUFZLENBQUMsTUFBTSxDQUFDOzs7O2lEQWtCcEI7QUFFa0M7SUFBbEMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztxQ0FBZ0IsYUFBYTs7a0RBMkI5RDtBQUVvQztJQUFwQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7O3FDQUFrQixhQUFhOztvREFhbEU7QUEzR1EsbUJBQW1CO0lBSC9CLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRSxZQUFZO0tBQ3pCLENBQUM7cUNBTzBCLFVBQVUsRUFBb0IsU0FBUyxFQUFpQixPQUFPO0dBTjlFLG1CQUFtQixDQTJIL0I7U0EzSFksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBSZW5kZXJlcjIsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tpc051bWJlcl0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZW9OdW1iZXJzRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBJbnB1dCgpIGlzTnVtYmVyOiBhbnk7XHJcbiAgICBASW5wdXQoJ2FsbG93TnVsbFZhbHVlJykgYWxsb3dOdWxsVmFsdWUgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgcHJldjogYW55O1xyXG4gICAgcHJpdmF0ZSByZWdleDogUmVnRXhwO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBtb2RlbDogTmdNb2RlbCkge1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICg8YW55PnRoaXMuYWxsb3dOdWxsVmFsdWUgPT09IFwiXCIpIHRoaXMuYWxsb3dOdWxsVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVnZXggPSBuZXcgUmVnRXhwKCdeXFxcXGQrJCcpO1xyXG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC50eXBlID0gXCJudW1iZXJcIlxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ3Bhc3RlJywgWyckZXZlbnQnXSkgYmxvY2tQYXN0ZShlOiBDbGlwYm9hcmRFdmVudCkge1xyXG4gICAgICAgIGNvbnN0IGNsaXBib2FyZERhdGE6IERhdGFUcmFuc2ZlciA9IGUuY2xpcGJvYXJkRGF0YSB8fCB3aW5kb3dbJ2NsaXBib2FyZERhdGEnXTtcclxuICAgICAgICBsZXQgcGFzdGVkRGF0YTogc3RyaW5nID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJykuc3BsaXQoXCIsXCIpLmpvaW4oXCIuXCIpO1xyXG5cclxuICAgICAgICBsZXQgcG9zUG9pbnQgPSBwYXN0ZWREYXRhLmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICAgICAgaWYgKHBvc1BvaW50ID4gLTEpIHtcclxuICAgICAgICAgICAgcGFzdGVkRGF0YSA9IHBhc3RlZERhdGEuc3Vic3RyaW5nKDAsIHBvc1BvaW50KS5zcGxpdChcIi5cIikuam9pbihcIlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG9ubHlOdW1iZXJzID0gQXJyYXkuZnJvbShwYXN0ZWREYXRhKS5tYXAoeCA9PiB0aGlzLmlzT25seU51bWJlcih4KSkucmVkdWNlKChwcmV2LCBlbCkgPT4gcHJldiAmJiBlbCwgdHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgaXNDb3JyZWN0ID0gdGhpcy5yZWdleC50ZXN0KHBhc3RlZERhdGEpO1xyXG4gICAgICAgIGlmIChpc0NvcnJlY3QgJiYgdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heCAmJiBwYXN0ZWREYXRhLmxlbmd0aCA+IHRoaXMuZWwubmF0aXZlRWxlbWVudC5tYXgubGVuZ3RoKVxyXG4gICAgICAgICAgICBwYXN0ZWREYXRhID0gcGFzdGVkRGF0YS5zdWJzdHIoMCwgdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heC5sZW5ndGgpO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKG9ubHlOdW1iZXJzICYmIGlzQ29ycmVjdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gcGFzdGVkRGF0YTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcwJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICB9LCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKSBvbmZvY3VzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPT0gXCIwXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignYmx1cicpIG9uQmx1cigpIHtcclxuICAgICAgICBsZXQgY3VycmVudDogc3RyaW5nID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlO1xyXG4gICAgICAgIGlmIChjdXJyZW50ID09IFwiXCIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dOdWxsVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBcIjBcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuY29udHJvbC5zZXRWYWx1ZSgwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC50eXBlID0gXCJudW1iZXJcIjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZWwubmF0aXZlRWxlbWVudC5tYXggJiYgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlQXNOdW1iZXIgPiArdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heDtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuY29udHJvbC5zZXRWYWx1ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWVBc051bWJlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKSBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcclxuICAgICAgICBsZXQgY3VycmVudDogc3RyaW5nID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlO1xyXG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnNwbGl0KFwiLVwiKS5qb2luKFwiXCIpO1xyXG4gICAgICAgIGxldCBwb3NQb2ludCA9IGN1cnJlbnQuaW5kZXhPZignLicpO1xyXG4gICAgICAgIGlmIChwb3NQb2ludCA+IC0xKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnN1YnN0cmluZygwLCBwb3NQb2ludCk7XHJcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IGN1cnJlbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1NwZWNpYWwoZXZlbnQpIHx8IGN1cnJlbnQgPT0gXCJcIikgeyBcclxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gOCB8fCBjdXJyZW50ICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJldiA9IGN1cnJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc09ubHlOdW1iZXIoZXZlbnQpKSB7IFxyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IFxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heCAmJiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWVBc051bWJlciA+ICt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQubWF4KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IGN1cnJlbnQuc3Vic3RyaW5nKDAsIGN1cnJlbnQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKSBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNTcGVjaWFsKGV2ZW50KSkgeyByZXR1cm47IH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzT25seU51bWJlcihldmVudCkpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgXHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBsZXQgY3VycmVudDogc3RyaW5nID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnByZXYgPSBjdXJyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNTcGVjaWFsKGU6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZS5rZXkgPT09ICdEZWxldGUnIHx8IChlLmtleSA9PT0gJ1RhYicgfHwgZS5rZXlDb2RlID09IDkpIHx8IChlLmtleSA9PT0gJ0JhY2tzcGFjZScgfHwgZS5rZXlDb2RlID09IDgpIHx8IGUua2V5ID09PSAnQXJyb3dMZWZ0JyB8fFxyXG4gICAgICAgICAgICBlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5rZXkgPT09ICdIb21lJyB8fCBlLmtleSA9PT0gJ0VuZCcgfHwgZS5rZXkgPT09ICdQYWdlRG93bicgfHwgZS5rZXkgPT09ICdQYWdlVXAnIHx8XHJcbiAgICAgICAgICAgIGUua2V5ID09PSAnQXJyb3dEb3duJyB8fCBlLmtleSA9PT0gJ0Fycm93VXAnIHx8IGUua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZS5rZXkgPT09ICdDb250cm9sJyB8fCBlLmtleSA9PT0gJ0FsdCcgfHwgZS5rZXkgPT09ICdTaGlmdCcgfHxcclxuICAgICAgICAgICAgKCg8YW55PmUpLmtleUlkZW50aWZpZXIgPT0gJ0Rvd24nIHx8ICg8YW55PmUpLmtleUlkZW50aWZpZXIgPT0gJ1VwJyB8fCAoPGFueT5lKS5rZXlJZGVudGlmaWVyID09ICdMZWZ0JyB8fCAoPGFueT5lKS5rZXlJZGVudGlmaWVyID09ICdSaWdodCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNPbmx5TnVtYmVyKGU6IEtleWJvYXJkRXZlbnQgfCBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICgoZS5rZXkgPj0gJzAnICYmIGUua2V5IDw9ICc5JykgfHwgKGUua2V5Q29kZSA+PSA0OCAmJiBlLmtleUNvZGUgPD0gNTcpIHx8IChlLmtleUNvZGUgPj0gOTYgJiYgZS5rZXlDb2RlIDw9IDEwNSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoZSA+PSAnMCcgJiYgZSA8PSAnOScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=