@baozi.bet/mcp-server 4.0.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 (60) hide show
  1. package/README.md +294 -0
  2. package/dist/__tests__/full-test.d.ts +1 -0
  3. package/dist/__tests__/full-test.js +291 -0
  4. package/dist/builders/affiliate-transaction.d.ts +41 -0
  5. package/dist/builders/affiliate-transaction.js +123 -0
  6. package/dist/builders/bet-transaction.d.ts +70 -0
  7. package/dist/builders/bet-transaction.js +323 -0
  8. package/dist/builders/claim-transaction.d.ts +57 -0
  9. package/dist/builders/claim-transaction.js +196 -0
  10. package/dist/builders/creator-transaction.d.ts +49 -0
  11. package/dist/builders/creator-transaction.js +177 -0
  12. package/dist/builders/dispute-transaction.d.ts +81 -0
  13. package/dist/builders/dispute-transaction.js +215 -0
  14. package/dist/builders/index.d.ts +14 -0
  15. package/dist/builders/index.js +15 -0
  16. package/dist/builders/market-creation-tx.d.ts +65 -0
  17. package/dist/builders/market-creation-tx.js +362 -0
  18. package/dist/builders/market-management-transaction.d.ts +85 -0
  19. package/dist/builders/market-management-transaction.js +239 -0
  20. package/dist/builders/race-transaction.d.ts +67 -0
  21. package/dist/builders/race-transaction.js +242 -0
  22. package/dist/builders/resolution-transaction.d.ts +108 -0
  23. package/dist/builders/resolution-transaction.js +250 -0
  24. package/dist/builders/whitelist-transaction.d.ts +72 -0
  25. package/dist/builders/whitelist-transaction.js +179 -0
  26. package/dist/config.d.ts +138 -0
  27. package/dist/config.js +307 -0
  28. package/dist/handlers/agent-network.d.ts +81 -0
  29. package/dist/handlers/agent-network.js +332 -0
  30. package/dist/handlers/claims.d.ts +47 -0
  31. package/dist/handlers/claims.js +218 -0
  32. package/dist/handlers/market-creation.d.ts +154 -0
  33. package/dist/handlers/market-creation.js +290 -0
  34. package/dist/handlers/markets.d.ts +41 -0
  35. package/dist/handlers/markets.js +319 -0
  36. package/dist/handlers/positions.d.ts +40 -0
  37. package/dist/handlers/positions.js +244 -0
  38. package/dist/handlers/quote.d.ts +33 -0
  39. package/dist/handlers/quote.js +144 -0
  40. package/dist/handlers/race-markets.d.ts +54 -0
  41. package/dist/handlers/race-markets.js +308 -0
  42. package/dist/handlers/resolution.d.ts +43 -0
  43. package/dist/handlers/resolution.js +194 -0
  44. package/dist/index.d.ts +2 -0
  45. package/dist/index.js +109 -0
  46. package/dist/resources.d.ts +13 -0
  47. package/dist/resources.js +336 -0
  48. package/dist/tools.d.ts +3109 -0
  49. package/dist/tools.js +1956 -0
  50. package/dist/validation/bet-rules.d.ts +82 -0
  51. package/dist/validation/bet-rules.js +276 -0
  52. package/dist/validation/creation-rules.d.ts +69 -0
  53. package/dist/validation/creation-rules.js +302 -0
  54. package/dist/validation/index.d.ts +6 -0
  55. package/dist/validation/index.js +7 -0
  56. package/dist/validation/market-rules.d.ts +60 -0
  57. package/dist/validation/market-rules.js +237 -0
  58. package/dist/validation/parimutuel-rules.d.ts +117 -0
  59. package/dist/validation/parimutuel-rules.js +270 -0
  60. package/package.json +52 -0
