@esotericsoftware/spine-phaser-v3 4.2.81 → 4.2.83
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.
- package/LICENSE +12 -12
- package/dist/SpineGameObject.d.ts +6 -6
- package/dist/SpineGameObject.js +7 -7
- package/dist/SpinePlugin.d.ts +6 -6
- package/dist/SpinePlugin.js +10 -8
- package/dist/esm/spine-phaser-v3.min.mjs +29 -29
- package/dist/esm/spine-phaser-v3.mjs +1101 -1604
- package/dist/esm/spine-phaser-v3.mjs.map +3 -3
- package/dist/iife/spine-phaser-v3.js +1106 -1608
- package/dist/iife/spine-phaser-v3.js.map +3 -3
- package/dist/iife/spine-phaser-v3.min.js +8 -8
- package/dist/keys.d.ts +6 -6
- package/dist/keys.js +7 -7
- package/dist/require-shim.d.ts +6 -9
- package/dist/require-shim.js +7 -7
- package/package.json +4 -4
package/LICENSE
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Spine Runtimes License Agreement
|
|
2
|
-
Last updated
|
|
2
|
+
Last updated April 5, 2025. Replaces all prior versions.
|
|
3
3
|
|
|
4
|
-
Copyright (c) 2013-
|
|
4
|
+
Copyright (c) 2013-2025, Esoteric Software LLC
|
|
5
5
|
|
|
6
6
|
Integration of the Spine Runtimes into software or otherwise creating
|
|
7
7
|
derivative works of the Spine Runtimes is permitted under the terms and
|
|
@@ -14,13 +14,13 @@ or otherwise create derivative works of the Spine Runtimes (collectively,
|
|
|
14
14
|
Spine Editor license and redistribution of the Products in any form must
|
|
15
15
|
include this license and copyright notice.
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
19
|
-
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
20
|
-
NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
|
|
21
|
-
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
22
|
-
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
|
|
23
|
-
INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
|
|
24
|
-
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
25
|
-
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
26
|
-
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
17
|
+
THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
|
|
18
|
+
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
19
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
20
|
+
DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
|
|
21
|
+
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
22
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
|
|
23
|
+
BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
|
|
24
|
+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
25
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
26
|
+
THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/******************************************************************************
|
|
2
2
|
* Spine Runtimes License Agreement
|
|
3
|
-
* Last updated
|
|
3
|
+
* Last updated April 5, 2025. Replaces all prior versions.
|
|
4
4
|
*
|
|
5
|
-
* Copyright (c) 2013-
|
|
5
|
+
* Copyright (c) 2013-2025, Esoteric Software LLC
|
|
6
6
|
*
|
|
7
7
|
* Integration of the Spine Runtimes into software or otherwise creating
|
|
8
8
|
* derivative works of the Spine Runtimes is permitted under the terms and
|
|
9
9
|
* conditions of Section 2 of the Spine Editor License Agreement:
|
|
10
10
|
* http://esotericsoftware.com/spine-editor-license
|
|
11
11
|
*
|
|
12
|
-
* Otherwise, it is permitted to integrate the Spine Runtimes into software
|
|
13
|
-
* otherwise create derivative works of the Spine Runtimes (collectively,
|
|
12
|
+
* Otherwise, it is permitted to integrate the Spine Runtimes into software
|
|
13
|
+
* or otherwise create derivative works of the Spine Runtimes (collectively,
|
|
14
14
|
* "Products"), provided that each user of the Products must obtain their own
|
|
15
15
|
* Spine Editor license and redistribution of the Products in any form must
|
|
16
16
|
* include this license and copyright notice.
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
|
|
24
24
|
* BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
|
|
25
25
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
26
|
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
|
-
* SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
26
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
|
+
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
29
|
import { SpinePlugin } from "./SpinePlugin.js";
|
|
30
30
|
import { AnimationState, AnimationStateData, Bone, Skeleton } from "@esotericsoftware/spine-core";
|
package/dist/SpineGameObject.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/******************************************************************************
|
|
2
2
|
* Spine Runtimes License Agreement
|
|
3
|
-
* Last updated
|
|
3
|
+
* Last updated April 5, 2025. Replaces all prior versions.
|
|
4
4
|
*
|
|
5
|
-
* Copyright (c) 2013-
|
|
5
|
+
* Copyright (c) 2013-2025, Esoteric Software LLC
|
|
6
6
|
*
|
|
7
7
|
* Integration of the Spine Runtimes into software or otherwise creating
|
|
8
8
|
* derivative works of the Spine Runtimes is permitted under the terms and
|
|
9
9
|
* conditions of Section 2 of the Spine Editor License Agreement:
|
|
10
10
|
* http://esotericsoftware.com/spine-editor-license
|
|
11
11
|
*
|
|
12
|
-
* Otherwise, it is permitted to integrate the Spine Runtimes into software
|
|
13
|
-
* otherwise create derivative works of the Spine Runtimes (collectively,
|
|
12
|
+
* Otherwise, it is permitted to integrate the Spine Runtimes into software
|
|
13
|
+
* or otherwise create derivative works of the Spine Runtimes (collectively,
|
|
14
14
|
* "Products"), provided that each user of the Products must obtain their own
|
|
15
15
|
* Spine Editor license and redistribution of the Products in any form must
|
|
16
16
|
* include this license and copyright notice.
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
|
|
24
24
|
* BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
|
|
25
25
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
26
|
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
|
-
* SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
26
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
|
+
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
29
|
import { SPINE_GAME_OBJECT_TYPE } from "./keys.js";
|
|
30
30
|
import { ComputedSizeMixin, DepthMixin, FlipMixin, ScrollFactorMixin, TransformMixin, VisibleMixin, AlphaMixin, OriginMixin, } from "./mixins.js";
|
|
@@ -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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QUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM3QixRQUFRLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDMUIsUUFBUSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzFCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNuQyxRQUFRLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDbkMsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRyxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDO1FBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5ELE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNmLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBKdWx5IDI4LCAyMDIzLiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjMsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3JcbiAqIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSEVcbiAqIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgeyBTUElORV9HQU1FX09CSkVDVF9UWVBFIH0gZnJvbSBcIi4va2V5cy5qc1wiO1xuaW1wb3J0IHsgU3BpbmVQbHVnaW4gfSBmcm9tIFwiLi9TcGluZVBsdWdpbi5qc1wiO1xuaW1wb3J0IHtcblx0Q29tcHV0ZWRTaXplTWl4aW4sXG5cdERlcHRoTWl4aW4sXG5cdEZsaXBNaXhpbixcblx0U2Nyb2xsRmFjdG9yTWl4aW4sXG5cdFRyYW5zZm9ybU1peGluLFxuXHRWaXNpYmxlTWl4aW4sXG5cdEFscGhhTWl4aW4sXG5cdE9yaWdpbk1peGluLFxufSBmcm9tIFwiLi9taXhpbnMuanNcIjtcbmltcG9ydCB7XG5cdEFuaW1hdGlvblN0YXRlLFxuXHRBbmltYXRpb25TdGF0ZURhdGEsXG5cdEJvbmUsXG5cdE1hdGhVdGlscyxcblx0UGh5c2ljcyxcblx0U2tlbGV0b24sXG5cdFNrZWxldG9uQ2xpcHBpbmcsXG5cdFNraW4sXG5cdFZlY3RvcjIsXG59IGZyb20gXCJAZXNvdGVyaWNzb2Z0d2FyZS9zcGluZS1jb3JlXCI7XG5cbmNsYXNzIEJhc2VTcGluZUdhbWVPYmplY3QgZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCB7XG5cdGNvbnN0cnVjdG9yIChzY2VuZTogUGhhc2VyLlNjZW5lLCB0eXBlOiBzdHJpbmcpIHtcblx0XHRzdXBlcihzY2VuZSwgdHlwZSk7XG5cdH1cbn1cblxuLyoqIEEgYm91bmRzIHByb3ZpZGVyIGNhbGN1bGF0ZXMgdGhlIGJvdW5kaW5nIGJveCBmb3IgYSBza2VsZXRvbiwgd2hpY2ggaXMgdGhlbiBhc3NpZ25lZCBhcyB0aGUgc2l6ZSBvZiB0aGUgU3BpbmVHYW1lT2JqZWN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGluZUdhbWVPYmplY3RCb3VuZHNQcm92aWRlciB7XG5cdC8vIFJldHVybnMgdGhlIGJvdW5kaW5nIGJveCBmb3IgdGhlIHNrZWxldG9uLCBpbiBza2VsZXRvbiBzcGFjZS5cblx0Y2FsY3VsYXRlQm91bmRzIChnYW1lT2JqZWN0OiBTcGluZUdhbWVPYmplY3QpOiB7XG5cdFx0eDogbnVtYmVyO1xuXHRcdHk6IG51bWJlcjtcblx0XHR3aWR0aDogbnVtYmVyO1xuXHRcdGhlaWdodDogbnVtYmVyO1xuXHR9O1xufVxuXG4vKiogQSBib3VuZHMgcHJvdmlkZXIgdGhhdCBwcm92aWRlcyBhIGZpeGVkIHNpemUgZ2l2ZW4gYnkgdGhlIHVzZXIuICovXG5leHBvcnQgY2xhc3MgQUFCQlJlY3RhbmdsZUJvdW5kc1Byb3ZpZGVyIGltcGxlbWVudHMgU3BpbmVHYW1lT2JqZWN0Qm91bmRzUHJvdmlkZXIge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSB4OiBudW1iZXIsXG5cdFx0cHJpdmF0ZSB5OiBudW1iZXIsXG5cdFx0cHJpdmF0ZSB3aWR0aDogbnVtYmVyLFxuXHRcdHByaXZhdGUgaGVpZ2h0OiBudW1iZXIsXG5cdCkgeyB9XG5cdGNhbGN1bGF0ZUJvdW5kcyAoKSB7XG5cdFx0cmV0dXJuIHsgeDogdGhpcy54LCB5OiB0aGlzLnksIHdpZHRoOiB0aGlzLndpZHRoLCBoZWlnaHQ6IHRoaXMuaGVpZ2h0IH07XG5cdH1cbn1cblxuLyoqIEEgYm91bmRzIHByb3ZpZGVyIHRoYXQgY2FsY3VsYXRlcyB0aGUgYm91bmRpbmcgYm94IGZyb20gdGhlIHNldHVwIHBvc2UuICovXG5leHBvcnQgY2xhc3MgU2V0dXBQb3NlQm91bmRzUHJvdmlkZXIgaW1wbGVtZW50cyBTcGluZUdhbWVPYmplY3RCb3VuZHNQcm92aWRlciB7XG5cdC8qKlxuXHQgKiBAcGFyYW0gY2xpcHBpbmcgSWYgdHJ1ZSwgY2xpcHBpbmcgYXR0YWNobWVudHMgYXJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgYm91bmRzLiBGYWxzZSwgYnkgZGVmYXVsdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNsaXBwaW5nID0gZmFsc2UsXG5cdCkgeyB9XG5cblx0Y2FsY3VsYXRlQm91bmRzIChnYW1lT2JqZWN0OiBTcGluZUdhbWVPYmplY3QpIHtcblx0XHRpZiAoIWdhbWVPYmplY3Quc2tlbGV0b24pIHJldHVybiB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcblx0XHQvLyBNYWtlIGEgY29weSBvZiBhbmltYXRpb24gc3RhdGUgYW5kIHNrZWxldG9uIGFzIHRoaXMgbWlnaHQgYmUgY2FsbGVkIHdoaWxlXG5cdFx0Ly8gdGhlIHNrZWxldG9uIGluIHRoZSBHYW1lT2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gaGVhdmlseSBtb2RpZmllZC4gV2UgY2FuIG5vdFxuXHRcdC8vIHJlY29uc3RydWN0IHRoYXQgc3RhdGUuXG5cdFx0Y29uc3Qgc2tlbGV0b24gPSBuZXcgU2tlbGV0b24oZ2FtZU9iamVjdC5za2VsZXRvbi5kYXRhKTtcblx0XHRza2VsZXRvbi5zZXRUb1NldHVwUG9zZSgpO1xuXHRcdHNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtKFBoeXNpY3MudXBkYXRlKTtcblx0XHRjb25zdCBib3VuZHMgPSBza2VsZXRvbi5nZXRCb3VuZHNSZWN0KHRoaXMuY2xpcHBpbmcgPyBuZXcgU2tlbGV0b25DbGlwcGluZygpIDogdW5kZWZpbmVkKTtcblx0XHRyZXR1cm4gYm91bmRzLndpZHRoID09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuXHRcdFx0PyB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfVxuXHRcdFx0OiBib3VuZHM7XG5cdH1cbn1cblxuLyoqIEEgYm91bmRzIHByb3ZpZGVyIHRoYXQgY2FsY3VsYXRlcyB0aGUgYm91bmRpbmcgYm94IGJ5IHRha2luZyB0aGUgbWF4aW11bWcgYm91bmRpbmcgYm94IGZvciBhIGNvbWJpbmF0aW9uIG9mIHNraW5zIGFuZCBzcGVjaWZpYyBhbmltYXRpb24uICovXG5leHBvcnQgY2xhc3MgU2tpbnNBbmRBbmltYXRpb25Cb3VuZHNQcm92aWRlclxuXHRpbXBsZW1lbnRzIFNwaW5lR2FtZU9iamVjdEJvdW5kc1Byb3ZpZGVyIHtcblx0LyoqXG5cdCAqIEBwYXJhbSBhbmltYXRpb24gVGhlIGFuaW1hdGlvbiB0byB1c2UgZm9yIGNhbGN1bGF0aW5nIHRoZSBib3VuZHMuIElmIG51bGwsIHRoZSBzZXR1cCBwb3NlIGlzIHVzZWQuXG5cdCAqIEBwYXJhbSBza2lucyBUaGUgc2tpbnMgdG8gdXNlIGZvciBjYWxjdWxhdGluZyB0aGUgYm91bmRzLiBJZiBlbXB0eSwgdGhlIGRlZmF1bHQgc2tpbiBpcyB1c2VkLlxuXHQgKiBAcGFyYW0gdGltZVN0ZXAgVGhlIHRpbWUgc3RlcCB0byB1c2UgZm9yIGNhbGN1bGF0aW5nIHRoZSBib3VuZHMuIEEgc21hbGxlciB0aW1lIHN0ZXAgbWVhbnMgbW9yZSBwcmVjaXNpb24sIGJ1dCBzbG93ZXIgY2FsY3VsYXRpb24uXG5cdCAqIEBwYXJhbSBjbGlwcGluZyBJZiB0cnVlLCBjbGlwcGluZyBhdHRhY2htZW50cyBhcmUgdXNlZCB0byBjb21wdXRlIHRoZSBib3VuZHMuIEZhbHNlLCBieSBkZWZhdWx0LlxuXHQgKi9cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYW5pbWF0aW9uOiBzdHJpbmcgfCBudWxsLFxuXHRcdHByaXZhdGUgc2tpbnM6IHN0cmluZ1tdID0gW10sXG5cdFx0cHJpdmF0ZSB0aW1lU3RlcDogbnVtYmVyID0gMC4wNSxcblx0XHRwcml2YXRlIGNsaXBwaW5nID0gZmFsc2UsXG5cdCkgeyB9XG5cblx0Y2FsY3VsYXRlQm91bmRzIChnYW1lT2JqZWN0OiBTcGluZUdhbWVPYmplY3QpOiB7XG5cdFx0eDogbnVtYmVyO1xuXHRcdHk6IG51bWJlcjtcblx0XHR3aWR0aDogbnVtYmVyO1xuXHRcdGhlaWdodDogbnVtYmVyO1xuXHR9IHtcblx0XHRpZiAoIWdhbWVPYmplY3Quc2tlbGV0b24gfHwgIWdhbWVPYmplY3QuYW5pbWF0aW9uU3RhdGUpXG5cdFx0XHRyZXR1cm4geyB4OiAwLCB5OiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG5cdFx0Ly8gTWFrZSBhIGNvcHkgb2YgYW5pbWF0aW9uIHN0YXRlIGFuZCBza2VsZXRvbiBhcyB0aGlzIG1pZ2h0IGJlIGNhbGxlZCB3aGlsZVxuXHRcdC8vIHRoZSBza2VsZXRvbiBpbiB0aGUgR2FtZU9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGhlYXZpbHkgbW9kaWZpZWQuIFdlIGNhbiBub3Rcblx0XHQvLyByZWNvbnN0cnVjdCB0aGF0IHN0YXRlLlxuXHRcdGNvbnN0IGFuaW1hdGlvblN0YXRlID0gbmV3IEFuaW1hdGlvblN0YXRlKGdhbWVPYmplY3QuYW5pbWF0aW9uU3RhdGUuZGF0YSk7XG5cdFx0Y29uc3Qgc2tlbGV0b24gPSBuZXcgU2tlbGV0b24oZ2FtZU9iamVjdC5za2VsZXRvbi5kYXRhKTtcblx0XHRjb25zdCBjbGlwcGVyID0gdGhpcy5jbGlwcGluZyA/IG5ldyBTa2VsZXRvbkNsaXBwaW5nKCkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGF0YSA9IHNrZWxldG9uLmRhdGE7XG5cdFx0aWYgKHRoaXMuc2tpbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0bGV0IGN1c3RvbVNraW4gPSBuZXcgU2tpbihcImN1c3RvbS1za2luXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBza2luTmFtZSBvZiB0aGlzLnNraW5zKSB7XG5cdFx0XHRcdGNvbnN0IHNraW4gPSBkYXRhLmZpbmRTa2luKHNraW5OYW1lKTtcblx0XHRcdFx0aWYgKHNraW4gPT0gbnVsbCkgY29udGludWU7XG5cdFx0XHRcdGN1c3RvbVNraW4uYWRkU2tpbihza2luKTtcblx0XHRcdH1cblx0XHRcdHNrZWxldG9uLnNldFNraW4oY3VzdG9tU2tpbik7XG5cdFx0fVxuXHRcdHNrZWxldG9uLnNldFRvU2V0dXBQb3NlKCk7XG5cblx0XHRjb25zdCBhbmltYXRpb24gPVxuXHRcdFx0dGhpcy5hbmltYXRpb24gIT0gbnVsbCA/IGRhdGEuZmluZEFuaW1hdGlvbih0aGlzLmFuaW1hdGlvbiEpIDogbnVsbDtcblx0XHRpZiAoYW5pbWF0aW9uID09IG51bGwpIHtcblx0XHRcdHNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtKFBoeXNpY3MudXBkYXRlKTtcblx0XHRcdGNvbnN0IGJvdW5kcyA9IHNrZWxldG9uLmdldEJvdW5kc1JlY3QoY2xpcHBlcik7XG5cdFx0XHRyZXR1cm4gYm91bmRzLndpZHRoID09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuXHRcdFx0XHQ/IHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9XG5cdFx0XHRcdDogYm91bmRzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgbWluWCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcblx0XHRcdFx0bWluWSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcblx0XHRcdFx0bWF4WCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxcblx0XHRcdFx0bWF4WSA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcblx0XHRcdGFuaW1hdGlvblN0YXRlLmNsZWFyVHJhY2tzKCk7XG5cdFx0XHRhbmltYXRpb25TdGF0ZS5zZXRBbmltYXRpb25XaXRoKDAsIGFuaW1hdGlvbiwgZmFsc2UpO1xuXHRcdFx0Y29uc3Qgc3RlcHMgPSBNYXRoLm1heChhbmltYXRpb24uZHVyYXRpb24gLyB0aGlzLnRpbWVTdGVwLCAxLjApO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdGVwczsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGRlbHRhID0gaSA+IDAgPyB0aGlzLnRpbWVTdGVwIDogMDtcblx0XHRcdFx0YW5pbWF0aW9uU3RhdGUudXBkYXRlKGRlbHRhKTtcblx0XHRcdFx0YW5pbWF0aW9uU3RhdGUuYXBwbHkoc2tlbGV0b24pO1xuXHRcdFx0XHRza2VsZXRvbi51cGRhdGUoZGVsdGEpO1xuXHRcdFx0XHRza2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybShQaHlzaWNzLnVwZGF0ZSk7XG5cblx0XHRcdFx0Y29uc3QgYm91bmRzID0gc2tlbGV0b24uZ2V0Qm91bmRzUmVjdChjbGlwcGVyKTtcblx0XHRcdFx0bWluWCA9IE1hdGgubWluKG1pblgsIGJvdW5kcy54KTtcblx0XHRcdFx0bWluWSA9IE1hdGgubWluKG1pblksIGJvdW5kcy55KTtcblx0XHRcdFx0bWF4WCA9IE1hdGgubWF4KG1heFgsIGJvdW5kcy54ICsgYm91bmRzLndpZHRoKTtcblx0XHRcdFx0bWF4WSA9IE1hdGgubWF4KG1heFksIGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBib3VuZHMgPSB7XG5cdFx0XHRcdHg6IG1pblgsXG5cdFx0XHRcdHk6IG1pblksXG5cdFx0XHRcdHdpZHRoOiBtYXhYIC0gbWluWCxcblx0XHRcdFx0aGVpZ2h0OiBtYXhZIC0gbWluWSxcblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gYm91bmRzLndpZHRoID09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuXHRcdFx0XHQ/IHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9XG5cdFx0XHRcdDogYm91bmRzO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEEgU3BpbmVHYW1lT2JqZWN0IGlzIGEgUGhhc2VyIHtAbGluayBHYW1lT2JqZWN0fSB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFBoYXNlciBTY2VuZSBhbmQgcmVuZGVyIGEgU3BpbmUgc2tlbGV0b24uXG4gKlxuICogVGhlIFNwaW5lIEdhbWVPYmplY3QgaXMgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGEgU3BpbmUge0BsaW5rIFNrZWxldG9ufSwge0BsaW5rIEFuaW1hdGlvblN0YXRlfSBhbmQge0BsaW5rIEFuaW1hdGlvblN0YXRlRGF0YX0uIEl0IGlzIHJlc3BvbnNpYmxlIGZvcjpcbiAqIC0gdXBkYXRpbmcgdGhlIGFuaW1hdGlvbiBzdGF0ZVxuICogLSBhcHBseWluZyB0aGUgYW5pbWF0aW9uIHN0YXRlIHRvIHRoZSBza2VsZXRvbidzIGJvbmVzLCBzbG90cywgYXR0YWNobWVudHMsIGFuZCBkcmF3IG9yZGVyLlxuICogLSB1cGRhdGluZyB0aGUgc2tlbGV0b24ncyBib25lIHdvcmxkIHRyYW5zZm9ybXNcbiAqIC0gcmVuZGVyaW5nIHRoZSBza2VsZXRvblxuICpcbiAqIFNlZSB0aGUge0BsaW5rIFNwaW5lUGx1Z2lufSBjbGFzcyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIGEgYFNwaW5lR2FtZU9iamVjdGAuXG4gKlxuICogVGhlIHNrZWxldG9uLCBhbmltYXRpb24gc3RhdGUsIGFuZCBhbmltYXRpb24gc3RhdGUgZGF0YSBjYW4gYmUgYWNjZXNzZWQgdmlhIHRoZSByZXBzZWN0aXZlIGZpZWxkcy4gVGhleSBjYW4gYmUgbWFudWFsbHkgdXBkYXRlZCB2aWEge0BsaW5rIHVwZGF0ZVBvc2V9LlxuICpcbiAqIFRvIG1vZGlmeSB0aGUgYm9uZSBoaWVyYXJjaHkgYmVmb3JlIHRoZSB3b3JsZCB0cmFuc2Zvcm1zIGFyZSBjb21wdXRlZCwgYSBjYWxsYmFjayBjYW4gYmUgc2V0IHZpYSB0aGUge0BsaW5rIGJlZm9yZVVwZGF0ZVdvcmxkVHJhbnNmb3Jtc30gZmllbGQuXG4gKlxuICogVG8gbW9kaWZ5IHRoZSBib25lIGhpZXJhcmNoeSBhZnRlciB0aGUgd29ybGQgdHJhbnNmb3JtcyBhcmUgY29tcHV0ZWQsIGEgY2FsbGJhY2sgY2FuIGJlIHNldCB2aWEgdGhlIHtAbGluayBhZnRlclVwZGF0ZVdvcmxkVHJhbnNmb3Jtc30gZmllbGQuXG4gKlxuICogVGhlIGNsYXNzIGFsc28gZmVhdHVyZXMgbWV0aG9kcyB0byBjb252ZXJ0IGJldHdlZW4gdGhlIHNrZWxldG9uIGNvb3JkaW5hdGUgc3lzdGVtIGFuZCB0aGUgUGhhc2VyIGNvb3JkaW5hdGUgc3lzdGVtLlxuICpcbiAqIFNlZSB7QGxpbmsgc2tlbGV0b25Ub1BoYXNlcldvcmxkQ29vcmRpbmF0ZXN9LCB7QGxpbmsgcGhhc2VyV29ybGRDb29yZGluYXRlc1RvU2tlbGV0b259LCBhbmQge0BsaW5rIHBoYXNlcldvcmxkQ29vcmRpbmF0ZXNUb0JvbmVMb2NhbC59XG4gKi9cbmV4cG9ydCBjbGFzcyBTcGluZUdhbWVPYmplY3QgZXh0ZW5kcyBEZXB0aE1peGluKFxuXHRPcmlnaW5NaXhpbihcblx0XHRDb21wdXRlZFNpemVNaXhpbihcblx0XHRcdEZsaXBNaXhpbihcblx0XHRcdFx0U2Nyb2xsRmFjdG9yTWl4aW4oXG5cdFx0XHRcdFx0VHJhbnNmb3JtTWl4aW4oVmlzaWJsZU1peGluKEFscGhhTWl4aW4oQmFzZVNwaW5lR2FtZU9iamVjdCkpKVxuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0KVxuXHQpXG4pIHtcblx0YmxlbmRNb2RlID0gLTE7XG5cdHNrZWxldG9uOiBTa2VsZXRvbjtcblx0YW5pbWF0aW9uU3RhdGVEYXRhOiBBbmltYXRpb25TdGF0ZURhdGE7XG5cdGFuaW1hdGlvblN0YXRlOiBBbmltYXRpb25TdGF0ZTtcblx0YmVmb3JlVXBkYXRlV29ybGRUcmFuc2Zvcm1zOiAob2JqZWN0OiBTcGluZUdhbWVPYmplY3QpID0+IHZvaWQgPSAoKSA9PiB7IH07XG5cdGFmdGVyVXBkYXRlV29ybGRUcmFuc2Zvcm1zOiAob2JqZWN0OiBTcGluZUdhbWVPYmplY3QpID0+IHZvaWQgPSAoKSA9PiB7IH07XG5cdHByaXZhdGUgcHJlbXVsdGlwbGllZEFscGhhID0gZmFsc2U7XG5cdHByaXZhdGUgb2Zmc2V0WCA9IDA7XG5cdHByaXZhdGUgb2Zmc2V0WSA9IDA7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHNjZW5lOiBQaGFzZXIuU2NlbmUsXG5cdFx0cHJpdmF0ZSBwbHVnaW46IFNwaW5lUGx1Z2luLFxuXHRcdHg6IG51bWJlcixcblx0XHR5OiBudW1iZXIsXG5cdFx0ZGF0YUtleTogc3RyaW5nLFxuXHRcdGF0bGFzS2V5OiBzdHJpbmcsXG5cdFx0cHVibGljIGJvdW5kc1Byb3ZpZGVyOiBTcGluZUdhbWVPYmplY3RCb3VuZHNQcm92aWRlciA9IG5ldyBTZXR1cFBvc2VCb3VuZHNQcm92aWRlcigpXG5cdCkge1xuXHRcdHN1cGVyKHNjZW5lLCAod2luZG93IGFzIGFueSkuU1BJTkVfR0FNRV9PQkpFQ1RfVFlQRSA/ICh3aW5kb3cgYXMgYW55KS5TUElORV9HQU1FX09CSkVDVF9UWVBFIDogU1BJTkVfR0FNRV9PQkpFQ1RfVFlQRSk7XG5cdFx0dGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcblxuXHRcdHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdGhpcy5wbHVnaW4uaXNBdGxhc1ByZW11bHRpcGxpZWQoYXRsYXNLZXkpO1xuXHRcdHRoaXMuc2tlbGV0b24gPSB0aGlzLnBsdWdpbi5jcmVhdGVTa2VsZXRvbihkYXRhS2V5LCBhdGxhc0tleSk7XG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZURhdGEgPSBuZXcgQW5pbWF0aW9uU3RhdGVEYXRhKHRoaXMuc2tlbGV0b24uZGF0YSk7XG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZSA9IG5ldyBBbmltYXRpb25TdGF0ZSh0aGlzLmFuaW1hdGlvblN0YXRlRGF0YSk7XG5cdFx0dGhpcy5za2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybShQaHlzaWNzLnVwZGF0ZSk7XG5cdFx0dGhpcy51cGRhdGVTaXplKCk7XG5cdH1cblxuXHR1cGRhdGVTaXplICgpIHtcblx0XHRpZiAoIXRoaXMuc2tlbGV0b24pIHJldHVybjtcblx0XHRsZXQgYm91bmRzID0gdGhpcy5ib3VuZHNQcm92aWRlci5jYWxjdWxhdGVCb3VuZHModGhpcyk7XG5cdFx0dGhpcy53aWR0aCA9IGJvdW5kcy53aWR0aDtcblx0XHR0aGlzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQ7XG5cdFx0dGhpcy5zZXREaXNwbGF5T3JpZ2luKC1ib3VuZHMueCwgLWJvdW5kcy55KTtcblx0XHR0aGlzLm9mZnNldFggPSAtYm91bmRzLng7XG5cdFx0dGhpcy5vZmZzZXRZID0gLWJvdW5kcy55O1xuXHR9XG5cblx0LyoqIENvbnZlcnRzIGEgcG9pbnQgZnJvbSB0aGUgc2tlbGV0b24gY29vcmRpbmF0ZSBzeXN0ZW0gdG8gdGhlIFBoYXNlciB3b3JsZCBjb29yZGluYXRlIHN5c3RlbS4gKi9cblx0c2tlbGV0b25Ub1BoYXNlcldvcmxkQ29vcmRpbmF0ZXMgKHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcblx0XHRsZXQgdHJhbnNmb3JtID0gdGhpcy5nZXRXb3JsZFRyYW5zZm9ybU1hdHJpeCgpO1xuXHRcdGxldCBhID0gdHJhbnNmb3JtLmEsXG5cdFx0XHRiID0gdHJhbnNmb3JtLmIsXG5cdFx0XHRjID0gdHJhbnNmb3JtLmMsXG5cdFx0XHRkID0gdHJhbnNmb3JtLmQsXG5cdFx0XHR0eCA9IHRyYW5zZm9ybS50eCxcblx0XHRcdHR5ID0gdHJhbnNmb3JtLnR5O1xuXHRcdGxldCB4ID0gcG9pbnQueDtcblx0XHRsZXQgeSA9IHBvaW50Lnk7XG5cdFx0cG9pbnQueCA9IHggKiBhICsgeSAqIGMgKyB0eDtcblx0XHRwb2ludC55ID0geCAqIGIgKyB5ICogZCArIHR5O1xuXHR9XG5cblx0LyoqIENvbnZlcnRzIGEgcG9pbnQgZnJvbSB0aGUgUGhhc2VyIHdvcmxkIGNvb3JkaW5hdGUgc3lzdGVtIHRvIHRoZSBza2VsZXRvbiBjb29yZGluYXRlIHN5c3RlbS4gKi9cblx0cGhhc2VyV29ybGRDb29yZGluYXRlc1RvU2tlbGV0b24gKHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcblx0XHRsZXQgdHJhbnNmb3JtID0gdGhpcy5nZXRXb3JsZFRyYW5zZm9ybU1hdHJpeCgpO1xuXHRcdHRyYW5zZm9ybSA9IHRyYW5zZm9ybS5pbnZlcnQoKTtcblx0XHRsZXQgYSA9IHRyYW5zZm9ybS5hLFxuXHRcdFx0YiA9IHRyYW5zZm9ybS5iLFxuXHRcdFx0YyA9IHRyYW5zZm9ybS5jLFxuXHRcdFx0ZCA9IHRyYW5zZm9ybS5kLFxuXHRcdFx0dHggPSB0cmFuc2Zvcm0udHgsXG5cdFx0XHR0eSA9IHRyYW5zZm9ybS50eTtcblx0XHRsZXQgeCA9IHBvaW50Lng7XG5cdFx0bGV0IHkgPSBwb2ludC55O1xuXHRcdHBvaW50LnggPSB4ICogYSArIHkgKiBjICsgdHg7XG5cdFx0cG9pbnQueSA9IHggKiBiICsgeSAqIGQgKyB0eTtcblx0fVxuXG5cdC8qKiBDb252ZXJ0cyBhIHBvaW50IGZyb20gdGhlIFBoYXNlciB3b3JsZCBjb29yZGluYXRlIHN5c3RlbSB0byB0aGUgYm9uZSdzIGxvY2FsIGNvb3JkaW5hdGUgc3lzdGVtLiAqL1xuXHRwaGFzZXJXb3JsZENvb3JkaW5hdGVzVG9Cb25lIChwb2ludDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9LCBib25lOiBCb25lKSB7XG5cdFx0dGhpcy5waGFzZXJXb3JsZENvb3JkaW5hdGVzVG9Ta2VsZXRvbihwb2ludCk7XG5cdFx0aWYgKGJvbmUucGFyZW50KSB7XG5cdFx0XHRib25lLnBhcmVudC53b3JsZFRvTG9jYWwocG9pbnQgYXMgVmVjdG9yMik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJvbmUud29ybGRUb0xvY2FsKHBvaW50IGFzIFZlY3RvcjIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSB7QGxpbmsgQW5pbWF0aW9uU3RhdGV9LCBhcHBsaWVzIGl0IHRvIHRoZSB7QGxpbmsgU2tlbGV0b259LCB0aGVuIHVwZGF0ZXMgdGhlIHdvcmxkIHRyYW5zZm9ybXMgb2YgYWxsIGJvbmVzLlxuXHQgKiBAcGFyYW0gZGVsdGEgVGhlIHRpbWUgZGVsdGEgaW4gbWlsbGlzZWNvbmRzXG5cdCAqL1xuXHR1cGRhdGVQb3NlIChkZWx0YTogbnVtYmVyKSB7XG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZS51cGRhdGUoZGVsdGEgLyAxMDAwKTtcblx0XHR0aGlzLmFuaW1hdGlvblN0YXRlLmFwcGx5KHRoaXMuc2tlbGV0b24pO1xuXHRcdHRoaXMuYmVmb3JlVXBkYXRlV29ybGRUcmFuc2Zvcm1zKHRoaXMpO1xuXHRcdHRoaXMuc2tlbGV0b24udXBkYXRlKGRlbHRhIC8gMTAwMCk7XG5cdFx0dGhpcy5za2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybShQaHlzaWNzLnVwZGF0ZSk7XG5cdFx0dGhpcy5hZnRlclVwZGF0ZVdvcmxkVHJhbnNmb3Jtcyh0aGlzKTtcblx0fVxuXG5cdHByZVVwZGF0ZSAodGltZTogbnVtYmVyLCBkZWx0YTogbnVtYmVyKSB7XG5cdFx0aWYgKCF0aGlzLnNrZWxldG9uIHx8ICF0aGlzLmFuaW1hdGlvblN0YXRlKSByZXR1cm47XG5cdFx0dGhpcy51cGRhdGVQb3NlKGRlbHRhKTtcblx0fVxuXG5cdHByZURlc3Ryb3kgKCkge1xuXHRcdC8vIEZJWE1FIHRlYXIgZG93biBhbnkgZXZlbnQgZW1pdHRlcnNcblx0fVxuXG5cdHdpbGxSZW5kZXIgKGNhbWVyYTogUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEpIHtcblx0XHR2YXIgR2FtZU9iamVjdFJlbmRlck1hc2sgPSAweGY7XG5cdFx0dmFyIHJlc3VsdCA9ICF0aGlzLnNrZWxldG9uIHx8ICEoR2FtZU9iamVjdFJlbmRlck1hc2sgIT09IHRoaXMucmVuZGVyRmxhZ3MgfHwgKHRoaXMuY2FtZXJhRmlsdGVyICE9PSAwICYmIHRoaXMuY2FtZXJhRmlsdGVyICYgY2FtZXJhLmlkKSk7XG5cdFx0aWYgKCF0aGlzLnZpc2libGUpIHJlc3VsdCA9IGZhbHNlO1xuXG5cdFx0aWYgKCFyZXN1bHQgJiYgdGhpcy5wYXJlbnRDb250YWluZXIgJiYgdGhpcy5wbHVnaW4ud2ViR0xSZW5kZXJlcikge1xuXHRcdFx0dmFyIHNjZW5lUmVuZGVyZXIgPSB0aGlzLnBsdWdpbi53ZWJHTFJlbmRlcmVyO1xuXG5cdFx0XHRpZiAodGhpcy5wbHVnaW4uZ2wgJiYgdGhpcy5wbHVnaW4ucGhhc2VyUmVuZGVyZXIgaW5zdGFuY2VvZiBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciAmJiBzY2VuZVJlbmRlcmVyLmJhdGNoZXIuaXNEcmF3aW5nKSB7XG5cdFx0XHRcdHNjZW5lUmVuZGVyZXIuZW5kKCk7XG5cdFx0XHRcdHRoaXMucGx1Z2luLnBoYXNlclJlbmRlcmVyLnBpcGVsaW5lcy5yZWJpbmQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmVuZGVyV2ViR0wgKFxuXHRcdHJlbmRlcmVyOiBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcixcblx0XHRzcmM6IFNwaW5lR2FtZU9iamVjdCxcblx0XHRjYW1lcmE6IFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhLFxuXHRcdHBhcmVudE1hdHJpeDogUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4XG5cdCkge1xuXHRcdGlmICghdGhpcy5za2VsZXRvbiB8fCAhdGhpcy5hbmltYXRpb25TdGF0ZSB8fCAhdGhpcy5wbHVnaW4ud2ViR0xSZW5kZXJlcilcblx0XHRcdHJldHVybjtcblxuXHRcdGxldCBzY2VuZVJlbmRlcmVyID0gdGhpcy5wbHVnaW4ud2ViR0xSZW5kZXJlcjtcblx0XHRpZiAocmVuZGVyZXIubmV3VHlwZSkge1xuXHRcdFx0cmVuZGVyZXIucGlwZWxpbmVzLmNsZWFyKCk7XG5cdFx0XHRzY2VuZVJlbmRlcmVyLmJlZ2luKCk7XG5cdFx0fVxuXG5cdFx0Y2FtZXJhLmFkZFRvUmVuZGVyTGlzdChzcmMpO1xuXHRcdGxldCB0cmFuc2Zvcm0gPSBQaGFzZXIuR2FtZU9iamVjdHMuR2V0Q2FsY01hdHJpeChcblx0XHRcdHNyYyxcblx0XHRcdGNhbWVyYSxcblx0XHRcdHBhcmVudE1hdHJpeFxuXHRcdCkuY2FsYztcblx0XHRsZXQgYSA9IHRyYW5zZm9ybS5hLFxuXHRcdFx0YiA9IHRyYW5zZm9ybS5iLFxuXHRcdFx0YyA9IHRyYW5zZm9ybS5jLFxuXHRcdFx0ZCA9IHRyYW5zZm9ybS5kLFxuXHRcdFx0dHggPSB0cmFuc2Zvcm0udHgsXG5cdFx0XHR0eSA9IHRyYW5zZm9ybS50eTtcblxuXHRcdGxldCBvZmZzZXRYID0gc3JjLm9mZnNldFggLSBzcmMuZGlzcGxheU9yaWdpblg7XG5cdFx0bGV0IG9mZnNldFkgPSBzcmMub2Zmc2V0WSAtIHNyYy5kaXNwbGF5T3JpZ2luWTtcblxuXHRcdHNjZW5lUmVuZGVyZXIuZHJhd1NrZWxldG9uKFxuXHRcdFx0c3JjLnNrZWxldG9uLFxuXHRcdFx0c3JjLnByZW11bHRpcGxpZWRBbHBoYSxcblx0XHRcdC0xLFxuXHRcdFx0LTEsXG5cdFx0XHQodmVydGljZXMsIG51bVZlcnRpY2VzLCBzdHJpZGUpID0+IHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBudW1WZXJ0aWNlczsgaSArPSBzdHJpZGUpIHtcblx0XHRcdFx0XHRsZXQgdnggPSB2ZXJ0aWNlc1tpXSArIG9mZnNldFg7XG5cdFx0XHRcdFx0bGV0IHZ5ID0gdmVydGljZXNbaSArIDFdICsgb2Zmc2V0WTtcblx0XHRcdFx0XHR2ZXJ0aWNlc1tpXSA9IHZ4ICogYSArIHZ5ICogYyArIHR4O1xuXHRcdFx0XHRcdHZlcnRpY2VzW2kgKyAxXSA9IHZ4ICogYiArIHZ5ICogZCArIHR5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGlmICghcmVuZGVyZXIubmV4dFR5cGVNYXRjaCkge1xuXHRcdFx0c2NlbmVSZW5kZXJlci5lbmQoKTtcblx0XHRcdHJlbmRlcmVyLnBpcGVsaW5lcy5yZWJpbmQoKTtcblx0XHR9XG5cdH1cblxuXHRyZW5kZXJDYW52YXMgKFxuXHRcdHJlbmRlcmVyOiBQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyLFxuXHRcdHNyYzogU3BpbmVHYW1lT2JqZWN0LFxuXHRcdGNhbWVyYTogUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEsXG5cdFx0cGFyZW50TWF0cml4OiBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXhcblx0KSB7XG5cdFx0aWYgKCF0aGlzLnNrZWxldG9uIHx8ICF0aGlzLmFuaW1hdGlvblN0YXRlIHx8ICF0aGlzLnBsdWdpbi5jYW52YXNSZW5kZXJlcilcblx0XHRcdHJldHVybjtcblxuXHRcdGxldCBjb250ZXh0ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XG5cdFx0bGV0IHNrZWxldG9uUmVuZGVyZXIgPSB0aGlzLnBsdWdpbi5jYW52YXNSZW5kZXJlcjtcblx0XHQoc2tlbGV0b25SZW5kZXJlciBhcyBhbnkpLmN0eCA9IGNvbnRleHQ7XG5cblx0XHRjYW1lcmEuYWRkVG9SZW5kZXJMaXN0KHNyYyk7XG5cdFx0bGV0IHRyYW5zZm9ybSA9IFBoYXNlci5HYW1lT2JqZWN0cy5HZXRDYWxjTWF0cml4KFxuXHRcdFx0c3JjLFxuXHRcdFx0Y2FtZXJhLFxuXHRcdFx0cGFyZW50TWF0cml4XG5cdFx0KS5jYWxjO1xuXHRcdGxldCBza2VsZXRvbiA9IHRoaXMuc2tlbGV0b247XG5cdFx0c2tlbGV0b24ueCA9IHRyYW5zZm9ybS50eDtcblx0XHRza2VsZXRvbi55ID0gdHJhbnNmb3JtLnR5O1xuXHRcdHNrZWxldG9uLnNjYWxlWCA9IHRyYW5zZm9ybS5zY2FsZVg7XG5cdFx0c2tlbGV0b24uc2NhbGVZID0gdHJhbnNmb3JtLnNjYWxlWTtcblx0XHRsZXQgcm9vdCA9IHNrZWxldG9uLmdldFJvb3RCb25lKCkhO1xuXHRcdHJvb3Qucm90YXRpb24gPSAtTWF0aFV0aWxzLnJhZGlhbnNUb0RlZ3JlZXMgKiB0cmFuc2Zvcm0ucm90YXRpb25Ob3JtYWxpemVkO1xuXHRcdHRoaXMuc2tlbGV0b24udXBkYXRlV29ybGRUcmFuc2Zvcm0oUGh5c2ljcy51cGRhdGUpO1xuXG5cdFx0Y29udGV4dC5zYXZlKCk7XG5cdFx0c2tlbGV0b25SZW5kZXJlci5kcmF3KHNrZWxldG9uKTtcblx0XHRjb250ZXh0LnJlc3RvcmUoKTtcblx0fVxufVxuIl19
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BpbmVHYW1lT2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NwaW5lR2FtZU9iamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRW5ELE9BQU8sRUFDTixpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsY0FBYyxFQUNkLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxHQUNYLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTixjQUFjLEVBQ2Qsa0JBQWtCLEVBRWxCLFNBQVMsRUFDVCxPQUFPLEVBQ1AsUUFBUSxFQUNSLGdCQUFnQixFQUNoQixJQUFJLEdBRUosTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxNQUFNLG1CQUFvQixTQUFRLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVTtJQUM5RCxZQUFhLEtBQW1CLEVBQUUsSUFBWTtRQUM3QyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7Q0FDRDtBQWFELHNFQUFzRTtBQUN0RSxNQUFNLE9BQU8sMkJBQTJCO0lBRTlCO0lBQ0E7SUFDQTtJQUNBO0lBSlQsWUFDUyxDQUFTLEVBQ1QsQ0FBUyxFQUNULEtBQWEsRUFDYixNQUFjO1FBSGQsTUFBQyxHQUFELENBQUMsQ0FBUTtRQUNULE1BQUMsR0FBRCxDQUFDLENBQVE7UUFDVCxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUNuQixDQUFDO0lBQ0wsZUFBZTtRQUNkLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFB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QUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM3QixRQUFRLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDMUIsUUFBUSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzFCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNuQyxRQUFRLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDbkMsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRyxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDO1FBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5ELE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNmLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgeyBTUElORV9HQU1FX09CSkVDVF9UWVBFIH0gZnJvbSBcIi4va2V5cy5qc1wiO1xuaW1wb3J0IHsgU3BpbmVQbHVnaW4gfSBmcm9tIFwiLi9TcGluZVBsdWdpbi5qc1wiO1xuaW1wb3J0IHtcblx0Q29tcHV0ZWRTaXplTWl4aW4sXG5cdERlcHRoTWl4aW4sXG5cdEZsaXBNaXhpbixcblx0U2Nyb2xsRmFjdG9yTWl4aW4sXG5cdFRyYW5zZm9ybU1peGluLFxuXHRWaXNpYmxlTWl4aW4sXG5cdEFscGhhTWl4aW4sXG5cdE9yaWdpbk1peGluLFxufSBmcm9tIFwiLi9taXhpbnMuanNcIjtcbmltcG9ydCB7XG5cdEFuaW1hdGlvblN0YXRlLFxuXHRBbmltYXRpb25TdGF0ZURhdGEsXG5cdEJvbmUsXG5cdE1hdGhVdGlscyxcblx0UGh5c2ljcyxcblx0U2tlbGV0b24sXG5cdFNrZWxldG9uQ2xpcHBpbmcsXG5cdFNraW4sXG5cdFZlY3RvcjIsXG59IGZyb20gXCJAZXNvdGVyaWNzb2Z0d2FyZS9zcGluZS1jb3JlXCI7XG5cbmNsYXNzIEJhc2VTcGluZUdhbWVPYmplY3QgZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCB7XG5cdGNvbnN0cnVjdG9yIChzY2VuZTogUGhhc2VyLlNjZW5lLCB0eXBlOiBzdHJpbmcpIHtcblx0XHRzdXBlcihzY2VuZSwgdHlwZSk7XG5cdH1cbn1cblxuLyoqIEEgYm91bmRzIHByb3ZpZGVyIGNhbGN1bGF0ZXMgdGhlIGJvdW5kaW5nIGJveCBmb3IgYSBza2VsZXRvbiwgd2hpY2ggaXMgdGhlbiBhc3NpZ25lZCBhcyB0aGUgc2l6ZSBvZiB0aGUgU3BpbmVHYW1lT2JqZWN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGluZUdhbWVPYmplY3RCb3VuZHNQcm92aWRlciB7XG5cdC8vIFJldHVybnMgdGhlIGJvdW5kaW5nIGJveCBmb3IgdGhlIHNrZWxldG9uLCBpbiBza2VsZXRvbiBzcGFjZS5cblx0Y2FsY3VsYXRlQm91bmRzIChnYW1lT2JqZWN0OiBTcGluZUdhbWVPYmplY3QpOiB7XG5cdFx0eDogbnVtYmVyO1xuXHRcdHk6IG51bWJlcjtcblx0XHR3aWR0aDogbnVtYmVyO1xuXHRcdGhlaWdodDogbnVtYmVyO1xuXHR9O1xufVxuXG4vKiogQSBib3VuZHMgcHJvdmlkZXIgdGhhdCBwcm92aWRlcyBhIGZpeGVkIHNpemUgZ2l2ZW4gYnkgdGhlIHVzZXIuICovXG5leHBvcnQgY2xhc3MgQUFCQlJlY3RhbmdsZUJvdW5kc1Byb3ZpZGVyIGltcGxlbWVudHMgU3BpbmVHYW1lT2JqZWN0Qm91bmRzUHJvdmlkZXIge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSB4OiBudW1iZXIsXG5cdFx0cHJpdmF0ZSB5OiBudW1iZXIsXG5cdFx0cHJpdmF0ZSB3aWR0aDogbnVtYmVyLFxuXHRcdHByaXZhdGUgaGVpZ2h0OiBudW1iZXIsXG5cdCkgeyB9XG5cdGNhbGN1bGF0ZUJvdW5kcyAoKSB7XG5cdFx0cmV0dXJuIHsgeDogdGhpcy54LCB5OiB0aGlzLnksIHdpZHRoOiB0aGlzLndpZHRoLCBoZWlnaHQ6IHRoaXMuaGVpZ2h0IH07XG5cdH1cbn1cblxuLyoqIEEgYm91bmRzIHByb3ZpZGVyIHRoYXQgY2FsY3VsYXRlcyB0aGUgYm91bmRpbmcgYm94IGZyb20gdGhlIHNldHVwIHBvc2UuICovXG5leHBvcnQgY2xhc3MgU2V0dXBQb3NlQm91bmRzUHJvdmlkZXIgaW1wbGVtZW50cyBTcGluZUdhbWVPYmplY3RCb3VuZHNQcm92aWRlciB7XG5cdC8qKlxuXHQgKiBAcGFyYW0gY2xpcHBpbmcgSWYgdHJ1ZSwgY2xpcHBpbmcgYXR0YWNobWVudHMgYXJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgYm91bmRzLiBGYWxzZSwgYnkgZGVmYXVsdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNsaXBwaW5nID0gZmFsc2UsXG5cdCkgeyB9XG5cblx0Y2FsY3VsYXRlQm91bmRzIChnYW1lT2JqZWN0OiBTcGluZUdhbWVPYmplY3QpIHtcblx0XHRpZiAoIWdhbWVPYmplY3Quc2tlbGV0b24pIHJldHVybiB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcblx0XHQvLyBNYWtlIGEgY29weSBvZiBhbmltYXRpb24gc3RhdGUgYW5kIHNrZWxldG9uIGFzIHRoaXMgbWlnaHQgYmUgY2FsbGVkIHdoaWxlXG5cdFx0Ly8gdGhlIHNrZWxldG9uIGluIHRoZSBHYW1lT2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gaGVhdmlseSBtb2RpZmllZC4gV2UgY2FuIG5vdFxuXHRcdC8vIHJlY29uc3RydWN0IHRoYXQgc3RhdGUuXG5cdFx0Y29uc3Qgc2tlbGV0b24gPSBuZXcgU2tlbGV0b24oZ2FtZU9iamVjdC5za2VsZXRvbi5kYXRhKTtcblx0XHRza2VsZXRvbi5zZXRUb1NldHVwUG9zZSgpO1xuXHRcdHNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtKFBoeXNpY3MudXBkYXRlKTtcblx0XHRjb25zdCBib3VuZHMgPSBza2VsZXRvbi5nZXRCb3VuZHNSZWN0KHRoaXMuY2xpcHBpbmcgPyBuZXcgU2tlbGV0b25DbGlwcGluZygpIDogdW5kZWZpbmVkKTtcblx0XHRyZXR1cm4gYm91bmRzLndpZHRoID09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuXHRcdFx0PyB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfVxuXHRcdFx0OiBib3VuZHM7XG5cdH1cbn1cblxuLyoqIEEgYm91bmRzIHByb3ZpZGVyIHRoYXQgY2FsY3VsYXRlcyB0aGUgYm91bmRpbmcgYm94IGJ5IHRha2luZyB0aGUgbWF4aW11bWcgYm91bmRpbmcgYm94IGZvciBhIGNvbWJpbmF0aW9uIG9mIHNraW5zIGFuZCBzcGVjaWZpYyBhbmltYXRpb24uICovXG5leHBvcnQgY2xhc3MgU2tpbnNBbmRBbmltYXRpb25Cb3VuZHNQcm92aWRlclxuXHRpbXBsZW1lbnRzIFNwaW5lR2FtZU9iamVjdEJvdW5kc1Byb3ZpZGVyIHtcblx0LyoqXG5cdCAqIEBwYXJhbSBhbmltYXRpb24gVGhlIGFuaW1hdGlvbiB0byB1c2UgZm9yIGNhbGN1bGF0aW5nIHRoZSBib3VuZHMuIElmIG51bGwsIHRoZSBzZXR1cCBwb3NlIGlzIHVzZWQuXG5cdCAqIEBwYXJhbSBza2lucyBUaGUgc2tpbnMgdG8gdXNlIGZvciBjYWxjdWxhdGluZyB0aGUgYm91bmRzLiBJZiBlbXB0eSwgdGhlIGRlZmF1bHQgc2tpbiBpcyB1c2VkLlxuXHQgKiBAcGFyYW0gdGltZVN0ZXAgVGhlIHRpbWUgc3RlcCB0byB1c2UgZm9yIGNhbGN1bGF0aW5nIHRoZSBib3VuZHMuIEEgc21hbGxlciB0aW1lIHN0ZXAgbWVhbnMgbW9yZSBwcmVjaXNpb24sIGJ1dCBzbG93ZXIgY2FsY3VsYXRpb24uXG5cdCAqIEBwYXJhbSBjbGlwcGluZyBJZiB0cnVlLCBjbGlwcGluZyBhdHRhY2htZW50cyBhcmUgdXNlZCB0byBjb21wdXRlIHRoZSBib3VuZHMuIEZhbHNlLCBieSBkZWZhdWx0LlxuXHQgKi9cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYW5pbWF0aW9uOiBzdHJpbmcgfCBudWxsLFxuXHRcdHByaXZhdGUgc2tpbnM6IHN0cmluZ1tdID0gW10sXG5cdFx0cHJpdmF0ZSB0aW1lU3RlcDogbnVtYmVyID0gMC4wNSxcblx0XHRwcml2YXRlIGNsaXBwaW5nID0gZmFsc2UsXG5cdCkgeyB9XG5cblx0Y2FsY3VsYXRlQm91bmRzIChnYW1lT2JqZWN0OiBTcGluZUdhbWVPYmplY3QpOiB7XG5cdFx0eDogbnVtYmVyO1xuXHRcdHk6IG51bWJlcjtcblx0XHR3aWR0aDogbnVtYmVyO1xuXHRcdGhlaWdodDogbnVtYmVyO1xuXHR9IHtcblx0XHRpZiAoIWdhbWVPYmplY3Quc2tlbGV0b24gfHwgIWdhbWVPYmplY3QuYW5pbWF0aW9uU3RhdGUpXG5cdFx0XHRyZXR1cm4geyB4OiAwLCB5OiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG5cdFx0Ly8gTWFrZSBhIGNvcHkgb2YgYW5pbWF0aW9uIHN0YXRlIGFuZCBza2VsZXRvbiBhcyB0aGlzIG1pZ2h0IGJlIGNhbGxlZCB3aGlsZVxuXHRcdC8vIHRoZSBza2VsZXRvbiBpbiB0aGUgR2FtZU9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGhlYXZpbHkgbW9kaWZpZWQuIFdlIGNhbiBub3Rcblx0XHQvLyByZWNvbnN0cnVjdCB0aGF0IHN0YXRlLlxuXHRcdGNvbnN0IGFuaW1hdGlvblN0YXRlID0gbmV3IEFuaW1hdGlvblN0YXRlKGdhbWVPYmplY3QuYW5pbWF0aW9uU3RhdGUuZGF0YSk7XG5cdFx0Y29uc3Qgc2tlbGV0b24gPSBuZXcgU2tlbGV0b24oZ2FtZU9iamVjdC5za2VsZXRvbi5kYXRhKTtcblx0XHRjb25zdCBjbGlwcGVyID0gdGhpcy5jbGlwcGluZyA/IG5ldyBTa2VsZXRvbkNsaXBwaW5nKCkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGF0YSA9IHNrZWxldG9uLmRhdGE7XG5cdFx0aWYgKHRoaXMuc2tpbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0bGV0IGN1c3RvbVNraW4gPSBuZXcgU2tpbihcImN1c3RvbS1za2luXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBza2luTmFtZSBvZiB0aGlzLnNraW5zKSB7XG5cdFx0XHRcdGNvbnN0IHNraW4gPSBkYXRhLmZpbmRTa2luKHNraW5OYW1lKTtcblx0XHRcdFx0aWYgKHNraW4gPT0gbnVsbCkgY29udGludWU7XG5cdFx0XHRcdGN1c3RvbVNraW4uYWRkU2tpbihza2luKTtcblx0XHRcdH1cblx0XHRcdHNrZWxldG9uLnNldFNraW4oY3VzdG9tU2tpbik7XG5cdFx0fVxuXHRcdHNrZWxldG9uLnNldFRvU2V0dXBQb3NlKCk7XG5cblx0XHRjb25zdCBhbmltYXRpb24gPVxuXHRcdFx0dGhpcy5hbmltYXRpb24gIT0gbnVsbCA/IGRhdGEuZmluZEFuaW1hdGlvbih0aGlzLmFuaW1hdGlvbiEpIDogbnVsbDtcblx0XHRpZiAoYW5pbWF0aW9uID09IG51bGwpIHtcblx0XHRcdHNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtKFBoeXNpY3MudXBkYXRlKTtcblx0XHRcdGNvbnN0IGJvdW5kcyA9IHNrZWxldG9uLmdldEJvdW5kc1JlY3QoY2xpcHBlcik7XG5cdFx0XHRyZXR1cm4gYm91bmRzLndpZHRoID09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuXHRcdFx0XHQ/IHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9XG5cdFx0XHRcdDogYm91bmRzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgbWluWCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcblx0XHRcdFx0bWluWSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcblx0XHRcdFx0bWF4WCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxcblx0XHRcdFx0bWF4WSA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcblx0XHRcdGFuaW1hdGlvblN0YXRlLmNsZWFyVHJhY2tzKCk7XG5cdFx0XHRhbmltYXRpb25TdGF0ZS5zZXRBbmltYXRpb25XaXRoKDAsIGFuaW1hdGlvbiwgZmFsc2UpO1xuXHRcdFx0Y29uc3Qgc3RlcHMgPSBNYXRoLm1heChhbmltYXRpb24uZHVyYXRpb24gLyB0aGlzLnRpbWVTdGVwLCAxLjApO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdGVwczsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGRlbHRhID0gaSA+IDAgPyB0aGlzLnRpbWVTdGVwIDogMDtcblx0XHRcdFx0YW5pbWF0aW9uU3RhdGUudXBkYXRlKGRlbHRhKTtcblx0XHRcdFx0YW5pbWF0aW9uU3RhdGUuYXBwbHkoc2tlbGV0b24pO1xuXHRcdFx0XHRza2VsZXRvbi51cGRhdGUoZGVsdGEpO1xuXHRcdFx0XHRza2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybShQaHlzaWNzLnVwZGF0ZSk7XG5cblx0XHRcdFx0Y29uc3QgYm91bmRzID0gc2tlbGV0b24uZ2V0Qm91bmRzUmVjdChjbGlwcGVyKTtcblx0XHRcdFx0bWluWCA9IE1hdGgubWluKG1pblgsIGJvdW5kcy54KTtcblx0XHRcdFx0bWluWSA9IE1hdGgubWluKG1pblksIGJvdW5kcy55KTtcblx0XHRcdFx0bWF4WCA9IE1hdGgubWF4KG1heFgsIGJvdW5kcy54ICsgYm91bmRzLndpZHRoKTtcblx0XHRcdFx0bWF4WSA9IE1hdGgubWF4KG1heFksIGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBib3VuZHMgPSB7XG5cdFx0XHRcdHg6IG1pblgsXG5cdFx0XHRcdHk6IG1pblksXG5cdFx0XHRcdHdpZHRoOiBtYXhYIC0gbWluWCxcblx0XHRcdFx0aGVpZ2h0OiBtYXhZIC0gbWluWSxcblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gYm91bmRzLndpZHRoID09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuXHRcdFx0XHQ/IHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9XG5cdFx0XHRcdDogYm91bmRzO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEEgU3BpbmVHYW1lT2JqZWN0IGlzIGEgUGhhc2VyIHtAbGluayBHYW1lT2JqZWN0fSB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFBoYXNlciBTY2VuZSBhbmQgcmVuZGVyIGEgU3BpbmUgc2tlbGV0b24uXG4gKlxuICogVGhlIFNwaW5lIEdhbWVPYmplY3QgaXMgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGEgU3BpbmUge0BsaW5rIFNrZWxldG9ufSwge0BsaW5rIEFuaW1hdGlvblN0YXRlfSBhbmQge0BsaW5rIEFuaW1hdGlvblN0YXRlRGF0YX0uIEl0IGlzIHJlc3BvbnNpYmxlIGZvcjpcbiAqIC0gdXBkYXRpbmcgdGhlIGFuaW1hdGlvbiBzdGF0ZVxuICogLSBhcHBseWluZyB0aGUgYW5pbWF0aW9uIHN0YXRlIHRvIHRoZSBza2VsZXRvbidzIGJvbmVzLCBzbG90cywgYXR0YWNobWVudHMsIGFuZCBkcmF3IG9yZGVyLlxuICogLSB1cGRhdGluZyB0aGUgc2tlbGV0b24ncyBib25lIHdvcmxkIHRyYW5zZm9ybXNcbiAqIC0gcmVuZGVyaW5nIHRoZSBza2VsZXRvblxuICpcbiAqIFNlZSB0aGUge0BsaW5rIFNwaW5lUGx1Z2lufSBjbGFzcyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIGEgYFNwaW5lR2FtZU9iamVjdGAuXG4gKlxuICogVGhlIHNrZWxldG9uLCBhbmltYXRpb24gc3RhdGUsIGFuZCBhbmltYXRpb24gc3RhdGUgZGF0YSBjYW4gYmUgYWNjZXNzZWQgdmlhIHRoZSByZXBzZWN0aXZlIGZpZWxkcy4gVGhleSBjYW4gYmUgbWFudWFsbHkgdXBkYXRlZCB2aWEge0BsaW5rIHVwZGF0ZVBvc2V9LlxuICpcbiAqIFRvIG1vZGlmeSB0aGUgYm9uZSBoaWVyYXJjaHkgYmVmb3JlIHRoZSB3b3JsZCB0cmFuc2Zvcm1zIGFyZSBjb21wdXRlZCwgYSBjYWxsYmFjayBjYW4gYmUgc2V0IHZpYSB0aGUge0BsaW5rIGJlZm9yZVVwZGF0ZVdvcmxkVHJhbnNmb3Jtc30gZmllbGQuXG4gKlxuICogVG8gbW9kaWZ5IHRoZSBib25lIGhpZXJhcmNoeSBhZnRlciB0aGUgd29ybGQgdHJhbnNmb3JtcyBhcmUgY29tcHV0ZWQsIGEgY2FsbGJhY2sgY2FuIGJlIHNldCB2aWEgdGhlIHtAbGluayBhZnRlclVwZGF0ZVdvcmxkVHJhbnNmb3Jtc30gZmllbGQuXG4gKlxuICogVGhlIGNsYXNzIGFsc28gZmVhdHVyZXMgbWV0aG9kcyB0byBjb252ZXJ0IGJldHdlZW4gdGhlIHNrZWxldG9uIGNvb3JkaW5hdGUgc3lzdGVtIGFuZCB0aGUgUGhhc2VyIGNvb3JkaW5hdGUgc3lzdGVtLlxuICpcbiAqIFNlZSB7QGxpbmsgc2tlbGV0b25Ub1BoYXNlcldvcmxkQ29vcmRpbmF0ZXN9LCB7QGxpbmsgcGhhc2VyV29ybGRDb29yZGluYXRlc1RvU2tlbGV0b259LCBhbmQge0BsaW5rIHBoYXNlcldvcmxkQ29vcmRpbmF0ZXNUb0JvbmVMb2NhbC59XG4gKi9cbmV4cG9ydCBjbGFzcyBTcGluZUdhbWVPYmplY3QgZXh0ZW5kcyBEZXB0aE1peGluKFxuXHRPcmlnaW5NaXhpbihcblx0XHRDb21wdXRlZFNpemVNaXhpbihcblx0XHRcdEZsaXBNaXhpbihcblx0XHRcdFx0U2Nyb2xsRmFjdG9yTWl4aW4oXG5cdFx0XHRcdFx0VHJhbnNmb3JtTWl4aW4oVmlzaWJsZU1peGluKEFscGhhTWl4aW4oQmFzZVNwaW5lR2FtZU9iamVjdCkpKVxuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0KVxuXHQpXG4pIHtcblx0YmxlbmRNb2RlID0gLTE7XG5cdHNrZWxldG9uOiBTa2VsZXRvbjtcblx0YW5pbWF0aW9uU3RhdGVEYXRhOiBBbmltYXRpb25TdGF0ZURhdGE7XG5cdGFuaW1hdGlvblN0YXRlOiBBbmltYXRpb25TdGF0ZTtcblx0YmVmb3JlVXBkYXRlV29ybGRUcmFuc2Zvcm1zOiAob2JqZWN0OiBTcGluZUdhbWVPYmplY3QpID0+IHZvaWQgPSAoKSA9PiB7IH07XG5cdGFmdGVyVXBkYXRlV29ybGRUcmFuc2Zvcm1zOiAob2JqZWN0OiBTcGluZUdhbWVPYmplY3QpID0+IHZvaWQgPSAoKSA9PiB7IH07XG5cdHByaXZhdGUgcHJlbXVsdGlwbGllZEFscGhhID0gZmFsc2U7XG5cdHByaXZhdGUgb2Zmc2V0WCA9IDA7XG5cdHByaXZhdGUgb2Zmc2V0WSA9IDA7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHNjZW5lOiBQaGFzZXIuU2NlbmUsXG5cdFx0cHJpdmF0ZSBwbHVnaW46IFNwaW5lUGx1Z2luLFxuXHRcdHg6IG51bWJlcixcblx0XHR5OiBudW1iZXIsXG5cdFx0ZGF0YUtleTogc3RyaW5nLFxuXHRcdGF0bGFzS2V5OiBzdHJpbmcsXG5cdFx0cHVibGljIGJvdW5kc1Byb3ZpZGVyOiBTcGluZUdhbWVPYmplY3RCb3VuZHNQcm92aWRlciA9IG5ldyBTZXR1cFBvc2VCb3VuZHNQcm92aWRlcigpXG5cdCkge1xuXHRcdHN1cGVyKHNjZW5lLCAod2luZG93IGFzIGFueSkuU1BJTkVfR0FNRV9PQkpFQ1RfVFlQRSA/ICh3aW5kb3cgYXMgYW55KS5TUElORV9HQU1FX09CSkVDVF9UWVBFIDogU1BJTkVfR0FNRV9PQkpFQ1RfVFlQRSk7XG5cdFx0dGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcblxuXHRcdHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdGhpcy5wbHVnaW4uaXNBdGxhc1ByZW11bHRpcGxpZWQoYXRsYXNLZXkpO1xuXHRcdHRoaXMuc2tlbGV0b24gPSB0aGlzLnBsdWdpbi5jcmVhdGVTa2VsZXRvbihkYXRhS2V5LCBhdGxhc0tleSk7XG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZURhdGEgPSBuZXcgQW5pbWF0aW9uU3RhdGVEYXRhKHRoaXMuc2tlbGV0b24uZGF0YSk7XG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZSA9IG5ldyBBbmltYXRpb25TdGF0ZSh0aGlzLmFuaW1hdGlvblN0YXRlRGF0YSk7XG5cdFx0dGhpcy5za2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybShQaHlzaWNzLnVwZGF0ZSk7XG5cdFx0dGhpcy51cGRhdGVTaXplKCk7XG5cdH1cblxuXHR1cGRhdGVTaXplICgpIHtcblx0XHRpZiAoIXRoaXMuc2tlbGV0b24pIHJldHVybjtcblx0XHRsZXQgYm91bmRzID0gdGhpcy5ib3VuZHNQcm92aWRlci5jYWxjdWxhdGVCb3VuZHModGhpcyk7XG5cdFx0dGhpcy53aWR0aCA9IGJvdW5kcy53aWR0aDtcblx0XHR0aGlzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQ7XG5cdFx0dGhpcy5zZXREaXNwbGF5T3JpZ2luKC1ib3VuZHMueCwgLWJvdW5kcy55KTtcblx0XHR0aGlzLm9mZnNldFggPSAtYm91bmRzLng7XG5cdFx0dGhpcy5vZmZzZXRZID0gLWJvdW5kcy55O1xuXHR9XG5cblx0LyoqIENvbnZlcnRzIGEgcG9pbnQgZnJvbSB0aGUgc2tlbGV0b24gY29vcmRpbmF0ZSBzeXN0ZW0gdG8gdGhlIFBoYXNlciB3b3JsZCBjb29yZGluYXRlIHN5c3RlbS4gKi9cblx0c2tlbGV0b25Ub1BoYXNlcldvcmxkQ29vcmRpbmF0ZXMgKHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcblx0XHRsZXQgdHJhbnNmb3JtID0gdGhpcy5nZXRXb3JsZFRyYW5zZm9ybU1hdHJpeCgpO1xuXHRcdGxldCBhID0gdHJhbnNmb3JtLmEsXG5cdFx0XHRiID0gdHJhbnNmb3JtLmIsXG5cdFx0XHRjID0gdHJhbnNmb3JtLmMsXG5cdFx0XHRkID0gdHJhbnNmb3JtLmQsXG5cdFx0XHR0eCA9IHRyYW5zZm9ybS50eCxcblx0XHRcdHR5ID0gdHJhbnNmb3JtLnR5O1xuXHRcdGxldCB4ID0gcG9pbnQueDtcblx0XHRsZXQgeSA9IHBvaW50Lnk7XG5cdFx0cG9pbnQueCA9IHggKiBhICsgeSAqIGMgKyB0eDtcblx0XHRwb2ludC55ID0geCAqIGIgKyB5ICogZCArIHR5O1xuXHR9XG5cblx0LyoqIENvbnZlcnRzIGEgcG9pbnQgZnJvbSB0aGUgUGhhc2VyIHdvcmxkIGNvb3JkaW5hdGUgc3lzdGVtIHRvIHRoZSBza2VsZXRvbiBjb29yZGluYXRlIHN5c3RlbS4gKi9cblx0cGhhc2VyV29ybGRDb29yZGluYXRlc1RvU2tlbGV0b24gKHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcblx0XHRsZXQgdHJhbnNmb3JtID0gdGhpcy5nZXRXb3JsZFRyYW5zZm9ybU1hdHJpeCgpO1xuXHRcdHRyYW5zZm9ybSA9IHRyYW5zZm9ybS5pbnZlcnQoKTtcblx0XHRsZXQgYSA9IHRyYW5zZm9ybS5hLFxuXHRcdFx0YiA9IHRyYW5zZm9ybS5iLFxuXHRcdFx0YyA9IHRyYW5zZm9ybS5jLFxuXHRcdFx0ZCA9IHRyYW5zZm9ybS5kLFxuXHRcdFx0dHggPSB0cmFuc2Zvcm0udHgsXG5cdFx0XHR0eSA9IHRyYW5zZm9ybS50eTtcblx0XHRsZXQgeCA9IHBvaW50Lng7XG5cdFx0bGV0IHkgPSBwb2ludC55O1xuXHRcdHBvaW50LnggPSB4ICogYSArIHkgKiBjICsgdHg7XG5cdFx0cG9pbnQueSA9IHggKiBiICsgeSAqIGQgKyB0eTtcblx0fVxuXG5cdC8qKiBDb252ZXJ0cyBhIHBvaW50IGZyb20gdGhlIFBoYXNlciB3b3JsZCBjb29yZGluYXRlIHN5c3RlbSB0byB0aGUgYm9uZSdzIGxvY2FsIGNvb3JkaW5hdGUgc3lzdGVtLiAqL1xuXHRwaGFzZXJXb3JsZENvb3JkaW5hdGVzVG9Cb25lIChwb2ludDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9LCBib25lOiBCb25lKSB7XG5cdFx0dGhpcy5waGFzZXJXb3JsZENvb3JkaW5hdGVzVG9Ta2VsZXRvbihwb2ludCk7XG5cdFx0aWYgKGJvbmUucGFyZW50KSB7XG5cdFx0XHRib25lLnBhcmVudC53b3JsZFRvTG9jYWwocG9pbnQgYXMgVmVjdG9yMik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJvbmUud29ybGRUb0xvY2FsKHBvaW50IGFzIFZlY3RvcjIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSB7QGxpbmsgQW5pbWF0aW9uU3RhdGV9LCBhcHBsaWVzIGl0IHRvIHRoZSB7QGxpbmsgU2tlbGV0b259LCB0aGVuIHVwZGF0ZXMgdGhlIHdvcmxkIHRyYW5zZm9ybXMgb2YgYWxsIGJvbmVzLlxuXHQgKiBAcGFyYW0gZGVsdGEgVGhlIHRpbWUgZGVsdGEgaW4gbWlsbGlzZWNvbmRzXG5cdCAqL1xuXHR1cGRhdGVQb3NlIChkZWx0YTogbnVtYmVyKSB7XG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZS51cGRhdGUoZGVsdGEgLyAxMDAwKTtcblx0XHR0aGlzLmFuaW1hdGlvblN0YXRlLmFwcGx5KHRoaXMuc2tlbGV0b24pO1xuXHRcdHRoaXMuYmVmb3JlVXBkYXRlV29ybGRUcmFuc2Zvcm1zKHRoaXMpO1xuXHRcdHRoaXMuc2tlbGV0b24udXBkYXRlKGRlbHRhIC8gMTAwMCk7XG5cdFx0dGhpcy5za2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybShQaHlzaWNzLnVwZGF0ZSk7XG5cdFx0dGhpcy5hZnRlclVwZGF0ZVdvcmxkVHJhbnNmb3Jtcyh0aGlzKTtcblx0fVxuXG5cdHByZVVwZGF0ZSAodGltZTogbnVtYmVyLCBkZWx0YTogbnVtYmVyKSB7XG5cdFx0aWYgKCF0aGlzLnNrZWxldG9uIHx8ICF0aGlzLmFuaW1hdGlvblN0YXRlKSByZXR1cm47XG5cdFx0dGhpcy51cGRhdGVQb3NlKGRlbHRhKTtcblx0fVxuXG5cdHByZURlc3Ryb3kgKCkge1xuXHRcdC8vIEZJWE1FIHRlYXIgZG93biBhbnkgZXZlbnQgZW1pdHRlcnNcblx0fVxuXG5cdHdpbGxSZW5kZXIgKGNhbWVyYTogUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEpIHtcblx0XHR2YXIgR2FtZU9iamVjdFJlbmRlck1hc2sgPSAweGY7XG5cdFx0dmFyIHJlc3VsdCA9ICF0aGlzLnNrZWxldG9uIHx8ICEoR2FtZU9iamVjdFJlbmRlck1hc2sgIT09IHRoaXMucmVuZGVyRmxhZ3MgfHwgKHRoaXMuY2FtZXJhRmlsdGVyICE9PSAwICYmIHRoaXMuY2FtZXJhRmlsdGVyICYgY2FtZXJhLmlkKSk7XG5cdFx0aWYgKCF0aGlzLnZpc2libGUpIHJlc3VsdCA9IGZhbHNlO1xuXG5cdFx0aWYgKCFyZXN1bHQgJiYgdGhpcy5wYXJlbnRDb250YWluZXIgJiYgdGhpcy5wbHVnaW4ud2ViR0xSZW5kZXJlcikge1xuXHRcdFx0dmFyIHNjZW5lUmVuZGVyZXIgPSB0aGlzLnBsdWdpbi53ZWJHTFJlbmRlcmVyO1xuXG5cdFx0XHRpZiAodGhpcy5wbHVnaW4uZ2wgJiYgdGhpcy5wbHVnaW4ucGhhc2VyUmVuZGVyZXIgaW5zdGFuY2VvZiBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlciAmJiBzY2VuZVJlbmRlcmVyLmJhdGNoZXIuaXNEcmF3aW5nKSB7XG5cdFx0XHRcdHNjZW5lUmVuZGVyZXIuZW5kKCk7XG5cdFx0XHRcdHRoaXMucGx1Z2luLnBoYXNlclJlbmRlcmVyLnBpcGVsaW5lcy5yZWJpbmQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmVuZGVyV2ViR0wgKFxuXHRcdHJlbmRlcmVyOiBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcixcblx0XHRzcmM6IFNwaW5lR2FtZU9iamVjdCxcblx0XHRjYW1lcmE6IFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhLFxuXHRcdHBhcmVudE1hdHJpeDogUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4XG5cdCkge1xuXHRcdGlmICghdGhpcy5za2VsZXRvbiB8fCAhdGhpcy5hbmltYXRpb25TdGF0ZSB8fCAhdGhpcy5wbHVnaW4ud2ViR0xSZW5kZXJlcilcblx0XHRcdHJldHVybjtcblxuXHRcdGxldCBzY2VuZVJlbmRlcmVyID0gdGhpcy5wbHVnaW4ud2ViR0xSZW5kZXJlcjtcblx0XHRpZiAocmVuZGVyZXIubmV3VHlwZSkge1xuXHRcdFx0cmVuZGVyZXIucGlwZWxpbmVzLmNsZWFyKCk7XG5cdFx0XHRzY2VuZVJlbmRlcmVyLmJlZ2luKCk7XG5cdFx0fVxuXG5cdFx0Y2FtZXJhLmFkZFRvUmVuZGVyTGlzdChzcmMpO1xuXHRcdGxldCB0cmFuc2Zvcm0gPSBQaGFzZXIuR2FtZU9iamVjdHMuR2V0Q2FsY01hdHJpeChcblx0XHRcdHNyYyxcblx0XHRcdGNhbWVyYSxcblx0XHRcdHBhcmVudE1hdHJpeFxuXHRcdCkuY2FsYztcblx0XHRsZXQgYSA9IHRyYW5zZm9ybS5hLFxuXHRcdFx0YiA9IHRyYW5zZm9ybS5iLFxuXHRcdFx0YyA9IHRyYW5zZm9ybS5jLFxuXHRcdFx0ZCA9IHRyYW5zZm9ybS5kLFxuXHRcdFx0dHggPSB0cmFuc2Zvcm0udHgsXG5cdFx0XHR0eSA9IHRyYW5zZm9ybS50eTtcblxuXHRcdGxldCBvZmZzZXRYID0gc3JjLm9mZnNldFggLSBzcmMuZGlzcGxheU9yaWdpblg7XG5cdFx0bGV0IG9mZnNldFkgPSBzcmMub2Zmc2V0WSAtIHNyYy5kaXNwbGF5T3JpZ2luWTtcblxuXHRcdHNjZW5lUmVuZGVyZXIuZHJhd1NrZWxldG9uKFxuXHRcdFx0c3JjLnNrZWxldG9uLFxuXHRcdFx0c3JjLnByZW11bHRpcGxpZWRBbHBoYSxcblx0XHRcdC0xLFxuXHRcdFx0LTEsXG5cdFx0XHQodmVydGljZXMsIG51bVZlcnRpY2VzLCBzdHJpZGUpID0+IHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBudW1WZXJ0aWNlczsgaSArPSBzdHJpZGUpIHtcblx0XHRcdFx0XHRsZXQgdnggPSB2ZXJ0aWNlc1tpXSArIG9mZnNldFg7XG5cdFx0XHRcdFx0bGV0IHZ5ID0gdmVydGljZXNbaSArIDFdICsgb2Zmc2V0WTtcblx0XHRcdFx0XHR2ZXJ0aWNlc1tpXSA9IHZ4ICogYSArIHZ5ICogYyArIHR4O1xuXHRcdFx0XHRcdHZlcnRpY2VzW2kgKyAxXSA9IHZ4ICogYiArIHZ5ICogZCArIHR5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGlmICghcmVuZGVyZXIubmV4dFR5cGVNYXRjaCkge1xuXHRcdFx0c2NlbmVSZW5kZXJlci5lbmQoKTtcblx0XHRcdHJlbmRlcmVyLnBpcGVsaW5lcy5yZWJpbmQoKTtcblx0XHR9XG5cdH1cblxuXHRyZW5kZXJDYW52YXMgKFxuXHRcdHJlbmRlcmVyOiBQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyLFxuXHRcdHNyYzogU3BpbmVHYW1lT2JqZWN0LFxuXHRcdGNhbWVyYTogUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEsXG5cdFx0cGFyZW50TWF0cml4OiBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXhcblx0KSB7XG5cdFx0aWYgKCF0aGlzLnNrZWxldG9uIHx8ICF0aGlzLmFuaW1hdGlvblN0YXRlIHx8ICF0aGlzLnBsdWdpbi5jYW52YXNSZW5kZXJlcilcblx0XHRcdHJldHVybjtcblxuXHRcdGxldCBjb250ZXh0ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XG5cdFx0bGV0IHNrZWxldG9uUmVuZGVyZXIgPSB0aGlzLnBsdWdpbi5jYW52YXNSZW5kZXJlcjtcblx0XHQoc2tlbGV0b25SZW5kZXJlciBhcyBhbnkpLmN0eCA9IGNvbnRleHQ7XG5cblx0XHRjYW1lcmEuYWRkVG9SZW5kZXJMaXN0KHNyYyk7XG5cdFx0bGV0IHRyYW5zZm9ybSA9IFBoYXNlci5HYW1lT2JqZWN0cy5HZXRDYWxjTWF0cml4KFxuXHRcdFx0c3JjLFxuXHRcdFx0Y2FtZXJhLFxuXHRcdFx0cGFyZW50TWF0cml4XG5cdFx0KS5jYWxjO1xuXHRcdGxldCBza2VsZXRvbiA9IHRoaXMuc2tlbGV0b247XG5cdFx0c2tlbGV0b24ueCA9IHRyYW5zZm9ybS50eDtcblx0XHRza2VsZXRvbi55ID0gdHJhbnNmb3JtLnR5O1xuXHRcdHNrZWxldG9uLnNjYWxlWCA9IHRyYW5zZm9ybS5zY2FsZVg7XG5cdFx0c2tlbGV0b24uc2NhbGVZID0gdHJhbnNmb3JtLnNjYWxlWTtcblx0XHRsZXQgcm9vdCA9IHNrZWxldG9uLmdldFJvb3RCb25lKCkhO1xuXHRcdHJvb3Qucm90YXRpb24gPSAtTWF0aFV0aWxzLnJhZGlhbnNUb0RlZ3JlZXMgKiB0cmFuc2Zvcm0ucm90YXRpb25Ob3JtYWxpemVkO1xuXHRcdHRoaXMuc2tlbGV0b24udXBkYXRlV29ybGRUcmFuc2Zvcm0oUGh5c2ljcy51cGRhdGUpO1xuXG5cdFx0Y29udGV4dC5zYXZlKCk7XG5cdFx0c2tlbGV0b25SZW5kZXJlci5kcmF3KHNrZWxldG9uKTtcblx0XHRjb250ZXh0LnJlc3RvcmUoKTtcblx0fVxufVxuIl19
|
package/dist/SpinePlugin.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/******************************************************************************
|
|
2
2
|
* Spine Runtimes License Agreement
|
|
3
|
-
* Last updated
|
|
3
|
+
* Last updated April 5, 2025. Replaces all prior versions.
|
|
4
4
|
*
|
|
5
|
-
* Copyright (c) 2013-
|
|
5
|
+
* Copyright (c) 2013-2025, Esoteric Software LLC
|
|
6
6
|
*
|
|
7
7
|
* Integration of the Spine Runtimes into software or otherwise creating
|
|
8
8
|
* derivative works of the Spine Runtimes is permitted under the terms and
|
|
9
9
|
* conditions of Section 2 of the Spine Editor License Agreement:
|
|
10
10
|
* http://esotericsoftware.com/spine-editor-license
|
|
11
11
|
*
|
|
12
|
-
* Otherwise, it is permitted to integrate the Spine Runtimes into software
|
|
13
|
-
* otherwise create derivative works of the Spine Runtimes (collectively,
|
|
12
|
+
* Otherwise, it is permitted to integrate the Spine Runtimes into software
|
|
13
|
+
* or otherwise create derivative works of the Spine Runtimes (collectively,
|
|
14
14
|
* "Products"), provided that each user of the Products must obtain their own
|
|
15
15
|
* Spine Editor license and redistribution of the Products in any form must
|
|
16
16
|
* include this license and copyright notice.
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
|
|
24
24
|
* BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
|
|
25
25
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
26
|
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
|
-
* SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
26
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
|
+
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
29
|
import * as Phaser from "phaser";
|
|
30
30
|
import { SceneRenderer, Skeleton, SkeletonData, TextureAtlas } from "@esotericsoftware/spine-webgl";
|
package/dist/SpinePlugin.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/******************************************************************************
|
|
2
2
|
* Spine Runtimes License Agreement
|
|
3
|
-
* Last updated
|
|
3
|
+
* Last updated April 5, 2025. Replaces all prior versions.
|
|
4
4
|
*
|
|
5
|
-
* Copyright (c) 2013-
|
|
5
|
+
* Copyright (c) 2013-2025, Esoteric Software LLC
|
|
6
6
|
*
|
|
7
7
|
* Integration of the Spine Runtimes into software or otherwise creating
|
|
8
8
|
* derivative works of the Spine Runtimes is permitted under the terms and
|
|
9
9
|
* conditions of Section 2 of the Spine Editor License Agreement:
|
|
10
10
|
* http://esotericsoftware.com/spine-editor-license
|
|
11
11
|
*
|
|
12
|
-
* Otherwise, it is permitted to integrate the Spine Runtimes into software
|
|
13
|
-
* otherwise create derivative works of the Spine Runtimes (collectively,
|
|
12
|
+
* Otherwise, it is permitted to integrate the Spine Runtimes into software
|
|
13
|
+
* or otherwise create derivative works of the Spine Runtimes (collectively,
|
|
14
14
|
* "Products"), provided that each user of the Products must obtain their own
|
|
15
15
|
* Spine Editor license and redistribution of the Products in any form must
|
|
16
16
|
* include this license and copyright notice.
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
|
|
24
24
|
* BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
|
|
25
25
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
26
|
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
|
-
* SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
26
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
|
+
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
29
|
import * as Phaser from "phaser";
|
|
30
30
|
import { SPINE_ATLAS_CACHE_KEY, SPINE_GAME_OBJECT_TYPE, SPINE_SKELETON_DATA_FILE_TYPE, SPINE_ATLAS_FILE_TYPE, SPINE_SKELETON_FILE_CACHE_KEY as SPINE_SKELETON_DATA_CACHE_KEY } from "./keys.js";
|
|
@@ -313,7 +313,9 @@ class SpineAtlasFile extends Phaser.Loader.MultiFile {
|
|
|
313
313
|
textures.push(line);
|
|
314
314
|
}
|
|
315
315
|
}
|
|
316
|
-
let basePath = file.src.match(/^.*\//) ?? "";
|
|
316
|
+
let basePath = (file.src.match(/^.*\//) ?? "").toString();
|
|
317
|
+
if (this.loader.path && this.loader.path.length > 0 && basePath.startsWith(this.loader.path))
|
|
318
|
+
basePath = basePath.slice(this.loader.path.length);
|
|
317
319
|
for (var i = 0; i < textures.length; i++) {
|
|
318
320
|
var url = basePath + textures[i];
|
|
319
321
|
var key = file.key + "!" + textures[i];
|
|
@@ -347,4 +349,4 @@ class SpineAtlasFile extends Phaser.Loader.MultiFile {
|
|
|
347
349
|
}
|
|
348
350
|
}
|
|
349
351
|
}
|
|
350
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BpbmVQbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU3BpbmVQbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSw2QkFBNkIsRUFBRSxxQkFBcUIsRUFBRSw2QkFBNkIsSUFBSSw2QkFBNkIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoTSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFnQixZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDbkssT0FBTyxFQUFFLGVBQWUsRUFBaUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFtQmpGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sT0FBTyxXQUFZLFNBQVEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO0lBQzFELElBQUksQ0FBYztJQUNWLE9BQU8sQ0FBVTtJQUN6QixFQUFFLENBQStCO0lBQ2pDLE1BQU0sQ0FBQyxpQkFBaUIsR0FBeUIsSUFBSSxDQUFDO0lBQ3RELElBQUksYUFBYTtRQUNoQixPQUFPLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsY0FBYyxDQUEwQjtJQUN4QyxjQUFjLENBQThFO0lBQ3BGLGlCQUFpQixDQUF5QjtJQUMxQyxVQUFVLENBQXlCO0lBRTNDLFlBQWEsS0FBbUIsRUFBRSxhQUEyQyxFQUFFLFNBQWlCO1FBQy9GLEtBQUssQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJ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TyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNqSSxJQUFJLENBQUMsSUFBSSxHQUFHO3dCQUNYLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTt3QkFDZixrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO3FCQUMzQyxDQUFDO29CQUNGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbkIsQ0FBQztZQUNGLENBQUM7UUFDRixDQUFDO0lBQ0YsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBKdWx5IDI4LCAyMDIzLiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjMsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3JcbiAqIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSEVcbiAqIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgKiBhcyBQaGFzZXIgZnJvbSBcInBoYXNlclwiO1xuaW1wb3J0IHsgU1BJTkVfQVRMQVNfQ0FDSEVfS0VZLCBTUElORV9HQU1FX09CSkVDVF9UWVBFLCBTUElORV9TS0VMRVRPTl9EQVRBX0ZJTEVfVFlQRSwgU1BJTkVfQVRMQVNfRklMRV9UWVBFLCBTUElORV9TS0VMRVRPTl9GSUxFX0NBQ0hFX0tFWSBhcyBTUElORV9TS0VMRVRPTl9EQVRBX0NBQ0hFX0tFWSB9IGZyb20gXCIuL2tleXMuanNcIjtcbmltcG9ydCB7IEF0bGFzQXR0YWNobWVudExvYWRlciwgR0xUZXh0dXJlLCBTY2VuZVJlbmRlcmVyLCBTa2VsZXRvbiwgU2tlbGV0b25CaW5hcnksIFNrZWxldG9uRGF0YSwgU2tlbGV0b25Kc29uLCBUZXh0dXJlQXRsYXMgfSBmcm9tIFwiQGVzb3Rlcmljc29mdHdhcmUvc3BpbmUtd2ViZ2xcIlxuaW1wb3J0IHsgU3BpbmVHYW1lT2JqZWN0LCBTcGluZUdhbWVPYmplY3RCb3VuZHNQcm92aWRlciB9IGZyb20gXCIuL1NwaW5lR2FtZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgQ2FudmFzVGV4dHVyZSwgU2tlbGV0b25SZW5kZXJlciB9IGZyb20gXCJAZXNvdGVyaWNzb2Z0d2FyZS9zcGluZS1jYW52YXNcIjtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9iamVjdCB1c2VkIHdoZW4gY3JlYXRpbmcge0BsaW5rIFNwaW5lR2FtZU9iamVjdH0gaW5zdGFuY2VzIHZpYSBhIHNjZW5lJ3NcbiAqIHtAbGluayBHYW1lT2JqZWN0Q3JlYXRvcn0gKGBTY2VuZS5tYWtlYCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BpbmVHYW1lT2JqZWN0Q29uZmlnIGV4dGVuZHMgUGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDb25maWcge1xuXHQvKiogVGhlIHgtcG9zaXRpb24gb2YgdGhlIG9iamVjdCwgb3B0aW9uYWwsIGRlZmF1bHQ6IDAgKi9cblx0eD86IG51bWJlcixcblx0LyoqIFRoZSB5LXBvc2l0aW9uIG9mIHRoZSBvYmplY3QsIG9wdGlvbmFsLCBkZWZhdWx0OiAwICovXG5cdHk/OiBudW1iZXIsXG5cdC8qKiBUaGUgc2tlbGV0b24gZGF0YSBrZXkgKi9cblx0ZGF0YUtleTogc3RyaW5nLFxuXHQvKiogVGhlIGF0bGFzIGtleSAqL1xuXHRhdGxhc0tleTogc3RyaW5nXG5cdC8qKiBUaGUgYm91bmRzIHByb3ZpZGVyLCBvcHRpb25hbCwgZGVmYXVsdDogYFNldHVwUG9zZUJvdW5kc1Byb3ZpZGVyYCAqL1xuXHRib3VuZHNQcm92aWRlcj86IFNwaW5lR2FtZU9iamVjdEJvdW5kc1Byb3ZpZGVyXG59XG5cbi8qKlxuICoge0BsaW5rIFNjZW5lUGx1Z2lufSBpbXBsZW1lbnRhdGlvbiBhZGRpbmcgU3BpbmUgUnVudGltZSBjYXBhYmlsaXRpZXMgdG8gYSBzY2VuZS5cbiAqXG4gKiBUaGUgc2NlbmUncyB7QGxpbmsgTG9hZGVyUGx1Z2lufSAoYFNjZW5lLmxvYWRgKSBnZXRzIHRoZXNlIGFkZGl0aW9uYWwgZnVuY3Rpb25zOlxuICogKiBgc3BpbmVCaW5hcnkoa2V5OiBzdHJpbmcsIHVybDogc3RyaW5nLCB4aHJTZXR0aW5ncz86IFhIUlNldHRpbmdzT2JqZWN0KWA6IGxvYWRzIGEgc2tlbGV0b24gYmluYXJ5IGAuc2tlbGAgZmlsZSBmcm9tIHRoZSBgdXJsYC5cbiAqICogYHNwaW5lSnNvbihrZXk6IHN0cmluZywgdXJsOiBzdHJpbmcsIHhoclNldHRpbmdzPzogWEhSU2V0dGluZ3NPYmplY3QpYDogbG9hZHMgYSBza2VsZXRvbiBiaW5hcnkgYC5za2VsYCBmaWxlIGZyb20gdGhlIGB1cmxgLlxuICogKiBgc3BpbmVBdGxhcyhrZXk6IHN0cmluZywgdXJsOiBzdHJpbmcsIHByZW11bHRpcGxpZWRBbHBoYTogYm9vbGVhbiA9IHRydWUsIHhoclNldHRpbmdzPzogWEhSU2V0dGluZ3NPYmplY3QpYDogbG9hZHMgYSB0ZXh0dXJlIGF0bGFzIGAuYXRsYXNgIGZpbGUgZnJvbSB0aGUgYHVybGAgYXMgd2VsbCBhcyBpdHMgY29ycmVwb25kaW5nIHRleHR1cmUgYXRsYXMgcGFnZSBpbWFnZXMuXG4gKlxuICogVGhlIHNjZW5lJ3Mge0BsaW5rIEdhbWVPYmplY3RGYWN0b3J5fSAoYFNjZW5lLmFkZGApIGdldHMgdGhlc2UgYWRkaXRpb25hbCBmdW5jdGlvbnM6XG4gKiAqIGBzcGluZSh4OiBudW1iZXIsIHk6IG51bWJlciwgZGF0YUtleTogc3RyaW5nLCBhdGxhc0tleTogc3RyaW5nLCBib3VuZHNQcm92aWRlcjogU3BpbmVHYW1lT2JqZWN0Qm91bmRzUHJvdmlkZXIgPSBTZXR1cFBvc2VCb3VuZHNQcm92aWRlcigpKWA6XG4gKiAgICBjcmVhdGVzIGEgbmV3IHtAbGluayBTcGluZUdhbWVPYmplY3R9IGZyb20gdGhlIGRhdGEgYW5kIGF0bGFzIGF0IHBvc2l0aW9uIGAoeCwgeSlgLCB1c2luZyB0aGUge0BsaW5rIEJvdW5kc1Byb3ZpZGVyfSB0byBjYWxjdWxhdGUgaXRzIGJvdW5kaW5nIGJveC4gVGhlIG9iamVjdCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBzY2VuZS5cbiAqXG4gKiBUaGUgc2NlbmUncyB7QGxpbmsgR2FtZU9iamVjdENyZWF0b3J9IChgU2NlbmUubWFrZWApIGdldHMgdGhlc2UgYWRkaXRpb25hbCBmdW5jdGlvbnM6XG4gKiAqIGBzcGluZShjb25maWc6IFNwaW5lR2FtZU9iamVjdENvbmZpZylgOiBjcmVhdGVzIGEgbmV3IHtAbGluayBTcGluZUdhbWVPYmplY3R9IGZyb20gdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICpcbiAqIFRoZSBwbHVnaW4gaGFzIGFkZGl0aW9uYWwgcHVibGljIG1ldGhvZHMgdG8gd29yayB3aXRoIFNwaW5lIFJ1bnRpbWUgY29yZSBBUEkgb2JqZWN0czpcbiAqICogYGdldEF0bGFzKGF0bGFzS2V5OiBzdHJpbmcpYDogcmV0dXJucyB0aGUge0BsaW5rIFRleHR1cmVBdGxhc30gaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBhdGxhcyBrZXkuXG4gKiAqIGBnZXRTa2VsZXRvbkRhdGEoc2tlbGV0b25EYXRhS2V5OiBzdHJpbmcpYDogcmV0dXJucyB0aGUge0BsaW5rIFNrZWxldG9uRGF0YX0gaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBza2VsZXRvbiBkYXRhIGtleS5cbiAqICogYGNyZWF0ZVNrZWxldG9uKHNrZWxldG9uRGF0YUtleTogc3RyaW5nLCBhdGxhc0tleTogc3RyaW5nLCBwcmVtdWx0aXBsaWVkQWxwaGE6IGJvb2xlYW4gPSB0cnVlKWA6IGNyZWF0ZXMgYSBuZXcge0BsaW5rIFNrZWxldG9ufSBpbnN0YW5jZSBmcm9tIHRoZSBnaXZlbiBza2VsZXRvbiBkYXRhIGFuZCBhdGxhcyBrZXkuXG4gKiAqIGBpc1ByZW11bHRpcGxpZWRBbHBoYShhdGxhc0tleTogc3RyaW5nKWA6IHJldHVybnMgYHRydWVgIGlmIHRoZSBhdGxhcyB3aXRoIHRoZSBnaXZlbiBrZXkgaGFzIHByZW11bHRpcGxpZWQgYWxwaGEuXG4gKi9cbmV4cG9ydCBjbGFzcyBTcGluZVBsdWdpbiBleHRlbmRzIFBoYXNlci5QbHVnaW5zLlNjZW5lUGx1Z2luIHtcblx0Z2FtZTogUGhhc2VyLkdhbWU7XG5cdHByaXZhdGUgaXNXZWJHTDogYm9vbGVhbjtcblx0Z2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCB8IG51bGw7XG5cdHN0YXRpYyBnYW1lV2ViR0xSZW5kZXJlcjogU2NlbmVSZW5kZXJlciB8IG51bGwgPSBudWxsO1xuXHRnZXQgd2ViR0xSZW5kZXJlciAoKTogU2NlbmVSZW5kZXJlciB8IG51bGwge1xuXHRcdHJldHVybiBTcGluZVBsdWdpbi5nYW1lV2ViR0xSZW5kZXJlcjtcblx0fVxuXHRjYW52YXNSZW5kZXJlcjogU2tlbGV0b25SZW5kZXJlciB8IG51bGw7XG5cdHBoYXNlclJlbmRlcmVyOiBQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyIHwgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXI7XG5cdHByaXZhdGUgc2tlbGV0b25EYXRhQ2FjaGU6IFBoYXNlci5DYWNoZS5CYXNlQ2FjaGU7XG5cdHByaXZhdGUgYXRsYXNDYWNoZTogUGhhc2VyLkNhY2hlLkJhc2VDYWNoZTtcblxuXHRjb25zdHJ1Y3RvciAoc2NlbmU6IFBoYXNlci5TY2VuZSwgcGx1Z2luTWFuYWdlcjogUGhhc2VyLlBsdWdpbnMuUGx1Z2luTWFuYWdlciwgcGx1Z2luS2V5OiBzdHJpbmcpIHtcblx0XHRzdXBlcihzY2VuZSwgcGx1Z2luTWFuYWdlciwgcGx1Z2luS2V5KTtcblx0XHR0aGlzLmdhbWUgPSBwbHVnaW5NYW5hZ2VyLmdhbWU7XG5cdFx0dGhpcy5pc1dlYkdMID0gdGhpcy5nYW1lLmNvbmZpZy5yZW5kZXJUeXBlID09PSAyO1xuXHRcdHRoaXMuZ2wgPSB0aGlzLmlzV2ViR0wgPyAodGhpcy5nYW1lLnJlbmRlcmVyIGFzIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyKS5nbCA6IG51bGw7XG5cdFx0dGhpcy5waGFzZXJSZW5kZXJlciA9IHRoaXMuZ2FtZS5yZW5kZXJlcjtcblx0XHR0aGlzLmNhbnZhc1JlbmRlcmVyID0gbnVsbDtcblx0XHR0aGlzLnNrZWxldG9uRGF0YUNhY2hlID0gdGhpcy5nYW1lLmNhY2hlLmFkZEN1c3RvbShTUElORV9TS0VMRVRPTl9EQVRBX0NBQ0hFX0tFWSk7XG5cdFx0dGhpcy5hdGxhc0NhY2hlID0gdGhpcy5nYW1lLmNhY2hlLmFkZEN1c3RvbShTUElORV9BVExBU19DQUNIRV9LRVkpO1xuXG5cdFx0bGV0IHNrZWxldG9uSnNvbkZpbGVDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBhbnksIGtleTogc3RyaW5nLFxuXHRcdFx0dXJsOiBzdHJpbmcsXG5cdFx0XHR4aHJTZXR0aW5nczogUGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdCkge1xuXHRcdFx0bGV0IGZpbGUgPSBuZXcgU3BpbmVTa2VsZXRvbkRhdGFGaWxlKHRoaXMgYXMgYW55LCBrZXksIHVybCwgU3BpbmVTa2VsZXRvbkRhdGFGaWxlVHlwZS5qc29uLCB4aHJTZXR0aW5ncyk7XG5cdFx0XHR0aGlzLmFkZEZpbGUoZmlsZS5maWxlcyk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9O1xuXHRcdHBsdWdpbk1hbmFnZXIucmVnaXN0ZXJGaWxlVHlwZShcInNwaW5lSnNvblwiLCBza2VsZXRvbkpzb25GaWxlQ2FsbGJhY2ssIHNjZW5lKTtcblxuXHRcdGxldCBza2VsZXRvbkJpbmFyeUZpbGVDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBhbnksIGtleTogc3RyaW5nLFxuXHRcdFx0dXJsOiBzdHJpbmcsXG5cdFx0XHR4aHJTZXR0aW5nczogUGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdCkge1xuXHRcdFx0bGV0IGZpbGUgPSBuZXcgU3BpbmVTa2VsZXRvbkRhdGFGaWxlKHRoaXMgYXMgYW55LCBrZXksIHVybCwgU3BpbmVTa2VsZXRvbkRhdGFGaWxlVHlwZS5iaW5hcnksIHhoclNldHRpbmdzKTtcblx0XHRcdHRoaXMuYWRkRmlsZShmaWxlLmZpbGVzKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0cGx1Z2luTWFuYWdlci5yZWdpc3RlckZpbGVUeXBlKFwic3BpbmVCaW5hcnlcIiwgc2tlbGV0b25CaW5hcnlGaWxlQ2FsbGJhY2ssIHNjZW5lKTtcblxuXHRcdGxldCBhdGxhc0ZpbGVDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBhbnksIGtleTogc3RyaW5nLFxuXHRcdFx0dXJsOiBzdHJpbmcsXG5cdFx0XHRwcmVtdWx0aXBsaWVkQWxwaGE6IGJvb2xlYW4sXG5cdFx0XHR4aHJTZXR0aW5nczogUGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdCkge1xuXHRcdFx0bGV0IGZpbGUgPSBuZXcgU3BpbmVBdGxhc0ZpbGUodGhpcyBhcyBhbnksIGtleSwgdXJsLCBwcmVtdWx0aXBsaWVkQWxwaGEsIHhoclNldHRpbmdzKTtcblx0XHRcdHRoaXMuYWRkRmlsZShmaWxlLmZpbGVzKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0cGx1Z2luTWFuYWdlci5yZWdpc3RlckZpbGVUeXBlKFwic3BpbmVBdGxhc1wiLCBhdGxhc0ZpbGVDYWxsYmFjaywgc2NlbmUpO1xuXG5cdFx0bGV0IGFkZFNwaW5lR2FtZU9iamVjdCA9IGZ1bmN0aW9uICh0aGlzOiBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnksIHg6IG51bWJlciwgeTogbnVtYmVyLCBkYXRhS2V5OiBzdHJpbmcsIGF0bGFzS2V5OiBzdHJpbmcsIGJvdW5kc1Byb3ZpZGVyOiBTcGluZUdhbWVPYmplY3RCb3VuZHNQcm92aWRlcikge1xuXHRcdFx0aWYgKHRoaXMuc2NlbmUuc3lzLnJlbmRlcmVyIGluc3RhbmNlb2YgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIpIHtcblx0XHRcdFx0dGhpcy5zY2VuZS5zeXMucmVuZGVyZXIucGlwZWxpbmVzLmNsZWFyKCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNwaW5lUGx1Z2luID0gKHRoaXMuc2NlbmUuc3lzIGFzIGFueSlbcGx1Z2luS2V5XSBhcyBTcGluZVBsdWdpbjtcblx0XHRcdGxldCBnYW1lT2JqZWN0ID0gbmV3IFNwaW5lR2FtZU9iamVjdCh0aGlzLnNjZW5lLCBzcGluZVBsdWdpbiwgeCwgeSwgZGF0YUtleSwgYXRsYXNLZXksIGJvdW5kc1Byb3ZpZGVyKTtcblx0XHRcdHRoaXMuZGlzcGxheUxpc3QuYWRkKGdhbWVPYmplY3QpO1xuXHRcdFx0dGhpcy51cGRhdGVMaXN0LmFkZChnYW1lT2JqZWN0KTtcblxuXHRcdFx0aWYgKHRoaXMuc2NlbmUuc3lzLnJlbmRlcmVyIGluc3RhbmNlb2YgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIpIHtcblx0XHRcdFx0dGhpcy5zY2VuZS5zeXMucmVuZGVyZXIucGlwZWxpbmVzLnJlYmluZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZ2FtZU9iamVjdDtcblx0XHR9O1xuXG5cdFx0bGV0IG1ha2VTcGluZUdhbWVPYmplY3QgPSBmdW5jdGlvbiAodGhpczogUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5LCBjb25maWc6IFNwaW5lR2FtZU9iamVjdENvbmZpZywgYWRkVG9TY2VuZTogYm9vbGVhbiA9IGZhbHNlKSB7XG5cdFx0XHRpZiAodGhpcy5zY2VuZS5zeXMucmVuZGVyZXIgaW5zdGFuY2VvZiBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcikge1xuXHRcdFx0XHR0aGlzLnNjZW5lLnN5cy5yZW5kZXJlci5waXBlbGluZXMuY2xlYXIoKTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IHggPSBjb25maWcueCA/IGNvbmZpZy54IDogMDtcblx0XHRcdGxldCB5ID0gY29uZmlnLnkgPyBjb25maWcueSA6IDA7XG5cdFx0XHRsZXQgYm91bmRzUHJvdmlkZXIgPSBjb25maWcuYm91bmRzUHJvdmlkZXIgPyBjb25maWcuYm91bmRzUHJvdmlkZXIgOiB1bmRlZmluZWQ7XG5cblx0XHRcdGNvbnN0IHNwaW5lUGx1Z2luID0gKHRoaXMuc2NlbmUuc3lzIGFzIGFueSlbcGx1Z2luS2V5XSBhcyBTcGluZVBsdWdpbjtcblx0XHRcdGxldCBnYW1lT2JqZWN0ID0gbmV3IFNwaW5lR2FtZU9iamVjdCh0aGlzLnNjZW5lLCBzcGluZVBsdWdpbiwgeCwgeSwgY29uZmlnLmRhdGFLZXksIGNvbmZpZy5hdGxhc0tleSwgYm91bmRzUHJvdmlkZXIpO1xuXHRcdFx0aWYgKGFkZFRvU2NlbmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25maWcuYWRkID0gYWRkVG9TY2VuZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc2NlbmUuc3lzLnJlbmRlcmVyIGluc3RhbmNlb2YgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIpIHtcblx0XHRcdFx0dGhpcy5zY2VuZS5zeXMucmVuZGVyZXIucGlwZWxpbmVzLnJlYmluZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gUGhhc2VyLkdhbWVPYmplY3RzLkJ1aWxkR2FtZU9iamVjdCh0aGlzLnNjZW5lLCBnYW1lT2JqZWN0LCBjb25maWcpO1xuXHRcdH1cblx0XHRwbHVnaW5NYW5hZ2VyLnJlZ2lzdGVyR2FtZU9iamVjdCgod2luZG93IGFzIGFueSkuU1BJTkVfR0FNRV9PQkpFQ1RfVFlQRSA/ICh3aW5kb3cgYXMgYW55KS5TUElORV9HQU1FX09CSkVDVF9UWVBFIDogU1BJTkVfR0FNRV9PQkpFQ1RfVFlQRSwgYWRkU3BpbmVHYW1lT2JqZWN0LCBtYWtlU3BpbmVHYW1lT2JqZWN0KTtcblx0fVxuXG5cdHN0YXRpYyByZW5kZXJlcklkID0gMDtcblx0Ym9vdCAoKSB7XG5cdFx0U2tlbGV0b24ueURvd24gPSB0cnVlO1xuXHRcdGlmICh0aGlzLmlzV2ViR0wpIHtcblx0XHRcdGlmICghU3BpbmVQbHVnaW4uZ2FtZVdlYkdMUmVuZGVyZXIpIHtcblx0XHRcdFx0U3BpbmVQbHVnaW4uZ2FtZVdlYkdMUmVuZGVyZXIgPSBuZXcgU2NlbmVSZW5kZXJlcigodGhpcy5nYW1lLnJlbmRlcmVyISBhcyBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcikuY2FudmFzLCB0aGlzLmdsISwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLm9uUmVzaXplKCk7XG5cdFx0XHR0aGlzLmdhbWUuc2NhbGUub24oUGhhc2VyLlNjYWxlLkV2ZW50cy5SRVNJWkUsIHRoaXMub25SZXNpemUsIHRoaXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXRoaXMuY2FudmFzUmVuZGVyZXIpIHtcblx0XHRcdFx0dGhpcy5jYW52YXNSZW5kZXJlciA9IG5ldyBTa2VsZXRvblJlbmRlcmVyKHRoaXMuc2NlbmUhLnN5cy5jb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgZXZlbnRFbWl0dGVyID0gdGhpcy5zeXN0ZW1zIS5ldmVudHM7XG5cdFx0ZXZlbnRFbWl0dGVyLm9uY2UoJ3NodXRkb3duJywgdGhpcy5zaHV0ZG93biwgdGhpcyk7XG5cdFx0ZXZlbnRFbWl0dGVyLm9uY2UoJ2Rlc3Ryb3knLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xuXHRcdHRoaXMuZ2FtZS5ldmVudHMub25jZSgnZGVzdHJveScsIHRoaXMuZ2FtZURlc3Ryb3ksIHRoaXMpO1xuXHR9XG5cblx0b25SZXNpemUgKCkge1xuXHRcdHZhciBwaGFzZXJSZW5kZXJlciA9IHRoaXMuZ2FtZS5yZW5kZXJlcjtcblx0XHR2YXIgc2NlbmVSZW5kZXJlciA9IHRoaXMud2ViR0xSZW5kZXJlcjtcblxuXHRcdGlmIChwaGFzZXJSZW5kZXJlciAmJiBzY2VuZVJlbmRlcmVyKSB7XG5cdFx0XHR2YXIgdmlld3BvcnRXaWR0aCA9IHBoYXNlclJlbmRlcmVyLndpZHRoO1xuXHRcdFx0dmFyIHZpZXdwb3J0SGVpZ2h0ID0gcGhhc2VyUmVuZGVyZXIuaGVpZ2h0O1xuXHRcdFx0c2NlbmVSZW5kZXJlci5jYW1lcmEucG9zaXRpb24ueCA9IHZpZXdwb3J0V2lkdGggLyAyO1xuXHRcdFx0c2NlbmVSZW5kZXJlci5jYW1lcmEucG9zaXRpb24ueSA9IHZpZXdwb3J0SGVpZ2h0IC8gMjtcblx0XHRcdHNjZW5lUmVuZGVyZXIuY2FtZXJhLnVwLnkgPSAtMTtcblx0XHRcdHNjZW5lUmVuZGVyZXIuY2FtZXJhLmRpcmVjdGlvbi56ID0gMTtcblx0XHRcdHNjZW5lUmVuZGVyZXIuY2FtZXJhLnNldFZpZXdwb3J0KHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0KTtcblx0XHR9XG5cdH1cblxuXHRzaHV0ZG93biAoKSB7XG5cdFx0dGhpcy5zeXN0ZW1zIS5ldmVudHMub2ZmKFwic2h1dGRvd25cIiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XG5cdFx0aWYgKHRoaXMuaXNXZWJHTCkge1xuXHRcdFx0dGhpcy5nYW1lLnNjYWxlLm9mZihQaGFzZXIuU2NhbGUuRXZlbnRzLlJFU0laRSwgdGhpcy5vblJlc2l6ZSwgdGhpcyk7XG5cdFx0fVxuXHR9XG5cblx0ZGVzdHJveSAoKSB7XG5cdFx0dGhpcy5zaHV0ZG93bigpXG5cdH1cblxuXHRnYW1lRGVzdHJveSAoKSB7XG5cdFx0dGhpcy5wbHVnaW5NYW5hZ2VyLnJlbW92ZUdhbWVPYmplY3QoKHdpbmRvdyBhcyBhbnkpLlNQSU5FX0dBTUVfT0JKRUNUX1RZUEUgPyAod2luZG93IGFzIGFueSkuU1BJTkVfR0FNRV9PQkpFQ1RfVFlQRSA6IFNQSU5FX0dBTUVfT0JKRUNUX1RZUEUsIHRydWUsIHRydWUpO1xuXHRcdGlmICh0aGlzLndlYkdMUmVuZGVyZXIpIHRoaXMud2ViR0xSZW5kZXJlci5kaXNwb3NlKCk7XG5cdFx0U3BpbmVQbHVnaW4uZ2FtZVdlYkdMUmVuZGVyZXIgPSBudWxsO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdGhlIFRleHR1cmVBdGxhcyBpbnN0YW5jZSBmb3IgdGhlIGdpdmVuIGtleSAqL1xuXHRnZXRBdGxhcyAoYXRsYXNLZXk6IHN0cmluZykge1xuXHRcdGxldCBhdGxhczogVGV4dHVyZUF0bGFzO1xuXHRcdGlmICh0aGlzLmF0bGFzQ2FjaGUuZXhpc3RzKGF0bGFzS2V5KSkge1xuXHRcdFx0YXRsYXMgPSB0aGlzLmF0bGFzQ2FjaGUuZ2V0KGF0bGFzS2V5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGV0IGF0bGFzRmlsZSA9IHRoaXMuZ2FtZS5jYWNoZS50ZXh0LmdldChhdGxhc0tleSkgYXMgeyBkYXRhOiBzdHJpbmcsIHByZW11bHRpcGxpZWRBbHBoYTogYm9vbGVhbiB9O1xuXHRcdFx0YXRsYXMgPSBuZXcgVGV4dHVyZUF0bGFzKGF0bGFzRmlsZS5kYXRhKTtcblx0XHRcdGlmICh0aGlzLmlzV2ViR0wpIHtcblx0XHRcdFx0bGV0IGdsID0gdGhpcy5nbCE7XG5cdFx0XHRcdGNvbnN0IHBoYXNlclVucGFja1BtYVZhbHVlID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCk7XG5cdFx0XHRcdGlmIChwaGFzZXJVbnBhY2tQbWFWYWx1ZSkgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCBmYWxzZSk7XG5cdFx0XHRcdGZvciAobGV0IGF0bGFzUGFnZSBvZiBhdGxhcy5wYWdlcykge1xuXHRcdFx0XHRcdGF0bGFzUGFnZS5zZXRUZXh0dXJlKG5ldyBHTFRleHR1cmUoZ2wsIHRoaXMuZ2FtZS50ZXh0dXJlcy5nZXQoYXRsYXNLZXkgKyBcIiFcIiArIGF0bGFzUGFnZS5uYW1lKS5nZXRTb3VyY2VJbWFnZSgpIGFzIEhUTUxJbWFnZUVsZW1lbnQgfCBJbWFnZUJpdG1hcCwgZmFsc2UpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocGhhc2VyVW5wYWNrUG1hVmFsdWUpIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGxldCBhdGxhc1BhZ2Ugb2YgYXRsYXMucGFnZXMpIHtcblx0XHRcdFx0XHRhdGxhc1BhZ2Uuc2V0VGV4dHVyZShuZXcgQ2FudmFzVGV4dHVyZSh0aGlzLmdhbWUudGV4dHVyZXMuZ2V0KGF0bGFzS2V5ICsgXCIhXCIgKyBhdGxhc1BhZ2UubmFtZSkuZ2V0U291cmNlSW1hZ2UoKSBhcyBIVE1MSW1hZ2VFbGVtZW50IHwgSW1hZ2VCaXRtYXApKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5hdGxhc0NhY2hlLmFkZChhdGxhc0tleSwgYXRsYXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYXRsYXM7XG5cdH1cblxuXHQvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBUZXh0dXJlQXRsYXMgdXNlcyBwcmVtdWx0aXBsaWVkIGFscGhhICovXG5cdGlzQXRsYXNQcmVtdWx0aXBsaWVkIChhdGxhc0tleTogc3RyaW5nKSB7XG5cdFx0bGV0IGF0bGFzRmlsZSA9IHRoaXMuZ2FtZS5jYWNoZS50ZXh0LmdldChhdGxhc0tleSk7XG5cdFx0aWYgKCFhdGxhc0ZpbGUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gYXRsYXNGaWxlLnByZW11bHRpcGxpZWRBbHBoYTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRoZSBTa2VsZXRvbkRhdGEgaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBkYXRhIGFuZCBhdGxhcyBrZXkgKi9cblx0Z2V0U2tlbGV0b25EYXRhIChkYXRhS2V5OiBzdHJpbmcsIGF0bGFzS2V5OiBzdHJpbmcpIHtcblx0XHRjb25zdCBhdGxhcyA9IHRoaXMuZ2V0QXRsYXMoYXRsYXNLZXkpXG5cdFx0Y29uc3QgY29tYmluZWRLZXkgPSBkYXRhS2V5ICsgYXRsYXNLZXk7XG5cdFx0bGV0IHNrZWxldG9uRGF0YTogU2tlbGV0b25EYXRhO1xuXHRcdGlmICh0aGlzLnNrZWxldG9uRGF0YUNhY2hlLmV4aXN0cyhjb21iaW5lZEtleSkpIHtcblx0XHRcdHNrZWxldG9uRGF0YSA9IHRoaXMuc2tlbGV0b25EYXRhQ2FjaGUuZ2V0KGNvbWJpbmVkS2V5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuZ2FtZS5jYWNoZS5qc29uLmV4aXN0cyhkYXRhS2V5KSkge1xuXHRcdFx0XHRsZXQganNvbkZpbGUgPSB0aGlzLmdhbWUuY2FjaGUuanNvbi5nZXQoZGF0YUtleSkgYXMgYW55O1xuXHRcdFx0XHRsZXQganNvbiA9IG5ldyBTa2VsZXRvbkpzb24obmV3IEF0bGFzQXR0YWNobWVudExvYWRlcihhdGxhcykpO1xuXHRcdFx0XHRza2VsZXRvbkRhdGEgPSBqc29uLnJlYWRTa2VsZXRvbkRhdGEoanNvbkZpbGUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bGV0IGJpbmFyeUZpbGUgPSB0aGlzLmdhbWUuY2FjaGUuYmluYXJ5LmdldChkYXRhS2V5KSBhcyBBcnJheUJ1ZmZlcjtcblx0XHRcdFx0bGV0IGJpbmFyeSA9IG5ldyBTa2VsZXRvbkJpbmFyeShuZXcgQXRsYXNBdHRhY2htZW50TG9hZGVyKGF0bGFzKSk7XG5cdFx0XHRcdHNrZWxldG9uRGF0YSA9IGJpbmFyeS5yZWFkU2tlbGV0b25EYXRhKG5ldyBVaW50OEFycmF5KGJpbmFyeUZpbGUpKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc2tlbGV0b25EYXRhQ2FjaGUuYWRkKGNvbWJpbmVkS2V5LCBza2VsZXRvbkRhdGEpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2tlbGV0b25EYXRhO1xuXHR9XG5cblx0LyoqIENyZWF0ZXMgYSBuZXcgU2tlbGV0b24gaW5zdGFuY2UgZnJvbSB0aGUgZGF0YSBhbmQgYXRsYXMuICovXG5cdGNyZWF0ZVNrZWxldG9uIChkYXRhS2V5OiBzdHJpbmcsIGF0bGFzS2V5OiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gbmV3IFNrZWxldG9uKHRoaXMuZ2V0U2tlbGV0b25EYXRhKGRhdGFLZXksIGF0bGFzS2V5KSk7XG5cdH1cbn1cblxuZW51bSBTcGluZVNrZWxldG9uRGF0YUZpbGVUeXBlIHtcblx0anNvbixcblx0YmluYXJ5XG59XG5cbmludGVyZmFjZSBTcGluZVNrZWxldG9uRGF0YUZpbGVDb25maWcge1xuXHRrZXk6IHN0cmluZztcblx0dXJsOiBzdHJpbmc7XG5cdHR5cGU6IFwic3BpbmVKc29uXCIgfCBcInNwaW5lQmluYXJ5XCI7XG5cdHhoclNldHRpbmdzPzogUGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdFxufVxuXG5jbGFzcyBTcGluZVNrZWxldG9uRGF0YUZpbGUgZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZSB7XG5cdGNvbnN0cnVjdG9yIChsb2FkZXI6IFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luLCBrZXk6IHN0cmluZyB8IFNwaW5lU2tlbGV0b25EYXRhRmlsZUNvbmZpZywgdXJsPzogc3RyaW5nLCBwdWJsaWMgZmlsZVR5cGU/OiBTcGluZVNrZWxldG9uRGF0YUZpbGVUeXBlLCB4aHJTZXR0aW5ncz86IFBoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3QpIHtcblx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0Y29uc3QgY29uZmlnID0ga2V5O1xuXHRcdFx0a2V5ID0gY29uZmlnLmtleTtcblx0XHRcdHVybCA9IGNvbmZpZy51cmw7XG5cdFx0XHRmaWxlVHlwZSA9IGNvbmZpZy50eXBlID09PSBcInNwaW5lSnNvblwiID8gU3BpbmVTa2VsZXRvbkRhdGFGaWxlVHlwZS5qc29uIDogU3BpbmVTa2VsZXRvbkRhdGFGaWxlVHlwZS5iaW5hcnk7XG5cdFx0XHR4aHJTZXR0aW5ncyA9IGNvbmZpZy54aHJTZXR0aW5ncztcblx0XHR9XG5cdFx0bGV0IGZpbGUgPSBudWxsO1xuXHRcdGxldCBpc0pzb24gPSBmaWxlVHlwZSA9PSBTcGluZVNrZWxldG9uRGF0YUZpbGVUeXBlLmpzb247XG5cdFx0aWYgKGlzSnNvbikge1xuXHRcdFx0ZmlsZSA9IG5ldyBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZShsb2FkZXIsIHtcblx0XHRcdFx0a2V5OiBrZXksXG5cdFx0XHRcdHVybDogdXJsLFxuXHRcdFx0XHRleHRlbnNpb246IFwianNvblwiLFxuXHRcdFx0XHR4aHJTZXR0aW5nczogeGhyU2V0dGluZ3MsXG5cdFx0XHR9IGFzIFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkpTT05GaWxlQ29uZmlnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmlsZSA9IG5ldyBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5CaW5hcnlGaWxlKGxvYWRlciwge1xuXHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0dXJsOiB1cmwsXG5cdFx0XHRcdGV4dGVuc2lvbjogXCJza2VsXCIsXG5cdFx0XHRcdHhoclNldHRpbmdzOiB4aHJTZXR0aW5ncyxcblx0XHRcdH0gYXMgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQmluYXJ5RmlsZUNvbmZpZyk7XG5cdFx0fVxuXHRcdHN1cGVyKGxvYWRlciwgU1BJTkVfU0tFTEVUT05fREFUQV9GSUxFX1RZUEUsIGtleSwgW2ZpbGVdKTtcblx0fVxuXG5cdG9uRmlsZUNvbXBsZXRlIChmaWxlOiBQaGFzZXIuTG9hZGVyLkZpbGUpIHtcblx0XHR0aGlzLnBlbmRpbmctLTtcblx0fVxuXG5cdGFkZFRvQ2FjaGUgKCkge1xuXHRcdGlmICh0aGlzLmlzUmVhZHlUb1Byb2Nlc3MoKSkgdGhpcy5maWxlc1swXS5hZGRUb0NhY2hlKCk7XG5cdH1cbn1cblxuaW50ZXJmYWNlIFNwaW5lQXRsYXNGaWxlQ29uZmlnIHtcblx0a2V5OiBzdHJpbmc7XG5cdHVybDogc3RyaW5nO1xuXHRwcmVtdWx0aXBsaWVkQWxwaGE/OiBib29sZWFuO1xuXHR4aHJTZXR0aW5ncz86IFBoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3Q7XG59XG5cbmNsYXNzIFNwaW5lQXRsYXNGaWxlIGV4dGVuZHMgUGhhc2VyLkxvYWRlci5NdWx0aUZpbGUge1xuXHRjb25zdHJ1Y3RvciAobG9hZGVyOiBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiwga2V5OiBzdHJpbmcgfCBTcGluZUF0bGFzRmlsZUNvbmZpZywgdXJsPzogc3RyaW5nLCBwdWJsaWMgcHJlbXVsdGlwbGllZEFscGhhPzogYm9vbGVhbiwgeGhyU2V0dGluZ3M/OiBQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0KSB7XG5cdFx0aWYgKHR5cGVvZiBrZXkgIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdGNvbnN0IGNvbmZpZyA9IGtleTtcblx0XHRcdGtleSA9IGNvbmZpZy5rZXk7XG5cdFx0XHR1cmwgPSBjb25maWcudXJsO1xuXHRcdFx0cHJlbXVsdGlwbGllZEFscGhhID0gY29uZmlnLnByZW11bHRpcGxpZWRBbHBoYTtcblx0XHRcdHhoclNldHRpbmdzID0gY29uZmlnLnhoclNldHRpbmdzO1xuXHRcdH1cblxuXHRcdHN1cGVyKGxvYWRlciwgU1BJTkVfQVRMQVNfRklMRV9UWVBFLCBrZXksIFtcblx0XHRcdG5ldyBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5UZXh0RmlsZShsb2FkZXIsIHtcblx0XHRcdFx0a2V5OiBrZXksXG5cdFx0XHRcdHVybDogdXJsLFxuXHRcdFx0XHR4aHJTZXR0aW5nczogeGhyU2V0dGluZ3MsXG5cdFx0XHRcdGV4dGVuc2lvbjogXCJhdGxhc1wiXG5cdFx0XHR9KVxuXHRcdF0pO1xuXHR9XG5cblx0b25GaWxlQ29tcGxldGUgKGZpbGU6IFBoYXNlci5Mb2FkZXIuRmlsZSkge1xuXHRcdGlmICh0aGlzLmZpbGVzLmluZGV4T2YoZmlsZSkgIT0gLTEpIHtcblx0XHRcdHRoaXMucGVuZGluZy0tO1xuXG5cdFx0XHRpZiAoZmlsZS50eXBlID09IFwidGV4dFwiKSB7XG5cdFx0XHRcdHZhciBsaW5lcyA9IGZpbGUuZGF0YS5zcGxpdCgvXFxyXFxufFxccnxcXG4vKTtcblx0XHRcdFx0bGV0IHRleHR1cmVzID0gW107XG5cdFx0XHRcdHRleHR1cmVzLnB1c2gobGluZXNbMF0pO1xuXHRcdFx0XHRmb3IgKHZhciB0ID0gMTsgdCA8IGxpbmVzLmxlbmd0aDsgdCsrKSB7XG5cdFx0XHRcdFx0dmFyIGxpbmUgPSBsaW5lc1t0XTtcblx0XHRcdFx0XHRpZiAobGluZS50cmltKCkgPT09ICcnICYmIHQgPCBsaW5lcy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRsaW5lID0gbGluZXNbdCArIDFdO1xuXHRcdFx0XHRcdFx0dGV4dHVyZXMucHVzaChsaW5lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgYmFzZVBhdGggPSBmaWxlLnNyYy5tYXRjaCgvXi4qXFwvLykgPz8gXCJcIjtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0dXJlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciB1cmwgPSBiYXNlUGF0aCArIHRleHR1cmVzW2ldO1xuXHRcdFx0XHRcdHZhciBrZXkgPSBmaWxlLmtleSArIFwiIVwiICsgdGV4dHVyZXNbaV07XG5cdFx0XHRcdFx0dmFyIGltYWdlID0gbmV3IFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkltYWdlRmlsZSh0aGlzLmxvYWRlciwga2V5LCB1cmwpO1xuXG5cdFx0XHRcdFx0aWYgKCF0aGlzLmxvYWRlci5rZXlFeGlzdHMoaW1hZ2UpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmFkZFRvTXVsdGlGaWxlKGltYWdlKTtcblx0XHRcdFx0XHRcdHRoaXMubG9hZGVyLmFkZEZpbGUoaW1hZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFkZFRvQ2FjaGUgKCkge1xuXHRcdGlmICh0aGlzLmlzUmVhZHlUb1Byb2Nlc3MoKSkge1xuXHRcdFx0bGV0IHRleHR1cmVNYW5hZ2VyID0gdGhpcy5sb2FkZXIudGV4dHVyZU1hbmFnZXI7XG5cdFx0XHRmb3IgKGxldCBmaWxlIG9mIHRoaXMuZmlsZXMpIHtcblx0XHRcdFx0aWYgKGZpbGUudHlwZSA9PSBcImltYWdlXCIpIHtcblx0XHRcdFx0XHRpZiAoIXRleHR1cmVNYW5hZ2VyLmV4aXN0cyhmaWxlLmtleSkpIHtcblx0XHRcdFx0XHRcdHRleHR1cmVNYW5hZ2VyLmFkZEltYWdlKGZpbGUua2V5LCBmaWxlLmRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRoaXMucHJlbXVsdGlwbGllZEFscGhhID8/IChmaWxlLmRhdGEuaW5kZXhPZihcInBtYTogdHJ1ZVwiKSA+PSAwIHx8IGZpbGUuZGF0YS5pbmRleE9mKFwicG1hOnRydWVcIikgPj0gMCk7XG5cdFx0XHRcdFx0ZmlsZS5kYXRhID0ge1xuXHRcdFx0XHRcdFx0ZGF0YTogZmlsZS5kYXRhLFxuXHRcdFx0XHRcdFx0cHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGZpbGUuYWRkVG9DYWNoZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXX0=
|
|
352
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BpbmVQbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU3BpbmVQbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSw2QkFBNkIsRUFBRSxxQkFBcUIsRUFBRSw2QkFBNkIsSUFBSSw2QkFBNkIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoTSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFnQixZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDbkssT0FBTyxFQUFFLGVBQWUsRUFBaUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFtQmpGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sT0FBTyxXQUFZLFNBQVEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO0lBQzFELElBQUksQ0FBYztJQUNWLE9BQU8sQ0FBVTtJQUN6QixFQUFFLENBQStCO0lBQ2pDLE1BQU0sQ0FBQyxpQkFBaUIsR0FBeUIsSUFBSSxDQUFDO0lBQ3RELElBQUksYUFBYTtRQUNoQixPQUFPLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsY0FBYyxDQUEwQjtJQUN4QyxjQUFjLENBQThFO0lBQ3BGLGlCQUFpQixDQUF5QjtJQUMxQyxVQUFVLENBQXlCO0lBRTNDLFlBQWEsS0FBbUIsRUFBRSxhQUEyQyxFQUFFLFNBQWlCO1FBQy9GLEtBQUssQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJ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RUFBRSxDQUFDO3dCQUN0QyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM5QyxDQUFDO2dCQUNGLENBQUM7cUJBQU0sQ0FBQztvQkFDUCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNqSSxJQUFJLENBQUMsSUFBSSxHQUFHO3dCQUNYLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTt3QkFDZixrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO3FCQUMzQyxDQUFDO29CQUNGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbkIsQ0FBQztZQUNGLENBQUM7UUFDRixDQUFDO0lBQ0YsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgKiBhcyBQaGFzZXIgZnJvbSBcInBoYXNlclwiO1xuaW1wb3J0IHsgU1BJTkVfQVRMQVNfQ0FDSEVfS0VZLCBTUElORV9HQU1FX09CSkVDVF9UWVBFLCBTUElORV9TS0VMRVRPTl9EQVRBX0ZJTEVfVFlQRSwgU1BJTkVfQVRMQVNfRklMRV9UWVBFLCBTUElORV9TS0VMRVRPTl9GSUxFX0NBQ0hFX0tFWSBhcyBTUElORV9TS0VMRVRPTl9EQVRBX0NBQ0hFX0tFWSB9IGZyb20gXCIuL2tleXMuanNcIjtcbmltcG9ydCB7IEF0bGFzQXR0YWNobWVudExvYWRlciwgR0xUZXh0dXJlLCBTY2VuZVJlbmRlcmVyLCBTa2VsZXRvbiwgU2tlbGV0b25CaW5hcnksIFNrZWxldG9uRGF0YSwgU2tlbGV0b25Kc29uLCBUZXh0dXJlQXRsYXMgfSBmcm9tIFwiQGVzb3Rlcmljc29mdHdhcmUvc3BpbmUtd2ViZ2xcIlxuaW1wb3J0IHsgU3BpbmVHYW1lT2JqZWN0LCBTcGluZUdhbWVPYmplY3RCb3VuZHNQcm92aWRlciB9IGZyb20gXCIuL1NwaW5lR2FtZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgQ2FudmFzVGV4dHVyZSwgU2tlbGV0b25SZW5kZXJlciB9IGZyb20gXCJAZXNvdGVyaWNzb2Z0d2FyZS9zcGluZS1jYW52YXNcIjtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9iamVjdCB1c2VkIHdoZW4gY3JlYXRpbmcge0BsaW5rIFNwaW5lR2FtZU9iamVjdH0gaW5zdGFuY2VzIHZpYSBhIHNjZW5lJ3NcbiAqIHtAbGluayBHYW1lT2JqZWN0Q3JlYXRvcn0gKGBTY2VuZS5tYWtlYCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BpbmVHYW1lT2JqZWN0Q29uZmlnIGV4dGVuZHMgUGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDb25maWcge1xuXHQvKiogVGhlIHgtcG9zaXRpb24gb2YgdGhlIG9iamVjdCwgb3B0aW9uYWwsIGRlZmF1bHQ6IDAgKi9cblx0eD86IG51bWJlcixcblx0LyoqIFRoZSB5LXBvc2l0aW9uIG9mIHRoZSBvYmplY3QsIG9wdGlvbmFsLCBkZWZhdWx0OiAwICovXG5cdHk/OiBudW1iZXIsXG5cdC8qKiBUaGUgc2tlbGV0b24gZGF0YSBrZXkgKi9cblx0ZGF0YUtleTogc3RyaW5nLFxuXHQvKiogVGhlIGF0bGFzIGtleSAqL1xuXHRhdGxhc0tleTogc3RyaW5nXG5cdC8qKiBUaGUgYm91bmRzIHByb3ZpZGVyLCBvcHRpb25hbCwgZGVmYXVsdDogYFNldHVwUG9zZUJvdW5kc1Byb3ZpZGVyYCAqL1xuXHRib3VuZHNQcm92aWRlcj86IFNwaW5lR2FtZU9iamVjdEJvdW5kc1Byb3ZpZGVyXG59XG5cbi8qKlxuICoge0BsaW5rIFNjZW5lUGx1Z2lufSBpbXBsZW1lbnRhdGlvbiBhZGRpbmcgU3BpbmUgUnVudGltZSBjYXBhYmlsaXRpZXMgdG8gYSBzY2VuZS5cbiAqXG4gKiBUaGUgc2NlbmUncyB7QGxpbmsgTG9hZGVyUGx1Z2lufSAoYFNjZW5lLmxvYWRgKSBnZXRzIHRoZXNlIGFkZGl0aW9uYWwgZnVuY3Rpb25zOlxuICogKiBgc3BpbmVCaW5hcnkoa2V5OiBzdHJpbmcsIHVybDogc3RyaW5nLCB4aHJTZXR0aW5ncz86IFhIUlNldHRpbmdzT2JqZWN0KWA6IGxvYWRzIGEgc2tlbGV0b24gYmluYXJ5IGAuc2tlbGAgZmlsZSBmcm9tIHRoZSBgdXJsYC5cbiAqICogYHNwaW5lSnNvbihrZXk6IHN0cmluZywgdXJsOiBzdHJpbmcsIHhoclNldHRpbmdzPzogWEhSU2V0dGluZ3NPYmplY3QpYDogbG9hZHMgYSBza2VsZXRvbiBiaW5hcnkgYC5za2VsYCBmaWxlIGZyb20gdGhlIGB1cmxgLlxuICogKiBgc3BpbmVBdGxhcyhrZXk6IHN0cmluZywgdXJsOiBzdHJpbmcsIHByZW11bHRpcGxpZWRBbHBoYTogYm9vbGVhbiA9IHRydWUsIHhoclNldHRpbmdzPzogWEhSU2V0dGluZ3NPYmplY3QpYDogbG9hZHMgYSB0ZXh0dXJlIGF0bGFzIGAuYXRsYXNgIGZpbGUgZnJvbSB0aGUgYHVybGAgYXMgd2VsbCBhcyBpdHMgY29ycmVwb25kaW5nIHRleHR1cmUgYXRsYXMgcGFnZSBpbWFnZXMuXG4gKlxuICogVGhlIHNjZW5lJ3Mge0BsaW5rIEdhbWVPYmplY3RGYWN0b3J5fSAoYFNjZW5lLmFkZGApIGdldHMgdGhlc2UgYWRkaXRpb25hbCBmdW5jdGlvbnM6XG4gKiAqIGBzcGluZSh4OiBudW1iZXIsIHk6IG51bWJlciwgZGF0YUtleTogc3RyaW5nLCBhdGxhc0tleTogc3RyaW5nLCBib3VuZHNQcm92aWRlcjogU3BpbmVHYW1lT2JqZWN0Qm91bmRzUHJvdmlkZXIgPSBTZXR1cFBvc2VCb3VuZHNQcm92aWRlcigpKWA6XG4gKiAgICBjcmVhdGVzIGEgbmV3IHtAbGluayBTcGluZUdhbWVPYmplY3R9IGZyb20gdGhlIGRhdGEgYW5kIGF0bGFzIGF0IHBvc2l0aW9uIGAoeCwgeSlgLCB1c2luZyB0aGUge0BsaW5rIEJvdW5kc1Byb3ZpZGVyfSB0byBjYWxjdWxhdGUgaXRzIGJvdW5kaW5nIGJveC4gVGhlIG9iamVjdCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBzY2VuZS5cbiAqXG4gKiBUaGUgc2NlbmUncyB7QGxpbmsgR2FtZU9iamVjdENyZWF0b3J9IChgU2NlbmUubWFrZWApIGdldHMgdGhlc2UgYWRkaXRpb25hbCBmdW5jdGlvbnM6XG4gKiAqIGBzcGluZShjb25maWc6IFNwaW5lR2FtZU9iamVjdENvbmZpZylgOiBjcmVhdGVzIGEgbmV3IHtAbGluayBTcGluZUdhbWVPYmplY3R9IGZyb20gdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICpcbiAqIFRoZSBwbHVnaW4gaGFzIGFkZGl0aW9uYWwgcHVibGljIG1ldGhvZHMgdG8gd29yayB3aXRoIFNwaW5lIFJ1bnRpbWUgY29yZSBBUEkgb2JqZWN0czpcbiAqICogYGdldEF0bGFzKGF0bGFzS2V5OiBzdHJpbmcpYDogcmV0dXJucyB0aGUge0BsaW5rIFRleHR1cmVBdGxhc30gaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBhdGxhcyBrZXkuXG4gKiAqIGBnZXRTa2VsZXRvbkRhdGEoc2tlbGV0b25EYXRhS2V5OiBzdHJpbmcpYDogcmV0dXJucyB0aGUge0BsaW5rIFNrZWxldG9uRGF0YX0gaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBza2VsZXRvbiBkYXRhIGtleS5cbiAqICogYGNyZWF0ZVNrZWxldG9uKHNrZWxldG9uRGF0YUtleTogc3RyaW5nLCBhdGxhc0tleTogc3RyaW5nLCBwcmVtdWx0aXBsaWVkQWxwaGE6IGJvb2xlYW4gPSB0cnVlKWA6IGNyZWF0ZXMgYSBuZXcge0BsaW5rIFNrZWxldG9ufSBpbnN0YW5jZSBmcm9tIHRoZSBnaXZlbiBza2VsZXRvbiBkYXRhIGFuZCBhdGxhcyBrZXkuXG4gKiAqIGBpc1ByZW11bHRpcGxpZWRBbHBoYShhdGxhc0tleTogc3RyaW5nKWA6IHJldHVybnMgYHRydWVgIGlmIHRoZSBhdGxhcyB3aXRoIHRoZSBnaXZlbiBrZXkgaGFzIHByZW11bHRpcGxpZWQgYWxwaGEuXG4gKi9cbmV4cG9ydCBjbGFzcyBTcGluZVBsdWdpbiBleHRlbmRzIFBoYXNlci5QbHVnaW5zLlNjZW5lUGx1Z2luIHtcblx0Z2FtZTogUGhhc2VyLkdhbWU7XG5cdHByaXZhdGUgaXNXZWJHTDogYm9vbGVhbjtcblx0Z2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCB8IG51bGw7XG5cdHN0YXRpYyBnYW1lV2ViR0xSZW5kZXJlcjogU2NlbmVSZW5kZXJlciB8IG51bGwgPSBudWxsO1xuXHRnZXQgd2ViR0xSZW5kZXJlciAoKTogU2NlbmVSZW5kZXJlciB8IG51bGwge1xuXHRcdHJldHVybiBTcGluZVBsdWdpbi5nYW1lV2ViR0xSZW5kZXJlcjtcblx0fVxuXHRjYW52YXNSZW5kZXJlcjogU2tlbGV0b25SZW5kZXJlciB8IG51bGw7XG5cdHBoYXNlclJlbmRlcmVyOiBQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyIHwgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXI7XG5cdHByaXZhdGUgc2tlbGV0b25EYXRhQ2FjaGU6IFBoYXNlci5DYWNoZS5CYXNlQ2FjaGU7XG5cdHByaXZhdGUgYXRsYXNDYWNoZTogUGhhc2VyLkNhY2hlLkJhc2VDYWNoZTtcblxuXHRjb25zdHJ1Y3RvciAoc2NlbmU6IFBoYXNlci5TY2VuZSwgcGx1Z2luTWFuYWdlcjogUGhhc2VyLlBsdWdpbnMuUGx1Z2luTWFuYWdlciwgcGx1Z2luS2V5OiBzdHJpbmcpIHtcblx0XHRzdXBlcihzY2VuZSwgcGx1Z2luTWFuYWdlciwgcGx1Z2luS2V5KTtcblx0XHR0aGlzLmdhbWUgPSBwbHVnaW5NYW5hZ2VyLmdhbWU7XG5cdFx0dGhpcy5pc1dlYkdMID0gdGhpcy5nYW1lLmNvbmZpZy5yZW5kZXJUeXBlID09PSAyO1xuXHRcdHRoaXMuZ2wgPSB0aGlzLmlzV2ViR0wgPyAodGhpcy5nYW1lLnJlbmRlcmVyIGFzIFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyKS5nbCA6IG51bGw7XG5cdFx0dGhpcy5waGFzZXJSZW5kZXJlciA9IHRoaXMuZ2FtZS5yZW5kZXJlcjtcblx0XHR0aGlzLmNhbnZhc1JlbmRlcmVyID0gbnVsbDtcblx0XHR0aGlzLnNrZWxldG9uRGF0YUNhY2hlID0gdGhpcy5nYW1lLmNhY2hlLmFkZEN1c3RvbShTUElORV9TS0VMRVRPTl9EQVRBX0NBQ0hFX0tFWSk7XG5cdFx0dGhpcy5hdGxhc0NhY2hlID0gdGhpcy5nYW1lLmNhY2hlLmFkZEN1c3RvbShTUElORV9BVExBU19DQUNIRV9LRVkpO1xuXG5cdFx0bGV0IHNrZWxldG9uSnNvbkZpbGVDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBhbnksIGtleTogc3RyaW5nLFxuXHRcdFx0dXJsOiBzdHJpbmcsXG5cdFx0XHR4aHJTZXR0aW5nczogUGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdCkge1xuXHRcdFx0bGV0IGZpbGUgPSBuZXcgU3BpbmVTa2VsZXRvbkRhdGFGaWxlKHRoaXMgYXMgYW55LCBrZXksIHVybCwgU3BpbmVTa2VsZXRvbkRhdGFGaWxlVHlwZS5qc29uLCB4aHJTZXR0aW5ncyk7XG5cdFx0XHR0aGlzLmFkZEZpbGUoZmlsZS5maWxlcyk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9O1xuXHRcdHBsdWdpbk1hbmFnZXIucmVnaXN0ZXJGaWxlVHlwZShcInNwaW5lSnNvblwiLCBza2VsZXRvbkpzb25GaWxlQ2FsbGJhY2ssIHNjZW5lKTtcblxuXHRcdGxldCBza2VsZXRvbkJpbmFyeUZpbGVDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBhbnksIGtleTogc3RyaW5nLFxuXHRcdFx0dXJsOiBzdHJpbmcsXG5cdFx0XHR4aHJTZXR0aW5nczogUGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdCkge1xuXHRcdFx0bGV0IGZpbGUgPSBuZXcgU3BpbmVTa2VsZXRvbkRhdGFGaWxlKHRoaXMgYXMgYW55LCBrZXksIHVybCwgU3BpbmVTa2VsZXRvbkRhdGFGaWxlVHlwZS5iaW5hcnksIHhoclNldHRpbmdzKTtcblx0XHRcdHRoaXMuYWRkRmlsZShmaWxlLmZpbGVzKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0cGx1Z2luTWFuYWdlci5yZWdpc3RlckZpbGVUeXBlKFwic3BpbmVCaW5hcnlcIiwgc2tlbGV0b25CaW5hcnlGaWxlQ2FsbGJhY2ssIHNjZW5lKTtcblxuXHRcdGxldCBhdGxhc0ZpbGVDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBhbnksIGtleTogc3RyaW5nLFxuXHRcdFx0dXJsOiBzdHJpbmcsXG5cdFx0XHRwcmVtdWx0aXBsaWVkQWxwaGE6IGJvb2xlYW4sXG5cdFx0XHR4aHJTZXR0aW5nczogUGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdCkge1xuXHRcdFx0bGV0IGZpbGUgPSBuZXcgU3BpbmVBdGxhc0ZpbGUodGhpcyBhcyBhbnksIGtleSwgdXJsLCBwcmVtdWx0aXBsaWVkQWxwaGEsIHhoclNldHRpbmdzKTtcblx0XHRcdHRoaXMuYWRkRmlsZShmaWxlLmZpbGVzKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0cGx1Z2luTWFuYWdlci5yZWdpc3RlckZpbGVUeXBlKFwic3BpbmVBdGxhc1wiLCBhdGxhc0ZpbGVDYWxsYmFjaywgc2NlbmUpO1xuXG5cdFx0bGV0IGFkZFNwaW5lR2FtZU9iamVjdCA9IGZ1bmN0aW9uICh0aGlzOiBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnksIHg6IG51bWJlciwgeTogbnVtYmVyLCBkYXRhS2V5OiBzdHJpbmcsIGF0bGFzS2V5OiBzdHJpbmcsIGJvdW5kc1Byb3ZpZGVyOiBTcGluZUdhbWVPYmplY3RCb3VuZHNQcm92aWRlcikge1xuXHRcdFx0aWYgKHRoaXMuc2NlbmUuc3lzLnJlbmRlcmVyIGluc3RhbmNlb2YgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIpIHtcblx0XHRcdFx0dGhpcy5zY2VuZS5zeXMucmVuZGVyZXIucGlwZWxpbmVzLmNsZWFyKCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNwaW5lUGx1Z2luID0gKHRoaXMuc2NlbmUuc3lzIGFzIGFueSlbcGx1Z2luS2V5XSBhcyBTcGluZVBsdWdpbjtcblx0XHRcdGxldCBnYW1lT2JqZWN0ID0gbmV3IFNwaW5lR2FtZU9iamVjdCh0aGlzLnNjZW5lLCBzcGluZVBsdWdpbiwgeCwgeSwgZGF0YUtleSwgYXRsYXNLZXksIGJvdW5kc1Byb3ZpZGVyKTtcblx0XHRcdHRoaXMuZGlzcGxheUxpc3QuYWRkKGdhbWVPYmplY3QpO1xuXHRcdFx0dGhpcy51cGRhdGVMaXN0LmFkZChnYW1lT2JqZWN0KTtcblxuXHRcdFx0aWYgKHRoaXMuc2NlbmUuc3lzLnJlbmRlcmVyIGluc3RhbmNlb2YgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIpIHtcblx0XHRcdFx0dGhpcy5zY2VuZS5zeXMucmVuZGVyZXIucGlwZWxpbmVzLnJlYmluZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZ2FtZU9iamVjdDtcblx0XHR9O1xuXG5cdFx0bGV0IG1ha2VTcGluZUdhbWVPYmplY3QgPSBmdW5jdGlvbiAodGhpczogUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5LCBjb25maWc6IFNwaW5lR2FtZU9iamVjdENvbmZpZywgYWRkVG9TY2VuZTogYm9vbGVhbiA9IGZhbHNlKSB7XG5cdFx0XHRpZiAodGhpcy5zY2VuZS5zeXMucmVuZGVyZXIgaW5zdGFuY2VvZiBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcikge1xuXHRcdFx0XHR0aGlzLnNjZW5lLnN5cy5yZW5kZXJlci5waXBlbGluZXMuY2xlYXIoKTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IHggPSBjb25maWcueCA/IGNvbmZpZy54IDogMDtcblx0XHRcdGxldCB5ID0gY29uZmlnLnkgPyBjb25maWcueSA6IDA7XG5cdFx0XHRsZXQgYm91bmRzUHJvdmlkZXIgPSBjb25maWcuYm91bmRzUHJvdmlkZXIgPyBjb25maWcuYm91bmRzUHJvdmlkZXIgOiB1bmRlZmluZWQ7XG5cblx0XHRcdGNvbnN0IHNwaW5lUGx1Z2luID0gKHRoaXMuc2NlbmUuc3lzIGFzIGFueSlbcGx1Z2luS2V5XSBhcyBTcGluZVBsdWdpbjtcblx0XHRcdGxldCBnYW1lT2JqZWN0ID0gbmV3IFNwaW5lR2FtZU9iamVjdCh0aGlzLnNjZW5lLCBzcGluZVBsdWdpbiwgeCwgeSwgY29uZmlnLmRhdGFLZXksIGNvbmZpZy5hdGxhc0tleSwgYm91bmRzUHJvdmlkZXIpO1xuXHRcdFx0aWYgKGFkZFRvU2NlbmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25maWcuYWRkID0gYWRkVG9TY2VuZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc2NlbmUuc3lzLnJlbmRlcmVyIGluc3RhbmNlb2YgUGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIpIHtcblx0XHRcdFx0dGhpcy5zY2VuZS5zeXMucmVuZGVyZXIucGlwZWxpbmVzLnJlYmluZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gUGhhc2VyLkdhbWVPYmplY3RzLkJ1aWxkR2FtZU9iamVjdCh0aGlzLnNjZW5lLCBnYW1lT2JqZWN0LCBjb25maWcpO1xuXHRcdH1cblx0XHRwbHVnaW5NYW5hZ2VyLnJlZ2lzdGVyR2FtZU9iamVjdCgod2luZG93IGFzIGFueSkuU1BJTkVfR0FNRV9PQkpFQ1RfVFlQRSA/ICh3aW5kb3cgYXMgYW55KS5TUElORV9HQU1FX09CSkVDVF9UWVBFIDogU1BJTkVfR0FNRV9PQkpFQ1RfVFlQRSwgYWRkU3BpbmVHYW1lT2JqZWN0LCBtYWtlU3BpbmVHYW1lT2JqZWN0KTtcblx0fVxuXG5cdHN0YXRpYyByZW5kZXJlcklkID0gMDtcblx0Ym9vdCAoKSB7XG5cdFx0U2tlbGV0b24ueURvd24gPSB0cnVlO1xuXHRcdGlmICh0aGlzLmlzV2ViR0wpIHtcblx0XHRcdGlmICghU3BpbmVQbHVnaW4uZ2FtZVdlYkdMUmVuZGVyZXIpIHtcblx0XHRcdFx0U3BpbmVQbHVnaW4uZ2FtZVdlYkdMUmVuZGVyZXIgPSBuZXcgU2NlbmVSZW5kZXJlcigodGhpcy5nYW1lLnJlbmRlcmVyISBhcyBQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcikuY2FudmFzLCB0aGlzLmdsISwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLm9uUmVzaXplKCk7XG5cdFx0XHR0aGlzLmdhbWUuc2NhbGUub24oUGhhc2VyLlNjYWxlLkV2ZW50cy5SRVNJWkUsIHRoaXMub25SZXNpemUsIHRoaXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXRoaXMuY2FudmFzUmVuZGVyZXIpIHtcblx0XHRcdFx0dGhpcy5jYW52YXNSZW5kZXJlciA9IG5ldyBTa2VsZXRvblJlbmRlcmVyKHRoaXMuc2NlbmUhLnN5cy5jb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgZXZlbnRFbWl0dGVyID0gdGhpcy5zeXN0ZW1zIS5ldmVudHM7XG5cdFx0ZXZlbnRFbWl0dGVyLm9uY2UoJ3NodXRkb3duJywgdGhpcy5zaHV0ZG93biwgdGhpcyk7XG5cdFx0ZXZlbnRFbWl0dGVyLm9uY2UoJ2Rlc3Ryb3knLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xuXHRcdHRoaXMuZ2FtZS5ldmVudHMub25jZSgnZGVzdHJveScsIHRoaXMuZ2FtZURlc3Ryb3ksIHRoaXMpO1xuXHR9XG5cblx0b25SZXNpemUgKCkge1xuXHRcdHZhciBwaGFzZXJSZW5kZXJlciA9IHRoaXMuZ2FtZS5yZW5kZXJlcjtcblx0XHR2YXIgc2NlbmVSZW5kZXJlciA9IHRoaXMud2ViR0xSZW5kZXJlcjtcblxuXHRcdGlmIChwaGFzZXJSZW5kZXJlciAmJiBzY2VuZVJlbmRlcmVyKSB7XG5cdFx0XHR2YXIgdmlld3BvcnRXaWR0aCA9IHBoYXNlclJlbmRlcmVyLndpZHRoO1xuXHRcdFx0dmFyIHZpZXdwb3J0SGVpZ2h0ID0gcGhhc2VyUmVuZGVyZXIuaGVpZ2h0O1xuXHRcdFx0c2NlbmVSZW5kZXJlci5jYW1lcmEucG9zaXRpb24ueCA9IHZpZXdwb3J0V2lkdGggLyAyO1xuXHRcdFx0c2NlbmVSZW5kZXJlci5jYW1lcmEucG9zaXRpb24ueSA9IHZpZXdwb3J0SGVpZ2h0IC8gMjtcblx0XHRcdHNjZW5lUmVuZGVyZXIuY2FtZXJhLnVwLnkgPSAtMTtcblx0XHRcdHNjZW5lUmVuZGVyZXIuY2FtZXJhLmRpcmVjdGlvbi56ID0gMTtcblx0XHRcdHNjZW5lUmVuZGVyZXIuY2FtZXJhLnNldFZpZXdwb3J0KHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0KTtcblx0XHR9XG5cdH1cblxuXHRzaHV0ZG93biAoKSB7XG5cdFx0dGhpcy5zeXN0ZW1zIS5ldmVudHMub2ZmKFwic2h1dGRvd25cIiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XG5cdFx0aWYgKHRoaXMuaXNXZWJHTCkge1xuXHRcdFx0dGhpcy5nYW1lLnNjYWxlLm9mZihQaGFzZXIuU2NhbGUuRXZlbnRzLlJFU0laRSwgdGhpcy5vblJlc2l6ZSwgdGhpcyk7XG5cdFx0fVxuXHR9XG5cblx0ZGVzdHJveSAoKSB7XG5cdFx0dGhpcy5zaHV0ZG93bigpXG5cdH1cblxuXHRnYW1lRGVzdHJveSAoKSB7XG5cdFx0dGhpcy5wbHVnaW5NYW5hZ2VyLnJlbW92ZUdhbWVPYmplY3QoKHdpbmRvdyBhcyBhbnkpLlNQSU5FX0dBTUVfT0JKRUNUX1RZUEUgPyAod2luZG93IGFzIGFueSkuU1BJTkVfR0FNRV9PQkpFQ1RfVFlQRSA6IFNQSU5FX0dBTUVfT0JKRUNUX1RZUEUsIHRydWUsIHRydWUpO1xuXHRcdGlmICh0aGlzLndlYkdMUmVuZGVyZXIpIHRoaXMud2ViR0xSZW5kZXJlci5kaXNwb3NlKCk7XG5cdFx0U3BpbmVQbHVnaW4uZ2FtZVdlYkdMUmVuZGVyZXIgPSBudWxsO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdGhlIFRleHR1cmVBdGxhcyBpbnN0YW5jZSBmb3IgdGhlIGdpdmVuIGtleSAqL1xuXHRnZXRBdGxhcyAoYXRsYXNLZXk6IHN0cmluZykge1xuXHRcdGxldCBhdGxhczogVGV4dHVyZUF0bGFzO1xuXHRcdGlmICh0aGlzLmF0bGFzQ2FjaGUuZXhpc3RzKGF0bGFzS2V5KSkge1xuXHRcdFx0YXRsYXMgPSB0aGlzLmF0bGFzQ2FjaGUuZ2V0KGF0bGFzS2V5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGV0IGF0bGFzRmlsZSA9IHRoaXMuZ2FtZS5jYWNoZS50ZXh0LmdldChhdGxhc0tleSkgYXMgeyBkYXRhOiBzdHJpbmcsIHByZW11bHRpcGxpZWRBbHBoYTogYm9vbGVhbiB9O1xuXHRcdFx0YXRsYXMgPSBuZXcgVGV4dHVyZUF0bGFzKGF0bGFzRmlsZS5kYXRhKTtcblx0XHRcdGlmICh0aGlzLmlzV2ViR0wpIHtcblx0XHRcdFx0bGV0IGdsID0gdGhpcy5nbCE7XG5cdFx0XHRcdGNvbnN0IHBoYXNlclVucGFja1BtYVZhbHVlID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCk7XG5cdFx0XHRcdGlmIChwaGFzZXJVbnBhY2tQbWFWYWx1ZSkgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCBmYWxzZSk7XG5cdFx0XHRcdGZvciAobGV0IGF0bGFzUGFnZSBvZiBhdGxhcy5wYWdlcykge1xuXHRcdFx0XHRcdGF0bGFzUGFnZS5zZXRUZXh0dXJlKG5ldyBHTFRleHR1cmUoZ2wsIHRoaXMuZ2FtZS50ZXh0dXJlcy5nZXQoYXRsYXNLZXkgKyBcIiFcIiArIGF0bGFzUGFnZS5uYW1lKS5nZXRTb3VyY2VJbWFnZSgpIGFzIEhUTUxJbWFnZUVsZW1lbnQgfCBJbWFnZUJpdG1hcCwgZmFsc2UpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocGhhc2VyVW5wYWNrUG1hVmFsdWUpIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGxldCBhdGxhc1BhZ2Ugb2YgYXRsYXMucGFnZXMpIHtcblx0XHRcdFx0XHRhdGxhc1BhZ2Uuc2V0VGV4dHVyZShuZXcgQ2FudmFzVGV4dHVyZSh0aGlzLmdhbWUudGV4dHVyZXMuZ2V0KGF0bGFzS2V5ICsgXCIhXCIgKyBhdGxhc1BhZ2UubmFtZSkuZ2V0U291cmNlSW1hZ2UoKSBhcyBIVE1MSW1hZ2VFbGVtZW50IHwgSW1hZ2VCaXRtYXApKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5hdGxhc0NhY2hlLmFkZChhdGxhc0tleSwgYXRsYXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYXRsYXM7XG5cdH1cblxuXHQvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBUZXh0dXJlQXRsYXMgdXNlcyBwcmVtdWx0aXBsaWVkIGFscGhhICovXG5cdGlzQXRsYXNQcmVtdWx0aXBsaWVkIChhdGxhc0tleTogc3RyaW5nKSB7XG5cdFx0bGV0IGF0bGFzRmlsZSA9IHRoaXMuZ2FtZS5jYWNoZS50ZXh0LmdldChhdGxhc0tleSk7XG5cdFx0aWYgKCFhdGxhc0ZpbGUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gYXRsYXNGaWxlLnByZW11bHRpcGxpZWRBbHBoYTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRoZSBTa2VsZXRvbkRhdGEgaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBkYXRhIGFuZCBhdGxhcyBrZXkgKi9cblx0Z2V0U2tlbGV0b25EYXRhIChkYXRhS2V5OiBzdHJpbmcsIGF0bGFzS2V5OiBzdHJpbmcpIHtcblx0XHRjb25zdCBhdGxhcyA9IHRoaXMuZ2V0QXRsYXMoYXRsYXNLZXkpXG5cdFx0Y29uc3QgY29tYmluZWRLZXkgPSBkYXRhS2V5ICsgYXRsYXNLZXk7XG5cdFx0bGV0IHNrZWxldG9uRGF0YTogU2tlbGV0b25EYXRhO1xuXHRcdGlmICh0aGlzLnNrZWxldG9uRGF0YUNhY2hlLmV4aXN0cyhjb21iaW5lZEtleSkpIHtcblx0XHRcdHNrZWxldG9uRGF0YSA9IHRoaXMuc2tlbGV0b25EYXRhQ2FjaGUuZ2V0KGNvbWJpbmVkS2V5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuZ2FtZS5jYWNoZS5qc29uLmV4aXN0cyhkYXRhS2V5KSkge1xuXHRcdFx0XHRsZXQganNvbkZpbGUgPSB0aGlzLmdhbWUuY2FjaGUuanNvbi5nZXQoZGF0YUtleSkgYXMgYW55O1xuXHRcdFx0XHRsZXQganNvbiA9IG5ldyBTa2VsZXRvbkpzb24obmV3IEF0bGFzQXR0YWNobWVudExvYWRlcihhdGxhcykpO1xuXHRcdFx0XHRza2VsZXRvbkRhdGEgPSBqc29uLnJlYWRTa2VsZXRvbkRhdGEoanNvbkZpbGUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bGV0IGJpbmFyeUZpbGUgPSB0aGlzLmdhbWUuY2FjaGUuYmluYXJ5LmdldChkYXRhS2V5KSBhcyBBcnJheUJ1ZmZlcjtcblx0XHRcdFx0bGV0IGJpbmFyeSA9IG5ldyBTa2VsZXRvbkJpbmFyeShuZXcgQXRsYXNBdHRhY2htZW50TG9hZGVyKGF0bGFzKSk7XG5cdFx0XHRcdHNrZWxldG9uRGF0YSA9IGJpbmFyeS5yZWFkU2tlbGV0b25EYXRhKG5ldyBVaW50OEFycmF5KGJpbmFyeUZpbGUpKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc2tlbGV0b25EYXRhQ2FjaGUuYWRkKGNvbWJpbmVkS2V5LCBza2VsZXRvbkRhdGEpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2tlbGV0b25EYXRhO1xuXHR9XG5cblx0LyoqIENyZWF0ZXMgYSBuZXcgU2tlbGV0b24gaW5zdGFuY2UgZnJvbSB0aGUgZGF0YSBhbmQgYXRsYXMuICovXG5cdGNyZWF0ZVNrZWxldG9uIChkYXRhS2V5OiBzdHJpbmcsIGF0bGFzS2V5OiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gbmV3IFNrZWxldG9uKHRoaXMuZ2V0U2tlbGV0b25EYXRhKGRhdGFLZXksIGF0bGFzS2V5KSk7XG5cdH1cbn1cblxuZW51bSBTcGluZVNrZWxldG9uRGF0YUZpbGVUeXBlIHtcblx0anNvbixcblx0YmluYXJ5XG59XG5cbmludGVyZmFjZSBTcGluZVNrZWxldG9uRGF0YUZpbGVDb25maWcge1xuXHRrZXk6IHN0cmluZztcblx0dXJsOiBzdHJpbmc7XG5cdHR5cGU6IFwic3BpbmVKc29uXCIgfCBcInNwaW5lQmluYXJ5XCI7XG5cdHhoclNldHRpbmdzPzogUGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdFxufVxuXG5jbGFzcyBTcGluZVNrZWxldG9uRGF0YUZpbGUgZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZSB7XG5cdGNvbnN0cnVjdG9yIChsb2FkZXI6IFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luLCBrZXk6IHN0cmluZyB8IFNwaW5lU2tlbGV0b25EYXRhRmlsZUNvbmZpZywgdXJsPzogc3RyaW5nLCBwdWJsaWMgZmlsZVR5cGU/OiBTcGluZVNrZWxldG9uRGF0YUZpbGVUeXBlLCB4aHJTZXR0aW5ncz86IFBoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3QpIHtcblx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0Y29uc3QgY29uZmlnID0ga2V5O1xuXHRcdFx0a2V5ID0gY29uZmlnLmtleTtcblx0XHRcdHVybCA9IGNvbmZpZy51cmw7XG5cdFx0XHRmaWxlVHlwZSA9IGNvbmZpZy50eXBlID09PSBcInNwaW5lSnNvblwiID8gU3BpbmVTa2VsZXRvbkRhdGFGaWxlVHlwZS5qc29uIDogU3BpbmVTa2VsZXRvbkRhdGFGaWxlVHlwZS5iaW5hcnk7XG5cdFx0XHR4aHJTZXR0aW5ncyA9IGNvbmZpZy54aHJTZXR0aW5ncztcblx0XHR9XG5cdFx0bGV0IGZpbGUgPSBudWxsO1xuXHRcdGxldCBpc0pzb24gPSBmaWxlVHlwZSA9PSBTcGluZVNrZWxldG9uRGF0YUZpbGVUeXBlLmpzb247XG5cdFx0aWYgKGlzSnNvbikge1xuXHRcdFx0ZmlsZSA9IG5ldyBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZShsb2FkZXIsIHtcblx0XHRcdFx0a2V5OiBrZXksXG5cdFx0XHRcdHVybDogdXJsLFxuXHRcdFx0XHRleHRlbnNpb246IFwianNvblwiLFxuXHRcdFx0XHR4aHJTZXR0aW5nczogeGhyU2V0dGluZ3MsXG5cdFx0XHR9IGFzIFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkpTT05GaWxlQ29uZmlnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmlsZSA9IG5ldyBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5CaW5hcnlGaWxlKGxvYWRlciwge1xuXHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0dXJsOiB1cmwsXG5cdFx0XHRcdGV4dGVuc2lvbjogXCJza2VsXCIsXG5cdFx0XHRcdHhoclNldHRpbmdzOiB4aHJTZXR0aW5ncyxcblx0XHRcdH0gYXMgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQmluYXJ5RmlsZUNvbmZpZyk7XG5cdFx0fVxuXHRcdHN1cGVyKGxvYWRlciwgU1BJTkVfU0tFTEVUT05fREFUQV9GSUxFX1RZUEUsIGtleSwgW2ZpbGVdKTtcblx0fVxuXG5cdG9uRmlsZUNvbXBsZXRlIChmaWxlOiBQaGFzZXIuTG9hZGVyLkZpbGUpIHtcblx0XHR0aGlzLnBlbmRpbmctLTtcblx0fVxuXG5cdGFkZFRvQ2FjaGUgKCkge1xuXHRcdGlmICh0aGlzLmlzUmVhZHlUb1Byb2Nlc3MoKSkgdGhpcy5maWxlc1swXS5hZGRUb0NhY2hlKCk7XG5cdH1cbn1cblxuaW50ZXJmYWNlIFNwaW5lQXRsYXNGaWxlQ29uZmlnIHtcblx0a2V5OiBzdHJpbmc7XG5cdHVybDogc3RyaW5nO1xuXHRwcmVtdWx0aXBsaWVkQWxwaGE/OiBib29sZWFuO1xuXHR4aHJTZXR0aW5ncz86IFBoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3Q7XG59XG5cbmNsYXNzIFNwaW5lQXRsYXNGaWxlIGV4dGVuZHMgUGhhc2VyLkxvYWRlci5NdWx0aUZpbGUge1xuXHRjb25zdHJ1Y3RvciAobG9hZGVyOiBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiwga2V5OiBzdHJpbmcgfCBTcGluZUF0bGFzRmlsZUNvbmZpZywgdXJsPzogc3RyaW5nLCBwdWJsaWMgcHJlbXVsdGlwbGllZEFscGhhPzogYm9vbGVhbiwgeGhyU2V0dGluZ3M/OiBQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0KSB7XG5cdFx0aWYgKHR5cGVvZiBrZXkgIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdGNvbnN0IGNvbmZpZyA9IGtleTtcblx0XHRcdGtleSA9IGNvbmZpZy5rZXk7XG5cdFx0XHR1cmwgPSBjb25maWcudXJsO1xuXHRcdFx0cHJlbXVsdGlwbGllZEFscGhhID0gY29uZmlnLnByZW11bHRpcGxpZWRBbHBoYTtcblx0XHRcdHhoclNldHRpbmdzID0gY29uZmlnLnhoclNldHRpbmdzO1xuXHRcdH1cblxuXHRcdHN1cGVyKGxvYWRlciwgU1BJTkVfQVRMQVNfRklMRV9UWVBFLCBrZXksIFtcblx0XHRcdG5ldyBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5UZXh0RmlsZShsb2FkZXIsIHtcblx0XHRcdFx0a2V5OiBrZXksXG5cdFx0XHRcdHVybDogdXJsLFxuXHRcdFx0XHR4aHJTZXR0aW5nczogeGhyU2V0dGluZ3MsXG5cdFx0XHRcdGV4dGVuc2lvbjogXCJhdGxhc1wiXG5cdFx0XHR9KVxuXHRcdF0pO1xuXHR9XG5cblx0b25GaWxlQ29tcGxldGUgKGZpbGU6IFBoYXNlci5Mb2FkZXIuRmlsZSkge1xuXHRcdGlmICh0aGlzLmZpbGVzLmluZGV4T2YoZmlsZSkgIT0gLTEpIHtcblx0XHRcdHRoaXMucGVuZGluZy0tO1xuXG5cdFx0XHRpZiAoZmlsZS50eXBlID09IFwidGV4dFwiKSB7XG5cdFx0XHRcdHZhciBsaW5lcyA9IGZpbGUuZGF0YS5zcGxpdCgvXFxyXFxufFxccnxcXG4vKTtcblx0XHRcdFx0bGV0IHRleHR1cmVzID0gW107XG5cdFx0XHRcdHRleHR1cmVzLnB1c2gobGluZXNbMF0pO1xuXHRcdFx0XHRmb3IgKHZhciB0ID0gMTsgdCA8IGxpbmVzLmxlbmd0aDsgdCsrKSB7XG5cdFx0XHRcdFx0dmFyIGxpbmUgPSBsaW5lc1t0XTtcblx0XHRcdFx0XHRpZiAobGluZS50cmltKCkgPT09ICcnICYmIHQgPCBsaW5lcy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRsaW5lID0gbGluZXNbdCArIDFdO1xuXHRcdFx0XHRcdFx0dGV4dHVyZXMucHVzaChsaW5lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgYmFzZVBhdGggPSAoZmlsZS5zcmMubWF0Y2goL14uKlxcLy8pID8/IFwiXCIpLnRvU3RyaW5nKCk7XG5cdFx0XHRcdGlmICh0aGlzLmxvYWRlci5wYXRoICYmIHRoaXMubG9hZGVyLnBhdGgubGVuZ3RoID4gMCAmJiBiYXNlUGF0aC5zdGFydHNXaXRoKHRoaXMubG9hZGVyLnBhdGgpKVxuXHRcdFx0XHRcdGJhc2VQYXRoID0gYmFzZVBhdGguc2xpY2UodGhpcy5sb2FkZXIucGF0aC5sZW5ndGgpO1xuXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgdXJsID0gYmFzZVBhdGggKyB0ZXh0dXJlc1tpXTtcblx0XHRcdFx0XHR2YXIga2V5ID0gZmlsZS5rZXkgKyBcIiFcIiArIHRleHR1cmVzW2ldO1xuXHRcdFx0XHRcdHZhciBpbWFnZSA9IG5ldyBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5JbWFnZUZpbGUodGhpcy5sb2FkZXIsIGtleSwgdXJsKTtcblxuXHRcdFx0XHRcdGlmICghdGhpcy5sb2FkZXIua2V5RXhpc3RzKGltYWdlKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5hZGRUb011bHRpRmlsZShpbWFnZSk7XG5cdFx0XHRcdFx0XHR0aGlzLmxvYWRlci5hZGRGaWxlKGltYWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhZGRUb0NhY2hlICgpIHtcblx0XHRpZiAodGhpcy5pc1JlYWR5VG9Qcm9jZXNzKCkpIHtcblx0XHRcdGxldCB0ZXh0dXJlTWFuYWdlciA9IHRoaXMubG9hZGVyLnRleHR1cmVNYW5hZ2VyO1xuXHRcdFx0Zm9yIChsZXQgZmlsZSBvZiB0aGlzLmZpbGVzKSB7XG5cdFx0XHRcdGlmIChmaWxlLnR5cGUgPT0gXCJpbWFnZVwiKSB7XG5cdFx0XHRcdFx0aWYgKCF0ZXh0dXJlTWFuYWdlci5leGlzdHMoZmlsZS5rZXkpKSB7XG5cdFx0XHRcdFx0XHR0ZXh0dXJlTWFuYWdlci5hZGRJbWFnZShmaWxlLmtleSwgZmlsZS5kYXRhKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA/PyAoZmlsZS5kYXRhLmluZGV4T2YoXCJwbWE6IHRydWVcIikgPj0gMCB8fCBmaWxlLmRhdGEuaW5kZXhPZihcInBtYTp0cnVlXCIpID49IDApO1xuXHRcdFx0XHRcdGZpbGUuZGF0YSA9IHtcblx0XHRcdFx0XHRcdGRhdGE6IGZpbGUuZGF0YSxcblx0XHRcdFx0XHRcdHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEsXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRmaWxlLmFkZFRvQ2FjaGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl19
|