ngx-spine
Version:
[](https://travis-ci.org/PoiScript/ngx-spine)
267 lines • 24.1 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.
*****************************************************************************/
export class SkeletonData {
constructor() {
this.bones = new Array(); // Ordered parents first.
// Ordered parents first.
this.slots = new Array(); // Setup pose draw order.
// Setup pose draw order.
this.skins = new Array();
this.events = new Array();
this.animations = new Array();
this.ikConstraints = new Array();
this.transformConstraints = new Array();
this.pathConstraints = new Array();
// Nonessential
this.fps = 0;
}
/**
* @param {?} boneName
* @return {?}
*/
findBone(boneName) {
if (boneName == null)
throw new Error("boneName cannot be null.");
/** @type {?} */
let bones = this.bones;
for (let i = 0, n = bones.length; i < n; i++) {
/** @type {?} */
let bone = bones[i];
if (bone.name == boneName)
return bone;
}
return null;
}
/**
* @param {?} boneName
* @return {?}
*/
findBoneIndex(boneName) {
if (boneName == null)
throw new Error("boneName cannot be null.");
/** @type {?} */
let bones = this.bones;
for (let i = 0, n = bones.length; i < n; i++)
if (bones[i].name == boneName)
return i;
return -1;
}
/**
* @param {?} slotName
* @return {?}
*/
findSlot(slotName) {
if (slotName == null)
throw new Error("slotName cannot be null.");
/** @type {?} */
let slots = this.slots;
for (let i = 0, n = slots.length; i < n; i++) {
/** @type {?} */
let slot = slots[i];
if (slot.name == slotName)
return slot;
}
return null;
}
/**
* @param {?} slotName
* @return {?}
*/
findSlotIndex(slotName) {
if (slotName == null)
throw new Error("slotName cannot be null.");
/** @type {?} */
let slots = this.slots;
for (let i = 0, n = slots.length; i < n; i++)
if (slots[i].name == slotName)
return i;
return -1;
}
/**
* @param {?} skinName
* @return {?}
*/
findSkin(skinName) {
if (skinName == null)
throw new Error("skinName cannot be null.");
/** @type {?} */
let skins = this.skins;
for (let i = 0, n = skins.length; i < n; i++) {
/** @type {?} */
let skin = skins[i];
if (skin.name == skinName)
return skin;
}
return null;
}
/**
* @param {?} eventDataName
* @return {?}
*/
findEvent(eventDataName) {
if (eventDataName == null)
throw new Error("eventDataName cannot be null.");
/** @type {?} */
let events = this.events;
for (let i = 0, n = events.length; i < n; i++) {
/** @type {?} */
let event = events[i];
if (event.name == eventDataName)
return event;
}
return null;
}
/**
* @param {?} animationName
* @return {?}
*/
findAnimation(animationName) {
if (animationName == null)
throw new Error("animationName cannot be null.");
/** @type {?} */
let animations = this.animations;
for (let i = 0, n = animations.length; i < n; i++) {
/** @type {?} */
let animation = animations[i];
if (animation.name == animationName)
return animation;
}
return null;
}
/**
* @param {?} constraintName
* @return {?}
*/
findIkConstraint(constraintName) {
if (constraintName == null)
throw new Error("constraintName cannot be null.");
/** @type {?} */
let ikConstraints = this.ikConstraints;
for (let i = 0, n = ikConstraints.length; i < n; i++) {
/** @type {?} */
let constraint = ikConstraints[i];
if (constraint.name == constraintName)
return constraint;
}
return null;
}
/**
* @param {?} constraintName
* @return {?}
*/
findTransformConstraint(constraintName) {
if (constraintName == null)
throw new Error("constraintName cannot be null.");
/** @type {?} */
let transformConstraints = this.transformConstraints;
for (let i = 0, n = transformConstraints.length; i < n; i++) {
/** @type {?} */
let constraint = transformConstraints[i];
if (constraint.name == constraintName)
return constraint;
}
return null;
}
/**
* @param {?} constraintName
* @return {?}
*/
findPathConstraint(constraintName) {
if (constraintName == null)
throw new Error("constraintName cannot be null.");
/** @type {?} */
let pathConstraints = this.pathConstraints;
for (let i = 0, n = pathConstraints.length; i < n; i++) {
/** @type {?} */
let constraint = pathConstraints[i];
if (constraint.name == constraintName)
return constraint;
}
return null;
}
/**
* @param {?} pathConstraintName
* @return {?}
*/
findPathConstraintIndex(pathConstraintName) {
if (pathConstraintName == null)
throw new Error("pathConstraintName cannot be null.");
/** @type {?} */
let pathConstraints = this.pathConstraints;
for (let i = 0, n = pathConstraints.length; i < n; i++)
if (pathConstraints[i].name == pathConstraintName)
return i;
return -1;
}
}
if (false) {
/** @type {?} */
SkeletonData.prototype.name;
/** @type {?} */
SkeletonData.prototype.bones;
/** @type {?} */
SkeletonData.prototype.slots;
/** @type {?} */
SkeletonData.prototype.skins;
/** @type {?} */
SkeletonData.prototype.defaultSkin;
/** @type {?} */
SkeletonData.prototype.events;
/** @type {?} */
SkeletonData.prototype.animations;
/** @type {?} */
SkeletonData.prototype.ikConstraints;
/** @type {?} */
SkeletonData.prototype.transformConstraints;
/** @type {?} */
SkeletonData.prototype.pathConstraints;
/** @type {?} */
SkeletonData.prototype.x;
/** @type {?} */
SkeletonData.prototype.y;
/** @type {?} */
SkeletonData.prototype.width;
/** @type {?} */
SkeletonData.prototype.height;
/** @type {?} */
SkeletonData.prototype.version;
/** @type {?} */
SkeletonData.prototype.hash;
/** @type {?} */
SkeletonData.prototype.fps;
/** @type {?} */
SkeletonData.prototype.imagesPath;
/** @type {?} */
SkeletonData.prototype.audioPath;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25EYXRhLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXNwaW5lLyIsInNvdXJjZXMiOlsibGliL3NwaW5lLXRzL2NvcmUvU2tlbGV0b25EYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0NBLE1BQU0sT0FBTyxZQUFZO0lBQXpCO1FBRUUsVUFBSyxHQUFHLElBQUksS0FBSyxFQUFZLENBQUMsQ0FBQyx5QkFBeUI7O1FBQ3hELFVBQUssR0FBRyxJQUFJLEtBQUssRUFBWSxDQUFDLENBQUMseUJBQXlCOztRQUN4RCxVQUFLLEdBQUcsSUFBSSxLQUFLLEVBQVEsQ0FBQztRQUUxQixXQUFNLEdBQUcsSUFBSSxLQUFLLEVBQWEsQ0FBQztRQUNoQyxlQUFVLEdBQUcsSUFBSSxLQUFLLEVBQWEsQ0FBQztRQUNwQyxrQkFBYSxHQUFHLElBQUksS0FBSyxFQUFvQixDQUFDO1FBQzlDLHlCQUFvQixHQUFHLElBQUksS0FBSyxFQUEyQixDQUFDO1FBQzVELG9CQUFlLEdBQUcsSUFBSSxLQUFLLEVBQXNCLENBQUM7O1FBUWxELFFBQUcsR0FBRyxDQUFDLENBQUM7SUFvR1YsQ0FBQzs7Ozs7SUFqR0MsUUFBUSxDQUFDLFFBQWdCO1FBQ3ZCLElBQUksUUFBUSxJQUFJLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7O1lBQzlELEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSztRQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFOztnQkFDeEMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7U0FDeEM7UUFDRCxPQUFPLElBQUks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O0lBQ2xCLDhCQUFnQzs7SUFDaEMsa0NBQW9DOztJQUNwQyxxQ0FBOEM7O0lBQzlDLDRDQUE0RDs7SUFDNUQsdUNBQWtEOztJQUNsRCx5QkFBVTs7SUFDVix5QkFBVTs7SUFDViw2QkFBYzs7SUFDZCw4QkFBZTs7SUFDZiwrQkFBZ0I7O0lBQ2hCLDRCQUFhOztJQUViLDJCQUFROztJQUNSLGtDQUFtQjs7SUFDbkIsaUNBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxyXG4gKiBMYXN0IHVwZGF0ZWQgTWF5IDEsIDIwMTkuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTksIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xyXG4gKlxyXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcclxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcclxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcclxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXHJcbiAqXHJcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxyXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXHJcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cclxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XHJcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxyXG4gKlxyXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTXHJcbiAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVNcclxuICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU5cclxuICogTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsXHJcbiAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsXHJcbiAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUywgQlVTSU5FU1NcclxuICogSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxyXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcclxuICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLFxyXG4gKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxyXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5pbXBvcnQgeyBBbmltYXRpb24gfSBmcm9tIFwiLi9BbmltYXRpb25cIjtcclxuaW1wb3J0IHsgQm9uZURhdGEgfSBmcm9tIFwiLi9Cb25lRGF0YVwiO1xyXG5pbXBvcnQgeyBTbG90RGF0YSB9IGZyb20gXCIuL1Nsb3REYXRhXCI7XHJcbmltcG9ydCB7IFNraW4gfSBmcm9tIFwiLi9Ta2luXCI7XHJcbmltcG9ydCB7IEV2ZW50RGF0YSB9IGZyb20gXCIuL0V2ZW50RGF0YVwiO1xyXG5pbXBvcnQgeyBJa0NvbnN0cmFpbnREYXRhIH0gZnJvbSBcIi4vSWtDb25zdHJhaW50RGF0YVwiO1xyXG5pbXBvcnQgeyBUcmFuc2Zvcm1Db25zdHJhaW50RGF0YSB9IGZyb20gXCIuL1RyYW5zZm9ybUNvbnN0cmFpbnREYXRhXCI7XHJcbmltcG9ydCB7IFBhdGhDb25zdHJhaW50RGF0YSB9IGZyb20gXCIuL1BhdGhDb25zdHJhaW50RGF0YVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNrZWxldG9uRGF0YSB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGJvbmVzID0gbmV3IEFycmF5PEJvbmVEYXRhPigpOyAvLyBPcmRlcmVkIHBhcmVudHMgZmlyc3QuXHJcbiAgc2xvdHMgPSBuZXcgQXJyYXk8U2xvdERhdGE+KCk7IC8vIFNldHVwIHBvc2UgZHJhdyBvcmRlci5cclxuICBza2lucyA9IG5ldyBBcnJheTxTa2luPigpO1xyXG4gIGRlZmF1bHRTa2luOiBTa2luO1xyXG4gIGV2ZW50cyA9IG5ldyBBcnJheTxFdmVudERhdGE+KCk7XHJcbiAgYW5pbWF0aW9ucyA9IG5ldyBBcnJheTxBbmltYXRpb24+KCk7XHJcbiAgaWtDb25zdHJhaW50cyA9IG5ldyBBcnJheTxJa0NvbnN0cmFpbnREYXRhPigpO1xyXG4gIHRyYW5zZm9ybUNvbnN0cmFpbnRzID0gbmV3IEFycmF5PFRyYW5zZm9ybUNvbnN0cmFpbnREYXRhPigpO1xyXG4gIHBhdGhDb25zdHJhaW50cyA9IG5ldyBBcnJheTxQYXRoQ29uc3RyYWludERhdGE+KCk7XHJcbiAgeDogbnVtYmVyO1xyXG4gIHk6IG51bWJlcjtcclxuICB3aWR0aDogbnVtYmVyO1xyXG4gIGhlaWdodDogbnVtYmVyO1xyXG4gIHZlcnNpb246IHN0cmluZztcclxuICBoYXNoOiBzdHJpbmc7XHJcbiAgLy8gTm9uZXNzZW50aWFsXHJcbiAgZnBzID0gMDtcclxuICBpbWFnZXNQYXRoOiBzdHJpbmc7XHJcbiAgYXVkaW9QYXRoOiBzdHJpbmc7XHJcbiAgZmluZEJvbmUoYm9uZU5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKGJvbmVOYW1lID09IG51bGwpIHRocm93IG5ldyBFcnJvcihcImJvbmVOYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcclxuICAgIGxldCBib25lcyA9IHRoaXMuYm9uZXM7XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IGJvbmVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICBsZXQgYm9uZSA9IGJvbmVzW2ldO1xyXG4gICAgICBpZiAoYm9uZS5uYW1lID09IGJvbmVOYW1lKSByZXR1cm4gYm9uZTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICBmaW5kQm9uZUluZGV4KGJvbmVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmIChib25lTmFtZSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJib25lTmFtZSBjYW5ub3QgYmUgbnVsbC5cIik7XHJcbiAgICBsZXQgYm9uZXMgPSB0aGlzLmJvbmVzO1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIG4gPSBib25lcy5sZW5ndGg7IGkgPCBuOyBpKyspXHJcbiAgICAgIGlmIChib25lc1tpXS5uYW1lID09IGJvbmVOYW1lKSByZXR1cm4gaTtcclxuICAgIHJldHVybiAtMTtcclxuICB9XHJcbiAgZmluZFNsb3Qoc2xvdE5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKHNsb3ROYW1lID09IG51bGwpIHRocm93IG5ldyBFcnJvcihcInNsb3ROYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcclxuICAgIGxldCBzbG90cyA9IHRoaXMuc2xvdHM7XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IHNsb3RzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICBsZXQgc2xvdCA9IHNsb3RzW2ldO1xyXG4gICAgICBpZiAoc2xvdC5uYW1lID09IHNsb3ROYW1lKSByZXR1cm4gc2xvdDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICBmaW5kU2xvdEluZGV4KHNsb3ROYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmIChzbG90TmFtZSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJzbG90TmFtZSBjYW5ub3QgYmUgbnVsbC5cIik7XHJcbiAgICBsZXQgc2xvdHMgPSB0aGlzLnNsb3RzO1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIG4gPSBzbG90cy5sZW5ndGg7IGkgPCBuOyBpKyspXHJcbiAgICAgIGlmIChzbG90c1tpXS5uYW1lID09IHNsb3ROYW1lKSByZXR1cm4gaTtcclxuICAgIHJldHVybiAtMTtcclxuICB9XHJcbiAgZmluZFNraW4oc2tpbk5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKHNraW5OYW1lID09IG51bGwpIHRocm93IG5ldyBFcnJvcihcInNraW5OYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcclxuICAgIGxldCBza2lucyA9IHRoaXMuc2tpbnM7XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IHNraW5zLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICBsZXQgc2tpbiA9IHNraW5zW2ldO1xyXG4gICAgICBpZiAoc2tpbi5uYW1lID09IHNraW5OYW1lKSByZXR1cm4gc2tpbjtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICBmaW5kRXZlbnQoZXZlbnREYXRhTmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoZXZlbnREYXRhTmFtZSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJldmVudERhdGFOYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcclxuICAgIGxldCBldmVudHMgPSB0aGlzLmV2ZW50cztcclxuICAgIGZvciAobGV0IGkgPSAwLCBuID0gZXZlbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICBsZXQgZXZlbnQgPSBldmVudHNbaV07XHJcbiAgICAgIGlmIChldmVudC5uYW1lID09IGV2ZW50RGF0YU5hbWUpIHJldHVybiBldmVudDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICBmaW5kQW5pbWF0aW9uKGFuaW1hdGlvbk5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKGFuaW1hdGlvbk5hbWUgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwiYW5pbWF0aW9uTmFtZSBjYW5ub3QgYmUgbnVsbC5cIik7XHJcbiAgICBsZXQgYW5pbWF0aW9ucyA9IHRoaXMuYW5pbWF0aW9ucztcclxuICAgIGZvciAobGV0IGkgPSAwLCBuID0gYW5pbWF0aW9ucy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgbGV0IGFuaW1hdGlvbiA9IGFuaW1hdGlvbnNbaV07XHJcbiAgICAgIGlmIChhbmltYXRpb24ubmFtZSA9PSBhbmltYXRpb25OYW1lKSByZXR1cm4gYW5pbWF0aW9uO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG4gIGZpbmRJa0NvbnN0cmFpbnQoY29uc3RyYWludE5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKGNvbnN0cmFpbnROYW1lID09IG51bGwpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImNvbnN0cmFpbnROYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcclxuICAgIGxldCBpa0NvbnN0cmFpbnRzID0gdGhpcy5pa0NvbnN0cmFpbnRzO1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIG4gPSBpa0NvbnN0cmFpbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICBsZXQgY29uc3RyYWludCA9IGlrQ29uc3RyYWludHNbaV07XHJcbiAgICAgIGlmIChjb25zdHJhaW50Lm5hbWUgPT0gY29uc3RyYWludE5hbWUpIHJldHVybiBjb25zdHJhaW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG4gIGZpbmRUcmFuc2Zvcm1Db25zdHJhaW50KGNvbnN0cmFpbnROYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmIChjb25zdHJhaW50TmFtZSA9PSBudWxsKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb25zdHJhaW50TmFtZSBjYW5ub3QgYmUgbnVsbC5cIik7XHJcbiAgICBsZXQgdHJhbnNmb3JtQ29uc3RyYWludHMgPSB0aGlzLnRyYW5zZm9ybUNvbnN0cmFpbnRzO1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIG4gPSB0cmFuc2Zvcm1Db25zdHJhaW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgbGV0IGNvbnN0cmFpbnQgPSB0cmFuc2Zvcm1Db25zdHJhaW50c1tpXTtcclxuICAgICAgaWYgKGNvbnN0cmFpbnQubmFtZSA9PSBjb25zdHJhaW50TmFtZSkgcmV0dXJuIGNvbnN0cmFpbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbiAgZmluZFBhdGhDb25zdHJhaW50KGNvbnN0cmFpbnROYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmIChjb25zdHJhaW50TmFtZSA9PSBudWxsKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb25zdHJhaW50TmFtZSBjYW5ub3QgYmUgbnVsbC5cIik7XHJcbiAgICBsZXQgcGF0aENvbnN0cmFpbnRzID0gdGhpcy5wYXRoQ29uc3RyYWludHM7XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IHBhdGhDb25zdHJhaW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgbGV0IGNvbnN0cmFpbnQgPSBwYXRoQ29uc3RyYWludHNbaV07XHJcbiAgICAgIGlmIChjb25zdHJhaW50Lm5hbWUgPT0gY29uc3RyYWludE5hbWUpIHJldHVybiBjb25zdHJhaW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG4gIGZpbmRQYXRoQ29uc3RyYWludEluZGV4KHBhdGhDb25zdHJhaW50TmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAocGF0aENvbnN0cmFpbnROYW1lID09IG51bGwpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInBhdGhDb25zdHJhaW50TmFtZSBjYW5ub3QgYmUgbnVsbC5cIik7XHJcbiAgICBsZXQgcGF0aENvbnN0cmFpbnRzID0gdGhpcy5wYXRoQ29uc3RyYWludHM7XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IHBhdGhDb25zdHJhaW50cy5sZW5ndGg7IGkgPCBuOyBpKyspXHJcbiAgICAgIGlmIChwYXRoQ29uc3RyYWludHNbaV0ubmFtZSA9PSBwYXRoQ29uc3RyYWludE5hbWUpIHJldHVybiBpO1xyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH1cclxufVxyXG4iXX0=