@@ -0,0 +1,215 @@
1
+ /**
2
+ * Dispute Transaction Builders
3
+ *
4
+ * IMPORTANT: Account structures verified against IDL v4.7.6
5
+ */
6
+ import { Connection, PublicKey, Transaction, TransactionInstruction, SystemProgram, } from '@solana/web3.js';
7
+ import { PROGRAM_ID, CONFIG_PDA, RPC_ENDPOINT, SEEDS, } from '../config.js';
8
+ // =============================================================================
9
+ // DISCRIMINATORS (from IDL)
10
+ // =============================================================================
11
+ const DISCRIMINATORS = {
12
+ flag_dispute: Buffer.from([150, 222, 78, 72, 117, 140, 2, 75]),
13
+ flag_race_dispute: Buffer.from([154, 160, 110, 29, 65, 3, 77, 7]),
14
+ vote_council: Buffer.from([252, 167, 165, 182, 221, 242, 174, 249]),
15
+ vote_council_race: Buffer.from([79, 176, 145, 193, 225, 24, 183, 234]),
16
+ change_council_vote: Buffer.from([70, 96, 72, 253, 134, 120, 254, 76]),
17
+ change_council_vote_race: Buffer.from([54, 185, 210, 126, 40, 252, 146, 6]),
18
+ };
19
+ // =============================================================================
20
+ // PDA DERIVATION
21
+ // =============================================================================
22
+ function deriveDisputeMetaPda(marketPda) {
23
+ const [pda] = PublicKey.findProgramAddressSync([SEEDS.DISPUTE_META, marketPda.toBuffer()], PROGRAM_ID);
24
+ return pda;
25
+ }
26
+ function deriveCouncilVotePda(marketPda, voter) {
27
+ const [pda] = PublicKey.findProgramAddressSync([Buffer.from('council_vote'), marketPda.toBuffer(), voter.toBuffer()], PROGRAM_ID);
28
+ return pda;
29
+ }
30
+ function deriveRaceVoteRecordPda(raceMarketPda, voter) {
31
+ const [pda] = PublicKey.findProgramAddressSync([Buffer.from('race_council_vote'), raceMarketPda.toBuffer(), voter.toBuffer()], PROGRAM_ID);
32
+ return pda;
33
+ }
34
+ // =============================================================================
35
+ // BOOLEAN MARKET DISPUTES
36
+ // =============================================================================
37
+ /**
38
+ * Build flag_dispute transaction
39
+ * IDL Accounts: config, market, dispute_meta, authority
40
+ */
41
+ export async function buildFlagDisputeTransaction(params) {
42
+ const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
43
+ const marketPubkey = new PublicKey(params.marketPda);
44
+ const disputerPubkey = new PublicKey(params.disputerWallet);
45
+ const disputeMetaPda = deriveDisputeMetaPda(marketPubkey);
46
+ const data = DISCRIMINATORS.flag_dispute;
47
+ const keys = [
48
+ { pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
49
+ { pubkey: marketPubkey, isSigner: false, isWritable: true },
50
+ { pubkey: disputeMetaPda, isSigner: false, isWritable: true },
51
+ { pubkey: disputerPubkey, isSigner: true, isWritable: false },
52
+ ];
53
+ const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
54
+ const transaction = new Transaction().add(instruction);
55
+ const { blockhash } = await conn.getLatestBlockhash('finalized');
56
+ transaction.recentBlockhash = blockhash;
57
+ transaction.feePayer = disputerPubkey;
58
+ return {
59
+ transaction,
60
+ serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
61
+ };
62
+ }
63
+ /**
64
+ * Build vote_council transaction
65
+ * IDL Accounts: config, market, council_vote, dispute_meta, voter, system_program
66
+ */
67
+ export async function buildVoteCouncilTransaction(params) {
68
+ const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
69
+ const marketPubkey = new PublicKey(params.marketPda);
70
+ const voterPubkey = new PublicKey(params.voterWallet);
71
+ const councilVotePda = deriveCouncilVotePda(marketPubkey, voterPubkey);
72
+ const disputeMetaPda = deriveDisputeMetaPda(marketPubkey);
73
+ // Instruction data: discriminator + vote (bool)
74
+ const data = Buffer.alloc(9);
75
+ DISCRIMINATORS.vote_council.copy(data, 0);
76
+ data.writeUInt8(params.voteYes ? 1 : 0, 8);
77
+ const keys = [
78
+ { pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
79
+ { pubkey: marketPubkey, isSigner: false, isWritable: true },
80
+ { pubkey: councilVotePda, isSigner: false, isWritable: true },
81
+ { pubkey: disputeMetaPda, isSigner: false, isWritable: true },
82
+ { pubkey: voterPubkey, isSigner: true, isWritable: true },
83
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
84
+ ];
85
+ const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
86
+ const transaction = new Transaction().add(instruction);
87
+ const { blockhash } = await conn.getLatestBlockhash('finalized');
88
+ transaction.recentBlockhash = blockhash;
89
+ transaction.feePayer = voterPubkey;
90
+ return {
91
+ transaction,
92
+ serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
93
+ };
94
+ }
95
+ /**
96
+ * Build change_council_vote transaction
97
+ * IDL Accounts: config, market, council_vote, dispute_meta, voter
98
+ */
99
+ export async function buildChangeCouncilVoteTransaction(params) {
100
+ const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
101
+ const marketPubkey = new PublicKey(params.marketPda);
102
+ const voterPubkey = new PublicKey(params.voterWallet);
103
+ const councilVotePda = deriveCouncilVotePda(marketPubkey, voterPubkey);
104
+ const disputeMetaPda = deriveDisputeMetaPda(marketPubkey);
105
+ const data = Buffer.alloc(9);
106
+ DISCRIMINATORS.change_council_vote.copy(data, 0);
107
+ data.writeUInt8(params.newVoteYes ? 1 : 0, 8);
108
+ const keys = [
109
+ { pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
110
+ { pubkey: marketPubkey, isSigner: false, isWritable: true },
111
+ { pubkey: councilVotePda, isSigner: false, isWritable: true },
112
+ { pubkey: disputeMetaPda, isSigner: false, isWritable: true },
113
+ { pubkey: voterPubkey, isSigner: true, isWritable: false },
114
+ ];
115
+ const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
116
+ const transaction = new Transaction().add(instruction);
117
+ const { blockhash } = await conn.getLatestBlockhash('finalized');
118
+ transaction.recentBlockhash = blockhash;
119
+ transaction.feePayer = voterPubkey;
120
+ return {
121
+ transaction,
122
+ serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
123
+ };
124
+ }
125
+ // =============================================================================
126
+ // RACE MARKET DISPUTES
127
+ // =============================================================================
128
+ /**
129
+ * Build flag_race_dispute transaction
130
+ * IDL Accounts: config, race_market, dispute_meta, authority
131
+ */
132
+ export async function buildFlagRaceDisputeTransaction(params) {
133
+ const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
134
+ const raceMarketPubkey = new PublicKey(params.raceMarketPda);
135
+ const disputerPubkey = new PublicKey(params.disputerWallet);
136
+ const disputeMetaPda = deriveDisputeMetaPda(raceMarketPubkey);
137
+ const data = DISCRIMINATORS.flag_race_dispute;
138
+ const keys = [
139
+ { pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
140
+ { pubkey: raceMarketPubkey, isSigner: false, isWritable: true },
141
+ { pubkey: disputeMetaPda, isSigner: false, isWritable: true },
142
+ { pubkey: disputerPubkey, isSigner: true, isWritable: false },
143
+ ];
144
+ const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
145
+ const transaction = new Transaction().add(instruction);
146
+ const { blockhash } = await conn.getLatestBlockhash('finalized');
147
+ transaction.recentBlockhash = blockhash;
148
+ transaction.feePayer = disputerPubkey;
149
+ return {
150
+ transaction,
151
+ serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
152
+ };
153
+ }
154
+ /**
155
+ * Build vote_council_race transaction
156
+ * IDL Accounts: config, race_market, vote_record, dispute_meta, voter, system_program
157
+ */
158
+ export async function buildVoteCouncilRaceTransaction(params) {
159
+ const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
160
+ const raceMarketPubkey = new PublicKey(params.raceMarketPda);
161
+ const voterPubkey = new PublicKey(params.voterWallet);
162
+ const voteRecordPda = deriveRaceVoteRecordPda(raceMarketPubkey, voterPubkey);
163
+ const disputeMetaPda = deriveDisputeMetaPda(raceMarketPubkey);
164
+ // Instruction data: discriminator + outcome_index (u8)
165
+ const data = Buffer.alloc(9);
166
+ DISCRIMINATORS.vote_council_race.copy(data, 0);
167
+ data.writeUInt8(params.voteOutcomeIndex, 8);
168
+ const keys = [
169
+ { pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
170
+ { pubkey: raceMarketPubkey, isSigner: false, isWritable: true },
171
+ { pubkey: voteRecordPda, isSigner: false, isWritable: true },
172
+ { pubkey: disputeMetaPda, isSigner: false, isWritable: true },
173
+ { pubkey: voterPubkey, isSigner: true, isWritable: true },
174
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
175
+ ];
176
+ const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
177
+ const transaction = new Transaction().add(instruction);
178
+ const { blockhash } = await conn.getLatestBlockhash('finalized');
179
+ transaction.recentBlockhash = blockhash;
180
+ transaction.feePayer = voterPubkey;
181
+ return {
182
+ transaction,
183
+ serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
184
+ };
185
+ }
186
+ /**
187
+ * Build change_council_vote_race transaction
188
+ */
189
+ export async function buildChangeCouncilVoteRaceTransaction(params) {
190
+ const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
191
+ const raceMarketPubkey = new PublicKey(params.raceMarketPda);
192
+ const voterPubkey = new PublicKey(params.voterWallet);
193
+ const voteRecordPda = deriveRaceVoteRecordPda(raceMarketPubkey, voterPubkey);
194
+ const disputeMetaPda = deriveDisputeMetaPda(raceMarketPubkey);
195
+ const data = Buffer.alloc(9);
196
+ DISCRIMINATORS.change_council_vote_race.copy(data, 0);
197
+ data.writeUInt8(params.newVoteOutcomeIndex, 8);
198
+ const keys = [
199
+ { pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
200
+ { pubkey: raceMarketPubkey, isSigner: false, isWritable: true },
201
+ { pubkey: voteRecordPda, isSigner: false, isWritable: true },
202
+ { pubkey: disputeMetaPda, isSigner: false, isWritable: true },
203
+ { pubkey: voterPubkey, isSigner: true, isWritable: false },
204
+ ];
205
+ const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
206
+ const transaction = new Transaction().add(instruction);
207
+ const { blockhash } = await conn.getLatestBlockhash('finalized');
208
+ transaction.recentBlockhash = blockhash;
209
+ transaction.feePayer = voterPubkey;
210
+ return {
211
+ transaction,
212
+ serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
213
+ };
214
+ }
215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcHV0ZS10cmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZGVycy9kaXNwdXRlLXRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxXQUFXLEVBQ1gsc0JBQXNCLEVBQ3RCLGFBQWEsR0FDZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEdBQ04sTUFBTSxjQUFjLENBQUM7QUFFdEIsZ0ZBQWdGO0FBQ2hGLDRCQUE0QjtBQUM1QixnRkFBZ0Y7QUFFaEYsTUFBTSxjQUFjLEdBQUc7SUFDckIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUQsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRSxZQUFZLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuRSxpQkFBaUIsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLG1CQUFtQixFQUFFLE1BQU0s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QUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7S0FDakgsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERpc3B1dGUgVHJhbnNhY3Rpb24gQnVpbGRlcnNcbiAqXG4gKiBJTVBPUlRBTlQ6IEFjY291bnQgc3RydWN0dXJlcyB2ZXJpZmllZCBhZ2FpbnN0IElETCB2NC43LjZcbiAqL1xuaW1wb3J0IHtcbiAgQ29ubmVjdGlvbixcbiAgUHVibGljS2V5LFxuICBUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbixcbiAgU3lzdGVtUHJvZ3JhbSxcbn0gZnJvbSAnQHNvbGFuYS93ZWIzLmpzJztcbmltcG9ydCB7XG4gIFBST0dSQU1fSUQsXG4gIENPTkZJR19QREEsXG4gIFJQQ19FTkRQT0lOVCxcbiAgU0VFRFMsXG59IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBESVNDUklNSU5BVE9SUyAoZnJvbSBJREwpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBESVNDUklNSU5BVE9SUyA9IHtcbiAgZmxhZ19kaXNwdXRlOiBCdWZmZXIuZnJvbShbMTUwLCAyMjIsIDc4LCA3MiwgMTE3LCAxNDAsIDIsIDc1XSksXG4gIGZsYWdfcmFjZV9kaXNwdXRlOiBCdWZmZXIuZnJvbShbMTU0LCAxNjAsIDExMCwgMjksIDY1LCAzLCA3NywgN10pLFxuICB2b3RlX2NvdW5jaWw6IEJ1ZmZlci5mcm9tKFsyNTIsIDE2NywgMTY1LCAxODIsIDIyMSwgMjQyLCAxNzQsIDI0OV0pLFxuICB2b3RlX2NvdW5jaWxfcmFjZTogQnVmZmVyLmZyb20oWzc5LCAxNzYsIDE0NSwgMTkzLCAyMjUsIDI0LCAxODMsIDIzNF0pLFxuICBjaGFuZ2VfY291bmNpbF92b3RlOiBCdWZmZXIuZnJvbShbNzAsIDk2LCA3MiwgMjUzLCAxMzQsIDEyMCwgMjU0LCA3Nl0pLFxuICBjaGFuZ2VfY291bmNpbF92b3RlX3JhY2U6IEJ1ZmZlci5mcm9tKFs1NCwgMTg1LCAyMTAsIDEyNiwgNDAsIDI1MiwgMTQ2LCA2XSksXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUERBIERFUklWQVRJT05cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIGRlcml2ZURpc3B1dGVNZXRhUGRhKG1hcmtldFBkYTogUHVibGljS2V5KTogUHVibGljS2V5IHtcbiAgY29uc3QgW3BkYV0gPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICBbU0VFRFMuRElTUFVURV9NRVRBLCBtYXJrZXRQZGEudG9CdWZmZXIoKV0sXG4gICAgUFJPR1JBTV9JRFxuICApO1xuICByZXR1cm4gcGRhO1xufVxuXG5mdW5jdGlvbiBkZXJpdmVDb3VuY2lsVm90ZVBkYShtYXJrZXRQZGE6IFB1YmxpY0tleSwgdm90ZXI6IFB1YmxpY0tleSk6IFB1YmxpY0tleSB7XG4gIGNvbnN0IFtwZGFdID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgW0J1ZmZlci5mcm9tKCdjb3VuY2lsX3ZvdGUnKSwgbWFya2V0UGRhLnRvQnVmZmVyKCksIHZvdGVyLnRvQnVmZmVyKCldLFxuICAgIFBST0dSQU1fSURcbiAgKTtcbiAgcmV0dXJuIHBkYTtcbn1cblxuZnVuY3Rpb24gZGVyaXZlUmFjZVZvdGVSZWNvcmRQZGEocmFjZU1hcmtldFBkYTogUHVibGljS2V5LCB2b3RlcjogUHVibGljS2V5KTogUHVibGljS2V5IHtcbiAgY29uc3QgW3BkYV0gPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICBbQnVmZmVyLmZyb20oJ3JhY2VfY291bmNpbF92b3RlJyksIHJhY2VNYXJrZXRQZGEudG9CdWZmZXIoKSwgdm90ZXIudG9CdWZmZXIoKV0sXG4gICAgUFJPR1JBTV9JRFxuICApO1xuICByZXR1cm4gcGRhO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQk9PTEVBTiBNQVJLRVQgRElTUFVURVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQnVpbGQgZmxhZ19kaXNwdXRlIHRyYW5zYWN0aW9uXG4gKiBJREwgQWNjb3VudHM6IGNvbmZpZywgbWFya2V0LCBkaXNwdXRlX21ldGEsIGF1dGhvcml0eVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRGbGFnRGlzcHV0ZVRyYW5zYWN0aW9uKHBhcmFtczoge1xuICBtYXJrZXRQZGE6IHN0cmluZztcbiAgZGlzcHV0ZXJXYWxsZXQ6IHN0cmluZztcbiAgY29ubmVjdGlvbj86IENvbm5lY3Rpb247XG59KTogUHJvbWlzZTx7IHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjsgc2VyaWFsaXplZFR4OiBzdHJpbmcgfT4ge1xuICBjb25zdCBjb25uID0gcGFyYW1zLmNvbm5lY3Rpb24gfHwgbmV3IENvbm5lY3Rpb24oUlBDX0VORFBPSU5ULCAnY29uZmlybWVkJyk7XG4gIGNvbnN0IG1hcmtldFB1YmtleSA9IG5ldyBQdWJsaWNLZXkocGFyYW1zLm1hcmtldFBkYSk7XG4gIGNvbnN0IGRpc3B1dGVyUHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMuZGlzcHV0ZXJXYWxsZXQpO1xuICBjb25zdCBkaXNwdXRlTWV0YVBkYSA9IGRlcml2ZURpc3B1dGVNZXRhUGRhKG1hcmtldFB1YmtleSk7XG5cbiAgY29uc3QgZGF0YSA9IERJU0NSSU1JTkFUT1JTLmZsYWdfZGlzcHV0ZTtcblxuICBjb25zdCBrZXlzID0gW1xuICAgIHsgcHVia2V5OiBDT05GSUdfUERBLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgeyBwdWJrZXk6IG1hcmtldFB1YmtleSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IGRpc3B1dGVNZXRhUGRhLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogZGlzcHV0ZXJQdWJrZXksIGlzU2lnbmVyOiB0cnVlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICBdO1xuXG4gIGNvbnN0IGluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oeyBwcm9ncmFtSWQ6IFBST0dSQU1fSUQsIGtleXMsIGRhdGEgfSk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGluc3RydWN0aW9uKTtcbiAgY29uc3QgeyBibG9ja2hhc2ggfSA9IGF3YWl0IGNvbm4uZ2V0TGF0ZXN0QmxvY2toYXNoKCdmaW5hbGl6ZWQnKTtcbiAgdHJhbnNhY3Rpb24ucmVjZW50QmxvY2toYXNoID0gYmxvY2toYXNoO1xuICB0cmFuc2FjdGlvbi5mZWVQYXllciA9IGRpc3B1dGVyUHVia2V5O1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2VyaWFsaXplZFR4OiB0cmFuc2FjdGlvbi5zZXJpYWxpemUoeyByZXF1aXJlQWxsU2lnbmF0dXJlczogZmFsc2UsIHZlcmlmeVNpZ25hdHVyZXM6IGZhbHNlIH0pLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCB2b3RlX2NvdW5jaWwgdHJhbnNhY3Rpb25cbiAqIElETCBBY2NvdW50czogY29uZmlnLCBtYXJrZXQsIGNvdW5jaWxfdm90ZSwgZGlzcHV0ZV9tZXRhLCB2b3Rlciwgc3lzdGVtX3Byb2dyYW1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkVm90ZUNvdW5jaWxUcmFuc2FjdGlvbihwYXJhbXM6IHtcbiAgbWFya2V0UGRhOiBzdHJpbmc7XG4gIHZvdGVZZXM6IGJvb2xlYW47XG4gIHZvdGVyV2FsbGV0OiBzdHJpbmc7XG4gIGNvbm5lY3Rpb24/OiBDb25uZWN0aW9uO1xufSk6IFByb21pc2U8eyB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247IHNlcmlhbGl6ZWRUeDogc3RyaW5nIH0+IHtcbiAgY29uc3QgY29ubiA9IHBhcmFtcy5jb25uZWN0aW9uIHx8IG5ldyBDb25uZWN0aW9uKFJQQ19FTkRQT0lOVCwgJ2NvbmZpcm1lZCcpO1xuICBjb25zdCBtYXJrZXRQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy5tYXJrZXRQZGEpO1xuICBjb25zdCB2b3RlclB1YmtleSA9IG5ldyBQdWJsaWNLZXkocGFyYW1zLnZvdGVyV2FsbGV0KTtcbiAgY29uc3QgY291bmNpbFZvdGVQZGEgPSBkZXJpdmVDb3VuY2lsVm90ZVBkYShtYXJrZXRQdWJrZXksIHZvdGVyUHVia2V5KTtcbiAgY29uc3QgZGlzcHV0ZU1ldGFQZGEgPSBkZXJpdmVEaXNwdXRlTWV0YVBkYShtYXJrZXRQdWJrZXkpO1xuXG4gIC8vIEluc3RydWN0aW9uIGRhdGE6IGRpc2NyaW1pbmF0b3IgKyB2b3RlIChib29sKVxuICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDkpO1xuICBESVNDUklNSU5BVE9SUy52b3RlX2NvdW5jaWwuY29weShkYXRhLCAwKTtcbiAgZGF0YS53cml0ZVVJbnQ4KHBhcmFtcy52b3RlWWVzID8gMSA6IDAsIDgpO1xuXG4gIGNvbnN0IGtleXMgPSBbXG4gICAgeyBwdWJrZXk6IENPTkZJR19QREEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICB7IHB1YmtleTogbWFya2V0UHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogY291bmNpbFZvdGVQZGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBkaXNwdXRlTWV0YVBkYSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IHZvdGVyUHVia2V5LCBpc1NpZ25lcjogdHJ1ZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBTeXN0ZW1Qcm9ncmFtLnByb2dyYW1JZCwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICBdO1xuXG4gIGNvbnN0IGluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oeyBwcm9ncmFtSWQ6IFBST0dSQU1fSUQsIGtleXMsIGRhdGEgfSk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGluc3RydWN0aW9uKTtcbiAgY29uc3QgeyBibG9ja2hhc2ggfSA9IGF3YWl0IGNvbm4uZ2V0TGF0ZXN0QmxvY2toYXNoKCdmaW5hbGl6ZWQnKTtcbiAgdHJhbnNhY3Rpb24ucmVjZW50QmxvY2toYXNoID0gYmxvY2toYXNoO1xuICB0cmFuc2FjdGlvbi5mZWVQYXllciA9IHZvdGVyUHVia2V5O1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2VyaWFsaXplZFR4OiB0cmFuc2FjdGlvbi5zZXJpYWxpemUoeyByZXF1aXJlQWxsU2lnbmF0dXJlczogZmFsc2UsIHZlcmlmeVNpZ25hdHVyZXM6IGZhbHNlIH0pLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBjaGFuZ2VfY291bmNpbF92b3RlIHRyYW5zYWN0aW9uXG4gKiBJREwgQWNjb3VudHM6IGNvbmZpZywgbWFya2V0LCBjb3VuY2lsX3ZvdGUsIGRpc3B1dGVfbWV0YSwgdm90ZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQ2hhbmdlQ291bmNpbFZvdGVUcmFuc2FjdGlvbihwYXJhbXM6IHtcbiAgbWFya2V0UGRhOiBzdHJpbmc7XG4gIG5ld1ZvdGVZZXM6IGJvb2xlYW47XG4gIHZvdGVyV2FsbGV0OiBzdHJpbmc7XG4gIGNvbm5lY3Rpb24/OiBDb25uZWN0aW9uO1xufSk6IFByb21pc2U8eyB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247IHNlcmlhbGl6ZWRUeDogc3RyaW5nIH0+IHtcbiAgY29uc3QgY29ubiA9IHBhcmFtcy5jb25uZWN0aW9uIHx8IG5ldyBDb25uZWN0aW9uKFJQQ19FTkRQT0lOVCwgJ2NvbmZpcm1lZCcpO1xuICBjb25zdCBtYXJrZXRQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy5tYXJrZXRQZGEpO1xuICBjb25zdCB2b3RlclB1YmtleSA9IG5ldyBQdWJsaWNLZXkocGFyYW1zLnZvdGVyV2FsbGV0KTtcbiAgY29uc3QgY291bmNpbFZvdGVQZGEgPSBkZXJpdmVDb3VuY2lsVm90ZVBkYShtYXJrZXRQdWJrZXksIHZvdGVyUHVia2V5KTtcbiAgY29uc3QgZGlzcHV0ZU1ldGFQZGEgPSBkZXJpdmVEaXNwdXRlTWV0YVBkYShtYXJrZXRQdWJrZXkpO1xuXG4gIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoOSk7XG4gIERJU0NSSU1JTkFUT1JTLmNoYW5nZV9jb3VuY2lsX3ZvdGUuY29weShkYXRhLCAwKTtcbiAgZGF0YS53cml0ZVVJbnQ4KHBhcmFtcy5uZXdWb3RlWWVzID8gMSA6IDAsIDgpO1xuXG4gIGNvbnN0IGtleXMgPSBbXG4gICAgeyBwdWJrZXk6IENPTkZJR19QREEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICB7IHB1YmtleTogbWFya2V0UHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogY291bmNpbFZvdGVQZGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBkaXNwdXRlTWV0YVBkYSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IHZvdGVyUHVia2V5LCBpc1NpZ25lcjogdHJ1ZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgXTtcblxuICBjb25zdCBpbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbkluc3RydWN0aW9uKHsgcHJvZ3JhbUlkOiBQUk9HUkFNX0lELCBrZXlzLCBkYXRhIH0pO1xuICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbigpLmFkZChpbnN0cnVjdGlvbik7XG4gIGNvbnN0IHsgYmxvY2toYXNoIH0gPSBhd2FpdCBjb25uLmdldExhdGVzdEJsb2NraGFzaCgnZmluYWxpemVkJyk7XG4gIHRyYW5zYWN0aW9uLnJlY2VudEJsb2NraGFzaCA9IGJsb2NraGFzaDtcbiAgdHJhbnNhY3Rpb24uZmVlUGF5ZXIgPSB2b3RlclB1YmtleTtcblxuICByZXR1cm4ge1xuICAgIHRyYW5zYWN0aW9uLFxuICAgIHNlcmlhbGl6ZWRUeDogdHJhbnNhY3Rpb24uc2VyaWFsaXplKHsgcmVxdWlyZUFsbFNpZ25hdHVyZXM6IGZhbHNlLCB2ZXJpZnlTaWduYXR1cmVzOiBmYWxzZSB9KS50b1N0cmluZygnYmFzZTY0JyksXG4gIH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSQUNFIE1BUktFVCBESVNQVVRFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBCdWlsZCBmbGFnX3JhY2VfZGlzcHV0ZSB0cmFuc2FjdGlvblxuICogSURMIEFjY291bnRzOiBjb25maWcsIHJhY2VfbWFya2V0LCBkaXNwdXRlX21ldGEsIGF1dGhvcml0eVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRGbGFnUmFjZURpc3B1dGVUcmFuc2FjdGlvbihwYXJhbXM6IHtcbiAgcmFjZU1hcmtldFBkYTogc3RyaW5nO1xuICBkaXNwdXRlcldhbGxldDogc3RyaW5nO1xuICBjb25uZWN0aW9uPzogQ29ubmVjdGlvbjtcbn0pOiBQcm9taXNlPHsgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uOyBzZXJpYWxpemVkVHg6IHN0cmluZyB9PiB7XG4gIGNvbnN0IGNvbm4gPSBwYXJhbXMuY29ubmVjdGlvbiB8fCBuZXcgQ29ubmVjdGlvbihSUENfRU5EUE9JTlQsICdjb25maXJtZWQnKTtcbiAgY29uc3QgcmFjZU1hcmtldFB1YmtleSA9IG5ldyBQdWJsaWNLZXkocGFyYW1zLnJhY2VNYXJrZXRQZGEpO1xuICBjb25zdCBkaXNwdXRlclB1YmtleSA9IG5ldyBQdWJsaWNLZXkocGFyYW1zLmRpc3B1dGVyV2FsbGV0KTtcbiAgY29uc3QgZGlzcHV0ZU1ldGFQZGEgPSBkZXJpdmVEaXNwdXRlTWV0YVBkYShyYWNlTWFya2V0UHVia2V5KTtcblxuICBjb25zdCBkYXRhID0gRElTQ1JJTUlOQVRPUlMuZmxhZ19yYWNlX2Rpc3B1dGU7XG5cbiAgY29uc3Qga2V5cyA9IFtcbiAgICB7IHB1YmtleTogQ09ORklHX1BEQSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgIHsgcHVia2V5OiByYWNlTWFya2V0UHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogZGlzcHV0ZU1ldGFQZGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBkaXNwdXRlclB1YmtleSwgaXNTaWduZXI6IHRydWUsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gIF07XG5cbiAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7IHByb2dyYW1JZDogUFJPR1JBTV9JRCwga2V5cywgZGF0YSB9KTtcbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaW5zdHJ1Y3Rpb24pO1xuICBjb25zdCB7IGJsb2NraGFzaCB9ID0gYXdhaXQgY29ubi5nZXRMYXRlc3RCbG9ja2hhc2goJ2ZpbmFsaXplZCcpO1xuICB0cmFuc2FjdGlvbi5yZWNlbnRCbG9ja2hhc2ggPSBibG9ja2hhc2g7XG4gIHRyYW5zYWN0aW9uLmZlZVBheWVyID0gZGlzcHV0ZXJQdWJrZXk7XG5cbiAgcmV0dXJuIHtcbiAgICB0cmFuc2FjdGlvbixcbiAgICBzZXJpYWxpemVkVHg6IHRyYW5zYWN0aW9uLnNlcmlhbGl6ZSh7IHJlcXVpcmVBbGxTaWduYXR1cmVzOiBmYWxzZSwgdmVyaWZ5U2lnbmF0dXJlczogZmFsc2UgfSkudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIHZvdGVfY291bmNpbF9yYWNlIHRyYW5zYWN0aW9uXG4gKiBJREwgQWNjb3VudHM6IGNvbmZpZywgcmFjZV9tYXJrZXQsIHZvdGVfcmVjb3JkLCBkaXNwdXRlX21ldGEsIHZvdGVyLCBzeXN0ZW1fcHJvZ3JhbVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRWb3RlQ291bmNpbFJhY2VUcmFuc2FjdGlvbihwYXJhbXM6IHtcbiAgcmFjZU1hcmtldFBkYTogc3RyaW5nO1xuICB2b3RlT3V0Y29tZUluZGV4OiBudW1iZXI7XG4gIHZvdGVyV2FsbGV0OiBzdHJpbmc7XG4gIGNvbm5lY3Rpb24/OiBDb25uZWN0aW9uO1xufSk6IFByb21pc2U8eyB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247IHNlcmlhbGl6ZWRUeDogc3RyaW5nIH0+IHtcbiAgY29uc3QgY29ubiA9IHBhcmFtcy5jb25uZWN0aW9uIHx8IG5ldyBDb25uZWN0aW9uKFJQQ19FTkRQT0lOVCwgJ2NvbmZpcm1lZCcpO1xuICBjb25zdCByYWNlTWFya2V0UHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMucmFjZU1hcmtldFBkYSk7XG4gIGNvbnN0IHZvdGVyUHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMudm90ZXJXYWxsZXQpO1xuICBjb25zdCB2b3RlUmVjb3JkUGRhID0gZGVyaXZlUmFjZVZvdGVSZWNvcmRQZGEocmFjZU1hcmtldFB1YmtleSwgdm90ZXJQdWJrZXkpO1xuICBjb25zdCBkaXNwdXRlTWV0YVBkYSA9IGRlcml2ZURpc3B1dGVNZXRhUGRhKHJhY2VNYXJrZXRQdWJrZXkpO1xuXG4gIC8vIEluc3RydWN0aW9uIGRhdGE6IGRpc2NyaW1pbmF0b3IgKyBvdXRjb21lX2luZGV4ICh1OClcbiAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg5KTtcbiAgRElTQ1JJTUlOQVRPUlMudm90ZV9jb3VuY2lsX3JhY2UuY29weShkYXRhLCAwKTtcbiAgZGF0YS53cml0ZVVJbnQ4KHBhcmFtcy52b3RlT3V0Y29tZUluZGV4LCA4KTtcblxuICBjb25zdCBrZXlzID0gW1xuICAgIHsgcHVia2V5OiBDT05GSUdfUERBLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgeyBwdWJrZXk6IHJhY2VNYXJrZXRQdWJrZXksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiB2b3RlUmVjb3JkUGRhLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogZGlzcHV0ZU1ldGFQZGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiB2b3RlclB1YmtleSwgaXNTaWduZXI6IHRydWUsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogU3lzdGVtUHJvZ3JhbS5wcm9ncmFtSWQsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgXTtcblxuICBjb25zdCBpbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbkluc3RydWN0aW9uKHsgcHJvZ3JhbUlkOiBQUk9HUkFNX0lELCBrZXlzLCBkYXRhIH0pO1xuICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbigpLmFkZChpbnN0cnVjdGlvbik7XG4gIGNvbnN0IHsgYmxvY2toYXNoIH0gPSBhd2FpdCBjb25uLmdldExhdGVzdEJsb2NraGFzaCgnZmluYWxpemVkJyk7XG4gIHRyYW5zYWN0aW9uLnJlY2VudEJsb2NraGFzaCA9IGJsb2NraGFzaDtcbiAgdHJhbnNhY3Rpb24uZmVlUGF5ZXIgPSB2b3RlclB1YmtleTtcblxuICByZXR1cm4ge1xuICAgIHRyYW5zYWN0aW9uLFxuICAgIHNlcmlhbGl6ZWRUeDogdHJhbnNhY3Rpb24uc2VyaWFsaXplKHsgcmVxdWlyZUFsbFNpZ25hdHVyZXM6IGZhbHNlLCB2ZXJpZnlTaWduYXR1cmVzOiBmYWxzZSB9KS50b1N0cmluZygnYmFzZTY0JyksXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgY2hhbmdlX2NvdW5jaWxfdm90ZV9yYWNlIHRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENoYW5nZUNvdW5jaWxWb3RlUmFjZVRyYW5zYWN0aW9uKHBhcmFtczoge1xuICByYWNlTWFya2V0UGRhOiBzdHJpbmc7XG4gIG5ld1ZvdGVPdXRjb21lSW5kZXg6IG51bWJlcjtcbiAgdm90ZXJXYWxsZXQ6IHN0cmluZztcbiAgY29ubmVjdGlvbj86IENvbm5lY3Rpb247XG59KTogUHJvbWlzZTx7IHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjsgc2VyaWFsaXplZFR4OiBzdHJpbmcgfT4ge1xuICBjb25zdCBjb25uID0gcGFyYW1zLmNvbm5lY3Rpb24gfHwgbmV3IENvbm5lY3Rpb24oUlBDX0VORFBPSU5ULCAnY29uZmlybWVkJyk7XG4gIGNvbnN0IHJhY2VNYXJrZXRQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy5yYWNlTWFya2V0UGRhKTtcbiAgY29uc3Qgdm90ZXJQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy52b3RlcldhbGxldCk7XG4gIGNvbnN0IHZvdGVSZWNvcmRQZGEgPSBkZXJpdmVSYWNlVm90ZVJlY29yZFBkYShyYWNlTWFya2V0UHVia2V5LCB2b3RlclB1YmtleSk7XG4gIGNvbnN0IGRpc3B1dGVNZXRhUGRhID0gZGVyaXZlRGlzcHV0ZU1ldGFQZGEocmFjZU1hcmtldFB1YmtleSk7XG5cbiAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg5KTtcbiAgRElTQ1JJTUlOQVRPUlMuY2hhbmdlX2NvdW5jaWxfdm90ZV9yYWNlLmNvcHkoZGF0YSwgMCk7XG4gIGRhdGEud3JpdGVVSW50OChwYXJhbXMubmV3Vm90ZU91dGNvbWVJbmRleCwgOCk7XG5cbiAgY29uc3Qga2V5cyA9IFtcbiAgICB7IHB1YmtleTogQ09ORklHX1BEQSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgIHsgcHVia2V5OiByYWNlTWFya2V0UHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogdm90ZVJlY29yZFBkYSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IGRpc3B1dGVNZXRhUGRhLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogdm90ZXJQdWJrZXksIGlzU2lnbmVyOiB0cnVlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICBdO1xuXG4gIGNvbnN0IGluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oeyBwcm9ncmFtSWQ6IFBST0dSQU1fSUQsIGtleXMsIGRhdGEgfSk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGluc3RydWN0aW9uKTtcbiAgY29uc3QgeyBibG9ja2hhc2ggfSA9IGF3YWl0IGNvbm4uZ2V0TGF0ZXN0QmxvY2toYXNoKCdmaW5hbGl6ZWQnKTtcbiAgdHJhbnNhY3Rpb24ucmVjZW50QmxvY2toYXNoID0gYmxvY2toYXNoO1xuICB0cmFuc2FjdGlvbi5mZWVQYXllciA9IHZvdGVyUHVia2V5O1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2VyaWFsaXplZFR4OiB0cmFuc2FjdGlvbi5zZXJpYWxpemUoeyByZXF1aXJlQWxsU2lnbmF0dXJlczogZmFsc2UsIHZlcmlmeVNpZ25hdHVyZXM6IGZhbHNlIH0pLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Transaction Builders Index
3
+ * Exports all transaction builder functions
4
+ */
5
+ export * from './bet-transaction.js';
6
+ export * from './claim-transaction.js';
7
+ export * from './affiliate-transaction.js';
8
+ export * from './market-creation-tx.js';
9
+ export * from './market-management-transaction.js';
10
+ export * from './race-transaction.js';
11
+ export * from './resolution-transaction.js';
12
+ export * from './dispute-transaction.js';
13
+ export * from './whitelist-transaction.js';
14
+ export * from './creator-transaction.js';
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Transaction Builders Index
3
+ * Exports all transaction builder functions
4
+ */
5
+ export * from './bet-transaction.js';
6
+ export * from './claim-transaction.js';
7
+ export * from './affiliate-transaction.js';
8
+ export * from './market-creation-tx.js';
9
+ export * from './market-management-transaction.js';
10
+ export * from './race-transaction.js';
11
+ export * from './resolution-transaction.js';
12
+ export * from './dispute-transaction.js';
13
+ export * from './whitelist-transaction.js';
14
+ export * from './creator-transaction.js';
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVpbGRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVHJhbnNhY3Rpb24gQnVpbGRlcnMgSW5kZXhcbiAqIEV4cG9ydHMgYWxsIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZnVuY3Rpb25zXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9iZXQtdHJhbnNhY3Rpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFpbS10cmFuc2FjdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FmZmlsaWF0ZS10cmFuc2FjdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21hcmtldC1jcmVhdGlvbi10eC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21hcmtldC1tYW5hZ2VtZW50LXRyYW5zYWN0aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmFjZS10cmFuc2FjdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Jlc29sdXRpb24tdHJhbnNhY3Rpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXNwdXRlLXRyYW5zYWN0aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vd2hpdGVsaXN0LXRyYW5zYWN0aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRvci10cmFuc2FjdGlvbi5qcyc7XG4iXX0=
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Market Creation Transaction Builders
3
+ *
4
+ * Builds unsigned transactions for:
5
+ * - create_lab_market_sol (community markets)
6
+ * - create_private_table_sol (invite-only markets)
7
+ * - create_race_market_sol (multi-outcome markets)
8
+ *
9
+ * FIXED: Jan 2026 - Corrected discriminators, offsets, and instruction formats
10
+ */
11
+ import { Connection, Transaction } from '@solana/web3.js';
12
+ export interface CreateMarketResult {
13
+ transaction: Transaction;
14
+ serializedTx: string;
15
+ marketPda: string;
16
+ marketId: bigint;
17
+ }
18
+ export interface CreateLabMarketParams {
19
+ question: string;
20
+ closingTime: Date;
21
+ resolutionBuffer?: number;
22
+ autoStopBuffer?: number;
23
+ resolutionMode?: number;
24
+ council?: string[];
25
+ councilThreshold?: number;
26
+ creatorWallet: string;
27
+ }
28
+ export interface CreatePrivateMarketParams {
29
+ question: string;
30
+ closingTime: Date;
31
+ resolutionBuffer?: number;
32
+ autoStopBuffer?: number;
33
+ resolutionMode?: number;
34
+ council?: string[];
35
+ councilThreshold?: number;
36
+ creatorWallet: string;
37
+ }
38
+ export interface CreateRaceMarketParams {
39
+ question: string;
40
+ outcomes: string[];
41
+ closingTime: Date;
42
+ resolutionBuffer?: number;
43
+ autoStopBuffer?: number;
44
+ layer?: number;
45
+ resolutionMode?: number;
46
+ accessGate?: number;
47
+ council?: string[];
48
+ councilThreshold?: number;
49
+ creatorWallet: string;
50
+ }
51
+ export declare function getNextMarketId(connection?: Connection): Promise<{
52
+ marketId: bigint;
53
+ raceMarketId: bigint;
54
+ }>;
55
+ export declare function buildCreateLabMarketTransaction(params: CreateLabMarketParams, connection?: Connection): Promise<CreateMarketResult>;
56
+ export declare function buildCreatePrivateMarketTransaction(params: CreatePrivateMarketParams, connection?: Connection): Promise<CreateMarketResult>;
57
+ export declare function buildCreateRaceMarketTransaction(params: CreateRaceMarketParams, connection?: Connection): Promise<CreateMarketResult>;
58
+ export declare function previewMarketPda(marketId: bigint): {
59
+ marketPda: string;
60
+ bump: number;
61
+ };
62
+ export declare function previewRaceMarketPda(marketId: bigint): {
63
+ raceMarketPda: string;
64
+ bump: number;
65
+ };