@pie-lib/plot 2.8.0-beta.5 → 2.8.0-beta.7
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/CHANGELOG.md +32 -0
- package/package.json +3 -3
- package/lib/__tests__/draggable.test.js +0 -33
- package/lib/__tests__/grid-draggable.test.js +0 -438
- package/lib/__tests__/root.test.js +0 -151
- package/lib/__tests__/trig.test.js +0 -183
- package/lib/__tests__/utils.test.js +0 -312
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
|
-
|
|
7
|
-
var _enzyme = require("enzyme");
|
|
8
|
-
|
|
9
|
-
var _react = _interopRequireDefault(require("react"));
|
|
10
|
-
|
|
11
|
-
var _root = require("../root");
|
|
12
|
-
|
|
13
|
-
var _d3Selection = require("d3-selection");
|
|
14
|
-
|
|
15
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
16
|
-
|
|
17
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
18
|
-
|
|
19
|
-
var scaleMock = function scaleMock() {
|
|
20
|
-
var fn = jest.fn(function (n) {
|
|
21
|
-
return n;
|
|
22
|
-
});
|
|
23
|
-
fn.invert = jest.fn(function (n) {
|
|
24
|
-
return n;
|
|
25
|
-
});
|
|
26
|
-
return fn;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
var graphProps = function graphProps() {
|
|
30
|
-
return {
|
|
31
|
-
scale: {
|
|
32
|
-
x: scaleMock(),
|
|
33
|
-
y: scaleMock()
|
|
34
|
-
},
|
|
35
|
-
snap: {
|
|
36
|
-
x: jest.fn(function (n) {
|
|
37
|
-
return n;
|
|
38
|
-
}),
|
|
39
|
-
y: jest.fn(function (n) {
|
|
40
|
-
return n;
|
|
41
|
-
})
|
|
42
|
-
},
|
|
43
|
-
domain: {
|
|
44
|
-
min: 0,
|
|
45
|
-
max: 1,
|
|
46
|
-
step: 1
|
|
47
|
-
},
|
|
48
|
-
range: {
|
|
49
|
-
min: 0,
|
|
50
|
-
max: 1,
|
|
51
|
-
step: 1
|
|
52
|
-
},
|
|
53
|
-
size: {
|
|
54
|
-
width: 400,
|
|
55
|
-
height: 400
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
var wrapper = function wrapper(props) {
|
|
61
|
-
props = _objectSpread({
|
|
62
|
-
classes: {},
|
|
63
|
-
graphProps: graphProps()
|
|
64
|
-
}, props);
|
|
65
|
-
return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_root.Root, props, "hi"), {
|
|
66
|
-
disableLifecycleMethods: true
|
|
67
|
-
});
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
jest.mock('d3-selection', function () {
|
|
71
|
-
return {
|
|
72
|
-
select: jest.fn(),
|
|
73
|
-
mouse: jest.fn()
|
|
74
|
-
};
|
|
75
|
-
});
|
|
76
|
-
describe('root', function () {
|
|
77
|
-
describe('snapshot', function () {
|
|
78
|
-
it('matches', function () {
|
|
79
|
-
var w = wrapper();
|
|
80
|
-
expect(w).toMatchSnapshot();
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
describe('logic', function () {
|
|
84
|
-
describe('mousemove', function () {
|
|
85
|
-
describe('mount/unmount', function () {
|
|
86
|
-
it('adds mousemove listener on compenentDidMount', function () {
|
|
87
|
-
var w = wrapper();
|
|
88
|
-
var g = {
|
|
89
|
-
on: jest.fn()
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
_d3Selection.select.mockReturnValue(g);
|
|
93
|
-
|
|
94
|
-
w.instance().componentDidMount();
|
|
95
|
-
expect(g.on).toHaveBeenCalledWith('mousemove', expect.any(Function));
|
|
96
|
-
});
|
|
97
|
-
it('unsets mousemove listener on componentWillUnmount', function () {
|
|
98
|
-
var w = wrapper();
|
|
99
|
-
var g = {
|
|
100
|
-
on: jest.fn()
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
_d3Selection.select.mockReturnValue(g);
|
|
104
|
-
|
|
105
|
-
w.instance().componentWillUnmount();
|
|
106
|
-
expect(g.on).toHaveBeenCalledWith('mousemove', null);
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
describe('mouseMove function', function () {
|
|
110
|
-
var onMouseMove, w, gp;
|
|
111
|
-
beforeEach(function () {
|
|
112
|
-
onMouseMove = jest.fn();
|
|
113
|
-
gp = graphProps();
|
|
114
|
-
w = wrapper({
|
|
115
|
-
onMouseMove: onMouseMove,
|
|
116
|
-
graphProps: gp
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
_d3Selection.mouse.mockReturnValue([0, 0]);
|
|
120
|
-
|
|
121
|
-
var g = {
|
|
122
|
-
_groups: [[[0, 0]]]
|
|
123
|
-
};
|
|
124
|
-
w.instance().mouseMove(g);
|
|
125
|
-
});
|
|
126
|
-
it('calls mouse', function () {
|
|
127
|
-
expect(_d3Selection.mouse).toHaveBeenCalledWith([0, 0]);
|
|
128
|
-
});
|
|
129
|
-
it('calls, scale.x.invert', function () {
|
|
130
|
-
expect(gp.scale.x.invert).toHaveBeenCalledWith(0);
|
|
131
|
-
});
|
|
132
|
-
it('calls, scale.y.invert', function () {
|
|
133
|
-
expect(gp.scale.y.invert).toHaveBeenCalledWith(0);
|
|
134
|
-
});
|
|
135
|
-
it('calls, snap.x', function () {
|
|
136
|
-
expect(gp.snap.x).toHaveBeenCalledWith(0);
|
|
137
|
-
});
|
|
138
|
-
it('calls, snap.y', function () {
|
|
139
|
-
expect(gp.snap.y).toHaveBeenCalledWith(0);
|
|
140
|
-
});
|
|
141
|
-
it('calls handler', function () {
|
|
142
|
-
expect(onMouseMove).toHaveBeenCalledWith({
|
|
143
|
-
x: 0,
|
|
144
|
-
y: 0
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vcm9vdC50ZXN0LmpzeCJdLCJuYW1lcyI6WyJzY2FsZU1vY2siLCJmbiIsImplc3QiLCJuIiwiaW52ZXJ0IiwiZ3JhcGhQcm9wcyIsInNjYWxlIiwieCIsInkiLCJzbmFwIiwiZG9tYWluIiwibWluIiwibWF4Iiwic3RlcCIsInJhbmdlIiwic2l6ZSIsIndpZHRoIiwiaGVpZ2h0Iiwid3JhcHBlciIsInByb3BzIiwiY2xhc3NlcyIsImRpc2FibGVMaWZlY3ljbGVNZXRob2RzIiwibW9jayIsInNlbGVjdCIsIm1vdXNlIiwiZGVzY3JpYmUiLCJpdCIsInciLCJleHBlY3QiLCJ0b01hdGNoU25hcHNob3QiLCJnIiwib24iLCJtb2NrUmV0dXJuVmFsdWUiLCJpbnN0YW5jZSIsImNvbXBvbmVudERpZE1vdW50IiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJhbnkiLCJGdW5jdGlvbiIsImNvbXBvbmVudFdpbGxVbm1vdW50Iiwib25Nb3VzZU1vdmUiLCJncCIsImJlZm9yZUVhY2giLCJfZ3JvdXBzIiwibW91c2VNb3ZlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUEsSUFBTUEsU0FBUyxHQUFHLFNBQVpBLFNBQVksR0FBTTtBQUN0QixNQUFNQyxFQUFFLEdBQUdDLElBQUksQ0FBQ0QsRUFBTCxDQUFRLFVBQUNFLENBQUQ7QUFBQSxXQUFPQSxDQUFQO0FBQUEsR0FBUixDQUFYO0FBQ0FGLEVBQUFBLEVBQUUsQ0FBQ0csTUFBSCxHQUFZRixJQUFJLENBQUNELEVBQUwsQ0FBUSxVQUFDRSxDQUFEO0FBQUEsV0FBT0EsQ0FBUDtBQUFBLEdBQVIsQ0FBWjtBQUNBLFNBQU9GLEVBQVA7QUFDRCxDQUpEOztBQU1BLElBQU1JLFVBQVUsR0FBRyxTQUFiQSxVQUFhO0FBQUEsU0FBTztBQUN4QkMsSUFBQUEsS0FBSyxFQUFFO0FBQ0xDLE1BQUFBLENBQUMsRUFBRVAsU0FBUyxFQURQO0FBRUxR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QUFaLENBQU4sQ0FBMEIrQixvQkFBMUIsQ0FBK0MsQ0FBL0M7QUFDRCxTQUZDLENBQUY7QUFHQVQsUUFBQUEsRUFBRSxDQUFDLHVCQUFELEVBQTBCLFlBQU07QUFDaENFLFVBQUFBLE1BQU0sQ0FBQ1ksRUFBRSxDQUFDbEMsS0FBSCxDQUFTRSxDQUFULENBQVdKLE1BQVosQ0FBTixDQUEwQitCLG9CQUExQixDQUErQyxDQUEvQztBQUNELFNBRkMsQ0FBRjtBQUdBVCxRQUFBQSxFQUFFLENBQUMsZUFBRCxFQUFrQixZQUFNO0FBQ3hCRSxVQUFBQSxNQUFNLENBQUNZLEVBQUUsQ0FBQy9CLElBQUgsQ0FBUUYsQ0FBVCxDQUFOLENBQWtCNEIsb0JBQWxCLENBQXVDLENBQXZDO0FBQ0QsU0FGQyxDQUFGO0FBR0FULFFBQUFBLEVBQUUsQ0FBQyxlQUFELEVBQWtCLFlBQU07QUFDeEJFLFVBQUFBLE1BQU0sQ0FBQ1ksRUFBRSxDQUFDL0IsSUFBSCxDQUFRRCxDQUFULENBQU4sQ0FBa0IyQixvQkFBbEIsQ0FBdUMsQ0FBdkM7QUFDRCxTQUZDLENBQUY7QUFJQVQsUUFBQUEsRUFBRSxDQUFDLGVBQUQsRUFBa0IsWUFBTTtBQUN4QkUsVUFBQUEsTUFBTSxDQUFDVyxXQUFELENBQU4sQ0FBb0JKLG9CQUFwQixDQUF5QztBQUFFNUIsWUFBQUEsQ0FBQyxFQUFFLENBQUw7QUFBUUMsWUFBQUEsQ0FBQyxFQUFFO0FBQVgsV0FBekM7QUFDRCxTQUZDLENBQUY7QUFHRCxPQWhDTyxDQUFSO0FBaUNELEtBdkRPLENBQVI7QUF3REQsR0F6RE8sQ0FBUjtBQTBERCxDQWxFTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2hhbGxvdyB9IGZyb20gJ2VuenltZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUm9vdCB9IGZyb20gJy4uL3Jvb3QnO1xuaW1wb3J0IHsgc2VsZWN0LCBtb3VzZSB9IGZyb20gJ2QzLXNlbGVjdGlvbic7XG5cbmNvbnN0IHNjYWxlTW9jayA9ICgpID0+IHtcbiAgY29uc3QgZm4gPSBqZXN0LmZuKChuKSA9PiBuKTtcbiAgZm4uaW52ZXJ0ID0gamVzdC5mbigobikgPT4gbik7XG4gIHJldHVybiBmbjtcbn07XG5cbmNvbnN0IGdyYXBoUHJvcHMgPSAoKSA9PiAoe1xuICBzY2FsZToge1xuICAgIHg6IHNjYWxlTW9jaygpLFxuICAgIHk6IHNjYWxlTW9jaygpLFxuICB9LFxuICBzbmFwOiB7XG4gICAgeDogamVzdC5mbigobikgPT4gbiksXG4gICAgeTogamVzdC5mbigobikgPT4gbiksXG4gIH0sXG4gIGRvbWFpbjoge1xuICAgIG1pbjogMCxcbiAgICBtYXg6IDEsXG4gICAgc3RlcDogMSxcbiAgfSxcbiAgcmFuZ2U6IHtcbiAgICBtaW46IDAsXG4gICAgbWF4OiAxLFxuICAgIHN0ZXA6IDEsXG4gIH0sXG4gIHNpemU6IHtcbiAgICB3aWR0aDogNDAwLFxuICAgIGhlaWdodDogNDAwLFxuICB9LFxufSk7XG5cbmNvbnN0IHdyYXBwZXIgPSAocHJvcHMpID0+IHtcbiAgcHJvcHMgPSB7XG4gICAgY2xhc3Nlczoge30sXG4gICAgZ3JhcGhQcm9wczogZ3JhcGhQcm9wcygpLFxuICAgIC4uLnByb3BzLFxuICB9O1xuXG4gIHJldHVybiBzaGFsbG93KDxSb290IHsuLi5wcm9wc30+aGk8L1Jvb3Q+LCB7IGRpc2FibGVMaWZlY3ljbGVNZXRob2RzOiB0cnVlIH0pO1xufTtcblxuamVzdC5tb2NrKCdkMy1zZWxlY3Rpb24nLCAoKSA9PiAoe1xuICBzZWxlY3Q6IGplc3QuZm4oKSxcbiAgbW91c2U6IGplc3QuZm4oKSxcbn0pKTtcblxuZGVzY3JpYmUoJ3Jvb3QnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdzbmFwc2hvdCcsICgpID0+IHtcbiAgICBpdCgnbWF0Y2hlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHcgPSB3cmFwcGVyKCk7XG4gICAgICBleHBlY3QodykudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsb2dpYycsICgpID0+IHtcbiAgICBkZXNjcmliZSgnbW91c2Vtb3ZlJywgKCkgPT4ge1xuICAgICAgZGVzY3JpYmUoJ21vdW50L3VubW91bnQnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdhZGRzIG1vdXNlbW92ZSBsaXN0ZW5lciBvbiBjb21wZW5lbnREaWRNb3VudCcsICgpID0+IHtcbiAgICAgICAgICBjb25zdCB3ID0gd3JhcHBlcigpO1xuICAgICAgICAgIGNvbnN0IGcgPSB7XG4gICAgICAgICAgICBvbjogamVzdC5mbigpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgc2VsZWN0Lm1vY2tSZXR1cm5WYWx1ZShnKTtcbiAgICAgICAgICB3Lmluc3RhbmNlKCkuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICAgICAgICBleHBlY3QoZy5vbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ21vdXNlbW92ZScsIGV4cGVjdC5hbnkoRnVuY3Rpb24pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCd1bnNldHMgbW91c2Vtb3ZlIGxpc3RlbmVyIG9uIGNvbXBvbmVudFdpbGxVbm1vdW50JywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHcgPSB3cmFwcGVyKCk7XG4gICAgICAgICAgY29uc3QgZyA9IHtcbiAgICAgICAgICAgIG9uOiBqZXN0LmZuKCksXG4gICAgICAgICAgfTtcbiAgICAgICAgICBzZWxlY3QubW9ja1JldHVyblZhbHVlKGcpO1xuICAgICAgICAgIHcuaW5zdGFuY2UoKS5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgICAgIGV4cGVjdChnLm9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnbW91c2Vtb3ZlJywgbnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdtb3VzZU1vdmUgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgICAgIGxldCBvbk1vdXNlTW92ZSwgdywgZ3A7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgIG9uTW91c2VNb3ZlID0gamVzdC5mbigpO1xuICAgICAgICAgIGdwID0gZ3JhcGhQcm9wcygpO1xuICAgICAgICAgIHcgPSB3cmFwcGVyKHtcbiAgICAgICAgICAgIG9uTW91c2VNb3ZlLFxuICAgICAgICAgICAgZ3JhcGhQcm9wczogZ3AsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbW91c2UubW9ja1JldHVyblZhbHVlKFswLCAwXSk7XG4gICAgICAgICAgY29uc3QgZyA9IHsgX2dyb3VwczogW1tbMCwgMF1dXSB9O1xuICAgICAgICAgIHcuaW5zdGFuY2UoKS5tb3VzZU1vdmUoZyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnY2FsbHMgbW91c2UnLCAoKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KG1vdXNlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbMCwgMF0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2NhbGxzLCBzY2FsZS54LmludmVydCcsICgpID0+IHtcbiAgICAgICAgICBleHBlY3QoZ3Auc2NhbGUueC5pbnZlcnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKDApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2NhbGxzLCBzY2FsZS55LmludmVydCcsICgpID0+IHtcbiAgICAgICAgICBleHBlY3QoZ3Auc2NhbGUueS5pbnZlcnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKDApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2NhbGxzLCBzbmFwLngnLCAoKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KGdwLnNuYXAueCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnY2FsbHMsIHNuYXAueScsICgpID0+IHtcbiAgICAgICAgICBleHBlY3QoZ3Auc25hcC55KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2NhbGxzIGhhbmRsZXInLCAoKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KG9uTW91c2VNb3ZlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7IHg6IDAsIHk6IDAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
6
|
-
|
|
7
|
-
var _trig = require("../trig");
|
|
8
|
-
|
|
9
|
-
var _utils = require("../utils");
|
|
10
|
-
|
|
11
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
12
|
-
|
|
13
|
-
var _templateObject, _templateObject2, _templateObject3;
|
|
14
|
-
|
|
15
|
-
var log = (0, _debug["default"])('pie-lib:plot:trig:test');
|
|
16
|
-
|
|
17
|
-
var vs = function vs(v) {
|
|
18
|
-
if (!v) {
|
|
19
|
-
return '';
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
if (Number.isFinite(v.x) && Number.isFinite(v.y)) {
|
|
23
|
-
return "[".concat(v.x, ",").concat(v.y, "]");
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
return JSON.stringify(v);
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
var p = function p(strings) {
|
|
30
|
-
for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
31
|
-
values[_key - 1] = arguments[_key];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return strings.reduce(function (acc, s, index) {
|
|
35
|
-
return "".concat(acc).concat(s).concat(vs(values[index]));
|
|
36
|
-
}, '');
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
describe('trig', function () {
|
|
40
|
-
describe('angle', function () {
|
|
41
|
-
var assertAngle = function assertAngle(a, b, expected) {
|
|
42
|
-
it(p(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["", ", ", " => ", ""])), a, b, (0, _trig.toDegrees)(expected)), function () {
|
|
43
|
-
var result = (0, _trig.angle)(a, b);
|
|
44
|
-
expect(result).toBeCloseTo(expected);
|
|
45
|
-
});
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _trig.toRadians)(45));
|
|
49
|
-
assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(0, 1), (0, _trig.toRadians)(90));
|
|
50
|
-
assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _trig.toRadians)(135));
|
|
51
|
-
assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 0), (0, _trig.toRadians)(180));
|
|
52
|
-
assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, -1), (0, _trig.toRadians)(225));
|
|
53
|
-
assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(0, -1), (0, _trig.toRadians)(270));
|
|
54
|
-
assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(1, -1), (0, _trig.toRadians)(315));
|
|
55
|
-
assertAngle((0, _utils.xy)(1, 1), (0, _utils.xy)(0, 0), (0, _trig.toRadians)(225));
|
|
56
|
-
assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _trig.toRadians)(45));
|
|
57
|
-
assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 1), (0, _trig.toRadians)(26.565));
|
|
58
|
-
assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(3, 1), (0, _trig.toRadians)(18.434));
|
|
59
|
-
assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(4, 1), (0, _trig.toRadians)(14.036));
|
|
60
|
-
assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(5, 1), (0, _trig.toRadians)(11.309));
|
|
61
|
-
});
|
|
62
|
-
describe('acuteXAngle', function () {
|
|
63
|
-
var assertAcute = function assertAcute(input, expected) {
|
|
64
|
-
it("".concat((0, _trig.toDegrees)(input), " => ").concat((0, _trig.toDegrees)(expected)), function () {
|
|
65
|
-
var result = (0, _trig.acuteXAngle)(input);
|
|
66
|
-
log("result: ".concat((0, _trig.toDegrees)(result)));
|
|
67
|
-
expect(result).toBeCloseTo(expected);
|
|
68
|
-
});
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
assertAcute((0, _trig.toRadians)(45), (0, _trig.toRadians)(45));
|
|
72
|
-
assertAcute((0, _trig.toRadians)(100), (0, _trig.toRadians)(80));
|
|
73
|
-
assertAcute((0, _trig.toRadians)(190), (0, _trig.toRadians)(10));
|
|
74
|
-
assertAcute((0, _trig.toRadians)(350), (0, _trig.toRadians)(10));
|
|
75
|
-
});
|
|
76
|
-
describe('acuteYAngle', function () {
|
|
77
|
-
var assertAcute = function assertAcute(input, expected) {
|
|
78
|
-
it("".concat((0, _trig.toDegrees)(input), " => ").concat((0, _trig.toDegrees)(expected)), function () {
|
|
79
|
-
var result = (0, _trig.acuteYAngle)(input);
|
|
80
|
-
log("result: ".concat((0, _trig.toDegrees)(result)));
|
|
81
|
-
expect(result).toBeCloseTo(expected);
|
|
82
|
-
});
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
assertAcute((0, _trig.toRadians)(45), (0, _trig.toRadians)(45));
|
|
86
|
-
assertAcute((0, _trig.toRadians)(100), (0, _trig.toRadians)(10));
|
|
87
|
-
assertAcute((0, _trig.toRadians)(190), (0, _trig.toRadians)(80));
|
|
88
|
-
assertAcute((0, _trig.toRadians)(350), (0, _trig.toRadians)(80));
|
|
89
|
-
});
|
|
90
|
-
describe('edges', function () {
|
|
91
|
-
var assertEdges = function assertEdges(domain, range) {
|
|
92
|
-
return function (from, to, expected) {
|
|
93
|
-
it(p(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["", ", ", " + ", " -> ", " => ", "", ""])), domain, range, from, to, expected[0], expected[1]), function () {
|
|
94
|
-
var result = (0, _trig.edges)(domain, range)(from, to);
|
|
95
|
-
expect(result[0].x).toBeCloseTo(expected[0].x);
|
|
96
|
-
expect(result[0].y).toBeCloseTo(expected[0].y);
|
|
97
|
-
expect(result[1].x).toBeCloseTo(expected[1].x);
|
|
98
|
-
expect(result[1].y).toBeCloseTo(expected[1].y);
|
|
99
|
-
});
|
|
100
|
-
};
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
var one = assertEdges({
|
|
104
|
-
min: -4,
|
|
105
|
-
max: 4
|
|
106
|
-
}, {
|
|
107
|
-
min: -4,
|
|
108
|
-
max: 4
|
|
109
|
-
});
|
|
110
|
-
one((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), [(0, _utils.xy)(4, 4), (0, _utils.xy)(-4, -4)]);
|
|
111
|
-
one((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 1), [(0, _utils.xy)(4, 2), (0, _utils.xy)(-4, -2)]);
|
|
112
|
-
one((0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2), [(0, _utils.xy)(4, 4), (0, _utils.xy)(-4, -4)]);
|
|
113
|
-
one((0, _utils.xy)(1, 0), (0, _utils.xy)(2, 0), [(0, _utils.xy)(4, 0), (0, _utils.xy)(-4, 0)]);
|
|
114
|
-
one((0, _utils.xy)(1, 0), (0, _utils.xy)(-2, 0), [(0, _utils.xy)(-4, 0), (0, _utils.xy)(4, 0)]);
|
|
115
|
-
/**
|
|
116
|
-
* domain {min: -5, max: 5, padding: 0, step: 1, labelStep: 1}labelStep: 1max: 5min: -5padding: 0step: 1__proto__: Object range: {min: -5, max: 5, padding: 0, step: 1, labelStep: 1} a: {x: -5, y: 0} b: {x: -5, y: 2} edges: Point {x: -5, y: 5} Point {x: -5, y: 2}
|
|
117
|
-
*/
|
|
118
|
-
|
|
119
|
-
var lineIssue = assertEdges({
|
|
120
|
-
min: -5,
|
|
121
|
-
max: 5
|
|
122
|
-
}, {
|
|
123
|
-
min: -5,
|
|
124
|
-
max: 5
|
|
125
|
-
});
|
|
126
|
-
lineIssue((0, _utils.xy)(-5, -0), (0, _utils.xy)(-5, 2), [(0, _utils.xy)(-5, 5), (0, _utils.xy)(-5, -5)]);
|
|
127
|
-
});
|
|
128
|
-
describe('diffEdge', function () {
|
|
129
|
-
var assertDiffEdge = function assertDiffEdge(bounds, from, to, expected) {
|
|
130
|
-
it(p(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["<", "> ", " -> ", " => ", ""])), bounds, from, to, expected), function () {
|
|
131
|
-
var result = (0, _trig.diffEdge)(bounds, from, to);
|
|
132
|
-
expect(result.x).toBeCloseTo(expected.x);
|
|
133
|
-
expect(result.y).toBeCloseTo(expected.y);
|
|
134
|
-
});
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
var twoTwo = assertDiffEdge.bind(null, (0, _utils.xy)(2, 2));
|
|
138
|
-
twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2));
|
|
139
|
-
twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 2), (0, _utils.xy)(1, 2));
|
|
140
|
-
twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 2), (0, _utils.xy)(2, 2));
|
|
141
|
-
twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 2), (0, _utils.xy)(2, 2));
|
|
142
|
-
twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _utils.xy)(-2, 2));
|
|
143
|
-
twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-2, -2));
|
|
144
|
-
var fourFour = assertDiffEdge.bind(null, (0, _utils.xy)(4, 4));
|
|
145
|
-
fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _utils.xy)(4, 4));
|
|
146
|
-
fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 2), (0, _utils.xy)(2, 4));
|
|
147
|
-
fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 1), (0, _utils.xy)(4, 2));
|
|
148
|
-
fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _utils.xy)(-4, 4));
|
|
149
|
-
fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _utils.xy)(-4, 4));
|
|
150
|
-
assertDiffEdge((0, _utils.xy)(-4, -4), (0, _utils.xy)(0, 0), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-4, -4));
|
|
151
|
-
assertDiffEdge((0, _utils.xy)(4, 4), (0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2), (0, _utils.xy)(4, 4));
|
|
152
|
-
assertDiffEdge((0, _utils.xy)(4, 4), (0, _utils.xy)(2, 2), (0, _utils.xy)(3, 3), (0, _utils.xy)(4, 4));
|
|
153
|
-
assertDiffEdge((0, _utils.xy)(-4, -4), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-2, -2), (0, _utils.xy)(-4, -4));
|
|
154
|
-
assertDiffEdge((0, _utils.xy)(-4, 4), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-2, 0), (0, _utils.xy)(-4, 2));
|
|
155
|
-
var lineIssue = assertDiffEdge.bind(null, (0, _utils.xy)(-5, -5));
|
|
156
|
-
lineIssue((0, _utils.xy)(-5, 2), (0, _utils.xy)(-5, 0), (0, _utils.xy)(-5, -5)); //Top Right
|
|
157
|
-
|
|
158
|
-
assertDiffEdge((0, _utils.xy)(5, 5), (0, _utils.xy)(0, 5), (0, _utils.xy)(2, 5), (0, _utils.xy)(5, 5));
|
|
159
|
-
assertDiffEdge((0, _utils.xy)(5, 5), (0, _utils.xy)(5, 0), (0, _utils.xy)(5, 1), (0, _utils.xy)(5, 5)); // //Bottom Right
|
|
160
|
-
|
|
161
|
-
assertDiffEdge((0, _utils.xy)(5, -5), (0, _utils.xy)(5, 0), (0, _utils.xy)(5, -0.1), (0, _utils.xy)(5, -5));
|
|
162
|
-
assertDiffEdge((0, _utils.xy)(5, -5), (0, _utils.xy)(0, -5), (0, _utils.xy)(1, -5), (0, _utils.xy)(5, -5)); //Top Left
|
|
163
|
-
|
|
164
|
-
assertDiffEdge((0, _utils.xy)(-5, 5), (0, _utils.xy)(-5, 0), (0, _utils.xy)(-5, 0.1), (0, _utils.xy)(-5, 5));
|
|
165
|
-
assertDiffEdge((0, _utils.xy)(-5, 5), (0, _utils.xy)(0, 5), (0, _utils.xy)(-1, 5), (0, _utils.xy)(-5, 5)); //Bottom Left
|
|
166
|
-
|
|
167
|
-
assertDiffEdge((0, _utils.xy)(-5, -5), (0, _utils.xy)(-5, 0), (0, _utils.xy)(-5, -0.1), (0, _utils.xy)(-5, -5));
|
|
168
|
-
assertDiffEdge((0, _utils.xy)(-5, -5), (0, _utils.xy)(0, -5), (0, _utils.xy)(-1, -5), (0, _utils.xy)(-5, -5));
|
|
169
|
-
});
|
|
170
|
-
describe('getOpposingSide', function () {
|
|
171
|
-
var assertOpposingSide = function assertOpposingSide(hyp, angle, expected) {
|
|
172
|
-
it("".concat(hyp, ", ").concat(angle, " = ").concat(expected), function () {
|
|
173
|
-
var radians = (0, _trig.toRadians)(angle);
|
|
174
|
-
var result = (0, _trig.getOpposingSide)(hyp, radians);
|
|
175
|
-
expect(result).toBeCloseTo(expected);
|
|
176
|
-
});
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
assertOpposingSide(1, 45, 0.707);
|
|
180
|
-
assertOpposingSide(1.25, 45, 0.88);
|
|
181
|
-
});
|
|
182
|
-
});
|
|
183
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vdHJpZy50ZXN0LmpzIl0sIm5hbWVzIjpbImxvZyIsInZzIiwidiIsIk51bWJlciIsImlzRmluaXRlIiwieCIsInkiLCJKU09OIiwic3RyaW5naWZ5IiwicCIsInN0cmluZ3MiLCJ2YWx1ZXMiLCJyZWR1Y2UiLCJhY2MiLCJzIiwiaW5kZXgiLCJkZXNjcmliZSIsImFzc2VydEFuZ2xlIiwiYSIsImIiLCJleHBlY3RlZCIsIml0IiwicmVzdWx0IiwiZXhwZWN0IiwidG9CZUNsb3NlVG8iLCJhc3NlcnRBY3V0ZSIsImlucHV0IiwiYXNzZXJ0RWRnZXMiLCJkb21haW4iLCJyYW5nZSIsImZyb20iLCJ0byIsIm9uZSIsIm1pbiIsIm1heCIsImxpbmVJc3N1ZSIsImFzc2VydERpZmZFZGdlIiwiYm91bmRzIiwidHdvVHdvIiwiYmluZCIsImZvdXJGb3VyIiwiYXNzZXJ0T3Bwb3NpbmdTaWRlIiwiaHlwIiwiYW5nbGUiLCJyYWRpYW5zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFZQTs7QUFDQTs7OztBQUVBLElBQU1BLEdBQUcsR0FBRyx1QkFBTSx3QkFBTixDQUFaOztBQUVBLElBQU1DLEVBQUUsR0FBRyxTQUFMQSxFQUFLLENBQUNDLENBQUQsRUFBTztBQUNoQixNQUFJLENBQUNBLENBQUwsRUFBUTtBQUNOLFdBQU8sRUFBUDtBQUNEOztBQUVELE1BQUlDLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkYsQ0FBQyxDQUFDRyxDQUFsQixLQUF3QkYsTUFBTSxDQUFDQyxRQUFQLENBQWdCRixDQUFDLENBQUNJLENBQWxCLENBQTVCLEVBQWtEO0FBQ2hELHNCQUFXSixDQUFDLENBQUNHLENBQWIsY0FBa0JILENBQUMsQ0FBQ0ksQ0FBcEI7QUFDRDs7QUFDRCxTQUFPQyxJQUFJLENBQUNDLFNBQUwsQ0FBZU4sQ0FBZixDQUFQO0FBQ0QsQ0FURDs7QUFVQSxJQUFNTyxDQUFDLEdBQUcsU0FBSkEsQ0FBSSxDQUFDQyxPQUFELEVBQXdCO0FBQUEsb0NBQVhDLE1BQVc7QUFBWEEsSUFBQUEsTUFBVztBQUFBOztBQUNoQyxTQUFPRCxPQUFPLENBQUNFLE1BQVIsQ0FBZSxVQUFDQyxHQUFELEVBQU1DLENBQU4sRUFBU0MsS0FBVCxFQUFtQjtBQUN2QyxxQkFBVUYsR0FBVixTQUFnQkMsQ0FBaEIsU0FBb0JiLEVBQUUsQ0FBQ1UsTUFBTSxDQUFDSSxLQUFELENBQVAsQ0FBdEI7QUFDRCxHQUZNLEVBRUosRUFGSSxDQUFQO0FBR0QsQ0FKRDs7QUFLQUMsUUFBUSxDQUFDLE1BQUQsRUFBUyxZQUFNO0FBQ3JCQSxFQUFBQSxRQUFRLENBQUMsT0FBRCxFQUFVLFlBQU07QUFDdEIsUUFBTUMsV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEVBQU9DLFFBQVAsRUFBb0I7QUFDdENDLE1BQUFBLEVBQUUsQ0FBQ1osQ0FBRCx5R0FBS1MsQ0FBTCxFQUFXQyxDQUFYLEVBQW1CLHFCQUFVQyxRQUFWLENBQW5CLEdBQTBDLFlBQU07QUFDaEQsWUFBTUUsTUFBTSxHQUFHLGlCQUFNSixDQUFOLEVBQVNDLENBQVQsQ0FBZjtBQUNBSSxRQUFBQSxNQUFNLENBQUNELE1BQUQsQ0FBTixDQUFlRSxXQUFmLENBQTJCSixRQUEzQjtBQUNELE9BSEMsQ0FBRjtBQUlELEtBTEQ7O0FBT0FILElBQUFBLFdBQVcsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQUQsRUFBVyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQVgsRUFBcUIscUJBQVUsRUFBVixDQUFyQixDQUFYO0FBQ0FBLElBQUFBLFdBQVcsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQUQsRUFBVyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQVgsRUFBcUIscUJBQVUsRUFBVixDQUFyQixDQUFYO0FBQ0FBLElBQUFBLFdBQVcsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQUQsRUFBVyxlQUFHLENBQUMsQ0FBSixFQUFPLENBQVAsQ0FBWCxFQUFzQixxQkFBVSxHQUFWLENBQXRCLENBQVg7QUFDQUEsSUFBQUEsV0FBVyxDQUFDLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBRCxFQUFXLGVBQUcsQ0FBQyxDQUFKLEVBQU8sQ0FBUCxDQUFYLEVBQXNCLHFCQUFVLEdBQVYsQ0FBdEIsQ0FBWDtBQUNBQSxJQUFBQSxXQUFXLENBQUMsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFELEVBQVcsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFDLENBQVIsQ0FBWCxFQUF1QixxQkFBVSxHQUFWLENBQXZCLENBQVg7QUFDQUEsSUFBQUEsV0FBVyxDQUFDLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBRCxFQUFXLGVBQUcsQ0FBSCxFQUFNLENBQUMsQ0FBUCxDQUFYLEVBQXNCLHFCQUFVLEdBQVYsQ0FBdEIsQ0FBWDtBQUNBQSxJQUFBQSxXQUFXLENBQUMsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFELEVBQVcsZUFBRyxDQUFILEVBQU0sQ0FBQyxDQUFQLENBQVgsRUFBc0IscUJBQVUsR0FBVixDQUF0QixDQUFYO0FBQ0FBLElBQUFBLFdBQVcsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQUQsRUFBVyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQVgsRUFBcUIscUJBQVUsR0FBVixDQUFyQixDQUFYO0FBQ0FBLElBQUFBLFdBQVcsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQUQsRUFBVyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQVgsRUFBcUIscUJBQVUsRUFBVixDQUFyQixDQUFYO0FBQ0FBLElBQUFBLFdBQVcsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQUQsRUFBVyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQVgsRUFBcUIscUJBQVUsTUFBVixDQUFyQixDQUFYO0FBQ0FBLElBQUFBLFdBQVcsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQUQsRUFBVyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQVgsRUFBcUIscUJBQVUsTUFBVixDQUFyQixDQUFYO0FBQ0FBLElBQUFBLFdBQVcsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQUQsRUFBVyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQVgsRUFBcUIscUJBQVUsTUFBVixDQUFyQixDQUFYO0FBQ0FBLElBQUFBLFdBQVcsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQUQsRUFBVyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQVgsRUFBcUIscUJBQVUsTUFBVixDQUFyQixDQUFYO0FBQ0QsR0FyQk8sQ0FBUjtBQXVCQUQsRUFBQUEsUUFBUSxDQUFDLGFBQUQsRUFBZ0IsWUFBTTtBQUM1QixRQUFNUyxXQUFXLEdBQUcsU0FBZEEsV0FBYyxDQUFDQyxLQUFELEVBQVFOLFFBQVIsRUFBcUI7QUFDdkNDLE1BQUFBLEVBQUUsV0FBSSxxQkFBVUssS0FBVixDQUFKLGlCQUEyQixxQkFBVU4sUUFBVixDQUEzQixHQUFrRCxZQUFNO0FBQ3hELFlBQU1FLE1BQU0sR0FBRyx1QkFBWUksS0FBWixDQUFmO0FBQ0ExQixRQUFBQSxHQUFHLG1CQUFZLHFCQUFVc0IsTUFBVixDQUFaLEVBQUg7QUFDQUMsUUFBQUEsTUFBTSxDQUFDRCxNQUFELENBQU4sQ0FBZUUsV0FBZixDQUEyQkosUUFBM0I7QUFDRCxPQUpDLENBQUY7QUFLRCxLQU5EOztBQVFBSyxJQUFBQSxXQUFXLENBQUMscUJBQVUsRUFBVixDQUFELEVBQWdCLHFCQUFVLEVBQVYsQ0FBaEIsQ0FBWDtBQUNBQSxJQUFBQSxXQUFXLENBQUMscUJBQVUsR0FBVixDQUFELEVBQWlCLHFCQUFVLEVBQVYsQ0FBakIsQ0FBWDtBQUNBQSxJQUFBQSxXQUFXLENBQUMscUJBQVUsR0FBVixDQUFELEVBQWlCLHFCQUFVLEVBQVYsQ0FBakIsQ0FBWDtBQUNBQSxJQUFBQSxXQUFXLENBQUMscUJBQVUsR0FBVixDQUFELEVBQWlCLHFCQUFVLEVBQVYsQ0FBakIsQ0FBWDtBQUNELEdBYk8sQ0FBUjtBQWVBVCxFQUFBQSxRQUFRLENBQUMsYUFBRCxFQUFnQixZQUFNO0FBQzVCLFFBQU1TLFdBQVcsR0FBRyxTQUFkQSxXQUFjLENBQUNDLEtBQUQsRUFBUU4sUUFBUixFQUFxQjtBQUN2Q0MsTUFBQUEsRUFBRSxXQUFJLHFCQUFVSyxLQUFWLENBQUosaUJBQTJCLHFCQUFVTixRQUFWLENBQTNCLEdBQWtELFlBQU07QUFDeEQsWUFBTUUsTUFBTSxHQUFHLHVCQUFZSSxLQUFaLENBQWY7QUFDQTFCLFFBQUFBLEdBQUcsbUJBQVkscUJBQVVzQixNQUFWLENBQVosRUFBSDtBQUNBQyxRQUFBQSxNQUFNLENBQUNELE1BQUQsQ0FBTixDQUFlRSxXQUFmLENBQTJCSixRQUEzQjtBQUNELE9BSkMsQ0FBRjtBQUtELEtBTkQ7O0FBUUFLLElBQUFBLFdBQVcsQ0FBQyxxQkFBVSxFQUFWLENBQUQsRUFBZ0IscUJBQVUsRUFBVixDQUFoQixDQUFYO0FBQ0FBLElBQUFBLFdBQVcsQ0FBQyxxQkFBVSxHQUFWLENBQUQsRUFBaUIscUJBQVUsRUFBVixDQUFqQixDQUFYO0FBQ0FBLElBQUFBLFdBQVcsQ0FBQyxxQkFBVSxHQUFWLENBQUQsRUFBaUIscUJBQVUsRUFBVixDQUFqQixDQUFYO0FBQ0FBLElBQUFBLFdBQVcsQ0FBQyxxQkFBVSxHQUFWLENBQUQsRUFBaUIscUJBQVUsRUFBVixDQUFqQixDQUFYO0FBQ0QsR0FiTyxDQUFSO0FBZUFULEVBQUFBLFFBQVEsQ0FBQyxPQUFELEVBQVUsWUFBTTtBQUN0QixRQUFNVyxXQUFXLEdBQUcsU0FBZEEsV0FBYyxDQUFDQyxNQUFELEVBQVNDLEtBQVQ7QUFBQSxhQUFtQixVQUFDQyxJQUFELEVBQU9DLEVBQVAsRUFBV1gsUUFBWCxFQUF3QjtBQUM3REMsUUFBQUEsRUFBRSxDQUFDWixDQUFELDhIQUFLbUIsTUFBTCxFQUFnQkMsS0FBaEIsRUFBMkJDLElBQTNCLEVBQXNDQyxFQUF0QyxFQUErQ1gsUUFBUSxDQUFDLENBQUQsQ0FBdkQsRUFBNkRBLFFBQVEsQ0FBQyxDQUFELENBQXJFLEdBQTRFLFlBQU07QUFDbEYsY0FBTUUsTUFBTSxHQUFHLGlCQUFNTSxNQUFOLEVBQWNDLEtBQWQsRUFBcUJDLElBQXJCLEVBQTJCQyxFQUEzQixDQUFmO0FBQ0FSLFVBQUFBLE1BQU0sQ0FBQ0QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVakIsQ0FBWCxDQUFOLENBQW9CbUIsV0FBcEIsQ0FBZ0NKLFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWWYsQ0FBNUM7QUFDQWtCLFVBQUFBLE1BQU0sQ0FBQ0QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVaEIsQ0FBWCxDQUFOLENBQW9Ca0IsV0FBcEIsQ0FBZ0NKLFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWWQsQ0FBNUM7QUFDQWlCLFVBQUFBLE1BQU0sQ0FBQ0QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVakIsQ0FBWCxDQUFOLENBQW9CbUIsV0FBcEIsQ0FBZ0NKLFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWWYsQ0FBNUM7QUFDQWtCLFVBQUFBLE1BQU0sQ0FBQ0QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVaEIsQ0FBWCxDQUFOLENBQW9Ca0IsV0FBcEIsQ0FBZ0NKLFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWWQsQ0FBNUM7QUFDRCxTQU5DLENBQUY7QUFPRCxPQVJtQjtBQUFBLEtBQXBCOztBQVVBLFFBQU0wQixHQUFHLEdBQUdMLFdBQVcsQ0FBQztBQUFFTSxNQUFBQSxHQUFHLEVBQUUsQ0FBQyxDQUFSO0FBQVdDLE1BQUFBLEdBQUcsRUFBRTtBQUFoQixLQUFELEVBQXNCO0FBQUVELE1BQUFBLEdBQUcsRUFBRSxDQUFDLENBQVI7QUFBV0MsTUFBQUEsR0FBRyxFQUFFO0FBQWhCLEtBQXRCLENBQXZCO0FBQ0FGLElBQUFBLEdBQUcsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQUQsRUFBVyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQVgsRUFBcUIsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQUQsRUFBVyxlQUFHLENBQUMsQ0FBSixFQUFPLENBQUMsQ0FBUixDQUFYLENBQXJCLENBQUg7QUFDQUEsSUFBQUEsR0FBRyxDQUFDLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBRCxFQUFXLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBWCxFQUFxQixDQUFDLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBRCxFQUFXLGVBQUcsQ0FBQyxDQUFKLEVBQU8sQ0FBQyxDQUFSLENBQVgsQ0FBckIsQ0FBSDtBQUNBQSxJQUFBQSxHQUFHLENBQUMsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFELEVBQVcsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFYLEVBQXFCLENBQUMsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFELEVBQVcsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFDLENBQVIsQ0FBWCxDQUFyQixDQUFIO0FBQ0FBLElBQUFBLEdBQUcsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQUQsRUFBVyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQVgsRUFBcUIsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQUQsRUFBVyxlQUFHLENBQUMsQ0FBSixFQUFPLENBQVAsQ0FBWCxDQUFyQixDQUFIO0FBQ0FBLElBQUFBLEdBQUcsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQUQsRUFBVyxlQUFHLENBQUMsQ0FBSixFQUFPLENBQVAsQ0FBWCxFQUFzQixDQUFDLGVBQUcsQ0FBQyxDQUFKLEVBQU8sQ0FBUCxDQUFELEVBQVksZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFaLENBQXRCLENBQUg7QUFFQTtBQUNKO0FBQ0E7O0FBQ0ksUUFBTUcsU0FBUyxHQUFHUixXQUFXLENBQUM7QUFBRU0sTUFBQUEsR0FBRyxFQUFFLENBQUMsQ0FBUjtBQUFXQyxNQUFBQSxHQUFHLEVBQUU7QUFBaEIsS0FBRCxFQUFzQjtBQUFFRCxNQUFBQSxHQUFHLEVBQUUsQ0FBQyxDQUFSO0FBQVdDLE1BQUFBLEdBQUcsRUFBRTtBQUFoQixLQUF0QixDQUE3QjtBQUNBQyxJQUFBQSxTQUFTLENBQUMsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFDLENBQVIsQ0FBRCxFQUFhLGVBQUcsQ0FBQyxDQUFKLEVBQU8sQ0FBUCxDQUFiLEVBQXdCLENBQUMsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFQLENBQUQsRUFBWSxlQUFHLENBQUMsQ0FBSixFQUFPLENBQUMsQ0FBUixDQUFaLENBQXhCLENBQVQ7QUFDRCxHQXZCTyxDQUFSO0FBeUJBbkIsRUFBQUEsUUFBUSxDQUFDLFVBQUQsRUFBYSxZQUFNO0FBQ3pCLFFBQU1vQixjQUFjLEdBQUcsU0FBakJBLGNBQWlCLENBQUNDLE1BQUQsRUFBU1AsSUFBVCxFQUFlQyxFQUFmLEVBQW1CWCxRQUFuQixFQUFnQztBQUNyREMsTUFBQUEsRUFBRSxDQUFDWixDQUFELG9IQUFNNEIsTUFBTixFQUFpQlAsSUFBakIsRUFBNEJDLEVBQTVCLEVBQXFDWCxRQUFyQyxHQUFpRCxZQUFNO0FBQ3ZELFlBQU1FLE1BQU0sR0FBRyxvQkFBU2UsTUFBVCxFQUFpQlAsSUFBakIsRUFBdUJDLEVBQXZCLENBQWY7QUFDQVIsUUFBQUEsTUFBTSxDQUFDRCxNQUFNLENBQUNqQixDQUFSLENBQU4sQ0FBaUJtQixXQUFqQixDQUE2QkosUUFBUSxDQUFDZixDQUF0QztBQUNBa0IsUUFBQUEsTUFBTSxDQUFDRCxNQUFNLENBQUNoQixDQUFSLENBQU4sQ0FBaUJrQixXQUFqQixDQUE2QkosUUFBUSxDQUFDZCxDQUF0QztBQUNELE9BSkMsQ0FBRjtBQUtELEtBTkQ7O0FBUUEsUUFBTWdDLE1BQU0sR0FBR0YsY0FBYyxDQUFDRyxJQUFmLENBQW9CLElBQXBCLEVBQTBCLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBMUIsQ0FBZjtBQUNBRCxJQUFBQSxNQUFNLENBQUMsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFELEVBQVcsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFYLEVBQXFCLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBckIsQ0FBTjtBQUNBQSxJQUFBQSxNQUFNLENBQUMsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFELEVBQVcsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFYLEVBQXFCLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBckIsQ0FBTjtBQUNBQSxJQUFBQSxNQUFNLENBQUMsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFELEVBQVcsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFYLEVBQXFCLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBckIsQ0FBTjtBQUNBQSxJQUFBQSxNQUFNLENBQUMsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFELEVBQVcsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFYLEVBQXFCLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBckIsQ0FBTjtBQUNBQSxJQUFBQSxNQUFNLENBQUMsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFELEVBQVcsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFQLENBQVgsRUFBc0IsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFQLENBQXRCLENBQU47QUFDQUEsSUFBQUEsTUFBTSxDQUFDLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBRCxFQUFXLGVBQUcsQ0FBQyxDQUFKLEVBQU8sQ0FBQyxDQUFSLENBQVgsRUFBdUIsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFDLENBQVIsQ0FBdkIsQ0FBTjtBQUNBLFFBQU1FLFFBQVEsR0FBR0osY0FBYyxDQUFDRyxJQUFmLENBQW9CLElBQXBCLEVBQTBCLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBMUIsQ0FBakI7QUFFQUMsSUFBQUEsUUFBUSxDQUFDLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBRCxFQUFXLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBWCxFQUFxQixlQUFHLENBQUgsRUFBTSxDQUFOLENBQXJCLENBQVI7QUFDQUEsSUFBQUEsUUFBUSxDQUFDLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBRCxFQUFXLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBWCxFQUFxQixlQUFHLENBQUgsRUFBTSxDQUFOLENBQXJCLENBQVI7QUFDQUEsSUFBQUEsUUFBUSxDQUFDLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBRCxFQUFXLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBWCxFQUFxQixlQUFHLENBQUgsRUFBTSxDQUFOLENBQXJCLENBQVI7QUFDQUEsSUFBQUEsUUFBUSxDQUFDLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBRCxFQUFXLGVBQUcsQ0FBQyxDQUFKLEVBQU8sQ0FBUCxDQUFYLEVBQXNCLGVBQUcsQ0FBQyxDQUFKLEVBQU8sQ0FBUCxDQUF0QixDQUFSO0FBQ0FBLElBQUFBLFFBQVEsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQUQsRUFBVyxlQUFHLENBQUMsQ0FBSixFQUFPLENBQVAsQ0FBWCxFQUFzQixlQUFHLENBQUMsQ0FBSixFQUFPLENBQVAsQ0FBdEIsQ0FBUjtBQUVBSixJQUFBQSxjQUFjLENBQUMsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFDLENBQVIsQ0FBRCxFQUFhLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBYixFQUF1QixlQUFHLENBQUMsQ0FBSixFQUFPLENBQUMsQ0FBUixDQUF2QixFQUFtQyxlQUFHLENBQUMsQ0FBSixFQUFPLENBQUMsQ0FBUixDQUFuQyxDQUFkO0FBQ0FBLElBQUFBLGNBQWMsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQUQsRUFBVyxlQUFHLENBQUgsRUFBTSxDQUFOLENBQVgsRUFBcUIsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFyQixFQUErQixlQUFHLENBQUgsRUFBTSxDQUFOLENBQS9CLENBQWQ7QUFDQUEsSUFBQUEsY0FBYyxDQUFDLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBRCxFQUFXLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBWCxFQUFxQixlQUFHLENBQUgsRUFBTSxDQUFOLENBQXJCLEVBQStCLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBL0IsQ0FBZDtBQUNBQSxJQUFBQSxjQUFjLENBQUMsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFDLENBQVIsQ0FBRCxFQUFhLGVBQUcsQ0FBQyxDQUFKLEVBQU8sQ0FBQyxDQUFSLENBQWIsRUFBeUIsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFDLENBQVIsQ0FBekIsRUFBcUMsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFDLENBQVIsQ0FBckMsQ0FBZDtBQUNBQSxJQUFBQSxjQUFjLENBQUMsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFQLENBQUQsRUFBWSxlQUFHLENBQUMsQ0FBSixFQUFPLENBQUMsQ0FBUixDQUFaLEVBQXdCLGVBQUcsQ0FBQyxDQUFKLEVBQU8sQ0FBUCxDQUF4QixFQUFtQyxlQUFHLENBQUMsQ0FBSixFQUFPLENBQVAsQ0FBbkMsQ0FBZDtBQUVBLFFBQU1ELFNBQVMsR0FBR0MsY0FBYyxDQUFDRyxJQUFmLENBQW9CLElBQXBCLEVBQTBCLGVBQUcsQ0FBQyxDQUFKLEVBQU8sQ0FBQyxDQUFSLENBQTFCLENBQWxCO0FBRUFKLElBQUFBLFNBQVMsQ0FBQyxlQUFHLENBQUMsQ0FBSixFQUFPLENBQVAsQ0FBRCxFQUFZLGVBQUcsQ0FBQyxDQUFKLEVBQU8sQ0FBUCxDQUFaLEVBQXVCLGVBQUcsQ0FBQyxDQUFKLEVBQU8sQ0FBQyxDQUFSLENBQXZCLENBQVQsQ0FoQ3lCLENBaUN6Qjs7QUFDQUMsSUFBQUEsY0FBYyxDQUFDLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBRCxFQUFXLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBWCxFQUFxQixlQUFHLENBQUgsRUFBTSxDQUFOLENBQXJCLEVBQStCLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBL0IsQ0FBZDtBQUNBQSxJQUFBQSxjQUFjLENBQUMsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFELEVBQVcsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUFYLEVBQXFCLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBckIsRUFBK0IsZUFBRyxDQUFILEVBQU0sQ0FBTixDQUEvQixDQUFkLENBbkN5QixDQXFDekI7O0FBQ0FBLElBQUFBLGNBQWMsQ0FBQyxlQUFHLENBQUgsRUFBTSxDQUFDLENBQVAsQ0FBRCxFQUFZLGVBQUcsQ0FBSCxFQUFNLENBQU4sQ0FBWixFQUFzQixlQUFHLENBQUgsRUFBTSxDQUFDLEdBQVAsQ0FBdEIsRUFBbUMsZUFBRyxDQUFILEVBQU0sQ0FBQyxDQUFQLENBQW5DLENBQWQ7QUFDQUEsSUFBQUEsY0FBYyxDQUFDLGVBQUcsQ0FBSCxFQUFNLENBQUMsQ0FBUCxDQUFELEVBQVksZUFBRyxDQUFILEVBQU0sQ0FBQyxDQUFQLENBQVosRUFBdUIsZUFBRyxDQUFILEVBQU0sQ0FBQyxDQUFQLENBQXZCLEVBQWtDLGVBQUcsQ0FBSCxFQUFNLENBQUMsQ0FBUCxDQUFsQyxDQUFkLENBdkN5QixDQXlDekI7O0FBQ0FBLElBQUFBLGNBQWMsQ0FBQyxlQUFHLENBQUMsQ0FBSixFQUFPLENBQVAsQ0FBRCxFQUFZLGVBQUcsQ0FBQyxDQUFKLEVBQU8sQ0FBUCxDQUFaLEVBQXVCLGVBQUcsQ0FBQyxDQUFKLEVBQU8sR0FBUCxDQUF2QixFQUFvQyxlQUFHLENBQUMsQ0FBSixFQUFPLENBQVAsQ0FBcEMsQ0FBZDtBQUNBQSxJQUFBQSxjQUFjLENBQUMsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFQLENBQUQsRUFBWSxlQUFHLENBQUgsRUFBTSxDQUFOLENBQVosRUFBc0IsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFQLENBQXRCLEVBQWlDLGVBQUcsQ0FBQyxDQUFKLEVBQU8sQ0FBUCxDQUFqQyxDQUFkLENBM0N5QixDQTZDekI7O0FBQ0FBLElBQUFBLGNBQWMsQ0FBQyxlQUFHLENBQUMsQ0FBSixFQUFPLENBQUMsQ0FBUixDQUFELEVBQWEsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFQLENBQWIsRUFBd0IsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFDLEdBQVIsQ0FBeEIsRUFBc0MsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFDLENBQVIsQ0FBdEMsQ0FBZDtBQUNBQSxJQUFBQSxjQUFjLENBQUMsZUFBRyxDQUFDLENBQUosRUFBTyxDQUFDLENBQVIsQ0FBRCxFQUFhLGVBQUcsQ0FBSCxFQUFNLENBQUMsQ0FBUCxDQUFiLEVBQXdCLGVBQUcsQ0FBQyxDQUFKLEVBQU8sQ0FBQyxDQUFSLENBQXhCLEVBQW9DLGVBQUcsQ0FBQyxDQUFKLEVBQU8sQ0FBQyxDQUFSLENBQXBDLENBQWQ7QUFDRCxHQWhETyxDQUFSO0FBa0RBcEIsRUFBQUEsUUFBUSxDQUFDLGlCQUFELEVBQW9CLFlBQU07QUFDaEMsUUFBTXlCLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBcUIsQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLEVBQWF2QixRQUFiLEVBQTBCO0FBQ25EQyxNQUFBQSxFQUFFLFdBQUlxQixHQUFKLGVBQVlDLEtBQVosZ0JBQXVCdkIsUUFBdkIsR0FBbUMsWUFBTTtBQUN6QyxZQUFNd0IsT0FBTyxHQUFHLHFCQUFVRCxLQUFWLENBQWhCO0FBQ0EsWUFBTXJCLE1BQU0sR0FBRywyQkFBZ0JvQixHQUFoQixFQUFxQkUsT0FBckIsQ0FBZjtBQUNBckIsUUFBQUEsTUFBTSxDQUFDRCxNQUFELENBQU4sQ0FBZUUsV0FBZixDQUEyQkosUUFBM0I7QUFDRCxPQUpDLENBQUY7QUFLRCxLQU5EOztBQVFBcUIsSUFBQUEsa0JBQWtCLENBQUMsQ0FBRCxFQUFJLEVBQUosRUFBUSxLQUFSLENBQWxCO0FBQ0FBLElBQUFBLGtCQUFrQixDQUFDLElBQUQsRUFBTyxFQUFQLEVBQVcsSUFBWCxDQUFsQjtBQUNELEdBWE8sQ0FBUjtBQVlELENBN0lPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhbmdsZSxcbiAgZWRnZSxcbiAgZWRnZXMsXG4gIG1heEVkZ2UsXG4gIG1pbkVkZ2UsXG4gIHRvUmFkaWFucyxcbiAgdG9EZWdyZWVzLFxuICBhY3V0ZVhBbmdsZSxcbiAgYWN1dGVZQW5nbGUsXG4gIGRpZmZFZGdlLFxufSBmcm9tICcuLi90cmlnJztcbmltcG9ydCB7IHh5IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7IGdldE9wcG9zaW5nU2lkZSB9IGZyb20gJy4uL3RyaWcnO1xuY29uc3QgbG9nID0gZGVidWcoJ3BpZS1saWI6cGxvdDp0cmlnOnRlc3QnKTtcblxuY29uc3QgdnMgPSAodikgPT4ge1xuICBpZiAoIXYpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoTnVtYmVyLmlzRmluaXRlKHYueCkgJiYgTnVtYmVyLmlzRmluaXRlKHYueSkpIHtcbiAgICByZXR1cm4gYFske3YueH0sJHt2Lnl9XWA7XG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xufTtcbmNvbnN0IHAgPSAoc3RyaW5ncywgLi4udmFsdWVzKSA9PiB7XG4gIHJldHVybiBzdHJpbmdzLnJlZHVjZSgoYWNjLCBzLCBpbmRleCkgPT4ge1xuICAgIHJldHVybiBgJHthY2N9JHtzfSR7dnModmFsdWVzW2luZGV4XSl9YDtcbiAgfSwgJycpO1xufTtcbmRlc2NyaWJlKCd0cmlnJywgKCkgPT4ge1xuICBkZXNjcmliZSgnYW5nbGUnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0QW5nbGUgPSAoYSwgYiwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KHBgJHthfSwgJHtifSA9PiAke3RvRGVncmVlcyhleHBlY3RlZCl9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhbmdsZShhLCBiKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZUNsb3NlVG8oZXhwZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSgxLCAxKSwgdG9SYWRpYW5zKDQ1KSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KDAsIDEpLCB0b1JhZGlhbnMoOTApKTtcbiAgICBhc3NlcnRBbmdsZSh4eSgwLCAwKSwgeHkoLTEsIDEpLCB0b1JhZGlhbnMoMTM1KSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KC0xLCAwKSwgdG9SYWRpYW5zKDE4MCkpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSgtMSwgLTEpLCB0b1JhZGlhbnMoMjI1KSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KDAsIC0xKSwgdG9SYWRpYW5zKDI3MCkpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSgxLCAtMSksIHRvUmFkaWFucygzMTUpKTtcbiAgICBhc3NlcnRBbmdsZSh4eSgxLCAxKSwgeHkoMCwgMCksIHRvUmFkaWFucygyMjUpKTtcbiAgICBhc3NlcnRBbmdsZSh4eSgwLCAwKSwgeHkoMSwgMSksIHRvUmFkaWFucyg0NSkpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSgyLCAxKSwgdG9SYWRpYW5zKDI2LjU2NSkpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSgzLCAxKSwgdG9SYWRpYW5zKDE4LjQzNCkpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSg0LCAxKSwgdG9SYWRpYW5zKDE0LjAzNikpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSg1LCAxKSwgdG9SYWRpYW5zKDExLjMwOSkpO1xuICB9KTtcblxuICBkZXNjcmliZSgnYWN1dGVYQW5nbGUnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0QWN1dGUgPSAoaW5wdXQsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgJHt0b0RlZ3JlZXMoaW5wdXQpfSA9PiAke3RvRGVncmVlcyhleHBlY3RlZCl9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhY3V0ZVhBbmdsZShpbnB1dCk7XG4gICAgICAgIGxvZyhgcmVzdWx0OiAke3RvRGVncmVlcyhyZXN1bHQpfWApO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0JlQ2xvc2VUbyhleHBlY3RlZCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0QWN1dGUodG9SYWRpYW5zKDQ1KSwgdG9SYWRpYW5zKDQ1KSk7XG4gICAgYXNzZXJ0QWN1dGUodG9SYWRpYW5zKDEwMCksIHRvUmFkaWFucyg4MCkpO1xuICAgIGFzc2VydEFjdXRlKHRvUmFkaWFucygxOTApLCB0b1JhZGlhbnMoMTApKTtcbiAgICBhc3NlcnRBY3V0ZSh0b1JhZGlhbnMoMzUwKSwgdG9SYWRpYW5zKDEwKSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhY3V0ZVlBbmdsZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRBY3V0ZSA9IChpbnB1dCwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KGAke3RvRGVncmVlcyhpbnB1dCl9ID0+ICR7dG9EZWdyZWVzKGV4cGVjdGVkKX1gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGFjdXRlWUFuZ2xlKGlucHV0KTtcbiAgICAgICAgbG9nKGByZXN1bHQ6ICR7dG9EZWdyZWVzKHJlc3VsdCl9YCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVDbG9zZVRvKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRBY3V0ZSh0b1JhZGlhbnMoNDUpLCB0b1JhZGlhbnMoNDUpKTtcbiAgICBhc3NlcnRBY3V0ZSh0b1JhZGlhbnMoMTAwKSwgdG9SYWRpYW5zKDEwKSk7XG4gICAgYXNzZXJ0QWN1dGUodG9SYWRpYW5zKDE5MCksIHRvUmFkaWFucyg4MCkpO1xuICAgIGFzc2VydEFjdXRlKHRvUmFkaWFucygzNTApLCB0b1JhZGlhbnMoODApKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VkZ2VzJywgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2VydEVkZ2VzID0gKGRvbWFpbiwgcmFuZ2UpID0+IChmcm9tLCB0bywgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KHBgJHtkb21haW59LCAke3JhbmdlfSArICR7ZnJvbX0gLT4gJHt0b30gPT4gJHtleHBlY3RlZFswXX0ke2V4cGVjdGVkWzFdfWAsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZWRnZXMoZG9tYWluLCByYW5nZSkoZnJvbSwgdG8pO1xuICAgICAgICBleHBlY3QocmVzdWx0WzBdLngpLnRvQmVDbG9zZVRvKGV4cGVjdGVkWzBdLngpO1xuICAgICAgICBleHBlY3QocmVzdWx0WzBdLnkpLnRvQmVDbG9zZVRvKGV4cGVjdGVkWzBdLnkpO1xuICAgICAgICBleHBlY3QocmVzdWx0WzFdLngpLnRvQmVDbG9zZVRvKGV4cGVjdGVkWzFdLngpO1xuICAgICAgICBleHBlY3QocmVzdWx0WzFdLnkpLnRvQmVDbG9zZVRvKGV4cGVjdGVkWzFdLnkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uZSA9IGFzc2VydEVkZ2VzKHsgbWluOiAtNCwgbWF4OiA0IH0sIHsgbWluOiAtNCwgbWF4OiA0IH0pO1xuICAgIG9uZSh4eSgwLCAwKSwgeHkoMSwgMSksIFt4eSg0LCA0KSwgeHkoLTQsIC00KV0pO1xuICAgIG9uZSh4eSgwLCAwKSwgeHkoMiwgMSksIFt4eSg0LCAyKSwgeHkoLTQsIC0yKV0pO1xuICAgIG9uZSh4eSgxLCAxKSwgeHkoMiwgMiksIFt4eSg0LCA0KSwgeHkoLTQsIC00KV0pO1xuICAgIG9uZSh4eSgxLCAwKSwgeHkoMiwgMCksIFt4eSg0LCAwKSwgeHkoLTQsIDApXSk7XG4gICAgb25lKHh5KDEsIDApLCB4eSgtMiwgMCksIFt4eSgtNCwgMCksIHh5KDQsIDApXSk7XG5cbiAgICAvKipcbiAgICAgKiBkb21haW4ge21pbjogLTUsIG1heDogNSwgcGFkZGluZzogMCwgc3RlcDogMSwgbGFiZWxTdGVwOiAxfWxhYmVsU3RlcDogMW1heDogNW1pbjogLTVwYWRkaW5nOiAwc3RlcDogMV9fcHJvdG9fXzogT2JqZWN0IHJhbmdlOiAge21pbjogLTUsIG1heDogNSwgcGFkZGluZzogMCwgc3RlcDogMSwgbGFiZWxTdGVwOiAxfSBhOiB7eDogLTUsIHk6IDB9IGI6IHt4OiAtNSwgeTogMn0gZWRnZXM6IFBvaW50wqB7eDogLTUsIHk6IDV9IFBvaW50wqB7eDogLTUsIHk6IDJ9XG4gICAgICovXG4gICAgY29uc3QgbGluZUlzc3VlID0gYXNzZXJ0RWRnZXMoeyBtaW46IC01LCBtYXg6IDUgfSwgeyBtaW46IC01LCBtYXg6IDUgfSk7XG4gICAgbGluZUlzc3VlKHh5KC01LCAtMCksIHh5KC01LCAyKSwgW3h5KC01LCA1KSwgeHkoLTUsIC01KV0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZGlmZkVkZ2UnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0RGlmZkVkZ2UgPSAoYm91bmRzLCBmcm9tLCB0bywgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KHBgPCR7Ym91bmRzfT4gJHtmcm9tfSAtPiAke3RvfSA9PiAke2V4cGVjdGVkfWAsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZGlmZkVkZ2UoYm91bmRzLCBmcm9tLCB0byk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQueCkudG9CZUNsb3NlVG8oZXhwZWN0ZWQueCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQueSkudG9CZUNsb3NlVG8oZXhwZWN0ZWQueSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgdHdvVHdvID0gYXNzZXJ0RGlmZkVkZ2UuYmluZChudWxsLCB4eSgyLCAyKSk7XG4gICAgdHdvVHdvKHh5KDAsIDApLCB4eSgxLCAxKSwgeHkoMiwgMikpO1xuICAgIHR3b1R3byh4eSgwLCAwKSwgeHkoMSwgMiksIHh5KDEsIDIpKTtcbiAgICB0d29Ud28oeHkoMCwgMCksIHh5KDIsIDIpLCB4eSgyLCAyKSk7XG4gICAgdHdvVHdvKHh5KDAsIDApLCB4eSgyLCAyKSwgeHkoMiwgMikpO1xuICAgIHR3b1R3byh4eSgwLCAwKSwgeHkoLTEsIDEpLCB4eSgtMiwgMikpO1xuICAgIHR3b1R3byh4eSgwLCAwKSwgeHkoLTEsIC0xKSwgeHkoLTIsIC0yKSk7XG4gICAgY29uc3QgZm91ckZvdXIgPSBhc3NlcnREaWZmRWRnZS5iaW5kKG51bGwsIHh5KDQsIDQpKTtcblxuICAgIGZvdXJGb3VyKHh5KDAsIDApLCB4eSgxLCAxKSwgeHkoNCwgNCkpO1xuICAgIGZvdXJGb3VyKHh5KDAsIDApLCB4eSgxLCAyKSwgeHkoMiwgNCkpO1xuICAgIGZvdXJGb3VyKHh5KDAsIDApLCB4eSgyLCAxKSwgeHkoNCwgMikpO1xuICAgIGZvdXJGb3VyKHh5KDAsIDApLCB4eSgtMSwgMSksIHh5KC00LCA0KSk7XG4gICAgZm91ckZvdXIoeHkoMCwgMCksIHh5KC0xLCAxKSwgeHkoLTQsIDQpKTtcblxuICAgIGFzc2VydERpZmZFZGdlKHh5KC00LCAtNCksIHh5KDAsIDApLCB4eSgtMSwgLTEpLCB4eSgtNCwgLTQpKTtcbiAgICBhc3NlcnREaWZmRWRnZSh4eSg0LCA0KSwgeHkoMSwgMSksIHh5KDIsIDIpLCB4eSg0LCA0KSk7XG4gICAgYXNzZXJ0RGlmZkVkZ2UoeHkoNCwgNCksIHh5KDIsIDIpLCB4eSgzLCAzKSwgeHkoNCwgNCkpO1xuICAgIGFzc2VydERpZmZFZGdlKHh5KC00LCAtNCksIHh5KC0xLCAtMSksIHh5KC0yLCAtMiksIHh5KC00LCAtNCkpO1xuICAgIGFzc2VydERpZmZFZGdlKHh5KC00LCA0KSwgeHkoLTEsIC0xKSwgeHkoLTIsIDApLCB4eSgtNCwgMikpO1xuXG4gICAgY29uc3QgbGluZUlzc3VlID0gYXNzZXJ0RGlmZkVkZ2UuYmluZChudWxsLCB4eSgtNSwgLTUpKTtcblxuICAgIGxpbmVJc3N1ZSh4eSgtNSwgMiksIHh5KC01LCAwKSwgeHkoLTUsIC01KSk7XG4gICAgLy9Ub3AgUmlnaHRcbiAgICBhc3NlcnREaWZmRWRnZSh4eSg1LCA1KSwgeHkoMCwgNSksIHh5KDIsIDUpLCB4eSg1LCA1KSk7XG4gICAgYXNzZXJ0RGlmZkVkZ2UoeHkoNSwgNSksIHh5KDUsIDApLCB4eSg1LCAxKSwgeHkoNSwgNSkpO1xuXG4gICAgLy8gLy9Cb3R0b20gUmlnaHRcbiAgICBhc3NlcnREaWZmRWRnZSh4eSg1LCAtNSksIHh5KDUsIDApLCB4eSg1LCAtMC4xKSwgeHkoNSwgLTUpKTtcbiAgICBhc3NlcnREaWZmRWRnZSh4eSg1LCAtNSksIHh5KDAsIC01KSwgeHkoMSwgLTUpLCB4eSg1LCAtNSkpO1xuXG4gICAgLy9Ub3AgTGVmdFxuICAgIGFzc2VydERpZmZFZGdlKHh5KC01LCA1KSwgeHkoLTUsIDApLCB4eSgtNSwgMC4xKSwgeHkoLTUsIDUpKTtcbiAgICBhc3NlcnREaWZmRWRnZSh4eSgtNSwgNSksIHh5KDAsIDUpLCB4eSgtMSwgNSksIHh5KC01LCA1KSk7XG5cbiAgICAvL0JvdHRvbSBMZWZ0XG4gICAgYXNzZXJ0RGlmZkVkZ2UoeHkoLTUsIC01KSwgeHkoLTUsIDApLCB4eSgtNSwgLTAuMSksIHh5KC01LCAtNSkpO1xuICAgIGFzc2VydERpZmZFZGdlKHh5KC01LCAtNSksIHh5KDAsIC01KSwgeHkoLTEsIC01KSwgeHkoLTUsIC01KSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRPcHBvc2luZ1NpZGUnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0T3Bwb3NpbmdTaWRlID0gKGh5cCwgYW5nbGUsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgJHtoeXB9LCAke2FuZ2xlfSA9ICR7ZXhwZWN0ZWR9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByYWRpYW5zID0gdG9SYWRpYW5zKGFuZ2xlKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0T3Bwb3NpbmdTaWRlKGh5cCwgcmFkaWFucyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVDbG9zZVRvKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRPcHBvc2luZ1NpZGUoMSwgNDUsIDAuNzA3KTtcbiAgICBhc3NlcnRPcHBvc2luZ1NpZGUoMS4yNSwgNDUsIDAuODgpO1xuICB9KTtcbn0pO1xuIl19
|