@silvana-one/mina-curves 0.3.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 (61) hide show
  1. package/README.md +3 -0
  2. package/dist/node/curve/constants.d.ts +34 -0
  3. package/dist/node/curve/constants.js +323 -0
  4. package/dist/node/curve/constants.js.map +1 -0
  5. package/dist/node/curve/curve.d.ts +50 -0
  6. package/dist/node/curve/curve.js +307 -0
  7. package/dist/node/curve/curve.js.map +1 -0
  8. package/dist/node/curve/hash.d.ts +6 -0
  9. package/dist/node/curve/hash.js +89 -0
  10. package/dist/node/curve/hash.js.map +1 -0
  11. package/dist/node/curve/index.d.ts +4 -0
  12. package/dist/node/curve/index.js +5 -0
  13. package/dist/node/curve/index.js.map +1 -0
  14. package/dist/node/curve/verify.d.ts +4 -0
  15. package/dist/node/curve/verify.js +19 -0
  16. package/dist/node/curve/verify.js.map +1 -0
  17. package/dist/node/index.cjs +711 -0
  18. package/dist/node/index.d.ts +2 -0
  19. package/dist/node/index.js +3 -0
  20. package/dist/node/index.js.map +1 -0
  21. package/dist/node/poseidon.d.ts +1 -0
  22. package/dist/node/poseidon.js +5 -0
  23. package/dist/node/poseidon.js.map +1 -0
  24. package/dist/node/signature.d.ts +6 -0
  25. package/dist/node/signature.js +6 -0
  26. package/dist/node/signature.js.map +1 -0
  27. package/dist/tsconfig.node.tsbuildinfo +1 -0
  28. package/dist/tsconfig.web.tsbuildinfo +1 -0
  29. package/dist/web/curve/constants.d.ts +34 -0
  30. package/dist/web/curve/constants.js +323 -0
  31. package/dist/web/curve/constants.js.map +1 -0
  32. package/dist/web/curve/curve.d.ts +50 -0
  33. package/dist/web/curve/curve.js +307 -0
  34. package/dist/web/curve/curve.js.map +1 -0
  35. package/dist/web/curve/hash.d.ts +6 -0
  36. package/dist/web/curve/hash.js +89 -0
  37. package/dist/web/curve/hash.js.map +1 -0
  38. package/dist/web/curve/index.d.ts +4 -0
  39. package/dist/web/curve/index.js +5 -0
  40. package/dist/web/curve/index.js.map +1 -0
  41. package/dist/web/curve/verify.d.ts +4 -0
  42. package/dist/web/curve/verify.js +19 -0
  43. package/dist/web/curve/verify.js.map +1 -0
  44. package/dist/web/index.d.ts +2 -0
  45. package/dist/web/index.js +3 -0
  46. package/dist/web/index.js.map +1 -0
  47. package/dist/web/poseidon.d.ts +1 -0
  48. package/dist/web/poseidon.js +5 -0
  49. package/dist/web/poseidon.js.map +1 -0
  50. package/dist/web/signature.d.ts +6 -0
  51. package/dist/web/signature.js +6 -0
  52. package/dist/web/signature.js.map +1 -0
  53. package/package.json +59 -0
  54. package/src/curve/constants.ts +328 -0
  55. package/src/curve/curve.ts +370 -0
  56. package/src/curve/hash.ts +108 -0
  57. package/src/curve/index.ts +4 -0
  58. package/src/curve/verify.ts +31 -0
  59. package/src/index.ts +2 -0
  60. package/src/poseidon.ts +5 -0
  61. package/src/signature.ts +11 -0
