UNPKG

ngx-spine

Version:

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

349 lines 31.4 kB
/** * @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 { Utils, Color } from "../Utils"; import { Attachment } from "./Attachment"; export class RegionAttachment extends Attachment { /** * @param {?} name */ constructor(name) { super(name); this.x = 0; this.y = 0; this.scaleX = 1; this.scaleY = 1; this.rotation = 0; this.width = 0; this.height = 0; this.color = new Color(1, 1, 1, 1); this.offset = Utils.newFloatArray(8); this.uvs = Utils.newFloatArray(8); this.tempColor = new Color(1, 1, 1, 1); } /** * @return {?} */ updateOffset() { /** @type {?} */ let regionScaleX = (this.width / this.region.originalWidth) * this.scaleX; /** @type {?} */ let regionScaleY = (this.height / this.region.originalHeight) * this.scaleY; /** @type {?} */ let localX = (-this.width / 2) * this.scaleX + this.region.offsetX * regionScaleX; /** @type {?} */ let localY = (-this.height / 2) * this.scaleY + this.region.offsetY * regionScaleY; /** @type {?} */ let localX2 = localX + this.region.width * regionScaleX; /** @type {?} */ let localY2 = localY + this.region.height * regionScaleY; /** @type {?} */ let radians = (this.rotation * Math.PI) / 180; /** @type {?} */ let cos = Math.cos(radians); /** @type {?} */ let sin = Math.sin(radians); /** @type {?} */ let localXCos = localX * cos + this.x; /** @type {?} */ let localXSin = localX * sin; /** @type {?} */ let localYCos = localY * cos + this.y; /** @type {?} */ let localYSin = localY * sin; /** @type {?} */ let localX2Cos = localX2 * cos + this.x; /** @type {?} */ let localX2Sin = localX2 * sin; /** @type {?} */ let localY2Cos = localY2 * cos + this.y; /** @type {?} */ let localY2Sin = localY2 * sin; /** @type {?} */ let offset = this.offset; offset[RegionAttachment.OX1] = localXCos - localYSin; offset[RegionAttachment.OY1] = localYCos + localXSin; offset[RegionAttachment.OX2] = localXCos - localY2Sin; offset[RegionAttachment.OY2] = localY2Cos + localXSin; offset[RegionAttachment.OX3] = localX2Cos - localY2Sin; offset[RegionAttachment.OY3] = localY2Cos + localX2Sin; offset[RegionAttachment.OX4] = localX2Cos - localYSin; offset[RegionAttachment.OY4] = localYCos + localX2Sin; } /** * @param {?} region * @return {?} */ setRegion(region) { this.region = region; /** @type {?} */ let uvs = this.uvs; if (region.rotate) { uvs[2] = region.u; uvs[3] = region.v2; uvs[4] = region.u; uvs[5] = region.v; uvs[6] = region.u2; uvs[7] = region.v; uvs[0] = region.u2; uvs[1] = region.v2; } else { uvs[0] = region.u; uvs[1] = region.v2; uvs[2] = region.u; uvs[3] = region.v; uvs[4] = region.u2; uvs[5] = region.v; uvs[6] = region.u2; uvs[7] = region.v2; } } /** * @param {?} bone * @param {?} worldVertices * @param {?} offset * @param {?} stride * @return {?} */ computeWorldVertices(bone, worldVertices, offset, stride) { /** @type {?} */ let vertexOffset = this.offset; /** @type {?} */ let x = bone.worldX; /** @type {?} */ let y = bone.worldY; /** @type {?} */ let a = bone.a; /** @type {?} */ let b = bone.b; /** @type {?} */ let c = bone.c; /** @type {?} */ let d = bone.d; /** @type {?} */ let offsetX = 0; /** @type {?} */ let offsetY = 0; offsetX = vertexOffset[RegionAttachment.OX1]; offsetY = vertexOffset[RegionAttachment.OY1]; worldVertices[offset] = offsetX * a + offsetY * b + x; // br worldVertices[offset + 1] = offsetX * c + offsetY * d + y; offset += stride; offsetX = vertexOffset[RegionAttachment.OX2]; offsetY = vertexOffset[RegionAttachment.OY2]; worldVertices[offset] = offsetX * a + offsetY * b + x; // bl worldVertices[offset + 1] = offsetX * c + offsetY * d + y; offset += stride; offsetX = vertexOffset[RegionAttachment.OX3]; offsetY = vertexOffset[RegionAttachment.OY3]; worldVertices[offset] = offsetX * a + offsetY * b + x; // ul worldVertices[offset + 1] = offsetX * c + offsetY * d + y; offset += stride; offsetX = vertexOffset[RegionAttachment.OX4]; offsetY = vertexOffset[RegionAttachment.OY4]; worldVertices[offset] = offsetX * a + offsetY * b + x; // ur worldVertices[offset + 1] = offsetX * c + offsetY * d + y; } /** * @return {?} */ copy() { /** @type {?} */ let copy = new RegionAttachment(name); copy.region = this.region; copy.rendererObject = this.rendererObject; copy.path = this.path; copy.x = this.x; copy.y = this.y; copy.scaleX = this.scaleX; copy.scaleY = this.scaleY; copy.rotation = this.rotation; copy.width = this.width; copy.height = this.height; Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8); Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8); copy.color.setFromColor(this.color); return copy; } } RegionAttachment.OX1 = 0; RegionAttachment.OY1 = 1; RegionAttachment.OX2 = 2; RegionAttachment.OY2 = 3; RegionAttachment.OX3 = 4; RegionAttachment.OY3 = 5; RegionAttachment.OX4 = 6; RegionAttachment.OY4 = 7; RegionAttachment.X1 = 0; RegionAttachment.Y1 = 1; RegionAttachment.C1R = 2; RegionAttachment.C1G = 3; RegionAttachment.C1B = 4; RegionAttachment.C1A = 5; RegionAttachment.U1 = 6; RegionAttachment.V1 = 7; RegionAttachment.X2 = 8; RegionAttachment.Y2 = 9; RegionAttachment.C2R = 10; RegionAttachment.C2G = 11; RegionAttachment.C2B = 12; RegionAttachment.C2A = 13; RegionAttachment.U2 = 14; RegionAttachment.V2 = 15; RegionAttachment.X3 = 16; RegionAttachment.Y3 = 17; RegionAttachment.C3R = 18; RegionAttachment.C3G = 19; RegionAttachment.C3B = 20; RegionAttachment.C3A = 21; RegionAttachment.U3 = 22; RegionAttachment.V3 = 23; RegionAttachment.X4 = 24; RegionAttachment.Y4 = 25; RegionAttachment.C4R = 26; RegionAttachment.C4G = 27; RegionAttachment.C4B = 28; RegionAttachment.C4A = 29; RegionAttachment.U4 = 30; RegionAttachment.V4 = 31; if (false) { /** @type {?} */ RegionAttachment.OX1; /** @type {?} */ RegionAttachment.OY1; /** @type {?} */ RegionAttachment.OX2; /** @type {?} */ RegionAttachment.OY2; /** @type {?} */ RegionAttachment.OX3; /** @type {?} */ RegionAttachment.OY3; /** @type {?} */ RegionAttachment.OX4; /** @type {?} */ RegionAttachment.OY4; /** @type {?} */ RegionAttachment.X1; /** @type {?} */ RegionAttachment.Y1; /** @type {?} */ RegionAttachment.C1R; /** @type {?} */ RegionAttachment.C1G; /** @type {?} */ RegionAttachment.C1B; /** @type {?} */ RegionAttachment.C1A; /** @type {?} */ RegionAttachment.U1; /** @type {?} */ RegionAttachment.V1; /** @type {?} */ RegionAttachment.X2; /** @type {?} */ RegionAttachment.Y2; /** @type {?} */ RegionAttachment.C2R; /** @type {?} */ RegionAttachment.C2G; /** @type {?} */ RegionAttachment.C2B; /** @type {?} */ RegionAttachment.C2A; /** @type {?} */ RegionAttachment.U2; /** @type {?} */ RegionAttachment.V2; /** @type {?} */ RegionAttachment.X3; /** @type {?} */ RegionAttachment.Y3; /** @type {?} */ RegionAttachment.C3R; /** @type {?} */ RegionAttachment.C3G; /** @type {?} */ RegionAttachment.C3B; /** @type {?} */ RegionAttachment.C3A; /** @type {?} */ RegionAttachment.U3; /** @type {?} */ RegionAttachment.V3; /** @type {?} */ RegionAttachment.X4; /** @type {?} */ RegionAttachment.Y4; /** @type {?} */ RegionAttachment.C4R; /** @type {?} */ RegionAttachment.C4G; /** @type {?} */ RegionAttachment.C4B; /** @type {?} */ RegionAttachment.C4A; /** @type {?} */ RegionAttachment.U4; /** @type {?} */ RegionAttachment.V4; /** @type {?} */ RegionAttachment.prototype.x; /** @type {?} */ RegionAttachment.prototype.y; /** @type {?} */ RegionAttachment.prototype.scaleX; /** @type {?} */ RegionAttachment.prototype.scaleY; /** @type {?} */ RegionAttachment.prototype.rotation; /** @type {?} */ RegionAttachment.prototype.width; /** @type {?} */ RegionAttachment.prototype.height; /** @type {?} */ RegionAttachment.prototype.color; /** @type {?} */ RegionAttachment.prototype.path; /** @type {?} */ RegionAttachment.prototype.rendererObject; /** @type {?} */ RegionAttachment.prototype.region; /** @type {?} */ RegionAttachment.prototype.offset; /** @type {?} */ RegionAttachment.prototype.uvs; /** @type {?} */ RegionAttachment.prototype.tempColor; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVnaW9uQXR0YWNobWVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1zcGluZS8iLCJzb3VyY2VzIjpbImxpYi9zcGluZS10cy9jb3JlL2F0dGFjaG1lbnRzL1JlZ2lvbkF0dGFjaG1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkEsT0FBTyxFQUFFLEtBQUssRUFBYSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUkxQyxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsVUFBVTs7OztJQWdFOUMsWUFBWSxJQUFZO1FBQ3RCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQW5CZCxNQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ04sTUFBQyxHQUFHLENBQUMsQ0FBQztRQUNOLFdBQU0sR0FBRyxDQUFDLENBQUM7UUFDWCxXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsVUFBSyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBTTlCLFdBQU0sR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLFFBQUcsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTdCLGNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUlsQyxDQUFDOzs7O0lBRUQsWUFBWTs7WUFDTixZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFB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b0JBQWU7O0lBQ2Ysb0JBQWU7O0lBQ2YscUJBQWdCOztJQUNoQixxQkFBZ0I7O0lBQ2hCLHFCQUFnQjs7SUFDaEIscUJBQWdCOztJQUNoQixvQkFBZTs7SUFDZixvQkFBZTs7SUFFZiw2QkFBTTs7SUFDTiw2QkFBTTs7SUFDTixrQ0FBVzs7SUFDWCxrQ0FBVzs7SUFDWCxvQ0FBYTs7SUFDYixpQ0FBVTs7SUFDVixrQ0FBVzs7SUFDWCxpQ0FBOEI7O0lBRTlCLGdDQUFhOztJQUNiLDBDQUFvQjs7SUFDcEIsa0NBQXNCOztJQUV0QixrQ0FBZ0M7O0lBQ2hDLCtCQUE2Qjs7SUFFN0IscUNBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxyXG4gKiBMYXN0IHVwZGF0ZWQgTWF5IDEsIDIwMTkuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTksIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xyXG4gKlxyXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcclxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcclxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcclxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXHJcbiAqXHJcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxyXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXHJcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cclxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XHJcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxyXG4gKlxyXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTXHJcbiAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVNcclxuICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU5cclxuICogTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsXHJcbiAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsXHJcbiAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUywgQlVTSU5FU1NcclxuICogSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxyXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcclxuICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLFxyXG4gKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxyXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5pbXBvcnQgeyBVdGlscywgQXJyYXlMaWtlLCBDb2xvciB9IGZyb20gXCIuLi9VdGlsc1wiO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50IH0gZnJvbSBcIi4vQXR0YWNobWVudFwiO1xyXG5pbXBvcnQgeyBUZXh0dXJlUmVnaW9uIH0gZnJvbSBcIi4uL1RleHR1cmVcIjtcclxuaW1wb3J0IHsgQm9uZSB9IGZyb20gXCIuLi9Cb25lXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVnaW9uQXR0YWNobWVudCBleHRlbmRzIEF0dGFjaG1lbnQge1xyXG4gIHN0YXRpYyBPWDEgPSAwO1xyXG4gIHN0YXRpYyBPWTEgPSAxO1xyXG4gIHN0YXRpYyBPWDIgPSAyO1xyXG4gIHN0YXRpYyBPWTIgPSAzO1xyXG4gIHN0YXRpYyBPWDMgPSA0O1xyXG4gIHN0YXRpYyBPWTMgPSA1O1xyXG4gIHN0YXRpYyBPWDQgPSA2O1xyXG4gIHN0YXRpYyBPWTQgPSA3O1xyXG5cclxuICBzdGF0aWMgWDEgPSAwO1xyXG4gIHN0YXRpYyBZMSA9IDE7XHJcbiAgc3RhdGljIEMxUiA9IDI7XHJcbiAgc3RhdGljIEMxRyA9IDM7XHJcbiAgc3RhdGljIEMxQiA9IDQ7XHJcbiAgc3RhdGljIEMxQSA9IDU7XHJcbiAgc3RhdGljIFUxID0gNjtcclxuICBzdGF0aWMgVjEgPSA3O1xyXG5cclxuICBzdGF0aWMgWDIgPSA4O1xyXG4gIHN0YXRpYyBZMiA9IDk7XHJcbiAgc3RhdGljIEMyUiA9IDEwO1xyXG4gIHN0YXRpYyBDMkcgPSAxMTtcclxuICBzdGF0aWMgQzJCID0gMTI7XHJcbiAgc3RhdGljIEMyQSA9IDEzO1xyXG4gIHN0YXRpYyBVMiA9IDE0O1xyXG4gIHN0YXRpYyBWMiA9IDE1O1xyXG5cclxuICBzdGF0aWMgWDMgPSAxNjtcclxuICBzdGF0aWMgWTMgPSAxNztcclxuICBzdGF0aWMgQzNSID0gMTg7XHJcbiAgc3RhdGljIEMzRyA9IDE5O1xyXG4gIHN0YXRpYyBDM0IgPSAyMDtcclxuICBzdGF0aWMgQzNBID0gMjE7XHJcbiAgc3RhdGljIFUzID0gMjI7XHJcbiAgc3RhdGljIFYzID0gMjM7XHJcblxyXG4gIHN0YXRpYyBYNCA9IDI0O1xyXG4gIHN0YXRpYyBZNCA9IDI1O1xyXG4gIHN0YXRpYyBDNFIgPSAyNjtcclxuICBzdGF0aWMgQzRHID0gMjc7XHJcbiAgc3RhdGljIEM0QiA9IDI4O1xyXG4gIHN0YXRpYyBDNEEgPSAyOTtcclxuICBzdGF0aWMgVTQgPSAzMDtcclxuICBzdGF0aWMgVjQgPSAzMTtcclxuXHJcbiAgeCA9IDA7XHJcbiAgeSA9IDA7XHJcbiAgc2NhbGVYID0gMTtcclxuICBzY2FsZVkgPSAxO1xyXG4gIHJvdGF0aW9uID0gMDtcclxuICB3aWR0aCA9IDA7XHJcbiAgaGVpZ2h0ID0gMDtcclxuICBjb2xvciA9IG5ldyBDb2xvcigxLCAxLCAxLCAxKTtcclxuXHJcbiAgcGF0aDogc3RyaW5nO1xyXG4gIHJlbmRlcmVyT2JqZWN0OiBhbnk7XHJcbiAgcmVnaW9uOiBUZXh0dXJlUmVnaW9uO1xyXG5cclxuICBvZmZzZXQgPSBVdGlscy5uZXdGbG9hdEFycmF5KDgpO1xyXG4gIHV2cyA9IFV0aWxzLm5ld0Zsb2F0QXJyYXkoOCk7XHJcblxyXG4gIHRlbXBDb2xvciA9IG5ldyBDb2xvcigxLCAxLCAxLCAxKTtcclxuXHJcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XHJcbiAgICBzdXBlcihuYW1lKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU9mZnNldCgpOiB2b2lkIHtcclxuICAgIGxldCByZWdpb25TY2FsZVggPSAodGhpcy53aWR0aCAvIHRoaXMucmVnaW9uLm9yaWdpbmFsV2lkdGgpICogdGhpcy5zY2FsZVg7XHJcbiAgICBsZXQgcmVnaW9uU2NhbGVZID0gKHRoaXMuaGVpZ2h0IC8gdGhpcy5yZWdpb24ub3JpZ2luYWxIZWlnaHQpICogdGhpcy5zY2FsZVk7XHJcbiAgICBsZXQgbG9jYWxYID1cclxuICAgICAgKC10aGlzLndpZHRoIC8gMikgKiB0aGlzLnNjYWxlWCArIHRoaXMucmVnaW9uLm9mZnNldFggKiByZWdpb25TY2FsZVg7XHJcbiAgICBsZXQgbG9jYWxZID1cclxuICAgICAgKC10aGlzLmhlaWdodCAvIDIpICogdGhpcy5zY2FsZVkgKyB0aGlzLnJlZ2lvbi5vZmZzZXRZICogcmVnaW9uU2NhbGVZO1xyXG4gICAgbGV0IGxvY2FsWDIgPSBsb2NhbFggKyB0aGlzLnJlZ2lvbi53aWR0aCAqIHJlZ2lvblNjYWxlWDtcclxuICAgIGxldCBsb2NhbFkyID0gbG9jYWxZICsgdGhpcy5yZWdpb24uaGVpZ2h0ICogcmVnaW9uU2NhbGVZO1xyXG4gICAgbGV0IHJhZGlhbnMgPSAodGhpcy5yb3RhdGlvbiAqIE1hdGguUEkpIC8gMTgwO1xyXG4gICAgbGV0IGNvcyA9IE1hdGguY29zKHJhZGlhbnMpO1xyXG4gICAgbGV0IHNpbiA9IE1hdGguc2luKHJhZGlhbnMpO1xyXG4gICAgbGV0IGxvY2FsWENvcyA9IGxvY2FsWCAqIGNvcyArIHRoaXMueDtcclxuICAgIGxldCBsb2NhbFhTaW4gPSBsb2NhbFggKiBzaW47XHJcbiAgICBsZXQgbG9jYWxZQ29zID0gbG9jYWxZICogY29zICsgdGhpcy55O1xyXG4gICAgbGV0IGxvY2FsWVNpbiA9IGxvY2FsWSAqIHNpbjtcclxuICAgIGxldCBsb2NhbFgyQ29zID0gbG9jYWxYMiAqIGNvcyArIHRoaXMueDtcclxuICAgIGxldCBsb2NhbFgyU2luID0gbG9jYWxYMiAqIHNpbjtcclxuICAgIGxldCBsb2NhbFkyQ29zID0gbG9jYWxZMiAqIGNvcyArIHRoaXMueTtcclxuICAgIGxldCBsb2NhbFkyU2luID0gbG9jYWxZMiAqIHNpbjtcclxuICAgIGxldCBvZmZzZXQgPSB0aGlzLm9mZnNldDtcclxuICAgIG9mZnNldFtSZWdpb25BdHRhY2htZW50Lk9YMV0gPSBsb2NhbFhDb3MgLSBsb2NhbFlTaW47XHJcbiAgICBvZmZzZXRbUmVnaW9uQXR0YWNobWVudC5PWTFdID0gbG9jYWxZQ29zICsgbG9jYWxYU2luO1xyXG4gICAgb2Zmc2V0W1JlZ2lvbkF0dGFjaG1lbnQuT1gyXSA9IGxvY2FsWENvcyAtIGxvY2FsWTJTaW47XHJcbiAgICBvZmZzZXRbUmVnaW9uQXR0YWNobWVudC5PWTJdID0gbG9jYWxZMkNvcyArIGxvY2FsWFNpbjtcclxuICAgIG9mZnNldFtSZWdpb25BdHRhY2htZW50Lk9YM10gPSBsb2NhbFgyQ29zIC0gbG9jYWxZMlNpbjtcclxuICAgIG9mZnNldFtSZWdpb25BdHRhY2htZW50Lk9ZM10gPSBsb2NhbFkyQ29zICsgbG9jYWxYMlNpbjtcclxuICAgIG9mZnNldFtSZWdpb25BdHRhY2htZW50Lk9YNF0gPSBsb2NhbFgyQ29zIC0gbG9jYWxZU2luO1xyXG4gICAgb2Zmc2V0W1JlZ2lvbkF0dGFjaG1lbnQuT1k0XSA9IGxvY2FsWUNvcyArIGxvY2FsWDJTaW47XHJcbiAgfVxyXG5cclxuICBzZXRSZWdpb24ocmVnaW9uOiBUZXh0dXJlUmVnaW9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlZ2lvbiA9IHJlZ2lvbjtcclxuICAgIGxldCB1dnMgPSB0aGlzLnV2cztcclxuICAgIGlmIChyZWdpb24ucm90YXRlKSB7XHJcbiAgICAgIHV2c1syXSA9IHJlZ2lvbi51O1xyXG4gICAgICB1dnNbM10gPSByZWdpb24udjI7XHJcbiAgICAgIHV2c1s0XSA9IHJlZ2lvbi51O1xyXG4gICAgICB1dnNbNV0gPSByZWdpb24udjtcclxuICAgICAgdXZzWzZdID0gcmVnaW9uLnUyO1xyXG4gICAgICB1dnNbN10gPSByZWdpb24udjtcclxuICAgICAgdXZzWzBdID0gcmVnaW9uLnUyO1xyXG4gICAgICB1dnNbMV0gPSByZWdpb24udjI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1dnNbMF0gPSByZWdpb24udTtcclxuICAgICAgdXZzWzFdID0gcmVnaW9uLnYyO1xyXG4gICAgICB1dnNbMl0gPSByZWdpb24udTtcclxuICAgICAgdXZzWzNdID0gcmVnaW9uLnY7XHJcbiAgICAgIHV2c1s0XSA9IHJlZ2lvbi51MjtcclxuICAgICAgdXZzWzVdID0gcmVnaW9uLnY7XHJcbiAgICAgIHV2c1s2XSA9IHJlZ2lvbi51MjtcclxuICAgICAgdXZzWzddID0gcmVnaW9uLnYyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29tcHV0ZVdvcmxkVmVydGljZXMoXHJcbiAgICBib25lOiBCb25lLFxyXG4gICAgd29ybGRWZXJ0aWNlczogQXJyYXlMaWtlPG51bWJlcj4sXHJcbiAgICBvZmZzZXQ6IG51bWJlcixcclxuICAgIHN0cmlkZTogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBsZXQgdmVydGV4T2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XHJcbiAgICBsZXQgeCA9IGJvbmUud29ybGRYLFxyXG4gICAgICB5ID0gYm9uZS53b3JsZFk7XHJcbiAgICBsZXQgYSA9IGJvbmUuYSxcclxuICAgICAgYiA9IGJvbmUuYixcclxuICAgICAgYyA9IGJvbmUuYyxcclxuICAgICAgZCA9IGJvbmUuZDtcclxuICAgIGxldCBvZmZzZXRYID0gMCxcclxuICAgICAgb2Zmc2V0WSA9IDA7XHJcblxyXG4gICAgb2Zmc2V0WCA9IHZlcnRleE9mZnNldFtSZWdpb25BdHRhY2htZW50Lk9YMV07XHJcbiAgICBvZmZzZXRZID0gdmVydGV4T2Zmc2V0W1JlZ2lvbkF0dGFjaG1lbnQuT1kxXTtcclxuICAgIHdvcmxkVmVydGljZXNbb2Zmc2V0XSA9IG9mZnNldFggKiBhICsgb2Zmc2V0WSAqIGIgKyB4OyAvLyBiclxyXG4gICAgd29ybGRWZXJ0aWNlc1tvZmZzZXQgKyAxXSA9IG9mZnNldFggKiBjICsgb2Zmc2V0WSAqIGQgKyB5O1xyXG4gICAgb2Zmc2V0ICs9IHN0cmlkZTtcclxuXHJcbiAgICBvZmZzZXRYID0gdmVydGV4T2Zmc2V0W1JlZ2lvbkF0dGFjaG1lbnQuT1gyXTtcclxuICAgIG9mZnNldFkgPSB2ZXJ0ZXhPZmZzZXRbUmVnaW9uQXR0YWNobWVudC5PWTJdO1xyXG4gICAgd29ybGRWZXJ0aWNlc1tvZmZzZXRdID0gb2Zmc2V0WCAqIGEgKyBvZmZzZXRZICogYiArIHg7IC8vIGJsXHJcbiAgICB3b3JsZFZlcnRpY2VzW29mZnNldCArIDFdID0gb2Zmc2V0WCAqIGMgKyBvZmZzZXRZICogZCArIHk7XHJcbiAgICBvZmZzZXQgKz0gc3RyaWRlO1xyXG5cclxuICAgIG9mZnNldFggPSB2ZXJ0ZXhPZmZzZXRbUmVnaW9uQXR0YWNobWVudC5PWDNdO1xyXG4gICAgb2Zmc2V0WSA9IHZlcnRleE9mZnNldFtSZWdpb25BdHRhY2htZW50Lk9ZM107XHJcbiAgICB3b3JsZFZlcnRpY2VzW29mZnNldF0gPSBvZmZzZXRYICogYSArIG9mZnNldFkgKiBiICsgeDsgLy8gdWxcclxuICAgIHdvcmxkVmVydGljZXNbb2Zmc2V0ICsgMV0gPSBvZmZzZXRYICogYyArIG9mZnNldFkgKiBkICsgeTtcclxuICAgIG9mZnNldCArPSBzdHJpZGU7XHJcblxyXG4gICAgb2Zmc2V0WCA9IHZlcnRleE9mZnNldFtSZWdpb25BdHRhY2htZW50Lk9YNF07XHJcbiAgICBvZmZzZXRZID0gdmVydGV4T2Zmc2V0W1JlZ2lvbkF0dGFjaG1lbnQuT1k0XTtcclxuICAgIHdvcmxkVmVydGljZXNbb2Zmc2V0XSA9IG9mZnNldFggKiBhICsgb2Zmc2V0WSAqIGIgKyB4OyAvLyB1clxyXG4gICAgd29ybGRWZXJ0aWNlc1tvZmZzZXQgKyAxXSA9IG9mZnNldFggKiBjICsgb2Zmc2V0WSAqIGQgKyB5O1xyXG4gIH1cclxuXHJcbiAgY29weSgpOiBBdHRhY2htZW50IHtcclxuICAgIGxldCBjb3B5ID0gbmV3IFJlZ2lvbkF0dGFjaG1lbnQobmFtZSk7XHJcbiAgICBjb3B5LnJlZ2lvbiA9IHRoaXMucmVnaW9uO1xyXG4gICAgY29weS5yZW5kZXJlck9iamVjdCA9IHRoaXMucmVuZGVyZXJPYmplY3Q7XHJcbiAgICBjb3B5LnBhdGggPSB0aGlzLnBhdGg7XHJcbiAgICBjb3B5LnggPSB0aGlzLng7XHJcbiAgICBjb3B5LnkgPSB0aGlzLnk7XHJcbiAgICBjb3B5LnNjYWxlWCA9IHRoaXMuc2NhbGVYO1xyXG4gICAgY29weS5zY2FsZVkgPSB0aGlzLnNjYWxlWTtcclxuICAgIGNvcHkucm90YXRpb24gPSB0aGlzLnJvdGF0aW9uO1xyXG4gICAgY29weS53aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICBjb3B5LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xyXG4gICAgVXRpbHMuYXJyYXlDb3B5KHRoaXMudXZzLCAwLCBjb3B5LnV2cywgMCwgOCk7XHJcbiAgICBVdGlscy5hcnJheUNvcHkodGhpcy5vZmZzZXQsIDAsIGNvcHkub2Zmc2V0LCAwLCA4KTtcclxuICAgIGNvcHkuY29sb3Iuc2V0RnJvbUNvbG9yKHRoaXMuY29sb3IpO1xyXG4gICAgcmV0dXJuIGNvcHk7XHJcbiAgfVxyXG59XHJcbiJdfQ==