@esotericsoftware/spine-phaser-v3 4.2.78 → 4.2.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -279,14 +279,14 @@ export class SpineGameObject extends DepthMixin(OriginMixin(ComputedSizeMixin(Fl
279
279
  camera.addToRenderList(src);
280
280
  let transform = Phaser.GameObjects.GetCalcMatrix(src, camera, parentMatrix).calc;
281
281
  let a = transform.a, b = transform.b, c = transform.c, d = transform.d, tx = transform.tx, ty = transform.ty;
282
- let offsetX = (src.offsetX - src.displayOriginX) * src.scaleX;
283
- let offsetY = (src.offsetY - src.displayOriginY) * src.scaleY;
282
+ let offsetX = src.offsetX - src.displayOriginX;
283
+ let offsetY = src.offsetY - src.displayOriginY;
284
284
  sceneRenderer.drawSkeleton(src.skeleton, src.premultipliedAlpha, -1, -1, (vertices, numVertices, stride) => {
285
285
  for (let i = 0; i < numVertices; i += stride) {
286
- let vx = vertices[i];
287
- let vy = vertices[i + 1];
288
- vertices[i] = vx * a + vy * c + tx + offsetX;
289
- vertices[i + 1] = vx * b + vy * d + ty + offsetY;
286
+ let vx = vertices[i] + offsetX;
287
+ let vy = vertices[i + 1] + offsetY;
288
+ vertices[i] = vx * a + vy * c + tx;
289
+ vertices[i + 1] = vx * b + vy * d + ty;
290
290
  }
291
291
  });
292
292
  if (!renderer.nextTypeMatch) {
@@ -315,4 +315,4 @@ export class SpineGameObject extends DepthMixin(OriginMixin(ComputedSizeMixin(Fl
315
315
  context.restore();
316
316
  }
317
317
  }
318
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BpbmVHYW1lT2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NwaW5lR2FtZU9iamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRW5ELE9BQU8sRUFDTixpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsY0FBYyxFQUNkLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxHQUNYLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTixjQUFjLEVBQ2Qsa0JBQWtCLEVBRWxCLFNBQVMsRUFDVCxPQUFPLEVBQ1AsUUFBUSxFQUNSLGdCQUFnQixFQUNoQixJQUFJLEdBRUosTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxNQUFNLG1CQUFvQixTQUFRLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVTtJQUM5RCxZQUFhLEtBQW1CLEVBQUUsSUFBWTtRQUM3QyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7Q0FDRDtBQWFELHNFQUFzRTtBQUN0RSxNQUFNLE9BQU8sMkJBQTJCO0lBRTlCO0lBQ0E7SUFDQTtJQUNBO0lBSlQsWUFDUyxDQUFTLEVBQ1QsQ0FBUyxFQUNULEtBQWEsRUFDYixNQUFjO1FBSGQsTUFBQyxHQUFELENBQUMsQ0FBUTtRQUNULE1BQUMsR0FBRCxDQUFDLENBQVE7UUFDVCxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUNuQixDQUFDO0lBQ0wsZUFBZTtRQUNkLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFB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QUcsRUFDSCxNQUFNLEVBQ04sWUFBWSxDQUNaLENBQUMsSUFBSSxDQUFDO1FBQ1AsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM3QixRQUFRLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDMUIsUUFBUSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzFCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNuQyxRQUFRLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDbkMsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRyxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDO1FBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5ELE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNmLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBKdWx5IDI4LCAyMDIzLiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjMsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3JcbiAqIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSEVcbiAqIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgeyBTUElORV9HQU1FX09CSkVDVF9UWVBFIH0gZnJvbSBcIi4va2V5cy5qc1wiO1xuaW1wb3J0IHsgU3BpbmVQbHVnaW4gfSBmcm9tIFwiLi9TcGluZVBsdWdpbi5qc1wiO1xuaW1wb3J0IHtcblx0Q29tcHV0ZWRTaXplTWl4aW4sXG5cdERlcHRoTWl4aW4sXG5cdEZsaXBNaXhpbixcblx0U2Nyb2xsRmFjdG9yTWl4aW4sXG5cdFRyYW5zZm9ybU1peGluLFxuXHRWaXNpYmxlTWl4aW4sXG5cdEFscGhhTWl4aW4sXG5cdE9yaWdpbk1peGluLFxufSBmcm9tIFwiLi9taXhpbnMuanNcIjtcbmltcG9ydCB7XG5cdEFuaW1hdGlvblN0YXRlLFxuXHRBbmltYXRpb25TdGF0ZURhdGEsXG5cdEJvbmUsXG5cdE1hdGhVdGlscyxcblx0UGh5c2ljcyxcblx0U2tlbGV0b24sXG5cdFNrZWxldG9uQ2xpcHBpbmcsXG5cdFNraW4sXG5cdFZlY3RvcjIsXG59IGZyb20gXCJAZXNvdGVyaWNzb2Z0d2FyZS9zcGluZS1jb3JlXCI7XG5cbmNsYXNzIEJhc2VTcGluZUdhbWVPYmplY3QgZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCB7XG5cdGNvbnN0cnVjdG9yIChzY2VuZTogUGhhc2VyLlNjZW5lLCB0eXBlOiBzdHJpbmcpIHtcblx0XHRzdXBlcihzY2VuZSwgdHlwZSk7XG5cdH1cbn1cblxuLyoqIEEgYm91bmRzIHByb3ZpZGVyIGNhbGN1bGF0ZXMgdGhlIGJvdW5kaW5nIGJveCBmb3IgYSBza2VsZXRvbiwgd2hpY2ggaXMgdGhlbiBhc3NpZ25lZCBhcyB0aGUgc2l6ZSBvZiB0aGUgU3BpbmVHYW1lT2JqZWN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGluZUdhbWVPYmplY3RCb3VuZHNQcm92aWRlciB7XG5cdC8vIFJldHVybnMgdGhlIGJvdW5kaW5nIGJveCBmb3IgdGhlIHNrZWxldG9uLCBpbiBza2VsZXRvbiBzcGFjZS5cblx0Y2FsY3VsYXRlQm91bmRzIChnYW1lT2JqZWN0OiBTcGluZUdhbWVPYmplY3QpOiB7XG5cdFx0eDogbnVtYmVyO1xuXHRcdHk6IG51bWJlcjtcblx0XHR3aWR0aDogbnVtYmVyO1xuXHRcdGhlaWdodDogbnVtYmVyO1xuXHR9O1xufVxuXG4vKiogQSBib3VuZHMgcHJvdmlkZXIgdGhhdCBwcm92aWRlcyBhIGZpeGVkIHNpemUgZ2l2ZW4gYnkgdGhlIHVzZXIuICovXG5leHBvcnQgY2xhc3MgQUFCQlJlY3RhbmdsZUJvdW5kc1Byb3ZpZGVyIGltcGxlbWVudHMgU3BpbmVHYW1lT2JqZWN0Qm91bmRzUHJvdmlkZXIge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSB4OiBudW1iZXIsXG5cdFx0cHJpdmF0ZSB5OiBudW1iZXIsXG5cdFx0cHJpdmF0ZSB3aWR0aDogbnVtYmVyLFxuXHRcdHByaXZhdGUgaGVpZ2h0OiBudW1iZXIsXG5cdCkgeyB9XG5cdGNhbGN1bGF0ZUJvdW5kcyAoKSB7XG5cdFx0cmV0dXJuIHsgeDogdGhpcy54LCB5OiB0aGlzLnksIHdpZHRoOiB0aGlzLndpZHRoLCBoZWlnaHQ6IHRoaXMuaGVpZ2h0IH07XG5cdH1cbn1cblxuLyoqIEEgYm91bmRzIHByb3ZpZGVyIHRoYXQgY2FsY3VsYXRlcyB0aGUgYm91bmRpbmcgYm94IGZyb20gdGhlIHNldHVwIHBvc2UuICovXG5leHBvcnQgY2xhc3MgU2V0dXBQb3NlQm91bmRzUHJvdmlkZXIgaW1wbGVtZW50cyBTcGluZUdhbWVPYmplY3RCb3VuZHNQcm92aWRlciB7XG5cdC8qKlxuXHQgKiBAcGFyYW0gY2xpcHBpbmcgSWYgdHJ1ZSwgY2xpcHBpbmcgYXR0YWNobWVudHMgYXJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgYm91bmRzLiBGYWxzZSwgYnkgZGVmYXVsdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNsaXBwaW5nID0gZmFsc2UsXG5cdCkgeyB9XG5cblx0Y2FsY3VsYXRlQm91bmRzIChnYW1lT2JqZWN0OiBTcGluZUdhbWVPYmplY3QpIHtcblx0XHRpZiAoIWdhbWVPYmplY3Quc2tlbGV0b24pIHJldHVybiB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcblx0XHQvLyBNYWtlIGEgY29weSBvZiBhbmltYXRpb24gc3RhdGUgYW5kIHNrZWxldG9uIGFzIHRoaXMgbWlnaHQgYmUgY2FsbGVkIHdoaWxlXG5cdFx0Ly8gdGhlIHNrZWxldG9uIGluIHRoZSBHYW1lT2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gaGVhdmlseSBtb2RpZmllZC4gV2UgY2FuIG5vdFxuXHRcdC8vIHJlY29uc3RydWN0IHRoYXQgc3RhdGUuXG5cdFx0Y29uc3Qgc2tlbGV0b24gPSBuZXcgU2tlbGV0b24oZ2FtZU9iamVjdC5za2VsZXRvbi5kYXRhKTtcblx0XHRza2VsZXRvbi5zZXRUb1NldHVwUG9zZSgpO1xuXHRcdHNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtKFBoeXNpY3MudXBkYXRlKTtcblx0XHRjb25zdCBib3VuZHMgPSBza2VsZXRvbi5nZXRCb3VuZHNSZWN0KHRoaXMuY2xpcHBpbmcgPyBuZXcgU2tlbGV0b25DbGlwcGluZygpIDogdW5kZWZpbmVkKTtcblx0XHRyZXR1cm4gYm91bmRzLndpZHRoID09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuXHRcdFx0PyB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfVxuXHRcdFx0OiBib3VuZHM7XG5cdH1cbn1cblxuLyoqIEEgYm91bmRzIHByb3ZpZGVyIHRoYXQgY2FsY3VsYXRlcyB0aGUgYm91bmRpbmcgYm94IGJ5IHRha2luZyB0aGUgbWF4aW11bWcgYm91bmRpbmcgYm94IGZvciBhIGNvbWJpbmF0aW9uIG9mIHNraW5zIGFuZCBzcGVjaWZpYyBhbmltYXRpb24uICovXG5leHBvcnQgY2xhc3MgU2tpbnNBbmRBbmltYXRpb25Cb3VuZHNQcm92aWRlclxuXHRpbXBsZW1lbnRzIFNwaW5lR2FtZU9iamVjdEJvdW5kc1Byb3ZpZGVyIHtcblx0LyoqXG5cdCAqIEBwYXJhbSBhbmltYXRpb24gVGhlIGFuaW1hdGlvbiB0byB1c2UgZm9yIGNhbGN1bGF0aW5nIHRoZSBib3VuZHMuIElmIG51bGwsIHRoZSBzZXR1cCBwb3NlIGlzIHVzZWQuXG5cdCAqIEBwYXJhbSBza2lucyBUaGUgc2tpbnMgdG8gdXNlIGZvciBjYWxjdWxhdGluZyB0aGUgYm91bmRzLiBJZiBlbXB0eSwgdGhlIGRlZmF1bHQgc2tpbiBpcyB1c2VkLlxuXHQgKiBAcGFyYW0gdGltZVN0ZXAgVGhlIHRpbWUgc3RlcCB0byB1c2UgZm9yIGNhbGN1bGF0aW5nIHRoZSBib3VuZHMuIEEgc21hbGxlciB0aW1lIHN0ZXAgbWVhbnMgbW9yZSBwcmVjaXNpb24sIGJ1dCBzbG93ZXIgY2FsY3VsYXRpb24uXG5cdCAqIEBwYXJhbSBjbGlwcGluZyBJZiB0cnVlLCBjbGlwcGluZyBhdHRhY2htZW50cyBhcmUgdXNlZCB0byBjb21wdXRlIHRoZSBib3VuZHMuIEZhbHNlLCBieSBkZWZhdWx0LlxuXHQgKi9cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYW5pbWF0aW9uOiBzdHJpbmcgfCBudWxsLFxuXHRcdHByaXZhdGUgc2tpbnM6IHN0cmluZ1tdID0gW10sXG5cdFx0cHJpdmF0ZSB0aW1lU3RlcDogbnVtYmVyID0gMC4wNSxcblx0XHRwcml2YXRlIGNsaXBwaW5nID0gZmFsc2UsXG5cdCkgeyB9XG5cblx0Y2FsY3VsYXRlQm91bmRzIChnYW1lT2JqZWN0OiBTcGluZUdhbWVPYmplY3QpOiB7XG5cdFx0eDogbnVtYmVyO1xuXHRcdHk6IG51bWJlcjtcblx0XHR3aWR0aDogbnVtYmVyO1xuXHRcdGhlaWdodDogbnVtYmVyO1xuXHR9IHtcblx0XHRpZiAoIWdhbWVPYmplY3Quc2tlbGV0b24gfHwgIWdhbWVPYmplY3QuYW5pbWF0aW9uU3RhdGUpXG5cdFx0XHRyZXR1cm4geyB4OiAwLCB5OiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG5cdFx0Ly8gTWFrZSBhIGNvcHkgb2YgYW5pbWF0aW9uIHN0YXRlIGFuZCBza2VsZXRvbiBhcyB0aGlzIG1pZ2h0IGJlIGNhbGxlZCB3aGlsZVxuXHRcdC8vIHRoZSBza2VsZXRvbiBpbiB0aGUgR2FtZU9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGhlYXZpbHkgbW9kaWZpZWQuIFdlIGNhbiBub3Rcblx0XHQvLyByZWNvbnN0cnVjdCB0aGF0IHN0YXRlLlxuXHRcdGNvbnN0IGFuaW1hdGlvblN0YXRlID0gbmV3IEFuaW1hdGlvblN0YXRlKGdhbWVPYmplY3QuYW5pbWF0aW9uU3RhdGUuZGF0YSk7XG5cdFx0Y29uc3Qgc2tlbGV0b24gPSBuZXcgU2tlbGV0b24oZ2FtZU9iamVjdC5za2VsZXRvbi5kYXRhKTtcblx0XHRjb25zdCBjbGlwcGVyID0gdGhpcy5jbGlwcGluZyA/IG5ldyBTa2VsZXRvbkNsaXBwaW5nKCkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGF0YSA9IHNrZWxldG9uLmRhdGE7XG5cdFx0aWYgKHRoaXMuc2tpbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0bGV0IGN1c3RvbVNraW4gPSBuZXcgU2tpbihcImN1c3RvbS1za2luXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBza2luTmFtZSBvZiB0aGlzLnNraW5zKSB7XG5cdFx0XHRcdGNvbnN0IHNraW4gPSBkYXRhLmZpbmRTa2luKHNraW5OYW1lKTtcblx0XHRcdFx0aWYgKHNraW4gPT0gbnVsbCkgY29udGludWU7XG5cdFx0XHRcdGN1c3RvbVNraW4uYWRkU2tpbihza2luKTtcblx0XHRcdH1cblx0XHRcdHNrZWxldG9uLnNldFNraW4oY3VzdG9tU2tpbik7XG5cdFx0fVxuXHRcdHNrZWxldG9uLnNldFRvU2V0dXBQb3NlKCk7XG5cblx0XHRjb25zdCBhbmltYXRpb24gPVxuXHRcdFx0dGhpcy5hbmltYXRpb24gIT0gbnVsbCA/IGRhdGEuZmluZEFuaW1hdGlvbih0aGlzLmFuaW1hdGlvbiEpIDogbnVsbDtcblx0XHRpZiAoYW5pbWF0aW9uID09IG51bGwpIHtcblx0XHRcdHNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtKFBoeXNpY3MudXBkYXRlKTtcblx0XHRcdGNvbnN0IGJvdW5kcyA9IHNrZWxldG9uLmdldEJvdW5kc1JlY3QoY2xpcHBlcik7XG5cdFx0XHRyZXR1cm4gYm91bmRzLndpZHRoID09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuXHRcdFx0XHQ/IHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9XG5cdFx0XHRcdDogYm91bmRzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgbWluWCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcblx0XHRcdFx0bWluWSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcblx0XHRcdFx0bWF4WCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxcblx0XHRcdFx0bWF4WSA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcblx0XHRcdGFuaW1hdGlvblN0YXRlLmNsZWFyVHJhY2tzKCk7XG5cdFx0XHRhbmltYXRpb25TdGF0ZS5zZXRBbmltYXRpb25XaXRoKDAsIGFuaW1hdGlvbiwgZmFsc2UpO1xuXHRcdFx0Y29uc3Qgc3RlcHMgPSBNYXRoLm1heChhbmltYXRpb24uZHVyYXRpb24gLyB0aGlzLnRpbWVTdGVwLCAxLjApO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdGVwczsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGRlbHRhID0gaSA+IDAgPyB0aGlzLnRpbWVTdGVwIDogMDtcblx0XHRcdFx0YW5pbWF0aW9uU3RhdGUudXBkYXRlKGRlbHRhKTtcblx0XHRcdFx0YW5pbWF0aW9uU3RhdGUuYXBwbHkoc2tlbGV0b24pO1xuXHRcdFx0XHRza2VsZXRvbi51cGRhdGUoZGVsdGEpO1xuXHRcdFx0XHRza2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybShQaHlzaWNzLnVwZGF0ZSk7XG5cblx0XHRcdFx0Y29uc3QgYm91bmRzID0gc2tlbGV0b24uZ2V0Qm91bmRzUmVjdChjbGlwcGVyKTtcblx0XHRcdFx0bWluWCA9IE1hdGgubWluKG1pblgsIGJvdW5kcy54KTtcblx0XHRcdFx0bWluWSA9IE1hdGgubWluKG1pblksIGJvdW5kcy55KTtcblx0XHRcdFx0bWF4WCA9IE1hdGgubWF4KG1heFgsIGJvdW5kcy54ICsgYm91bmRzLndpZHRoKTtcblx0XHRcdFx0bWF4WSA9IE1hdGgubWF4KG1heFksIGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBib3VuZHMgPSB7XG5cdFx0XHRcdHg6IG1pblgsXG5cdFx0XHRcdHk6IG1pblksXG5cdFx0XHRcdHdpZHRoOiBtYXhYIC0gbWluWCxcblx0XHRcdFx0aGVpZ2h0OiBtYXhZIC0gbWluWSxcblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gYm91bmRzLndpZHRoID09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuXHRcdFx0XHQ/IHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9XG5cdFx0XHRcdDogYm91bmRzO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEEgU3BpbmVHYW1lT2JqZWN0IGlzIGEgUGhhc2VyIHtAbGluayBHYW1lT2JqZWN0fSB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFBoYXNlciBTY2VuZSBhbmQgcmVuZGVyIGEgU3BpbmUgc2tlbGV0b24uXG4gKlxuICogVGhlIFNwaW5lIEdhbWVPYmplY3QgaXMgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGEgU3BpbmUge0BsaW5rIFNrZWxldG9ufSwge0BsaW5rIEFuaW1hdGlvblN0YXRlfSBhbmQge0BsaW5rIEFuaW1hdGlvblN0YXRlRGF0YX0uIEl0IGlzIHJlc3BvbnNpYmxlIGZvcjpcbiAqIC0gdXBkYXRpbmcgdGhlIGFuaW1hdGlvbiBzdGF0ZVxuICogLSBhcHBseWluZyB0aGUgYW5pbWF0aW9uIHN0YXRlIHRvIHRoZSBza2VsZXRvbidzIGJvbmVzLCBzbG90cywgYXR0YWNobWVudHMsIGFuZCBkcmF3IG9yZGVyLlxuICogLSB1cGRhdGluZyB0aGUgc2tlbGV0b24ncyBib25lIHdvcmxkIHRyYW5zZm9ybXNcbiAqIC0gcmVuZGVyaW5nIHRoZSBza2VsZXRvblxuICpcbiAqIFNlZSB0aGUge0BsaW5rIFNwaW5lUGx1Z2lufSBjbGFzcyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIGEgYFNwaW5lR2FtZU9iamVjdGAuXG4gKlxuICogVGhlIHNrZWxldG9uLCBhbmltYXRpb24gc3RhdGUsIGFuZCBhbmltYXRpb24gc3RhdGUgZGF0YSBjYW4gYmUgYWNjZXNzZWQgdmlhIHRoZSByZXBzZWN0aXZlIGZpZWxkcy4gVGhleSBjYW4gYmUgbWFudWFsbHkgdXBkYXRlZCB2aWEge0BsaW5rIHVwZGF0ZVBvc2V9LlxuICpcbiAqIFRvIG1vZGlmeSB0aGUgYm9uZSBoaWVyYXJjaHkgYmVmb3JlIHRoZSB3b3JsZCB0cmFuc2Zvcm1zIGFyZSBjb21wdXRlZCwgYSBjYWxsYmFjayBjYW4gYmUgc2V0IHZpYSB0aGUge0BsaW5rIGJlZm9yZVVwZGF0ZVdvcmxkVHJhbnNmb3Jtc30gZmllbGQuXG4gKlxuICogVG8gbW9kaWZ5IHRoZSBib25lIGhpZXJhcmNoeSBhZnRlciB0aGUgd29ybGQgdHJhbnNmb3JtcyBhcmUgY29tcHV0ZWQsIGEgY2FsbGJhY2sgY2FuIGJlIHNldCB2aWEgdGhlIHtAbGluayBhZnRlclVwZGF0ZVdvcmxkVHJhbnNmb3Jtc30gZmllbGQuXG4gKlxuICogVGhlIGNsYXNzIGFsc28gZmVhdHVyZXMgbWV0aG9kcyB0byBjb252ZXJ0IGJldHdlZW4gdGhlIHNrZWxldG9uIGNvb3JkaW5hdGUgc3lzdGVtIGFuZCB0aGUgUGhhc2VyIGNvb3JkaW5hdGUgc3lzdGVtLlxuICpcbiAqIFNlZSB7QGxpbmsgc2tlbGV0b25Ub1BoYXNlcldvcmxkQ29vcmRpbmF0ZXN9LCB7QGxpbmsgcGhhc2VyV29ybGRDb29yZGluYXRlc1RvU2tlbGV0b259LCBhbmQge0BsaW5rIHBoYXNlcldvcmxkQ29vcmRpbmF0ZXNUb0JvbmVMb2NhbC59XG4gKi9cbmV4cG9ydCBjbGFzcyBTcGluZUdhbWVPYmplY3QgZXh0ZW5kcyBEZXB0aE1peGluKFxuXHRPcmlnaW5NaXhpbihcblx0XHRDb21wdXRlZFNpemVNaXhpbihcblx0XHRcdEZsaXBNaXhpbihcblx0XHRcdFx0U2Nyb2xsRmFjdG9yTWl4aW4oXG5cdFx0XHRcdFx0VHJhbnNmb3JtTWl4aW4oVmlzaWJsZU1peGluKEFscGhhTWl4aW4oQmFzZVNwaW5lR2FtZU9iamVjdCkpKVxuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0KVxuXHQpXG4pIHtcblx0YmxlbmRNb2RlID0gLTE7XG5cdHNrZWxldG9uOiBTa2VsZXRvbjtcblx0YW5pbWF0aW9uU3RhdGVEYXRhOiBBbmltYXRpb25TdGF0ZURhdGE7XG5cdGFuaW1hdGlvblN0YXRlOiBBbmltYXRpb25TdGF0ZTtcblx0YmVmb3JlVXBkYXRlV29ybGRUcmFuc2Zvcm1zOiAob2JqZWN0OiBTcGluZUdhbWVPYmplY3QpID0+IHZvaWQgPSAoKSA9PiB7IH07XG5cdGFmdGVyVXBkYXRlV29ybGRUcmFuc2Zvcm1zOiAob2JqZWN0OiBTcGluZUdhbWVPYmplY3QpID0+IHZvaWQgPSAoKSA9PiB7IH07XG5cdHByaXZhdGUgcHJlbXVsdGlwbGllZEFscGhhID0gZmFsc2U7XG5cdHByaXZhdGUgb2Zmc2V0WCA9IDA7XG5cdHByaXZhdGUgb2Zmc2V0WSA9IDA7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHNjZW5lOiBQaGFzZXIuU2NlbmUsXG5cdFx0cHJpdmF0ZSBwbHVnaW46IFNwaW5lUGx1Z2luLFxuXHRcdHg6IG51bWJlcixcblx0XHR5OiBudW1iZXIsXG5cdFx0ZGF0YUtleTogc3RyaW5nLFxuXHRcdGF0bGFzS2V5OiBzdHJpbmcsXG5cdFx0cHVibGljIGJvdW5kc1Byb3ZpZGVyOiBTcGluZUdhbWVPYmplY3RCb3VuZHNQcm92aWRlciA9IG5ldyBTZXR1cFBvc2VCb3VuZHNQcm92aWRlcigpXG5cdCkge1xuXHRcdHN1cGVyKHNjZW5lLCAod2luZG93IGFzIGFueSkuU1BJTkVfR0FNRV9PQkpFQ1RfVFlQRSA/ICh3aW5kb3cgYXMgYW55KS5TUElORV9HQU1FX09CSkVDVF9UWVBFIDogU1BJTkVfR0FNRV9PQkpFQ1RfVFlQRSk7XG5cdFx0dGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcblxuXHRcdHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdGhpcy5wbHVnaW4uaXNBdGxhc1ByZW11bHRpcGxpZWQoYXRsYXNLZXkpO1xuXHRcdHRoaXMuc2tlbGV0b24gPSB0aGlzLnBsdWdpbi5jcmVhdGVTa2VsZXRvbihkYXRhS2V5LCBhdGxhc0tleSk7XG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZURhdGEgPSBuZXcgQW5pbWF0aW9uU3RhdGVEYXRhKHRoaXMuc2tlbGV0b24uZGF0YSk7XG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZSA9IG5ldyBBbmltYXRpb25TdGF0ZSh0aGlzLmFuaW1hdGlvblN0YXRlRGF0YSk7XG5cdFx0dGhpcy5za2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybShQaHlzaWNzLnVwZGF0ZSk7XG5cdFx0dGhpcy51cGRhdGVTaXplKCk7XG5cdH1cblxuXHR1cGRhdGVTaXplICgpIHtcblx0XHRpZiAoIXRoaXMuc2tlbGV0b24pIHJldHVybjtcblx0XHRsZXQgYm91bmRzID0gdGhpcy5ib3VuZHNQcm92aWRlci5jYWxjdWxhdGVCb3VuZHModGhpcyk7XG5cdFx0dGhpcy53aWR0aCA9IGJvdW5kcy53aWR0aDtcblx0XHR0aGlzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQ7XG5cdFx0dGhpcy5zZXREaXNwbGF5T3JpZ2luKC1ib3VuZHMueCwgLWJvdW5kcy55KTtcblx0XHR0aGlzLm9mZnNldFggPSAtYm91bmRzLng7XG5cdFx0dGhpcy5vZmZzZXRZID0gLWJvdW5kcy55O1xuXHR9XG5cblx0LyoqIENvbnZlcnRzIGEgcG9pbnQgZnJvbSB0aGUgc2tlbGV0b24gY29vcmRpbmF0ZSBzeXN0ZW0gdG8gdGhlIFBoYXNlciB3b3JsZCBjb29yZGluYXRlIHN5c3RlbS4gKi9cblx0c2tlbGV0b25Ub1BoYXNlcldvcmxkQ29vcmRpbmF0ZXMgKHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcblx0XHRsZXQgdHJhbnNmb3JtID0gdGhpcy5nZXRXb3JsZFRyYW5zZm9ybU1hdHJpeCgpO1xuXHRcdGxldCBhID0gdHJhbnNmb3JtLmEsXG5cdFx0XHRiID0gdHJhbnNmb3JtLmIsXG5cdFx0XHRjID0gdHJhbnNmb3JtLmMsXG5cdFx0XHRkID0gdHJhbnNmb3JtLmQsXG5cdFx0XHR0eCA9IHRyYW5zZm9ybS50eCxcblx0XHRcdHR5ID0gdHJhbnNmb3JtLnR5O1xuXHRcdGxldCB4ID0gcG9pbnQueDtcblx0XHRsZXQgeSA9IHBvaW50Lnk7XG5cdFx0cG9pbnQueCA9IHggKiBhICsgeSAqIGMgKyB0eDtcblx0XHRwb2ludC55ID0geCAqIGIgKyB5ICogZCArIHR5O1xuXHR9XG5cblx0LyoqIENvbnZlcnRzIGEgcG9pbnQgZnJvbSB0aGUgUGhhc2VyIHdvcmxkIGNvb3JkaW5hdGUgc3lzdGVtIHRvIHRoZSBza2VsZXRvbiBjb29yZGluYXRlIHN5c3RlbS4gKi9cblx0cGhhc2VyV29ybGRDb29yZGluYXRlc1RvU2tlbGV0b24gKHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcblx0XHRsZXQgdHJhbnNmb3JtID0gdGhpcy5nZXRXb3JsZFRyYW5zZm9ybU1hdHJpeCgpO1xuXHRcdHRyYW5zZm9ybSA9IHRyYW5zZm9ybS5pbnZlcnQoKTtcblx0XHRsZXQgYSA9IHRyYW5zZm9ybS5hLFxuXHRcdFx0YiA9IHRyYW5zZm9ybS5iLFxuXHRcdFx0YyA9IHRyYW5zZm9ybS5jLFxuXHRcdFx0ZCA9IHRyYW5zZm9ybS5kLFxuXHRcdFx0dHggPSB0cmFuc2Zvcm0udHgsXG5cdFx0XHR0eSA9IHRyYW5zZm9ybS50eTtcblx0XHRsZXQgeCA9IHBvaW50Lng7XG5cdFx0bGV0IHkgPSBwb2ludC55O1xuXHRcdHBvaW50LnggPSB4ICogYSArIHkgKiBjICsgdHg7XG5cdFx0cG9pbnQueSA9IHggKiBiICsgeSAqIGQgKyB0eTtcblx0fVxuXG5cdC8qKiBDb252ZXJ0cyBhIHBvaW50IGZyb20gdGhlIFBoYXNlciB3b3JsZCBjb29yZGluYXRlIHN5c3RlbSB0byB0aGUgYm9uZSdzIGxvY2FsIGNvb3JkaW5hdGUgc3lzdGVtLiAqL1xuXHRwaGFzZXJXb3JsZENvb3JkaW5hdGVzVG9Cb25lIChwb2ludDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9LCBib25lOiBCb25lKSB7XG5cdFx0dGhpcy5waGFzZXJXb3JsZENvb3JkaW5hdGVzVG9Ta2VsZXRvbihwb2ludCk7XG5cdFx0aWYgKGJvbmUucGFyZW50KSB7XG5cdFx0XHRib25lLnBhcmVudC53b3JsZFRvTG9jYWwocG9pbnQgYXMgVmVjdG9yMik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJvbmUud29ybGRUb0xvY2FsKHBvaW50IGFzIFZlY3RvcjIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSB7QGxpbmsgQW5pbWF0aW9uU3RhdGV9LCBhcHBsaWVzIGl0IHRvIHRoZSB7QGxpbmsgU2tlbGV0b259LCB0aGVuIHVwZGF0ZXMgdGhlIHdvcmxkIHRyYW5zZm9ybXMgb2YgYWxsIGJvbmVzLlxuXHQgKiBAcGFyYW0gZGVsdGEgVGhlIHRpbWUgZGVsdGEgaW4gbWlsbGlzZWNvbmRzXG5cdCAqL1xuXHR1cGRhdGVQb3NlIChkZWx0YTogbnVtYmVyKSB7XG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZS51cGRhdGUoZGVsdGEgLyAxMDAwKTtcblx0XHR0aGlzLmFuaW1hdGlvblN0YXRlLmFwcGx5KHRoaXMuc2tlbGV0b24pO1xuXHRcdHRoaXMuYmVmb3JlVXBkYXRlV29ybGRUcmFuc2Zvcm1zKHRoaXMpO1xuXHRcdHRoaXMuc2tlbGV0b24udXBkYXRlKGRlbHRhIC8gMTAwMCk7XG5cdFx0dGhpcy5za2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybShQaHlzaWNzLnVwZGF0ZSk7XG5cdFx0dGhpcy5hZnRlclVwZGF0ZVdvcmxkVHJhbnNmb3Jtcyh0aGlzKTtcblx0fVxuXG5cdHByZVVwZGF0ZSAodGltZTogbnVtYmVyLCBkZWx0YTogbnVtYmVyKSB7XG5cdFx0aWYgKCF0aGlzLnNrZWxldG9uIHx8ICF0aGlzLmFuaW1hdGlvblN0YXRlKSByZXR1cm47XG5cdFx0dGhpcy51cGRhdGVQb3NlKGRlbHRhKTtcblx0fVxuXG5cdHByZURlc3Ryb3kgKCkge1xuXHRcdC8vIEZJWE1FIHRlYXIgZG93biBhbnkgZXZlbnQgZW1pdHRlcnNcblx0fVxuXG5cdHdpbGxSZW5kZXIgKGNhbWVyYTogUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEpIHtcblx0XHR2YXIgR2FtZU9iamVjdFJlbmRlck1hc2sgPSAweGY7XG5cdFx0dmFyIHJlc3VsdCA9ICF0aGlzLnNrZWxldG9uIHx8ICEoR2FtZU9iamVjdFJlbmRlck1hc2sgIT09IHRoaXMucmVuZGVyRmxhZ3MgfHwgKHRoaXMuY2FtZXJhRmlsdGVyICE9PSAwICYmIHRoaXMuY2FtZXJhRmlsdGVyICYgY2FtZXJhLmlkKSk7XG5cdFx0aWYgKCF0aGlzLnZpc2libGUpIHJlc3VsdCA9IGZhbHNlO1xuXG5cdFx0aWYgKCFyZXN1bHQgJiYgdGhpcy5wYXJlbnRDb250YWluZXIgJiYgdGhpcy5wbHVnaW4ud2ViR0xSZW5kZXJlcikge1xuXHRcdFx0dmFyIHNjZW5lUmVuZGVyZXIgPSB0aGlzLnBsdWdpbi53ZWJHTFJlbmRlcmVyO1xuXG5cdFx0XHRpZiAodGhpcy5wbHVnaW4uZ2wgJiYgdGhpcy5wbHVnaW4ucGhhc2VyUmVuZGVyZXIgaW5zdGFuY2VvZiBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciAmJiBzY2VuZVJlbmRlcmVyLmJhdGNoZXIuaXNEcmF3aW5nKSB7XG5cdFx0XHRcdHNjZW5lUmVuZGVyZXIuZW5kKCk7XG5cdFx0XHRcdHRoaXMucGx1Z2luLnBoYXNlclJlbmRlcmVyLnBpcGVsaW5lcy5yZWJpbmQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmVuZGVyV2ViR0wgKFxuXHRcdHJlbmRlcmVyOiBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcixcblx0XHRzcmM6IFNwaW5lR2FtZU9iamVjdCxcblx0XHRjYW1lcmE6IFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhLFxuXHRcdHBhcmVudE1hdHJpeDogUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4XG5cdCkge1xuXHRcdGlmICghdGhpcy5za2VsZXRvbiB8fCAhdGhpcy5hbmltYXRpb25TdGF0ZSB8fCAhdGhpcy5wbHVnaW4ud2ViR0xSZW5kZXJlcilcblx0XHRcdHJldHVybjtcblxuXHRcdGxldCBzY2VuZVJlbmRlcmVyID0gdGhpcy5wbHVnaW4ud2ViR0xSZW5kZXJlcjtcblx0XHRpZiAocmVuZGVyZXIubmV3VHlwZSkge1xuXHRcdFx0cmVuZGVyZXIucGlwZWxpbmVzLmNsZWFyKCk7XG5cdFx0XHRzY2VuZVJlbmRlcmVyLmJlZ2luKCk7XG5cdFx0fVxuXG5cdFx0Y2FtZXJhLmFkZFRvUmVuZGVyTGlzdChzcmMpO1xuXHRcdGxldCB0cmFuc2Zvcm0gPSBQaGFzZXIuR2FtZU9iamVjdHMuR2V0Q2FsY01hdHJpeChcblx0XHRcdHNyYyxcblx0XHRcdGNhbWVyYSxcblx0XHRcdHBhcmVudE1hdHJpeFxuXHRcdCkuY2FsYztcblx0XHRsZXQgYSA9IHRyYW5zZm9ybS5hLFxuXHRcdFx0YiA9IHRyYW5zZm9ybS5iLFxuXHRcdFx0YyA9IHRyYW5zZm9ybS5jLFxuXHRcdFx0ZCA9IHRyYW5zZm9ybS5kLFxuXHRcdFx0dHggPSB0cmFuc2Zvcm0udHgsXG5cdFx0XHR0eSA9IHRyYW5zZm9ybS50eTtcblxuXHRcdGxldCBvZmZzZXRYID0gKHNyYy5vZmZzZXRYIC0gc3JjLmRpc3BsYXlPcmlnaW5YKSAqIHNyYy5zY2FsZVg7XG5cdFx0bGV0IG9mZnNldFkgPSAoc3JjLm9mZnNldFkgLSBzcmMuZGlzcGxheU9yaWdpblkpICogc3JjLnNjYWxlWTtcblxuXHRcdHNjZW5lUmVuZGVyZXIuZHJhd1NrZWxldG9uKFxuXHRcdFx0c3JjLnNrZWxldG9uLFxuXHRcdFx0c3JjLnByZW11bHRpcGxpZWRBbHBoYSxcblx0XHRcdC0xLFxuXHRcdFx0LTEsXG5cdFx0XHQodmVydGljZXMsIG51bVZlcnRpY2VzLCBzdHJpZGUpID0+IHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBudW1WZXJ0aWNlczsgaSArPSBzdHJpZGUpIHtcblx0XHRcdFx0XHRsZXQgdnggPSB2ZXJ0aWNlc1tpXTtcblx0XHRcdFx0XHRsZXQgdnkgPSB2ZXJ0aWNlc1tpICsgMV07XG5cdFx0XHRcdFx0dmVydGljZXNbaV0gPSB2eCAqIGEgKyB2eSAqIGMgKyB0eCArIG9mZnNldFg7XG5cdFx0XHRcdFx0dmVydGljZXNbaSArIDFdID0gdnggKiBiICsgdnkgKiBkICsgdHkgKyBvZmZzZXRZO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGlmICghcmVuZGVyZXIubmV4dFR5cGVNYXRjaCkge1xuXHRcdFx0c2NlbmVSZW5kZXJlci5lbmQoKTtcblx0XHRcdHJlbmRlcmVyLnBpcGVsaW5lcy5yZWJpbmQoKTtcblx0XHR9XG5cdH1cblxuXHRyZW5kZXJDYW52YXMgKFxuXHRcdHJlbmRlcmVyOiBQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyLFxuXHRcdHNyYzogU3BpbmVHYW1lT2JqZWN0LFxuXHRcdGNhbWVyYTogUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEsXG5cdFx0cGFyZW50TWF0cml4OiBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXhcblx0KSB7XG5cdFx0aWYgKCF0aGlzLnNrZWxldG9uIHx8ICF0aGlzLmFuaW1hdGlvblN0YXRlIHx8ICF0aGlzLnBsdWdpbi5jYW52YXNSZW5kZXJlcilcblx0XHRcdHJldHVybjtcblxuXHRcdGxldCBjb250ZXh0ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XG5cdFx0bGV0IHNrZWxldG9uUmVuZGVyZXIgPSB0aGlzLnBsdWdpbi5jYW52YXNSZW5kZXJlcjtcblx0XHQoc2tlbGV0b25SZW5kZXJlciBhcyBhbnkpLmN0eCA9IGNvbnRleHQ7XG5cblx0XHRjYW1lcmEuYWRkVG9SZW5kZXJMaXN0KHNyYyk7XG5cdFx0bGV0IHRyYW5zZm9ybSA9IFBoYXNlci5HYW1lT2JqZWN0cy5HZXRDYWxjTWF0cml4KFxuXHRcdFx0c3JjLFxuXHRcdFx0Y2FtZXJhLFxuXHRcdFx0cGFyZW50TWF0cml4XG5cdFx0KS5jYWxjO1xuXHRcdGxldCBza2VsZXRvbiA9IHRoaXMuc2tlbGV0b247XG5cdFx0c2tlbGV0b24ueCA9IHRyYW5zZm9ybS50eDtcblx0XHRza2VsZXRvbi55ID0gdHJhbnNmb3JtLnR5O1xuXHRcdHNrZWxldG9uLnNjYWxlWCA9IHRyYW5zZm9ybS5zY2FsZVg7XG5cdFx0c2tlbGV0b24uc2NhbGVZID0gdHJhbnNmb3JtLnNjYWxlWTtcblx0XHRsZXQgcm9vdCA9IHNrZWxldG9uLmdldFJvb3RCb25lKCkhO1xuXHRcdHJvb3Qucm90YXRpb24gPSAtTWF0aFV0aWxzLnJhZGlhbnNUb0RlZ3JlZXMgKiB0cmFuc2Zvcm0ucm90YXRpb25Ob3JtYWxpemVkO1xuXHRcdHRoaXMuc2tlbGV0b24udXBkYXRlV29ybGRUcmFuc2Zvcm0oUGh5c2ljcy51cGRhdGUpO1xuXG5cdFx0Y29udGV4dC5zYXZlKCk7XG5cdFx0c2tlbGV0b25SZW5kZXJlci5kcmF3KHNrZWxldG9uKTtcblx0XHRjb250ZXh0LnJlc3RvcmUoKTtcblx0fVxufVxuIl19
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BpbmVHYW1lT2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NwaW5lR2FtZU9iamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRW5ELE9BQU8sRUFDTixpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsY0FBYyxFQUNkLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxHQUNYLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTixjQUFjLEVBQ2Qsa0JBQWtCLEVBRWxCLFNBQVMsRUFDVCxPQUFPLEVBQ1AsUUFBUSxFQUNSLGdCQUFnQixFQUNoQixJQUFJLEdBRUosTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxNQUFNLG1CQUFvQixTQUFRLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVTtJQUM5RCxZQUFhLEtBQW1CLEVBQUUsSUFBWTtRQUM3QyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7Q0FDRDtBQWFELHNFQUFzRTtBQUN0RSxNQUFNLE9BQU8sMkJBQTJCO0lBRTlCO0lBQ0E7SUFDQTtJQUNBO0lBSlQsWUFDUyxDQUFTLEVBQ1QsQ0FBUyxFQUNULEtBQWEsRUFDYixNQUFjO1FBSGQsTUFBQyxHQUFELENBQUMsQ0FBUTtRQUNULE1BQUMsR0FBRCxDQUFDLENBQVE7UUFDVCxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUNuQixDQUFDO0lBQ0wsZUFBZTtRQUNkLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFB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QUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM3QixRQUFRLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDMUIsUUFBUSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzFCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNuQyxRQUFRLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDbkMsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRyxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDO1FBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5ELE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNmLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBKdWx5IDI4LCAyMDIzLiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjMsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3JcbiAqIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSEVcbiAqIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgeyBTUElORV9HQU1FX09CSkVDVF9UWVBFIH0gZnJvbSBcIi4va2V5cy5qc1wiO1xuaW1wb3J0IHsgU3BpbmVQbHVnaW4gfSBmcm9tIFwiLi9TcGluZVBsdWdpbi5qc1wiO1xuaW1wb3J0IHtcblx0Q29tcHV0ZWRTaXplTWl4aW4sXG5cdERlcHRoTWl4aW4sXG5cdEZsaXBNaXhpbixcblx0U2Nyb2xsRmFjdG9yTWl4aW4sXG5cdFRyYW5zZm9ybU1peGluLFxuXHRWaXNpYmxlTWl4aW4sXG5cdEFscGhhTWl4aW4sXG5cdE9yaWdpbk1peGluLFxufSBmcm9tIFwiLi9taXhpbnMuanNcIjtcbmltcG9ydCB7XG5cdEFuaW1hdGlvblN0YXRlLFxuXHRBbmltYXRpb25TdGF0ZURhdGEsXG5cdEJvbmUsXG5cdE1hdGhVdGlscyxcblx0UGh5c2ljcyxcblx0U2tlbGV0b24sXG5cdFNrZWxldG9uQ2xpcHBpbmcsXG5cdFNraW4sXG5cdFZlY3RvcjIsXG59IGZyb20gXCJAZXNvdGVyaWNzb2Z0d2FyZS9zcGluZS1jb3JlXCI7XG5cbmNsYXNzIEJhc2VTcGluZUdhbWVPYmplY3QgZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCB7XG5cdGNvbnN0cnVjdG9yIChzY2VuZTogUGhhc2VyLlNjZW5lLCB0eXBlOiBzdHJpbmcpIHtcblx0XHRzdXBlcihzY2VuZSwgdHlwZSk7XG5cdH1cbn1cblxuLyoqIEEgYm91bmRzIHByb3ZpZGVyIGNhbGN1bGF0ZXMgdGhlIGJvdW5kaW5nIGJveCBmb3IgYSBza2VsZXRvbiwgd2hpY2ggaXMgdGhlbiBhc3NpZ25lZCBhcyB0aGUgc2l6ZSBvZiB0aGUgU3BpbmVHYW1lT2JqZWN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGluZUdhbWVPYmplY3RCb3VuZHNQcm92aWRlciB7XG5cdC8vIFJldHVybnMgdGhlIGJvdW5kaW5nIGJveCBmb3IgdGhlIHNrZWxldG9uLCBpbiBza2VsZXRvbiBzcGFjZS5cblx0Y2FsY3VsYXRlQm91bmRzIChnYW1lT2JqZWN0OiBTcGluZUdhbWVPYmplY3QpOiB7XG5cdFx0eDogbnVtYmVyO1xuXHRcdHk6IG51bWJlcjtcblx0XHR3aWR0aDogbnVtYmVyO1xuXHRcdGhlaWdodDogbnVtYmVyO1xuXHR9O1xufVxuXG4vKiogQSBib3VuZHMgcHJvdmlkZXIgdGhhdCBwcm92aWRlcyBhIGZpeGVkIHNpemUgZ2l2ZW4gYnkgdGhlIHVzZXIuICovXG5leHBvcnQgY2xhc3MgQUFCQlJlY3RhbmdsZUJvdW5kc1Byb3ZpZGVyIGltcGxlbWVudHMgU3BpbmVHYW1lT2JqZWN0Qm91bmRzUHJvdmlkZXIge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSB4OiBudW1iZXIsXG5cdFx0cHJpdmF0ZSB5OiBudW1iZXIsXG5cdFx0cHJpdmF0ZSB3aWR0aDogbnVtYmVyLFxuXHRcdHByaXZhdGUgaGVpZ2h0OiBudW1iZXIsXG5cdCkgeyB9XG5cdGNhbGN1bGF0ZUJvdW5kcyAoKSB7XG5cdFx0cmV0dXJuIHsgeDogdGhpcy54LCB5OiB0aGlzLnksIHdpZHRoOiB0aGlzLndpZHRoLCBoZWlnaHQ6IHRoaXMuaGVpZ2h0IH07XG5cdH1cbn1cblxuLyoqIEEgYm91bmRzIHByb3ZpZGVyIHRoYXQgY2FsY3VsYXRlcyB0aGUgYm91bmRpbmcgYm94IGZyb20gdGhlIHNldHVwIHBvc2UuICovXG5leHBvcnQgY2xhc3MgU2V0dXBQb3NlQm91bmRzUHJvdmlkZXIgaW1wbGVtZW50cyBTcGluZUdhbWVPYmplY3RCb3VuZHNQcm92aWRlciB7XG5cdC8qKlxuXHQgKiBAcGFyYW0gY2xpcHBpbmcgSWYgdHJ1ZSwgY2xpcHBpbmcgYXR0YWNobWVudHMgYXJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgYm91bmRzLiBGYWxzZSwgYnkgZGVmYXVsdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNsaXBwaW5nID0gZmFsc2UsXG5cdCkgeyB9XG5cblx0Y2FsY3VsYXRlQm91bmRzIChnYW1lT2JqZWN0OiBTcGluZUdhbWVPYmplY3QpIHtcblx0XHRpZiAoIWdhbWVPYmplY3Quc2tlbGV0b24pIHJldHVybiB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcblx0XHQvLyBNYWtlIGEgY29weSBvZiBhbmltYXRpb24gc3RhdGUgYW5kIHNrZWxldG9uIGFzIHRoaXMgbWlnaHQgYmUgY2FsbGVkIHdoaWxlXG5cdFx0Ly8gdGhlIHNrZWxldG9uIGluIHRoZSBHYW1lT2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gaGVhdmlseSBtb2RpZmllZC4gV2UgY2FuIG5vdFxuXHRcdC8vIHJlY29uc3RydWN0IHRoYXQgc3RhdGUuXG5cdFx0Y29uc3Qgc2tlbGV0b24gPSBuZXcgU2tlbGV0b24oZ2FtZU9iamVjdC5za2VsZXRvbi5kYXRhKTtcblx0XHRza2VsZXRvbi5zZXRUb1NldHVwUG9zZSgpO1xuXHRcdHNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtKFBoeXNpY3MudXBkYXRlKTtcblx0XHRjb25zdCBib3VuZHMgPSBza2VsZXRvbi5nZXRCb3VuZHNSZWN0KHRoaXMuY2xpcHBpbmcgPyBuZXcgU2tlbGV0b25DbGlwcGluZygpIDogdW5kZWZpbmVkKTtcblx0XHRyZXR1cm4gYm91bmRzLndpZHRoID09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuXHRcdFx0PyB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfVxuXHRcdFx0OiBib3VuZHM7XG5cdH1cbn1cblxuLyoqIEEgYm91bmRzIHByb3ZpZGVyIHRoYXQgY2FsY3VsYXRlcyB0aGUgYm91bmRpbmcgYm94IGJ5IHRha2luZyB0aGUgbWF4aW11bWcgYm91bmRpbmcgYm94IGZvciBhIGNvbWJpbmF0aW9uIG9mIHNraW5zIGFuZCBzcGVjaWZpYyBhbmltYXRpb24uICovXG5leHBvcnQgY2xhc3MgU2tpbnNBbmRBbmltYXRpb25Cb3VuZHNQcm92aWRlclxuXHRpbXBsZW1lbnRzIFNwaW5lR2FtZU9iamVjdEJvdW5kc1Byb3ZpZGVyIHtcblx0LyoqXG5cdCAqIEBwYXJhbSBhbmltYXRpb24gVGhlIGFuaW1hdGlvbiB0byB1c2UgZm9yIGNhbGN1bGF0aW5nIHRoZSBib3VuZHMuIElmIG51bGwsIHRoZSBzZXR1cCBwb3NlIGlzIHVzZWQuXG5cdCAqIEBwYXJhbSBza2lucyBUaGUgc2tpbnMgdG8gdXNlIGZvciBjYWxjdWxhdGluZyB0aGUgYm91bmRzLiBJZiBlbXB0eSwgdGhlIGRlZmF1bHQgc2tpbiBpcyB1c2VkLlxuXHQgKiBAcGFyYW0gdGltZVN0ZXAgVGhlIHRpbWUgc3RlcCB0byB1c2UgZm9yIGNhbGN1bGF0aW5nIHRoZSBib3VuZHMuIEEgc21hbGxlciB0aW1lIHN0ZXAgbWVhbnMgbW9yZSBwcmVjaXNpb24sIGJ1dCBzbG93ZXIgY2FsY3VsYXRpb24uXG5cdCAqIEBwYXJhbSBjbGlwcGluZyBJZiB0cnVlLCBjbGlwcGluZyBhdHRhY2htZW50cyBhcmUgdXNlZCB0byBjb21wdXRlIHRoZSBib3VuZHMuIEZhbHNlLCBieSBkZWZhdWx0LlxuXHQgKi9cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYW5pbWF0aW9uOiBzdHJpbmcgfCBudWxsLFxuXHRcdHByaXZhdGUgc2tpbnM6IHN0cmluZ1tdID0gW10sXG5cdFx0cHJpdmF0ZSB0aW1lU3RlcDogbnVtYmVyID0gMC4wNSxcblx0XHRwcml2YXRlIGNsaXBwaW5nID0gZmFsc2UsXG5cdCkgeyB9XG5cblx0Y2FsY3VsYXRlQm91bmRzIChnYW1lT2JqZWN0OiBTcGluZUdhbWVPYmplY3QpOiB7XG5cdFx0eDogbnVtYmVyO1xuXHRcdHk6IG51bWJlcjtcblx0XHR3aWR0aDogbnVtYmVyO1xuXHRcdGhlaWdodDogbnVtYmVyO1xuXHR9IHtcblx0XHRpZiAoIWdhbWVPYmplY3Quc2tlbGV0b24gfHwgIWdhbWVPYmplY3QuYW5pbWF0aW9uU3RhdGUpXG5cdFx0XHRyZXR1cm4geyB4OiAwLCB5OiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG5cdFx0Ly8gTWFrZSBhIGNvcHkgb2YgYW5pbWF0aW9uIHN0YXRlIGFuZCBza2VsZXRvbiBhcyB0aGlzIG1pZ2h0IGJlIGNhbGxlZCB3aGlsZVxuXHRcdC8vIHRoZSBza2VsZXRvbiBpbiB0aGUgR2FtZU9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGhlYXZpbHkgbW9kaWZpZWQuIFdlIGNhbiBub3Rcblx0XHQvLyByZWNvbnN0cnVjdCB0aGF0IHN0YXRlLlxuXHRcdGNvbnN0IGFuaW1hdGlvblN0YXRlID0gbmV3IEFuaW1hdGlvblN0YXRlKGdhbWVPYmplY3QuYW5pbWF0aW9uU3RhdGUuZGF0YSk7XG5cdFx0Y29uc3Qgc2tlbGV0b24gPSBuZXcgU2tlbGV0b24oZ2FtZU9iamVjdC5za2VsZXRvbi5kYXRhKTtcblx0XHRjb25zdCBjbGlwcGVyID0gdGhpcy5jbGlwcGluZyA/IG5ldyBTa2VsZXRvbkNsaXBwaW5nKCkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGF0YSA9IHNrZWxldG9uLmRhdGE7XG5cdFx0aWYgKHRoaXMuc2tpbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0bGV0IGN1c3RvbVNraW4gPSBuZXcgU2tpbihcImN1c3RvbS1za2luXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBza2luTmFtZSBvZiB0aGlzLnNraW5zKSB7XG5cdFx0XHRcdGNvbnN0IHNraW4gPSBkYXRhLmZpbmRTa2luKHNraW5OYW1lKTtcblx0XHRcdFx0aWYgKHNraW4gPT0gbnVsbCkgY29udGludWU7XG5cdFx0XHRcdGN1c3RvbVNraW4uYWRkU2tpbihza2luKTtcblx0XHRcdH1cblx0XHRcdHNrZWxldG9uLnNldFNraW4oY3VzdG9tU2tpbik7XG5cdFx0fVxuXHRcdHNrZWxldG9uLnNldFRvU2V0dXBQb3NlKCk7XG5cblx0XHRjb25zdCBhbmltYXRpb24gPVxuXHRcdFx0dGhpcy5hbmltYXRpb24gIT0gbnVsbCA/IGRhdGEuZmluZEFuaW1hdGlvbih0aGlzLmFuaW1hdGlvbiEpIDogbnVsbDtcblx0XHRpZiAoYW5pbWF0aW9uID09IG51bGwpIHtcblx0XHRcdHNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtKFBoeXNpY3MudXBkYXRlKTtcblx0XHRcdGNvbnN0IGJvdW5kcyA9IHNrZWxldG9uLmdldEJvdW5kc1JlY3QoY2xpcHBlcik7XG5cdFx0XHRyZXR1cm4gYm91bmRzLndpZHRoID09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuXHRcdFx0XHQ/IHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9XG5cdFx0XHRcdDogYm91bmRzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgbWluWCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcblx0XHRcdFx0bWluWSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcblx0XHRcdFx0bWF4WCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxcblx0XHRcdFx0bWF4WSA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcblx0XHRcdGFuaW1hdGlvblN0YXRlLmNsZWFyVHJhY2tzKCk7XG5cdFx0XHRhbmltYXRpb25TdGF0ZS5zZXRBbmltYXRpb25XaXRoKDAsIGFuaW1hdGlvbiwgZmFsc2UpO1xuXHRcdFx0Y29uc3Qgc3RlcHMgPSBNYXRoLm1heChhbmltYXRpb24uZHVyYXRpb24gLyB0aGlzLnRpbWVTdGVwLCAxLjApO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdGVwczsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGRlbHRhID0gaSA+IDAgPyB0aGlzLnRpbWVTdGVwIDogMDtcblx0XHRcdFx0YW5pbWF0aW9uU3RhdGUudXBkYXRlKGRlbHRhKTtcblx0XHRcdFx0YW5pbWF0aW9uU3RhdGUuYXBwbHkoc2tlbGV0b24pO1xuXHRcdFx0XHRza2VsZXRvbi51cGRhdGUoZGVsdGEpO1xuXHRcdFx0XHRza2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybShQaHlzaWNzLnVwZGF0ZSk7XG5cblx0XHRcdFx0Y29uc3QgYm91bmRzID0gc2tlbGV0b24uZ2V0Qm91bmRzUmVjdChjbGlwcGVyKTtcblx0XHRcdFx0bWluWCA9IE1hdGgubWluKG1pblgsIGJvdW5kcy54KTtcblx0XHRcdFx0bWluWSA9IE1hdGgubWluKG1pblksIGJvdW5kcy55KTtcblx0XHRcdFx0bWF4WCA9IE1hdGgubWF4KG1heFgsIGJvdW5kcy54ICsgYm91bmRzLndpZHRoKTtcblx0XHRcdFx0bWF4WSA9IE1hdGgubWF4KG1heFksIGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBib3VuZHMgPSB7XG5cdFx0XHRcdHg6IG1pblgsXG5cdFx0XHRcdHk6IG1pblksXG5cdFx0XHRcdHdpZHRoOiBtYXhYIC0gbWluWCxcblx0XHRcdFx0aGVpZ2h0OiBtYXhZIC0gbWluWSxcblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gYm91bmRzLndpZHRoID09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuXHRcdFx0XHQ/IHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9XG5cdFx0XHRcdDogYm91bmRzO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEEgU3BpbmVHYW1lT2JqZWN0IGlzIGEgUGhhc2VyIHtAbGluayBHYW1lT2JqZWN0fSB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFBoYXNlciBTY2VuZSBhbmQgcmVuZGVyIGEgU3BpbmUgc2tlbGV0b24uXG4gKlxuICogVGhlIFNwaW5lIEdhbWVPYmplY3QgaXMgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGEgU3BpbmUge0BsaW5rIFNrZWxldG9ufSwge0BsaW5rIEFuaW1hdGlvblN0YXRlfSBhbmQge0BsaW5rIEFuaW1hdGlvblN0YXRlRGF0YX0uIEl0IGlzIHJlc3BvbnNpYmxlIGZvcjpcbiAqIC0gdXBkYXRpbmcgdGhlIGFuaW1hdGlvbiBzdGF0ZVxuICogLSBhcHBseWluZyB0aGUgYW5pbWF0aW9uIHN0YXRlIHRvIHRoZSBza2VsZXRvbidzIGJvbmVzLCBzbG90cywgYXR0YWNobWVudHMsIGFuZCBkcmF3IG9yZGVyLlxuICogLSB1cGRhdGluZyB0aGUgc2tlbGV0b24ncyBib25lIHdvcmxkIHRyYW5zZm9ybXNcbiAqIC0gcmVuZGVyaW5nIHRoZSBza2VsZXRvblxuICpcbiAqIFNlZSB0aGUge0BsaW5rIFNwaW5lUGx1Z2lufSBjbGFzcyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIGEgYFNwaW5lR2FtZU9iamVjdGAuXG4gKlxuICogVGhlIHNrZWxldG9uLCBhbmltYXRpb24gc3RhdGUsIGFuZCBhbmltYXRpb24gc3RhdGUgZGF0YSBjYW4gYmUgYWNjZXNzZWQgdmlhIHRoZSByZXBzZWN0aXZlIGZpZWxkcy4gVGhleSBjYW4gYmUgbWFudWFsbHkgdXBkYXRlZCB2aWEge0BsaW5rIHVwZGF0ZVBvc2V9LlxuICpcbiAqIFRvIG1vZGlmeSB0aGUgYm9uZSBoaWVyYXJjaHkgYmVmb3JlIHRoZSB3b3JsZCB0cmFuc2Zvcm1zIGFyZSBjb21wdXRlZCwgYSBjYWxsYmFjayBjYW4gYmUgc2V0IHZpYSB0aGUge0BsaW5rIGJlZm9yZVVwZGF0ZVdvcmxkVHJhbnNmb3Jtc30gZmllbGQuXG4gKlxuICogVG8gbW9kaWZ5IHRoZSBib25lIGhpZXJhcmNoeSBhZnRlciB0aGUgd29ybGQgdHJhbnNmb3JtcyBhcmUgY29tcHV0ZWQsIGEgY2FsbGJhY2sgY2FuIGJlIHNldCB2aWEgdGhlIHtAbGluayBhZnRlclVwZGF0ZVdvcmxkVHJhbnNmb3Jtc30gZmllbGQuXG4gKlxuICogVGhlIGNsYXNzIGFsc28gZmVhdHVyZXMgbWV0aG9kcyB0byBjb252ZXJ0IGJldHdlZW4gdGhlIHNrZWxldG9uIGNvb3JkaW5hdGUgc3lzdGVtIGFuZCB0aGUgUGhhc2VyIGNvb3JkaW5hdGUgc3lzdGVtLlxuICpcbiAqIFNlZSB7QGxpbmsgc2tlbGV0b25Ub1BoYXNlcldvcmxkQ29vcmRpbmF0ZXN9LCB7QGxpbmsgcGhhc2VyV29ybGRDb29yZGluYXRlc1RvU2tlbGV0b259LCBhbmQge0BsaW5rIHBoYXNlcldvcmxkQ29vcmRpbmF0ZXNUb0JvbmVMb2NhbC59XG4gKi9cbmV4cG9ydCBjbGFzcyBTcGluZUdhbWVPYmplY3QgZXh0ZW5kcyBEZXB0aE1peGluKFxuXHRPcmlnaW5NaXhpbihcblx0XHRDb21wdXRlZFNpemVNaXhpbihcblx0XHRcdEZsaXBNaXhpbihcblx0XHRcdFx0U2Nyb2xsRmFjdG9yTWl4aW4oXG5cdFx0XHRcdFx0VHJhbnNmb3JtTWl4aW4oVmlzaWJsZU1peGluKEFscGhhTWl4aW4oQmFzZVNwaW5lR2FtZU9iamVjdCkpKVxuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0KVxuXHQpXG4pIHtcblx0YmxlbmRNb2RlID0gLTE7XG5cdHNrZWxldG9uOiBTa2VsZXRvbjtcblx0YW5pbWF0aW9uU3RhdGVEYXRhOiBBbmltYXRpb25TdGF0ZURhdGE7XG5cdGFuaW1hdGlvblN0YXRlOiBBbmltYXRpb25TdGF0ZTtcblx0YmVmb3JlVXBkYXRlV29ybGRUcmFuc2Zvcm1zOiAob2JqZWN0OiBTcGluZUdhbWVPYmplY3QpID0+IHZvaWQgPSAoKSA9PiB7IH07XG5cdGFmdGVyVXBkYXRlV29ybGRUcmFuc2Zvcm1zOiAob2JqZWN0OiBTcGluZUdhbWVPYmplY3QpID0+IHZvaWQgPSAoKSA9PiB7IH07XG5cdHByaXZhdGUgcHJlbXVsdGlwbGllZEFscGhhID0gZmFsc2U7XG5cdHByaXZhdGUgb2Zmc2V0WCA9IDA7XG5cdHByaXZhdGUgb2Zmc2V0WSA9IDA7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHNjZW5lOiBQaGFzZXIuU2NlbmUsXG5cdFx0cHJpdmF0ZSBwbHVnaW46IFNwaW5lUGx1Z2luLFxuXHRcdHg6IG51bWJlcixcblx0XHR5OiBudW1iZXIsXG5cdFx0ZGF0YUtleTogc3RyaW5nLFxuXHRcdGF0bGFzS2V5OiBzdHJpbmcsXG5cdFx0cHVibGljIGJvdW5kc1Byb3ZpZGVyOiBTcGluZUdhbWVPYmplY3RCb3VuZHNQcm92aWRlciA9IG5ldyBTZXR1cFBvc2VCb3VuZHNQcm92aWRlcigpXG5cdCkge1xuXHRcdHN1cGVyKHNjZW5lLCAod2luZG93IGFzIGFueSkuU1BJTkVfR0FNRV9PQkpFQ1RfVFlQRSA/ICh3aW5kb3cgYXMgYW55KS5TUElORV9HQU1FX09CSkVDVF9UWVBFIDogU1BJTkVfR0FNRV9PQkpFQ1RfVFlQRSk7XG5cdFx0dGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcblxuXHRcdHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdGhpcy5wbHVnaW4uaXNBdGxhc1ByZW11bHRpcGxpZWQoYXRsYXNLZXkpO1xuXHRcdHRoaXMuc2tlbGV0b24gPSB0aGlzLnBsdWdpbi5jcmVhdGVTa2VsZXRvbihkYXRhS2V5LCBhdGxhc0tleSk7XG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZURhdGEgPSBuZXcgQW5pbWF0aW9uU3RhdGVEYXRhKHRoaXMuc2tlbGV0b24uZGF0YSk7XG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZSA9IG5ldyBBbmltYXRpb25TdGF0ZSh0aGlzLmFuaW1hdGlvblN0YXRlRGF0YSk7XG5cdFx0dGhpcy5za2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybShQaHlzaWNzLnVwZGF0ZSk7XG5cdFx0dGhpcy51cGRhdGVTaXplKCk7XG5cdH1cblxuXHR1cGRhdGVTaXplICgpIHtcblx0XHRpZiAoIXRoaXMuc2tlbGV0b24pIHJldHVybjtcblx0XHRsZXQgYm91bmRzID0gdGhpcy5ib3VuZHNQcm92aWRlci5jYWxjdWxhdGVCb3VuZHModGhpcyk7XG5cdFx0dGhpcy53aWR0aCA9IGJvdW5kcy53aWR0aDtcblx0XHR0aGlzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQ7XG5cdFx0dGhpcy5zZXREaXNwbGF5T3JpZ2luKC1ib3VuZHMueCwgLWJvdW5kcy55KTtcblx0XHR0aGlzLm9mZnNldFggPSAtYm91bmRzLng7XG5cdFx0dGhpcy5vZmZzZXRZID0gLWJvdW5kcy55O1xuXHR9XG5cblx0LyoqIENvbnZlcnRzIGEgcG9pbnQgZnJvbSB0aGUgc2tlbGV0b24gY29vcmRpbmF0ZSBzeXN0ZW0gdG8gdGhlIFBoYXNlciB3b3JsZCBjb29yZGluYXRlIHN5c3RlbS4gKi9cblx0c2tlbGV0b25Ub1BoYXNlcldvcmxkQ29vcmRpbmF0ZXMgKHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcblx0XHRsZXQgdHJhbnNmb3JtID0gdGhpcy5nZXRXb3JsZFRyYW5zZm9ybU1hdHJpeCgpO1xuXHRcdGxldCBhID0gdHJhbnNmb3JtLmEsXG5cdFx0XHRiID0gdHJhbnNmb3JtLmIsXG5cdFx0XHRjID0gdHJhbnNmb3JtLmMsXG5cdFx0XHRkID0gdHJhbnNmb3JtLmQsXG5cdFx0XHR0eCA9IHRyYW5zZm9ybS50eCxcblx0XHRcdHR5ID0gdHJhbnNmb3JtLnR5O1xuXHRcdGxldCB4ID0gcG9pbnQueDtcblx0XHRsZXQgeSA9IHBvaW50Lnk7XG5cdFx0cG9pbnQueCA9IHggKiBhICsgeSAqIGMgKyB0eDtcblx0XHRwb2ludC55ID0geCAqIGIgKyB5ICogZCArIHR5O1xuXHR9XG5cblx0LyoqIENvbnZlcnRzIGEgcG9pbnQgZnJvbSB0aGUgUGhhc2VyIHdvcmxkIGNvb3JkaW5hdGUgc3lzdGVtIHRvIHRoZSBza2VsZXRvbiBjb29yZGluYXRlIHN5c3RlbS4gKi9cblx0cGhhc2VyV29ybGRDb29yZGluYXRlc1RvU2tlbGV0b24gKHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcblx0XHRsZXQgdHJhbnNmb3JtID0gdGhpcy5nZXRXb3JsZFRyYW5zZm9ybU1hdHJpeCgpO1xuXHRcdHRyYW5zZm9ybSA9IHRyYW5zZm9ybS5pbnZlcnQoKTtcblx0XHRsZXQgYSA9IHRyYW5zZm9ybS5hLFxuXHRcdFx0YiA9IHRyYW5zZm9ybS5iLFxuXHRcdFx0YyA9IHRyYW5zZm9ybS5jLFxuXHRcdFx0ZCA9IHRyYW5zZm9ybS5kLFxuXHRcdFx0dHggPSB0cmFuc2Zvcm0udHgsXG5cdFx0XHR0eSA9IHRyYW5zZm9ybS50eTtcblx0XHRsZXQgeCA9IHBvaW50Lng7XG5cdFx0bGV0IHkgPSBwb2ludC55O1xuXHRcdHBvaW50LnggPSB4ICogYSArIHkgKiBjICsgdHg7XG5cdFx0cG9pbnQueSA9IHggKiBiICsgeSAqIGQgKyB0eTtcblx0fVxuXG5cdC8qKiBDb252ZXJ0cyBhIHBvaW50IGZyb20gdGhlIFBoYXNlciB3b3JsZCBjb29yZGluYXRlIHN5c3RlbSB0byB0aGUgYm9uZSdzIGxvY2FsIGNvb3JkaW5hdGUgc3lzdGVtLiAqL1xuXHRwaGFzZXJXb3JsZENvb3JkaW5hdGVzVG9Cb25lIChwb2ludDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9LCBib25lOiBCb25lKSB7XG5cdFx0dGhpcy5waGFzZXJXb3JsZENvb3JkaW5hdGVzVG9Ta2VsZXRvbihwb2ludCk7XG5cdFx0aWYgKGJvbmUucGFyZW50KSB7XG5cdFx0XHRib25lLnBhcmVudC53b3JsZFRvTG9jYWwocG9pbnQgYXMgVmVjdG9yMik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJvbmUud29ybGRUb0xvY2FsKHBvaW50IGFzIFZlY3RvcjIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSB7QGxpbmsgQW5pbWF0aW9uU3RhdGV9LCBhcHBsaWVzIGl0IHRvIHRoZSB7QGxpbmsgU2tlbGV0b259LCB0aGVuIHVwZGF0ZXMgdGhlIHdvcmxkIHRyYW5zZm9ybXMgb2YgYWxsIGJvbmVzLlxuXHQgKiBAcGFyYW0gZGVsdGEgVGhlIHRpbWUgZGVsdGEgaW4gbWlsbGlzZWNvbmRzXG5cdCAqL1xuXHR1cGRhdGVQb3NlIChkZWx0YTogbnVtYmVyKSB7XG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZS51cGRhdGUoZGVsdGEgLyAxMDAwKTtcblx0XHR0aGlzLmFuaW1hdGlvblN0YXRlLmFwcGx5KHRoaXMuc2tlbGV0b24pO1xuXHRcdHRoaXMuYmVmb3JlVXBkYXRlV29ybGRUcmFuc2Zvcm1zKHRoaXMpO1xuXHRcdHRoaXMuc2tlbGV0b24udXBkYXRlKGRlbHRhIC8gMTAwMCk7XG5cdFx0dGhpcy5za2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybShQaHlzaWNzLnVwZGF0ZSk7XG5cdFx0dGhpcy5hZnRlclVwZGF0ZVdvcmxkVHJhbnNmb3Jtcyh0aGlzKTtcblx0fVxuXG5cdHByZVVwZGF0ZSAodGltZTogbnVtYmVyLCBkZWx0YTogbnVtYmVyKSB7XG5cdFx0aWYgKCF0aGlzLnNrZWxldG9uIHx8ICF0aGlzLmFuaW1hdGlvblN0YXRlKSByZXR1cm47XG5cdFx0dGhpcy51cGRhdGVQb3NlKGRlbHRhKTtcblx0fVxuXG5cdHByZURlc3Ryb3kgKCkge1xuXHRcdC8vIEZJWE1FIHRlYXIgZG93biBhbnkgZXZlbnQgZW1pdHRlcnNcblx0fVxuXG5cdHdpbGxSZW5kZXIgKGNhbWVyYTogUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEpIHtcblx0XHR2YXIgR2FtZU9iamVjdFJlbmRlck1hc2sgPSAweGY7XG5cdFx0dmFyIHJlc3VsdCA9ICF0aGlzLnNrZWxldG9uIHx8ICEoR2FtZU9iamVjdFJlbmRlck1hc2sgIT09IHRoaXMucmVuZGVyRmxhZ3MgfHwgKHRoaXMuY2FtZXJhRmlsdGVyICE9PSAwICYmIHRoaXMuY2FtZXJhRmlsdGVyICYgY2FtZXJhLmlkKSk7XG5cdFx0aWYgKCF0aGlzLnZpc2libGUpIHJlc3VsdCA9IGZhbHNlO1xuXG5cdFx0aWYgKCFyZXN1bHQgJiYgdGhpcy5wYXJlbnRDb250YWluZXIgJiYgdGhpcy5wbHVnaW4ud2ViR0xSZW5kZXJlcikge1xuXHRcdFx0dmFyIHNjZW5lUmVuZGVyZXIgPSB0aGlzLnBsdWdpbi53ZWJHTFJlbmRlcmVyO1xuXG5cdFx0XHRpZiAodGhpcy5wbHVnaW4uZ2wgJiYgdGhpcy5wbHVnaW4ucGhhc2VyUmVuZGVyZXIgaW5zdGFuY2VvZiBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciAmJiBzY2VuZVJlbmRlcmVyLmJhdGNoZXIuaXNEcmF3aW5nKSB7XG5cdFx0XHRcdHNjZW5lUmVuZGVyZXIuZW5kKCk7XG5cdFx0XHRcdHRoaXMucGx1Z2luLnBoYXNlclJlbmRlcmVyLnBpcGVsaW5lcy5yZWJpbmQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmVuZGVyV2ViR0wgKFxuXHRcdHJlbmRlcmVyOiBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcixcblx0XHRzcmM6IFNwaW5lR2FtZU9iamVjdCxcblx0XHRjYW1lcmE6IFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhLFxuXHRcdHBhcmVudE1hdHJpeDogUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4XG5cdCkge1xuXHRcdGlmICghdGhpcy5za2VsZXRvbiB8fCAhdGhpcy5hbmltYXRpb25TdGF0ZSB8fCAhdGhpcy5wbHVnaW4ud2ViR0xSZW5kZXJlcilcblx0XHRcdHJldHVybjtcblxuXHRcdGxldCBzY2VuZVJlbmRlcmVyID0gdGhpcy5wbHVnaW4ud2ViR0xSZW5kZXJlcjtcblx0XHRpZiAocmVuZGVyZXIubmV3VHlwZSkge1xuXHRcdFx0cmVuZGVyZXIucGlwZWxpbmVzLmNsZWFyKCk7XG5cdFx0XHRzY2VuZVJlbmRlcmVyLmJlZ2luKCk7XG5cdFx0fVxuXG5cdFx0Y2FtZXJhLmFkZFRvUmVuZGVyTGlzdChzcmMpO1xuXHRcdGxldCB0cmFuc2Zvcm0gPSBQaGFzZXIuR2FtZU9iamVjdHMuR2V0Q2FsY01hdHJpeChcblx0XHRcdHNyYyxcblx0XHRcdGNhbWVyYSxcblx0XHRcdHBhcmVudE1hdHJpeFxuXHRcdCkuY2FsYztcblx0XHRsZXQgYSA9IHRyYW5zZm9ybS5hLFxuXHRcdFx0YiA9IHRyYW5zZm9ybS5iLFxuXHRcdFx0YyA9IHRyYW5zZm9ybS5jLFxuXHRcdFx0ZCA9IHRyYW5zZm9ybS5kLFxuXHRcdFx0dHggPSB0cmFuc2Zvcm0udHgsXG5cdFx0XHR0eSA9IHRyYW5zZm9ybS50eTtcblxuXHRcdGxldCBvZmZzZXRYID0gc3JjLm9mZnNldFggLSBzcmMuZGlzcGxheU9yaWdpblg7XG5cdFx0bGV0IG9mZnNldFkgPSBzcmMub2Zmc2V0WSAtIHNyYy5kaXNwbGF5T3JpZ2luWTtcblxuXHRcdHNjZW5lUmVuZGVyZXIuZHJhd1NrZWxldG9uKFxuXHRcdFx0c3JjLnNrZWxldG9uLFxuXHRcdFx0c3JjLnByZW11bHRpcGxpZWRBbHBoYSxcblx0XHRcdC0xLFxuXHRcdFx0LTEsXG5cdFx0XHQodmVydGljZXMsIG51bVZlcnRpY2VzLCBzdHJpZGUpID0+IHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBudW1WZXJ0aWNlczsgaSArPSBzdHJpZGUpIHtcblx0XHRcdFx0XHRsZXQgdnggPSB2ZXJ0aWNlc1tpXSArIG9mZnNldFg7XG5cdFx0XHRcdFx0bGV0IHZ5ID0gdmVydGljZXNbaSArIDFdICsgb2Zmc2V0WTtcblx0XHRcdFx0XHR2ZXJ0aWNlc1tpXSA9IHZ4ICogYSArIHZ5ICogYyArIHR4O1xuXHRcdFx0XHRcdHZlcnRpY2VzW2kgKyAxXSA9IHZ4ICogYiArIHZ5ICogZCArIHR5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGlmICghcmVuZGVyZXIubmV4dFR5cGVNYXRjaCkge1xuXHRcdFx0c2NlbmVSZW5kZXJlci5lbmQoKTtcblx0XHRcdHJlbmRlcmVyLnBpcGVsaW5lcy5yZWJpbmQoKTtcblx0XHR9XG5cdH1cblxuXHRyZW5kZXJDYW52YXMgKFxuXHRcdHJlbmRlcmVyOiBQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyLFxuXHRcdHNyYzogU3BpbmVHYW1lT2JqZWN0LFxuXHRcdGNhbWVyYTogUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEsXG5cdFx0cGFyZW50TWF0cml4OiBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXhcblx0KSB7XG5cdFx0aWYgKCF0aGlzLnNrZWxldG9uIHx8ICF0aGlzLmFuaW1hdGlvblN0YXRlIHx8ICF0aGlzLnBsdWdpbi5jYW52YXNSZW5kZXJlcilcblx0XHRcdHJldHVybjtcblxuXHRcdGxldCBjb250ZXh0ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XG5cdFx0bGV0IHNrZWxldG9uUmVuZGVyZXIgPSB0aGlzLnBsdWdpbi5jYW52YXNSZW5kZXJlcjtcblx0XHQoc2tlbGV0b25SZW5kZXJlciBhcyBhbnkpLmN0eCA9IGNvbnRleHQ7XG5cblx0XHRjYW1lcmEuYWRkVG9SZW5kZXJMaXN0KHNyYyk7XG5cdFx0bGV0IHRyYW5zZm9ybSA9IFBoYXNlci5HYW1lT2JqZWN0cy5HZXRDYWxjTWF0cml4KFxuXHRcdFx0c3JjLFxuXHRcdFx0Y2FtZXJhLFxuXHRcdFx0cGFyZW50TWF0cml4XG5cdFx0KS5jYWxjO1xuXHRcdGxldCBza2VsZXRvbiA9IHRoaXMuc2tlbGV0b247XG5cdFx0c2tlbGV0b24ueCA9IHRyYW5zZm9ybS50eDtcblx0XHRza2VsZXRvbi55ID0gdHJhbnNmb3JtLnR5O1xuXHRcdHNrZWxldG9uLnNjYWxlWCA9IHRyYW5zZm9ybS5zY2FsZVg7XG5cdFx0c2tlbGV0b24uc2NhbGVZID0gdHJhbnNmb3JtLnNjYWxlWTtcblx0XHRsZXQgcm9vdCA9IHNrZWxldG9uLmdldFJvb3RCb25lKCkhO1xuXHRcdHJvb3Qucm90YXRpb24gPSAtTWF0aFV0aWxzLnJhZGlhbnNUb0RlZ3JlZXMgKiB0cmFuc2Zvcm0ucm90YXRpb25Ob3JtYWxpemVkO1xuXHRcdHRoaXMuc2tlbGV0b24udXBkYXRlV29ybGRUcmFuc2Zvcm0oUGh5c2ljcy51cGRhdGUpO1xuXG5cdFx0Y29udGV4dC5zYXZlKCk7XG5cdFx0c2tlbGV0b25SZW5kZXJlci5kcmF3KHNrZWxldG9uKTtcblx0XHRjb250ZXh0LnJlc3RvcmUoKTtcblx0fVxufVxuIl19
@@ -81,4 +81,4 @@ varying LOWP vec4 v_color;
81
81
  void main () {
82
82
  gl_FragColor = v_color;
83
83
  }
84
- `;return new ue(e,t,i)}},pe=ue;B(pe,"MVP_MATRIX","u_projTrans"),B(pe,"POSITION","a_position"),B(pe,"COLOR","a_color"),B(pe,"COLOR2","a_color2"),B(pe,"TEXCOORDS","a_texCoords"),B(pe,"SAMPLER","u_texture");var Ki=class{constructor(e,t,i,s){this.attributes=t,this.context=e instanceof ve?e:new ve(e),this.elementsPerVertex=0;for(let n=0;n<t.length;n++)this.elementsPerVertex+=t[n].numElements;this.vertices=new Float32Array(i*this.elementsPerVertex),this.indices=new Uint16Array(s),this.context.addRestorable(this)}context;vertices;verticesBuffer=null;verticesLength=0;dirtyVertices=!1;indices;indicesBuffer=null;indicesLength=0;dirtyIndices=!1;elementsPerVertex=0;getAttributes(){return this.attributes}maxVertices(){return this.vertices.length/this.elementsPerVertex}numVertices(){return this.verticesLength/this.elementsPerVertex}setVerticesLength(e){this.dirtyVertices=!0,this.verticesLength=e}getVertices(){return this.vertices}maxIndices(){return this.indices.length}numIndices(){return this.indicesLength}setIndicesLength(e){this.dirtyIndices=!0,this.indicesLength=e}getIndices(){return this.indices}getVertexSizeInFloats(){let e=0;for(var t=0;t<this.attributes.length;t++){let i=this.attributes[t];e+=i.numElements}return e}setVertices(e){if(this.dirtyVertices=!0,e.length>this.vertices.length)throw Error("Mesh can't store more than "+this.maxVertices()+" vertices");this.vertices.set(e,0),this.verticesLength=e.length}setIndices(e){if(this.dirtyIndices=!0,e.length>this.indices.length)throw Error("Mesh can't store more than "+this.maxIndices()+" indices");this.indices.set(e,0),this.indicesLength=e.length}draw(e,t){this.drawWithOffset(e,t,0,this.indicesLength>0?this.indicesLength:this.verticesLength/this.elementsPerVertex)}drawWithOffset(e,t,i,s){let n=this.context.gl;(this.dirtyVertices||this.dirtyIndices)&&this.update(),this.bind(e),this.indicesLength>0?n.drawElements(t,s,n.UNSIGNED_SHORT,i*2):n.drawArrays(t,i,s),this.unbind(e)}bind(e){let t=this.context.gl;t.bindBuffer(t.ARRAY_BUFFER,this.verticesBuffer);let i=0;for(let s=0;s<this.attributes.length;s++){let n=this.attributes[s],h=e.getAttributeLocation(n.name);t.enableVertexAttribArray(h),t.vertexAttribPointer(h,n.numElements,t.FLOAT,!1,this.elementsPerVertex*4,i*4),i+=n.numElements}this.indicesLength>0&&t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indicesBuffer)}unbind(e){let t=this.context.gl;for(let i=0;i<this.attributes.length;i++){let s=this.attributes[i],n=e.getAttributeLocation(s.name);t.disableVertexAttribArray(n)}t.bindBuffer(t.ARRAY_BUFFER,null),this.indicesLength>0&&t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null)}update(){let e=this.context.gl;this.dirtyVertices&&(this.verticesBuffer||(this.verticesBuffer=e.createBuffer()),e.bindBuffer(e.ARRAY_BUFFER,this.verticesBuffer),e.bufferData(e.ARRAY_BUFFER,this.vertices.subarray(0,this.verticesLength),e.DYNAMIC_DRAW),this.dirtyVertices=!1),this.dirtyIndices&&(this.indicesBuffer||(this.indicesBuffer=e.createBuffer()),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,this.indicesBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,this.indices.subarray(0,this.indicesLength),e.DYNAMIC_DRAW),this.dirtyIndices=!1)}restore(){this.verticesBuffer=null,this.indicesBuffer=null,this.update()}dispose(){this.context.removeRestorable(this);let e=this.context.gl;e.deleteBuffer(this.verticesBuffer),e.deleteBuffer(this.indicesBuffer)}},ot=class{constructor(e,t,i){this.name=e,this.type=t,this.numElements=i}},Ut=class extends ot{constructor(){super(pe.POSITION,Qe.Float,2)}},dn=class extends ot{constructor(){super(pe.POSITION,Qe.Float,3)}},Qi=class extends ot{constructor(e=0){super(pe.TEXCOORDS+(e==0?"":e),Qe.Float,2)}},_t=class extends ot{constructor(){super(pe.COLOR,Qe.Float,4)}},zs=class extends ot{constructor(){super(pe.COLOR2,Qe.Float,4)}},Qe=(e=>(e[e.Float=0]="Float",e))(Qe||{}),Oe=1,fn=769,Gs=770,qs=771,Hs=774,$e=class{context;drawCalls=0;isDrawing=!1;mesh;shader=null;lastTexture=null;verticesLength=0;indicesLength=0;srcColorBlend;srcAlphaBlend;dstBlend;cullWasEnabled=!1;constructor(e,t=!0,i=10920){if(i>10920)throw new Error("Can't have more than 10920 triangles per batch: "+i);this.context=e instanceof ve?e:new ve(e);let s=t?[new Ut,new _t,new Qi,new zs]:[new Ut,new _t,new Qi];this.mesh=new Ki(e,s,i,i*3);let n=this.context.gl;this.srcColorBlend=n.SRC_ALPHA,this.srcAlphaBlend=n.ONE,this.dstBlend=n.ONE_MINUS_SRC_ALPHA}begin(e){if(this.isDrawing)throw new Error("PolygonBatch is already drawing. Call PolygonBatch.end() before calling PolygonBatch.begin()");this.drawCalls=0,this.shader=e,this.lastTexture=null,this.isDrawing=!0;let t=this.context.gl;t.enable(t.BLEND),t.blendFuncSeparate(this.srcColorBlend,this.dstBlend,this.srcAlphaBlend,this.dstBlend),$e.disableCulling&&(this.cullWasEnabled=t.isEnabled(t.CULL_FACE),this.cullWasEnabled&&t.disable(t.CULL_FACE))}setBlendMode(e,t){const i=$e.blendModesGL[e],s=t?i.srcRgbPma:i.srcRgb,n=i.srcAlpha,h=i.dstRgb;if(this.srcColorBlend==s&&this.srcAlphaBlend==n&&this.dstBlend==h)return;this.srcColorBlend=s,this.srcAlphaBlend=n,this.dstBlend=h,this.isDrawing&&this.flush(),this.context.gl.blendFuncSeparate(s,h,n,h)}draw(e,t,i){e!=this.lastTexture?(this.flush(),this.lastTexture=e):(this.verticesLength+t.length>this.mesh.getVertices().length||this.indicesLength+i.length>this.mesh.getIndices().length)&&this.flush();let s=this.mesh.numVertices();this.mesh.getVertices().set(t,this.verticesLength),this.verticesLength+=t.length,this.mesh.setVerticesLength(this.verticesLength);let n=this.mesh.getIndices();for(let h=this.indicesLength,a=0;a<i.length;h++,a++)n[h]=i[a]+s;this.indicesLength+=i.length,this.mesh.setIndicesLength(this.indicesLength)}flush(){if(this.verticesLength!=0){if(!this.lastTexture)throw new Error("No texture set.");if(!this.shader)throw new Error("No shader set.");this.lastTexture.bind(),this.mesh.draw(this.shader,this.context.gl.TRIANGLES),this.verticesLength=0,this.indicesLength=0,this.mesh.setVerticesLength(0),this.mesh.setIndicesLength(0),this.drawCalls++,$e.globalDrawCalls++}}end(){if(!this.isDrawing)throw new Error("PolygonBatch is not drawing. Call PolygonBatch.begin() before calling PolygonBatch.end()");(this.verticesLength>0||this.indicesLength>0)&&this.flush(),this.shader=null,this.lastTexture=null,this.isDrawing=!1;let e=this.context.gl;e.disable(e.BLEND),$e.disableCulling&&this.cullWasEnabled&&e.enable(e.CULL_FACE)}getDrawCalls(){return this.drawCalls}static getAndResetGlobalDrawCalls(){let e=$e.globalDrawCalls;return $e.globalDrawCalls=0,e}dispose(){this.mesh.dispose()}},ht=$e;B(ht,"disableCulling",!1),B(ht,"globalDrawCalls",0),B(ht,"blendModesGL",[{srcRgb:Gs,srcRgbPma:Oe,dstRgb:qs,srcAlpha:Oe},{srcRgb:Gs,srcRgbPma:Oe,dstRgb:Oe,srcAlpha:Oe},{srcRgb:Hs,srcRgbPma:Hs,dstRgb:qs,srcAlpha:Oe},{srcRgb:Oe,srcRgbPma:Oe,dstRgb:fn,srcAlpha:Oe}]);var $i=class{context;isDrawing=!1;mesh;shapeType=ye.Filled;color=new V(1,1,1,1);shader=null;vertexIndex=0;tmp=new je;srcColorBlend;srcAlphaBlend;dstBlend;constructor(e,t=10920){if(t>10920)throw new Error("Can't have more than 10920 triangles per batch: "+t);this.context=e instanceof ve?e:new ve(e),this.mesh=new Ki(e,[new Ut,new _t],t,0);let i=this.context.gl;this.srcColorBlend=i.SRC_ALPHA,this.srcAlphaBlend=i.ONE,this.dstBlend=i.ONE_MINUS_SRC_ALPHA}begin(e){if(this.isDrawing)throw new Error("ShapeRenderer.begin() has already been called");this.shader=e,this.vertexIndex=0,this.isDrawing=!0;let t=this.context.gl;t.enable(t.BLEND),t.blendFuncSeparate(this.srcColorBlend,this.dstBlend,this.srcAlphaBlend,this.dstBlend)}setBlendMode(e,t,i){this.srcColorBlend=e,this.srcAlphaBlend=t,this.dstBlend=i,this.isDrawing&&(this.flush(),this.context.gl.blendFuncSeparate(e,i,t,i))}setColor(e){this.color.setFromColor(e)}setColorWith(e,t,i,s){this.color.set(e,t,i,s)}point(e,t,i){this.check(ye.Point,1),i||(i=this.color),this.vertex(e,t,i)}line(e,t,i,s,n){this.check(ye.Line,2);let h=this.mesh.getVertices(),a=this.vertexIndex;n||(n=this.color),this.vertex(e,t,n),this.vertex(i,s,n)}triangle(e,t,i,s,n,h,a,r,o,l){this.check(e?ye.Filled:ye.Line,3);let c=this.mesh.getVertices(),f=this.vertexIndex;r||(r=this.color),o||(o=this.color),l||(l=this.color),e?(this.vertex(t,i,r),this.vertex(s,n,o),this.vertex(h,a,l)):(this.vertex(t,i,r),this.vertex(s,n,o),this.vertex(s,n,r),this.vertex(h,a,o),this.vertex(h,a,r),this.vertex(t,i,o))}quad(e,t,i,s,n,h,a,r,o,l,c,f,d){this.check(e?ye.Filled:ye.Line,3);let u=this.mesh.getVertices(),m=this.vertexIndex;l||(l=this.color),c||(c=this.color),f||(f=this.color),d||(d=this.color),e?(this.vertex(t,i,l),this.vertex(s,n,c),this.vertex(h,a,f),this.vertex(h,a,f),this.vertex(r,o,d),this.vertex(t,i,l)):(this.vertex(t,i,l),this.vertex(s,n,c),this.vertex(s,n,c),this.vertex(h,a,f),this.vertex(h,a,f),this.vertex(r,o,d),this.vertex(r,o,d),this.vertex(t,i,l))}rect(e,t,i,s,n,h){this.quad(e,t,i,t+s,i,t+s,i+n,t,i+n,h,h,h,h)}rectLine(e,t,i,s,n,h,a){this.check(e?ye.Filled:ye.Line,8),a||(a=this.color);let r=this.tmp.set(n-i,t-s);r.normalize(),h*=.5;let o=r.x*h,l=r.y*h;e?(this.vertex(t+o,i+l,a),this.vertex(t-o,i-l,a),this.vertex(s+o,n+l,a),this.vertex(s-o,n-l,a),this.vertex(s+o,n+l,a),this.vertex(t-o,i-l,a)):(this.vertex(t+o,i+l,a),this.vertex(t-o,i-l,a),this.vertex(s+o,n+l,a),this.vertex(s-o,n-l,a),this.vertex(s+o,n+l,a),this.vertex(t+o,i+l,a),this.vertex(s-o,n-l,a),this.vertex(t-o,i-l,a))}x(e,t,i){this.line(e-i,t-i,e+i,t+i),this.line(e-i,t+i,e+i,t-i)}polygon(e,t,i,s){if(i<3)throw new Error("Polygon must contain at least 3 vertices");this.check(ye.Line,i*2),s||(s=this.color);let n=this.mesh.getVertices(),h=this.vertexIndex;t<<=1,i<<=1;let a=e[t],r=e[t+1],o=t+i;for(let l=t,c=t+i-2;l<c;l+=2){let f=e[l],d=e[l+1],u=0,m=0;l+2>=o?(u=a,m=r):(u=e[l+2],m=e[l+3]),this.vertex(f,d,s),this.vertex(u,m,s)}}circle(e,t,i,s,n,h=0){if(h==0&&(h=Math.max(1,6*P.cbrt(s)|0)),h<=0)throw new Error("segments must be > 0.");n||(n=this.color);let a=2*P.PI/h,r=Math.cos(a),o=Math.sin(a),l=s,c=0;if(e){this.check(ye.Filled,h*3+3),h--;for(let d=0;d<h;d++){this.vertex(t,i,n),this.vertex(t+l,i+c,n);let u=l;l=r*l-o*c,c=o*u+r*c,this.vertex(t+l,i+c,n)}this.vertex(t,i,n),this.vertex(t+l,i+c,n)}else{this.check(ye.Line,h*2+2);for(let d=0;d<h;d++){this.vertex(t+l,i+c,n);let u=l;l=r*l-o*c,c=o*u+r*c,this.vertex(t+l,i+c,n)}this.vertex(t+l,i+c,n)}let f=l;l=s,c=0,this.vertex(t+l,i+c,n)}curve(e,t,i,s,n,h,a,r,o,l){this.check(ye.Line,o*2+2),l||(l=this.color);let c=1/o,f=c*c,d=c*c*c,u=3*c,m=3*f,g=6*f,b=6*d,w=e-i*2+n,p=t-s*2+h,x=(i-n)*3-e+a,y=(s-h)*3-t+r,v=e,A=t,C=(i-e)*u+w*m+x*d,S=(s-t)*u+p*m+y*d,M=w*g+x*b,R=p*g+y*b,Y=x*b,L=y*b;for(;o-- >0;)this.vertex(v,A,l),v+=C,A+=S,C+=M,S+=R,M+=Y,R+=L,this.vertex(v,A,l);this.vertex(v,A,l),this.vertex(a,r,l)}vertex(e,t,i){let s=this.vertexIndex,n=this.mesh.getVertices();n[s++]=e,n[s++]=t,n[s++]=i.r,n[s++]=i.g,n[s++]=i.b,n[s++]=i.a,this.vertexIndex=s}end(){if(!this.isDrawing)throw new Error("ShapeRenderer.begin() has not been called");this.flush();let e=this.context.gl;e.disable(e.BLEND),this.isDrawing=!1}flush(){if(this.vertexIndex!=0){if(!this.shader)throw new Error("No shader set.");this.mesh.setVerticesLength(this.vertexIndex),this.mesh.draw(this.shader,this.shapeType),this.vertexIndex=0}}check(e,t){if(!this.isDrawing)throw new Error("ShapeRenderer.begin() has not been called");if(this.shapeType==e)if(this.mesh.maxVertices()-this.mesh.numVertices()<t)this.flush();else return;else this.flush(),this.shapeType=e}dispose(){this.mesh.dispose()}},ye=(e=>(e[e.Point=0]="Point",e[e.Line=1]="Line",e[e.Filled=4]="Filled",e))(ye||{}),es=class{boneLineColor=new V(1,0,0,1);boneOriginColor=new V(0,1,0,1);attachmentLineColor=new V(0,0,1,.5);triangleLineColor=new V(1,.64,0,.5);pathColor=new V().setFromString("FF7F00");clipColor=new V(.8,0,0,2);aabbColor=new V(0,1,0,.5);drawBones=!0;drawRegionAttachments=!0;drawBoundingBoxes=!0;drawMeshHull=!0;drawMeshTriangles=!0;drawPaths=!0;drawSkeletonXY=!1;drawClipping=!0;premultipliedAlpha=!1;scale=1;boneWidth=2;context;bounds=new Ns;temp=new Array;vertices=X.newFloatArray(2*1024);constructor(e){this.context=e instanceof ve?e:new ve(e)}draw(e,t,i){let s=t.x,n=t.y,h=this.context.gl,a=this.premultipliedAlpha?h.ONE:h.SRC_ALPHA;e.setBlendMode(a,h.ONE,h.ONE_MINUS_SRC_ALPHA);let r=t.bones;if(this.drawBones){e.setColor(this.boneLineColor);for(let o=0,l=r.length;o<l;o++){let c=r[o];if(i&&i.indexOf(c.data.name)>-1||!c.parent)continue;let f=c.data.length*c.a+c.worldX,d=c.data.length*c.c+c.worldY;e.rectLine(!0,c.worldX,c.worldY,f,d,this.boneWidth*this.scale)}this.drawSkeletonXY&&e.x(s,n,4*this.scale)}if(this.drawRegionAttachments){e.setColor(this.attachmentLineColor);let o=t.slots;for(let l=0,c=o.length;l<c;l++){let f=o[l],d=f.getAttachment();if(d instanceof O){let u=d,m=this.vertices;u.computeWorldVertices(f,m,0,2),e.line(m[0],m[1],m[2],m[3]),e.line(m[2],m[3],m[4],m[5]),e.line(m[4],m[5],m[6],m[7]),e.line(m[6],m[7],m[0],m[1])}}}if(this.drawMeshHull||this.drawMeshTriangles){let o=t.slots;for(let l=0,c=o.length;l<c;l++){let f=o[l];if(!f.bone.active)continue;let d=f.getAttachment();if(!(d instanceof Be))continue;let u=d,m=this.vertices;u.computeWorldVertices(f,0,u.worldVerticesLength,m,0,2);let g=u.triangles,b=u.hullLength;if(this.drawMeshTriangles){e.setColor(this.triangleLineColor);for(let w=0,p=g.length;w<p;w+=3){let x=g[w]*2,y=g[w+1]*2,v=g[w+2]*2;e.triangle(!1,m[x],m[x+1],m[y],m[y+1],m[v],m[v+1])}}if(this.drawMeshHull&&b>0){e.setColor(this.attachmentLineColor),b=(b>>1)*2;let w=m[b-2],p=m[b-1];for(let x=0,y=b;x<y;x+=2){let v=m[x],A=m[x+1];e.line(v,A,w,p),w=v,p=A}}}}if(this.drawBoundingBoxes){let o=this.bounds;o.update(t,!0),e.setColor(this.aabbColor),e.rect(!1,o.minX,o.minY,o.getWidth(),o.getHeight());let l=o.polygons,c=o.boundingBoxes;for(let f=0,d=l.length;f<d;f++){let u=l[f];e.setColor(c[f].color),e.polygon(u,0,u.length)}}if(this.drawPaths){let o=t.slots;for(let l=0,c=o.length;l<c;l++){let f=o[l];if(!f.bone.active)continue;let d=f.getAttachment();if(!(d instanceof Ke))continue;let u=d,m=u.worldVerticesLength,g=this.temp=X.setArraySize(this.temp,m,0);u.computeWorldVertices(f,0,m,g,0,2);let b=this.pathColor,w=g[2],p=g[3],x=0,y=0;if(u.closed){e.setColor(b);let v=g[0],A=g[1],C=g[m-2],S=g[m-1];x=g[m-4],y=g[m-3],e.curve(w,p,v,A,C,S,x,y,32),e.setColor(es.LIGHT_GRAY),e.line(w,p,v,A),e.line(x,y,C,S)}m-=4;for(let v=4;v<m;v+=6){let A=g[v],C=g[v+1],S=g[v+2],M=g[v+3];x=g[v+4],y=g[v+5],e.setColor(b),e.curve(w,p,A,C,S,M,x,y,32),e.setColor(es.LIGHT_GRAY),e.line(w,p,A,C),e.line(x,y,S,M),w=x,p=y}}}if(this.drawBones){e.setColor(this.boneOriginColor);for(let o=0,l=r.length;o<l;o++){let c=r[o];i&&i.indexOf(c.data.name)>-1||e.circle(!0,c.worldX,c.worldY,3*this.scale,this.boneOriginColor,8)}}if(this.drawClipping){let o=t.slots;e.setColor(this.clipColor);for(let l=0,c=o.length;l<c;l++){let f=o[l];if(!f.bone.active)continue;let d=f.getAttachment();if(!(d instanceof rt))continue;let u=d,m=u.worldVerticesLength,g=this.temp=X.setArraySize(this.temp,m,0);u.computeWorldVertices(f,0,m,g,0,2);for(let b=0,w=g.length;b<w;b+=2){let p=g[b],x=g[b+1],y=g[(b+2)%g.length],v=g[(b+3)%g.length];e.line(p,x,y,v)}}}}dispose(){}},Wt=es;B(Wt,"LIGHT_GRAY",new V(192/255,192/255,192/255,1)),B(Wt,"GREEN",new V(0,1,0,1));var un=class{constructor(e,t,i){this.vertices=e,this.numVertices=t,this.numFloats=i}},js=class{premultipliedAlpha=!1;tempColor=new V;tempColor2=new V;vertices;vertexSize=2+2+4;twoColorTint=!1;renderable=new un([],0,0);clipper=new at;temp=new je;temp2=new je;temp3=new V;temp4=new V;constructor(e,t=!0){this.twoColorTint=t,t&&(this.vertexSize+=4),this.vertices=X.newFloatArray(this.vertexSize*1024)}draw(e,t,i=-1,s=-1,n=null){let h=this.clipper,a=this.premultipliedAlpha,r=this.twoColorTint,o=null,l=this.renderable,c,f,d=t.drawOrder,u,m=t.color,g=r?12:8,b=!1;i==-1&&(b=!0);for(let w=0,p=d.length;w<p;w++){let x=h.isClipping()?2:g,y=d[w];if(!y.bone.active){h.clipEndWithSlot(y);continue}if(i>=0&&i==y.data.index&&(b=!0),!b){h.clipEndWithSlot(y);continue}s>=0&&s==y.data.index&&(b=!1);let v=y.getAttachment(),A;if(v instanceof O){let C=v;l.vertices=this.vertices,l.numVertices=4,l.numFloats=x<<2,C.computeWorldVertices(y,l.vertices,0,x),f=js.QUAD_TRIANGLES,c=C.uvs,A=C.region.texture,u=C.color}else if(v instanceof Be){let C=v;l.vertices=this.vertices,l.numVertices=C.worldVerticesLength>>1,l.numFloats=l.numVertices*x,l.numFloats>l.vertices.length&&(l.vertices=this.vertices=X.newFloatArray(l.numFloats)),C.computeWorldVertices(y,0,C.worldVerticesLength,l.vertices,0,x),f=C.triangles,A=C.region.texture,c=C.uvs,u=C.color}else if(v instanceof rt){let C=v;h.clipStart(y,C);continue}else{h.clipEndWithSlot(y);continue}if(A){let C=y.color,S=this.tempColor;S.r=m.r*C.r*u.r,S.g=m.g*C.g*u.g,S.b=m.b*C.b*u.b,S.a=m.a*C.a*u.a,a&&(S.r*=S.a,S.g*=S.a,S.b*=S.a);let M=this.tempColor2;y.darkColor?(a?(M.r=y.darkColor.r*S.a,M.g=y.darkColor.g*S.a,M.b=y.darkColor.b*S.a):M.setFromColor(y.darkColor),M.a=a?1:0):M.set(0,0,0,1);let R=y.data.blendMode;if(R!=o&&(o=R,e.setBlendMode(o,a)),h.isClipping()){h.clipTriangles(l.vertices,f,f.length,c,S,M,r);let Y=new Float32Array(h.clippedVertices),L=h.clippedTriangles;n&&n(Y,Y.length,g),e.draw(A,Y,L)}else{let Y=l.vertices;if(r)for(let T=2,k=0,F=l.numFloats;T<F;T+=g,k+=2)Y[T]=S.r,Y[T+1]=S.g,Y[T+2]=S.b,Y[T+3]=S.a,Y[T+4]=c[k],Y[T+5]=c[k+1],Y[T+6]=M.r,Y[T+7]=M.g,Y[T+8]=M.b,Y[T+9]=M.a;else for(let T=2,k=0,F=l.numFloats;T<F;T+=g,k+=2)Y[T]=S.r,Y[T+1]=S.g,Y[T+2]=S.b,Y[T+3]=S.a,Y[T+4]=c[k],Y[T+5]=c[k+1];let L=l.vertices.subarray(0,l.numFloats);n&&n(l.vertices,l.numFloats,g),e.draw(A,L,f)}}h.clipEndWithSlot(y)}h.clipEnd()}getSkeletonClipping(){return this.clipper}},ts=js;B(ts,"QUAD_TRIANGLES",[0,1,2,2,3,0]);var I=[0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0],zt=[0,1,2,2,3,0],Gt=new V(1,1,1,1),is=class{context;canvas;camera;batcher;twoColorTint=!1;batcherShader;shapes;shapesShader;activeRenderer=null;skeletonRenderer;skeletonDebugRenderer;constructor(e,t,i=!0){this.canvas=e,this.context=t instanceof ve?t:new ve(t),this.twoColorTint=i,this.camera=new _s(e.width,e.height),this.batcherShader=i?pe.newTwoColoredTextured(this.context):pe.newColoredTextured(this.context),this.batcher=new ht(this.context,i),this.shapesShader=pe.newColored(this.context),this.shapes=new $i(this.context),this.skeletonRenderer=new ts(this.context,i),this.skeletonDebugRenderer=new Wt(this.context)}dispose(){this.batcher.dispose(),this.batcherShader.dispose(),this.shapes.dispose(),this.shapesShader.dispose(),this.skeletonDebugRenderer.dispose()}begin(){this.camera.update(),this.enableRenderer(this.batcher)}drawSkeleton(e,t=!1,i=-1,s=-1,n=null){this.enableRenderer(this.batcher),this.skeletonRenderer.premultipliedAlpha=t,this.skeletonRenderer.draw(this.batcher,e,i,s,n)}drawSkeletonDebug(e,t=!1,i){this.enableRenderer(this.shapes),this.skeletonDebugRenderer.premultipliedAlpha=t,this.skeletonDebugRenderer.draw(this.shapes,e,i)}drawTexture(e,t,i,s,n,h){this.enableRenderer(this.batcher),h||(h=Gt);var a=0;I[a++]=t,I[a++]=i,I[a++]=h.r,I[a++]=h.g,I[a++]=h.b,I[a++]=h.a,I[a++]=0,I[a++]=1,this.twoColorTint&&(I[a++]=0,I[a++]=0,I[a++]=0,I[a++]=0),I[a++]=t+s,I[a++]=i,I[a++]=h.r,I[a++]=h.g,I[a++]=h.b,I[a++]=h.a,I[a++]=1,I[a++]=1,this.twoColorTint&&(I[a++]=0,I[a++]=0,I[a++]=0,I[a++]=0),I[a++]=t+s,I[a++]=i+n,I[a++]=h.r,I[a++]=h.g,I[a++]=h.b,I[a++]=h.a,I[a++]=1,I[a++]=0,this.twoColorTint&&(I[a++]=0,I[a++]=0,I[a++]=0,I[a++]=0),I[a++]=t,I[a++]=i+n,I[a++]=h.r,I[a++]=h.g,I[a++]=h.b,I[a++]=h.a,I[a++]=0,I[a++]=0,this.twoColorTint&&(I[a++]=0,I[a++]=0,I[a++]=0,I[a]=0),this.batcher.draw(e,I,zt)}drawTextureUV(e,t,i,s,n,h,a,r,o,l){this.enableRenderer(this.batcher),l||(l=Gt);var c=0;I[c++]=t,I[c++]=i,I[c++]=l.r,I[c++]=l.g,I[c++]=l.b,I[c++]=l.a,I[c++]=h,I[c++]=a,this.twoColorTint&&(I[c++]=0,I[c++]=0,I[c++]=0,I[c++]=0),I[c++]=t+s,I[c++]=i,I[c++]=l.r,I[c++]=l.g,I[c++]=l.b,I[c++]=l.a,I[c++]=r,I[c++]=a,this.twoColorTint&&(I[c++]=0,I[c++]=0,I[c++]=0,I[c++]=0),I[c++]=t+s,I[c++]=i+n,I[c++]=l.r,I[c++]=l.g,I[c++]=l.b,I[c++]=l.a,I[c++]=r,I[c++]=o,this.twoColorTint&&(I[c++]=0,I[c++]=0,I[c++]=0,I[c++]=0),I[c++]=t,I[c++]=i+n,I[c++]=l.r,I[c++]=l.g,I[c++]=l.b,I[c++]=l.a,I[c++]=h,I[c++]=o,this.twoColorTint&&(I[c++]=0,I[c++]=0,I[c++]=0,I[c]=0),this.batcher.draw(e,I,zt)}drawTextureRotated(e,t,i,s,n,h,a,r,o){this.enableRenderer(this.batcher),o||(o=Gt);let l=t+h,c=i+a,f=-h,d=-a,u=s-h,m=n-a,g=f,b=d,w=f,p=m,x=u,y=m,v=u,A=d,C=0,S=0,M=0,R=0,Y=0,L=0,T=0,k=0;if(r!=0){let se=P.cosDeg(r),re=P.sinDeg(r);C=se*g-re*b,S=re*g+se*b,T=se*w-re*p,k=re*w+se*p,Y=se*x-re*y,L=re*x+se*y,M=Y+(C-T),R=L+(S-k)}else C=g,S=b,T=w,k=p,Y=x,L=y,M=v,R=A;C+=l,S+=c,M+=l,R+=c,Y+=l,L+=c,T+=l,k+=c;var F=0;I[F++]=C,I[F++]=S,I[F++]=o.r,I[F++]=o.g,I[F++]=o.b,I[F++]=o.a,I[F++]=0,I[F++]=1,this.twoColorTint&&(I[F++]=0,I[F++]=0,I[F++]=0,I[F++]=0),I[F++]=M,I[F++]=R,I[F++]=o.r,I[F++]=o.g,I[F++]=o.b,I[F++]=o.a,I[F++]=1,I[F++]=1,this.twoColorTint&&(I[F++]=0,I[F++]=0,I[F++]=0,I[F++]=0),I[F++]=Y,I[F++]=L,I[F++]=o.r,I[F++]=o.g,I[F++]=o.b,I[F++]=o.a,I[F++]=1,I[F++]=0,this.twoColorTint&&(I[F++]=0,I[F++]=0,I[F++]=0,I[F++]=0),I[F++]=T,I[F++]=k,I[F++]=o.r,I[F++]=o.g,I[F++]=o.b,I[F++]=o.a,I[F++]=0,I[F++]=0,this.twoColorTint&&(I[F++]=0,I[F++]=0,I[F++]=0,I[F]=0),this.batcher.draw(e,I,zt)}drawRegion(e,t,i,s,n,h){this.enableRenderer(this.batcher),h||(h=Gt);var a=0;I[a++]=t,I[a++]=i,I[a++]=h.r,I[a++]=h.g,I[a++]=h.b,I[a++]=h.a,I[a++]=e.u,I[a++]=e.v2,this.twoColorTint&&(I[a++]=0,I[a++]=0,I[a++]=0,I[a++]=0),I[a++]=t+s,I[a++]=i,I[a++]=h.r,I[a++]=h.g,I[a++]=h.b,I[a++]=h.a,I[a++]=e.u2,I[a++]=e.v2,this.twoColorTint&&(I[a++]=0,I[a++]=0,I[a++]=0,I[a++]=0),I[a++]=t+s,I[a++]=i+n,I[a++]=h.r,I[a++]=h.g,I[a++]=h.b,I[a++]=h.a,I[a++]=e.u2,I[a++]=e.v,this.twoColorTint&&(I[a++]=0,I[a++]=0,I[a++]=0,I[a++]=0),I[a++]=t,I[a++]=i+n,I[a++]=h.r,I[a++]=h.g,I[a++]=h.b,I[a++]=h.a,I[a++]=e.u,I[a++]=e.v,this.twoColorTint&&(I[a++]=0,I[a++]=0,I[a++]=0,I[a]=0),this.batcher.draw(e.page.texture,I,zt)}line(e,t,i,s,n,h){this.enableRenderer(this.shapes),this.shapes.line(e,t,i,s,n)}triangle(e,t,i,s,n,h,a,r,o,l){this.enableRenderer(this.shapes),this.shapes.triangle(e,t,i,s,n,h,a,r,o,l)}quad(e,t,i,s,n,h,a,r,o,l,c,f,d){this.enableRenderer(this.shapes),this.shapes.quad(e,t,i,s,n,h,a,r,o,l,c,f,d)}rect(e,t,i,s,n,h){this.enableRenderer(this.shapes),this.shapes.rect(e,t,i,s,n,h)}rectLine(e,t,i,s,n,h,a){this.enableRenderer(this.shapes),this.shapes.rectLine(e,t,i,s,n,h,a)}polygon(e,t,i,s){this.enableRenderer(this.shapes),this.shapes.polygon(e,t,i,s)}circle(e,t,i,s,n,h=0){this.enableRenderer(this.shapes),this.shapes.circle(e,t,i,s,n,h)}curve(e,t,i,s,n,h,a,r,o,l){this.enableRenderer(this.shapes),this.shapes.curve(e,t,i,s,n,h,a,r,o,l)}end(){this.activeRenderer===this.batcher?this.batcher.end():this.activeRenderer===this.shapes&&this.shapes.end(),this.activeRenderer=null}resize(e){let t=this.canvas;var i=window.devicePixelRatio||1,s=Math.round(t.clientWidth*i),n=Math.round(t.clientHeight*i);if((t.width!=s||t.height!=n)&&(t.width=s,t.height=n),this.context.gl.viewport(0,0,t.width,t.height),e===qt.Expand)this.camera.setViewport(s,n);else if(e===qt.Fit){let h=t.width,a=t.height,r=this.camera.viewportWidth,o=this.camera.viewportHeight,l=o/r,c=a/h,f=l<c?r/h:o/a;this.camera.setViewport(h*f,a*f)}this.camera.update()}enableRenderer(e){this.activeRenderer!==e&&(this.end(),e instanceof ht?(this.batcherShader.bind(),this.batcherShader.setUniform4x4f(pe.MVP_MATRIX,this.camera.projectionView.values),this.batcherShader.setUniformi("u_texture",0),this.batcher.begin(this.batcherShader),this.activeRenderer=this.batcher):e instanceof $i?(this.shapesShader.bind(),this.shapesShader.setUniform4x4f(pe.MVP_MATRIX,this.camera.projectionView.values),this.shapes.begin(this.shapesShader),this.activeRenderer=this.shapes):this.activeRenderer=this.skeletonDebugRenderer)}},qt=(e=>(e[e.Stretch=0]="Stretch",e[e.Expand=1]="Expand",e[e.Fit=2]="Fit",e))(qt||{}),bt,ct,Zs=0,mn=1,ss=1,Js=165,Ks=108,et=163,gn=class{renderer;logo=null;spinner=null;angle=0;fadeOut=0;fadeIn=0;timeKeeper=new Qt;backgroundColor=new V(.135,.135,.135,1);tempColor=new V;constructor(e){if(this.renderer=e,this.timeKeeper.maxDelta=9,!ct){let t=navigator.userAgent.indexOf("Safari")>-1,i=()=>Zs++;ct=new Image,ct.src=xn,t||(ct.crossOrigin="anonymous"),ct.onload=i,bt=new Image,bt.src=pn,t||(bt.crossOrigin="anonymous"),bt.onload=i}}dispose(){this.logo?.dispose(),this.spinner?.dispose()}draw(e=!1){if(Zs<2||e&&this.fadeOut>ss)return;this.timeKeeper.update();let t=Math.abs(Math.sin(this.timeKeeper.totalTime+.25));this.angle-=this.timeKeeper.delta*200*(1+1.5*Math.pow(t,5));let i=this.tempColor,s=this.renderer,n=s.canvas,h=s.context.gl;if(s.resize(1),s.camera.position.set(n.width/2,n.height/2,0),s.batcher.setBlendMode(0,!0),e){if(this.fadeOut+=this.timeKeeper.delta*(this.timeKeeper.totalTime<1?2:1),this.fadeOut>ss)return;i.setFromColor(this.backgroundColor),t=1-this.fadeOut/ss,t=1-(t-1)*(t-1),i.a*=t,i.a>0&&(s.camera.zoom=1,s.begin(),s.quad(!0,0,0,n.width,0,n.width,n.height,0,n.height,i,i,i,i),s.end())}else this.fadeIn+=this.timeKeeper.delta,this.backgroundColor.a>0&&(h.clearColor(this.backgroundColor.r,this.backgroundColor.g,this.backgroundColor.b,this.backgroundColor.a),h.clear(h.COLOR_BUFFER_BIT)),t=1;t*=Math.min(this.fadeIn/mn,1),i.set(t,t,t,t),this.logo||(this.logo=new lt(s.context,ct),this.spinner=new lt(s.context,bt)),s.camera.zoom=Math.max(1,et/n.height),s.begin(),s.drawTexture(this.logo,(n.width-Js)/2,(n.height-Ks)/2,Js,Ks,i),this.spinner&&s.drawTextureRotated(this.spinner,(n.width-et)/2,(n.height-et)/2,et,et,et/2,et/2,this.angle,i),s.end()}},pn="data:image/png;base64,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",xn="data:image/png;base64,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",wn=class{constructor(e,t){this.config=t,t.pathPrefix||(t.pathPrefix=""),t.app||(t.app={loadAssets:()=>{},initialize:()=>{},update:()=>{},render:()=>{},error:()=>{},dispose:()=>{}}),t.webglConfig||(t.webglConfig={alpha:!0}),this.htmlCanvas=e,this.context=new ve(e,t.webglConfig),this.renderer=new is(e,this.context),this.gl=this.context.gl,this.assetManager=new Us(this.context,t.pathPrefix),this.input=new Ji(e),t.app.loadAssets&&t.app.loadAssets(this);let i=()=>{this.disposed||(requestAnimationFrame(i),this.time.update(),t.app.update&&t.app.update(this,this.time.delta),t.app.render&&t.app.render(this))},s=()=>{if(!this.disposed){if(this.assetManager.isLoadingComplete()){this.assetManager.hasErrors()?t.app.error&&t.app.error(this,this.assetManager.getErrors()):(t.app.initialize&&t.app.initialize(this),i());return}requestAnimationFrame(s)}};requestAnimationFrame(s)}context;time=new Qt;htmlCanvas;gl;renderer;assetManager;input;disposed=!1;clear(e,t,i,s){this.gl.clearColor(e,t,i,s),this.gl.clear(this.gl.COLOR_BUFFER_BIT)}dispose(){this.config.app.dispose&&this.config.app.dispose(this),this.disposed=!0}},qe=Phaser.GameObjects.Components,Qs=qe.ComputedSize,$s=qe.Depth,er=qe.Flip,tr=qe.ScrollFactor,ir=qe.Transform,sr=qe.Visible,rr=qe.Origin,nr=qe.Alpha;function Ne(...e){return t=>(Phaser.Class.mixin(t,e),t)}var ar=Ne(Qs),lr=Ne($s),or=Ne(er),hr=Ne(tr),cr=Ne(ir),dr=Ne(sr),fr=Ne(rr),ur=Ne(nr),bn=class extends Phaser.GameObjects.GameObject{constructor(e,t){super(e,t)}},vn=class{constructor(e,t,i,s){this.x=e,this.y=t,this.width=i,this.height=s}calculateBounds(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},mr=class{constructor(e=!1){this.clipping=e}calculateBounds(e){if(!e.skeleton)return{x:0,y:0,width:0,height:0};const t=new ze(e.skeleton.data);t.setToSetupPose(),t.updateWorldTransform(2);const i=t.getBoundsRect(this.clipping?new at:void 0);return i.width==Number.NEGATIVE_INFINITY?{x:0,y:0,width:0,height:0}:i}},yn=class{constructor(e,t=[],i=.05,s=!1){this.animation=e,this.skins=t,this.timeStep=i,this.clipping=s}calculateBounds(e){if(!e.skeleton||!e.animationState)return{x:0,y:0,width:0,height:0};const t=new kt(e.animationState.data),i=new ze(e.skeleton.data),s=this.clipping?new at:void 0,n=i.data;if(this.skins.length>0){let a=new wt("custom-skin");for(const r of this.skins){const o=n.findSkin(r);o!=null&&a.addSkin(o)}i.setSkin(a)}i.setToSetupPose();const h=this.animation!=null?n.findAnimation(this.animation):null;if(h==null){i.updateWorldTransform(2);const a=i.getBoundsRect(s);return a.width==Number.NEGATIVE_INFINITY?{x:0,y:0,width:0,height:0}:a}else{let a=Number.POSITIVE_INFINITY,r=Number.POSITIVE_INFINITY,o=Number.NEGATIVE_INFINITY,l=Number.NEGATIVE_INFINITY;t.clearTracks(),t.setAnimationWith(0,h,!1);const c=Math.max(h.duration/this.timeStep,1);for(let d=0;d<c;d++){const u=d>0?this.timeStep:0;t.update(u),t.apply(i),i.update(u),i.updateWorldTransform(2);const m=i.getBoundsRect(s);a=Math.min(a,m.x),r=Math.min(r,m.y),o=Math.max(o,m.x+m.width),l=Math.max(l,m.y+m.height)}const f={x:a,y:r,width:o-a,height:l-r};return f.width==Number.NEGATIVE_INFINITY?{x:0,y:0,width:0,height:0}:f}}},rs=class extends lr(fr(ar(or(hr(cr(dr(ur(bn)))))))){constructor(e,t,i,s,n,h,a=new mr){super(e,window.SPINE_GAME_OBJECT_TYPE?window.SPINE_GAME_OBJECT_TYPE:Jt),this.plugin=t,this.boundsProvider=a,this.setPosition(i,s),this.premultipliedAlpha=this.plugin.isAtlasPremultiplied(h),this.skeleton=this.plugin.createSkeleton(n,h),this.animationStateData=new Ts(this.skeleton.data),this.animationState=new kt(this.animationStateData),this.skeleton.updateWorldTransform(2),this.updateSize()}blendMode=-1;skeleton;animationStateData;animationState;beforeUpdateWorldTransforms=()=>{};afterUpdateWorldTransforms=()=>{};premultipliedAlpha=!1;offsetX=0;offsetY=0;updateSize(){if(!this.skeleton)return;let e=this.boundsProvider.calculateBounds(this);this.width=e.width,this.height=e.height,this.setDisplayOrigin(-e.x,-e.y),this.offsetX=-e.x,this.offsetY=-e.y}skeletonToPhaserWorldCoordinates(e){let t=this.getWorldTransformMatrix(),i=t.a,s=t.b,n=t.c,h=t.d,a=t.tx,r=t.ty,o=e.x,l=e.y;e.x=o*i+l*n+a,e.y=o*s+l*h+r}phaserWorldCoordinatesToSkeleton(e){let t=this.getWorldTransformMatrix();t=t.invert();let i=t.a,s=t.b,n=t.c,h=t.d,a=t.tx,r=t.ty,o=e.x,l=e.y;e.x=o*i+l*n+a,e.y=o*s+l*h+r}phaserWorldCoordinatesToBone(e,t){this.phaserWorldCoordinatesToSkeleton(e),t.parent?t.parent.worldToLocal(e):t.worldToLocal(e)}updatePose(e){this.animationState.update(e/1e3),this.animationState.apply(this.skeleton),this.beforeUpdateWorldTransforms(this),this.skeleton.update(e/1e3),this.skeleton.updateWorldTransform(2),this.afterUpdateWorldTransforms(this)}preUpdate(e,t){!this.skeleton||!this.animationState||this.updatePose(t)}preDestroy(){}willRender(e){var t=15,i=!this.skeleton||!(t!==this.renderFlags||this.cameraFilter!==0&&this.cameraFilter&e.id);if(this.visible||(i=!1),!i&&this.parentContainer&&this.plugin.webGLRenderer){var s=this.plugin.webGLRenderer;this.plugin.gl&&this.plugin.phaserRenderer instanceof Phaser.Renderer.WebGL.WebGLRenderer&&s.batcher.isDrawing&&(s.end(),this.plugin.phaserRenderer.pipelines.rebind())}return i}renderWebGL(e,t,i,s){if(!this.skeleton||!this.animationState||!this.plugin.webGLRenderer)return;let n=this.plugin.webGLRenderer;e.newType&&(e.pipelines.clear(),n.begin()),i.addToRenderList(t);let h=Phaser.GameObjects.GetCalcMatrix(t,i,s).calc,a=h.a,r=h.b,o=h.c,l=h.d,c=h.tx,f=h.ty,d=(t.offsetX-t.displayOriginX)*t.scaleX,u=(t.offsetY-t.displayOriginY)*t.scaleY;n.drawSkeleton(t.skeleton,t.premultipliedAlpha,-1,-1,(m,g,b)=>{for(let w=0;w<g;w+=b){let p=m[w],x=m[w+1];m[w]=p*a+x*o+c+d,m[w+1]=p*r+x*l+f+u}}),e.nextTypeMatch||(n.end(),e.pipelines.rebind())}renderCanvas(e,t,i,s){if(!this.skeleton||!this.animationState||!this.plugin.canvasRenderer)return;let n=e.currentContext,h=this.plugin.canvasRenderer;h.ctx=n,i.addToRenderList(t);let a=Phaser.GameObjects.GetCalcMatrix(t,i,s).calc,r=this.skeleton;r.x=a.tx,r.y=a.ty,r.scaleX=a.scaleX,r.scaleY=a.scaleY;let o=r.getRootBone();o.rotation=-P.radiansToDegrees*a.rotationNormalized,this.skeleton.updateWorldTransform(2),n.save(),h.draw(r),n.restore()}},An=class extends Pt{constructor(e){super(e)}setFilters(e,t){}setWraps(e,t){}dispose(){}},Cn=X.newFloatArray(8),Ht=class{ctx;triangleRendering=!1;debugRendering=!1;vertices=X.newFloatArray(8*1024);tempColor=new V;constructor(e){this.ctx=e}draw(e){this.triangleRendering?this.drawTriangles(e):this.drawImages(e)}drawImages(e){let t=this.ctx,i=this.tempColor,s=e.color,n=e.drawOrder;this.debugRendering&&(t.strokeStyle="green");for(let h=0,a=n.length;h<a;h++){let r=n[h],o=r.bone;if(!o.active)continue;let l=r.getAttachment();if(!(l instanceof O))continue;l.computeWorldVertices(r,Cn,0,2);let c=l.region,f=c.texture.getImage(),d=r.color,u=l.color;i.set(s.r*d.r*u.r,s.g*d.g*u.g,s.b*d.b*u.b,s.a*d.a*u.a),t.save(),t.transform(o.a,o.c,o.b,o.d,o.worldX,o.worldY),t.translate(l.offset[0],l.offset[1]),t.rotate(l.rotation*Math.PI/180);let m=l.width/c.originalWidth;t.scale(m*l.scaleX,m*l.scaleY);let g=c.width,b=c.height;if(t.translate(g/2,b/2),l.region.degrees==90){let w=g;g=b,b=w,t.rotate(-Math.PI/2)}t.scale(1,-1),t.translate(-g/2,-b/2),t.globalAlpha=i.a,t.drawImage(f,f.width*c.u,f.height*c.v,g,b,0,0,g,b),this.debugRendering&&t.strokeRect(0,0,g,b),t.restore()}}drawTriangles(e){let t=this.ctx,i=this.tempColor,s=e.color,n=e.drawOrder,h=null,a=this.vertices,r=null;for(let l=0,c=n.length;l<c;l++){let f=n[l],d=f.getAttachment(),u,m;if(d instanceof O){let g=d;a=this.computeRegionVertices(f,g,!1),r=Ht.QUAD_TRIANGLES,u=g.region.texture.getImage()}else if(d instanceof Be){let g=d;a=this.computeMeshVertices(f,g,!1),r=g.triangles,u=g.region.texture.getImage()}else continue;if(u){f.data.blendMode!=h&&(h=f.data.blendMode);let g=f.color,b=d.color;i.set(s.r*g.r*b.r,s.g*g.g*b.g,s.b*g.b*b.b,s.a*g.a*b.a),t.globalAlpha=i.a;for(var o=0;o<r.length;o+=3){let w=r[o]*8,p=r[o+1]*8,x=r[o+2]*8,y=a[w],v=a[w+1],A=a[w+6],C=a[w+7],S=a[p],M=a[p+1],R=a[p+6],Y=a[p+7],L=a[x],T=a[x+1],k=a[x+6],F=a[x+7];this.drawTriangle(u,y,v,A,C,S,M,R,Y,L,T,k,F),this.debugRendering&&(t.strokeStyle="green",t.beginPath(),t.moveTo(y,v),t.lineTo(S,M),t.lineTo(L,T),t.lineTo(y,v),t.stroke())}}}this.ctx.globalAlpha=1}drawTriangle(e,t,i,s,n,h,a,r,o,l,c,f,d){let u=this.ctx;const m=e.width-1,g=e.height-1;s*=m,n*=g,r*=m,o*=g,f*=m,d*=g,u.beginPath(),u.moveTo(t,i),u.lineTo(h,a),u.lineTo(l,c),u.closePath(),h-=t,a-=i,l-=t,c-=i,r-=s,o-=n,f-=s,d-=n;let b=r*d-f*o;if(b==0)return;b=1/b;const w=(d*h-o*l)*b,p=(d*a-o*c)*b,x=(r*l-f*h)*b,y=(r*c-f*a)*b,v=t-w*s-x*n,A=i-p*s-y*n;u.save(),u.transform(w,p,x,y,v,A),u.clip(),u.drawImage(e,0,0),u.restore()}computeRegionVertices(e,t,i){let s=e.bone.skeleton.color,n=e.color,h=t.color,a=s.a*n.a*h.a,r=i?a:1,o=this.tempColor;o.set(s.r*n.r*h.r*r,s.g*n.g*h.g*r,s.b*n.b*h.b*r,a),t.computeWorldVertices(e,this.vertices,0,Ht.VERTEX_SIZE);let l=this.vertices,c=t.uvs;return l[O.C1R]=o.r,l[O.C1G]=o.g,l[O.C1B]=o.b,l[O.C1A]=o.a,l[O.U1]=c[0],l[O.V1]=c[1],l[O.C2R]=o.r,l[O.C2G]=o.g,l[O.C2B]=o.b,l[O.C2A]=o.a,l[O.U2]=c[2],l[O.V2]=c[3],l[O.C3R]=o.r,l[O.C3G]=o.g,l[O.C3B]=o.b,l[O.C3A]=o.a,l[O.U3]=c[4],l[O.V3]=c[5],l[O.C4R]=o.r,l[O.C4G]=o.g,l[O.C4B]=o.b,l[O.C4A]=o.a,l[O.U4]=c[6],l[O.V4]=c[7],l}computeMeshVertices(e,t,i){let s=e.bone.skeleton.color,n=e.color,h=t.color,a=s.a*n.a*h.a,r=i?a:1,o=this.tempColor;o.set(s.r*n.r*h.r*r,s.g*n.g*h.g*r,s.b*n.b*h.b*r,a);let l=t.worldVerticesLength/2,c=this.vertices;c.length<t.worldVerticesLength&&(this.vertices=c=X.newFloatArray(t.worldVerticesLength)),t.computeWorldVertices(e,0,t.worldVerticesLength,c,0,Ht.VERTEX_SIZE);let f=t.uvs;for(let d=0,u=0,m=2;d<l;d++)c[m++]=o.r,c[m++]=o.g,c[m++]=o.b,c[m++]=o.a,c[m++]=f[u++],c[m++]=f[u++],m+=2;return c}},ns=Ht;B(ns,"QUAD_TRIANGLES",[0,1,2,2,3,0]),B(ns,"VERTEX_SIZE",2+2+4);var vt=class extends Ce.Plugins.ScenePlugin{game;isWebGL;gl;get webGLRenderer(){return vt.gameWebGLRenderer}canvasRenderer;phaserRenderer;skeletonDataCache;atlasCache;constructor(e,t,i){super(e,t,i),this.game=t.game,this.isWebGL=this.game.config.renderType===2,this.gl=this.isWebGL?this.game.renderer.gl:null,this.phaserRenderer=this.game.renderer,this.canvasRenderer=null,this.skeletonDataCache=this.game.cache.addCustom(wr),this.atlasCache=this.game.cache.addCustom(br);let s=function(o,l,c){let f=new gr(this,o,l,as.json,c);return this.addFile(f.files),this};t.registerFileType("spineJson",s,e);let n=function(o,l,c){let f=new gr(this,o,l,as.binary,c);return this.addFile(f.files),this};t.registerFileType("spineBinary",n,e);let h=function(o,l,c,f){let d=new Sn(this,o,l,c,f);return this.addFile(d.files),this};t.registerFileType("spineAtlas",h,e);let a=function(o,l,c,f,d){this.scene.sys.renderer instanceof Ce.Renderer.WebGL.WebGLRenderer&&this.scene.sys.renderer.pipelines.clear();const u=this.scene.sys[i];let m=new rs(this.scene,u,o,l,c,f,d);return this.displayList.add(m),this.updateList.add(m),this.scene.sys.renderer instanceof Ce.Renderer.WebGL.WebGLRenderer&&this.scene.sys.renderer.pipelines.rebind(),m},r=function(o,l=!1){this.scene.sys.renderer instanceof Ce.Renderer.WebGL.WebGLRenderer&&this.scene.sys.renderer.pipelines.clear();let c=o.x?o.x:0,f=o.y?o.y:0,d=o.boundsProvider?o.boundsProvider:void 0;const u=this.scene.sys[i];let m=new rs(this.scene,u,c,f,o.dataKey,o.atlasKey,d);return l!==void 0&&(o.add=l),this.scene.sys.renderer instanceof Ce.Renderer.WebGL.WebGLRenderer&&this.scene.sys.renderer.pipelines.rebind(),Ce.GameObjects.BuildGameObject(this.scene,m,o)};t.registerGameObject(window.SPINE_GAME_OBJECT_TYPE?window.SPINE_GAME_OBJECT_TYPE:Jt,a,r)}boot(){ze.yDown=!0,this.isWebGL?(vt.gameWebGLRenderer||(vt.gameWebGLRenderer=new is(this.game.renderer.canvas,this.gl,!0)),this.onResize(),this.game.scale.on(Ce.Scale.Events.RESIZE,this.onResize,this)):this.canvasRenderer||(this.canvasRenderer=new ns(this.scene.sys.context));var e=this.systems.events;e.once("shutdown",this.shutdown,this),e.once("destroy",this.destroy,this),this.game.events.once("destroy",this.gameDestroy,this)}onResize(){var e=this.game.renderer,t=this.webGLRenderer;if(e&&t){var i=e.width,s=e.height;t.camera.position.x=i/2,t.camera.position.y=s/2,t.camera.up.y=-1,t.camera.direction.z=1,t.camera.setViewport(i,s)}}shutdown(){this.systems.events.off("shutdown",this.shutdown,this),this.isWebGL&&this.game.scale.off(Ce.Scale.Events.RESIZE,this.onResize,this)}destroy(){this.shutdown()}gameDestroy(){this.pluginManager.removeGameObject(window.SPINE_GAME_OBJECT_TYPE?window.SPINE_GAME_OBJECT_TYPE:Jt,!0,!0),this.webGLRenderer&&this.webGLRenderer.dispose(),vt.gameWebGLRenderer=null}getAtlas(e){let t;if(this.atlasCache.exists(e))t=this.atlasCache.get(e);else{let i=this.game.cache.text.get(e);if(t=new Fi(i.data),this.isWebGL){let s=this.gl;const n=s.getParameter(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL);n&&s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1);for(let h of t.pages)h.setTexture(new lt(s,this.game.textures.get(e+"!"+h.name).getSourceImage(),!1));n&&s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}else for(let s of t.pages)s.setTexture(new An(this.game.textures.get(e+"!"+s.name).getSourceImage()));this.atlasCache.add(e,t)}return t}isAtlasPremultiplied(e){let t=this.game.cache.text.get(e);return t?t.premultipliedAlpha:!1}getSkeletonData(e,t){const i=this.getAtlas(t),s=e+t;let n;if(this.skeletonDataCache.exists(s))n=this.skeletonDataCache.get(s);else{if(this.game.cache.json.exists(e)){let h=this.game.cache.json.get(e);n=new Ds(new Xi(i)).readSkeletonData(h)}else{let h=this.game.cache.binary.get(e);n=new Vs(new Xi(i)).readSkeletonData(new Uint8Array(h))}this.skeletonDataCache.add(s,n)}return n}createSkeleton(e,t){return new ze(this.getSkeletonData(e,t))}},yt=vt;B(yt,"gameWebGLRenderer",null),B(yt,"rendererId",0);var as=(e=>(e[e.json=0]="json",e[e.binary=1]="binary",e))(as||{}),gr=class extends Ce.Loader.MultiFile{constructor(e,t,i,s,n){if(typeof t!="string"){const r=t;t=r.key,i=r.url,s=r.type==="spineJson"?0:1,n=r.xhrSettings}let h=null;s==0?h=new Ce.Loader.FileTypes.JSONFile(e,{key:t,url:i,extension:"json",xhrSettings:n}):h=new Ce.Loader.FileTypes.BinaryFile(e,{key:t,url:i,extension:"skel",xhrSettings:n}),super(e,vr,t,[h]),this.fileType=s}onFileComplete(e){this.pending--}addToCache(){this.isReadyToProcess()&&this.files[0].addToCache()}},Sn=class extends Ce.Loader.MultiFile{constructor(e,t,i,s,n){if(typeof t!="string"){const h=t;t=h.key,i=h.url,s=h.premultipliedAlpha,n=h.xhrSettings}super(e,yr,t,[new Ce.Loader.FileTypes.TextFile(e,{key:t,url:i,xhrSettings:n,extension:"atlas"})]),this.premultipliedAlpha=s}onFileComplete(e){if(this.files.indexOf(e)!=-1&&(this.pending--,e.type=="text")){var t=e.data.split(/\r\n|\r|\n/);let o=[];o.push(t[0]);for(var i=1;i<t.length;i++){var s=t[i];s.trim()===""&&i<t.length-1&&(s=t[i+1],o.push(s))}let l=e.src.match(/^.*\//)??"";for(var n=0;n<o.length;n++){var h=l+o[n],a=e.key+"!"+o[n],r=new Ce.Loader.FileTypes.ImageFile(this.loader,a,h);this.loader.keyExists(r)||(this.addToMultiFile(r),this.loader.addFile(r))}}}addToCache(){if(this.isReadyToProcess()){let e=this.loader.textureManager;for(let t of this.files)t.type=="image"?e.exists(t.key)||e.addImage(t.key,t.data):(this.premultipliedAlpha=this.premultipliedAlpha??(t.data.indexOf("pma: true")>=0||t.data.indexOf("pma:true")>=0),t.data={data:t.data,premultipliedAlpha:this.premultipliedAlpha},t.addToCache())}}};window.spine={SpinePlugin:yt},window["spine.SpinePlugin"]=yt;export{vn as AABBRectangleBoundsProvider,nr as Alpha,ur as AlphaMixin,ui as AlphaTimeline,Tt as Animation,kt as AnimationState,Tr as AnimationStateAdapter,Ts as AnimationStateData,Us as AssetManager,Ys as AssetManagerBase,Xi as AtlasAttachmentLoader,$t as Attachment,Ze as AttachmentTimeline,Os as BinaryInput,Nt as BlendMode,Vi as Bone,Bi as BoneData,Lt as BoundingBoxAttachment,Is as CURRENT,cn as CameraController,rt as ClippingAttachment,V as Color,zs as Color2Attribute,_t as ColorAttribute,Qs as ComputedSize,ar as ComputedSizeMixin,xt as ConstraintData,Ye as CurveTimeline,Ee as CurveTimeline1,Et as CurveTimeline2,Sr as DebugUtils,pi as DeformTimeline,$s as Depth,lr as DepthMixin,Oi as Downloader,Je as DrawOrderTimeline,Ni as Event,Di as EventData,Cs as EventQueue,gt as EventTimeline,Se as EventType,Ri as FIRST,Er as FakeTexture,er as Flip,or as FlipMixin,lt as GLTexture,Ft as HOLD_FIRST,Ss as HOLD_MIX,ki as HOLD_SUBSEQUENT,Fs as IkConstraint,Ui as IkConstraintData,xi as IkConstraintTimeline,pt as Inherit,ci as InheritTimeline,Ji as Input,Ar as IntSet,fs as Interpolation,gn as LoadingScreen,N as M00,q as M01,H as M02,D as M03,j as M10,U as M11,Z as M12,_ as M13,J as M20,K as M21,W as M22,z as M23,$ as M30,ee as M31,te as M32,Q as M33,ve as ManagedWebGLRenderingContext,P as MathUtils,Ve as Matrix4,Ki as Mesh,Be as MeshAttachment,xs as MixBlend,ws as MixDirection,rr as Origin,fr as OriginMixin,_s as OrthoCamera,Ke as PathAttachment,nt as PathConstraint,_i as PathConstraintData,yi as PathConstraintMixTimeline,bi as PathConstraintPositionTimeline,vi as PathConstraintSpacingTimeline,Xs as Physics,Si as PhysicsConstraintDampingTimeline,Ei as PhysicsConstraintGravityTimeline,Ai as PhysicsConstraintInertiaTimeline,Ii as PhysicsConstraintMassTimeline,Mi as PhysicsConstraintMixTimeline,Mt as PhysicsConstraintResetTimeline,Ci as PhysicsConstraintStrengthTimeline,Ue as PhysicsConstraintTimeline,Ti as PhysicsConstraintWindTimeline,Pi as PointAttachment,ht as PolygonBatcher,ut as Pool,Ut as Position2Attribute,dn as Position3Attribute,Bt as PositionMode,us as Pow,Cr as PowOut,gi as RGB2Timeline,mi as RGBA2Timeline,di as RGBATimeline,fi as RGBTimeline,O as RegionAttachment,qt as ResizeMode,Ot as RotateMode,mt as RotateTimeline,Yi as SETUP,Yt as SUBSEQUENT,ri as ScaleTimeline,ni as ScaleXTimeline,ai as ScaleYTimeline,is as SceneRenderer,tr as ScrollFactor,hr as ScrollFactorMixin,st as SequenceTimeline,mr as SetupPoseBoundsProvider,pe as Shader,$i as ShapeRenderer,ye as ShapeType,li as ShearTimeline,oi as ShearXTimeline,hi as ShearYTimeline,ze as Skeleton,Vs as SkeletonBinary,Ns as SkeletonBounds,at as SkeletonClipping,zi as SkeletonData,Wt as SkeletonDebugRenderer,Ds as SkeletonJson,ts as SkeletonRenderer,wt as Skin,Gi as SkinEntry,yn as SkinsAndAnimationBoundsProvider,Ls as Slot,qi as SlotData,Vt as SpacingMode,wn as SpineCanvas,rs as SpineGameObject,yt as SpinePlugin,Kt as StringSet,Qi as TexCoordAttribute,Pt as Texture,Fi as TextureAtlas,Rs as TextureAtlasPage,Li as TextureAtlasRegion,Xt as TextureFilter,Ms as TextureRegion,Es as TextureWrap,Qt as TimeKeeper,me as Timeline,Ws as Touch,As as TrackEntry,ir as Transform,Ps as TransformConstraint,Hi as TransformConstraintData,wi as TransformConstraintTimeline,cr as TransformMixin,ti as TranslateTimeline,ii as TranslateXTimeline,si as TranslateYTimeline,Ie as Triangulator,X as Utils,je as Vector2,Me as Vector3,ke as VertexAttachment,ot as VertexAttribute,Qe as VertexAttributeType,sr as Visible,dr as VisibleMixin,Ir as WindowedMean,Ne as createMixin};
84
+ `;return new ue(e,t,i)}},pe=ue;B(pe,"MVP_MATRIX","u_projTrans"),B(pe,"POSITION","a_position"),B(pe,"COLOR","a_color"),B(pe,"COLOR2","a_color2"),B(pe,"TEXCOORDS","a_texCoords"),B(pe,"SAMPLER","u_texture");var Ki=class{constructor(e,t,i,s){this.attributes=t,this.context=e instanceof ve?e:new ve(e),this.elementsPerVertex=0;for(let n=0;n<t.length;n++)this.elementsPerVertex+=t[n].numElements;this.vertices=new Float32Array(i*this.elementsPerVertex),this.indices=new Uint16Array(s),this.context.addRestorable(this)}context;vertices;verticesBuffer=null;verticesLength=0;dirtyVertices=!1;indices;indicesBuffer=null;indicesLength=0;dirtyIndices=!1;elementsPerVertex=0;getAttributes(){return this.attributes}maxVertices(){return this.vertices.length/this.elementsPerVertex}numVertices(){return this.verticesLength/this.elementsPerVertex}setVerticesLength(e){this.dirtyVertices=!0,this.verticesLength=e}getVertices(){return this.vertices}maxIndices(){return this.indices.length}numIndices(){return this.indicesLength}setIndicesLength(e){this.dirtyIndices=!0,this.indicesLength=e}getIndices(){return this.indices}getVertexSizeInFloats(){let e=0;for(var t=0;t<this.attributes.length;t++){let i=this.attributes[t];e+=i.numElements}return e}setVertices(e){if(this.dirtyVertices=!0,e.length>this.vertices.length)throw Error("Mesh can't store more than "+this.maxVertices()+" vertices");this.vertices.set(e,0),this.verticesLength=e.length}setIndices(e){if(this.dirtyIndices=!0,e.length>this.indices.length)throw Error("Mesh can't store more than "+this.maxIndices()+" indices");this.indices.set(e,0),this.indicesLength=e.length}draw(e,t){this.drawWithOffset(e,t,0,this.indicesLength>0?this.indicesLength:this.verticesLength/this.elementsPerVertex)}drawWithOffset(e,t,i,s){let n=this.context.gl;(this.dirtyVertices||this.dirtyIndices)&&this.update(),this.bind(e),this.indicesLength>0?n.drawElements(t,s,n.UNSIGNED_SHORT,i*2):n.drawArrays(t,i,s),this.unbind(e)}bind(e){let t=this.context.gl;t.bindBuffer(t.ARRAY_BUFFER,this.verticesBuffer);let i=0;for(let s=0;s<this.attributes.length;s++){let n=this.attributes[s],h=e.getAttributeLocation(n.name);t.enableVertexAttribArray(h),t.vertexAttribPointer(h,n.numElements,t.FLOAT,!1,this.elementsPerVertex*4,i*4),i+=n.numElements}this.indicesLength>0&&t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indicesBuffer)}unbind(e){let t=this.context.gl;for(let i=0;i<this.attributes.length;i++){let s=this.attributes[i],n=e.getAttributeLocation(s.name);t.disableVertexAttribArray(n)}t.bindBuffer(t.ARRAY_BUFFER,null),this.indicesLength>0&&t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null)}update(){let e=this.context.gl;this.dirtyVertices&&(this.verticesBuffer||(this.verticesBuffer=e.createBuffer()),e.bindBuffer(e.ARRAY_BUFFER,this.verticesBuffer),e.bufferData(e.ARRAY_BUFFER,this.vertices.subarray(0,this.verticesLength),e.DYNAMIC_DRAW),this.dirtyVertices=!1),this.dirtyIndices&&(this.indicesBuffer||(this.indicesBuffer=e.createBuffer()),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,this.indicesBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,this.indices.subarray(0,this.indicesLength),e.DYNAMIC_DRAW),this.dirtyIndices=!1)}restore(){this.verticesBuffer=null,this.indicesBuffer=null,this.update()}dispose(){this.context.removeRestorable(this);let e=this.context.gl;e.deleteBuffer(this.verticesBuffer),e.deleteBuffer(this.indicesBuffer)}},ot=class{constructor(e,t,i){this.name=e,this.type=t,this.numElements=i}},Ut=class extends ot{constructor(){super(pe.POSITION,Qe.Float,2)}},dn=class extends ot{constructor(){super(pe.POSITION,Qe.Float,3)}},Qi=class extends ot{constructor(e=0){super(pe.TEXCOORDS+(e==0?"":e),Qe.Float,2)}},_t=class extends ot{constructor(){super(pe.COLOR,Qe.Float,4)}},zs=class extends ot{constructor(){super(pe.COLOR2,Qe.Float,4)}},Qe=(e=>(e[e.Float=0]="Float",e))(Qe||{}),Oe=1,fn=769,Gs=770,qs=771,Hs=774,$e=class{context;drawCalls=0;isDrawing=!1;mesh;shader=null;lastTexture=null;verticesLength=0;indicesLength=0;srcColorBlend;srcAlphaBlend;dstBlend;cullWasEnabled=!1;constructor(e,t=!0,i=10920){if(i>10920)throw new Error("Can't have more than 10920 triangles per batch: "+i);this.context=e instanceof ve?e:new ve(e);let s=t?[new Ut,new _t,new Qi,new zs]:[new Ut,new _t,new Qi];this.mesh=new Ki(e,s,i,i*3);let n=this.context.gl;this.srcColorBlend=n.SRC_ALPHA,this.srcAlphaBlend=n.ONE,this.dstBlend=n.ONE_MINUS_SRC_ALPHA}begin(e){if(this.isDrawing)throw new Error("PolygonBatch is already drawing. Call PolygonBatch.end() before calling PolygonBatch.begin()");this.drawCalls=0,this.shader=e,this.lastTexture=null,this.isDrawing=!0;let t=this.context.gl;t.enable(t.BLEND),t.blendFuncSeparate(this.srcColorBlend,this.dstBlend,this.srcAlphaBlend,this.dstBlend),$e.disableCulling&&(this.cullWasEnabled=t.isEnabled(t.CULL_FACE),this.cullWasEnabled&&t.disable(t.CULL_FACE))}setBlendMode(e,t){const i=$e.blendModesGL[e],s=t?i.srcRgbPma:i.srcRgb,n=i.srcAlpha,h=i.dstRgb;if(this.srcColorBlend==s&&this.srcAlphaBlend==n&&this.dstBlend==h)return;this.srcColorBlend=s,this.srcAlphaBlend=n,this.dstBlend=h,this.isDrawing&&this.flush(),this.context.gl.blendFuncSeparate(s,h,n,h)}draw(e,t,i){e!=this.lastTexture?(this.flush(),this.lastTexture=e):(this.verticesLength+t.length>this.mesh.getVertices().length||this.indicesLength+i.length>this.mesh.getIndices().length)&&this.flush();let s=this.mesh.numVertices();this.mesh.getVertices().set(t,this.verticesLength),this.verticesLength+=t.length,this.mesh.setVerticesLength(this.verticesLength);let n=this.mesh.getIndices();for(let h=this.indicesLength,a=0;a<i.length;h++,a++)n[h]=i[a]+s;this.indicesLength+=i.length,this.mesh.setIndicesLength(this.indicesLength)}flush(){if(this.verticesLength!=0){if(!this.lastTexture)throw new Error("No texture set.");if(!this.shader)throw new Error("No shader set.");this.lastTexture.bind(),this.mesh.draw(this.shader,this.context.gl.TRIANGLES),this.verticesLength=0,this.indicesLength=0,this.mesh.setVerticesLength(0),this.mesh.setIndicesLength(0),this.drawCalls++,$e.globalDrawCalls++}}end(){if(!this.isDrawing)throw new Error("PolygonBatch is not drawing. Call PolygonBatch.begin() before calling PolygonBatch.end()");(this.verticesLength>0||this.indicesLength>0)&&this.flush(),this.shader=null,this.lastTexture=null,this.isDrawing=!1;let e=this.context.gl;e.disable(e.BLEND),$e.disableCulling&&this.cullWasEnabled&&e.enable(e.CULL_FACE)}getDrawCalls(){return this.drawCalls}static getAndResetGlobalDrawCalls(){let e=$e.globalDrawCalls;return $e.globalDrawCalls=0,e}dispose(){this.mesh.dispose()}},ht=$e;B(ht,"disableCulling",!1),B(ht,"globalDrawCalls",0),B(ht,"blendModesGL",[{srcRgb:Gs,srcRgbPma:Oe,dstRgb:qs,srcAlpha:Oe},{srcRgb:Gs,srcRgbPma:Oe,dstRgb:Oe,srcAlpha:Oe},{srcRgb:Hs,srcRgbPma:Hs,dstRgb:qs,srcAlpha:Oe},{srcRgb:Oe,srcRgbPma:Oe,dstRgb:fn,srcAlpha:Oe}]);var $i=class{context;isDrawing=!1;mesh;shapeType=ye.Filled;color=new V(1,1,1,1);shader=null;vertexIndex=0;tmp=new je;srcColorBlend;srcAlphaBlend;dstBlend;constructor(e,t=10920){if(t>10920)throw new Error("Can't have more than 10920 triangles per batch: "+t);this.context=e instanceof ve?e:new ve(e),this.mesh=new Ki(e,[new Ut,new _t],t,0);let i=this.context.gl;this.srcColorBlend=i.SRC_ALPHA,this.srcAlphaBlend=i.ONE,this.dstBlend=i.ONE_MINUS_SRC_ALPHA}begin(e){if(this.isDrawing)throw new Error("ShapeRenderer.begin() has already been called");this.shader=e,this.vertexIndex=0,this.isDrawing=!0;let t=this.context.gl;t.enable(t.BLEND),t.blendFuncSeparate(this.srcColorBlend,this.dstBlend,this.srcAlphaBlend,this.dstBlend)}setBlendMode(e,t,i){this.srcColorBlend=e,this.srcAlphaBlend=t,this.dstBlend=i,this.isDrawing&&(this.flush(),this.context.gl.blendFuncSeparate(e,i,t,i))}setColor(e){this.color.setFromColor(e)}setColorWith(e,t,i,s){this.color.set(e,t,i,s)}point(e,t,i){this.check(ye.Point,1),i||(i=this.color),this.vertex(e,t,i)}line(e,t,i,s,n){this.check(ye.Line,2);let h=this.mesh.getVertices(),a=this.vertexIndex;n||(n=this.color),this.vertex(e,t,n),this.vertex(i,s,n)}triangle(e,t,i,s,n,h,a,r,o,l){this.check(e?ye.Filled:ye.Line,3);let c=this.mesh.getVertices(),f=this.vertexIndex;r||(r=this.color),o||(o=this.color),l||(l=this.color),e?(this.vertex(t,i,r),this.vertex(s,n,o),this.vertex(h,a,l)):(this.vertex(t,i,r),this.vertex(s,n,o),this.vertex(s,n,r),this.vertex(h,a,o),this.vertex(h,a,r),this.vertex(t,i,o))}quad(e,t,i,s,n,h,a,r,o,l,c,f,d){this.check(e?ye.Filled:ye.Line,3);let u=this.mesh.getVertices(),m=this.vertexIndex;l||(l=this.color),c||(c=this.color),f||(f=this.color),d||(d=this.color),e?(this.vertex(t,i,l),this.vertex(s,n,c),this.vertex(h,a,f),this.vertex(h,a,f),this.vertex(r,o,d),this.vertex(t,i,l)):(this.vertex(t,i,l),this.vertex(s,n,c),this.vertex(s,n,c),this.vertex(h,a,f),this.vertex(h,a,f),this.vertex(r,o,d),this.vertex(r,o,d),this.vertex(t,i,l))}rect(e,t,i,s,n,h){this.quad(e,t,i,t+s,i,t+s,i+n,t,i+n,h,h,h,h)}rectLine(e,t,i,s,n,h,a){this.check(e?ye.Filled:ye.Line,8),a||(a=this.color);let r=this.tmp.set(n-i,t-s);r.normalize(),h*=.5;let o=r.x*h,l=r.y*h;e?(this.vertex(t+o,i+l,a),this.vertex(t-o,i-l,a),this.vertex(s+o,n+l,a),this.vertex(s-o,n-l,a),this.vertex(s+o,n+l,a),this.vertex(t-o,i-l,a)):(this.vertex(t+o,i+l,a),this.vertex(t-o,i-l,a),this.vertex(s+o,n+l,a),this.vertex(s-o,n-l,a),this.vertex(s+o,n+l,a),this.vertex(t+o,i+l,a),this.vertex(s-o,n-l,a),this.vertex(t-o,i-l,a))}x(e,t,i){this.line(e-i,t-i,e+i,t+i),this.line(e-i,t+i,e+i,t-i)}polygon(e,t,i,s){if(i<3)throw new Error("Polygon must contain at least 3 vertices");this.check(ye.Line,i*2),s||(s=this.color);let n=this.mesh.getVertices(),h=this.vertexIndex;t<<=1,i<<=1;let a=e[t],r=e[t+1],o=t+i;for(let l=t,c=t+i-2;l<c;l+=2){let f=e[l],d=e[l+1],u=0,m=0;l+2>=o?(u=a,m=r):(u=e[l+2],m=e[l+3]),this.vertex(f,d,s),this.vertex(u,m,s)}}circle(e,t,i,s,n,h=0){if(h==0&&(h=Math.max(1,6*P.cbrt(s)|0)),h<=0)throw new Error("segments must be > 0.");n||(n=this.color);let a=2*P.PI/h,r=Math.cos(a),o=Math.sin(a),l=s,c=0;if(e){this.check(ye.Filled,h*3+3),h--;for(let d=0;d<h;d++){this.vertex(t,i,n),this.vertex(t+l,i+c,n);let u=l;l=r*l-o*c,c=o*u+r*c,this.vertex(t+l,i+c,n)}this.vertex(t,i,n),this.vertex(t+l,i+c,n)}else{this.check(ye.Line,h*2+2);for(let d=0;d<h;d++){this.vertex(t+l,i+c,n);let u=l;l=r*l-o*c,c=o*u+r*c,this.vertex(t+l,i+c,n)}this.vertex(t+l,i+c,n)}let f=l;l=s,c=0,this.vertex(t+l,i+c,n)}curve(e,t,i,s,n,h,a,r,o,l){this.check(ye.Line,o*2+2),l||(l=this.color);let c=1/o,f=c*c,d=c*c*c,u=3*c,m=3*f,g=6*f,b=6*d,w=e-i*2+n,p=t-s*2+h,x=(i-n)*3-e+a,y=(s-h)*3-t+r,v=e,A=t,C=(i-e)*u+w*m+x*d,S=(s-t)*u+p*m+y*d,M=w*g+x*b,R=p*g+y*b,Y=x*b,L=y*b;for(;o-- >0;)this.vertex(v,A,l),v+=C,A+=S,C+=M,S+=R,M+=Y,R+=L,this.vertex(v,A,l);this.vertex(v,A,l),this.vertex(a,r,l)}vertex(e,t,i){let s=this.vertexIndex,n=this.mesh.getVertices();n[s++]=e,n[s++]=t,n[s++]=i.r,n[s++]=i.g,n[s++]=i.b,n[s++]=i.a,this.vertexIndex=s}end(){if(!this.isDrawing)throw new Error("ShapeRenderer.begin() has not been called");this.flush();let e=this.context.gl;e.disable(e.BLEND),this.isDrawing=!1}flush(){if(this.vertexIndex!=0){if(!this.shader)throw new Error("No shader set.");this.mesh.setVerticesLength(this.vertexIndex),this.mesh.draw(this.shader,this.shapeType),this.vertexIndex=0}}check(e,t){if(!this.isDrawing)throw new Error("ShapeRenderer.begin() has not been called");if(this.shapeType==e)if(this.mesh.maxVertices()-this.mesh.numVertices()<t)this.flush();else return;else this.flush(),this.shapeType=e}dispose(){this.mesh.dispose()}},ye=(e=>(e[e.Point=0]="Point",e[e.Line=1]="Line",e[e.Filled=4]="Filled",e))(ye||{}),es=class{boneLineColor=new V(1,0,0,1);boneOriginColor=new V(0,1,0,1);attachmentLineColor=new V(0,0,1,.5);triangleLineColor=new V(1,.64,0,.5);pathColor=new V().setFromString("FF7F00");clipColor=new V(.8,0,0,2);aabbColor=new V(0,1,0,.5);drawBones=!0;drawRegionAttachments=!0;drawBoundingBoxes=!0;drawMeshHull=!0;drawMeshTriangles=!0;drawPaths=!0;drawSkeletonXY=!1;drawClipping=!0;premultipliedAlpha=!1;scale=1;boneWidth=2;context;bounds=new Ns;temp=new Array;vertices=X.newFloatArray(2*1024);constructor(e){this.context=e instanceof ve?e:new ve(e)}draw(e,t,i){let s=t.x,n=t.y,h=this.context.gl,a=this.premultipliedAlpha?h.ONE:h.SRC_ALPHA;e.setBlendMode(a,h.ONE,h.ONE_MINUS_SRC_ALPHA);let r=t.bones;if(this.drawBones){e.setColor(this.boneLineColor);for(let o=0,l=r.length;o<l;o++){let c=r[o];if(i&&i.indexOf(c.data.name)>-1||!c.parent)continue;let f=c.data.length*c.a+c.worldX,d=c.data.length*c.c+c.worldY;e.rectLine(!0,c.worldX,c.worldY,f,d,this.boneWidth*this.scale)}this.drawSkeletonXY&&e.x(s,n,4*this.scale)}if(this.drawRegionAttachments){e.setColor(this.attachmentLineColor);let o=t.slots;for(let l=0,c=o.length;l<c;l++){let f=o[l],d=f.getAttachment();if(d instanceof O){let u=d,m=this.vertices;u.computeWorldVertices(f,m,0,2),e.line(m[0],m[1],m[2],m[3]),e.line(m[2],m[3],m[4],m[5]),e.line(m[4],m[5],m[6],m[7]),e.line(m[6],m[7],m[0],m[1])}}}if(this.drawMeshHull||this.drawMeshTriangles){let o=t.slots;for(let l=0,c=o.length;l<c;l++){let f=o[l];if(!f.bone.active)continue;let d=f.getAttachment();if(!(d instanceof Be))continue;let u=d,m=this.vertices;u.computeWorldVertices(f,0,u.worldVerticesLength,m,0,2);let g=u.triangles,b=u.hullLength;if(this.drawMeshTriangles){e.setColor(this.triangleLineColor);for(let w=0,p=g.length;w<p;w+=3){let x=g[w]*2,y=g[w+1]*2,v=g[w+2]*2;e.triangle(!1,m[x],m[x+1],m[y],m[y+1],m[v],m[v+1])}}if(this.drawMeshHull&&b>0){e.setColor(this.attachmentLineColor),b=(b>>1)*2;let w=m[b-2],p=m[b-1];for(let x=0,y=b;x<y;x+=2){let v=m[x],A=m[x+1];e.line(v,A,w,p),w=v,p=A}}}}if(this.drawBoundingBoxes){let o=this.bounds;o.update(t,!0),e.setColor(this.aabbColor),e.rect(!1,o.minX,o.minY,o.getWidth(),o.getHeight());let l=o.polygons,c=o.boundingBoxes;for(let f=0,d=l.length;f<d;f++){let u=l[f];e.setColor(c[f].color),e.polygon(u,0,u.length)}}if(this.drawPaths){let o=t.slots;for(let l=0,c=o.length;l<c;l++){let f=o[l];if(!f.bone.active)continue;let d=f.getAttachment();if(!(d instanceof Ke))continue;let u=d,m=u.worldVerticesLength,g=this.temp=X.setArraySize(this.temp,m,0);u.computeWorldVertices(f,0,m,g,0,2);let b=this.pathColor,w=g[2],p=g[3],x=0,y=0;if(u.closed){e.setColor(b);let v=g[0],A=g[1],C=g[m-2],S=g[m-1];x=g[m-4],y=g[m-3],e.curve(w,p,v,A,C,S,x,y,32),e.setColor(es.LIGHT_GRAY),e.line(w,p,v,A),e.line(x,y,C,S)}m-=4;for(let v=4;v<m;v+=6){let A=g[v],C=g[v+1],S=g[v+2],M=g[v+3];x=g[v+4],y=g[v+5],e.setColor(b),e.curve(w,p,A,C,S,M,x,y,32),e.setColor(es.LIGHT_GRAY),e.line(w,p,A,C),e.line(x,y,S,M),w=x,p=y}}}if(this.drawBones){e.setColor(this.boneOriginColor);for(let o=0,l=r.length;o<l;o++){let c=r[o];i&&i.indexOf(c.data.name)>-1||e.circle(!0,c.worldX,c.worldY,3*this.scale,this.boneOriginColor,8)}}if(this.drawClipping){let o=t.slots;e.setColor(this.clipColor);for(let l=0,c=o.length;l<c;l++){let f=o[l];if(!f.bone.active)continue;let d=f.getAttachment();if(!(d instanceof rt))continue;let u=d,m=u.worldVerticesLength,g=this.temp=X.setArraySize(this.temp,m,0);u.computeWorldVertices(f,0,m,g,0,2);for(let b=0,w=g.length;b<w;b+=2){let p=g[b],x=g[b+1],y=g[(b+2)%g.length],v=g[(b+3)%g.length];e.line(p,x,y,v)}}}}dispose(){}},Wt=es;B(Wt,"LIGHT_GRAY",new V(192/255,192/255,192/255,1)),B(Wt,"GREEN",new V(0,1,0,1));var un=class{constructor(e,t,i){this.vertices=e,this.numVertices=t,this.numFloats=i}},js=class{premultipliedAlpha=!1;tempColor=new V;tempColor2=new V;vertices;vertexSize=2+2+4;twoColorTint=!1;renderable=new un([],0,0);clipper=new at;temp=new je;temp2=new je;temp3=new V;temp4=new V;constructor(e,t=!0){this.twoColorTint=t,t&&(this.vertexSize+=4),this.vertices=X.newFloatArray(this.vertexSize*1024)}draw(e,t,i=-1,s=-1,n=null){let h=this.clipper,a=this.premultipliedAlpha,r=this.twoColorTint,o=null,l=this.renderable,c,f,d=t.drawOrder,u,m=t.color,g=r?12:8,b=!1;i==-1&&(b=!0);for(let w=0,p=d.length;w<p;w++){let x=h.isClipping()?2:g,y=d[w];if(!y.bone.active){h.clipEndWithSlot(y);continue}if(i>=0&&i==y.data.index&&(b=!0),!b){h.clipEndWithSlot(y);continue}s>=0&&s==y.data.index&&(b=!1);let v=y.getAttachment(),A;if(v instanceof O){let C=v;l.vertices=this.vertices,l.numVertices=4,l.numFloats=x<<2,C.computeWorldVertices(y,l.vertices,0,x),f=js.QUAD_TRIANGLES,c=C.uvs,A=C.region.texture,u=C.color}else if(v instanceof Be){let C=v;l.vertices=this.vertices,l.numVertices=C.worldVerticesLength>>1,l.numFloats=l.numVertices*x,l.numFloats>l.vertices.length&&(l.vertices=this.vertices=X.newFloatArray(l.numFloats)),C.computeWorldVertices(y,0,C.worldVerticesLength,l.vertices,0,x),f=C.triangles,A=C.region.texture,c=C.uvs,u=C.color}else if(v instanceof rt){let C=v;h.clipStart(y,C);continue}else{h.clipEndWithSlot(y);continue}if(A){let C=y.color,S=this.tempColor;S.r=m.r*C.r*u.r,S.g=m.g*C.g*u.g,S.b=m.b*C.b*u.b,S.a=m.a*C.a*u.a,a&&(S.r*=S.a,S.g*=S.a,S.b*=S.a);let M=this.tempColor2;y.darkColor?(a?(M.r=y.darkColor.r*S.a,M.g=y.darkColor.g*S.a,M.b=y.darkColor.b*S.a):M.setFromColor(y.darkColor),M.a=a?1:0):M.set(0,0,0,1);let R=y.data.blendMode;if(R!=o&&(o=R,e.setBlendMode(o,a)),h.isClipping()){h.clipTriangles(l.vertices,f,f.length,c,S,M,r);let Y=new Float32Array(h.clippedVertices),L=h.clippedTriangles;n&&n(Y,Y.length,g),e.draw(A,Y,L)}else{let Y=l.vertices;if(r)for(let T=2,k=0,F=l.numFloats;T<F;T+=g,k+=2)Y[T]=S.r,Y[T+1]=S.g,Y[T+2]=S.b,Y[T+3]=S.a,Y[T+4]=c[k],Y[T+5]=c[k+1],Y[T+6]=M.r,Y[T+7]=M.g,Y[T+8]=M.b,Y[T+9]=M.a;else for(let T=2,k=0,F=l.numFloats;T<F;T+=g,k+=2)Y[T]=S.r,Y[T+1]=S.g,Y[T+2]=S.b,Y[T+3]=S.a,Y[T+4]=c[k],Y[T+5]=c[k+1];let L=l.vertices.subarray(0,l.numFloats);n&&n(l.vertices,l.numFloats,g),e.draw(A,L,f)}}h.clipEndWithSlot(y)}h.clipEnd()}getSkeletonClipping(){return this.clipper}},ts=js;B(ts,"QUAD_TRIANGLES",[0,1,2,2,3,0]);var I=[0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0],zt=[0,1,2,2,3,0],Gt=new V(1,1,1,1),is=class{context;canvas;camera;batcher;twoColorTint=!1;batcherShader;shapes;shapesShader;activeRenderer=null;skeletonRenderer;skeletonDebugRenderer;constructor(e,t,i=!0){this.canvas=e,this.context=t instanceof ve?t:new ve(t),this.twoColorTint=i,this.camera=new _s(e.width,e.height),this.batcherShader=i?pe.newTwoColoredTextured(this.context):pe.newColoredTextured(this.context),this.batcher=new ht(this.context,i),this.shapesShader=pe.newColored(this.context),this.shapes=new $i(this.context),this.skeletonRenderer=new ts(this.context,i),this.skeletonDebugRenderer=new Wt(this.context)}dispose(){this.batcher.dispose(),this.batcherShader.dispose(),this.shapes.dispose(),this.shapesShader.dispose(),this.skeletonDebugRenderer.dispose()}begin(){this.camera.update(),this.enableRenderer(this.batcher)}drawSkeleton(e,t=!1,i=-1,s=-1,n=null){this.enableRenderer(this.batcher),this.skeletonRenderer.premultipliedAlpha=t,this.skeletonRenderer.draw(this.batcher,e,i,s,n)}drawSkeletonDebug(e,t=!1,i){this.enableRenderer(this.shapes),this.skeletonDebugRenderer.premultipliedAlpha=t,this.skeletonDebugRenderer.draw(this.shapes,e,i)}drawTexture(e,t,i,s,n,h){this.enableRenderer(this.batcher),h||(h=Gt);var a=0;I[a++]=t,I[a++]=i,I[a++]=h.r,I[a++]=h.g,I[a++]=h.b,I[a++]=h.a,I[a++]=0,I[a++]=1,this.twoColorTint&&(I[a++]=0,I[a++]=0,I[a++]=0,I[a++]=0),I[a++]=t+s,I[a++]=i,I[a++]=h.r,I[a++]=h.g,I[a++]=h.b,I[a++]=h.a,I[a++]=1,I[a++]=1,this.twoColorTint&&(I[a++]=0,I[a++]=0,I[a++]=0,I[a++]=0),I[a++]=t+s,I[a++]=i+n,I[a++]=h.r,I[a++]=h.g,I[a++]=h.b,I[a++]=h.a,I[a++]=1,I[a++]=0,this.twoColorTint&&(I[a++]=0,I[a++]=0,I[a++]=0,I[a++]=0),I[a++]=t,I[a++]=i+n,I[a++]=h.r,I[a++]=h.g,I[a++]=h.b,I[a++]=h.a,I[a++]=0,I[a++]=0,this.twoColorTint&&(I[a++]=0,I[a++]=0,I[a++]=0,I[a]=0),this.batcher.draw(e,I,zt)}drawTextureUV(e,t,i,s,n,h,a,r,o,l){this.enableRenderer(this.batcher),l||(l=Gt);var c=0;I[c++]=t,I[c++]=i,I[c++]=l.r,I[c++]=l.g,I[c++]=l.b,I[c++]=l.a,I[c++]=h,I[c++]=a,this.twoColorTint&&(I[c++]=0,I[c++]=0,I[c++]=0,I[c++]=0),I[c++]=t+s,I[c++]=i,I[c++]=l.r,I[c++]=l.g,I[c++]=l.b,I[c++]=l.a,I[c++]=r,I[c++]=a,this.twoColorTint&&(I[c++]=0,I[c++]=0,I[c++]=0,I[c++]=0),I[c++]=t+s,I[c++]=i+n,I[c++]=l.r,I[c++]=l.g,I[c++]=l.b,I[c++]=l.a,I[c++]=r,I[c++]=o,this.twoColorTint&&(I[c++]=0,I[c++]=0,I[c++]=0,I[c++]=0),I[c++]=t,I[c++]=i+n,I[c++]=l.r,I[c++]=l.g,I[c++]=l.b,I[c++]=l.a,I[c++]=h,I[c++]=o,this.twoColorTint&&(I[c++]=0,I[c++]=0,I[c++]=0,I[c]=0),this.batcher.draw(e,I,zt)}drawTextureRotated(e,t,i,s,n,h,a,r,o){this.enableRenderer(this.batcher),o||(o=Gt);let l=t+h,c=i+a,f=-h,d=-a,u=s-h,m=n-a,g=f,b=d,w=f,p=m,x=u,y=m,v=u,A=d,C=0,S=0,M=0,R=0,Y=0,L=0,T=0,k=0;if(r!=0){let se=P.cosDeg(r),re=P.sinDeg(r);C=se*g-re*b,S=re*g+se*b,T=se*w-re*p,k=re*w+se*p,Y=se*x-re*y,L=re*x+se*y,M=Y+(C-T),R=L+(S-k)}else C=g,S=b,T=w,k=p,Y=x,L=y,M=v,R=A;C+=l,S+=c,M+=l,R+=c,Y+=l,L+=c,T+=l,k+=c;var F=0;I[F++]=C,I[F++]=S,I[F++]=o.r,I[F++]=o.g,I[F++]=o.b,I[F++]=o.a,I[F++]=0,I[F++]=1,this.twoColorTint&&(I[F++]=0,I[F++]=0,I[F++]=0,I[F++]=0),I[F++]=M,I[F++]=R,I[F++]=o.r,I[F++]=o.g,I[F++]=o.b,I[F++]=o.a,I[F++]=1,I[F++]=1,this.twoColorTint&&(I[F++]=0,I[F++]=0,I[F++]=0,I[F++]=0),I[F++]=Y,I[F++]=L,I[F++]=o.r,I[F++]=o.g,I[F++]=o.b,I[F++]=o.a,I[F++]=1,I[F++]=0,this.twoColorTint&&(I[F++]=0,I[F++]=0,I[F++]=0,I[F++]=0),I[F++]=T,I[F++]=k,I[F++]=o.r,I[F++]=o.g,I[F++]=o.b,I[F++]=o.a,I[F++]=0,I[F++]=0,this.twoColorTint&&(I[F++]=0,I[F++]=0,I[F++]=0,I[F]=0),this.batcher.draw(e,I,zt)}drawRegion(e,t,i,s,n,h){this.enableRenderer(this.batcher),h||(h=Gt);var a=0;I[a++]=t,I[a++]=i,I[a++]=h.r,I[a++]=h.g,I[a++]=h.b,I[a++]=h.a,I[a++]=e.u,I[a++]=e.v2,this.twoColorTint&&(I[a++]=0,I[a++]=0,I[a++]=0,I[a++]=0),I[a++]=t+s,I[a++]=i,I[a++]=h.r,I[a++]=h.g,I[a++]=h.b,I[a++]=h.a,I[a++]=e.u2,I[a++]=e.v2,this.twoColorTint&&(I[a++]=0,I[a++]=0,I[a++]=0,I[a++]=0),I[a++]=t+s,I[a++]=i+n,I[a++]=h.r,I[a++]=h.g,I[a++]=h.b,I[a++]=h.a,I[a++]=e.u2,I[a++]=e.v,this.twoColorTint&&(I[a++]=0,I[a++]=0,I[a++]=0,I[a++]=0),I[a++]=t,I[a++]=i+n,I[a++]=h.r,I[a++]=h.g,I[a++]=h.b,I[a++]=h.a,I[a++]=e.u,I[a++]=e.v,this.twoColorTint&&(I[a++]=0,I[a++]=0,I[a++]=0,I[a]=0),this.batcher.draw(e.page.texture,I,zt)}line(e,t,i,s,n,h){this.enableRenderer(this.shapes),this.shapes.line(e,t,i,s,n)}triangle(e,t,i,s,n,h,a,r,o,l){this.enableRenderer(this.shapes),this.shapes.triangle(e,t,i,s,n,h,a,r,o,l)}quad(e,t,i,s,n,h,a,r,o,l,c,f,d){this.enableRenderer(this.shapes),this.shapes.quad(e,t,i,s,n,h,a,r,o,l,c,f,d)}rect(e,t,i,s,n,h){this.enableRenderer(this.shapes),this.shapes.rect(e,t,i,s,n,h)}rectLine(e,t,i,s,n,h,a){this.enableRenderer(this.shapes),this.shapes.rectLine(e,t,i,s,n,h,a)}polygon(e,t,i,s){this.enableRenderer(this.shapes),this.shapes.polygon(e,t,i,s)}circle(e,t,i,s,n,h=0){this.enableRenderer(this.shapes),this.shapes.circle(e,t,i,s,n,h)}curve(e,t,i,s,n,h,a,r,o,l){this.enableRenderer(this.shapes),this.shapes.curve(e,t,i,s,n,h,a,r,o,l)}end(){this.activeRenderer===this.batcher?this.batcher.end():this.activeRenderer===this.shapes&&this.shapes.end(),this.activeRenderer=null}resize(e){let t=this.canvas;var i=window.devicePixelRatio||1,s=Math.round(t.clientWidth*i),n=Math.round(t.clientHeight*i);if((t.width!=s||t.height!=n)&&(t.width=s,t.height=n),this.context.gl.viewport(0,0,t.width,t.height),e===qt.Expand)this.camera.setViewport(s,n);else if(e===qt.Fit){let h=t.width,a=t.height,r=this.camera.viewportWidth,o=this.camera.viewportHeight,l=o/r,c=a/h,f=l<c?r/h:o/a;this.camera.setViewport(h*f,a*f)}this.camera.update()}enableRenderer(e){this.activeRenderer!==e&&(this.end(),e instanceof ht?(this.batcherShader.bind(),this.batcherShader.setUniform4x4f(pe.MVP_MATRIX,this.camera.projectionView.values),this.batcherShader.setUniformi("u_texture",0),this.batcher.begin(this.batcherShader),this.activeRenderer=this.batcher):e instanceof $i?(this.shapesShader.bind(),this.shapesShader.setUniform4x4f(pe.MVP_MATRIX,this.camera.projectionView.values),this.shapes.begin(this.shapesShader),this.activeRenderer=this.shapes):this.activeRenderer=this.skeletonDebugRenderer)}},qt=(e=>(e[e.Stretch=0]="Stretch",e[e.Expand=1]="Expand",e[e.Fit=2]="Fit",e))(qt||{}),bt,ct,Zs=0,mn=1,ss=1,Js=165,Ks=108,et=163,gn=class{renderer;logo=null;spinner=null;angle=0;fadeOut=0;fadeIn=0;timeKeeper=new Qt;backgroundColor=new V(.135,.135,.135,1);tempColor=new V;constructor(e){if(this.renderer=e,this.timeKeeper.maxDelta=9,!ct){let t=navigator.userAgent.indexOf("Safari")>-1,i=()=>Zs++;ct=new Image,ct.src=xn,t||(ct.crossOrigin="anonymous"),ct.onload=i,bt=new Image,bt.src=pn,t||(bt.crossOrigin="anonymous"),bt.onload=i}}dispose(){this.logo?.dispose(),this.spinner?.dispose()}draw(e=!1){if(Zs<2||e&&this.fadeOut>ss)return;this.timeKeeper.update();let t=Math.abs(Math.sin(this.timeKeeper.totalTime+.25));this.angle-=this.timeKeeper.delta*200*(1+1.5*Math.pow(t,5));let i=this.tempColor,s=this.renderer,n=s.canvas,h=s.context.gl;if(s.resize(1),s.camera.position.set(n.width/2,n.height/2,0),s.batcher.setBlendMode(0,!0),e){if(this.fadeOut+=this.timeKeeper.delta*(this.timeKeeper.totalTime<1?2:1),this.fadeOut>ss)return;i.setFromColor(this.backgroundColor),t=1-this.fadeOut/ss,t=1-(t-1)*(t-1),i.a*=t,i.a>0&&(s.camera.zoom=1,s.begin(),s.quad(!0,0,0,n.width,0,n.width,n.height,0,n.height,i,i,i,i),s.end())}else this.fadeIn+=this.timeKeeper.delta,this.backgroundColor.a>0&&(h.clearColor(this.backgroundColor.r,this.backgroundColor.g,this.backgroundColor.b,this.backgroundColor.a),h.clear(h.COLOR_BUFFER_BIT)),t=1;t*=Math.min(this.fadeIn/mn,1),i.set(t,t,t,t),this.logo||(this.logo=new lt(s.context,ct),this.spinner=new lt(s.context,bt)),s.camera.zoom=Math.max(1,et/n.height),s.begin(),s.drawTexture(this.logo,(n.width-Js)/2,(n.height-Ks)/2,Js,Ks,i),this.spinner&&s.drawTextureRotated(this.spinner,(n.width-et)/2,(n.height-et)/2,et,et,et/2,et/2,this.angle,i),s.end()}},pn="data:image/png;base64,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",xn="data:image/png;base64,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",wn=class{constructor(e,t){this.config=t,t.pathPrefix||(t.pathPrefix=""),t.app||(t.app={loadAssets:()=>{},initialize:()=>{},update:()=>{},render:()=>{},error:()=>{},dispose:()=>{}}),t.webglConfig||(t.webglConfig={alpha:!0}),this.htmlCanvas=e,this.context=new ve(e,t.webglConfig),this.renderer=new is(e,this.context),this.gl=this.context.gl,this.assetManager=new Us(this.context,t.pathPrefix),this.input=new Ji(e),t.app.loadAssets&&t.app.loadAssets(this);let i=()=>{this.disposed||(requestAnimationFrame(i),this.time.update(),t.app.update&&t.app.update(this,this.time.delta),t.app.render&&t.app.render(this))},s=()=>{if(!this.disposed){if(this.assetManager.isLoadingComplete()){this.assetManager.hasErrors()?t.app.error&&t.app.error(this,this.assetManager.getErrors()):(t.app.initialize&&t.app.initialize(this),i());return}requestAnimationFrame(s)}};requestAnimationFrame(s)}context;time=new Qt;htmlCanvas;gl;renderer;assetManager;input;disposed=!1;clear(e,t,i,s){this.gl.clearColor(e,t,i,s),this.gl.clear(this.gl.COLOR_BUFFER_BIT)}dispose(){this.config.app.dispose&&this.config.app.dispose(this),this.disposed=!0}},qe=Phaser.GameObjects.Components,Qs=qe.ComputedSize,$s=qe.Depth,er=qe.Flip,tr=qe.ScrollFactor,ir=qe.Transform,sr=qe.Visible,rr=qe.Origin,nr=qe.Alpha;function Ne(...e){return t=>(Phaser.Class.mixin(t,e),t)}var ar=Ne(Qs),lr=Ne($s),or=Ne(er),hr=Ne(tr),cr=Ne(ir),dr=Ne(sr),fr=Ne(rr),ur=Ne(nr),bn=class extends Phaser.GameObjects.GameObject{constructor(e,t){super(e,t)}},vn=class{constructor(e,t,i,s){this.x=e,this.y=t,this.width=i,this.height=s}calculateBounds(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},mr=class{constructor(e=!1){this.clipping=e}calculateBounds(e){if(!e.skeleton)return{x:0,y:0,width:0,height:0};const t=new ze(e.skeleton.data);t.setToSetupPose(),t.updateWorldTransform(2);const i=t.getBoundsRect(this.clipping?new at:void 0);return i.width==Number.NEGATIVE_INFINITY?{x:0,y:0,width:0,height:0}:i}},yn=class{constructor(e,t=[],i=.05,s=!1){this.animation=e,this.skins=t,this.timeStep=i,this.clipping=s}calculateBounds(e){if(!e.skeleton||!e.animationState)return{x:0,y:0,width:0,height:0};const t=new kt(e.animationState.data),i=new ze(e.skeleton.data),s=this.clipping?new at:void 0,n=i.data;if(this.skins.length>0){let a=new wt("custom-skin");for(const r of this.skins){const o=n.findSkin(r);o!=null&&a.addSkin(o)}i.setSkin(a)}i.setToSetupPose();const h=this.animation!=null?n.findAnimation(this.animation):null;if(h==null){i.updateWorldTransform(2);const a=i.getBoundsRect(s);return a.width==Number.NEGATIVE_INFINITY?{x:0,y:0,width:0,height:0}:a}else{let a=Number.POSITIVE_INFINITY,r=Number.POSITIVE_INFINITY,o=Number.NEGATIVE_INFINITY,l=Number.NEGATIVE_INFINITY;t.clearTracks(),t.setAnimationWith(0,h,!1);const c=Math.max(h.duration/this.timeStep,1);for(let d=0;d<c;d++){const u=d>0?this.timeStep:0;t.update(u),t.apply(i),i.update(u),i.updateWorldTransform(2);const m=i.getBoundsRect(s);a=Math.min(a,m.x),r=Math.min(r,m.y),o=Math.max(o,m.x+m.width),l=Math.max(l,m.y+m.height)}const f={x:a,y:r,width:o-a,height:l-r};return f.width==Number.NEGATIVE_INFINITY?{x:0,y:0,width:0,height:0}:f}}},rs=class extends lr(fr(ar(or(hr(cr(dr(ur(bn)))))))){constructor(e,t,i,s,n,h,a=new mr){super(e,window.SPINE_GAME_OBJECT_TYPE?window.SPINE_GAME_OBJECT_TYPE:Jt),this.plugin=t,this.boundsProvider=a,this.setPosition(i,s),this.premultipliedAlpha=this.plugin.isAtlasPremultiplied(h),this.skeleton=this.plugin.createSkeleton(n,h),this.animationStateData=new Ts(this.skeleton.data),this.animationState=new kt(this.animationStateData),this.skeleton.updateWorldTransform(2),this.updateSize()}blendMode=-1;skeleton;animationStateData;animationState;beforeUpdateWorldTransforms=()=>{};afterUpdateWorldTransforms=()=>{};premultipliedAlpha=!1;offsetX=0;offsetY=0;updateSize(){if(!this.skeleton)return;let e=this.boundsProvider.calculateBounds(this);this.width=e.width,this.height=e.height,this.setDisplayOrigin(-e.x,-e.y),this.offsetX=-e.x,this.offsetY=-e.y}skeletonToPhaserWorldCoordinates(e){let t=this.getWorldTransformMatrix(),i=t.a,s=t.b,n=t.c,h=t.d,a=t.tx,r=t.ty,o=e.x,l=e.y;e.x=o*i+l*n+a,e.y=o*s+l*h+r}phaserWorldCoordinatesToSkeleton(e){let t=this.getWorldTransformMatrix();t=t.invert();let i=t.a,s=t.b,n=t.c,h=t.d,a=t.tx,r=t.ty,o=e.x,l=e.y;e.x=o*i+l*n+a,e.y=o*s+l*h+r}phaserWorldCoordinatesToBone(e,t){this.phaserWorldCoordinatesToSkeleton(e),t.parent?t.parent.worldToLocal(e):t.worldToLocal(e)}updatePose(e){this.animationState.update(e/1e3),this.animationState.apply(this.skeleton),this.beforeUpdateWorldTransforms(this),this.skeleton.update(e/1e3),this.skeleton.updateWorldTransform(2),this.afterUpdateWorldTransforms(this)}preUpdate(e,t){!this.skeleton||!this.animationState||this.updatePose(t)}preDestroy(){}willRender(e){var t=15,i=!this.skeleton||!(t!==this.renderFlags||this.cameraFilter!==0&&this.cameraFilter&e.id);if(this.visible||(i=!1),!i&&this.parentContainer&&this.plugin.webGLRenderer){var s=this.plugin.webGLRenderer;this.plugin.gl&&this.plugin.phaserRenderer instanceof Phaser.Renderer.WebGL.WebGLRenderer&&s.batcher.isDrawing&&(s.end(),this.plugin.phaserRenderer.pipelines.rebind())}return i}renderWebGL(e,t,i,s){if(!this.skeleton||!this.animationState||!this.plugin.webGLRenderer)return;let n=this.plugin.webGLRenderer;e.newType&&(e.pipelines.clear(),n.begin()),i.addToRenderList(t);let h=Phaser.GameObjects.GetCalcMatrix(t,i,s).calc,a=h.a,r=h.b,o=h.c,l=h.d,c=h.tx,f=h.ty,d=t.offsetX-t.displayOriginX,u=t.offsetY-t.displayOriginY;n.drawSkeleton(t.skeleton,t.premultipliedAlpha,-1,-1,(m,g,b)=>{for(let w=0;w<g;w+=b){let p=m[w]+d,x=m[w+1]+u;m[w]=p*a+x*o+c,m[w+1]=p*r+x*l+f}}),e.nextTypeMatch||(n.end(),e.pipelines.rebind())}renderCanvas(e,t,i,s){if(!this.skeleton||!this.animationState||!this.plugin.canvasRenderer)return;let n=e.currentContext,h=this.plugin.canvasRenderer;h.ctx=n,i.addToRenderList(t);let a=Phaser.GameObjects.GetCalcMatrix(t,i,s).calc,r=this.skeleton;r.x=a.tx,r.y=a.ty,r.scaleX=a.scaleX,r.scaleY=a.scaleY;let o=r.getRootBone();o.rotation=-P.radiansToDegrees*a.rotationNormalized,this.skeleton.updateWorldTransform(2),n.save(),h.draw(r),n.restore()}},An=class extends Pt{constructor(e){super(e)}setFilters(e,t){}setWraps(e,t){}dispose(){}},Cn=X.newFloatArray(8),Ht=class{ctx;triangleRendering=!1;debugRendering=!1;vertices=X.newFloatArray(8*1024);tempColor=new V;constructor(e){this.ctx=e}draw(e){this.triangleRendering?this.drawTriangles(e):this.drawImages(e)}drawImages(e){let t=this.ctx,i=this.tempColor,s=e.color,n=e.drawOrder;this.debugRendering&&(t.strokeStyle="green");for(let h=0,a=n.length;h<a;h++){let r=n[h],o=r.bone;if(!o.active)continue;let l=r.getAttachment();if(!(l instanceof O))continue;l.computeWorldVertices(r,Cn,0,2);let c=l.region,f=c.texture.getImage(),d=r.color,u=l.color;i.set(s.r*d.r*u.r,s.g*d.g*u.g,s.b*d.b*u.b,s.a*d.a*u.a),t.save(),t.transform(o.a,o.c,o.b,o.d,o.worldX,o.worldY),t.translate(l.offset[0],l.offset[1]),t.rotate(l.rotation*Math.PI/180);let m=l.width/c.originalWidth;t.scale(m*l.scaleX,m*l.scaleY);let g=c.width,b=c.height;if(t.translate(g/2,b/2),l.region.degrees==90){let w=g;g=b,b=w,t.rotate(-Math.PI/2)}t.scale(1,-1),t.translate(-g/2,-b/2),t.globalAlpha=i.a,t.drawImage(f,f.width*c.u,f.height*c.v,g,b,0,0,g,b),this.debugRendering&&t.strokeRect(0,0,g,b),t.restore()}}drawTriangles(e){let t=this.ctx,i=this.tempColor,s=e.color,n=e.drawOrder,h=null,a=this.vertices,r=null;for(let l=0,c=n.length;l<c;l++){let f=n[l],d=f.getAttachment(),u,m;if(d instanceof O){let g=d;a=this.computeRegionVertices(f,g,!1),r=Ht.QUAD_TRIANGLES,u=g.region.texture.getImage()}else if(d instanceof Be){let g=d;a=this.computeMeshVertices(f,g,!1),r=g.triangles,u=g.region.texture.getImage()}else continue;if(u){f.data.blendMode!=h&&(h=f.data.blendMode);let g=f.color,b=d.color;i.set(s.r*g.r*b.r,s.g*g.g*b.g,s.b*g.b*b.b,s.a*g.a*b.a),t.globalAlpha=i.a;for(var o=0;o<r.length;o+=3){let w=r[o]*8,p=r[o+1]*8,x=r[o+2]*8,y=a[w],v=a[w+1],A=a[w+6],C=a[w+7],S=a[p],M=a[p+1],R=a[p+6],Y=a[p+7],L=a[x],T=a[x+1],k=a[x+6],F=a[x+7];this.drawTriangle(u,y,v,A,C,S,M,R,Y,L,T,k,F),this.debugRendering&&(t.strokeStyle="green",t.beginPath(),t.moveTo(y,v),t.lineTo(S,M),t.lineTo(L,T),t.lineTo(y,v),t.stroke())}}}this.ctx.globalAlpha=1}drawTriangle(e,t,i,s,n,h,a,r,o,l,c,f,d){let u=this.ctx;const m=e.width-1,g=e.height-1;s*=m,n*=g,r*=m,o*=g,f*=m,d*=g,u.beginPath(),u.moveTo(t,i),u.lineTo(h,a),u.lineTo(l,c),u.closePath(),h-=t,a-=i,l-=t,c-=i,r-=s,o-=n,f-=s,d-=n;let b=r*d-f*o;if(b==0)return;b=1/b;const w=(d*h-o*l)*b,p=(d*a-o*c)*b,x=(r*l-f*h)*b,y=(r*c-f*a)*b,v=t-w*s-x*n,A=i-p*s-y*n;u.save(),u.transform(w,p,x,y,v,A),u.clip(),u.drawImage(e,0,0),u.restore()}computeRegionVertices(e,t,i){let s=e.bone.skeleton.color,n=e.color,h=t.color,a=s.a*n.a*h.a,r=i?a:1,o=this.tempColor;o.set(s.r*n.r*h.r*r,s.g*n.g*h.g*r,s.b*n.b*h.b*r,a),t.computeWorldVertices(e,this.vertices,0,Ht.VERTEX_SIZE);let l=this.vertices,c=t.uvs;return l[O.C1R]=o.r,l[O.C1G]=o.g,l[O.C1B]=o.b,l[O.C1A]=o.a,l[O.U1]=c[0],l[O.V1]=c[1],l[O.C2R]=o.r,l[O.C2G]=o.g,l[O.C2B]=o.b,l[O.C2A]=o.a,l[O.U2]=c[2],l[O.V2]=c[3],l[O.C3R]=o.r,l[O.C3G]=o.g,l[O.C3B]=o.b,l[O.C3A]=o.a,l[O.U3]=c[4],l[O.V3]=c[5],l[O.C4R]=o.r,l[O.C4G]=o.g,l[O.C4B]=o.b,l[O.C4A]=o.a,l[O.U4]=c[6],l[O.V4]=c[7],l}computeMeshVertices(e,t,i){let s=e.bone.skeleton.color,n=e.color,h=t.color,a=s.a*n.a*h.a,r=i?a:1,o=this.tempColor;o.set(s.r*n.r*h.r*r,s.g*n.g*h.g*r,s.b*n.b*h.b*r,a);let l=t.worldVerticesLength/2,c=this.vertices;c.length<t.worldVerticesLength&&(this.vertices=c=X.newFloatArray(t.worldVerticesLength)),t.computeWorldVertices(e,0,t.worldVerticesLength,c,0,Ht.VERTEX_SIZE);let f=t.uvs;for(let d=0,u=0,m=2;d<l;d++)c[m++]=o.r,c[m++]=o.g,c[m++]=o.b,c[m++]=o.a,c[m++]=f[u++],c[m++]=f[u++],m+=2;return c}},ns=Ht;B(ns,"QUAD_TRIANGLES",[0,1,2,2,3,0]),B(ns,"VERTEX_SIZE",2+2+4);var vt=class extends Ce.Plugins.ScenePlugin{game;isWebGL;gl;get webGLRenderer(){return vt.gameWebGLRenderer}canvasRenderer;phaserRenderer;skeletonDataCache;atlasCache;constructor(e,t,i){super(e,t,i),this.game=t.game,this.isWebGL=this.game.config.renderType===2,this.gl=this.isWebGL?this.game.renderer.gl:null,this.phaserRenderer=this.game.renderer,this.canvasRenderer=null,this.skeletonDataCache=this.game.cache.addCustom(wr),this.atlasCache=this.game.cache.addCustom(br);let s=function(o,l,c){let f=new gr(this,o,l,as.json,c);return this.addFile(f.files),this};t.registerFileType("spineJson",s,e);let n=function(o,l,c){let f=new gr(this,o,l,as.binary,c);return this.addFile(f.files),this};t.registerFileType("spineBinary",n,e);let h=function(o,l,c,f){let d=new Sn(this,o,l,c,f);return this.addFile(d.files),this};t.registerFileType("spineAtlas",h,e);let a=function(o,l,c,f,d){this.scene.sys.renderer instanceof Ce.Renderer.WebGL.WebGLRenderer&&this.scene.sys.renderer.pipelines.clear();const u=this.scene.sys[i];let m=new rs(this.scene,u,o,l,c,f,d);return this.displayList.add(m),this.updateList.add(m),this.scene.sys.renderer instanceof Ce.Renderer.WebGL.WebGLRenderer&&this.scene.sys.renderer.pipelines.rebind(),m},r=function(o,l=!1){this.scene.sys.renderer instanceof Ce.Renderer.WebGL.WebGLRenderer&&this.scene.sys.renderer.pipelines.clear();let c=o.x?o.x:0,f=o.y?o.y:0,d=o.boundsProvider?o.boundsProvider:void 0;const u=this.scene.sys[i];let m=new rs(this.scene,u,c,f,o.dataKey,o.atlasKey,d);return l!==void 0&&(o.add=l),this.scene.sys.renderer instanceof Ce.Renderer.WebGL.WebGLRenderer&&this.scene.sys.renderer.pipelines.rebind(),Ce.GameObjects.BuildGameObject(this.scene,m,o)};t.registerGameObject(window.SPINE_GAME_OBJECT_TYPE?window.SPINE_GAME_OBJECT_TYPE:Jt,a,r)}boot(){ze.yDown=!0,this.isWebGL?(vt.gameWebGLRenderer||(vt.gameWebGLRenderer=new is(this.game.renderer.canvas,this.gl,!0)),this.onResize(),this.game.scale.on(Ce.Scale.Events.RESIZE,this.onResize,this)):this.canvasRenderer||(this.canvasRenderer=new ns(this.scene.sys.context));var e=this.systems.events;e.once("shutdown",this.shutdown,this),e.once("destroy",this.destroy,this),this.game.events.once("destroy",this.gameDestroy,this)}onResize(){var e=this.game.renderer,t=this.webGLRenderer;if(e&&t){var i=e.width,s=e.height;t.camera.position.x=i/2,t.camera.position.y=s/2,t.camera.up.y=-1,t.camera.direction.z=1,t.camera.setViewport(i,s)}}shutdown(){this.systems.events.off("shutdown",this.shutdown,this),this.isWebGL&&this.game.scale.off(Ce.Scale.Events.RESIZE,this.onResize,this)}destroy(){this.shutdown()}gameDestroy(){this.pluginManager.removeGameObject(window.SPINE_GAME_OBJECT_TYPE?window.SPINE_GAME_OBJECT_TYPE:Jt,!0,!0),this.webGLRenderer&&this.webGLRenderer.dispose(),vt.gameWebGLRenderer=null}getAtlas(e){let t;if(this.atlasCache.exists(e))t=this.atlasCache.get(e);else{let i=this.game.cache.text.get(e);if(t=new Fi(i.data),this.isWebGL){let s=this.gl;const n=s.getParameter(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL);n&&s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1);for(let h of t.pages)h.setTexture(new lt(s,this.game.textures.get(e+"!"+h.name).getSourceImage(),!1));n&&s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}else for(let s of t.pages)s.setTexture(new An(this.game.textures.get(e+"!"+s.name).getSourceImage()));this.atlasCache.add(e,t)}return t}isAtlasPremultiplied(e){let t=this.game.cache.text.get(e);return t?t.premultipliedAlpha:!1}getSkeletonData(e,t){const i=this.getAtlas(t),s=e+t;let n;if(this.skeletonDataCache.exists(s))n=this.skeletonDataCache.get(s);else{if(this.game.cache.json.exists(e)){let h=this.game.cache.json.get(e);n=new Ds(new Xi(i)).readSkeletonData(h)}else{let h=this.game.cache.binary.get(e);n=new Vs(new Xi(i)).readSkeletonData(new Uint8Array(h))}this.skeletonDataCache.add(s,n)}return n}createSkeleton(e,t){return new ze(this.getSkeletonData(e,t))}},yt=vt;B(yt,"gameWebGLRenderer",null),B(yt,"rendererId",0);var as=(e=>(e[e.json=0]="json",e[e.binary=1]="binary",e))(as||{}),gr=class extends Ce.Loader.MultiFile{constructor(e,t,i,s,n){if(typeof t!="string"){const r=t;t=r.key,i=r.url,s=r.type==="spineJson"?0:1,n=r.xhrSettings}let h=null;s==0?h=new Ce.Loader.FileTypes.JSONFile(e,{key:t,url:i,extension:"json",xhrSettings:n}):h=new Ce.Loader.FileTypes.BinaryFile(e,{key:t,url:i,extension:"skel",xhrSettings:n}),super(e,vr,t,[h]),this.fileType=s}onFileComplete(e){this.pending--}addToCache(){this.isReadyToProcess()&&this.files[0].addToCache()}},Sn=class extends Ce.Loader.MultiFile{constructor(e,t,i,s,n){if(typeof t!="string"){const h=t;t=h.key,i=h.url,s=h.premultipliedAlpha,n=h.xhrSettings}super(e,yr,t,[new Ce.Loader.FileTypes.TextFile(e,{key:t,url:i,xhrSettings:n,extension:"atlas"})]),this.premultipliedAlpha=s}onFileComplete(e){if(this.files.indexOf(e)!=-1&&(this.pending--,e.type=="text")){var t=e.data.split(/\r\n|\r|\n/);let o=[];o.push(t[0]);for(var i=1;i<t.length;i++){var s=t[i];s.trim()===""&&i<t.length-1&&(s=t[i+1],o.push(s))}let l=e.src.match(/^.*\//)??"";for(var n=0;n<o.length;n++){var h=l+o[n],a=e.key+"!"+o[n],r=new Ce.Loader.FileTypes.ImageFile(this.loader,a,h);this.loader.keyExists(r)||(this.addToMultiFile(r),this.loader.addFile(r))}}}addToCache(){if(this.isReadyToProcess()){let e=this.loader.textureManager;for(let t of this.files)t.type=="image"?e.exists(t.key)||e.addImage(t.key,t.data):(this.premultipliedAlpha=this.premultipliedAlpha??(t.data.indexOf("pma: true")>=0||t.data.indexOf("pma:true")>=0),t.data={data:t.data,premultipliedAlpha:this.premultipliedAlpha},t.addToCache())}}};window.spine={SpinePlugin:yt},window["spine.SpinePlugin"]=yt;export{vn as AABBRectangleBoundsProvider,nr as Alpha,ur as AlphaMixin,ui as AlphaTimeline,Tt as Animation,kt as AnimationState,Tr as AnimationStateAdapter,Ts as AnimationStateData,Us as AssetManager,Ys as AssetManagerBase,Xi as AtlasAttachmentLoader,$t as Attachment,Ze as AttachmentTimeline,Os as BinaryInput,Nt as BlendMode,Vi as Bone,Bi as BoneData,Lt as BoundingBoxAttachment,Is as CURRENT,cn as CameraController,rt as ClippingAttachment,V as Color,zs as Color2Attribute,_t as ColorAttribute,Qs as ComputedSize,ar as ComputedSizeMixin,xt as ConstraintData,Ye as CurveTimeline,Ee as CurveTimeline1,Et as CurveTimeline2,Sr as DebugUtils,pi as DeformTimeline,$s as Depth,lr as DepthMixin,Oi as Downloader,Je as DrawOrderTimeline,Ni as Event,Di as EventData,Cs as EventQueue,gt as EventTimeline,Se as EventType,Ri as FIRST,Er as FakeTexture,er as Flip,or as FlipMixin,lt as GLTexture,Ft as HOLD_FIRST,Ss as HOLD_MIX,ki as HOLD_SUBSEQUENT,Fs as IkConstraint,Ui as IkConstraintData,xi as IkConstraintTimeline,pt as Inherit,ci as InheritTimeline,Ji as Input,Ar as IntSet,fs as Interpolation,gn as LoadingScreen,N as M00,q as M01,H as M02,D as M03,j as M10,U as M11,Z as M12,_ as M13,J as M20,K as M21,W as M22,z as M23,$ as M30,ee as M31,te as M32,Q as M33,ve as ManagedWebGLRenderingContext,P as MathUtils,Ve as Matrix4,Ki as Mesh,Be as MeshAttachment,xs as MixBlend,ws as MixDirection,rr as Origin,fr as OriginMixin,_s as OrthoCamera,Ke as PathAttachment,nt as PathConstraint,_i as PathConstraintData,yi as PathConstraintMixTimeline,bi as PathConstraintPositionTimeline,vi as PathConstraintSpacingTimeline,Xs as Physics,Si as PhysicsConstraintDampingTimeline,Ei as PhysicsConstraintGravityTimeline,Ai as PhysicsConstraintInertiaTimeline,Ii as PhysicsConstraintMassTimeline,Mi as PhysicsConstraintMixTimeline,Mt as PhysicsConstraintResetTimeline,Ci as PhysicsConstraintStrengthTimeline,Ue as PhysicsConstraintTimeline,Ti as PhysicsConstraintWindTimeline,Pi as PointAttachment,ht as PolygonBatcher,ut as Pool,Ut as Position2Attribute,dn as Position3Attribute,Bt as PositionMode,us as Pow,Cr as PowOut,gi as RGB2Timeline,mi as RGBA2Timeline,di as RGBATimeline,fi as RGBTimeline,O as RegionAttachment,qt as ResizeMode,Ot as RotateMode,mt as RotateTimeline,Yi as SETUP,Yt as SUBSEQUENT,ri as ScaleTimeline,ni as ScaleXTimeline,ai as ScaleYTimeline,is as SceneRenderer,tr as ScrollFactor,hr as ScrollFactorMixin,st as SequenceTimeline,mr as SetupPoseBoundsProvider,pe as Shader,$i as ShapeRenderer,ye as ShapeType,li as ShearTimeline,oi as ShearXTimeline,hi as ShearYTimeline,ze as Skeleton,Vs as SkeletonBinary,Ns as SkeletonBounds,at as SkeletonClipping,zi as SkeletonData,Wt as SkeletonDebugRenderer,Ds as SkeletonJson,ts as SkeletonRenderer,wt as Skin,Gi as SkinEntry,yn as SkinsAndAnimationBoundsProvider,Ls as Slot,qi as SlotData,Vt as SpacingMode,wn as SpineCanvas,rs as SpineGameObject,yt as SpinePlugin,Kt as StringSet,Qi as TexCoordAttribute,Pt as Texture,Fi as TextureAtlas,Rs as TextureAtlasPage,Li as TextureAtlasRegion,Xt as TextureFilter,Ms as TextureRegion,Es as TextureWrap,Qt as TimeKeeper,me as Timeline,Ws as Touch,As as TrackEntry,ir as Transform,Ps as TransformConstraint,Hi as TransformConstraintData,wi as TransformConstraintTimeline,cr as TransformMixin,ti as TranslateTimeline,ii as TranslateXTimeline,si as TranslateYTimeline,Ie as Triangulator,X as Utils,je as Vector2,Me as Vector3,ke as VertexAttachment,ot as VertexAttribute,Qe as VertexAttributeType,sr as Visible,dr as VisibleMixin,Ir as WindowedMean,Ne as createMixin};
@@ -14642,8 +14642,8 @@ var SpineGameObject = class extends DepthMixin(
14642
14642
  parentMatrix
14643
14643
  ).calc;
14644
14644
  let a = transform.a, b = transform.b, c = transform.c, d = transform.d, tx = transform.tx, ty = transform.ty;
14645
- let offsetX = (src.offsetX - src.displayOriginX) * src.scaleX;
14646
- let offsetY = (src.offsetY - src.displayOriginY) * src.scaleY;
14645
+ let offsetX = src.offsetX - src.displayOriginX;
14646
+ let offsetY = src.offsetY - src.displayOriginY;
14647
14647
  sceneRenderer.drawSkeleton(
14648
14648
  src.skeleton,
14649
14649
  src.premultipliedAlpha,
@@ -14651,10 +14651,10 @@ var SpineGameObject = class extends DepthMixin(
14651
14651
  -1,
14652
14652
  (vertices, numVertices, stride) => {
14653
14653
  for (let i = 0; i < numVertices; i += stride) {
14654
- let vx = vertices[i];
14655
- let vy = vertices[i + 1];
14656
- vertices[i] = vx * a + vy * c + tx + offsetX;
14657
- vertices[i + 1] = vx * b + vy * d + ty + offsetY;
14654
+ let vx = vertices[i] + offsetX;
14655
+ let vy = vertices[i + 1] + offsetY;
14656
+ vertices[i] = vx * a + vy * c + tx;
14657
+ vertices[i + 1] = vx * b + vy * d + ty;
14658
14658
  }
14659
14659
  }
14660
14660
  );