@@ -0,0 +1,307 @@
1
+ import { PallasConstants } from "./constants.js";
2
+ export { Group, publicKeyToGroup, scale, sub, isEven, equal, power, add, mul, sqrt, dot, };
3
+ const projectiveZero = { x: 1n, y: 1n, z: 0n };
4
+ /**
5
+ * A non-zero point on the Pallas curve in affine form { x, y }
6
+ */
7
+ const Group = {
8
+ toProjective({ x, y }) {
9
+ return projectiveFromAffine({ x, y, infinity: false });
10
+ },
11
+ /**
12
+ * Convert a projective point to a non-zero affine point.
13
+ * Throws an error if the point is zero / infinity, i.e. if z === 0
14
+ */
15
+ fromProjective(point) {
16
+ let { x, y, infinity } = projectiveToAffine(point);
17
+ if (infinity)
18
+ throw Error("Group.fromProjective: point is infinity");
19
+ return { x, y };
20
+ },
21
+ };
22
+ const { p, a, b, twoadicRoot, twoadicity, oddFactor } = PallasConstants;
23
+ function mod(x, p) {
24
+ x = x % p;
25
+ if (x < 0)
26
+ return x + p;
27
+ return x;
28
+ }
29
+ function projectiveDoubleA0(g, p) {
30
+ if (g.z === 0n)
31
+ return g;
32
+ let X1 = g.x, Y1 = g.y, Z1 = g.z;
33
+ if (Y1 === 0n)
34
+ throw Error("projectiveDouble: unhandled case");
35
+ // http://www.hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l
36
+ // A = X1^2
37
+ let A = mod(X1 * X1, p);
38
+ // B = Y1^2
39
+ let B = mod(Y1 * Y1, p);
40
+ // C = B^2
41
+ let C = mod(B * B, p);
42
+ // D = 2*((X1+B)^2-A-C)
43
+ let D = mod(2n * ((X1 + B) * (X1 + B) - A - C), p);
44
+ // E = 3*A
45
+ let E = 3n * A;
46
+ // F = E^2
47
+ let F = mod(E * E, p);
48
+ // X3 = F-2*D
49
+ let X3 = mod(F - 2n * D, p);
50
+ // Y3 = E*(D-X3)-8*C
51
+ let Y3 = mod(E * (D - X3) - 8n * C, p);
52
+ // Z3 = 2*Y1*Z1
53
+ let Z3 = mod(2n * Y1 * Z1, p);
54
+ return { x: X3, y: Y3, z: Z3 };
55
+ }
56
+ function projectiveDoubleAminus3(g, p) {
57
+ if (g.z === 0n)
58
+ return g;
59
+ let X1 = g.x, Y1 = g.y, Z1 = g.z;
60
+ if (Y1 === 0n)
61
+ throw Error("projectiveDouble: unhandled case");
62
+ // http://www.hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
63
+ // delta = Z1^2
64
+ let delta = mod(Z1 * Z1, p);
65
+ // gamma = Y1^2
66
+ let gamma = mod(Y1 * Y1, p);
67
+ // beta = X1*gamma
68
+ let beta = mod(X1 * gamma, p);
69
+ // alpha = 3*(X1-delta)*(X1+delta)
70
+ let alpha = mod((X1 - delta) * (X1 + delta), p);
71
+ alpha = alpha + alpha + alpha;
72
+ // X3 = alpha^2-8*beta
73
+ let X3 = mod(alpha * alpha - 8n * beta, p);
74
+ // Z3 = (Y1+Z1)^2-gamma-delta
75
+ let Z3 = mod((Y1 + Z1) * (Y1 + Z1) - gamma - delta, p);
76
+ // Y3 = alpha*(4*beta-X3)-8*gamma^2
77
+ let Y3 = mod(alpha * (4n * beta - X3) - 8n * gamma * gamma, p);
78
+ return { x: X3, y: Y3, z: Z3 };
79
+ }
80
+ function projectiveDouble(g, p, a) {
81
+ if (a === 0n)
82
+ return projectiveDoubleA0(g, p);
83
+ if (a + 3n === p)
84
+ return projectiveDoubleAminus3(g, p);
85
+ throw Error("Projective doubling is not implemented for general curve parameter a, only a = 0 and a = -3");
86
+ }
87
+ function projectiveNeg({ x, y, z }, p) {
88
+ return { x, y: y === 0n ? 0n : p - y, z };
89
+ }
90
+ function projectiveAdd(g, h, p, a) {
91
+ if (g.z === 0n)
92
+ return h;
93
+ if (h.z === 0n)
94
+ return g;
95
+ let X1 = g.x, Y1 = g.y, Z1 = g.z, X2 = h.x, Y2 = h.y, Z2 = h.z;
96
+ // http://www.hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-add-2007-bl
97
+ // Z1Z1 = Z1^2
98
+ let Z1Z1 = mod(Z1 * Z1, p);
99
+ // Z2Z2 = Z2^2
100
+ let Z2Z2 = mod(Z2 * Z2, p);
101
+ // U1 = X1*Z2Z2
102
+ let U1 = mod(X1 * Z2Z2, p);
103
+ // U2 = X2*Z1Z1
104
+ let U2 = mod(X2 * Z1Z1, p);
105
+ // S1 = Y1*Z2*Z2Z2
106
+ let S1 = mod(Y1 * Z2 * Z2Z2, p);
107
+ // S2 = Y2*Z1*Z1Z1
108
+ let S2 = mod(Y2 * Z1 * Z1Z1, p);
109
+ // H = U2-U1
110
+ let H = mod(U2 - U1, p);
111
+ // H = 0 <==> x1 = X1/Z1^2 = X2/Z2^2 = x2 <==> degenerate case (Z3 would become 0)
112
+ if (H === 0n) {
113
+ // if S1 = S2 <==> y1 = y2, the points are equal, so we double instead
114
+ if (S1 === S2)
115
+ return projectiveDouble(g, p, a);
116
+ // if S1 = -S2, the points are inverse, so return zero
117
+ if (mod(S1 + S2, p) === 0n)
118
+ return projectiveZero;
119
+ throw Error("projectiveAdd: invalid point");
120
+ }
121
+ // I = (2*H)^2
122
+ let I = mod((H * H) << 2n, p);
123
+ // J = H*I
124
+ let J = mod(H * I, p);
125
+ // r = 2*(S2-S1)
126
+ let r = 2n * (S2 - S1);
127
+ // V = U1*I
128
+ let V = mod(U1 * I, p);
129
+ // X3 = r^2-J-2*V
130
+ let X3 = mod(r * r - J - 2n * V, p);
131
+ // Y3 = r*(V-X3)-2*S1*J
132
+ let Y3 = mod(r * (V - X3) - 2n * S1 * J, p);
133
+ // Z3 = ((Z1+Z2)^2-Z1Z1-Z2Z2)*H
134
+ let Z3 = mod(((Z1 + Z2) * (Z1 + Z2) - Z1Z1 - Z2Z2) * H, p);
135
+ return { x: X3, y: Y3, z: Z3 };
136
+ }
137
+ function projectiveSub(g, h, p, a) {
138
+ return projectiveAdd(g, projectiveNeg(h, p), p, a);
139
+ }
140
+ function getProjectiveDouble(p, a) {
141
+ if (a === 0n)
142
+ return projectiveDoubleA0;
143
+ if (a + 3n === p)
144
+ return projectiveDoubleAminus3;
145
+ throw Error("Projective doubling is not implemented for general curve parameter a, only a = 0 and a = -3");
146
+ }
147
+ function bigIntToBits(x) {
148
+ if (x < 0n) {
149
+ throw Error(`bigIntToBits: negative numbers are not supported, got ${x}`);
150
+ }
151
+ let bits = [];
152
+ for (; x > 0n; x >>= 1n) {
153
+ let bit = !!(x & 1n);
154
+ bits.push(bit);
155
+ }
156
+ return bits;
157
+ }
158
+ function projectiveScale(g, x, p, a) {
159
+ let double = getProjectiveDouble(p, a);
160
+ let bits = typeof x === "bigint" ? bigIntToBits(x) : x;
161
+ let h = projectiveZero;
162
+ for (let bit of bits) {
163
+ if (bit)
164
+ h = projectiveAdd(h, g, p, a);
165
+ g = double(g, p);
166
+ }
167
+ return h;
168
+ }
169
+ function sub(g, h) {
170
+ return projectiveSub(g, h, p, PallasConstants.a);
171
+ }
172
+ function scale(g, s) {
173
+ return projectiveScale(g, s, p, PallasConstants.a);
174
+ }
175
+ function projectiveFromAffine({ x, y, infinity, }) {
176
+ if (infinity)
177
+ return projectiveZero;
178
+ return { x, y, z: 1n };
179
+ }
180
+ function projectiveToAffine(g) {
181
+ let z = g.z;
182
+ if (z === 0n) {
183
+ // infinity
184
+ return { x: 0n, y: 0n, infinity: true };
185
+ }
186
+ else if (z === 1n) {
187
+ // already normalized affine form
188
+ return { x: g.x, y: g.y, infinity: false };
189
+ }
190
+ else {
191
+ let zinv = inverse(z, p); // we checked for z === 0, so inverse exists
192
+ let zinv_squared = mod(zinv * zinv, p);
193
+ // x/z^2
194
+ let x = mod(g.x * zinv_squared, p);
195
+ // y/z^3
196
+ let y = mod(g.y * zinv * zinv_squared, p);
197
+ return { x: x, y: y, infinity: false };
198
+ }
199
+ }
200
+ // inverting with EGCD, 1/a in Z_p
201
+ function inverse(a, p) {
202
+ a = mod(a, p);
203
+ if (a === 0n)
204
+ return undefined;
205
+ let b = p;
206
+ let x = 0n;
207
+ let y = 1n;
208
+ let u = 1n;
209
+ let v = 0n;
210
+ while (a !== 0n) {
211
+ let q = b / a;
212
+ let r = mod(b, a);
213
+ let m = x - u * q;
214
+ let n = y - v * q;
215
+ b = a;
216
+ a = r;
217
+ x = u;
218
+ y = v;
219
+ u = m;
220
+ v = n;
221
+ }
222
+ if (b !== 1n)
223
+ return undefined;
224
+ return mod(x, p);
225
+ }
226
+ function isEven(x) {
227
+ return !(mod(x, p) & 1n);
228
+ }
229
+ function equal(x, y) {
230
+ // We check if x and y are both in the range [0, p). If they are, can do a simple comparison. Otherwise, we need to reduce them to the proper canonical field range.
231
+ let x_ = x >= 0n && x < p ? x : mod(x, p);
232
+ let y_ = y >= 0n && y < p ? y : mod(y, p);
233
+ return x_ === y_;
234
+ }
235
+ // modular exponentiation, a^n % p
236
+ function power(a, n) {
237
+ a = mod(a, p);
238
+ let x = 1n;
239
+ for (; n > 0n; n >>= 1n) {
240
+ if (n & 1n)
241
+ x = mod(x * a, p);
242
+ a = mod(a * a, p);
243
+ }
244
+ return x;
245
+ }
246
+ function add(x, y) {
247
+ return mod(x + y, p);
248
+ }
249
+ function mul(x, y) {
250
+ return mod(x * y, p);
251
+ }
252
+ function dot(x, y) {
253
+ let z = 0n;
254
+ let n = x.length;
255
+ for (let i = 0; i < n; i++) {
256
+ z += x[i] * y[i];
257
+ }
258
+ return mod(z, p);
259
+ }
260
+ function sqrt(n_, p, Q, c, M) {
261
+ // https://en.wikipedia.org/wiki/Tonelli-Shanks_algorithm#The_algorithm
262
+ // variable naming is the same as in that link ^
263
+ // Q is what we call `t` elsewhere - the odd factor in p - 1
264
+ // c is a known primitive root of unity
265
+ // M is the twoadicity = exponent of 2 in factorization of p - 1
266
+ const n = mod(n_, p);
267
+ if (n === 0n)
268
+ return 0n;
269
+ let t = power(n, (Q - 1n) >> 1n); // n^(Q - 1)/2
270
+ let R = mod(t * n, p); // n^((Q - 1)/2 + 1) = n^((Q + 1)/2)
271
+ t = mod(t * R, p); // n^((Q - 1)/2 + (Q + 1)/2) = n^Q
272
+ while (true) {
273
+ if (t === 1n)
274
+ return R;
275
+ // use repeated squaring to find the least i, 0 < i < M, such that t^(2^i) = 1
276
+ let i = 0n;
277
+ let s = t;
278
+ while (s !== 1n) {
279
+ s = mod(s * s, p);
280
+ i = i + 1n;
281
+ }
282
+ if (i === M)
283
+ return undefined; // no solution
284
+ let b = power(c, 1n << (M - i - 1n)); // c^(2^(M-i-1))
285
+ M = i;
286
+ c = mod(b * b, p);
287
+ t = mod(t * c, p);
288
+ R = mod(R * b, p);
289
+ }
290
+ }
291
+ function sqrt_internal(x) {
292
+ return sqrt(x, p, oddFactor, twoadicRoot, twoadicity);
293
+ }
294
+ function negate(x) {
295
+ return x === 0n ? 0n : mod(-x, p);
296
+ }
297
+ function publicKeyToGroup({ x, isOdd }) {
298
+ const ySquared = add(mul(x, mul(x, x)), b);
299
+ let y = sqrt_internal(ySquared);
300
+ if (y === undefined) {
301
+ throw Error("PublicKey.toGroup: not a valid group element");
302
+ }
303
+ if (isOdd !== !!(y & 1n))
304
+ y = negate(y);
305
+ return { x, y };
306
+ }
307
+ //# sourceMappingURL=curve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curve.js","sourceRoot":"","sources":["../../../src/curve/curve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Field, Scalar, Group } from "./curve.js";
2
+ export declare function poseidonInitialState(): bigint[];
3
+ export declare function poseidonUpdate([...state]: bigint[], input: bigint[]): bigint[];
4
+ export declare function hashMessage(message: {
5
+ fields: bigint[];
6
+ }, publicKey: Group, r: Field): Scalar;
@@ -0,0 +1,89 @@
1
+ import { add, power, dot } from "./curve.js";
2
+ import { PoseidonConstants } from "./constants.js";
3
+ export function poseidonInitialState() {
4
+ return Array(PoseidonConstants.stateSize).fill(0n);
5
+ }
6
+ export function poseidonUpdate([...state], input) {
7
+ // special case for empty input
8
+ const { rate } = PoseidonConstants;
9
+ if (input.length === 0) {
10
+ permutation(state);
11
+ return state;
12
+ }
13
+ // pad input with zeros so its length is a multiple of the rate
14
+ const n = Math.ceil(input.length / rate) * rate;
15
+ input = input.concat(Array(n - input.length).fill(0n));
16
+ // for every block of length `rate`, add block to the first `rate` elements of the state, and apply the permutation
17
+ for (let blockIndex = 0; blockIndex < n; blockIndex += rate) {
18
+ for (let i = 0; i < rate; i++) {
19
+ state[i] = add(state[i], input[blockIndex + i]);
20
+ }
21
+ permutation(state);
22
+ }
23
+ return state;
24
+ }
25
+ export function hashMessage(message, publicKey, r) {
26
+ let { x, y } = publicKey;
27
+ let input = append(message, { fields: [x, y, r] });
28
+ return hashWithPrefix(packToFields(input));
29
+ }
30
+ function append(input1, input2) {
31
+ return {
32
+ fields: (input1.fields ?? []).concat(input2.fields ?? []),
33
+ packed: (input1.packed ?? []).concat(input2.packed ?? []),
34
+ };
35
+ }
36
+ function packToFields({ fields = [], packed = [] }) {
37
+ if (packed.length === 0)
38
+ return fields;
39
+ const packedBits = [];
40
+ let currentPackedField = 0n;
41
+ let currentSize = 0;
42
+ for (let [field, size] of packed) {
43
+ currentSize += size;
44
+ if (currentSize < 255) {
45
+ currentPackedField = currentPackedField * (1n << BigInt(size)) + field;
46
+ }
47
+ else {
48
+ packedBits.push(currentPackedField);
49
+ currentSize = size;
50
+ currentPackedField = field;
51
+ }
52
+ }
53
+ packedBits.push(currentPackedField);
54
+ return fields.concat(packedBits);
55
+ }
56
+ //const signaturePrefix = "CodaSignature*******";
57
+ const prefix = 240717916736854602989207148466022993262069182275n;
58
+ function salt() {
59
+ return poseidonUpdate(poseidonInitialState(), [prefix]);
60
+ }
61
+ function hashWithPrefix(input) {
62
+ let init = salt();
63
+ return poseidonUpdate(init, input)[0];
64
+ }
65
+ function permutation(state) {
66
+ // special case: initial round constant
67
+ const { hasInitialRoundConstant, stateSize, roundConstants, fullRounds, power: power_, mds, } = PoseidonConstants;
68
+ let offset = 0;
69
+ if (hasInitialRoundConstant) {
70
+ for (let i = 0; i < stateSize; i++) {
71
+ state[i] = add(state[i], roundConstants[0][i]);
72
+ }
73
+ offset = 1;
74
+ }
75
+ for (let round = 0; round < fullRounds; round++) {
76
+ // raise to a power
77
+ for (let i = 0; i < stateSize; i++) {
78
+ state[i] = power(state[i], power_);
79
+ }
80
+ let oldState = [...state];
81
+ for (let i = 0; i < stateSize; i++) {
82
+ // multiply by mds matrix
83
+ state[i] = dot(mds[i], oldState);
84
+ // add round constants
85
+ state[i] = add(state[i], roundConstants[round + offset][i]);
86
+ }
87
+ }
88
+ }
89
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../src/curve/hash.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./constants.js";
2
+ export * from "./verify.js";
3
+ export * from "./curve.js";
4
+ export * from "./hash.js";
@@ -0,0 +1,5 @@
1
+ export * from "./constants.js";
2
+ export * from "./verify.js";
3
+ export * from "./curve.js";
4
+ export * from "./hash.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/curve/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Signature, PublicKey } from "./curve.js";
2
+ export declare function verify(signature: Signature, message: {
3
+ fields: bigint[];
4
+ }, publicKey: PublicKey): boolean;
@@ -0,0 +1,19 @@
1
+ import { Group, publicKeyToGroup, sub, scale, isEven, equal, } from "./curve.js";
2
+ import { hashMessage } from "./hash.js";
3
+ import { PallasConstants } from "./constants.js";
4
+ export function verify(signature, message, publicKey) {
5
+ const { r, s } = signature;
6
+ const pk = publicKeyToGroup(publicKey);
7
+ const e = hashMessage(message, pk, r);
8
+ const { one } = PallasConstants;
9
+ const R = sub(scale(one, s), scale(Group.toProjective(pk), e));
10
+ try {
11
+ // if `R` is infinity, Group.fromProjective throws an error, so `verify` returns false
12
+ const { x: rx, y: ry } = Group.fromProjective(R);
13
+ return isEven(ry) && equal(rx, r);
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ }
19
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/curve/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,EACL,gBAAgB,EAChB,GAAG,EACH,KAAK,EACL,MAAM,EACN,KAAK,GACN,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,MAAM,CACpB,SAAoB,EACpB,OAA6B,EAC7B,SAAoB;IAEpB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,EAAE,GAAG,eAAe,CAAC;IAChC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC;QACH,sFAAsF;QACtF,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACjD,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}