@neocomplexx/ngx-neo-directives-mat
Version:
166 lines • 22.2 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Directive, ElementRef, HostListener, Input, Renderer2, OnInit } from '@angular/core';
import { NgModel } from '@angular/forms';
var NeoNumbersDirective = /** @class */ (function () {
function NeoNumbersDirective(el, renderer, model) {
this.el = el;
this.renderer = renderer;
this.model = model;
this.allowNullValue = false;
}
NeoNumbersDirective.prototype.ngOnInit = function () {
if (this.allowNullValue === "")
this.allowNullValue = true;
this.regex = new RegExp('^\\d+$');
this.el.nativeElement.type = "number";
};
NeoNumbersDirective.prototype.blockPaste = function (e) {
var _this = this;
var clipboardData = e.clipboardData || window['clipboardData'];
var pastedData = clipboardData.getData('text/plain').split(",").join(".");
var posPoint = pastedData.lastIndexOf('.');
if (posPoint > -1) {
pastedData = pastedData.substring(0, posPoint).split(".").join("");
}
var onlyNumbers = Array.from(pastedData).map(function (x) { return _this.isOnlyNumber(x); }).reduce(function (prev, el) { return prev && el; }, true);
var 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(function () {
if (onlyNumbers && isCorrect) {
_this.el.nativeElement.value = pastedData;
}
else {
_this.el.nativeElement.value = '0';
}
}, 10);
};
NeoNumbersDirective.prototype.onfocus = function () {
if (this.el.nativeElement.value == "0") {
this.el.nativeElement.value = null;
}
};
NeoNumbersDirective.prototype.onBlur = function () {
var 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);
}
}
};
NeoNumbersDirective.prototype.onKeyUp = function (event) {
console.log(event);
var current = this.el.nativeElement.value;
current = current.split("-").join("");
var 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);
}
};
NeoNumbersDirective.prototype.onKeyDown = function (event) {
if (this.isSpecial(event)) {
return;
}
if (!this.isOnlyNumber(event)) {
event.preventDefault();
event.stopPropagation();
return false;
}
var current = this.el.nativeElement.value;
this.prev = current;
};
NeoNumbersDirective.prototype.isSpecial = function (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');
};
NeoNumbersDirective.prototype.isOnlyNumber = function (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 = function () { return [
{ 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);
return NeoNumbersDirective;
}());
export { NeoNumbersDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVvLW51bWJlcnMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5lb2NvbXBsZXh4L25neC1uZW8tZGlyZWN0aXZlcy1tYXQvIiwic291cmNlcyI6WyJsaWIvbmVvLW51bWJlcnMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3pDO0lBTUksNkJBQW9CLEVBQWMsRUFBVSxRQUFtQixFQUFVLEtBQWM7UUFBbkUsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFTO1FBSjlELG1CQUFjLEdBQUcsS0FBSyxDQUFDO0lBS2hELENBQUM7SUFFRCxzQ0FBUSxHQUFSO1FBQ0ksSUFBUyxJQUFJLENBQUMsY0FBYyxLQUFLLEVBQUU7WUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUNoRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUE7SUFDekMsQ0FBQztJQUVrQyx3Q0FBVSxHQUFWLFVBQVcsQ0FBaUI7UUFBL0QsaUJBc0JDO1FBckJHLElBQU0sYUFBYSxHQUFpQixDQUFDLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvRSxJQUFJLFVBQVUsR0FBVyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbEYsSUFBSSxRQUFR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QU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzt5Q0FBZSxjQUFjOzt5REFzQjlEO0lBRXNCO1FBQXRCLFlBQVksQ0FBQyxPQUFPLENBQUM7Ozs7c0RBSXJCO0lBRXFCO1FBQXJCLFlBQVksQ0FBQyxNQUFNLENBQUM7Ozs7cURBa0JwQjtJQUVrQztRQUFsQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7O3lDQUFnQixhQUFhOztzREEyQjlEO0lBRW9DO1FBQXBDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7eUNBQWtCLGFBQWE7O3dEQWFsRTtJQTNHUSxtQkFBbUI7UUFIL0IsU0FBUyxDQUFDO1lBQ1AsUUFBUSxFQUFFLFlBQVk7U0FDekIsQ0FBQzt5Q0FPMEIsVUFBVSxFQUFvQixTQUFTLEVBQWlCLE9BQU87T0FOOUUsbUJBQW1CLENBMkgvQjtJQUFELDBCQUFDO0NBQUEsQUEzSEQsSUEySEM7U0EzSFksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBSZW5kZXJlcjIsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tpc051bWJlcl0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZW9OdW1iZXJzRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBJbnB1dCgpIGlzTnVtYmVyOiBhbnk7XHJcbiAgICBASW5wdXQoJ2FsbG93TnVsbFZhbHVlJykgYWxsb3dOdWxsVmFsdWUgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgcHJldjogYW55O1xyXG4gICAgcHJpdmF0ZSByZWdleDogUmVnRXhwO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBtb2RlbDogTmdNb2RlbCkge1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICg8YW55PnRoaXMuYWxsb3dOdWxsVmFsdWUgPT09IFwiXCIpIHRoaXMuYWxsb3dOdWxsVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVnZXggPSBuZXcgUmVnRXhwKCdeXFxcXGQrJCcpO1xyXG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC50eXBlID0gXCJudW1iZXJcIlxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ3Bhc3RlJywgWyckZXZlbnQnXSkgYmxvY2tQYXN0ZShlOiBDbGlwYm9hcmRFdmVudCkge1xyXG4gICAgICAgIGNvbnN0IGNsaXBib2FyZERhdGE6IERhdGFUcmFuc2ZlciA9IGUuY2xpcGJvYXJkRGF0YSB8fCB3aW5kb3dbJ2NsaXBib2FyZERhdGEnXTtcclxuICAgICAgICBsZXQgcGFzdGVkRGF0YTogc3RyaW5nID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJykuc3BsaXQoXCIsXCIpLmpvaW4oXCIuXCIpO1xyXG5cclxuICAgICAgICBsZXQgcG9zUG9pbnQgPSBwYXN0ZWREYXRhLmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICAgICAgaWYgKHBvc1BvaW50ID4gLTEpIHtcclxuICAgICAgICAgICAgcGFzdGVkRGF0YSA9IHBhc3RlZERhdGEuc3Vic3RyaW5nKDAsIHBvc1BvaW50KS5zcGxpdChcIi5cIikuam9pbihcIlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG9ubHlOdW1iZXJzID0gQXJyYXkuZnJvbShwYXN0ZWREYXRhKS5tYXAoeCA9PiB0aGlzLmlzT25seU51bWJlcih4KSkucmVkdWNlKChwcmV2LCBlbCkgPT4gcHJldiAmJiBlbCwgdHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgaXNDb3JyZWN0ID0gdGhpcy5yZWdleC50ZXN0KHBhc3RlZERhdGEpO1xyXG4gICAgICAgIGlmIChpc0NvcnJlY3QgJiYgdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heCAmJiBwYXN0ZWREYXRhLmxlbmd0aCA+IHRoaXMuZWwubmF0aXZlRWxlbWVudC5tYXgubGVuZ3RoKVxyXG4gICAgICAgICAgICBwYXN0ZWREYXRhID0gcGFzdGVkRGF0YS5zdWJzdHIoMCwgdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heC5sZW5ndGgpO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKG9ubHlOdW1iZXJzICYmIGlzQ29ycmVjdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gcGFzdGVkRGF0YTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcwJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICB9LCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKSBvbmZvY3VzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPT0gXCIwXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignYmx1cicpIG9uQmx1cigpIHtcclxuICAgICAgICBsZXQgY3VycmVudDogc3RyaW5nID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlO1xyXG4gICAgICAgIGlmIChjdXJyZW50ID09IFwiXCIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dOdWxsVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBcIjBcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuY29udHJvbC5zZXRWYWx1ZSgwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC50eXBlID0gXCJudW1iZXJcIjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZWwubmF0aXZlRWxlbWVudC5tYXggJiYgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlQXNOdW1iZXIgPiArdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heDtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuY29udHJvbC5zZXRWYWx1ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWVBc051bWJlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKSBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcclxuICAgICAgICBsZXQgY3VycmVudDogc3RyaW5nID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlO1xyXG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnNwbGl0KFwiLVwiKS5qb2luKFwiXCIpO1xyXG4gICAgICAgIGxldCBwb3NQb2ludCA9IGN1cnJlbnQuaW5kZXhPZignLicpO1xyXG4gICAgICAgIGlmIChwb3NQb2ludCA+IC0xKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnN1YnN0cmluZygwLCBwb3NQb2ludCk7XHJcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IGN1cnJlbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1NwZWNpYWwoZXZlbnQpIHx8IGN1cnJlbnQgPT0gXCJcIikgeyBcclxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gOCB8fCBjdXJyZW50ICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJldiA9IGN1cnJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc09ubHlOdW1iZXIoZXZlbnQpKSB7IFxyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IFxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heCAmJiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWVBc051bWJlciA+ICt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQubWF4KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IGN1cnJlbnQuc3Vic3RyaW5nKDAsIGN1cnJlbnQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKSBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNTcGVjaWFsKGV2ZW50KSkgeyByZXR1cm47IH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzT25seU51bWJlcihldmVudCkpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgXHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBsZXQgY3VycmVudDogc3RyaW5nID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnByZXYgPSBjdXJyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNTcGVjaWFsKGU6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZS5rZXkgPT09ICdEZWxldGUnIHx8IChlLmtleSA9PT0gJ1RhYicgfHwgZS5rZXlDb2RlID09IDkpIHx8IChlLmtleSA9PT0gJ0JhY2tzcGFjZScgfHwgZS5rZXlDb2RlID09IDgpIHx8IGUua2V5ID09PSAnQXJyb3dMZWZ0JyB8fFxyXG4gICAgICAgICAgICBlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5rZXkgPT09ICdIb21lJyB8fCBlLmtleSA9PT0gJ0VuZCcgfHwgZS5rZXkgPT09ICdQYWdlRG93bicgfHwgZS5rZXkgPT09ICdQYWdlVXAnIHx8XHJcbiAgICAgICAgICAgIGUua2V5ID09PSAnQXJyb3dEb3duJyB8fCBlLmtleSA9PT0gJ0Fycm93VXAnIHx8IGUua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZS5rZXkgPT09ICdDb250cm9sJyB8fCBlLmtleSA9PT0gJ0FsdCcgfHwgZS5rZXkgPT09ICdTaGlmdCcgfHxcclxuICAgICAgICAgICAgKCg8YW55PmUpLmtleUlkZW50aWZpZXIgPT0gJ0Rvd24nIHx8ICg8YW55PmUpLmtleUlkZW50aWZpZXIgPT0gJ1VwJyB8fCAoPGFueT5lKS5rZXlJZGVudGlmaWVyID09ICdMZWZ0JyB8fCAoPGFueT5lKS5rZXlJZGVudGlmaWVyID09ICdSaWdodCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNPbmx5TnVtYmVyKGU6IEtleWJvYXJkRXZlbnQgfCBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICgoZS5rZXkgPj0gJzAnICYmIGUua2V5IDw9ICc5JykgfHwgKGUua2V5Q29kZSA+PSA0OCAmJiBlLmtleUNvZGUgPD0gNTcpIHx8IChlLmtleUNvZGUgPj0gOTYgJiYgZS5rZXlDb2RlIDw9IDEwNSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoZSA+PSAnMCcgJiYgZSA8PSAnOScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=