angular-three-rapier 2.5.2 → 2.6.1
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/esm2022/lib/physics.mjs
CHANGED
|
@@ -18,6 +18,7 @@ const defaultOptions = {
|
|
|
18
18
|
predictionDistance: 0.002,
|
|
19
19
|
minIslandSize: 128,
|
|
20
20
|
maxCcdSubsteps: 1,
|
|
21
|
+
contactNaturalFrequency: 30,
|
|
21
22
|
erp: 0.8,
|
|
22
23
|
lengthUnit: 1,
|
|
23
24
|
colliders: 'cuboid',
|
|
@@ -51,7 +52,7 @@ export class NgtrPhysics {
|
|
|
51
52
|
minIslandSize = pick(this.options, 'minIslandSize');
|
|
52
53
|
maxCcdSubsteps = pick(this.options, 'maxCcdSubsteps');
|
|
53
54
|
predictionDistance = pick(this.options, 'predictionDistance');
|
|
54
|
-
|
|
55
|
+
contactNaturalFrequency = pick(this.options, 'contactNaturalFrequency');
|
|
55
56
|
lengthUnit = pick(this.options, 'lengthUnit');
|
|
56
57
|
timeStep = pick(this.options, 'timeStep');
|
|
57
58
|
interpolate = pick(this.options, 'interpolate');
|
|
@@ -120,11 +121,7 @@ export class NgtrPhysics {
|
|
|
120
121
|
world.proxy.integrationParameters.minIslandSize = this.minIslandSize();
|
|
121
122
|
world.proxy.integrationParameters.maxCcdSubsteps = this.maxCcdSubsteps();
|
|
122
123
|
world.proxy.integrationParameters.normalizedPredictionDistance = this.predictionDistance();
|
|
123
|
-
|
|
124
|
-
* NOTE: we don't know if this is the correct way to set for contact_natural_frequency or not.
|
|
125
|
-
* but at least, it gets the `contact_erp` value to be very close with setting `erp`
|
|
126
|
-
*/
|
|
127
|
-
world.proxy.integrationParameters.contact_natural_frequency = this.erp() * 1_000;
|
|
124
|
+
world.proxy.integrationParameters.contact_natural_frequency = this.contactNaturalFrequency();
|
|
128
125
|
world.proxy.lengthUnit = this.lengthUnit();
|
|
129
126
|
}
|
|
130
127
|
internalStep(delta) {
|
|
@@ -386,4 +383,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
386
383
|
imports: [NgtrDebug, NgtrFrameStepper, NgTemplateOutlet],
|
|
387
384
|
}]
|
|
388
385
|
}], ctorParameters: () => [] });
|
|
389
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGh5c2ljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcmFwaWVyL3NyYy9saWIvcGh5c2ljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBZSxFQUFrQixVQUFVLEVBQTJCLE1BQU0sMkJBQTJCLENBQUM7QUFDeEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUF1QixNQUFNLE9BQU8sQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFVbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUU3RSxNQUFNLGNBQWMsR0FBdUI7SUFDMUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0QixrQkFBa0IsRUFBRSxLQUFLO0lBQ3pCLG1CQUFtQixFQUFFLENBQUM7SUFDdEIsK0JBQStCLEVBQUUsQ0FBQztJQUNsQyx3QkFBd0IsRUFBRSxDQUFDO0lBQzNCLGtCQUFrQixFQUFFLEtBQUs7SUFDekIsYUFBYSxFQUFFLEdBQUc7SUFDbEIsY0FBYyxFQUFFLENBQUM7SUFDakIsR0FBRyxFQUFFLEdBQUc7SUFDUixVQUFVLEVBQUUsQ0FBQztJQUNiLFNBQVMsRUFBRSxRQUFRO0lBQ25CLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLE1BQU0sRUFBRSxLQUFLO0lBQ2IsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFO0lBQ2hCLEtBQUssRUFBRSxLQUFLO0NBQ1osQ0FBQztBQUdGLE1BQU0sT0FBTyxtQkFBbUI7SUFDL0IsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQXNCLEVBQUUsR0FBWTtRQUNqRSxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7dUdBSFcsbUJBQW1COzJGQUFuQixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBRC9CLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsNkJBQTZCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTs7QUErQnhFLE1BQU0sT0FBTyxXQUFXO0lBQ3ZCLE9BQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFNUUsT0FBTyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0MsZUFBZSxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRTFDLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3RELFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVoRCxtQkFBbUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ2hFLCtCQUErQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGlDQUFpQyxDQUFDLENBQUM7SUFDeEYsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztJQUMxRSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzlELGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNwRCxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN0RCxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzlELEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDOUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUV4RCxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUVwQyxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFM0MsS0FBSyxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQ3RCLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFOUIsZUFBZSxHQUFHLE1BQU0sQ0FBdUIsSUFBSSxDQUFDLENBQUM7SUFDckQsV0FBVyxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFDcEQsTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFM0MsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDeEMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDekIsT0FBTyxvQkFBb0IsQ0FBUSxHQUFHLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckYsQ0FBQyxDQUFDLENBQUM7SUFFSCxlQUFlLEdBQTBCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkQsY0FBYyxHQUF5QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2pELGVBQWUsR0FBaUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMxQyxjQUFjLEdBQWlCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDakMsbUJBQW1CLEdBQTZCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDMUQsa0JBQWtCLEdBQTZCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFekQsVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDekIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDLENBQUMsQ0FBQztJQUVLLGFBQWEsR0FHakIsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUUxQztRQUNDLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQzthQUNqQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDekQsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFFSixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDOUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BDLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1gsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbkIsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQyxLQUFhO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUM7SUFDRixDQUFDO0lBRU8saUJBQWlCO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFFbkIsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JDLEtBQUssQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDbkYsS0FBSyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQywrQkFBK0IsR0FBRyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztRQUMzRyxLQUFLLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQzdGLEtBQUssQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0YsS0FBSyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6RSxLQUFLLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNGOzs7V0FHRztRQUNILEtBQUssQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNqRixLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFhO1FBQ2pDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU87UUFFNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUV4QixNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUU3RjsyREFDeUQ7UUFDekQsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLEtBQUssTUFBTSxDQUFDO1FBRTdDOzs7V0FHRztRQUNILE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVwRCxNQUFNLFNBQVMsR0FBRyxDQUFDLFVBQWtCLEVBQUUsRUFBRTtZQUN4QywrQkFBK0I7WUFDL0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUM3QyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7WUFFSCxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztZQUM1QixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXZCLDhCQUE4QjtZQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQzVDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUVGLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekIsQ0FBQzthQUFNLENBQUM7WUFDUCxxQ0FBcUM7WUFDckMsdUJBQXVCO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxJQUFJLFlBQVksQ0FBQztZQUUvQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNuRCx3QkFBd0I7Z0JBQ3hCLHVFQUF1RTtnQkFDdkUsSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO29CQUN0QyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHOzRCQUMvQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTs0QkFDNUIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7eUJBQ3pCLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQztZQUM1QyxDQUFDO1FBQ0YsQ0FBQztRQUVELE1BQU0sa0JBQWtCLEdBQ3ZCLGdCQUFnQixJQUFJLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7UUFFNUYsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzlDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFN0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEQsSUFBSSxNQUFNLEVBQUUsT0FBTyxJQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVTtvQkFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDckUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxLQUFLLENBQUMsVUFBVTtvQkFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQztnQkFDcEUsS0FBSyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDM0MsQ0FBQztZQUVELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUN4RyxPQUFPO1lBQ1IsQ0FBQztZQUVELGFBQWE7WUFDYixJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFhLENBQUM7WUFDM0MsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBZ0IsQ0FBQztZQUUzQyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU3RCxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNuQix3Q0FBd0M7Z0JBQ3hDLFFBQVE7cUJBQ04sT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFtQixFQUFFLDRCQUE0QixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDO3FCQUM3RyxXQUFXLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDO3FCQUN0QyxTQUFTLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFFMUMsK0JBQStCO2dCQUMvQixJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQzlCLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDdEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN6QyxDQUFDO1lBQ0YsQ0FBQztZQUVELG1CQUFtQjtZQUNuQixRQUFRO2lCQUNOLE9BQU8sQ0FBQyxDQUFDLEVBQUUsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztpQkFDeEQsV0FBVyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQztpQkFDdEMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFMUMsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUN2QyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDUCw4QkFBOEI7Z0JBQzlCLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDMUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlELENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztRQUVILFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDN0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUUxRCxtQkFBbUI7WUFDbkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUQsT0FBTztZQUNSLENBQUM7WUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDL0UsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRS9FLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRTtvQkFDekYsc0JBQXNCO29CQUN0QixPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDMUYsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLEdBQUcsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBRTFGLHFCQUFxQjtvQkFDckIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLEdBQUcsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBQ3pGLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxHQUFHLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRixDQUFDLENBQUMsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDUCxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUMvRCxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUMvRCxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM5RCxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQy9ELENBQUM7WUFFRCx1QkFBdUI7WUFDdkIsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDYixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQzlFLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLG1CQUFtQixFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDbkUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO29CQUNuRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7b0JBQ2xFLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLG1CQUFtQixFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDbkUsQ0FBQztZQUNGLENBQUM7aUJBQU0sQ0FBQztnQkFDUCxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ2xFLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDbEUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNqRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDbEUsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO1FBRUgsVUFBVSxDQUFDLHVCQUF1QixDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUVwRSxtQkFBbUI7WUFDbkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUQsT0FBTztZQUNSLENBQUM7WUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDL0UsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRS9FLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDO2dCQUMxQyxHQUFHLGlCQUFpQjtnQkFDcEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUU7Z0JBQzlCLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxtQkFBbUIsRUFBRTtnQkFDaEQsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFO2dCQUM1QyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCLEVBQUU7YUFDNUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUM7Z0JBQzFDLEdBQUcsaUJBQWlCO2dCQUNwQixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRTtnQkFDOUIsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixFQUFFO2dCQUNoRCxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzVDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTthQUM1QyxDQUFDLENBQUM7WUFFSCxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBQztnQkFDekMsR0FBRyxpQkFBaUI7Z0JBQ3BCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFO2dCQUM5QixtQkFBbUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ2hELGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtnQkFDNUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFO2FBQzVDLENBQUMsQ0FBQztZQUVILE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDO2dCQUN6QyxHQUFHLGlCQUFpQjtnQkFDcEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUU7Z0JBQzlCLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxtQkFBbUIsRUFBRTtnQkFDaEQsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFO2dCQUM1QyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCLEVBQUU7YUFDNUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxLQUFLLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVPLDJCQUEyQixDQUFDLE1BQXNCO1FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFFbkIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEQsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNsRCxNQUFNLFNBQVMsR0FBRyxlQUFlLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3hHLE1BQU0sZUFBZSxHQUNwQixTQUFTLElBQUksZUFBZSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNwRyxNQUFNLGNBQWMsR0FBRyxlQUFlLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRTdHLE9BQU87WUFDTixRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTtZQUN2RSxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtTQUN6RCxDQUFDO0lBQzFCLENBQUM7SUFFTyw2QkFBNkIsQ0FBQyxNQUEyQixFQUFFLEtBQTBCO1FBQzVGLE9BQU87WUFDTixNQUFNLEVBQUU7Z0JBQ1AsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTTtnQkFDbEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTTtnQkFDaEMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU07Z0JBQzdDLGVBQWUsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNO2FBQy9DO1lBQ0QsS0FBSyxFQUFFO2dCQUNOLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07Z0JBQ2pDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07Z0JBQy9CLGNBQWMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNO2dCQUM1QyxlQUFlLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTTthQUM5QztTQUNELENBQUM7SUFDSCxDQUFDO3VHQTlWVyxXQUFXOzJGQUFYLFdBQVcsdVBBR1MsV0FBVyxrR0FDWixtQkFBbUIsZ0VBekJ4Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQlQsNERBRVMsU0FBUywwRUFBRSxnQkFBZ0Isc0hBQUUsZ0JBQWdCOzsyRkFFM0MsV0FBVztrQkF4QnZCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUM7aUJBQ3hEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Y29udGVudENoaWxkLFxuXHREZXN0cm95UmVmLFxuXHREaXJlY3RpdmUsXG5cdGVmZmVjdCxcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0c2lnbmFsLFxuXHRUZW1wbGF0ZVJlZixcblx0dW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBSQVBJRVIsIHsgQ29sbGlkZXJIYW5kbGUsIEV2ZW50UXVldWUsIFJvdGF0aW9uLCBWZWN0b3IsIFdvcmxkIH0gZnJvbSAnQGRpbWZvcmdlL3JhcGllcjNkLWNvbXBhdCc7XG5pbXBvcnQgeyBpbmplY3RTdG9yZSwgcGljaywgdmVjdG9yMyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgTWF0aFV0aWxzLCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0ckRlYnVnIH0gZnJvbSAnLi9kZWJ1Zyc7XG5pbXBvcnQgeyBOZ3RyRnJhbWVTdGVwcGVyIH0gZnJvbSAnLi9mcmFtZS1zdGVwcGVyJztcbmltcG9ydCB7IF9tYXRyaXg0LCBfcG9zaXRpb24sIF9yb3RhdGlvbiwgX3NjYWxlIH0gZnJvbSAnLi9zaGFyZWQnO1xuaW1wb3J0IHtcblx0Tmd0ckNvbGxpZGVyU3RhdGVNYXAsXG5cdE5ndHJDb2xsaXNpb25QYXlsb2FkLFxuXHROZ3RyQ29sbGlzaW9uU291cmNlLFxuXHROZ3RyRXZlbnRNYXAsXG5cdE5ndHJQaHlzaWNzT3B0aW9ucyxcblx0Tmd0clJpZ2lkQm9keVN0YXRlTWFwLFxuXHROZ3RyV29ybGRTdGVwQ2FsbGJhY2tTZXQsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlU2luZ2xldG9uUHJveHksIHJhcGllclF1YXRlcm5pb25Ub1F1YXRlcm5pb24gfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHJQaHlzaWNzT3B0aW9ucyA9IHtcblx0Z3Jhdml0eTogWzAsIC05LjgxLCAwXSxcblx0YWxsb3dlZExpbmVhckVycm9yOiAwLjAwMSxcblx0bnVtU29sdmVySXRlcmF0aW9uczogNCxcblx0bnVtQWRkaXRpb25hbEZyaWN0aW9uSXRlcmF0aW9uczogNCxcblx0bnVtSW50ZXJuYWxQZ3NJdGVyYXRpb25zOiAxLFxuXHRwcmVkaWN0aW9uRGlzdGFuY2U6IDAuMDAyLFxuXHRtaW5Jc2xhbmRTaXplOiAxMjgsXG5cdG1heENjZFN1YnN0ZXBzOiAxLFxuXHRlcnA6IDAuOCxcblx0bGVuZ3RoVW5pdDogMSxcblx0Y29sbGlkZXJzOiAnY3Vib2lkJyxcblx0dXBkYXRlTG9vcDogJ2ZvbGxvdycsXG5cdGludGVycG9sYXRlOiB0cnVlLFxuXHRwYXVzZWQ6IGZhbHNlLFxuXHR0aW1lU3RlcDogMSAvIDYwLFxuXHRkZWJ1ZzogZmFsc2UsXG59O1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtyYXBpZXJGYWxsYmFja10nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0clBoeXNpY3NGYWxsYmFjayB7XG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKF86IE5ndHJQaHlzaWNzRmFsbGJhY2ssIGN0eDogdW5rbm93bik6IGN0eCBpcyB7IGVycm9yOiBzdHJpbmcgfSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0ci1waHlzaWNzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHRAaWYgKHJhcGllckNvbnN0cnVjdCgpKSB7XG5cdFx0XHRAaWYgKGRlYnVnKCkpIHtcblx0XHRcdFx0PG5ndHItZGVidWcgW3dvcmxkXT1cIndvcmxkU2luZ2xldG9uKCk/LnByb3h5XCIgLz5cblx0XHRcdH1cblxuXHRcdFx0PG5ndHItZnJhbWUtc3RlcHBlclxuXHRcdFx0XHRbcmVhZHldPVwicmVhZHkoKVwiXG5cdFx0XHRcdFtzdGVwRm5dPVwic3RlcC5iaW5kKHRoaXMpXCJcblx0XHRcdFx0W3R5cGVdPVwidXBkYXRlTG9vcCgpXCJcblx0XHRcdFx0W3VwZGF0ZVByaW9yaXR5XT1cInVwZGF0ZVByaW9yaXR5KClcIlxuXHRcdFx0Lz5cblxuXHRcdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50KClcIiAvPlxuXHRcdH0gQGVsc2UgaWYgKHJhcGllckVycm9yKCkgJiYgISFmYWxsYmFja0NvbnRlbnQoKSkge1xuXHRcdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KGZhbGxiYWNrQ29udGVudCgpKVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGVycm9yOiByYXBpZXJFcnJvcigpIH1cIiAvPlxuXHRcdH1cblx0YCxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtOZ3RyRGVidWcsIE5ndHJGcmFtZVN0ZXBwZXIsIE5nVGVtcGxhdGVPdXRsZXRdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RyUGh5c2ljcyB7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblxuXHRjb250ZW50ID0gY29udGVudENoaWxkLnJlcXVpcmVkKFRlbXBsYXRlUmVmKTtcblx0ZmFsbGJhY2tDb250ZW50ID0gY29udGVudENoaWxkKE5ndHJQaHlzaWNzRmFsbGJhY2spO1xuXG5cdHByb3RlY3RlZCB1cGRhdGVQcmlvcml0eSA9IHBpY2sodGhpcy5vcHRpb25zLCAndXBkYXRlUHJpb3JpdHknKTtcblx0cHJvdGVjdGVkIHVwZGF0ZUxvb3AgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3VwZGF0ZUxvb3AnKTtcblxuXHRwcml2YXRlIG51bVNvbHZlckl0ZXJhdGlvbnMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ251bVNvbHZlckl0ZXJhdGlvbnMnKTtcblx0cHJpdmF0ZSBudW1BZGRpdGlvbmFsRnJpY3Rpb25JdGVyYXRpb25zID0gcGljayh0aGlzLm9wdGlvbnMsICdudW1BZGRpdGlvbmFsRnJpY3Rpb25JdGVyYXRpb25zJyk7XG5cdHByaXZhdGUgbnVtSW50ZXJuYWxQZ3NJdGVyYXRpb25zID0gcGljayh0aGlzLm9wdGlvbnMsICdudW1JbnRlcm5hbFBnc0l0ZXJhdGlvbnMnKTtcblx0cHJpdmF0ZSBhbGxvd2VkTGluZWFyRXJyb3IgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FsbG93ZWRMaW5lYXJFcnJvcicpO1xuXHRwcml2YXRlIG1pbklzbGFuZFNpemUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ21pbklzbGFuZFNpemUnKTtcblx0cHJpdmF0ZSBtYXhDY2RTdWJzdGVwcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnbWF4Q2NkU3Vic3RlcHMnKTtcblx0cHJpdmF0ZSBwcmVkaWN0aW9uRGlzdGFuY2UgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3ByZWRpY3Rpb25EaXN0YW5jZScpO1xuXHRwcml2YXRlIGVycCA9IHBpY2sodGhpcy5vcHRpb25zLCAnZXJwJyk7XG5cdHByaXZhdGUgbGVuZ3RoVW5pdCA9IHBpY2sodGhpcy5vcHRpb25zLCAnbGVuZ3RoVW5pdCcpO1xuXHRwcml2YXRlIHRpbWVTdGVwID0gcGljayh0aGlzLm9wdGlvbnMsICd0aW1lU3RlcCcpO1xuXHRwcml2YXRlIGludGVycG9sYXRlID0gcGljayh0aGlzLm9wdGlvbnMsICdpbnRlcnBvbGF0ZScpO1xuXG5cdHBhdXNlZCA9IHBpY2sodGhpcy5vcHRpb25zLCAncGF1c2VkJyk7XG5cdGRlYnVnID0gcGljayh0aGlzLm9wdGlvbnMsICdkZWJ1ZycpO1xuXHRjb2xsaWRlcnMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2NvbGxpZGVycycpO1xuXG5cdHByaXZhdGUgZ3Jhdml0eSA9IHZlY3RvcjModGhpcy5vcHRpb25zLCAnZ3Jhdml0eScpO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cblx0cHJvdGVjdGVkIHJhcGllckNvbnN0cnVjdCA9IHNpZ25hbDx0eXBlb2YgUkFQSUVSIHwgbnVsbD4obnVsbCk7XG5cdHByb3RlY3RlZCByYXBpZXJFcnJvciA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblx0cmFwaWVyID0gdGhpcy5yYXBpZXJDb25zdHJ1Y3QuYXNSZWFkb25seSgpO1xuXG5cdHJlYWR5ID0gY29tcHV0ZWQoKCkgPT4gISF0aGlzLnJhcGllcigpKTtcblx0d29ybGRTaW5nbGV0b24gPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgcmFwaWVyID0gdGhpcy5yYXBpZXIoKTtcblx0XHRpZiAoIXJhcGllcikgcmV0dXJuIG51bGw7XG5cdFx0cmV0dXJuIGNyZWF0ZVNpbmdsZXRvblByb3h5PFdvcmxkPigoKSA9PiBuZXcgcmFwaWVyLldvcmxkKHVudHJhY2tlZCh0aGlzLmdyYXZpdHkpKSk7XG5cdH0pO1xuXG5cdHJpZ2lkQm9keVN0YXRlczogTmd0clJpZ2lkQm9keVN0YXRlTWFwID0gbmV3IE1hcCgpO1xuXHRjb2xsaWRlclN0YXRlczogTmd0ckNvbGxpZGVyU3RhdGVNYXAgPSBuZXcgTWFwKCk7XG5cdHJpZ2lkQm9keUV2ZW50czogTmd0ckV2ZW50TWFwID0gbmV3IE1hcCgpO1xuXHRjb2xsaWRlckV2ZW50czogTmd0ckV2ZW50TWFwID0gbmV3IE1hcCgpO1xuXHRwcml2YXRlIGJlZm9yZVN0ZXBDYWxsYmFja3M6IE5ndHJXb3JsZFN0ZXBDYWxsYmFja1NldCA9IG5ldyBTZXQoKTtcblx0cHJpdmF0ZSBhZnRlclN0ZXBDYWxsYmFja3M6IE5ndHJXb3JsZFN0ZXBDYWxsYmFja1NldCA9IG5ldyBTZXQoKTtcblxuXHRwcml2YXRlIGV2ZW50UXVldWUgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgcmFwaWVyID0gdGhpcy5yYXBpZXIoKTtcblx0XHRpZiAoIXJhcGllcikgcmV0dXJuIG51bGw7XG5cdFx0cmV0dXJuIG5ldyBFdmVudFF1ZXVlKGZhbHNlKTtcblx0fSk7XG5cblx0cHJpdmF0ZSBzdGVwcGluZ1N0YXRlOiB7XG5cdFx0YWNjdW11bGF0b3I6IG51bWJlcjtcblx0XHRwcmV2aW91c1N0YXRlOiBSZWNvcmQ8bnVtYmVyLCB7IHBvc2l0aW9uOiBWZWN0b3I7IHJvdGF0aW9uOiBSb3RhdGlvbiB9Pjtcblx0fSA9IHsgYWNjdW11bGF0b3I6IDAsIHByZXZpb3VzU3RhdGU6IHt9IH07XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0aW1wb3J0KCdAZGltZm9yZ2UvcmFwaWVyM2QtY29tcGF0Jylcblx0XHRcdC50aGVuKChyYXBpZXIpID0+IHJhcGllci5pbml0KCkudGhlbigoKSA9PiByYXBpZXIpKVxuXHRcdFx0LnRoZW4odGhpcy5yYXBpZXJDb25zdHJ1Y3Quc2V0LmJpbmQodGhpcy5yYXBpZXJDb25zdHJ1Y3QpKVxuXHRcdFx0LmNhdGNoKChlcnIpID0+IHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihgW05HVF0gRmFpbGVkIHRvIGxvYWQgcmFwaWVyM2QtY29tcGF0YCwgZXJyKTtcblx0XHRcdFx0dGhpcy5yYXBpZXJFcnJvci5zZXQoZXJyPy5tZXNzYWdlID8/IGVyci50b1N0cmluZygpKTtcblx0XHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdHRoaXMudXBkYXRlV29ybGRFZmZlY3QoKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuXHRcdFx0Y29uc3Qgd29ybGQgPSB0aGlzLndvcmxkU2luZ2xldG9uKCk7XG5cdFx0XHRpZiAod29ybGQpIHtcblx0XHRcdFx0d29ybGQucHJveHkuZnJlZSgpO1xuXHRcdFx0XHR3b3JsZC5yZXNldCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0c3RlcChkZWx0YTogbnVtYmVyKSB7XG5cdFx0aWYgKCF0aGlzLnBhdXNlZCgpKSB7XG5cdFx0XHR0aGlzLmludGVybmFsU3RlcChkZWx0YSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVXb3JsZEVmZmVjdCgpIHtcblx0XHRjb25zdCB3b3JsZCA9IHRoaXMud29ybGRTaW5nbGV0b24oKTtcblx0XHRpZiAoIXdvcmxkKSByZXR1cm47XG5cblx0XHR3b3JsZC5wcm94eS5ncmF2aXR5ID0gdGhpcy5ncmF2aXR5KCk7XG5cdFx0d29ybGQucHJveHkuaW50ZWdyYXRpb25QYXJhbWV0ZXJzLm51bVNvbHZlckl0ZXJhdGlvbnMgPSB0aGlzLm51bVNvbHZlckl0ZXJhdGlvbnMoKTtcblx0XHR3b3JsZC5wcm94eS5pbnRlZ3JhdGlvblBhcmFtZXRlcnMubnVtQWRkaXRpb25hbEZyaWN0aW9uSXRlcmF0aW9ucyA9IHRoaXMubnVtQWRkaXRpb25hbEZyaWN0aW9uSXRlcmF0aW9ucygpO1xuXHRcdHdvcmxkLnByb3h5LmludGVncmF0aW9uUGFyYW1ldGVycy5udW1JbnRlcm5hbFBnc0l0ZXJhdGlvbnMgPSB0aGlzLm51bUludGVybmFsUGdzSXRlcmF0aW9ucygpO1xuXHRcdHdvcmxkLnByb3h5LmludGVncmF0aW9uUGFyYW1ldGVycy5ub3JtYWxpemVkQWxsb3dlZExpbmVhckVycm9yID0gdGhpcy5hbGxvd2VkTGluZWFyRXJyb3IoKTtcblx0XHR3b3JsZC5wcm94eS5pbnRlZ3JhdGlvblBhcmFtZXRlcnMubWluSXNsYW5kU2l6ZSA9IHRoaXMubWluSXNsYW5kU2l6ZSgpO1xuXHRcdHdvcmxkLnByb3h5LmludGVncmF0aW9uUGFyYW1ldGVycy5tYXhDY2RTdWJzdGVwcyA9IHRoaXMubWF4Q2NkU3Vic3RlcHMoKTtcblx0XHR3b3JsZC5wcm94eS5pbnRlZ3JhdGlvblBhcmFtZXRlcnMubm9ybWFsaXplZFByZWRpY3Rpb25EaXN0YW5jZSA9IHRoaXMucHJlZGljdGlvbkRpc3RhbmNlKCk7XG5cdFx0LyoqXG5cdFx0ICogTk9URTogd2UgZG9uJ3Qga25vdyBpZiB0aGlzIGlzIHRoZSBjb3JyZWN0IHdheSB0byBzZXQgZm9yIGNvbnRhY3RfbmF0dXJhbF9mcmVxdWVuY3kgb3Igbm90LlxuXHRcdCAqIGJ1dCBhdCBsZWFzdCwgaXQgZ2V0cyB0aGUgYGNvbnRhY3RfZXJwYCB2YWx1ZSB0byBiZSB2ZXJ5IGNsb3NlIHdpdGggc2V0dGluZyBgZXJwYFxuXHRcdCAqL1xuXHRcdHdvcmxkLnByb3h5LmludGVncmF0aW9uUGFyYW1ldGVycy5jb250YWN0X25hdHVyYWxfZnJlcXVlbmN5ID0gdGhpcy5lcnAoKSAqIDFfMDAwO1xuXHRcdHdvcmxkLnByb3h5Lmxlbmd0aFVuaXQgPSB0aGlzLmxlbmd0aFVuaXQoKTtcblx0fVxuXG5cdHByaXZhdGUgaW50ZXJuYWxTdGVwKGRlbHRhOiBudW1iZXIpIHtcblx0XHRjb25zdCB3b3JsZFNpbmdsZXRvbiA9IHRoaXMud29ybGRTaW5nbGV0b24oKTtcblx0XHRpZiAoIXdvcmxkU2luZ2xldG9uKSByZXR1cm47XG5cblx0XHRjb25zdCBldmVudFF1ZXVlID0gdGhpcy5ldmVudFF1ZXVlKCk7XG5cdFx0aWYgKCFldmVudFF1ZXVlKSByZXR1cm47XG5cblx0XHRjb25zdCB3b3JsZCA9IHdvcmxkU2luZ2xldG9uLnByb3h5O1xuXHRcdGNvbnN0IFt0aW1lU3RlcCwgaW50ZXJwb2xhdGUsIHBhdXNlZF0gPSBbdGhpcy50aW1lU3RlcCgpLCB0aGlzLmludGVycG9sYXRlKCksIHRoaXMucGF1c2VkKCldO1xuXG5cdFx0LyogQ2hlY2sgaWYgdGhlIHRpbWVzdGVwIGlzIHN1cHBvc2VkIHRvIGJlIHZhcmlhYmxlLiBXZSdsbCBkbyB0aGlzIGhlcmVcbiAgICAgIG9uY2Ugc28gd2UgZG9uJ3QgaGF2ZSB0byBzdHJpbmctY2hlY2sgZXZlcnkgZnJhbWUuICovXG5cdFx0Y29uc3QgdGltZVN0ZXBWYXJpYWJsZSA9IHRpbWVTdGVwID09PSAndmFyeSc7XG5cblx0XHQvKipcblx0XHQgKiBGaXhlZCB0aW1lU3RlcCBzaW11bGF0aW9uIHByb2dyZXNzaW9uXG5cdFx0ICogQHNlZSBodHRwczovL2dhZmZlcm9uZ2FtZXMuY29tL3Bvc3QvZml4X3lvdXJfdGltZXN0ZXAvXG5cdFx0ICovXG5cdFx0Y29uc3QgY2xhbXBlZERlbHRhID0gTWF0aFV0aWxzLmNsYW1wKGRlbHRhLCAwLCAwLjUpO1xuXG5cdFx0Y29uc3Qgc3RlcFdvcmxkID0gKGlubmVyRGVsdGE6IG51bWJlcikgPT4ge1xuXHRcdFx0Ly8gVHJpZ2dlciBiZWZvcmVTdGVwIGNhbGxiYWNrc1xuXHRcdFx0dGhpcy5iZWZvcmVTdGVwQ2FsbGJhY2tzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG5cdFx0XHRcdGNhbGxiYWNrKHdvcmxkKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR3b3JsZC50aW1lc3RlcCA9IGlubmVyRGVsdGE7XG5cdFx0XHR3b3JsZC5zdGVwKGV2ZW50UXVldWUpO1xuXG5cdFx0XHQvLyBUcmlnZ2VyIGFmdGVyU3RlcCBjYWxsYmFja3Ncblx0XHRcdHRoaXMuYWZ0ZXJTdGVwQ2FsbGJhY2tzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG5cdFx0XHRcdGNhbGxiYWNrKHdvcmxkKTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRpZiAodGltZVN0ZXBWYXJpYWJsZSkge1xuXHRcdFx0c3RlcFdvcmxkKGNsYW1wZWREZWx0YSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGRvbid0IHN0ZXAgdGltZSBmb3J3YXJkcyBpZiBwYXVzZWRcblx0XHRcdC8vIEluY3JlYXNlIGFjY3VtdWxhdG9yXG5cdFx0XHR0aGlzLnN0ZXBwaW5nU3RhdGUuYWNjdW11bGF0b3IgKz0gY2xhbXBlZERlbHRhO1xuXG5cdFx0XHR3aGlsZSAodGhpcy5zdGVwcGluZ1N0YXRlLmFjY3VtdWxhdG9yID49IHRpbWVTdGVwKSB7XG5cdFx0XHRcdC8vIFNldCB1cCBwcmV2aW91cyBzdGF0ZVxuXHRcdFx0XHQvLyBuZWVkZWQgZm9yIGFjY3VyYXRlIGludGVycG9sYXRpb25zIGlmIHRoZSB3b3JsZCBzdGVwcyBtb3JlIHRoYW4gb25jZVxuXHRcdFx0XHRpZiAoaW50ZXJwb2xhdGUpIHtcblx0XHRcdFx0XHR0aGlzLnN0ZXBwaW5nU3RhdGUucHJldmlvdXNTdGF0ZSA9IHt9O1xuXHRcdFx0XHRcdHdvcmxkLmZvckVhY2hSaWdpZEJvZHkoKGJvZHkpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuc3RlcHBpbmdTdGF0ZS5wcmV2aW91c1N0YXRlW2JvZHkuaGFuZGxlXSA9IHtcblx0XHRcdFx0XHRcdFx0cG9zaXRpb246IGJvZHkudHJhbnNsYXRpb24oKSxcblx0XHRcdFx0XHRcdFx0cm90YXRpb246IGJvZHkucm90YXRpb24oKSxcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzdGVwV29ybGQodGltZVN0ZXApO1xuXHRcdFx0XHR0aGlzLnN0ZXBwaW5nU3RhdGUuYWNjdW11bGF0b3IgLT0gdGltZVN0ZXA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW50ZXJwb2xhdGlvbkFscGhhID1cblx0XHRcdHRpbWVTdGVwVmFyaWFibGUgfHwgIWludGVycG9sYXRlIHx8IHBhdXNlZCA/IDEgOiB0aGlzLnN0ZXBwaW5nU3RhdGUuYWNjdW11bGF0b3IgLyB0aW1lU3RlcDtcblxuXHRcdC8vIFVwZGF0ZSBtZXNoZXNcblx0XHR0aGlzLnJpZ2lkQm9keVN0YXRlcy5mb3JFYWNoKChzdGF0ZSwgaGFuZGxlKSA9PiB7XG5cdFx0XHRjb25zdCByaWdpZEJvZHkgPSB3b3JsZC5nZXRSaWdpZEJvZHkoaGFuZGxlKTtcblxuXHRcdFx0Y29uc3QgZXZlbnRzID0gdGhpcy5yaWdpZEJvZHlFdmVudHMuZ2V0KGhhbmRsZSk7XG5cdFx0XHRpZiAoZXZlbnRzPy5vblNsZWVwIHx8IGV2ZW50cz8ub25XYWtlKSB7XG5cdFx0XHRcdGlmIChyaWdpZEJvZHkuaXNTbGVlcGluZygpICYmICFzdGF0ZS5pc1NsZWVwaW5nKSBldmVudHM/Lm9uU2xlZXA/LigpO1xuXHRcdFx0XHRpZiAoIXJpZ2lkQm9keS5pc1NsZWVwaW5nKCkgJiYgc3RhdGUuaXNTbGVlcGluZykgZXZlbnRzPy5vbldha2U/LigpO1xuXHRcdFx0XHRzdGF0ZS5pc1NsZWVwaW5nID0gcmlnaWRCb2R5LmlzU2xlZXBpbmcoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFyaWdpZEJvZHkgfHwgKHJpZ2lkQm9keS5pc1NsZWVwaW5nKCkgJiYgISgnaXNJbnN0YW5jZWRNZXNoJyBpbiBzdGF0ZS5vYmplY3QpKSB8fCAhc3RhdGUuc2V0TWF0cml4KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmV3IHN0YXRlc1xuXHRcdFx0bGV0IHQgPSByaWdpZEJvZHkudHJhbnNsYXRpb24oKSBhcyBWZWN0b3IzO1xuXHRcdFx0bGV0IHIgPSByaWdpZEJvZHkucm90YXRpb24oKSBhcyBRdWF0ZXJuaW9uO1xuXG5cdFx0XHRsZXQgcHJldmlvdXNTdGF0ZSA9IHRoaXMuc3RlcHBpbmdTdGF0ZS5wcmV2aW91c1N0YXRlW2hhbmRsZV07XG5cblx0XHRcdGlmIChwcmV2aW91c1N0YXRlKSB7XG5cdFx0XHRcdC8vIEdldCBwcmV2aW91cyBzaW11bGF0ZWQgd29ybGQgcG9zaXRpb25cblx0XHRcdFx0X21hdHJpeDRcblx0XHRcdFx0XHQuY29tcG9zZShwcmV2aW91c1N0YXRlLnBvc2l0aW9uIGFzIFZlY3RvcjMsIHJhcGllclF1YXRlcm5pb25Ub1F1YXRlcm5pb24ocHJldmlvdXNTdGF0ZS5yb3RhdGlvbiksIHN0YXRlLnNjYWxlKVxuXHRcdFx0XHRcdC5wcmVtdWx0aXBseShzdGF0ZS5pbnZlcnRlZFdvcmxkTWF0cml4KVxuXHRcdFx0XHRcdC5kZWNvbXBvc2UoX3Bvc2l0aW9uLCBfcm90YXRpb24sIF9zY2FsZSk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgcHJldmlvdXMgdGljayBwb3NpdGlvblxuXHRcdFx0XHRpZiAoc3RhdGUubWVzaFR5cGUgPT0gJ21lc2gnKSB7XG5cdFx0XHRcdFx0c3RhdGUub2JqZWN0LnBvc2l0aW9uLmNvcHkoX3Bvc2l0aW9uKTtcblx0XHRcdFx0XHRzdGF0ZS5vYmplY3QucXVhdGVybmlvbi5jb3B5KF9yb3RhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gR2V0IG5ldyBwb3NpdGlvblxuXHRcdFx0X21hdHJpeDRcblx0XHRcdFx0LmNvbXBvc2UodCwgcmFwaWVyUXVhdGVybmlvblRvUXVhdGVybmlvbihyKSwgc3RhdGUuc2NhbGUpXG5cdFx0XHRcdC5wcmVtdWx0aXBseShzdGF0ZS5pbnZlcnRlZFdvcmxkTWF0cml4KVxuXHRcdFx0XHQuZGVjb21wb3NlKF9wb3NpdGlvbiwgX3JvdGF0aW9uLCBfc2NhbGUpO1xuXG5cdFx0XHRpZiAoc3RhdGUubWVzaFR5cGUgPT0gJ2luc3RhbmNlZE1lc2gnKSB7XG5cdFx0XHRcdHN0YXRlLnNldE1hdHJpeChfbWF0cml4NCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJbnRlcnBvbGF0ZSB0byBuZXcgcG9zaXRpb25cblx0XHRcdFx0c3RhdGUub2JqZWN0LnBvc2l0aW9uLmxlcnAoX3Bvc2l0aW9uLCBpbnRlcnBvbGF0aW9uQWxwaGEpO1xuXHRcdFx0XHRzdGF0ZS5vYmplY3QucXVhdGVybmlvbi5zbGVycChfcm90YXRpb24sIGludGVycG9sYXRpb25BbHBoYSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRldmVudFF1ZXVlLmRyYWluQ29sbGlzaW9uRXZlbnRzKChoYW5kbGUxLCBoYW5kbGUyLCBzdGFydGVkKSA9PiB7XG5cdFx0XHRjb25zdCBzb3VyY2UxID0gdGhpcy5nZXRTb3VyY2VGcm9tQ29sbGlkZXJIYW5kbGUoaGFuZGxlMSk7XG5cdFx0XHRjb25zdCBzb3VyY2UyID0gdGhpcy5nZXRTb3VyY2VGcm9tQ29sbGlkZXJIYW5kbGUoaGFuZGxlMik7XG5cblx0XHRcdC8vIENvbGxpc2lvbiBFdmVudHNcblx0XHRcdGlmICghc291cmNlMT8uY29sbGlkZXIub2JqZWN0IHx8ICFzb3VyY2UyPy5jb2xsaWRlci5vYmplY3QpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjb2xsaXNpb25QYXlsb2FkMSA9IHRoaXMuZ2V0Q29sbGlzaW9uUGF5bG9hZEZyb21Tb3VyY2Uoc291cmNlMSwgc291cmNlMik7XG5cdFx0XHRjb25zdCBjb2xsaXNpb25QYXlsb2FkMiA9IHRoaXMuZ2V0Q29sbGlzaW9uUGF5bG9hZEZyb21Tb3VyY2Uoc291cmNlMiwgc291cmNlMSk7XG5cblx0XHRcdGlmIChzdGFydGVkKSB7XG5cdFx0XHRcdHdvcmxkLmNvbnRhY3RQYWlyKHNvdXJjZTEuY29sbGlkZXIub2JqZWN0LCBzb3VyY2UyLmNvbGxpZGVyLm9iamVjdCwgKG1hbmlmb2xkLCBmbGlwcGVkKSA9PiB7XG5cdFx0XHRcdFx0LyogUmlnaWRCb2R5IGV2ZW50cyAqL1xuXHRcdFx0XHRcdHNvdXJjZTEucmlnaWRCb2R5LmV2ZW50cz8ub25Db2xsaXNpb25FbnRlcj8uKHsgLi4uY29sbGlzaW9uUGF5bG9hZDEsIG1hbmlmb2xkLCBmbGlwcGVkIH0pO1xuXHRcdFx0XHRcdHNvdXJjZTIucmlnaWRCb2R5LmV2ZW50cz8ub25Db2xsaXNpb25FbnRlcj8uKHsgLi4uY29sbGlzaW9uUGF5bG9hZDIsIG1hbmlmb2xkLCBmbGlwcGVkIH0pO1xuXG5cdFx0XHRcdFx0LyogQ29sbGlkZXIgZXZlbnRzICovXG5cdFx0XHRcdFx0c291cmNlMS5jb2xsaWRlci5ldmVudHM/Lm9uQ29sbGlzaW9uRW50ZXI/Lih7IC4uLmNvbGxpc2lvblBheWxvYWQxLCBtYW5pZm9sZCwgZmxpcHBlZCB9KTtcblx0XHRcdFx0XHRzb3VyY2UyLmNvbGxpZGVyLmV2ZW50cz8ub25Db2xsaXNpb25FbnRlcj8uKHsgLi4uY29sbGlzaW9uUGF5bG9hZDIsIG1hbmlmb2xkLCBmbGlwcGVkIH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNvdXJjZTEucmlnaWRCb2R5LmV2ZW50cz8ub25Db2xsaXNpb25FeGl0Py4oY29sbGlzaW9uUGF5bG9hZDEpO1xuXHRcdFx0XHRzb3VyY2UyLnJpZ2lkQm9keS5ldmVudHM/Lm9uQ29sbGlzaW9uRXhpdD8uKGNvbGxpc2lvblBheWxvYWQyKTtcblx0XHRcdFx0c291cmNlMS5jb2xsaWRlci5ldmVudHM/Lm9uQ29sbGlzaW9uRXhpdD8uKGNvbGxpc2lvblBheWxvYWQxKTtcblx0XHRcdFx0c291cmNlMi5jb2xsaWRlci5ldmVudHM/Lm9uQ29sbGlzaW9uRXhpdD8uKGNvbGxpc2lvblBheWxvYWQyKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2Vuc29yIEludGVyc2VjdGlvbnNcblx0XHRcdGlmIChzdGFydGVkKSB7XG5cdFx0XHRcdGlmICh3b3JsZC5pbnRlcnNlY3Rpb25QYWlyKHNvdXJjZTEuY29sbGlkZXIub2JqZWN0LCBzb3VyY2UyLmNvbGxpZGVyLm9iamVjdCkpIHtcblx0XHRcdFx0XHRzb3VyY2UxLnJpZ2lkQm9keS5ldmVudHM/Lm9uSW50ZXJzZWN0aW9uRW50ZXI/Lihjb2xsaXNpb25QYXlsb2FkMSk7XG5cdFx0XHRcdFx0c291cmNlMi5yaWdpZEJvZHkuZXZlbnRzPy5vbkludGVyc2VjdGlvbkVudGVyPy4oY29sbGlzaW9uUGF5bG9hZDIpO1xuXHRcdFx0XHRcdHNvdXJjZTEuY29sbGlkZXIuZXZlbnRzPy5vbkludGVyc2VjdGlvbkVudGVyPy4oY29sbGlzaW9uUGF5bG9hZDEpO1xuXHRcdFx0XHRcdHNvdXJjZTIuY29sbGlkZXIuZXZlbnRzPy5vbkludGVyc2VjdGlvbkVudGVyPy4oY29sbGlzaW9uUGF5bG9hZDIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzb3VyY2UxLnJpZ2lkQm9keS5ldmVudHM/Lm9uSW50ZXJzZWN0aW9uRXhpdD8uKGNvbGxpc2lvblBheWxvYWQxKTtcblx0XHRcdFx0c291cmNlMi5yaWdpZEJvZHkuZXZlbnRzPy5vbkludGVyc2VjdGlvbkV4aXQ/Lihjb2xsaXNpb25QYXlsb2FkMik7XG5cdFx0XHRcdHNvdXJjZTEuY29sbGlkZXIuZXZlbnRzPy5vbkludGVyc2VjdGlvbkV4aXQ/Lihjb2xsaXNpb25QYXlsb2FkMSk7XG5cdFx0XHRcdHNvdXJjZTIuY29sbGlkZXIuZXZlbnRzPy5vbkludGVyc2VjdGlvbkV4aXQ/Lihjb2xsaXNpb25QYXlsb2FkMik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRldmVudFF1ZXVlLmRyYWluQ29udGFjdEZvcmNlRXZlbnRzKChldmVudCkgPT4ge1xuXHRcdFx0Y29uc3Qgc291cmNlMSA9IHRoaXMuZ2V0U291cmNlRnJvbUNvbGxpZGVySGFuZGxlKGV2ZW50LmNvbGxpZGVyMSgpKTtcblx0XHRcdGNvbnN0IHNvdXJjZTIgPSB0aGlzLmdldFNvdXJjZUZyb21Db2xsaWRlckhhbmRsZShldmVudC5jb2xsaWRlcjIoKSk7XG5cblx0XHRcdC8vIENvbGxpc2lvbiBFdmVudHNcblx0XHRcdGlmICghc291cmNlMT8uY29sbGlkZXIub2JqZWN0IHx8ICFzb3VyY2UyPy5jb2xsaWRlci5vYmplY3QpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjb2xsaXNpb25QYXlsb2FkMSA9IHRoaXMuZ2V0Q29sbGlzaW9uUGF5bG9hZEZyb21Tb3VyY2Uoc291cmNlMSwgc291cmNlMik7XG5cdFx0XHRjb25zdCBjb2xsaXNpb25QYXlsb2FkMiA9IHRoaXMuZ2V0Q29sbGlzaW9uUGF5bG9hZEZyb21Tb3VyY2Uoc291cmNlMiwgc291cmNlMSk7XG5cblx0XHRcdHNvdXJjZTEucmlnaWRCb2R5LmV2ZW50cz8ub25Db250YWN0Rm9yY2U/Lih7XG5cdFx0XHRcdC4uLmNvbGxpc2lvblBheWxvYWQxLFxuXHRcdFx0XHR0b3RhbEZvcmNlOiBldmVudC50b3RhbEZvcmNlKCksXG5cdFx0XHRcdHRvdGFsRm9yY2VNYWduaXR1ZGU6IGV2ZW50LnRvdGFsRm9yY2VNYWduaXR1ZGUoKSxcblx0XHRcdFx0bWF4Rm9yY2VEaXJlY3Rpb246IGV2ZW50Lm1heEZvcmNlRGlyZWN0aW9uKCksXG5cdFx0XHRcdG1heEZvcmNlTWFnbml0dWRlOiBldmVudC5tYXhGb3JjZU1hZ25pdHVkZSgpLFxuXHRcdFx0fSk7XG5cblx0XHRcdHNvdXJjZTIucmlnaWRCb2R5LmV2ZW50cz8ub25Db250YWN0Rm9yY2U/Lih7XG5cdFx0XHRcdC4uLmNvbGxpc2lvblBheWxvYWQyLFxuXHRcdFx0XHR0b3RhbEZvcmNlOiBldmVudC50b3RhbEZvcmNlKCksXG5cdFx0XHRcdHRvdGFsRm9yY2VNYWduaXR1ZGU6IGV2ZW50LnRvdGFsRm9yY2VNYWduaXR1ZGUoKSxcblx0XHRcdFx0bWF4Rm9yY2VEaXJlY3Rpb246IGV2ZW50Lm1heEZvcmNlRGlyZWN0aW9uKCksXG5cdFx0XHRcdG1heEZvcmNlTWFnbml0dWRlOiBldmVudC5tYXhGb3JjZU1hZ25pdHVkZSgpLFxuXHRcdFx0fSk7XG5cblx0XHRcdHNvdXJjZTEuY29sbGlkZXIuZXZlbnRzPy5vbkNvbnRhY3RGb3JjZT8uKHtcblx0XHRcdFx0Li4uY29sbGlzaW9uUGF5bG9hZDEsXG5cdFx0XHRcdHRvdGFsRm9yY2U6IGV2ZW50LnRvdGFsRm9yY2UoKSxcblx0XHRcdFx0dG90YWxGb3JjZU1hZ25pdHVkZTogZXZlbnQudG90YWxGb3JjZU1hZ25pdHVkZSgpLFxuXHRcdFx0XHRtYXhGb3JjZURpcmVjdGlvbjogZXZlbnQubWF4Rm9yY2VEaXJlY3Rpb24oKSxcblx0XHRcdFx0bWF4Rm9yY2VNYWduaXR1ZGU6IGV2ZW50Lm1heEZvcmNlTWFnbml0dWRlKCksXG5cdFx0XHR9KTtcblxuXHRcdFx0c291cmNlMi5jb2xsaWRlci5ldmVudHM/Lm9uQ29udGFjdEZvcmNlPy4oe1xuXHRcdFx0XHQuLi5jb2xsaXNpb25QYXlsb2FkMixcblx0XHRcdFx0dG90YWxGb3JjZTogZXZlbnQudG90YWxGb3JjZSgpLFxuXHRcdFx0XHR0b3RhbEZvcmNlTWFnbml0dWRlOiBldmVudC50b3RhbEZvcmNlTWFnbml0dWRlKCksXG5cdFx0XHRcdG1heEZvcmNlRGlyZWN0aW9uOiBldmVudC5tYXhGb3JjZURpcmVjdGlvbigpLFxuXHRcdFx0XHRtYXhGb3JjZU1hZ25pdHVkZTogZXZlbnQubWF4Rm9yY2VNYWduaXR1ZGUoKSxcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0d29ybGQuZm9yRWFjaEFjdGl2ZVJpZ2lkQm9keSgoKSA9PiB7XG5cdFx0XHR0aGlzLnN0b3JlLnNuYXBzaG90LmludmFsaWRhdGUoKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0U291cmNlRnJvbUNvbGxpZGVySGFuZGxlKGhhbmRsZTogQ29sbGlkZXJIYW5kbGUpIHtcblx0XHRjb25zdCB3b3JsZCA9IHRoaXMud29ybGRTaW5nbGV0b24oKTtcblx0XHRpZiAoIXdvcmxkKSByZXR1cm47XG5cblx0XHRjb25zdCBjb2xsaWRlciA9IHdvcmxkLnByb3h5LmdldENvbGxpZGVyKGhhbmRsZSk7XG5cdFx0Y29uc3QgY29sRXZlbnRzID0gdGhpcy5jb2xsaWRlckV2ZW50cy5nZXQoaGFuZGxlKTtcblx0XHRjb25zdCBjb2xsaWRlclN0YXRlID0gdGhpcy5jb2xsaWRlclN0YXRlcy5nZXQoaGFuZGxlKTtcblxuXHRcdGNvbnN0IHJpZ2lkQm9keUhhbmRsZSA9IGNvbGxpZGVyLnBhcmVudCgpPy5oYW5kbGU7XG5cdFx0Y29uc3QgcmlnaWRCb2R5ID0gcmlnaWRCb2R5SGFuZGxlICE9PSB1bmRlZmluZWQgPyB3b3JsZC5wcm94eS5nZXRSaWdpZEJvZHkocmlnaWRCb2R5SGFuZGxlKSA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCByaWdpZEJvZHlFdmVudHMgPVxuXHRcdFx0cmlnaWRCb2R5ICYmIHJpZ2lkQm9keUhhbmRsZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5yaWdpZEJvZHlFdmVudHMuZ2V0KHJpZ2lkQm9keUhhbmRsZSkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgcmlnaWRCb2R5U3RhdGUgPSByaWdpZEJvZHlIYW5kbGUgIT09IHVuZGVmaW5lZCA/IHRoaXMucmlnaWRCb2R5U3RhdGVzLmdldChyaWdpZEJvZHlIYW5kbGUpIDogdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvbGxpZGVyOiB7IG9iamVjdDogY29sbGlkZXIsIGV2ZW50czogY29sRXZlbnRzLCBzdGF0ZTogY29sbGlkZXJTdGF0ZSB9LFxuXHRcdFx0cmlnaWRCb2R5OiB7IG9iamVjdDogcmlnaWRCb2R5LCBldmVudHM6IHJpZ2lkQm9keUV2ZW50cywgc3RhdGU6IHJpZ2lkQm9keVN0YXRlIH0sXG5cdFx0fSBhcyBOZ3RyQ29sbGlzaW9uU291cmNlO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDb2xsaXNpb25QYXlsb2FkRnJvbVNvdXJjZSh0YXJnZXQ6IE5ndHJDb2xsaXNpb25Tb3VyY2UsIG90aGVyOiBOZ3RyQ29sbGlzaW9uU291cmNlKTogTmd0ckNvbGxpc2lvblBheWxvYWQge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0cmlnaWRCb2R5OiB0YXJnZXQucmlnaWRCb2R5Lm9iamVjdCxcblx0XHRcdFx0Y29sbGlkZXI6IHRhcmdldC5jb2xsaWRlci5vYmplY3QsXG5cdFx0XHRcdGNvbGxpZGVyT2JqZWN0OiB0YXJnZXQuY29sbGlkZXIuc3RhdGU/Lm9iamVjdCxcblx0XHRcdFx0cmlnaWRCb2R5T2JqZWN0OiB0YXJnZXQucmlnaWRCb2R5LnN0YXRlPy5vYmplY3QsXG5cdFx0XHR9LFxuXHRcdFx0b3RoZXI6IHtcblx0XHRcdFx0cmlnaWRCb2R5OiBvdGhlci5yaWdpZEJvZHkub2JqZWN0LFxuXHRcdFx0XHRjb2xsaWRlcjogb3RoZXIuY29sbGlkZXIub2JqZWN0LFxuXHRcdFx0XHRjb2xsaWRlck9iamVjdDogb3RoZXIuY29sbGlkZXIuc3RhdGU/Lm9iamVjdCxcblx0XHRcdFx0cmlnaWRCb2R5T2JqZWN0OiBvdGhlci5yaWdpZEJvZHkuc3RhdGU/Lm9iamVjdCxcblx0XHRcdH0sXG5cdFx0fTtcblx0fVxufVxuIl19
|
|
386
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGh5c2ljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcmFwaWVyL3NyYy9saWIvcGh5c2ljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBZSxFQUFrQixVQUFVLEVBQTJCLE1BQU0sMkJBQTJCLENBQUM7QUFDeEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUF1QixNQUFNLE9BQU8sQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFVbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUU3RSxNQUFNLGNBQWMsR0FBdUI7SUFDMUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0QixrQkFBa0IsRUFBRSxLQUFLO0lBQ3pCLG1CQUFtQixFQUFFLENBQUM7SUFDdEIsK0JBQStCLEVBQUUsQ0FBQztJQUNsQyx3QkFBd0IsRUFBRSxD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UUFBUSxDQUFDLE1BQU07Z0JBQ2hDLGNBQWMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNO2dCQUM3QyxlQUFlLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTTthQUMvQztZQUNELEtBQUssRUFBRTtnQkFDTixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO2dCQUNqQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO2dCQUMvQixjQUFjLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTTtnQkFDNUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU07YUFDOUM7U0FDRCxDQUFDO0lBQ0gsQ0FBQzt1R0ExVlcsV0FBVzsyRkFBWCxXQUFXLHVQQUdTLFdBQVcsa0dBQ1osbUJBQW1CLGdFQXpCeEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJULDREQUVTLFNBQVMsMEVBQUUsZ0JBQWdCLHNIQUFFLGdCQUFnQjs7MkZBRTNDLFdBQVc7a0JBeEJ2QixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxjQUFjO29CQUN4QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7OztFQWlCVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDO2lCQUN4RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdGNvbnRlbnRDaGlsZCxcblx0RGVzdHJveVJlZixcblx0RGlyZWN0aXZlLFxuXHRlZmZlY3QsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdHNpZ25hbCxcblx0VGVtcGxhdGVSZWYsXG5cdHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgUkFQSUVSLCB7IENvbGxpZGVySGFuZGxlLCBFdmVudFF1ZXVlLCBSb3RhdGlvbiwgVmVjdG9yLCBXb3JsZCB9IGZyb20gJ0BkaW1mb3JnZS9yYXBpZXIzZC1jb21wYXQnO1xuaW1wb3J0IHsgaW5qZWN0U3RvcmUsIHBpY2ssIHZlY3RvcjMgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IE1hdGhVdGlscywgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndHJEZWJ1ZyB9IGZyb20gJy4vZGVidWcnO1xuaW1wb3J0IHsgTmd0ckZyYW1lU3RlcHBlciB9IGZyb20gJy4vZnJhbWUtc3RlcHBlcic7XG5pbXBvcnQgeyBfbWF0cml4NCwgX3Bvc2l0aW9uLCBfcm90YXRpb24sIF9zY2FsZSB9IGZyb20gJy4vc2hhcmVkJztcbmltcG9ydCB7XG5cdE5ndHJDb2xsaWRlclN0YXRlTWFwLFxuXHROZ3RyQ29sbGlzaW9uUGF5bG9hZCxcblx0Tmd0ckNvbGxpc2lvblNvdXJjZSxcblx0Tmd0ckV2ZW50TWFwLFxuXHROZ3RyUGh5c2ljc09wdGlvbnMsXG5cdE5ndHJSaWdpZEJvZHlTdGF0ZU1hcCxcblx0Tmd0cldvcmxkU3RlcENhbGxiYWNrU2V0LFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZVNpbmdsZXRvblByb3h5LCByYXBpZXJRdWF0ZXJuaW9uVG9RdWF0ZXJuaW9uIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RyUGh5c2ljc09wdGlvbnMgPSB7XG5cdGdyYXZpdHk6IFswLCAtOS44MSwgMF0sXG5cdGFsbG93ZWRMaW5lYXJFcnJvcjogMC4wMDEsXG5cdG51bVNvbHZlckl0ZXJhdGlvbnM6IDQsXG5cdG51bUFkZGl0aW9uYWxGcmljdGlvbkl0ZXJhdGlvbnM6IDQsXG5cdG51bUludGVybmFsUGdzSXRlcmF0aW9uczogMSxcblx0cHJlZGljdGlvbkRpc3RhbmNlOiAwLjAwMixcblx0bWluSXNsYW5kU2l6ZTogMTI4LFxuXHRtYXhDY2RTdWJzdGVwczogMSxcblx0Y29udGFjdE5hdHVyYWxGcmVxdWVuY3k6IDMwLFxuXHRlcnA6IDAuOCxcblx0bGVuZ3RoVW5pdDogMSxcblx0Y29sbGlkZXJzOiAnY3Vib2lkJyxcblx0dXBkYXRlTG9vcDogJ2ZvbGxvdycsXG5cdGludGVycG9sYXRlOiB0cnVlLFxuXHRwYXVzZWQ6IGZhbHNlLFxuXHR0aW1lU3RlcDogMSAvIDYwLFxuXHRkZWJ1ZzogZmFsc2UsXG59O1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtyYXBpZXJGYWxsYmFja10nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0clBoeXNpY3NGYWxsYmFjayB7XG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKF86IE5ndHJQaHlzaWNzRmFsbGJhY2ssIGN0eDogdW5rbm93bik6IGN0eCBpcyB7IGVycm9yOiBzdHJpbmcgfSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0ci1waHlzaWNzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHRAaWYgKHJhcGllckNvbnN0cnVjdCgpKSB7XG5cdFx0XHRAaWYgKGRlYnVnKCkpIHtcblx0XHRcdFx0PG5ndHItZGVidWcgW3dvcmxkXT1cIndvcmxkU2luZ2xldG9uKCk/LnByb3h5XCIgLz5cblx0XHRcdH1cblxuXHRcdFx0PG5ndHItZnJhbWUtc3RlcHBlclxuXHRcdFx0XHRbcmVhZHldPVwicmVhZHkoKVwiXG5cdFx0XHRcdFtzdGVwRm5dPVwic3RlcC5iaW5kKHRoaXMpXCJcblx0XHRcdFx0W3R5cGVdPVwidXBkYXRlTG9vcCgpXCJcblx0XHRcdFx0W3VwZGF0ZVByaW9yaXR5XT1cInVwZGF0ZVByaW9yaXR5KClcIlxuXHRcdFx0Lz5cblxuXHRcdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50KClcIiAvPlxuXHRcdH0gQGVsc2UgaWYgKHJhcGllckVycm9yKCkgJiYgISFmYWxsYmFja0NvbnRlbnQoKSkge1xuXHRcdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KGZhbGxiYWNrQ29udGVudCgpKVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGVycm9yOiByYXBpZXJFcnJvcigpIH1cIiAvPlxuXHRcdH1cblx0YCxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtOZ3RyRGVidWcsIE5ndHJGcmFtZVN0ZXBwZXIsIE5nVGVtcGxhdGVPdXRsZXRdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RyUGh5c2ljcyB7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblxuXHRjb250ZW50ID0gY29udGVudENoaWxkLnJlcXVpcmVkKFRlbXBsYXRlUmVmKTtcblx0ZmFsbGJhY2tDb250ZW50ID0gY29udGVudENoaWxkKE5ndHJQaHlzaWNzRmFsbGJhY2spO1xuXG5cdHByb3RlY3RlZCB1cGRhdGVQcmlvcml0eSA9IHBpY2sodGhpcy5vcHRpb25zLCAndXBkYXRlUHJpb3JpdHknKTtcblx0cHJvdGVjdGVkIHVwZGF0ZUxvb3AgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3VwZGF0ZUxvb3AnKTtcblxuXHRwcml2YXRlIG51bVNvbHZlckl0ZXJhdGlvbnMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ251bVNvbHZlckl0ZXJhdGlvbnMnKTtcblx0cHJpdmF0ZSBudW1BZGRpdGlvbmFsRnJpY3Rpb25JdGVyYXRpb25zID0gcGljayh0aGlzLm9wdGlvbnMsICdudW1BZGRpdGlvbmFsRnJpY3Rpb25JdGVyYXRpb25zJyk7XG5cdHByaXZhdGUgbnVtSW50ZXJuYWxQZ3NJdGVyYXRpb25zID0gcGljayh0aGlzLm9wdGlvbnMsICdudW1JbnRlcm5hbFBnc0l0ZXJhdGlvbnMnKTtcblx0cHJpdmF0ZSBhbGxvd2VkTGluZWFyRXJyb3IgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FsbG93ZWRMaW5lYXJFcnJvcicpO1xuXHRwcml2YXRlIG1pbklzbGFuZFNpemUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ21pbklzbGFuZFNpemUnKTtcblx0cHJpdmF0ZSBtYXhDY2RTdWJzdGVwcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnbWF4Q2NkU3Vic3RlcHMnKTtcblx0cHJpdmF0ZSBwcmVkaWN0aW9uRGlzdGFuY2UgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3ByZWRpY3Rpb25EaXN0YW5jZScpO1xuXHRwcml2YXRlIGNvbnRhY3ROYXR1cmFsRnJlcXVlbmN5ID0gcGljayh0aGlzLm9wdGlvbnMsICdjb250YWN0TmF0dXJhbEZyZXF1ZW5jeScpO1xuXHRwcml2YXRlIGxlbmd0aFVuaXQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2xlbmd0aFVuaXQnKTtcblx0cHJpdmF0ZSB0aW1lU3RlcCA9IHBpY2sodGhpcy5vcHRpb25zLCAndGltZVN0ZXAnKTtcblx0cHJpdmF0ZSBpbnRlcnBvbGF0ZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnaW50ZXJwb2xhdGUnKTtcblxuXHRwYXVzZWQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3BhdXNlZCcpO1xuXHRkZWJ1ZyA9IHBpY2sodGhpcy5vcHRpb25zLCAnZGVidWcnKTtcblx0Y29sbGlkZXJzID0gcGljayh0aGlzLm9wdGlvbnMsICdjb2xsaWRlcnMnKTtcblxuXHRwcml2YXRlIGdyYXZpdHkgPSB2ZWN0b3IzKHRoaXMub3B0aW9ucywgJ2dyYXZpdHknKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG5cdHByb3RlY3RlZCByYXBpZXJDb25zdHJ1Y3QgPSBzaWduYWw8dHlwZW9mIFJBUElFUiB8IG51bGw+KG51bGwpO1xuXHRwcm90ZWN0ZWQgcmFwaWVyRXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cdHJhcGllciA9IHRoaXMucmFwaWVyQ29uc3RydWN0LmFzUmVhZG9ubHkoKTtcblxuXHRyZWFkeSA9IGNvbXB1dGVkKCgpID0+ICEhdGhpcy5yYXBpZXIoKSk7XG5cdHdvcmxkU2luZ2xldG9uID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHJhcGllciA9IHRoaXMucmFwaWVyKCk7XG5cdFx0aWYgKCFyYXBpZXIpIHJldHVybiBudWxsO1xuXHRcdHJldHVybiBjcmVhdGVTaW5nbGV0b25Qcm94eTxXb3JsZD4oKCkgPT4gbmV3IHJhcGllci5Xb3JsZCh1bnRyYWNrZWQodGhpcy5ncmF2aXR5KSkpO1xuXHR9KTtcblxuXHRyaWdpZEJvZHlTdGF0ZXM6IE5ndHJSaWdpZEJvZHlTdGF0ZU1hcCA9IG5ldyBNYXAoKTtcblx0Y29sbGlkZXJTdGF0ZXM6IE5ndHJDb2xsaWRlclN0YXRlTWFwID0gbmV3IE1hcCgpO1xuXHRyaWdpZEJvZHlFdmVudHM6IE5ndHJFdmVudE1hcCA9IG5ldyBNYXAoKTtcblx0Y29sbGlkZXJFdmVudHM6IE5ndHJFdmVudE1hcCA9IG5ldyBNYXAoKTtcblx0cHJpdmF0ZSBiZWZvcmVTdGVwQ2FsbGJhY2tzOiBOZ3RyV29ybGRTdGVwQ2FsbGJhY2tTZXQgPSBuZXcgU2V0KCk7XG5cdHByaXZhdGUgYWZ0ZXJTdGVwQ2FsbGJhY2tzOiBOZ3RyV29ybGRTdGVwQ2FsbGJhY2tTZXQgPSBuZXcgU2V0KCk7XG5cblx0cHJpdmF0ZSBldmVudFF1ZXVlID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHJhcGllciA9IHRoaXMucmFwaWVyKCk7XG5cdFx0aWYgKCFyYXBpZXIpIHJldHVybiBudWxsO1xuXHRcdHJldHVybiBuZXcgRXZlbnRRdWV1ZShmYWxzZSk7XG5cdH0pO1xuXG5cdHByaXZhdGUgc3RlcHBpbmdTdGF0ZToge1xuXHRcdGFjY3VtdWxhdG9yOiBudW1iZXI7XG5cdFx0cHJldmlvdXNTdGF0ZTogUmVjb3JkPG51bWJlciwgeyBwb3NpdGlvbjogVmVjdG9yOyByb3RhdGlvbjogUm90YXRpb24gfT47XG5cdH0gPSB7IGFjY3VtdWxhdG9yOiAwLCBwcmV2aW91c1N0YXRlOiB7fSB9O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGltcG9ydCgnQGRpbWZvcmdlL3JhcGllcjNkLWNvbXBhdCcpXG5cdFx0XHQudGhlbigocmFwaWVyKSA9PiByYXBpZXIuaW5pdCgpLnRoZW4oKCkgPT4gcmFwaWVyKSlcblx0XHRcdC50aGVuKHRoaXMucmFwaWVyQ29uc3RydWN0LnNldC5iaW5kKHRoaXMucmFwaWVyQ29uc3RydWN0KSlcblx0XHRcdC5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYFtOR1RdIEZhaWxlZCB0byBsb2FkIHJhcGllcjNkLWNvbXBhdGAsIGVycik7XG5cdFx0XHRcdHRoaXMucmFwaWVyRXJyb3Iuc2V0KGVycj8ubWVzc2FnZSA/PyBlcnIudG9TdHJpbmcoKSk7XG5cdFx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR0aGlzLnVwZGF0ZVdvcmxkRWZmZWN0KCk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcblx0XHRcdGNvbnN0IHdvcmxkID0gdGhpcy53b3JsZFNpbmdsZXRvbigpO1xuXHRcdFx0aWYgKHdvcmxkKSB7XG5cdFx0XHRcdHdvcmxkLnByb3h5LmZyZWUoKTtcblx0XHRcdFx0d29ybGQucmVzZXQoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHN0ZXAoZGVsdGE6IG51bWJlcikge1xuXHRcdGlmICghdGhpcy5wYXVzZWQoKSkge1xuXHRcdFx0dGhpcy5pbnRlcm5hbFN0ZXAoZGVsdGEpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlV29ybGRFZmZlY3QoKSB7XG5cdFx0Y29uc3Qgd29ybGQgPSB0aGlzLndvcmxkU2luZ2xldG9uKCk7XG5cdFx0aWYgKCF3b3JsZCkgcmV0dXJuO1xuXG5cdFx0d29ybGQucHJveHkuZ3Jhdml0eSA9IHRoaXMuZ3Jhdml0eSgpO1xuXHRcdHdvcmxkLnByb3h5LmludGVncmF0aW9uUGFyYW1ldGVycy5udW1Tb2x2ZXJJdGVyYXRpb25zID0gdGhpcy5udW1Tb2x2ZXJJdGVyYXRpb25zKCk7XG5cdFx0d29ybGQucHJveHkuaW50ZWdyYXRpb25QYXJhbWV0ZXJzLm51bUFkZGl0aW9uYWxGcmljdGlvbkl0ZXJhdGlvbnMgPSB0aGlzLm51bUFkZGl0aW9uYWxGcmljdGlvbkl0ZXJhdGlvbnMoKTtcblx0XHR3b3JsZC5wcm94eS5pbnRlZ3JhdGlvblBhcmFtZXRlcnMubnVtSW50ZXJuYWxQZ3NJdGVyYXRpb25zID0gdGhpcy5udW1JbnRlcm5hbFBnc0l0ZXJhdGlvbnMoKTtcblx0XHR3b3JsZC5wcm94eS5pbnRlZ3JhdGlvblBhcmFtZXRlcnMubm9ybWFsaXplZEFsbG93ZWRMaW5lYXJFcnJvciA9IHRoaXMuYWxsb3dlZExpbmVhckVycm9yKCk7XG5cdFx0d29ybGQucHJveHkuaW50ZWdyYXRpb25QYXJhbWV0ZXJzLm1pbklzbGFuZFNpemUgPSB0aGlzLm1pbklzbGFuZFNpemUoKTtcblx0XHR3b3JsZC5wcm94eS5pbnRlZ3JhdGlvblBhcmFtZXRlcnMubWF4Q2NkU3Vic3RlcHMgPSB0aGlzLm1heENjZFN1YnN0ZXBzKCk7XG5cdFx0d29ybGQucHJveHkuaW50ZWdyYXRpb25QYXJhbWV0ZXJzLm5vcm1hbGl6ZWRQcmVkaWN0aW9uRGlzdGFuY2UgPSB0aGlzLnByZWRpY3Rpb25EaXN0YW5jZSgpO1xuXHRcdHdvcmxkLnByb3h5LmludGVncmF0aW9uUGFyYW1ldGVycy5jb250YWN0X25hdHVyYWxfZnJlcXVlbmN5ID0gdGhpcy5jb250YWN0TmF0dXJhbEZyZXF1ZW5jeSgpO1xuXHRcdHdvcmxkLnByb3h5Lmxlbmd0aFVuaXQgPSB0aGlzLmxlbmd0aFVuaXQoKTtcblx0fVxuXG5cdHByaXZhdGUgaW50ZXJuYWxTdGVwKGRlbHRhOiBudW1iZXIpIHtcblx0XHRjb25zdCB3b3JsZFNpbmdsZXRvbiA9IHRoaXMud29ybGRTaW5nbGV0b24oKTtcblx0XHRpZiAoIXdvcmxkU2luZ2xldG9uKSByZXR1cm47XG5cblx0XHRjb25zdCBldmVudFF1ZXVlID0gdGhpcy5ldmVudFF1ZXVlKCk7XG5cdFx0aWYgKCFldmVudFF1ZXVlKSByZXR1cm47XG5cblx0XHRjb25zdCB3b3JsZCA9IHdvcmxkU2luZ2xldG9uLnByb3h5O1xuXHRcdGNvbnN0IFt0aW1lU3RlcCwgaW50ZXJwb2xhdGUsIHBhdXNlZF0gPSBbdGhpcy50aW1lU3RlcCgpLCB0aGlzLmludGVycG9sYXRlKCksIHRoaXMucGF1c2VkKCldO1xuXG5cdFx0LyogQ2hlY2sgaWYgdGhlIHRpbWVzdGVwIGlzIHN1cHBvc2VkIHRvIGJlIHZhcmlhYmxlLiBXZSdsbCBkbyB0aGlzIGhlcmVcbiAgICAgIG9uY2Ugc28gd2UgZG9uJ3QgaGF2ZSB0byBzdHJpbmctY2hlY2sgZXZlcnkgZnJhbWUuICovXG5cdFx0Y29uc3QgdGltZVN0ZXBWYXJpYWJsZSA9IHRpbWVTdGVwID09PSAndmFyeSc7XG5cblx0XHQvKipcblx0XHQgKiBGaXhlZCB0aW1lU3RlcCBzaW11bGF0aW9uIHByb2dyZXNzaW9uXG5cdFx0ICogQHNlZSBodHRwczovL2dhZmZlcm9uZ2FtZXMuY29tL3Bvc3QvZml4X3lvdXJfdGltZXN0ZXAvXG5cdFx0ICovXG5cdFx0Y29uc3QgY2xhbXBlZERlbHRhID0gTWF0aFV0aWxzLmNsYW1wKGRlbHRhLCAwLCAwLjUpO1xuXG5cdFx0Y29uc3Qgc3RlcFdvcmxkID0gKGlubmVyRGVsdGE6IG51bWJlcikgPT4ge1xuXHRcdFx0Ly8gVHJpZ2dlciBiZWZvcmVTdGVwIGNhbGxiYWNrc1xuXHRcdFx0dGhpcy5iZWZvcmVTdGVwQ2FsbGJhY2tzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG5cdFx0XHRcdGNhbGxiYWNrKHdvcmxkKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR3b3JsZC50aW1lc3RlcCA9IGlubmVyRGVsdGE7XG5cdFx0XHR3b3JsZC5zdGVwKGV2ZW50UXVldWUpO1xuXG5cdFx0XHQvLyBUcmlnZ2VyIGFmdGVyU3RlcCBjYWxsYmFja3Ncblx0XHRcdHRoaXMuYWZ0ZXJTdGVwQ2FsbGJhY2tzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG5cdFx0XHRcdGNhbGxiYWNrKHdvcmxkKTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRpZiAodGltZVN0ZXBWYXJpYWJsZSkge1xuXHRcdFx0c3RlcFdvcmxkKGNsYW1wZWREZWx0YSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGRvbid0IHN0ZXAgdGltZSBmb3J3YXJkcyBpZiBwYXVzZWRcblx0XHRcdC8vIEluY3JlYXNlIGFjY3VtdWxhdG9yXG5cdFx0XHR0aGlzLnN0ZXBwaW5nU3RhdGUuYWNjdW11bGF0b3IgKz0gY2xhbXBlZERlbHRhO1xuXG5cdFx0XHR3aGlsZSAodGhpcy5zdGVwcGluZ1N0YXRlLmFjY3VtdWxhdG9yID49IHRpbWVTdGVwKSB7XG5cdFx0XHRcdC8vIFNldCB1cCBwcmV2aW91cyBzdGF0ZVxuXHRcdFx0XHQvLyBuZWVkZWQgZm9yIGFjY3VyYXRlIGludGVycG9sYXRpb25zIGlmIHRoZSB3b3JsZCBzdGVwcyBtb3JlIHRoYW4gb25jZVxuXHRcdFx0XHRpZiAoaW50ZXJwb2xhdGUpIHtcblx0XHRcdFx0XHR0aGlzLnN0ZXBwaW5nU3RhdGUucHJldmlvdXNTdGF0ZSA9IHt9O1xuXHRcdFx0XHRcdHdvcmxkLmZvckVhY2hSaWdpZEJvZHkoKGJvZHkpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuc3RlcHBpbmdTdGF0ZS5wcmV2aW91c1N0YXRlW2JvZHkuaGFuZGxlXSA9IHtcblx0XHRcdFx0XHRcdFx0cG9zaXRpb246IGJvZHkudHJhbnNsYXRpb24oKSxcblx0XHRcdFx0XHRcdFx0cm90YXRpb246IGJvZHkucm90YXRpb24oKSxcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzdGVwV29ybGQodGltZVN0ZXApO1xuXHRcdFx0XHR0aGlzLnN0ZXBwaW5nU3RhdGUuYWNjdW11bGF0b3IgLT0gdGltZVN0ZXA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW50ZXJwb2xhdGlvbkFscGhhID1cblx0XHRcdHRpbWVTdGVwVmFyaWFibGUgfHwgIWludGVycG9sYXRlIHx8IHBhdXNlZCA/IDEgOiB0aGlzLnN0ZXBwaW5nU3RhdGUuYWNjdW11bGF0b3IgLyB0aW1lU3RlcDtcblxuXHRcdC8vIFVwZGF0ZSBtZXNoZXNcblx0XHR0aGlzLnJpZ2lkQm9keVN0YXRlcy5mb3JFYWNoKChzdGF0ZSwgaGFuZGxlKSA9PiB7XG5cdFx0XHRjb25zdCByaWdpZEJvZHkgPSB3b3JsZC5nZXRSaWdpZEJvZHkoaGFuZGxlKTtcblxuXHRcdFx0Y29uc3QgZXZlbnRzID0gdGhpcy5yaWdpZEJvZHlFdmVudHMuZ2V0KGhhbmRsZSk7XG5cdFx0XHRpZiAoZXZlbnRzPy5vblNsZWVwIHx8IGV2ZW50cz8ub25XYWtlKSB7XG5cdFx0XHRcdGlmIChyaWdpZEJvZHkuaXNTbGVlcGluZygpICYmICFzdGF0ZS5pc1NsZWVwaW5nKSBldmVudHM/Lm9uU2xlZXA/LigpO1xuXHRcdFx0XHRpZiAoIXJpZ2lkQm9keS5pc1NsZWVwaW5nKCkgJiYgc3RhdGUuaXNTbGVlcGluZykgZXZlbnRzPy5vbldha2U/LigpO1xuXHRcdFx0XHRzdGF0ZS5pc1NsZWVwaW5nID0gcmlnaWRCb2R5LmlzU2xlZXBpbmcoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFyaWdpZEJvZHkgfHwgKHJpZ2lkQm9keS5pc1NsZWVwaW5nKCkgJiYgISgnaXNJbnN0YW5jZWRNZXNoJyBpbiBzdGF0ZS5vYmplY3QpKSB8fCAhc3RhdGUuc2V0TWF0cml4KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmV3IHN0YXRlc1xuXHRcdFx0bGV0IHQgPSByaWdpZEJvZHkudHJhbnNsYXRpb24oKSBhcyBWZWN0b3IzO1xuXHRcdFx0bGV0IHIgPSByaWdpZEJvZHkucm90YXRpb24oKSBhcyBRdWF0ZXJuaW9uO1xuXG5cdFx0XHRsZXQgcHJldmlvdXNTdGF0ZSA9IHRoaXMuc3RlcHBpbmdTdGF0ZS5wcmV2aW91c1N0YXRlW2hhbmRsZV07XG5cblx0XHRcdGlmIChwcmV2aW91c1N0YXRlKSB7XG5cdFx0XHRcdC8vIEdldCBwcmV2aW91cyBzaW11bGF0ZWQgd29ybGQgcG9zaXRpb25cblx0XHRcdFx0X21hdHJpeDRcblx0XHRcdFx0XHQuY29tcG9zZShwcmV2aW91c1N0YXRlLnBvc2l0aW9uIGFzIFZlY3RvcjMsIHJhcGllclF1YXRlcm5pb25Ub1F1YXRlcm5pb24ocHJldmlvdXNTdGF0ZS5yb3RhdGlvbiksIHN0YXRlLnNjYWxlKVxuXHRcdFx0XHRcdC5wcmVtdWx0aXBseShzdGF0ZS5pbnZlcnRlZFdvcmxkTWF0cml4KVxuXHRcdFx0XHRcdC5kZWNvbXBvc2UoX3Bvc2l0aW9uLCBfcm90YXRpb24sIF9zY2FsZSk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgcHJldmlvdXMgdGljayBwb3NpdGlvblxuXHRcdFx0XHRpZiAoc3RhdGUubWVzaFR5cGUgPT0gJ21lc2gnKSB7XG5cdFx0XHRcdFx0c3RhdGUub2JqZWN0LnBvc2l0aW9uLmNvcHkoX3Bvc2l0aW9uKTtcblx0XHRcdFx0XHRzdGF0ZS5vYmplY3QucXVhdGVybmlvbi5jb3B5KF9yb3RhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gR2V0IG5ldyBwb3NpdGlvblxuXHRcdFx0X21hdHJpeDRcblx0XHRcdFx0LmNvbXBvc2UodCwgcmFwaWVyUXVhdGVybmlvblRvUXVhdGVybmlvbihyKSwgc3RhdGUuc2NhbGUpXG5cdFx0XHRcdC5wcmVtdWx0aXBseShzdGF0ZS5pbnZlcnRlZFdvcmxkTWF0cml4KVxuXHRcdFx0XHQuZGVjb21wb3NlKF9wb3NpdGlvbiwgX3JvdGF0aW9uLCBfc2NhbGUpO1xuXG5cdFx0XHRpZiAoc3RhdGUubWVzaFR5cGUgPT0gJ2luc3RhbmNlZE1lc2gnKSB7XG5cdFx0XHRcdHN0YXRlLnNldE1hdHJpeChfbWF0cml4NCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJbnRlcnBvbGF0ZSB0byBuZXcgcG9zaXRpb25cblx0XHRcdFx0c3RhdGUub2JqZWN0LnBvc2l0aW9uLmxlcnAoX3Bvc2l0aW9uLCBpbnRlcnBvbGF0aW9uQWxwaGEpO1xuXHRcdFx0XHRzdGF0ZS5vYmplY3QucXVhdGVybmlvbi5zbGVycChfcm90YXRpb24sIGludGVycG9sYXRpb25BbHBoYSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRldmVudFF1ZXVlLmRyYWluQ29sbGlzaW9uRXZlbnRzKChoYW5kbGUxLCBoYW5kbGUyLCBzdGFydGVkKSA9PiB7XG5cdFx0XHRjb25zdCBzb3VyY2UxID0gdGhpcy5nZXRTb3VyY2VGcm9tQ29sbGlkZXJIYW5kbGUoaGFuZGxlMSk7XG5cdFx0XHRjb25zdCBzb3VyY2UyID0gdGhpcy5nZXRTb3VyY2VGcm9tQ29sbGlkZXJIYW5kbGUoaGFuZGxlMik7XG5cblx0XHRcdC8vIENvbGxpc2lvbiBFdmVudHNcblx0XHRcdGlmICghc291cmNlMT8uY29sbGlkZXIub2JqZWN0IHx8ICFzb3VyY2UyPy5jb2xsaWRlci5vYmplY3QpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjb2xsaXNpb25QYXlsb2FkMSA9IHRoaXMuZ2V0Q29sbGlzaW9uUGF5bG9hZEZyb21Tb3VyY2Uoc291cmNlMSwgc291cmNlMik7XG5cdFx0XHRjb25zdCBjb2xsaXNpb25QYXlsb2FkMiA9IHRoaXMuZ2V0Q29sbGlzaW9uUGF5bG9hZEZyb21Tb3VyY2Uoc291cmNlMiwgc291cmNlMSk7XG5cblx0XHRcdGlmIChzdGFydGVkKSB7XG5cdFx0XHRcdHdvcmxkLmNvbnRhY3RQYWlyKHNvdXJjZTEuY29sbGlkZXIub2JqZWN0LCBzb3VyY2UyLmNvbGxpZGVyLm9iamVjdCwgKG1hbmlmb2xkLCBmbGlwcGVkKSA9PiB7XG5cdFx0XHRcdFx0LyogUmlnaWRCb2R5IGV2ZW50cyAqL1xuXHRcdFx0XHRcdHNvdXJjZTEucmlnaWRCb2R5LmV2ZW50cz8ub25Db2xsaXNpb25FbnRlcj8uKHsgLi4uY29sbGlzaW9uUGF5bG9hZDEsIG1hbmlmb2xkLCBmbGlwcGVkIH0pO1xuXHRcdFx0XHRcdHNvdXJjZTIucmlnaWRCb2R5LmV2ZW50cz8ub25Db2xsaXNpb25FbnRlcj8uKHsgLi4uY29sbGlzaW9uUGF5bG9hZDIsIG1hbmlmb2xkLCBmbGlwcGVkIH0pO1xuXG5cdFx0XHRcdFx0LyogQ29sbGlkZXIgZXZlbnRzICovXG5cdFx0XHRcdFx0c291cmNlMS5jb2xsaWRlci5ldmVudHM/Lm9uQ29sbGlzaW9uRW50ZXI/Lih7IC4uLmNvbGxpc2lvblBheWxvYWQxLCBtYW5pZm9sZCwgZmxpcHBlZCB9KTtcblx0XHRcdFx0XHRzb3VyY2UyLmNvbGxpZGVyLmV2ZW50cz8ub25Db2xsaXNpb25FbnRlcj8uKHsgLi4uY29sbGlzaW9uUGF5bG9hZDIsIG1hbmlmb2xkLCBmbGlwcGVkIH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNvdXJjZTEucmlnaWRCb2R5LmV2ZW50cz8ub25Db2xsaXNpb25FeGl0Py4oY29sbGlzaW9uUGF5bG9hZDEpO1xuXHRcdFx0XHRzb3VyY2UyLnJpZ2lkQm9keS5ldmVudHM/Lm9uQ29sbGlzaW9uRXhpdD8uKGNvbGxpc2lvblBheWxvYWQyKTtcblx0XHRcdFx0c291cmNlMS5jb2xsaWRlci5ldmVudHM/Lm9uQ29sbGlzaW9uRXhpdD8uKGNvbGxpc2lvblBheWxvYWQxKTtcblx0XHRcdFx0c291cmNlMi5jb2xsaWRlci5ldmVudHM/Lm9uQ29sbGlzaW9uRXhpdD8uKGNvbGxpc2lvblBheWxvYWQyKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2Vuc29yIEludGVyc2VjdGlvbnNcblx0XHRcdGlmIChzdGFydGVkKSB7XG5cdFx0XHRcdGlmICh3b3JsZC5pbnRlcnNlY3Rpb25QYWlyKHNvdXJjZTEuY29sbGlkZXIub2JqZWN0LCBzb3VyY2UyLmNvbGxpZGVyLm9iamVjdCkpIHtcblx0XHRcdFx0XHRzb3VyY2UxLnJpZ2lkQm9keS5ldmVudHM/Lm9uSW50ZXJzZWN0aW9uRW50ZXI/Lihjb2xsaXNpb25QYXlsb2FkMSk7XG5cdFx0XHRcdFx0c291cmNlMi5yaWdpZEJvZHkuZXZlbnRzPy5vbkludGVyc2VjdGlvbkVudGVyPy4oY29sbGlzaW9uUGF5bG9hZDIpO1xuXHRcdFx0XHRcdHNvdXJjZTEuY29sbGlkZXIuZXZlbnRzPy5vbkludGVyc2VjdGlvbkVudGVyPy4oY29sbGlzaW9uUGF5bG9hZDEpO1xuXHRcdFx0XHRcdHNvdXJjZTIuY29sbGlkZXIuZXZlbnRzPy5vbkludGVyc2VjdGlvbkVudGVyPy4oY29sbGlzaW9uUGF5bG9hZDIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzb3VyY2UxLnJpZ2lkQm9keS5ldmVudHM/Lm9uSW50ZXJzZWN0aW9uRXhpdD8uKGNvbGxpc2lvblBheWxvYWQxKTtcblx0XHRcdFx0c291cmNlMi5yaWdpZEJvZHkuZXZlbnRzPy5vbkludGVyc2VjdGlvbkV4aXQ/Lihjb2xsaXNpb25QYXlsb2FkMik7XG5cdFx0XHRcdHNvdXJjZTEuY29sbGlkZXIuZXZlbnRzPy5vbkludGVyc2VjdGlvbkV4aXQ/Lihjb2xsaXNpb25QYXlsb2FkMSk7XG5cdFx0XHRcdHNvdXJjZTIuY29sbGlkZXIuZXZlbnRzPy5vbkludGVyc2VjdGlvbkV4aXQ/Lihjb2xsaXNpb25QYXlsb2FkMik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRldmVudFF1ZXVlLmRyYWluQ29udGFjdEZvcmNlRXZlbnRzKChldmVudCkgPT4ge1xuXHRcdFx0Y29uc3Qgc291cmNlMSA9IHRoaXMuZ2V0U291cmNlRnJvbUNvbGxpZGVySGFuZGxlKGV2ZW50LmNvbGxpZGVyMSgpKTtcblx0XHRcdGNvbnN0IHNvdXJjZTIgPSB0aGlzLmdldFNvdXJjZUZyb21Db2xsaWRlckhhbmRsZShldmVudC5jb2xsaWRlcjIoKSk7XG5cblx0XHRcdC8vIENvbGxpc2lvbiBFdmVudHNcblx0XHRcdGlmICghc291cmNlMT8uY29sbGlkZXIub2JqZWN0IHx8ICFzb3VyY2UyPy5jb2xsaWRlci5vYmplY3QpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjb2xsaXNpb25QYXlsb2FkMSA9IHRoaXMuZ2V0Q29sbGlzaW9uUGF5bG9hZEZyb21Tb3VyY2Uoc291cmNlMSwgc291cmNlMik7XG5cdFx0XHRjb25zdCBjb2xsaXNpb25QYXlsb2FkMiA9IHRoaXMuZ2V0Q29sbGlzaW9uUGF5bG9hZEZyb21Tb3VyY2Uoc291cmNlMiwgc291cmNlMSk7XG5cblx0XHRcdHNvdXJjZTEucmlnaWRCb2R5LmV2ZW50cz8ub25Db250YWN0Rm9yY2U/Lih7XG5cdFx0XHRcdC4uLmNvbGxpc2lvblBheWxvYWQxLFxuXHRcdFx0XHR0b3RhbEZvcmNlOiBldmVudC50b3RhbEZvcmNlKCksXG5cdFx0XHRcdHRvdGFsRm9yY2VNYWduaXR1ZGU6IGV2ZW50LnRvdGFsRm9yY2VNYWduaXR1ZGUoKSxcblx0XHRcdFx0bWF4Rm9yY2VEaXJlY3Rpb246IGV2ZW50Lm1heEZvcmNlRGlyZWN0aW9uKCksXG5cdFx0XHRcdG1heEZvcmNlTWFnbml0dWRlOiBldmVudC5tYXhGb3JjZU1hZ25pdHVkZSgpLFxuXHRcdFx0fSk7XG5cblx0XHRcdHNvdXJjZTIucmlnaWRCb2R5LmV2ZW50cz8ub25Db250YWN0Rm9yY2U/Lih7XG5cdFx0XHRcdC4uLmNvbGxpc2lvblBheWxvYWQyLFxuXHRcdFx0XHR0b3RhbEZvcmNlOiBldmVudC50b3RhbEZvcmNlKCksXG5cdFx0XHRcdHRvdGFsRm9yY2VNYWduaXR1ZGU6IGV2ZW50LnRvdGFsRm9yY2VNYWduaXR1ZGUoKSxcblx0XHRcdFx0bWF4Rm9yY2VEaXJlY3Rpb246IGV2ZW50Lm1heEZvcmNlRGlyZWN0aW9uKCksXG5cdFx0XHRcdG1heEZvcmNlTWFnbml0dWRlOiBldmVudC5tYXhGb3JjZU1hZ25pdHVkZSgpLFxuXHRcdFx0fSk7XG5cblx0XHRcdHNvdXJjZTEuY29sbGlkZXIuZXZlbnRzPy5vbkNvbnRhY3RGb3JjZT8uKHtcblx0XHRcdFx0Li4uY29sbGlzaW9uUGF5bG9hZDEsXG5cdFx0XHRcdHRvdGFsRm9yY2U6IGV2ZW50LnRvdGFsRm9yY2UoKSxcblx0XHRcdFx0dG90YWxGb3JjZU1hZ25pdHVkZTogZXZlbnQudG90YWxGb3JjZU1hZ25pdHVkZSgpLFxuXHRcdFx0XHRtYXhGb3JjZURpcmVjdGlvbjogZXZlbnQubWF4Rm9yY2VEaXJlY3Rpb24oKSxcblx0XHRcdFx0bWF4Rm9yY2VNYWduaXR1ZGU6IGV2ZW50Lm1heEZvcmNlTWFnbml0dWRlKCksXG5cdFx0XHR9KTtcblxuXHRcdFx0c291cmNlMi5jb2xsaWRlci5ldmVudHM/Lm9uQ29udGFjdEZvcmNlPy4oe1xuXHRcdFx0XHQuLi5jb2xsaXNpb25QYXlsb2FkMixcblx0XHRcdFx0dG90YWxGb3JjZTogZXZlbnQudG90YWxGb3JjZSgpLFxuXHRcdFx0XHR0b3RhbEZvcmNlTWFnbml0dWRlOiBldmVudC50b3RhbEZvcmNlTWFnbml0dWRlKCksXG5cdFx0XHRcdG1heEZvcmNlRGlyZWN0aW9uOiBldmVudC5tYXhGb3JjZURpcmVjdGlvbigpLFxuXHRcdFx0XHRtYXhGb3JjZU1hZ25pdHVkZTogZXZlbnQubWF4Rm9yY2VNYWduaXR1ZGUoKSxcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0d29ybGQuZm9yRWFjaEFjdGl2ZVJpZ2lkQm9keSgoKSA9PiB7XG5cdFx0XHR0aGlzLnN0b3JlLnNuYXBzaG90LmludmFsaWRhdGUoKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0U291cmNlRnJvbUNvbGxpZGVySGFuZGxlKGhhbmRsZTogQ29sbGlkZXJIYW5kbGUpIHtcblx0XHRjb25zdCB3b3JsZCA9IHRoaXMud29ybGRTaW5nbGV0b24oKTtcblx0XHRpZiAoIXdvcmxkKSByZXR1cm47XG5cblx0XHRjb25zdCBjb2xsaWRlciA9IHdvcmxkLnByb3h5LmdldENvbGxpZGVyKGhhbmRsZSk7XG5cdFx0Y29uc3QgY29sRXZlbnRzID0gdGhpcy5jb2xsaWRlckV2ZW50cy5nZXQoaGFuZGxlKTtcblx0XHRjb25zdCBjb2xsaWRlclN0YXRlID0gdGhpcy5jb2xsaWRlclN0YXRlcy5nZXQoaGFuZGxlKTtcblxuXHRcdGNvbnN0IHJpZ2lkQm9keUhhbmRsZSA9IGNvbGxpZGVyLnBhcmVudCgpPy5oYW5kbGU7XG5cdFx0Y29uc3QgcmlnaWRCb2R5ID0gcmlnaWRCb2R5SGFuZGxlICE9PSB1bmRlZmluZWQgPyB3b3JsZC5wcm94eS5nZXRSaWdpZEJvZHkocmlnaWRCb2R5SGFuZGxlKSA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCByaWdpZEJvZHlFdmVudHMgPVxuXHRcdFx0cmlnaWRCb2R5ICYmIHJpZ2lkQm9keUhhbmRsZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5yaWdpZEJvZHlFdmVudHMuZ2V0KHJpZ2lkQm9keUhhbmRsZSkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgcmlnaWRCb2R5U3RhdGUgPSByaWdpZEJvZHlIYW5kbGUgIT09IHVuZGVmaW5lZCA/IHRoaXMucmlnaWRCb2R5U3RhdGVzLmdldChyaWdpZEJvZHlIYW5kbGUpIDogdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvbGxpZGVyOiB7IG9iamVjdDogY29sbGlkZXIsIGV2ZW50czogY29sRXZlbnRzLCBzdGF0ZTogY29sbGlkZXJTdGF0ZSB9LFxuXHRcdFx0cmlnaWRCb2R5OiB7IG9iamVjdDogcmlnaWRCb2R5LCBldmVudHM6IHJpZ2lkQm9keUV2ZW50cywgc3RhdGU6IHJpZ2lkQm9keVN0YXRlIH0sXG5cdFx0fSBhcyBOZ3RyQ29sbGlzaW9uU291cmNlO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDb2xsaXNpb25QYXlsb2FkRnJvbVNvdXJjZSh0YXJnZXQ6IE5ndHJDb2xsaXNpb25Tb3VyY2UsIG90aGVyOiBOZ3RyQ29sbGlzaW9uU291cmNlKTogTmd0ckNvbGxpc2lvblBheWxvYWQge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0cmlnaWRCb2R5OiB0YXJnZXQucmlnaWRCb2R5Lm9iamVjdCxcblx0XHRcdFx0Y29sbGlkZXI6IHRhcmdldC5jb2xsaWRlci5vYmplY3QsXG5cdFx0XHRcdGNvbGxpZGVyT2JqZWN0OiB0YXJnZXQuY29sbGlkZXIuc3RhdGU/Lm9iamVjdCxcblx0XHRcdFx0cmlnaWRCb2R5T2JqZWN0OiB0YXJnZXQucmlnaWRCb2R5LnN0YXRlPy5vYmplY3QsXG5cdFx0XHR9LFxuXHRcdFx0b3RoZXI6IHtcblx0XHRcdFx0cmlnaWRCb2R5OiBvdGhlci5yaWdpZEJvZHkub2JqZWN0LFxuXHRcdFx0XHRjb2xsaWRlcjogb3RoZXIuY29sbGlkZXIub2JqZWN0LFxuXHRcdFx0XHRjb2xsaWRlck9iamVjdDogb3RoZXIuY29sbGlkZXIuc3RhdGU/Lm9iamVjdCxcblx0XHRcdFx0cmlnaWRCb2R5T2JqZWN0OiBvdGhlci5yaWdpZEJvZHkuc3RhdGU/Lm9iamVjdCxcblx0XHRcdH0sXG5cdFx0fTtcblx0fVxufVxuIl19
|
package/esm2022/lib/types.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3JhcGllci9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRBY3RpdmVDb2xsaXNpb25UeXBlcyxcblx0Q29lZmZpY2llbnRDb21iaW5lUnVsZSxcblx0Q29sbGlkZXIsXG5cdENvbGxpZGVySGFuZGxlLFxuXHRJbnRlcmFjdGlvbkdyb3Vwcyxcblx0UmlnaWRCb2R5LFxuXHRSaWdpZEJvZHlIYW5kbGUsXG5cdFJvdGF0aW9uLFxuXHRUZW1wQ29udGFjdE1hbmlmb2xkLFxuXHRWZWN0b3IsXG5cdFdvcmxkLFxufSBmcm9tICdAZGltZm9yZ2UvcmFwaWVyM2QtY29tcGF0JztcbmltcG9ydCB7IE5ndE9iamVjdDNELCBOZ3RRdWF0ZXJuaW9uLCBOZ3RWZWN0b3IzIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBNYXRyaXg0LCBPYmplY3QzRCwgVmVjdG9yMywgVmVjdG9yM1R1cGxlIH0gZnJvbSAndGhyZWUnO1xuXG5leHBvcnQgdHlwZSBOZ3RyUmlnaWRCb2R5QXV0b0NvbGxpZGVyID0gJ2JhbGwnIHwgJ2N1Ym9pZCcgfCAnaHVsbCcgfCAndHJpbWVzaCcgfCBmYWxzZTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyUGh5c2ljc09wdGlvbnMge1xuXHQvKipcblx0ICogU2V0IHRoZSBncmF2aXR5IG9mIHRoZSBwaHlzaWNzIHdvcmxkXG5cdCAqIEBkZWZhdWx0VmFsdWUgWzAsIC05LjgxLCAwXVxuXHQgKi9cblx0Z3Jhdml0eTogVmVjdG9yM1R1cGxlO1xuXG5cdC8qKlxuXHQgKiBBbW91bnQgb2YgcGVuZXRyYXRpb24gdGhlIGVuZ2luZSB3b250IGF0dGVtcHQgdG8gY29ycmVjdFxuXHQgKiBAZGVmYXVsdFZhbHVlIDAuMDAxXG5cdCAqL1xuXHRhbGxvd2VkTGluZWFyRXJyb3I6IG51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIG51bWJlciBvZiBzb2x2ZXIgaXRlcmF0aW9ucyBydW4gYnkgdGhlIGNvbnN0cmFpbnRzIHNvbHZlciBmb3IgY2FsY3VsYXRpbmcgZm9yY2VzLlxuXHQgKiBUaGUgZ3JlYXRlciB0aGlzIHZhbHVlIGlzLCB0aGUgbW9zdCByaWdpZCBhbmQgcmVhbGlzdGljIHRoZSBwaHlzaWNzIHNpbXVsYXRpb24gd2lsbCBiZS5cblx0ICogSG93ZXZlciBhIGdyZWF0ZXIgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMgbW9yZSBjb21wdXRhdGlvbmFsbHkgaW50ZW5zaXZlLlxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIDRcblx0ICovXG5cdG51bVNvbHZlckl0ZXJhdGlvbnM6IG51bWJlcjtcblxuXHQvKipcblx0ICogTnVtYmVyIG9mIGFkZGl0aW9uIGZyaWN0aW9uIHJlc29sdXRpb24gaXRlcmF0aW9uIHJ1biBkdXJpbmcgdGhlIGxhc3Qgc29sdmVyIHN1Yi1zdGVwLlxuXHQgKiBUaGUgZ3JlYXRlciB0aGlzIHZhbHVlIGlzLCB0aGUgbW9zdCByZWFsaXN0aWMgZnJpY3Rpb24gd2lsbCBiZS5cblx0ICogSG93ZXZlciBhIGdyZWF0ZXIgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMgbW9yZSBjb21wdXRhdGlvbmFsbHkgaW50ZW5zaXZlLlxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIDRcblx0ICovXG5cdG51bUFkZGl0aW9uYWxGcmljdGlvbkl0ZXJhdGlvbnM6IG51bWJlcjtcblxuXHQvKipcblx0ICogTnVtYmVyIG9mIGludGVybmFsIFByb2plY3QgR2F1c3MgU2VpZGVsIChQR1MpIGl0ZXJhdGlvbnMgcnVuIGF0IGVhY2ggc29sdmVyIGl0ZXJhdGlvbi5cblx0ICogSW5jcmVhc2luZyB0aGlzIHBhcmFtZXRlciB3aWxsIGltcHJvdmUgc3RhYmlsaXR5IG9mIHRoZSBzaW11bGF0aW9uLiBJdCB3aWxsIGhhdmUgYSBsZXNzZXIgZWZmZWN0IHRoYW5cblx0ICogaW5jcmVhc2luZyBgbnVtU29sdmVySXRlcmF0aW9uc2AgYnV0IGlzIGFsc28gbGVzcyBjb21wdXRhdGlvbmFsbHkgZXhwZW5zaXZlLlxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIDFcblx0ICovXG5cdG51bUludGVybmFsUGdzSXRlcmF0aW9uczogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgbWF4aW1hbCBkaXN0YW5jZSBzZXBhcmF0aW5nIHR3byBvYmplY3RzIHRoYXQgd2lsbCBnZW5lcmF0ZSBwcmVkaWN0aXZlIGNvbnRhY3RzXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgMC4wMDJcblx0ICpcblx0ICovXG5cdHByZWRpY3Rpb25EaXN0YW5jZTogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBNaW5pbXVtIG51bWJlciBvZiBkeW5hbWljIGJvZGllcyBpbiBlYWNoIGFjdGl2ZSBpc2xhbmRcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSAxMjhcblx0ICovXG5cdG1pbklzbGFuZFNpemU6IG51bWJlcjtcblxuXHQvKipcblx0ICogTWF4aW11bSBudW1iZXIgb2Ygc3Vic3RlcHMgcGVyZm9ybWVkIGJ5IHRoZSBzb2x2ZXJcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSAxXG5cdCAqL1xuXHRtYXhDY2RTdWJzdGVwczogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgRXJyb3IgUmVkdWN0aW9uIFBhcmFtZXRlciBpbiBiZXR3ZWVuIDAgYW5kIDEsIGlzIHRoZSBwcm9wb3J0aW9uIG9mIHRoZSBwb3NpdGlvbmFsIGVycm9yIHRvIGJlIGNvcnJlY3RlZCBhdCBlYWNoIHRpbWUgc3RlcC5cblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSAwLjhcblx0ICovXG5cdGVycDogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgYXBwcm94aW1hdGUgc2l6ZSBvZiBtb3N0IGR5bmFtaWMgb2JqZWN0cyBpbiB0aGUgc2NlbmUuXG5cdCAqXG5cdCAqIFRoaXMgdmFsdWUgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGVzdGltYXRlIHNvbWUgbGVuZ3RoLWJhc2VkIHRvbGVyYW5jZS5cblx0ICogVGhpcyB2YWx1ZSBjYW4gYmUgdW5kZXJzdG9vZCBhcyB0aGUgbnVtYmVyIG9mIHVuaXRzLXBlci1tZXRlciBpbiB5b3VyIHBoeXNpY2FsIHdvcmxkIGNvbXBhcmVkIHRvIGEgaHVtYW4tc2l6ZWQgd29ybGQgaW4gbWV0ZXIuXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgMVxuXHQgKi9cblx0bGVuZ3RoVW5pdDogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGJhc2UgYXV0b21hdGljIGNvbGxpZGVycyBmb3IgdGhpcyBwaHlzaWNzIHdvcmxkXG5cdCAqIEFsbCBNZXNoZXMgaW5zaWRlIFJpZ2lkQm9kaWVzIHdpbGwgZ2VuZXJhdGUgYSBjb2xsaWRlclxuXHQgKiBiYXNlZCBvbiB0aGlzIHZhbHVlLCBpZiBub3Qgb3ZlcnJpZGRlbi5cblx0ICovXG5cdGNvbGxpZGVycz86IE5ndHJSaWdpZEJvZHlBdXRvQ29sbGlkZXI7XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdGltZXN0ZXAgZm9yIHRoZSBzaW11bGF0aW9uLlxuXHQgKiBTZXR0aW5nIHRoaXMgdG8gYSBudW1iZXIgKGVnLiAxLzYwKSB3aWxsIHJ1biB0aGVcblx0ICogc2ltdWxhdGlvbiBhdCB0aGF0IGZyYW1lcmF0ZS4gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzZXQgdGhpcyB0b1xuXHQgKiBcInZhcnlcIiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2ltdWxhdGlvbiB0byBhbHdheXMgc3luY2hyb25pemUgd2l0aFxuXHQgKiB0aGUgY3VycmVudCBmcmFtZSBkZWx0YSB0aW1lcy5cblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSAxLzYwXG5cdCAqL1xuXHR0aW1lU3RlcDogbnVtYmVyIHwgJ3ZhcnknO1xuXG5cdC8qKlxuXHQgKiBQYXVzZSB0aGUgcGh5c2ljcyBzaW11bGF0aW9uXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgZmFsc2Vcblx0ICovXG5cdHBhdXNlZDogYm9vbGVhbjtcblxuXHQvKipcblx0ICogSW50ZXJwb2xhdGUgdGhlIHdvcmxkIHRyYW5zZm9ybSB1c2luZyB0aGUgZnJhbWUgZGVsdGEgdGltZXMuXG5cdCAqIEhhcyBubyBlZmZlY3QgaWYgdGltZVN0ZXAgaXMgc2V0IHRvIFwidmFyeVwiLlxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIHRydWVcblx0ICoqL1xuXHRpbnRlcnBvbGF0ZTogYm9vbGVhbjtcblxuXHQvKipcblx0ICogVGhlIHVwZGF0ZSBwcmlvcml0eSBhdCB3aGljaCB0aGUgcGh5c2ljcyBzaW11bGF0aW9uIHNob3VsZCBydW4uXG5cdCAqIE9ubHkgdXNlZCB3aGVuIGB1cGRhdGVMb29wYCBpcyBzZXQgdG8gXCJmb2xsb3dcIi5cblx0ICpcblx0ICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hcGkvaG9va3MjdGFraW5nLW92ZXItdGhlLXJlbmRlci1sb29wXG5cdCAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG5cdCAqL1xuXHR1cGRhdGVQcmlvcml0eT86IG51bWJlcjtcblxuXHQvKipcblx0ICogU2V0IHRoZSB1cGRhdGUgbG9vcCBzdHJhdGVneSBmb3IgdGhlIHBoeXNpY3Mgd29ybGQuXG5cdCAqXG5cdCAqIElmIHNldCB0byBcImZvbGxvd1wiLCB0aGUgcGh5c2ljcyB3b3JsZCB3aWxsIGJlIHN0ZXBwZWRcblx0ICogaW4gYSBgdXNlRnJhbWVgIGNhbGxiYWNrLCBtYW5hZ2VkIGJ5IEByZWFjdC10aHJlZS9maWJlci5cblx0ICogWW91IGNhbiB1c2UgYHVwZGF0ZVByaW9yaXR5YCBwcm9wIHRvIG1hbmFnZSB0aGUgc2NoZWR1bGluZy5cblx0ICpcblx0ICogSWYgc2V0IHRvIFwiaW5kZXBlbmRlbnRcIiwgdGhlIHBoeXNpY3Mgd29ybGQgd2lsbCBiZSBzdGVwcGVkXG5cdCAqIGluIGEgc2VwYXJhdGUgbG9vcCwgbm90IHRpZWQgdG8gdGhlIHJlbmRlciBsb29wLlxuXHQgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHVzaW5nIHRoZSBcImRlbWFuZFwiIGBmcmFtZWxvb3BgIHN0cmF0ZWd5IGZvciB0aGVcblx0ICogQHJlYWN0LXRocmVlL2ZpYmVyIGA8Q2FudmFzIC8+YC5cblx0ICpcblx0ICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hZHZhbmNlZC9zY2FsaW5nLXBlcmZvcm1hbmNlI29uLWRlbWFuZC1yZW5kZXJpbmdcblx0ICogQGRlZmF1bHRWYWx1ZSBcImZvbGxvd1wiXG5cdCAqL1xuXHR1cGRhdGVMb29wOiAnZm9sbG93JyB8ICdpbmRlcGVuZGVudCc7XG5cblx0LyoqXG5cdCAqIEVuYWJsZSBkZWJ1ZyByZW5kZXJpbmcgb2YgdGhlIHBoeXNpY3Mgd29ybGQuXG5cdCAqIEBkZWZhdWx0VmFsdWUgZmFsc2Vcblx0ICovXG5cdGRlYnVnOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJSaWdpZEJvZHlTdGF0ZSB7XG5cdG1lc2hUeXBlOiAnaW5zdGFuY2VkTWVzaCcgfCAnbWVzaCc7XG5cdHJpZ2lkQm9keTogUmlnaWRCb2R5O1xuXHRvYmplY3Q6IE9iamVjdDNEO1xuXHRpbnZlcnRlZFdvcmxkTWF0cml4OiBNYXRyaXg0O1xuXHRzZXRNYXRyaXg6IChtYXRyaXg6IE1hdHJpeDQpID0+IHZvaWQ7XG5cdGdldE1hdHJpeDogKG1hdHJpeDogTWF0cml4NCkgPT4gTWF0cml4NDtcblx0LyoqXG5cdCAqIFJlcXVpcmVkIGZvciBpbnN0YW5jZWQgcmlnaWQgYm9kaWVzLlxuXHQgKi9cblx0c2NhbGU6IFZlY3RvcjM7XG5cdGlzU2xlZXBpbmc6IGJvb2xlYW47XG59XG5leHBvcnQgdHlwZSBOZ3RyUmlnaWRCb2R5U3RhdGVNYXAgPSBNYXA8UmlnaWRCb2R5WydoYW5kbGUnXSwgTmd0clJpZ2lkQm9keVN0YXRlPjtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlkZXJTdGF0ZSB7XG5cdGNvbGxpZGVyOiBDb2xsaWRlcjtcblx0b2JqZWN0OiBPYmplY3QzRDtcblxuXHQvKipcblx0ICogVGhlIHBhcmVudCBvZiB3aGljaCB0aGlzIGNvbGxpZGVyIG5lZWRzIHRvIGJhc2UgaXRzXG5cdCAqIHdvcmxkIHBvc2l0aW9uIG9uLCBjYW4gYmUgZW1wdHlcblx0ICovXG5cdHdvcmxkUGFyZW50PzogT2JqZWN0M0Q7XG59XG5leHBvcnQgdHlwZSBOZ3RyQ29sbGlkZXJTdGF0ZU1hcCA9IE1hcDxDb2xsaWRlclsnaGFuZGxlJ10sIE5ndHJDb2xsaWRlclN0YXRlPjtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlzaW9uVGFyZ2V0IHtcblx0cmlnaWRCb2R5PzogUmlnaWRCb2R5O1xuXHRjb2xsaWRlcjogQ29sbGlkZXI7XG5cdHJpZ2lkQm9keU9iamVjdD86IE9iamVjdDNEO1xuXHRjb2xsaWRlck9iamVjdD86IE9iamVjdDNEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJDb2xsaXNpb25QYXlsb2FkIHtcblx0LyoqIHRoZSBvYmplY3QgZmlyaW5nIHRoZSBldmVudCAqL1xuXHR0YXJnZXQ6IE5ndHJDb2xsaXNpb25UYXJnZXQ7XG5cdC8qKiB0aGUgb3RoZXIgb2JqZWN0IGludm9sdmVkIGluIHRoZSBldmVudCAqL1xuXHRvdGhlcjogTmd0ckNvbGxpc2lvblRhcmdldDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlzaW9uRW50ZXJQYXlsb2FkIGV4dGVuZHMgTmd0ckNvbGxpc2lvblBheWxvYWQge1xuXHRtYW5pZm9sZDogVGVtcENvbnRhY3RNYW5pZm9sZDtcblx0ZmxpcHBlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlzaW9uRXhpdFBheWxvYWQgZXh0ZW5kcyBOZ3RyQ29sbGlzaW9uUGF5bG9hZCB7fVxuZXhwb3J0IGludGVyZmFjZSBOZ3RySW50ZXJzZWN0aW9uRW50ZXJQYXlsb2FkIGV4dGVuZHMgTmd0ckNvbGxpc2lvblBheWxvYWQge31cbmV4cG9ydCBpbnRlcmZhY2UgTmd0ckludGVyc2VjdGlvbkV4aXRQYXlsb2FkIGV4dGVuZHMgTmd0ckNvbGxpc2lvblBheWxvYWQge31cbmV4cG9ydCBpbnRlcmZhY2UgTmd0ckNvbnRhY3RGb3JjZVBheWxvYWQgZXh0ZW5kcyBOZ3RyQ29sbGlzaW9uUGF5bG9hZCB7XG5cdHRvdGFsRm9yY2U6IFZlY3Rvcjtcblx0dG90YWxGb3JjZU1hZ25pdHVkZTogbnVtYmVyO1xuXHRtYXhGb3JjZURpcmVjdGlvbjogVmVjdG9yO1xuXHRtYXhGb3JjZU1hZ25pdHVkZTogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RyQ29sbGlzaW9uRW50ZXJIYW5kbGVyID0gKHBheWxvYWQ6IE5ndHJDb2xsaXNpb25FbnRlclBheWxvYWQpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBOZ3RyQ29sbGlzaW9uRXhpdEhhbmRsZXIgPSAocGF5bG9hZDogTmd0ckNvbGxpc2lvbkV4aXRQYXlsb2FkKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgTmd0ckludGVyc2VjdGlvbkVudGVySGFuZGxlciA9IChwYXlsb2FkOiBOZ3RySW50ZXJzZWN0aW9uRW50ZXJQYXlsb2FkKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgTmd0ckludGVyc2VjdGlvbkV4aXRIYW5kbGVyID0gKHBheWxvYWQ6IE5ndHJJbnRlcnNlY3Rpb25FeGl0UGF5bG9hZCkgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIE5ndHJDb250YWN0Rm9yY2VIYW5kbGVyID0gKHBheWxvYWQ6IE5ndHJDb250YWN0Rm9yY2VQYXlsb2FkKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJFdmVudE1hcFZhbHVlIHtcblx0b25TbGVlcD8oKTogdm9pZDtcblx0b25XYWtlPygpOiB2b2lkO1xuXHRvbkNvbGxpc2lvbkVudGVyPzogTmd0ckNvbGxpc2lvbkVudGVySGFuZGxlcjtcblx0b25Db2xsaXNpb25FeGl0PzogTmd0ckNvbGxpc2lvbkV4aXRIYW5kbGVyO1xuXHRvbkludGVyc2VjdGlvbkVudGVyPzogTmd0ckludGVyc2VjdGlvbkVudGVySGFuZGxlcjtcblx0b25JbnRlcnNlY3Rpb25FeGl0PzogTmd0ckludGVyc2VjdGlvbkV4aXRIYW5kbGVyO1xuXHRvbkNvbnRhY3RGb3JjZT86IE5ndHJDb250YWN0Rm9yY2VIYW5kbGVyO1xufVxuZXhwb3J0IHR5cGUgTmd0ckV2ZW50TWFwID0gTWFwPENvbGxpZGVySGFuZGxlIHwgUmlnaWRCb2R5SGFuZGxlLCBOZ3RyRXZlbnRNYXBWYWx1ZT47XG5cbmV4cG9ydCB0eXBlIE5ndHJXb3JsZFN0ZXBDYWxsYmFjayA9ICh3b3JsZDogV29ybGQpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBOZ3RyV29ybGRTdGVwQ2FsbGJhY2tTZXQgPSBTZXQ8Tmd0cldvcmxkU3RlcENhbGxiYWNrPjtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlzaW9uU291cmNlIHtcblx0Y29sbGlkZXI6IHtcblx0XHRvYmplY3Q6IENvbGxpZGVyO1xuXHRcdGV2ZW50cz86IE5ndHJFdmVudE1hcFZhbHVlO1xuXHRcdHN0YXRlPzogTmd0ckNvbGxpZGVyU3RhdGU7XG5cdH07XG5cdHJpZ2lkQm9keToge1xuXHRcdG9iamVjdD86IFJpZ2lkQm9keTtcblx0XHRldmVudHM/OiBOZ3RyRXZlbnRNYXBWYWx1ZTtcblx0XHRzdGF0ZT86IE5ndHJSaWdpZEJvZHlTdGF0ZTtcblx0fTtcbn1cblxuZXhwb3J0IHR5cGUgTmd0ckNvbGxpZGVyU2hhcGUgPVxuXHR8ICdjdWJvaWQnXG5cdHwgJ3RyaW1lc2gnXG5cdHwgJ2JhbGwnXG5cdHwgJ2NhcHN1bGUnXG5cdHwgJ2NvbnZleEh1bGwnXG5cdHwgJ2hlaWdodGZpZWxkJ1xuXHR8ICdwb2x5bGluZSdcblx0fCAncm91bmRDdWJvaWQnXG5cdHwgJ2N5bGluZGVyJ1xuXHR8ICdyb3VuZEN5bGluZGVyJ1xuXHR8ICdjb25lJ1xuXHR8ICdyb3VuZENvbmUnXG5cdHwgJ2NvbnZleE1lc2gnXG5cdHwgJ3JvdW5kQ29udmV4SHVsbCdcblx0fCAncm91bmRDb252ZXhNZXNoJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlkZXJPcHRpb25zIHtcblx0LyoqXG5cdCAqIFRoZSBvcHRpb25hbCBuYW1lIHBhc3NlZCB0byBUSFJFRSdzIE9iamVjdDNEXG5cdCAqL1xuXHRuYW1lPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBQcmluY2lwYWwgYW5ndWxhciBpbmVydGlhIG9mIHRoaXMgcmlnaWQgYm9keVxuXHQgKi9cblx0cHJpbmNpcGFsQW5ndWxhckluZXJ0aWE/OiBWZWN0b3IzVHVwbGU7XG5cblx0LyoqXG5cdCAqIFJlc3RpdHV0aW9uIGNvbnRyb2xzIGhvdyBlbGFzdGljIChha2EuIGJvdW5jeSkgYSBjb250YWN0IGlzLiBMZSBlbGFzdGljaXR5IG9mIGEgY29udGFjdCBpcyBjb250cm9sbGVkIGJ5IHRoZSByZXN0aXR1dGlvbiBjb2VmZmljaWVudFxuXHQgKi9cblx0cmVzdGl0dXRpb24/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFdoYXQgaGFwcGVucyB3aGVuIHR3byBib2RpZXMgbWVldC4gU2VlIGh0dHBzOi8vcmFwaWVyLnJzL2RvY3MvdXNlcl9ndWlkZXMvamF2YXNjcmlwdC9jb2xsaWRlcnMjZnJpY3Rpb24uXG5cdCAqL1xuXHRyZXN0aXR1dGlvbkNvbWJpbmVSdWxlPzogQ29lZmZpY2llbnRDb21iaW5lUnVsZTtcblxuXHQvKipcblx0ICogRnJpY3Rpb24gaXMgYSBmb3JjZSB0aGF0IG9wcG9zZXMgdGhlIHJlbGF0aXZlIHRhbmdlbnRpYWwgbW90aW9uIGJldHdlZW4gdHdvIHJpZ2lkLWJvZGllcyB3aXRoIGNvbGxpZGVycyBpbiBjb250YWN0LlxuXHQgKiBBIGZyaWN0aW9uIGNvZWZmaWNpZW50IG9mIDAgaW1wbGllcyBubyBmcmljdGlvbiBhdCBhbGwgKGNvbXBsZXRlbHkgc2xpZGluZyBjb250YWN0KSBhbmQgYSBjb2VmZmljaWVudFxuXHQgKiBncmVhdGVyIG9yIGVxdWFsIHRvIDEgaW1wbGllcyBhIHZlcnkgc3Ryb25nIGZyaWN0aW9uLiBWYWx1ZXMgZ3JlYXRlciB0aGFuIDEgYXJlIGFsbG93ZWQuXG5cdCAqL1xuXHRmcmljdGlvbj86IG51bWJlcjtcblxuXHQvKipcblx0ICogV2hhdCBoYXBwZW5zIHdoZW4gdHdvIGJvZGllcyBtZWV0LiBTZWUgaHR0cHM6Ly9yYXBpZXIucnMvZG9jcy91c2VyX2d1aWRlcy9qYXZhc2NyaXB0L2NvbGxpZGVycyNmcmljdGlvbi5cblx0ICovXG5cdGZyaWN0aW9uQ29tYmluZVJ1bGU/OiBDb2VmZmljaWVudENvbWJpbmVSdWxlO1xuXG5cdC8qKlxuXHQgKiBUaGUgYml0IG1hc2sgY29uZmlndXJpbmcgdGhlIGdyb3VwcyBhbmQgbWFzayBmb3IgY29sbGlzaW9uIGhhbmRsaW5nLlxuXHQgKi9cblx0Y29sbGlzaW9uR3JvdXBzPzogSW50ZXJhY3Rpb25Hcm91cHM7XG5cblx0LyoqXG5cdCAqIFRoZSBiaXQgbWFzayBjb25maWd1cmluZyB0aGUgZ3JvdXBzIGFuZCBtYXNrIGZvciBzb2x2ZXIgaGFuZGxpbmcuXG5cdCAqL1xuXHRzb2x2ZXJHcm91cHM/OiBJbnRlcmFjdGlvbkdyb3VwcztcblxuXHQvKipcblx0ICogVGhlIGNvbGxpc2lvbiB0eXBlcyBhY3RpdmUgZm9yIHRoaXMgY29sbGlkZXIuXG5cdCAqXG5cdCAqIFVzZSBgQWN0aXZlQ29sbGlzaW9uVHlwZXNgIHRvIHNwZWNpZnkgd2hpY2ggY29sbGlzaW9uIHR5cGVzIHNob3VsZCBiZSBhY3RpdmUgZm9yIHRoaXMgY29sbGlkZXIuXG5cdCAqXG5cdCAqIEBzZWUgaHR0cHM6Ly9yYXBpZXIucnMvamF2YXNjcmlwdDNkL2NsYXNzZXMvQ29sbGlkZXIuaHRtbCNzZXRBY3RpdmVDb2xsaXNpb25UeXBlc1xuXHQgKiBAc2VlIGh0dHBzOi8vcmFwaWVyLnJzL2phdmFzY3JpcHQzZC9lbnVtcy9BY3RpdmVDb2xsaXNpb25UeXBlcy5odG1sXG5cdCAqL1xuXHRhY3RpdmVDb2xsaXNpb25UeXBlcz86IEFjdGl2ZUNvbGxpc2lvblR5cGVzO1xuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB1bmlmb3JtIGRlbnNpdHkgb2YgdGhpcyBjb2xsaWRlci5cblx0ICogSWYgdGhpcyBpcyBzZXQsIG90aGVyIG1hc3MtcHJvcGVydGllcyBsaWtlIHRoZSBhbmd1bGFyIGluZXJ0aWEgdGVuc29yIGFyZSBjb21wdXRlZFxuXHQgKiBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIGNvbGxpZGVyJ3Mgc2hhcGUuXG5cdCAqIENhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIG1hc3Mgb3IgbWFzc1Byb3BlcnRpZXMgdmFsdWVzLlxuXHQgKiBNb3JlIGluZm8gaHR0cHM6Ly9yYXBpZXIucnMvZG9jcy91c2VyX2d1aWRlcy9qYXZhc2NyaXB0L2NvbGxpZGVycyNtYXNzLXByb3BlcnRpZXNcblx0ICovXG5cdGRlbnNpdHk/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBtYXNzIG9mIHRoaXMgY29sbGlkZXIuXG5cdCAqIEdlbmVyYWxseSwgaXQncyBub3QgcmVjb21tZW5kZWQgdG8gYWRqdXN0IHRoZSBtYXNzIHByb3BlcnRpZXMgYXMgaXQgY291bGQgbGVhZCB0b1xuXHQgKiB1bmV4cGVjdGVkIGJlaGF2aW9ycy5cblx0ICogQ2Fubm90IGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgZGVuc2l0eSBvciBtYXNzUHJvcGVydGllcyB2YWx1ZXMuXG5cdCAqIE1vcmUgaW5mbyBodHRwczovL3JhcGllci5ycy9kb2NzL3VzZXJfZ3VpZGVzL2phdmFzY3JpcHQvY29sbGlkZXJzI21hc3MtcHJvcGVydGllc1xuXHQgKi9cblx0bWFzcz86IG51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIG1hc3MgcHJvcGVydGllcyBvZiB0aGlzIHJpZ2lkIGJvZHkuXG5cdCAqIENhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIGRlbnNpdHkgb3IgbWFzcyB2YWx1ZXMuXG5cdCAqL1xuXHRtYXNzUHJvcGVydGllcz86IHtcblx0XHRtYXNzOiBudW1iZXI7XG5cdFx0Y2VudGVyT2ZNYXNzOiBWZWN0b3I7XG5cdFx0cHJpbmNpcGFsQW5ndWxhckluZXJ0aWE6IFZlY3Rvcjtcblx0XHRhbmd1bGFySW5lcnRpYUxvY2FsRnJhbWU6IFJvdGF0aW9uO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBUaGUgY29udGFjdCBza2luIG9mIHRoZSBjb2xsaWRlci5cblx0ICpcblx0ICogVGhlIGNvbnRhY3Qgc2tpbiBhY3RzIGFzIGlmIHRoZSBjb2xsaWRlciB3YXMgZW5sYXJnZWQgd2l0aCBhIHNraW4gb2Ygd2lkdGggY29udGFjdFNraW4gYXJvdW5kIGl0LCBrZWVwaW5nIG9iamVjdHMgZnVydGhlciBhcGFydCB3aGVuIGNvbGxpZGluZy5cblx0ICpcblx0ICogQSBub24temVybyBjb250YWN0IHNraW4gY2FuIGluY3JlYXNlIHBlcmZvcm1hbmNlLCBhbmQgaW4gc29tZSBjYXNlcywgc3RhYmlsaXR5LlxuXHQgKiBIb3dldmVyIGl0IGNyZWF0ZXMgYSBzbWFsbCBnYXAgYmV0d2VlbiBjb2xsaWRpbmcgb2JqZWN0IChlcXVhbCB0byB0aGUgc3VtIG9mIHRoZWlyIHNraW4pLlxuXHQgKiBJZiB0aGUgc2tpbiBpcyBzdWZmaWNpZW50bHkgc21hbGwsIHRoaXMgbWlnaHQgbm90IGJlIHZpc3VhbGx5IHNpZ25pZmljYW50IG9yIGNhbiBiZSBoaWRkZW4gYnkgdGhlIHJlbmRlcmluZyBhc3NldHMuXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgMFxuXHQgKi9cblx0Y29udGFjdFNraW46IG51bWJlcjtcblxuXHQvKipcblx0ICogU2V0cyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbGxpZGVyIGlzIGEgc2Vuc29yLlxuXHQgKi9cblx0c2Vuc29yPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgTmd0clJpZ2lkQm9keVR5cGUgPSAnZml4ZWQnIHwgJ2R5bmFtaWMnIHwgJ2tpbmVtYXRpY1Bvc2l0aW9uJyB8ICdraW5lbWF0aWNWZWxvY2l0eSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0clJpZ2lkQm9keU9wdGlvbnMgZXh0ZW5kcyBOZ3RyQ29sbGlkZXJPcHRpb25zIHtcblx0LyoqXG5cdCAqIFdoZXRoZXIgb3Igbm90IHRoaXMgYm9keSBjYW4gc2xlZXAuXG5cdCAqIEBkZWZhdWx0VmFsdWUgdHJ1ZVxuXHQgKi9cblx0Y2FuU2xlZXA6IGJvb2xlYW47XG5cblx0LyoqIFRoZSBsaW5lYXIgZGFtcGluZyBjb2VmZmljaWVudCBvZiB0aGlzIHJpZ2lkLWJvZHkuKi9cblx0bGluZWFyRGFtcGluZz86IG51bWJlcjtcblxuXHQvKiogVGhlIGFuZ3VsYXIgZGFtcGluZyBjb2VmZmljaWVudCBvZiB0aGlzIHJpZ2lkLWJvZHkuKi9cblx0YW5ndWxhckRhbXBpbmc/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBpbml0aWFsIGxpbmVhciB2ZWxvY2l0eSBvZiB0aGlzIGJvZHkuXG5cdCAqIEBkZWZhdWx0VmFsdWUgWzAsMCwwXVxuXHQgKi9cblx0bGluZWFyVmVsb2NpdHk6IFZlY3RvcjNUdXBsZTtcblxuXHQvKipcblx0ICogVGhlIGluaXRpYWwgYW5ndWxhciB2ZWxvY2l0eSBvZiB0aGlzIGJvZHkuXG5cdCAqIEBkZWZhdWx0VmFsdWUgWzAsMCwwXVxuXHQgKi9cblx0YW5ndWxhclZlbG9jaXR5OiBWZWN0b3IzVHVwbGU7XG5cblx0LyoqXG5cdCAqIFRoZSBzY2FsaW5nIGZhY3RvciBhcHBsaWVkIHRvIHRoZSBncmF2aXR5IGFmZmVjdGluZyB0aGUgcmlnaWQtYm9keS5cblx0ICogQGRlZmF1bHRWYWx1ZSAxLjBcblx0ICovXG5cdGdyYXZpdHlTY2FsZTogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgZG9taW5hbmNlIGdyb3VwIG9mIHRoaXMgUmlnaWRCb2R5LiBJZiBhIHJpZ2lkIGJvZHkgaGFzIGEgaGlnaGVyIGRvbWlhbmNlIGdyb3VwLFxuXHQgKiBvbiBjb2xsaXNpb24gaXQgd2lsbCBiZSBpbW11bmUgdG8gZm9yY2VzIG9yaWdpbmF0aW5nIGZyb20gdGhlIG90aGVyIGJvZGllcy5cblx0ICogaHR0cHM6Ly9yYXBpZXIucnMvZG9jcy91c2VyX2d1aWRlcy9qYXZhc2NyaXB0L3JpZ2lkX2JvZGllcyNkb21pbmFuY2Vcblx0ICogRGVmYXVsdDogMFxuXHQgKi9cblx0ZG9taW5hbmNlR3JvdXA6IG51bWJlcjtcblxuXHQvKipcblx0ICogV2hldGhlciBvciBub3QgQ29udGlub3VzIENvbGxpc2lvbiBEZXRlY3Rpb24gaXMgZW5hYmxlZCBmb3IgdGhpcyByaWdpZC1ib2R5LlxuXHQgKiBodHRwczovL3JhcGllci5ycy9kb2NzL3VzZXJfZ3VpZGVzL2phdmFzY3JpcHQvcmlnaWRfYm9kaWVzI2NvbnRpbnVvdXMtY29sbGlzaW9uLWRldGVjdGlvblxuXHQgKiBAZGVmYXVsdFZhbHVlIGZhbHNlXG5cdCAqL1xuXHRjY2Q6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFRoZSBtYXhpbXVtIHByZWRpY3Rpb24gZGlzdGFuY2UgU29mdCBDb250aW51b3VzIENvbGxpc2lvbi1EZXRlY3Rpb24uXG5cdCAqXG5cdCAqIFdoZW4gc2V0IHRvIDAsIHNvZnQtQ0NEIGlzIGRpc2FibGVkLlxuXHQgKlxuXHQgKiBTb2Z0LUNDRCBoZWxwcyBwcmV2ZW50IHR1bm5lbGluZyBlc3BlY2lhbGx5IG9mIHNsb3ctYnV0LXRoaW4gdG8gbW9kZXJhdGVseSBmYXN0IG9iamVjdHMuXG5cdCAqIFRoZSBzb2Z0IENDRCBwcmVkaWN0aW9uIGRpc3RhbmNlIGluZGljYXRlcyBob3cgZmFyIGluIHRoZSBvYmplY3TigJlzIHBhdGggdGhlIENDRCBhbGdvcml0aG0gaXMgYWxsb3dlZCB0byBpbnNwZWN0LlxuXHQgKiBMYXJnZSB2YWx1ZXMgY2FuIGltcGFjdCBwZXJmb3JtYW5jZSBiYWRseSBieSBpbmNyZWFzaW5nIHRoZSB3b3JrIG5lZWRlZCBmcm9tIHRoZSBicm9hZC1waGFzZS5cblx0ICpcblx0ICogSXQgaXMgYSBnZW5lcmFsbHkgY2hlYXBlciB2YXJpYW50IG9mIHJlZ3VsYXIgQ0NEIHNpbmNlIGl0IHJlbGllcyBvbiBwcmVkaWN0aXZlIGNvbnN0cmFpbnRzIGluc3RlYWQgb2Ygc2hhcGUtY2FzdCBhbmQgc3Vic3RlcHMuXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgMFxuXHQgKi9cblx0c29mdENjZFByZWRpY3Rpb246IG51bWJlcjtcblxuXHQvKipcblx0ICogSW5pdGlhbCBwb3NpdGlvbiBvZiB0aGUgUmlnaWRCb2R5XG5cdCAqL1xuXHRwb3NpdGlvbj86IE5ndE9iamVjdDNEWydwb3NpdGlvbiddO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsIHJvdGF0aW9uIG9mIHRoZSBSaWdpZEJvZHlcblx0ICovXG5cdHJvdGF0aW9uPzogTmd0T2JqZWN0M0RbJ3JvdGF0aW9uJ107XG5cblx0LyoqXG5cdCAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgY29sbGlkZXJzIGJhc2VkIG9uIG1lc2hlcyBpbnNpZGUgdGhpc1xuXHQgKiByaWdpZCBib2R5LlxuXHQgKlxuXHQgKiBZb3UgY2FuIGNoYW5nZSB0aGUgZGVmYXVsdCBzZXR0aW5nIGdsb2JhbGx5IGJ5IHNldHRpbmcgdGhlIGNvbGxpZGVyc1xuXHQgKiBwcm9wIG9uIHRoZSA8UGh5c2ljcyAvPiBjb21wb25lbnQuXG5cdCAqXG5cdCAqIFNldHRpbmcgdGhpcyB0byBmYWxzZSB3aWxsIGRpc2FibGUgYXV0b21hdGljIGNvbGxpZGVycy5cblx0ICovXG5cdGNvbGxpZGVycz86IE5ndHJSaWdpZEJvZHlBdXRvQ29sbGlkZXIgfCBmYWxzZTtcblxuXHQvKipcblx0ICogU2V0IHRoZSBmcmljdGlvbiBvZiBhdXRvLWdlbmVyYXRlZCBjb2xsaWRlcnMuXG5cdCAqIFRoaXMgZG9lcyBub3QgYWZmZWN0IGFueSBub24tYXV0b21hdGljIGNoaWxkIGNvbGxpZGVyLWNvbXBvbmVudHMuXG5cdCAqL1xuXHRmcmljdGlvbj86IG51bWJlcjtcblxuXHQvKipcblx0ICogU2V0IHRoZSByZXN0aXR1dGlvbiAoYm91bmNpbmVzcykgb2YgYXV0by1nZW5lcmF0ZWQgY29sbGlkZXJzLlxuXHQgKiBUaGlzIGRvZXMgbm90IGFmZmVjdCBhbnkgbm9uLWF1dG9tYXRpYyBjaGlsZCBjb2xsaWRlci1jb21wb25lbnRzLlxuXHQgKi9cblx0cmVzdGl0dXRpb24/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIHNvbHZlciBpdGVyYXRpb25zIHRoYXQgd2lsbCBiZSBydW4gZm9yIHRoaXNcblx0ICogcmlnaWQtYm9keSBhbmQgZXZlcnl0aGluZyB0aGF0IGludGVyYWN0cyB3aXRoIGl0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHlcblx0ICogdGhyb3VnaCBjb250YWN0cyBvciBqb2ludHMuXG5cdCAqXG5cdCAqIENvbXBhcmVkIHRvIGluY3JlYXNpbmcgdGhlIGdsb2JhbCBgV29ybGQubnVtU29sdmVySXRlcmF0aW9uYCwgc2V0dGluZyB0aGlzXG5cdCAqIHZhbHVlIGxldHMgeW91IGluY3JlYXNlIGFjY3VyYWN5IG9uIG9ubHkgYSBzdWJzZXQgb2YgdGhlIHNjZW5lLCByZXN1bHRpbmcgaW4gcmVkdWNlZFxuXHQgKiBwZXJmb3JtYW5jZSBsb3NzLlxuXHQgKi9cblx0YWRkaXRpb25hbFNvbHZlckl0ZXJhdGlvbnM/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0IGNvbGxpc2lvbiBncm91cHMgYml0bWFzayBmb3IgYWxsIGNvbGxpZGVycyBpbiB0aGlzIHJpZ2lkIGJvZHkuXG5cdCAqIENhbiBiZSBjdXN0b21pemVkIHBlci1jb2xsaWRlci5cblx0ICovXG5cdGNvbGxpc2lvbkdyb3Vwcz86IEludGVyYWN0aW9uR3JvdXBzO1xuXG5cdC8qKlxuXHQgKiBUaGUgZGVmYXVsdCBzb2x2ZXIgZ3JvdXBzIGJpdG1hc2sgZm9yIGFsbCBjb2xsaWRlcnMgaW4gdGhpcyByaWdpZCBib2R5LlxuXHQgKiBDYW4gYmUgY3VzdG9taXplZCBwZXItY29sbGlkZXIuXG5cdCAqL1xuXHRzb2x2ZXJHcm91cHM/OiBJbnRlcmFjdGlvbkdyb3VwcztcblxuXHQvKipcblx0ICogVGhlIGRlZmF1bHQgYWN0aXZlIGNvbGxpc2lvbiB0eXBlcyBmb3IgYWxsIGNvbGxpZGVycyBpbiB0aGlzIHJpZ2lkIGJvZHkuXG5cdCAqIENhbiBiZSBjdXN0b21pemVkIHBlci1jb2xsaWRlci5cblx0ICpcblx0ICogVXNlIGBBY3RpdmVDb2xsaXNpb25UeXBlc2AgdG8gc3BlY2lmeSB3aGljaCBjb2xsaXNpb24gdHlwZXMgc2hvdWxkIGJlIGFjdGl2ZSBmb3IgdGhpcyBjb2xsaWRlci5cblx0ICpcblx0ICogQHNlZSBodHRwczovL3JhcGllci5ycy9qYXZhc2NyaXB0M2QvY2xhc3Nlcy9Db2xsaWRlci5odG1sI3NldEFjdGl2ZUNvbGxpc2lvblR5cGVzXG5cdCAqIEBzZWUgaHR0cHM6Ly9yYXBpZXIucnMvamF2YXNjcmlwdDNkL2VudW1zL0FjdGl2ZUNvbGxpc2lvblR5cGVzLmh0bWxcblx0ICovXG5cdGFjdGl2ZUNvbGxpc2lvblR5cGVzPzogQWN0aXZlQ29sbGlzaW9uVHlwZXM7XG5cblx0LyoqXG5cdCAqIExvY2tzIGFsbCByb3RhdGlvbnMgdGhhdCB3b3VsZCBoYXZlIHJlc3VsdGVkIGZyb20gZm9yY2VzIG9uIHRoZSBjcmVhdGVkIHJpZ2lkLWJvZHkuXG5cdCAqL1xuXHRsb2NrUm90YXRpb25zPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogTG9ja3MgYWxsIHRyYW5zbGF0aW9ucyB0aGF0IHdvdWxkIGhhdmUgcmVzdWx0ZWQgZnJvbSBmb3JjZXMgb24gdGhlIGNyZWF0ZWQgcmlnaWQtYm9keS5cblx0ICovXG5cdGxvY2tUcmFuc2xhdGlvbnM/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBBbGxvdyByb3RhdGlvbiBvZiB0aGlzIHJpZ2lkLWJvZHkgb25seSBhbG9uZyBzcGVjaWZpYyBheGVzLlxuXHQgKi9cblx0ZW5hYmxlZFJvdGF0aW9ucz86IFt4OiBib29sZWFuLCB5OiBib29sZWFuLCB6OiBib29sZWFuXTtcblxuXHQvKipcblx0ICogQWxsb3cgdHJhbnNsYXRpb24gb2YgdGhpcyByaWdpZC1ib2R5IG9ubHkgYWxvbmcgc3BlY2lmaWMgYXhlcy5cblx0ICovXG5cdGVuYWJsZWRUcmFuc2xhdGlvbnM/OiBbeDogYm9vbGVhbiwgeTogYm9vbGVhbiwgejogYm9vbGVhbl07XG5cblx0LyoqXG5cdCAqIFBhc3NlZCBkb3duIHRvIHRoZSBvYmplY3QzZCByZXByZXNlbnRpbmcgdGhpcyBjb2xsaWRlci5cblx0ICovXG5cdHVzZXJEYXRhPzogTmd0T2JqZWN0M0RbJ3VzZXJEYXRhJ107XG5cblx0LyoqXG5cdCAqIEluY2x1ZGUgaW52aXNpYmxlIG9iamVjdHMgb24gdGhlIGNvbGxpZGVyIGNyZWF0aW9uIGVzdGltYXRpb24uXG5cdCAqL1xuXHRpbmNsdWRlSW52aXNpYmxlPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogVHJhbnNmb3JtIHRoZSBSaWdpZEJvZHlTdGF0ZVxuXHQgKiBAaW50ZXJuYWwgRG8gbm90IHVzZS4gVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBJbnN0YW5jZWRSaWdpZEJvZGllcyB0byBhbHRlciB0aGUgUmlnaWRCb2R5IFN0YXRlXG5cdCAqL1xuXHR0cmFuc2Zvcm1TdGF0ZT86IChzdGF0ZTogTmd0clJpZ2lkQm9keVN0YXRlKSA9PiBOZ3RyUmlnaWRCb2R5U3RhdGU7XG59XG5cbmV4cG9ydCB0eXBlIE5ndHJDdWJvaWRBcmdzID0gW2hhbGZXaWR0aDogbnVtYmVyLCBoYWxmSGVpZ2h0OiBudW1iZXIsIGhhbGZEZXB0aDogbnVtYmVyXTtcbmV4cG9ydCB0eXBlIE5ndHJCYWxsQXJncyA9IFtyYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyQ2Fwc3VsZUFyZ3MgPSBbaGFsZkhlaWdodDogbnVtYmVyLCByYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyQ29udmV4SHVsbEFyZ3MgPSBbdmVydGljZXM6IEFycmF5TGlrZTxudW1iZXI+XTtcbmV4cG9ydCB0eXBlIE5ndHJIZWlnaHRmaWVsZEFyZ3MgPSBbXG5cdHdpZHRoOiBudW1iZXIsXG5cdGhlaWdodDogbnVtYmVyLFxuXHRoZWlnaHRzOiBudW1iZXJbXSxcblx0c2NhbGU6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9LFxuXTtcbmV4cG9ydCB0eXBlIE5ndHJUcmltZXNoQXJncyA9IFt2ZXJ0aWNlczogQXJyYXlMaWtlPG51bWJlcj4sIGluZGljZXM6IEFycmF5TGlrZTxudW1iZXI+XTtcbmV4cG9ydCB0eXBlIE5ndHJQb2x5bGluZUFyZ3MgPSBbdmVydGljZXM6IEZsb2F0MzJBcnJheSwgaW5kaWNlczogVWludDMyQXJyYXldO1xuZXhwb3J0IHR5cGUgTmd0clJvdW5kQ3Vib2lkQXJncyA9IFtoYWxmV2lkdGg6IG51bWJlciwgaGFsZkhlaWdodDogbnVtYmVyLCBoYWxmRGVwdGg6IG51bWJlciwgYm9yZGVyUmFkaXVzOiBudW1iZXJdO1xuZXhwb3J0IHR5cGUgTmd0ckN5bGluZGVyQXJncyA9IFtoYWxmSGVpZ2h0OiBudW1iZXIsIHJhZGl1czogbnVtYmVyXTtcbmV4cG9ydCB0eXBlIE5ndHJSb3VuZEN5bGluZGVyQXJncyA9IFtoYWxmSGVpZ2h0OiBudW1iZXIsIHJhZGl1czogbnVtYmVyLCBib3JkZXJSYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyQ29uZUFyZ3MgPSBbaGFsZkhlaWdodDogbnVtYmVyLCByYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyUm91bmRDb25lQXJncyA9IFtoYWxmSGVpZ2h0OiBudW1iZXIsIHJhZGl1czogbnVtYmVyLCBib3JkZXJSYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyQ29udmV4TWVzaEFyZ3MgPSBbdmVydGljZXM6IEFycmF5TGlrZTxudW1iZXI+LCBpbmRpY2VzOiBBcnJheUxpa2U8bnVtYmVyPl07XG5leHBvcnQgdHlwZSBOZ3RyUm91bmRDb252ZXhIdWxsQXJncyA9IFt2ZXJ0aWNlczogQXJyYXlMaWtlPG51bWJlcj4sIGluZGljZXM6IEFycmF5TGlrZTxudW1iZXI+LCBib3JkZXJSYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyUm91bmRDb252ZXhNZXNoQXJncyA9IFt2ZXJ0aWNlczogQXJyYXlMaWtlPG51bWJlcj4sIGluZGljZXM6IEFycmF5TGlrZTxudW1iZXI+LCBib3JkZXJSYWRpdXM6IG51bWJlcl07XG5cbi8vIEpvaW50c1xuZXhwb3J0IGludGVyZmFjZSBOZ3RyU3BoZXJpY2FsSm9pbnRQYXJhbXMge1xuXHRib2R5MUFuY2hvcjogTmd0VmVjdG9yMztcblx0Ym9keTJBbmNob3I6IE5ndFZlY3RvcjM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0ckZpeGVkSm9pbnRQYXJhbXMge1xuXHRib2R5MUFuY2hvcjogTmd0VmVjdG9yMztcblx0Ym9keTFMb2NhbEZyYW1lOiBOZ3RRdWF0ZXJuaW9uO1xuXHRib2R5MkFuY2hvcjogTmd0VmVjdG9yMztcblx0Ym9keTJMb2NhbEZyYW1lOiBOZ3RRdWF0ZXJuaW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJQcmlzbWF0aWNKb2ludFBhcmFtcyB7XG5cdGJvZHkxQW5jaG9yOiBOZ3RWZWN0b3IzO1xuXHRib2R5MkFuY2hvcjogTmd0VmVjdG9yMztcblx0YXhpczogTmd0VmVjdG9yMztcblx0bGltaXRzPzogW21pbjogbnVtYmVyLCBtYXg6IG51bWJlcl07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0clJldm9sdXRlSm9pbnRQYXJhbXMge1xuXHRib2R5MUFuY2hvcjogTmd0VmVjdG9yMztcblx0Ym9keTJBbmNob3I6IE5ndFZlY3RvcjM7XG5cdGF4aXM6IE5ndFZlY3RvcjM7XG5cdGxpbWl0cz86IFttaW46IG51bWJlciwgbWF4OiBudW1iZXJdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJSb3BlSm9pbnRQYXJhbXMge1xuXHRib2R5MUFuY2hvcjogTmd0VmVjdG9yMztcblx0Ym9keTJBbmNob3I6IE5ndFZlY3RvcjM7XG5cdGxlbmd0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJTcHJpbmdKb2ludFBhcmFtcyB7XG5cdGJvZHkxQW5jaG9yOiBOZ3RWZWN0b3IzO1xuXHRib2R5MkFuY2hvcjogTmd0VmVjdG9yMztcblx0cmVzdExlbmd0aDogbnVtYmVyO1xuXHRzdGlmZm5lc3M6IG51bWJlcjtcblx0ZGFtcGluZzogbnVtYmVyO1xufVxuIl19
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3JhcGllci9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRBY3RpdmVDb2xsaXNpb25UeXBlcyxcblx0Q29lZmZpY2llbnRDb21iaW5lUnVsZSxcblx0Q29sbGlkZXIsXG5cdENvbGxpZGVySGFuZGxlLFxuXHRJbnRlcmFjdGlvbkdyb3Vwcyxcblx0UmlnaWRCb2R5LFxuXHRSaWdpZEJvZHlIYW5kbGUsXG5cdFJvdGF0aW9uLFxuXHRUZW1wQ29udGFjdE1hbmlmb2xkLFxuXHRWZWN0b3IsXG5cdFdvcmxkLFxufSBmcm9tICdAZGltZm9yZ2UvcmFwaWVyM2QtY29tcGF0JztcbmltcG9ydCB7IE5ndE9iamVjdDNELCBOZ3RRdWF0ZXJuaW9uLCBOZ3RWZWN0b3IzIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBNYXRyaXg0LCBPYmplY3QzRCwgVmVjdG9yMywgVmVjdG9yM1R1cGxlIH0gZnJvbSAndGhyZWUnO1xuXG5leHBvcnQgdHlwZSBOZ3RyUmlnaWRCb2R5QXV0b0NvbGxpZGVyID0gJ2JhbGwnIHwgJ2N1Ym9pZCcgfCAnaHVsbCcgfCAndHJpbWVzaCcgfCBmYWxzZTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyUGh5c2ljc09wdGlvbnMge1xuXHQvKipcblx0ICogU2V0IHRoZSBncmF2aXR5IG9mIHRoZSBwaHlzaWNzIHdvcmxkXG5cdCAqIEBkZWZhdWx0VmFsdWUgWzAsIC05LjgxLCAwXVxuXHQgKi9cblx0Z3Jhdml0eTogVmVjdG9yM1R1cGxlO1xuXG5cdC8qKlxuXHQgKiBBbW91bnQgb2YgcGVuZXRyYXRpb24gdGhlIGVuZ2luZSB3b250IGF0dGVtcHQgdG8gY29ycmVjdFxuXHQgKiBAZGVmYXVsdFZhbHVlIDAuMDAxXG5cdCAqL1xuXHRhbGxvd2VkTGluZWFyRXJyb3I6IG51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIG51bWJlciBvZiBzb2x2ZXIgaXRlcmF0aW9ucyBydW4gYnkgdGhlIGNvbnN0cmFpbnRzIHNvbHZlciBmb3IgY2FsY3VsYXRpbmcgZm9yY2VzLlxuXHQgKiBUaGUgZ3JlYXRlciB0aGlzIHZhbHVlIGlzLCB0aGUgbW9zdCByaWdpZCBhbmQgcmVhbGlzdGljIHRoZSBwaHlzaWNzIHNpbXVsYXRpb24gd2lsbCBiZS5cblx0ICogSG93ZXZlciBhIGdyZWF0ZXIgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMgbW9yZSBjb21wdXRhdGlvbmFsbHkgaW50ZW5zaXZlLlxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIDRcblx0ICovXG5cdG51bVNvbHZlckl0ZXJhdGlvbnM6IG51bWJlcjtcblxuXHQvKipcblx0ICogTnVtYmVyIG9mIGFkZGl0aW9uIGZyaWN0aW9uIHJlc29sdXRpb24gaXRlcmF0aW9uIHJ1biBkdXJpbmcgdGhlIGxhc3Qgc29sdmVyIHN1Yi1zdGVwLlxuXHQgKiBUaGUgZ3JlYXRlciB0aGlzIHZhbHVlIGlzLCB0aGUgbW9zdCByZWFsaXN0aWMgZnJpY3Rpb24gd2lsbCBiZS5cblx0ICogSG93ZXZlciBhIGdyZWF0ZXIgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMgbW9yZSBjb21wdXRhdGlvbmFsbHkgaW50ZW5zaXZlLlxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIDRcblx0ICovXG5cdG51bUFkZGl0aW9uYWxGcmljdGlvbkl0ZXJhdGlvbnM6IG51bWJlcjtcblxuXHQvKipcblx0ICogTnVtYmVyIG9mIGludGVybmFsIFByb2plY3QgR2F1c3MgU2VpZGVsIChQR1MpIGl0ZXJhdGlvbnMgcnVuIGF0IGVhY2ggc29sdmVyIGl0ZXJhdGlvbi5cblx0ICogSW5jcmVhc2luZyB0aGlzIHBhcmFtZXRlciB3aWxsIGltcHJvdmUgc3RhYmlsaXR5IG9mIHRoZSBzaW11bGF0aW9uLiBJdCB3aWxsIGhhdmUgYSBsZXNzZXIgZWZmZWN0IHRoYW5cblx0ICogaW5jcmVhc2luZyBgbnVtU29sdmVySXRlcmF0aW9uc2AgYnV0IGlzIGFsc28gbGVzcyBjb21wdXRhdGlvbmFsbHkgZXhwZW5zaXZlLlxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIDFcblx0ICovXG5cdG51bUludGVybmFsUGdzSXRlcmF0aW9uczogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgbWF4aW1hbCBkaXN0YW5jZSBzZXBhcmF0aW5nIHR3byBvYmplY3RzIHRoYXQgd2lsbCBnZW5lcmF0ZSBwcmVkaWN0aXZlIGNvbnRhY3RzXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgMC4wMDJcblx0ICpcblx0ICovXG5cdHByZWRpY3Rpb25EaXN0YW5jZTogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBNaW5pbXVtIG51bWJlciBvZiBkeW5hbWljIGJvZGllcyBpbiBlYWNoIGFjdGl2ZSBpc2xhbmRcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSAxMjhcblx0ICovXG5cdG1pbklzbGFuZFNpemU6IG51bWJlcjtcblxuXHQvKipcblx0ICogTWF4aW11bSBudW1iZXIgb2Ygc3Vic3RlcHMgcGVyZm9ybWVkIGJ5IHRoZSBzb2x2ZXJcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSAxXG5cdCAqL1xuXHRtYXhDY2RTdWJzdGVwczogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RseSBhZmZlY3RzIHRoZSBlcnAgKEVycm9yIFJlZHVjdGlvbiBQYXJhbWV0ZXIpIHdoaWNoIGlzIHRoZSBwcm9wb3J0aW9uIChiZXR3ZWVuIDAgYW5kIDEpIG9mIHRoZSBwb3NpdGlvbmFsIGVycm9yIHRvIGJlIGNvcnJlY3RlZCBhdCBlYWNoIHRpbWUgc3RlcC5cblx0ICpcblx0ICogVGhlIGhpZ2hlciB0aGUgdmFsdWUsIHRoZSBtb3JlIHRoZSBwaHlzaWNzIGVuZ2luZSB3aWxsIHRyeSB0byBjb3JyZWN0IHRoZSBwb3NpdGlvbmFsIGVycm9yLlxuXHQgKlxuXHQgKiBUaGlzIHByb3BlcnR5IGlzIGN1cnJlbnRseSB1bmRvY3VtZW50ZWQgaW4gcmFwaWVyIGRvY3MuXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgMzBcblx0ICovXG5cdGNvbnRhY3ROYXR1cmFsRnJlcXVlbmN5OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBFcnJvciBSZWR1Y3Rpb24gUGFyYW1ldGVyIGluIGJldHdlZW4gMCBhbmQgMSwgaXMgdGhlIHByb3BvcnRpb24gb2YgdGhlIHBvc2l0aW9uYWwgZXJyb3IgdG8gYmUgY29ycmVjdGVkIGF0IGVhY2ggdGltZSBzdGVwLlxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIDAuOFxuXHQgKiBAZGVwcmVjYXRlZCBUaGlzIGlzIGEgbm9vcC4gVXNlIGBjb250YWN0TmF0dXJhbEZyZXF1ZW5jeWAgaW5zdGVhZFxuXHQgKiBAc2luY2UgMi42LjAgV2lsbCBiZSByZW1vdmVkIGluIDMuMC4wXG5cdCAqIEBzZWUge2NvbnRhY3ROYXR1cmFsRnJlcXVlbmN5fVxuXHQgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW1mb3JnZS9yYXBpZXIvcHVsbC82NTEgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY29udGFjdE5hdHVyYWxGcmVxdWVuY3lcblx0ICovXG5cdGVycDogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgYXBwcm94aW1hdGUgc2l6ZSBvZiBtb3N0IGR5bmFtaWMgb2JqZWN0cyBpbiB0aGUgc2NlbmUuXG5cdCAqXG5cdCAqIFRoaXMgdmFsdWUgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGVzdGltYXRlIHNvbWUgbGVuZ3RoLWJhc2VkIHRvbGVyYW5jZS5cblx0ICogVGhpcyB2YWx1ZSBjYW4gYmUgdW5kZXJzdG9vZCBhcyB0aGUgbnVtYmVyIG9mIHVuaXRzLXBlci1tZXRlciBpbiB5b3VyIHBoeXNpY2FsIHdvcmxkIGNvbXBhcmVkIHRvIGEgaHVtYW4tc2l6ZWQgd29ybGQgaW4gbWV0ZXIuXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgMVxuXHQgKi9cblx0bGVuZ3RoVW5pdDogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGJhc2UgYXV0b21hdGljIGNvbGxpZGVycyBmb3IgdGhpcyBwaHlzaWNzIHdvcmxkXG5cdCAqIEFsbCBNZXNoZXMgaW5zaWRlIFJpZ2lkQm9kaWVzIHdpbGwgZ2VuZXJhdGUgYSBjb2xsaWRlclxuXHQgKiBiYXNlZCBvbiB0aGlzIHZhbHVlLCBpZiBub3Qgb3ZlcnJpZGRlbi5cblx0ICovXG5cdGNvbGxpZGVycz86IE5ndHJSaWdpZEJvZHlBdXRvQ29sbGlkZXI7XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdGltZXN0ZXAgZm9yIHRoZSBzaW11bGF0aW9uLlxuXHQgKiBTZXR0aW5nIHRoaXMgdG8gYSBudW1iZXIgKGVnLiAxLzYwKSB3aWxsIHJ1biB0aGVcblx0ICogc2ltdWxhdGlvbiBhdCB0aGF0IGZyYW1lcmF0ZS4gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzZXQgdGhpcyB0b1xuXHQgKiBcInZhcnlcIiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2ltdWxhdGlvbiB0byBhbHdheXMgc3luY2hyb25pemUgd2l0aFxuXHQgKiB0aGUgY3VycmVudCBmcmFtZSBkZWx0YSB0aW1lcy5cblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSAxLzYwXG5cdCAqL1xuXHR0aW1lU3RlcDogbnVtYmVyIHwgJ3ZhcnknO1xuXG5cdC8qKlxuXHQgKiBQYXVzZSB0aGUgcGh5c2ljcyBzaW11bGF0aW9uXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgZmFsc2Vcblx0ICovXG5cdHBhdXNlZDogYm9vbGVhbjtcblxuXHQvKipcblx0ICogSW50ZXJwb2xhdGUgdGhlIHdvcmxkIHRyYW5zZm9ybSB1c2luZyB0aGUgZnJhbWUgZGVsdGEgdGltZXMuXG5cdCAqIEhhcyBubyBlZmZlY3QgaWYgdGltZVN0ZXAgaXMgc2V0IHRvIFwidmFyeVwiLlxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIHRydWVcblx0ICoqL1xuXHRpbnRlcnBvbGF0ZTogYm9vbGVhbjtcblxuXHQvKipcblx0ICogVGhlIHVwZGF0ZSBwcmlvcml0eSBhdCB3aGljaCB0aGUgcGh5c2ljcyBzaW11bGF0aW9uIHNob3VsZCBydW4uXG5cdCAqIE9ubHkgdXNlZCB3aGVuIGB1cGRhdGVMb29wYCBpcyBzZXQgdG8gXCJmb2xsb3dcIi5cblx0ICpcblx0ICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hcGkvaG9va3MjdGFraW5nLW92ZXItdGhlLXJlbmRlci1sb29wXG5cdCAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG5cdCAqL1xuXHR1cGRhdGVQcmlvcml0eT86IG51bWJlcjtcblxuXHQvKipcblx0ICogU2V0IHRoZSB1cGRhdGUgbG9vcCBzdHJhdGVneSBmb3IgdGhlIHBoeXNpY3Mgd29ybGQuXG5cdCAqXG5cdCAqIElmIHNldCB0byBcImZvbGxvd1wiLCB0aGUgcGh5c2ljcyB3b3JsZCB3aWxsIGJlIHN0ZXBwZWRcblx0ICogaW4gYSBgdXNlRnJhbWVgIGNhbGxiYWNrLCBtYW5hZ2VkIGJ5IEByZWFjdC10aHJlZS9maWJlci5cblx0ICogWW91IGNhbiB1c2UgYHVwZGF0ZVByaW9yaXR5YCBwcm9wIHRvIG1hbmFnZSB0aGUgc2NoZWR1bGluZy5cblx0ICpcblx0ICogSWYgc2V0IHRvIFwiaW5kZXBlbmRlbnRcIiwgdGhlIHBoeXNpY3Mgd29ybGQgd2lsbCBiZSBzdGVwcGVkXG5cdCAqIGluIGEgc2VwYXJhdGUgbG9vcCwgbm90IHRpZWQgdG8gdGhlIHJlbmRlciBsb29wLlxuXHQgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHVzaW5nIHRoZSBcImRlbWFuZFwiIGBmcmFtZWxvb3BgIHN0cmF0ZWd5IGZvciB0aGVcblx0ICogQHJlYWN0LXRocmVlL2ZpYmVyIGA8Q2FudmFzIC8+YC5cblx0ICpcblx0ICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hZHZhbmNlZC9zY2FsaW5nLXBlcmZvcm1hbmNlI29uLWRlbWFuZC1yZW5kZXJpbmdcblx0ICogQGRlZmF1bHRWYWx1ZSBcImZvbGxvd1wiXG5cdCAqL1xuXHR1cGRhdGVMb29wOiAnZm9sbG93JyB8ICdpbmRlcGVuZGVudCc7XG5cblx0LyoqXG5cdCAqIEVuYWJsZSBkZWJ1ZyByZW5kZXJpbmcgb2YgdGhlIHBoeXNpY3Mgd29ybGQuXG5cdCAqIEBkZWZhdWx0VmFsdWUgZmFsc2Vcblx0ICovXG5cdGRlYnVnOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJSaWdpZEJvZHlTdGF0ZSB7XG5cdG1lc2hUeXBlOiAnaW5zdGFuY2VkTWVzaCcgfCAnbWVzaCc7XG5cdHJpZ2lkQm9keTogUmlnaWRCb2R5O1xuXHRvYmplY3Q6IE9iamVjdDNEO1xuXHRpbnZlcnRlZFdvcmxkTWF0cml4OiBNYXRyaXg0O1xuXHRzZXRNYXRyaXg6IChtYXRyaXg6IE1hdHJpeDQpID0+IHZvaWQ7XG5cdGdldE1hdHJpeDogKG1hdHJpeDogTWF0cml4NCkgPT4gTWF0cml4NDtcblx0LyoqXG5cdCAqIFJlcXVpcmVkIGZvciBpbnN0YW5jZWQgcmlnaWQgYm9kaWVzLlxuXHQgKi9cblx0c2NhbGU6IFZlY3RvcjM7XG5cdGlzU2xlZXBpbmc6IGJvb2xlYW47XG59XG5leHBvcnQgdHlwZSBOZ3RyUmlnaWRCb2R5U3RhdGVNYXAgPSBNYXA8UmlnaWRCb2R5WydoYW5kbGUnXSwgTmd0clJpZ2lkQm9keVN0YXRlPjtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlkZXJTdGF0ZSB7XG5cdGNvbGxpZGVyOiBDb2xsaWRlcjtcblx0b2JqZWN0OiBPYmplY3QzRDtcblxuXHQvKipcblx0ICogVGhlIHBhcmVudCBvZiB3aGljaCB0aGlzIGNvbGxpZGVyIG5lZWRzIHRvIGJhc2UgaXRzXG5cdCAqIHdvcmxkIHBvc2l0aW9uIG9uLCBjYW4gYmUgZW1wdHlcblx0ICovXG5cdHdvcmxkUGFyZW50PzogT2JqZWN0M0Q7XG59XG5leHBvcnQgdHlwZSBOZ3RyQ29sbGlkZXJTdGF0ZU1hcCA9IE1hcDxDb2xsaWRlclsnaGFuZGxlJ10sIE5ndHJDb2xsaWRlclN0YXRlPjtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlzaW9uVGFyZ2V0IHtcblx0cmlnaWRCb2R5PzogUmlnaWRCb2R5O1xuXHRjb2xsaWRlcjogQ29sbGlkZXI7XG5cdHJpZ2lkQm9keU9iamVjdD86IE9iamVjdDNEO1xuXHRjb2xsaWRlck9iamVjdD86IE9iamVjdDNEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJDb2xsaXNpb25QYXlsb2FkIHtcblx0LyoqIHRoZSBvYmplY3QgZmlyaW5nIHRoZSBldmVudCAqL1xuXHR0YXJnZXQ6IE5ndHJDb2xsaXNpb25UYXJnZXQ7XG5cdC8qKiB0aGUgb3RoZXIgb2JqZWN0IGludm9sdmVkIGluIHRoZSBldmVudCAqL1xuXHRvdGhlcjogTmd0ckNvbGxpc2lvblRhcmdldDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlzaW9uRW50ZXJQYXlsb2FkIGV4dGVuZHMgTmd0ckNvbGxpc2lvblBheWxvYWQge1xuXHRtYW5pZm9sZDogVGVtcENvbnRhY3RNYW5pZm9sZDtcblx0ZmxpcHBlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlzaW9uRXhpdFBheWxvYWQgZXh0ZW5kcyBOZ3RyQ29sbGlzaW9uUGF5bG9hZCB7fVxuZXhwb3J0IGludGVyZmFjZSBOZ3RySW50ZXJzZWN0aW9uRW50ZXJQYXlsb2FkIGV4dGVuZHMgTmd0ckNvbGxpc2lvblBheWxvYWQge31cbmV4cG9ydCBpbnRlcmZhY2UgTmd0ckludGVyc2VjdGlvbkV4aXRQYXlsb2FkIGV4dGVuZHMgTmd0ckNvbGxpc2lvblBheWxvYWQge31cbmV4cG9ydCBpbnRlcmZhY2UgTmd0ckNvbnRhY3RGb3JjZVBheWxvYWQgZXh0ZW5kcyBOZ3RyQ29sbGlzaW9uUGF5bG9hZCB7XG5cdHRvdGFsRm9yY2U6IFZlY3Rvcjtcblx0dG90YWxGb3JjZU1hZ25pdHVkZTogbnVtYmVyO1xuXHRtYXhGb3JjZURpcmVjdGlvbjogVmVjdG9yO1xuXHRtYXhGb3JjZU1hZ25pdHVkZTogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RyQ29sbGlzaW9uRW50ZXJIYW5kbGVyID0gKHBheWxvYWQ6IE5ndHJDb2xsaXNpb25FbnRlclBheWxvYWQpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBOZ3RyQ29sbGlzaW9uRXhpdEhhbmRsZXIgPSAocGF5bG9hZDogTmd0ckNvbGxpc2lvbkV4aXRQYXlsb2FkKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgTmd0ckludGVyc2VjdGlvbkVudGVySGFuZGxlciA9IChwYXlsb2FkOiBOZ3RySW50ZXJzZWN0aW9uRW50ZXJQYXlsb2FkKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgTmd0ckludGVyc2VjdGlvbkV4aXRIYW5kbGVyID0gKHBheWxvYWQ6IE5ndHJJbnRlcnNlY3Rpb25FeGl0UGF5bG9hZCkgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIE5ndHJDb250YWN0Rm9yY2VIYW5kbGVyID0gKHBheWxvYWQ6IE5ndHJDb250YWN0Rm9yY2VQYXlsb2FkKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJFdmVudE1hcFZhbHVlIHtcblx0b25TbGVlcD8oKTogdm9pZDtcblx0b25XYWtlPygpOiB2b2lkO1xuXHRvbkNvbGxpc2lvbkVudGVyPzogTmd0ckNvbGxpc2lvbkVudGVySGFuZGxlcjtcblx0b25Db2xsaXNpb25FeGl0PzogTmd0ckNvbGxpc2lvbkV4aXRIYW5kbGVyO1xuXHRvbkludGVyc2VjdGlvbkVudGVyPzogTmd0ckludGVyc2VjdGlvbkVudGVySGFuZGxlcjtcblx0b25JbnRlcnNlY3Rpb25FeGl0PzogTmd0ckludGVyc2VjdGlvbkV4aXRIYW5kbGVyO1xuXHRvbkNvbnRhY3RGb3JjZT86IE5ndHJDb250YWN0Rm9yY2VIYW5kbGVyO1xufVxuZXhwb3J0IHR5cGUgTmd0ckV2ZW50TWFwID0gTWFwPENvbGxpZGVySGFuZGxlIHwgUmlnaWRCb2R5SGFuZGxlLCBOZ3RyRXZlbnRNYXBWYWx1ZT47XG5cbmV4cG9ydCB0eXBlIE5ndHJXb3JsZFN0ZXBDYWxsYmFjayA9ICh3b3JsZDogV29ybGQpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBOZ3RyV29ybGRTdGVwQ2FsbGJhY2tTZXQgPSBTZXQ8Tmd0cldvcmxkU3RlcENhbGxiYWNrPjtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlzaW9uU291cmNlIHtcblx0Y29sbGlkZXI6IHtcblx0XHRvYmplY3Q6IENvbGxpZGVyO1xuXHRcdGV2ZW50cz86IE5ndHJFdmVudE1hcFZhbHVlO1xuXHRcdHN0YXRlPzogTmd0ckNvbGxpZGVyU3RhdGU7XG5cdH07XG5cdHJpZ2lkQm9keToge1xuXHRcdG9iamVjdD86IFJpZ2lkQm9keTtcblx0XHRldmVudHM/OiBOZ3RyRXZlbnRNYXBWYWx1ZTtcblx0XHRzdGF0ZT86IE5ndHJSaWdpZEJvZHlTdGF0ZTtcblx0fTtcbn1cblxuZXhwb3J0IHR5cGUgTmd0ckNvbGxpZGVyU2hhcGUgPVxuXHR8ICdjdWJvaWQnXG5cdHwgJ3RyaW1lc2gnXG5cdHwgJ2JhbGwnXG5cdHwgJ2NhcHN1bGUnXG5cdHwgJ2NvbnZleEh1bGwnXG5cdHwgJ2hlaWdodGZpZWxkJ1xuXHR8ICdwb2x5bGluZSdcblx0fCAncm91bmRDdWJvaWQnXG5cdHwgJ2N5bGluZGVyJ1xuXHR8ICdyb3VuZEN5bGluZGVyJ1xuXHR8ICdjb25lJ1xuXHR8ICdyb3VuZENvbmUnXG5cdHwgJ2NvbnZleE1lc2gnXG5cdHwgJ3JvdW5kQ29udmV4SHVsbCdcblx0fCAncm91bmRDb252ZXhNZXNoJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlkZXJPcHRpb25zIHtcblx0LyoqXG5cdCAqIFRoZSBvcHRpb25hbCBuYW1lIHBhc3NlZCB0byBUSFJFRSdzIE9iamVjdDNEXG5cdCAqL1xuXHRuYW1lPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBQcmluY2lwYWwgYW5ndWxhciBpbmVydGlhIG9mIHRoaXMgcmlnaWQgYm9keVxuXHQgKi9cblx0cHJpbmNpcGFsQW5ndWxhckluZXJ0aWE/OiBWZWN0b3IzVHVwbGU7XG5cblx0LyoqXG5cdCAqIFJlc3RpdHV0aW9uIGNvbnRyb2xzIGhvdyBlbGFzdGljIChha2EuIGJvdW5jeSkgYSBjb250YWN0IGlzLiBMZSBlbGFzdGljaXR5IG9mIGEgY29udGFjdCBpcyBjb250cm9sbGVkIGJ5IHRoZSByZXN0aXR1dGlvbiBjb2VmZmljaWVudFxuXHQgKi9cblx0cmVzdGl0dXRpb24/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFdoYXQgaGFwcGVucyB3aGVuIHR3byBib2RpZXMgbWVldC4gU2VlIGh0dHBzOi8vcmFwaWVyLnJzL2RvY3MvdXNlcl9ndWlkZXMvamF2YXNjcmlwdC9jb2xsaWRlcnMjZnJpY3Rpb24uXG5cdCAqL1xuXHRyZXN0aXR1dGlvbkNvbWJpbmVSdWxlPzogQ29lZmZpY2llbnRDb21iaW5lUnVsZTtcblxuXHQvKipcblx0ICogRnJpY3Rpb24gaXMgYSBmb3JjZSB0aGF0IG9wcG9zZXMgdGhlIHJlbGF0aXZlIHRhbmdlbnRpYWwgbW90aW9uIGJldHdlZW4gdHdvIHJpZ2lkLWJvZGllcyB3aXRoIGNvbGxpZGVycyBpbiBjb250YWN0LlxuXHQgKiBBIGZyaWN0aW9uIGNvZWZmaWNpZW50IG9mIDAgaW1wbGllcyBubyBmcmljdGlvbiBhdCBhbGwgKGNvbXBsZXRlbHkgc2xpZGluZyBjb250YWN0KSBhbmQgYSBjb2VmZmljaWVudFxuXHQgKiBncmVhdGVyIG9yIGVxdWFsIHRvIDEgaW1wbGllcyBhIHZlcnkgc3Ryb25nIGZyaWN0aW9uLiBWYWx1ZXMgZ3JlYXRlciB0aGFuIDEgYXJlIGFsbG93ZWQuXG5cdCAqL1xuXHRmcmljdGlvbj86IG51bWJlcjtcblxuXHQvKipcblx0ICogV2hhdCBoYXBwZW5zIHdoZW4gdHdvIGJvZGllcyBtZWV0LiBTZWUgaHR0cHM6Ly9yYXBpZXIucnMvZG9jcy91c2VyX2d1aWRlcy9qYXZhc2NyaXB0L2NvbGxpZGVycyNmcmljdGlvbi5cblx0ICovXG5cdGZyaWN0aW9uQ29tYmluZVJ1bGU/OiBDb2VmZmljaWVudENvbWJpbmVSdWxlO1xuXG5cdC8qKlxuXHQgKiBUaGUgYml0IG1hc2sgY29uZmlndXJpbmcgdGhlIGdyb3VwcyBhbmQgbWFzayBmb3IgY29sbGlzaW9uIGhhbmRsaW5nLlxuXHQgKi9cblx0Y29sbGlzaW9uR3JvdXBzPzogSW50ZXJhY3Rpb25Hcm91cHM7XG5cblx0LyoqXG5cdCAqIFRoZSBiaXQgbWFzayBjb25maWd1cmluZyB0aGUgZ3JvdXBzIGFuZCBtYXNrIGZvciBzb2x2ZXIgaGFuZGxpbmcuXG5cdCAqL1xuXHRzb2x2ZXJHcm91cHM/OiBJbnRlcmFjdGlvbkdyb3VwcztcblxuXHQvKipcblx0ICogVGhlIGNvbGxpc2lvbiB0eXBlcyBhY3RpdmUgZm9yIHRoaXMgY29sbGlkZXIuXG5cdCAqXG5cdCAqIFVzZSBgQWN0aXZlQ29sbGlzaW9uVHlwZXNgIHRvIHNwZWNpZnkgd2hpY2ggY29sbGlzaW9uIHR5cGVzIHNob3VsZCBiZSBhY3RpdmUgZm9yIHRoaXMgY29sbGlkZXIuXG5cdCAqXG5cdCAqIEBzZWUgaHR0cHM6Ly9yYXBpZXIucnMvamF2YXNjcmlwdDNkL2NsYXNzZXMvQ29sbGlkZXIuaHRtbCNzZXRBY3RpdmVDb2xsaXNpb25UeXBlc1xuXHQgKiBAc2VlIGh0dHBzOi8vcmFwaWVyLnJzL2phdmFzY3JpcHQzZC9lbnVtcy9BY3RpdmVDb2xsaXNpb25UeXBlcy5odG1sXG5cdCAqL1xuXHRhY3RpdmVDb2xsaXNpb25UeXBlcz86IEFjdGl2ZUNvbGxpc2lvblR5cGVzO1xuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB1bmlmb3JtIGRlbnNpdHkgb2YgdGhpcyBjb2xsaWRlci5cblx0ICogSWYgdGhpcyBpcyBzZXQsIG90aGVyIG1hc3MtcHJvcGVydGllcyBsaWtlIHRoZSBhbmd1bGFyIGluZXJ0aWEgdGVuc29yIGFyZSBjb21wdXRlZFxuXHQgKiBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIGNvbGxpZGVyJ3Mgc2hhcGUuXG5cdCAqIENhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIG1hc3Mgb3IgbWFzc1Byb3BlcnRpZXMgdmFsdWVzLlxuXHQgKiBNb3JlIGluZm8gaHR0cHM6Ly9yYXBpZXIucnMvZG9jcy91c2VyX2d1aWRlcy9qYXZhc2NyaXB0L2NvbGxpZGVycyNtYXNzLXByb3BlcnRpZXNcblx0ICovXG5cdGRlbnNpdHk/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBtYXNzIG9mIHRoaXMgY29sbGlkZXIuXG5cdCAqIEdlbmVyYWxseSwgaXQncyBub3QgcmVjb21tZW5kZWQgdG8gYWRqdXN0IHRoZSBtYXNzIHByb3BlcnRpZXMgYXMgaXQgY291bGQgbGVhZCB0b1xuXHQgKiB1bmV4cGVjdGVkIGJlaGF2aW9ycy5cblx0ICogQ2Fubm90IGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgZGVuc2l0eSBvciBtYXNzUHJvcGVydGllcyB2YWx1ZXMuXG5cdCAqIE1vcmUgaW5mbyBodHRwczovL3JhcGllci5ycy9kb2NzL3VzZXJfZ3VpZGVzL2phdmFzY3JpcHQvY29sbGlkZXJzI21hc3MtcHJvcGVydGllc1xuXHQgKi9cblx0bWFzcz86IG51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIG1hc3MgcHJvcGVydGllcyBvZiB0aGlzIHJpZ2lkIGJvZHkuXG5cdCAqIENhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIGRlbnNpdHkgb3IgbWFzcyB2YWx1ZXMuXG5cdCAqL1xuXHRtYXNzUHJvcGVydGllcz86IHtcblx0XHRtYXNzOiBudW1iZXI7XG5cdFx0Y2VudGVyT2ZNYXNzOiBWZWN0b3I7XG5cdFx0cHJpbmNpcGFsQW5ndWxhckluZXJ0aWE6IFZlY3Rvcjtcblx0XHRhbmd1bGFySW5lcnRpYUxvY2FsRnJhbWU6IFJvdGF0aW9uO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBUaGUgY29udGFjdCBza2luIG9mIHRoZSBjb2xsaWRlci5cblx0ICpcblx0ICogVGhlIGNvbnRhY3Qgc2tpbiBhY3RzIGFzIGlmIHRoZSBjb2xsaWRlciB3YXMgZW5sYXJnZWQgd2l0aCBhIHNraW4gb2Ygd2lkdGggY29udGFjdFNraW4gYXJvdW5kIGl0LCBrZWVwaW5nIG9iamVjdHMgZnVydGhlciBhcGFydCB3aGVuIGNvbGxpZGluZy5cblx0ICpcblx0ICogQSBub24temVybyBjb250YWN0IHNraW4gY2FuIGluY3JlYXNlIHBlcmZvcm1hbmNlLCBhbmQgaW4gc29tZSBjYXNlcywgc3RhYmlsaXR5LlxuXHQgKiBIb3dldmVyIGl0IGNyZWF0ZXMgYSBzbWFsbCBnYXAgYmV0d2VlbiBjb2xsaWRpbmcgb2JqZWN0IChlcXVhbCB0byB0aGUgc3VtIG9mIHRoZWlyIHNraW4pLlxuXHQgKiBJZiB0aGUgc2tpbiBpcyBzdWZmaWNpZW50bHkgc21hbGwsIHRoaXMgbWlnaHQgbm90IGJlIHZpc3VhbGx5IHNpZ25pZmljYW50IG9yIGNhbiBiZSBoaWRkZW4gYnkgdGhlIHJlbmRlcmluZyBhc3NldHMuXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgMFxuXHQgKi9cblx0Y29udGFjdFNraW46IG51bWJlcjtcblxuXHQvKipcblx0ICogU2V0cyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbGxpZGVyIGlzIGEgc2Vuc29yLlxuXHQgKi9cblx0c2Vuc29yPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgTmd0clJpZ2lkQm9keVR5cGUgPSAnZml4ZWQnIHwgJ2R5bmFtaWMnIHwgJ2tpbmVtYXRpY1Bvc2l0aW9uJyB8ICdraW5lbWF0aWNWZWxvY2l0eSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0clJpZ2lkQm9keU9wdGlvbnMgZXh0ZW5kcyBOZ3RyQ29sbGlkZXJPcHRpb25zIHtcblx0LyoqXG5cdCAqIFdoZXRoZXIgb3Igbm90IHRoaXMgYm9keSBjYW4gc2xlZXAuXG5cdCAqIEBkZWZhdWx0VmFsdWUgdHJ1ZVxuXHQgKi9cblx0Y2FuU2xlZXA6IGJvb2xlYW47XG5cblx0LyoqIFRoZSBsaW5lYXIgZGFtcGluZyBjb2VmZmljaWVudCBvZiB0aGlzIHJpZ2lkLWJvZHkuKi9cblx0bGluZWFyRGFtcGluZz86IG51bWJlcjtcblxuXHQvKiogVGhlIGFuZ3VsYXIgZGFtcGluZyBjb2VmZmljaWVudCBvZiB0aGlzIHJpZ2lkLWJvZHkuKi9cblx0YW5ndWxhckRhbXBpbmc/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBpbml0aWFsIGxpbmVhciB2ZWxvY2l0eSBvZiB0aGlzIGJvZHkuXG5cdCAqIEBkZWZhdWx0VmFsdWUgWzAsMCwwXVxuXHQgKi9cblx0bGluZWFyVmVsb2NpdHk6IFZlY3RvcjNUdXBsZTtcblxuXHQvKipcblx0ICogVGhlIGluaXRpYWwgYW5ndWxhciB2ZWxvY2l0eSBvZiB0aGlzIGJvZHkuXG5cdCAqIEBkZWZhdWx0VmFsdWUgWzAsMCwwXVxuXHQgKi9cblx0YW5ndWxhclZlbG9jaXR5OiBWZWN0b3IzVHVwbGU7XG5cblx0LyoqXG5cdCAqIFRoZSBzY2FsaW5nIGZhY3RvciBhcHBsaWVkIHRvIHRoZSBncmF2aXR5IGFmZmVjdGluZyB0aGUgcmlnaWQtYm9keS5cblx0ICogQGRlZmF1bHRWYWx1ZSAxLjBcblx0ICovXG5cdGdyYXZpdHlTY2FsZTogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgZG9taW5hbmNlIGdyb3VwIG9mIHRoaXMgUmlnaWRCb2R5LiBJZiBhIHJpZ2lkIGJvZHkgaGFzIGEgaGlnaGVyIGRvbWlhbmNlIGdyb3VwLFxuXHQgKiBvbiBjb2xsaXNpb24gaXQgd2lsbCBiZSBpbW11bmUgdG8gZm9yY2VzIG9yaWdpbmF0aW5nIGZyb20gdGhlIG90aGVyIGJvZGllcy5cblx0ICogaHR0cHM6Ly9yYXBpZXIucnMvZG9jcy91c2VyX2d1aWRlcy9qYXZhc2NyaXB0L3JpZ2lkX2JvZGllcyNkb21pbmFuY2Vcblx0ICogRGVmYXVsdDogMFxuXHQgKi9cblx0ZG9taW5hbmNlR3JvdXA6IG51bWJlcjtcblxuXHQvKipcblx0ICogV2hldGhlciBvciBub3QgQ29udGlub3VzIENvbGxpc2lvbiBEZXRlY3Rpb24gaXMgZW5hYmxlZCBmb3IgdGhpcyByaWdpZC1ib2R5LlxuXHQgKiBodHRwczovL3JhcGllci5ycy9kb2NzL3VzZXJfZ3VpZGVzL2phdmFzY3JpcHQvcmlnaWRfYm9kaWVzI2NvbnRpbnVvdXMtY29sbGlzaW9uLWRldGVjdGlvblxuXHQgKiBAZGVmYXVsdFZhbHVlIGZhbHNlXG5cdCAqL1xuXHRjY2Q6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFRoZSBtYXhpbXVtIHByZWRpY3Rpb24gZGlzdGFuY2UgU29mdCBDb250aW51b3VzIENvbGxpc2lvbi1EZXRlY3Rpb24uXG5cdCAqXG5cdCAqIFdoZW4gc2V0IHRvIDAsIHNvZnQtQ0NEIGlzIGRpc2FibGVkLlxuXHQgKlxuXHQgKiBTb2Z0LUNDRCBoZWxwcyBwcmV2ZW50IHR1bm5lbGluZyBlc3BlY2lhbGx5IG9mIHNsb3ctYnV0LXRoaW4gdG8gbW9kZXJhdGVseSBmYXN0IG9iamVjdHMuXG5cdCAqIFRoZSBzb2Z0IENDRCBwcmVkaWN0aW9uIGRpc3RhbmNlIGluZGljYXRlcyBob3cgZmFyIGluIHRoZSBvYmplY3TigJlzIHBhdGggdGhlIENDRCBhbGdvcml0aG0gaXMgYWxsb3dlZCB0byBpbnNwZWN0LlxuXHQgKiBMYXJnZSB2YWx1ZXMgY2FuIGltcGFjdCBwZXJmb3JtYW5jZSBiYWRseSBieSBpbmNyZWFzaW5nIHRoZSB3b3JrIG5lZWRlZCBmcm9tIHRoZSBicm9hZC1waGFzZS5cblx0ICpcblx0ICogSXQgaXMgYSBnZW5lcmFsbHkgY2hlYXBlciB2YXJpYW50IG9mIHJlZ3VsYXIgQ0NEIHNpbmNlIGl0IHJlbGllcyBvbiBwcmVkaWN0aXZlIGNvbnN0cmFpbnRzIGluc3RlYWQgb2Ygc2hhcGUtY2FzdCBhbmQgc3Vic3RlcHMuXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgMFxuXHQgKi9cblx0c29mdENjZFByZWRpY3Rpb246IG51bWJlcjtcblxuXHQvKipcblx0ICogSW5pdGlhbCBwb3NpdGlvbiBvZiB0aGUgUmlnaWRCb2R5XG5cdCAqL1xuXHRwb3NpdGlvbj86IE5ndE9iamVjdDNEWydwb3NpdGlvbiddO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsIHJvdGF0aW9uIG9mIHRoZSBSaWdpZEJvZHlcblx0ICovXG5cdHJvdGF0aW9uPzogTmd0T2JqZWN0M0RbJ3JvdGF0aW9uJ107XG5cblx0LyoqXG5cdCAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgY29sbGlkZXJzIGJhc2VkIG9uIG1lc2hlcyBpbnNpZGUgdGhpc1xuXHQgKiByaWdpZCBib2R5LlxuXHQgKlxuXHQgKiBZb3UgY2FuIGNoYW5nZSB0aGUgZGVmYXVsdCBzZXR0aW5nIGdsb2JhbGx5IGJ5IHNldHRpbmcgdGhlIGNvbGxpZGVyc1xuXHQgKiBwcm9wIG9uIHRoZSA8UGh5c2ljcyAvPiBjb21wb25lbnQuXG5cdCAqXG5cdCAqIFNldHRpbmcgdGhpcyB0byBmYWxzZSB3aWxsIGRpc2FibGUgYXV0b21hdGljIGNvbGxpZGVycy5cblx0ICovXG5cdGNvbGxpZGVycz86IE5ndHJSaWdpZEJvZHlBdXRvQ29sbGlkZXIgfCBmYWxzZTtcblxuXHQvKipcblx0ICogU2V0IHRoZSBmcmljdGlvbiBvZiBhdXRvLWdlbmVyYXRlZCBjb2xsaWRlcnMuXG5cdCAqIFRoaXMgZG9lcyBub3QgYWZmZWN0IGFueSBub24tYXV0b21hdGljIGNoaWxkIGNvbGxpZGVyLWNvbXBvbmVudHMuXG5cdCAqL1xuXHRmcmljdGlvbj86IG51bWJlcjtcblxuXHQvKipcblx0ICogU2V0IHRoZSByZXN0aXR1dGlvbiAoYm91bmNpbmVzcykgb2YgYXV0by1nZW5lcmF0ZWQgY29sbGlkZXJzLlxuXHQgKiBUaGlzIGRvZXMgbm90IGFmZmVjdCBhbnkgbm9uLWF1dG9tYXRpYyBjaGlsZCBjb2xsaWRlci1jb21wb25lbnRzLlxuXHQgKi9cblx0cmVzdGl0dXRpb24/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIHNvbHZlciBpdGVyYXRpb25zIHRoYXQgd2lsbCBiZSBydW4gZm9yIHRoaXNcblx0ICogcmlnaWQtYm9keSBhbmQgZXZlcnl0aGluZyB0aGF0IGludGVyYWN0cyB3aXRoIGl0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHlcblx0ICogdGhyb3VnaCBjb250YWN0cyBvciBqb2ludHMuXG5cdCAqXG5cdCAqIENvbXBhcmVkIHRvIGluY3JlYXNpbmcgdGhlIGdsb2JhbCBgV29ybGQubnVtU29sdmVySXRlcmF0aW9uYCwgc2V0dGluZyB0aGlzXG5cdCAqIHZhbHVlIGxldHMgeW91IGluY3JlYXNlIGFjY3VyYWN5IG9uIG9ubHkgYSBzdWJzZXQgb2YgdGhlIHNjZW5lLCByZXN1bHRpbmcgaW4gcmVkdWNlZFxuXHQgKiBwZXJmb3JtYW5jZSBsb3NzLlxuXHQgKi9cblx0YWRkaXRpb25hbFNvbHZlckl0ZXJhdGlvbnM/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0IGNvbGxpc2lvbiBncm91cHMgYml0bWFzayBmb3IgYWxsIGNvbGxpZGVycyBpbiB0aGlzIHJpZ2lkIGJvZHkuXG5cdCAqIENhbiBiZSBjdXN0b21pemVkIHBlci1jb2xsaWRlci5cblx0ICovXG5cdGNvbGxpc2lvbkdyb3Vwcz86IEludGVyYWN0aW9uR3JvdXBzO1xuXG5cdC8qKlxuXHQgKiBUaGUgZGVmYXVsdCBzb2x2ZXIgZ3JvdXBzIGJpdG1hc2sgZm9yIGFsbCBjb2xsaWRlcnMgaW4gdGhpcyByaWdpZCBib2R5LlxuXHQgKiBDYW4gYmUgY3VzdG9taXplZCBwZXItY29sbGlkZXIuXG5cdCAqL1xuXHRzb2x2ZXJHcm91cHM/OiBJbnRlcmFjdGlvbkdyb3VwcztcblxuXHQvKipcblx0ICogVGhlIGRlZmF1bHQgYWN0aXZlIGNvbGxpc2lvbiB0eXBlcyBmb3IgYWxsIGNvbGxpZGVycyBpbiB0aGlzIHJpZ2lkIGJvZHkuXG5cdCAqIENhbiBiZSBjdXN0b21pemVkIHBlci1jb2xsaWRlci5cblx0ICpcblx0ICogVXNlIGBBY3RpdmVDb2xsaXNpb25UeXBlc2AgdG8gc3BlY2lmeSB3aGljaCBjb2xsaXNpb24gdHlwZXMgc2hvdWxkIGJlIGFjdGl2ZSBmb3IgdGhpcyBjb2xsaWRlci5cblx0ICpcblx0ICogQHNlZSBodHRwczovL3JhcGllci5ycy9qYXZhc2NyaXB0M2QvY2xhc3Nlcy9Db2xsaWRlci5odG1sI3NldEFjdGl2ZUNvbGxpc2lvblR5cGVzXG5cdCAqIEBzZWUgaHR0cHM6Ly9yYXBpZXIucnMvamF2YXNjcmlwdDNkL2VudW1zL0FjdGl2ZUNvbGxpc2lvblR5cGVzLmh0bWxcblx0ICovXG5cdGFjdGl2ZUNvbGxpc2lvblR5cGVzPzogQWN0aXZlQ29sbGlzaW9uVHlwZXM7XG5cblx0LyoqXG5cdCAqIExvY2tzIGFsbCByb3RhdGlvbnMgdGhhdCB3b3VsZCBoYXZlIHJlc3VsdGVkIGZyb20gZm9yY2VzIG9uIHRoZSBjcmVhdGVkIHJpZ2lkLWJvZHkuXG5cdCAqL1xuXHRsb2NrUm90YXRpb25zPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogTG9ja3MgYWxsIHRyYW5zbGF0aW9ucyB0aGF0IHdvdWxkIGhhdmUgcmVzdWx0ZWQgZnJvbSBmb3JjZXMgb24gdGhlIGNyZWF0ZWQgcmlnaWQtYm9keS5cblx0ICovXG5cdGxvY2tUcmFuc2xhdGlvbnM/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBBbGxvdyByb3RhdGlvbiBvZiB0aGlzIHJpZ2lkLWJvZHkgb25seSBhbG9uZyBzcGVjaWZpYyBheGVzLlxuXHQgKi9cblx0ZW5hYmxlZFJvdGF0aW9ucz86IFt4OiBib29sZWFuLCB5OiBib29sZWFuLCB6OiBib29sZWFuXTtcblxuXHQvKipcblx0ICogQWxsb3cgdHJhbnNsYXRpb24gb2YgdGhpcyByaWdpZC1ib2R5IG9ubHkgYWxvbmcgc3BlY2lmaWMgYXhlcy5cblx0ICovXG5cdGVuYWJsZWRUcmFuc2xhdGlvbnM/OiBbeDogYm9vbGVhbiwgeTogYm9vbGVhbiwgejogYm9vbGVhbl07XG5cblx0LyoqXG5cdCAqIFBhc3NlZCBkb3duIHRvIHRoZSBvYmplY3QzZCByZXByZXNlbnRpbmcgdGhpcyBjb2xsaWRlci5cblx0ICovXG5cdHVzZXJEYXRhPzogTmd0T2JqZWN0M0RbJ3VzZXJEYXRhJ107XG5cblx0LyoqXG5cdCAqIEluY2x1ZGUgaW52aXNpYmxlIG9iamVjdHMgb24gdGhlIGNvbGxpZGVyIGNyZWF0aW9uIGVzdGltYXRpb24uXG5cdCAqL1xuXHRpbmNsdWRlSW52aXNpYmxlPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogVHJhbnNmb3JtIHRoZSBSaWdpZEJvZHlTdGF0ZVxuXHQgKiBAaW50ZXJuYWwgRG8gbm90IHVzZS4gVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBJbnN0YW5jZWRSaWdpZEJvZGllcyB0byBhbHRlciB0aGUgUmlnaWRCb2R5IFN0YXRlXG5cdCAqL1xuXHR0cmFuc2Zvcm1TdGF0ZT86IChzdGF0ZTogTmd0clJpZ2lkQm9keVN0YXRlKSA9PiBOZ3RyUmlnaWRCb2R5U3RhdGU7XG59XG5cbmV4cG9ydCB0eXBlIE5ndHJDdWJvaWRBcmdzID0gW2hhbGZXaWR0aDogbnVtYmVyLCBoYWxmSGVpZ2h0OiBudW1iZXIsIGhhbGZEZXB0aDogbnVtYmVyXTtcbmV4cG9ydCB0eXBlIE5ndHJCYWxsQXJncyA9IFtyYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyQ2Fwc3VsZUFyZ3MgPSBbaGFsZkhlaWdodDogbnVtYmVyLCByYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyQ29udmV4SHVsbEFyZ3MgPSBbdmVydGljZXM6IEFycmF5TGlrZTxudW1iZXI+XTtcbmV4cG9ydCB0eXBlIE5ndHJIZWlnaHRmaWVsZEFyZ3MgPSBbXG5cdHdpZHRoOiBudW1iZXIsXG5cdGhlaWdodDogbnVtYmVyLFxuXHRoZWlnaHRzOiBudW1iZXJbXSxcblx0c2NhbGU6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9LFxuXTtcbmV4cG9ydCB0eXBlIE5ndHJUcmltZXNoQXJncyA9IFt2ZXJ0aWNlczogQXJyYXlMaWtlPG51bWJlcj4sIGluZGljZXM6IEFycmF5TGlrZTxudW1iZXI+XTtcbmV4cG9ydCB0eXBlIE5ndHJQb2x5bGluZUFyZ3MgPSBbdmVydGljZXM6IEZsb2F0MzJBcnJheSwgaW5kaWNlczogVWludDMyQXJyYXldO1xuZXhwb3J0IHR5cGUgTmd0clJvdW5kQ3Vib2lkQXJncyA9IFtoYWxmV2lkdGg6IG51bWJlciwgaGFsZkhlaWdodDogbnVtYmVyLCBoYWxmRGVwdGg6IG51bWJlciwgYm9yZGVyUmFkaXVzOiBudW1iZXJdO1xuZXhwb3J0IHR5cGUgTmd0ckN5bGluZGVyQXJncyA9IFtoYWxmSGVpZ2h0OiBudW1iZXIsIHJhZGl1czogbnVtYmVyXTtcbmV4cG9ydCB0eXBlIE5ndHJSb3VuZEN5bGluZGVyQXJncyA9IFtoYWxmSGVpZ2h0OiBudW1iZXIsIHJhZGl1czogbnVtYmVyLCBib3JkZXJSYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyQ29uZUFyZ3MgPSBbaGFsZkhlaWdodDogbnVtYmVyLCByYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyUm91bmRDb25lQXJncyA9IFtoYWxmSGVpZ2h0OiBudW1iZXIsIHJhZGl1czogbnVtYmVyLCBib3JkZXJSYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyQ29udmV4TWVzaEFyZ3MgPSBbdmVydGljZXM6IEFycmF5TGlrZTxudW1iZXI+LCBpbmRpY2VzOiBBcnJheUxpa2U8bnVtYmVyPl07XG5leHBvcnQgdHlwZSBOZ3RyUm91bmRDb252ZXhIdWxsQXJncyA9IFt2ZXJ0aWNlczogQXJyYXlMaWtlPG51bWJlcj4sIGluZGljZXM6IEFycmF5TGlrZTxudW1iZXI+LCBib3JkZXJSYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyUm91bmRDb252ZXhNZXNoQXJncyA9IFt2ZXJ0aWNlczogQXJyYXlMaWtlPG51bWJlcj4sIGluZGljZXM6IEFycmF5TGlrZTxudW1iZXI+LCBib3JkZXJSYWRpdXM6IG51bWJlcl07XG5cbi8vIEpvaW50c1xuZXhwb3J0IGludGVyZmFjZSBOZ3RyU3BoZXJpY2FsSm9pbnRQYXJhbXMge1xuXHRib2R5MUFuY2hvcjogTmd0VmVjdG9yMztcblx0Ym9keTJBbmNob3I6IE5ndFZlY3RvcjM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0ckZpeGVkSm9pbnRQYXJhbXMge1xuXHRib2R5MUFuY2hvcjogTmd0VmVjdG9yMztcblx0Ym9keTFMb2NhbEZyYW1lOiBOZ3RRdWF0ZXJuaW9uO1xuXHRib2R5MkFuY2hvcjogTmd0VmVjdG9yMztcblx0Ym9keTJMb2NhbEZyYW1lOiBOZ3RRdWF0ZXJuaW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJQcmlzbWF0aWNKb2ludFBhcmFtcyB7XG5cdGJvZHkxQW5jaG9yOiBOZ3RWZWN0b3IzO1xuXHRib2R5MkFuY2hvcjogTmd0VmVjdG9yMztcblx0YXhpczogTmd0VmVjdG9yMztcblx0bGltaXRzPzogW21pbjogbnVtYmVyLCBtYXg6IG51bWJlcl07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0clJldm9sdXRlSm9pbnRQYXJhbXMge1xuXHRib2R5MUFuY2hvcjogTmd0VmVjdG9yMztcblx0Ym9keTJBbmNob3I6IE5ndFZlY3RvcjM7XG5cdGF4aXM6IE5ndFZlY3RvcjM7XG5cdGxpbWl0cz86IFttaW46IG51bWJlciwgbWF4OiBudW1iZXJdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJSb3BlSm9pbnRQYXJhbXMge1xuXHRib2R5MUFuY2hvcjogTmd0VmVjdG9yMztcblx0Ym9keTJBbmNob3I6IE5ndFZlY3RvcjM7XG5cdGxlbmd0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJTcHJpbmdKb2ludFBhcmFtcyB7XG5cdGJvZHkxQW5jaG9yOiBOZ3RWZWN0b3IzO1xuXHRib2R5MkFuY2hvcjogTmd0VmVjdG9yMztcblx0cmVzdExlbmd0aDogbnVtYmVyO1xuXHRzdGlmZm5lc3M6IG51bWJlcjtcblx0ZGFtcGluZzogbnVtYmVyO1xufVxuIl19
|
|
@@ -255,6 +255,7 @@ const defaultOptions$1 = {
|
|
|
255
255
|
predictionDistance: 0.002,
|
|
256
256
|
minIslandSize: 128,
|
|
257
257
|
maxCcdSubsteps: 1,
|
|
258
|
+
contactNaturalFrequency: 30,
|
|
258
259
|
erp: 0.8,
|
|
259
260
|
lengthUnit: 1,
|
|
260
261
|
colliders: 'cuboid',
|
|
@@ -288,7 +289,7 @@ class NgtrPhysics {
|
|
|
288
289
|
minIslandSize = pick(this.options, 'minIslandSize');
|
|
289
290
|
maxCcdSubsteps = pick(this.options, 'maxCcdSubsteps');
|
|
290
291
|
predictionDistance = pick(this.options, 'predictionDistance');
|
|
291
|
-
|
|
292
|
+
contactNaturalFrequency = pick(this.options, 'contactNaturalFrequency');
|
|
292
293
|
lengthUnit = pick(this.options, 'lengthUnit');
|
|
293
294
|
timeStep = pick(this.options, 'timeStep');
|
|
294
295
|
interpolate = pick(this.options, 'interpolate');
|
|
@@ -357,11 +358,7 @@ class NgtrPhysics {
|
|
|
357
358
|
world.proxy.integrationParameters.minIslandSize = this.minIslandSize();
|
|
358
359
|
world.proxy.integrationParameters.maxCcdSubsteps = this.maxCcdSubsteps();
|
|
359
360
|
world.proxy.integrationParameters.normalizedPredictionDistance = this.predictionDistance();
|
|
360
|
-
|
|
361
|
-
* NOTE: we don't know if this is the correct way to set for contact_natural_frequency or not.
|
|
362
|
-
* but at least, it gets the `contact_erp` value to be very close with setting `erp`
|
|
363
|
-
*/
|
|
364
|
-
world.proxy.integrationParameters.contact_natural_frequency = this.erp() * 1_000;
|
|
361
|
+
world.proxy.integrationParameters.contact_natural_frequency = this.contactNaturalFrequency();
|
|
365
362
|
world.proxy.lengthUnit = this.lengthUnit();
|
|
366
363
|
}
|
|
367
364
|
internalStep(delta) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-three-rapier.mjs","sources":["../../../../libs/rapier/src/lib/debug.ts","../../../../libs/rapier/src/lib/frame-stepper.ts","../../../../libs/rapier/src/lib/shared.ts","../../../../libs/rapier/src/lib/utils.ts","../../../../libs/rapier/src/lib/physics.ts","../../../../libs/rapier/src/lib/rigid-body.ts","../../../../libs/rapier/src/lib/colliders.ts","../../../../libs/rapier/src/lib/instanced-rigid-bodies.ts","../../../../libs/rapier/src/lib/joints.ts","../../../../libs/rapier/src/lib/mesh-collider.ts","../../../../libs/rapier/src/angular-three-rapier.ts"],"sourcesContent":["import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { World } from '@dimforge/rapier3d-compat';\nimport { extend, injectBeforeRender } from 'angular-three';\nimport { BufferAttribute, Group, LineBasicMaterial, LineSegments } from 'three';\n\n@Component({\n\tselector: 'ngtr-debug',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-group>\n\t\t\t<ngt-line-segments #lineSegments [frustumCulled]=\"false\">\n\t\t\t\t<ngt-line-basic-material color=\"white\" [vertexColors]=\"true\" />\n\t\t\t\t<ngt-buffer-geometry />\n\t\t\t</ngt-line-segments>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtrDebug {\n\tworld = input.required<World | undefined>();\n\n\tprivate lineSegmentsRef = viewChild.required<ElementRef<LineSegments>>('lineSegments');\n\n\tconstructor() {\n\t\textend({ Group, LineSegments, LineBasicMaterial, BufferAttribute });\n\n\t\tinjectBeforeRender(() => {\n\t\t\tconst [world, lineSegments] = [this.world(), this.lineSegmentsRef().nativeElement];\n\t\t\tif (!world || !lineSegments) return;\n\n\t\t\tconst buffers = world.debugRender();\n\n\t\t\tlineSegments.geometry.setAttribute('position', new BufferAttribute(buffers.vertices, 3));\n\t\t\tlineSegments.geometry.setAttribute('color', new BufferAttribute(buffers.colors, 4));\n\t\t});\n\t}\n}\n","import { Directive, effect, input } from '@angular/core';\nimport { injectStore } from 'angular-three';\nimport { NgtrPhysicsOptions } from './types';\n\n@Directive({ standalone: true, selector: 'ngtr-frame-stepper' })\nexport class NgtrFrameStepper {\n\tready = input(false);\n\tupdatePriority = input<number | undefined>(0);\n\tstepFn = input.required<(delta: number) => void>();\n\ttype = input.required<NgtrPhysicsOptions['updateLoop']>();\n\n\tconstructor() {\n\t\tconst store = injectStore();\n\n\t\teffect((onCleanup) => {\n\t\t\tconst ready = this.ready();\n\t\t\tif (!ready) return;\n\n\t\t\tconst [type, updatePriority, stepFn] = [this.type(), this.updatePriority(), this.stepFn()];\n\t\t\tif (type === 'follow') {\n\t\t\t\tconst cleanup = store.snapshot.internal.subscribe(\n\t\t\t\t\t({ delta }) => {\n\t\t\t\t\t\tstepFn(delta);\n\t\t\t\t\t},\n\t\t\t\t\tupdatePriority,\n\t\t\t\t\tstore,\n\t\t\t\t);\n\t\t\t\tonCleanup(() => cleanup());\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet lastFrame = 0;\n\t\t\tlet raf: ReturnType<typeof requestAnimationFrame> = 0;\n\t\t\tconst loop = () => {\n\t\t\t\tconst now = performance.now();\n\t\t\t\tconst delta = now - lastFrame;\n\t\t\t\traf = requestAnimationFrame(loop);\n\t\t\t\tstepFn(delta);\n\t\t\t\tlastFrame = now;\n\t\t\t};\n\n\t\t\traf = requestAnimationFrame(loop);\n\t\t\tonCleanup(() => cancelAnimationFrame(raf));\n\t\t});\n\t}\n}\n","import { Euler, Matrix4, Object3D, Quaternion, Vector3 } from 'three';\n\nexport const _quaternion = new Quaternion();\nexport const _euler = new Euler();\nexport const _vector3 = new Vector3();\nexport const _object3d = new Object3D();\nexport const _matrix4 = new Matrix4();\nexport const _position = new Vector3();\nexport const _rotation = new Quaternion();\nexport const _scale = new Vector3();\n","import { Quaternion as RapierQuaternion, Vector3 as RapierVector3 } from '@dimforge/rapier3d-compat';\nimport { NgtEuler, NgtQuaternion, NgtVector3 } from 'angular-three';\nimport { BufferGeometry, Euler, Mesh, Object3D, Vector3 } from 'three';\nimport { mergeVertices } from 'three-stdlib';\nimport { _matrix4, _position, _quaternion, _rotation, _scale } from './shared';\nimport { NgtrColliderOptions, NgtrColliderShape, NgtrRigidBodyAutoCollider, NgtrRigidBodyOptions } from './types';\n\n/**\n * Creates a proxy that will create a singleton instance of the given class\n * when a property is accessed, and not before.\n *\n * @returns A proxy and a reset function, so that the instance can created again\n */\nexport const createSingletonProxy = <\n\tSingletonClass extends object,\n\tCreationFn extends () => SingletonClass = () => SingletonClass,\n>(\n\t/**\n\t * A function that returns a new instance of the class\n\t */\n\tcreateInstance: CreationFn,\n): {\n\tproxy: SingletonClass;\n\treset: () => void;\n\tset: (newInstance: SingletonClass) => void;\n} => {\n\tlet instance: SingletonClass | undefined;\n\n\tconst handler: ProxyHandler<SingletonClass> = {\n\t\tget(target, prop) {\n\t\t\tif (!instance) {\n\t\t\t\tinstance = createInstance();\n\t\t\t}\n\t\t\treturn Reflect.get(instance!, prop);\n\t\t},\n\t\tset(target, prop, value) {\n\t\t\tif (!instance) {\n\t\t\t\tinstance = createInstance();\n\t\t\t}\n\t\t\treturn Reflect.set(instance!, prop, value);\n\t\t},\n\t};\n\n\tconst proxy = new Proxy({} as SingletonClass, handler) as SingletonClass;\n\n\tconst reset = () => {\n\t\tinstance = undefined;\n\t};\n\n\tconst set = (newInstance: SingletonClass) => {\n\t\tinstance = newInstance;\n\t};\n\n\t/**\n\t * Return the proxy and a reset function\n\t */\n\treturn { proxy, reset, set };\n};\n\nexport function rapierQuaternionToQuaternion({ x, y, z, w }: RapierQuaternion) {\n\treturn _quaternion.set(x, y, z, w);\n}\n\nexport function vector3ToRapierVector(v: NgtVector3) {\n\tif (Array.isArray(v)) {\n\t\treturn new RapierVector3(v[0], v[1], v[2]);\n\t}\n\n\tif (typeof v === 'number') {\n\t\treturn new RapierVector3(v, v, v);\n\t}\n\tconst vector = v as Vector3;\n\treturn new RapierVector3(vector.x, vector.y, vector.z);\n}\n\nexport function quaternionToRapierQuaternion(v: NgtQuaternion) {\n\tif (Array.isArray(v)) {\n\t\treturn new RapierQuaternion(v[0], v[1], v[2], v[3]);\n\t}\n\treturn new RapierQuaternion(v.x, v.y, v.z, v.w);\n}\n\nfunction isChildOfMeshCollider(child: Mesh) {\n\tlet flag = false;\n\tchild.traverseAncestors((a) => {\n\t\tif (a.userData['ngtRapierType'] === 'MeshCollider') flag = true;\n\t});\n\treturn flag;\n}\n\nconst autoColliderMap = {\n\tcuboid: 'cuboid',\n\tball: 'ball',\n\thull: 'convexHull',\n\ttrimesh: 'trimesh',\n};\n\nfunction getColliderArgsFromGeometry(\n\tgeometry: BufferGeometry,\n\tcolliders: NgtrRigidBodyAutoCollider,\n): { args: unknown[]; offset: Vector3 } {\n\tswitch (colliders) {\n\t\tcase 'cuboid': {\n\t\t\tgeometry.computeBoundingBox();\n\t\t\tconst { boundingBox } = geometry;\n\t\t\tconst size = boundingBox!.getSize(new Vector3());\n\t\t\treturn {\n\t\t\t\targs: [size.x / 2, size.y / 2, size.z / 2],\n\t\t\t\toffset: boundingBox!.getCenter(new Vector3()),\n\t\t\t};\n\t\t}\n\n\t\tcase 'ball': {\n\t\t\tgeometry.computeBoundingSphere();\n\t\t\tconst { boundingSphere } = geometry;\n\n\t\t\tconst radius = boundingSphere!.radius;\n\n\t\t\treturn {\n\t\t\t\targs: [radius],\n\t\t\t\toffset: boundingSphere!.center,\n\t\t\t};\n\t\t}\n\n\t\tcase 'trimesh': {\n\t\t\tconst clonedGeometry = geometry.index ? geometry.clone() : mergeVertices(geometry);\n\n\t\t\treturn {\n\t\t\t\targs: [clonedGeometry.attributes['position'].array as Float32Array, clonedGeometry.index?.array as Uint32Array],\n\t\t\t\toffset: new Vector3(),\n\t\t\t};\n\t\t}\n\n\t\tcase 'hull': {\n\t\t\tconst clonedGeometry = geometry.clone();\n\t\t\treturn {\n\t\t\t\targs: [clonedGeometry.attributes['position'].array as Float32Array],\n\t\t\t\toffset: new Vector3(),\n\t\t\t};\n\t\t}\n\t}\n\n\treturn { args: [], offset: new Vector3() };\n}\n\nexport function createColliderOptions(object: Object3D, options: NgtrRigidBodyOptions, ignoreMeshColliders = true) {\n\tconst childColliderOptions: {\n\t\tcolliderOptions: NgtrColliderOptions;\n\t\targs: unknown[];\n\t\tshape: NgtrColliderShape;\n\t\trotation: NgtEuler;\n\t\tposition: NgtVector3;\n\t\tscale: NgtVector3;\n\t}[] = [];\n\tobject.updateWorldMatrix(true, false);\n\tconst invertedParentMatrixWorld = object.matrixWorld.clone().invert();\n\n\tconst colliderFromChild = (child: Object3D) => {\n\t\tif ((child as Mesh).isMesh) {\n\t\t\tif (ignoreMeshColliders && isChildOfMeshCollider(child as Mesh)) return;\n\n\t\t\tconst worldScale = child.getWorldScale(_scale);\n\t\t\tconst shape = autoColliderMap[options.colliders || 'cuboid'] as NgtrColliderShape;\n\t\t\tchild.updateWorldMatrix(true, false);\n\t\t\t_matrix4.copy(child.matrixWorld).premultiply(invertedParentMatrixWorld).decompose(_position, _rotation, _scale);\n\n\t\t\tconst rotationEuler = new Euler().setFromQuaternion(_rotation, 'XYZ');\n\n\t\t\tconst { geometry } = child as Mesh;\n\t\t\tconst { args, offset } = getColliderArgsFromGeometry(geometry, options.colliders || 'cuboid');\n\t\t\tconst { mass, linearDamping, angularDamping, canSleep, ccd, gravityScale, softCcdPrediction, ...rest } = options;\n\n\t\t\tchildColliderOptions.push({\n\t\t\t\tcolliderOptions: rest,\n\t\t\t\targs,\n\t\t\t\tshape,\n\t\t\t\trotation: [rotationEuler.x, rotationEuler.y, rotationEuler.z],\n\t\t\t\tposition: [\n\t\t\t\t\t_position.x + offset.x * worldScale.x,\n\t\t\t\t\t_position.y + offset.y * worldScale.y,\n\t\t\t\t\t_position.z + offset.z * worldScale.z,\n\t\t\t\t],\n\t\t\t\tscale: [worldScale.x, worldScale.y, worldScale.z],\n\t\t\t});\n\t\t}\n\t};\n\n\tif (options.includeInvisible) {\n\t\tobject.traverse(colliderFromChild);\n\t} else {\n\t\tobject.traverseVisible(colliderFromChild);\n\t}\n\n\treturn childColliderOptions;\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tDirective,\n\teffect,\n\tinject,\n\tinput,\n\tsignal,\n\tTemplateRef,\n\tuntracked,\n} from '@angular/core';\nimport RAPIER, { ColliderHandle, EventQueue, Rotation, Vector, World } from '@dimforge/rapier3d-compat';\nimport { injectStore, pick, vector3 } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { MathUtils, Quaternion, Vector3 } from 'three';\nimport { NgtrDebug } from './debug';\nimport { NgtrFrameStepper } from './frame-stepper';\nimport { _matrix4, _position, _rotation, _scale } from './shared';\nimport {\n\tNgtrColliderStateMap,\n\tNgtrCollisionPayload,\n\tNgtrCollisionSource,\n\tNgtrEventMap,\n\tNgtrPhysicsOptions,\n\tNgtrRigidBodyStateMap,\n\tNgtrWorldStepCallbackSet,\n} from './types';\nimport { createSingletonProxy, rapierQuaternionToQuaternion } from './utils';\n\nconst defaultOptions: NgtrPhysicsOptions = {\n\tgravity: [0, -9.81, 0],\n\tallowedLinearError: 0.001,\n\tnumSolverIterations: 4,\n\tnumAdditionalFrictionIterations: 4,\n\tnumInternalPgsIterations: 1,\n\tpredictionDistance: 0.002,\n\tminIslandSize: 128,\n\tmaxCcdSubsteps: 1,\n\terp: 0.8,\n\tlengthUnit: 1,\n\tcolliders: 'cuboid',\n\tupdateLoop: 'follow',\n\tinterpolate: true,\n\tpaused: false,\n\ttimeStep: 1 / 60,\n\tdebug: false,\n};\n\n@Directive({ selector: 'ng-template[rapierFallback]', standalone: true })\nexport class NgtrPhysicsFallback {\n\tstatic ngTemplateContextGuard(_: NgtrPhysicsFallback, ctx: unknown): ctx is { error: string } {\n\t\treturn true;\n\t}\n}\n\n@Component({\n\tselector: 'ngtr-physics',\n\tstandalone: true,\n\ttemplate: `\n\t\t@if (rapierConstruct()) {\n\t\t\t@if (debug()) {\n\t\t\t\t<ngtr-debug [world]=\"worldSingleton()?.proxy\" />\n\t\t\t}\n\n\t\t\t<ngtr-frame-stepper\n\t\t\t\t[ready]=\"ready()\"\n\t\t\t\t[stepFn]=\"step.bind(this)\"\n\t\t\t\t[type]=\"updateLoop()\"\n\t\t\t\t[updatePriority]=\"updatePriority()\"\n\t\t\t/>\n\n\t\t\t<ng-container [ngTemplateOutlet]=\"content()\" />\n\t\t} @else if (rapierError() && !!fallbackContent()) {\n\t\t\t<ng-container [ngTemplateOutlet]=\"$any(fallbackContent())\" [ngTemplateOutletContext]=\"{ error: rapierError() }\" />\n\t\t}\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrDebug, NgtrFrameStepper, NgTemplateOutlet],\n})\nexport class NgtrPhysics {\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tcontent = contentChild.required(TemplateRef);\n\tfallbackContent = contentChild(NgtrPhysicsFallback);\n\n\tprotected updatePriority = pick(this.options, 'updatePriority');\n\tprotected updateLoop = pick(this.options, 'updateLoop');\n\n\tprivate numSolverIterations = pick(this.options, 'numSolverIterations');\n\tprivate numAdditionalFrictionIterations = pick(this.options, 'numAdditionalFrictionIterations');\n\tprivate numInternalPgsIterations = pick(this.options, 'numInternalPgsIterations');\n\tprivate allowedLinearError = pick(this.options, 'allowedLinearError');\n\tprivate minIslandSize = pick(this.options, 'minIslandSize');\n\tprivate maxCcdSubsteps = pick(this.options, 'maxCcdSubsteps');\n\tprivate predictionDistance = pick(this.options, 'predictionDistance');\n\tprivate erp = pick(this.options, 'erp');\n\tprivate lengthUnit = pick(this.options, 'lengthUnit');\n\tprivate timeStep = pick(this.options, 'timeStep');\n\tprivate interpolate = pick(this.options, 'interpolate');\n\n\tpaused = pick(this.options, 'paused');\n\tdebug = pick(this.options, 'debug');\n\tcolliders = pick(this.options, 'colliders');\n\n\tprivate gravity = vector3(this.options, 'gravity');\n\n\tprivate store = injectStore();\n\tprivate destroyRef = inject(DestroyRef);\n\n\tprotected rapierConstruct = signal<typeof RAPIER | null>(null);\n\tprotected rapierError = signal<string | null>(null);\n\trapier = this.rapierConstruct.asReadonly();\n\n\tready = computed(() => !!this.rapier());\n\tworldSingleton = computed(() => {\n\t\tconst rapier = this.rapier();\n\t\tif (!rapier) return null;\n\t\treturn createSingletonProxy<World>(() => new rapier.World(untracked(this.gravity)));\n\t});\n\n\trigidBodyStates: NgtrRigidBodyStateMap = new Map();\n\tcolliderStates: NgtrColliderStateMap = new Map();\n\trigidBodyEvents: NgtrEventMap = new Map();\n\tcolliderEvents: NgtrEventMap = new Map();\n\tprivate beforeStepCallbacks: NgtrWorldStepCallbackSet = new Set();\n\tprivate afterStepCallbacks: NgtrWorldStepCallbackSet = new Set();\n\n\tprivate eventQueue = computed(() => {\n\t\tconst rapier = this.rapier();\n\t\tif (!rapier) return null;\n\t\treturn new EventQueue(false);\n\t});\n\n\tprivate steppingState: {\n\t\taccumulator: number;\n\t\tpreviousState: Record<number, { position: Vector; rotation: Rotation }>;\n\t} = { accumulator: 0, previousState: {} };\n\n\tconstructor() {\n\t\timport('@dimforge/rapier3d-compat')\n\t\t\t.then((rapier) => rapier.init().then(() => rapier))\n\t\t\t.then(this.rapierConstruct.set.bind(this.rapierConstruct))\n\t\t\t.catch((err) => {\n\t\t\t\tconsole.error(`[NGT] Failed to load rapier3d-compat`, err);\n\t\t\t\tthis.rapierError.set(err?.message ?? err.toString());\n\t\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateWorldEffect();\n\t\t});\n\n\t\tthis.destroyRef.onDestroy(() => {\n\t\t\tconst world = this.worldSingleton();\n\t\t\tif (world) {\n\t\t\t\tworld.proxy.free();\n\t\t\t\tworld.reset();\n\t\t\t}\n\t\t});\n\t}\n\n\tstep(delta: number) {\n\t\tif (!this.paused()) {\n\t\t\tthis.internalStep(delta);\n\t\t}\n\t}\n\n\tprivate updateWorldEffect() {\n\t\tconst world = this.worldSingleton();\n\t\tif (!world) return;\n\n\t\tworld.proxy.gravity = this.gravity();\n\t\tworld.proxy.integrationParameters.numSolverIterations = this.numSolverIterations();\n\t\tworld.proxy.integrationParameters.numAdditionalFrictionIterations = this.numAdditionalFrictionIterations();\n\t\tworld.proxy.integrationParameters.numInternalPgsIterations = this.numInternalPgsIterations();\n\t\tworld.proxy.integrationParameters.normalizedAllowedLinearError = this.allowedLinearError();\n\t\tworld.proxy.integrationParameters.minIslandSize = this.minIslandSize();\n\t\tworld.proxy.integrationParameters.maxCcdSubsteps = this.maxCcdSubsteps();\n\t\tworld.proxy.integrationParameters.normalizedPredictionDistance = this.predictionDistance();\n\t\t/**\n\t\t * NOTE: we don't know if this is the correct way to set for contact_natural_frequency or not.\n\t\t * but at least, it gets the `contact_erp` value to be very close with setting `erp`\n\t\t */\n\t\tworld.proxy.integrationParameters.contact_natural_frequency = this.erp() * 1_000;\n\t\tworld.proxy.lengthUnit = this.lengthUnit();\n\t}\n\n\tprivate internalStep(delta: number) {\n\t\tconst worldSingleton = this.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst eventQueue = this.eventQueue();\n\t\tif (!eventQueue) return;\n\n\t\tconst world = worldSingleton.proxy;\n\t\tconst [timeStep, interpolate, paused] = [this.timeStep(), this.interpolate(), this.paused()];\n\n\t\t/* Check if the timestep is supposed to be variable. We'll do this here\n once so we don't have to string-check every frame. */\n\t\tconst timeStepVariable = timeStep === 'vary';\n\n\t\t/**\n\t\t * Fixed timeStep simulation progression\n\t\t * @see https://gafferongames.com/post/fix_your_timestep/\n\t\t */\n\t\tconst clampedDelta = MathUtils.clamp(delta, 0, 0.5);\n\n\t\tconst stepWorld = (innerDelta: number) => {\n\t\t\t// Trigger beforeStep callbacks\n\t\t\tthis.beforeStepCallbacks.forEach((callback) => {\n\t\t\t\tcallback(world);\n\t\t\t});\n\n\t\t\tworld.timestep = innerDelta;\n\t\t\tworld.step(eventQueue);\n\n\t\t\t// Trigger afterStep callbacks\n\t\t\tthis.afterStepCallbacks.forEach((callback) => {\n\t\t\t\tcallback(world);\n\t\t\t});\n\t\t};\n\n\t\tif (timeStepVariable) {\n\t\t\tstepWorld(clampedDelta);\n\t\t} else {\n\t\t\t// don't step time forwards if paused\n\t\t\t// Increase accumulator\n\t\t\tthis.steppingState.accumulator += clampedDelta;\n\n\t\t\twhile (this.steppingState.accumulator >= timeStep) {\n\t\t\t\t// Set up previous state\n\t\t\t\t// needed for accurate interpolations if the world steps more than once\n\t\t\t\tif (interpolate) {\n\t\t\t\t\tthis.steppingState.previousState = {};\n\t\t\t\t\tworld.forEachRigidBody((body) => {\n\t\t\t\t\t\tthis.steppingState.previousState[body.handle] = {\n\t\t\t\t\t\t\tposition: body.translation(),\n\t\t\t\t\t\t\trotation: body.rotation(),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tstepWorld(timeStep);\n\t\t\t\tthis.steppingState.accumulator -= timeStep;\n\t\t\t}\n\t\t}\n\n\t\tconst interpolationAlpha =\n\t\t\ttimeStepVariable || !interpolate || paused ? 1 : this.steppingState.accumulator / timeStep;\n\n\t\t// Update meshes\n\t\tthis.rigidBodyStates.forEach((state, handle) => {\n\t\t\tconst rigidBody = world.getRigidBody(handle);\n\n\t\t\tconst events = this.rigidBodyEvents.get(handle);\n\t\t\tif (events?.onSleep || events?.onWake) {\n\t\t\t\tif (rigidBody.isSleeping() && !state.isSleeping) events?.onSleep?.();\n\t\t\t\tif (!rigidBody.isSleeping() && state.isSleeping) events?.onWake?.();\n\t\t\t\tstate.isSleeping = rigidBody.isSleeping();\n\t\t\t}\n\n\t\t\tif (!rigidBody || (rigidBody.isSleeping() && !('isInstancedMesh' in state.object)) || !state.setMatrix) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// New states\n\t\t\tlet t = rigidBody.translation() as Vector3;\n\t\t\tlet r = rigidBody.rotation() as Quaternion;\n\n\t\t\tlet previousState = this.steppingState.previousState[handle];\n\n\t\t\tif (previousState) {\n\t\t\t\t// Get previous simulated world position\n\t\t\t\t_matrix4\n\t\t\t\t\t.compose(previousState.position as Vector3, rapierQuaternionToQuaternion(previousState.rotation), state.scale)\n\t\t\t\t\t.premultiply(state.invertedWorldMatrix)\n\t\t\t\t\t.decompose(_position, _rotation, _scale);\n\n\t\t\t\t// Apply previous tick position\n\t\t\t\tif (state.meshType == 'mesh') {\n\t\t\t\t\tstate.object.position.copy(_position);\n\t\t\t\t\tstate.object.quaternion.copy(_rotation);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Get new position\n\t\t\t_matrix4\n\t\t\t\t.compose(t, rapierQuaternionToQuaternion(r), state.scale)\n\t\t\t\t.premultiply(state.invertedWorldMatrix)\n\t\t\t\t.decompose(_position, _rotation, _scale);\n\n\t\t\tif (state.meshType == 'instancedMesh') {\n\t\t\t\tstate.setMatrix(_matrix4);\n\t\t\t} else {\n\t\t\t\t// Interpolate to new position\n\t\t\t\tstate.object.position.lerp(_position, interpolationAlpha);\n\t\t\t\tstate.object.quaternion.slerp(_rotation, interpolationAlpha);\n\t\t\t}\n\t\t});\n\n\t\teventQueue.drainCollisionEvents((handle1, handle2, started) => {\n\t\t\tconst source1 = this.getSourceFromColliderHandle(handle1);\n\t\t\tconst source2 = this.getSourceFromColliderHandle(handle2);\n\n\t\t\t// Collision Events\n\t\t\tif (!source1?.collider.object || !source2?.collider.object) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst collisionPayload1 = this.getCollisionPayloadFromSource(source1, source2);\n\t\t\tconst collisionPayload2 = this.getCollisionPayloadFromSource(source2, source1);\n\n\t\t\tif (started) {\n\t\t\t\tworld.contactPair(source1.collider.object, source2.collider.object, (manifold, flipped) => {\n\t\t\t\t\t/* RigidBody events */\n\t\t\t\t\tsource1.rigidBody.events?.onCollisionEnter?.({ ...collisionPayload1, manifold, flipped });\n\t\t\t\t\tsource2.rigidBody.events?.onCollisionEnter?.({ ...collisionPayload2, manifold, flipped });\n\n\t\t\t\t\t/* Collider events */\n\t\t\t\t\tsource1.collider.events?.onCollisionEnter?.({ ...collisionPayload1, manifold, flipped });\n\t\t\t\t\tsource2.collider.events?.onCollisionEnter?.({ ...collisionPayload2, manifold, flipped });\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsource1.rigidBody.events?.onCollisionExit?.(collisionPayload1);\n\t\t\t\tsource2.rigidBody.events?.onCollisionExit?.(collisionPayload2);\n\t\t\t\tsource1.collider.events?.onCollisionExit?.(collisionPayload1);\n\t\t\t\tsource2.collider.events?.onCollisionExit?.(collisionPayload2);\n\t\t\t}\n\n\t\t\t// Sensor Intersections\n\t\t\tif (started) {\n\t\t\t\tif (world.intersectionPair(source1.collider.object, source2.collider.object)) {\n\t\t\t\t\tsource1.rigidBody.events?.onIntersectionEnter?.(collisionPayload1);\n\t\t\t\t\tsource2.rigidBody.events?.onIntersectionEnter?.(collisionPayload2);\n\t\t\t\t\tsource1.collider.events?.onIntersectionEnter?.(collisionPayload1);\n\t\t\t\t\tsource2.collider.events?.onIntersectionEnter?.(collisionPayload2);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsource1.rigidBody.events?.onIntersectionExit?.(collisionPayload1);\n\t\t\t\tsource2.rigidBody.events?.onIntersectionExit?.(collisionPayload2);\n\t\t\t\tsource1.collider.events?.onIntersectionExit?.(collisionPayload1);\n\t\t\t\tsource2.collider.events?.onIntersectionExit?.(collisionPayload2);\n\t\t\t}\n\t\t});\n\n\t\teventQueue.drainContactForceEvents((event) => {\n\t\t\tconst source1 = this.getSourceFromColliderHandle(event.collider1());\n\t\t\tconst source2 = this.getSourceFromColliderHandle(event.collider2());\n\n\t\t\t// Collision Events\n\t\t\tif (!source1?.collider.object || !source2?.collider.object) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst collisionPayload1 = this.getCollisionPayloadFromSource(source1, source2);\n\t\t\tconst collisionPayload2 = this.getCollisionPayloadFromSource(source2, source1);\n\n\t\t\tsource1.rigidBody.events?.onContactForce?.({\n\t\t\t\t...collisionPayload1,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource2.rigidBody.events?.onContactForce?.({\n\t\t\t\t...collisionPayload2,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource1.collider.events?.onContactForce?.({\n\t\t\t\t...collisionPayload1,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource2.collider.events?.onContactForce?.({\n\t\t\t\t...collisionPayload2,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\t\t});\n\n\t\tworld.forEachActiveRigidBody(() => {\n\t\t\tthis.store.snapshot.invalidate();\n\t\t});\n\t}\n\n\tprivate getSourceFromColliderHandle(handle: ColliderHandle) {\n\t\tconst world = this.worldSingleton();\n\t\tif (!world) return;\n\n\t\tconst collider = world.proxy.getCollider(handle);\n\t\tconst colEvents = this.colliderEvents.get(handle);\n\t\tconst colliderState = this.colliderStates.get(handle);\n\n\t\tconst rigidBodyHandle = collider.parent()?.handle;\n\t\tconst rigidBody = rigidBodyHandle !== undefined ? world.proxy.getRigidBody(rigidBodyHandle) : undefined;\n\t\tconst rigidBodyEvents =\n\t\t\trigidBody && rigidBodyHandle !== undefined ? this.rigidBodyEvents.get(rigidBodyHandle) : undefined;\n\t\tconst rigidBodyState = rigidBodyHandle !== undefined ? this.rigidBodyStates.get(rigidBodyHandle) : undefined;\n\n\t\treturn {\n\t\t\tcollider: { object: collider, events: colEvents, state: colliderState },\n\t\t\trigidBody: { object: rigidBody, events: rigidBodyEvents, state: rigidBodyState },\n\t\t} as NgtrCollisionSource;\n\t}\n\n\tprivate getCollisionPayloadFromSource(target: NgtrCollisionSource, other: NgtrCollisionSource): NgtrCollisionPayload {\n\t\treturn {\n\t\t\ttarget: {\n\t\t\t\trigidBody: target.rigidBody.object,\n\t\t\t\tcollider: target.collider.object,\n\t\t\t\tcolliderObject: target.collider.state?.object,\n\t\t\t\trigidBodyObject: target.rigidBody.state?.object,\n\t\t\t},\n\t\t\tother: {\n\t\t\t\trigidBody: other.rigidBody.object,\n\t\t\t\tcollider: other.collider.object,\n\t\t\t\tcolliderObject: other.collider.state?.object,\n\t\t\t\trigidBodyObject: other.rigidBody.state?.object,\n\t\t\t},\n\t\t};\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDirective,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tmodel,\n\toutput,\n\tuntracked,\n} from '@angular/core';\nimport { ActiveEvents, Collider, ColliderDesc, RigidBody, RigidBodyDesc } from '@dimforge/rapier3d-compat';\nimport {\n\textend,\n\tgetEmitter,\n\tgetLocalState,\n\thasListener,\n\tNgtEuler,\n\tNgtObject3D,\n\tNgtQuaternion,\n\tNgtVector3,\n\tpick,\n} from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { Matrix4, Object3D, Vector3 } from 'three';\nimport { NgtrPhysics } from './physics';\nimport { _matrix4, _position, _rotation, _scale, _vector3 } from './shared';\nimport {\n\tNgtrColliderOptions,\n\tNgtrColliderShape,\n\tNgtrColliderState,\n\tNgtrCollisionEnterPayload,\n\tNgtrCollisionExitPayload,\n\tNgtrContactForcePayload,\n\tNgtrIntersectionEnterPayload,\n\tNgtrIntersectionExitPayload,\n\tNgtrRigidBodyOptions,\n\tNgtrRigidBodyState,\n\tNgtrRigidBodyType,\n} from './types';\nimport { createColliderOptions } from './utils';\n\nconst colliderDefaultOptions: NgtrColliderOptions = {\n\tcontactSkin: 0,\n};\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrCollider]',\n\tstandalone: true,\n\thost: {\n\t\t'[position]': 'position()',\n\t\t'[rotation]': 'rotation()',\n\t\t'[scale]': 'scale()',\n\t\t'[quaternion]': 'quaternion()',\n\t\t'[userData]': 'userData()',\n\t\t'[name]': 'name()',\n\t},\n})\nexport class NgtrAnyCollider {\n\tposition = input<NgtVector3 | undefined>([0, 0, 0]);\n\trotation = input<NgtEuler | undefined>([0, 0, 0]);\n\tscale = input<NgtVector3 | undefined>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion | undefined>([0, 0, 0, 1]);\n\tuserData = input<NgtObject3D['userData'] | undefined>({});\n\tname = input<NgtObject3D['name'] | undefined>();\n\toptions = input(colliderDefaultOptions, { transform: mergeInputs(rigidBodyDefaultOptions) });\n\n\t// TODO: change this to input required when Angular allows setting hostDirective input\n\tshape = model<NgtrColliderShape | undefined>(undefined, { alias: 'ngtrCollider' });\n\targs = model<unknown[]>([]);\n\n\tcollisionEnter = output<NgtrCollisionEnterPayload>();\n\tcollisionExit = output<NgtrCollisionExitPayload>();\n\tintersectionEnter = output<NgtrIntersectionEnterPayload>();\n\tintersectionExit = output<NgtrIntersectionExitPayload>();\n\tcontactForce = output<NgtrContactForcePayload>();\n\n\tprivate sensor = pick(this.options, 'sensor');\n\tprivate collisionGroups = pick(this.options, 'collisionGroups');\n\tprivate solverGroups = pick(this.options, 'solverGroups');\n\tprivate friction = pick(this.options, 'friction');\n\tprivate frictionCombineRule = pick(this.options, 'frictionCombineRule');\n\tprivate restitution = pick(this.options, 'restitution');\n\tprivate restitutionCombineRule = pick(this.options, 'restitutionCombineRule');\n\tprivate activeCollisionTypes = pick(this.options, 'activeCollisionTypes');\n\tprivate contactSkin = pick(this.options, 'contactSkin');\n\tprivate mass = pick(this.options, 'mass');\n\tprivate massProperties = pick(this.options, 'massProperties');\n\tprivate density = pick(this.options, 'density');\n\n\tprivate rigidBody = inject(NgtrRigidBody, { optional: true });\n\tprivate physics = inject(NgtrPhysics);\n\tobjectRef = inject<ElementRef<Object3D>>(ElementRef);\n\n\tprivate scaledArgs = computed(() => {\n\t\tconst [shape, args] = [\n\t\t\tthis.shape(),\n\t\t\tthis.args() as (number | ArrayLike<number> | { x: number; y: number; z: number })[],\n\t\t];\n\n\t\tconst cloned = args.slice();\n\n\t\t// Heightfield uses a vector\n\t\tif (shape === 'heightfield') {\n\t\t\tconst s = cloned[3] as { x: number; y: number; z: number };\n\t\t\ts.x *= this.worldScale.x;\n\t\t\ts.y *= this.worldScale.y;\n\t\t\ts.z *= this.worldScale.z;\n\n\t\t\treturn cloned;\n\t\t}\n\n\t\t// Trimesh and convex scale the vertices\n\t\tif (shape === 'trimesh' || shape === 'convexHull') {\n\t\t\tcloned[0] = this.scaleVertices(cloned[0] as ArrayLike<number>, this.worldScale);\n\t\t\treturn cloned;\n\t\t}\n\n\t\t// prefill with some extra\n\t\tconst scaleArray = [this.worldScale.x, this.worldScale.y, this.worldScale.z, this.worldScale.x, this.worldScale.x];\n\t\treturn cloned.map((arg, index) => scaleArray[index] * (arg as number));\n\t});\n\n\tprivate collider = computed(() => {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return null;\n\n\t\tconst [shape, args, rigidBody] = [this.shape(), this.scaledArgs(), this.rigidBody?.rigidBody()];\n\n\t\t// @ts-expect-error - we know the type of the data\n\t\tconst desc = ColliderDesc[shape](...args);\n\t\tif (!desc) return null;\n\n\t\treturn worldSingleton.proxy.createCollider(desc, rigidBody ?? undefined);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createColliderStateEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createColliderEventsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateColliderEffect();\n\t\t\tthis.updateMassPropertiesEffect();\n\t\t});\n\t}\n\n\tget worldScale() {\n\t\treturn this.objectRef.nativeElement.getWorldScale(new Vector3());\n\t}\n\n\tsetShape(shape: NgtrColliderShape) {\n\t\tthis.shape.set(shape);\n\t}\n\n\tsetArgs(args: unknown[]) {\n\t\tthis.args.set(args);\n\t}\n\n\tprivate createColliderStateEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst localState = getLocalState(this.objectRef.nativeElement);\n\t\tif (!localState) return;\n\n\t\tconst parent = localState.parent();\n\t\tif (!parent || !(parent as Object3D).isObject3D) return;\n\n\t\tconst state = this.createColliderState(\n\t\t\tcollider,\n\t\t\tthis.objectRef.nativeElement,\n\t\t\tthis.rigidBody?.objectRef.nativeElement,\n\t\t);\n\t\tthis.physics.colliderStates.set(collider.handle, state);\n\n\t\treturn () => {\n\t\t\tthis.physics.colliderStates.delete(collider.handle);\n\t\t\tif (worldSingleton.proxy.getCollider(collider.handle)) {\n\t\t\t\tworldSingleton.proxy.removeCollider(collider, true);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate createColliderEventsEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst collisionEnter = getEmitter(this.collisionEnter);\n\t\tconst collisionExit = getEmitter(this.collisionExit);\n\t\tconst intersectionEnter = getEmitter(this.intersectionEnter);\n\t\tconst intersectionExit = getEmitter(this.intersectionExit);\n\t\tconst contactForce = getEmitter(this.contactForce);\n\n\t\tconst hasCollisionEvent = hasListener(\n\t\t\tthis.collisionEnter,\n\t\t\tthis.collisionExit,\n\t\t\tthis.intersectionEnter,\n\t\t\tthis.intersectionExit,\n\t\t\tthis.rigidBody?.collisionEnter,\n\t\t\tthis.rigidBody?.collisionExit,\n\t\t\tthis.rigidBody?.intersectionEnter,\n\t\t\tthis.rigidBody?.intersectionExit,\n\t\t);\n\t\tconst hasContactForceEvent = hasListener(this.contactForce, this.rigidBody?.contactForce);\n\n\t\tif (hasCollisionEvent && hasContactForceEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.COLLISION_EVENTS | ActiveEvents.CONTACT_FORCE_EVENTS);\n\t\t} else if (hasCollisionEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.COLLISION_EVENTS);\n\t\t} else if (hasContactForceEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.CONTACT_FORCE_EVENTS);\n\t\t}\n\n\t\tthis.physics.colliderEvents.set(collider.handle, {\n\t\t\tonCollisionEnter: collisionEnter,\n\t\t\tonCollisionExit: collisionExit,\n\t\t\tonIntersectionEnter: intersectionEnter,\n\t\t\tonIntersectionExit: intersectionExit,\n\t\t\tonContactForce: contactForce,\n\t\t});\n\t\treturn () => {\n\t\t\tthis.physics.colliderEvents.delete(collider.handle);\n\t\t};\n\t}\n\n\tprivate updateColliderEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst state = this.physics.colliderStates.get(collider.handle);\n\t\tif (!state) return;\n\n\t\t// Update collider position based on the object's position\n\t\tconst parentWorldScale = state.object.parent!.getWorldScale(_vector3);\n\t\tconst parentInvertedWorldMatrix = state.worldParent?.matrixWorld.clone().invert();\n\n\t\tstate.object.updateWorldMatrix(true, false);\n\n\t\t_matrix4.copy(state.object.matrixWorld);\n\n\t\tif (parentInvertedWorldMatrix) {\n\t\t\t_matrix4.premultiply(parentInvertedWorldMatrix);\n\t\t}\n\n\t\t_matrix4.decompose(_position, _rotation, _scale);\n\n\t\tif (collider.parent()) {\n\t\t\tcollider.setTranslationWrtParent({\n\t\t\t\tx: _position.x * parentWorldScale.x,\n\t\t\t\ty: _position.y * parentWorldScale.y,\n\t\t\t\tz: _position.z * parentWorldScale.z,\n\t\t\t});\n\t\t\tcollider.setRotationWrtParent(_rotation);\n\t\t} else {\n\t\t\tcollider.setTranslation({\n\t\t\t\tx: _position.x * parentWorldScale.x,\n\t\t\t\ty: _position.y * parentWorldScale.y,\n\t\t\t\tz: _position.z * parentWorldScale.z,\n\t\t\t});\n\t\t\tcollider.setRotation(_rotation);\n\t\t}\n\n\t\tconst [\n\t\t\tsensor,\n\t\t\tcollisionGroups,\n\t\t\tsolverGroups,\n\t\t\tfriction,\n\t\t\tfrictionCombineRule,\n\t\t\trestitution,\n\t\t\trestitutionCombineRule,\n\t\t\tactiveCollisionTypes,\n\t\t\tcontactSkin,\n\t\t] = [\n\t\t\tthis.sensor(),\n\t\t\tthis.collisionGroups(),\n\t\t\tthis.solverGroups(),\n\t\t\tthis.friction(),\n\t\t\tthis.frictionCombineRule(),\n\t\t\tthis.restitution(),\n\t\t\tthis.restitutionCombineRule(),\n\t\t\tthis.activeCollisionTypes(),\n\t\t\tthis.contactSkin(),\n\t\t];\n\n\t\tif (sensor !== undefined) collider.setSensor(sensor);\n\t\tif (collisionGroups !== undefined) collider.setCollisionGroups(collisionGroups);\n\t\tif (solverGroups !== undefined) collider.setSolverGroups(solverGroups);\n\t\tif (friction !== undefined) collider.setFriction(friction);\n\t\tif (frictionCombineRule !== undefined) collider.setFrictionCombineRule(frictionCombineRule);\n\t\tif (restitution !== undefined) collider.setRestitution(restitution);\n\t\tif (restitutionCombineRule !== undefined) collider.setRestitutionCombineRule(restitutionCombineRule);\n\t\tif (activeCollisionTypes !== undefined) collider.setActiveCollisionTypes(activeCollisionTypes);\n\t\tif (contactSkin !== undefined) collider.setContactSkin(contactSkin);\n\t}\n\n\tprivate updateMassPropertiesEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst [mass, massProperties, density] = [this.mass(), this.massProperties(), this.density()];\n\n\t\tif (density !== undefined) {\n\t\t\tif (mass !== undefined || massProperties !== undefined) {\n\t\t\t\tthrow new Error('[NGT Rapier] Cannot set mass and massProperties along with density');\n\t\t\t}\n\n\t\t\tcollider.setDensity(density);\n\t\t\treturn;\n\t\t}\n\n\t\tif (mass !== undefined) {\n\t\t\tif (massProperties !== undefined) {\n\t\t\t\tthrow new Error('[NGT Rapier] Cannot set massProperties along with mass');\n\t\t\t}\n\t\t\tcollider.setMass(mass);\n\t\t\treturn;\n\t\t}\n\n\t\tif (massProperties !== undefined) {\n\t\t\tcollider.setMassProperties(\n\t\t\t\tmassProperties.mass,\n\t\t\t\tmassProperties.centerOfMass,\n\t\t\t\tmassProperties.principalAngularInertia,\n\t\t\t\tmassProperties.angularInertiaLocalFrame,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate createColliderState(\n\t\tcollider: Collider,\n\t\tobject: Object3D,\n\t\trigidBodyObject?: Object3D | null,\n\t): NgtrColliderState {\n\t\treturn { collider, worldParent: rigidBodyObject || undefined, object };\n\t}\n\n\tprivate scaleVertices(vertices: ArrayLike<number>, scale: Vector3) {\n\t\tconst scaledVerts = Array.from(vertices);\n\n\t\tfor (let i = 0; i < vertices.length / 3; i++) {\n\t\t\tscaledVerts[i * 3] *= scale.x;\n\t\t\tscaledVerts[i * 3 + 1] *= scale.y;\n\t\t\tscaledVerts[i * 3 + 2] *= scale.z;\n\t\t}\n\n\t\treturn scaledVerts;\n\t}\n}\n\nconst RIGID_BODY_TYPE_MAP: Record<NgtrRigidBodyType, number> = {\n\tfixed: 1,\n\tdynamic: 0,\n\tkinematicPosition: 2,\n\tkinematicVelocity: 3,\n};\n\nexport const rigidBodyDefaultOptions: NgtrRigidBodyOptions = {\n\tcanSleep: true,\n\tlinearVelocity: [0, 0, 0],\n\tangularVelocity: [0, 0, 0],\n\tgravityScale: 1,\n\tdominanceGroup: 0,\n\tccd: false,\n\tsoftCcdPrediction: 0,\n\tcontactSkin: 0,\n};\n\n@Component({\n\tselector: 'ngt-object3D[ngtrRigidBody]',\n\texportAs: 'rigidBody',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ng-content />\n\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t<ngt-object3D\n\t\t\t\t[ngtrCollider]=\"childColliderOption.shape\"\n\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t[name]=\"objectRef.nativeElement.name + '-collider-' + $index\"\n\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t/>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\t'[position]': 'position()',\n\t\t'[rotation]': 'rotation()',\n\t\t'[scale]': 'scale()',\n\t\t'[quaternion]': 'quaternion()',\n\t\t'[userData]': 'userData()',\n\t},\n\timports: [NgtrAnyCollider],\n})\nexport class NgtrRigidBody {\n\ttype = input('dynamic', {\n\t\talias: 'ngtrRigidBody',\n\t\ttransform: (value: NgtrRigidBodyType | '' | undefined) => {\n\t\t\tif (value === '' || value === undefined) return 'dynamic' as NgtrRigidBodyType;\n\t\t\treturn value;\n\t\t},\n\t});\n\tposition = input<NgtVector3 | undefined>([0, 0, 0]);\n\trotation = input<NgtEuler | undefined>([0, 0, 0]);\n\tscale = input<NgtVector3 | undefined>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion | undefined>([0, 0, 0, 1]);\n\tuserData = input<NgtObject3D['userData'] | undefined>({});\n\toptions = input(rigidBodyDefaultOptions, { transform: mergeInputs(rigidBodyDefaultOptions) });\n\n\twake = output<void>();\n\tsleep = output<void>();\n\tcollisionEnter = output<NgtrCollisionEnterPayload>();\n\tcollisionExit = output<NgtrCollisionExitPayload>();\n\tintersectionEnter = output<NgtrIntersectionEnterPayload>();\n\tintersectionExit = output<NgtrIntersectionExitPayload>();\n\tcontactForce = output<NgtrContactForcePayload>();\n\n\tprivate canSleep = pick(this.options, 'canSleep');\n\tprivate colliders = pick(this.options, 'colliders');\n\tprivate transformState = pick(this.options, 'transformState');\n\tprivate gravityScale = pick(this.options, 'gravityScale');\n\tprivate dominanceGroup = pick(this.options, 'dominanceGroup');\n\tprivate ccd = pick(this.options, 'ccd');\n\tprivate softCcdPrediction = pick(this.options, 'softCcdPrediction');\n\tprivate additionalSolverIterations = pick(this.options, 'additionalSolverIterations');\n\tprivate linearDamping = pick(this.options, 'linearDamping');\n\tprivate angularDamping = pick(this.options, 'angularDamping');\n\tprivate lockRotations = pick(this.options, 'lockRotations');\n\tprivate lockTranslations = pick(this.options, 'lockTranslations');\n\tprivate enabledRotations = pick(this.options, 'enabledRotations');\n\tprivate enabledTranslations = pick(this.options, 'enabledTranslations');\n\tprivate angularVelocity = pick(this.options, 'angularVelocity');\n\tprivate linearVelocity = pick(this.options, 'linearVelocity');\n\n\tobjectRef = inject<ElementRef<Object3D>>(ElementRef);\n\tprivate physics = inject(NgtrPhysics);\n\n\tprivate bodyType = computed(() => RIGID_BODY_TYPE_MAP[this.type()]);\n\tprivate bodyDesc = computed(() => {\n\t\tconst [canSleep, bodyType] = [this.canSleep(), untracked(this.bodyType), this.colliders()];\n\t\treturn new RigidBodyDesc(bodyType).setCanSleep(canSleep);\n\t});\n\trigidBody = computed(() => {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return null;\n\t\treturn worldSingleton.proxy.createRigidBody(this.bodyDesc());\n\t});\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst colliders = this.colliders();\n\t\t// if self colliders is false explicitly, disable auto colliders for this object entirely.\n\t\tif (colliders === false) return [];\n\n\t\tconst physicsColliders = this.physics.colliders();\n\t\t// if physics colliders is false explicitly AND colliders is not set, disable auto colliders for this object entirely.\n\t\tif (physicsColliders === false && colliders === undefined) return [];\n\n\t\tconst options = untracked(this.options);\n\t\t// if colliders on object is not set, use physics colliders\n\t\tif (!options.colliders) options.colliders = physicsColliders;\n\n\t\tconst objectLocalState = getLocalState(this.objectRef.nativeElement);\n\t\tif (!objectLocalState) return [];\n\n\t\t// track object's parent and non-object children\n\t\tconst [parent] = [objectLocalState.parent(), objectLocalState.nonObjects()];\n\t\tif (!parent || !(parent as Object3D).isObject3D) return [];\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, options, true);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createRigidBodyStateEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createRigidBodyEventsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateRigidBodyEffect();\n\t\t});\n\t}\n\n\tprivate createRigidBodyStateEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst transformState = untracked(this.transformState);\n\n\t\tconst localState = getLocalState(this.objectRef.nativeElement);\n\t\tif (!localState) return;\n\n\t\tconst parent = localState.parent();\n\t\tif (!parent || !(parent as Object3D).isObject3D) return;\n\n\t\tconst state = this.createRigidBodyState(body, this.objectRef.nativeElement);\n\t\tthis.physics.rigidBodyStates.set(body.handle, transformState ? transformState(state) : state);\n\n\t\treturn () => {\n\t\t\tthis.physics.rigidBodyStates.delete(body.handle);\n\t\t\tif (worldSingleton.proxy.getRigidBody(body.handle)) {\n\t\t\t\tworldSingleton.proxy.removeRigidBody(body);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate createRigidBodyEventsEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst wake = getEmitter(this.wake);\n\t\tconst sleep = getEmitter(this.sleep);\n\t\tconst collisionEnter = getEmitter(this.collisionEnter);\n\t\tconst collisionExit = getEmitter(this.collisionExit);\n\t\tconst intersectionEnter = getEmitter(this.intersectionEnter);\n\t\tconst intersectionExit = getEmitter(this.intersectionExit);\n\t\tconst contactForce = getEmitter(this.contactForce);\n\n\t\tthis.physics.rigidBodyEvents.set(body.handle, {\n\t\t\tonWake: wake,\n\t\t\tonSleep: sleep,\n\t\t\tonCollisionEnter: collisionEnter,\n\t\t\tonCollisionExit: collisionExit,\n\t\t\tonIntersectionEnter: intersectionEnter,\n\t\t\tonIntersectionExit: intersectionExit,\n\t\t\tonContactForce: contactForce,\n\t\t});\n\n\t\treturn () => {\n\t\t\tthis.physics.rigidBodyEvents.delete(body.handle);\n\t\t};\n\t}\n\n\tprivate updateRigidBodyEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst state = this.physics.rigidBodyStates.get(body.handle);\n\t\tif (!state) return;\n\n\t\tstate.object.updateWorldMatrix(true, false);\n\t\t_matrix4.copy(state.object.matrixWorld).decompose(_position, _rotation, _scale);\n\t\tbody.setTranslation(_position, true);\n\t\tbody.setRotation(_rotation, true);\n\n\t\tconst [\n\t\t\tgravityScale,\n\t\t\tadditionalSolverIterations,\n\t\t\tlinearDamping,\n\t\t\tangularDamping,\n\t\t\tlockRotations,\n\t\t\tlockTranslations,\n\t\t\tenabledRotations,\n\t\t\tenabledTranslations,\n\t\t\tangularVelocity,\n\t\t\tlinearVelocity,\n\t\t\tccd,\n\t\t\tsoftCcdPrediction,\n\t\t\tdominanceGroup,\n\t\t\tuserData,\n\t\t\tbodyType,\n\t\t] = [\n\t\t\tthis.gravityScale(),\n\t\t\tthis.additionalSolverIterations(),\n\t\t\tthis.linearDamping(),\n\t\t\tthis.angularDamping(),\n\t\t\tthis.lockRotations(),\n\t\t\tthis.lockTranslations(),\n\t\t\tthis.enabledRotations(),\n\t\t\tthis.enabledTranslations(),\n\t\t\tthis.angularVelocity(),\n\t\t\tthis.linearVelocity(),\n\t\t\tthis.ccd(),\n\t\t\tthis.softCcdPrediction(),\n\t\t\tthis.dominanceGroup(),\n\t\t\tthis.userData(),\n\t\t\tthis.bodyType(),\n\t\t];\n\n\t\tbody.setGravityScale(gravityScale, true);\n\t\tif (additionalSolverIterations !== undefined) body.setAdditionalSolverIterations(additionalSolverIterations);\n\t\tif (linearDamping !== undefined) body.setLinearDamping(linearDamping);\n\t\tif (angularDamping !== undefined) body.setAngularDamping(angularDamping);\n\t\tbody.setDominanceGroup(dominanceGroup);\n\t\tif (enabledRotations !== undefined) body.setEnabledRotations(...enabledRotations, true);\n\t\tif (enabledTranslations !== undefined) body.setEnabledTranslations(...enabledTranslations, true);\n\t\tif (lockRotations !== undefined) body.lockRotations(lockRotations, true);\n\t\tif (lockTranslations !== undefined) body.lockTranslations(lockTranslations, true);\n\t\tbody.setAngvel({ x: angularVelocity[0], y: angularVelocity[1], z: angularVelocity[2] }, true);\n\t\tbody.setLinvel({ x: linearVelocity[0], y: linearVelocity[1], z: linearVelocity[2] }, true);\n\t\tbody.enableCcd(ccd);\n\t\tbody.setSoftCcdPrediction(softCcdPrediction);\n\t\tif (userData !== undefined) body.userData = userData;\n\t\tif (bodyType !== body.bodyType()) body.setBodyType(bodyType, true);\n\t}\n\n\tprivate createRigidBodyState(\n\t\trigidBody: RigidBody,\n\t\tobject: Object3D,\n\t\tsetMatrix?: (matrix: Matrix4) => void,\n\t\tgetMatrix?: (matrix: Matrix4) => Matrix4,\n\t\tworldScale?: Vector3,\n\t\tmeshType: NgtrRigidBodyState['meshType'] = 'mesh',\n\t) {\n\t\tobject.updateWorldMatrix(true, false);\n\t\tconst invertedWorldMatrix = object.parent!.matrixWorld.clone().invert();\n\t\treturn {\n\t\t\tobject,\n\t\t\trigidBody,\n\t\t\tinvertedWorldMatrix,\n\t\t\tsetMatrix: setMatrix\n\t\t\t\t? setMatrix\n\t\t\t\t: (matrix: Matrix4) => {\n\t\t\t\t\t\tobject.matrix.copy(matrix);\n\t\t\t\t\t},\n\t\t\tgetMatrix: getMatrix ? getMatrix : (matrix: Matrix4) => matrix.copy(object.matrix),\n\t\t\tscale: worldScale || object.getWorldScale(_scale).clone(),\n\t\t\tisSleeping: false,\n\t\t\tmeshType,\n\t\t};\n\t}\n}\n","import { Directive, effect, inject, input, untracked } from '@angular/core';\nimport { NgtrAnyCollider } from './rigid-body';\nimport {\n\tNgtrBallArgs,\n\tNgtrCapsuleArgs,\n\tNgtrConeArgs,\n\tNgtrConvexHullArgs,\n\tNgtrConvexMeshArgs,\n\tNgtrCuboidArgs,\n\tNgtrCylinderArgs,\n\tNgtrHeightfieldArgs,\n\tNgtrPolylineArgs,\n\tNgtrRoundConeArgs,\n\tNgtrRoundConvexHullArgs,\n\tNgtrRoundConvexMeshArgs,\n\tNgtrRoundCuboidArgs,\n\tNgtrRoundCylinderArgs,\n\tNgtrTrimeshArgs,\n} from './types';\n\nconst ANY_COLLIDER_HOST_DIRECTIVE = {\n\tdirective: NgtrAnyCollider,\n\tinputs: ['options', 'name', 'scale', 'position', 'quaternion', 'rotation', 'userData'],\n\toutputs: ['collisionEnter', 'collisionExit', 'intersectionEnter', 'intersectionExit', 'contactForce'],\n};\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrCuboidCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrCuboidCollider {\n\targs = input.required<NgtrCuboidArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('cuboid');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrCapsuleCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrCapsuleCollider {\n\targs = input.required<NgtrCapsuleArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('capsule');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrBallCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrBallCollider {\n\targs = input.required<NgtrBallArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('ball');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrConvexHullCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrConvexHullCollider {\n\targs = input.required<NgtrConvexHullArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundConvexHull');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrHeightfieldCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrHeightfieldCollider {\n\targs = input.required<NgtrHeightfieldArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('heightfield');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrTrimeshCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrTrimeshCollider {\n\targs = input.required<NgtrTrimeshArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('trimesh');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrPolylineCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrPolylineCollider {\n\targs = input.required<NgtrPolylineArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('polyline');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrRoundCuboidCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundCuboidCollider {\n\targs = input.required<NgtrRoundCuboidArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundCuboid');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrCylinderCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrCylinderCollider {\n\targs = input.required<NgtrCylinderArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('cylinder');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrRoundCylinderCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundCylinderCollider {\n\targs = input.required<NgtrRoundCylinderArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundCylinder');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrConeCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrConeCollider {\n\targs = input.required<NgtrConeArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('cone');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrRoundConeCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundConeCollider {\n\targs = input.required<NgtrRoundConeArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundCone');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrConvexMeshCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrConvexMeshCollider {\n\targs = input.required<NgtrConvexMeshArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('convexMesh');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrRoundConvexHullCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundConvexHullCollider {\n\targs = input.required<NgtrRoundConvexHullArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundConvexHull');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrRoundConvexMeshCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundConvexMeshCollider {\n\targs = input.required<NgtrRoundConvexMeshArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundConvexMesh');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tuntracked,\n\tviewChild,\n\tviewChildren,\n} from '@angular/core';\nimport { extend, getLocalState, NgtEuler, NgtObject3D, NgtQuaternion, NgtVector3, pick } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { DynamicDrawUsage, InstancedMesh, Object3D } from 'three';\nimport { NgtrPhysics } from './physics';\nimport { NgtrAnyCollider, NgtrRigidBody, rigidBodyDefaultOptions } from './rigid-body';\nimport { NgtrRigidBodyOptions, NgtrRigidBodyState, NgtrRigidBodyType } from './types';\nimport { createColliderOptions } from './utils';\n\nexport interface NgtrInstancedRigidBodyOptions {\n\tkey: string | number;\n\ttype?: NgtrRigidBodyType;\n\tposition?: NgtVector3;\n\trotation?: NgtEuler;\n\tscale?: NgtVector3;\n\tquaternion?: NgtQuaternion;\n\tuserData?: NgtObject3D['userData'];\n\toptions?: NgtrRigidBodyOptions;\n}\n\nconst defaultOptions: NgtrRigidBodyOptions = rigidBodyDefaultOptions;\n\n@Component({\n\tselector: 'ngt-object3D[ngtrInstancedRigidBodies]',\n\texportAs: 'instancedRigidBodies',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-object3D #instanceWrapper>\n\t\t\t<ng-content />\n\t\t</ngt-object3D>\n\n\t\t@for (instance of instancesOptions(); track instance.key) {\n\t\t\t<ngt-object3D\n\t\t\t\t[ngtrRigidBody]=\"instance.type\"\n\t\t\t\t[options]=\"instance.options\"\n\t\t\t\t[position]=\"instance.position\"\n\t\t\t\t[rotation]=\"instance.rotation\"\n\t\t\t\t[scale]=\"instance.scale\"\n\t\t\t\t[quaternion]=\"instance.quaternion\"\n\t\t\t\t[userData]=\"instance.userData\"\n\t\t\t\t[name]=\"instance.key + '-instanced-rigid-body-' + $index\"\n\t\t\t>\n\t\t\t\t<ng-content select=\"[data-colliders]\" />\n\n\t\t\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t\t\t<ngt-object3D\n\t\t\t\t\t\t[ngtrCollider]=\"childColliderOption.shape\"\n\t\t\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t\t\t[name]=\"objectRef.nativeElement.name + '-instanced-collider-' + $index\"\n\t\t\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t</ngt-object3D>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\t'[position]': 'position()',\n\t\t'[rotation]': 'rotation()',\n\t\t'[scale]': 'scale()',\n\t\t'[quaternion]': 'quaternion()',\n\t\t'[userData]': 'userData()',\n\t},\n\timports: [NgtrRigidBody, NgtrAnyCollider],\n})\nexport class NgtrInstancedRigidBodies {\n\tposition = input<NgtVector3 | undefined>([0, 0, 0]);\n\trotation = input<NgtEuler | undefined>([0, 0, 0]);\n\tscale = input<NgtVector3 | undefined>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion | undefined>([0, 0, 0, 1]);\n\tuserData = input<NgtObject3D['userData'] | undefined>({});\n\tinstances = input([], {\n\t\talias: 'ngtrInstancedRigidBodies',\n\t\ttransform: (value: Array<NgtrInstancedRigidBodyOptions> | '') => {\n\t\t\tif (value === '') return [];\n\t\t\treturn value;\n\t\t},\n\t});\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tinstanceWrapperRef = viewChild.required<ElementRef<Object3D>>('instanceWrapper');\n\trigidBodyRefs = viewChildren(NgtrRigidBody);\n\n\tprivate physics = inject(NgtrPhysics);\n\tobjectRef = inject<ElementRef<Object3D>>(ElementRef);\n\n\tprivate colliders = pick(this.options, 'colliders');\n\n\tprivate instancedMesh = computed(() => {\n\t\tconst instanceWrapper = this.instanceWrapperRef().nativeElement;\n\t\tif (!instanceWrapper) return null;\n\n\t\tconst localState = getLocalState(instanceWrapper);\n\t\tif (!localState) return null;\n\n\t\t// track object's children\n\t\tlocalState.objects();\n\t\tconst firstChild = instanceWrapper.children[0];\n\t\tif (!firstChild || !(firstChild as InstancedMesh).isInstancedMesh) return null;\n\n\t\treturn firstChild as InstancedMesh;\n\t});\n\n\tprotected instancesOptions = computed(() => {\n\t\tconst [instances, options, instancedMesh] = [this.instances(), untracked(this.options), this.instancedMesh()];\n\t\tif (!instancedMesh) return [];\n\t\treturn instances.map(\n\t\t\t(instance, index) =>\n\t\t\t\t({\n\t\t\t\t\t...instance,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\t...(instance.options || {}),\n\t\t\t\t\t\ttransformState: (state) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t\tgetMatrix: (matrix) => {\n\t\t\t\t\t\t\t\t\tinstancedMesh.getMatrixAt(index, matrix);\n\t\t\t\t\t\t\t\t\treturn matrix;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsetMatrix: (matrix) => {\n\t\t\t\t\t\t\t\t\tinstancedMesh.setMatrixAt(index, matrix);\n\t\t\t\t\t\t\t\t\tinstancedMesh.instanceMatrix.needsUpdate = true;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmeshType: 'instancedMesh',\n\t\t\t\t\t\t\t} as NgtrRigidBodyState;\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tkey: `${instance.key}-${index}` + `${instancedMesh?.uuid || ''}`,\n\t\t\t\t}) as Omit<NgtrInstancedRigidBodyOptions, 'options'> & { options: Partial<NgtrRigidBodyOptions> },\n\t\t);\n\t});\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst colliders = this.colliders();\n\t\t// if self colliders is false explicitly, disable auto colliders for this object entirely.\n\t\tif (colliders === false) return [];\n\n\t\tconst physicsColliders = this.physics.colliders();\n\t\t// if physics colliders is false explicitly AND colliders is not set, disable auto colliders for this object entirely.\n\t\tif (physicsColliders === false && colliders === undefined) return [];\n\n\t\tconst options = this.options();\n\t\t// if colliders on object is not set, use physics colliders\n\t\tif (!options.colliders) options.colliders = physicsColliders;\n\n\t\tconst objectLocalState = getLocalState(this.objectRef.nativeElement);\n\t\tif (!objectLocalState) return [];\n\n\t\t// track object's parent and non-object children\n\t\tconst [parent] = [objectLocalState.parent(), objectLocalState.nonObjects()];\n\t\tif (!parent || !(parent as Object3D).isObject3D) return [];\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, options);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect(() => {\n\t\t\tconst instancedMesh = this.instancedMesh();\n\t\t\tif (!instancedMesh) return;\n\t\t\tinstancedMesh.instanceMatrix.setUsage(DynamicDrawUsage);\n\t\t});\n\t}\n}\n","import { computed, effect, ElementRef, inject, Injector } from '@angular/core';\nimport {\n\tFixedImpulseJoint,\n\tImpulseJoint,\n\tJointData,\n\tPrismaticImpulseJoint,\n\tRevoluteImpulseJoint,\n\tRigidBody,\n\tRopeImpulseJoint,\n\tSphericalImpulseJoint,\n\tSpringImpulseJoint,\n} from '@dimforge/rapier3d-compat';\nimport { resolveRef } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { NgtrPhysics } from './physics';\nimport {\n\tNgtrFixedJointParams,\n\tNgtrPrismaticJointParams,\n\tNgtrRevoluteJointParams,\n\tNgtrRopeJointParams,\n\tNgtrSphericalJointParams,\n\tNgtrSpringJointParams,\n} from './types';\nimport { quaternionToRapierQuaternion, vector3ToRapierVector } from './utils';\n\nfunction injectImpulseJoint<TJoinType extends ImpulseJoint>(\n\tbodyA: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\tbodyB: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t{ injector, data }: { injector?: Injector; data: JointData | (() => JointData | null) },\n) {\n\treturn assertInjector(injectImpulseJoint, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tconst newJoint = computed<TJoinType | null>(() => {\n\t\t\tconst worldSingleton = physics.worldSingleton();\n\t\t\tif (!worldSingleton) return null;\n\n\t\t\tconst a = typeof bodyA === 'function' ? resolveRef(bodyA()) : resolveRef(bodyA);\n\t\t\tconst b = typeof bodyB === 'function' ? resolveRef(bodyB()) : resolveRef(bodyB);\n\t\t\tif (!a || !b) return null;\n\n\t\t\tconst jointData = typeof data === 'function' ? data() : data;\n\t\t\tif (!jointData) return null;\n\n\t\t\treturn worldSingleton.proxy.createImpulseJoint(jointData, a, b, true) as TJoinType;\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst worldSingleton = physics.worldSingleton();\n\t\t\tif (!worldSingleton) return;\n\n\t\t\tconst joint = newJoint();\n\t\t\tif (!joint) return;\n\n\t\t\tonCleanup(() => {\n\t\t\t\tif (worldSingleton.proxy.getImpulseJoint(joint.handle)) {\n\t\t\t\t\tworldSingleton.proxy.removeImpulseJoint(joint, true);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn newJoint;\n\t});\n}\n\nfunction createJoint<TJointParams, TJoinType extends ImpulseJoint>(\n\tjointDataFn: (rapier: NonNullable<ReturnType<NgtrPhysics['rapier']>>, data: TJointParams) => JointData,\n) {\n\treturn function _injectJoint(\n\t\tbodyA: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t\tbodyB: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t\t{ injector, data }: { injector?: Injector; data: TJointParams },\n\t) {\n\t\treturn assertInjector(_injectJoint, injector, () => {\n\t\t\tconst physics = inject(NgtrPhysics);\n\n\t\t\tconst jointData = computed(() => {\n\t\t\t\tconst rapier = physics.rapier();\n\t\t\t\tif (!rapier) return null;\n\t\t\t\treturn jointDataFn(rapier, data);\n\t\t\t});\n\n\t\t\treturn injectImpulseJoint<TJoinType>(bodyA, bodyB, { injector, data: jointData });\n\t\t});\n\t};\n}\n\n/**\n * A fixed joint ensures that two rigid-bodies don't move relative to each other.\n * Fixed joints are characterized by one local frame (represented by an isometry) on each rigid-body.\n * The fixed-joint makes these frames coincide in world-space.\n *\n * @category Hooks - Joints\n */\nexport const injectFixedJoint = createJoint<NgtrFixedJointParams, FixedImpulseJoint>((rapier, data) =>\n\trapier.JointData.fixed(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tquaternionToRapierQuaternion(data.body1LocalFrame),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tquaternionToRapierQuaternion(data.body2LocalFrame),\n\t),\n);\n\n/**\n * The spherical joint ensures that two points on the local-spaces of two rigid-bodies always coincide (it prevents any relative\n * translational motion at this points). This is typically used to simulate ragdolls arms, pendulums, etc.\n * They are characterized by one local anchor on each rigid-body. Each anchor represents the location of the\n * points that need to coincide on the local-space of each rigid-body.\n *\n * @category Hooks - Joints\n */\nexport const injectSphericalJoint = createJoint<NgtrSphericalJointParams, SphericalImpulseJoint>((rapier, data) =>\n\trapier.JointData.spherical(vector3ToRapierVector(data.body1Anchor), vector3ToRapierVector(data.body2Anchor)),\n);\n\n/**\n * The revolute joint prevents any relative movement between two rigid-bodies, except for relative\n * rotations along one axis. This is typically used to simulate wheels, fans, etc.\n * They are characterized by one local anchor as well as one local axis on each rigid-body.\n *\n * @category Hooks - Joints\n */\nexport const injectRevoluteJoint = createJoint<NgtrRevoluteJointParams, RevoluteImpulseJoint>((rapier, data) => {\n\tconst jointData = rapier.JointData.revolute(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tvector3ToRapierVector(data.axis),\n\t);\n\n\tif (data.limits) {\n\t\tjointData.limitsEnabled = true;\n\t\tjointData.limits = data.limits;\n\t}\n\n\treturn jointData;\n});\n\n/**\n * The prismatic joint prevents any relative movement between two rigid-bodies, except for relative translations along one axis.\n * It is characterized by one local anchor as well as one local axis on each rigid-body. In 3D, an optional\n * local tangent axis can be specified for each rigid-body.\n *\n * @category Hooks - Joints\n */\nexport const injectPrismaticJoint = createJoint<NgtrPrismaticJointParams, PrismaticImpulseJoint>((rapier, data) => {\n\tconst jointData = rapier.JointData.prismatic(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tvector3ToRapierVector(data.axis),\n\t);\n\n\tif (data.limits) {\n\t\tjointData.limitsEnabled = true;\n\t\tjointData.limits = data.limits;\n\t}\n\n\treturn jointData;\n});\n\n/**\n * The rope joint limits the max distance between two bodies.\n * @category Hooks - Joints\n */\nexport const injectRopeJoint = createJoint<NgtrRopeJointParams, RopeImpulseJoint>((rapier, data) =>\n\trapier.JointData.rope(data.length, vector3ToRapierVector(data.body1Anchor), vector3ToRapierVector(data.body2Anchor)),\n);\n\n/**\n * The spring joint applies a force proportional to the distance between two objects.\n * @category Hooks - Joints\n */\nexport const injectSpringJoint = createJoint<NgtrSpringJointParams, SpringImpulseJoint>((rapier, data) => {\n\treturn rapier.JointData.spring(\n\t\tdata.restLength,\n\t\tdata.stiffness,\n\t\tdata.damping,\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t);\n});\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tinput,\n} from '@angular/core';\nimport { extend, getLocalState } from 'angular-three';\nimport { Object3D } from 'three';\nimport { NgtrPhysics } from './physics';\nimport { NgtrAnyCollider, NgtrRigidBody } from './rigid-body';\nimport { NgtrRigidBodyAutoCollider } from './types';\nimport { createColliderOptions } from './utils';\n\n@Component({\n\tselector: 'ngt-object3D[ngtrMeshCollider]',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ng-content />\n\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t<ngt-object3D\n\t\t\t\t[ngtrCollider]=\"childColliderOption.shape\"\n\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t[name]=\"objectRef.nativeElement.name + '-mesh-collider-' + $index\"\n\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t/>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrAnyCollider],\n})\nexport class NgtrMeshCollider {\n\tcolliders = input.required<NgtrRigidBodyAutoCollider>({ alias: 'ngtrMeshCollider' });\n\n\tobjectRef = inject<ElementRef<Object3D>>(ElementRef);\n\trigidBody = inject(NgtrRigidBody);\n\tphysics = inject(NgtrPhysics);\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst rigidBodyOptions = this.rigidBody.options();\n\t\trigidBodyOptions.colliders = this.colliders();\n\n\t\tconst objectLocalState = getLocalState(this.objectRef.nativeElement);\n\t\tif (!objectLocalState) return [];\n\n\t\t// track object's children\n\t\tobjectLocalState.nonObjects();\n\t\tobjectLocalState.objects();\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, rigidBodyOptions, false);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\t\tthis.objectRef.nativeElement.userData ??= {};\n\t\tthis.objectRef.nativeElement.userData['ngtrRapierType'] = 'MeshCollider';\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["RapierVector3","RapierQuaternion","defaultOptions","i1.NgtrAnyCollider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"angular-three-rapier.mjs","sources":["../../../../libs/rapier/src/lib/debug.ts","../../../../libs/rapier/src/lib/frame-stepper.ts","../../../../libs/rapier/src/lib/shared.ts","../../../../libs/rapier/src/lib/utils.ts","../../../../libs/rapier/src/lib/physics.ts","../../../../libs/rapier/src/lib/rigid-body.ts","../../../../libs/rapier/src/lib/colliders.ts","../../../../libs/rapier/src/lib/instanced-rigid-bodies.ts","../../../../libs/rapier/src/lib/joints.ts","../../../../libs/rapier/src/lib/mesh-collider.ts","../../../../libs/rapier/src/angular-three-rapier.ts"],"sourcesContent":["import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { World } from '@dimforge/rapier3d-compat';\nimport { extend, injectBeforeRender } from 'angular-three';\nimport { BufferAttribute, Group, LineBasicMaterial, LineSegments } from 'three';\n\n@Component({\n\tselector: 'ngtr-debug',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-group>\n\t\t\t<ngt-line-segments #lineSegments [frustumCulled]=\"false\">\n\t\t\t\t<ngt-line-basic-material color=\"white\" [vertexColors]=\"true\" />\n\t\t\t\t<ngt-buffer-geometry />\n\t\t\t</ngt-line-segments>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtrDebug {\n\tworld = input.required<World | undefined>();\n\n\tprivate lineSegmentsRef = viewChild.required<ElementRef<LineSegments>>('lineSegments');\n\n\tconstructor() {\n\t\textend({ Group, LineSegments, LineBasicMaterial, BufferAttribute });\n\n\t\tinjectBeforeRender(() => {\n\t\t\tconst [world, lineSegments] = [this.world(), this.lineSegmentsRef().nativeElement];\n\t\t\tif (!world || !lineSegments) return;\n\n\t\t\tconst buffers = world.debugRender();\n\n\t\t\tlineSegments.geometry.setAttribute('position', new BufferAttribute(buffers.vertices, 3));\n\t\t\tlineSegments.geometry.setAttribute('color', new BufferAttribute(buffers.colors, 4));\n\t\t});\n\t}\n}\n","import { Directive, effect, input } from '@angular/core';\nimport { injectStore } from 'angular-three';\nimport { NgtrPhysicsOptions } from './types';\n\n@Directive({ standalone: true, selector: 'ngtr-frame-stepper' })\nexport class NgtrFrameStepper {\n\tready = input(false);\n\tupdatePriority = input<number | undefined>(0);\n\tstepFn = input.required<(delta: number) => void>();\n\ttype = input.required<NgtrPhysicsOptions['updateLoop']>();\n\n\tconstructor() {\n\t\tconst store = injectStore();\n\n\t\teffect((onCleanup) => {\n\t\t\tconst ready = this.ready();\n\t\t\tif (!ready) return;\n\n\t\t\tconst [type, updatePriority, stepFn] = [this.type(), this.updatePriority(), this.stepFn()];\n\t\t\tif (type === 'follow') {\n\t\t\t\tconst cleanup = store.snapshot.internal.subscribe(\n\t\t\t\t\t({ delta }) => {\n\t\t\t\t\t\tstepFn(delta);\n\t\t\t\t\t},\n\t\t\t\t\tupdatePriority,\n\t\t\t\t\tstore,\n\t\t\t\t);\n\t\t\t\tonCleanup(() => cleanup());\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet lastFrame = 0;\n\t\t\tlet raf: ReturnType<typeof requestAnimationFrame> = 0;\n\t\t\tconst loop = () => {\n\t\t\t\tconst now = performance.now();\n\t\t\t\tconst delta = now - lastFrame;\n\t\t\t\traf = requestAnimationFrame(loop);\n\t\t\t\tstepFn(delta);\n\t\t\t\tlastFrame = now;\n\t\t\t};\n\n\t\t\traf = requestAnimationFrame(loop);\n\t\t\tonCleanup(() => cancelAnimationFrame(raf));\n\t\t});\n\t}\n}\n","import { Euler, Matrix4, Object3D, Quaternion, Vector3 } from 'three';\n\nexport const _quaternion = new Quaternion();\nexport const _euler = new Euler();\nexport const _vector3 = new Vector3();\nexport const _object3d = new Object3D();\nexport const _matrix4 = new Matrix4();\nexport const _position = new Vector3();\nexport const _rotation = new Quaternion();\nexport const _scale = new Vector3();\n","import { Quaternion as RapierQuaternion, Vector3 as RapierVector3 } from '@dimforge/rapier3d-compat';\nimport { NgtEuler, NgtQuaternion, NgtVector3 } from 'angular-three';\nimport { BufferGeometry, Euler, Mesh, Object3D, Vector3 } from 'three';\nimport { mergeVertices } from 'three-stdlib';\nimport { _matrix4, _position, _quaternion, _rotation, _scale } from './shared';\nimport { NgtrColliderOptions, NgtrColliderShape, NgtrRigidBodyAutoCollider, NgtrRigidBodyOptions } from './types';\n\n/**\n * Creates a proxy that will create a singleton instance of the given class\n * when a property is accessed, and not before.\n *\n * @returns A proxy and a reset function, so that the instance can created again\n */\nexport const createSingletonProxy = <\n\tSingletonClass extends object,\n\tCreationFn extends () => SingletonClass = () => SingletonClass,\n>(\n\t/**\n\t * A function that returns a new instance of the class\n\t */\n\tcreateInstance: CreationFn,\n): {\n\tproxy: SingletonClass;\n\treset: () => void;\n\tset: (newInstance: SingletonClass) => void;\n} => {\n\tlet instance: SingletonClass | undefined;\n\n\tconst handler: ProxyHandler<SingletonClass> = {\n\t\tget(target, prop) {\n\t\t\tif (!instance) {\n\t\t\t\tinstance = createInstance();\n\t\t\t}\n\t\t\treturn Reflect.get(instance!, prop);\n\t\t},\n\t\tset(target, prop, value) {\n\t\t\tif (!instance) {\n\t\t\t\tinstance = createInstance();\n\t\t\t}\n\t\t\treturn Reflect.set(instance!, prop, value);\n\t\t},\n\t};\n\n\tconst proxy = new Proxy({} as SingletonClass, handler) as SingletonClass;\n\n\tconst reset = () => {\n\t\tinstance = undefined;\n\t};\n\n\tconst set = (newInstance: SingletonClass) => {\n\t\tinstance = newInstance;\n\t};\n\n\t/**\n\t * Return the proxy and a reset function\n\t */\n\treturn { proxy, reset, set };\n};\n\nexport function rapierQuaternionToQuaternion({ x, y, z, w }: RapierQuaternion) {\n\treturn _quaternion.set(x, y, z, w);\n}\n\nexport function vector3ToRapierVector(v: NgtVector3) {\n\tif (Array.isArray(v)) {\n\t\treturn new RapierVector3(v[0], v[1], v[2]);\n\t}\n\n\tif (typeof v === 'number') {\n\t\treturn new RapierVector3(v, v, v);\n\t}\n\tconst vector = v as Vector3;\n\treturn new RapierVector3(vector.x, vector.y, vector.z);\n}\n\nexport function quaternionToRapierQuaternion(v: NgtQuaternion) {\n\tif (Array.isArray(v)) {\n\t\treturn new RapierQuaternion(v[0], v[1], v[2], v[3]);\n\t}\n\treturn new RapierQuaternion(v.x, v.y, v.z, v.w);\n}\n\nfunction isChildOfMeshCollider(child: Mesh) {\n\tlet flag = false;\n\tchild.traverseAncestors((a) => {\n\t\tif (a.userData['ngtRapierType'] === 'MeshCollider') flag = true;\n\t});\n\treturn flag;\n}\n\nconst autoColliderMap = {\n\tcuboid: 'cuboid',\n\tball: 'ball',\n\thull: 'convexHull',\n\ttrimesh: 'trimesh',\n};\n\nfunction getColliderArgsFromGeometry(\n\tgeometry: BufferGeometry,\n\tcolliders: NgtrRigidBodyAutoCollider,\n): { args: unknown[]; offset: Vector3 } {\n\tswitch (colliders) {\n\t\tcase 'cuboid': {\n\t\t\tgeometry.computeBoundingBox();\n\t\t\tconst { boundingBox } = geometry;\n\t\t\tconst size = boundingBox!.getSize(new Vector3());\n\t\t\treturn {\n\t\t\t\targs: [size.x / 2, size.y / 2, size.z / 2],\n\t\t\t\toffset: boundingBox!.getCenter(new Vector3()),\n\t\t\t};\n\t\t}\n\n\t\tcase 'ball': {\n\t\t\tgeometry.computeBoundingSphere();\n\t\t\tconst { boundingSphere } = geometry;\n\n\t\t\tconst radius = boundingSphere!.radius;\n\n\t\t\treturn {\n\t\t\t\targs: [radius],\n\t\t\t\toffset: boundingSphere!.center,\n\t\t\t};\n\t\t}\n\n\t\tcase 'trimesh': {\n\t\t\tconst clonedGeometry = geometry.index ? geometry.clone() : mergeVertices(geometry);\n\n\t\t\treturn {\n\t\t\t\targs: [clonedGeometry.attributes['position'].array as Float32Array, clonedGeometry.index?.array as Uint32Array],\n\t\t\t\toffset: new Vector3(),\n\t\t\t};\n\t\t}\n\n\t\tcase 'hull': {\n\t\t\tconst clonedGeometry = geometry.clone();\n\t\t\treturn {\n\t\t\t\targs: [clonedGeometry.attributes['position'].array as Float32Array],\n\t\t\t\toffset: new Vector3(),\n\t\t\t};\n\t\t}\n\t}\n\n\treturn { args: [], offset: new Vector3() };\n}\n\nexport function createColliderOptions(object: Object3D, options: NgtrRigidBodyOptions, ignoreMeshColliders = true) {\n\tconst childColliderOptions: {\n\t\tcolliderOptions: NgtrColliderOptions;\n\t\targs: unknown[];\n\t\tshape: NgtrColliderShape;\n\t\trotation: NgtEuler;\n\t\tposition: NgtVector3;\n\t\tscale: NgtVector3;\n\t}[] = [];\n\tobject.updateWorldMatrix(true, false);\n\tconst invertedParentMatrixWorld = object.matrixWorld.clone().invert();\n\n\tconst colliderFromChild = (child: Object3D) => {\n\t\tif ((child as Mesh).isMesh) {\n\t\t\tif (ignoreMeshColliders && isChildOfMeshCollider(child as Mesh)) return;\n\n\t\t\tconst worldScale = child.getWorldScale(_scale);\n\t\t\tconst shape = autoColliderMap[options.colliders || 'cuboid'] as NgtrColliderShape;\n\t\t\tchild.updateWorldMatrix(true, false);\n\t\t\t_matrix4.copy(child.matrixWorld).premultiply(invertedParentMatrixWorld).decompose(_position, _rotation, _scale);\n\n\t\t\tconst rotationEuler = new Euler().setFromQuaternion(_rotation, 'XYZ');\n\n\t\t\tconst { geometry } = child as Mesh;\n\t\t\tconst { args, offset } = getColliderArgsFromGeometry(geometry, options.colliders || 'cuboid');\n\t\t\tconst { mass, linearDamping, angularDamping, canSleep, ccd, gravityScale, softCcdPrediction, ...rest } = options;\n\n\t\t\tchildColliderOptions.push({\n\t\t\t\tcolliderOptions: rest,\n\t\t\t\targs,\n\t\t\t\tshape,\n\t\t\t\trotation: [rotationEuler.x, rotationEuler.y, rotationEuler.z],\n\t\t\t\tposition: [\n\t\t\t\t\t_position.x + offset.x * worldScale.x,\n\t\t\t\t\t_position.y + offset.y * worldScale.y,\n\t\t\t\t\t_position.z + offset.z * worldScale.z,\n\t\t\t\t],\n\t\t\t\tscale: [worldScale.x, worldScale.y, worldScale.z],\n\t\t\t});\n\t\t}\n\t};\n\n\tif (options.includeInvisible) {\n\t\tobject.traverse(colliderFromChild);\n\t} else {\n\t\tobject.traverseVisible(colliderFromChild);\n\t}\n\n\treturn childColliderOptions;\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tDirective,\n\teffect,\n\tinject,\n\tinput,\n\tsignal,\n\tTemplateRef,\n\tuntracked,\n} from '@angular/core';\nimport RAPIER, { ColliderHandle, EventQueue, Rotation, Vector, World } from '@dimforge/rapier3d-compat';\nimport { injectStore, pick, vector3 } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { MathUtils, Quaternion, Vector3 } from 'three';\nimport { NgtrDebug } from './debug';\nimport { NgtrFrameStepper } from './frame-stepper';\nimport { _matrix4, _position, _rotation, _scale } from './shared';\nimport {\n\tNgtrColliderStateMap,\n\tNgtrCollisionPayload,\n\tNgtrCollisionSource,\n\tNgtrEventMap,\n\tNgtrPhysicsOptions,\n\tNgtrRigidBodyStateMap,\n\tNgtrWorldStepCallbackSet,\n} from './types';\nimport { createSingletonProxy, rapierQuaternionToQuaternion } from './utils';\n\nconst defaultOptions: NgtrPhysicsOptions = {\n\tgravity: [0, -9.81, 0],\n\tallowedLinearError: 0.001,\n\tnumSolverIterations: 4,\n\tnumAdditionalFrictionIterations: 4,\n\tnumInternalPgsIterations: 1,\n\tpredictionDistance: 0.002,\n\tminIslandSize: 128,\n\tmaxCcdSubsteps: 1,\n\tcontactNaturalFrequency: 30,\n\terp: 0.8,\n\tlengthUnit: 1,\n\tcolliders: 'cuboid',\n\tupdateLoop: 'follow',\n\tinterpolate: true,\n\tpaused: false,\n\ttimeStep: 1 / 60,\n\tdebug: false,\n};\n\n@Directive({ selector: 'ng-template[rapierFallback]', standalone: true })\nexport class NgtrPhysicsFallback {\n\tstatic ngTemplateContextGuard(_: NgtrPhysicsFallback, ctx: unknown): ctx is { error: string } {\n\t\treturn true;\n\t}\n}\n\n@Component({\n\tselector: 'ngtr-physics',\n\tstandalone: true,\n\ttemplate: `\n\t\t@if (rapierConstruct()) {\n\t\t\t@if (debug()) {\n\t\t\t\t<ngtr-debug [world]=\"worldSingleton()?.proxy\" />\n\t\t\t}\n\n\t\t\t<ngtr-frame-stepper\n\t\t\t\t[ready]=\"ready()\"\n\t\t\t\t[stepFn]=\"step.bind(this)\"\n\t\t\t\t[type]=\"updateLoop()\"\n\t\t\t\t[updatePriority]=\"updatePriority()\"\n\t\t\t/>\n\n\t\t\t<ng-container [ngTemplateOutlet]=\"content()\" />\n\t\t} @else if (rapierError() && !!fallbackContent()) {\n\t\t\t<ng-container [ngTemplateOutlet]=\"$any(fallbackContent())\" [ngTemplateOutletContext]=\"{ error: rapierError() }\" />\n\t\t}\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrDebug, NgtrFrameStepper, NgTemplateOutlet],\n})\nexport class NgtrPhysics {\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tcontent = contentChild.required(TemplateRef);\n\tfallbackContent = contentChild(NgtrPhysicsFallback);\n\n\tprotected updatePriority = pick(this.options, 'updatePriority');\n\tprotected updateLoop = pick(this.options, 'updateLoop');\n\n\tprivate numSolverIterations = pick(this.options, 'numSolverIterations');\n\tprivate numAdditionalFrictionIterations = pick(this.options, 'numAdditionalFrictionIterations');\n\tprivate numInternalPgsIterations = pick(this.options, 'numInternalPgsIterations');\n\tprivate allowedLinearError = pick(this.options, 'allowedLinearError');\n\tprivate minIslandSize = pick(this.options, 'minIslandSize');\n\tprivate maxCcdSubsteps = pick(this.options, 'maxCcdSubsteps');\n\tprivate predictionDistance = pick(this.options, 'predictionDistance');\n\tprivate contactNaturalFrequency = pick(this.options, 'contactNaturalFrequency');\n\tprivate lengthUnit = pick(this.options, 'lengthUnit');\n\tprivate timeStep = pick(this.options, 'timeStep');\n\tprivate interpolate = pick(this.options, 'interpolate');\n\n\tpaused = pick(this.options, 'paused');\n\tdebug = pick(this.options, 'debug');\n\tcolliders = pick(this.options, 'colliders');\n\n\tprivate gravity = vector3(this.options, 'gravity');\n\n\tprivate store = injectStore();\n\tprivate destroyRef = inject(DestroyRef);\n\n\tprotected rapierConstruct = signal<typeof RAPIER | null>(null);\n\tprotected rapierError = signal<string | null>(null);\n\trapier = this.rapierConstruct.asReadonly();\n\n\tready = computed(() => !!this.rapier());\n\tworldSingleton = computed(() => {\n\t\tconst rapier = this.rapier();\n\t\tif (!rapier) return null;\n\t\treturn createSingletonProxy<World>(() => new rapier.World(untracked(this.gravity)));\n\t});\n\n\trigidBodyStates: NgtrRigidBodyStateMap = new Map();\n\tcolliderStates: NgtrColliderStateMap = new Map();\n\trigidBodyEvents: NgtrEventMap = new Map();\n\tcolliderEvents: NgtrEventMap = new Map();\n\tprivate beforeStepCallbacks: NgtrWorldStepCallbackSet = new Set();\n\tprivate afterStepCallbacks: NgtrWorldStepCallbackSet = new Set();\n\n\tprivate eventQueue = computed(() => {\n\t\tconst rapier = this.rapier();\n\t\tif (!rapier) return null;\n\t\treturn new EventQueue(false);\n\t});\n\n\tprivate steppingState: {\n\t\taccumulator: number;\n\t\tpreviousState: Record<number, { position: Vector; rotation: Rotation }>;\n\t} = { accumulator: 0, previousState: {} };\n\n\tconstructor() {\n\t\timport('@dimforge/rapier3d-compat')\n\t\t\t.then((rapier) => rapier.init().then(() => rapier))\n\t\t\t.then(this.rapierConstruct.set.bind(this.rapierConstruct))\n\t\t\t.catch((err) => {\n\t\t\t\tconsole.error(`[NGT] Failed to load rapier3d-compat`, err);\n\t\t\t\tthis.rapierError.set(err?.message ?? err.toString());\n\t\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateWorldEffect();\n\t\t});\n\n\t\tthis.destroyRef.onDestroy(() => {\n\t\t\tconst world = this.worldSingleton();\n\t\t\tif (world) {\n\t\t\t\tworld.proxy.free();\n\t\t\t\tworld.reset();\n\t\t\t}\n\t\t});\n\t}\n\n\tstep(delta: number) {\n\t\tif (!this.paused()) {\n\t\t\tthis.internalStep(delta);\n\t\t}\n\t}\n\n\tprivate updateWorldEffect() {\n\t\tconst world = this.worldSingleton();\n\t\tif (!world) return;\n\n\t\tworld.proxy.gravity = this.gravity();\n\t\tworld.proxy.integrationParameters.numSolverIterations = this.numSolverIterations();\n\t\tworld.proxy.integrationParameters.numAdditionalFrictionIterations = this.numAdditionalFrictionIterations();\n\t\tworld.proxy.integrationParameters.numInternalPgsIterations = this.numInternalPgsIterations();\n\t\tworld.proxy.integrationParameters.normalizedAllowedLinearError = this.allowedLinearError();\n\t\tworld.proxy.integrationParameters.minIslandSize = this.minIslandSize();\n\t\tworld.proxy.integrationParameters.maxCcdSubsteps = this.maxCcdSubsteps();\n\t\tworld.proxy.integrationParameters.normalizedPredictionDistance = this.predictionDistance();\n\t\tworld.proxy.integrationParameters.contact_natural_frequency = this.contactNaturalFrequency();\n\t\tworld.proxy.lengthUnit = this.lengthUnit();\n\t}\n\n\tprivate internalStep(delta: number) {\n\t\tconst worldSingleton = this.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst eventQueue = this.eventQueue();\n\t\tif (!eventQueue) return;\n\n\t\tconst world = worldSingleton.proxy;\n\t\tconst [timeStep, interpolate, paused] = [this.timeStep(), this.interpolate(), this.paused()];\n\n\t\t/* Check if the timestep is supposed to be variable. We'll do this here\n once so we don't have to string-check every frame. */\n\t\tconst timeStepVariable = timeStep === 'vary';\n\n\t\t/**\n\t\t * Fixed timeStep simulation progression\n\t\t * @see https://gafferongames.com/post/fix_your_timestep/\n\t\t */\n\t\tconst clampedDelta = MathUtils.clamp(delta, 0, 0.5);\n\n\t\tconst stepWorld = (innerDelta: number) => {\n\t\t\t// Trigger beforeStep callbacks\n\t\t\tthis.beforeStepCallbacks.forEach((callback) => {\n\t\t\t\tcallback(world);\n\t\t\t});\n\n\t\t\tworld.timestep = innerDelta;\n\t\t\tworld.step(eventQueue);\n\n\t\t\t// Trigger afterStep callbacks\n\t\t\tthis.afterStepCallbacks.forEach((callback) => {\n\t\t\t\tcallback(world);\n\t\t\t});\n\t\t};\n\n\t\tif (timeStepVariable) {\n\t\t\tstepWorld(clampedDelta);\n\t\t} else {\n\t\t\t// don't step time forwards if paused\n\t\t\t// Increase accumulator\n\t\t\tthis.steppingState.accumulator += clampedDelta;\n\n\t\t\twhile (this.steppingState.accumulator >= timeStep) {\n\t\t\t\t// Set up previous state\n\t\t\t\t// needed for accurate interpolations if the world steps more than once\n\t\t\t\tif (interpolate) {\n\t\t\t\t\tthis.steppingState.previousState = {};\n\t\t\t\t\tworld.forEachRigidBody((body) => {\n\t\t\t\t\t\tthis.steppingState.previousState[body.handle] = {\n\t\t\t\t\t\t\tposition: body.translation(),\n\t\t\t\t\t\t\trotation: body.rotation(),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tstepWorld(timeStep);\n\t\t\t\tthis.steppingState.accumulator -= timeStep;\n\t\t\t}\n\t\t}\n\n\t\tconst interpolationAlpha =\n\t\t\ttimeStepVariable || !interpolate || paused ? 1 : this.steppingState.accumulator / timeStep;\n\n\t\t// Update meshes\n\t\tthis.rigidBodyStates.forEach((state, handle) => {\n\t\t\tconst rigidBody = world.getRigidBody(handle);\n\n\t\t\tconst events = this.rigidBodyEvents.get(handle);\n\t\t\tif (events?.onSleep || events?.onWake) {\n\t\t\t\tif (rigidBody.isSleeping() && !state.isSleeping) events?.onSleep?.();\n\t\t\t\tif (!rigidBody.isSleeping() && state.isSleeping) events?.onWake?.();\n\t\t\t\tstate.isSleeping = rigidBody.isSleeping();\n\t\t\t}\n\n\t\t\tif (!rigidBody || (rigidBody.isSleeping() && !('isInstancedMesh' in state.object)) || !state.setMatrix) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// New states\n\t\t\tlet t = rigidBody.translation() as Vector3;\n\t\t\tlet r = rigidBody.rotation() as Quaternion;\n\n\t\t\tlet previousState = this.steppingState.previousState[handle];\n\n\t\t\tif (previousState) {\n\t\t\t\t// Get previous simulated world position\n\t\t\t\t_matrix4\n\t\t\t\t\t.compose(previousState.position as Vector3, rapierQuaternionToQuaternion(previousState.rotation), state.scale)\n\t\t\t\t\t.premultiply(state.invertedWorldMatrix)\n\t\t\t\t\t.decompose(_position, _rotation, _scale);\n\n\t\t\t\t// Apply previous tick position\n\t\t\t\tif (state.meshType == 'mesh') {\n\t\t\t\t\tstate.object.position.copy(_position);\n\t\t\t\t\tstate.object.quaternion.copy(_rotation);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Get new position\n\t\t\t_matrix4\n\t\t\t\t.compose(t, rapierQuaternionToQuaternion(r), state.scale)\n\t\t\t\t.premultiply(state.invertedWorldMatrix)\n\t\t\t\t.decompose(_position, _rotation, _scale);\n\n\t\t\tif (state.meshType == 'instancedMesh') {\n\t\t\t\tstate.setMatrix(_matrix4);\n\t\t\t} else {\n\t\t\t\t// Interpolate to new position\n\t\t\t\tstate.object.position.lerp(_position, interpolationAlpha);\n\t\t\t\tstate.object.quaternion.slerp(_rotation, interpolationAlpha);\n\t\t\t}\n\t\t});\n\n\t\teventQueue.drainCollisionEvents((handle1, handle2, started) => {\n\t\t\tconst source1 = this.getSourceFromColliderHandle(handle1);\n\t\t\tconst source2 = this.getSourceFromColliderHandle(handle2);\n\n\t\t\t// Collision Events\n\t\t\tif (!source1?.collider.object || !source2?.collider.object) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst collisionPayload1 = this.getCollisionPayloadFromSource(source1, source2);\n\t\t\tconst collisionPayload2 = this.getCollisionPayloadFromSource(source2, source1);\n\n\t\t\tif (started) {\n\t\t\t\tworld.contactPair(source1.collider.object, source2.collider.object, (manifold, flipped) => {\n\t\t\t\t\t/* RigidBody events */\n\t\t\t\t\tsource1.rigidBody.events?.onCollisionEnter?.({ ...collisionPayload1, manifold, flipped });\n\t\t\t\t\tsource2.rigidBody.events?.onCollisionEnter?.({ ...collisionPayload2, manifold, flipped });\n\n\t\t\t\t\t/* Collider events */\n\t\t\t\t\tsource1.collider.events?.onCollisionEnter?.({ ...collisionPayload1, manifold, flipped });\n\t\t\t\t\tsource2.collider.events?.onCollisionEnter?.({ ...collisionPayload2, manifold, flipped });\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsource1.rigidBody.events?.onCollisionExit?.(collisionPayload1);\n\t\t\t\tsource2.rigidBody.events?.onCollisionExit?.(collisionPayload2);\n\t\t\t\tsource1.collider.events?.onCollisionExit?.(collisionPayload1);\n\t\t\t\tsource2.collider.events?.onCollisionExit?.(collisionPayload2);\n\t\t\t}\n\n\t\t\t// Sensor Intersections\n\t\t\tif (started) {\n\t\t\t\tif (world.intersectionPair(source1.collider.object, source2.collider.object)) {\n\t\t\t\t\tsource1.rigidBody.events?.onIntersectionEnter?.(collisionPayload1);\n\t\t\t\t\tsource2.rigidBody.events?.onIntersectionEnter?.(collisionPayload2);\n\t\t\t\t\tsource1.collider.events?.onIntersectionEnter?.(collisionPayload1);\n\t\t\t\t\tsource2.collider.events?.onIntersectionEnter?.(collisionPayload2);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsource1.rigidBody.events?.onIntersectionExit?.(collisionPayload1);\n\t\t\t\tsource2.rigidBody.events?.onIntersectionExit?.(collisionPayload2);\n\t\t\t\tsource1.collider.events?.onIntersectionExit?.(collisionPayload1);\n\t\t\t\tsource2.collider.events?.onIntersectionExit?.(collisionPayload2);\n\t\t\t}\n\t\t});\n\n\t\teventQueue.drainContactForceEvents((event) => {\n\t\t\tconst source1 = this.getSourceFromColliderHandle(event.collider1());\n\t\t\tconst source2 = this.getSourceFromColliderHandle(event.collider2());\n\n\t\t\t// Collision Events\n\t\t\tif (!source1?.collider.object || !source2?.collider.object) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst collisionPayload1 = this.getCollisionPayloadFromSource(source1, source2);\n\t\t\tconst collisionPayload2 = this.getCollisionPayloadFromSource(source2, source1);\n\n\t\t\tsource1.rigidBody.events?.onContactForce?.({\n\t\t\t\t...collisionPayload1,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource2.rigidBody.events?.onContactForce?.({\n\t\t\t\t...collisionPayload2,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource1.collider.events?.onContactForce?.({\n\t\t\t\t...collisionPayload1,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource2.collider.events?.onContactForce?.({\n\t\t\t\t...collisionPayload2,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\t\t});\n\n\t\tworld.forEachActiveRigidBody(() => {\n\t\t\tthis.store.snapshot.invalidate();\n\t\t});\n\t}\n\n\tprivate getSourceFromColliderHandle(handle: ColliderHandle) {\n\t\tconst world = this.worldSingleton();\n\t\tif (!world) return;\n\n\t\tconst collider = world.proxy.getCollider(handle);\n\t\tconst colEvents = this.colliderEvents.get(handle);\n\t\tconst colliderState = this.colliderStates.get(handle);\n\n\t\tconst rigidBodyHandle = collider.parent()?.handle;\n\t\tconst rigidBody = rigidBodyHandle !== undefined ? world.proxy.getRigidBody(rigidBodyHandle) : undefined;\n\t\tconst rigidBodyEvents =\n\t\t\trigidBody && rigidBodyHandle !== undefined ? this.rigidBodyEvents.get(rigidBodyHandle) : undefined;\n\t\tconst rigidBodyState = rigidBodyHandle !== undefined ? this.rigidBodyStates.get(rigidBodyHandle) : undefined;\n\n\t\treturn {\n\t\t\tcollider: { object: collider, events: colEvents, state: colliderState },\n\t\t\trigidBody: { object: rigidBody, events: rigidBodyEvents, state: rigidBodyState },\n\t\t} as NgtrCollisionSource;\n\t}\n\n\tprivate getCollisionPayloadFromSource(target: NgtrCollisionSource, other: NgtrCollisionSource): NgtrCollisionPayload {\n\t\treturn {\n\t\t\ttarget: {\n\t\t\t\trigidBody: target.rigidBody.object,\n\t\t\t\tcollider: target.collider.object,\n\t\t\t\tcolliderObject: target.collider.state?.object,\n\t\t\t\trigidBodyObject: target.rigidBody.state?.object,\n\t\t\t},\n\t\t\tother: {\n\t\t\t\trigidBody: other.rigidBody.object,\n\t\t\t\tcollider: other.collider.object,\n\t\t\t\tcolliderObject: other.collider.state?.object,\n\t\t\t\trigidBodyObject: other.rigidBody.state?.object,\n\t\t\t},\n\t\t};\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDirective,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tmodel,\n\toutput,\n\tuntracked,\n} from '@angular/core';\nimport { ActiveEvents, Collider, ColliderDesc, RigidBody, RigidBodyDesc } from '@dimforge/rapier3d-compat';\nimport {\n\textend,\n\tgetEmitter,\n\tgetLocalState,\n\thasListener,\n\tNgtEuler,\n\tNgtObject3D,\n\tNgtQuaternion,\n\tNgtVector3,\n\tpick,\n} from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { Matrix4, Object3D, Vector3 } from 'three';\nimport { NgtrPhysics } from './physics';\nimport { _matrix4, _position, _rotation, _scale, _vector3 } from './shared';\nimport {\n\tNgtrColliderOptions,\n\tNgtrColliderShape,\n\tNgtrColliderState,\n\tNgtrCollisionEnterPayload,\n\tNgtrCollisionExitPayload,\n\tNgtrContactForcePayload,\n\tNgtrIntersectionEnterPayload,\n\tNgtrIntersectionExitPayload,\n\tNgtrRigidBodyOptions,\n\tNgtrRigidBodyState,\n\tNgtrRigidBodyType,\n} from './types';\nimport { createColliderOptions } from './utils';\n\nconst colliderDefaultOptions: NgtrColliderOptions = {\n\tcontactSkin: 0,\n};\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrCollider]',\n\tstandalone: true,\n\thost: {\n\t\t'[position]': 'position()',\n\t\t'[rotation]': 'rotation()',\n\t\t'[scale]': 'scale()',\n\t\t'[quaternion]': 'quaternion()',\n\t\t'[userData]': 'userData()',\n\t\t'[name]': 'name()',\n\t},\n})\nexport class NgtrAnyCollider {\n\tposition = input<NgtVector3 | undefined>([0, 0, 0]);\n\trotation = input<NgtEuler | undefined>([0, 0, 0]);\n\tscale = input<NgtVector3 | undefined>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion | undefined>([0, 0, 0, 1]);\n\tuserData = input<NgtObject3D['userData'] | undefined>({});\n\tname = input<NgtObject3D['name'] | undefined>();\n\toptions = input(colliderDefaultOptions, { transform: mergeInputs(rigidBodyDefaultOptions) });\n\n\t// TODO: change this to input required when Angular allows setting hostDirective input\n\tshape = model<NgtrColliderShape | undefined>(undefined, { alias: 'ngtrCollider' });\n\targs = model<unknown[]>([]);\n\n\tcollisionEnter = output<NgtrCollisionEnterPayload>();\n\tcollisionExit = output<NgtrCollisionExitPayload>();\n\tintersectionEnter = output<NgtrIntersectionEnterPayload>();\n\tintersectionExit = output<NgtrIntersectionExitPayload>();\n\tcontactForce = output<NgtrContactForcePayload>();\n\n\tprivate sensor = pick(this.options, 'sensor');\n\tprivate collisionGroups = pick(this.options, 'collisionGroups');\n\tprivate solverGroups = pick(this.options, 'solverGroups');\n\tprivate friction = pick(this.options, 'friction');\n\tprivate frictionCombineRule = pick(this.options, 'frictionCombineRule');\n\tprivate restitution = pick(this.options, 'restitution');\n\tprivate restitutionCombineRule = pick(this.options, 'restitutionCombineRule');\n\tprivate activeCollisionTypes = pick(this.options, 'activeCollisionTypes');\n\tprivate contactSkin = pick(this.options, 'contactSkin');\n\tprivate mass = pick(this.options, 'mass');\n\tprivate massProperties = pick(this.options, 'massProperties');\n\tprivate density = pick(this.options, 'density');\n\n\tprivate rigidBody = inject(NgtrRigidBody, { optional: true });\n\tprivate physics = inject(NgtrPhysics);\n\tobjectRef = inject<ElementRef<Object3D>>(ElementRef);\n\n\tprivate scaledArgs = computed(() => {\n\t\tconst [shape, args] = [\n\t\t\tthis.shape(),\n\t\t\tthis.args() as (number | ArrayLike<number> | { x: number; y: number; z: number })[],\n\t\t];\n\n\t\tconst cloned = args.slice();\n\n\t\t// Heightfield uses a vector\n\t\tif (shape === 'heightfield') {\n\t\t\tconst s = cloned[3] as { x: number; y: number; z: number };\n\t\t\ts.x *= this.worldScale.x;\n\t\t\ts.y *= this.worldScale.y;\n\t\t\ts.z *= this.worldScale.z;\n\n\t\t\treturn cloned;\n\t\t}\n\n\t\t// Trimesh and convex scale the vertices\n\t\tif (shape === 'trimesh' || shape === 'convexHull') {\n\t\t\tcloned[0] = this.scaleVertices(cloned[0] as ArrayLike<number>, this.worldScale);\n\t\t\treturn cloned;\n\t\t}\n\n\t\t// prefill with some extra\n\t\tconst scaleArray = [this.worldScale.x, this.worldScale.y, this.worldScale.z, this.worldScale.x, this.worldScale.x];\n\t\treturn cloned.map((arg, index) => scaleArray[index] * (arg as number));\n\t});\n\n\tprivate collider = computed(() => {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return null;\n\n\t\tconst [shape, args, rigidBody] = [this.shape(), this.scaledArgs(), this.rigidBody?.rigidBody()];\n\n\t\t// @ts-expect-error - we know the type of the data\n\t\tconst desc = ColliderDesc[shape](...args);\n\t\tif (!desc) return null;\n\n\t\treturn worldSingleton.proxy.createCollider(desc, rigidBody ?? undefined);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createColliderStateEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createColliderEventsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateColliderEffect();\n\t\t\tthis.updateMassPropertiesEffect();\n\t\t});\n\t}\n\n\tget worldScale() {\n\t\treturn this.objectRef.nativeElement.getWorldScale(new Vector3());\n\t}\n\n\tsetShape(shape: NgtrColliderShape) {\n\t\tthis.shape.set(shape);\n\t}\n\n\tsetArgs(args: unknown[]) {\n\t\tthis.args.set(args);\n\t}\n\n\tprivate createColliderStateEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst localState = getLocalState(this.objectRef.nativeElement);\n\t\tif (!localState) return;\n\n\t\tconst parent = localState.parent();\n\t\tif (!parent || !(parent as Object3D).isObject3D) return;\n\n\t\tconst state = this.createColliderState(\n\t\t\tcollider,\n\t\t\tthis.objectRef.nativeElement,\n\t\t\tthis.rigidBody?.objectRef.nativeElement,\n\t\t);\n\t\tthis.physics.colliderStates.set(collider.handle, state);\n\n\t\treturn () => {\n\t\t\tthis.physics.colliderStates.delete(collider.handle);\n\t\t\tif (worldSingleton.proxy.getCollider(collider.handle)) {\n\t\t\t\tworldSingleton.proxy.removeCollider(collider, true);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate createColliderEventsEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst collisionEnter = getEmitter(this.collisionEnter);\n\t\tconst collisionExit = getEmitter(this.collisionExit);\n\t\tconst intersectionEnter = getEmitter(this.intersectionEnter);\n\t\tconst intersectionExit = getEmitter(this.intersectionExit);\n\t\tconst contactForce = getEmitter(this.contactForce);\n\n\t\tconst hasCollisionEvent = hasListener(\n\t\t\tthis.collisionEnter,\n\t\t\tthis.collisionExit,\n\t\t\tthis.intersectionEnter,\n\t\t\tthis.intersectionExit,\n\t\t\tthis.rigidBody?.collisionEnter,\n\t\t\tthis.rigidBody?.collisionExit,\n\t\t\tthis.rigidBody?.intersectionEnter,\n\t\t\tthis.rigidBody?.intersectionExit,\n\t\t);\n\t\tconst hasContactForceEvent = hasListener(this.contactForce, this.rigidBody?.contactForce);\n\n\t\tif (hasCollisionEvent && hasContactForceEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.COLLISION_EVENTS | ActiveEvents.CONTACT_FORCE_EVENTS);\n\t\t} else if (hasCollisionEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.COLLISION_EVENTS);\n\t\t} else if (hasContactForceEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.CONTACT_FORCE_EVENTS);\n\t\t}\n\n\t\tthis.physics.colliderEvents.set(collider.handle, {\n\t\t\tonCollisionEnter: collisionEnter,\n\t\t\tonCollisionExit: collisionExit,\n\t\t\tonIntersectionEnter: intersectionEnter,\n\t\t\tonIntersectionExit: intersectionExit,\n\t\t\tonContactForce: contactForce,\n\t\t});\n\t\treturn () => {\n\t\t\tthis.physics.colliderEvents.delete(collider.handle);\n\t\t};\n\t}\n\n\tprivate updateColliderEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst state = this.physics.colliderStates.get(collider.handle);\n\t\tif (!state) return;\n\n\t\t// Update collider position based on the object's position\n\t\tconst parentWorldScale = state.object.parent!.getWorldScale(_vector3);\n\t\tconst parentInvertedWorldMatrix = state.worldParent?.matrixWorld.clone().invert();\n\n\t\tstate.object.updateWorldMatrix(true, false);\n\n\t\t_matrix4.copy(state.object.matrixWorld);\n\n\t\tif (parentInvertedWorldMatrix) {\n\t\t\t_matrix4.premultiply(parentInvertedWorldMatrix);\n\t\t}\n\n\t\t_matrix4.decompose(_position, _rotation, _scale);\n\n\t\tif (collider.parent()) {\n\t\t\tcollider.setTranslationWrtParent({\n\t\t\t\tx: _position.x * parentWorldScale.x,\n\t\t\t\ty: _position.y * parentWorldScale.y,\n\t\t\t\tz: _position.z * parentWorldScale.z,\n\t\t\t});\n\t\t\tcollider.setRotationWrtParent(_rotation);\n\t\t} else {\n\t\t\tcollider.setTranslation({\n\t\t\t\tx: _position.x * parentWorldScale.x,\n\t\t\t\ty: _position.y * parentWorldScale.y,\n\t\t\t\tz: _position.z * parentWorldScale.z,\n\t\t\t});\n\t\t\tcollider.setRotation(_rotation);\n\t\t}\n\n\t\tconst [\n\t\t\tsensor,\n\t\t\tcollisionGroups,\n\t\t\tsolverGroups,\n\t\t\tfriction,\n\t\t\tfrictionCombineRule,\n\t\t\trestitution,\n\t\t\trestitutionCombineRule,\n\t\t\tactiveCollisionTypes,\n\t\t\tcontactSkin,\n\t\t] = [\n\t\t\tthis.sensor(),\n\t\t\tthis.collisionGroups(),\n\t\t\tthis.solverGroups(),\n\t\t\tthis.friction(),\n\t\t\tthis.frictionCombineRule(),\n\t\t\tthis.restitution(),\n\t\t\tthis.restitutionCombineRule(),\n\t\t\tthis.activeCollisionTypes(),\n\t\t\tthis.contactSkin(),\n\t\t];\n\n\t\tif (sensor !== undefined) collider.setSensor(sensor);\n\t\tif (collisionGroups !== undefined) collider.setCollisionGroups(collisionGroups);\n\t\tif (solverGroups !== undefined) collider.setSolverGroups(solverGroups);\n\t\tif (friction !== undefined) collider.setFriction(friction);\n\t\tif (frictionCombineRule !== undefined) collider.setFrictionCombineRule(frictionCombineRule);\n\t\tif (restitution !== undefined) collider.setRestitution(restitution);\n\t\tif (restitutionCombineRule !== undefined) collider.setRestitutionCombineRule(restitutionCombineRule);\n\t\tif (activeCollisionTypes !== undefined) collider.setActiveCollisionTypes(activeCollisionTypes);\n\t\tif (contactSkin !== undefined) collider.setContactSkin(contactSkin);\n\t}\n\n\tprivate updateMassPropertiesEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst [mass, massProperties, density] = [this.mass(), this.massProperties(), this.density()];\n\n\t\tif (density !== undefined) {\n\t\t\tif (mass !== undefined || massProperties !== undefined) {\n\t\t\t\tthrow new Error('[NGT Rapier] Cannot set mass and massProperties along with density');\n\t\t\t}\n\n\t\t\tcollider.setDensity(density);\n\t\t\treturn;\n\t\t}\n\n\t\tif (mass !== undefined) {\n\t\t\tif (massProperties !== undefined) {\n\t\t\t\tthrow new Error('[NGT Rapier] Cannot set massProperties along with mass');\n\t\t\t}\n\t\t\tcollider.setMass(mass);\n\t\t\treturn;\n\t\t}\n\n\t\tif (massProperties !== undefined) {\n\t\t\tcollider.setMassProperties(\n\t\t\t\tmassProperties.mass,\n\t\t\t\tmassProperties.centerOfMass,\n\t\t\t\tmassProperties.principalAngularInertia,\n\t\t\t\tmassProperties.angularInertiaLocalFrame,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate createColliderState(\n\t\tcollider: Collider,\n\t\tobject: Object3D,\n\t\trigidBodyObject?: Object3D | null,\n\t): NgtrColliderState {\n\t\treturn { collider, worldParent: rigidBodyObject || undefined, object };\n\t}\n\n\tprivate scaleVertices(vertices: ArrayLike<number>, scale: Vector3) {\n\t\tconst scaledVerts = Array.from(vertices);\n\n\t\tfor (let i = 0; i < vertices.length / 3; i++) {\n\t\t\tscaledVerts[i * 3] *= scale.x;\n\t\t\tscaledVerts[i * 3 + 1] *= scale.y;\n\t\t\tscaledVerts[i * 3 + 2] *= scale.z;\n\t\t}\n\n\t\treturn scaledVerts;\n\t}\n}\n\nconst RIGID_BODY_TYPE_MAP: Record<NgtrRigidBodyType, number> = {\n\tfixed: 1,\n\tdynamic: 0,\n\tkinematicPosition: 2,\n\tkinematicVelocity: 3,\n};\n\nexport const rigidBodyDefaultOptions: NgtrRigidBodyOptions = {\n\tcanSleep: true,\n\tlinearVelocity: [0, 0, 0],\n\tangularVelocity: [0, 0, 0],\n\tgravityScale: 1,\n\tdominanceGroup: 0,\n\tccd: false,\n\tsoftCcdPrediction: 0,\n\tcontactSkin: 0,\n};\n\n@Component({\n\tselector: 'ngt-object3D[ngtrRigidBody]',\n\texportAs: 'rigidBody',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ng-content />\n\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t<ngt-object3D\n\t\t\t\t[ngtrCollider]=\"childColliderOption.shape\"\n\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t[name]=\"objectRef.nativeElement.name + '-collider-' + $index\"\n\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t/>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\t'[position]': 'position()',\n\t\t'[rotation]': 'rotation()',\n\t\t'[scale]': 'scale()',\n\t\t'[quaternion]': 'quaternion()',\n\t\t'[userData]': 'userData()',\n\t},\n\timports: [NgtrAnyCollider],\n})\nexport class NgtrRigidBody {\n\ttype = input('dynamic', {\n\t\talias: 'ngtrRigidBody',\n\t\ttransform: (value: NgtrRigidBodyType | '' | undefined) => {\n\t\t\tif (value === '' || value === undefined) return 'dynamic' as NgtrRigidBodyType;\n\t\t\treturn value;\n\t\t},\n\t});\n\tposition = input<NgtVector3 | undefined>([0, 0, 0]);\n\trotation = input<NgtEuler | undefined>([0, 0, 0]);\n\tscale = input<NgtVector3 | undefined>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion | undefined>([0, 0, 0, 1]);\n\tuserData = input<NgtObject3D['userData'] | undefined>({});\n\toptions = input(rigidBodyDefaultOptions, { transform: mergeInputs(rigidBodyDefaultOptions) });\n\n\twake = output<void>();\n\tsleep = output<void>();\n\tcollisionEnter = output<NgtrCollisionEnterPayload>();\n\tcollisionExit = output<NgtrCollisionExitPayload>();\n\tintersectionEnter = output<NgtrIntersectionEnterPayload>();\n\tintersectionExit = output<NgtrIntersectionExitPayload>();\n\tcontactForce = output<NgtrContactForcePayload>();\n\n\tprivate canSleep = pick(this.options, 'canSleep');\n\tprivate colliders = pick(this.options, 'colliders');\n\tprivate transformState = pick(this.options, 'transformState');\n\tprivate gravityScale = pick(this.options, 'gravityScale');\n\tprivate dominanceGroup = pick(this.options, 'dominanceGroup');\n\tprivate ccd = pick(this.options, 'ccd');\n\tprivate softCcdPrediction = pick(this.options, 'softCcdPrediction');\n\tprivate additionalSolverIterations = pick(this.options, 'additionalSolverIterations');\n\tprivate linearDamping = pick(this.options, 'linearDamping');\n\tprivate angularDamping = pick(this.options, 'angularDamping');\n\tprivate lockRotations = pick(this.options, 'lockRotations');\n\tprivate lockTranslations = pick(this.options, 'lockTranslations');\n\tprivate enabledRotations = pick(this.options, 'enabledRotations');\n\tprivate enabledTranslations = pick(this.options, 'enabledTranslations');\n\tprivate angularVelocity = pick(this.options, 'angularVelocity');\n\tprivate linearVelocity = pick(this.options, 'linearVelocity');\n\n\tobjectRef = inject<ElementRef<Object3D>>(ElementRef);\n\tprivate physics = inject(NgtrPhysics);\n\n\tprivate bodyType = computed(() => RIGID_BODY_TYPE_MAP[this.type()]);\n\tprivate bodyDesc = computed(() => {\n\t\tconst [canSleep, bodyType] = [this.canSleep(), untracked(this.bodyType), this.colliders()];\n\t\treturn new RigidBodyDesc(bodyType).setCanSleep(canSleep);\n\t});\n\trigidBody = computed(() => {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return null;\n\t\treturn worldSingleton.proxy.createRigidBody(this.bodyDesc());\n\t});\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst colliders = this.colliders();\n\t\t// if self colliders is false explicitly, disable auto colliders for this object entirely.\n\t\tif (colliders === false) return [];\n\n\t\tconst physicsColliders = this.physics.colliders();\n\t\t// if physics colliders is false explicitly AND colliders is not set, disable auto colliders for this object entirely.\n\t\tif (physicsColliders === false && colliders === undefined) return [];\n\n\t\tconst options = untracked(this.options);\n\t\t// if colliders on object is not set, use physics colliders\n\t\tif (!options.colliders) options.colliders = physicsColliders;\n\n\t\tconst objectLocalState = getLocalState(this.objectRef.nativeElement);\n\t\tif (!objectLocalState) return [];\n\n\t\t// track object's parent and non-object children\n\t\tconst [parent] = [objectLocalState.parent(), objectLocalState.nonObjects()];\n\t\tif (!parent || !(parent as Object3D).isObject3D) return [];\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, options, true);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createRigidBodyStateEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createRigidBodyEventsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateRigidBodyEffect();\n\t\t});\n\t}\n\n\tprivate createRigidBodyStateEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst transformState = untracked(this.transformState);\n\n\t\tconst localState = getLocalState(this.objectRef.nativeElement);\n\t\tif (!localState) return;\n\n\t\tconst parent = localState.parent();\n\t\tif (!parent || !(parent as Object3D).isObject3D) return;\n\n\t\tconst state = this.createRigidBodyState(body, this.objectRef.nativeElement);\n\t\tthis.physics.rigidBodyStates.set(body.handle, transformState ? transformState(state) : state);\n\n\t\treturn () => {\n\t\t\tthis.physics.rigidBodyStates.delete(body.handle);\n\t\t\tif (worldSingleton.proxy.getRigidBody(body.handle)) {\n\t\t\t\tworldSingleton.proxy.removeRigidBody(body);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate createRigidBodyEventsEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst wake = getEmitter(this.wake);\n\t\tconst sleep = getEmitter(this.sleep);\n\t\tconst collisionEnter = getEmitter(this.collisionEnter);\n\t\tconst collisionExit = getEmitter(this.collisionExit);\n\t\tconst intersectionEnter = getEmitter(this.intersectionEnter);\n\t\tconst intersectionExit = getEmitter(this.intersectionExit);\n\t\tconst contactForce = getEmitter(this.contactForce);\n\n\t\tthis.physics.rigidBodyEvents.set(body.handle, {\n\t\t\tonWake: wake,\n\t\t\tonSleep: sleep,\n\t\t\tonCollisionEnter: collisionEnter,\n\t\t\tonCollisionExit: collisionExit,\n\t\t\tonIntersectionEnter: intersectionEnter,\n\t\t\tonIntersectionExit: intersectionExit,\n\t\t\tonContactForce: contactForce,\n\t\t});\n\n\t\treturn () => {\n\t\t\tthis.physics.rigidBodyEvents.delete(body.handle);\n\t\t};\n\t}\n\n\tprivate updateRigidBodyEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst state = this.physics.rigidBodyStates.get(body.handle);\n\t\tif (!state) return;\n\n\t\tstate.object.updateWorldMatrix(true, false);\n\t\t_matrix4.copy(state.object.matrixWorld).decompose(_position, _rotation, _scale);\n\t\tbody.setTranslation(_position, true);\n\t\tbody.setRotation(_rotation, true);\n\n\t\tconst [\n\t\t\tgravityScale,\n\t\t\tadditionalSolverIterations,\n\t\t\tlinearDamping,\n\t\t\tangularDamping,\n\t\t\tlockRotations,\n\t\t\tlockTranslations,\n\t\t\tenabledRotations,\n\t\t\tenabledTranslations,\n\t\t\tangularVelocity,\n\t\t\tlinearVelocity,\n\t\t\tccd,\n\t\t\tsoftCcdPrediction,\n\t\t\tdominanceGroup,\n\t\t\tuserData,\n\t\t\tbodyType,\n\t\t] = [\n\t\t\tthis.gravityScale(),\n\t\t\tthis.additionalSolverIterations(),\n\t\t\tthis.linearDamping(),\n\t\t\tthis.angularDamping(),\n\t\t\tthis.lockRotations(),\n\t\t\tthis.lockTranslations(),\n\t\t\tthis.enabledRotations(),\n\t\t\tthis.enabledTranslations(),\n\t\t\tthis.angularVelocity(),\n\t\t\tthis.linearVelocity(),\n\t\t\tthis.ccd(),\n\t\t\tthis.softCcdPrediction(),\n\t\t\tthis.dominanceGroup(),\n\t\t\tthis.userData(),\n\t\t\tthis.bodyType(),\n\t\t];\n\n\t\tbody.setGravityScale(gravityScale, true);\n\t\tif (additionalSolverIterations !== undefined) body.setAdditionalSolverIterations(additionalSolverIterations);\n\t\tif (linearDamping !== undefined) body.setLinearDamping(linearDamping);\n\t\tif (angularDamping !== undefined) body.setAngularDamping(angularDamping);\n\t\tbody.setDominanceGroup(dominanceGroup);\n\t\tif (enabledRotations !== undefined) body.setEnabledRotations(...enabledRotations, true);\n\t\tif (enabledTranslations !== undefined) body.setEnabledTranslations(...enabledTranslations, true);\n\t\tif (lockRotations !== undefined) body.lockRotations(lockRotations, true);\n\t\tif (lockTranslations !== undefined) body.lockTranslations(lockTranslations, true);\n\t\tbody.setAngvel({ x: angularVelocity[0], y: angularVelocity[1], z: angularVelocity[2] }, true);\n\t\tbody.setLinvel({ x: linearVelocity[0], y: linearVelocity[1], z: linearVelocity[2] }, true);\n\t\tbody.enableCcd(ccd);\n\t\tbody.setSoftCcdPrediction(softCcdPrediction);\n\t\tif (userData !== undefined) body.userData = userData;\n\t\tif (bodyType !== body.bodyType()) body.setBodyType(bodyType, true);\n\t}\n\n\tprivate createRigidBodyState(\n\t\trigidBody: RigidBody,\n\t\tobject: Object3D,\n\t\tsetMatrix?: (matrix: Matrix4) => void,\n\t\tgetMatrix?: (matrix: Matrix4) => Matrix4,\n\t\tworldScale?: Vector3,\n\t\tmeshType: NgtrRigidBodyState['meshType'] = 'mesh',\n\t) {\n\t\tobject.updateWorldMatrix(true, false);\n\t\tconst invertedWorldMatrix = object.parent!.matrixWorld.clone().invert();\n\t\treturn {\n\t\t\tobject,\n\t\t\trigidBody,\n\t\t\tinvertedWorldMatrix,\n\t\t\tsetMatrix: setMatrix\n\t\t\t\t? setMatrix\n\t\t\t\t: (matrix: Matrix4) => {\n\t\t\t\t\t\tobject.matrix.copy(matrix);\n\t\t\t\t\t},\n\t\t\tgetMatrix: getMatrix ? getMatrix : (matrix: Matrix4) => matrix.copy(object.matrix),\n\t\t\tscale: worldScale || object.getWorldScale(_scale).clone(),\n\t\t\tisSleeping: false,\n\t\t\tmeshType,\n\t\t};\n\t}\n}\n","import { Directive, effect, inject, input, untracked } from '@angular/core';\nimport { NgtrAnyCollider } from './rigid-body';\nimport {\n\tNgtrBallArgs,\n\tNgtrCapsuleArgs,\n\tNgtrConeArgs,\n\tNgtrConvexHullArgs,\n\tNgtrConvexMeshArgs,\n\tNgtrCuboidArgs,\n\tNgtrCylinderArgs,\n\tNgtrHeightfieldArgs,\n\tNgtrPolylineArgs,\n\tNgtrRoundConeArgs,\n\tNgtrRoundConvexHullArgs,\n\tNgtrRoundConvexMeshArgs,\n\tNgtrRoundCuboidArgs,\n\tNgtrRoundCylinderArgs,\n\tNgtrTrimeshArgs,\n} from './types';\n\nconst ANY_COLLIDER_HOST_DIRECTIVE = {\n\tdirective: NgtrAnyCollider,\n\tinputs: ['options', 'name', 'scale', 'position', 'quaternion', 'rotation', 'userData'],\n\toutputs: ['collisionEnter', 'collisionExit', 'intersectionEnter', 'intersectionExit', 'contactForce'],\n};\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrCuboidCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrCuboidCollider {\n\targs = input.required<NgtrCuboidArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('cuboid');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrCapsuleCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrCapsuleCollider {\n\targs = input.required<NgtrCapsuleArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('capsule');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrBallCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrBallCollider {\n\targs = input.required<NgtrBallArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('ball');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrConvexHullCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrConvexHullCollider {\n\targs = input.required<NgtrConvexHullArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundConvexHull');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrHeightfieldCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrHeightfieldCollider {\n\targs = input.required<NgtrHeightfieldArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('heightfield');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrTrimeshCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrTrimeshCollider {\n\targs = input.required<NgtrTrimeshArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('trimesh');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrPolylineCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrPolylineCollider {\n\targs = input.required<NgtrPolylineArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('polyline');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrRoundCuboidCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundCuboidCollider {\n\targs = input.required<NgtrRoundCuboidArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundCuboid');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrCylinderCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrCylinderCollider {\n\targs = input.required<NgtrCylinderArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('cylinder');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrRoundCylinderCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundCylinderCollider {\n\targs = input.required<NgtrRoundCylinderArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundCylinder');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrConeCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrConeCollider {\n\targs = input.required<NgtrConeArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('cone');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrRoundConeCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundConeCollider {\n\targs = input.required<NgtrRoundConeArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundCone');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrConvexMeshCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrConvexMeshCollider {\n\targs = input.required<NgtrConvexMeshArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('convexMesh');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrRoundConvexHullCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundConvexHullCollider {\n\targs = input.required<NgtrRoundConvexHullArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundConvexHull');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({\n\tselector: 'ngt-object3D[ngtrRoundConvexMeshCollider]',\n\tstandalone: true,\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundConvexMeshCollider {\n\targs = input.required<NgtrRoundConvexMeshArgs>();\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundConvexMesh');\n\t\teffect(() => {\n\t\t\tconst args = this.args();\n\t\t\tuntracked(() => {\n\t\t\t\tanyCollider.setArgs(args);\n\t\t\t});\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tuntracked,\n\tviewChild,\n\tviewChildren,\n} from '@angular/core';\nimport { extend, getLocalState, NgtEuler, NgtObject3D, NgtQuaternion, NgtVector3, pick } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { DynamicDrawUsage, InstancedMesh, Object3D } from 'three';\nimport { NgtrPhysics } from './physics';\nimport { NgtrAnyCollider, NgtrRigidBody, rigidBodyDefaultOptions } from './rigid-body';\nimport { NgtrRigidBodyOptions, NgtrRigidBodyState, NgtrRigidBodyType } from './types';\nimport { createColliderOptions } from './utils';\n\nexport interface NgtrInstancedRigidBodyOptions {\n\tkey: string | number;\n\ttype?: NgtrRigidBodyType;\n\tposition?: NgtVector3;\n\trotation?: NgtEuler;\n\tscale?: NgtVector3;\n\tquaternion?: NgtQuaternion;\n\tuserData?: NgtObject3D['userData'];\n\toptions?: NgtrRigidBodyOptions;\n}\n\nconst defaultOptions: NgtrRigidBodyOptions = rigidBodyDefaultOptions;\n\n@Component({\n\tselector: 'ngt-object3D[ngtrInstancedRigidBodies]',\n\texportAs: 'instancedRigidBodies',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-object3D #instanceWrapper>\n\t\t\t<ng-content />\n\t\t</ngt-object3D>\n\n\t\t@for (instance of instancesOptions(); track instance.key) {\n\t\t\t<ngt-object3D\n\t\t\t\t[ngtrRigidBody]=\"instance.type\"\n\t\t\t\t[options]=\"instance.options\"\n\t\t\t\t[position]=\"instance.position\"\n\t\t\t\t[rotation]=\"instance.rotation\"\n\t\t\t\t[scale]=\"instance.scale\"\n\t\t\t\t[quaternion]=\"instance.quaternion\"\n\t\t\t\t[userData]=\"instance.userData\"\n\t\t\t\t[name]=\"instance.key + '-instanced-rigid-body-' + $index\"\n\t\t\t>\n\t\t\t\t<ng-content select=\"[data-colliders]\" />\n\n\t\t\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t\t\t<ngt-object3D\n\t\t\t\t\t\t[ngtrCollider]=\"childColliderOption.shape\"\n\t\t\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t\t\t[name]=\"objectRef.nativeElement.name + '-instanced-collider-' + $index\"\n\t\t\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t</ngt-object3D>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\t'[position]': 'position()',\n\t\t'[rotation]': 'rotation()',\n\t\t'[scale]': 'scale()',\n\t\t'[quaternion]': 'quaternion()',\n\t\t'[userData]': 'userData()',\n\t},\n\timports: [NgtrRigidBody, NgtrAnyCollider],\n})\nexport class NgtrInstancedRigidBodies {\n\tposition = input<NgtVector3 | undefined>([0, 0, 0]);\n\trotation = input<NgtEuler | undefined>([0, 0, 0]);\n\tscale = input<NgtVector3 | undefined>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion | undefined>([0, 0, 0, 1]);\n\tuserData = input<NgtObject3D['userData'] | undefined>({});\n\tinstances = input([], {\n\t\talias: 'ngtrInstancedRigidBodies',\n\t\ttransform: (value: Array<NgtrInstancedRigidBodyOptions> | '') => {\n\t\t\tif (value === '') return [];\n\t\t\treturn value;\n\t\t},\n\t});\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tinstanceWrapperRef = viewChild.required<ElementRef<Object3D>>('instanceWrapper');\n\trigidBodyRefs = viewChildren(NgtrRigidBody);\n\n\tprivate physics = inject(NgtrPhysics);\n\tobjectRef = inject<ElementRef<Object3D>>(ElementRef);\n\n\tprivate colliders = pick(this.options, 'colliders');\n\n\tprivate instancedMesh = computed(() => {\n\t\tconst instanceWrapper = this.instanceWrapperRef().nativeElement;\n\t\tif (!instanceWrapper) return null;\n\n\t\tconst localState = getLocalState(instanceWrapper);\n\t\tif (!localState) return null;\n\n\t\t// track object's children\n\t\tlocalState.objects();\n\t\tconst firstChild = instanceWrapper.children[0];\n\t\tif (!firstChild || !(firstChild as InstancedMesh).isInstancedMesh) return null;\n\n\t\treturn firstChild as InstancedMesh;\n\t});\n\n\tprotected instancesOptions = computed(() => {\n\t\tconst [instances, options, instancedMesh] = [this.instances(), untracked(this.options), this.instancedMesh()];\n\t\tif (!instancedMesh) return [];\n\t\treturn instances.map(\n\t\t\t(instance, index) =>\n\t\t\t\t({\n\t\t\t\t\t...instance,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\t...(instance.options || {}),\n\t\t\t\t\t\ttransformState: (state) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t\tgetMatrix: (matrix) => {\n\t\t\t\t\t\t\t\t\tinstancedMesh.getMatrixAt(index, matrix);\n\t\t\t\t\t\t\t\t\treturn matrix;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsetMatrix: (matrix) => {\n\t\t\t\t\t\t\t\t\tinstancedMesh.setMatrixAt(index, matrix);\n\t\t\t\t\t\t\t\t\tinstancedMesh.instanceMatrix.needsUpdate = true;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmeshType: 'instancedMesh',\n\t\t\t\t\t\t\t} as NgtrRigidBodyState;\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tkey: `${instance.key}-${index}` + `${instancedMesh?.uuid || ''}`,\n\t\t\t\t}) as Omit<NgtrInstancedRigidBodyOptions, 'options'> & { options: Partial<NgtrRigidBodyOptions> },\n\t\t);\n\t});\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst colliders = this.colliders();\n\t\t// if self colliders is false explicitly, disable auto colliders for this object entirely.\n\t\tif (colliders === false) return [];\n\n\t\tconst physicsColliders = this.physics.colliders();\n\t\t// if physics colliders is false explicitly AND colliders is not set, disable auto colliders for this object entirely.\n\t\tif (physicsColliders === false && colliders === undefined) return [];\n\n\t\tconst options = this.options();\n\t\t// if colliders on object is not set, use physics colliders\n\t\tif (!options.colliders) options.colliders = physicsColliders;\n\n\t\tconst objectLocalState = getLocalState(this.objectRef.nativeElement);\n\t\tif (!objectLocalState) return [];\n\n\t\t// track object's parent and non-object children\n\t\tconst [parent] = [objectLocalState.parent(), objectLocalState.nonObjects()];\n\t\tif (!parent || !(parent as Object3D).isObject3D) return [];\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, options);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect(() => {\n\t\t\tconst instancedMesh = this.instancedMesh();\n\t\t\tif (!instancedMesh) return;\n\t\t\tinstancedMesh.instanceMatrix.setUsage(DynamicDrawUsage);\n\t\t});\n\t}\n}\n","import { computed, effect, ElementRef, inject, Injector } from '@angular/core';\nimport {\n\tFixedImpulseJoint,\n\tImpulseJoint,\n\tJointData,\n\tPrismaticImpulseJoint,\n\tRevoluteImpulseJoint,\n\tRigidBody,\n\tRopeImpulseJoint,\n\tSphericalImpulseJoint,\n\tSpringImpulseJoint,\n} from '@dimforge/rapier3d-compat';\nimport { resolveRef } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { NgtrPhysics } from './physics';\nimport {\n\tNgtrFixedJointParams,\n\tNgtrPrismaticJointParams,\n\tNgtrRevoluteJointParams,\n\tNgtrRopeJointParams,\n\tNgtrSphericalJointParams,\n\tNgtrSpringJointParams,\n} from './types';\nimport { quaternionToRapierQuaternion, vector3ToRapierVector } from './utils';\n\nfunction injectImpulseJoint<TJoinType extends ImpulseJoint>(\n\tbodyA: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\tbodyB: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t{ injector, data }: { injector?: Injector; data: JointData | (() => JointData | null) },\n) {\n\treturn assertInjector(injectImpulseJoint, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tconst newJoint = computed<TJoinType | null>(() => {\n\t\t\tconst worldSingleton = physics.worldSingleton();\n\t\t\tif (!worldSingleton) return null;\n\n\t\t\tconst a = typeof bodyA === 'function' ? resolveRef(bodyA()) : resolveRef(bodyA);\n\t\t\tconst b = typeof bodyB === 'function' ? resolveRef(bodyB()) : resolveRef(bodyB);\n\t\t\tif (!a || !b) return null;\n\n\t\t\tconst jointData = typeof data === 'function' ? data() : data;\n\t\t\tif (!jointData) return null;\n\n\t\t\treturn worldSingleton.proxy.createImpulseJoint(jointData, a, b, true) as TJoinType;\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst worldSingleton = physics.worldSingleton();\n\t\t\tif (!worldSingleton) return;\n\n\t\t\tconst joint = newJoint();\n\t\t\tif (!joint) return;\n\n\t\t\tonCleanup(() => {\n\t\t\t\tif (worldSingleton.proxy.getImpulseJoint(joint.handle)) {\n\t\t\t\t\tworldSingleton.proxy.removeImpulseJoint(joint, true);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn newJoint;\n\t});\n}\n\nfunction createJoint<TJointParams, TJoinType extends ImpulseJoint>(\n\tjointDataFn: (rapier: NonNullable<ReturnType<NgtrPhysics['rapier']>>, data: TJointParams) => JointData,\n) {\n\treturn function _injectJoint(\n\t\tbodyA: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t\tbodyB: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t\t{ injector, data }: { injector?: Injector; data: TJointParams },\n\t) {\n\t\treturn assertInjector(_injectJoint, injector, () => {\n\t\t\tconst physics = inject(NgtrPhysics);\n\n\t\t\tconst jointData = computed(() => {\n\t\t\t\tconst rapier = physics.rapier();\n\t\t\t\tif (!rapier) return null;\n\t\t\t\treturn jointDataFn(rapier, data);\n\t\t\t});\n\n\t\t\treturn injectImpulseJoint<TJoinType>(bodyA, bodyB, { injector, data: jointData });\n\t\t});\n\t};\n}\n\n/**\n * A fixed joint ensures that two rigid-bodies don't move relative to each other.\n * Fixed joints are characterized by one local frame (represented by an isometry) on each rigid-body.\n * The fixed-joint makes these frames coincide in world-space.\n *\n * @category Hooks - Joints\n */\nexport const injectFixedJoint = createJoint<NgtrFixedJointParams, FixedImpulseJoint>((rapier, data) =>\n\trapier.JointData.fixed(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tquaternionToRapierQuaternion(data.body1LocalFrame),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tquaternionToRapierQuaternion(data.body2LocalFrame),\n\t),\n);\n\n/**\n * The spherical joint ensures that two points on the local-spaces of two rigid-bodies always coincide (it prevents any relative\n * translational motion at this points). This is typically used to simulate ragdolls arms, pendulums, etc.\n * They are characterized by one local anchor on each rigid-body. Each anchor represents the location of the\n * points that need to coincide on the local-space of each rigid-body.\n *\n * @category Hooks - Joints\n */\nexport const injectSphericalJoint = createJoint<NgtrSphericalJointParams, SphericalImpulseJoint>((rapier, data) =>\n\trapier.JointData.spherical(vector3ToRapierVector(data.body1Anchor), vector3ToRapierVector(data.body2Anchor)),\n);\n\n/**\n * The revolute joint prevents any relative movement between two rigid-bodies, except for relative\n * rotations along one axis. This is typically used to simulate wheels, fans, etc.\n * They are characterized by one local anchor as well as one local axis on each rigid-body.\n *\n * @category Hooks - Joints\n */\nexport const injectRevoluteJoint = createJoint<NgtrRevoluteJointParams, RevoluteImpulseJoint>((rapier, data) => {\n\tconst jointData = rapier.JointData.revolute(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tvector3ToRapierVector(data.axis),\n\t);\n\n\tif (data.limits) {\n\t\tjointData.limitsEnabled = true;\n\t\tjointData.limits = data.limits;\n\t}\n\n\treturn jointData;\n});\n\n/**\n * The prismatic joint prevents any relative movement between two rigid-bodies, except for relative translations along one axis.\n * It is characterized by one local anchor as well as one local axis on each rigid-body. In 3D, an optional\n * local tangent axis can be specified for each rigid-body.\n *\n * @category Hooks - Joints\n */\nexport const injectPrismaticJoint = createJoint<NgtrPrismaticJointParams, PrismaticImpulseJoint>((rapier, data) => {\n\tconst jointData = rapier.JointData.prismatic(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tvector3ToRapierVector(data.axis),\n\t);\n\n\tif (data.limits) {\n\t\tjointData.limitsEnabled = true;\n\t\tjointData.limits = data.limits;\n\t}\n\n\treturn jointData;\n});\n\n/**\n * The rope joint limits the max distance between two bodies.\n * @category Hooks - Joints\n */\nexport const injectRopeJoint = createJoint<NgtrRopeJointParams, RopeImpulseJoint>((rapier, data) =>\n\trapier.JointData.rope(data.length, vector3ToRapierVector(data.body1Anchor), vector3ToRapierVector(data.body2Anchor)),\n);\n\n/**\n * The spring joint applies a force proportional to the distance between two objects.\n * @category Hooks - Joints\n */\nexport const injectSpringJoint = createJoint<NgtrSpringJointParams, SpringImpulseJoint>((rapier, data) => {\n\treturn rapier.JointData.spring(\n\t\tdata.restLength,\n\t\tdata.stiffness,\n\t\tdata.damping,\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t);\n});\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tinput,\n} from '@angular/core';\nimport { extend, getLocalState } from 'angular-three';\nimport { Object3D } from 'three';\nimport { NgtrPhysics } from './physics';\nimport { NgtrAnyCollider, NgtrRigidBody } from './rigid-body';\nimport { NgtrRigidBodyAutoCollider } from './types';\nimport { createColliderOptions } from './utils';\n\n@Component({\n\tselector: 'ngt-object3D[ngtrMeshCollider]',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ng-content />\n\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t<ngt-object3D\n\t\t\t\t[ngtrCollider]=\"childColliderOption.shape\"\n\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t[name]=\"objectRef.nativeElement.name + '-mesh-collider-' + $index\"\n\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t/>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrAnyCollider],\n})\nexport class NgtrMeshCollider {\n\tcolliders = input.required<NgtrRigidBodyAutoCollider>({ alias: 'ngtrMeshCollider' });\n\n\tobjectRef = inject<ElementRef<Object3D>>(ElementRef);\n\trigidBody = inject(NgtrRigidBody);\n\tphysics = inject(NgtrPhysics);\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst rigidBodyOptions = this.rigidBody.options();\n\t\trigidBodyOptions.colliders = this.colliders();\n\n\t\tconst objectLocalState = getLocalState(this.objectRef.nativeElement);\n\t\tif (!objectLocalState) return [];\n\n\t\t// track object's children\n\t\tobjectLocalState.nonObjects();\n\t\tobjectLocalState.objects();\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, rigidBodyOptions, false);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\t\tthis.objectRef.nativeElement.userData ??= {};\n\t\tthis.objectRef.nativeElement.userData['ngtrRapierType'] = 'MeshCollider';\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["RapierVector3","RapierQuaternion","defaultOptions","i1.NgtrAnyCollider"],"mappings":"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"}
|
package/lib/physics.d.ts
CHANGED
package/lib/types.d.ts
CHANGED
|
@@ -56,10 +56,24 @@ export interface NgtrPhysicsOptions {
|
|
|
56
56
|
* @defaultValue 1
|
|
57
57
|
*/
|
|
58
58
|
maxCcdSubsteps: number;
|
|
59
|
+
/**
|
|
60
|
+
* Directly affects the erp (Error Reduction Parameter) which is the proportion (between 0 and 1) of the positional error to be corrected at each time step.
|
|
61
|
+
*
|
|
62
|
+
* The higher the value, the more the physics engine will try to correct the positional error.
|
|
63
|
+
*
|
|
64
|
+
* This property is currently undocumented in rapier docs.
|
|
65
|
+
*
|
|
66
|
+
* @defaultValue 30
|
|
67
|
+
*/
|
|
68
|
+
contactNaturalFrequency: number;
|
|
59
69
|
/**
|
|
60
70
|
* The Error Reduction Parameter in between 0 and 1, is the proportion of the positional error to be corrected at each time step.
|
|
61
71
|
*
|
|
62
72
|
* @defaultValue 0.8
|
|
73
|
+
* @deprecated This is a noop. Use `contactNaturalFrequency` instead
|
|
74
|
+
* @since 2.6.0 Will be removed in 3.0.0
|
|
75
|
+
* @see {contactNaturalFrequency}
|
|
76
|
+
* @see https://github.com/dimforge/rapier/pull/651 for more information about contactNaturalFrequency
|
|
63
77
|
*/
|
|
64
78
|
erp: number;
|
|
65
79
|
/**
|