UNPKG

ngx-spine

Version:

[![Build Status](https://travis-ci.org/PoiScript/ngx-spine.svg?branch=master)](https://travis-ci.org/PoiScript/ngx-spine)

1,042 lines 62.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; /****************************************************************************** * Spine Runtimes License Agreement * Last updated May 1, 2019. Replaces all prior versions. * * Copyright (c) 2013-2019, Esoteric Software LLC * * Integration of the Spine Runtimes into software or otherwise creating * derivative works of the Spine Runtimes is permitted under the terms and * conditions of Section 2 of the Spine Editor License Agreement: * http://esotericsoftware.com/spine-editor-license * * Otherwise, it is permitted to integrate the Spine Runtimes into software * or otherwise create derivative works of the Spine Runtimes (collectively, * "Products"), provided that each user of the Products must obtain their own * Spine Editor license and redistribution of the Products in any form must * include this license and copyright notice. * * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN * NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS * INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ /** * @record * @template T */ export function Map() { } var IntSet = /** @class */ (function () { function IntSet() { this.array = new Array(); } /** * @param {?} value * @return {?} */ IntSet.prototype.add = /** * @param {?} value * @return {?} */ function (value) { /** @type {?} */ var contains = this.contains(value); this.array[value | 0] = value | 0; return !contains; }; /** * @param {?} value * @return {?} */ IntSet.prototype.contains = /** * @param {?} value * @return {?} */ function (value) { return this.array[value | 0] != undefined; }; /** * @param {?} value * @return {?} */ IntSet.prototype.remove = /** * @param {?} value * @return {?} */ function (value) { this.array[value | 0] = undefined; }; /** * @return {?} */ IntSet.prototype.clear = /** * @return {?} */ function () { this.array.length = 0; }; return IntSet; }()); export { IntSet }; if (false) { /** @type {?} */ IntSet.prototype.array; } /** * @record */ export function Disposable() { } if (false) { /** * @return {?} */ Disposable.prototype.dispose = function () { }; } /** * @record */ export function Restorable() { } if (false) { /** * @return {?} */ Restorable.prototype.restore = function () { }; } var Color = /** @class */ (function () { function Color(r, g, b, a) { if (r === void 0) { r = 0; } if (g === void 0) { g = 0; } if (b === void 0) { b = 0; } if (a === void 0) { a = 0; } this.r = r; this.g = g; this.b = b; this.a = a; } /** * @template THIS * @this {THIS} * @param {?} r * @param {?} g * @param {?} b * @param {?} a * @return {THIS} */ Color.prototype.set = /** * @template THIS * @this {THIS} * @param {?} r * @param {?} g * @param {?} b * @param {?} a * @return {THIS} */ function (r, g, b, a) { (/** @type {?} */ (this)).r = r; (/** @type {?} */ (this)).g = g; (/** @type {?} */ (this)).b = b; (/** @type {?} */ (this)).a = a; (/** @type {?} */ (this)).clamp(); return (/** @type {?} */ (this)); }; /** * @template THIS * @this {THIS} * @param {?} c * @return {THIS} */ Color.prototype.setFromColor = /** * @template THIS * @this {THIS} * @param {?} c * @return {THIS} */ function (c) { (/** @type {?} */ (this)).r = c.r; (/** @type {?} */ (this)).g = c.g; (/** @type {?} */ (this)).b = c.b; (/** @type {?} */ (this)).a = c.a; return (/** @type {?} */ (this)); }; /** * @template THIS * @this {THIS} * @param {?} hex * @return {THIS} */ Color.prototype.setFromString = /** * @template THIS * @this {THIS} * @param {?} hex * @return {THIS} */ function (hex) { hex = hex.charAt(0) == "#" ? hex.substr(1) : hex; (/** @type {?} */ (this)).r = parseInt(hex.substr(0, 2), 16) / 255.0; (/** @type {?} */ (this)).g = parseInt(hex.substr(2, 2), 16) / 255.0; (/** @type {?} */ (this)).b = parseInt(hex.substr(4, 2), 16) / 255.0; (/** @type {?} */ (this)).a = (hex.length != 8 ? 255 : parseInt(hex.substr(6, 2), 16)) / 255.0; return (/** @type {?} */ (this)); }; /** * @template THIS * @this {THIS} * @param {?} r * @param {?} g * @param {?} b * @param {?} a * @return {THIS} */ Color.prototype.add = /** * @template THIS * @this {THIS} * @param {?} r * @param {?} g * @param {?} b * @param {?} a * @return {THIS} */ function (r, g, b, a) { (/** @type {?} */ (this)).r += r; (/** @type {?} */ (this)).g += g; (/** @type {?} */ (this)).b += b; (/** @type {?} */ (this)).a += a; (/** @type {?} */ (this)).clamp(); return (/** @type {?} */ (this)); }; /** * @template THIS * @this {THIS} * @return {THIS} */ Color.prototype.clamp = /** * @template THIS * @this {THIS} * @return {THIS} */ function () { if ((/** @type {?} */ (this)).r < 0) (/** @type {?} */ (this)).r = 0; else if ((/** @type {?} */ (this)).r > 1) (/** @type {?} */ (this)).r = 1; if ((/** @type {?} */ (this)).g < 0) (/** @type {?} */ (this)).g = 0; else if ((/** @type {?} */ (this)).g > 1) (/** @type {?} */ (this)).g = 1; if ((/** @type {?} */ (this)).b < 0) (/** @type {?} */ (this)).b = 0; else if ((/** @type {?} */ (this)).b > 1) (/** @type {?} */ (this)).b = 1; if ((/** @type {?} */ (this)).a < 0) (/** @type {?} */ (this)).a = 0; else if ((/** @type {?} */ (this)).a > 1) (/** @type {?} */ (this)).a = 1; return (/** @type {?} */ (this)); }; /** * @param {?} color * @param {?} value * @return {?} */ Color.rgba8888ToColor = /** * @param {?} color * @param {?} value * @return {?} */ function (color, value) { color.r = ((value & 0xff000000) >>> 24) / 255; color.g = ((value & 0x00ff0000) >>> 16) / 255; color.b = ((value & 0x0000ff00) >>> 8) / 255; color.a = (value & 0x000000ff) / 255; }; /** * @param {?} color * @param {?} value * @return {?} */ Color.rgb888ToColor = /** * @param {?} color * @param {?} value * @return {?} */ function (color, value) { color.r = ((value & 0x00ff0000) >>> 16) / 255; color.g = ((value & 0x0000ff00) >>> 8) / 255; color.b = (value & 0x000000ff) / 255; }; Color.WHITE = new Color(1, 1, 1, 1); Color.RED = new Color(1, 0, 0, 1); Color.GREEN = new Color(0, 1, 0, 1); Color.BLUE = new Color(0, 0, 1, 1); Color.MAGENTA = new Color(1, 0, 1, 1); return Color; }()); export { Color }; if (false) { /** @type {?} */ Color.WHITE; /** @type {?} */ Color.RED; /** @type {?} */ Color.GREEN; /** @type {?} */ Color.BLUE; /** @type {?} */ Color.MAGENTA; /** @type {?} */ Color.prototype.r; /** @type {?} */ Color.prototype.g; /** @type {?} */ Color.prototype.b; /** @type {?} */ Color.prototype.a; } var MathUtils = /** @class */ (function () { function MathUtils() { } /** * @param {?} value * @param {?} min * @param {?} max * @return {?} */ MathUtils.clamp = /** * @param {?} value * @param {?} min * @param {?} max * @return {?} */ function (value, min, max) { if (value < min) return min; if (value > max) return max; return value; }; /** * @param {?} degrees * @return {?} */ MathUtils.cosDeg = /** * @param {?} degrees * @return {?} */ function (degrees) { return Math.cos(degrees * MathUtils.degRad); }; /** * @param {?} degrees * @return {?} */ MathUtils.sinDeg = /** * @param {?} degrees * @return {?} */ function (degrees) { return Math.sin(degrees * MathUtils.degRad); }; /** * @param {?} value * @return {?} */ MathUtils.signum = /** * @param {?} value * @return {?} */ function (value) { return value > 0 ? 1 : value < 0 ? -1 : 0; }; /** * @param {?} x * @return {?} */ MathUtils.toInt = /** * @param {?} x * @return {?} */ function (x) { return x > 0 ? Math.floor(x) : Math.ceil(x); }; /** * @param {?} x * @return {?} */ MathUtils.cbrt = /** * @param {?} x * @return {?} */ function (x) { /** @type {?} */ var y = Math.pow(Math.abs(x), 1 / 3); return x < 0 ? -y : y; }; /** * @param {?} min * @param {?} max * @return {?} */ MathUtils.randomTriangular = /** * @param {?} min * @param {?} max * @return {?} */ function (min, max) { return MathUtils.randomTriangularWith(min, max, (min + max) * 0.5); }; /** * @param {?} min * @param {?} max * @param {?} mode * @return {?} */ MathUtils.randomTriangularWith = /** * @param {?} min * @param {?} max * @param {?} mode * @return {?} */ function (min, max, mode) { /** @type {?} */ var u = Math.random(); /** @type {?} */ var d = max - min; if (u <= (mode - min) / d) return min + Math.sqrt(u * d * (mode - min)); return max - Math.sqrt((1 - u) * d * (max - mode)); }; MathUtils.PI = 3.1415927; MathUtils.PI2 = MathUtils.PI * 2; MathUtils.radiansToDegrees = 180 / MathUtils.PI; MathUtils.radDeg = MathUtils.radiansToDegrees; MathUtils.degreesToRadians = MathUtils.PI / 180; MathUtils.degRad = MathUtils.degreesToRadians; return MathUtils; }()); export { MathUtils }; if (false) { /** @type {?} */ MathUtils.PI; /** @type {?} */ MathUtils.PI2; /** @type {?} */ MathUtils.radiansToDegrees; /** @type {?} */ MathUtils.radDeg; /** @type {?} */ MathUtils.degreesToRadians; /** @type {?} */ MathUtils.degRad; } /** * @abstract */ var /** * @abstract */ Interpolation = /** @class */ (function () { function Interpolation() { } /** * @param {?} start * @param {?} end * @param {?} a * @return {?} */ Interpolation.prototype.apply = /** * @param {?} start * @param {?} end * @param {?} a * @return {?} */ function (start, end, a) { return start + (end - start) * this.applyInternal(a); }; return Interpolation; }()); /** * @abstract */ export { Interpolation }; if (false) { /** * @abstract * @protected * @param {?} a * @return {?} */ Interpolation.prototype.applyInternal = function (a) { }; } var Pow = /** @class */ (function (_super) { tslib_1.__extends(Pow, _super); function Pow(power) { var _this = _super.call(this) || this; _this.power = 2; _this.power = power; return _this; } /** * @param {?} a * @return {?} */ Pow.prototype.applyInternal = /** * @param {?} a * @return {?} */ function (a) { if (a <= 0.5) return Math.pow(a * 2, this.power) / 2; return (Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1); }; return Pow; }(Interpolation)); export { Pow }; if (false) { /** * @type {?} * @protected */ Pow.prototype.power; } var PowOut = /** @class */ (function (_super) { tslib_1.__extends(PowOut, _super); function PowOut(power) { return _super.call(this, power) || this; } /** * @param {?} a * @return {?} */ PowOut.prototype.applyInternal = /** * @param {?} a * @return {?} */ function (a) { return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1; }; return PowOut; }(Pow)); export { PowOut }; var Utils = /** @class */ (function () { function Utils() { } /** * @template T * @param {?} source * @param {?} sourceStart * @param {?} dest * @param {?} destStart * @param {?} numElements * @return {?} */ Utils.arrayCopy = /** * @template T * @param {?} source * @param {?} sourceStart * @param {?} dest * @param {?} destStart * @param {?} numElements * @return {?} */ function (source, sourceStart, dest, destStart, numElements) { for (var i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) { dest[j] = source[i]; } }; /** * @template T * @param {?} array * @param {?} size * @param {?=} value * @return {?} */ Utils.setArraySize = /** * @template T * @param {?} array * @param {?} size * @param {?=} value * @return {?} */ function (array, size, value) { if (value === void 0) { value = 0; } /** @type {?} */ var oldSize = array.length; if (oldSize == size) return array; array.length = size; if (oldSize < size) { for (var i = oldSize; i < size; i++) array[i] = value; } return array; }; /** * @template T * @param {?} array * @param {?} size * @param {?=} value * @return {?} */ Utils.ensureArrayCapacity = /** * @template T * @param {?} array * @param {?} size * @param {?=} value * @return {?} */ function (array, size, value) { if (value === void 0) { value = 0; } if (array.length >= size) return array; return Utils.setArraySize(array, size, value); }; /** * @template T * @param {?} size * @param {?} defaultValue * @return {?} */ Utils.newArray = /** * @template T * @param {?} size * @param {?} defaultValue * @return {?} */ function (size, defaultValue) { /** @type {?} */ var array = new Array(size); for (var i = 0; i < size; i++) array[i] = defaultValue; return array; }; /** * @param {?} size * @return {?} */ Utils.newFloatArray = /** * @param {?} size * @return {?} */ function (size) { if (Utils.SUPPORTS_TYPED_ARRAYS) { return new Float32Array(size); } else { /** @type {?} */ var array = new Array(size); for (var i = 0; i < array.length; i++) array[i] = 0; return array; } }; /** * @param {?} size * @return {?} */ Utils.newShortArray = /** * @param {?} size * @return {?} */ function (size) { if (Utils.SUPPORTS_TYPED_ARRAYS) { return new Int16Array(size); } else { /** @type {?} */ var array = new Array(size); for (var i = 0; i < array.length; i++) array[i] = 0; return array; } }; /** * @param {?} array * @return {?} */ Utils.toFloatArray = /** * @param {?} array * @return {?} */ function (array) { return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array; }; /** * @param {?} value * @return {?} */ Utils.toSinglePrecision = /** * @param {?} value * @return {?} */ function (value) { return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value; }; // This function is used to fix WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109 // This function is used to fix WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109 /** * @param {?} alpha * @param {?} blend * @return {?} */ Utils.webkit602BugfixHelper = // This function is used to fix WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109 /** * @param {?} alpha * @param {?} blend * @return {?} */ function (alpha, blend) { }; /** * @template T * @param {?} array * @param {?} element * @param {?=} identity * @return {?} */ Utils.contains = /** * @template T * @param {?} array * @param {?} element * @param {?=} identity * @return {?} */ function (array, element, identity) { if (identity === void 0) { identity = true; } for (var i = 0; i < array.length; i++) { if (array[i] == element) return true; } return false; }; Utils.SUPPORTS_TYPED_ARRAYS = typeof Float32Array !== "undefined"; return Utils; }()); export { Utils }; if (false) { /** @type {?} */ Utils.SUPPORTS_TYPED_ARRAYS; } var DebugUtils = /** @class */ (function () { function DebugUtils() { } /** * @param {?} skeleton * @return {?} */ DebugUtils.logBones = /** * @param {?} skeleton * @return {?} */ function (skeleton) { for (var i = 0; i < skeleton.bones.length; i++) { /** @type {?} */ var bone = skeleton.bones[i]; console.log(bone.data.name + ", " + bone.a + ", " + bone.b + ", " + bone.c + ", " + bone.d + ", " + bone.worldX + ", " + bone.worldY); } }; return DebugUtils; }()); export { DebugUtils }; /** * @template T */ var /** * @template T */ Pool = /** @class */ (function () { function Pool(instantiator) { this.items = new Array(); this.instantiator = instantiator; } /** * @return {?} */ Pool.prototype.obtain = /** * @return {?} */ function () { return this.items.length > 0 ? this.items.pop() : this.instantiator(); }; /** * @param {?} item * @return {?} */ Pool.prototype.free = /** * @param {?} item * @return {?} */ function (item) { if (((/** @type {?} */ (item))).reset) ((/** @type {?} */ (item))).reset(); this.items.push(item); }; /** * @param {?} items * @return {?} */ Pool.prototype.freeAll = /** * @param {?} items * @return {?} */ function (items) { for (var i = 0; i < items.length; i++) { if (((/** @type {?} */ (items[i]))).reset) ((/** @type {?} */ (items[i]))).reset(); this.items[i] = items[i]; } }; /** * @return {?} */ Pool.prototype.clear = /** * @return {?} */ function () { this.items.length = 0; }; return Pool; }()); /** * @template T */ export { Pool }; if (false) { /** * @type {?} * @private */ Pool.prototype.items; /** * @type {?} * @private */ Pool.prototype.instantiator; } var Vector2 = /** @class */ (function () { function Vector2(x, y) { if (x === void 0) { x = 0; } if (y === void 0) { y = 0; } this.x = x; this.y = y; } /** * @param {?} x * @param {?} y * @return {?} */ Vector2.prototype.set = /** * @param {?} x * @param {?} y * @return {?} */ function (x, y) { this.x = x; this.y = y; return this; }; /** * @return {?} */ Vector2.prototype.length = /** * @return {?} */ function () { /** @type {?} */ var x = this.x; /** @type {?} */ var y = this.y; return Math.sqrt(x * x + y * y); }; /** * @template THIS * @this {THIS} * @return {THIS} */ Vector2.prototype.normalize = /** * @template THIS * @this {THIS} * @return {THIS} */ function () { /** @type {?} */ var len = (/** @type {?} */ (this)).length(); if (len != 0) { (/** @type {?} */ (this)).x /= len; (/** @type {?} */ (this)).y /= len; } return (/** @type {?} */ (this)); }; return Vector2; }()); export { Vector2 }; if (false) { /** @type {?} */ Vector2.prototype.x; /** @type {?} */ Vector2.prototype.y; } var TimeKeeper = /** @class */ (function () { function TimeKeeper() { this.maxDelta = 0.064; this.framesPerSecond = 0; this.delta = 0; this.totalTime = 0; this.lastTime = Date.now() / 1000; this.frameCount = 0; this.frameTime = 0; } /** * @return {?} */ TimeKeeper.prototype.update = /** * @return {?} */ function () { /** @type {?} */ var now = Date.now() / 1000; this.delta = now - this.lastTime; this.frameTime += this.delta; this.totalTime += this.delta; if (this.delta > this.maxDelta) this.delta = this.maxDelta; this.lastTime = now; this.frameCount++; if (this.frameTime > 1) { this.framesPerSecond = this.frameCount / this.frameTime; this.frameTime = 0; this.frameCount = 0; } }; return TimeKeeper; }()); export { TimeKeeper }; if (false) { /** @type {?} */ TimeKeeper.prototype.maxDelta; /** @type {?} */ TimeKeeper.prototype.framesPerSecond; /** @type {?} */ TimeKeeper.prototype.delta; /** @type {?} */ TimeKeeper.prototype.totalTime; /** * @type {?} * @private */ TimeKeeper.prototype.lastTime; /** * @type {?} * @private */ TimeKeeper.prototype.frameCount; /** * @type {?} * @private */ TimeKeeper.prototype.frameTime; } /** * @record * @template T */ export function ArrayLike() { } if (false) { /** @type {?} */ ArrayLike.prototype.length; /* Skipping unhandled member: [n: number]: T;*/ } var WindowedMean = /** @class */ (function () { function WindowedMean(windowSize) { if (windowSize === void 0) { windowSize = 32; } this.addedValues = 0; this.lastValue = 0; this.mean = 0; this.dirty = true; this.values = new Array(windowSize); } /** * @return {?} */ WindowedMean.prototype.hasEnoughData = /** * @return {?} */ function () { return this.addedValues >= this.values.length; }; /** * @param {?} value * @return {?} */ WindowedMean.prototype.addValue = /** * @param {?} value * @return {?} */ function (value) { if (this.addedValues < this.values.length) this.addedValues++; this.values[this.lastValue++] = value; if (this.lastValue > this.values.length - 1) this.lastValue = 0; this.dirty = true; }; /** * @return {?} */ WindowedMean.prototype.getMean = /** * @return {?} */ function () { if (this.hasEnoughData()) { if (this.dirty) { /** @type {?} */ var mean = 0; for (var i = 0; i < this.values.length; i++) { mean += this.values[i]; } this.mean = mean / this.values.length; this.dirty = false; } return this.mean; } else { return 0; } }; return WindowedMean; }()); export { WindowedMean }; if (false) { /** @type {?} */ WindowedMean.prototype.values; /** @type {?} */ WindowedMean.prototype.addedValues; /** @type {?} */ WindowedMean.prototype.lastValue; /** @type {?} */ WindowedMean.prototype.mean; /** @type {?} */ WindowedMean.prototype.dirty; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXRpbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtc3BpbmUvIiwic291cmNlcyI6WyJsaWIvc3BpbmUtdHMvY29yZS9VdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0NBLHlCQUVDO0FBQ0Q7SUFBQTtRQUNFLFVBQUssR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO0lBZTlCLENBQUM7Ozs7O0lBZEMsb0JBQUc7Ozs7SUFBSCxVQUFJLEtBQWE7O1lBQ1gsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDbEMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUNuQixDQUFDOzs7OztJQUNELHlCQUFROzs7O0lBQVIsVUFBUyxLQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQzVDLENBQUM7Ozs7O0lBQ0QsdUJBQU07Ozs7SUFBTixVQUFPLEtBQWE7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ3BDLENBQUM7Ozs7SUFDRCxzQkFBSzs7O0lBQUw7UUFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUNILGFBQUM7QUFBRCxDQUFDLEFBaEJELElBZ0JDOzs7O0lBZkMsdUJBQTRCOzs7OztBQWdCOUIsZ0NBRUM7Ozs7O0lBREMsK0NBQWdCOzs7OztBQUVsQixnQ0FFQzs7Ozs7SUFEQywrQ0FBZ0I7O0FBRWxCO0lBTUUsZUFDUyxDQUFhLEVBQ2IsQ0FBYSxFQUNiLENBQWEsRUFDYixDQUFhO1FBSGIsa0JBQUEsRUFBQSxLQUFhO1FBQ2Isa0JBQUEsRUFBQSxLQUFhO1FBQ2Isa0JBQUEsRUFBQSxLQUFhO1FBQ2Isa0JBQUEsRUFBQSxLQUFhO1FBSGIsTUFBQyxHQUFELENBQUMsQ0FBWTtRQUNiLE1BQUMsR0FBRCxDQUFDLENBQVk7UUFDYixNQUFDLEdBQUQsQ0FBQyxDQUFZO1FBQ2IsTUFBQyxHQUFELENBQUMsQ0FBWTtJQUNuQixDQUFDOzs7Ozs7Ozs7O0lBQ0osbUJBQUc7Ozs7Ozs7OztJQUFILFVBQUksQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUztRQUM1QyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLG1CQUFBLElBQUksRUFBQSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsbUJBQUEsSUFBSSxFQUFBLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFDO0lBQ2QsQ0FBQzs7Ozs7OztJQUNELDRCQUFZOzs7Ozs7SUFBWixVQUFhLENBQVE7UUFDbkIsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixtQkFBQSxJQUFJLEVBQUEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLG1CQUFBLElBQUksRUFBQSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFDO0lBQ2QsQ0FBQzs7Ozs7OztJQUNELDZCQUFhOzs7Ozs7SUFBYixVQUFjLEdBQVc7UUFDdkIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDakQsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDaEQsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDaEQsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDaEQsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzFFLE9BQU8sbUJBQUEsSUFBSSxFQUFBLENBQUM7SUFDZCxDQUFDOzs7Ozs7Ozs7O0lBQ0QsbUJBQUc7Ozs7Ozs7OztJQUFILFVBQUksQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUztRQUM1QyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNaLG1CQUFBLElBQUksRUFBQSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixtQkFBQSxJQUFJLEVBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osbUJBQUEsSUFBSSxFQUFBLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFDO0lBQ2QsQ0FBQzs7Ozs7O0lBQ0QscUJBQUs7Ozs7O0lBQUw7UUFDRSxJQUFJLG1CQUFBLElBQUksRUFBQSxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQUUsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN0QixJQUFJLG1CQUFBLElBQUksRUFBQSxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQUUsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLG1CQUFBLElBQUksRUFBQSxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQUUsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN0QixJQUFJLG1CQUFBLElBQUksRUFBQSxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQUUsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLG1CQUFBLElBQUksRUFBQSxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQUUsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN0QixJQUFJLG1CQUFBLElBQUksRUFBQSxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQUUsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLG1CQUFBLElBQUksRUFBQSxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQUUsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN0QixJQUFJLG1CQUFBLElBQUksRUFBQSxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQUUsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFDO0lBQ2Qs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QUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2FBQ3BCO1lBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ2xCO2FBQU07WUFDTCxPQUFPLENBQUMsQ0FBQztTQUNWO0lBQ0gsQ0FBQztJQUNILG1CQUFDO0FBQUQsQ0FBQyxBQWpDRCxJQWlDQzs7OztJQWhDQyw4QkFBc0I7O0lBQ3RCLG1DQUFnQjs7SUFDaEIsaUNBQWM7O0lBQ2QsNEJBQVM7O0lBQ1QsNkJBQWEiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XHJcbiAqIExhc3QgdXBkYXRlZCBNYXkgMSwgMjAxOS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxOSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXHJcbiAqXHJcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xyXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxyXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxyXG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcclxuICpcclxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXHJcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcclxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxyXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcclxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXHJcbiAqXHJcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1NcclxuICogT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFU1xyXG4gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTlxyXG4gKiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCxcclxuICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyxcclxuICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLCBCVVNJTkVTU1xyXG4gKiBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXHJcbiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElOR1xyXG4gKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsXHJcbiAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXHJcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcbmltcG9ydCB7IFNrZWxldG9uIH0gZnJvbSBcIi4vU2tlbGV0b25cIjtcclxuaW1wb3J0IHsgTWl4QmxlbmQgfSBmcm9tIFwiLi9BbmltYXRpb25cIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWFwPFQ+IHtcclxuICBba2V5OiBzdHJpbmddOiBUO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBJbnRTZXQge1xyXG4gIGFycmF5ID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuICBhZGQodmFsdWU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGNvbnRhaW5zID0gdGhpcy5jb250YWlucyh2YWx1ZSk7XHJcbiAgICB0aGlzLmFycmF5W3ZhbHVlIHwgMF0gPSB2YWx1ZSB8IDA7XHJcbiAgICByZXR1cm4gIWNvbnRhaW5zO1xyXG4gIH1cclxuICBjb250YWlucyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hcnJheVt2YWx1ZSB8IDBdICE9IHVuZGVmaW5lZDtcclxuICB9XHJcbiAgcmVtb3ZlKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuYXJyYXlbdmFsdWUgfCAwXSA9IHVuZGVmaW5lZDtcclxuICB9XHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmFycmF5Lmxlbmd0aCA9IDA7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlzcG9zYWJsZSB7XHJcbiAgZGlzcG9zZSgpOiB2b2lkO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVzdG9yYWJsZSB7XHJcbiAgcmVzdG9yZSgpOiB2b2lkO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBDb2xvciB7XHJcbiAgcHVibGljIHN0YXRpYyBXSElURSA9IG5ldyBDb2xvcigxLCAxLCAxLCAxKTtcclxuICBwdWJsaWMgc3RhdGljIFJFRCA9IG5ldyBDb2xvcigxLCAwLCAwLCAxKTtcclxuICBwdWJsaWMgc3RhdGljIEdSRUVOID0gbmV3IENvbG9yKDAsIDEsIDAsIDEpO1xyXG4gIHB1YmxpYyBzdGF0aWMgQkxVRSA9IG5ldyBDb2xvcigwLCAwLCAxLCAxKTtcclxuICBwdWJsaWMgc3RhdGljIE1BR0VOVEEgPSBuZXcgQ29sb3IoMSwgMCwgMSwgMSk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcjogbnVtYmVyID0gMCxcclxuICAgIHB1YmxpYyBnOiBudW1iZXIgPSAwLFxyXG4gICAgcHVibGljIGI6IG51bWJlciA9IDAsXHJcbiAgICBwdWJsaWMgYTogbnVtYmVyID0gMFxyXG4gICkge31cclxuICBzZXQocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlciwgYTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnIgPSByO1xyXG4gICAgdGhpcy5nID0gZztcclxuICAgIHRoaXMuYiA9IGI7XHJcbiAgICB0aGlzLmEgPSBhO1xyXG4gICAgdGhpcy5jbGFtcCgpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG4gIHNldEZyb21Db2xvcihjOiBDb2xvcikge1xyXG4gICAgdGhpcy5yID0gYy5yO1xyXG4gICAgdGhpcy5nID0gYy5nO1xyXG4gICAgdGhpcy5iID0gYy5iO1xyXG4gICAgdGhpcy5hID0gYy5hO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG4gIHNldEZyb21TdHJpbmcoaGV4OiBzdHJpbmcpIHtcclxuICAgIGhleCA9IGhleC5jaGFyQXQoMCkgPT0gXCIjXCIgPyBoZXguc3Vic3RyKDEpIDogaGV4O1xyXG4gICAgdGhpcy5yID0gcGFyc2VJbnQoaGV4LnN1YnN0cigwLCAyKSwgMTYpIC8gMjU1LjA7XHJcbiAgICB0aGlzLmcgPSBwYXJzZUludChoZXguc3Vic3RyKDIsIDIpLCAxNikgLyAyNTUuMDtcclxuICAgIHRoaXMuYiA9IHBhcnNlSW50KGhleC5zdWJzdHIoNCwgMiksIDE2KSAvIDI1NS4wO1xyXG4gICAgdGhpcy5hID0gKGhleC5sZW5ndGggIT0gOCA/IDI1NSA6IHBhcnNlSW50KGhleC5zdWJzdHIoNiwgMiksIDE2KSkgLyAyNTUuMDtcclxuICAgIHJldHVybiB