@sonarwatch/portfolio-plugins 0.11.93 → 0.11.95
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +8 -0
- package/package.json +2 -2
- package/src/index.js +8 -0
- package/src/index.js.map +1 -1
- package/src/plugins/aurory/constants.d.ts +9 -0
- package/src/plugins/aurory/constants.js +19 -0
- package/src/plugins/aurory/constants.js.map +1 -0
- package/src/plugins/aurory/helpers.d.ts +2 -0
- package/src/plugins/aurory/helpers.js +21 -0
- package/src/plugins/aurory/helpers.js.map +1 -0
- package/src/plugins/aurory/index.d.ts +6 -0
- package/src/plugins/aurory/index.js +12 -0
- package/src/plugins/aurory/index.js.map +1 -0
- package/src/plugins/aurory/stakingFetcher.d.ts +3 -0
- package/src/plugins/aurory/stakingFetcher.js +47 -0
- package/src/plugins/aurory/stakingFetcher.js.map +1 -0
- package/src/plugins/aurory/structs.d.ts +10 -0
- package/src/plugins/aurory/structs.js +11 -0
- package/src/plugins/aurory/structs.js.map +1 -0
- package/src/plugins/flash/constants.js +1 -0
- package/src/plugins/flash/constants.js.map +1 -1
- package/src/plugins/flash/poolJob.js +3 -2
- package/src/plugins/flash/poolJob.js.map +1 -1
- package/src/plugins/flash/stakeFetcher.js +2 -0
- package/src/plugins/flash/stakeFetcher.js.map +1 -1
- package/src/plugins/flash/structs.d.ts +1 -0
- package/src/plugins/flash/structs.js +26 -1
- package/src/plugins/flash/structs.js.map +1 -1
- package/src/plugins/flowmatic/stakingFetcher.js +4 -0
- package/src/plugins/flowmatic/stakingFetcher.js.map +1 -1
- package/src/plugins/genesysgo/stakingFetcher.js +4 -0
- package/src/plugins/genesysgo/stakingFetcher.js.map +1 -1
- package/src/plugins/kamino/constants.d.ts +3 -3
- package/src/plugins/kamino/constants.js +53 -44
- package/src/plugins/kamino/constants.js.map +1 -1
- package/src/plugins/kamino/helpers/pdas.d.ts +2 -2
- package/src/plugins/kamino/helpers/pdas.js +28 -15
- package/src/plugins/kamino/helpers/pdas.js.map +1 -1
- package/src/plugins/kamino/index.js +2 -1
- package/src/plugins/kamino/index.js.map +1 -1
- package/src/plugins/kamino/lendsFetcher.js +158 -140
- package/src/plugins/kamino/lendsFetcher.js.map +1 -1
- package/src/plugins/kamino/marketsJob.d.ts +3 -0
- package/src/plugins/kamino/marketsJob.js +29 -0
- package/src/plugins/kamino/marketsJob.js.map +1 -0
- package/src/plugins/kamino/types.d.ts +5 -0
- package/src/plugins/x-staking-solana/constants.d.ts +16 -0
- package/src/plugins/x-staking-solana/constants.js +64 -0
- package/src/plugins/x-staking-solana/constants.js.map +1 -0
- package/src/plugins/x-staking-solana/index.d.ts +6 -0
- package/src/plugins/x-staking-solana/index.js +15 -0
- package/src/plugins/x-staking-solana/index.js.map +1 -0
- package/src/plugins/x-staking-solana/stakingJob.d.ts +3 -0
- package/src/plugins/x-staking-solana/stakingJob.js +49 -0
- package/src/plugins/x-staking-solana/stakingJob.js.map +1 -0
@@ -0,0 +1,29 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
const portfolio_core_1 = require("@sonarwatch/portfolio-core");
|
13
|
+
const clients_1 = require("../../utils/clients");
|
14
|
+
const solana_1 = require("../../utils/solana");
|
15
|
+
const filters_1 = require("../../utils/solana/filters");
|
16
|
+
const constants_1 = require("./constants");
|
17
|
+
const klend_1 = require("./structs/klend");
|
18
|
+
const executor = (cache) => __awaiter(void 0, void 0, void 0, function* () {
|
19
|
+
const client = (0, clients_1.getClientSolana)();
|
20
|
+
const lendingMarketAccounts = yield (0, solana_1.getParsedProgramAccounts)(client, klend_1.lendingMarketStruct, constants_1.klendProgramId, (0, filters_1.dataSizeFilter)(klend_1.lendingMarketStruct.byteSize));
|
21
|
+
yield cache.setItem(constants_1.marketsKey, lendingMarketAccounts.map((acc) => acc.pubkey.toString()), { prefix: constants_1.platformId, networkId: portfolio_core_1.NetworkId.solana });
|
22
|
+
});
|
23
|
+
const job = {
|
24
|
+
id: `${constants_1.platformId}-markets`,
|
25
|
+
executor,
|
26
|
+
label: 'normal',
|
27
|
+
};
|
28
|
+
exports.default = job;
|
29
|
+
//# sourceMappingURL=marketsJob.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"marketsJob.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/kamino/marketsJob.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,+DAAuD;AAGvD,iDAAsD;AACtD,+CAA8D;AAC9D,wDAA4D;AAC5D,2CAAqE;AACrE,2CAAsD;AAEtD,MAAM,QAAQ,GAAgB,CAAO,KAAY,EAAE,EAAE;IACnD,MAAM,MAAM,GAAG,IAAA,yBAAe,GAAE,CAAC;IAEjC,MAAM,qBAAqB,GAAG,MAAM,IAAA,iCAAwB,EAC1D,MAAM,EACN,2BAAmB,EACnB,0BAAc,EACd,IAAA,wBAAc,EAAC,2BAAmB,CAAC,QAAQ,CAAC,CAC7C,CAAC;IAEF,MAAM,KAAK,CAAC,OAAO,CACjB,sBAAU,EACV,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EACzD,EAAE,MAAM,EAAE,sBAAU,EAAE,SAAS,EAAE,0BAAS,CAAC,MAAM,EAAE,CACpD,CAAC;AACJ,CAAC,CAAA,CAAC;AAEF,MAAM,GAAG,GAAQ;IACf,EAAE,EAAE,GAAG,sBAAU,UAAU;IAC3B,QAAQ;IACR,KAAK,EAAE,QAAQ;CAChB,CAAC;AACF,kBAAe,GAAG,CAAC"}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { Platform } from '@sonarwatch/portfolio-core';
|
2
|
+
export declare const whalesMarketPlatformId = "whalesmarket";
|
3
|
+
export declare const whalesMarketPlatform: Platform;
|
4
|
+
export declare const stepFinancePlatformId = "stepfinance";
|
5
|
+
export declare const stepFinancePlatform: Platform;
|
6
|
+
export declare const allbridgePlatformId = "allbridge";
|
7
|
+
export declare const allbridgePlatform: Platform;
|
8
|
+
export declare const xStakingConfigs: StakingConfig[];
|
9
|
+
export type StakingConfig = {
|
10
|
+
mint: string;
|
11
|
+
decimals: number;
|
12
|
+
vault: string;
|
13
|
+
xMint: string;
|
14
|
+
xDecimals: number;
|
15
|
+
platformId: string;
|
16
|
+
};
|
@@ -0,0 +1,64 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.xStakingConfigs = exports.allbridgePlatform = exports.allbridgePlatformId = exports.stepFinancePlatform = exports.stepFinancePlatformId = exports.whalesMarketPlatform = exports.whalesMarketPlatformId = void 0;
|
4
|
+
const constants_1 = require("../aurory/constants");
|
5
|
+
exports.whalesMarketPlatformId = 'whalesmarket';
|
6
|
+
exports.whalesMarketPlatform = {
|
7
|
+
id: exports.whalesMarketPlatformId,
|
8
|
+
name: 'Whales Market',
|
9
|
+
image: 'https://sonar.watch/img/platforms/whalesmarket.png',
|
10
|
+
// defiLlamaId: 'foo-finance', // from https://defillama.com/docs/api
|
11
|
+
website: 'https://app.whales.market/',
|
12
|
+
twitter: 'https://twitter.com/WhalesMarket',
|
13
|
+
};
|
14
|
+
exports.stepFinancePlatformId = 'stepfinance';
|
15
|
+
exports.stepFinancePlatform = {
|
16
|
+
id: exports.stepFinancePlatformId,
|
17
|
+
name: 'Step Finance',
|
18
|
+
image: 'https://sonar.watch/img/platforms/stepfinance.png',
|
19
|
+
website: 'https://app.step.finance/',
|
20
|
+
twitter: 'https://twitter.com/StepFinance_',
|
21
|
+
};
|
22
|
+
exports.allbridgePlatformId = 'allbridge';
|
23
|
+
exports.allbridgePlatform = {
|
24
|
+
id: exports.allbridgePlatformId,
|
25
|
+
name: 'Step Finance',
|
26
|
+
image: 'https://sonar.watch/img/platforms/allbridge.png',
|
27
|
+
website: 'https://stake.allbridge.io/?chain=SOL',
|
28
|
+
twitter: 'https://twitter.com/Allbridge_io',
|
29
|
+
};
|
30
|
+
exports.xStakingConfigs = [
|
31
|
+
{
|
32
|
+
mint: constants_1.auryMint,
|
33
|
+
decimals: constants_1.decimals,
|
34
|
+
vault: constants_1.vaultPubkey,
|
35
|
+
xMint: constants_1.xAuryMint,
|
36
|
+
xDecimals: 9,
|
37
|
+
platformId: constants_1.auroryPlatformId,
|
38
|
+
},
|
39
|
+
{
|
40
|
+
mint: 'GTH3wG3NErjwcf7VGCoXEXkgXSHvYhx5gtATeeM5JAS1',
|
41
|
+
decimals: 6,
|
42
|
+
vault: 'Cm1KT2iqQ3LoxbmLy4WrQ9wE7WByJx6R512A28LbjGh9',
|
43
|
+
xMint: '3wCoTb3TArUdzmeTBPzPFyPBUP6EJXaW5LAzGsWCpySu',
|
44
|
+
xDecimals: 6,
|
45
|
+
platformId: exports.whalesMarketPlatformId,
|
46
|
+
},
|
47
|
+
{
|
48
|
+
mint: 'StepAscQoEioFxxWGnh2sLBDFp9d8rvKz2Yp39iDpyT',
|
49
|
+
decimals: 9,
|
50
|
+
vault: 'ANYxxG365hutGYaTdtUQG8u2hC4dFX9mFHKuzy9ABQJi',
|
51
|
+
xMint: 'xStpgUCss9piqeFUk2iLVcvJEGhAdJxJQuwLkXP555G',
|
52
|
+
xDecimals: 9,
|
53
|
+
platformId: exports.stepFinancePlatformId,
|
54
|
+
},
|
55
|
+
{
|
56
|
+
mint: 'a11bdAAuV8iB2fu7X6AxAvDTo1QZ8FXB3kk5eecdasp',
|
57
|
+
decimals: 9,
|
58
|
+
vault: '51dd7AuT32b5VCK2rBVrjLGvfuvZ3kMayNrZZbWuvas2',
|
59
|
+
xMint: 'xAx6d1sjmBvpWkVZQEqgUvPmGBNndEXPxYpr3QVp61H',
|
60
|
+
xDecimals: 9,
|
61
|
+
platformId: exports.allbridgePlatformId,
|
62
|
+
},
|
63
|
+
];
|
64
|
+
//# sourceMappingURL=constants.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/x-staking-solana/constants.ts"],"names":[],"mappings":";;;AACA,mDAM6B;AAEhB,QAAA,sBAAsB,GAAG,cAAc,CAAC;AACxC,QAAA,oBAAoB,GAAa;IAC5C,EAAE,EAAE,8BAAsB;IAC1B,IAAI,EAAE,eAAe;IACrB,KAAK,EAAE,oDAAoD;IAC3D,qEAAqE;IACrE,OAAO,EAAE,4BAA4B;IACrC,OAAO,EAAE,kCAAkC;CAC5C,CAAC;AAEW,QAAA,qBAAqB,GAAG,aAAa,CAAC;AACtC,QAAA,mBAAmB,GAAa;IAC3C,EAAE,EAAE,6BAAqB;IACzB,IAAI,EAAE,cAAc;IACpB,KAAK,EAAE,mDAAmD;IAC1D,OAAO,EAAE,2BAA2B;IACpC,OAAO,EAAE,kCAAkC;CAC5C,CAAC;AAEW,QAAA,mBAAmB,GAAG,WAAW,CAAC;AAClC,QAAA,iBAAiB,GAAa;IACzC,EAAE,EAAE,2BAAmB;IACvB,IAAI,EAAE,cAAc;IACpB,KAAK,EAAE,iDAAiD;IACxD,OAAO,EAAE,uCAAuC;IAChD,OAAO,EAAE,kCAAkC;CAC5C,CAAC;AAEW,QAAA,eAAe,GAAoB;IAC9C;QACE,IAAI,EAAE,oBAAQ;QACd,QAAQ,EAAR,oBAAQ;QACR,KAAK,EAAE,uBAAW;QAClB,KAAK,EAAE,qBAAS;QAChB,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,4BAAgB;KAC7B;IACD;QACE,IAAI,EAAE,8CAA8C;QACpD,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,8CAA8C;QACrD,KAAK,EAAE,8CAA8C;QACrD,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,8BAAsB;KACnC;IACD;QACE,IAAI,EAAE,6CAA6C;QACnD,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,8CAA8C;QACrD,KAAK,EAAE,6CAA6C;QACpD,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,6BAAqB;KAClC;IACD;QACE,IAAI,EAAE,6CAA6C;QACnD,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,8CAA8C;QACrD,KAAK,EAAE,6CAA6C;QACpD,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,2BAAmB;KAChC;CACF,CAAC"}
|
@@ -0,0 +1,15 @@
|
|
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.fetchers = exports.jobs = exports.platforms = void 0;
|
7
|
+
const constants_1 = require("./constants");
|
8
|
+
const stakingJob_1 = __importDefault(require("./stakingJob"));
|
9
|
+
exports.platforms = [
|
10
|
+
constants_1.whalesMarketPlatform,
|
11
|
+
constants_1.stepFinancePlatform,
|
12
|
+
];
|
13
|
+
exports.jobs = [stakingJob_1.default];
|
14
|
+
exports.fetchers = [];
|
15
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/x-staking-solana/index.ts"],"names":[],"mappings":";;;;;;AAGA,2CAAwE;AACxE,8DAAuC;AAE1B,QAAA,SAAS,GAAe;IACnC,gCAAoB;IACpB,+BAAmB;CACpB,CAAC;AACW,QAAA,IAAI,GAAU,CAAC,oBAAW,CAAC,CAAC;AAC5B,QAAA,QAAQ,GAAc,EAAE,CAAC"}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
const web3_js_1 = require("@solana/web3.js");
|
13
|
+
const portfolio_core_1 = require("@sonarwatch/portfolio-core");
|
14
|
+
const clients_1 = require("../../utils/clients");
|
15
|
+
const solana_1 = require("../../utils/solana");
|
16
|
+
const constants_1 = require("./constants");
|
17
|
+
const executor = (cache) => __awaiter(void 0, void 0, void 0, function* () {
|
18
|
+
const client = (0, clients_1.getClientSolana)();
|
19
|
+
const vaultsAccounts = yield (0, solana_1.getParsedMultipleAccountsInfo)(client, solana_1.tokenAccountStruct, constants_1.xStakingConfigs.map((conf) => new web3_js_1.PublicKey(conf.vault)));
|
20
|
+
const tokensInfos = yield (0, solana_1.getParsedMultipleAccountsInfo)(client, solana_1.mintAccountStruct, constants_1.xStakingConfigs.map((conf) => new web3_js_1.PublicKey(conf.xMint)));
|
21
|
+
const tokensPricesMap = yield cache.getTokenPricesAsMap(constants_1.xStakingConfigs.map((conf) => conf.mint), portfolio_core_1.NetworkId.solana);
|
22
|
+
for (let i = 0; i < constants_1.xStakingConfigs.length; i++) {
|
23
|
+
const config = constants_1.xStakingConfigs[i];
|
24
|
+
const tokenPrice = tokensPricesMap.get(config.mint);
|
25
|
+
const [tokenInfo, vaultAccount] = [tokensInfos[i], vaultsAccounts[i]];
|
26
|
+
if (!tokenInfo || !vaultAccount || !tokenPrice)
|
27
|
+
continue;
|
28
|
+
const xSupply = tokenInfo.supply.dividedBy(Math.pow(10, tokenInfo.decimals));
|
29
|
+
const vaultTokenAmount = vaultAccount.amount.dividedBy(Math.pow(10, config.decimals));
|
30
|
+
const xPrice = vaultTokenAmount.dividedBy(xSupply).times(tokenPrice.price);
|
31
|
+
yield cache.setTokenPriceSource({
|
32
|
+
address: config.xMint,
|
33
|
+
decimals: config.xDecimals,
|
34
|
+
id: config.vault,
|
35
|
+
networkId: portfolio_core_1.NetworkId.solana,
|
36
|
+
platformId: config.platformId,
|
37
|
+
price: xPrice.toNumber(),
|
38
|
+
timestamp: Date.now(),
|
39
|
+
weight: 1,
|
40
|
+
});
|
41
|
+
}
|
42
|
+
});
|
43
|
+
const job = {
|
44
|
+
id: `x-staking-solana`,
|
45
|
+
executor,
|
46
|
+
label: 'normal',
|
47
|
+
};
|
48
|
+
exports.default = job;
|
49
|
+
//# sourceMappingURL=stakingJob.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"stakingJob.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/x-staking-solana/stakingJob.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,6CAA4C;AAC5C,+DAAuD;AAGvD,iDAAsD;AACtD,+CAI4B;AAC5B,2CAA8C;AAE9C,MAAM,QAAQ,GAAgB,CAAO,KAAY,EAAE,EAAE;IACnD,MAAM,MAAM,GAAG,IAAA,yBAAe,GAAE,CAAC;IAEjC,MAAM,cAAc,GAAG,MAAM,IAAA,sCAA6B,EACxD,MAAM,EACN,2BAAkB,EAClB,2BAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,mBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACzD,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,IAAA,sCAA6B,EACrD,MAAM,EACN,0BAAiB,EACjB,2BAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,mBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACzD,CAAC;IAEF,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,mBAAmB,CACrD,2BAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EACxC,0BAAS,CAAC,MAAM,CACjB,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,2BAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,2BAAe,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtE,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU;YAAE,SAAS;QAEzD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,SAAA,EAAE,EAAI,SAAS,CAAC,QAAQ,CAAA,CAAC,CAAC;QAErE,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,CACpD,SAAA,EAAE,EAAI,MAAM,CAAC,QAAQ,CAAA,CACtB,CAAC;QAEF,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAE3E,MAAM,KAAK,CAAC,mBAAmB,CAAC;YAC9B,OAAO,EAAE,MAAM,CAAC,KAAK;YACrB,QAAQ,EAAE,MAAM,CAAC,SAAS;YAC1B,EAAE,EAAE,MAAM,CAAC,KAAK;YAChB,SAAS,EAAE,0BAAS,CAAC,MAAM;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;YACxB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,CAAC;SACV,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAA,CAAC;AAEF,MAAM,GAAG,GAAQ;IACf,EAAE,EAAE,kBAAkB;IACtB,QAAQ;IACR,KAAK,EAAE,QAAQ;CAChB,CAAC;AACF,kBAAe,GAAG,CAAC"}
|