Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

collider2d

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

collider2d - npm Package Compare versions

Comparing version 0.1.1 to 0.2.0

4

CHANGELOG.md

@@ -0,1 +1,5 @@

## 0.2.0 / 2020-02-18
- [FEATURE] Added `translate` to circle to easily modify the position like the polygon version.
- [TEST] Added testing for circle and polygon translations.
## 0.1.1 / 2020-02-18

@@ -2,0 +6,0 @@ - [MISC] Replaced rollup-plugin-commonjs and rollup-plugin-node-resolve with @rollup/plugin-commonjs and @rollup/plugin-node-resolve.

@@ -481,3 +481,3 @@ function _classCallCheck(instance, Constructor) {

* @param {Array<Vector>} points An array of vectors representing the points in the polygon, in counter-clockwise order.
*
* *
* @returns {Polygon} Returns this for chaining.

@@ -721,2 +721,24 @@ */

/**
* **Note:** Not sure if this will be kept or not but for now it's disabled.
*
* Sets a new position for this polygon and recalculates the points.
*
* @param {Vector} position A Vector representing the new position of this polygon.
*/
// set position(position: Vector) {
// const diffX: number = -(this._position.x - position.x);
// const diffY: number = -(this._position.y - position.y);
// const diffPoint: Vector = new Vector(diffX, diffY);
// const points: Array<Vector> = [];
// this._points.map((point: Vector) => {
// const tempX: number = point.x;
// const tempY: number = point.y;
// const tempPoint: Vector = new Vector(tempX, tempY);
// const calculatedPoint: Vector = tempPoint.add(diffPoint);
// points.push(calculatedPoint);
// });
// this.setPoints(points, true);
// }
/**
* Returns the points of this polygon.

@@ -927,5 +949,14 @@ *

_createClass(Circle, [{
key: "getAABB",
key: "translate",
/**
* Translate the center of the cirlc.e
*
* @param {Vector} position A Vector representing the new center of this circle.
*/
value: function translate(x, y) {
this._position.x += x;
this._position.y += y;
}
/**
* Compute the axis-aligned bounding box (AABB) of this Circle.

@@ -937,2 +968,5 @@ *

*/
}, {
key: "getAABB",
value: function getAABB() {

@@ -939,0 +973,0 @@ var corner = this._position.clone().add(this._offset).sub(new Vector(this._radius, this._radius));

@@ -483,3 +483,3 @@ 'use strict';

* @param {Array<Vector>} points An array of vectors representing the points in the polygon, in counter-clockwise order.
*
* *
* @returns {Polygon} Returns this for chaining.

@@ -723,2 +723,24 @@ */

/**
* **Note:** Not sure if this will be kept or not but for now it's disabled.
*
* Sets a new position for this polygon and recalculates the points.
*
* @param {Vector} position A Vector representing the new position of this polygon.
*/
// set position(position: Vector) {
// const diffX: number = -(this._position.x - position.x);
// const diffY: number = -(this._position.y - position.y);
// const diffPoint: Vector = new Vector(diffX, diffY);
// const points: Array<Vector> = [];
// this._points.map((point: Vector) => {
// const tempX: number = point.x;
// const tempY: number = point.y;
// const tempPoint: Vector = new Vector(tempX, tempY);
// const calculatedPoint: Vector = tempPoint.add(diffPoint);
// points.push(calculatedPoint);
// });
// this.setPoints(points, true);
// }
/**
* Returns the points of this polygon.

@@ -929,5 +951,14 @@ *

_createClass(Circle, [{
key: "getAABB",
key: "translate",
/**
* Translate the center of the cirlc.e
*
* @param {Vector} position A Vector representing the new center of this circle.
*/
value: function translate(x, y) {
this._position.x += x;
this._position.y += y;
}
/**
* Compute the axis-aligned bounding box (AABB) of this Circle.

@@ -939,2 +970,5 @@ *

*/
}, {
key: "getAABB",
value: function getAABB() {

@@ -941,0 +975,0 @@ var corner = this._position.clone().add(this._offset).sub(new Vector(this._radius, this._radius));

@@ -65,2 +65,8 @@ import Vector from './Vector';

/**
* Translate the center of the cirlc.e
*
* @param {Vector} position A Vector representing the new center of this circle.
*/
translate(x: number, y: number): void;
/**
* Compute the axis-aligned bounding box (AABB) of this Circle.

@@ -67,0 +73,0 @@ *

@@ -83,5 +83,14 @@ 'use strict';

_createClass(Circle, [{
key: "getAABB",
key: "translate",
/**
* Translate the center of the cirlc.e
*
* @param {Vector} position A Vector representing the new center of this circle.
*/
value: function translate(x, y) {
this._position.x += x;
this._position.y += y;
}
/**
* Compute the axis-aligned bounding box (AABB) of this Circle.

@@ -93,2 +102,5 @@ *

*/
}, {
key: "getAABB",
value: function getAABB() {

@@ -155,2 +167,2 @@ var corner = this._position.clone().add(this._offset).sub(new _Vector["default"](this._radius, this._radius));

exports["default"] = Circle;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW9tZXRyeS9DaXJjbGUudHMiXSwibmFtZXMiOlsiQ2lyY2xlIiwicG9zaXRpb24iLCJWZWN0b3IiLCJyYWRpdXMiLCJfcG9zaXRpb24iLCJfcmFkaXVzIiwiY29ybmVyIiwiY2xvbmUiLCJhZGQiLCJfb2Zmc2V0Iiwic3ViIiwiQm94IiwidG9Qb2x5Z29uIiwib2Zmc2V0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztBQUVBOztBQUNBOzs7Ozs7Ozs7Ozs7QUFHQTs7Ozs7OztJQU9xQkEsTTs7O0FBQ25COzs7Ozs7OztBQVNBOzs7Ozs7OztBQVNBOzs7Ozs7OztBQVNBOzs7O0FBSUEsb0JBQWlFO0FBQUEsUUFBckRDLFFBQXFELHVFQUFsQyxJQUFJQyxrQkFBSixFQUFrQztBQUFBLFFBQXBCQyxNQUFvQix1RUFBSCxDQUFHOztBQUFBOztBQUFBLHVDQXhCckMsSUFBSUQsa0JBQUosRUF3QnFDOztBQUFBLHFDQWZ2QyxDQWV1Qzs7QUFBQSxxQ0FOdkMsSUFBSUEsa0JBQUosRUFNdUM7O0FBQy9ELFNBQUtFLFNBQUwsR0FBaUJILFFBQWpCO0FBRUEsU0FBS0ksT0FBTCxHQUFlRixNQUFmO0FBQ0Q7QUFFRDs7Ozs7Ozs7OztBQTRCQTs7Ozs7Ozs4QkFPbUI7QUFDakIsVUFBTUcsTUFBTSxHQUFHLEtBQUtGLFNBQUwsQ0FBZUcsS0FBZixHQUF1QkMsR0FBdkIsQ0FBMkIsS0FBS0MsT0FBaEMsRUFBeUNDLEdBQXpDLENBQTZDLElBQUlSLGtCQUFKLENBQVcsS0FBS0csT0FBaEIsRUFBeUIsS0FBS0EsT0FBOUIsQ0FBN0MsQ0FBZjs7QUFFQSxhQUFPLElBQUlNLGVBQUosQ0FBUUwsTUFBUixFQUFnQixLQUFLRCxPQUFMLEdBQWUsQ0FBL0IsRUFBa0MsS0FBS0EsT0FBTCxHQUFlLENBQWpELEVBQW9ETyxTQUFwRCxFQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs4QkFPVUMsTSxFQUF3QjtBQUNoQyxXQUFLSixPQUFMLEdBQWVJLE1BQWY7QUFFQSxhQUFPLElBQVA7QUFDRDs7O3dCQS9Dc0I7QUFBRSxhQUFPLEtBQUtULFNBQVo7QUFBd0I7QUFFakQ7Ozs7Ozs7O3dCQUtxQjtBQUFFLGFBQU8sS0FBS0MsT0FBWjtBQUFzQjtBQUU3Qzs7Ozs7Ozs7d0JBS3FCO0FBQUUsYUFBTyxLQUFLSSxPQUFaO0FBQXNCO0FBRTdDOzs7Ozs7c0JBS1dJLE0sRUFBZ0I7QUFBRSxXQUFLSixPQUFMLEdBQWVJLE1BQWY7QUFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcclxuXHJcbmltcG9ydCBCb3ggZnJvbSAnLi9Cb3gnO1xyXG5pbXBvcnQgVmVjdG9yIGZyb20gJy4vVmVjdG9yJztcclxuaW1wb3J0IFBvbHlnb24gZnJvbSAnLi9Qb2x5Z29uJztcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgY2lyY2xlIHdpdGggYSBwb3NpdGlvbiBhbmQgYSByYWRpdXMuXHJcbiAqIFxyXG4gKiBDcmVhdGVzIGEgbmV3IENpcmNsZSwgb3B0aW9uYWxseSBwYXNzaW5nIGluIGEgcG9zaXRpb24gYW5kL29yIHJhZGl1cy4gSWYgbm8gcG9zaXRpb24gaXMgZ2l2ZW4sIHRoZSBDaXJjbGUgd2lsbCBiZSBhdCBgKDAsMClgLiBcclxuICogXHJcbiAqIElmIG5vIHJhZGl1cyBpcyBwcm92aWRlZCB0aGUgY2lyY2xlIHdpbGwgaGF2ZSBhIHJhZGl1cyBvZiBgMGAuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaXJjbGUge1xyXG4gIC8qKlxyXG4gICAqIEEgVmVjdG9yIHJlcHJlc2VudGluZyB0aGUgY2VudGVyIHBvaW50IG9mIHRoaXMgY2lyY2xlLlxyXG4gICAqIFxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogXHJcbiAgICogQHByb3BlcnR5IHtWZWN0b3J9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcG9zaXRpb246IFZlY3RvciA9IG5ldyBWZWN0b3IoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHJhZGl1cyBvZiB0aGlzIGNpcmNsZS5cclxuICAgKiBcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIFxyXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3JhZGl1czogbnVtYmVyID0gMDtcclxuXHJcbiAgLyoqXHJcbiAgICogQSBWZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBvZmZzZXQgb2YgdGhpcyBjaXJjbGUuXHJcbiAgICogXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBcclxuICAgKiBAcHJvcGVydHkge1ZlY3Rvcn1cclxuICAgKi9cclxuICBwcml2YXRlIF9vZmZzZXQ6IFZlY3RvciA9IG5ldyBWZWN0b3IoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHtWZWN0b3J9IHBvc2l0aW9uIEEgVmVjdG9yIHJlcHJlc2VudGluZyB0aGUgY2VudGVyIG9mIHRoaXMgQ2lyY2xlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXMgVGhlIHJhZGl1cyBvZiB0aGlzIENpcmNsZS4gXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IocG9zaXRpb246IFZlY3RvciA9IG5ldyBWZWN0b3IoKSwgcmFkaXVzOiBudW1iZXIgPSAwKSB7XHJcbiAgICB0aGlzLl9wb3NpdGlvbiA9IHBvc2l0aW9uO1xyXG5cclxuICAgIHRoaXMuX3JhZGl1cyA9IHJhZGl1cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoaXMgY2lyY2xlLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtWZWN0b3J9XHJcbiAgICovXHJcbiAgZ2V0IHBvc2l0aW9uKCk6IFZlY3RvciB7IHJldHVybiB0aGlzLl9wb3NpdGlvbjsgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSByYWRpdXMgb2YgdGhpcyBjaXJjbGUuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgcmFkaXVzKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9yYWRpdXM7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgb2Zmc2V0IG9mIHRoaXMgY2lyY2xlLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtWZWN0b3J9XHJcbiAgICovXHJcbiAgZ2V0IG9mZnNldCgpOiBWZWN0b3IgeyByZXR1cm4gdGhpcy5fb2Zmc2V0OyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhIG5ldyBvZmZzZXQgZm9yIHRoaXMgY2lyY2xlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7VmVjdG9yfSBvZmZzZXQgVGhlIG5ldyBvZmZzZXQgZm9yIHRoaXMgY2lyY2xlLlxyXG4gICAqL1xyXG4gIHNldCBvZmZzZXQob2Zmc2V0OiBWZWN0b3IpIHsgdGhpcy5fb2Zmc2V0ID0gb2Zmc2V0OyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXB1dGUgdGhlIGF4aXMtYWxpZ25lZCBib3VuZGluZyBib3ggKEFBQkIpIG9mIHRoaXMgQ2lyY2xlLlxyXG4gICAqIFxyXG4gICAqIE5vdGU6IFJldHVybnMgYSBuZXcgYFBvbHlnb25gIGVhY2ggdGltZSB0aGlzIGlzIGNhbGxlZC5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7UG9seWdvbn0gUmV0dXJucyB0aGUgQUFCQiBvZiB0aGlzIGNpcmNsZS5cclxuICAgKi9cclxuICBnZXRBQUJCKCk6IFBvbHlnb24ge1xyXG4gICAgY29uc3QgY29ybmVyID0gdGhpcy5fcG9zaXRpb24uY2xvbmUoKS5hZGQodGhpcy5fb2Zmc2V0KS5zdWIobmV3IFZlY3Rvcih0aGlzLl9yYWRpdXMsIHRoaXMuX3JhZGl1cykpO1xyXG5cclxuICAgIHJldHVybiBuZXcgQm94KGNvcm5lciwgdGhpcy5fcmFkaXVzICogMiwgdGhpcy5fcmFkaXVzICogMikudG9Qb2x5Z29uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGN1cnJlbnQgb2Zmc2V0IHRvIGFwcGx5IHRvIHRoZSByYWRpdXMuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtWZWN0b3J9IG9mZnNldCBUaGUgbmV3IG9mZnNldCBWZWN0b3IuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge0NpcmNsZX0gUmV0dXJucyB0aGlzIGZvciBjaGFpbmluZy5cclxuICAgKi9cclxuICBzZXRPZmZzZXQob2Zmc2V0OiBWZWN0b3IpOiBDaXJjbGUge1xyXG4gICAgdGhpcy5fb2Zmc2V0ID0gb2Zmc2V0O1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxufSJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW9tZXRyeS9DaXJjbGUudHMiXSwibmFtZXMiOlsiQ2lyY2xlIiwicG9zaXRpb24iLCJWZWN0b3IiLCJyYWRpdXMiLCJfcG9zaXRpb24iLCJfcmFkaXVzIiwieCIsInkiLCJjb3JuZXIiLCJjbG9uZSIsImFkZCIsIl9vZmZzZXQiLCJzdWIiLCJCb3giLCJ0b1BvbHlnb24iLCJvZmZzZXQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0FBRUE7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUdBOzs7Ozs7O0lBT3FCQSxNOzs7QUFDbkI7Ozs7Ozs7O0FBU0E7Ozs7Ozs7O0FBU0E7Ozs7Ozs7O0FBU0E7Ozs7QUFJQSxvQkFBaUU7QUFBQSxRQUFyREMsUUFBcUQsdUVBQWxDLElBQUlDLGtCQUFKLEVBQWtDO0FBQUEsUUFBcEJDLE1BQW9CLHVFQUFILENBQUc7O0FBQUE7O0FBQUEsdUNBeEJyQyxJQUFJRCxrQkFBSixFQXdCcUM7O0FBQUEscUNBZnZDLENBZXVDOztBQUFBLHFDQU52QyxJQUFJQSxrQkFBSixFQU11Qzs7QUFDL0QsU0FBS0UsU0FBTCxHQUFpQkgsUUFBakI7QUFFQSxTQUFLSSxPQUFMLEdBQWVGLE1BQWY7QUFDRDtBQUVEOzs7Ozs7Ozs7O0FBNEJBOzs7Ozs4QkFLVUcsQyxFQUFXQyxDLEVBQVc7QUFDOUIsV0FBS0gsU0FBTCxDQUFlRSxDQUFmLElBQW9CQSxDQUFwQjtBQUNBLFdBQUtGLFNBQUwsQ0FBZUcsQ0FBZixJQUFvQkEsQ0FBcEI7QUFDRDtBQUVEOzs7Ozs7Ozs7OzhCQU9tQjtBQUNqQixVQUFNQyxNQUFNLEdBQUcsS0FBS0osU0FBTCxDQUFlSyxLQUFmLEdBQXVCQyxHQUF2QixDQUEyQixLQUFLQyxPQUFoQyxFQUF5Q0MsR0FBekMsQ0FBNkMsSUFBSVYsa0JBQUosQ0FBVyxLQUFLRyxPQUFoQixFQUF5QixLQUFLQSxPQUE5QixDQUE3QyxDQUFmOztBQUVBLGFBQU8sSUFBSVEsZUFBSixDQUFRTCxNQUFSLEVBQWdCLEtBQUtILE9BQUwsR0FBZSxDQUEvQixFQUFrQyxLQUFLQSxPQUFMLEdBQWUsQ0FBakQsRUFBb0RTLFNBQXBELEVBQVA7QUFDRDtBQUVEOzs7Ozs7Ozs7OzhCQU9VQyxNLEVBQXdCO0FBQ2hDLFdBQUtKLE9BQUwsR0FBZUksTUFBZjtBQUVBLGFBQU8sSUFBUDtBQUNEOzs7d0JBekRzQjtBQUFFLGFBQU8sS0FBS1gsU0FBWjtBQUF3QjtBQUVqRDs7Ozs7Ozs7d0JBS3FCO0FBQUUsYUFBTyxLQUFLQyxPQUFaO0FBQXNCO0FBRTdDOzs7Ozs7Ozt3QkFLcUI7QUFBRSxhQUFPLEtBQUtNLE9BQVo7QUFBc0I7QUFFN0M7Ozs7OztzQkFLV0ksTSxFQUFnQjtBQUFFLFdBQUtKLE9BQUwsR0FBZUksTUFBZjtBQUF3QiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xyXG5cclxuaW1wb3J0IEJveCBmcm9tICcuL0JveCc7XHJcbmltcG9ydCBWZWN0b3IgZnJvbSAnLi9WZWN0b3InO1xyXG5pbXBvcnQgUG9seWdvbiBmcm9tICcuL1BvbHlnb24nO1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBjaXJjbGUgd2l0aCBhIHBvc2l0aW9uIGFuZCBhIHJhZGl1cy5cclxuICogXHJcbiAqIENyZWF0ZXMgYSBuZXcgQ2lyY2xlLCBvcHRpb25hbGx5IHBhc3NpbmcgaW4gYSBwb3NpdGlvbiBhbmQvb3IgcmFkaXVzLiBJZiBubyBwb3NpdGlvbiBpcyBnaXZlbiwgdGhlIENpcmNsZSB3aWxsIGJlIGF0IGAoMCwwKWAuIFxyXG4gKiBcclxuICogSWYgbm8gcmFkaXVzIGlzIHByb3ZpZGVkIHRoZSBjaXJjbGUgd2lsbCBoYXZlIGEgcmFkaXVzIG9mIGAwYC5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENpcmNsZSB7XHJcbiAgLyoqXHJcbiAgICogQSBWZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBjZW50ZXIgcG9pbnQgb2YgdGhpcyBjaXJjbGUuXHJcbiAgICogXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBcclxuICAgKiBAcHJvcGVydHkge1ZlY3Rvcn1cclxuICAgKi9cclxuICBwcml2YXRlIF9wb3NpdGlvbjogVmVjdG9yID0gbmV3IFZlY3RvcigpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgcmFkaXVzIG9mIHRoaXMgY2lyY2xlLlxyXG4gICAqIFxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogXHJcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmFkaXVzOiBudW1iZXIgPSAwO1xyXG5cclxuICAvKipcclxuICAgKiBBIFZlY3RvciByZXByZXNlbnRpbmcgdGhlIG9mZnNldCBvZiB0aGlzIGNpcmNsZS5cclxuICAgKiBcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIFxyXG4gICAqIEBwcm9wZXJ0eSB7VmVjdG9yfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX29mZnNldDogVmVjdG9yID0gbmV3IFZlY3RvcigpO1xyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0ge1ZlY3Rvcn0gcG9zaXRpb24gQSBWZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBjZW50ZXIgb2YgdGhpcyBDaXJjbGUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGl1cyBUaGUgcmFkaXVzIG9mIHRoaXMgQ2lyY2xlLiBcclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihwb3NpdGlvbjogVmVjdG9yID0gbmV3IFZlY3RvcigpLCByYWRpdXM6IG51bWJlciA9IDApIHtcclxuICAgIHRoaXMuX3Bvc2l0aW9uID0gcG9zaXRpb247XHJcblxyXG4gICAgdGhpcy5fcmFkaXVzID0gcmFkaXVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhpcyBjaXJjbGUuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge1ZlY3Rvcn1cclxuICAgKi9cclxuICBnZXQgcG9zaXRpb24oKTogVmVjdG9yIHsgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHJhZGl1cyBvZiB0aGlzIGNpcmNsZS5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCByYWRpdXMoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX3JhZGl1czsgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBvZmZzZXQgb2YgdGhpcyBjaXJjbGUuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge1ZlY3Rvcn1cclxuICAgKi9cclxuICBnZXQgb2Zmc2V0KCk6IFZlY3RvciB7IHJldHVybiB0aGlzLl9vZmZzZXQ7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGEgbmV3IG9mZnNldCBmb3IgdGhpcyBjaXJjbGUuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtWZWN0b3J9IG9mZnNldCBUaGUgbmV3IG9mZnNldCBmb3IgdGhpcyBjaXJjbGUuXHJcbiAgICovXHJcbiAgc2V0IG9mZnNldChvZmZzZXQ6IFZlY3RvcikgeyB0aGlzLl9vZmZzZXQgPSBvZmZzZXQ7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhbnNsYXRlIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmxjLmVcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge1ZlY3Rvcn0gcG9zaXRpb24gQSBWZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBuZXcgY2VudGVyIG9mIHRoaXMgY2lyY2xlLlxyXG4gICAqL1xyXG4gIHRyYW5zbGF0ZSh4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgdGhpcy5fcG9zaXRpb24ueCArPSB4O1xyXG4gICAgdGhpcy5fcG9zaXRpb24ueSArPSB5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcHV0ZSB0aGUgYXhpcy1hbGlnbmVkIGJvdW5kaW5nIGJveCAoQUFCQikgb2YgdGhpcyBDaXJjbGUuXHJcbiAgICogXHJcbiAgICogTm90ZTogUmV0dXJucyBhIG5ldyBgUG9seWdvbmAgZWFjaCB0aW1lIHRoaXMgaXMgY2FsbGVkLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtQb2x5Z29ufSBSZXR1cm5zIHRoZSBBQUJCIG9mIHRoaXMgY2lyY2xlLlxyXG4gICAqL1xyXG4gIGdldEFBQkIoKTogUG9seWdvbiB7XHJcbiAgICBjb25zdCBjb3JuZXIgPSB0aGlzLl9wb3NpdGlvbi5jbG9uZSgpLmFkZCh0aGlzLl9vZmZzZXQpLnN1YihuZXcgVmVjdG9yKHRoaXMuX3JhZGl1cywgdGhpcy5fcmFkaXVzKSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBCb3goY29ybmVyLCB0aGlzLl9yYWRpdXMgKiAyLCB0aGlzLl9yYWRpdXMgKiAyKS50b1BvbHlnb24oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgY3VycmVudCBvZmZzZXQgdG8gYXBwbHkgdG8gdGhlIHJhZGl1cy5cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge1ZlY3Rvcn0gb2Zmc2V0IFRoZSBuZXcgb2Zmc2V0IFZlY3Rvci5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7Q2lyY2xlfSBSZXR1cm5zIHRoaXMgZm9yIGNoYWluaW5nLlxyXG4gICAqL1xyXG4gIHNldE9mZnNldChvZmZzZXQ6IFZlY3Rvcik6IENpcmNsZSB7XHJcbiAgICB0aGlzLl9vZmZzZXQgPSBvZmZzZXQ7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG59Il19

@@ -82,2 +82,9 @@ import Vector from './Vector';

/**
* **Note:** Not sure if this will be kept or not but for now it's disabled.
*
* Sets a new position for this polygon and recalculates the points.
*
* @param {Vector} position A Vector representing the new position of this polygon.
*/
/**
* Returns the points of this polygon.

@@ -126,3 +133,3 @@ *

* @param {Array<Vector>} points An array of vectors representing the points in the polygon, in counter-clockwise order.
*
* *
* @returns {Polygon} Returns this for chaining.

@@ -129,0 +136,0 @@ */

@@ -137,3 +137,3 @@ 'use strict';

* @param {Array<Vector>} points An array of vectors representing the points in the polygon, in counter-clockwise order.
*
* *
* @returns {Polygon} Returns this for chaining.

@@ -377,2 +377,24 @@ */

/**
* **Note:** Not sure if this will be kept or not but for now it's disabled.
*
* Sets a new position for this polygon and recalculates the points.
*
* @param {Vector} position A Vector representing the new position of this polygon.
*/
// set position(position: Vector) {
// const diffX: number = -(this._position.x - position.x);
// const diffY: number = -(this._position.y - position.y);
// const diffPoint: Vector = new Vector(diffX, diffY);
// const points: Array<Vector> = [];
// this._points.map((point: Vector) => {
// const tempX: number = point.x;
// const tempY: number = point.y;
// const tempPoint: Vector = new Vector(tempX, tempY);
// const calculatedPoint: Vector = tempPoint.add(diffPoint);
// points.push(calculatedPoint);
// });
// this.setPoints(points, true);
// }
/**
* Returns the points of this polygon.

@@ -449,2 +471,2 @@ *

exports["default"] = Polygon;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW9tZXRyeS9Qb2x5Z29uLnRzIl0sIm5hbWVzIjpbIlBvbHlnb24iLCJwb3NpdGlvbiIsIlZlY3RvciIsInBvaW50cyIsIl9wb3NpdGlvbiIsInNldFBvaW50cyIsImxlbmd0aENoYW5nZWQiLCJsZW5ndGgiLCJpIiwiY2FsY1BvaW50cyIsIl9jYWxjUG9pbnRzIiwiZWRnZXMiLCJfZWRnZXMiLCJub3JtYWxzIiwiX25vcm1hbHMiLCJwMSIsInAyIiwieCIsInkiLCJzcGxpY2UiLCJwdXNoIiwiX3BvaW50cyIsIl9yZWNhbGMiLCJhbmdsZSIsIl9hbmdsZSIsIm9mZnNldCIsIl9vZmZzZXQiLCJsZW4iLCJyb3RhdGUiLCJjYWxjUG9pbnQiLCJjb3B5IiwiZSIsInN1YiIsInBlcnAiLCJub3JtYWxpemUiLCJ4TWluIiwieU1pbiIsInhNYXgiLCJ5TWF4IiwicG9pbnQiLCJCb3giLCJjbG9uZSIsImFkZCIsInRvUG9seWdvbiIsImN4IiwiY3kiLCJhciIsImEiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0FBRUE7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBOzs7Ozs7OztJQVFxQkEsTzs7O0FBQ25COzs7Ozs7OztBQVNBOzs7Ozs7OztBQVNBOzs7Ozs7OztBQVNBOzs7Ozs7OztBQVNBOzs7Ozs7OztBQVNBOzs7Ozs7OztBQVNBOzs7Ozs7OztBQVNBOzs7Ozs7O0FBT0EscUJBQXlFO0FBQUEsUUFBN0RDLFFBQTZELHVFQUExQyxJQUFJQyxrQkFBSixFQUEwQztBQUFBLFFBQTVCQyxNQUE0Qix1RUFBSixFQUFJOztBQUFBOztBQUFBLHVDQS9EN0MsSUFBSUQsa0JBQUosRUErRDZDOztBQUFBLHFDQXREeEMsRUFzRHdDOztBQUFBLG9DQTdDaEQsQ0E2Q2dEOztBQUFBLHFDQXBDL0MsSUFBSUEsa0JBQUosRUFvQytDOztBQUFBLHlDQTNCcEMsRUEyQm9DOztBQUFBLG9DQWxCekMsRUFrQnlDOztBQUFBLHNDQVR2QyxFQVN1Qzs7QUFDdkUsU0FBS0Us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dCBCb3ggZnJvbSAnLi9Cb3gnO1xyXG5pbXBvcnQgVmVjdG9yIGZyb20gJy4vVmVjdG9yJztcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgKmNvbnZleCogcG9seWdvbiB3aXRoIGFueSBudW1iZXIgb2YgcG9pbnRzIChzcGVjaWZpZWQgaW4gY291bnRlci1jbG9ja3dpc2Ugb3JkZXIpLlxyXG4gKiBcclxuICogTm90ZTogRG8gX25vdF8gbWFudWFsbHkgY2hhbmdlIHRoZSBgcG9pbnRzYCwgYGFuZ2xlYCwgb3IgYG9mZnNldGAgcHJvcGVydGllcy4gVXNlIHRoZSBwcm92aWRlZCAgc2V0dGVycy4gXHJcbiAqIE90aGVyd2lzZSB0aGUgY2FsY3VsYXRlZCBwcm9wZXJ0aWVzIHdpbGwgbm90IGJlIHVwZGF0ZWQgY29ycmVjdGx5LlxyXG4gKiBcclxuICogVGhlIGBwb3NgIHByb3BlcnR5IGNhbiBiZSBjaGFuZ2VkIGRpcmVjdGx5LlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUG9seWdvbiB7XHJcbiAgLyoqXHJcbiAgICogQSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBvcmlnaW4gb2YgdGhpcyBwb2x5Z29uIChhbGwgb3RoZXIgcG9pbnRzIGFyZSByZWxhdGl2ZSB0byB0aGlzIG9uZSkuXHJcbiAgICogXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBcclxuICAgKiBAcHJvcGVydHkge1ZlY3Rvcn1cclxuICAgKi9cclxuICBwcml2YXRlIF9wb3NpdGlvbjogVmVjdG9yID0gbmV3IFZlY3RvcigpO1xyXG5cclxuICAvKipcclxuICAgKiBBbiBhcnJheSBvZiB2ZWN0b3JzIHJlcHJlc2VudGluZyB0aGUgcG9pbnRzIGluIHRoZSBwb2x5Z29uLCBpbiBjb3VudGVyLWNsb2Nrd2lzZSBvcmRlci5cclxuICAgKiBcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIFxyXG4gICAqIEBwcm9wZXJ0eSB7QXJyYXk8VmVjdG9yPn1cclxuICAgKi9cclxuICBwcml2YXRlIF9wb2ludHM6IEFycmF5PFZlY3Rvcj4gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGFuZ2xlIG9mIHRoaXMgcG9seWdvbi5cclxuICAgKiBcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIFxyXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2FuZ2xlOiBudW1iZXIgPSAwO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgb2Zmc2V0IG9mIHRoaXMgcG9seWdvbi5cclxuICAgKiBcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIFxyXG4gICAqIEBwcm9wZXJ0eSB7VmVjdG9yfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX29mZnNldDogVmVjdG9yID0gbmV3IFZlY3RvcigpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgY2FsY3VsYXRlZCBwb2ludHMgb2YgdGhpcyBwb2x5Z29uLlxyXG4gICAqIFxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogXHJcbiAgICogQHByb3BlcnR5IHtBcnJheTxWZWN0b3I+fVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2NhbGNQb2ludHM6IEFycmF5PFZlY3Rvcj4gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGVkZ2VzIG9mIHRoaXMgcG9seWdvbi5cclxuICAgKiBcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIFxyXG4gICAqIEBwcm9wZXJ0eSB7QXJyYXk8VmVjdG9yPn1cclxuICAgKi9cclxuICBwcml2YXRlIF9lZGdlczogQXJyYXk8VmVjdG9yPiA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbm9ybWFscyBvZiB0aGlzIHBvbHlnb24uXHJcbiAgICogXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBcclxuICAgKiBAcHJvcGVydHkge0FycmF5PFZlY3Rvcj59XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbm9ybWFsczogQXJyYXk8VmVjdG9yPiA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgcG9seWdvbiwgcGFzc2luZyBpbiBhIHBvc2l0aW9uIHZlY3RvciwgYW5kIGFuIGFycmF5IG9mIHBvaW50cyAocmVwcmVzZW50ZWQgYnkgdmVjdG9ycyBcclxuICAgKiByZWxhdGl2ZSB0byB0aGUgcG9zaXRpb24gdmVjdG9yKS4gSWYgbm8gcG9zaXRpb24gaXMgcGFzc2VkIGluLCB0aGUgcG9zaXRpb24gb2YgdGhlIHBvbHlnb24gd2lsbCBiZSBgKDAsMClgLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7VmVjdG9yfSBbcG9zaXRpb249VmVjdG9yXSBBIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIG9yaWdpbiBvZiB0aGUgcG9seWdvbiAoYWxsIG90aGVyIHBvaW50cyBhcmUgcmVsYXRpdmUgdG8gdGhpcyBvbmUpXHJcbiAgICogQHBhcmFtIHtBcnJheTxWZWN0b3I+fSBbcG9pbnRzPVtdXSBBbiBhcnJheSBvZiB2ZWN0b3JzIHJlcHJlc2VudGluZyB0aGUgcG9pbnRzIGluIHRoZSBwb2x5Z29uLCBpbiBjb3VudGVyLWNsb2Nrd2lzZSBvcmRlci5cclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihwb3NpdGlvbjogVmVjdG9yID0gbmV3IFZlY3RvcigpLCBwb2ludHM6IEFycmF5PFZlY3Rvcj4gPSBbXSkge1xyXG4gICAgdGhpcy5fcG9zaXRpb24gPSBwb3NpdGlvbjtcclxuXHJcbiAgICB0aGlzLnNldFBvaW50cyhwb2ludHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhpcyBwb2x5Z29uLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtWZWN0b3J9XHJcbiAgICovXHJcbiAgZ2V0IHBvc2l0aW9uKCk6IFZlY3RvciB7IHJldHVybiB0aGlzLl9wb3NpdGlvbjsgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBwb2ludHMgb2YgdGhpcyBwb2x5Z29uLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtBcnJheTxWZWN0b3I+fVxyXG4gICAqL1xyXG4gIGdldCBwb2ludHMoKTogQXJyYXk8VmVjdG9yPiB7IHJldHVybiB0aGlzLl9wb2ludHM7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgY2FsY3VsYXRlZCBwb2ludHMgb2YgdGhpcyBwb2x5Z29uLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtBcnJheTxWZWN0b3I+fVxyXG4gICAqL1xyXG4gIGdldCBjYWxjUG9pbnRzKCk6IEFycmF5PFZlY3Rvcj4geyByZXR1cm4gdGhpcy5fY2FsY1BvaW50czsgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBvZmZzZXQgb2YgdGhpcyBwb2x5Z29uLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtWZWN0b3J9XHJcbiAgICovXHJcbiAgZ2V0IG9mZnNldCgpOiBWZWN0b3IgeyByZXR1cm4gdGhpcy5fb2Zmc2V0OyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGFuZ2xlIG9mIHRoaXMgcG9seWdvbi5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBhbmdsZSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fYW5nbGU7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZWRnZXMgb2YgdGhpcyBwb2x5Z29uLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtBcnJheTxWZWN0b3I+fVxyXG4gICAqL1xyXG4gIGdldCBlZGdlcygpOiBBcnJheTxWZWN0b3I+IHsgcmV0dXJuIHRoaXMuX2VkZ2VzOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIG5vcm1hbHMgb2YgdGhpcyBwb2x5Z29uLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtBcnJheTxWZWN0b3I+fVxyXG4gICAqL1xyXG4gIGdldCBub3JtYWxzKCk6IEFycmF5PFZlY3Rvcj4geyByZXR1cm4gdGhpcy5fbm9ybWFsczsgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbi4gQW55IGNvbnNlY3V0aXZlIGR1cGxpY2F0ZSBwb2ludHMgd2lsbCBiZSBjb21iaW5lZC5cclxuICAgKiBcclxuICAgKiBOb3RlOiBUaGUgcG9pbnRzIGFyZSBjb3VudGVyLWNsb2Nrd2lzZSAqd2l0aCByZXNwZWN0IHRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSouIElmIHlvdSBkaXJlY3RseSBkcmF3IHRoZSBwb2ludHMgb24gYSBzY3JlZW4gXHJcbiAgICogdGhhdCBoYXMgdGhlIG9yaWdpbiBhdCB0aGUgdG9wLWxlZnQgY29ybmVyIGl0IHdpbGwgX2FwcGVhcl8gdmlzdWFsbHkgdGhhdCB0aGUgcG9pbnRzIGFyZSBiZWluZyBzcGVjaWZpZWQgY2xvY2t3aXNlLiBUaGlzIGlzIFxyXG4gICAqIGp1c3QgYmVjYXVzZSBvZiB0aGUgaW52ZXJzaW9uIG9mIHRoZSBZLWF4aXMgd2hlbiBiZWluZyBkaXNwbGF5ZWQuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtBcnJheTxWZWN0b3I+fSBwb2ludHMgQW4gYXJyYXkgb2YgdmVjdG9ycyByZXByZXNlbnRpbmcgdGhlIHBvaW50cyBpbiB0aGUgcG9seWdvbiwgaW4gY291bnRlci1jbG9ja3dpc2Ugb3JkZXIuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge1BvbHlnb259IFJldHVybnMgdGhpcyBmb3IgY2hhaW5pbmcuXHJcbiAgICovXHJcbiAgc2V0UG9pbnRzKHBvaW50czogQXJyYXk8VmVjdG9yPik6IFBvbHlnb24ge1xyXG4gICAgLy8gT25seSByZS1hbGxvY2F0ZSBpZiB0aGlzIGlzIGEgbmV3IHBvbHlnb24gb3IgdGhlIG51bWJlciBvZiBwb2ludHMgaGFzIGNoYW5nZWQuXHJcbiAgICBjb25zdCBsZW5ndGhDaGFuZ2VkOiBib29sZWFuID0gIXRoaXMucG9pbnRzIHx8IHRoaXMucG9pbnRzLmxlbmd0aCAhPT0gcG9pbnRzLmxlbmd0aDtcclxuXHJcbiAgICBpZiAobGVuZ3RoQ2hhbmdlZCkge1xyXG4gICAgICBsZXQgaTogbnVtYmVyO1xyXG5cclxuICAgICAgY29uc3QgY2FsY1BvaW50czogQXJyYXk8VmVjdG9yPiA9IHRoaXMuX2NhbGNQb2ludHMgPSBbXTtcclxuICAgICAgY29uc3QgZWRnZXM6IEFycmF5PFZlY3Rvcj4gPSB0aGlzLl9lZGdlcyA9IFtdO1xyXG4gICAgICBjb25zdCBub3JtYWxzOiBBcnJheTxWZWN0b3I+ID0gdGhpcy5fbm9ybWFscyA9IFtdO1xyXG5cclxuICAgICAgLy8gQWxsb2NhdGUgdGhlIHZlY3RvciBhcnJheXMgZm9yIHRoZSBjYWxjdWxhdGVkIHByb3BlcnRpZXNcclxuICAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIC8vIFJlbW92ZSBjb25zZWN1dGl2ZSBkdXBsaWNhdGUgcG9pbnRzXHJcbiAgICAgICAgY29uc3QgcDE6IFZlY3RvciA9IHBvaW50c1tpXTtcclxuICAgICAgICBjb25zdCBwMjogVmVjdG9yID0gaSA8IHBvaW50cy5sZW5ndGggLSAxID8gcG9pbnRzW2kgKyAxXSA6IHBvaW50c1swXTtcclxuXHJcbiAgICAgICAgaWYgKHAxICE9PSBwMiAmJiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnkpIHtcclxuICAgICAgICAgIHBvaW50cy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICBpIC09IDE7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNhbGNQb2ludHMucHVzaChuZXcgVmVjdG9yKCkpO1xyXG4gICAgICAgIGVkZ2VzLnB1c2gobmV3IFZlY3RvcigpKTtcclxuICAgICAgICBub3JtYWxzLnB1c2gobmV3IFZlY3RvcigpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BvaW50cyA9IHBvaW50cztcclxuXHJcbiAgICB0aGlzLl9yZWNhbGMoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgY3VycmVudCByb3RhdGlvbiBhbmdsZSBvZiB0aGUgcG9seWdvbi5cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgVGhlIGN1cnJlbnQgcm90YXRpb24gYW5nbGUgKGluIHJhZGlhbnMpLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtQb2x5Z29ufSBSZXR1cm5zIHRoaXMgZm9yIGNoYWluaW5nLlxyXG4gICAqL1xyXG4gIHNldEFuZ2xlKGFuZ2xlOiBudW1iZXIpOiBQb2x5Z29uIHtcclxuICAgIHRoaXMuX2FuZ2xlID0gYW5nbGU7XHJcblxyXG4gICAgdGhpcy5fcmVjYWxjKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGN1cnJlbnQgb2Zmc2V0IHRvIGFwcGx5IHRvIHRoZSBgcG9pbnRzYCBiZWZvcmUgYXBwbHlpbmcgdGhlIGBhbmdsZWAgcm90YXRpb24uXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtWZWN0b3J9IG9mZnNldCBUaGUgbmV3IG9mZnNldCBWZWN0b3IuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge1BvbHlnb259IFJldHVybnMgdGhpcyBmb3IgY2hhaW5pbmcuXHJcbiAgICovXHJcbiAgc2V0T2Zmc2V0KG9mZnNldDogVmVjdG9yKTogUG9seWdvbiB7XHJcbiAgICB0aGlzLl9vZmZzZXQgPSBvZmZzZXQ7XHJcblxyXG4gICAgdGhpcy5fcmVjYWxjKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSb3RhdGVzIHRoaXMgUG9seWdvbiBjb3VudGVyLWNsb2Nrd2lzZSBhcm91bmQgdGhlIG9yaWdpbiBvZiAqaXRzIGxvY2FsIGNvb3JkaW5hdGUgc3lzdGVtKiAoaS5lLiBgcG9zaXRpb25gKS5cclxuICAgKiBcclxuICAgKiBOb3RlOiBUaGlzIGNoYW5nZXMgdGhlICoqb3JpZ2luYWwqKiBwb2ludHMgKHNvIGFueSBgYW5nbGVgIHdpbGwgYmUgYXBwbGllZCBvbiB0b3Agb2YgdGhpcyByb3RhdGlvbikuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIFRoZSBhbmdsZSB0byByb3RhdGUgKGluIHJhZGlhbnMpLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtQb2x5Z29ufSBSZXR1cm5zIHRoaXMgZm9yIGNoYWluaW5nLlxyXG4gICAqL1xyXG4gIHJvdGF0ZShhbmdsZTogbnVtYmVyKTogUG9seWdvbiB7XHJcbiAgICBjb25zdCBwb2ludHM6IEFycmF5PFZlY3Rvcj4gPSB0aGlzLnBvaW50cztcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gcG9pbnRzLmxlbmd0aDtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSBwb2ludHNbaV0ucm90YXRlKGFuZ2xlKTtcclxuXHJcbiAgICB0aGlzLl9yZWNhbGMoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYW5zbGF0ZXMgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb24gYnkgYSBzcGVjaWZpZWQgYW1vdW50IHJlbGF0aXZlIHRvIHRoZSBvcmlnaW4gb2YgKml0cyBvd24gY29vcmRpbmF0ZSBzeXN0ZW0qIChpLmUuIGBwb3NpdGlvbmApLlxyXG4gICAqIFxyXG4gICAqIE5vdGU6IFRoaXMgY2hhbmdlcyB0aGUgKipvcmlnaW5hbCoqIHBvaW50cyAoc28gYW55IGBvZmZzZXRgIHdpbGwgYmUgYXBwbGllZCBvbiB0b3Agb2YgdGhpcyB0cmFuc2xhdGlvbilcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge251bWJlcn0geCBUaGUgaG9yaXpvbnRhbCBhbW91bnQgdG8gdHJhbnNsYXRlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSB2ZXJ0aWNhbCBhbW91bnQgdG8gdHJhbnNsYXRlLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtQb2x5Z29ufSBSZXR1cm5zIHRoaXMgZm9yIGNoYWluaW5nLlxyXG4gICAqL1xyXG4gIHRyYW5zbGF0ZSh4OiBudW1iZXIsIHk6IG51bWJlcik6IFBvbHlnb24ge1xyXG4gICAgY29uc3QgcG9pbnRzOiBBcnJheTxWZWN0b3I+ID0gdGhpcy5wb2ludHM7XHJcbiAgICBjb25zdCBsZW46IG51bWJlciA9IHBvaW50cy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIHBvaW50c1tpXS54ICs9IHg7XHJcbiAgICAgIHBvaW50c1tpXS55ICs9IHk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcmVjYWxjKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wdXRlcyB0aGUgY2FsY3VsYXRlZCBjb2xsaXNpb24gUG9seWdvbi5cclxuICAgKiBcclxuICAgKiBUaGlzIGFwcGxpZXMgdGhlIGBhbmdsZWAgYW5kIGBvZmZzZXRgIHRvIHRoZSBvcmlnaW5hbCBwb2ludHMgdGhlbiByZWNhbGN1bGF0ZXMgdGhlIGVkZ2VzIGFuZCBub3JtYWxzIG9mIHRoZSBjb2xsaXNpb24gUG9seWdvbi5cclxuICAgKiBcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtQb2x5Z29ufSBSZXR1cm5zIHRoaXMgZm9yIGNoYWluaW5nLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3JlY2FsYygpOiBQb2x5Z29uIHtcclxuICAgIC8vIENhbGN1bGF0ZWQgcG9pbnRzIC0gdGhpcyBpcyB3aGF0IGlzIHVzZWQgZm9yIHVuZGVybHlpbmcgY29sbGlzaW9ucyBhbmQgdGFrZXMgaW50byBhY2NvdW50XHJcbiAgICAvLyB0aGUgYW5nbGUvb2Zmc2V0IHNldCBvbiB0aGUgcG9seWdvbi5cclxuICAgIGNvbnN0IGNhbGNQb2ludHM6IEFycmF5PFZlY3Rvcj4gPSB0aGlzLmNhbGNQb2ludHM7XHJcblxyXG4gICAgLy8gVGhlIGVkZ2VzIGhlcmUgYXJlIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGBuYHRoIGVkZ2Ugb2YgdGhlIHBvbHlnb24sIHJlbGF0aXZlIHRvXHJcbiAgICAvLyB0aGUgYG5gdGggcG9pbnQuIElmIHlvdSB3YW50IHRvIGRyYXcgYSBnaXZlbiBlZGdlIGZyb20gdGhlIGVkZ2UgdmFsdWUsIHlvdSBtdXN0XHJcbiAgICAvLyBmaXJzdCB0cmFuc2xhdGUgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBzdGFydGluZyBwb2ludC5cclxuICAgIGNvbnN0IGVkZ2VzOiBBcnJheTxWZWN0b3I+ID0gdGhpcy5fZWRnZXM7XHJcblxyXG4gICAgLy8gVGhlIG5vcm1hbHMgaGVyZSBhcmUgdGhlIGRpcmVjdGlvbiBvZiB0aGUgbm9ybWFsIGZvciB0aGUgYG5gdGggZWRnZSBvZiB0aGUgcG9seWdvbiwgcmVsYXRpdmVcclxuICAgIC8vIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgYG5gdGggcG9pbnQuIElmIHlvdSB3YW50IHRvIGRyYXcgYW4gZWRnZSBub3JtYWwsIHlvdSBtdXN0IGZpcnN0XHJcbiAgICAvLyB0cmFuc2xhdGUgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBzdGFydGluZyBwb2ludC5cclxuICAgIGNvbnN0IG5vcm1hbHM6IEFycmF5PFZlY3Rvcj4gPSB0aGlzLl9ub3JtYWxzO1xyXG5cclxuICAgIC8vIENvcHkgdGhlIG9yaWdpbmFsIHBvaW50cyBhcnJheSBhbmQgYXBwbHkgdGhlIG9mZnNldC9hbmdsZVxyXG4gICAgY29uc3QgcG9pbnRzOiBBcnJheTxWZWN0b3I+ID0gdGhpcy5wb2ludHM7XHJcbiAgICBjb25zdCBvZmZzZXQ6IFZlY3RvciA9IHRoaXMub2Zmc2V0O1xyXG4gICAgY29uc3QgYW5nbGU6IG51bWJlciA9IHRoaXMuYW5nbGU7XHJcblxyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSBwb2ludHMubGVuZ3RoO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgY29uc3QgY2FsY1BvaW50OiBWZWN0b3IgPSBjYWxjUG9pbnRzW2ldLmNvcHkocG9pbnRzW2ldKTtcclxuXHJcbiAgICAgIGNhbGNQb2ludC54ICs9IG9mZnNldC54O1xyXG4gICAgICBjYWxjUG9pbnQueSArPSBvZmZzZXQueTtcclxuXHJcbiAgICAgIGlmIChhbmdsZSAhPT0gMCkgY2FsY1BvaW50LnJvdGF0ZShhbmdsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBlZGdlcy9ub3JtYWxzXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgY29uc3QgcDE6IFZlY3RvciA9IGNhbGNQb2ludHNbaV07XHJcbiAgICAgIGNvbnN0IHAyOiBWZWN0b3IgPSBpIDwgbGVuIC0gMSA/IGNhbGNQb2ludHNbaSArIDFdIDogY2FsY1BvaW50c1swXTtcclxuXHJcbiAgICAgIGNvbnN0IGU6IFZlY3RvciA9IGVkZ2VzW2ldLmNvcHkocDIpLnN1YihwMSk7XHJcblxyXG4gICAgICBub3JtYWxzW2ldLmNvcHkoZSkucGVycCgpLm5vcm1hbGl6ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcHV0ZSB0aGUgYXhpcy1hbGlnbmVkIGJvdW5kaW5nIGJveC5cclxuICAgKiBcclxuICAgKiBBbnkgY3VycmVudCBzdGF0ZSAodHJhbnNsYXRpb25zL3JvdGF0aW9ucykgd2lsbCBiZSBhcHBsaWVkIGJlZm9yZSBjb25zdHJ1Y3RpbmcgdGhlIEFBQkIuXHJcbiAgICogXHJcbiAgICogTm90ZTogUmV0dXJucyBhIF9uZXdfIGBQb2x5Z29uYCBlYWNoIHRpbWUgeW91IGNhbGwgdGhpcy5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7UG9seWdvbn0gUmV0dXJucyB0aGlzIGZvciBjaGFpbmluZy5cclxuICAgKi9cclxuICBnZXRBQUJCKCk6IFBvbHlnb24ge1xyXG4gICAgY29uc3QgcG9pbnRzOiBBcnJheTxWZWN0b3I+ID0gdGhpcy5jYWxjUG9pbnRzO1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSBwb2ludHMubGVuZ3RoO1xyXG5cclxuICAgIGxldCB4TWluOiBudW1iZXIgPSBwb2ludHNbMF0ueDtcclxuICAgIGxldCB5TWluOiBudW1iZXIgPSBwb2ludHNbMF0ueTtcclxuXHJcbiAgICBsZXQgeE1heDogbnVtYmVyID0gcG9pbnRzWzBdLng7XHJcbiAgICBsZXQgeU1heDogbnVtYmVyID0gcG9pbnRzWzBdLnk7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMTsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHBvaW50OiBWZWN0b3IgPSBwb2ludHNbaV07XHJcblxyXG4gICAgICBpZiAocG9pbnRbXCJ4XCJdIDwgeE1pbikgeE1pbiA9IHBvaW50W1wieFwiXTtcclxuICAgICAgZWxzZSBpZiAocG9pbnRbXCJ4XCJdID4geE1heCkgeE1heCA9IHBvaW50W1wieFwiXTtcclxuXHJcbiAgICAgIGlmIChwb2ludFtcInlcIl0gPCB5TWluKSB5TWluID0gcG9pbnRbXCJ5XCJdO1xyXG4gICAgICBlbHNlIGlmIChwb2ludFtcInlcIl0gPiB5TWF4KSB5TWF4ID0gcG9pbnRbXCJ5XCJdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IEJveCh0aGlzLl9wb3NpdGlvbi5jbG9uZSgpLmFkZChuZXcgVmVjdG9yKHhNaW4sIHlNaW4pKSwgeE1heCAtIHhNaW4sIHlNYXggLSB5TWluKS50b1BvbHlnb24oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXB1dGUgdGhlIGNlbnRyb2lkIChnZW9tZXRyaWMgY2VudGVyKSBvZiB0aGUgUG9seWdvbi5cclxuICAgKiBcclxuICAgKiBBbnkgY3VycmVudCBzdGF0ZSAodHJhbnNsYXRpb25zL3JvdGF0aW9ucykgd2lsbCBiZSBhcHBsaWVkIGJlZm9yZSBjb21wdXRpbmcgdGhlIGNlbnRyb2lkLlxyXG4gICAqIFxyXG4gICAqIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DZW50cm9pZCNDZW50cm9pZF9vZl9hX3BvbHlnb25cclxuICAgKiBcclxuICAgKiBOb3RlOiBSZXR1cm5zIGEgX25ld18gYFZlY3RvcmAgZWFjaCB0aW1lIHlvdSBjYWxsIHRoaXMuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge1ZlY3Rvcn0gUmV0dXJucyBhIFZlY3RvciB0aGF0IGNvbnRhaW5zIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgY2VudHJvaWQuXHJcbiAgICovXHJcbiAgZ2V0Q2VudHJvaWQoKTogVmVjdG9yIHtcclxuICAgIGNvbnN0IHBvaW50czogQXJyYXk8VmVjdG9yPiA9IHRoaXMuY2FsY1BvaW50cztcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gcG9pbnRzLmxlbmd0aDtcclxuXHJcbiAgICBsZXQgY3g6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgY3k6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgYXI6IG51bWJlciA9IDA7XHJcblxyXG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHAxOiBWZWN0b3IgPSBwb2ludHNbaV07XHJcbiAgICAgIGNvbnN0IHAyOiBWZWN0b3IgPSBpID09PSBsZW4gLSAxID8gcG9pbnRzWzBdIDogcG9pbnRzW2kgKyAxXTsgLy8gTG9vcCBhcm91bmQgaWYgbGFzdCBwb2ludFxyXG5cclxuICAgICAgY29uc3QgYTogbnVtYmVyID0gcDFbXCJ4XCJdICogcDJbXCJ5XCJdIC0gcDJbXCJ4XCJdICogcDFbXCJ5XCJdO1xyXG5cclxuICAgICAgY3ggKz0gKHAxW1wieFwiXSArIHAyW1wieFwiXSkgKiBhO1xyXG4gICAgICBjeSArPSAocDFbXCJ5XCJdICsgcDJbXCJ5XCJdKSAqIGE7XHJcbiAgICAgIGFyICs9IGE7XHJcbiAgICB9XHJcblxyXG4gICAgYXIgPSBhciAqIDM7IC8vIHdlIHdhbnQgMSAvIDYgdGhlIGFyZWEgYW5kIHdlIGN1cnJlbnRseSBoYXZlIDIqYXJlYVxyXG4gICAgY3ggPSBjeCAvIGFyO1xyXG4gICAgY3kgPSBjeSAvIGFyO1xyXG5cclxuICAgIHJldHVybiBuZXcgVmVjdG9yKGN4LCBjeSk7XHJcbiAgfVxyXG59Il19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW9tZXRyeS9Qb2x5Z29uLnRzIl0sIm5hbWVzIjpbIlBvbHlnb24iLCJwb3NpdGlvbiIsIlZlY3RvciIsInBvaW50cyIsIl9wb3NpdGlvbiIsInNldFBvaW50cyIsImxlbmd0aENoYW5nZWQiLCJsZW5ndGgiLCJpIiwiY2FsY1BvaW50cyIsIl9jYWxjUG9pbnRzIiwiZWRnZXMiLCJfZWRnZXMiLCJub3JtYWxzIiwiX25vcm1hbHMiLCJwMSIsInAyIiwieCIsInkiLCJzcGxpY2UiLCJwdXNoIiwiX3BvaW50cyIsIl9yZWNhbGMiLCJhbmdsZSIsIl9hbmdsZSIsIm9mZnNldCIsIl9vZmZzZXQiLCJsZW4iLCJyb3RhdGUiLCJjYWxjUG9pbnQiLCJjb3B5IiwiZSIsInN1YiIsInBlcnAiLCJub3JtYWxpemUiLCJ4TWluIiwieU1pbiIsInhNYXgiLCJ5TWF4IiwicG9pbnQiLCJCb3giLCJjbG9uZSIsImFkZCIsInRvUG9seWdvbiIsImN4IiwiY3kiLCJhciIsImEiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0FBRUE7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBOzs7Ozs7OztJQVFxQkEsTzs7O0FBQ25COzs7Ozs7OztBQVNBOzs7Ozs7OztBQVNBOzs7Ozs7OztBQVNBOzs7Ozs7OztBQVNBOzs7Ozs7OztBQVNBOzs7Ozs7OztBQVNBOzs7Ozs7OztBQVNBOzs7Ozs7O0FBT0EscUJBQXlFO0FBQUEsUUFBN0RDLFFBQTZELHVFQUExQyxJQUFJQyxrQkFBSixFQUEwQztBQUFBLFFBQTVCQyxNQUE0Qix1RUFBSixFQUFJOztBQUFBOztBQUFBLHVDQS9EN0MsSUFBSUQsa0JBQUosRUErRDZDOztBQUFBLHFDQXREeEMsRUFzRHdDOztBQUFBLG9DQTdDaEQsQ0E2Q2dEOztBQUFBLHFDQXBDL0MsSUFBSUEsa0JBQUosRUFvQytDOztBQUFBLHlDQTNCcEMsRUEyQm9DOztBQUFBLG9DQWxCekMsRUFrQnlDOztBQUFBLHNDQVR2QyxFQVN1Qzs7QUFDdkUsU0FBS0Us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Ozs7d0JBSzZCO0FBQUUsYUFBTyxLQUFLRSxRQUFaO0FBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXHJcblxyXG5pbXBvcnQgQm94IGZyb20gJy4vQm94JztcclxuaW1wb3J0IFZlY3RvciBmcm9tICcuL1ZlY3Rvcic7XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyBhICpjb252ZXgqIHBvbHlnb24gd2l0aCBhbnkgbnVtYmVyIG9mIHBvaW50cyAoc3BlY2lmaWVkIGluIGNvdW50ZXItY2xvY2t3aXNlIG9yZGVyKS5cclxuICogXHJcbiAqIE5vdGU6IERvIF9ub3RfIG1hbnVhbGx5IGNoYW5nZSB0aGUgYHBvaW50c2AsIGBhbmdsZWAsIG9yIGBvZmZzZXRgIHByb3BlcnRpZXMuIFVzZSB0aGUgcHJvdmlkZWQgIHNldHRlcnMuIFxyXG4gKiBPdGhlcndpc2UgdGhlIGNhbGN1bGF0ZWQgcHJvcGVydGllcyB3aWxsIG5vdCBiZSB1cGRhdGVkIGNvcnJlY3RseS5cclxuICogXHJcbiAqIFRoZSBgcG9zYCBwcm9wZXJ0eSBjYW4gYmUgY2hhbmdlZCBkaXJlY3RseS5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvbHlnb24ge1xyXG4gIC8qKlxyXG4gICAqIEEgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgb3JpZ2luIG9mIHRoaXMgcG9seWdvbiAoYWxsIG90aGVyIHBvaW50cyBhcmUgcmVsYXRpdmUgdG8gdGhpcyBvbmUpLlxyXG4gICAqIFxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogXHJcbiAgICogQHByb3BlcnR5IHtWZWN0b3J9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcG9zaXRpb246IFZlY3RvciA9IG5ldyBWZWN0b3IoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYXJyYXkgb2YgdmVjdG9ycyByZXByZXNlbnRpbmcgdGhlIHBvaW50cyBpbiB0aGUgcG9seWdvbiwgaW4gY291bnRlci1jbG9ja3dpc2Ugb3JkZXIuXHJcbiAgICogXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBcclxuICAgKiBAcHJvcGVydHkge0FycmF5PFZlY3Rvcj59XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcG9pbnRzOiBBcnJheTxWZWN0b3I+ID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBhbmdsZSBvZiB0aGlzIHBvbHlnb24uXHJcbiAgICogXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBcclxuICAgKiBAcHJvcGVydHkge251bWJlcn1cclxuICAgKi9cclxuICBwcml2YXRlIF9hbmdsZTogbnVtYmVyID0gMDtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG9mZnNldCBvZiB0aGlzIHBvbHlnb24uXHJcbiAgICogXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBcclxuICAgKiBAcHJvcGVydHkge1ZlY3Rvcn1cclxuICAgKi9cclxuICBwcml2YXRlIF9vZmZzZXQ6IFZlY3RvciA9IG5ldyBWZWN0b3IoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGNhbGN1bGF0ZWQgcG9pbnRzIG9mIHRoaXMgcG9seWdvbi5cclxuICAgKiBcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIFxyXG4gICAqIEBwcm9wZXJ0eSB7QXJyYXk8VmVjdG9yPn1cclxuICAgKi9cclxuICBwcml2YXRlIF9jYWxjUG9pbnRzOiBBcnJheTxWZWN0b3I+ID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBlZGdlcyBvZiB0aGlzIHBvbHlnb24uXHJcbiAgICogXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBcclxuICAgKiBAcHJvcGVydHkge0FycmF5PFZlY3Rvcj59XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZWRnZXM6IEFycmF5PFZlY3Rvcj4gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG5vcm1hbHMgb2YgdGhpcyBwb2x5Z29uLlxyXG4gICAqIFxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogXHJcbiAgICogQHByb3BlcnR5IHtBcnJheTxWZWN0b3I+fVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX25vcm1hbHM6IEFycmF5PFZlY3Rvcj4gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IHBvbHlnb24sIHBhc3NpbmcgaW4gYSBwb3NpdGlvbiB2ZWN0b3IsIGFuZCBhbiBhcnJheSBvZiBwb2ludHMgKHJlcHJlc2VudGVkIGJ5IHZlY3RvcnMgXHJcbiAgICogcmVsYXRpdmUgdG8gdGhlIHBvc2l0aW9uIHZlY3RvcikuIElmIG5vIHBvc2l0aW9uIGlzIHBhc3NlZCBpbiwgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb2x5Z29uIHdpbGwgYmUgYCgwLDApYC5cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge1ZlY3Rvcn0gW3Bvc2l0aW9uPVZlY3Rvcl0gQSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBvcmlnaW4gb2YgdGhlIHBvbHlnb24gKGFsbCBvdGhlciBwb2ludHMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgb25lKVxyXG4gICAqIEBwYXJhbSB7QXJyYXk8VmVjdG9yPn0gW3BvaW50cz1bXV0gQW4gYXJyYXkgb2YgdmVjdG9ycyByZXByZXNlbnRpbmcgdGhlIHBvaW50cyBpbiB0aGUgcG9seWdvbiwgaW4gY291bnRlci1jbG9ja3dpc2Ugb3JkZXIuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IocG9zaXRpb246IFZlY3RvciA9IG5ldyBWZWN0b3IoKSwgcG9pbnRzOiBBcnJheTxWZWN0b3I+ID0gW10pIHtcclxuICAgIHRoaXMuX3Bvc2l0aW9uID0gcG9zaXRpb247XHJcblxyXG4gICAgdGhpcy5zZXRQb2ludHMocG9pbnRzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoaXMgcG9seWdvbi5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7VmVjdG9yfVxyXG4gICAqL1xyXG4gIGdldCBwb3NpdGlvbigpOiBWZWN0b3IgeyByZXR1cm4gdGhpcy5fcG9zaXRpb247IH1cclxuXHJcbiAgLyoqXHJcbiAgICogKipOb3RlOioqIE5vdCBzdXJlIGlmIHRoaXMgd2lsbCBiZSBrZXB0IG9yIG5vdCBidXQgZm9yIG5vdyBpdCdzIGRpc2FibGVkLlxyXG4gICAqIFxyXG4gICAqIFNldHMgYSBuZXcgcG9zaXRpb24gZm9yIHRoaXMgcG9seWdvbiBhbmQgcmVjYWxjdWxhdGVzIHRoZSBwb2ludHMuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtWZWN0b3J9IHBvc2l0aW9uIEEgVmVjdG9yIHJlcHJlc2VudGluZyB0aGUgbmV3IHBvc2l0aW9uIG9mIHRoaXMgcG9seWdvbi5cclxuICAgKi9cclxuICAvLyBzZXQgcG9zaXRpb24ocG9zaXRpb246IFZlY3Rvcikge1xyXG4gIC8vICAgY29uc3QgZGlmZlg6IG51bWJlciA9IC0odGhpcy5fcG9zaXRpb24ueCAtIHBvc2l0aW9uLngpO1xyXG4gIC8vICAgY29uc3QgZGlmZlk6IG51bWJlciA9IC0odGhpcy5fcG9zaXRpb24ueSAtIHBvc2l0aW9uLnkpO1xyXG5cclxuICAvLyAgIGNvbnN0IGRpZmZQb2ludDogVmVjdG9yID0gbmV3IFZlY3RvcihkaWZmWCwgZGlmZlkpO1xyXG5cclxuICAvLyAgIGNvbnN0IHBvaW50czogQXJyYXk8VmVjdG9yPiA9IFtdO1xyXG5cclxuICAvLyAgIHRoaXMuX3BvaW50cy5tYXAoKHBvaW50OiBWZWN0b3IpID0+IHtcclxuICAvLyAgICAgY29uc3QgdGVtcFg6IG51bWJlciA9IHBvaW50Lng7XHJcbiAgLy8gICAgIGNvbnN0IHRlbXBZOiBudW1iZXIgPSBwb2ludC55O1xyXG5cclxuICAvLyAgICAgY29uc3QgdGVtcFBvaW50OiBWZWN0b3IgPSBuZXcgVmVjdG9yKHRlbXBYLCB0ZW1wWSk7XHJcblxyXG4gIC8vICAgICBjb25zdCBjYWxjdWxhdGVkUG9pbnQ6IFZlY3RvciA9IHRlbXBQb2ludC5hZGQoZGlmZlBvaW50KTtcclxuXHJcbiAgLy8gICAgIHBvaW50cy5wdXNoKGNhbGN1bGF0ZWRQb2ludCk7XHJcbiAgLy8gICB9KTtcclxuXHJcbiAgLy8gICB0aGlzLnNldFBvaW50cyhwb2ludHMsIHRydWUpO1xyXG4gIC8vIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgcG9pbnRzIG9mIHRoaXMgcG9seWdvbi5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7QXJyYXk8VmVjdG9yPn1cclxuICAgKi9cclxuICBnZXQgcG9pbnRzKCk6IEFycmF5PFZlY3Rvcj4geyByZXR1cm4gdGhpcy5fcG9pbnRzOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGNhbGN1bGF0ZWQgcG9pbnRzIG9mIHRoaXMgcG9seWdvbi5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7QXJyYXk8VmVjdG9yPn1cclxuICAgKi9cclxuICBnZXQgY2FsY1BvaW50cygpOiBBcnJheTxWZWN0b3I+IHsgcmV0dXJuIHRoaXMuX2NhbGNQb2ludHM7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgb2Zmc2V0IG9mIHRoaXMgcG9seWdvbi5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7VmVjdG9yfVxyXG4gICAqL1xyXG4gIGdldCBvZmZzZXQoKTogVmVjdG9yIHsgcmV0dXJuIHRoaXMuX29mZnNldDsgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBhbmdsZSBvZiB0aGlzIHBvbHlnb24uXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgYW5nbGUoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX2FuZ2xlOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGVkZ2VzIG9mIHRoaXMgcG9seWdvbi5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7QXJyYXk8VmVjdG9yPn1cclxuICAgKi9cclxuICBnZXQgZWRnZXMoKTogQXJyYXk8VmVjdG9yPiB7IHJldHVybiB0aGlzLl9lZGdlczsgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBub3JtYWxzIG9mIHRoaXMgcG9seWdvbi5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7QXJyYXk8VmVjdG9yPn1cclxuICAgKi9cclxuICBnZXQgbm9ybWFscygpOiBBcnJheTxWZWN0b3I+IHsgcmV0dXJuIHRoaXMuX25vcm1hbHM7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBwb2ludHMgb2YgdGhlIHBvbHlnb24uIEFueSBjb25zZWN1dGl2ZSBkdXBsaWNhdGUgcG9pbnRzIHdpbGwgYmUgY29tYmluZWQuXHJcbiAgICogXHJcbiAgICogTm90ZTogVGhlIHBvaW50cyBhcmUgY291bnRlci1jbG9ja3dpc2UgKndpdGggcmVzcGVjdCB0byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0qLiBJZiB5b3UgZGlyZWN0bHkgZHJhdyB0aGUgcG9pbnRzIG9uIGEgc2NyZWVuIFxyXG4gICAqIHRoYXQgaGFzIHRoZSBvcmlnaW4gYXQgdGhlIHRvcC1sZWZ0IGNvcm5lciBpdCB3aWxsIF9hcHBlYXJfIHZpc3VhbGx5IHRoYXQgdGhlIHBvaW50cyBhcmUgYmVpbmcgc3BlY2lmaWVkIGNsb2Nrd2lzZS4gVGhpcyBpcyBcclxuICAgKiBqdXN0IGJlY2F1c2Ugb2YgdGhlIGludmVyc2lvbiBvZiB0aGUgWS1heGlzIHdoZW4gYmVpbmcgZGlzcGxheWVkLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7QXJyYXk8VmVjdG9yPn0gcG9pbnRzIEFuIGFycmF5IG9mIHZlY3RvcnMgcmVwcmVzZW50aW5nIHRoZSBwb2ludHMgaW4gdGhlIHBvbHlnb24sIGluIGNvdW50ZXItY2xvY2t3aXNlIG9yZGVyLlxyXG4gICAqICAgICogXHJcbiAgICogQHJldHVybnMge1BvbHlnb259IFJldHVybnMgdGhpcyBmb3IgY2hhaW5pbmcuXHJcbiAgICovXHJcbiAgc2V0UG9pbnRzKHBvaW50czogQXJyYXk8VmVjdG9yPik6IFBvbHlnb24ge1xyXG4gICAgLy8gT25seSByZS1hbGxvY2F0ZSBpZiB0aGlzIGlzIGEgbmV3IHBvbHlnb24gb3IgdGhlIG51bWJlciBvZiBwb2ludHMgaGFzIGNoYW5nZWQuXHJcbiAgICBjb25zdCBsZW5ndGhDaGFuZ2VkOiBib29sZWFuID0gIXRoaXMucG9pbnRzIHx8IHRoaXMucG9pbnRzLmxlbmd0aCAhPT0gcG9pbnRzLmxlbmd0aDtcclxuXHJcbiAgICBpZiAobGVuZ3RoQ2hhbmdlZCkge1xyXG4gICAgICBsZXQgaTogbnVtYmVyO1xyXG5cclxuICAgICAgY29uc3QgY2FsY1BvaW50czogQXJyYXk8VmVjdG9yPiA9IHRoaXMuX2NhbGNQb2ludHMgPSBbXTtcclxuICAgICAgY29uc3QgZWRnZXM6IEFycmF5PFZlY3Rvcj4gPSB0aGlzLl9lZGdlcyA9IFtdO1xyXG4gICAgICBjb25zdCBub3JtYWxzOiBBcnJheTxWZWN0b3I+ID0gdGhpcy5fbm9ybWFscyA9IFtdO1xyXG5cclxuICAgICAgLy8gQWxsb2NhdGUgdGhlIHZlY3RvciBhcnJheXMgZm9yIHRoZSBjYWxjdWxhdGVkIHByb3BlcnRpZXNcclxuICAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIC8vIFJlbW92ZSBjb25zZWN1dGl2ZSBkdXBsaWNhdGUgcG9pbnRzXHJcbiAgICAgICAgY29uc3QgcDE6IFZlY3RvciA9IHBvaW50c1tpXTtcclxuICAgICAgICBjb25zdCBwMjogVmVjdG9yID0gaSA8IHBvaW50cy5sZW5ndGggLSAxID8gcG9pbnRzW2kgKyAxXSA6IHBvaW50c1swXTtcclxuXHJcbiAgICAgICAgaWYgKHAxICE9PSBwMiAmJiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnkpIHtcclxuICAgICAgICAgIHBvaW50cy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICBpIC09IDE7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNhbGNQb2ludHMucHVzaChuZXcgVmVjdG9yKCkpO1xyXG4gICAgICAgIGVkZ2VzLnB1c2gobmV3IFZlY3RvcigpKTtcclxuICAgICAgICBub3JtYWxzLnB1c2gobmV3IFZlY3RvcigpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BvaW50cyA9IHBvaW50cztcclxuXHJcbiAgICB0aGlzLl9yZWNhbGMoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgY3VycmVudCByb3RhdGlvbiBhbmdsZSBvZiB0aGUgcG9seWdvbi5cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgVGhlIGN1cnJlbnQgcm90YXRpb24gYW5nbGUgKGluIHJhZGlhbnMpLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtQb2x5Z29ufSBSZXR1cm5zIHRoaXMgZm9yIGNoYWluaW5nLlxyXG4gICAqL1xyXG4gIHNldEFuZ2xlKGFuZ2xlOiBudW1iZXIpOiBQb2x5Z29uIHtcclxuICAgIHRoaXMuX2FuZ2xlID0gYW5nbGU7XHJcblxyXG4gICAgdGhpcy5fcmVjYWxjKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGN1cnJlbnQgb2Zmc2V0IHRvIGFwcGx5IHRvIHRoZSBgcG9pbnRzYCBiZWZvcmUgYXBwbHlpbmcgdGhlIGBhbmdsZWAgcm90YXRpb24uXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtWZWN0b3J9IG9mZnNldCBUaGUgbmV3IG9mZnNldCBWZWN0b3IuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge1BvbHlnb259IFJldHVybnMgdGhpcyBmb3IgY2hhaW5pbmcuXHJcbiAgICovXHJcbiAgc2V0T2Zmc2V0KG9mZnNldDogVmVjdG9yKTogUG9seWdvbiB7XHJcbiAgICB0aGlzLl9vZmZzZXQgPSBvZmZzZXQ7XHJcblxyXG4gICAgdGhpcy5fcmVjYWxjKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSb3RhdGVzIHRoaXMgUG9seWdvbiBjb3VudGVyLWNsb2Nrd2lzZSBhcm91bmQgdGhlIG9yaWdpbiBvZiAqaXRzIGxvY2FsIGNvb3JkaW5hdGUgc3lzdGVtKiAoaS5lLiBgcG9zaXRpb25gKS5cclxuICAgKiBcclxuICAgKiBOb3RlOiBUaGlzIGNoYW5nZXMgdGhlICoqb3JpZ2luYWwqKiBwb2ludHMgKHNvIGFueSBgYW5nbGVgIHdpbGwgYmUgYXBwbGllZCBvbiB0b3Agb2YgdGhpcyByb3RhdGlvbikuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIFRoZSBhbmdsZSB0byByb3RhdGUgKGluIHJhZGlhbnMpLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtQb2x5Z29ufSBSZXR1cm5zIHRoaXMgZm9yIGNoYWluaW5nLlxyXG4gICAqL1xyXG4gIHJvdGF0ZShhbmdsZTogbnVtYmVyKTogUG9seWdvbiB7XHJcbiAgICBjb25zdCBwb2ludHM6IEFycmF5PFZlY3Rvcj4gPSB0aGlzLnBvaW50cztcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gcG9pbnRzLmxlbmd0aDtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSBwb2ludHNbaV0ucm90YXRlKGFuZ2xlKTtcclxuXHJcbiAgICB0aGlzLl9yZWNhbGMoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYW5zbGF0ZXMgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb24gYnkgYSBzcGVjaWZpZWQgYW1vdW50IHJlbGF0aXZlIHRvIHRoZSBvcmlnaW4gb2YgKml0cyBvd24gY29vcmRpbmF0ZSBzeXN0ZW0qIChpLmUuIGBwb3NpdGlvbmApLlxyXG4gICAqIFxyXG4gICAqIE5vdGU6IFRoaXMgY2hhbmdlcyB0aGUgKipvcmlnaW5hbCoqIHBvaW50cyAoc28gYW55IGBvZmZzZXRgIHdpbGwgYmUgYXBwbGllZCBvbiB0b3Agb2YgdGhpcyB0cmFuc2xhdGlvbilcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge251bWJlcn0geCBUaGUgaG9yaXpvbnRhbCBhbW91bnQgdG8gdHJhbnNsYXRlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSB2ZXJ0aWNhbCBhbW91bnQgdG8gdHJhbnNsYXRlLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtQb2x5Z29ufSBSZXR1cm5zIHRoaXMgZm9yIGNoYWluaW5nLlxyXG4gICAqL1xyXG4gIHRyYW5zbGF0ZSh4OiBudW1iZXIsIHk6IG51bWJlcik6IFBvbHlnb24ge1xyXG4gICAgY29uc3QgcG9pbnRzOiBBcnJheTxWZWN0b3I+ID0gdGhpcy5wb2ludHM7XHJcbiAgICBjb25zdCBsZW46IG51bWJlciA9IHBvaW50cy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIHBvaW50c1tpXS54ICs9IHg7XHJcbiAgICAgIHBvaW50c1tpXS55ICs9IHk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcmVjYWxjKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wdXRlcyB0aGUgY2FsY3VsYXRlZCBjb2xsaXNpb24gUG9seWdvbi5cclxuICAgKiBcclxuICAgKiBUaGlzIGFwcGxpZXMgdGhlIGBhbmdsZWAgYW5kIGBvZmZzZXRgIHRvIHRoZSBvcmlnaW5hbCBwb2ludHMgdGhlbiByZWNhbGN1bGF0ZXMgdGhlIGVkZ2VzIGFuZCBub3JtYWxzIG9mIHRoZSBjb2xsaXNpb24gUG9seWdvbi5cclxuICAgKiBcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtQb2x5Z29ufSBSZXR1cm5zIHRoaXMgZm9yIGNoYWluaW5nLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3JlY2FsYygpOiBQb2x5Z29uIHtcclxuICAgIC8vIENhbGN1bGF0ZWQgcG9pbnRzIC0gdGhpcyBpcyB3aGF0IGlzIHVzZWQgZm9yIHVuZGVybHlpbmcgY29sbGlzaW9ucyBhbmQgdGFrZXMgaW50byBhY2NvdW50XHJcbiAgICAvLyB0aGUgYW5nbGUvb2Zmc2V0IHNldCBvbiB0aGUgcG9seWdvbi5cclxuICAgIGNvbnN0IGNhbGNQb2ludHM6IEFycmF5PFZlY3Rvcj4gPSB0aGlzLmNhbGNQb2ludHM7XHJcblxyXG4gICAgLy8gVGhlIGVkZ2VzIGhlcmUgYXJlIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGBuYHRoIGVkZ2Ugb2YgdGhlIHBvbHlnb24sIHJlbGF0aXZlIHRvXHJcbiAgICAvLyB0aGUgYG5gdGggcG9pbnQuIElmIHlvdSB3YW50IHRvIGRyYXcgYSBnaXZlbiBlZGdlIGZyb20gdGhlIGVkZ2UgdmFsdWUsIHlvdSBtdXN0XHJcbiAgICAvLyBmaXJzdCB0cmFuc2xhdGUgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBzdGFydGluZyBwb2ludC5cclxuICAgIGNvbnN0IGVkZ2VzOiBBcnJheTxWZWN0b3I+ID0gdGhpcy5fZWRnZXM7XHJcblxyXG4gICAgLy8gVGhlIG5vcm1hbHMgaGVyZSBhcmUgdGhlIGRpcmVjdGlvbiBvZiB0aGUgbm9ybWFsIGZvciB0aGUgYG5gdGggZWRnZSBvZiB0aGUgcG9seWdvbiwgcmVsYXRpdmVcclxuICAgIC8vIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgYG5gdGggcG9pbnQuIElmIHlvdSB3YW50IHRvIGRyYXcgYW4gZWRnZSBub3JtYWwsIHlvdSBtdXN0IGZpcnN0XHJcbiAgICAvLyB0cmFuc2xhdGUgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBzdGFydGluZyBwb2ludC5cclxuICAgIGNvbnN0IG5vcm1hbHM6IEFycmF5PFZlY3Rvcj4gPSB0aGlzLl9ub3JtYWxzO1xyXG5cclxuICAgIC8vIENvcHkgdGhlIG9yaWdpbmFsIHBvaW50cyBhcnJheSBhbmQgYXBwbHkgdGhlIG9mZnNldC9hbmdsZVxyXG4gICAgY29uc3QgcG9pbnRzOiBBcnJheTxWZWN0b3I+ID0gdGhpcy5wb2ludHM7XHJcbiAgICBjb25zdCBvZmZzZXQ6IFZlY3RvciA9IHRoaXMub2Zmc2V0O1xyXG4gICAgY29uc3QgYW5nbGU6IG51bWJlciA9IHRoaXMuYW5nbGU7XHJcblxyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSBwb2ludHMubGVuZ3RoO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgY29uc3QgY2FsY1BvaW50OiBWZWN0b3IgPSBjYWxjUG9pbnRzW2ldLmNvcHkocG9pbnRzW2ldKTtcclxuXHJcbiAgICAgIGNhbGNQb2ludC54ICs9IG9mZnNldC54O1xyXG4gICAgICBjYWxjUG9pbnQueSArPSBvZmZzZXQueTtcclxuXHJcbiAgICAgIGlmIChhbmdsZSAhPT0gMCkgY2FsY1BvaW50LnJvdGF0ZShhbmdsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBlZGdlcy9ub3JtYWxzXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgY29uc3QgcDE6IFZlY3RvciA9IGNhbGNQb2ludHNbaV07XHJcbiAgICAgIGNvbnN0IHAyOiBWZWN0b3IgPSBpIDwgbGVuIC0gMSA/IGNhbGNQb2ludHNbaSArIDFdIDogY2FsY1BvaW50c1swXTtcclxuXHJcbiAgICAgIGNvbnN0IGU6IFZlY3RvciA9IGVkZ2VzW2ldLmNvcHkocDIpLnN1YihwMSk7XHJcblxyXG4gICAgICBub3JtYWxzW2ldLmNvcHkoZSkucGVycCgpLm5vcm1hbGl6ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcHV0ZSB0aGUgYXhpcy1hbGlnbmVkIGJvdW5kaW5nIGJveC5cclxuICAgKiBcclxuICAgKiBBbnkgY3VycmVudCBzdGF0ZSAodHJhbnNsYXRpb25zL3JvdGF0aW9ucykgd2lsbCBiZSBhcHBsaWVkIGJlZm9yZSBjb25zdHJ1Y3RpbmcgdGhlIEFBQkIuXHJcbiAgICogXHJcbiAgICogTm90ZTogUmV0dXJucyBhIF9uZXdfIGBQb2x5Z29uYCBlYWNoIHRpbWUgeW91IGNhbGwgdGhpcy5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7UG9seWdvbn0gUmV0dXJucyB0aGlzIGZvciBjaGFpbmluZy5cclxuICAgKi9cclxuICBnZXRBQUJCKCk6IFBvbHlnb24ge1xyXG4gICAgY29uc3QgcG9pbnRzOiBBcnJheTxWZWN0b3I+ID0gdGhpcy5jYWxjUG9pbnRzO1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSBwb2ludHMubGVuZ3RoO1xyXG5cclxuICAgIGxldCB4TWluOiBudW1iZXIgPSBwb2ludHNbMF0ueDtcclxuICAgIGxldCB5TWluOiBudW1iZXIgPSBwb2ludHNbMF0ueTtcclxuXHJcbiAgICBsZXQgeE1heDogbnVtYmVyID0gcG9pbnRzWzBdLng7XHJcbiAgICBsZXQgeU1heDogbnVtYmVyID0gcG9pbnRzWzBdLnk7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMTsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHBvaW50OiBWZWN0b3IgPSBwb2ludHNbaV07XHJcblxyXG4gICAgICBpZiAocG9pbnRbXCJ4XCJdIDwgeE1pbikgeE1pbiA9IHBvaW50W1wieFwiXTtcclxuICAgICAgZWxzZSBpZiAocG9pbnRbXCJ4XCJdID4geE1heCkgeE1heCA9IHBvaW50W1wieFwiXTtcclxuXHJcbiAgICAgIGlmIChwb2ludFtcInlcIl0gPCB5TWluKSB5TWluID0gcG9pbnRbXCJ5XCJdO1xyXG4gICAgICBlbHNlIGlmIChwb2ludFtcInlcIl0gPiB5TWF4KSB5TWF4ID0gcG9pbnRbXCJ5XCJdO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IEJveCh0aGlzLl9wb3NpdGlvbi5jbG9uZSgpLmFkZChuZXcgVmVjdG9yKHhNaW4sIHlNaW4pKSwgeE1heCAtIHhNaW4sIHlNYXggLSB5TWluKS50b1BvbHlnb24oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXB1dGUgdGhlIGNlbnRyb2lkIChnZW9tZXRyaWMgY2VudGVyKSBvZiB0aGUgUG9seWdvbi5cclxuICAgKiBcclxuICAgKiBBbnkgY3VycmVudCBzdGF0ZSAodHJhbnNsYXRpb25zL3JvdGF0aW9ucykgd2lsbCBiZSBhcHBsaWVkIGJlZm9yZSBjb21wdXRpbmcgdGhlIGNlbnRyb2lkLlxyXG4gICAqIFxyXG4gICAqIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DZW50cm9pZCNDZW50cm9pZF9vZl9hX3BvbHlnb25cclxuICAgKiBcclxuICAgKiBOb3RlOiBSZXR1cm5zIGEgX25ld18gYFZlY3RvcmAgZWFjaCB0aW1lIHlvdSBjYWxsIHRoaXMuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge1ZlY3Rvcn0gUmV0dXJucyBhIFZlY3RvciB0aGF0IGNvbnRhaW5zIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgY2VudHJvaWQuXHJcbiAgICovXHJcbiAgZ2V0Q2VudHJvaWQoKTogVmVjdG9yIHtcclxuICAgIGNvbnN0IHBvaW50czogQXJyYXk8VmVjdG9yPiA9IHRoaXMuY2FsY1BvaW50cztcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gcG9pbnRzLmxlbmd0aDtcclxuXHJcbiAgICBsZXQgY3g6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgY3k6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgYXI6IG51bWJlciA9IDA7XHJcblxyXG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHAxOiBWZWN0b3IgPSBwb2ludHNbaV07XHJcbiAgICAgIGNvbnN0IHAyOiBWZWN0b3IgPSBpID09PSBsZW4gLSAxID8gcG9pbnRzWzBdIDogcG9pbnRzW2kgKyAxXTsgLy8gTG9vcCBhcm91bmQgaWYgbGFzdCBwb2ludFxyXG5cclxuICAgICAgY29uc3QgYTogbnVtYmVyID0gcDFbXCJ4XCJdICogcDJbXCJ5XCJdIC0gcDJbXCJ4XCJdICogcDFbXCJ5XCJdO1xyXG5cclxuICAgICAgY3ggKz0gKHAxW1wieFwiXSArIHAyW1wieFwiXSkgKiBhO1xyXG4gICAgICBjeSArPSAocDFbXCJ5XCJdICsgcDJbXCJ5XCJdKSAqIGE7XHJcbiAgICAgIGFyICs9IGE7XHJcbiAgICB9XHJcblxyXG4gICAgYXIgPSBhciAqIDM7IC8vIHdlIHdhbnQgMSAvIDYgdGhlIGFyZWEgYW5kIHdlIGN1cnJlbnRseSBoYXZlIDIqYXJlYVxyXG4gICAgY3ggPSBjeCAvIGFyO1xyXG4gICAgY3kgPSBjeSAvIGFyO1xyXG5cclxuICAgIHJldHVybiBuZXcgVmVjdG9yKGN4LCBjeSk7XHJcbiAgfVxyXG59Il19

2

package.json
{
"name": "collider2d",
"version": "0.1.1",
"version": "0.2.0",
"description": "A 2D collision checker for modern games.",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -81,2 +81,12 @@ 'use strict'

/**
* Translate the center of the cirlc.e
*
* @param {Vector} position A Vector representing the new center of this circle.
*/
translate(x: number, y: number) {
this._position.x += x;
this._position.y += y;
}
/**
* Compute the axis-aligned bounding box (AABB) of this Circle.

@@ -83,0 +93,0 @@ *

@@ -99,2 +99,31 @@ 'use strict'

/**
* **Note:** Not sure if this will be kept or not but for now it's disabled.
*
* Sets a new position for this polygon and recalculates the points.
*
* @param {Vector} position A Vector representing the new position of this polygon.
*/
// set position(position: Vector) {
// const diffX: number = -(this._position.x - position.x);
// const diffY: number = -(this._position.y - position.y);
// const diffPoint: Vector = new Vector(diffX, diffY);
// const points: Array<Vector> = [];
// this._points.map((point: Vector) => {
// const tempX: number = point.x;
// const tempY: number = point.y;
// const tempPoint: Vector = new Vector(tempX, tempY);
// const calculatedPoint: Vector = tempPoint.add(diffPoint);
// points.push(calculatedPoint);
// });
// this.setPoints(points, true);
// }
/**
* Returns the points of this polygon.

@@ -149,3 +178,3 @@ *

* @param {Array<Vector>} points An array of vectors representing the points in the polygon, in counter-clockwise order.
*
* *
* @returns {Polygon} Returns this for chaining.

@@ -152,0 +181,0 @@ */

@@ -194,3 +194,3 @@ 'use strict'

circle.offset = c2d.vector(-10, -10);
const collisionAfterOffsetChange = c2d.pointInCircle(c2d.vector(110, 110), circle);

@@ -233,1 +233,209 @@ chai.expect(collisionAfterOffsetChange).to.be.false;

});
describe('Collision - After moving from initial position', () => {
it("testCircleCircle - should not detect a collision after a circle is moved from collision range", () => {
const circle1 = c2d.circle(c2d.vector(0, 0), 20);
const circle2 = c2d.circle(c2d.vector(10, 0), 20);
// Test collision = true - without details.
const collided = c2d.testCircleCircle(circle1, circle2);
chai.expect(collided).to.be.true;
circle2.translate(40, 50);
// Test collision = false - moved from collision range.
const collidedAfterMove = c2d.testCircleCircle(circle1, circle2);
chai.expect(collidedAfterMove).to.be.false;
});
it("testCircleCircle - should detect a collision after a circle is moved to collision range", () => {
const circle1 = c2d.circle(c2d.vector(0, 0), 20);
const circle2 = c2d.circle(c2d.vector(10, 100), 20);
// Test collision = false.
const collided = c2d.testCircleCircle(circle1, circle2);
chai.expect(collided).to.be.false;
circle2.translate(-5, -90);
// Test collision = true - moved to collision range.
const collidedAfterMove = c2d.testCircleCircle(circle1, circle2);
chai.expect(collidedAfterMove).to.be.true;
});
it("testPolygonCircle - should not detect a collision after the polygon is moved - (x, y) greater", () => {
const circle = c2d.circle(c2d.vector(50, 50), 20);
const polygon = c2d.polygon(c2d.vector(10, 10), [
c2d.vector(0, 0),
c2d.vector(40, 0),
c2d.vector(40, 40),
c2d.vector(0, 40)
]);
// Test collision = true - no details
const collided = c2d.testPolygonCircle(polygon, circle);
chai.expect(collided).to.be.true;
polygon.translate(200, 300);
// Test collision = false - after moving polygon to (200, 300);
const collidedAfterMoving = c2d.testPolygonCircle(polygon, circle);
chai.expect(collidedAfterMoving).to.be.false;
});
it("testPolygonCircle - should not detect a collision after the polygon is moved - (x, y) less", () => {
const circle = c2d.circle(c2d.vector(50, 50), 20);
const polygon = c2d.polygon(c2d.vector(10, 10), [
c2d.vector(0, 0),
c2d.vector(40, 0),
c2d.vector(40, 40),
c2d.vector(0, 40)
]);
// Test collision = true - no details
const collided = c2d.testPolygonCircle(polygon, circle);
chai.expect(collided).to.be.true;
polygon.translate(-200, -150);
// Test collision = false - after moving polygon to (-200, -150);
const collidedAfterMoving = c2d.testPolygonCircle(polygon, circle);
chai.expect(collidedAfterMoving).to.be.false;
});
it("testPolygonCircle - should detect a collision after the polygon is moved - (x, y) greater", () => {
const circle = c2d.circle(c2d.vector(50, 50), 20);
const polygon = c2d.polygon(c2d.vector(-150, -125), [
c2d.vector(0, 0),
c2d.vector(40, 0),
c2d.vector(40, 40),
c2d.vector(0, 40)
]);
// Test collision = false
const collided = c2d.testPolygonCircle(polygon, circle);
chai.expect(collided).to.be.false;
polygon.translate(180, 150);
// Test collision = true - after moving polygon to (30, 25);
const collidedAfterMoving = c2d.testPolygonCircle(polygon, circle);
chai.expect(collidedAfterMoving).to.be.true;
});
it("testPolygonCircle - should detect a collision after the polygon is moved - (x, y) less", () => {
const circle = c2d.circle(c2d.vector(50, 50), 20);
const polygon = c2d.polygon(c2d.vector(200, 300), [
c2d.vector(0, 0),
c2d.vector(40, 0),
c2d.vector(40, 40),
c2d.vector(0, 40)
]);
// Test collision = false
const collided = c2d.testPolygonCircle(polygon, circle);
chai.expect(collided).to.be.false;
polygon.translate(-170, -275);
// Test collision = true - after moving polygon to (30, 25);
const collidedAfterMoving = c2d.testPolygonCircle(polygon, circle);
chai.expect(collidedAfterMoving).to.be.true;
});
it("testPolygonCircle - should not detect a collision after the circle is moved", () => {
const circle = c2d.circle(c2d.vector(50, 50), 20);
const polygon = c2d.polygon(c2d.vector(25, 25), [
c2d.vector(0, 0),
c2d.vector(40, 0),
c2d.vector(40, 40),
c2d.vector(0, 40)
]);
// Test collision = false
const collided = c2d.testPolygonCircle(polygon, circle);
chai.expect(collided).to.be.true;
circle.translate(200, 300);
// Test collision = true - after moving polygon to (30, 25);
const collidedAfterMoving = c2d.testPolygonCircle(polygon, circle);
chai.expect(collidedAfterMoving).to.be.false;
});
it("testPolygonCircle - should detect a collision after the circle is moved", () => {
const circle = c2d.circle(c2d.vector(200, 150), 20);
const polygon = c2d.polygon(c2d.vector(0, 0), [
c2d.vector(0, 0),
c2d.vector(40, 0),
c2d.vector(40, 40),
c2d.vector(0, 40)
]);
// Test collision = false
const collided = c2d.testPolygonCircle(polygon, circle);
chai.expect(collided).to.be.false;
circle.translate(-150, -100);
// Test collision = true - after moving circle to (50, 50).
const collidedAfterMoving = c2d.testPolygonCircle(polygon, circle);
chai.expect(collidedAfterMoving).to.be.true;
});
it("testPolygonPolygon - should not detect a collision after the polygon is moved - (x, y) greater", () => {
const polygon1 = c2d.polygon(c2d.vector(0, 0), [
c2d.vector(0, 0),
c2d.vector(40, 0),
c2d.vector(40, 40),
c2d.vector(0, 40)
]);
const polygon2 = c2d.polygon(c2d.vector(30, 0), [
c2d.vector(0, 0),
c2d.vector(30, 0),
c2d.vector(0, 30)
]);
// Test collision = true.
const collided = c2d.testPolygonPolygon(polygon1, polygon2);
chai.expect(collided).to.be.true;
// Test collision = false - after moving polygon.
polygon2.translate(90, 150);
const collidedAfterMoving = c2d.testPolygonPolygon(polygon1, polygon2);
chai.expect(collidedAfterMoving).to.be.false;
});
it("testPolygonPolygon - should not detect a collision after the polygon is moved - (x, y) less", () => {
const polygon1 = c2d.polygon(c2d.vector(0, 0), [
c2d.vector(0, 0),
c2d.vector(40, 0),
c2d.vector(40, 40),
c2d.vector(0, 40)
]);
const polygon2 = c2d.polygon(c2d.vector(140, 150), [
c2d.vector(0, 0),
c2d.vector(30, 0),
c2d.vector(0, 30)
]);
// Test collision = false
const collided = c2d.testPolygonPolygon(polygon1, polygon2);
chai.expect(collided).to.be.false;
// Test collision = true - after moving polygon.
polygon2.translate(-110, -150);
const collidedAfterMoving = c2d.testPolygonPolygon(polygon1, polygon2);
chai.expect(collidedAfterMoving).to.be.true;
});
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc