UNPKG

ng-fancy-gui

Version:

This package contains components, for creating userinterfaces in a Angular app.

162 lines 25 kB
import { __decorate } from "tslib"; import { Component, EventEmitter, Output, ViewChild, Input, HostListener } from '@angular/core'; import { HorizontalLine } from './classes/horizontalLine'; import { Mouse } from './classes/mouse'; var RotationSliderComponent = /** @class */ (function () { function RotationSliderComponent() { this.iconPath = null; this.additive = ""; this.max = 25; this.min = -25; this.change = new EventEmitter(); this.renderingValue = '0.00'; this.horizontalLines = []; this.value = 0; this.spaceing = 30; this.lineThikness = 3; this.lineColor = 'gray'; this.horizontalLinesMarginTop = 25; this.horizontalLineMove = 0; } RotationSliderComponent.prototype.ngAfterViewInit = function () { this.canvas = this.canvasVc.nativeElement; this.ctx = this.canvas.getContext('2d'); this.init(); }; RotationSliderComponent.prototype.ngOnDestroy = function () { window.cancelAnimationFrame(this.animationFrameHandler); }; RotationSliderComponent.prototype.clear = function () { this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); }; RotationSliderComponent.prototype.init = function () { this.mouse = new Mouse(this); this.resize(); this.addHorizontalLines(); this.initRenderingLoop(); this.initMouseEvents(); }; RotationSliderComponent.prototype.initRenderingLoop = function () { var _this = this; var step = function () { _this.render(); window.requestAnimationFrame(step); }; this.animationFrameHandler = window.requestAnimationFrame(step); }; RotationSliderComponent.prototype.initMouseEvents = function () { var _this = this; this.canvas.onmousemove = function (evt) { if (_this.mouse.isDown) { if ((_this.horizontalLineMove + (_this.mouse.lastX - _this.mouse.x)) / _this.spaceing <= _this.max && (_this.horizontalLineMove + (_this.mouse.lastX - _this.mouse.x)) / _this.spaceing >= _this.min) { _this.horizontalLineMove += (_this.mouse.lastX - _this.mouse.x); _this.value = (Math.round((_this.horizontalLineMove / _this.spaceing) * 100) / 100); _this.renderingValue = (Math.round((_this.horizontalLineMove / _this.spaceing) * 100) / 100).toFixed(2); } else { if (((_this.horizontalLineMove + (_this.mouse.lastX - _this.mouse.x)) / _this.spaceing) > 0) { _this.value = _this.max; _this.horizontalLineMove = _this.max * _this.spaceing; _this.renderingValue = _this.max.toFixed(2).toString(); } else { _this.value = _this.min; _this.horizontalLineMove = _this.min * _this.spaceing; _this.renderingValue = _this.min.toFixed(2).toString(); } } _this.change.emit(_this.value); } _this.mouse.syncPosition(evt); }; this.canvas.ontouchmove = function (evt) { evt.preventDefault(); if (_this.mouse.isDown) { if ((_this.horizontalLineMove + (_this.mouse.lastX - _this.mouse.x)) / _this.spaceing <= _this.max && (_this.horizontalLineMove + (_this.mouse.lastX - _this.mouse.x)) / _this.spaceing >= _this.min) { _this.horizontalLineMove += (_this.mouse.lastX - _this.mouse.x); _this.value = (Math.round((_this.horizontalLineMove / _this.spaceing) * 100) / 100); _this.renderingValue = (Math.round((_this.horizontalLineMove / _this.spaceing) * 100) / 100).toFixed(2); } else { if (((_this.horizontalLineMove + (_this.mouse.lastX - _this.mouse.x)) / _this.spaceing) > 0) { _this.value = _this.max; _this.horizontalLineMove = _this.max * _this.spaceing; _this.renderingValue = _this.max.toFixed(2).toString(); } else { _this.value = _this.min; _this.horizontalLineMove = _this.min * _this.spaceing; _this.renderingValue = _this.min.toFixed(2).toString(); } } _this.change.emit(_this.value); } _this.mouse.syncTouchPosition(evt); }; }; RotationSliderComponent.prototype.resize = function () { var parent = this.canvas.parentElement; this.canvas.width = parent.clientWidth; // this.canvas.height = parent.clientHeight; this.horizontalLines = []; this.addHorizontalLines(); }; RotationSliderComponent.prototype.render = function () { this.clear(); this.ctx.beginPath(); this.ctx.arc(this.canvas.width / 2, 10, 5, 0, 2 * Math.PI); this.ctx.fillStyle = this.lineColor; this.ctx.fill(); this.ctx.closePath(); this.horizontalLines.forEach(function (x) { x.render(); }); }; RotationSliderComponent.prototype.addHorizontalLines = function () { for (var i = 0; i <= this.max + 5; i++) { this.horizontalLines.push(new HorizontalLine(this.lineThikness, 100, (this.canvas.width / 2) + (i * this.spaceing), this.horizontalLinesMarginTop, i, this)); } for (var i = 0; i >= this.min - 5; i--) { this.horizontalLines.push(new HorizontalLine(this.lineThikness, 100, (this.canvas.width / 2) - ((i * (-1)) * this.spaceing), this.horizontalLinesMarginTop, i, this)); } }; RotationSliderComponent.prototype.resetValue = function () { this.value = 0; this.horizontalLineMove = 0; this.renderingValue = '0.00'; this.change.emit(this.value); }; __decorate([ Input() ], RotationSliderComponent.prototype, "iconPath", void 0); __decorate([ Input() ], RotationSliderComponent.prototype, "additive", void 0); __decorate([ Input() ], RotationSliderComponent.prototype, "max", void 0); __decorate([ Input() ], RotationSliderComponent.prototype, "min", void 0); __decorate([ Output() ], RotationSliderComponent.prototype, "change", void 0); __decorate([ ViewChild('canvas') ], RotationSliderComponent.prototype, "canvasVc", void 0); __decorate([ HostListener('window:resize') ], RotationSliderComponent.prototype, "resize", null); RotationSliderComponent = __decorate([ Component({ selector: 'fg-slider', template: "<div class=\"valueOuterWrapper\">\n <div [class.visible]=\"value!==0\" class=\"valueWrapper\">\n \n <img *ngIf=\"iconPath\" src=\"{{iconPath}}\" />\n <!--<div class=\"valueWrapper visible\">-->\n <span class=\"value\">{{renderingValue}}{{additive}}</span>\n <button (click)=\"resetValue()\" class=\"resetButton\" type=\"button\">x</button>\n </div>\n</div>\n<div class=\"rotationSliderCanvasWrap\">\n <canvas #canvas></canvas>\n</div>\n", styles: [":host{display:block;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;padding-top:35px}.valueOuterWrapper{position:absolute;top:0;left:50%;transform:translate(-50%,0)}.valueOuterWrapper .valueWrapper{border-radius:7px;padding:5px 15px 5px 18px;position:relative;width:25px;height:25px;margin:0 auto;transition:width .5s,background-color .5s}.valueOuterWrapper .valueWrapper img{width:25px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.valueOuterWrapper .valueWrapper .value{margin-top:5px;text-align:center;display:none;font-size:13px;font-weight:700}.valueOuterWrapper .valueWrapper .resetButton{position:absolute;display:none;color:#fff;background-color:#000;width:15px;height:15px;border-radius:20px;border:none;outline:0;right:8px;font-size:9px;top:50%;transform:translate(0,-50%)}.valueOuterWrapper .valueWrapper.visible{background-color:#aaa9a9;width:100px}.valueOuterWrapper .valueWrapper.visible img{position:absolute;left:17px;width:20px;display:block}.valueOuterWrapper .valueWrapper.visible .resetButton,.valueOuterWrapper .valueWrapper.visible .value{display:block}"] }) ], RotationSliderComponent); return RotationSliderComponent; }()); export { RotationSliderComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRpb24tc2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWZhbmN5LWd1aS8iLCJzb3VyY2VzIjpbImxpYi9yb3RhdGlvbi1zbGlkZXIvcm90YXRpb24tc2xpZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFvQixTQUFTLEVBQUUsWUFBWSxFQUFVLE1BQU0sRUFBaUIsU0FBUyxFQUFhLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEosT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU94QztJQTJCRTtRQXpCUyxhQUFRLEdBQUUsSUFBSSxDQUFDO1FBQ2YsYUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUNiLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxRQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFFVCxXQUFNLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUQsbUJBQWMsR0FBVyxNQUFNLENBQUM7UUFNeEIsb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBR3hDLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFDbEIsY0FBUyxHQUFHLE1BQU0sQ0FBQztRQUNsQiw2QkFBd0IsR0FBRyxFQUFFLENBQUM7UUFDL0IsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO0lBTTlCLENBQUM7SUFFRCxpREFBZSxHQUFmO1FBQ0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUMxQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FB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LEtBQUssRUFBRTt3REFBVTtJQUNUO1FBQVIsS0FBSyxFQUFFO3dEQUFXO0lBRVQ7UUFBVCxNQUFNLEVBQUU7MkRBQW1EO0lBSXZDO1FBQXBCLFNBQVMsQ0FBQyxRQUFRLENBQUM7NkRBQVU7SUF3RzlCO1FBREMsWUFBWSxDQUFDLGVBQWUsQ0FBQzt5REFPN0I7SUF6SFUsdUJBQXVCO1FBTG5DLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxXQUFXO1lBQ3JCLCtjQUErQzs7U0FFaEQsQ0FBQztPQUNXLHVCQUF1QixDQXNLbkM7SUFBRCw4QkFBQztDQUFBLEFBdEtELElBc0tDO1NBdEtZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE91dHB1dCwgQWZ0ZXJWaWV3SW5pdCwgVmlld0NoaWxkLCBPbkRlc3Ryb3ksIElucHV0LCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEhvcml6b250YWxMaW5lIH0gZnJvbSAnLi9jbGFzc2VzL2hvcml6b250YWxMaW5lJztcbmltcG9ydCB7IE1vdXNlIH0gZnJvbSAnLi9jbGFzc2VzL21vdXNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZmctc2xpZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JvdGF0aW9uLXNsaWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JvdGF0aW9uLXNsaWRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJvdGF0aW9uU2xpZGVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBpY29uUGF0aD0gbnVsbDtcbiAgQElucHV0KCkgYWRkaXRpdmUgPSBcIlwiXG4gIEBJbnB1dCgpIG1heCA9IDI1O1xuICBASW5wdXQoKSBtaW4gPSAtMjU7XG5cbiAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcmVuZGVyaW5nVmFsdWU6IHN0cmluZyA9ICcwLjAwJztcblxuICBAVmlld0NoaWxkKCdjYW52YXMnKSBjYW52YXNWYztcbiAgcHVibGljICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICBwdWJsaWMgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBwcml2YXRlIG1vdXNlOiBNb3VzZTtcbiAgcHJpdmF0ZSBob3Jpem9udGFsTGluZXM6IEhvcml6b250YWxMaW5lW10gPSBbXTtcblxuXG4gIHB1YmxpYyB2YWx1ZSA9IDA7XG4gIHByaXZhdGUgc3BhY2VpbmcgPSAzMDtcbiAgcHJpdmF0ZSBsaW5lVGhpa25lc3MgPSAzO1xuICBwdWJsaWMgbGluZUNvbG9yID0gJ2dyYXknO1xuICBwcml2YXRlIGhvcml6b250YWxMaW5lc01hcmdpblRvcCA9IDI1O1xuICBwdWJsaWMgaG9yaXpvbnRhbExpbmVNb3ZlID0gMDtcblxuICBwcml2YXRlIGFuaW1hdGlvbkZyYW1lSGFuZGxlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcblxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY2FudmFzID0gdGhpcy5jYW52YXNWYy5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmFuaW1hdGlvbkZyYW1lSGFuZGxlcik7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLmN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG4gIH1cblxuICBpbml0KCkge1xuXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBNb3VzZSh0aGlzKTtcblxuICAgIHRoaXMucmVzaXplKCk7XG5cbiAgICB0aGlzLmFkZEhvcml6b250YWxMaW5lcygpO1xuICAgIHRoaXMuaW5pdFJlbmRlcmluZ0xvb3AoKTtcbiAgICB0aGlzLmluaXRNb3VzZUV2ZW50cygpO1xuICB9XG5cbiAgaW5pdFJlbmRlcmluZ0xvb3AoKSB7XG4gICAgY29uc3Qgc3RlcCA9ICgpID0+IHtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xuICAgIH1cblxuICAgIHRoaXMuYW5pbWF0aW9uRnJhbWVIYW5kbGVyID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcbiAgfVxuXG4gIGluaXRNb3VzZUV2ZW50cygpIHtcbiAgICB0aGlzLmNhbnZhcy5vbm1vdXNlbW92ZSA9IChldnQpID0+IHtcbiAgICAgIGlmICh0aGlzLm1vdXNlLmlzRG93bikge1xuICAgICAgICBpZiAoKHRoaXMuaG9yaXpvbnRhbExpbmVNb3ZlICsgKHRoaXMubW91c2UubGFzdFggLSB0aGlzLm1vdXNlLngpKSAvIHRoaXMuc3BhY2VpbmcgPD0gdGhpcy5tYXggJiZcbiAgICAgICAgICAodGhpcy5ob3Jpem9udGFsTGluZU1vdmUgKyAodGhpcy5tb3VzZS5sYXN0WCAtIHRoaXMubW91c2UueCkpIC8gdGhpcy5zcGFjZWluZyA+PSB0aGlzLm1pbikge1xuICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbExpbmVNb3ZlICs9ICh0aGlzLm1vdXNlLmxhc3RYIC0gdGhpcy5tb3VzZS54KTtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gKE1hdGgucm91bmQoKHRoaXMuaG9yaXpvbnRhbExpbmVNb3ZlIC8gdGhpcy5zcGFjZWluZykgKiAxMDApIC8gMTAwKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmluZ1ZhbHVlID0gKE1hdGgucm91bmQoKHRoaXMuaG9yaXpvbnRhbExpbmVNb3ZlIC8gdGhpcy5zcGFjZWluZykgKiAxMDApIC8gMTAwKS50b0ZpeGVkKDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgoKHRoaXMuaG9yaXpvbnRhbExpbmVNb3ZlICsgKHRoaXMubW91c2UubGFzdFggLSB0aGlzLm1vdXNlLngpKSAvIHRoaXMuc3BhY2VpbmcpID4gMCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWF4O1xuICAgICAgICAgICAgdGhpcy5ob3Jpem9udGFsTGluZU1vdmUgPSB0aGlzLm1heCAqIHRoaXMuc3BhY2Vpbmc7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmluZ1ZhbHVlID0gdGhpcy5tYXgudG9GaXhlZCgyKS50b1N0cmluZygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5taW47XG4gICAgICAgICAgICB0aGlzLmhvcml6b250YWxMaW5lTW92ZSA9IHRoaXMubWluICogdGhpcy5zcGFjZWluZztcbiAgICAgICAgICAgIHRoaXMucmVuZGVyaW5nVmFsdWUgPSB0aGlzLm1pbi50b0ZpeGVkKDIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLm1vdXNlLnN5bmNQb3NpdGlvbihldnQpO1xuICAgIH07XG5cbiAgICB0aGlzLmNhbnZhcy5vbnRvdWNobW92ZSA9IChldnQpID0+IHtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKHRoaXMubW91c2UuaXNEb3duKSB7XG4gICAgICAgIGlmICgodGhpcy5ob3Jpem9udGFsTGluZU1vdmUgKyAodGhpcy5tb3VzZS5sYXN0WCAtIHRoaXMubW91c2UueCkpIC8gdGhpcy5zcGFjZWluZyA8PSB0aGlzLm1heCAmJlxuICAgICAgICAgICh0aGlzLmhvcml6b250YWxMaW5lTW92ZSArICh0aGlzLm1vdXNlLmxhc3RYIC0gdGhpcy5tb3VzZS54KSkgLyB0aGlzLnNwYWNlaW5nID49IHRoaXMubWluKSB7XG4gICAgICAgICAgdGhpcy5ob3Jpem9udGFsTGluZU1vdmUgKz0gKHRoaXMubW91c2UubGFzdFggLSB0aGlzLm1vdXNlLngpO1xuICAgICAgICAgIHRoaXMudmFsdWUgPSAoTWF0aC5yb3VuZCgodGhpcy5ob3Jpem9udGFsTGluZU1vdmUgLyB0aGlzLnNwYWNlaW5nKSAqIDEwMCkgLyAxMDApO1xuICAgICAgICAgIHRoaXMucmVuZGVyaW5nVmFsdWUgPSAoTWF0aC5yb3VuZCgodGhpcy5ob3Jpem9udGFsTGluZU1vdmUgLyB0aGlzLnNwYWNlaW5nKSAqIDEwMCkgLyAxMDApLnRvRml4ZWQoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCgodGhpcy5ob3Jpem9udGFsTGluZU1vdmUgKyAodGhpcy5tb3VzZS5sYXN0WCAtIHRoaXMubW91c2UueCkpIC8gdGhpcy5zcGFjZWluZykgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tYXg7XG4gICAgICAgICAgICB0aGlzLmhvcml6b250YWxMaW5lTW92ZSA9IHRoaXMubWF4ICogdGhpcy5zcGFjZWluZztcbiAgICAgICAgICAgIHRoaXMucmVuZGVyaW5nVmFsdWUgPSB0aGlzLm1heC50b0ZpeGVkKDIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1pbjtcbiAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbExpbmVNb3ZlID0gdGhpcy5taW4gKiB0aGlzLnNwYWNlaW5nO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJpbmdWYWx1ZSA9IHRoaXMubWluLnRvRml4ZWQoMikudG9TdHJpbmcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubW91c2Uuc3luY1RvdWNoUG9zaXRpb24oZXZ0KTtcbiAgICB9O1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIHJlc2l6ZSgpIHtcbiAgICBjb25zdCBwYXJlbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5jYW52YXMucGFyZW50RWxlbWVudDtcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHBhcmVudC5jbGllbnRXaWR0aDtcbiAgICAvLyB0aGlzLmNhbnZhcy5oZWlnaHQgPSBwYXJlbnQuY2xpZW50SGVpZ2h0O1xuICAgIHRoaXMuaG9yaXpvbnRhbExpbmVzID0gW107XG4gICAgdGhpcy5hZGRIb3Jpem9udGFsTGluZXMoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgdGhpcy5jdHguYXJjKHRoaXMuY2FudmFzLndpZHRoIC8gMiwgMTAsIDUsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLmN0eC5maWxsKCk7XG4gICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG5cbiAgICB0aGlzLmhvcml6b250YWxMaW5lcy5mb3JFYWNoKHggPT4ge1xuICAgICAgeC5yZW5kZXIoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEhvcml6b250YWxMaW5lcygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSB0aGlzLm1heCArIDU7IGkrKykge1xuICAgICAgdGhpcy5ob3Jpem9udGFsTGluZXMucHVzaChcbiAgICAgICAgbmV3IEhvcml6b250YWxMaW5lKHRoaXMubGluZVRoaWtuZXNzLFxuICAgICAgICAgIDEwMCxcbiAgICAgICAgICAodGhpcy5jYW52YXMud2lkdGggLyAyKSArIChpICogdGhpcy5zcGFjZWluZyksXG4gICAgICAgICAgdGhpcy5ob3Jpem9udGFsTGluZXNNYXJnaW5Ub3AsXG4gICAgICAgICAgaSxcbiAgICAgICAgICB0aGlzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA+PSB0aGlzLm1pbiAtIDU7IGktLSkge1xuICAgICAgdGhpcy5ob3Jpem9udGFsTGluZXMucHVzaChcbiAgICAgICAgbmV3IEhvcml6b250YWxMaW5lKFxuICAgICAgICAgIHRoaXMubGluZVRoaWtuZXNzLFxuICAgICAgICAgIDEwMCxcbiAgICAgICAgICAodGhpcy5jYW52YXMud2lkdGggLyAyKSAtICgoaSAqICgtMSkpICogdGhpcy5zcGFjZWluZyksXG4gICAgICAgICAgdGhpcy5ob3Jpem9udGFsTGluZXNNYXJnaW5Ub3AsIGksXG4gICAgICAgICAgdGhpcylcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRWYWx1ZSgpIHtcbiAgICB0aGlzLnZhbHVlID0gMDtcbiAgICB0aGlzLmhvcml6b250YWxMaW5lTW92ZSA9IDA7XG4gICAgdGhpcy5yZW5kZXJpbmdWYWx1ZSA9ICcwLjAwJztcbiAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICB9XG59XG4iXX0=