@bitgo-beta/sdk-lib-mpc 8.2.0-beta.204 → 8.2.0-beta.2041

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 (138) hide show
  1. package/dist/src/curves/ed25519.d.ts +0 -1
  2. package/dist/src/curves/ed25519.d.ts.map +1 -1
  3. package/dist/src/curves/ed25519.js +12 -12
  4. package/dist/src/curves/ed25519Bip32HdTree.js +14 -14
  5. package/dist/src/curves/index.js +6 -2
  6. package/dist/src/curves/secp256k1.d.ts +0 -1
  7. package/dist/src/curves/secp256k1.d.ts.map +1 -1
  8. package/dist/src/curves/secp256k1.js +22 -38
  9. package/dist/src/curves/secp256k1Bip32HdTree.js +10 -10
  10. package/dist/src/curves/types.d.ts +2 -3
  11. package/dist/src/curves/types.d.ts.map +1 -1
  12. package/dist/src/curves/util.d.ts +2 -0
  13. package/dist/src/curves/util.d.ts.map +1 -1
  14. package/dist/src/curves/util.js +34 -3
  15. package/dist/src/hashCommitment.d.ts +0 -1
  16. package/dist/src/hashCommitment.d.ts.map +1 -1
  17. package/dist/src/hashCommitment.js +7 -8
  18. package/dist/src/index.d.ts +1 -1
  19. package/dist/src/index.d.ts.map +1 -1
  20. package/dist/src/index.js +24 -10
  21. package/dist/src/openssl/index.js +6 -2
  22. package/dist/src/openssl/openssl.d.ts +1 -2
  23. package/dist/src/openssl/openssl.d.ts.map +1 -1
  24. package/dist/src/openssl/openssl.js +4 -12
  25. package/dist/src/safePrime.d.ts +3 -0
  26. package/dist/src/safePrime.d.ts.map +1 -0
  27. package/dist/src/safePrime.js +19 -0
  28. package/dist/src/schnorrProof.d.ts +0 -1
  29. package/dist/src/schnorrProof.d.ts.map +1 -1
  30. package/dist/src/schnorrProof.js +8 -9
  31. package/dist/src/shamir/index.js +6 -2
  32. package/dist/src/shamir/shamir.js +2 -2
  33. package/dist/src/shamir/types.d.ts +1 -1
  34. package/dist/src/shamir/types.d.ts.map +1 -1
  35. package/dist/src/tss/dkls-vrf/dkg.d.ts +91 -0
  36. package/dist/src/tss/dkls-vrf/dkg.d.ts.map +1 -0
  37. package/dist/src/tss/dkls-vrf/dkg.js +278 -0
  38. package/dist/src/tss/dkls-vrf/index.d.ts +4 -0
  39. package/dist/src/tss/dkls-vrf/index.d.ts.map +1 -0
  40. package/dist/src/tss/dkls-vrf/index.js +40 -0
  41. package/dist/src/tss/dkls-vrf/types.d.ts +28 -0
  42. package/dist/src/tss/dkls-vrf/types.d.ts.map +1 -0
  43. package/dist/src/tss/dkls-vrf/types.js +23 -0
  44. package/dist/src/tss/dkls-vrf/util.d.ts +9 -0
  45. package/dist/src/tss/dkls-vrf/util.d.ts.map +1 -0
  46. package/dist/src/tss/dkls-vrf/util.js +52 -0
  47. package/dist/src/tss/ecdsa/index.js +23 -9
  48. package/dist/src/tss/ecdsa/paillierproof.js +10 -10
  49. package/dist/src/tss/ecdsa/rangeproof.d.ts +1 -2
  50. package/dist/src/tss/ecdsa/rangeproof.d.ts.map +1 -1
  51. package/dist/src/tss/ecdsa/rangeproof.js +108 -118
  52. package/dist/src/tss/ecdsa/types.d.ts +28 -17
  53. package/dist/src/tss/ecdsa/types.d.ts.map +1 -1
  54. package/dist/src/tss/ecdsa/types.js +29 -31
  55. package/dist/src/tss/ecdsa/zkVProof.d.ts +0 -1
  56. package/dist/src/tss/ecdsa/zkVProof.d.ts.map +1 -1
  57. package/dist/src/tss/ecdsa/zkVProof.js +9 -10
  58. package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts +69 -0
  59. package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts.map +1 -0
  60. package/dist/src/tss/ecdsa-dkls/commsLayer.js +268 -0
  61. package/dist/src/tss/ecdsa-dkls/dkg.d.ts +64 -0
  62. package/dist/src/tss/ecdsa-dkls/dkg.d.ts.map +1 -0
  63. package/dist/src/tss/ecdsa-dkls/dkg.js +334 -0
  64. package/dist/src/tss/ecdsa-dkls/dsg.d.ts +47 -0
  65. package/dist/src/tss/ecdsa-dkls/dsg.d.ts.map +1 -0
  66. package/dist/src/tss/ecdsa-dkls/dsg.js +271 -0
  67. package/dist/src/tss/ecdsa-dkls/index.d.ts +6 -0
  68. package/dist/src/tss/ecdsa-dkls/index.d.ts.map +1 -0
  69. package/dist/src/tss/ecdsa-dkls/index.js +42 -0
  70. package/dist/src/tss/ecdsa-dkls/types.d.ts +128 -0
  71. package/dist/src/tss/ecdsa-dkls/types.d.ts.map +1 -0
  72. package/dist/src/tss/ecdsa-dkls/types.js +175 -0
  73. package/dist/src/tss/ecdsa-dkls/util.d.ts +26 -0
  74. package/dist/src/tss/ecdsa-dkls/util.d.ts.map +1 -0
  75. package/dist/src/tss/ecdsa-dkls/util.js +276 -0
  76. package/dist/src/tss/eddsa-mps/commsLayer.d.ts +30 -0
  77. package/dist/src/tss/eddsa-mps/commsLayer.d.ts.map +1 -0
  78. package/dist/src/tss/eddsa-mps/commsLayer.js +96 -0
  79. package/dist/src/tss/eddsa-mps/dkg.d.ts +109 -0
  80. package/dist/src/tss/eddsa-mps/dkg.d.ts.map +1 -0
  81. package/dist/src/tss/eddsa-mps/dkg.js +303 -0
  82. package/dist/src/tss/eddsa-mps/dsg.d.ts +96 -0
  83. package/dist/src/tss/eddsa-mps/dsg.d.ts.map +1 -0
  84. package/dist/src/tss/eddsa-mps/dsg.js +346 -0
  85. package/dist/src/tss/eddsa-mps/index.d.ts +7 -0
  86. package/dist/src/tss/eddsa-mps/index.d.ts.map +1 -0
  87. package/dist/src/tss/eddsa-mps/index.js +42 -0
  88. package/dist/src/tss/eddsa-mps/types.d.ts +76 -0
  89. package/dist/src/tss/eddsa-mps/types.d.ts.map +1 -0
  90. package/dist/src/tss/eddsa-mps/types.js +105 -0
  91. package/dist/src/tss/eddsa-mps/util.d.ts +33 -0
  92. package/dist/src/tss/eddsa-mps/util.d.ts.map +1 -0
  93. package/dist/src/tss/eddsa-mps/util.js +94 -0
  94. package/dist/src/tss/eddsa-mps-vrf/dkg.d.ts +65 -0
  95. package/dist/src/tss/eddsa-mps-vrf/dkg.d.ts.map +1 -0
  96. package/dist/src/tss/eddsa-mps-vrf/dkg.js +246 -0
  97. package/dist/src/tss/eddsa-mps-vrf/index.d.ts +4 -0
  98. package/dist/src/tss/eddsa-mps-vrf/index.d.ts.map +1 -0
  99. package/dist/src/tss/eddsa-mps-vrf/index.js +40 -0
  100. package/dist/src/tss/eddsa-mps-vrf/types.d.ts +31 -0
  101. package/dist/src/tss/eddsa-mps-vrf/types.d.ts.map +1 -0
  102. package/dist/src/tss/eddsa-mps-vrf/types.js +97 -0
  103. package/dist/src/tss/eddsa-mps-vrf/util.d.ts +9 -0
  104. package/dist/src/tss/eddsa-mps-vrf/util.d.ts.map +1 -0
  105. package/dist/src/tss/eddsa-mps-vrf/util.js +36 -0
  106. package/dist/src/tss/index.d.ts +5 -0
  107. package/dist/src/tss/index.d.ts.map +1 -1
  108. package/dist/src/tss/index.js +11 -2
  109. package/dist/src/tss/redpallas-mps/commsLayer.d.ts +34 -0
  110. package/dist/src/tss/redpallas-mps/commsLayer.d.ts.map +1 -0
  111. package/dist/src/tss/redpallas-mps/commsLayer.js +100 -0
  112. package/dist/src/tss/redpallas-mps/dkg.d.ts +103 -0
  113. package/dist/src/tss/redpallas-mps/dkg.d.ts.map +1 -0
  114. package/dist/src/tss/redpallas-mps/dkg.js +285 -0
  115. package/dist/src/tss/redpallas-mps/dsg.d.ts +108 -0
  116. package/dist/src/tss/redpallas-mps/dsg.d.ts.map +1 -0
  117. package/dist/src/tss/redpallas-mps/dsg.js +355 -0
  118. package/dist/src/tss/redpallas-mps/index.d.ts +7 -0
  119. package/dist/src/tss/redpallas-mps/index.d.ts.map +1 -0
  120. package/dist/src/tss/redpallas-mps/index.js +42 -0
  121. package/dist/src/tss/redpallas-mps/types.d.ts +85 -0
  122. package/dist/src/tss/redpallas-mps/types.d.ts.map +1 -0
  123. package/dist/src/tss/redpallas-mps/types.js +112 -0
  124. package/dist/src/tss/redpallas-mps/util.d.ts +43 -0
  125. package/dist/src/tss/redpallas-mps/util.d.ts.map +1 -0
  126. package/dist/src/tss/redpallas-mps/util.js +147 -0
  127. package/dist/src/types.d.ts +0 -1
  128. package/dist/src/types.d.ts.map +1 -1
  129. package/dist/src/util.d.ts +0 -1
  130. package/dist/src/util.d.ts.map +1 -1
  131. package/dist/src/util.js +21 -22
  132. package/dist/tsconfig.tsbuildinfo +1 -1
  133. package/package.json +42 -5
  134. package/.eslintignore +0 -5
  135. package/CHANGELOG.md +0 -340
  136. package/dist/src/openssl/opensslbytes.d.ts +0 -4
  137. package/dist/src/openssl/opensslbytes.d.ts.map +0 -1
  138. package/dist/src/openssl/opensslbytes.js +0 -20
