UNPKG

air-lib

Version:

This is Air's angular component library

203 lines 21.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input } from '@angular/core'; import { PagingService } from '../../services/paging.service'; import { ActivatedRoute } from '@angular/router'; export class DetailsPagingComponent { /** * @param {?} route */ constructor(route) { this.route = route; } /** * @return {?} */ ngOnInit() { /** @type {?} */ const self = this; self.setOptions(); } /** * @return {?} */ setOptions() { /** @type {?} */ const self = this; /** @type {?} */ const firstLevelActivatedRoute = self.route.children[0]; if (firstLevelActivatedRoute) { /** @type {?} */ const localStorageValue = PagingService.readFromLocalStorage(firstLevelActivatedRoute.snapshot); if (localStorageValue) { self.options = localStorageValue; } } if (!self.options || self.options == null || self.options.hash === 'empty') { return; } self.init(self.options); } /** * @param {?} options * @return {?} */ init(options) { /** @type {?} */ const self = this; self.options = options; if (!self.options || self.options == null) { return; } self.options.backUrl = decodeURIComponent(self.options.backUrl); self.isVisible = self.options && self.options.currentIndex !== undefined && self.options.startIndex !== undefined && self.options.total !== undefined; if (self.isVisible) { self.links = self.getLinks(self.options.currentIndex + 1, self.lastIndex + 1); } } /** * @return {?} */ get lastIndex() { return this.options.startIndex + this.options.total - 1; } /** * @return {?} */ first() { this.options.currentIndex = this.options.startIndex; this.go(this.options.currentIndex); } /** * @return {?} */ previous() { if (this.options && this.options.currentIndex === this.options.startIndex) { return; } this.options.currentIndex = this.options.currentIndex - 1; this.go(this.options.currentIndex); } /** * @param {?} index * @return {?} */ goTo(index) { if (index < this.options.startIndex || index > this.lastIndex) { throw Error('Out of range, should be between ' + this.options.startIndex + ' and ' + this.lastIndex); } this.options.previousIndex = this.options.currentIndex; this.options.currentIndex = index; console.log('Current index is ' + this.options.currentIndex + ', last index is ' + this.lastIndex); this.go(this.options.currentIndex); } /** * @return {?} */ next() { if (this.options && this.options.currentIndex === this.lastIndex) { return; } this.options.currentIndex++; this.go(this.options.currentIndex); } /** * @return {?} */ last() { this.options.currentIndex = this.lastIndex; this.go(this.options.currentIndex); } /** * @param {?} index * @return {?} */ go(index) { this.links = this.getLinks(this.options.currentIndex + 1, this.lastIndex + 1); console.log('fire paging event, index is ' + index); /** @type {?} */ const masterListHashIndex = Math.floor(this.options.currentIndex / this.options.itemsOnPage); if (PagingService.isExistsHash(this.context, masterListHashIndex)) { this.options.hash = PagingService.getHash(this.context, masterListHashIndex); } PagingService.firePagingEvent(this.options); } /** * @param {?} current * @param {?} last * @return {?} */ getLinks(current, last) { /** @type {?} */ const delta = 1; /** @type {?} */ const left = current - delta; /** @type {?} */ const right = current + delta + 1; /** @type {?} */ const range = new Array(); /** @type {?} */ const rangeWithDots = new Array(); /** @type {?} */ let l; for (let i = 1; i <= last; i++) { if (i === 1 || i === last || i >= left && i < right) { range.push(i); } } for (const i of range) { if (l) { if (i - l === 2) { rangeWithDots.push(l + 1); } else if (i - l !== 1) { rangeWithDots.push('...'); } } rangeWithDots.push(i.toString()); l = i; } return rangeWithDots; } } DetailsPagingComponent.decorators = [ { type: Component, args: [{ selector: 'air-details-paging', template: "<div class=\"container-list-pagination\" [hidden]=\"!isVisible\">\r\n <div *ngIf=\"displayReturnBackUrl && options\" [routerLink]=\"[options.backUrl]\" class=\"block-list-access\">\r\n <i class=\"fa fa-list p-r-10\" aria-hidden=\"true\"></i>{{'earnings.Header.BackToList' | translate}} </div>\r\n \r\n <div class=\"dataTables_wrapper container-pagination form-inline no-footer\">\r\n <ul class=\"pagination-list clear_after\" [hidden]=\"!options || options.total === 1 || options.total === 0\">\r\n <li>\r\n <a class=\"paginate_button previous\" [ngClass]=\"{'disabled': options?.currentIndex===options?.startIndex}\" (click)=\"previous()\">\r\n <i class=\"fa fa-angle-left\" aria-hidden=\"true\"></i>\r\n </a>\r\n </li>\r\n \r\n <li class=\"button-list\" *ngFor=\"let pageNo of links;\" \r\n [ngClass]=\"{ 'active': options && options.currentIndex === pageNo-1 }\">\r\n <a *ngIf=\"pageNo!=='...'\" (click)=\"goTo(pageNo-1)\">{{pageNo}}</a>\r\n <span class=\"disabled\" *ngIf=\"pageNo=='...'\">...</span>\r\n </li>\r\n \r\n <li>\r\n <a class=\"paginate_button last\" [ngClass]=\"{'disabled': options && options.currentIndex === lastIndex}\" (click)=\"next()\">\r\n <i class=\"fa fa-angle-right\" aria-hidden=\"true\"></i>\r\n </a>\r\n </li>\r\n \r\n </ul>\r\n </div>\r\n</div>", providers: [PagingService], styles: [".container-list-pagination{display:flex;align-items:center;height:55px;justify-content:flex-end}.container-list-pagination .block-list-access{cursor:pointer}.container-list-pagination .container-pagination{padding:0 0 0 10px;position:relative}.container-list-pagination .pagination-list{margin:0;padding:10px 0;list-style:none;font-size:11px}.container-list-pagination .pagination-list li{float:left;list-style:none}.container-list-pagination .pagination-list li a{font-size:11px;color:#999;padding:6px 9px}.container-list-pagination .pagination-list li .paginate_button{padding:6px 5px}.container-list-pagination .pagination-list li a:hover:not(.disabled){color:#000}.container-list-pagination .pagination-list li .disabled{cursor:default}.container-list-pagination .pagination-list li a.first:hover:not(.disabled),.container-list-pagination .pagination-list li a.last:hover:not(.disabled),.container-list-pagination .pagination-list li a.next:hover:not(.disabled),.container-list-pagination .pagination-list li a.previous:hover:not(.disabled){cursor:pointer}.container-list-pagination .pagination-list li.active a{font-weight:700;color:#000}.container-list-pagination .pagination-list li .fa{font-weight:500;font-size:12px}.container-list-pagination .pagination-list .button-list{padding:0;cursor:pointer}@media (max-width:500px){.container-list-pagination{justify-content:space-between}.container-list-pagination .block-list-access{font-size:0}.container-list-pagination .block-list-access i{font-size:19px}}"] }] } ]; DetailsPagingComponent.ctorParameters = () => [ { type: ActivatedRoute } ]; DetailsPagingComponent.propDecorators = { displayReturnBackUrl: [{ type: Input }], itemsOnPage: [{ type: Input }], context: [{ type: Input }] }; if (false) { /** @type {?} */ DetailsPagingComponent.prototype.displayReturnBackUrl; /** @type {?} */ DetailsPagingComponent.prototype.itemsOnPage; /** @type {?} */ DetailsPagingComponent.prototype.context; /** @type {?} */ DetailsPagingComponent.prototype.isVisible; /** @type {?} */ DetailsPagingComponent.prototype.links; /** @type {?} */ DetailsPagingComponent.prototype.options; /** * @type {?} * @private */ DetailsPagingComponent.prototype.route; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlscy1wYWdpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYWlyLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2RldGFpbHMtcGFnaW5nL2RldGFpbHMtcGFnaW5nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQVdqRCxNQUFNOzs7O0lBVUosWUFBb0IsS0FBcUI7UUFBckIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7SUFFekMsQ0FBQzs7OztJQUVELFFBQVE7O2NBRUEsSUFBSSxHQUFHLElBQUk7UUFDakIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7Ozs7SUFFRCxVQUFVOztjQUNGLElBQUksR0FBRyxJQUFJOztjQUNYLHdCQUF3QixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN2RCxJQUFJLHdCQUF3QixFQUFFOztrQkFDdEIsaUJBQWlCLEdBQUcsYUFBYSxDQUFDLG9CQUFvQixDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQztZQUMvRixJQUFJLGlCQUFpQixFQUFFO2dCQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLGlCQUFpQixDQUFDO2FBQ2xDO1NBQ0Y7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7WUFDMUUsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUIsQ0FBQzs7Ozs7SUFF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SUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFO2dCQUNuRCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2Y7U0FDRjtRQUVELEtBQUssTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxFQUFFO2dCQUNMLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2YsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQzNCO3FCQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ3RCLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQzNCO2FBQ0Y7WUFDRCxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDUDtRQUVELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7OztZQWpKRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsMCtDQUE4QztnQkFFOUMsU0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDOzthQUMzQjs7O1lBVFEsY0FBYzs7O21DQVlwQixLQUFLOzBCQUNMLEtBQUs7c0JBQ0wsS0FBSzs7OztJQUZOLHNEQUF1Qzs7SUFDdkMsNkNBQTZCOztJQUM3Qix5Q0FBeUI7O0lBRXpCLDJDQUFtQjs7SUFDbkIsdUNBQWE7O0lBQ2IseUNBQXFCOzs7OztJQUdULHVDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBhZ2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYWdpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUGFnaW5nRXZlbnQgfSBmcm9tICcuLi8uLi9lbnRpdGllcy9wYWdpbmctZXZlbnQnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWlyLWRldGFpbHMtcGFnaW5nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGV0YWlscy1wYWdpbmcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RldGFpbHMtcGFnaW5nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbUGFnaW5nU2VydmljZV1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBEZXRhaWxzUGFnaW5nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBkaXNwbGF5UmV0dXJuQmFja1VybDogYm9vbGVhbjtcclxuICBASW5wdXQoKSBpdGVtc09uUGFnZTogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGNvbnRleHQ6IHN0cmluZztcclxuXHJcbiAgaXNWaXNpYmxlOiBib29sZWFuO1xyXG4gIGxpbmtzOiBhbnlbXTsgLy8gYXJyYXkgb2YgbGlua3NcclxuICBvcHRpb25zOiBQYWdpbmdFdmVudDtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICBzZWxmLnNldE9wdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIHNldE9wdGlvbnMoKSB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgIGNvbnN0IGZpcnN0TGV2ZWxBY3RpdmF0ZWRSb3V0ZSA9IHNlbGYucm91dGUuY2hpbGRyZW5bMF07XHJcbiAgICBpZiAoZmlyc3RMZXZlbEFjdGl2YXRlZFJvdXRlKSB7XHJcbiAgICAgIGNvbnN0IGxvY2FsU3RvcmFnZVZhbHVlID0gUGFnaW5nU2VydmljZS5yZWFkRnJvbUxvY2FsU3RvcmFnZShmaXJzdExldmVsQWN0aXZhdGVkUm91dGUuc25hcHNob3QpO1xyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlVmFsdWUpIHtcclxuICAgICAgICBzZWxmLm9wdGlvbnMgPSBsb2NhbFN0b3JhZ2VWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghc2VsZi5vcHRpb25zIHx8IHNlbGYub3B0aW9ucyA9PSBudWxsIHx8IHNlbGYub3B0aW9ucy5oYXNoID09PSAnZW1wdHknKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHNlbGYuaW5pdChzZWxmLm9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgaW5pdCAob3B0aW9uczogUGFnaW5nRXZlbnQpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucztcclxuICAgIGlmICghc2VsZi5vcHRpb25zIHx8IHNlbGYub3B0aW9ucyA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzZWxmLm9wdGlvbnMuYmFja1VybCA9IGRlY29kZVVSSUNvbXBvbmVudChzZWxmLm9wdGlvbnMuYmFja1VybCk7XHJcblxyXG4gICAgc2VsZi5pc1Zpc2libGUgPSBzZWxmLm9wdGlvbnNcclxuICAgICAgJiYgc2VsZi5vcHRpb25zLmN1cnJlbnRJbmRleCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICYmIHNlbGYub3B0aW9ucy5zdGFydEluZGV4ICE9PSB1bmRlZmluZWRcclxuICAgICAgJiYgc2VsZi5vcHRpb25zLnRvdGFsICE9PSB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKHNlbGYuaXNWaXNpYmxlKSB7XHJcbiAgICAgIHNlbGYubGlua3MgPSBzZWxmLmdldExpbmtzKHNlbGYub3B0aW9ucy5jdXJyZW50SW5kZXggKyAxLCBzZWxmLmxhc3RJbmRleCArIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhc3RJbmRleCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zdGFydEluZGV4ICsgdGhpcy5vcHRpb25zLnRvdGFsIC0gMTtcclxuICB9XHJcblxyXG4gIGZpcnN0KCkge1xyXG4gICAgdGhpcy5vcHRpb25zLmN1cnJlbnRJbmRleCA9IHRoaXMub3B0aW9ucy5zdGFydEluZGV4O1xyXG4gICAgdGhpcy5nbyh0aGlzLm9wdGlvbnMuY3VycmVudEluZGV4KTtcclxuICB9XHJcblxyXG4gIHByZXZpb3VzKCkge1xyXG4gICAgaWYodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5jdXJyZW50SW5kZXg9PT10aGlzLm9wdGlvbnMuc3RhcnRJbmRleClcclxuICAgIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmN1cnJlbnRJbmRleCA9IHRoaXMub3B0aW9ucy5jdXJyZW50SW5kZXggLSAxO1xyXG4gICAgdGhpcy5nbyh0aGlzLm9wdGlvbnMuY3VycmVudEluZGV4KTtcclxuICB9XHJcblxyXG4gIGdvVG8oaW5kZXg6IG51bWJlcikge1xyXG4gICAgaWYgKGluZGV4IDwgdGhpcy5vcHRpb25zLnN0YXJ0SW5kZXggfHwgaW5kZXggPiB0aGlzLmxhc3RJbmRleCkge1xyXG4gICAgICB0aHJvdyBFcnJvcignT3V0IG9mIHJhbmdlLCBzaG91bGQgYmUgYmV0d2VlbiAnICsgdGhpcy5vcHRpb25zLnN0YXJ0SW5kZXggKyAnIGFuZCAnICsgdGhpcy5sYXN0SW5kZXgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLnByZXZpb3VzSW5kZXggPSB0aGlzLm9wdGlvbnMuY3VycmVudEluZGV4O1xyXG4gICAgdGhpcy5vcHRpb25zLmN1cnJlbnRJbmRleCA9IGluZGV4O1xyXG4gICAgY29uc29sZS5sb2coJ0N1cnJlbnQgaW5kZXggaXMgJyArIHRoaXMub3B0aW9ucy5jdXJyZW50SW5kZXggKyAnLCBsYXN0IGluZGV4IGlzICcgKyB0aGlzLmxhc3RJbmRleCk7XHJcbiAgICB0aGlzLmdvKHRoaXMub3B0aW9ucy5jdXJyZW50SW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgbmV4dCgpIHtcclxuICAgIGlmKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuY3VycmVudEluZGV4ID09PSB0aGlzLmxhc3RJbmRleClcclxuICAgIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmN1cnJlbnRJbmRleCsrO1xyXG4gICAgdGhpcy5nbyh0aGlzLm9wdGlvbnMuY3VycmVudEluZGV4KTtcclxuICB9XHJcblxyXG4gIGxhc3QoKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuY3VycmVudEluZGV4ID0gdGhpcy5sYXN0SW5kZXg7XHJcbiAgICB0aGlzLmdvKHRoaXMub3B0aW9ucy5jdXJyZW50SW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgZ28oaW5kZXg6IG51bWJlcikge1xyXG5cclxuICAgIHRoaXMubGlua3MgPSB0aGlzLmdldExpbmtzKHRoaXMub3B0aW9ucy5jdXJyZW50SW5kZXggKyAxLCB0aGlzLmxhc3RJbmRleCArIDEpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCdmaXJlIHBhZ2luZyBldmVudCwgaW5kZXggaXMgJyArIGluZGV4KTtcclxuXHJcbiAgICBjb25zdCBtYXN0ZXJMaXN0SGFzaEluZGV4ID0gTWF0aC5mbG9vcih0aGlzLm9wdGlvbnMuY3VycmVudEluZGV4IC8gdGhpcy5vcHRpb25zLml0ZW1zT25QYWdlKTtcclxuICAgIGlmIChQYWdpbmdTZXJ2aWNlLmlzRXhpc3RzSGFzaCh0aGlzLmNvbnRleHQsIG1hc3Rlckxpc3RIYXNoSW5kZXgpKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5oYXNoID0gUGFnaW5nU2VydmljZS5nZXRIYXNoKHRoaXMuY29udGV4dCwgbWFzdGVyTGlzdEhhc2hJbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgUGFnaW5nU2VydmljZS5maXJlUGFnaW5nRXZlbnQodGhpcy5vcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldExpbmtzKGN1cnJlbnQ6IG51bWJlciwgbGFzdDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBkZWx0YSA9IDE7XHJcbiAgICBjb25zdCBsZWZ0ID0gY3VycmVudCAtIGRlbHRhO1xyXG4gICAgY29uc3QgcmlnaHQgPSBjdXJyZW50ICsgZGVsdGEgKyAxO1xyXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xyXG4gICAgY29uc3QgcmFuZ2VXaXRoRG90cyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgICBsZXQgbDtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBsYXN0OyBpKyspIHtcclxuICAgICAgaWYgKGkgPT09IDEgfHwgaSA9PT0gbGFzdCB8fCBpID49IGxlZnQgJiYgaSA8IHJpZ2h0KSB7XHJcbiAgICAgICAgcmFuZ2UucHVzaChpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgaSBvZiByYW5nZSkge1xyXG4gICAgICBpZiAobCkge1xyXG4gICAgICAgIGlmIChpIC0gbCA9PT0gMikge1xyXG4gICAgICAgICAgcmFuZ2VXaXRoRG90cy5wdXNoKGwgKyAxKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGkgLSBsICE9PSAxKSB7XHJcbiAgICAgICAgICByYW5nZVdpdGhEb3RzLnB1c2goJy4uLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByYW5nZVdpdGhEb3RzLnB1c2goaS50b1N0cmluZygpKTtcclxuICAgICAgbCA9IGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJhbmdlV2l0aERvdHM7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gIFRlc3QgaXQ6XHJcbiAgaHR0cHM6Ly9yZXh0ZXN0ZXIuY29tL0hVTzI1ODM3XHJcbiAgKi9cclxuXHJcbn1cclxuXHJcblxyXG4iXX0=