linearly 0.36.0 → 0.37.0

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.
Files changed (47) hide show
  1. package/lib/esm/mat2.d.ts +1 -1
  2. package/lib/esm/mat2.d.ts.map +1 -1
  3. package/lib/esm/mat2.js +3 -2
  4. package/lib/esm/mat2d.d.ts.map +1 -1
  5. package/lib/esm/mat2d.js +4 -5
  6. package/lib/esm/mat3.d.ts.map +1 -1
  7. package/lib/esm/mat3.js +16 -15
  8. package/lib/esm/mat4.d.ts.map +1 -1
  9. package/lib/esm/mat4.js +18 -17
  10. package/lib/esm/quat.js +3 -3
  11. package/lib/esm/scalar.d.ts +6 -35
  12. package/lib/esm/scalar.d.ts.map +1 -1
  13. package/lib/esm/scalar.js +11 -53
  14. package/package.json +9 -4
  15. package/lib/cjs/common.d.ts +0 -16
  16. package/lib/cjs/common.d.ts.map +0 -1
  17. package/lib/cjs/common.js +0 -70
  18. package/lib/cjs/index.d.ts +0 -10
  19. package/lib/cjs/index.d.ts.map +0 -1
  20. package/lib/cjs/index.js +0 -22
  21. package/lib/cjs/mat2.d.ts +0 -272
  22. package/lib/cjs/mat2.d.ts.map +0 -1
  23. package/lib/cjs/mat2.js +0 -473
  24. package/lib/cjs/mat2d.d.ts +0 -329
  25. package/lib/cjs/mat2d.d.ts.map +0 -1
  26. package/lib/cjs/mat2d.js +0 -641
  27. package/lib/cjs/mat3.d.ts +0 -295
  28. package/lib/cjs/mat3.d.ts.map +0 -1
  29. package/lib/cjs/mat3.js +0 -670
  30. package/lib/cjs/mat4.d.ts +0 -532
  31. package/lib/cjs/mat4.d.ts.map +0 -1
  32. package/lib/cjs/mat4.js +0 -1576
  33. package/lib/cjs/quat.d.ts +0 -334
  34. package/lib/cjs/quat.d.ts.map +0 -1
  35. package/lib/cjs/quat.js +0 -802
  36. package/lib/cjs/scalar.d.ts +0 -501
  37. package/lib/cjs/scalar.d.ts.map +0 -1
  38. package/lib/cjs/scalar.js +0 -728
  39. package/lib/cjs/vec2.d.ts +0 -664
  40. package/lib/cjs/vec2.d.ts.map +0 -1
  41. package/lib/cjs/vec2.js +0 -1247
  42. package/lib/cjs/vec3.d.ts +0 -660
  43. package/lib/cjs/vec3.d.ts.map +0 -1
  44. package/lib/cjs/vec3.js +0 -1329
  45. package/lib/cjs/vec4.d.ts +0 -552
  46. package/lib/cjs/vec4.d.ts.map +0 -1
  47. package/lib/cjs/vec4.js +0 -1200
