linearly 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/lib/{common.d.ts → cjs/common.d.ts} +1 -0
  2. package/lib/cjs/common.d.ts.map +1 -0
  3. package/lib/cjs/common.js +20 -0
  4. package/lib/{index.d.ts → cjs/index.d.ts} +1 -0
  5. package/lib/cjs/index.d.ts.map +1 -0
  6. package/lib/cjs/index.js +35 -0
  7. package/lib/{mat2.d.ts → cjs/mat2.d.ts} +1 -0
  8. package/lib/cjs/mat2.d.ts.map +1 -0
  9. package/lib/cjs/mat2.js +224 -0
  10. package/lib/{mat2d.d.ts → cjs/mat2d.d.ts} +1 -0
  11. package/lib/cjs/mat2d.d.ts.map +1 -0
  12. package/lib/cjs/mat2d.js +291 -0
  13. package/lib/{mat3.d.ts → cjs/mat3.d.ts} +1 -0
  14. package/lib/cjs/mat3.d.ts.map +1 -0
  15. package/lib/cjs/mat3.js +450 -0
  16. package/lib/{mat4.d.ts → cjs/mat4.d.ts} +1 -0
  17. package/lib/cjs/mat4.d.ts.map +1 -0
  18. package/lib/cjs/mat4.js +1250 -0
  19. package/lib/{quat.d.ts → cjs/quat.d.ts} +1 -0
  20. package/lib/cjs/quat.d.ts.map +1 -0
  21. package/lib/cjs/quat.js +504 -0
  22. package/lib/{vec2.d.ts → cjs/vec2.d.ts} +1 -0
  23. package/lib/cjs/vec2.d.ts.map +1 -0
  24. package/lib/cjs/vec2.js +205 -0
  25. package/lib/{vec3.d.ts → cjs/vec3.d.ts} +1 -0
  26. package/lib/cjs/vec3.d.ts.map +1 -0
  27. package/lib/cjs/vec3.js +409 -0
  28. package/lib/{vec4.d.ts → cjs/vec4.d.ts} +1 -0
  29. package/lib/cjs/vec4.d.ts.map +1 -0
  30. package/lib/cjs/vec4.js +319 -0
  31. package/lib/esm/common.d.ts +12 -0
  32. package/lib/esm/common.d.ts.map +1 -0
  33. package/lib/esm/common.js +16 -0
  34. package/lib/esm/index.d.ts +17 -0
  35. package/lib/esm/index.d.ts.map +1 -0
  36. package/lib/esm/index.js +9 -0
  37. package/lib/esm/mat2.d.ts +91 -0
  38. package/lib/esm/mat2.d.ts.map +1 -0
  39. package/lib/esm/mat2.js +179 -0
  40. package/lib/esm/mat2d.d.ts +102 -0
  41. package/lib/esm/mat2d.d.ts.map +1 -0
  42. package/lib/esm/mat2d.js +246 -0
  43. package/lib/esm/mat3.d.ts +120 -0
  44. package/lib/esm/mat3.d.ts.map +1 -0
  45. package/lib/esm/mat3.js +400 -0
  46. package/lib/esm/mat4.d.ts +313 -0
  47. package/lib/esm/mat4.d.ts.map +1 -0
  48. package/lib/esm/mat4.js +1183 -0
  49. package/lib/esm/quat.d.ts +220 -0
  50. package/lib/esm/quat.d.ts.map +1 -0
  51. package/lib/esm/quat.js +458 -0
  52. package/lib/esm/vec2.d.ts +66 -0
  53. package/lib/esm/vec2.d.ts.map +1 -0
  54. package/lib/esm/vec2.js +149 -0
  55. package/lib/esm/vec3.d.ts +167 -0
  56. package/lib/esm/vec3.d.ts.map +1 -0
  57. package/lib/esm/vec3.js +348 -0
  58. package/lib/esm/vec4.d.ts +116 -0
  59. package/lib/esm/vec4.d.ts.map +1 -0
  60. package/lib/esm/vec4.js +266 -0
  61. package/package.json +6 -4
  62. package/lib/common.js +0 -30
  63. package/lib/index.js +0 -45
  64. package/lib/mat2.js +0 -234
  65. package/lib/mat2d.js +0 -301
  66. package/lib/mat2d.test.d.ts +0 -1
  67. package/lib/mat2d.test.js +0 -123
  68. package/lib/mat3.js +0 -460
  69. package/lib/mat4.js +0 -1260
  70. package/lib/quat.js +0 -514
  71. package/lib/vec2.js +0 -215
  72. package/lib/vec2.test.d.ts +0 -1
  73. package/lib/vec2.test.js +0 -147
  74. package/lib/vec3.js +0 -419
  75. package/lib/vec3.test.d.ts +0 -1
  76. package/lib/vec3.test.js +0 -149
  77. package/lib/vec4.js +0 -329
  78. package/lib/vec4.test.d.ts +0 -1
  79. package/lib/vec4.test.js +0 -45
