ngx-spine
Version:
[](https://travis-ci.org/PoiScript/ngx-spine)
201 lines • 17.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/******************************************************************************
* 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.
*****************************************************************************/
import { M00, M01, M02, M03, M10, M11, M12, M13, M20, M21, M22, M23, M30, M31, M32, M33 } from "./Matrix4";
export class Vector3 {
/**
* @param {?=} x
* @param {?=} y
* @param {?=} z
*/
constructor(x = 0, y = 0, z = 0) {
this.x = 0;
this.y = 0;
this.z = 0;
this.x = x;
this.y = y;
this.z = z;
}
/**
* @param {?} v
* @return {?}
*/
setFrom(v) {
this.x = v.x;
this.y = v.y;
this.z = v.z;
return this;
}
/**
* @param {?} x
* @param {?} y
* @param {?} z
* @return {?}
*/
set(x, y, z) {
this.x = x;
this.y = y;
this.z = z;
return this;
}
/**
* @param {?} v
* @return {?}
*/
add(v) {
this.x += v.x;
this.y += v.y;
this.z += v.z;
return this;
}
/**
* @param {?} v
* @return {?}
*/
sub(v) {
this.x -= v.x;
this.y -= v.y;
this.z -= v.z;
return this;
}
/**
* @param {?} s
* @return {?}
*/
scale(s) {
this.x *= s;
this.y *= s;
this.z *= s;
return this;
}
/**
* @return {?}
*/
normalize() {
/** @type {?} */
let len = this.length();
if (len == 0)
return this;
len = 1 / len;
this.x *= len;
this.y *= len;
this.z *= len;
return this;
}
/**
* @param {?} v
* @return {?}
*/
cross(v) {
return this.set(this.y * v.z - this.z * v.y, this.z * v.x - this.x * v.z, this.x * v.y - this.y * v.x);
}
/**
* @param {?} matrix
* @return {?}
*/
multiply(matrix) {
/** @type {?} */
let l_mat = matrix.values;
return this.set(this.x * l_mat[M00] +
this.y * l_mat[M01] +
this.z * l_mat[M02] +
l_mat[M03], this.x * l_mat[M10] +
this.y * l_mat[M11] +
this.z * l_mat[M12] +
l_mat[M13], this.x * l_mat[M20] +
this.y * l_mat[M21] +
this.z * l_mat[M22] +
l_mat[M23]);
}
/**
* @param {?} matrix
* @return {?}
*/
project(matrix) {
/** @type {?} */
let l_mat = matrix.values;
/** @type {?} */
let l_w = 1 /
(this.x * l_mat[M30] +
this.y * l_mat[M31] +
this.z * l_mat[M32] +
l_mat[M33]);
return this.set((this.x * l_mat[M00] +
this.y * l_mat[M01] +
this.z * l_mat[M02] +
l_mat[M03]) *
l_w, (this.x * l_mat[M10] +
this.y * l_mat[M11] +
this.z * l_mat[M12] +
l_mat[M13]) *
l_w, (this.x * l_mat[M20] +
this.y * l_mat[M21] +
this.z * l_mat[M22] +
l_mat[M23]) *
l_w);
}
/**
* @param {?} v
* @return {?}
*/
dot(v) {
return this.x * v.x + this.y * v.y + this.z * v.z;
}
/**
* @return {?}
*/
length() {
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
}
/**
* @param {?} v
* @return {?}
*/
distance(v) {
/** @type {?} */
let a = v.x - this.x;
/** @type {?} */
let b = v.y - this.y;
/** @type {?} */
let c = v.z - this.z;
return Math.sqrt(a * a + b * b + c * c);
}
}
if (false) {
/** @type {?} */
Vector3.prototype.x;
/** @type {?} */
Vector3.prototype.y;
/** @type {?} */
Vector3.prototype.z;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yMy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1zcGluZS8iLCJzb3VyY2VzIjpbImxpYi9zcGluZS10cy93ZWJnbC9WZWN0b3IzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBLE9BQU8sRUFFTCxHQUFHLEVBQ0gsR0FBRyxFQUNILEdBQUcsRUFDSCxHQUFHLEVBQ0gsR0FBRyxFQUNILEdBQUcsRUFDSCxHQUFHLEVBQ0gsR0FBRyxFQUNILEdBQUcsRUFDSCxHQUFHLEVBQ0gsR0FBRyxFQUNILEdBQUcsRUFDSCxHQUFHLEVBQ0gsR0FBRyxFQUNILEdBQUcsRUFDSCxHQUFHLEVBQ0osTUFBTSxXQUFXLENBQUM7QUFFbkIsTUFBTSxPQUFPLE9BQU87Ozs7OztJQUlsQixZQUFZLElBQVksQ0FBQyxFQUFFLElBQVksQ0FBQyxFQUFFLElBQVksQ0FBQztRQUh2RCxNQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ04sTUFBQyxHQUFHLENBQUMsQ0FBQztRQUNOLE1BQUMsR0FBRyxDQUFDLENBQUM7UUFFSixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDYixDQUFDOzs7OztJQUNELE9BQU8sQ0FBQyxDQUFVO1FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7Ozs7OztJQUNELEdBQUcsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVM7UUFDakMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7OztJQUNELEdBQUcsQ0FBQyxDQUFVO1FBQ1osSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7OztJQUNELEdBQUcsQ0FBQyxDQUFVO1FBQ1osSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7OztJQUNELEtBQUssQ0FBQyxDQUFTO1FBQ2IsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNaLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7O0lBQ0QsU0FBUzs7WUFDSCxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDMUIsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztRQUNkLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDZCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Ozs7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RyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQzs7OztJQUNELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDOzs7OztJQUNELFFBQVEsQ0FBQyxDQUFVOztZQUNiLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDOztZQUNoQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQzs7WUFDaEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGOzs7SUE3R0Msb0JBQU07O0lBQ04sb0JBQU07O0lBQ04sb0JBQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XHJcbiAqIExhc3QgdXBkYXRlZCBNYXkgMSwgMjAxOS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxOSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXHJcbiAqXHJcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xyXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxyXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxyXG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcclxuICpcclxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXHJcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcclxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxyXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcclxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXHJcbiAqXHJcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1NcclxuICogT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFU1xyXG4gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTlxyXG4gKiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCxcclxuICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyxcclxuICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLCBCVVNJTkVTU1xyXG4gKiBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXHJcbiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElOR1xyXG4gKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsXHJcbiAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXHJcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcbmltcG9ydCB7XHJcbiAgTWF0cml4NCxcclxuICBNMDAsXHJcbiAgTTAxLFxyXG4gIE0wMixcclxuICBNMDMsXHJcbiAgTTEwLFxyXG4gIE0xMSxcclxuICBNMTIsXHJcbiAgTTEzLFxyXG4gIE0yMCxcclxuICBNMjEsXHJcbiAgTTIyLFxyXG4gIE0yMyxcclxuICBNMzAsXHJcbiAgTTMxLFxyXG4gIE0zMixcclxuICBNMzNcclxufSBmcm9tIFwiLi9NYXRyaXg0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVmVjdG9yMyB7XHJcbiAgeCA9IDA7XHJcbiAgeSA9IDA7XHJcbiAgeiA9IDA7XHJcbiAgY29uc3RydWN0b3IoeDogbnVtYmVyID0gMCwgeTogbnVtYmVyID0gMCwgejogbnVtYmVyID0gMCkge1xyXG4gICAgdGhpcy54ID0geDtcclxuICAgIHRoaXMueSA9IHk7XHJcbiAgICB0aGlzLnogPSB6O1xyXG4gIH1cclxuICBzZXRGcm9tKHY6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuICAgIHRoaXMueCA9IHYueDtcclxuICAgIHRoaXMueSA9IHYueTtcclxuICAgIHRoaXMueiA9IHYuejtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuICBzZXQoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcik6IFZlY3RvcjMge1xyXG4gICAgdGhpcy54ID0geDtcclxuICAgIHRoaXMueSA9IHk7XHJcbiAgICB0aGlzLnogPSB6O1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG4gIGFkZCh2OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcbiAgICB0aGlzLnggKz0gdi54O1xyXG4gICAgdGhpcy55ICs9IHYueTtcclxuICAgIHRoaXMueiArPSB2Lno7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcbiAgc3ViKHY6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuICAgIHRoaXMueCAtPSB2Lng7XHJcbiAgICB0aGlzLnkgLT0gdi55O1xyXG4gICAgdGhpcy56IC09IHYuejtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuICBzY2FsZShzOiBudW1iZXIpOiBWZWN0b3IzIHtcclxuICAgIHRoaXMueCAqPSBzO1xyXG4gICAgdGhpcy55ICo9IHM7XHJcbiAgICB0aGlzLnogKj0gcztcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuICBub3JtYWxpemUoKTogVmVjdG9yMyB7XHJcbiAgICBsZXQgbGVuID0gdGhpcy5sZW5ndGgoKTtcclxuICAgIGlmIChsZW4gPT0gMCkgcmV0dXJuIHRoaXM7XHJcbiAgICBsZW4gPSAxIC8gbGVuO1xyXG4gICAgdGhpcy54ICo9IGxlbjtcclxuICAgIHRoaXMueSAqPSBsZW47XHJcbiAgICB0aGlzLnogKj0gbGVuO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG4gIGNyb3NzKHY6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuICAgIHJldHVybiB0aGlzLnNldChcclxuICAgICAgdGhpcy55ICogdi56IC0gdGhpcy56ICogdi55LFxyXG4gICAgICB0aGlzLnogKiB2LnggLSB0aGlzLnggKiB2LnosXHJcbiAgICAgIHRoaXMueCAqIHYueSAtIHRoaXMueSAqIHYueFxyXG4gICAgKTtcclxuICB9XHJcbiAgbXVsdGlwbHkobWF0cml4OiBNYXRyaXg0KTogVmVjdG9yMyB7XHJcbiAgICBsZXQgbF9tYXQgPSBtYXRyaXgudmFsdWVzO1xyXG4gICAgcmV0dXJuIHRoaXMuc2V0KFxyXG4gICAgICB0aGlzLnggKiBsX21hdFtNMDBdICtcclxuICAgICAgICB0aGlzLnkgKiBsX21hdFtNMDFdICtcclxuICAgICAgICB0aGlzLnogKiBsX21hdFtNMDJdICtcclxuICAgICAgICBsX21hdFtNMDNdLFxyXG4gICAgICB0aGlzLnggKiBsX21hdFtNMTBdICtcclxuICAgICAgICB0aGlzLnkgKiBsX21hdFtNMTFdICtcclxuICAgICAgICB0aGlzLnogKiBsX21hdFtNMTJdICtcclxuICAgICAgICBsX21hdFtNMTNdLFxyXG4gICAgICB0aGlzLnggKiBsX21hdFtNMjBdICtcclxuICAgICAgICB0aGlzLnkgKiBsX21hdFtNMjFdICtcclxuICAgICAgICB0aGlzLnogKiBsX21hdFtNMjJdICtcclxuICAgICAgICBsX21hdFtNMjNdXHJcbiAgICApO1xyXG4gIH1cclxuICBwcm9qZWN0KG1hdHJpeDogTWF0cml4NCk6IFZlY3RvcjMge1xyXG4gICAgbGV0IGxfbWF0ID0gbWF0cml4LnZhbHVlcztcclxuICAgIGxldCBsX3cgPVxyXG4gICAgICAxIC9cclxuICAgICAgKHRoaXMueCAqIGxfbWF0W00zMF0gK1xyXG4gICAgICAgIHRoaXMueSAqIGxfbWF0W00zMV0gK1xyXG4gICAgICAgIHRoaXMueiAqIGxfbWF0W00zMl0gK1xyXG4gICAgICAgIGxfbWF0W00zM10pO1xyXG4gICAgcmV0dXJuIHRoaXMuc2V0KFxyXG4gICAgICAodGhpcy54ICogbF9tYXRbTTAwXSArXHJcbiAgICAgICAgdGhpcy55ICogbF9tYXRbTTAxXSArXHJcbiAgICAgICAgdGhpcy56ICogbF9tYXRbTTAyXSArXHJcbiAgICAgICAgbF9tYXRbTTAzXSkgKlxyXG4gICAgICAgIGxfdyxcclxuICAgICAgKHRoaXMueCAqIGxfbWF0W00xMF0gK1xyXG4gICAgICAgIHRoaXMueSAqIGxfbWF0W00xMV0gK1xyXG4gICAgICAgIHRoaXMueiAqIGxfbWF0W00xMl0gK1xyXG4gICAgICAgIGxfbWF0W00xM10pICpcclxuICAgICAgICBsX3csXHJcbiAgICAgICh0aGlzLnggKiBsX21hdFtNMjBdICtcclxuICAgICAgICB0aGlzLnkgKiBsX21hdFtNMjFdICtcclxuICAgICAgICB0aGlzLnogKiBsX21hdFtNMjJdICtcclxuICAgICAgICBsX21hdFtNMjNdKSAqXHJcbiAgICAgICAgbF93XHJcbiAgICApO1xyXG4gIH1cclxuICBkb3QodjogVmVjdG9yMyk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy54ICogdi54ICsgdGhpcy55ICogdi55ICsgdGhpcy56ICogdi56O1xyXG4gIH1cclxuICBsZW5ndGgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICsgdGhpcy56ICogdGhpcy56KTtcclxuICB9XHJcbiAgZGlzdGFuY2UodjogVmVjdG9yMyk6IG51bWJlciB7XHJcbiAgICBsZXQgYSA9IHYueCAtIHRoaXMueDtcclxuICAgIGxldCBiID0gdi55IC0gdGhpcy55O1xyXG4gICAgbGV0IGMgPSB2LnogLSB0aGlzLno7XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIgKyBjICogYyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==