@@ -0,0 +1,278 @@
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.VrfDkg = void 0;
37
+ const cbor_x_1 = require("cbor-x");
38
+ const buffer_1 = require("buffer");
39
+ const types_1 = require("./types");
40
+ /**
41
+ * Round driver for the DKLS VRF DKG, which produces a Ristretto VRF keyshare.
42
+ *
43
+ * Two rounds, all broadcast: round 1 exchanges commitments (VrfKeygenMsg1), round 2
44
+ * exchanges openings (VrfKeygenMsg2, emitted per recipient) and the DKG finalizes
45
+ * locally. There is no chain-code commitment step, unlike the signing DKG.
46
+ *
47
+ * Callers pass every message they hold; this class routes them internally. Round 1
48
+ * must exclude the party's own commitment (the wasm rejects a sender set containing
49
+ * it) and round 2 consumes the openings addressed to this party, own included.
50
+ *
51
+ * Party indices follow the MPCv2 convention: 0 = user, 1 = backup, 2 = bitgo.
52
+ */
53
+ class VrfDkg {
54
+ constructor(n, t, partyIdx, seed, vrfWasm) {
55
+ this.vrfState = types_1.VrfDkgState.Uninitialized;
56
+ this.n = n;
57
+ this.t = t;
58
+ this.partyIdx = partyIdx;
59
+ this.seed = seed;
60
+ this.vrfWasm = vrfWasm ?? null;
61
+ }
62
+ async loadVrfWasm() {
63
+ if (!this.vrfWasm) {
64
+ this.vrfWasm = await Promise.resolve().then(() => __importStar(require('@silencelaboratories/dkls-wasm-ll-vrf-node')));
65
+ }
66
+ }
67
+ getVrfWasm() {
68
+ if (!this.vrfWasm) {
69
+ throw Error('VRF wasm not loaded');
70
+ }
71
+ return this.vrfWasm;
72
+ }
73
+ _restoreSession() {
74
+ if (!this.vrfSession) {
75
+ this.vrfSession = this.getVrfWasm().VrfKeygenSession.fromBytes(this.vrfSessionBytes);
76
+ }
77
+ }
78
+ /**
79
+ * Re-derive the round state from the wasm session bytes instead of trusting a
80
+ * caller-supplied enum. The wasm embeds a round tag for exactly this reason; this
81
+ * is what lets a stateless server resume mid-protocol.
82
+ */
83
+ _deserializeState() {
84
+ if (!this.vrfSession) {
85
+ throw Error('Session not initialized');
86
+ }
87
+ const round = (0, cbor_x_1.decode)(this.vrfSession.toBytes()).round;
88
+ if (round === 'Init') {
89
+ this.vrfState = types_1.VrfDkgState.Uninitialized;
90
+ }
91
+ else if (round === 'WaitMsg1') {
92
+ this.vrfState = types_1.VrfDkgState.Round1;
93
+ }
94
+ else if (round === 'WaitMsg2') {
95
+ this.vrfState = types_1.VrfDkgState.Round2;
96
+ }
97
+ else if (typeof round === 'object' && round !== null && 'Share' in round) {
98
+ this.vrfState = types_1.VrfDkgState.Complete;
99
+ }
100
+ else {
101
+ this.vrfState = types_1.VrfDkgState.InvalidState;
102
+ throw Error(`Invalid State: ${JSON.stringify(round)}`);
103
+ }
104
+ }
105
+ /**
106
+ * Create this party's VRF DKG commitment (VrfKeygenMsg1, broadcast).
107
+ */
108
+ async initDkg() {
109
+ if (!this.vrfWasm) {
110
+ await this.loadVrfWasm();
111
+ }
112
+ if (this.t > this.n || this.partyIdx >= this.n) {
113
+ throw Error('Invalid parameters for VRF DKG');
114
+ }
115
+ if (this.vrfState != types_1.VrfDkgState.Uninitialized) {
116
+ throw Error('VRF DKG session already initialized');
117
+ }
118
+ if (typeof window !== 'undefined' &&
119
+ /* checks for electron processes */
120
+ !window.process &&
121
+ !window.process?.['type']) {
122
+ /* This is only needed for browsers/web because it uses fetch to resolve the wasm asset for the web */
123
+ const initVrf = await Promise.resolve().then(() => __importStar(require('@silencelaboratories/dkls-wasm-ll-vrf-web')));
124
+ await initVrf.default();
125
+ }
126
+ if (this.seed && this.seed.length !== 32) {
127
+ throw Error(`Seed should be 32 bytes, got ${this.seed.length}.`);
128
+ }
129
+ const { VrfKeygenSession } = this.getVrfWasm();
130
+ this.vrfSession = this.seed
131
+ ? new VrfKeygenSession(this.n, this.t, this.partyIdx, new Uint8Array(this.seed))
132
+ : new VrfKeygenSession(this.n, this.t, this.partyIdx);
133
+ try {
134
+ const message = this.vrfSession.createFirstMessage();
135
+ // Copy the payload out before freeing the wasm message object.
136
+ const payload = new Uint8Array(message.payload);
137
+ message.free();
138
+ this.vrfSessionBytes = this.vrfSession.toBytes();
139
+ this._deserializeState();
140
+ return { broadcastMessages: [{ payload, from: this.partyIdx }], p2pMessages: [] };
141
+ }
142
+ catch (e) {
143
+ throw Error(`Error while creating the first VRF message from party ${this.partyIdx}: ${e}`);
144
+ }
145
+ }
146
+ /**
147
+ * Process the messages this party holds for the current round and return this
148
+ * party's messages for the next round. Callers pass everything they hold; the
149
+ * round routing happens here:
150
+ *
151
+ * - Round 1 (WaitMsg1): consumes the other parties' commitments (own excluded —
152
+ * the wasm rejects a sender set containing the party's own Msg1) and emits this
153
+ * party's openings (VrfKeygenMsg2), one broadcast message per recipient.
154
+ * - Round 2 (WaitMsg2): consumes the openings addressed to this party (own
155
+ * self-addressed opening included) and finalizes the DKG, returning no messages.
156
+ */
157
+ async handleIncomingMessages(messagesForIthRound) {
158
+ this._restoreSession();
159
+ if (!this.vrfSession) {
160
+ throw Error('Session not initialized');
161
+ }
162
+ const { Message: VrfMessage } = this.getVrfWasm();
163
+ let nextRoundMessages = [];
164
+ const nextRoundDeserializedMessages = { broadcastMessages: [], p2pMessages: [] };
165
+ try {
166
+ switch (this.vrfState) {
167
+ case types_1.VrfDkgState.Round1: {
168
+ const othersCommitments = messagesForIthRound.broadcastMessages.filter((m) => m.from !== this.partyIdx);
169
+ nextRoundMessages = this.vrfSession.handleMessages(othersCommitments.map((m) => new VrfMessage(m.payload, m.from)));
170
+ this._deserializeState();
171
+ break;
172
+ }
173
+ case types_1.VrfDkgState.Round2: {
174
+ const openingsForMe = messagesForIthRound.p2pMessages.filter((m) => m.to === this.partyIdx);
175
+ nextRoundMessages = this.vrfSession.handleMessages(openingsForMe.map((m) => new VrfMessage(m.payload, m.from, m.to)));
176
+ // vrfKeyshare() consumes (and deallocates) the session in all cases.
177
+ const vrfKeyShare = this.vrfSession.vrfKeyshare();
178
+ this.vrfKeyShare = vrfKeyShare;
179
+ this.keyShareBuff = buffer_1.Buffer.from(vrfKeyShare.toBytes());
180
+ this.publicKey = buffer_1.Buffer.from(vrfKeyShare.publicKey);
181
+ this.keyId = buffer_1.Buffer.from(vrfKeyShare.keyId);
182
+ this.rootChainCode = buffer_1.Buffer.from(vrfKeyShare.rootChainCode);
183
+ vrfKeyShare.free();
184
+ this.vrfState = types_1.VrfDkgState.Complete;
185
+ return nextRoundDeserializedMessages;
186
+ }
187
+ default:
188
+ throw Error(`Invalid VRF DKG state: ${this.vrfState}`);
189
+ }
190
+ nextRoundDeserializedMessages.broadcastMessages = nextRoundMessages
191
+ .filter((m) => m.to_id === undefined)
192
+ .map((m) => ({ payload: new Uint8Array(m.payload), from: m.from_id }));
193
+ nextRoundDeserializedMessages.p2pMessages = nextRoundMessages
194
+ .filter((m) => m.to_id !== undefined)
195
+ .map((m) => ({ payload: new Uint8Array(m.payload), from: m.from_id, to: m.to_id }));
196
+ return nextRoundDeserializedMessages;
197
+ }
198
+ catch (e) {
199
+ throw Error(`Error while creating VRF messages from party ${this.partyIdx}, state ${this.vrfState}: ${e}`);
200
+ }
201
+ finally {
202
+ nextRoundMessages.forEach((m) => m.free());
203
+ if (this.vrfState !== types_1.VrfDkgState.Complete) {
204
+ this.vrfSessionBytes = this.vrfSession.toBytes();
205
+ this.vrfSession = undefined;
206
+ }
207
+ }
208
+ }
209
+ /**
210
+ * Get the VRF keyshare bytes (CBOR VrfKeyshare) once the DKG is complete.
211
+ * This buffer is private key material.
212
+ */
213
+ getKeyShare() {
214
+ if (!this.keyShareBuff) {
215
+ throw Error('Can not get key share, VRF DKG is not complete yet.');
216
+ }
217
+ return this.keyShareBuff;
218
+ }
219
+ /** 32-byte compressed Ristretto VRF public key, available once the DKG is complete. */
220
+ getPublicKey() {
221
+ if (!this.publicKey) {
222
+ throw Error('Can not get public key, VRF DKG is not complete yet.');
223
+ }
224
+ return this.publicKey;
225
+ }
226
+ /** 32-byte VRF key identifier, available once the DKG is complete. */
227
+ getKeyId() {
228
+ if (!this.keyId) {
229
+ throw Error('Can not get key id, VRF DKG is not complete yet.');
230
+ }
231
+ return this.keyId;
232
+ }
233
+ /** 32-byte VRF root chain code, available once the DKG is complete. */
234
+ getRootChainCode() {
235
+ if (!this.rootChainCode) {
236
+ throw Error('Can not get root chain code, VRF DKG is not complete yet.');
237
+ }
238
+ return this.rootChainCode;
239
+ }
240
+ /**
241
+ * Get the current session data that can be used to restore the session later.
242
+ *
243
+ * The returned session bytes are secret key material — they carry this party's
244
+ * secret polynomial share. They must never be logged or persisted in the clear;
245
+ * the caller encrypts them exactly like the key share itself.
246
+ */
247
+ getSessionData() {
248
+ const sessionData = {
249
+ vrfSessionBytes: this.vrfSessionBytes,
250
+ vrfState: this.vrfState,
251
+ };
252
+ if (this.keyShareBuff) {
253
+ sessionData.keyShareBuff = this.keyShareBuff;
254
+ }
255
+ return sessionData;
256
+ }
257
+ /**
258
+ * Restore a VRF DKG session from previous session data.
259
+ * Note: This should not be used for Round 1 as that's the initialization phase.
260
+ * The round state is re-derived from the wasm session bytes, not trusted from the
261
+ * caller-supplied enum, so a tampered `vrfState` cannot steer the protocol.
262
+ */
263
+ static async restoreSession(n, t, partyIdx, sessionData, seed, vrfWasm) {
264
+ const vrfDkg = new VrfDkg(n, t, partyIdx, seed, vrfWasm);
265
+ if (!vrfDkg.vrfWasm) {
266
+ await vrfDkg.loadVrfWasm();
267
+ }
268
+ vrfDkg.vrfSessionBytes = sessionData.vrfSessionBytes;
269
+ vrfDkg._restoreSession();
270
+ vrfDkg._deserializeState();
271
+ if (sessionData.keyShareBuff) {
272
+ vrfDkg.keyShareBuff = sessionData.keyShareBuff;
273
+ }
274
+ return vrfDkg;
275
+ }
276
+ }
277
+ exports.VrfDkg = VrfDkg;
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGtnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rzcy9ka2xzLXZyZi9ka2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsbUNBQWdDO0FBQ2hDLG1DQUFnQztBQUVoQyxtQ0FBeUQ7QUFZekQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBYSxNQUFNO0lBZWpCLFlBQVksQ0FBUyxFQUFFLENBQVMsRUFBRSxRQUFnQixFQUFFLElBQWEsRUFBRSxPQUEwQjtRQUhuRixhQUFRLEdBQWdCLG1CQUFXLENBQUMsYUFBYSxDQUFDO1FBSTFELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyx3REFBYSw0Q0FBNEMsR0FBQyxDQUFDO1FBQzVFLENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLGdC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QUFHLFdBQVcsQ0FBQyxlQUFlLENBQUM7UUFDckQsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLElBQUksV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQztRQUNqRCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBL1BELHdCQStQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgTWVzc2FnZSBhcyBWcmZXYXNtTWVzc2FnZSxcbiAgVnJmS2V5Z2VuU2Vzc2lvbixcbiAgVnJmS2V5c2hhcmUgYXMgRGtsc1ZyZktleXNoYXJlLFxufSBmcm9tICdAc2lsZW5jZWxhYm9yYXRvcmllcy9ka2xzLXdhc20tbGwtdnJmLW5vZGUnO1xuaW1wb3J0IHR5cGUgeyBWcmZLZXlnZW5TZXNzaW9uIGFzIFZyZldlYktleWdlblNlc3Npb24gfSBmcm9tICdAc2lsZW5jZWxhYm9yYXRvcmllcy9ka2xzLXdhc20tbGwtdnJmLXdlYic7XG5pbXBvcnQgeyBkZWNvZGUgfSBmcm9tICdjYm9yLXgnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IERlc2VyaWFsaXplZE1lc3NhZ2VzIH0gZnJvbSAnLi4vZWNkc2EtZGtscy90eXBlcyc7XG5pbXBvcnQgeyBWcmZEa2dTZXNzaW9uRGF0YSwgVnJmRGtnU3RhdGUgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gUGxhdGZvcm0tc3BlY2lmaWMgbW9kdWxlcyB0aGF0IGRvIG5vdCBleGlzdCBldmVyeXdoZXJlOiB0aGUgbm9kZS93ZWIvYnVuZGxlciB3YXNtXG4vLyB2YXJpYW50cyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIGFuZCBzZWxlY3RlZCBhdCBydW50aW1lIChub2RlIHByb2Nlc3MgdnMgYnJvd3NlciB2c1xuLy8gYnVuZGxlcikuIFN0YXRpYyBpbXBvcnRzIHdvdWxkIGxvYWQgdGhlIHdyb25nIHBsYXRmb3JtJ3Mgd2FzbSBiaW5kaW5nLCBzbyBib3RoIHRoZVxuLy8gdHlwZSBhbGlhc2VzIGJlbG93IGFuZCB0aGUgbGF6eSBgYXdhaXQgaW1wb3J0KClgIGNhbGxzIGFyZSBkZWxpYmVyYXRlLlxudHlwZSBOb2RlVnJmV2FzbWVyID0gdHlwZW9mIGltcG9ydCgnQHNpbGVuY2VsYWJvcmF0b3JpZXMvZGtscy13YXNtLWxsLXZyZi1ub2RlJyk7XG50eXBlIFdlYlZyZldhc21lciA9IHR5cGVvZiBpbXBvcnQoJ0BzaWxlbmNlbGFib3JhdG9yaWVzL2RrbHMtd2FzbS1sbC12cmYtd2ViJyk7XG50eXBlIEJ1bmRsZXJWcmZXYXNtZXIgPSB0eXBlb2YgaW1wb3J0KCdAc2lsZW5jZWxhYm9yYXRvcmllcy9ka2xzLXdhc20tbGwtdnJmLWJ1bmRsZXInKTtcblxudHlwZSBWcmZXYXNtID0gTm9kZVZyZldhc21lciB8IFdlYlZyZldhc21lciB8IEJ1bmRsZXJWcmZXYXNtZXI7XG5cbi8qKlxuICogUm91bmQgZHJpdmVyIGZvciB0aGUgREtMUyBWUkYgREtHLCB3aGljaCBwcm9kdWNlcyBhIFJpc3RyZXR0byBWUkYga2V5c2hhcmUuXG4gKlxuICogVHdvIHJvdW5kcywgYWxsIGJyb2FkY2FzdDogcm91bmQgMSBleGNoYW5nZXMgY29tbWl0bWVudHMgKFZyZktleWdlbk1zZzEpLCByb3VuZCAyXG4gKiBleGNoYW5nZXMgb3BlbmluZ3MgKFZyZktleWdlbk1zZzIsIGVtaXR0ZWQgcGVyIHJlY2lwaWVudCkgYW5kIHRoZSBES0cgZmluYWxpemVzXG4gKiBsb2NhbGx5LiBUaGVyZSBpcyBubyBjaGFpbi1jb2RlIGNvbW1pdG1lbnQgc3RlcCwgdW5saWtlIHRoZSBzaWduaW5nIERLRy5cbiAqXG4gKiBDYWxsZXJzIHBhc3MgZXZlcnkgbWVzc2FnZSB0aGV5IGhvbGQ7IHRoaXMgY2xhc3Mgcm91dGVzIHRoZW0gaW50ZXJuYWxseS4gUm91bmQgMVxuICogbXVzdCBleGNsdWRlIHRoZSBwYXJ0eSdzIG93biBjb21taXRtZW50ICh0aGUgd2FzbSByZWplY3RzIGEgc2VuZGVyIHNldCBjb250YWluaW5nXG4gKiBpdCkgYW5kIHJvdW5kIDIgY29uc3VtZXMgdGhlIG9wZW5pbmdzIGFkZHJlc3NlZCB0byB0aGlzIHBhcnR5LCBvd24gaW5jbHVkZWQuXG4gKlxuICogUGFydHkgaW5kaWNlcyBmb2xsb3cgdGhlIE1QQ3YyIGNvbnZlbnRpb246IDAgPSB1c2VyLCAxID0gYmFja3VwLCAyID0gYml0Z28uXG4gKi9cbmV4cG9ydCBjbGFzcyBWcmZEa2cge1xuICBwcm90ZWN0ZWQgdnJmU2Vzc2lvbjogVnJmS2V5Z2VuU2Vzc2lvbiB8IFZyZldlYktleWdlblNlc3Npb24gfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCB2cmZTZXNzaW9uQnl0ZXM6IFVpbnQ4QXJyYXk7XG4gIHByb3RlY3RlZCB2cmZLZXlTaGFyZTogRGtsc1ZyZktleXNoYXJlIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQga2V5U2hhcmVCdWZmOiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBwdWJsaWNLZXk6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIGtleUlkOiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCByb290Q2hhaW5Db2RlOiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBuOiBudW1iZXI7XG4gIHByb3RlY3RlZCB0OiBudW1iZXI7XG4gIHByb3RlY3RlZCBwYXJ0eUlkeDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgc2VlZDogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgdnJmU3RhdGU6IFZyZkRrZ1N0YXRlID0gVnJmRGtnU3RhdGUuVW5pbml0aWFsaXplZDtcbiAgcHJvdGVjdGVkIHZyZldhc206IFZyZldhc20gfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKG46IG51bWJlciwgdDogbnVtYmVyLCBwYXJ0eUlkeDogbnVtYmVyLCBzZWVkPzogQnVmZmVyLCB2cmZXYXNtPzogQnVuZGxlclZyZldhc21lcikge1xuICAgIHRoaXMubiA9IG47XG4gICAgdGhpcy50ID0gdDtcbiAgICB0aGlzLnBhcnR5SWR4ID0gcGFydHlJZHg7XG4gICAgdGhpcy5zZWVkID0gc2VlZDtcbiAgICB0aGlzLnZyZldhc20gPSB2cmZXYXNtID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRWcmZXYXNtKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy52cmZXYXNtKSB7XG4gICAgICB0aGlzLnZyZldhc20gPSBhd2FpdCBpbXBvcnQoJ0BzaWxlbmNlbGFib3JhdG9yaWVzL2RrbHMtd2FzbS1sbC12cmYtbm9kZScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VnJmV2FzbSgpIHtcbiAgICBpZiAoIXRoaXMudnJmV2FzbSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1ZSRiB3YXNtIG5vdCBsb2FkZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudnJmV2FzbTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc3RvcmVTZXNzaW9uKCkge1xuICAgIGlmICghdGhpcy52cmZTZXNzaW9uKSB7XG4gICAgICB0aGlzLnZyZlNlc3Npb24gPSB0aGlzLmdldFZyZldhc20oKS5WcmZLZXlnZW5TZXNzaW9uLmZyb21CeXRlcyh0aGlzLnZyZlNlc3Npb25CeXRlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlLWRlcml2ZSB0aGUgcm91bmQgc3RhdGUgZnJvbSB0aGUgd2FzbSBzZXNzaW9uIGJ5dGVzIGluc3RlYWQgb2YgdHJ1c3RpbmcgYVxuICAgKiBjYWxsZXItc3VwcGxpZWQgZW51bS4gVGhlIHdhc20gZW1iZWRzIGEgcm91bmQgdGFnIGZvciBleGFjdGx5IHRoaXMgcmVhc29uOyB0aGlzXG4gICAqIGlzIHdoYXQgbGV0cyBhIHN0YXRlbGVzcyBzZXJ2ZXIgcmVzdW1lIG1pZC1wcm90b2NvbC5cbiAgICovXG4gIHByaXZhdGUgX2Rlc2VyaWFsaXplU3RhdGUoKSB7XG4gICAgaWYgKCF0aGlzLnZyZlNlc3Npb24pIHtcbiAgICAgIHRocm93IEVycm9yKCdTZXNzaW9uIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICBjb25zdCByb3VuZCA9IGRlY29kZSh0aGlzLnZyZlNlc3Npb24udG9CeXRlcygpKS5yb3VuZDtcbiAgICBpZiAocm91bmQgPT09ICdJbml0Jykge1xuICAgICAgdGhpcy52cmZTdGF0ZSA9IFZyZkRrZ1N0YXRlLlVuaW5pdGlhbGl6ZWQ7XG4gICAgfSBlbHNlIGlmIChyb3VuZCA9PT0gJ1dhaXRNc2cxJykge1xuICAgICAgdGhpcy52cmZTdGF0ZSA9IFZyZkRrZ1N0YXRlLlJvdW5kMTtcbiAgICB9IGVsc2UgaWYgKHJvdW5kID09PSAnV2FpdE1zZzInKSB7XG4gICAgICB0aGlzLnZyZlN0YXRlID0gVnJmRGtnU3RhdGUuUm91bmQyO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHJvdW5kID09PSAnb2JqZWN0JyAmJiByb3VuZCAhPT0gbnVsbCAmJiAnU2hhcmUnIGluIHJvdW5kKSB7XG4gICAgICB0aGlzLnZyZlN0YXRlID0gVnJmRGtnU3RhdGUuQ29tcGxldGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudnJmU3RhdGUgPSBWcmZEa2dTdGF0ZS5JbnZhbGlkU3RhdGU7XG4gICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBTdGF0ZTogJHtKU09OLnN0cmluZ2lmeShyb3VuZCl9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGlzIHBhcnR5J3MgVlJGIERLRyBjb21taXRtZW50IChWcmZLZXlnZW5Nc2cxLCBicm9hZGNhc3QpLlxuICAgKi9cbiAgYXN5bmMgaW5pdERrZygpOiBQcm9taXNlPERlc2VyaWFsaXplZE1lc3NhZ2VzPiB7XG4gICAgaWYgKCF0aGlzLnZyZldhc20pIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZFZyZldhc20oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudCA+IHRoaXMubiB8fCB0aGlzLnBhcnR5SWR4ID49IHRoaXMubikge1xuICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgcGFyYW1ldGVycyBmb3IgVlJGIERLRycpO1xuICAgIH1cbiAgICBpZiAodGhpcy52cmZTdGF0ZSAhPSBWcmZEa2dTdGF0ZS5VbmluaXRpYWxpemVkKSB7XG4gICAgICB0aHJvdyBFcnJvcignVlJGIERLRyBzZXNzaW9uIGFscmVhZHkgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIC8qIGNoZWNrcyBmb3IgZWxlY3Ryb24gcHJvY2Vzc2VzICovXG4gICAgICAhd2luZG93LnByb2Nlc3MgJiZcbiAgICAgICF3aW5kb3cucHJvY2Vzcz8uWyd0eXBlJ11cbiAgICApIHtcbiAgICAgIC8qIFRoaXMgaXMgb25seSBuZWVkZWQgZm9yIGJyb3dzZXJzL3dlYiBiZWNhdXNlIGl0IHVzZXMgZmV0Y2ggdG8gcmVzb2x2ZSB0aGUgd2FzbSBhc3NldCBmb3IgdGhlIHdlYiAqL1xuICAgICAgY29uc3QgaW5pdFZyZiA9IGF3YWl0IGltcG9ydCgnQHNpbGVuY2VsYWJvcmF0b3JpZXMvZGtscy13YXNtLWxsLXZyZi13ZWInKTtcbiAgICAgIGF3YWl0IGluaXRWcmYuZGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWVkICYmIHRoaXMuc2VlZC5sZW5ndGggIT09IDMyKSB7XG4gICAgICB0aHJvdyBFcnJvcihgU2VlZCBzaG91bGQgYmUgMzIgYnl0ZXMsIGdvdCAke3RoaXMuc2VlZC5sZW5ndGh9LmApO1xuICAgIH1cbiAgICBjb25zdCB7IFZyZktleWdlblNlc3Npb24gfSA9IHRoaXMuZ2V0VnJmV2FzbSgpO1xuICAgIHRoaXMudnJmU2Vzc2lvbiA9IHRoaXMuc2VlZFxuICAgICAgPyBuZXcgVnJmS2V5Z2VuU2Vzc2lvbih0aGlzLm4sIHRoaXMudCwgdGhpcy5wYXJ0eUlkeCwgbmV3IFVpbnQ4QXJyYXkodGhpcy5zZWVkKSlcbiAgICAgIDogbmV3IFZyZktleWdlblNlc3Npb24odGhpcy5uLCB0aGlzLnQsIHRoaXMucGFydHlJZHgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy52cmZTZXNzaW9uLmNyZWF0ZUZpcnN0TWVzc2FnZSgpO1xuICAgICAgLy8gQ29weSB0aGUgcGF5bG9hZCBvdXQgYmVmb3JlIGZyZWVpbmcgdGhlIHdhc20gbWVzc2FnZSBvYmplY3QuXG4gICAgICBjb25zdCBwYXlsb2FkID0gbmV3IFVpbnQ4QXJyYXkobWVzc2FnZS5wYXlsb2FkKTtcbiAgICAgIG1lc3NhZ2UuZnJlZSgpO1xuICAgICAgdGhpcy52cmZTZXNzaW9uQnl0ZXMgPSB0aGlzLnZyZlNlc3Npb24udG9CeXRlcygpO1xuICAgICAgdGhpcy5fZGVzZXJpYWxpemVTdGF0ZSgpO1xuICAgICAgcmV0dXJuIHsgYnJvYWRjYXN0TWVzc2FnZXM6IFt7IHBheWxvYWQsIGZyb206IHRoaXMucGFydHlJZHggfV0sIHAycE1lc3NhZ2VzOiBbXSB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyB0aGUgZmlyc3QgVlJGIG1lc3NhZ2UgZnJvbSBwYXJ0eSAke3RoaXMucGFydHlJZHh9OiAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgdGhlIG1lc3NhZ2VzIHRoaXMgcGFydHkgaG9sZHMgZm9yIHRoZSBjdXJyZW50IHJvdW5kIGFuZCByZXR1cm4gdGhpc1xuICAgKiBwYXJ0eSdzIG1lc3NhZ2VzIGZvciB0aGUgbmV4dCByb3VuZC4gQ2FsbGVycyBwYXNzIGV2ZXJ5dGhpbmcgdGhleSBob2xkOyB0aGVcbiAgICogcm91bmQgcm91dGluZyBoYXBwZW5zIGhlcmU6XG4gICAqXG4gICAqIC0gUm91bmQgMSAoV2FpdE1zZzEpOiBjb25zdW1lcyB0aGUgb3RoZXIgcGFydGllcycgY29tbWl0bWVudHMgKG93biBleGNsdWRlZCDigJRcbiAgICogICB0aGUgd2FzbSByZWplY3RzIGEgc2VuZGVyIHNldCBjb250YWluaW5nIHRoZSBwYXJ0eSdzIG93biBNc2cxKSBhbmQgZW1pdHMgdGhpc1xuICAgKiAgIHBhcnR5J3Mgb3BlbmluZ3MgKFZyZktleWdlbk1zZzIpLCBvbmUgYnJvYWRjYXN0IG1lc3NhZ2UgcGVyIHJlY2lwaWVudC5cbiAgICogLSBSb3VuZCAyIChXYWl0TXNnMik6IGNvbnN1bWVzIHRoZSBvcGVuaW5ncyBhZGRyZXNzZWQgdG8gdGhpcyBwYXJ0eSAob3duXG4gICAqICAgc2VsZi1hZGRyZXNzZWQgb3BlbmluZyBpbmNsdWRlZCkgYW5kIGZpbmFsaXplcyB0aGUgREtHLCByZXR1cm5pbmcgbm8gbWVzc2FnZXMuXG4gICAqL1xuICBhc3luYyBoYW5kbGVJbmNvbWluZ01lc3NhZ2VzKG1lc3NhZ2VzRm9ySXRoUm91bmQ6IERlc2VyaWFsaXplZE1lc3NhZ2VzKTogUHJvbWlzZTxEZXNlcmlhbGl6ZWRNZXNzYWdlcz4ge1xuICAgIHRoaXMuX3Jlc3RvcmVTZXNzaW9uKCk7XG4gICAgaWYgKCF0aGlzLnZyZlNlc3Npb24pIHtcbiAgICAgIHRocm93IEVycm9yKCdTZXNzaW9uIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICBjb25zdCB7IE1lc3NhZ2U6IFZyZk1lc3NhZ2UgfSA9IHRoaXMuZ2V0VnJmV2FzbSgpO1xuICAgIGxldCBuZXh0Um91bmRNZXNzYWdlczogVnJmV2FzbU1lc3NhZ2VbXSA9IFtdO1xuICAgIGNvbnN0IG5leHRSb3VuZERlc2VyaWFsaXplZE1lc3NhZ2VzOiBEZXNlcmlhbGl6ZWRNZXNzYWdlcyA9IHsgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLCBwMnBNZXNzYWdlczogW10gfTtcbiAgICB0cnkge1xuICAgICAgc3dpdGNoICh0aGlzLnZyZlN0YXRlKSB7XG4gICAgICAgIGNhc2UgVnJmRGtnU3RhdGUuUm91bmQxOiB7XG4gICAgICAgICAgY29uc3Qgb3RoZXJzQ29tbWl0bWVudHMgPSBtZXNzYWdlc0Zvckl0aFJvdW5kLmJyb2FkY2FzdE1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS5mcm9tICE9PSB0aGlzLnBhcnR5SWR4KTtcbiAgICAgICAgICBuZXh0Um91bmRNZXNzYWdlcyA9IHRoaXMudnJmU2Vzc2lvbi5oYW5kbGVNZXNzYWdlcyhcbiAgICAgICAgICAgIG90aGVyc0NvbW1pdG1lbnRzLm1hcCgobSkgPT4gbmV3IFZyZk1lc3NhZ2UobS5wYXlsb2FkLCBtLmZyb20pKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5fZGVzZXJpYWxpemVTdGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgVnJmRGtnU3RhdGUuUm91bmQyOiB7XG4gICAgICAgICAgY29uc3Qgb3BlbmluZ3NGb3JNZSA9IG1lc3NhZ2VzRm9ySXRoUm91bmQucDJwTWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLnRvID09PSB0aGlzLnBhcnR5SWR4KTtcbiAgICAgICAgICBuZXh0Um91bmRNZXNzYWdlcyA9IHRoaXMudnJmU2Vzc2lvbi5oYW5kbGVNZXNzYWdlcyhcbiAgICAgICAgICAgIG9wZW5pbmdzRm9yTWUubWFwKChtKSA9PiBuZXcgVnJmTWVzc2FnZShtLnBheWxvYWQsIG0uZnJvbSwgbS50bykpXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvLyB2cmZLZXlzaGFyZSgpIGNvbnN1bWVzIChhbmQgZGVhbGxvY2F0ZXMpIHRoZSBzZXNzaW9uIGluIGFsbCBjYXNlcy5cbiAgICAgICAgICBjb25zdCB2cmZLZXlTaGFyZSA9IHRoaXMudnJmU2Vzc2lvbi52cmZLZXlzaGFyZSgpO1xuICAgICAgICAgIHRoaXMudnJmS2V5U2hhcmUgPSB2cmZLZXlTaGFyZTtcbiAgICAgICAgICB0aGlzLmtleVNoYXJlQnVmZiA9IEJ1ZmZlci5mcm9tKHZyZktleVNoYXJlLnRvQnl0ZXMoKSk7XG4gICAgICAgICAgdGhpcy5wdWJsaWNLZXkgPSBCdWZmZXIuZnJvbSh2cmZLZXlTaGFyZS5wdWJsaWNLZXkpO1xuICAgICAgICAgIHRoaXMua2V5SWQgPSBCdWZmZXIuZnJvbSh2cmZLZXlTaGFyZS5rZXlJZCk7XG4gICAgICAgICAgdGhpcy5yb290Q2hhaW5Db2RlID0gQnVmZmVyLmZyb20odnJmS2V5U2hhcmUucm9vdENoYWluQ29kZSk7XG4gICAgICAgICAgdnJmS2V5U2hhcmUuZnJlZSgpO1xuICAgICAgICAgIHRoaXMudnJmU3RhdGUgPSBWcmZEa2dTdGF0ZS5Db21wbGV0ZTtcbiAgICAgICAgICByZXR1cm4gbmV4dFJvdW5kRGVzZXJpYWxpemVkTWVzc2FnZXM7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBWUkYgREtHIHN0YXRlOiAke3RoaXMudnJmU3RhdGV9YCk7XG4gICAgICB9XG5cbiAgICAgIG5leHRSb3VuZERlc2VyaWFsaXplZE1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzID0gbmV4dFJvdW5kTWVzc2FnZXNcbiAgICAgICAgLmZpbHRlcigobSkgPT4gbS50b19pZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAubWFwKChtKSA9PiAoeyBwYXlsb2FkOiBuZXcgVWludDhBcnJheShtLnBheWxvYWQpLCBmcm9tOiBtLmZyb21faWQgfSkpO1xuICAgICAgbmV4dFJvdW5kRGVzZXJpYWxpemVkTWVzc2FnZXMucDJwTWVzc2FnZXMgPSBuZXh0Um91bmRNZXNzYWdlc1xuICAgICAgICAuZmlsdGVyKChtKTogbSBpcyBWcmZXYXNtTWVzc2FnZSAmIHsgdG9faWQ6IG51bWJlciB9ID0+IG0udG9faWQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgLm1hcCgobSkgPT4gKHsgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkobS5wYXlsb2FkKSwgZnJvbTogbS5mcm9tX2lkLCB0bzogbS50b19pZCB9KSk7XG4gICAgICByZXR1cm4gbmV4dFJvdW5kRGVzZXJpYWxpemVkTWVzc2FnZXM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgRXJyb3IoYEVycm9yIHdoaWxlIGNyZWF0aW5nIFZSRiBtZXNzYWdlcyBmcm9tIHBhcnR5ICR7dGhpcy5wYXJ0eUlkeH0sIHN0YXRlICR7dGhpcy52cmZTdGF0ZX06ICR7ZX1gKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbmV4dFJvdW5kTWVzc2FnZXMuZm9yRWFjaCgobSkgPT4gbS5mcmVlKCkpO1xuICAgICAgaWYgKHRoaXMudnJmU3RhdGUgIT09IFZyZkRrZ1N0YXRlLkNvbXBsZXRlKSB7XG4gICAgICAgIHRoaXMudnJmU2Vzc2lvbkJ5dGVzID0gdGhpcy52cmZTZXNzaW9uLnRvQnl0ZXMoKTtcbiAgICAgICAgdGhpcy52cmZTZXNzaW9uID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFZSRiBrZXlzaGFyZSBieXRlcyAoQ0JPUiBWcmZLZXlzaGFyZSkgb25jZSB0aGUgREtHIGlzIGNvbXBsZXRlLlxuICAgKiBUaGlzIGJ1ZmZlciBpcyBwcml2YXRlIGtleSBtYXRlcmlhbC5cbiAgICovXG4gIGdldEtleVNoYXJlKCk6IEJ1ZmZlciB7XG4gICAgaWYgKCF0aGlzLmtleVNoYXJlQnVmZikge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NhbiBub3QgZ2V0IGtleSBzaGFyZSwgVlJGIERLRyBpcyBub3QgY29tcGxldGUgeWV0LicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5rZXlTaGFyZUJ1ZmY7XG4gIH1cblxuICAvKiogMzItYnl0ZSBjb21wcmVzc2VkIFJpc3RyZXR0byBWUkYgcHVibGljIGtleSwgYXZhaWxhYmxlIG9uY2UgdGhlIERLRyBpcyBjb21wbGV0ZS4gKi9cbiAgZ2V0UHVibGljS2V5KCk6IEJ1ZmZlciB7XG4gICAgaWYgKCF0aGlzLnB1YmxpY0tleSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NhbiBub3QgZ2V0IHB1YmxpYyBrZXksIFZSRiBES0cgaXMgbm90IGNvbXBsZXRlIHlldC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHVibGljS2V5O1xuICB9XG5cbiAgLyoqIDMyLWJ5dGUgVlJGIGtleSBpZGVudGlmaWVyLCBhdmFpbGFibGUgb25jZSB0aGUgREtHIGlzIGNvbXBsZXRlLiAqL1xuICBnZXRLZXlJZCgpOiBCdWZmZXIge1xuICAgIGlmICghdGhpcy5rZXlJZCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NhbiBub3QgZ2V0IGtleSBpZCwgVlJGIERLRyBpcyBub3QgY29tcGxldGUgeWV0LicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5rZXlJZDtcbiAgfVxuXG4gIC8qKiAzMi1ieXRlIFZSRiByb290IGNoYWluIGNvZGUsIGF2YWlsYWJsZSBvbmNlIHRoZSBES0cgaXMgY29tcGxldGUuICovXG4gIGdldFJvb3RDaGFpbkNvZGUoKTogQnVmZmVyIHtcbiAgICBpZiAoIXRoaXMucm9vdENoYWluQ29kZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NhbiBub3QgZ2V0IHJvb3QgY2hhaW4gY29kZSwgVlJGIERLRyBpcyBub3QgY29tcGxldGUgeWV0LicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yb290Q2hhaW5Db2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBzZXNzaW9uIGRhdGEgdGhhdCBjYW4gYmUgdXNlZCB0byByZXN0b3JlIHRoZSBzZXNzaW9uIGxhdGVyLlxuICAgKlxuICAgKiBUaGUgcmV0dXJuZWQgc2Vzc2lvbiBieXRlcyBhcmUgc2VjcmV0IGtleSBtYXRlcmlhbCDigJQgdGhleSBjYXJyeSB0aGlzIHBhcnR5J3NcbiAgICogc2VjcmV0IHBvbHlub21pYWwgc2hhcmUuIFRoZXkgbXVzdCBuZXZlciBiZSBsb2dnZWQgb3IgcGVyc2lzdGVkIGluIHRoZSBjbGVhcjtcbiAgICogdGhlIGNhbGxlciBlbmNyeXB0cyB0aGVtIGV4YWN0bHkgbGlrZSB0aGUga2V5IHNoYXJlIGl0c2VsZi5cbiAgICovXG4gIGdldFNlc3Npb25EYXRhKCk6IFZyZkRrZ1Nlc3Npb25EYXRhIHtcbiAgICBjb25zdCBzZXNzaW9uRGF0YTogVnJmRGtnU2Vzc2lvbkRhdGEgPSB7XG4gICAgICB2cmZTZXNzaW9uQnl0ZXM6IHRoaXMudnJmU2Vzc2lvbkJ5dGVzLFxuICAgICAgdnJmU3RhdGU6IHRoaXMudnJmU3RhdGUsXG4gICAgfTtcbiAgICBpZiAodGhpcy5rZXlTaGFyZUJ1ZmYpIHtcbiAgICAgIHNlc3Npb25EYXRhLmtleVNoYXJlQnVmZiA9IHRoaXMua2V5U2hhcmVCdWZmO1xuICAgIH1cbiAgICByZXR1cm4gc2Vzc2lvbkRhdGE7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSBhIFZSRiBES0cgc2Vzc2lvbiBmcm9tIHByZXZpb3VzIHNlc3Npb24gZGF0YS5cbiAgICogTm90ZTogVGhpcyBzaG91bGQgbm90IGJlIHVzZWQgZm9yIFJvdW5kIDEgYXMgdGhhdCdzIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZS5cbiAgICogVGhlIHJvdW5kIHN0YXRlIGlzIHJlLWRlcml2ZWQgZnJvbSB0aGUgd2FzbSBzZXNzaW9uIGJ5dGVzLCBub3QgdHJ1c3RlZCBmcm9tIHRoZVxuICAgKiBjYWxsZXItc3VwcGxpZWQgZW51bSwgc28gYSB0YW1wZXJlZCBgdnJmU3RhdGVgIGNhbm5vdCBzdGVlciB0aGUgcHJvdG9jb2wuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgcmVzdG9yZVNlc3Npb24oXG4gICAgbjogbnVtYmVyLFxuICAgIHQ6IG51bWJlcixcbiAgICBwYXJ0eUlkeDogbnVtYmVyLFxuICAgIHNlc3Npb25EYXRhOiBWcmZEa2dTZXNzaW9uRGF0YSxcbiAgICBzZWVkPzogQnVmZmVyLFxuICAgIHZyZldhc20/OiBCdW5kbGVyVnJmV2FzbWVyXG4gICk6IFByb21pc2U8VnJmRGtnPiB7XG4gICAgY29uc3QgdnJmRGtnID0gbmV3IFZyZkRrZyhuLCB0LCBwYXJ0eUlkeCwgc2VlZCwgdnJmV2FzbSk7XG4gICAgaWYgKCF2cmZEa2cudnJmV2FzbSkge1xuICAgICAgYXdhaXQgdnJmRGtnLmxvYWRWcmZXYXNtKCk7XG4gICAgfVxuICAgIHZyZkRrZy52cmZTZXNzaW9uQnl0ZXMgPSBzZXNzaW9uRGF0YS52cmZTZXNzaW9uQnl0ZXM7XG4gICAgdnJmRGtnLl9yZXN0b3JlU2Vzc2lvbigpO1xuICAgIHZyZkRrZy5fZGVzZXJpYWxpemVTdGF0ZSgpO1xuICAgIGlmIChzZXNzaW9uRGF0YS5rZXlTaGFyZUJ1ZmYpIHtcbiAgICAgIHZyZkRrZy5rZXlTaGFyZUJ1ZmYgPSBzZXNzaW9uRGF0YS5rZXlTaGFyZUJ1ZmY7XG4gICAgfVxuICAgIHJldHVybiB2cmZEa2c7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export * as DklsVrf from './dkg';
2
+ export * as DklsVrfTypes from './types';
3
+ export * as DklsVrfUtils from './util';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tss/dkls-vrf/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,YAAY,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,40 @@
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.DklsVrfUtils = exports.DklsVrfTypes = exports.DklsVrf = void 0;
37
+ exports.DklsVrf = __importStar(require("./dkg"));
38
+ exports.DklsVrfTypes = __importStar(require("./types"));
39
+ exports.DklsVrfUtils = __importStar(require("./util"));
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2RrbHMtdnJmL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFpQztBQUNqQyx3REFBd0M7QUFDeEMsdURBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogYXMgRGtsc1ZyZiBmcm9tICcuL2RrZyc7XG5leHBvcnQgKiBhcyBEa2xzVnJmVHlwZXMgZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBhcyBEa2xzVnJmVXRpbHMgZnJvbSAnLi91dGlsJztcbiJdfQ==
@@ -0,0 +1,28 @@
1
+ /**
2
+ * States of the VRF DKG state machine: a two-round, commit-then-open distributed
3
+ * key generation. Kept separate from `ecdsa-dkls`'s `DkgState` because the round
4
+ * counts differ (2 vs 4).
5
+ *
6
+ * The wasm session bytes embed a round tag (`Init` / `WaitMsg1` / `WaitMsg2` /
7
+ * `{Share: …}`); `VrfDkg` re-derives this state from the bytes rather than
8
+ * trusting a caller-supplied value.
9
+ */
10
+ export declare enum VrfDkgState {
11
+ Uninitialized = 0,
12
+ /** Commitment created and broadcast; waiting for the other parties' VrfKeygenMsg1. */
13
+ Round1 = 1,
14
+ /** Openings created and broadcast; waiting for the other parties' VrfKeygenMsg2. */
15
+ Round2 = 2,
16
+ Complete = 3,
17
+ InvalidState = 4
18
+ }
19
+ export interface VrfDkgSessionData {
20
+ /**
21
+ * Serialized wasm session. Secret key material — it carries the party's
22
+ * secret polynomial share. Never log it or persist it in the clear.
23
+ */
24
+ vrfSessionBytes: Uint8Array;
25
+ vrfState: VrfDkgState;
26
+ keyShareBuff?: Buffer;
27
+ }
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tss/dkls-vrf/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,oBAAY,WAAW;IACrB,aAAa,IAAI;IACjB,sFAAsF;IACtF,MAAM,IAAA;IACN,oFAAoF;IACpF,MAAM,IAAA;IACN,QAAQ,IAAA;IACR,YAAY,IAAA;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,eAAe,EAAE,UAAU,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VrfDkgState = void 0;
4
+ /**
5
+ * States of the VRF DKG state machine: a two-round, commit-then-open distributed
6
+ * key generation. Kept separate from `ecdsa-dkls`'s `DkgState` because the round
7
+ * counts differ (2 vs 4).
8
+ *
9
+ * The wasm session bytes embed a round tag (`Init` / `WaitMsg1` / `WaitMsg2` /
10
+ * `{Share: …}`); `VrfDkg` re-derives this state from the bytes rather than
11
+ * trusting a caller-supplied value.
12
+ */
13
+ var VrfDkgState;
14
+ (function (VrfDkgState) {
15
+ VrfDkgState[VrfDkgState["Uninitialized"] = 0] = "Uninitialized";
16
+ /** Commitment created and broadcast; waiting for the other parties' VrfKeygenMsg1. */
17
+ VrfDkgState[VrfDkgState["Round1"] = 1] = "Round1";
18
+ /** Openings created and broadcast; waiting for the other parties' VrfKeygenMsg2. */
19
+ VrfDkgState[VrfDkgState["Round2"] = 2] = "Round2";
20
+ VrfDkgState[VrfDkgState["Complete"] = 3] = "Complete";
21
+ VrfDkgState[VrfDkgState["InvalidState"] = 4] = "InvalidState";
22
+ })(VrfDkgState || (exports.VrfDkgState = VrfDkgState = {}));
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2RrbHMtdnJmL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsSUFBWSxXQVFYO0FBUkQsV0FBWSxXQUFXO0lBQ3JCLCtEQUFpQixDQUFBO0lBQ2pCLHNGQUFzRjtJQUN0RixpREFBTSxDQUFBO0lBQ04sb0ZBQW9GO0lBQ3BGLGlEQUFNLENBQUE7SUFDTixxREFBUSxDQUFBO0lBQ1IsNkRBQVksQ0FBQTtBQUNkLENBQUMsRUFSVyxXQUFXLDJCQUFYLFdBQVcsUUFRdEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YXRlcyBvZiB0aGUgVlJGIERLRyBzdGF0ZSBtYWNoaW5lOiBhIHR3by1yb3VuZCwgY29tbWl0LXRoZW4tb3BlbiBkaXN0cmlidXRlZFxuICoga2V5IGdlbmVyYXRpb24uIEtlcHQgc2VwYXJhdGUgZnJvbSBgZWNkc2EtZGtsc2AncyBgRGtnU3RhdGVgIGJlY2F1c2UgdGhlIHJvdW5kXG4gKiBjb3VudHMgZGlmZmVyICgyIHZzIDQpLlxuICpcbiAqIFRoZSB3YXNtIHNlc3Npb24gYnl0ZXMgZW1iZWQgYSByb3VuZCB0YWcgKGBJbml0YCAvIGBXYWl0TXNnMWAgLyBgV2FpdE1zZzJgIC9cbiAqIGB7U2hhcmU6IOKApn1gKTsgYFZyZkRrZ2AgcmUtZGVyaXZlcyB0aGlzIHN0YXRlIGZyb20gdGhlIGJ5dGVzIHJhdGhlciB0aGFuXG4gKiB0cnVzdGluZyBhIGNhbGxlci1zdXBwbGllZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGVudW0gVnJmRGtnU3RhdGUge1xuICBVbmluaXRpYWxpemVkID0gMCxcbiAgLyoqIENvbW1pdG1lbnQgY3JlYXRlZCBhbmQgYnJvYWRjYXN0OyB3YWl0aW5nIGZvciB0aGUgb3RoZXIgcGFydGllcycgVnJmS2V5Z2VuTXNnMS4gKi9cbiAgUm91bmQxLFxuICAvKiogT3BlbmluZ3MgY3JlYXRlZCBhbmQgYnJvYWRjYXN0OyB3YWl0aW5nIGZvciB0aGUgb3RoZXIgcGFydGllcycgVnJmS2V5Z2VuTXNnMi4gKi9cbiAgUm91bmQyLFxuICBDb21wbGV0ZSxcbiAgSW52YWxpZFN0YXRlLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZyZkRrZ1Nlc3Npb25EYXRhIHtcbiAgLyoqXG4gICAqIFNlcmlhbGl6ZWQgd2FzbSBzZXNzaW9uLiBTZWNyZXQga2V5IG1hdGVyaWFsIOKAlCBpdCBjYXJyaWVzIHRoZSBwYXJ0eSdzXG4gICAqIHNlY3JldCBwb2x5bm9taWFsIHNoYXJlLiBOZXZlciBsb2cgaXQgb3IgcGVyc2lzdCBpdCBpbiB0aGUgY2xlYXIuXG4gICAqL1xuICB2cmZTZXNzaW9uQnl0ZXM6IFVpbnQ4QXJyYXk7XG4gIHZyZlN0YXRlOiBWcmZEa2dTdGF0ZTtcbiAga2V5U2hhcmVCdWZmPzogQnVmZmVyO1xufVxuIl19
@@ -0,0 +1,9 @@
1
+ import { Buffer } from 'buffer';
2
+ import { VrfDkg } from './dkg';
3
+ /**
4
+ * Runs a local 2-of-3 VRF DKG across user (0), backup (1) and bitgo (2) parties and
5
+ * returns the three completed VrfDkg sessions, mirroring `generateDKGKeyShares` from
6
+ * `ecdsa-dkls/util.ts` so VRF tests read like the existing DKLS ones.
7
+ */
8
+ export declare function generateVrfDKGKeyShares(seedUser?: Buffer, seedBackup?: Buffer, seedBitgo?: Buffer): Promise<[VrfDkg, VrfDkg, VrfDkg]>;
9
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/tss/dkls-vrf/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CA0CnC"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateVrfDKGKeyShares = generateVrfDKGKeyShares;
4
+ const dkg_1 = require("./dkg");
5
+ /**
6
+ * Runs a local 2-of-3 VRF DKG across user (0), backup (1) and bitgo (2) parties and
7
+ * returns the three completed VrfDkg sessions, mirroring `generateDKGKeyShares` from
8
+ * `ecdsa-dkls/util.ts` so VRF tests read like the existing DKLS ones.
9
+ */
10
+ async function generateVrfDKGKeyShares(seedUser, seedBackup, seedBitgo) {
11
+ const user = new dkg_1.VrfDkg(3, 2, 0, seedUser);
12
+ const backup = new dkg_1.VrfDkg(3, 2, 1, seedBackup);
13
+ const bitgo = new dkg_1.VrfDkg(3, 2, 2, seedBitgo);
14
+ // #region round 1
15
+ const userRound1Messages = await user.initDkg();
16
+ const backupRound1Messages = await backup.initDkg();
17
+ const bitgoRound1Messages = await bitgo.initDkg();
18
+ const bitgoRound2Messages = await bitgo.handleIncomingMessages({
19
+ p2pMessages: [],
20
+ broadcastMessages: [...userRound1Messages.broadcastMessages, ...backupRound1Messages.broadcastMessages],
21
+ });
22
+ // #endregion
23
+ // #region round 2
24
+ const userRound2Messages = await user.handleIncomingMessages({
25
+ p2pMessages: [],
26
+ broadcastMessages: [...bitgoRound1Messages.broadcastMessages, ...backupRound1Messages.broadcastMessages],
27
+ });
28
+ const backupRound2Messages = await backup.handleIncomingMessages({
29
+ p2pMessages: [],
30
+ broadcastMessages: [...userRound1Messages.broadcastMessages, ...bitgoRound1Messages.broadcastMessages],
31
+ });
32
+ await bitgo.handleIncomingMessages({
33
+ p2pMessages: [bitgoRound2Messages, userRound2Messages, backupRound2Messages]
34
+ .flatMap((m) => m.p2pMessages)
35
+ .filter((m) => m.to === 2),
36
+ broadcastMessages: [],
37
+ });
38
+ await user.handleIncomingMessages({
39
+ p2pMessages: [bitgoRound2Messages, userRound2Messages, backupRound2Messages]
40
+ .flatMap((m) => m.p2pMessages)
41
+ .filter((m) => m.to === 0),
42
+ broadcastMessages: [],
43
+ });
44
+ await backup.handleIncomingMessages({
45
+ p2pMessages: [bitgoRound2Messages, userRound2Messages, backupRound2Messages]
46
+ .flatMap((m) => m.p2pMessages)
47
+ .filter((m) => m.to === 1),
48
+ broadcastMessages: [],
49
+ });
50
+ return [user, backup, bitgo];
51
+ }
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvZGtscy12cmYvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVFBLDBEQThDQztBQXJERCwrQkFBK0I7QUFFL0I7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsUUFBaUIsRUFDakIsVUFBbUIsRUFDbkIsU0FBa0I7SUFFbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxZQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxZQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0Msa0JBQWtCO0lBQ2xCLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDaEQsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwRCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xELE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxLQUFLLENBQUMsc0JBQXNCLENBQUM7UUFDN0QsV0FBVyxFQUFFLEVBQUU7UUFDZixpQkFBaUIsRUFBRSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQztLQUN4RyxDQUFDLENBQUM7SUFDSCxhQUFhO0lBRWIsa0JBQWtCO0lBQ2xCLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDM0QsV0FBVyxFQUFFLEVBQUU7UUFDZixpQkFBaUIsRUFBRSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQztLQUN6RyxDQUFDLENBQUM7SUFDSCxNQUFNLG9CQUFvQixHQUFHLE1BQU0sTUFBTSxDQUFDLHNCQUFzQixDQUFDO1FBQy9ELFdBQVcsRUFBRSxFQUFFO1FBQ2YsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLEdBQUcsbUJBQW1CLENBQUMsaUJBQWlCLENBQUM7S0FDdkcsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxLQUFLLENBQUMsc0JBQXNCLENBQUM7UUFDakMsV0FBVyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUM7YUFDekUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO2FBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsaUJBQWlCLEVBQUUsRUFBRTtLQUN0QixDQUFDLENBQUM7SUFDSCxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztRQUNoQyxXQUFXLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsQ0FBQzthQUN6RSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7YUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixpQkFBaUIsRUFBRSxFQUFFO0tBQ3RCLENBQUMsQ0FBQztJQUNILE1BQU0sTUFBTSxDQUFDLHNCQUFzQixDQUFDO1FBQ2xDLFdBQVcsRUFBRSxDQUFDLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixDQUFDO2FBQ3pFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzthQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLGlCQUFpQixFQUFFLEVBQUU7S0FDdEIsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgeyBWcmZEa2cgfSBmcm9tICcuL2RrZyc7XG5cbi8qKlxuICogUnVucyBhIGxvY2FsIDItb2YtMyBWUkYgREtHIGFjcm9zcyB1c2VyICgwKSwgYmFja3VwICgxKSBhbmQgYml0Z28gKDIpIHBhcnRpZXMgYW5kXG4gKiByZXR1cm5zIHRoZSB0aHJlZSBjb21wbGV0ZWQgVnJmRGtnIHNlc3Npb25zLCBtaXJyb3JpbmcgYGdlbmVyYXRlREtHS2V5U2hhcmVzYCBmcm9tXG4gKiBgZWNkc2EtZGtscy91dGlsLnRzYCBzbyBWUkYgdGVzdHMgcmVhZCBsaWtlIHRoZSBleGlzdGluZyBES0xTIG9uZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVZyZkRLR0tleVNoYXJlcyhcbiAgc2VlZFVzZXI/OiBCdWZmZXIsXG4gIHNlZWRCYWNrdXA/OiBCdWZmZXIsXG4gIHNlZWRCaXRnbz86IEJ1ZmZlclxuKTogUHJvbWlzZTxbVnJmRGtnLCBWcmZEa2csIFZyZkRrZ10+IHtcbiAgY29uc3QgdXNlciA9IG5ldyBWcmZEa2coMywgMiwgMCwgc2VlZFVzZXIpO1xuICBjb25zdCBiYWNrdXAgPSBuZXcgVnJmRGtnKDMsIDIsIDEsIHNlZWRCYWNrdXApO1xuICBjb25zdCBiaXRnbyA9IG5ldyBWcmZEa2coMywgMiwgMiwgc2VlZEJpdGdvKTtcbiAgLy8gI3JlZ2lvbiByb3VuZCAxXG4gIGNvbnN0IHVzZXJSb3VuZDFNZXNzYWdlcyA9IGF3YWl0IHVzZXIuaW5pdERrZygpO1xuICBjb25zdCBiYWNrdXBSb3VuZDFNZXNzYWdlcyA9IGF3YWl0IGJhY2t1cC5pbml0RGtnKCk7XG4gIGNvbnN0IGJpdGdvUm91bmQxTWVzc2FnZXMgPSBhd2FpdCBiaXRnby5pbml0RGtnKCk7XG4gIGNvbnN0IGJpdGdvUm91bmQyTWVzc2FnZXMgPSBhd2FpdCBiaXRnby5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogW10sXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFsuLi51c2VyUm91bmQxTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMsIC4uLmJhY2t1cFJvdW5kMU1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzXSxcbiAgfSk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHJvdW5kIDJcbiAgY29uc3QgdXNlclJvdW5kMk1lc3NhZ2VzID0gYXdhaXQgdXNlci5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogW10sXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFsuLi5iaXRnb1JvdW5kMU1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLCAuLi5iYWNrdXBSb3VuZDFNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlc10sXG4gIH0pO1xuICBjb25zdCBiYWNrdXBSb3VuZDJNZXNzYWdlcyA9IGF3YWl0IGJhY2t1cC5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogW10sXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFsuLi51c2VyUm91bmQxTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMsIC4uLmJpdGdvUm91bmQxTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXNdLFxuICB9KTtcbiAgYXdhaXQgYml0Z28uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IFtiaXRnb1JvdW5kMk1lc3NhZ2VzLCB1c2VyUm91bmQyTWVzc2FnZXMsIGJhY2t1cFJvdW5kMk1lc3NhZ2VzXVxuICAgICAgLmZsYXRNYXAoKG0pID0+IG0ucDJwTWVzc2FnZXMpXG4gICAgICAuZmlsdGVyKChtKSA9PiBtLnRvID09PSAyKSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gIH0pO1xuICBhd2FpdCB1c2VyLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBbYml0Z29Sb3VuZDJNZXNzYWdlcywgdXNlclJvdW5kMk1lc3NhZ2VzLCBiYWNrdXBSb3VuZDJNZXNzYWdlc11cbiAgICAgIC5mbGF0TWFwKChtKSA9PiBtLnAycE1lc3NhZ2VzKVxuICAgICAgLmZpbHRlcigobSkgPT4gbS50byA9PT0gMCksXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICB9KTtcbiAgYXdhaXQgYmFja3VwLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBbYml0Z29Sb3VuZDJNZXNzYWdlcywgdXNlclJvdW5kMk1lc3NhZ2VzLCBiYWNrdXBSb3VuZDJNZXNzYWdlc11cbiAgICAgIC5mbGF0TWFwKChtKSA9PiBtLnAycE1lc3NhZ2VzKVxuICAgICAgLmZpbHRlcigobSkgPT4gbS50byA9PT0gMSksXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICB9KTtcbiAgcmV0dXJuIFt1c2VyLCBiYWNrdXAsIGJpdGdvXTtcbn1cbiJdfQ==
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
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
+ })();
21
35
  Object.defineProperty(exports, "__esModule", { value: true });
