solana-meme-kit 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/MemeKit.d.ts +30 -0
- package/dist/core/MemeKit.d.ts.map +1 -0
- package/dist/core/MemeKit.js +193 -0
- package/dist/core/MemeKit.js.map +1 -0
- package/dist/core/utils.d.ts +16 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +39 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/managers/JitoManager.d.ts +17 -0
- package/dist/managers/JitoManager.d.ts.map +1 -0
- package/dist/managers/JitoManager.js +64 -0
- package/dist/managers/JitoManager.js.map +1 -0
- package/dist/managers/LiquidityManager.d.ts +16 -0
- package/dist/managers/LiquidityManager.d.ts.map +1 -0
- package/dist/managers/LiquidityManager.js +121 -0
- package/dist/managers/LiquidityManager.js.map +1 -0
- package/dist/managers/MarketManager.d.ts +17 -0
- package/dist/managers/MarketManager.d.ts.map +1 -0
- package/dist/managers/MarketManager.js +182 -0
- package/dist/managers/MarketManager.js.map +1 -0
- package/dist/managers/TokenManager.d.ts +18 -0
- package/dist/managers/TokenManager.d.ts.map +1 -0
- package/dist/managers/TokenManager.js +64 -0
- package/dist/managers/TokenManager.js.map +1 -0
- package/dist/strategies/LiquidityStrategy.d.ts +33 -0
- package/dist/strategies/LiquidityStrategy.d.ts.map +1 -0
- package/dist/strategies/LiquidityStrategy.js +2 -0
- package/dist/strategies/LiquidityStrategy.js.map +1 -0
- package/dist/strategies/meteora/DLMMManager.d.ts +20 -0
- package/dist/strategies/meteora/DLMMManager.d.ts.map +1 -0
- package/dist/strategies/meteora/DLMMManager.js +82 -0
- package/dist/strategies/meteora/DLMMManager.js.map +1 -0
- package/dist/strategies/meteora/index.d.ts +2 -0
- package/dist/strategies/meteora/index.d.ts.map +1 -0
- package/dist/strategies/meteora/index.js +3 -0
- package/dist/strategies/meteora/index.js.map +1 -0
- package/dist/strategies/raydium/AMMManager.d.ts +20 -0
- package/dist/strategies/raydium/AMMManager.d.ts.map +1 -0
- package/dist/strategies/raydium/AMMManager.js +96 -0
- package/dist/strategies/raydium/AMMManager.js.map +1 -0
- package/dist/strategies/raydium/CPMMManager.d.ts +20 -0
- package/dist/strategies/raydium/CPMMManager.d.ts.map +1 -0
- package/dist/strategies/raydium/CPMMManager.js +121 -0
- package/dist/strategies/raydium/CPMMManager.js.map +1 -0
- package/dist/strategies/raydium/index.d.ts +3 -0
- package/dist/strategies/raydium/index.d.ts.map +1 -0
- package/dist/strategies/raydium/index.js +4 -0
- package/dist/strategies/raydium/index.js.map +1 -0
- package/dist/utils/jitoTools.d.ts +14 -0
- package/dist/utils/jitoTools.d.ts.map +1 -0
- package/dist/utils/jitoTools.js +78 -0
- package/dist/utils/jitoTools.js.map +1 -0
- package/package.json +5 -2
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { Connection, Keypair, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js';
|
|
2
|
+
import { Market, DexInstructions } from '@openbook-dex/openbook'; // Verify typescript support/exports
|
|
3
|
+
import { ACCOUNT_SIZE, createInitializeAccountInstruction, TOKEN_PROGRAM_ID } from '@solana/spl-token';
|
|
4
|
+
import { Logger } from '../core/utils';
|
|
5
|
+
import { BN } from 'bn.js';
|
|
6
|
+
// OpenBook Program ID (Mainnet)
|
|
7
|
+
// OpenBook Program ID (Mainnet) - V1 Official
|
|
8
|
+
export const OPENBOOK_PROGRAM_ID = new PublicKey('srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX');
|
|
9
|
+
export class MarketManager {
|
|
10
|
+
connection;
|
|
11
|
+
wallet;
|
|
12
|
+
cluster;
|
|
13
|
+
constructor(connection, wallet, cluster = 'mainnet-beta') {
|
|
14
|
+
this.connection = connection;
|
|
15
|
+
this.wallet = wallet;
|
|
16
|
+
this.cluster = cluster;
|
|
17
|
+
}
|
|
18
|
+
async createLowCostMarket(baseMint, quoteMint, baseDecimals, quoteDecimals,
|
|
19
|
+
// Defaults for "Low Cost"
|
|
20
|
+
eventQueueLength = 128, requestQueueLength = 63, orderbookLength = 201) {
|
|
21
|
+
Logger.info('Generating Low-Cost OpenBook Market...');
|
|
22
|
+
const marketKeypair = Keypair.generate();
|
|
23
|
+
const eventQueue = Keypair.generate();
|
|
24
|
+
const requestQueue = Keypair.generate();
|
|
25
|
+
const bids = Keypair.generate();
|
|
26
|
+
const asks = Keypair.generate();
|
|
27
|
+
const vaultSignerNonce = new BN(0); // This usually needs calculation or is found inside the instruction builder
|
|
28
|
+
const [vaultOwner, _vaultSignerNonce] = await PublicKey.findProgramAddress([
|
|
29
|
+
marketKeypair.publicKey.toBuffer(),
|
|
30
|
+
vaultSignerNonce.toArrayLike(Buffer, 'le', 8),
|
|
31
|
+
], OPENBOOK_PROGRAM_ID);
|
|
32
|
+
// Calculate space and rent
|
|
33
|
+
// We need to look up exact sizes.
|
|
34
|
+
// Standard sizes:
|
|
35
|
+
// EventQ: 8 + 12 * length? Header + events?
|
|
36
|
+
// RequestQ: ...
|
|
37
|
+
// Orderbook: ...
|
|
38
|
+
// For simplicity, we'll try to use the Market.create helper if it allows options,
|
|
39
|
+
// OR manual calculation.
|
|
40
|
+
// The @openbook-dex/openbook package usually exposes `Market.getLayout(programId)` or similar.
|
|
41
|
+
// Let's assume standard low-cost sizes (in bytes) often used:
|
|
42
|
+
// Event Queue (128): 262144 (This is standard 2978 slots? No, 128 is tiny).
|
|
43
|
+
// Let's use specific calculations from v1 documentation/examples if available.
|
|
44
|
+
// PROVISIONAL: Using known valid sizes for "low cost"
|
|
45
|
+
// Event Queue (128 slots) -> ~11308 bytes?
|
|
46
|
+
// Request Queue (63 slots) -> ~5084 bytes?
|
|
47
|
+
// Bids/Asks (201 slots) -> ~14524 bytes?
|
|
48
|
+
// Better strategy: Calculate safely or over-provision slightly less than max.
|
|
49
|
+
// Length * SlotSize + Header
|
|
50
|
+
const EVENT_SLOT_SIZE = 88;
|
|
51
|
+
const REQUEST_SLOT_SIZE = 80;
|
|
52
|
+
const ORDER_SLOT_SIZE = 72;
|
|
53
|
+
const HEADER_SIZE = 32; // Approx, need exact layout
|
|
54
|
+
// Actually, let's use the layout from the SDK
|
|
55
|
+
const totalEventQueueSize = 376 + 128 * 88; // Header + slots
|
|
56
|
+
const totalRequestQueueSize = 332 + 63 * 80;
|
|
57
|
+
const totalOrderbookSize = 104 + 201 * 72;
|
|
58
|
+
Logger.info(`Calculated Sizes - Event: ${totalEventQueueSize}, Request: ${totalRequestQueueSize}, Orderbook: ${totalOrderbookSize}`);
|
|
59
|
+
const lamportsEventQueue = await this.connection.getMinimumBalanceForRentExemption(totalEventQueueSize);
|
|
60
|
+
const lamportsRequestQueue = await this.connection.getMinimumBalanceForRentExemption(totalRequestQueueSize);
|
|
61
|
+
const lamportsOrderbook = await this.connection.getMinimumBalanceForRentExemption(totalOrderbookSize);
|
|
62
|
+
const tx = new Transaction();
|
|
63
|
+
// Create Accounts
|
|
64
|
+
tx.add(SystemProgram.createAccount({
|
|
65
|
+
fromPubkey: this.wallet.publicKey,
|
|
66
|
+
newAccountPubkey: eventQueue.publicKey,
|
|
67
|
+
lamports: lamportsEventQueue,
|
|
68
|
+
space: totalEventQueueSize,
|
|
69
|
+
programId: OPENBOOK_PROGRAM_ID,
|
|
70
|
+
}), SystemProgram.createAccount({
|
|
71
|
+
fromPubkey: this.wallet.publicKey,
|
|
72
|
+
newAccountPubkey: requestQueue.publicKey,
|
|
73
|
+
lamports: lamportsRequestQueue,
|
|
74
|
+
space: totalRequestQueueSize,
|
|
75
|
+
programId: OPENBOOK_PROGRAM_ID,
|
|
76
|
+
}), SystemProgram.createAccount({
|
|
77
|
+
fromPubkey: this.wallet.publicKey,
|
|
78
|
+
newAccountPubkey: bids.publicKey,
|
|
79
|
+
lamports: lamportsOrderbook,
|
|
80
|
+
space: totalOrderbookSize,
|
|
81
|
+
programId: OPENBOOK_PROGRAM_ID,
|
|
82
|
+
}), SystemProgram.createAccount({
|
|
83
|
+
fromPubkey: this.wallet.publicKey,
|
|
84
|
+
newAccountPubkey: asks.publicKey,
|
|
85
|
+
lamports: lamportsOrderbook,
|
|
86
|
+
space: totalOrderbookSize,
|
|
87
|
+
programId: OPENBOOK_PROGRAM_ID,
|
|
88
|
+
}));
|
|
89
|
+
// Initialize Market
|
|
90
|
+
const marketLayoutSpan = Market.getLayout(OPENBOOK_PROGRAM_ID).span;
|
|
91
|
+
const lamportsMarket = await this.connection.getMinimumBalanceForRentExemption(marketLayoutSpan);
|
|
92
|
+
// Create Vaults
|
|
93
|
+
// Vaults are Token Accounts owned by the Market PDA (Vault Owner)
|
|
94
|
+
// We generate random keypairs for them, create the accounts, and init them with Owner = vaultOwner
|
|
95
|
+
const baseVault = Keypair.generate();
|
|
96
|
+
const quoteVault = Keypair.generate();
|
|
97
|
+
const vaultLamports = await this.connection.getMinimumBalanceForRentExemption(ACCOUNT_SIZE);
|
|
98
|
+
tx.add(
|
|
99
|
+
// Create Base Vault Account
|
|
100
|
+
SystemProgram.createAccount({
|
|
101
|
+
fromPubkey: this.wallet.publicKey,
|
|
102
|
+
newAccountPubkey: baseVault.publicKey,
|
|
103
|
+
lamports: vaultLamports,
|
|
104
|
+
space: ACCOUNT_SIZE,
|
|
105
|
+
programId: TOKEN_PROGRAM_ID,
|
|
106
|
+
}),
|
|
107
|
+
// Initialize Base Vault (Owned by Vault Owner PDA)
|
|
108
|
+
createInitializeAccountInstruction(baseVault.publicKey, baseMint, vaultOwner),
|
|
109
|
+
// Create Quote Vault Account
|
|
110
|
+
SystemProgram.createAccount({
|
|
111
|
+
fromPubkey: this.wallet.publicKey,
|
|
112
|
+
newAccountPubkey: quoteVault.publicKey,
|
|
113
|
+
lamports: vaultLamports,
|
|
114
|
+
space: ACCOUNT_SIZE,
|
|
115
|
+
programId: TOKEN_PROGRAM_ID,
|
|
116
|
+
}),
|
|
117
|
+
// Initialize Quote Vault (Owned by Vault Owner PDA)
|
|
118
|
+
createInitializeAccountInstruction(quoteVault.publicKey, quoteMint, vaultOwner));
|
|
119
|
+
tx.add(SystemProgram.createAccount({
|
|
120
|
+
fromPubkey: this.wallet.publicKey,
|
|
121
|
+
newAccountPubkey: marketKeypair.publicKey,
|
|
122
|
+
lamports: lamportsMarket,
|
|
123
|
+
space: marketLayoutSpan,
|
|
124
|
+
programId: OPENBOOK_PROGRAM_ID,
|
|
125
|
+
}), DexInstructions.initializeMarket({
|
|
126
|
+
market: marketKeypair.publicKey,
|
|
127
|
+
requestQueue: requestQueue.publicKey,
|
|
128
|
+
eventQueue: eventQueue.publicKey,
|
|
129
|
+
bids: bids.publicKey,
|
|
130
|
+
asks: asks.publicKey,
|
|
131
|
+
baseVault: baseVault.publicKey,
|
|
132
|
+
quoteVault: quoteVault.publicKey,
|
|
133
|
+
baseMint,
|
|
134
|
+
quoteMint,
|
|
135
|
+
baseLotSize: new BN(1), // Tunable?
|
|
136
|
+
quoteLotSize: new BN(1), // Tunable?
|
|
137
|
+
feeRateBps: 0,
|
|
138
|
+
vaultSignerNonce: _vaultSignerNonce,
|
|
139
|
+
programId: OPENBOOK_PROGRAM_ID,
|
|
140
|
+
quoteDustThreshold: new BN(100), // Standard dust threshold
|
|
141
|
+
// authority // deprecated/not used usually?
|
|
142
|
+
}));
|
|
143
|
+
Logger.info(`Sending Market Creation Transaction (Market ID: ${marketKeypair.publicKey.toString()})...`);
|
|
144
|
+
// Note: This transaction might be large.
|
|
145
|
+
// We strictly need to sign with all these keypairs.
|
|
146
|
+
const signers = [
|
|
147
|
+
this.wallet,
|
|
148
|
+
marketKeypair,
|
|
149
|
+
eventQueue,
|
|
150
|
+
requestQueue,
|
|
151
|
+
bids,
|
|
152
|
+
asks,
|
|
153
|
+
baseVault,
|
|
154
|
+
quoteVault
|
|
155
|
+
];
|
|
156
|
+
// For now, return the instruction and signers to be sent, or send it here.
|
|
157
|
+
// The architecture says "MarketManager Handles interaction".
|
|
158
|
+
// Let's send it.
|
|
159
|
+
// Using sendTransaction helper from web3.js/connection
|
|
160
|
+
// We need to compile it or use sendTransaction (if passing Keypair as wallet).
|
|
161
|
+
// Let's assume standard behavior.
|
|
162
|
+
try {
|
|
163
|
+
const sig = await this.connection.sendTransaction(tx, signers);
|
|
164
|
+
await this.connection.confirmTransaction(sig);
|
|
165
|
+
Logger.info(`Market Created! Signature: ${sig}`);
|
|
166
|
+
}
|
|
167
|
+
catch (e) {
|
|
168
|
+
Logger.error('Failed to create market', e);
|
|
169
|
+
throw e;
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
marketId: marketKeypair.publicKey.toString(),
|
|
173
|
+
marketState: {
|
|
174
|
+
baseVault: baseVault.publicKey,
|
|
175
|
+
quoteVault: quoteVault.publicKey,
|
|
176
|
+
eventQueue: eventQueue.publicKey,
|
|
177
|
+
// ...
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=MarketManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarketManager.js","sourceRoot":"","sources":["../../src/managers/MarketManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Connection, Keypair, PublicKey } from '@solana/web3.js';
|
|
2
|
+
export interface TokenConfig {
|
|
3
|
+
name: string;
|
|
4
|
+
symbol: string;
|
|
5
|
+
uri: string;
|
|
6
|
+
decimals?: number;
|
|
7
|
+
initialSupply: number;
|
|
8
|
+
}
|
|
9
|
+
export declare class TokenManager {
|
|
10
|
+
private connection;
|
|
11
|
+
private umi;
|
|
12
|
+
constructor(connection: Connection, payer: Keypair);
|
|
13
|
+
createToken(config: TokenConfig): Promise<{
|
|
14
|
+
mint: Keypair;
|
|
15
|
+
}>;
|
|
16
|
+
revokeAuthorities(mint: PublicKey, payer: Keypair): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=TokenManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenManager.d.ts","sourceRoot":"","sources":["../../src/managers/TokenManager.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjE,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,YAAY;IAGT,OAAO,CAAC,UAAU;IAF9B,OAAO,CAAC,GAAG,CAAC;gBAEQ,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO;IAQpD,WAAW,CAAC,MAAM,EAAE,WAAW;;;IAmC/B,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO;CAyB1D"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
|
|
2
|
+
import { createSignerFromKeypair, signerIdentity, generateSigner, percentAmount, keypairIdentity } from '@metaplex-foundation/umi';
|
|
3
|
+
import { createFungible, mintV1, TokenStandard, mplTokenMetadata } from '@metaplex-foundation/mpl-token-metadata';
|
|
4
|
+
import { fromWeb3JsKeypair, toWeb3JsKeypair } from '@metaplex-foundation/umi-web3js-adapters';
|
|
5
|
+
import { Connection, Keypair, PublicKey } from '@solana/web3.js';
|
|
6
|
+
import { setAuthority, AuthorityType } from '@solana/spl-token';
|
|
7
|
+
import { Logger } from '../core/utils';
|
|
8
|
+
export class TokenManager {
|
|
9
|
+
connection;
|
|
10
|
+
umi;
|
|
11
|
+
constructor(connection, payer) {
|
|
12
|
+
this.connection = connection;
|
|
13
|
+
this.umi = createUmi(connection.rpcEndpoint)
|
|
14
|
+
.use(mplTokenMetadata());
|
|
15
|
+
const keypair = fromWeb3JsKeypair(payer);
|
|
16
|
+
this.umi.use(keypairIdentity(keypair));
|
|
17
|
+
}
|
|
18
|
+
async createToken(config) {
|
|
19
|
+
Logger.info(`Creating token ${config.name} (${config.symbol})...`);
|
|
20
|
+
const mint = generateSigner(this.umi);
|
|
21
|
+
const supply = BigInt(config.initialSupply * (10 ** (config.decimals || 6)));
|
|
22
|
+
// Create the Fungible Token
|
|
23
|
+
// We use createFungible which inherently creates a mint with 0 decimals if not specified,
|
|
24
|
+
// but here we specify it. It defaults to 0 supply.
|
|
25
|
+
const builder = createFungible(this.umi, {
|
|
26
|
+
mint,
|
|
27
|
+
name: config.name,
|
|
28
|
+
symbol: config.symbol,
|
|
29
|
+
uri: config.uri,
|
|
30
|
+
sellerFeeBasisPoints: percentAmount(0),
|
|
31
|
+
decimals: config.decimals || 6,
|
|
32
|
+
});
|
|
33
|
+
await builder.sendAndConfirm(this.umi);
|
|
34
|
+
Logger.info(`Token Mint created: ${mint.publicKey.toString()}`);
|
|
35
|
+
// Mint initial supply to payer
|
|
36
|
+
Logger.info(`Minting ${config.initialSupply} tokens to payer...`);
|
|
37
|
+
await mintV1(this.umi, {
|
|
38
|
+
mint: mint.publicKey,
|
|
39
|
+
amount: supply,
|
|
40
|
+
tokenStandard: TokenStandard.Fungible,
|
|
41
|
+
}).sendAndConfirm(this.umi);
|
|
42
|
+
return {
|
|
43
|
+
mint: toWeb3JsKeypair(mint),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
async revokeAuthorities(mint, payer) {
|
|
47
|
+
Logger.info(`Revoking Mint and Freeze authorities for ${mint.toString()}...`);
|
|
48
|
+
// Revoke Mint Authority
|
|
49
|
+
await setAuthority(this.connection, payer, // Payer
|
|
50
|
+
mint, // Account
|
|
51
|
+
payer, // Current authority
|
|
52
|
+
AuthorityType.MintTokens, null // Set new authority to null to revoke
|
|
53
|
+
);
|
|
54
|
+
Logger.info(`Mint authority revoked for ${mint.toString()}`);
|
|
55
|
+
// Revoke Freeze Authority
|
|
56
|
+
await setAuthority(this.connection, payer, // Payer
|
|
57
|
+
mint, // Account
|
|
58
|
+
payer, // Current authority
|
|
59
|
+
AuthorityType.FreezeAccount, null // Set new authority to null to revoke
|
|
60
|
+
);
|
|
61
|
+
Logger.info(`Freeze authority revoked for ${mint.toString()}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=TokenManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenManager.js","sourceRoot":"","sources":["../../src/managers/TokenManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { TransactionInstruction, PublicKey } from "@solana/web3.js";
|
|
2
|
+
import type { BlockEngineRegion } from "../utils/jitoTools";
|
|
3
|
+
export interface LaunchOptions {
|
|
4
|
+
name: string;
|
|
5
|
+
symbol: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
image: string;
|
|
8
|
+
decimals?: number;
|
|
9
|
+
supply?: number;
|
|
10
|
+
solLiquidityAmount?: number;
|
|
11
|
+
tokenLiquidityAmount?: number;
|
|
12
|
+
liquidity?: {
|
|
13
|
+
solAmount: number;
|
|
14
|
+
tokenAmount: number;
|
|
15
|
+
};
|
|
16
|
+
dex?: "meteora:dlmm" | "raydium:cpmm" | "raydium:amm";
|
|
17
|
+
strategy?: "meteora" | "raydium-cpmm" | "raydium-amm";
|
|
18
|
+
devBuySolAmount?: number;
|
|
19
|
+
jitoTip?: number | "auto";
|
|
20
|
+
blockEngine?: BlockEngineRegion;
|
|
21
|
+
meteoraOptions?: {
|
|
22
|
+
activationPoint?: number;
|
|
23
|
+
activationType?: "timestamp" | "slot";
|
|
24
|
+
};
|
|
25
|
+
marketMode?: "low-cost" | "standard";
|
|
26
|
+
}
|
|
27
|
+
export interface LiquidityStrategy {
|
|
28
|
+
initialize(options: LaunchOptions, mint: PublicKey): Promise<{
|
|
29
|
+
poolId: PublicKey;
|
|
30
|
+
instructions: TransactionInstruction[];
|
|
31
|
+
}>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=LiquidityStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiquidityStrategy.d.ts","sourceRoot":"","sources":["../../src/strategies/LiquidityStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,sBAAsB,EACtB,SAAS,EACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAGF,GAAG,CAAC,EAAE,cAAc,GAAG,cAAc,GAAG,aAAa,CAAC;IACtD,QAAQ,CAAC,EAAE,SAAS,GAAG,cAAc,GAAG,aAAa,CAAC;IAGtD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAEhC,cAAc,CAAC,EAAE;QACf,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,cAAc,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;KACvC,CAAC;IAEF,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;CAGtC;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,CACR,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC;QACT,MAAM,EAAE,SAAS,CAAC;QAClB,YAAY,EAAE,sBAAsB,EAAE,CAAC;KACxC,CAAC,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiquidityStrategy.js","sourceRoot":"","sources":["../../src/strategies/LiquidityStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,OAAO,EACP,sBAAsB,EACtB,SAAS,GACV,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Connection, Keypair, PublicKey, TransactionInstruction } from "@solana/web3.js";
|
|
2
|
+
import type { LiquidityStrategy, LaunchOptions } from "../LiquidityStrategy";
|
|
3
|
+
export declare class DLMMManager implements LiquidityStrategy {
|
|
4
|
+
private connection;
|
|
5
|
+
private wallet;
|
|
6
|
+
private cluster;
|
|
7
|
+
private static BIN_STEP;
|
|
8
|
+
private programId;
|
|
9
|
+
constructor(connection: Connection, wallet: Keypair, cluster?: "devnet" | "mainnet-beta");
|
|
10
|
+
/**
|
|
11
|
+
* Calculate the starting Bin ID from a price.
|
|
12
|
+
* Price = solAmount / tokenAmount (adjusted for decimals)
|
|
13
|
+
*/
|
|
14
|
+
private calculateActiveBinId;
|
|
15
|
+
initialize(options: LaunchOptions, mint: PublicKey): Promise<{
|
|
16
|
+
poolId: PublicKey;
|
|
17
|
+
instructions: TransactionInstruction[];
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=DLMMManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DLMMManager.d.ts","sourceRoot":"","sources":["../../../src/strategies/meteora/DLMMManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAK7E,qBAAa,WAAY,YAAW,iBAAiB;IAKjD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IANjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,SAAS,CAAY;gBAGnB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,OAAO,EACf,OAAO,GAAE,QAAQ,GAAG,cAA+B;IAK7D;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAkBtB,UAAU,CACd,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,YAAY,EAAE,sBAAsB,EAAE,CAAA;KAAE,CAAC;CAkF1E"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Connection, Keypair, PublicKey, TransactionInstruction, Transaction, } from "@solana/web3.js";
|
|
2
|
+
import DLMM, { deriveLbPair, LBCLMM_PROGRAM_IDS } from "@meteora-ag/dlmm";
|
|
3
|
+
import { BN } from "bn.js";
|
|
4
|
+
import { Logger } from "../../core/utils";
|
|
5
|
+
export class DLMMManager {
|
|
6
|
+
connection;
|
|
7
|
+
wallet;
|
|
8
|
+
cluster;
|
|
9
|
+
static BIN_STEP = new BN(100); // Volatility setting for memecoins (100 is standard)
|
|
10
|
+
programId;
|
|
11
|
+
constructor(connection, wallet, cluster = "mainnet-beta") {
|
|
12
|
+
this.connection = connection;
|
|
13
|
+
this.wallet = wallet;
|
|
14
|
+
this.cluster = cluster;
|
|
15
|
+
this.programId = new PublicKey(LBCLMM_PROGRAM_IDS[this.cluster]);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Calculate the starting Bin ID from a price.
|
|
19
|
+
* Price = solAmount / tokenAmount (adjusted for decimals)
|
|
20
|
+
*/
|
|
21
|
+
calculateActiveBinId(solAmount, tokenAmount, tokenDecimals = 6) {
|
|
22
|
+
const solDecimals = 9;
|
|
23
|
+
const adjustedPrice = (solAmount * Math.pow(10, tokenDecimals)) /
|
|
24
|
+
(tokenAmount * Math.pow(10, solDecimals));
|
|
25
|
+
const binStep = DLMMManager.BIN_STEP.toNumber();
|
|
26
|
+
const base = 1 + binStep / 10000;
|
|
27
|
+
const activeId = Math.round(Math.log(adjustedPrice) / Math.log(base));
|
|
28
|
+
Logger.info(`Calculated Active Bin ID: ${activeId} for price ${adjustedPrice}`);
|
|
29
|
+
return activeId;
|
|
30
|
+
}
|
|
31
|
+
async initialize(options, mint) {
|
|
32
|
+
Logger.info("Initializing Meteora DLMM Strategy...");
|
|
33
|
+
const NATIVE_MINT = new PublicKey("So11111111111111111111111111111111111111112"); // WSOL
|
|
34
|
+
// Token ordering
|
|
35
|
+
const [tokenX, tokenY] = mint.toBuffer().compare(NATIVE_MINT.toBuffer()) < 0
|
|
36
|
+
? [mint, NATIVE_MINT]
|
|
37
|
+
: [NATIVE_MINT, mint];
|
|
38
|
+
Logger.info(`Token Order: X=${tokenX.toBase58().slice(0, 8)}..., Y=${tokenY
|
|
39
|
+
.toBase58()
|
|
40
|
+
.slice(0, 8)}...`);
|
|
41
|
+
const solLiquidityAmount = options.liquidity?.solAmount ?? options.solLiquidityAmount ?? 0;
|
|
42
|
+
const tokenLiquidityAmount = options.liquidity?.tokenAmount ?? options.tokenLiquidityAmount ?? 0;
|
|
43
|
+
// Calculate Active Bin ID
|
|
44
|
+
const activeId = this.calculateActiveBinId(solLiquidityAmount, tokenLiquidityAmount, options.decimals);
|
|
45
|
+
// Derive Pool Address
|
|
46
|
+
const [poolPubkey, _] = deriveLbPair(tokenX, tokenY, DLMMManager.BIN_STEP, this.programId);
|
|
47
|
+
Logger.info(`Derived Pool Address: ${poolPubkey.toBase58()}`);
|
|
48
|
+
// Create Pool Transaction using SDK
|
|
49
|
+
// We use createCustomizablePermissionlessLbPair for anti-sniper features (activationPoint)
|
|
50
|
+
const createTx = await DLMM.createCustomizablePermissionlessLbPair(this.connection, new BN(DLMMManager.BIN_STEP), tokenX, tokenY, new BN(activeId), new BN(100), // 1% base fee
|
|
51
|
+
options.meteoraOptions?.activationType === "slot" ? 1 : 0, // 0 for Timestamp, 1 for Slot
|
|
52
|
+
false, // hasAlphaVault (deferred)
|
|
53
|
+
this.wallet.publicKey, options.meteoraOptions?.activationPoint
|
|
54
|
+
? new BN(options.meteoraOptions.activationPoint)
|
|
55
|
+
: undefined);
|
|
56
|
+
// Extract instructions from Transaction
|
|
57
|
+
let instructions = [];
|
|
58
|
+
if (createTx instanceof Transaction) {
|
|
59
|
+
instructions = createTx.instructions;
|
|
60
|
+
}
|
|
61
|
+
else if (createTx.message) {
|
|
62
|
+
// Probably a VersionedTransaction
|
|
63
|
+
Logger.info("Detected VersionedTransaction from Meteora SDK");
|
|
64
|
+
// This is tricky because we can't easily extract "TransactionInstruction" objects from a compiled message
|
|
65
|
+
// without the account keys buffer. However, for bundling, we might need the whole transaction
|
|
66
|
+
// or we might need to use a different SDK method that returns instructions.
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
Logger.warn("Unknown transaction type returned from Meteora SDK");
|
|
70
|
+
console.log(createTx);
|
|
71
|
+
}
|
|
72
|
+
// Add Liquidity Instructions (Placeholder for now as SDK requires active DLMM instance)
|
|
73
|
+
// In a real launch, we would use a Jito bundle to ensure Tx1 (Create) and Tx2 (Add Liquidity)
|
|
74
|
+
// execute together. For this SDK, we provide the creation instructions.
|
|
75
|
+
// Users can then use LiquidityManager or similar to add liquidity once pool exists.
|
|
76
|
+
return {
|
|
77
|
+
poolId: poolPubkey,
|
|
78
|
+
instructions,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=DLMMManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DLMMManager.js","sourceRoot":"","sources":["../../../src/strategies/meteora/DLMMManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/strategies/meteora/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/strategies/meteora/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Connection, Keypair, PublicKey, TransactionInstruction } from "@solana/web3.js";
|
|
2
|
+
import type { LiquidityStrategy, LaunchOptions } from "../LiquidityStrategy";
|
|
3
|
+
import { MarketManager } from "../../managers/MarketManager";
|
|
4
|
+
/**
|
|
5
|
+
* Raydium AMM (Legacy V4) Strategy
|
|
6
|
+
*/
|
|
7
|
+
export declare class AMMManager implements LiquidityStrategy {
|
|
8
|
+
private connection;
|
|
9
|
+
private wallet;
|
|
10
|
+
private marketManager;
|
|
11
|
+
private cluster;
|
|
12
|
+
private raydium;
|
|
13
|
+
constructor(connection: Connection, wallet: Keypair, marketManager: MarketManager, cluster?: "mainnet-beta" | "devnet");
|
|
14
|
+
private loadSdk;
|
|
15
|
+
initialize(options: LaunchOptions, mint: PublicKey): Promise<{
|
|
16
|
+
poolId: PublicKey;
|
|
17
|
+
instructions: TransactionInstruction[];
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=AMMManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AMMManager.d.ts","sourceRoot":"","sources":["../../../src/strategies/raydium/AMMManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAM7D;;GAEG;AACH,qBAAa,UAAW,YAAW,iBAAiB;IAIhD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO;IANjB,OAAO,CAAC,OAAO,CAAwB;gBAG7B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,OAAO,EACf,aAAa,EAAE,aAAa,EAC5B,OAAO,GAAE,cAAc,GAAG,QAAyB;YAG/C,OAAO;IAYf,UAAU,CACd,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,YAAY,EAAE,sBAAsB,EAAE,CAAA;KAAE,CAAC;CAwF1E"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Connection, Keypair, PublicKey, TransactionInstruction, Transaction, } from "@solana/web3.js";
|
|
2
|
+
import { Logger } from "../../core/utils";
|
|
3
|
+
import { MarketManager } from "../../managers/MarketManager";
|
|
4
|
+
import { Raydium, TxVersion } from "@raydium-io/raydium-sdk-v2";
|
|
5
|
+
import { BN } from "bn.js";
|
|
6
|
+
const WSOL = new PublicKey("So11111111111111111111111111111111111111112");
|
|
7
|
+
/**
|
|
8
|
+
* Raydium AMM (Legacy V4) Strategy
|
|
9
|
+
*/
|
|
10
|
+
export class AMMManager {
|
|
11
|
+
connection;
|
|
12
|
+
wallet;
|
|
13
|
+
marketManager;
|
|
14
|
+
cluster;
|
|
15
|
+
raydium = null;
|
|
16
|
+
constructor(connection, wallet, marketManager, cluster = "mainnet-beta") {
|
|
17
|
+
this.connection = connection;
|
|
18
|
+
this.wallet = wallet;
|
|
19
|
+
this.marketManager = marketManager;
|
|
20
|
+
this.cluster = cluster;
|
|
21
|
+
}
|
|
22
|
+
async loadSdk() {
|
|
23
|
+
if (!this.raydium) {
|
|
24
|
+
this.raydium = await Raydium.load({
|
|
25
|
+
connection: this.connection,
|
|
26
|
+
owner: this.wallet,
|
|
27
|
+
cluster: this.cluster === "mainnet-beta" ? "mainnet" : this.cluster,
|
|
28
|
+
disableLoadToken: true,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return this.raydium;
|
|
32
|
+
}
|
|
33
|
+
async initialize(options, mint) {
|
|
34
|
+
Logger.info("Initializing Raydium AMM (Legacy V4) Strategy...");
|
|
35
|
+
try {
|
|
36
|
+
// 1. Create OpenBook Market
|
|
37
|
+
Logger.info("Step 1: Creating OpenBook Market...");
|
|
38
|
+
const marketRes = await this.marketManager.createLowCostMarket(mint, WSOL, options.decimals || 6, 9);
|
|
39
|
+
const marketId = new PublicKey(marketRes.marketId);
|
|
40
|
+
Logger.info(`OpenBook Market Created: ${marketId.toBase58()}`);
|
|
41
|
+
// 2. Load Raydium SDK
|
|
42
|
+
const raydium = await this.loadSdk();
|
|
43
|
+
const solLiquidityAmount = options.liquidity?.solAmount ?? options.solLiquidityAmount ?? 0;
|
|
44
|
+
const tokenLiquidityAmount = options.liquidity?.tokenAmount ?? options.tokenLiquidityAmount ?? 0;
|
|
45
|
+
// Token amounts with proper decimals
|
|
46
|
+
const baseAmount = new BN(tokenLiquidityAmount * Math.pow(10, options.decimals || 6));
|
|
47
|
+
const quoteAmount = new BN(solLiquidityAmount * Math.pow(10, 9));
|
|
48
|
+
Logger.info(`Creating AMM Pool for Market: ${marketId.toBase58().slice(0, 8)}...`);
|
|
49
|
+
// 3. Create AMM Pool using Raydium SDK V2
|
|
50
|
+
const { execute, extInfo } = await raydium.liquidity.createPoolV4({
|
|
51
|
+
programId: raydium.cluster === "devnet"
|
|
52
|
+
? new PublicKey("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8")
|
|
53
|
+
: new PublicKey("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),
|
|
54
|
+
marketId,
|
|
55
|
+
baseMintInfo: {
|
|
56
|
+
mint,
|
|
57
|
+
decimals: options.decimals || 6,
|
|
58
|
+
},
|
|
59
|
+
quoteMintInfo: {
|
|
60
|
+
mint: WSOL,
|
|
61
|
+
decimals: 9,
|
|
62
|
+
},
|
|
63
|
+
baseAmount,
|
|
64
|
+
quoteAmount,
|
|
65
|
+
startTime: new BN(0),
|
|
66
|
+
ownerInfo: {
|
|
67
|
+
useSOLBalance: true,
|
|
68
|
+
},
|
|
69
|
+
associatedOnly: false,
|
|
70
|
+
txVersion: TxVersion.LEGACY,
|
|
71
|
+
feePayer: this.wallet.publicKey,
|
|
72
|
+
});
|
|
73
|
+
const poolId = new PublicKey(extInfo.address.ammId || extInfo.address.poolId);
|
|
74
|
+
Logger.info(`AMM Pool ID: ${poolId.toBase58()}`);
|
|
75
|
+
const txres = await execute({ sendAndConfirm: false });
|
|
76
|
+
let instructions = [];
|
|
77
|
+
const signedTx = txres.signedTx;
|
|
78
|
+
if (signedTx instanceof Transaction) {
|
|
79
|
+
instructions = signedTx.instructions;
|
|
80
|
+
}
|
|
81
|
+
Logger.info(`AMM Pool Creation: ${instructions.length} instructions generated.`);
|
|
82
|
+
return {
|
|
83
|
+
poolId,
|
|
84
|
+
instructions,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
Logger.warn(`AMM error: ${error.message}`);
|
|
89
|
+
return {
|
|
90
|
+
poolId: PublicKey.default,
|
|
91
|
+
instructions: [],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=AMMManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AMMManager.js","sourceRoot":"","sources":["../../../src/strategies/raydium/AMMManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Connection, Keypair, PublicKey, TransactionInstruction } from "@solana/web3.js";
|
|
2
|
+
import type { LiquidityStrategy, LaunchOptions } from "../LiquidityStrategy";
|
|
3
|
+
/**
|
|
4
|
+
* Raydium CPMM (Constant Product Market Maker) Strategy
|
|
5
|
+
* Uses the newer CP-Swap program - no OpenBook market required
|
|
6
|
+
* Cost: ~0.15 SOL
|
|
7
|
+
*/
|
|
8
|
+
export declare class CPMMManager implements LiquidityStrategy {
|
|
9
|
+
private connection;
|
|
10
|
+
private wallet;
|
|
11
|
+
private cluster;
|
|
12
|
+
private raydium;
|
|
13
|
+
constructor(connection: Connection, wallet: Keypair, cluster?: "mainnet-beta" | "devnet");
|
|
14
|
+
private loadSdk;
|
|
15
|
+
initialize(options: LaunchOptions, mint: PublicKey): Promise<{
|
|
16
|
+
poolId: PublicKey;
|
|
17
|
+
instructions: TransactionInstruction[];
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=CPMMManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CPMMManager.d.ts","sourceRoot":"","sources":["../../../src/strategies/raydium/CPMMManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAY7E;;;;GAIG;AACH,qBAAa,WAAY,YAAW,iBAAiB;IAIjD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IALjB,OAAO,CAAC,OAAO,CAAwB;gBAG7B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,OAAO,EACf,OAAO,GAAE,cAAc,GAAG,QAAyB;YAG/C,OAAO;IAcf,UAAU,CACd,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,YAAY,EAAE,sBAAsB,EAAE,CAAA;KAAE,CAAC;CA+G1E"}
|