@craftec/flowcraft-sdk 0.1.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.
package/dist/client.js ADDED
@@ -0,0 +1,550 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FlowcraftClient = exports.IDL = void 0;
7
+ const web3_js_1 = require("@solana/web3.js");
8
+ const anchor_1 = require("@coral-xyz/anchor");
9
+ const spl_token_1 = require("@solana/spl-token");
10
+ const constants_1 = require("./constants");
11
+ const utils_1 = require("./utils");
12
+ // Import IDL from generated file
13
+ const idl_json_1 = __importDefault(require("./idl.json"));
14
+ exports.IDL = idl_json_1.default;
15
+ class FlowcraftClient {
16
+ constructor(connection, wallet, programId = constants_1.PROGRAM_ID, idl = exports.IDL) {
17
+ this.programId = programId;
18
+ this.provider = new anchor_1.AnchorProvider(connection, wallet, {
19
+ commitment: "confirmed",
20
+ });
21
+ this.program = new anchor_1.Program(idl, this.provider);
22
+ }
23
+ // ============================================================================
24
+ // PDA Helpers
25
+ // ============================================================================
26
+ /**
27
+ * Get the config PDA
28
+ */
29
+ getConfigPda() {
30
+ return (0, utils_1.getConfigPda)(this.programId);
31
+ }
32
+ /**
33
+ * Get the pool PDA for an owner and name
34
+ */
35
+ getPoolPda(owner, name) {
36
+ return (0, utils_1.getPoolPda)(owner, name, this.programId);
37
+ }
38
+ /**
39
+ * Get the stream PDA for a pool and subscriber
40
+ */
41
+ getStreamPda(pool, subscriber) {
42
+ return (0, utils_1.getStreamPda)(pool, subscriber, this.programId);
43
+ }
44
+ /**
45
+ * Get the vault PDA for a pool
46
+ */
47
+ getVaultPda(pool) {
48
+ return (0, utils_1.getVaultPda)(pool, this.programId);
49
+ }
50
+ // ============================================================================
51
+ // Fetch Methods
52
+ // ============================================================================
53
+ /**
54
+ * Fetch the global config
55
+ */
56
+ async fetchConfig() {
57
+ try {
58
+ const [configPda] = this.getConfigPda();
59
+ const account = await this.program.account.config.fetch(configPda);
60
+ return account;
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }
66
+ /**
67
+ * Fetch a pool by address
68
+ */
69
+ async fetchPool(pool) {
70
+ try {
71
+ const account = await this.program.account.pool.fetch(pool);
72
+ return account;
73
+ }
74
+ catch {
75
+ return null;
76
+ }
77
+ }
78
+ /**
79
+ * Fetch a pool by owner and name
80
+ */
81
+ async fetchPoolByOwner(owner, name) {
82
+ const [poolPda] = this.getPoolPda(owner, name);
83
+ return this.fetchPool(poolPda);
84
+ }
85
+ /**
86
+ * Fetch a stream by address
87
+ */
88
+ async fetchStream(stream) {
89
+ try {
90
+ const account = await this.program.account.stream.fetch(stream);
91
+ return account;
92
+ }
93
+ catch {
94
+ return null;
95
+ }
96
+ }
97
+ /**
98
+ * Fetch a stream by pool and subscriber
99
+ */
100
+ async fetchStreamBySubscriber(pool, subscriber) {
101
+ const [streamPda] = this.getStreamPda(pool, subscriber);
102
+ return this.fetchStream(streamPda);
103
+ }
104
+ /**
105
+ * Fetch pool with computed info
106
+ */
107
+ async getPoolInfo(pool) {
108
+ const poolData = await this.fetchPool(pool);
109
+ if (!poolData)
110
+ return null;
111
+ return {
112
+ address: pool,
113
+ owner: poolData.owner,
114
+ mint: poolData.mint,
115
+ name: poolData.name,
116
+ totalSubscribers: poolData.totalSubscribers.toNumber(),
117
+ totalDeposited: poolData.totalDeposited,
118
+ totalWithdrawn: poolData.totalWithdrawn,
119
+ totalRefunded: poolData.totalRefunded,
120
+ createdAt: new Date(poolData.createdAt.toNumber() * 1000),
121
+ };
122
+ }
123
+ /**
124
+ * Fetch stream with computed info
125
+ */
126
+ async getStreamInfo(stream) {
127
+ const streamData = await this.fetchStream(stream);
128
+ if (!streamData)
129
+ return null;
130
+ let totalDeposited = streamData.archivedAmount;
131
+ let totalVested = streamData.archivedVested;
132
+ let activeSegments = 0;
133
+ let cancelledSegments = 0;
134
+ const segments = streamData.segments.map((seg, index) => {
135
+ totalDeposited = totalDeposited.add(seg.amount);
136
+ totalVested = totalVested.add(seg.vested);
137
+ if (seg.cancelled) {
138
+ cancelledSegments++;
139
+ }
140
+ else if (!seg.vested.eq(seg.amount)) {
141
+ activeSegments++;
142
+ }
143
+ return {
144
+ index,
145
+ tier: seg.tier,
146
+ payer: seg.payer,
147
+ amount: seg.amount,
148
+ vested: seg.vested,
149
+ unvested: seg.amount.sub(seg.vested),
150
+ ratePerSecond: seg.ratePerSecond,
151
+ cancelled: seg.cancelled,
152
+ isComplete: seg.vested.eq(seg.amount) || seg.cancelled,
153
+ };
154
+ });
155
+ const claimable = totalVested.sub(streamData.totalWithdrawn);
156
+ const isExpired = streamData.segments.every((s) => s.vested.eq(s.amount) || s.cancelled);
157
+ return {
158
+ address: stream,
159
+ pool: streamData.pool,
160
+ subscriber: streamData.subscriber,
161
+ startTime: new Date(streamData.startTime.toNumber() * 1000),
162
+ totalDeposited,
163
+ totalVested,
164
+ totalWithdrawn: streamData.totalWithdrawn,
165
+ claimable,
166
+ activeSegments,
167
+ cancelledSegments,
168
+ isExpired,
169
+ segments,
170
+ };
171
+ }
172
+ // ============================================================================
173
+ // Admin Instructions
174
+ // ============================================================================
175
+ /**
176
+ * Initialize the protocol config (one-time setup)
177
+ */
178
+ async initializeConfig(admin, treasury, feeBps) {
179
+ const [configPda] = this.getConfigPda();
180
+ return await this.program.methods
181
+ .initializeConfig(treasury, new anchor_1.BN(feeBps))
182
+ .accounts({
183
+ admin: admin.publicKey,
184
+ config: configPda,
185
+ systemProgram: web3_js_1.SystemProgram.programId,
186
+ })
187
+ .signers([admin])
188
+ .rpc();
189
+ }
190
+ /**
191
+ * Update protocol config (admin only)
192
+ */
193
+ async updateConfig(admin, newTreasury, newFeeBps, newAdmin) {
194
+ const [configPda] = this.getConfigPda();
195
+ return await this.program.methods
196
+ .updateConfig(newTreasury ?? null, newFeeBps !== undefined ? new anchor_1.BN(newFeeBps) : null, newAdmin ?? null)
197
+ .accounts({
198
+ admin: admin.publicKey,
199
+ config: configPda,
200
+ })
201
+ .signers([admin])
202
+ .rpc();
203
+ }
204
+ // ============================================================================
205
+ // Pool Instructions
206
+ // ============================================================================
207
+ /**
208
+ * Create a new subscription pool
209
+ * @param payer - Keypair that pays for rent (signs the transaction)
210
+ * @param owner - PublicKey of pool owner (can be any account, including PDA)
211
+ * @param params - Pool creation parameters
212
+ */
213
+ async createPool(payer, owner, params) {
214
+ const [poolPda] = this.getPoolPda(owner, params.name);
215
+ const [vaultPda] = this.getVaultPda(poolPda);
216
+ const signature = await this.program.methods
217
+ .createPool(params.name)
218
+ .accounts({
219
+ payer: payer.publicKey,
220
+ owner: owner,
221
+ mint: params.mint,
222
+ pool: poolPda,
223
+ vault: vaultPda,
224
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
225
+ systemProgram: web3_js_1.SystemProgram.programId,
226
+ })
227
+ .signers([payer])
228
+ .rpc();
229
+ return { signature, pool: poolPda, vault: vaultPda };
230
+ }
231
+ // ============================================================================
232
+ // Subscription Instructions
233
+ // ============================================================================
234
+ /**
235
+ * Subscribe to a pool (creates stream with first segment)
236
+ */
237
+ async subscribe(subscriber, params) {
238
+ const [configPda] = this.getConfigPda();
239
+ const [streamPda] = this.getStreamPda(params.pool, subscriber.publicKey);
240
+ const [vaultPda] = this.getVaultPda(params.pool);
241
+ const signature = await this.program.methods
242
+ .subscribe(params.tier, (0, utils_1.toBN)(params.amount), (0, utils_1.toBN)(params.durationSeconds))
243
+ .accounts({
244
+ subscriber: subscriber.publicKey,
245
+ pool: params.pool,
246
+ config: configPda,
247
+ stream: streamPda,
248
+ vault: vaultPda,
249
+ subscriberTokenAccount: params.subscriberTokenAccount,
250
+ treasuryTokenAccount: params.treasuryTokenAccount,
251
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
252
+ systemProgram: web3_js_1.SystemProgram.programId,
253
+ })
254
+ .signers([subscriber])
255
+ .rpc();
256
+ return { signature, stream: streamPda };
257
+ }
258
+ /**
259
+ * Add a new segment to an existing subscription
260
+ */
261
+ async addSegment(payer, params) {
262
+ const [configPda] = this.getConfigPda();
263
+ const [vaultPda] = this.getVaultPda(params.pool);
264
+ return await this.program.methods
265
+ .addSegment(params.tier, (0, utils_1.toBN)(params.amount), (0, utils_1.toBN)(params.durationSeconds))
266
+ .accounts({
267
+ payer: payer.publicKey,
268
+ pool: params.pool,
269
+ config: configPda,
270
+ stream: params.stream,
271
+ vault: vaultPda,
272
+ payerTokenAccount: params.payerTokenAccount,
273
+ treasuryTokenAccount: params.treasuryTokenAccount,
274
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
275
+ })
276
+ .signers([payer])
277
+ .rpc();
278
+ }
279
+ /**
280
+ * Claim vested tokens (pool owner only)
281
+ */
282
+ async claim(owner, params) {
283
+ const [vaultPda] = this.getVaultPda(params.pool);
284
+ return await this.program.methods
285
+ .claim()
286
+ .accounts({
287
+ owner: owner.publicKey,
288
+ pool: params.pool,
289
+ stream: params.stream,
290
+ vault: vaultPda,
291
+ ownerTokenAccount: params.ownerTokenAccount,
292
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
293
+ })
294
+ .signers([owner])
295
+ .rpc();
296
+ }
297
+ /**
298
+ * Claim vested tokens from multiple streams in a single transaction
299
+ */
300
+ async claimBatch(owner, params) {
301
+ const [vaultPda] = this.getVaultPda(params.pool);
302
+ return await this.program.methods
303
+ .claimBatch()
304
+ .accounts({
305
+ owner: owner.publicKey,
306
+ pool: params.pool,
307
+ vault: vaultPda,
308
+ ownerTokenAccount: params.ownerTokenAccount,
309
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
310
+ })
311
+ .remainingAccounts(params.streams.map((stream) => ({
312
+ pubkey: stream,
313
+ isSigner: false,
314
+ isWritable: true,
315
+ })))
316
+ .signers([owner])
317
+ .rpc();
318
+ }
319
+ /**
320
+ * Build batch claim transactions for all streams in a pool
321
+ * Returns transactions ready to be signed with signAllTransactions
322
+ */
323
+ async buildClaimAllTransactions(owner, pool, ownerTokenAccount, batchSize = 20) {
324
+ // Fetch all streams for this pool
325
+ const streams = await this.fetchStreamsByPool(pool);
326
+ const streamAddresses = streams.map((s) => s.address);
327
+ const [vaultPda] = this.getVaultPda(pool);
328
+ const transactions = [];
329
+ // Split into batches
330
+ for (let i = 0; i < streamAddresses.length; i += batchSize) {
331
+ const batch = streamAddresses.slice(i, i + batchSize);
332
+ const tx = await this.program.methods
333
+ .claimBatch()
334
+ .accounts({
335
+ owner,
336
+ pool,
337
+ vault: vaultPda,
338
+ ownerTokenAccount,
339
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
340
+ })
341
+ .remainingAccounts(batch.map((pubkey) => ({
342
+ pubkey,
343
+ isSigner: false,
344
+ isWritable: true,
345
+ })))
346
+ .transaction();
347
+ transactions.push(tx);
348
+ }
349
+ return { transactions, totalStreams: streamAddresses.length };
350
+ }
351
+ /**
352
+ * Cancel a segment (subscriber only)
353
+ */
354
+ async cancelSegment(subscriber, params) {
355
+ const [vaultPda] = this.getVaultPda(params.pool);
356
+ return await this.program.methods
357
+ .cancelSegment(params.segmentIndex)
358
+ .accounts({
359
+ subscriber: subscriber.publicKey,
360
+ pool: params.pool,
361
+ stream: params.stream,
362
+ vault: vaultPda,
363
+ refundTokenAccount: params.refundTokenAccount,
364
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
365
+ })
366
+ .signers([subscriber])
367
+ .rpc();
368
+ }
369
+ /**
370
+ * Upgrade or downgrade a segment
371
+ */
372
+ async upgradeSegment(caller, params) {
373
+ const [vaultPda] = this.getVaultPda(params.pool);
374
+ return await this.program.methods
375
+ .upgradeSegment(params.segmentIndex, (0, utils_1.toBN)(params.newAmount), (0, utils_1.toBN)(params.newDuration))
376
+ .accounts({
377
+ caller: caller.publicKey,
378
+ subscriber: params.subscriber,
379
+ pool: params.pool,
380
+ stream: params.stream,
381
+ vault: vaultPda,
382
+ callerTokenAccount: params.callerTokenAccount,
383
+ payerTokenAccount: params.payerTokenAccount,
384
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
385
+ })
386
+ .signers([caller])
387
+ .rpc();
388
+ }
389
+ // ============================================================================
390
+ // Helper Methods
391
+ // ============================================================================
392
+ /**
393
+ * Check if a pool exists
394
+ */
395
+ async poolExists(owner, name) {
396
+ const pool = await this.fetchPoolByOwner(owner, name);
397
+ return pool !== null;
398
+ }
399
+ /**
400
+ * Check if a subscription stream exists
401
+ */
402
+ async subscriptionExists(pool, subscriber) {
403
+ const stream = await this.fetchStreamBySubscriber(pool, subscriber);
404
+ return stream !== null;
405
+ }
406
+ /**
407
+ * Get claimable amount for a stream
408
+ */
409
+ async getClaimable(stream) {
410
+ const info = await this.getStreamInfo(stream);
411
+ return info?.claimable ?? new anchor_1.BN(0);
412
+ }
413
+ /**
414
+ * Check if subscription is expired
415
+ */
416
+ async isSubscriptionExpired(stream) {
417
+ const info = await this.getStreamInfo(stream);
418
+ return info?.isExpired ?? true;
419
+ }
420
+ // ============================================================================
421
+ // Pool Analytics (Off-chain Calculation)
422
+ // ============================================================================
423
+ /**
424
+ * Fetch all streams for a pool using getProgramAccounts
425
+ * Stream account layout: [8 discriminator][32 pool][32 subscriber]...
426
+ * Filter by pool pubkey at offset 8
427
+ */
428
+ async fetchStreamsByPool(pool) {
429
+ const connection = this.provider.connection;
430
+ // Stream discriminator from Anchor (SHA256("account:Stream")[0..8])
431
+ const streamDiscriminator = Buffer.from([166, 224, 59, 4, 202, 10, 186, 83]);
432
+ const accounts = await connection.getProgramAccounts(this.programId, {
433
+ filters: [
434
+ {
435
+ memcmp: {
436
+ offset: 0,
437
+ bytes: streamDiscriminator.toString("base64"),
438
+ encoding: "base64",
439
+ },
440
+ },
441
+ {
442
+ memcmp: {
443
+ offset: 8, // After discriminator
444
+ bytes: pool.toBase58(),
445
+ },
446
+ },
447
+ ],
448
+ });
449
+ const streams = [];
450
+ for (const { pubkey, account } of accounts) {
451
+ try {
452
+ const stream = this.program.coder.accounts.decode("stream", account.data);
453
+ streams.push({ address: pubkey, stream });
454
+ }
455
+ catch {
456
+ // Skip malformed accounts
457
+ }
458
+ }
459
+ return streams;
460
+ }
461
+ /**
462
+ * Calculate real-time aggregate statistics for a pool
463
+ * Fetches all streams and calculates vesting off-chain
464
+ */
465
+ async getPoolAggregateStats(pool) {
466
+ const streams = await this.fetchStreamsByPool(pool);
467
+ const currentTime = Math.floor(Date.now() / 1000);
468
+ let totalDeposited = new anchor_1.BN(0);
469
+ let totalVested = new anchor_1.BN(0);
470
+ let totalWithdrawn = new anchor_1.BN(0);
471
+ let activeStreams = 0;
472
+ let expiredStreams = 0;
473
+ for (const { stream } of streams) {
474
+ const vesting = (0, utils_1.calculateStreamVesting)(stream, currentTime);
475
+ totalDeposited = totalDeposited.add(vesting.totalDeposited);
476
+ totalVested = totalVested.add(vesting.totalVested);
477
+ totalWithdrawn = totalWithdrawn.add(stream.totalWithdrawn);
478
+ if (vesting.isExpired) {
479
+ expiredStreams++;
480
+ }
481
+ else {
482
+ activeStreams++;
483
+ }
484
+ }
485
+ const totalClaimable = totalVested.sub(totalWithdrawn);
486
+ const totalUnvested = totalDeposited.sub(totalVested);
487
+ return {
488
+ pool,
489
+ totalStreams: streams.length,
490
+ activeStreams,
491
+ expiredStreams,
492
+ totalDeposited,
493
+ totalVested,
494
+ totalWithdrawn,
495
+ totalClaimable: totalClaimable.gtn(0) ? totalClaimable : new anchor_1.BN(0),
496
+ totalUnvested,
497
+ calculatedAt: new Date(),
498
+ };
499
+ }
500
+ /**
501
+ * Get real-time claimable amount for a stream (calculated off-chain)
502
+ */
503
+ async getRealTimeClaimable(streamAddress) {
504
+ const stream = await this.fetchStream(streamAddress);
505
+ if (!stream)
506
+ return new anchor_1.BN(0);
507
+ const vesting = (0, utils_1.calculateStreamVesting)(stream);
508
+ return vesting.claimable;
509
+ }
510
+ /**
511
+ * Get detailed stream info with real-time vesting calculation
512
+ */
513
+ async getStreamInfoRealTime(streamAddress) {
514
+ const stream = await this.fetchStream(streamAddress);
515
+ if (!stream)
516
+ return null;
517
+ const currentTime = Math.floor(Date.now() / 1000);
518
+ const vesting = (0, utils_1.calculateStreamVesting)(stream, currentTime);
519
+ const segments = stream.segments.map((seg, index) => {
520
+ const segVested = vesting.totalVested; // Simplified - could calculate per-segment
521
+ return {
522
+ index,
523
+ tier: seg.tier,
524
+ payer: seg.payer,
525
+ amount: seg.amount,
526
+ vested: seg.vested,
527
+ unvested: seg.amount.sub(seg.vested),
528
+ ratePerSecond: seg.ratePerSecond,
529
+ cancelled: seg.cancelled,
530
+ isComplete: seg.vested.eq(seg.amount) || seg.cancelled,
531
+ };
532
+ });
533
+ return {
534
+ address: streamAddress,
535
+ pool: stream.pool,
536
+ subscriber: stream.subscriber,
537
+ startTime: new Date(stream.startTime.toNumber() * 1000),
538
+ totalDeposited: vesting.totalDeposited,
539
+ totalVested: vesting.totalVested,
540
+ totalWithdrawn: stream.totalWithdrawn,
541
+ claimable: vesting.claimable,
542
+ activeSegments: segments.filter((s) => !s.isComplete).length,
543
+ cancelledSegments: segments.filter((s) => s.cancelled).length,
544
+ isExpired: vesting.isExpired,
545
+ segments,
546
+ };
547
+ }
548
+ }
549
+ exports.FlowcraftClient = FlowcraftClient;
550
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;;;;AAAA,6CAKyB;AACzB,8CAM2B;AAC3B,iDAAqD;AACrD,2CAAyC;AAiBzC,mCAOiB;AAEjB,iCAAiC;AACjC,0DAAkC;AACrB,QAAA,GAAG,GAAQ,kBAAe,CAAC;AAExC,MAAa,eAAe;IAK1B,YACE,UAAsB,EACtB,MAAc,EACd,YAAuB,sBAAU,EACjC,MAAW,WAAG;QAEd,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,uBAAc,CAAC,UAAU,EAAE,MAAM,EAAE;YACrD,UAAU,EAAE,WAAW;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,gBAAO,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,+EAA+E;IAC/E,cAAc;IACd,+EAA+E;IAE/E;;OAEG;IACH,YAAY;QACV,OAAO,IAAA,oBAAY,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,KAAgB,EAAE,IAAY;QACvC,OAAO,IAAA,kBAAU,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,IAAe,EAAE,UAAqB;QACjD,OAAO,IAAA,oBAAY,EAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAe;QACzB,OAAO,IAAA,mBAAW,EAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,+EAA+E;IAC/E,gBAAgB;IAChB,+EAA+E;IAE/E;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,MAAO,IAAI,CAAC,OAAO,CAAC,OAAe,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC5E,OAAO,OAAiB,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,IAAe;QAC7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAO,IAAI,CAAC,OAAO,CAAC,OAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrE,OAAO,OAAe,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAAgB,EAAE,IAAY;QACnD,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,MAAiB;QACjC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAO,IAAI,CAAC,OAAO,CAAC,OAAe,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACzE,OAAO,OAAiB,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,uBAAuB,CAC3B,IAAe,EACf,UAAqB;QAErB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,IAAe;QAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE;YACtD,cAAc,EAAE,QAAQ,CAAC,cAAc;YACvC,cAAc,EAAE,QAAQ,CAAC,cAAc;YACvC,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,SAAS,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;SAC1D,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,MAAiB;QACnC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAE7B,IAAI,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC;QAC/C,IAAI,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC;QAC5C,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAE1B,MAAM,QAAQ,GAAkB,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACrE,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChD,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAE1C,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClB,iBAAiB,EAAE,CAAC;YACtB,CAAC;iBAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtC,cAAc,EAAE,CAAC;YACnB,CAAC;YAED,OAAO;gBACL,KAAK;gBACL,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;gBACpC,aAAa,EAAE,GAAG,CAAC,aAAa;gBAChC,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS;aACvD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAC5C,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;YAC3D,cAAc;YACd,WAAW;YACX,cAAc,EAAE,UAAU,CAAC,cAAc;YACzC,SAAS;YACT,cAAc;YACd,iBAAiB;YACjB,SAAS;YACT,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,qBAAqB;IACrB,+EAA+E;IAE/E;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,KAAc,EACd,QAAmB,EACnB,MAAc;QAEd,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAExC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAC9B,gBAAgB,CAAC,QAAQ,EAAE,IAAI,WAAE,CAAC,MAAM,CAAC,CAAC;aAC1C,QAAQ,CAAC;YACR,KAAK,EAAE,KAAK,CAAC,SAAS;YACtB,MAAM,EAAE,SAAS;YACjB,aAAa,EAAE,uBAAa,CAAC,SAAS;SACvC,CAAC;aACD,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;aAChB,GAAG,EAAE,CAAC;IACX,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,KAAc,EACd,WAAuB,EACvB,SAAkB,EAClB,QAAoB;QAEpB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAExC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAC9B,YAAY,CACX,WAAW,IAAI,IAAI,EACnB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,WAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAClD,QAAQ,IAAI,IAAI,CACjB;aACA,QAAQ,CAAC;YACR,KAAK,EAAE,KAAK,CAAC,SAAS;YACtB,MAAM,EAAE,SAAS;SAClB,CAAC;aACD,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;aAChB,GAAG,EAAE,CAAC;IACX,CAAC;IAED,+EAA+E;IAC/E,oBAAoB;IACpB,+EAA+E;IAE/E;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CACd,KAAc,EACd,KAAgB,EAChB,MAAwB;QAExB,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE7C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aACzC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;aACvB,QAAQ,CAAC;YACR,KAAK,EAAE,KAAK,CAAC,SAAS;YACtB,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,QAAQ;YACf,YAAY,EAAE,4BAAgB;YAC9B,aAAa,EAAE,uBAAa,CAAC,SAAS;SACvC,CAAC;aACD,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;aAChB,GAAG,EAAE,CAAC;QAET,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACvD,CAAC;IAED,+EAA+E;IAC/E,4BAA4B;IAC5B,+EAA+E;IAE/E;;OAEG;IACH,KAAK,CAAC,SAAS,CACb,UAAmB,EACnB,MAAuB;QAEvB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACxC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QACzE,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEjD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aACzC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAA,YAAI,EAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAA,YAAI,EAAC,MAAM,CAAC,eAAe,CAAC,CAAC;aACzE,QAAQ,CAAC;YACR,UAAU,EAAE,UAAU,CAAC,SAAS;YAChC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,QAAQ;YACf,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;YACrD,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;YACjD,YAAY,EAAE,4BAAgB;YAC9B,aAAa,EAAE,uBAAa,CAAC,SAAS;SACvC,CAAC;aACD,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;aACrB,GAAG,EAAE,CAAC;QAET,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,KAAc,EACd,MAAwB;QAExB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACxC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEjD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAC9B,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,IAAA,YAAI,EAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAA,YAAI,EAAC,MAAM,CAAC,eAAe,CAAC,CAAC;aAC1E,QAAQ,CAAC;YACR,KAAK,EAAE,KAAK,CAAC,SAAS;YACtB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,QAAQ;YACf,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;YACjD,YAAY,EAAE,4BAAgB;SAC/B,CAAC;aACD,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;aAChB,GAAG,EAAE,CAAC;IACX,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CACT,KAAc,EACd,MAAmB;QAEnB,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEjD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAC9B,KAAK,EAAE;aACP,QAAQ,CAAC;YACR,KAAK,EAAE,KAAK,CAAC,SAAS;YACtB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,QAAQ;YACf,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,YAAY,EAAE,4BAAgB;SAC/B,CAAC;aACD,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;aAChB,GAAG,EAAE,CAAC;IACX,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,KAAc,EACd,MAIC;QAED,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEjD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAC9B,UAAU,EAAE;aACZ,QAAQ,CAAC;YACR,KAAK,EAAE,KAAK,CAAC,SAAS;YACtB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,QAAQ;YACf,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,YAAY,EAAE,4BAAgB;SAC/B,CAAC;aACD,iBAAiB,CAChB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9B,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC,CACJ;aACA,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;aAChB,GAAG,EAAE,CAAC;IACX,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,yBAAyB,CAC7B,KAAgB,EAChB,IAAe,EACf,iBAA4B,EAC5B,YAAoB,EAAE;QAEtB,kCAAkC;QAClC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAoB,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAEzE,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAU,EAAE,CAAC;QAE/B,qBAAqB;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YAC3D,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;YAEtD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;iBAClC,UAAU,EAAE;iBACZ,QAAQ,CAAC;gBACR,KAAK;gBACL,IAAI;gBACJ,KAAK,EAAE,QAAQ;gBACf,iBAAiB;gBACjB,YAAY,EAAE,4BAAgB;aAC/B,CAAC;iBACD,iBAAiB,CAChB,KAAK,CAAC,GAAG,CAAC,CAAC,MAAiB,EAAE,EAAE,CAAC,CAAC;gBAChC,MAAM;gBACN,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC,CACJ;iBACA,WAAW,EAAE,CAAC;YAEjB,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,CAAC,MAAM,EAAE,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,UAAmB,EACnB,MAA2B;QAE3B,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEjD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAC9B,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC;aAClC,QAAQ,CAAC;YACR,UAAU,EAAE,UAAU,CAAC,SAAS;YAChC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,QAAQ;YACf,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;YAC7C,YAAY,EAAE,4BAAgB;SAC/B,CAAC;aACD,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;aACrB,GAAG,EAAE,CAAC;IACX,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,MAAe,EACf,MAA4B;QAE5B,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEjD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAC9B,cAAc,CACb,MAAM,CAAC,YAAY,EACnB,IAAA,YAAI,EAAC,MAAM,CAAC,SAAS,CAAC,EACtB,IAAA,YAAI,EAAC,MAAM,CAAC,WAAW,CAAC,CACzB;aACA,QAAQ,CAAC;YACR,MAAM,EAAE,MAAM,CAAC,SAAS;YACxB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,QAAQ;YACf,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;YAC7C,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,YAAY,EAAE,4BAAgB;SAC/B,CAAC;aACD,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;aACjB,GAAG,EAAE,CAAC;IACX,CAAC;IAED,+EAA+E;IAC/E,iBAAiB;IACjB,+EAA+E;IAE/E;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,KAAgB,EAAE,IAAY;QAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACtD,OAAO,IAAI,KAAK,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,IAAe,EAAE,UAAqB;QAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACpE,OAAO,MAAM,KAAK,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,MAAiB;QAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,IAAI,EAAE,SAAS,IAAI,IAAI,WAAE,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,MAAiB;QAC3C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC;IACjC,CAAC;IAED,+EAA+E;IAC/E,yCAAyC;IACzC,+EAA+E;IAE/E;;;;OAIG;IACH,KAAK,CAAC,kBAAkB,CAAC,IAAe;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAE5C,oEAAoE;QACpE,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAE7E,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE;YACnE,OAAO,EAAE;gBACP;oBACE,MAAM,EAAE;wBACN,MAAM,EAAE,CAAC;wBACT,KAAK,EAAE,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAC7C,QAAQ,EAAE,QAAQ;qBACnB;iBACF;gBACD;oBACE,MAAM,EAAE;wBACN,MAAM,EAAE,CAAC,EAAE,sBAAsB;wBACjC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;qBACvB;iBACF;aACF;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAwB,EAAE,CAAC;QAExC,KAAK,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAgB,CAAC,MAAM,CACxD,QAAQ,EACR,OAAO,CAAC,IAAI,CACH,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;YAC5B,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,qBAAqB,CAAC,IAAe;QACzC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAElD,IAAI,cAAc,GAAG,IAAI,WAAE,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,WAAW,GAAG,IAAI,WAAE,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,cAAc,GAAG,IAAI,WAAE,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,cAAc,GAAG,CAAC,CAAC;QAEvB,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,IAAA,8BAAsB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAE5D,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC5D,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACnD,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAE3D,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,cAAc,EAAE,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,aAAa,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACvD,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAEtD,OAAO;YACL,IAAI;YACJ,YAAY,EAAE,OAAO,CAAC,MAAM;YAC5B,aAAa;YACb,cAAc;YACd,cAAc;YACd,WAAW;YACX,cAAc;YACd,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,WAAE,CAAC,CAAC,CAAC;YAClE,aAAa;YACb,YAAY,EAAE,IAAI,IAAI,EAAE;SACzB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CAAC,aAAwB;QACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,WAAE,CAAC,CAAC,CAAC,CAAC;QAE9B,MAAM,OAAO,GAAG,IAAA,8BAAsB,EAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,OAAO,CAAC,SAAS,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,aAAwB;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,IAAA,8BAAsB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAE5D,MAAM,QAAQ,GAAkB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACjE,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,2CAA2C;YAClF,OAAO;gBACL,KAAK;gBACL,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;gBACpC,aAAa,EAAE,GAAG,CAAC,aAAa;gBAChC,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS;aACvD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,aAAa;YACtB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;YACvD,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM;YAC5D,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM;YAC7D,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ;SACT,CAAC;IACJ,CAAC;CACF;AA1pBD,0CA0pBC"}
@@ -0,0 +1,11 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ export declare const PROGRAM_ID: PublicKey;
3
+ export declare const RATE_DECIMALS = 1000000000n;
4
+ export declare const BPS_DENOMINATOR = 10000n;
5
+ export declare const MAX_FEE_BPS = 1000n;
6
+ export declare const MAX_SEGMENTS = 100;
7
+ export declare const CONFIG_SEED = "config";
8
+ export declare const POOL_SEED = "pool";
9
+ export declare const STREAM_SEED = "stream";
10
+ export declare const VAULT_SEED = "vault";
11
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,eAAO,MAAM,UAAU,WAEtB,CAAC;AAEF,eAAO,MAAM,aAAa,cAAiB,CAAC;AAC5C,eAAO,MAAM,eAAe,SAAU,CAAC;AACvC,eAAO,MAAM,WAAW,QAAS,CAAC;AAClC,eAAO,MAAM,YAAY,MAAM,CAAC;AAGhC,eAAO,MAAM,WAAW,WAAW,CAAC;AACpC,eAAO,MAAM,SAAS,SAAS,CAAC;AAChC,eAAO,MAAM,WAAW,WAAW,CAAC;AACpC,eAAO,MAAM,UAAU,UAAU,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VAULT_SEED = exports.STREAM_SEED = exports.POOL_SEED = exports.CONFIG_SEED = exports.MAX_SEGMENTS = exports.MAX_FEE_BPS = exports.BPS_DENOMINATOR = exports.RATE_DECIMALS = exports.PROGRAM_ID = void 0;
4
+ const web3_js_1 = require("@solana/web3.js");
5
+ exports.PROGRAM_ID = new web3_js_1.PublicKey("3T8z77gRqyW6KZQBHf1ah2uKABh9vc5rSTaD595U2wm9");
6
+ exports.RATE_DECIMALS = 1000000000n;
7
+ exports.BPS_DENOMINATOR = 10000n;
8
+ exports.MAX_FEE_BPS = 1000n; // 10%
9
+ exports.MAX_SEGMENTS = 100;
10
+ // Seeds for PDA derivation
11
+ exports.CONFIG_SEED = "config";
12
+ exports.POOL_SEED = "pool";
13
+ exports.STREAM_SEED = "stream";
14
+ exports.VAULT_SEED = "vault";
15
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE/B,QAAA,UAAU,GAAG,IAAI,mBAAS,CACrC,8CAA8C,CAC/C,CAAC;AAEW,QAAA,aAAa,GAAG,WAAc,CAAC;AAC/B,QAAA,eAAe,GAAG,MAAO,CAAC;AAC1B,QAAA,WAAW,GAAG,KAAM,CAAC,CAAC,MAAM;AAC5B,QAAA,YAAY,GAAG,GAAG,CAAC;AAEhC,2BAA2B;AACd,QAAA,WAAW,GAAG,QAAQ,CAAC;AACvB,QAAA,SAAS,GAAG,MAAM,CAAC;AACnB,QAAA,WAAW,GAAG,QAAQ,CAAC;AACvB,QAAA,UAAU,GAAG,OAAO,CAAC"}