package/lib/cjs/mat4.js DELETED
@@ -1,1576 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.mat4 = void 0;
37
- const Common = __importStar(require("./common"));
38
- const vec3_1 = require("./vec3");
39
- /**
40
- * Functions for {@link mat4}, 3D affine transformation.
41
- * @category Modules
42
- */
43
- var mat4;
44
- (function (mat4) {
45
- /**
46
- * Creates a new matrix from given elements
47
- * @category Generators
48
- */
49
- // prettier-ignore
50
- function of(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
51
- // prettier-ignore
52
- return [
53
- m00, m01, m02, m03,
54
- m10, m11, m12, m13,
55
- m20, m21, m22, m23,
56
- m30, m31, m32, m33,
57
- ];
58
- }
59
- mat4.of = of;
60
- /**
61
- * Creates a mutable clone of given mat4
62
- * @category Generators
63
- */
64
- function clone(a) {
65
- return [...a];
66
- }
67
- mat4.clone = clone;
68
- /**
69
- * The identity matrix of mat4
70
- * ```ts
71
- * [1, 0, 0, 0,
72
- * 0, 1, 0, 0,
73
- * 0, 0, 1, 0,
74
- * 0, 0, 0, 1]
75
- * ```
76
- * @category Constants
77
- *
78
- * @shorthands
79
- * - {@link id}
80
- * - {@link ident}
81
- */
82
- // prettier-ignore
83
- mat4.identity = Object.freeze([
84
- 1, 0, 0, 0,
85
- 0, 1, 0, 0,
86
- 0, 0, 1, 0,
87
- 0, 0, 0, 1,
88
- ]);
89
- /**
90
- * Alias for {@link identity}
91
- * @category Shorthands
92
- */
93
- mat4.I = mat4.identity;
94
- /**
95
- * Alias for {@link identity}
96
- * @category Shorthands
97
- */
98
- mat4.id = mat4.identity;
99
- /**
100
- * Alias for {@link identity}
101
- * @category Shorthands
102
- */
103
- mat4.ident = mat4.identity;
104
- /**
105
- * @category Constants
106
- */
107
- mat4.zero = Object.freeze([
108
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
109
- ]);
110
- /**
111
- * Transpose the values of a mat4
112
- */
113
- function transpose(a) {
114
- // prettier-ignore
115
- return [
116
- a[0], a[4], a[8], a[12],
117
- a[1], a[5], a[9], a[13],
118
- a[2], a[6], a[10], a[14],
119
- a[3], a[7], a[11], a[15],
120
- ];
121
- }
122
- mat4.transpose = transpose;
123
- /**
124
- * Inverts a mat4
125
- *
126
- * @shorthands
127
- * - {@link inv}
128
- */
129
- function invert(a) {
130
- // prettier-ignore
131
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
132
- const b00 = a00 * a11 - a01 * a10;
133
- const b01 = a00 * a12 - a02 * a10;
134
- const b02 = a00 * a13 - a03 * a10;
135
- const b03 = a01 * a12 - a02 * a11;
136
- const b04 = a01 * a13 - a03 * a11;
137
- const b05 = a02 * a13 - a03 * a12;
138
- const b06 = a20 * a31 - a21 * a30;
139
- const b07 = a20 * a32 - a22 * a30;
140
- const b08 = a20 * a33 - a23 * a30;
141
- const b09 = a21 * a32 - a22 * a31;
142
- const b10 = a21 * a33 - a23 * a31;
143
- const b11 = a22 * a33 - a23 * a32;
144
- // Calculate the determinant
145
- const det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
146
- if (!det) {
147
- return null;
148
- }
149
- const detinv = 1 / det;
150
- return [
151
- (a11 * b11 - a12 * b10 + a13 * b09) * detinv,
152
- (a02 * b10 - a01 * b11 - a03 * b09) * detinv,
153
- (a31 * b05 - a32 * b04 + a33 * b03) * detinv,
154
- (a22 * b04 - a21 * b05 - a23 * b03) * detinv,
155
- (a12 * b08 - a10 * b11 - a13 * b07) * detinv,
156
- (a00 * b11 - a02 * b08 + a03 * b07) * detinv,
157
- (a32 * b02 - a30 * b05 - a33 * b01) * detinv,
158
- (a20 * b05 - a22 * b02 + a23 * b01) * detinv,
159
- (a10 * b10 - a11 * b08 + a13 * b06) * detinv,
160
- (a01 * b08 - a00 * b10 - a03 * b06) * detinv,
161
- (a30 * b04 - a31 * b02 + a33 * b00) * detinv,
162
- (a21 * b02 - a20 * b04 - a23 * b00) * detinv,
163
- (a11 * b07 - a10 * b09 - a12 * b06) * detinv,
164
- (a00 * b09 - a01 * b07 + a02 * b06) * detinv,
165
- (a31 * b01 - a30 * b03 - a32 * b00) * detinv,
166
- (a20 * b03 - a21 * b01 + a22 * b00) * detinv,
167
- ];
168
- }
169
- mat4.invert = invert;
170
- /**
171
- * Alias for {@link invert}
172
- * @category Shorthands
173
- */
174
- mat4.inv = invert;
175
- /**
176
- * Calculates the adjugate of a mat4
177
- */
178
- function adjoint(a) {
179
- // prettier-ignore
180
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
181
- const b00 = a00 * a11 - a01 * a10;
182
- const b01 = a00 * a12 - a02 * a10;
183
- const b02 = a00 * a13 - a03 * a10;
184
- const b03 = a01 * a12 - a02 * a11;
185
- const b04 = a01 * a13 - a03 * a11;
186
- const b05 = a02 * a13 - a03 * a12;
187
- const b06 = a20 * a31 - a21 * a30;
188
- const b07 = a20 * a32 - a22 * a30;
189
- const b08 = a20 * a33 - a23 * a30;
190
- const b09 = a21 * a32 - a22 * a31;
191
- const b10 = a21 * a33 - a23 * a31;
192
- const b11 = a22 * a33 - a23 * a32;
193
- return [
194
- a11 * b11 - a12 * b10 + a13 * b09,
195
- a02 * b10 - a01 * b11 - a03 * b09,
196
- a31 * b05 - a32 * b04 + a33 * b03,
197
- a22 * b04 - a21 * b05 - a23 * b03,
198
- a12 * b08 - a10 * b11 - a13 * b07,
199
- a00 * b11 - a02 * b08 + a03 * b07,
200
- a32 * b02 - a30 * b05 - a33 * b01,
201
- a20 * b05 - a22 * b02 + a23 * b01,
202
- a10 * b10 - a11 * b08 + a13 * b06,
203
- a01 * b08 - a00 * b10 - a03 * b06,
204
- a30 * b04 - a31 * b02 + a33 * b00,
205
- a21 * b02 - a20 * b04 - a23 * b00,
206
- a11 * b07 - a10 * b09 - a12 * b06,
207
- a00 * b09 - a01 * b07 + a02 * b06,
208
- a31 * b01 - a30 * b03 - a32 * b00,
209
- a20 * b03 - a21 * b01 + a22 * b00,
210
- ];
211
- }
212
- mat4.adjoint = adjoint;
213
- /**
214
- * Calculates the determinant of a mat4
215
- *
216
- * @shorthands
217
- * - {@link det}
218
- */
219
- function determinant(a) {
220
- // prettier-ignore
221
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
222
- const b0 = a00 * a11 - a01 * a10;
223
- const b1 = a00 * a12 - a02 * a10;
224
- const b2 = a01 * a12 - a02 * a11;
225
- const b3 = a20 * a31 - a21 * a30;
226
- const b4 = a20 * a32 - a22 * a30;
227
- const b5 = a21 * a32 - a22 * a31;
228
- const b6 = a00 * b5 - a01 * b4 + a02 * b3;
229
- const b7 = a10 * b5 - a11 * b4 + a12 * b3;
230
- const b8 = a20 * b2 - a21 * b1 + a22 * b0;
231
- const b9 = a30 * b2 - a31 * b1 + a32 * b0;
232
- // Calculate the determinant
233
- return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;
234
- }
235
- mat4.determinant = determinant;
236
- /**
237
- * Alias for {@link determinant}
238
- * @category Shorthands
239
- */
240
- mat4.det = determinant;
241
- /**
242
- * Multiplies given mat4's
243
- *
244
- * @shorthands
245
- * - {@link mul}
246
- */
247
- function multiply(...ms) {
248
- if (ms.length === 0) {
249
- return mat4.identity;
250
- }
251
- else if (ms.length === 1) {
252
- return ms[0];
253
- }
254
- else if (ms.length > 2) {
255
- const [a, b, ...rest] = ms;
256
- return multiply(multiply(a, b), ...rest);
257
- }
258
- const [a, b] = ms;
259
- // prettier-ignore
260
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
261
- const out = Array(16);
262
- // Cache only the current line of the second matrix
263
- let [b0, b1, b2, b3] = b;
264
- out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
265
- out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
266
- out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
267
- out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
268
- b0 = b[4];
269
- b1 = b[5];
270
- b2 = b[6];
271
- b3 = b[7];
272
- out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
273
- out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
274
- out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
275
- out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
276
- b0 = b[8];
277
- b1 = b[9];
278
- b2 = b[10];
279
- b3 = b[11];
280
- out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
281
- out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
282
- out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
283
- out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
284
- b0 = b[12];
285
- b1 = b[13];
286
- b2 = b[14];
287
- b3 = b[15];
288
- out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
289
- out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
290
- out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
291
- out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
292
- return out;
293
- }
294
- mat4.multiply = multiply;
295
- /**
296
- * Alias for {@link multiply}
297
- * @category Shorthands
298
- */
299
- mat4.mul = multiply;
300
- /**
301
- * Translate a mat4 by the given vector
302
- *
303
- * @param a the matrix to translate
304
- * @param v vector to translate by
305
- */
306
- function translate(a, v) {
307
- const [x, y, z] = v;
308
- // prettier-ignore
309
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23] = a;
310
- // prettier-ignore
311
- return [
312
- a00, a01, a02, a03,
313
- a10, a11, a12, a13,
314
- a20, a21, a22, a23,
315
- a00 * x + a10 * y + a20 * z + a[12],
316
- a01 * x + a11 * y + a21 * z + a[13],
317
- a02 * x + a12 * y + a22 * z + a[14],
318
- a03 * x + a13 * y + a23 * z + a[15],
319
- ];
320
- }
321
- mat4.translate = translate;
322
- /**
323
- * Scales the mat4 by the dimensions in the given vec3 not using vectorization
324
- **/
325
- function scale(a, v) {
326
- const [x, y, z] = v;
327
- // prettier-ignore
328
- return [
329
- a[0] * x, a[1] * x, a[2] * x, a[3] * x,
330
- a[4] * y, a[5] * y, a[6] * y, a[7] * y,
331
- a[8] * z, a[9] * z, a[10] * z, a[11] * z,
332
- a[12], a[13], a[14], a[15],
333
- ];
334
- }
335
- mat4.scale = scale;
336
- /**
337
- * Rotates a mat4 by the given angle around the given axis
338
- */
339
- function rotate(a, deg, axis) {
340
- let [x, y, z] = axis;
341
- const len = Math.hypot(x, y, z);
342
- if (len < Common.EPSILON) {
343
- return null;
344
- }
345
- x /= len;
346
- y /= len;
347
- z /= len;
348
- const s = Math.sin(deg * Common.DEG2RAD);
349
- const c = Math.cos(deg * Common.DEG2RAD);
350
- const t = 1 - c;
351
- // prettier-ignore
352
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23] = a;
353
- // Construct the elements of the rotation matrix
354
- const b00 = x * x * t + c;
355
- const b01 = y * x * t + z * s;
356
- const b02 = z * x * t - y * s;
357
- const b10 = x * y * t - z * s;
358
- const b11 = y * y * t + c;
359
- const b12 = z * y * t + x * s;
360
- const b20 = x * z * t + y * s;
361
- const b21 = y * z * t - x * s;
362
- const b22 = z * z * t + c;
363
- // prettier-ignore
364
- return [
365
- a00 * b00 + a10 * b01 + a20 * b02,
366
- a01 * b00 + a11 * b01 + a21 * b02,
367
- a02 * b00 + a12 * b01 + a22 * b02,
368
- a03 * b00 + a13 * b01 + a23 * b02,
369
- a00 * b10 + a10 * b11 + a20 * b12,
370
- a01 * b10 + a11 * b11 + a21 * b12,
371
- a02 * b10 + a12 * b11 + a22 * b12,
372
- a03 * b10 + a13 * b11 + a23 * b12,
373
- a00 * b20 + a10 * b21 + a20 * b22,
374
- a01 * b20 + a11 * b21 + a21 * b22,
375
- a02 * b20 + a12 * b21 + a22 * b22,
376
- a03 * b20 + a13 * b21 + a23 * b22,
377
- a[12], a[13], a[14], a[15],
378
- ];
379
- }
380
- mat4.rotate = rotate;
381
- /**
382
- * Rotates a matrix by the given angle around the X axis
383
- */
384
- function rotateX(a, deg) {
385
- const s = Math.sin(deg * Common.DEG2RAD);
386
- const c = Math.cos(deg * Common.DEG2RAD);
387
- const a10 = a[4];
388
- const a11 = a[5];
389
- const a12 = a[6];
390
- const a13 = a[7];
391
- const a20 = a[8];
392
- const a21 = a[9];
393
- const a22 = a[10];
394
- const a23 = a[11];
395
- // prettier-ignore
396
- return [
397
- a[0], a[1], a[2], a[3],
398
- a10 * c + a20 * s, a11 * c + a21 * s, a12 * c + a22 * s, a13 * c + a23 * s,
399
- a20 * c - a10 * s, a21 * c - a11 * s, a22 * c - a12 * s, a23 * c - a13 * s,
400
- a[12], a[13], a[14], a[15],
401
- ];
402
- }
403
- mat4.rotateX = rotateX;
404
- /**
405
- * Rotates a matrix by the given angle around the Y axis
406
- */
407
- function rotateY(a, deg) {
408
- const s = Math.sin(deg * Common.DEG2RAD);
409
- const c = Math.cos(deg * Common.DEG2RAD);
410
- const a00 = a[0];
411
- const a01 = a[1];
412
- const a02 = a[2];
413
- const a03 = a[3];
414
- const a20 = a[8];
415
- const a21 = a[9];
416
- const a22 = a[10];
417
- const a23 = a[11];
418
- // prettier-ignore
419
- return [
420
- a00 * c - a20 * s,
421
- a01 * c - a21 * s,
422
- a02 * c - a22 * s,
423
- a03 * c - a23 * s,
424
- a[4], a[5], a[6], a[7],
425
- a00 * s + a20 * c,
426
- a01 * s + a21 * c,
427
- a02 * s + a22 * c,
428
- a03 * s + a23 * c,
429
- a[12], a[13], a[14], a[15],
430
- ];
431
- }
432
- mat4.rotateY = rotateY;
433
- /**
434
- * Rotates a matrix by the given angle around the Z axis
435
- */
436
- function rotateZ(a, deg) {
437
- const s = Math.sin(deg * Common.DEG2RAD);
438
- const c = Math.cos(deg * Common.DEG2RAD);
439
- const a00 = a[0];
440
- const a01 = a[1];
441
- const a02 = a[2];
442
- const a03 = a[3];
443
- const a10 = a[4];
444
- const a11 = a[5];
445
- const a12 = a[6];
446
- const a13 = a[7];
447
- // prettier-ignore
448
- return [
449
- a00 * c + a10 * s,
450
- a01 * c + a11 * s,
451
- a02 * c + a12 * s,
452
- a03 * c + a13 * s,
453
- a10 * c - a00 * s,
454
- a11 * c - a01 * s,
455
- a12 * c - a02 * s,
456
- a13 * c - a03 * s,
457
- a[8], a[9], a[10], a[11],
458
- a[12], a[13], a[14], a[15],
459
- ];
460
- }
461
- mat4.rotateZ = rotateZ;
462
- /**
463
- * Creates a matrix from given axes and translation vector. If either axis is null, it will be calculated from the remaining axes while assuming the other axis is the cross product of the remaining axes. All of axes will not be normalized.
464
- * @category Generators
465
- */
466
- function fromAxesTranslation(xAxis, yAxis, zAxis = null, trans = vec3_1.vec3.zero) {
467
- if (!xAxis || !yAxis || !zAxis) {
468
- if (!xAxis && yAxis && zAxis) {
469
- xAxis = vec3_1.vec3.cross(yAxis, zAxis);
470
- }
471
- else if (xAxis && !yAxis && zAxis) {
472
- yAxis = vec3_1.vec3.cross(zAxis, xAxis);
473
- }
474
- else if (xAxis && yAxis && !zAxis) {
475
- zAxis = vec3_1.vec3.cross(xAxis, yAxis);
476
- }
477
- else {
478
- throw new Error('fromAxesTranslation: you must specify at least two axes');
479
- }
480
- }
481
- // prettier-ignore
482
- return [
483
- xAxis[0], xAxis[1], xAxis[2], 0,
484
- yAxis[0], yAxis[1], yAxis[2], 0,
485
- zAxis[0], zAxis[1], zAxis[2], 0,
486
- trans[0], trans[1], trans[2], 1,
487
- ];
488
- }
489
- mat4.fromAxesTranslation = fromAxesTranslation;
490
- /**
491
- * Creates a matrix from a vector translation
492
- * @category Generators
493
- *
494
- * @shorthands
495
- * - {@link translation}
496
- */
497
- function fromTranslation(v) {
498
- const [x, y, z] = v;
499
- // prettier-ignore
500
- return [
501
- 1, 0, 0, 0,
502
- 0, 1, 0, 0,
503
- 0, 0, 1, 0,
504
- x, y, z, 1,
505
- ];
506
- }
507
- mat4.fromTranslation = fromTranslation;
508
- /**
509
- * Alias for {@link fromTranslation}
510
- * @category Shorthands
511
- */
512
- mat4.translation = fromTranslation;
513
- /**
514
- * Creates a matrix from a vector scaling
515
- * @category Generators
516
- *
517
- * @shorthands
518
- * - {@link scaling}
519
- */
520
- function fromScaling(v) {
521
- const [x, y, z] = v;
522
- // prettier-ignore
523
- return [
524
- x, 0, 0, 0,
525
- 0, y, 0, 0,
526
- 0, 0, z, 0,
527
- 0, 0, 0, 1
528
- ];
529
- }
530
- mat4.fromScaling = fromScaling;
531
- /**
532
- * Alias for {@link fromScaling}
533
- * @category Shorthands
534
- */
535
- mat4.scaling = fromScaling;
536
- /**
537
- * Creates a matrix from a given angle around a given axis
538
- * Creates a matrix from a given angle.
539
- * @param deg The angle to rotate the matrix by, in degrees
540
- * @param axis The axis to rotate around
541
- * @category Generators
542
- *
543
- * @shorthands
544
- * - {@link rotation}
545
- */
546
- function fromRotation(deg, axis) {
547
- let [x, y, z] = axis;
548
- const len = Math.hypot(x, y, z);
549
- if (len < Common.EPSILON) {
550
- return null;
551
- }
552
- x /= len;
553
- y /= len;
554
- z /= len;
555
- const s = Math.sin(deg * Common.DEG2RAD);
556
- const c = Math.cos(deg * Common.DEG2RAD);
557
- const t = 1 - c;
558
- // prettier-ignore
559
- return [
560
- x * x * t + c,
561
- y * x * t + z * s,
562
- z * x * t - y * s,
563
- 0,
564
- x * y * t - z * s,
565
- y * y * t + c,
566
- z * y * t + x * s,
567
- 0,
568
- x * z * t + y * s,
569
- y * z * t - x * s,
570
- z * z * t + c,
571
- 0,
572
- 0, 0, 0, 1,
573
- ];
574
- }
575
- mat4.fromRotation = fromRotation;
576
- /**
577
- * Alias for {@link fromRotation}
578
- * @category Shorthands
579
- */
580
- mat4.rotation = fromRotation;
581
- /**
582
- * Creates a matrix from the given angle around the X axis
583
- * @category Generators
584
- */
585
- function fromXRotation(deg) {
586
- const s = Math.sin(deg * Common.DEG2RAD);
587
- const c = Math.cos(deg * Common.DEG2RAD);
588
- // prettier-ignore
589
- return [
590
- 1, 0, 0, 0,
591
- 0, c, s, 0,
592
- 0, -s, c, 0,
593
- 0, 0, 0, 1
594
- ];
595
- }
596
- mat4.fromXRotation = fromXRotation;
597
- /**
598
- * Creates a matrix from the given angle around the Y axis
599
- * @category Generators
600
- */
601
- function fromYRotation(deg) {
602
- const s = Math.sin(deg * Common.DEG2RAD);
603
- const c = Math.cos(deg * Common.DEG2RAD);
604
- // prettier-ignore
605
- return [
606
- c, 0, -s, 0,
607
- 0, 1, 0, 0,
608
- s, 0, c, 0,
609
- 0, 0, 0, 1
610
- ];
611
- }
612
- mat4.fromYRotation = fromYRotation;
613
- /**
614
- * Creates a matrix from the given angle around the Z axis
615
- * @category Generators
616
- */
617
- function fromZRotation(deg) {
618
- const s = Math.sin(deg * Common.DEG2RAD);
619
- const c = Math.cos(deg * Common.DEG2RAD);
620
- // prettier-ignore
621
- return [
622
- c, s, 0, 0,
623
- -s, c, 0, 0,
624
- 0, 0, 1, 0,
625
- 0, 0, 0, 1
626
- ];
627
- }
628
- mat4.fromZRotation = fromZRotation;
629
- /**
630
- * Creates a matrix from a quaternion rotation and vector translation
631
- * @category Generators
632
- */
633
- function fromRotationTranslation(q, v) {
634
- // Quaternion math
635
- const [x, y, z, w] = q;
636
- const x2 = x + x;
637
- const y2 = y + y;
638
- const z2 = z + z;
639
- const xx = x * x2;
640
- const xy = x * y2;
641
- const xz = x * z2;
642
- const yy = y * y2;
643
- const yz = y * z2;
644
- const zz = z * z2;
645
- const wx = w * x2;
646
- const wy = w * y2;
647
- const wz = w * z2;
648
- return [
649
- 1 - (yy + zz),
650
- xy + wz,
651
- xz - wy,
652
- 0,
653
- xy - wz,
654
- 1 - (xx + zz),
655
- yz + wx,
656
- 0,
657
- xz + wy,
658
- yz - wx,
659
- 1 - (xx + yy),
660
- 0,
661
- v[0],
662
- v[1],
663
- v[2],
664
- 1,
665
- ];
666
- }
667
- mat4.fromRotationTranslation = fromRotationTranslation;
668
- /**
669
- * Returns the translation vector component of a transformation
670
- * matrix. If a matrix is built with fromRotationTranslation,
671
- * the returned vector will be the same as the translation vector
672
- * originally supplied.
673
- */
674
- function getTranslation(mat) {
675
- return [mat[12], mat[13], mat[14]];
676
- }
677
- mat4.getTranslation = getTranslation;
678
- /**
679
- * Returns the scaling factor component of a transformation
680
- * matrix. If a matrix is built with fromRotationTranslationScale
681
- * with a normalized Quaternion paramter, the returned vector will be
682
- * the same as the scaling vector
683
- * originally supplied.
684
- */
685
- function getScaling(mat) {
686
- // prettier-ignore
687
- const [m11, m12, m13, , m21, m22, m23, , m31, m32, m33,] = mat;
688
- return [
689
- Math.hypot(m11, m12, m13),
690
- Math.hypot(m21, m22, m23),
691
- Math.hypot(m31, m32, m33),
692
- ];
693
- }
694
- mat4.getScaling = getScaling;
695
- /**
696
- * Returns a quaternion representing the rotational component
697
- * of a transformation matrix. If a matrix is built with
698
- * fromRotationTranslation, the returned quaternion will be the
699
- * same as the quaternion originally supplied.
700
- */
701
- function getRotation(mat) {
702
- const scaling = getScaling(mat);
703
- const is1 = 1 / scaling[0];
704
- const is2 = 1 / scaling[1];
705
- const is3 = 1 / scaling[2];
706
- const sm11 = mat[0] * is1;
707
- const sm12 = mat[1] * is2;
708
- const sm13 = mat[2] * is3;
709
- const sm21 = mat[4] * is1;
710
- const sm22 = mat[5] * is2;
711
- const sm23 = mat[6] * is3;
712
- const sm31 = mat[8] * is1;
713
- const sm32 = mat[9] * is2;
714
- const sm33 = mat[10] * is3;
715
- const trace = sm11 + sm22 + sm33;
716
- if (trace > 0) {
717
- const S = Math.sqrt(trace + 1) * 2;
718
- return [(sm23 - sm32) / S, (sm31 - sm13) / S, (sm12 - sm21) / S, 0.25 * S];
719
- }
720
- else if (sm11 > sm22 && sm11 > sm33) {
721
- const S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
722
- return [0.25 * S, (sm12 + sm21) / S, (sm31 + sm13) / S, (sm23 - sm32) / S];
723
- }
724
- else if (sm22 > sm33) {
725
- const S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
726
- return [(sm12 + sm21) / S, 0.25 * S, (sm23 + sm32) / S, (sm31 - sm13) / S];
727
- }
728
- else {
729
- const S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
730
- return [(sm31 + sm13) / S, (sm23 + sm32) / S, 0.25 * S, (sm12 - sm21) / S];
731
- }
732
- }
733
- mat4.getRotation = getRotation;
734
- /**
735
- * Decomposes a transformation matrix into its rotation, translation
736
- * and scale components. Returns only the rotation component
737
- *
738
- * @param mat Matrix to be decomposed (input)
739
- */
740
- function decompose(mat) {
741
- const trans = [mat[12], mat[13], mat[14]];
742
- // prettier-ignore
743
- const [m11, m12, m13, , m21, m22, m23, , m31, m32, m33,] = mat;
744
- const scale = [
745
- Math.hypot(m11, m12, m13),
746
- Math.hypot(m21, m22, m23),
747
- Math.hypot(m31, m32, m33),
748
- ];
749
- const is1 = 1 / scale[0];
750
- const is2 = 1 / scale[1];
751
- const is3 = 1 / scale[2];
752
- const sm11 = m11 * is1;
753
- const sm12 = m12 * is2;
754
- const sm13 = m13 * is3;
755
- const sm21 = m21 * is1;
756
- const sm22 = m22 * is2;
757
- const sm23 = m23 * is3;
758
- const sm31 = m31 * is1;
759
- const sm32 = m32 * is2;
760
- const sm33 = m33 * is3;
761
- const trace = sm11 + sm22 + sm33;
762
- let rot;
763
- if (trace > 0) {
764
- const S = Math.sqrt(trace + 1) * 2;
765
- rot = [(sm23 - sm32) / S, (sm31 - sm13) / S, (sm12 - sm21) / S, 0.25 * S];
766
- }
767
- else if (sm11 > sm22 && sm11 > sm33) {
768
- const S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
769
- rot = [0.25 * S, (sm12 + sm21) / S, (sm31 + sm13) / S, (sm23 - sm32) / S];
770
- }
771
- else if (sm22 > sm33) {
772
- const S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
773
- rot = [(sm12 + sm21) / S, 0.25 * S, (sm23 + sm32) / S, (sm31 - sm13) / S];
774
- }
775
- else {
776
- const S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
777
- rot = [(sm31 + sm13) / S, (sm23 + sm32) / S, 0.25 * S, (sm12 - sm21) / S];
778
- }
779
- return {
780
- trans,
781
- rot,
782
- scale,
783
- };
784
- }
785
- mat4.decompose = decompose;
786
- /**
787
- * Creates a matrix from a quaternion rotation, vector translation and vector scale.
788
- * This is equivalent to (but much faster than):
789
- *
790
- * ```ts
791
- * mat4.multiply(
792
- * mat4.fromTranslation(trans),
793
- * mat4.fromQuat(rot),
794
- * mat4.fromScaling(scale),
795
- * )
796
- * ```
797
- *
798
- * @category Generators
799
- * @param rot Rotation quaternion
800
- * @param trans Translation vector
801
- * @param scale Scaling vector
802
- */
803
- function fromRotationTranslationScale(rot, trans, scale = vec3_1.vec3.one) {
804
- // Quaternion math
805
- const [x, y, z, w] = rot;
806
- const x2 = x + x;
807
- const y2 = y + y;
808
- const z2 = z + z;
809
- const xx = x * x2;
810
- const xy = x * y2;
811
- const xz = x * z2;
812
- const yy = y * y2;
813
- const yz = y * z2;
814
- const zz = z * z2;
815
- const wx = w * x2;
816
- const wy = w * y2;
817
- const wz = w * z2;
818
- const sx = scale[0];
819
- const sy = scale[1];
820
- const sz = scale[2];
821
- return [
822
- (1 - (yy + zz)) * sx,
823
- (xy + wz) * sx,
824
- (xz - wy) * sx,
825
- 0,
826
- (xy - wz) * sy,
827
- (1 - (xx + zz)) * sy,
828
- (yz + wx) * sy,
829
- 0,
830
- (xz + wy) * sz,
831
- (yz - wx) * sz,
832
- (1 - (xx + yy)) * sz,
833
- 0,
834
- trans[0],
835
- trans[1],
836
- trans[2],
837
- 1,
838
- ];
839
- }
840
- mat4.fromRotationTranslationScale = fromRotationTranslationScale;
841
- /**
842
- * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin.
843
- * This is equivalent to (but much faster than):
844
- *
845
- * ```ts
846
- * mat4.multiply(
847
- * mat4.fromTranslation(trans),
848
- * mat4.fromTranslation(origin),
849
- * mat4.fromQuat(rot),
850
- * mat4.fromScaling(scale),
851
- * mat4.fromTranslation(vec3.negate(origin)),
852
- * )
853
- * ```
854
- *
855
- * @category Generators
856
- * @param rot Rotation quaternion
857
- * @param trans Translation vector
858
- * @param scale Scaling vector
859
- * @param origin The origin vector around which to scale and rotate
860
- */
861
- function fromRotationTranslationScaleOrigin(rot, trans, scale = vec3_1.vec3.one, origin = vec3_1.vec3.zero) {
862
- // Quaternion math
863
- const [x, y, z, w] = rot;
864
- const x2 = x + x;
865
- const y2 = y + y;
866
- const z2 = z + z;
867
- const xx = x * x2;
868
- const xy = x * y2;
869
- const xz = x * z2;
870
- const yy = y * y2;
871
- const yz = y * z2;
872
- const zz = z * z2;
873
- const wx = w * x2;
874
- const wy = w * y2;
875
- const wz = w * z2;
876
- const sx = scale[0];
877
- const sy = scale[1];
878
- const sz = scale[2];
879
- const ox = origin[0];
880
- const oy = origin[1];
881
- const oz = origin[2];
882
- const out0 = (1 - (yy + zz)) * sx;
883
- const out1 = (xy + wz) * sx;
884
- const out2 = (xz - wy) * sx;
885
- const out4 = (xy - wz) * sy;
886
- const out5 = (1 - (xx + zz)) * sy;
887
- const out6 = (yz + wx) * sy;
888
- const out8 = (xz + wy) * sz;
889
- const out9 = (yz - wx) * sz;
890
- const out10 = (1 - (xx + yy)) * sz;
891
- // prettier-ignore
892
- return [
893
- out0, out1, out2, 0,
894
- out4, out5, out6, 0,
895
- out8, out9, out10, 0,
896
- trans[0] + ox - (out0 * ox + out4 * oy + out8 * oz),
897
- trans[1] + oy - (out1 * ox + out5 * oy + out9 * oz),
898
- trans[2] + oz - (out2 * ox + out6 * oy + out10 * oz),
899
- 1,
900
- ];
901
- }
902
- mat4.fromRotationTranslationScaleOrigin = fromRotationTranslationScaleOrigin;
903
- /**
904
- * Calculates a 4x4 matrix from the given quaternion
905
- *
906
- * @param q Quaternion to create matrix from
907
- * @category Generators
908
- */
909
- function fromQuat(q) {
910
- const [x, y, z, w] = q;
911
- const x2 = x + x;
912
- const y2 = y + y;
913
- const z2 = z + z;
914
- const xx = x * x2;
915
- const yx = y * x2;
916
- const yy = y * y2;
917
- const zx = z * x2;
918
- const zy = z * y2;
919
- const zz = z * z2;
920
- const wx = w * x2;
921
- const wy = w * y2;
922
- const wz = w * z2;
923
- // prettier-ignore
924
- return [
925
- 1 - yy - zz,
926
- yx + wz,
927
- zx - wy,
928
- 0,
929
- yx - wz,
930
- 1 - xx - zz,
931
- zy + wx,
932
- 0,
933
- zx + wy,
934
- zy - wx,
935
- 1 - xx - yy,
936
- 0,
937
- 0, 0, 0, 1,
938
- ];
939
- }
940
- mat4.fromQuat = fromQuat;
941
- /**
942
- * Generates a frustum matrix with the given bounds
943
- *
944
- * @param left Left bound of the frustum
945
- * @param right Right bound of the frustum
946
- * @param bottom Bottom bound of the frustum
947
- * @param top Top bound of the frustum
948
- * @param near Near bound of the frustum
949
- * @param far Far bound of the frustum
950
- */
951
- function frustum(left, right, bottom, top, near, far) {
952
- const rl = 1 / (right - left);
953
- const tb = 1 / (top - bottom);
954
- const nf = 1 / (near - far);
955
- // prettier-ignore
956
- return [
957
- near * 2 * rl, 0, 0, 0,
958
- 0, near * 2 * tb, 0, 0,
959
- (right + left) * rl, (top + bottom) * tb, (far + near) * nf, -1,
960
- 0, 0, far * near * 2 * nf, 0,
961
- ];
962
- }
963
- mat4.frustum = frustum;
964
- /**
965
- * Generates a perspective projection matrix with the given bounds.
966
- * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],
967
- * which matches WebGL/OpenGL's clip volume.
968
- * Passing null/undefined/no value for far will generate infinite projection matrix.
969
- *
970
- * @param fovy Vertical field of view in degrees
971
- * @param aspect Aspect ratio. typically viewport width/height
972
- * @param near Near bound of the frustum
973
- * @param far Far bound of the frustum, can be null or Infinity
974
- */
975
- function perspectiveNO(fovy, aspect, near, far) {
976
- const f = 1 / Math.tan((fovy * Common.DEG2RAD) / 2);
977
- let out10, out14;
978
- if (far !== null && far !== Infinity) {
979
- const nf = 1 / (near - far);
980
- out10 = (far + near) * nf;
981
- out14 = 2 * far * near * nf;
982
- }
983
- else {
984
- out10 = -1;
985
- out14 = -2 * near;
986
- }
987
- // prettier-ignore
988
- return [
989
- f / aspect, 0, 0, 0,
990
- 0, f, 0, 0,
991
- 0, 0, out10, -1,
992
- 0, 0, out14, 0,
993
- ];
994
- }
995
- mat4.perspectiveNO = perspectiveNO;
996
- /**
997
- * Alias for {@link perspectiveNO}
998
- * @function
999
- */
1000
- mat4.perspective = perspectiveNO;
1001
- /**
1002
- * Generates a perspective projection matrix suitable for WebGPU with the given bounds.
1003
- * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],
1004
- * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.
1005
- * Passing null/undefined/no value for far will generate infinite projection matrix.
1006
- *
1007
- * @param fovy Vertical field of view in degrees
1008
- * @param aspect Aspect ratio. typically viewport width/height
1009
- * @param near Near bound of the frustum
1010
- * @param far Far bound of the frustum, can be null or Infinity
1011
- */
1012
- function perspectiveZO(fovy, aspect, near, far) {
1013
- const f = 1 / Math.tan((fovy * Common.DEG2RAD) / 2);
1014
- let out10, out14;
1015
- if (far !== null && far !== Infinity) {
1016
- const nf = 1 / (near - far);
1017
- out10 = far * nf;
1018
- out14 = far * near * nf;
1019
- }
1020
- else {
1021
- out10 = -1;
1022
- out14 = -near;
1023
- }
1024
- return [f / aspect, 0, 0, 0, 0, f, 0, 0, 0, 0, out10, -1, 0, 0, out14, 0];
1025
- }
1026
- mat4.perspectiveZO = perspectiveZO;
1027
- /**
1028
- * Generates a perspective projection matrix with the given field of view.
1029
- * This is primarily useful for generating projection matrices to be used
1030
- * with the still experiemental WebVR API.
1031
- *
1032
- * @param fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees
1033
- * @param near Near bound of the frustum
1034
- * @param far Far bound of the frustum
1035
- */
1036
- function perspectiveFromFieldOfView(fov, near, far) {
1037
- const upTan = Math.tan((fov.upDegrees * Math.PI) / 180);
1038
- const downTan = Math.tan((fov.downDegrees * Math.PI) / 180);
1039
- const leftTan = Math.tan((fov.leftDegrees * Math.PI) / 180);
1040
- const rightTan = Math.tan((fov.rightDegrees * Math.PI) / 180);
1041
- const xScale = 2 / (leftTan + rightTan);
1042
- const yScale = 2 / (upTan + downTan);
1043
- // prettier-ignore
1044
- return [
1045
- xScale, 0, 0, 0,
1046
- 0, yScale, 0, 0,
1047
- -((leftTan - rightTan) * xScale * 0.5),
1048
- (upTan - downTan) * yScale * 0.5,
1049
- far / (near - far),
1050
- -1,
1051
- 0,
1052
- 0,
1053
- (far * near) / (near - far),
1054
- 0,
1055
- ];
1056
- }
1057
- mat4.perspectiveFromFieldOfView = perspectiveFromFieldOfView;
1058
- /**
1059
- * Generates a orthogonal projection matrix with the given bounds.
1060
- * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],
1061
- * which matches WebGL/OpenGL's clip volume.
1062
- *
1063
- * @param left Left bound of the frustum
1064
- * @param right Right bound of the frustum
1065
- * @param bottom Bottom bound of the frustum
1066
- * @param top Top bound of the frustum
1067
- * @param near Near bound of the frustum
1068
- * @param far Far bound of the frustum
1069
- */
1070
- function orthoNO(left, right, bottom, top, near, far) {
1071
- const lr = 1 / (left - right);
1072
- const bt = 1 / (bottom - top);
1073
- const nf = 1 / (near - far);
1074
- // prettier-ignore
1075
- return [
1076
- -2 * lr, 0, 0, 0,
1077
- 0, -2 * bt, 0, 0,
1078
- 0, 0, 2 * nf, 0,
1079
- (left + right) * lr,
1080
- (top + bottom) * bt,
1081
- (far + near) * nf,
1082
- 1,
1083
- ];
1084
- }
1085
- mat4.orthoNO = orthoNO;
1086
- /**
1087
- * Alias for {@link orthoNO}
1088
- * @function
1089
- */
1090
- mat4.ortho = orthoNO;
1091
- /**
1092
- * Generates a orthogonal projection matrix with the given bounds.
1093
- * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],
1094
- * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.
1095
- *
1096
- * @param left Left bound of the frustum
1097
- * @param right Right bound of the frustum
1098
- * @param bottom Bottom bound of the frustum
1099
- * @param top Top bound of the frustum
1100
- * @param near Near bound of the frustum
1101
- * @param far Far bound of the frustum
1102
- */
1103
- function orthoZO(left, right, bottom, top, near, far) {
1104
- const lr = 1 / (left - right);
1105
- const bt = 1 / (bottom - top);
1106
- const nf = 1 / (near - far);
1107
- // prettier-ignore
1108
- return [
1109
- -2 * lr, 0, 0, 0,
1110
- 0, -2 * bt, 0, 0,
1111
- 0, 0, nf, 0,
1112
- (left + right) * lr,
1113
- (top + bottom) * bt,
1114
- near * nf,
1115
- 1,
1116
- ];
1117
- }
1118
- mat4.orthoZO = orthoZO;
1119
- /**
1120
- * Generates a look-at matrix with the given eye position, focal point, and up axis.
1121
- * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.
1122
- *
1123
- * @param eye Position of the viewer
1124
- * @param center Point the viewer is looking at
1125
- * @param up vec3 pointing up
1126
- */
1127
- function lookAt(eye, center, up) {
1128
- let x0, x1, x2, y0, y1, y2, z0, z1, z2, len;
1129
- const eyex = eye[0];
1130
- const eyey = eye[1];
1131
- const eyez = eye[2];
1132
- const upx = up[0];
1133
- const upy = up[1];
1134
- const upz = up[2];
1135
- const centerx = center[0];
1136
- const centery = center[1];
1137
- const centerz = center[2];
1138
- if (Math.abs(eyex - centerx) < Common.EPSILON &&
1139
- Math.abs(eyey - centery) < Common.EPSILON &&
1140
- Math.abs(eyez - centerz) < Common.EPSILON) {
1141
- return [...mat4.identity];
1142
- }
1143
- z0 = eyex - centerx;
1144
- z1 = eyey - centery;
1145
- z2 = eyez - centerz;
1146
- len = 1 / Math.hypot(z0, z1, z2);
1147
- z0 *= len;
1148
- z1 *= len;
1149
- z2 *= len;
1150
- x0 = upy * z2 - upz * z1;
1151
- x1 = upz * z0 - upx * z2;
1152
- x2 = upx * z1 - upy * z0;
1153
- len = Math.hypot(x0, x1, x2);
1154
- if (!len) {
1155
- x0 = 0;
1156
- x1 = 0;
1157
- x2 = 0;
1158
- }
1159
- else {
1160
- len = 1 / len;
1161
- x0 *= len;
1162
- x1 *= len;
1163
- x2 *= len;
1164
- }
1165
- y0 = z1 * x2 - z2 * x1;
1166
- y1 = z2 * x0 - z0 * x2;
1167
- y2 = z0 * x1 - z1 * x0;
1168
- len = Math.hypot(y0, y1, y2);
1169
- if (!len) {
1170
- y0 = 0;
1171
- y1 = 0;
1172
- y2 = 0;
1173
- }
1174
- else {
1175
- len = 1 / len;
1176
- y0 *= len;
1177
- y1 *= len;
1178
- y2 *= len;
1179
- }
1180
- // prettier-ignore
1181
- return [
1182
- x0, y0, z0, 0,
1183
- x1, y1, z1, 0,
1184
- x2, y2, z2, 0,
1185
- -(x0 * eyex + x1 * eyey + x2 * eyez),
1186
- -(y0 * eyex + y1 * eyey + y2 * eyez),
1187
- -(z0 * eyex + z1 * eyey + z2 * eyez),
1188
- 1,
1189
- ];
1190
- }
1191
- mat4.lookAt = lookAt;
1192
- /**
1193
- * Generates a matrix that makes something look at something else.
1194
- *
1195
- * @param eye Position of the viewer
1196
- * @param center Point the viewer is looking at
1197
- * @param up vec3 pointing up
1198
- */
1199
- function targetTo(eye, target, up) {
1200
- const [eyex, eyey, eyez] = eye;
1201
- const [upx, upy, upz] = up;
1202
- let z0 = eyex - target[0], z1 = eyey - target[1], z2 = eyez - target[2];
1203
- let len = z0 * z0 + z1 * z1 + z2 * z2;
1204
- if (len > 0) {
1205
- len = 1 / Math.sqrt(len);
1206
- z0 *= len;
1207
- z1 *= len;
1208
- z2 *= len;
1209
- }
1210
- let x0 = upy * z2 - upz * z1, x1 = upz * z0 - upx * z2, x2 = upx * z1 - upy * z0;
1211
- len = x0 * x0 + x1 * x1 + x2 * x2;
1212
- if (len > 0) {
1213
- len = 1 / Math.sqrt(len);
1214
- x0 *= len;
1215
- x1 *= len;
1216
- x2 *= len;
1217
- }
1218
- // prettier-ignore
1219
- return [
1220
- x0, x1, x2, 0,
1221
- z1 * x2 - z2 * x1,
1222
- z2 * x0 - z0 * x2,
1223
- z0 * x1 - z1 * x0,
1224
- 0,
1225
- z0, z1, z2, 0,
1226
- eyex, eyey, eyez, 1,
1227
- ];
1228
- }
1229
- mat4.targetTo = targetTo;
1230
- /**
1231
- * Returns Frobenius norm of a mat4
1232
- */
1233
- function frob(a) {
1234
- return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]);
1235
- }
1236
- mat4.frob = frob;
1237
- /**
1238
- * Adds given mat4's
1239
- */
1240
- function add(...ms) {
1241
- const ret = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
1242
- for (const m of ms) {
1243
- ret[0] += m[0];
1244
- ret[1] += m[1];
1245
- ret[2] += m[2];
1246
- ret[3] += m[3];
1247
- ret[4] += m[4];
1248
- ret[5] += m[5];
1249
- ret[6] += m[6];
1250
- ret[7] += m[7];
1251
- ret[8] += m[8];
1252
- ret[9] += m[9];
1253
- ret[10] += m[10];
1254
- ret[11] += m[11];
1255
- ret[12] += m[12];
1256
- ret[13] += m[13];
1257
- ret[14] += m[14];
1258
- ret[15] += m[15];
1259
- }
1260
- return ret;
1261
- }
1262
- mat4.add = add;
1263
- /**
1264
- * Subtracts matrix b from matrix a
1265
- *
1266
- * @shorthands
1267
- * - {@link sub}
1268
- */
1269
- function subtract(...ms) {
1270
- if (ms.length === 0) {
1271
- return mat4.zero;
1272
- }
1273
- else if (ms.length === 1) {
1274
- return [
1275
- -ms[0],
1276
- -ms[1],
1277
- -ms[2],
1278
- -ms[3],
1279
- -ms[4],
1280
- -ms[5],
1281
- -ms[6],
1282
- -ms[7],
1283
- -ms[8],
1284
- -ms[9],
1285
- -ms[10],
1286
- -ms[11],
1287
- -ms[12],
1288
- -ms[13],
1289
- -ms[14],
1290
- -ms[15],
1291
- ];
1292
- }
1293
- else if (ms.length > 2) {
1294
- const [a, b, ...rest] = ms;
1295
- return subtract(subtract(a, b), ...rest);
1296
- }
1297
- const [a, b] = ms;
1298
- return [
1299
- a[0] - b[0],
1300
- a[1] - b[1],
1301
- a[2] - b[2],
1302
- a[3] - b[3],
1303
- a[4] - b[4],
1304
- a[5] - b[5],
1305
- a[6] - b[6],
1306
- a[7] - b[7],
1307
- a[8] - b[8],
1308
- a[9] - b[9],
1309
- a[10] - b[10],
1310
- a[11] - b[11],
1311
- a[12] - b[12],
1312
- a[13] - b[13],
1313
- a[14] - b[14],
1314
- a[15] - b[15],
1315
- ];
1316
- }
1317
- mat4.subtract = subtract;
1318
- /**
1319
- * Alias for {@link subtract}
1320
- * @category Shorthands
1321
- */
1322
- mat4.sub = subtract;
1323
- /**
1324
- * Subtracts b from a
1325
- */
1326
- function delta(a, b) {
1327
- return [
1328
- b[0] - a[0],
1329
- b[1] - a[1],
1330
- b[2] - a[2],
1331
- b[3] - a[3],
1332
- b[4] - a[4],
1333
- b[5] - a[5],
1334
- b[6] - a[6],
1335
- b[7] - a[7],
1336
- b[8] - a[8],
1337
- b[9] - a[9],
1338
- b[10] - a[10],
1339
- b[11] - a[11],
1340
- b[12] - a[12],
1341
- b[13] - a[13],
1342
- b[14] - a[14],
1343
- b[15] - a[15],
1344
- ];
1345
- }
1346
- mat4.delta = delta;
1347
- /**
1348
- * Multiply each element of the matrix by a scalar.
1349
- */
1350
- function multiplyScalar(a, s) {
1351
- return [
1352
- a[0] * s,
1353
- a[1] * s,
1354
- a[2] * s,
1355
- a[3] * s,
1356
- a[4] * s,
1357
- a[5] * s,
1358
- a[6] * s,
1359
- a[7] * s,
1360
- a[8] * s,
1361
- a[9] * s,
1362
- a[10] * s,
1363
- a[11] * s,
1364
- a[12] * s,
1365
- a[13] * s,
1366
- a[14] * s,
1367
- a[15] * s,
1368
- ];
1369
- }
1370
- mat4.multiplyScalar = multiplyScalar;
1371
- /**
1372
- Adds given mat4's after multiplying each element of the second operand by a scalar value.
1373
- */
1374
- function multiplyScalarAndAdd(a, b, scale) {
1375
- return [
1376
- a[0] + b[0] * scale,
1377
- a[1] + b[1] * scale,
1378
- a[2] + b[2] * scale,
1379
- a[3] + b[3] * scale,
1380
- a[4] + b[4] * scale,
1381
- a[5] + b[5] * scale,
1382
- a[6] + b[6] * scale,
1383
- a[7] + b[7] * scale,
1384
- a[8] + b[8] * scale,
1385
- a[9] + b[9] * scale,
1386
- a[10] + b[10] * scale,
1387
- a[11] + b[11] * scale,
1388
- a[12] + b[12] * scale,
1389
- a[13] + b[13] * scale,
1390
- a[14] + b[14] * scale,
1391
- a[15] + b[15] * scale,
1392
- ];
1393
- }
1394
- mat4.multiplyScalarAndAdd = multiplyScalarAndAdd;
1395
- /**
1396
- * Constrain each element to lie between min and max
1397
- * @see https://thebookofshaders.com/glossary/?search=clamp
1398
- */
1399
- function clamp(a, min, max) {
1400
- return [
1401
- Math.max(min, Math.min(max, a[0])),
1402
- Math.max(min, Math.min(max, a[1])),
1403
- Math.max(min, Math.min(max, a[2])),
1404
- Math.max(min, Math.min(max, a[3])),
1405
- Math.max(min, Math.min(max, a[4])),
1406
- Math.max(min, Math.min(max, a[5])),
1407
- Math.max(min, Math.min(max, a[6])),
1408
- Math.max(min, Math.min(max, a[7])),
1409
- Math.max(min, Math.min(max, a[8])),
1410
- Math.max(min, Math.min(max, a[9])),
1411
- Math.max(min, Math.min(max, a[10])),
1412
- Math.max(min, Math.min(max, a[11])),
1413
- Math.max(min, Math.min(max, a[12])),
1414
- Math.max(min, Math.min(max, a[13])),
1415
- Math.max(min, Math.min(max, a[14])),
1416
- Math.max(min, Math.min(max, a[15])),
1417
- ];
1418
- }
1419
- mat4.clamp = clamp;
1420
- /**
1421
- * Clamps each element to [0, 1]
1422
- */
1423
- function clamp01(a) {
1424
- return clamp(a, 0, 1);
1425
- }
1426
- mat4.clamp01 = clamp01;
1427
- /**
1428
- * Clamps each element to [-1, 1]
1429
- */
1430
- function clamp11(a) {
1431
- return clamp(a, -1, 1);
1432
- }
1433
- mat4.clamp11 = clamp11;
1434
- /**
1435
- * Returns whether or not the matrices have exactly the same elements in the same position (when compared with `===`)
1436
- *
1437
- * @shorthands
1438
- * - {@link eq}
1439
- */
1440
- function exactEquals(a, b) {
1441
- return (a[0] === b[0] &&
1442
- a[1] === b[1] &&
1443
- a[2] === b[2] &&
1444
- a[3] === b[3] &&
1445
- a[4] === b[4] &&
1446
- a[5] === b[5] &&
1447
- a[6] === b[6] &&
1448
- a[7] === b[7] &&
1449
- a[8] === b[8] &&
1450
- a[9] === b[9] &&
1451
- a[10] === b[10] &&
1452
- a[11] === b[11] &&
1453
- a[12] === b[12] &&
1454
- a[13] === b[13] &&
1455
- a[14] === b[14] &&
1456
- a[15] === b[15]);
1457
- }
1458
- mat4.exactEquals = exactEquals;
1459
- /**
1460
- * Alias for {@link exactEquals}
1461
- * @category Shorthands
1462
- */
1463
- mat4.eq = exactEquals;
1464
- /**
1465
- * Returns whether or not the matrices have approximately the same elements in the same position.
1466
- *
1467
- * @shorthands
1468
- * - {@link approx}
1469
- * - {@link equals}
1470
- */
1471
- function approxEquals(a, b) {
1472
- const [a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aA, aB, aC, aD, aE, aF] = a;
1473
- const [b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, bA, bB, bC, bD, bE, bF] = b;
1474
- return (Math.abs(a0 - b0) <=
1475
- Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
1476
- Math.abs(a1 - b1) <=
1477
- Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
1478
- Math.abs(a2 - b2) <=
1479
- Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&
1480
- Math.abs(a3 - b3) <=
1481
- Common.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) &&
1482
- Math.abs(a4 - b4) <=
1483
- Common.EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) &&
1484
- Math.abs(a5 - b5) <=
1485
- Common.EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)) &&
1486
- Math.abs(a6 - b6) <=
1487
- Common.EPSILON * Math.max(1, Math.abs(a6), Math.abs(b6)) &&
1488
- Math.abs(a7 - b7) <=
1489
- Common.EPSILON * Math.max(1, Math.abs(a7), Math.abs(b7)) &&
1490
- Math.abs(a8 - b8) <=
1491
- Common.EPSILON * Math.max(1, Math.abs(a8), Math.abs(b8)) &&
1492
- Math.abs(a9 - b9) <=
1493
- Common.EPSILON * Math.max(1, Math.abs(a9), Math.abs(b9)) &&
1494
- Math.abs(aA - bA) <=
1495
- Common.EPSILON * Math.max(1, Math.abs(aA), Math.abs(bA)) &&
1496
- Math.abs(aB - bB) <=
1497
- Common.EPSILON * Math.max(1, Math.abs(aB), Math.abs(bB)) &&
1498
- Math.abs(aC - bC) <=
1499
- Common.EPSILON * Math.max(1, Math.abs(aC), Math.abs(bC)) &&
1500
- Math.abs(aD - bD) <=
1501
- Common.EPSILON * Math.max(1, Math.abs(aD), Math.abs(bD)) &&
1502
- Math.abs(aE - bE) <=
1503
- Common.EPSILON * Math.max(1, Math.abs(aE), Math.abs(bE)) &&
1504
- Math.abs(aF - bF) <=
1505
- Common.EPSILON * Math.max(1, Math.abs(aF), Math.abs(bF)));
1506
- }
1507
- mat4.approxEquals = approxEquals;
1508
- /**
1509
- * Alias for {@link approxEquals}
1510
- * @category Shorthands
1511
- */
1512
- mat4.approx = approxEquals;
1513
- /**
1514
- * Alias for {@link approxEquals}. This is provided for compatibility with gl-matrix.
1515
- * @category Shorthands
1516
- * @deprecated Use {@link approxEquals} instead
1517
- */
1518
- mat4.equals = approxEquals;
1519
- /**
1520
- * Projects a 3D point from object/world space to screen (window) coordinates.
1521
- * Equivalent to GLM's `glm::project`.
1522
- *
1523
- * @param obj The 3D point in object/world space
1524
- * @param mvp The combined model-view-projection matrix
1525
- * @param viewport The viewport as [x, y, width, height]
1526
- * @returns The projected point in screen coordinates [x, y, z] where z is the depth in [0, 1]
1527
- */
1528
- function project(obj, mvp, viewport) {
1529
- const [x, y, z] = obj;
1530
- const cx = mvp[0] * x + mvp[4] * y + mvp[8] * z + mvp[12];
1531
- const cy = mvp[1] * x + mvp[5] * y + mvp[9] * z + mvp[13];
1532
- const cz = mvp[2] * x + mvp[6] * y + mvp[10] * z + mvp[14];
1533
- const cw = mvp[3] * x + mvp[7] * y + mvp[11] * z + mvp[15];
1534
- const invW = 1 / cw;
1535
- const nx = cx * invW;
1536
- const ny = cy * invW;
1537
- const nz = cz * invW;
1538
- return [
1539
- viewport[0] + viewport[2] * (nx * 0.5 + 0.5),
1540
- viewport[1] + viewport[3] * (ny * 0.5 + 0.5),
1541
- nz * 0.5 + 0.5,
1542
- ];
1543
- }
1544
- mat4.project = project;
1545
- /**
1546
- * Unprojects a point from screen (window) coordinates back to object/world space.
1547
- * Equivalent to GLM's `glm::unProject`.
1548
- *
1549
- * @param screen The screen-space point [x, y, z] where z is the depth in [0, 1]
1550
- * @param mvpInv The inverse of the combined model-view-projection matrix
1551
- * @param viewport The viewport as [x, y, width, height]
1552
- * @returns The unprojected 3D point, or null if the operation fails
1553
- */
1554
- function unProject(screen, mvpInv, viewport) {
1555
- const nx = (screen[0] - viewport[0]) / viewport[2] * 2 - 1;
1556
- const ny = (screen[1] - viewport[1]) / viewport[3] * 2 - 1;
1557
- const nz = screen[2] * 2 - 1;
1558
- const x = mvpInv[0] * nx + mvpInv[4] * ny + mvpInv[8] * nz + mvpInv[12];
1559
- const y = mvpInv[1] * nx + mvpInv[5] * ny + mvpInv[9] * nz + mvpInv[13];
1560
- const z = mvpInv[2] * nx + mvpInv[6] * ny + mvpInv[10] * nz + mvpInv[14];
1561
- const w = mvpInv[3] * nx + mvpInv[7] * ny + mvpInv[11] * nz + mvpInv[15];
1562
- if (Math.abs(w) < Common.EPSILON) {
1563
- return null;
1564
- }
1565
- const invW = 1 / w;
1566
- return [x * invW, y * invW, z * invW];
1567
- }
1568
- mat4.unProject = unProject;
1569
- /**
1570
- * Returns a string representation of a mat4
1571
- * @param m matrix to represent as a string
1572
- * @param fractionDigits number of digits to appear after the decimal point
1573
- */
1574
- mat4.toString = Common.createMatToStringFunction(4, 4);
1575
- })(mat4 || (exports.mat4 = mat4 = {}));
1576
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0NC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXQ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFrQztBQUdsQyxpQ0FBMkI7QUFvQjNCOzs7R0FHRztBQUNILElBQWlCLElBQUksQ0F3dkRwQjtBQXh2REQsV0FBaUIsSUFBSTtJQWFwQjs7O09BR0c7SUFDSCxrQkFBa0I7SUFDbEIsU0FBZ0IsRUFBRSxDQUNqQixHQUFXLEVBQUUsR0FBVyxFQUFFLEdBQVcsRUFBRSxHQUFXLEVBQ2xELEdBQVcsRUFBRSxHQUFXLEVBQUUsR0FBVyxFQUFFLEdBQVcsRUFDbEQsR0FBVyxFQUFFLEdBQVcsRUFBRSxHQUFXLEVBQUUsR0FBVyxFQUNsRCxHQUFXLEVBQUUsR0FBVyxFQUFFLEdBQVcsRUFBRSxHQUFXO1FBRWxELGtCQUFrQjtRQUNsQixPQUFPO1lBQ04sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztZQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1lBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7WUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztTQUNsQixDQUFBO0lBQ0YsQ0FBQztJQWJlLE9BQUUsS0FhakIsQ0FBQTtJQUVEOzs7T0FHRztJQUNILFNBQWdCLEtBQUssQ0FBQyxDQUFPO1FBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQ2QsQ0FBQztJQUZlLFVBQUssUUFFcEIsQ0FBQTtJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxrQkFBa0I7SUFDTCxhQUFRLEdBQVMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUMzQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ1YsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVB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QUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUVqQyw0QkFBNEI7UUFDNUIsTUFBTSxHQUFHLEdBQ1IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFFdEUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1YsT0FBTyxJQUFJLENBQUE7UUFDWixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtRQUV0QixPQUFPO1lBQ04sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07U0FDNUMsQ0FBQTtJQUNGLENBQUM7SUFqRGUsV0FBTSxTQWlEckIsQ0FBQTtJQUVEOzs7T0FHRztJQUNVLFFBQUcsR0FBRyxNQUFNLENBQUE7SUFFekI7O09BRUc7SUFDSCxTQUFnQixPQUFPLENBQUMsQ0FBTztRQUM5QixrQkFBa0I7UUFDbEIsTUFBTSxDQUNMLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUV4QixNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUVqQyxPQUFPO1lBQ04sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztZQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztZQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztZQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztZQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdB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QUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFeEIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBWSxDQUFBO1FBRWhDLG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRXhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBRWxELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDVCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUVsRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7UUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7UUFDbEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdB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Q2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUMxRSxDQUFDO2FBQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUN2QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUMvQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDMUUsQ0FBQzthQUFNLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUMxRSxDQUFDO2FBQU0sQ0FBQztZQUNQLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFD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Q0FBQztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcs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LEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFF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