22
36
  exports.minModulusBitLength = exports.EcdsaZkVProof = exports.EcdsaPaillierProof = exports.EcdsaRangeProof = exports.EcdsaTypes = void 0;
23
37
  exports.EcdsaTypes = __importStar(require("./types"));
@@ -25,4 +39,4 @@ exports.EcdsaRangeProof = __importStar(require("./rangeproof"));
25
39
  exports.EcdsaPaillierProof = __importStar(require("./paillierproof"));
26
40
  exports.EcdsaZkVProof = __importStar(require("./zkVProof"));
27
41
  exports.minModulusBitLength = 3072;
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VjZHNhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzREFBc0M7QUFDdEMsZ0VBQWdEO0FBQ2hELHNFQUFzRDtBQUN0RCw0REFBNEM7QUFFL0IsUUFBQSxtQkFBbUIsR0FBRyxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBhcyBFY2RzYVR5cGVzIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogYXMgRWNkc2FSYW5nZVByb29mIGZyb20gJy4vcmFuZ2Vwcm9vZic7XG5leHBvcnQgKiBhcyBFY2RzYVBhaWxsaWVyUHJvb2YgZnJvbSAnLi9wYWlsbGllcnByb29mJztcbmV4cG9ydCAqIGFzIEVjZHNhWmtWUHJvb2YgZnJvbSAnLi96a1ZQcm9vZic7XG5cbmV4cG9ydCBjb25zdCBtaW5Nb2R1bHVzQml0TGVuZ3RoID0gMzA3MjtcbiJdfQ==
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VjZHNhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUFzQztBQUN0QyxnRUFBZ0Q7QUFDaEQsc0VBQXNEO0FBQ3RELDREQUE0QztBQUUvQixRQUFBLG1CQUFtQixHQUFHLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGFzIEVjZHNhVHlwZXMgZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBhcyBFY2RzYVJhbmdlUHJvb2YgZnJvbSAnLi9yYW5nZXByb29mJztcbmV4cG9ydCAqIGFzIEVjZHNhUGFpbGxpZXJQcm9vZiBmcm9tICcuL3BhaWxsaWVycHJvb2YnO1xuZXhwb3J0ICogYXMgRWNkc2Faa1ZQcm9vZiBmcm9tICcuL3prVlByb29mJztcblxuZXhwb3J0IGNvbnN0IG1pbk1vZHVsdXNCaXRMZW5ndGggPSAzMDcyO1xuIl19