UNPKG

@hxui/angular

Version:

* * *

440 lines 29.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ /** * @template T */ var /** * @template T */ LinkedList = /** @class */ (function () { function LinkedList() { this.length = 0; this.asArray = []; // Array methods overriding END } /** * @param {?} position * @return {?} */ LinkedList.prototype.getNode = /** * @param {?} position * @return {?} */ function (position) { if (this.length === 0 || position < 0 || position >= this.length) { throw new Error('Position is out of the list'); } /** @type {?} */ var current = this.head; for (var index = 0; index < position; index++) { current = current.next; } return current; }; /** * @return {?} */ LinkedList.prototype.createInternalArrayRepresentation = /** * @return {?} */ function () { /** @type {?} */ var outArray = []; /** @type {?} */ var current = this.head; while (current) { outArray.push(current.value); current = current.next; } this.asArray = outArray; }; /** * @param {?} position * @return {?} */ LinkedList.prototype.get = /** * @param {?} position * @return {?} */ function (position) { if (this.length === 0 || position < 0 || position >= this.length) { return void 0; } /** @type {?} */ var current = this.head; for (var index = 0; index < position; index++) { current = current.next; } return current.value; }; /** * @param {?} value * @param {?=} position * @return {?} */ LinkedList.prototype.add = /** * @param {?} value * @param {?=} position * @return {?} */ function (value, position) { if (position === void 0) { position = this.length; } if (position < 0 || position > this.length) { throw new Error('Position is out of the list'); } /** @type {?} */ var node = { value: (/** @type {?} */ (value)), next: (/** @type {?} */ (undefined)), previous: (/** @type {?} */ (undefined)) }; if (this.length === 0) { this.head = node; this.tail = node; this.current = node; } else { if (position === 0) { // first node node.next = this.head; this.head.previous = node; this.head = node; } else if (position === this.length) { // last node this.tail.next = node; node.previous = this.tail; this.tail = node; } else { // node in middle /** @type {?} */ var currentPreviousNode = this.getNode(position - 1); /** @type {?} */ var currentNextNode = currentPreviousNode.next; currentPreviousNode.next = node; currentNextNode.previous = node; node.previous = currentPreviousNode; node.next = currentNextNode; } } this.length++; this.createInternalArrayRepresentation(); }; /** * @param {?=} position * @return {?} */ LinkedList.prototype.remove = /** * @param {?=} position * @return {?} */ function (position) { if (position === void 0) { position = 0; } if (this.length === 0 || position < 0 || position >= this.length) { throw new Error('Position is out of the list'); } if (position === 0) { // first node this.head = this.head.next; if (this.head) { // there is no second node this.head.previous = undefined; } else { // there is no second node this.tail = undefined; } } else if (position === this.length - 1) { // last node this.tail = this.tail.previous; this.tail.next = undefined; } else { // middle node /** @type {?} */ var removedNode = this.getNode(position); removedNode.next.previous = removedNode.previous; removedNode.previous.next = removedNode.next; } this.length--; this.createInternalArrayRepresentation(); }; /** * @param {?} position * @param {?} value * @return {?} */ LinkedList.prototype.set = /** * @param {?} position * @param {?} value * @return {?} */ function (position, value) { if (this.length === 0 || position < 0 || position >= this.length) { throw new Error('Position is out of the list'); } /** @type {?} */ var node = this.getNode(position); node.value = value; this.createInternalArrayRepresentation(); }; /** * @return {?} */ LinkedList.prototype.toArray = /** * @return {?} */ function () { return this.asArray; }; /** * @param {?} fn * @return {?} */ LinkedList.prototype.findAll = /** * @param {?} fn * @return {?} */ function (fn) { /** @type {?} */ var current = this.head; /** @type {?} */ var result = []; for (var index = 0; index < this.length; index++) { if (fn(current.value, index)) { result.push({ index: index, value: current.value }); } current = current.next; } return result; }; // Array methods overriding start // Array methods overriding start /** * @param {...?} args * @return {?} */ LinkedList.prototype.push = // Array methods overriding start /** * @param {...?} args * @return {?} */ function () { var _this = this; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } args.forEach(function (arg) { _this.add(arg); }); return this.length; }; /** * @return {?} */ LinkedList.prototype.pop = /** * @return {?} */ function () { if (this.length === 0) { return undefined; } /** @type {?} */ var last = this.tail; this.remove(this.length - 1); return last.value; }; /** * @param {...?} args * @return {?} */ LinkedList.prototype.unshift = /** * @param {...?} args * @return {?} */ function () { var _this = this; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } args.reverse(); args.forEach(function (arg) { _this.add(arg, 0); }); return this.length; }; /** * @return {?} */ LinkedList.prototype.shift = /** * @return {?} */ function () { if (this.length === 0) { return undefined; } /** @type {?} */ var lastItem = this.head.value; this.remove(); return lastItem; }; /** * @param {?} fn * @return {?} */ LinkedList.prototype.forEach = /** * @param {?} fn * @return {?} */ function (fn) { /** @type {?} */ var current = this.head; for (var index = 0; index < this.length; index++) { fn(current.value, index); current = current.next; } }; /** * @param {?} value * @return {?} */ LinkedList.prototype.indexOf = /** * @param {?} value * @return {?} */ function (value) { /** @type {?} */ var current = this.head; /** @type {?} */ var position = 0; for (var index = 0; index < this.length; index++) { if (current.value === value) { position = index; break; } current = current.next; } return position; }; /** * @param {?} fn * @return {?} */ LinkedList.prototype.some = /** * @param {?} fn * @return {?} */ function (fn) { /** @type {?} */ var current = this.head; /** @type {?} */ var result = false; while (current && !result) { if (fn(current.value)) { result = true; break; } current = current.next; } return result; }; /** * @param {?} fn * @return {?} */ LinkedList.prototype.every = /** * @param {?} fn * @return {?} */ function (fn) { /** @type {?} */ var current = this.head; /** @type {?} */ var result = true; while (current && result) { if (!fn(current.value)) { result = false; } current = current.next; } return result; }; /** * @return {?} */ LinkedList.prototype.toString = /** * @return {?} */ function () { return '[Linked List]'; }; /** * @param {?} fn * @return {?} */ LinkedList.prototype.find = /** * @param {?} fn * @return {?} */ function (fn) { /** @type {?} */ var current = this.head; /** @type {?} */ var result; for (var index = 0; index < this.length; index++) { if (fn(current.value, index)) { result = current.value; break; } current = current.next; } return result; }; /** * @param {?} fn * @return {?} */ LinkedList.prototype.findIndex = /** * @param {?} fn * @return {?} */ function (fn) { /** @type {?} */ var current = this.head; /** @type {?} */ var result; for (var index = 0; index < this.length; index++) { if (fn(current.value, index)) { result = index; break; } current = current.next; } return result; }; return LinkedList; }()); /** * @template T */ export { LinkedList }; if (false) { /** @type {?} */ LinkedList.prototype.length; /** @type {?} */ LinkedList.prototype.head; /** @type {?} */ LinkedList.prototype.tail; /** @type {?} */ LinkedList.prototype.current; /** @type {?} */ LinkedList.prototype.asArray; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua2VkLWxpc3QuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaHh1aS9hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL3V0aWxzL2xpbmtlZC1saXN0LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztJQUFBO1FBRVMsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUlSLFlBQU8sR0FBUSxFQUFFLENBQUM7UUEwUDVCLCtCQUErQjtJQUNqQyxDQUFDOzs7OztJQXpQVyw0QkFBTzs7OztJQUFqQixVQUFrQixRQUFnQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQ2hEOztZQUVHLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSTtRQUV2QixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzdDLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7OztJQUVTLHNEQUFpQzs7O0lBQTNDOztZQUNRLFFBQVEsR0FBVSxFQUFFOztZQUN0QixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUk7UUFFdkIsT0FBTyxPQUFPLEVBQUU7WUFDZCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztTQUN4QjtRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO0lBQzFCLENBQUM7Ozs7O0lBRU0sd0JBQUc7Ozs7SUFBVixVQUFXLFFBQWdCO1FBQ3pCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoRSxPQUFPLEtBQUssQ0FBQyxDQUFDO1NBQ2Y7O1lBRUcsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJO1FBRXZCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDN0MsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDeEI7UUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDdkIsQ0FBQzs7Ozs7O0lBRU0sd0JBQUc7Ozs7O0lBQVYsVUFBVyxLQUFRLEVBQUUsUUFBOEI7UUFBOUIseUJBQUEsRUFBQSxXQUFtQixJQUFJLENBQUMsTUFBTTtRQUNqRCxJQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQ2hEOztZQUVLLElBQUksR0FBRztZQUNYLEtBQUssRUFBRSxtQkFBQSxLQUFLLEVBQU87WUFDbkIsSUFBSSxFQUFFLG1CQUFBLFNBQVMsRUFBTztZQUN0QixRQUFRLEVBQUUsbUJBQUEsU0FBUyxFQUFPO1NBQzNCO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztTQUNyQjthQUFNO1lBQ0wsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFO2dCQUNsQixhQUFhO2dCQUNiLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzthQUNsQjtpQkFBTSxJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNuQyxZQUFZO2dCQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzthQUNsQjtpQkFBTTs7O29CQUVDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQzs7b0JBQ2hELGVBQWUsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJO2dCQUVoRCxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNoQyxlQUFlLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFFaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7YUFDN0I7U0FFRjtRQUNELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO0lBQzNDLENBQUM7Ozs7O0lBRU0sMkJBQU07Ozs7SUFBYixVQUFjLFFBQW9CO1FBQXBCLHlCQUFBLEVBQUEsWUFBb0I7UUFDaEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztTQUNoRDtRQUVELElBQUksUUFBUSxLQUFLLENBQUMsRUFBRTtZQUNsQixhQUFhO1lBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUUzQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ2IsMEJBQTBCO2dCQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7YUFDaEM7aUJBQU07Z0JBQ0wsMEJBQTBCO2dCQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQzthQUN2QjtTQUNGO2FBQU0sSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkMsWUFBWTtZQUNaLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1NBQzVCO2FBQU07OztnQkFFQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDMUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztZQUNqRCxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO1NBQzlDO1FBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7SUFDM0MsQ0FBQzs7Ozs7O0lBRU0sd0JBQUc7Ozs7O0lBQVYsVUFBVyxRQUFnQixFQUFFLEtBQVE7UUFDbkMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztTQUNoRDs7WUFFSyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7SUFDM0MsQ0FBQzs7OztJQUVNLDRCQUFPOzs7SUFBZDtRQUNFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDOzs7OztJQUVNLDRCQUFPOzs7O0lBQWQsVUFBZSxFQUFPOztZQUNoQixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUk7O1lBQ2pCLE1BQU0sR0FBVSxFQUFFO1FBQ3hCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hELElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLE9BQUEsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7YUFDNUM7WUFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztTQUN4QjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxpQ0FBaUM7Ozs7OztJQUMxQix5QkFBSTs7Ozs7O0lBQVg7UUFBQSxpQkFLQztRQUxXLGNBQVk7YUFBWixVQUFZLEVBQVoscUJBQVksRUFBWixJQUFZO1lBQVoseUJBQVk7O1FBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFRO1lBQ3BCLEtBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQzs7OztJQUVNLHdCQUFHOzs7SUFBVjtRQUNFLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDckIsT0FBTyxTQUFTLENBQUM7U0FDbEI7O1lBQ0ssSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQzs7Ozs7SUFFTSw0QkFBTzs7OztJQUFkO1FBQUEsaUJBTUM7UUFOYyxjQUFZO2FBQVosVUFBWSxFQUFaLHFCQUFZLEVBQVosSUFBWTtZQUFaLHlCQUFZOztRQUN6QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQUMsR0FBUTtZQUNwQixLQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDOzs7O0lBRU0sMEJBQUs7OztJQUFaO1FBQ0UsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyQixPQUFPLFNBQVMsQ0FBQztTQUNsQjs7WUFDSyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Ozs7O0lBRU0sNEJBQU87Ozs7SUFBZCxVQUFlLEVBQU87O1lBQ2hCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSTtRQUN2QixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNoRCxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6QixPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztTQUN4QjtJQUNILENBQUM7Ozs7O0lBRU0sNEJBQU87Ozs7SUFBZCxVQUFlLEtBQVE7O1lBQ2pCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSTs7WUFDbkIsUUFBUSxHQUFHLENBQUM7UUFFaEIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDaEQsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRTtnQkFFM0IsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDakIsTUFBTTthQUNQO1lBQ0QsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDeEI7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzs7OztJQUVNLHlCQUFJOzs7O0lBQVgsVUFBWSxFQUFPOztZQUNiLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSTs7WUFDbkIsTUFBTSxHQUFJLEtBQUs7UUFDbkIsT0FBTyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDekIsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNyQixNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNkLE1BQU07YUFDUDtZQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7Ozs7SUFFTSwwQkFBSzs7OztJQUFaLFVBQWEsRUFBTzs7WUFDZCxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUk7O1lBQ25CLE1BQU0sR0FBSSxJQUFJO1FBQ2xCLE9BQU8sT0FBTyxJQUFJLE1BQU0sRUFBRztZQUN6QixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDdEIsTUFBTSxHQUFHLEtBQUssQ0FBQzthQUNoQjtZQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7OztJQUVNLDZCQUFROzs7SUFBZjtRQUNFLE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7Ozs7O0lBRU0seUJBQUk7Ozs7SUFBWCxVQUFZLEVBQU87O1lBQ2IsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJOztZQUNuQixNQUFTO1FBQ2IsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDaEQsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZCLE1BQU07YUFDUDtZQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7Ozs7SUFFTSw4QkFBUzs7OztJQUFoQixVQUFpQixFQUFPOztZQUNsQixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUk7O1lBQ25CLE1BQWM7UUFDbEIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDaEQsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDZixNQUFNO2FBQ1A7WUFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztTQUN4QjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFHSCxpQkFBQztBQUFELENBQUMsQUFqUUQsSUFpUUM7Ozs7Ozs7SUEvUEMsNEJBQWtCOztJQUNsQiwwQkFBb0I7O0lBQ3BCLDBCQUFvQjs7SUFDcEIsNkJBQXVCOztJQUN2Qiw2QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgTGlua2VkTGlzdCA8VD4ge1xyXG5cclxuICBwdWJsaWMgbGVuZ3RoID0gMDtcclxuICBwcm90ZWN0ZWQgaGVhZDogYW55O1xyXG4gIHByb3RlY3RlZCB0YWlsOiBhbnk7XHJcbiAgcHJvdGVjdGVkIGN1cnJlbnQ6IGFueTtcclxuICBwcm90ZWN0ZWQgYXNBcnJheTogVFtdID0gW107XHJcblxyXG4gIHByb3RlY3RlZCBnZXROb2RlKHBvc2l0aW9uOiBudW1iZXIpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwIHx8IHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSB0aGlzLmxlbmd0aCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Bvc2l0aW9uIGlzIG91dCBvZiB0aGUgbGlzdCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjdXJyZW50ID0gdGhpcy5oZWFkO1xyXG5cclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwb3NpdGlvbjsgaW5kZXgrKykge1xyXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgY3JlYXRlSW50ZXJuYWxBcnJheVJlcHJlc2VudGF0aW9uKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgb3V0QXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgY3VycmVudCA9IHRoaXMuaGVhZDtcclxuXHJcbiAgICB3aGlsZSAoY3VycmVudCkge1xyXG4gICAgICBvdXRBcnJheS5wdXNoKGN1cnJlbnQudmFsdWUpO1xyXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xyXG4gICAgfVxyXG4gICAgdGhpcy5hc0FycmF5ID0gb3V0QXJyYXk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0KHBvc2l0aW9uOiBudW1iZXIpOiBUIHtcclxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCB8fCBwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gdGhpcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY3VycmVudCA9IHRoaXMuaGVhZDtcclxuXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcG9zaXRpb247IGluZGV4KyspIHtcclxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcclxuICAgIH1cclxuICAgIHJldHVybiBjdXJyZW50LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZCh2YWx1ZTogVCwgcG9zaXRpb246IG51bWJlciA9IHRoaXMubGVuZ3RoKTogdm9pZCB7XHJcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID4gdGhpcy5sZW5ndGgpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb3NpdGlvbiBpcyBvdXQgb2YgdGhlIGxpc3QnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBub2RlID0ge1xyXG4gICAgICB2YWx1ZTogdmFsdWUgYXMgYW55LFxyXG4gICAgICBuZXh0OiB1bmRlZmluZWQgYXMgYW55LFxyXG4gICAgICBwcmV2aW91czogdW5kZWZpbmVkIGFzIGFueVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5oZWFkID0gbm9kZTtcclxuICAgICAgdGhpcy50YWlsID0gbm9kZTtcclxuICAgICAgdGhpcy5jdXJyZW50ID0gbm9kZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwb3NpdGlvbiA9PT0gMCkge1xyXG4gICAgICAgIC8vIGZpcnN0IG5vZGVcclxuICAgICAgICBub2RlLm5leHQgPSB0aGlzLmhlYWQ7XHJcbiAgICAgICAgdGhpcy5oZWFkLnByZXZpb3VzID0gbm9kZTtcclxuICAgICAgICB0aGlzLmhlYWQgPSBub2RlO1xyXG4gICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSB0aGlzLmxlbmd0aCkge1xyXG4gICAgICAgIC8vIGxhc3Qgbm9kZVxyXG4gICAgICAgIHRoaXMudGFpbC5uZXh0ID0gbm9kZTtcclxuICAgICAgICBub2RlLnByZXZpb3VzID0gdGhpcy50YWlsO1xyXG4gICAgICAgIHRoaXMudGFpbCA9IG5vZGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gbm9kZSBpbiBtaWRkbGVcclxuICAgICAgICBjb25zdCBjdXJyZW50UHJldmlvdXNOb2RlID0gdGhpcy5nZXROb2RlKHBvc2l0aW9uIC0gMSk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudE5leHROb2RlID0gY3VycmVudFByZXZpb3VzTm9kZS5uZXh0O1xyXG5cclxuICAgICAgICBjdXJyZW50UHJldmlvdXNOb2RlLm5leHQgPSBub2RlO1xyXG4gICAgICAgIGN1cnJlbnROZXh0Tm9kZS5wcmV2aW91cyA9IG5vZGU7XHJcblxyXG4gICAgICAgIG5vZGUucHJldmlvdXMgPSBjdXJyZW50UHJldmlvdXNOb2RlO1xyXG4gICAgICAgIG5vZGUubmV4dCA9IGN1cnJlbnROZXh0Tm9kZTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIHRoaXMubGVuZ3RoKys7XHJcbiAgICB0aGlzLmNyZWF0ZUludGVybmFsQXJyYXlSZXByZXNlbnRhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZShwb3NpdGlvbjogbnVtYmVyID0gMCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwIHx8IHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSB0aGlzLmxlbmd0aCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Bvc2l0aW9uIGlzIG91dCBvZiB0aGUgbGlzdCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwb3NpdGlvbiA9PT0gMCkge1xyXG4gICAgICAvLyBmaXJzdCBub2RlXHJcbiAgICAgIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0O1xyXG5cclxuICAgICAgaWYgKHRoaXMuaGVhZCkge1xyXG4gICAgICAgIC8vIHRoZXJlIGlzIG5vIHNlY29uZCBub2RlXHJcbiAgICAgICAgdGhpcy5oZWFkLnByZXZpb3VzID0gdW5kZWZpbmVkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHRoZXJlIGlzIG5vIHNlY29uZCBub2RlXHJcbiAgICAgICAgdGhpcy50YWlsID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSB0aGlzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgLy8gbGFzdCBub2RlXHJcbiAgICAgIHRoaXMudGFpbCA9IHRoaXMudGFpbC5wcmV2aW91cztcclxuICAgICAgdGhpcy50YWlsLm5leHQgPSB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBtaWRkbGUgbm9kZVxyXG4gICAgICBjb25zdCByZW1vdmVkTm9kZSA9IHRoaXMuZ2V0Tm9kZShwb3NpdGlvbik7XHJcbiAgICAgIHJlbW92ZWROb2RlLm5leHQucHJldmlvdXMgPSByZW1vdmVkTm9kZS5wcmV2aW91cztcclxuICAgICAgcmVtb3ZlZE5vZGUucHJldmlvdXMubmV4dCA9IHJlbW92ZWROb2RlLm5leHQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sZW5ndGgtLTtcclxuICAgIHRoaXMuY3JlYXRlSW50ZXJuYWxBcnJheVJlcHJlc2VudGF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0KHBvc2l0aW9uOiBudW1iZXIsIHZhbHVlOiBUKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDAgfHwgcG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHRoaXMubGVuZ3RoKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUG9zaXRpb24gaXMgb3V0IG9mIHRoZSBsaXN0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZShwb3NpdGlvbik7XHJcbiAgICBub2RlLnZhbHVlID0gdmFsdWU7XHJcbiAgICB0aGlzLmNyZWF0ZUludGVybmFsQXJyYXlSZXByZXNlbnRhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvQXJyYXkoKTogVFtdIHtcclxuICAgIHJldHVybiB0aGlzLmFzQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmluZEFsbChmbjogYW55KTogYW55W10ge1xyXG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLmhlYWQ7XHJcbiAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgaWYgKGZuKGN1cnJlbnQudmFsdWUsIGluZGV4KSkge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKHtpbmRleCwgdmFsdWU6IGN1cnJlbnQudmFsdWV9KTtcclxuICAgICAgfVxyXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbiAgLy8gQXJyYXkgbWV0aG9kcyBvdmVycmlkaW5nIHN0YXJ0XHJcbiAgcHVibGljIHB1c2goLi4uYXJnczogVFtdKTogbnVtYmVyIHtcclxuICAgIGFyZ3MuZm9yRWFjaCgoYXJnOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5hZGQoYXJnKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBvcCgpOiBUIHtcclxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGFzdCA9IHRoaXMudGFpbDtcclxuICAgIHRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoIC0gMSk7XHJcbiAgICByZXR1cm4gbGFzdC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1bnNoaWZ0KC4uLmFyZ3M6IFRbXSk6IG51bWJlciB7XHJcbiAgICBhcmdzLnJldmVyc2UoKTtcclxuICAgIGFyZ3MuZm9yRWFjaCgoYXJnOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5hZGQoYXJnLCAwKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNoaWZ0KCk6IFQge1xyXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsYXN0SXRlbSA9IHRoaXMuaGVhZC52YWx1ZTtcclxuICAgIHRoaXMucmVtb3ZlKCk7XHJcbiAgICByZXR1cm4gbGFzdEl0ZW07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZm9yRWFjaChmbjogYW55KTogdm9pZCB7XHJcbiAgICBsZXQgY3VycmVudCA9IHRoaXMuaGVhZDtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBmbihjdXJyZW50LnZhbHVlLCBpbmRleCk7XHJcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5kZXhPZih2YWx1ZTogVCk6IG51bWJlciB7XHJcbiAgICBsZXQgY3VycmVudCA9IHRoaXMuaGVhZDtcclxuICAgIGxldCBwb3NpdGlvbiA9IDA7XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGlmIChjdXJyZW50LnZhbHVlID09PSB2YWx1ZSkge1xyXG5cclxuICAgICAgICBwb3NpdGlvbiA9IGluZGV4O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcG9zaXRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29tZShmbjogYW55KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgY3VycmVudCA9IHRoaXMuaGVhZDtcclxuICAgIGxldCByZXN1bHQgID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoY3VycmVudCAmJiAhcmVzdWx0KSB7XHJcbiAgICAgIGlmIChmbihjdXJyZW50LnZhbHVlKSkge1xyXG4gICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXZlcnkoZm46IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLmhlYWQ7XHJcbiAgICBsZXQgcmVzdWx0ICA9IHRydWU7XHJcbiAgICB3aGlsZSAoY3VycmVudCAmJiByZXN1bHQpICB7XHJcbiAgICAgIGlmICghZm4oY3VycmVudC52YWx1ZSkpIHtcclxuICAgICAgICByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICdbTGlua2VkIExpc3RdJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaW5kKGZuOiBhbnkpOiBUIHtcclxuICAgIGxldCBjdXJyZW50ID0gdGhpcy5oZWFkO1xyXG4gICAgbGV0IHJlc3VsdDogVDtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBpZiAoZm4oY3VycmVudC52YWx1ZSwgaW5kZXgpKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gY3VycmVudC52YWx1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaW5kSW5kZXgoZm46IGFueSk6IG51bWJlciB7XHJcbiAgICBsZXQgY3VycmVudCA9IHRoaXMuaGVhZDtcclxuICAgIGxldCByZXN1bHQ6IG51bWJlcjtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBpZiAoZm4oY3VycmVudC52YWx1ZSwgaW5kZXgpKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gaW5kZXg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLyBBcnJheSBtZXRob2RzIG92ZXJyaWRpbmcgRU5EXHJcbn1cclxuIl19