@@ -0,0 +1,1183 @@
1
+ import * as Common from './common';
2
+ // prettier-ignore
3
+ export function of(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
4
+ // prettier-ignore
5
+ return [
6
+ m00, m01, m02, m03,
7
+ m10, m11, m12, m13,
8
+ m20, m21, m22, m23,
9
+ m30, m31, m32, m33,
10
+ ];
11
+ }
12
+ /**
13
+ * The identity matrix of mat4
14
+ */
15
+ // prettier-ignore
16
+ export const identity = Object.freeze([
17
+ 1, 0, 0, 0,
18
+ 0, 1, 0, 0,
19
+ 0, 0, 1, 0,
20
+ 0, 0, 0, 1,
21
+ ]);
22
+ export const zero = Object.freeze([
23
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
24
+ ]);
25
+ /**
26
+ * Transpose the values of a mat4
27
+ */
28
+ export function transpose(a) {
29
+ // prettier-ignore
30
+ return [
31
+ a[0], a[4], a[8], a[12],
32
+ a[1], a[5], a[9], a[13],
33
+ a[2], a[6], a[10], a[14],
34
+ a[3], a[7], a[11], a[15],
35
+ ];
36
+ }
37
+ /**
38
+ * Inverts a mat4
39
+ */
40
+ export function invert(a) {
41
+ // prettier-ignore
42
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
43
+ const b00 = a00 * a11 - a01 * a10;
44
+ const b01 = a00 * a12 - a02 * a10;
45
+ const b02 = a00 * a13 - a03 * a10;
46
+ const b03 = a01 * a12 - a02 * a11;
47
+ const b04 = a01 * a13 - a03 * a11;
48
+ const b05 = a02 * a13 - a03 * a12;
49
+ const b06 = a20 * a31 - a21 * a30;
50
+ const b07 = a20 * a32 - a22 * a30;
51
+ const b08 = a20 * a33 - a23 * a30;
52
+ const b09 = a21 * a32 - a22 * a31;
53
+ const b10 = a21 * a33 - a23 * a31;
54
+ const b11 = a22 * a33 - a23 * a32;
55
+ // Calculate the determinant
56
+ const det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
57
+ if (!det) {
58
+ return null;
59
+ }
60
+ const detinv = 1 / det;
61
+ return [
62
+ (a11 * b11 - a12 * b10 + a13 * b09) * detinv,
63
+ (a02 * b10 - a01 * b11 - a03 * b09) * detinv,
64
+ (a31 * b05 - a32 * b04 + a33 * b03) * detinv,
65
+ (a22 * b04 - a21 * b05 - a23 * b03) * detinv,
66
+ (a12 * b08 - a10 * b11 - a13 * b07) * detinv,
67
+ (a00 * b11 - a02 * b08 + a03 * b07) * detinv,
68
+ (a32 * b02 - a30 * b05 - a33 * b01) * detinv,
69
+ (a20 * b05 - a22 * b02 + a23 * b01) * detinv,
70
+ (a10 * b10 - a11 * b08 + a13 * b06) * detinv,
71
+ (a01 * b08 - a00 * b10 - a03 * b06) * detinv,
72
+ (a30 * b04 - a31 * b02 + a33 * b00) * detinv,
73
+ (a21 * b02 - a20 * b04 - a23 * b00) * detinv,
74
+ (a11 * b07 - a10 * b09 - a12 * b06) * detinv,
75
+ (a00 * b09 - a01 * b07 + a02 * b06) * detinv,
76
+ (a31 * b01 - a30 * b03 - a32 * b00) * detinv,
77
+ (a20 * b03 - a21 * b01 + a22 * b00) * detinv,
78
+ ];
79
+ }
80
+ /**
81
+ * Calculates the adjugate of a mat4
82
+ */
83
+ export function adjoint(a) {
84
+ // prettier-ignore
85
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
86
+ const b00 = a00 * a11 - a01 * a10;
87
+ const b01 = a00 * a12 - a02 * a10;
88
+ const b02 = a00 * a13 - a03 * a10;
89
+ const b03 = a01 * a12 - a02 * a11;
90
+ const b04 = a01 * a13 - a03 * a11;
91
+ const b05 = a02 * a13 - a03 * a12;
92
+ const b06 = a20 * a31 - a21 * a30;
93
+ const b07 = a20 * a32 - a22 * a30;
94
+ const b08 = a20 * a33 - a23 * a30;
95
+ const b09 = a21 * a32 - a22 * a31;
96
+ const b10 = a21 * a33 - a23 * a31;
97
+ const b11 = a22 * a33 - a23 * a32;
98
+ return [
99
+ a11 * b11 - a12 * b10 + a13 * b09,
100
+ a02 * b10 - a01 * b11 - a03 * b09,
101
+ a31 * b05 - a32 * b04 + a33 * b03,
102
+ a22 * b04 - a21 * b05 - a23 * b03,
103
+ a12 * b08 - a10 * b11 - a13 * b07,
104
+ a00 * b11 - a02 * b08 + a03 * b07,
105
+ a32 * b02 - a30 * b05 - a33 * b01,
106
+ a20 * b05 - a22 * b02 + a23 * b01,
107
+ a10 * b10 - a11 * b08 + a13 * b06,
108
+ a01 * b08 - a00 * b10 - a03 * b06,
109
+ a30 * b04 - a31 * b02 + a33 * b00,
110
+ a21 * b02 - a20 * b04 - a23 * b00,
111
+ a11 * b07 - a10 * b09 - a12 * b06,
112
+ a00 * b09 - a01 * b07 + a02 * b06,
113
+ a31 * b01 - a30 * b03 - a32 * b00,
114
+ a20 * b03 - a21 * b01 + a22 * b00,
115
+ ];
116
+ }
117
+ /**
118
+ * Calculates the determinant of a mat4
119
+ */
120
+ export function determinant(a) {
121
+ // prettier-ignore
122
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
123
+ const b0 = a00 * a11 - a01 * a10;
124
+ const b1 = a00 * a12 - a02 * a10;
125
+ const b2 = a01 * a12 - a02 * a11;
126
+ const b3 = a20 * a31 - a21 * a30;
127
+ const b4 = a20 * a32 - a22 * a30;
128
+ const b5 = a21 * a32 - a22 * a31;
129
+ const b6 = a00 * b5 - a01 * b4 + a02 * b3;
130
+ const b7 = a10 * b5 - a11 * b4 + a12 * b3;
131
+ const b8 = a20 * b2 - a21 * b1 + a22 * b0;
132
+ const b9 = a30 * b2 - a31 * b1 + a32 * b0;
133
+ // Calculate the determinant
134
+ return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;
135
+ }
136
+ /**
137
+ * Multiplies two mat4's
138
+ */
139
+ export function multiply(a, b) {
140
+ // prettier-ignore
141
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
142
+ const out = Array(16);
143
+ // Cache only the current line of the second matrix
144
+ let [b0, b1, b2, b3] = b;
145
+ out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
146
+ out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
147
+ out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
148
+ out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
149
+ b0 = b[4];
150
+ b1 = b[5];
151
+ b2 = b[6];
152
+ b3 = b[7];
153
+ out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
154
+ out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
155
+ out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
156
+ out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
157
+ b0 = b[8];
158
+ b1 = b[9];
159
+ b2 = b[10];
160
+ b3 = b[11];
161
+ out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
162
+ out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
163
+ out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
164
+ out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
165
+ b0 = b[12];
166
+ b1 = b[13];
167
+ b2 = b[14];
168
+ b3 = b[15];
169
+ out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
170
+ out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
171
+ out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
172
+ out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
173
+ return out;
174
+ }
175
+ /**
176
+ * Translate a mat4 by the given vector
177
+ *
178
+ * @param a the matrix to translate
179
+ * @param v vector to translate by
180
+ */
181
+ export function translate(a, v) {
182
+ const [x, y, z] = v;
183
+ // prettier-ignore
184
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23] = a;
185
+ // prettier-ignore
186
+ return [
187
+ a00, a01, a02, a03,
188
+ a10, a11, a12, a13,
189
+ a20, a21, a22, a23,
190
+ a00 * x + a10 * y + a20 * z + a[12],
191
+ a01 * x + a11 * y + a21 * z + a[13],
192
+ a02 * x + a12 * y + a22 * z + a[14],
193
+ a03 * x + a13 * y + a23 * z + a[15],
194
+ ];
195
+ }
196
+ /**
197
+ * Scales the mat4 by the dimensions in the given vec3 not using vectorization
198
+ **/
199
+ export function scale(a, v) {
200
+ const [x, y, z] = v;
201
+ // prettier-ignore
202
+ return [
203
+ a[0] * x, a[1] * x, a[2] * x, a[3] * x,
204
+ a[4] * y, a[5] * y, a[6] * y, a[7] * y,
205
+ a[8] * z, a[9] * z, a[10] * z, a[11] * z,
206
+ a[12], a[13], a[14], a[15],
207
+ ];
208
+ }
209
+ /**
210
+ * Rotates a mat4 by the given angle around the given axis
211
+ */
212
+ export function rotate(a, rad, axis) {
213
+ let [x, y, z] = axis;
214
+ const len = Math.sqrt(x * x + y * y + z * z);
215
+ if (len < Common.EPSILON) {
216
+ return null;
217
+ }
218
+ x /= len;
219
+ y /= len;
220
+ z /= len;
221
+ const s = Math.sin(rad);
222
+ const c = Math.cos(rad);
223
+ const t = 1 - c;
224
+ // prettier-ignore
225
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23] = a;
226
+ // Construct the elements of the rotation matrix
227
+ const b00 = x * x * t + c;
228
+ const b01 = y * x * t + z * s;
229
+ const b02 = z * x * t - y * s;
230
+ const b10 = x * y * t - z * s;
231
+ const b11 = y * y * t + c;
232
+ const b12 = z * y * t + x * s;
233
+ const b20 = x * z * t + y * s;
234
+ const b21 = y * z * t - x * s;
235
+ const b22 = z * z * t + c;
236
+ // prettier-ignore
237
+ return [
238
+ a00 * b00 + a10 * b01 + a20 * b02,
239
+ a01 * b00 + a11 * b01 + a21 * b02,
240
+ a02 * b00 + a12 * b01 + a22 * b02,
241
+ a03 * b00 + a13 * b01 + a23 * b02,
242
+ a00 * b10 + a10 * b11 + a20 * b12,
243
+ a01 * b10 + a11 * b11 + a21 * b12,
244
+ a02 * b10 + a12 * b11 + a22 * b12,
245
+ a03 * b10 + a13 * b11 + a23 * b12,
246
+ a00 * b20 + a10 * b21 + a20 * b22,
247
+ a01 * b20 + a11 * b21 + a21 * b22,
248
+ a02 * b20 + a12 * b21 + a22 * b22,
249
+ a03 * b20 + a13 * b21 + a23 * b22,
250
+ a[12], a[13], a[14], a[15],
251
+ ];
252
+ }
253
+ /**
254
+ * Rotates a matrix by the given angle around the X axis
255
+ */
256
+ export function rotateX(a, rad) {
257
+ const s = Math.sin(rad);
258
+ const c = Math.cos(rad);
259
+ const a10 = a[4];
260
+ const a11 = a[5];
261
+ const a12 = a[6];
262
+ const a13 = a[7];
263
+ const a20 = a[8];
264
+ const a21 = a[9];
265
+ const a22 = a[10];
266
+ const a23 = a[11];
267
+ // prettier-ignore
268
+ return [
269
+ a[0], a[1], a[2], a[3],
270
+ a10 * c + a20 * s, a11 * c + a21 * s, a12 * c + a22 * s, a13 * c + a23 * s,
271
+ a20 * c - a10 * s, a21 * c - a11 * s, a22 * c - a12 * s, a23 * c - a13 * s,
272
+ a[12], a[13], a[14], a[15],
273
+ ];
274
+ }
275
+ /**
276
+ * Rotates a matrix by the given angle around the Y axis
277
+ */
278
+ export function rotateY(a, rad) {
279
+ const s = Math.sin(rad);
280
+ const c = Math.cos(rad);
281
+ const a00 = a[0];
282
+ const a01 = a[1];
283
+ const a02 = a[2];
284
+ const a03 = a[3];
285
+ const a20 = a[8];
286
+ const a21 = a[9];
287
+ const a22 = a[10];
288
+ const a23 = a[11];
289
+ // prettier-ignore
290
+ return [
291
+ a00 * c - a20 * s,
292
+ a01 * c - a21 * s,
293
+ a02 * c - a22 * s,
294
+ a03 * c - a23 * s,
295
+ a[4], a[5], a[6], a[7],
296
+ a00 * s + a20 * c,
297
+ a01 * s + a21 * c,
298
+ a02 * s + a22 * c,
299
+ a03 * s + a23 * c,
300
+ a[12], a[13], a[14], a[15],
301
+ ];
302
+ }
303
+ /**
304
+ * Rotates a matrix by the given angle around the Z axis
305
+ */
306
+ export function rotateZ(a, rad) {
307
+ const s = Math.sin(rad);
308
+ const c = Math.cos(rad);
309
+ const a00 = a[0];
310
+ const a01 = a[1];
311
+ const a02 = a[2];
312
+ const a03 = a[3];
313
+ const a10 = a[4];
314
+ const a11 = a[5];
315
+ const a12 = a[6];
316
+ const a13 = a[7];
317
+ // prettier-ignore
318
+ return [
319
+ a00 * c + a10 * s,
320
+ a01 * c + a11 * s,
321
+ a02 * c + a12 * s,
322
+ a03 * c + a13 * s,
323
+ a10 * c - a00 * s,
324
+ a11 * c - a01 * s,
325
+ a12 * c - a02 * s,
326
+ a13 * c - a03 * s,
327
+ a[8], a[9], a[10], a[11],
328
+ a[12], a[13], a[14], a[15],
329
+ ];
330
+ }
331
+ /**
332
+ * Creates a matrix from a vector translation
333
+ */
334
+ export function fromTranslation(v) {
335
+ const [x, y, z] = v;
336
+ // prettier-ignore
337
+ return [
338
+ 1, 0, 0, 0,
339
+ 0, 1, 0, 0,
340
+ 0, 0, 1, 0,
341
+ x, y, z, 1,
342
+ ];
343
+ }
344
+ /**
345
+ * Creates a matrix from a vector scaling
346
+ */
347
+ export function fromScaling(v) {
348
+ const [x, y, z] = v;
349
+ // prettier-ignore
350
+ return [
351
+ x, 0, 0, 0,
352
+ 0, y, 0, 0,
353
+ 0, 0, z, 0,
354
+ 0, 0, 0, 1
355
+ ];
356
+ }
357
+ /**
358
+ * Creates a matrix from a given angle around a given axis
359
+ */
360
+ export function fromRotation(rad, axis) {
361
+ let [x, y, z] = axis;
362
+ const len = Math.sqrt(x * x + y * y + z * z);
363
+ if (len < Common.EPSILON) {
364
+ return null;
365
+ }
366
+ x /= len;
367
+ y /= len;
368
+ z /= len;
369
+ const s = Math.sin(rad);
370
+ const c = Math.cos(rad);
371
+ const t = 1 - c;
372
+ // prettier-ignore
373
+ return [
374
+ x * x * t + c,
375
+ y * x * t + z * s,
376
+ z * x * t - y * s,
377
+ 0,
378
+ x * y * t - z * s,
379
+ y * y * t + c,
380
+ z * y * t + x * s,
381
+ 0,
382
+ x * z * t + y * s,
383
+ y * z * t - x * s,
384
+ z * z * t + c,
385
+ 0,
386
+ 0, 0, 0, 1,
387
+ ];
388
+ }
389
+ /**
390
+ * Creates a matrix from the given angle around the X axis
391
+ */
392
+ export function fromXRotation(rad) {
393
+ const s = Math.sin(rad);
394
+ const c = Math.cos(rad);
395
+ // prettier-ignore
396
+ return [
397
+ 1, 0, 0, 0,
398
+ 0, c, s, 0,
399
+ 0, -s, c, 0,
400
+ 0, 0, 0, 1
401
+ ];
402
+ }
403
+ /**
404
+ * Creates a matrix from the given angle around the Y axis
405
+ */
406
+ export function fromYRotation(rad) {
407
+ const s = Math.sin(rad);
408
+ const c = Math.cos(rad);
409
+ // prettier-ignore
410
+ return [
411
+ c, 0, -s, 0,
412
+ 0, 1, 0, 0,
413
+ s, 0, c, 0,
414
+ 0, 0, 0, 1
415
+ ];
416
+ }
417
+ /**
418
+ * Creates a matrix from the given angle around the Z axis
419
+ */
420
+ export function fromZRotation(rad) {
421
+ const s = Math.sin(rad);
422
+ const c = Math.cos(rad);
423
+ // prettier-ignore
424
+ return [
425
+ c, s, 0, 0,
426
+ -s, c, 0, 0,
427
+ 0, 0, 1, 0,
428
+ 0, 0, 0, 1
429
+ ];
430
+ }
431
+ /**
432
+ * Creates a matrix from a quaternion rotation and vector translation
433
+ */
434
+ export function fromRotationTranslation(q, v) {
435
+ // Quaternion math
436
+ const [x, y, z, w] = q;
437
+ const x2 = x + x;
438
+ const y2 = y + y;
439
+ const z2 = z + z;
440
+ const xx = x * x2;
441
+ const xy = x * y2;
442
+ const xz = x * z2;
443
+ const yy = y * y2;
444
+ const yz = y * z2;
445
+ const zz = z * z2;
446
+ const wx = w * x2;
447
+ const wy = w * y2;
448
+ const wz = w * z2;
449
+ return [
450
+ 1 - (yy + zz),
451
+ xy + wz,
452
+ xz - wy,
453
+ 0,
454
+ xy - wz,
455
+ 1 - (xx + zz),
456
+ yz + wx,
457
+ 0,
458
+ xz + wy,
459
+ yz - wx,
460
+ 1 - (xx + yy),
461
+ 0,
462
+ v[0],
463
+ v[1],
464
+ v[2],
465
+ 1,
466
+ ];
467
+ }
468
+ /**
469
+ * Returns the translation vector component of a transformation
470
+ * matrix. If a matrix is built with fromRotationTranslation,
471
+ * the returned vector will be the same as the translation vector
472
+ * originally supplied.
473
+ */
474
+ export function getTranslation(mat) {
475
+ return [mat[12], mat[13], mat[14]];
476
+ }
477
+ /**
478
+ * Returns the scaling factor component of a transformation
479
+ * matrix. If a matrix is built with fromRotationTranslationScale
480
+ * with a normalized Quaternion paramter, the returned vector will be
481
+ * the same as the scaling vector
482
+ * originally supplied.
483
+ */
484
+ export function getScaling(mat) {
485
+ // prettier-ignore
486
+ const [m11, m12, m13, , m21, m22, m23, , m31, m32, m33,] = mat;
487
+ return [
488
+ Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13),
489
+ Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23),
490
+ Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33),
491
+ ];
492
+ }
493
+ /**
494
+ * Returns a quaternion representing the rotational component
495
+ * of a transformation matrix. If a matrix is built with
496
+ * fromRotationTranslation, the returned quaternion will be the
497
+ * same as the quaternion originally supplied.
498
+ */
499
+ export function getRotation(mat) {
500
+ const scaling = getScaling(mat);
501
+ const is1 = 1 / scaling[0];
502
+ const is2 = 1 / scaling[1];
503
+ const is3 = 1 / scaling[2];
504
+ const sm11 = mat[0] * is1;
505
+ const sm12 = mat[1] * is2;
506
+ const sm13 = mat[2] * is3;
507
+ const sm21 = mat[4] * is1;
508
+ const sm22 = mat[5] * is2;
509
+ const sm23 = mat[6] * is3;
510
+ const sm31 = mat[8] * is1;
511
+ const sm32 = mat[9] * is2;
512
+ const sm33 = mat[10] * is3;
513
+ const trace = sm11 + sm22 + sm33;
514
+ if (trace > 0) {
515
+ const S = Math.sqrt(trace + 1) * 2;
516
+ return [(sm23 - sm32) / S, (sm31 - sm13) / S, (sm12 - sm21) / S, 0.25 * S];
517
+ }
518
+ else if (sm11 > sm22 && sm11 > sm33) {
519
+ const S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
520
+ return [0.25 * S, (sm12 + sm21) / S, (sm31 + sm13) / S, (sm23 - sm32) / S];
521
+ }
522
+ else if (sm22 > sm33) {
523
+ const S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
524
+ return [(sm12 + sm21) / S, 0.25 * S, (sm23 + sm32) / S, (sm31 - sm13) / S];
525
+ }
526
+ else {
527
+ const S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
528
+ return [(sm31 + sm13) / S, (sm23 + sm32) / S, 0.25 * S, (sm12 - sm21) / S];
529
+ }
530
+ }
531
+ /**
532
+ * Decomposes a transformation matrix into its rotation, translation
533
+ * and scale components. Returns only the rotation component
534
+ *
535
+ * @param mat Matrix to be decomposed (input)
536
+ */
537
+ export function decompose(mat) {
538
+ const trans = [mat[12], mat[13], mat[14]];
539
+ // prettier-ignore
540
+ const [m11, m12, m13, , m21, m22, m23, , m31, m32, m33,] = mat;
541
+ const scale = [
542
+ Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13),
543
+ Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23),
544
+ Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33),
545
+ ];
546
+ const is1 = 1 / scale[0];
547
+ const is2 = 1 / scale[1];
548
+ const is3 = 1 / scale[2];
549
+ const sm11 = m11 * is1;
550
+ const sm12 = m12 * is2;
551
+ const sm13 = m13 * is3;
552
+ const sm21 = m21 * is1;
553
+ const sm22 = m22 * is2;
554
+ const sm23 = m23 * is3;
555
+ const sm31 = m31 * is1;
556
+ const sm32 = m32 * is2;
557
+ const sm33 = m33 * is3;
558
+ const trace = sm11 + sm22 + sm33;
559
+ let rot;
560
+ if (trace > 0) {
561
+ const S = Math.sqrt(trace + 1) * 2;
562
+ rot = [(sm23 - sm32) / S, (sm31 - sm13) / S, (sm12 - sm21) / S, 0.25 * S];
563
+ }
564
+ else if (sm11 > sm22 && sm11 > sm33) {
565
+ const S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
566
+ rot = [0.25 * S, (sm12 + sm21) / S, (sm31 + sm13) / S, (sm23 - sm32) / S];
567
+ }
568
+ else if (sm22 > sm33) {
569
+ const S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
570
+ rot = [(sm12 + sm21) / S, 0.25 * S, (sm23 + sm32) / S, (sm31 - sm13) / S];
571
+ }
572
+ else {
573
+ const S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
574
+ rot = [(sm31 + sm13) / S, (sm23 + sm32) / S, 0.25 * S, (sm12 - sm21) / S];
575
+ }
576
+ return {
577
+ trans,
578
+ rot,
579
+ scale,
580
+ };
581
+ }
582
+ /**
583
+ * Creates a matrix from a quaternion rotation, vector translation and vector scale
584
+ * This is equivalent to (but much faster than):
585
+ *
586
+ * mat4.identity(dest);
587
+ * mat4.translate(dest, vec);
588
+ * const quatMat = mat4.create();
589
+ * quat4.toMat4(quat, quatMat);
590
+ * mat4.multiply(dest, quatMat);
591
+ * mat4.scale(dest, scale)
592
+ *
593
+ * @param rot Rotation quaternion
594
+ * @param trans Translation vector
595
+ * @param scale Scaling vector
596
+ */
597
+ export function fromRotationTranslationScale(rot, trans, scale) {
598
+ // Quaternion math
599
+ const [x, y, z, w] = rot;
600
+ const x2 = x + x;
601
+ const y2 = y + y;
602
+ const z2 = z + z;
603
+ const xx = x * x2;
604
+ const xy = x * y2;
605
+ const xz = x * z2;
606
+ const yy = y * y2;
607
+ const yz = y * z2;
608
+ const zz = z * z2;
609
+ const wx = w * x2;
610
+ const wy = w * y2;
611
+ const wz = w * z2;
612
+ const sx = scale[0];
613
+ const sy = scale[1];
614
+ const sz = scale[2];
615
+ return [
616
+ (1 - (yy + zz)) * sx,
617
+ (xy + wz) * sx,
618
+ (xz - wy) * sx,
619
+ 0,
620
+ (xy - wz) * sy,
621
+ (1 - (xx + zz)) * sy,
622
+ (yz + wx) * sy,
623
+ 0,
624
+ (xz + wy) * sz,
625
+ (yz - wx) * sz,
626
+ (1 - (xx + yy)) * sz,
627
+ 0,
628
+ trans[0],
629
+ trans[1],
630
+ trans[2],
631
+ 1,
632
+ ];
633
+ }
634
+ /**
635
+ * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin
636
+ * This is equivalent to (but much faster than):
637
+ *
638
+ * mat4.identity(dest);
639
+ * mat4.translate(dest, vec);
640
+ * mat4.translate(dest, origin);
641
+ * const quatMat = mat4.create();
642
+ * quat4.toMat4(quat, quatMat);
643
+ * mat4.multiply(dest, quatMat);
644
+ * mat4.scale(dest, scale)
645
+ * mat4.translate(dest, negativeOrigin);
646
+ *
647
+ * @param rot Rotation quaternion
648
+ * @param trans Translation vector
649
+ * @param scale Scaling vector
650
+ * @param origin The origin vector around which to scale and rotate
651
+ */
652
+ export function fromRotationTranslationScaleOrigin(rot, trans, scale, origin) {
653
+ // Quaternion math
654
+ const [x, y, z, w] = rot;
655
+ const x2 = x + x;
656
+ const y2 = y + y;
657
+ const z2 = z + z;
658
+ const xx = x * x2;
659
+ const xy = x * y2;
660
+ const xz = x * z2;
661
+ const yy = y * y2;
662
+ const yz = y * z2;
663
+ const zz = z * z2;
664
+ const wx = w * x2;
665
+ const wy = w * y2;
666
+ const wz = w * z2;
667
+ const sx = scale[0];
668
+ const sy = scale[1];
669
+ const sz = scale[2];
670
+ const ox = origin[0];
671
+ const oy = origin[1];
672
+ const oz = origin[2];
673
+ const out0 = (1 - (yy + zz)) * sx;
674
+ const out1 = (xy + wz) * sx;
675
+ const out2 = (xz - wy) * sx;
676
+ const out4 = (xy - wz) * sy;
677
+ const out5 = (1 - (xx + zz)) * sy;
678
+ const out6 = (yz + wx) * sy;
679
+ const out8 = (xz + wy) * sz;
680
+ const out9 = (yz - wx) * sz;
681
+ const out10 = (1 - (xx + yy)) * sz;
682
+ // prettier-ignore
683
+ return [
684
+ out0, out1, out2, 0,
685
+ out4, out5, out6, 0,
686
+ out8, out9, out10, 0,
687
+ trans[0] + ox - (out0 * ox + out4 * oy + out8 * oz),
688
+ trans[1] + oy - (out1 * ox + out5 * oy + out9 * oz),
689
+ trans[2] + oz - (out2 * ox + out6 * oy + out10 * oz),
690
+ 1,
691
+ ];
692
+ }
693
+ /**
694
+ * Calculates a 4x4 matrix from the given quaternion
695
+ *
696
+ * @param q Quaternion to create matrix from
697
+ */
698
+ export function fromQuat(q) {
699
+ const [x, y, z, w] = q;
700
+ const x2 = x + x;
701
+ const y2 = y + y;
702
+ const z2 = z + z;
703
+ const xx = x * x2;
704
+ const yx = y * x2;
705
+ const yy = y * y2;
706
+ const zx = z * x2;
707
+ const zy = z * y2;
708
+ const zz = z * z2;
709
+ const wx = w * x2;
710
+ const wy = w * y2;
711
+ const wz = w * z2;
712
+ // prettier-ignore
713
+ return [
714
+ 1 - yy - zz,
715
+ yx + wz,
716
+ zx - wy,
717
+ 0,
718
+ yx - wz,
719
+ 1 - xx - zz,
720
+ zy + wx,
721
+ 0,
722
+ zx + wy,
723
+ zy - wx,
724
+ 1 - xx - yy,
725
+ 0,
726
+ 0, 0, 0, 1,
727
+ ];
728
+ }
729
+ /**
730
+ * Generates a frustum matrix with the given bounds
731
+ *
732
+ * @param left Left bound of the frustum
733
+ * @param right Right bound of the frustum
734
+ * @param bottom Bottom bound of the frustum
735
+ * @param top Top bound of the frustum
736
+ * @param near Near bound of the frustum
737
+ * @param far Far bound of the frustum
738
+ */
739
+ export function frustum(left, right, bottom, top, near, far) {
740
+ const rl = 1 / (right - left);
741
+ const tb = 1 / (top - bottom);
742
+ const nf = 1 / (near - far);
743
+ // prettier-ignore
744
+ return [
745
+ near * 2 * rl, 0, 0, 0,
746
+ 0, near * 2 * tb, 0, 0,
747
+ (right + left) * rl, (top + bottom) * tb, (far + near) * nf, -1,
748
+ 0, 0, far * near * 2 * nf, 0,
749
+ ];
750
+ }
751
+ /**
752
+ * Generates a perspective projection matrix with the given bounds.
753
+ * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],
754
+ * which matches WebGL/OpenGL's clip volume.
755
+ * Passing null/undefined/no value for far will generate infinite projection matrix.
756
+ *
757
+ * @param fovy Vertical field of view in radians
758
+ * @param aspect Aspect ratio. typically viewport width/height
759
+ * @param near Near bound of the frustum
760
+ * @param far Far bound of the frustum, can be null or Infinity
761
+ */
762
+ export function perspectiveNO(fovy, aspect, near, far) {
763
+ const f = 1 / Math.tan(fovy / 2);
764
+ let out10, out14;
765
+ if (far !== null && far !== Infinity) {
766
+ const nf = 1 / (near - far);
767
+ out10 = (far + near) * nf;
768
+ out14 = 2 * far * near * nf;
769
+ }
770
+ else {
771
+ out10 = -1;
772
+ out14 = -2 * near;
773
+ }
774
+ // prettier-ignore
775
+ return [
776
+ f / aspect, 0, 0, 0,
777
+ 0, f, 0, 0,
778
+ 0, 0, out10, -1,
779
+ 0, 0, out14, 0,
780
+ ];
781
+ }
782
+ /**
783
+ * Alias for {@link mat4.perspectiveNO}
784
+ * @function
785
+ */
786
+ export const perspective = perspectiveNO;
787
+ /**
788
+ * Generates a perspective projection matrix suitable for WebGPU with the given bounds.
789
+ * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],
790
+ * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.
791
+ * Passing null/undefined/no value for far will generate infinite projection matrix.
792
+ *
793
+ * @param fovy Vertical field of view in radians
794
+ * @param aspect Aspect ratio. typically viewport width/height
795
+ * @param near Near bound of the frustum
796
+ * @param far Far bound of the frustum, can be null or Infinity
797
+ */
798
+ export function perspectiveZO(fovy, aspect, near, far) {
799
+ const f = 1 / Math.tan(fovy / 2);
800
+ let out10, out14;
801
+ if (far !== null && far !== Infinity) {
802
+ const nf = 1 / (near - far);
803
+ out10 = far * nf;
804
+ out14 = far * near * nf;
805
+ }
806
+ else {
807
+ out10 = -1;
808
+ out14 = -near;
809
+ }
810
+ return [f / aspect, 0, 0, 0, 0, f, 0, 0, 0, 0, out10, -1, 0, 0, out14, 0];
811
+ }
812
+ /**
813
+ * Generates a perspective projection matrix with the given field of view.
814
+ * This is primarily useful for generating projection matrices to be used
815
+ * with the still experiemental WebVR API.
816
+ *
817
+ * @param fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees
818
+ * @param near Near bound of the frustum
819
+ * @param far Far bound of the frustum
820
+ */
821
+ export function perspectiveFromFieldOfView(fov, near, far) {
822
+ const upTan = Math.tan((fov.upDegrees * Math.PI) / 180);
823
+ const downTan = Math.tan((fov.downDegrees * Math.PI) / 180);
824
+ const leftTan = Math.tan((fov.leftDegrees * Math.PI) / 180);
825
+ const rightTan = Math.tan((fov.rightDegrees * Math.PI) / 180);
826
+ const xScale = 2 / (leftTan + rightTan);
827
+ const yScale = 2 / (upTan + downTan);
828
+ // prettier-ignore
829
+ return [
830
+ xScale, 0, 0, 0,
831
+ 0, yScale, 0, 0,
832
+ -((leftTan - rightTan) * xScale * 0.5),
833
+ (upTan - downTan) * yScale * 0.5,
834
+ far / (near - far),
835
+ -1,
836
+ 0,
837
+ 0,
838
+ (far * near) / (near - far),
839
+ 0,
840
+ ];
841
+ }
842
+ /**
843
+ * Generates a orthogonal projection matrix with the given bounds.
844
+ * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],
845
+ * which matches WebGL/OpenGL's clip volume.
846
+ *
847
+ * @param left Left bound of the frustum
848
+ * @param right Right bound of the frustum
849
+ * @param bottom Bottom bound of the frustum
850
+ * @param top Top bound of the frustum
851
+ * @param near Near bound of the frustum
852
+ * @param far Far bound of the frustum
853
+ */
854
+ export function orthoNO(left, right, bottom, top, near, far) {
855
+ const lr = 1 / (left - right);
856
+ const bt = 1 / (bottom - top);
857
+ const nf = 1 / (near - far);
858
+ // prettier-ignore
859
+ return [
860
+ -2 * lr, 0, 0, 0,
861
+ 0, -2 * bt, 0, 0,
862
+ 0, 0, 2 * nf, 0,
863
+ (left + right) * lr,
864
+ (top + bottom) * bt,
865
+ (far + near) * nf,
866
+ 1,
867
+ ];
868
+ }
869
+ /**
870
+ * Alias for {@link mat4.orthoNO}
871
+ * @function
872
+ */
873
+ export const ortho = orthoNO;
874
+ /**
875
+ * Generates a orthogonal projection matrix with the given bounds.
876
+ * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],
877
+ * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.
878
+ *
879
+ * @param left Left bound of the frustum
880
+ * @param right Right bound of the frustum
881
+ * @param bottom Bottom bound of the frustum
882
+ * @param top Top bound of the frustum
883
+ * @param near Near bound of the frustum
884
+ * @param far Far bound of the frustum
885
+ */
886
+ export function orthoZO(left, right, bottom, top, near, far) {
887
+ const lr = 1 / (left - right);
888
+ const bt = 1 / (bottom - top);
889
+ const nf = 1 / (near - far);
890
+ // prettier-ignore
891
+ return [
892
+ -2 * lr, 0, 0, 0,
893
+ 0, -2 * bt, 0, 0,
894
+ 0, 0, nf, 0,
895
+ (left + right) * lr,
896
+ (top + bottom) * bt,
897
+ near * nf,
898
+ 1,
899
+ ];
900
+ }
901
+ /**
902
+ * Generates a look-at matrix with the given eye position, focal point, and up axis.
903
+ * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.
904
+ *
905
+ * @param eye Position of the viewer
906
+ * @param center Point the viewer is looking at
907
+ * @param up vec3 pointing up
908
+ */
909
+ export function lookAt(eye, center, up) {
910
+ let x0, x1, x2, y0, y1, y2, z0, z1, z2, len;
911
+ const eyex = eye[0];
912
+ const eyey = eye[1];
913
+ const eyez = eye[2];
914
+ const upx = up[0];
915
+ const upy = up[1];
916
+ const upz = up[2];
917
+ const centerx = center[0];
918
+ const centery = center[1];
919
+ const centerz = center[2];
920
+ if (Math.abs(eyex - centerx) < Common.EPSILON &&
921
+ Math.abs(eyey - centery) < Common.EPSILON &&
922
+ Math.abs(eyez - centerz) < Common.EPSILON) {
923
+ return identity;
924
+ }
925
+ z0 = eyex - centerx;
926
+ z1 = eyey - centery;
927
+ z2 = eyez - centerz;
928
+ len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);
929
+ z0 *= len;
930
+ z1 *= len;
931
+ z2 *= len;
932
+ x0 = upy * z2 - upz * z1;
933
+ x1 = upz * z0 - upx * z2;
934
+ x2 = upx * z1 - upy * z0;
935
+ len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);
936
+ if (!len) {
937
+ x0 = 0;
938
+ x1 = 0;
939
+ x2 = 0;
940
+ }
941
+ else {
942
+ len = 1 / len;
943
+ x0 *= len;
944
+ x1 *= len;
945
+ x2 *= len;
946
+ }
947
+ y0 = z1 * x2 - z2 * x1;
948
+ y1 = z2 * x0 - z0 * x2;
949
+ y2 = z0 * x1 - z1 * x0;
950
+ len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);
951
+ if (!len) {
952
+ y0 = 0;
953
+ y1 = 0;
954
+ y2 = 0;
955
+ }
956
+ else {
957
+ len = 1 / len;
958
+ y0 *= len;
959
+ y1 *= len;
960
+ y2 *= len;
961
+ }
962
+ // prettier-ignore
963
+ return [
964
+ x0, y0, z0, 0,
965
+ x1, y1, z1, 0,
966
+ x2, y2, z2, 0,
967
+ -(x0 * eyex + x1 * eyey + x2 * eyez),
968
+ -(y0 * eyex + y1 * eyey + y2 * eyez),
969
+ -(z0 * eyex + z1 * eyey + z2 * eyez),
970
+ 1,
971
+ ];
972
+ }
973
+ /**
974
+ * Generates a matrix that makes something look at something else.
975
+ *
976
+ * @param eye Position of the viewer
977
+ * @param center Point the viewer is looking at
978
+ * @param up vec3 pointing up
979
+ */
980
+ export function targetTo(eye, target, up) {
981
+ const [eyex, eyey, eyez] = eye;
982
+ const [upx, upy, upz] = up;
983
+ let z0 = eyex - target[0], z1 = eyey - target[1], z2 = eyez - target[2];
984
+ let len = z0 * z0 + z1 * z1 + z2 * z2;
985
+ if (len > 0) {
986
+ len = 1 / Math.sqrt(len);
987
+ z0 *= len;
988
+ z1 *= len;
989
+ z2 *= len;
990
+ }
991
+ let x0 = upy * z2 - upz * z1, x1 = upz * z0 - upx * z2, x2 = upx * z1 - upy * z0;
992
+ len = x0 * x0 + x1 * x1 + x2 * x2;
993
+ if (len > 0) {
994
+ len = 1 / Math.sqrt(len);
995
+ x0 *= len;
996
+ x1 *= len;
997
+ x2 *= len;
998
+ }
999
+ // prettier-ignore
1000
+ return [
1001
+ x0, x1, x2, 0,
1002
+ z1 * x2 - z2 * x1,
1003
+ z2 * x0 - z0 * x2,
1004
+ z0 * x1 - z1 * x0,
1005
+ 0,
1006
+ z0, z1, z2, 0,
1007
+ eyex, eyey, eyez, 1,
1008
+ ];
1009
+ }
1010
+ /**
1011
+ * Returns Frobenius norm of a mat4
1012
+ */
1013
+ export function frob(a) {
1014
+ return Math.sqrt(a[0] * a[0] +
1015
+ a[1] * a[1] +
1016
+ a[2] * a[2] +
1017
+ a[3] * a[3] +
1018
+ a[4] * a[4] +
1019
+ a[5] * a[5] +
1020
+ a[6] * a[6] +
1021
+ a[7] * a[7] +
1022
+ a[8] * a[8] +
1023
+ a[9] * a[9] +
1024
+ a[10] * a[10] +
1025
+ a[11] * a[11] +
1026
+ a[12] * a[12] +
1027
+ a[13] * a[13] +
1028
+ a[14] * a[14] +
1029
+ a[15] * a[15]);
1030
+ }
1031
+ /**
1032
+ * Adds two mat4's
1033
+ */
1034
+ export function add(a, b) {
1035
+ return [
1036
+ a[0] + b[0],
1037
+ a[1] + b[1],
1038
+ a[2] + b[2],
1039
+ a[3] + b[3],
1040
+ a[4] + b[4],
1041
+ a[5] + b[5],
1042
+ a[6] + b[6],
1043
+ a[7] + b[7],
1044
+ a[8] + b[8],
1045
+ a[9] + b[9],
1046
+ a[10] + b[10],
1047
+ a[11] + b[11],
1048
+ a[12] + b[12],
1049
+ a[13] + b[13],
1050
+ a[14] + b[14],
1051
+ a[15] + b[15],
1052
+ ];
1053
+ }
1054
+ /**
1055
+ * Subtracts matrix b from matrix a
1056
+ */
1057
+ export function subtract(a, b) {
1058
+ return [
1059
+ a[0] - b[0],
1060
+ a[1] - b[1],
1061
+ a[2] - b[2],
1062
+ a[3] - b[3],
1063
+ a[4] - b[4],
1064
+ a[5] - b[5],
1065
+ a[6] - b[6],
1066
+ a[7] - b[7],
1067
+ a[8] - b[8],
1068
+ a[9] - b[9],
1069
+ a[10] - b[10],
1070
+ a[11] - b[11],
1071
+ a[12] - b[12],
1072
+ a[13] - b[13],
1073
+ a[14] - b[14],
1074
+ a[15] - b[15],
1075
+ ];
1076
+ }
1077
+ /**
1078
+ * Multiply each element of the matrix by a scalar.
1079
+ */
1080
+ export function multiplyScalar(a, s) {
1081
+ return [
1082
+ a[0] * s,
1083
+ a[1] * s,
1084
+ a[2] * s,
1085
+ a[3] * s,
1086
+ a[4] * s,
1087
+ a[5] * s,
1088
+ a[6] * s,
1089
+ a[7] * s,
1090
+ a[8] * s,
1091
+ a[9] * s,
1092
+ a[10] * s,
1093
+ a[11] * s,
1094
+ a[12] * s,
1095
+ a[13] * s,
1096
+ a[14] * s,
1097
+ a[15] * s,
1098
+ ];
1099
+ }
1100
+ /**
1101
+ * Adds two mat4's after multiplying each element of the second operand by a scalar value.
1102
+ */
1103
+ export function multiplyScalarAndAdd(a, b, scale) {
1104
+ return [
1105
+ a[0] + b[0] * scale,
1106
+ a[1] + b[1] * scale,
1107
+ a[2] + b[2] * scale,
1108
+ a[3] + b[3] * scale,
1109
+ a[4] + b[4] * scale,
1110
+ a[5] + b[5] * scale,
1111
+ a[6] + b[6] * scale,
1112
+ a[7] + b[7] * scale,
1113
+ a[8] + b[8] * scale,
1114
+ a[9] + b[9] * scale,
1115
+ a[10] + b[10] * scale,
1116
+ a[11] + b[11] * scale,
1117
+ a[12] + b[12] * scale,
1118
+ a[13] + b[13] * scale,
1119
+ a[14] + b[14] * scale,
1120
+ a[15] + b[15] * scale,
1121
+ ];
1122
+ }
1123
+ /**
1124
+ * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
1125
+ */
1126
+ export function exactEquals(a, b) {
1127
+ return (a[0] === b[0] &&
1128
+ a[1] === b[1] &&
1129
+ a[2] === b[2] &&
1130
+ a[3] === b[3] &&
1131
+ a[4] === b[4] &&
1132
+ a[5] === b[5] &&
1133
+ a[6] === b[6] &&
1134
+ a[7] === b[7] &&
1135
+ a[8] === b[8] &&
1136
+ a[9] === b[9] &&
1137
+ a[10] === b[10] &&
1138
+ a[11] === b[11] &&
1139
+ a[12] === b[12] &&
1140
+ a[13] === b[13] &&
1141
+ a[14] === b[14] &&
1142
+ a[15] === b[15]);
1143
+ }
1144
+ /**
1145
+ * Returns whether or not the matrices have approximately the same elements in the same position.
1146
+ */
1147
+ export function equals(a, b) {
1148
+ const [a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aA, aB, aC, aD, aE, aF] = a;
1149
+ const [b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, bA, bB, bC, bD, bE, bF] = b;
1150
+ return (Math.abs(a0 - b0) <=
1151
+ Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
1152
+ Math.abs(a1 - b1) <=
1153
+ Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
1154
+ Math.abs(a2 - b2) <=
1155
+ Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&
1156
+ Math.abs(a3 - b3) <=
1157
+ Common.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) &&
1158
+ Math.abs(a4 - b4) <=
1159
+ Common.EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) &&
1160
+ Math.abs(a5 - b5) <=
1161
+ Common.EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)) &&
1162
+ Math.abs(a6 - b6) <=
1163
+ Common.EPSILON * Math.max(1, Math.abs(a6), Math.abs(b6)) &&
1164
+ Math.abs(a7 - b7) <=
1165
+ Common.EPSILON * Math.max(1, Math.abs(a7), Math.abs(b7)) &&
1166
+ Math.abs(a8 - b8) <=
1167
+ Common.EPSILON * Math.max(1, Math.abs(a8), Math.abs(b8)) &&
1168
+ Math.abs(a9 - b9) <=
1169
+ Common.EPSILON * Math.max(1, Math.abs(a9), Math.abs(b9)) &&
1170
+ Math.abs(aA - bA) <=
1171
+ Common.EPSILON * Math.max(1, Math.abs(aA), Math.abs(bA)) &&
1172
+ Math.abs(aB - bB) <=
1173
+ Common.EPSILON * Math.max(1, Math.abs(aB), Math.abs(bB)) &&
1174
+ Math.abs(aC - bC) <=
1175
+ Common.EPSILON * Math.max(1, Math.abs(aC), Math.abs(bC)) &&
1176
+ Math.abs(aD - bD) <=
1177
+ Common.EPSILON * Math.max(1, Math.abs(aD), Math.abs(bD)) &&
1178
+ Math.abs(aE - bE) <=
1179
+ Common.EPSILON * Math.max(1, Math.abs(aE), Math.abs(bE)) &&
1180
+ Math.abs(aF - bF) <=
1181
+ Common.EPSILON * Math.max(1, Math.abs(aF), Math.abs(bF)));
1182
+ }
1183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0NC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXQ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sVUFBVSxDQUFBO0FBZ0JsQyxrQkFBa0I7QUFDbEIsTUFBTSxVQUFVLEVBQUUsQ0FDakIsR0FBVyxFQUFFLEdBQVcsRUFBRSxHQUFXLEVBQUUsR0FBVyxFQUNsRCxHQUFXLEVBQUUsR0FBVyxFQUFFLEdBQVcsRUFBRSxHQUFXLEVBQ2xELEdBQVcsRUFBRSxHQUFXLEVBQUUsR0FBVyxFQUFFLEdBQVcsRUFDbEQsR0FBVyxFQUFFLEdBQVcsRUFBRSxHQUFXLEVBQUUsR0FBVztJQUVsRCxrQkFBa0I7SUFDbEIsT0FBTztRQUNOLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7S0FDbEIsQ0FBQTtBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNILGtCQUFrQjtBQUNsQixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQVMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMzQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ1YsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNWLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDVixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ1YsQ0FBQyxDQUFBO0FBRUYsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDdkMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUM5QyxDQUFDLENBQUE7QUFFRjs7R0FFRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsQ0FBTztJQUNoQyxrQkFBa0I7SUFDbEIsT0FBTztRQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDeEIsQ0FBQTtBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUMsQ0FBTztJQUM3QixrQkFBa0I7SUFDbEIsTUFBTSxDQUNMLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUV4QixNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUVqQyw0QkFBNEI7SUFDNUIsTUFBTSxHQUFHLEdBQ1IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFFdEUsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNULE9BQU8sSUFBSSxDQUFBO0tBQ1g7SUFFRCxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFBO0lBRXRCLE9BQU87UUFDTixDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUM1QyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUM1QyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUM1QyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUM1QyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUM1QyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUM1QyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUM1QyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUM1QyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUM1QyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUM1QyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUM1QyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUM1QyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUM1QyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUM1QyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUM1QyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtLQUM1QyxDQUFBO0FBQ0YsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxDQUFPO0lBQzlCLGtCQUFrQjtJQUNsQixNQUFNLENBQ0wsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRXhCLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBRWpDLE9BQU87UUFDTixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7S0FDakMsQ0FBQTtBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsQ0FBTztJQUNsQyxrQkFBa0I7SUFDbEIsTUFBTSxDQUNMLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUV4QixNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDaEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2hDLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNoQyxNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDaEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2hDLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNoQyxNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQTtJQUN6QyxNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQTtJQUN6QyxNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQTtJQUN6QyxNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQTtJQUV6Qyw0QkFBNEI7SUFDNUIsT0FBTyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFBO0FBQ2pELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDeEMsa0JBQWtCO0lBQ2xCLE1BQU0sQ0FDTCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFeEIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBRXJCLG1EQUFtRDtJQUNuRCxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRXhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBRWxELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDVCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtJQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtJQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtJQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtJQUVsRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7SUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7SUFDbEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcs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RyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQzFCLENBQUE7QUFDRixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLENBQU8sRUFBRSxHQUFXO0lBQzNDLE1BQU0sQ0FB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SUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0tBQzFFO1NBQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO1FBQ3ZCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQy9DLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7S0FDMUU7U0FBTTtRQUNOLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQy9DLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7S0FDMUU7QUFDRixDQUFDO0FBUUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVM7SUFDbEMsTUFBTSxLQUFLLEdBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBRS9DLGtCQUFrQjtJQUNsQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQUFBRCxFQUNkLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEFBQUQsRUFDZCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRyxHQUFHLEdBQUcsQ0FBQTtJQUU3QixNQUFNLEtBQUssR0FBUztRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztLQUM1QyxDQUFBO0lBRUQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN4QixNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3hCLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFeEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUN0QixNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ3RCLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDdEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUN0QixNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ3RCLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDdEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUN0QixNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ3RCLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFFdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUE7SUFFaEMsSUFBSSxHQUFTLENBQUE7SUFFYixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7UUFDZCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFBO0tBQ3pFO1NBQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7UUFDdEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDL0MsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0tBQ3pFO1NBQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO1FBQ3ZCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMs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QUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUE7SUFDM0IsTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQzNCLE1BQU0sSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUMzQixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUE7SUFDM0IsTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQzNCLE1BQU0sSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUMzQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUVsQyxrQkFBa0I7SUFDbEIsT0FBTztRQUNOLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDbkIsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNuQixJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3BCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNuRCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxF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QUE7SUFDbkIsRUFBRSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUE7SUFDbkIsRUFBRSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUE7SUFFbkIsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDaEQsRUFBRSxJQUFJLEdBQUcsQ0FBQTtJQUNULEVBQUUsSUFBSSxHQUFHLENBQUE7SUFDVCxFQUFFLElBQUksR0FBRyxDQUFBO0lBRVQsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQTtJQUN4QixFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFBO0lBQ3hCLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUE7SUFDeEIsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUM1QyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUNOLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDTixFQUFFLEdBQUcsQ0FBQyxDQUFBO0tBQ047U0FBTTtRQUNOLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFBO1FBQ2IsRUFBRSxJQUFJLEdBQUcsQ0FBQTtRQUNULEVBQUUsSUFBSSxHQUFHLENBQUE7UUFDVCxFQUFFLElBQUksR0FBRyxDQUFBO0tBQ1Q7SUFFRCxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBO0lBQ3RCLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUE7SUFDdEIsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdB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QUMsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDZCxDQUFBO0FBQ0YsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFPLEVBQUUsQ0FBTztJQUNuQyxPQUFPO1FBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDYixDQUFBO0FBQ0YsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxDQUFPLEVBQUUsQ0FBTztJQUN4QyxPQUFPO1FBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDYixDQUFBO0FBQ0YsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxDQUFPLEVBQUUsQ0FBUztJQUNoRCxPQUFPO1FBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNSLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNSLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNSLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNULENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDVCxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNULENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7S0FDVCxDQUFBO0FBQ0YsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLENBQU8sRUFBRSxDQUFPLEVBQUUsS0FBYTtJQUNuRSxPQUFPO1FBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1FBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztRQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7UUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1FBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztRQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7UUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1FBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztRQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7UUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1FBQ25CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSztRQUNyQixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUs7UUFDckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLO1FBQ3JCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSztRQUNyQixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUs7UUFDckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLO0tBQ3JCLENBQUE7QUFDRixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQzNDLE9BQU8sQ0FDTixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDZixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDZixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNmLENBQUE7QUFDRixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQ3RDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDMUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUUxRSxPQUFPLENBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3pELENBQUE7QUFDRixDQUFDIn0=