@panoptic-eng/sdk 1.0.54 → 1.0.56
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/deployments.js +2 -2
- package/dist/deployments.js.map +1 -1
- package/dist/index.d.ts +44 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +270 -50
- package/dist/index.js.map +1 -1
- package/dist/{irm-BsRdsXMS.js → irm-Dwl2er4W.js} +2 -2
- package/dist/panoptic/v2/index.d.ts +185 -1
- package/dist/panoptic/v2/index.d.ts.map +1 -1
- package/dist/panoptic/v2/index.js +327 -22
- package/dist/panoptic/v2/index.js.map +1 -1
- package/dist/panoptic/v2/react-public.d.ts +185 -1
- package/dist/panoptic/v2/react-public.d.ts.map +1 -1
- package/dist/panoptic/v2/react-public.js +327 -22
- package/dist/panoptic/v2/react-public.js.map +1 -1
- package/dist/{router-kAllFA4i.js → router-BDp3WQqI.js} +19 -10
- package/dist/{router-BhJqStSJ.js → router-CJCJkqFo.js} +1 -1
- package/dist/uniswap/index.d.ts +85 -1
- package/dist/uniswap/index.d.ts.map +1 -1
- package/dist/uniswap/index.js +131 -10
- package/dist/uniswap/index.js.map +1 -1
- package/dist/{v2-DZ8JTfEs.js → v2-DvrVwC5h.js} +306 -10
- package/dist/zodiac/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { StateViewAbi, getAccountCollateral, panopticQueryAbi$1 as panopticQueryAbi, readBlockAndAggregate, requireReturnData } from "./irm-
|
|
1
|
+
import { StateViewAbi, getAccountCollateral, panopticQueryAbi$1 as panopticQueryAbi, readBlockAndAggregate, requireReturnData } from "./irm-Dwl2er4W.js";
|
|
2
2
|
import { AccountInsolventError, ChunkLimitError, DEFAULT_VEGOID, InvalidHistoryRangeError, MulticallResultMissingError, NotEnoughTokensError, PanopticError, PanopticValidationError, SafeModeError, StaleDataError, StorageDataNotFoundError, UnhealthyPoolError, WrongUniswapPoolError, applyMintBufferPerToken, availableToBorrow, collateralTrackerV2Abi, decodeLeftRightSigned, decodeLeftRightUnsigned, decodePositionBalance, getBlockMeta, getClosedPositionsKey, getPendingPositionsKey, getPool, getPoolMetaKey, getPoolMetadata, getPositionMetaKey, getPositionsKey, getTrackedChunksKey, getTrackedPositionIds, isPanopticErrorType, jsonSerializer, mintableAfterBuffer, panopticFactoryV3Abi, panopticFactoryV4Abi, panopticGuardianAbi, panopticLiquidatorAbi, panopticPoolV2Abi, panopticQueryAbi as panopticQueryAbi$1, parsePanopticError, riskEngineAbi, semiFungiblePositionManagerV3Abi, semiFungiblePositionManagerV4Abi, stateViewAbi, uniswapV3PoolAbi } from "./rates-B0uPUed1.js";
|
|
3
3
|
import { MAX_TICK, MAX_TRACKED_CHUNKS, MIN_TICK, NO_LOWER_LIQUIDATION_TICK, NO_UPPER_LIQUIDATION_TICK, WAD, calculatePositionDelta, calculatePositionDeltaDebtOnly, calculatePositionGamma, calculatePositionValue, priceToTick, sqrtPriceX96ToTick, tickLimits, tickToPriceDecimalScaled, tickToSqrtPriceX96, toVaultFrameAtTick } from "./greeks-CNi1-cnp.js";
|
|
4
4
|
import { addLegToTokenId, buildBatchDispatchArgs, buildSettleSequenceCalls, buildUniqueCredit, buildUniqueLoan, countLegs, createTokenIdBuilder, decodeAllLegs, decodeTokenId, getPoolTokensForSimulation, loadCheckpoint, resolveTokenIndex, simulateOpenPosition, simulateWithTokenFlow } from "./writes-B4nGIi6h.js";
|
|
5
|
-
import { getLpPositionFunding, getMaxLpPositionSize } from "./router-
|
|
6
|
-
import { BaseError, ContractFunctionExecutionError, ContractFunctionRevertedError, ExecutionRevertedError, decodeFunctionResult, encodeAbiParameters, encodeFunctionData, getAddress, keccak256, toHex, zeroAddress } from "viem";
|
|
5
|
+
import { getLpPositionFunding, getMaxLpPositionSize } from "./router-BDp3WQqI.js";
|
|
6
|
+
import { BaseError, ContractFunctionExecutionError, ContractFunctionRevertedError, ExecutionRevertedError, decodeFunctionResult, encodeAbiParameters, encodeFunctionData, getAddress, keccak256, parseAbi, toHex, zeroAddress } from "viem";
|
|
7
7
|
import { multicall } from "viem/actions";
|
|
8
8
|
import Decimal from "decimal.js";
|
|
9
9
|
|
|
@@ -1605,10 +1605,10 @@ async function getChunkLiquidities(params) {
|
|
|
1605
1605
|
*/
|
|
1606
1606
|
async function getFactoryTokenURI(params) {
|
|
1607
1607
|
const { client, factoryAddress, version, tokenId } = params;
|
|
1608
|
-
const abi = version === "v3" ? panopticFactoryV3Abi : panopticFactoryV4Abi;
|
|
1608
|
+
const abi$1 = version === "v3" ? panopticFactoryV3Abi : panopticFactoryV4Abi;
|
|
1609
1609
|
return client.readContract({
|
|
1610
1610
|
address: factoryAddress,
|
|
1611
|
-
abi,
|
|
1611
|
+
abi: abi$1,
|
|
1612
1612
|
functionName: "tokenURI",
|
|
1613
1613
|
args: [tokenId]
|
|
1614
1614
|
});
|
|
@@ -1618,10 +1618,10 @@ async function getFactoryTokenURI(params) {
|
|
|
1618
1618
|
*/
|
|
1619
1619
|
async function getFactoryOwnerOf(params) {
|
|
1620
1620
|
const { client, factoryAddress, version, tokenId } = params;
|
|
1621
|
-
const abi = version === "v3" ? panopticFactoryV3Abi : panopticFactoryV4Abi;
|
|
1621
|
+
const abi$1 = version === "v3" ? panopticFactoryV3Abi : panopticFactoryV4Abi;
|
|
1622
1622
|
return client.readContract({
|
|
1623
1623
|
address: factoryAddress,
|
|
1624
|
-
abi,
|
|
1624
|
+
abi: abi$1,
|
|
1625
1625
|
functionName: "ownerOf",
|
|
1626
1626
|
args: [tokenId]
|
|
1627
1627
|
});
|
|
@@ -1631,10 +1631,10 @@ async function getFactoryOwnerOf(params) {
|
|
|
1631
1631
|
*/
|
|
1632
1632
|
async function getFactoryConstructMetadata(params) {
|
|
1633
1633
|
const { client, factoryAddress, version, panopticPoolAddress, symbol0, symbol1, fee } = params;
|
|
1634
|
-
const abi = version === "v3" ? panopticFactoryV3Abi : panopticFactoryV4Abi;
|
|
1634
|
+
const abi$1 = version === "v3" ? panopticFactoryV3Abi : panopticFactoryV4Abi;
|
|
1635
1635
|
return client.readContract({
|
|
1636
1636
|
address: factoryAddress,
|
|
1637
|
-
abi,
|
|
1637
|
+
abi: abi$1,
|
|
1638
1638
|
functionName: "constructMetadata",
|
|
1639
1639
|
args: [
|
|
1640
1640
|
panopticPoolAddress,
|
|
@@ -4420,6 +4420,8 @@ async function getUniswapFeeHistory(params) {
|
|
|
4420
4420
|
return {
|
|
4421
4421
|
blockNumber: blockMetadata[i].blockNumber,
|
|
4422
4422
|
blockTimestamp: blockMetadata[i].blockTimestamp,
|
|
4423
|
+
currentTick: bd.currentTick,
|
|
4424
|
+
sqrtPriceX96: bd.sqrtPriceX96,
|
|
4423
4425
|
fees: {
|
|
4424
4426
|
token0: total0 - initialFees0,
|
|
4425
4427
|
token1: total1 - initialFees1
|
|
@@ -4519,6 +4521,7 @@ async function fetchV3BlockSnapshot(client, poolAddress, blockNumber, uniqueTick
|
|
|
4519
4521
|
}
|
|
4520
4522
|
return {
|
|
4521
4523
|
currentTick: slot0Result[1],
|
|
4524
|
+
sqrtPriceX96: slot0Result[0],
|
|
4522
4525
|
feeGrowthGlobal0,
|
|
4523
4526
|
feeGrowthGlobal1,
|
|
4524
4527
|
tickData
|
|
@@ -4562,6 +4565,7 @@ async function fetchV4BlockSnapshot(client, stateViewAddress, poolId, blockNumbe
|
|
|
4562
4565
|
}
|
|
4563
4566
|
return {
|
|
4564
4567
|
currentTick: slot0Result[1],
|
|
4568
|
+
sqrtPriceX96: slot0Result[0],
|
|
4565
4569
|
feeGrowthGlobal0: feeGrowthResult[0],
|
|
4566
4570
|
feeGrowthGlobal1: feeGrowthResult[1],
|
|
4567
4571
|
tickData
|
|
@@ -9590,6 +9594,67 @@ function isGasError(error) {
|
|
|
9590
9594
|
return /replacement transaction underpriced/i.test(message) || /gas too low/i.test(message) || /intrinsic gas too low/i.test(message) || /max fee per gas less than block base fee/i.test(message);
|
|
9591
9595
|
}
|
|
9592
9596
|
|
|
9597
|
+
//#endregion
|
|
9598
|
+
//#region src/analytics/beta.ts
|
|
9599
|
+
/**
|
|
9600
|
+
* Realized beta of `tokenReturns` on `refReturns`. Both must be index-aligned and
|
|
9601
|
+
* the same length. Returns `null` when there are too few points or the reference
|
|
9602
|
+
* has no variance (a flat series has no defined slope).
|
|
9603
|
+
*/
|
|
9604
|
+
function realizedBeta(tokenReturns, refReturns, { minSamples = 8 } = {}) {
|
|
9605
|
+
const n = Math.min(tokenReturns.length, refReturns.length);
|
|
9606
|
+
if (n < minSamples) return null;
|
|
9607
|
+
let sumT = 0;
|
|
9608
|
+
let sumR = 0;
|
|
9609
|
+
let count = 0;
|
|
9610
|
+
for (let i = 0; i < n; i++) {
|
|
9611
|
+
const t = tokenReturns[i];
|
|
9612
|
+
const r = refReturns[i];
|
|
9613
|
+
if (!Number.isFinite(t) || !Number.isFinite(r)) continue;
|
|
9614
|
+
sumT += t;
|
|
9615
|
+
sumR += r;
|
|
9616
|
+
count++;
|
|
9617
|
+
}
|
|
9618
|
+
if (count < minSamples) return null;
|
|
9619
|
+
const meanT = sumT / count;
|
|
9620
|
+
const meanR = sumR / count;
|
|
9621
|
+
let cov = 0;
|
|
9622
|
+
let varR = 0;
|
|
9623
|
+
let varT = 0;
|
|
9624
|
+
for (let i = 0; i < n; i++) {
|
|
9625
|
+
const t = tokenReturns[i];
|
|
9626
|
+
const r = refReturns[i];
|
|
9627
|
+
if (!Number.isFinite(t) || !Number.isFinite(r)) continue;
|
|
9628
|
+
const dt = t - meanT;
|
|
9629
|
+
const dr = r - meanR;
|
|
9630
|
+
cov += dt * dr;
|
|
9631
|
+
varR += dr * dr;
|
|
9632
|
+
varT += dt * dt;
|
|
9633
|
+
}
|
|
9634
|
+
if (!(varR > 0)) return null;
|
|
9635
|
+
const beta = cov / varR;
|
|
9636
|
+
const rSquared = varT > 0 ? cov * cov / (varR * varT) : 0;
|
|
9637
|
+
return {
|
|
9638
|
+
beta,
|
|
9639
|
+
rSquared: Math.min(1, Math.max(0, rSquared)),
|
|
9640
|
+
samples: count
|
|
9641
|
+
};
|
|
9642
|
+
}
|
|
9643
|
+
/**
|
|
9644
|
+
* Log returns of a price series (`ln(p_i / p_{i-1})`), skipping non-positive or
|
|
9645
|
+
* non-finite prices by emitting `NaN` at that step so downstream alignment stays
|
|
9646
|
+
* index-consistent. The output is one shorter than the input.
|
|
9647
|
+
*/
|
|
9648
|
+
function logReturns(prices) {
|
|
9649
|
+
const out = [];
|
|
9650
|
+
for (let i = 1; i < prices.length; i++) {
|
|
9651
|
+
const a = prices[i - 1];
|
|
9652
|
+
const b = prices[i];
|
|
9653
|
+
out.push(Number.isFinite(a) && Number.isFinite(b) && a > 0 && b > 0 ? Math.log(b / a) : Number.NaN);
|
|
9654
|
+
}
|
|
9655
|
+
return out;
|
|
9656
|
+
}
|
|
9657
|
+
|
|
9593
9658
|
//#endregion
|
|
9594
9659
|
//#region src/analytics/market-indicators.ts
|
|
9595
9660
|
const D = Decimal.clone({ precision: 40 });
|
|
@@ -9783,4 +9848,235 @@ function calculateVarianceProfile(candles, isAssetToken0, intervalSeconds = 3600
|
|
|
9783
9848
|
}
|
|
9784
9849
|
|
|
9785
9850
|
//#endregion
|
|
9786
|
-
|
|
9851
|
+
//#region src/panoptic/v2/greeks/marketPnl.ts
|
|
9852
|
+
/** Values and prices use raw token units, matching the net-liquidation-value read. */
|
|
9853
|
+
function netLiquidationValueInQuote(value0, value1, tick, isAssetToken0) {
|
|
9854
|
+
const price = new Decimal("1.0001").pow(tick.toString());
|
|
9855
|
+
return isAssetToken0 ? new Decimal(value1.toString()).plus(new Decimal(value0.toString()).mul(price)) : new Decimal(value0.toString()).plus(new Decimal(value1.toString()).div(price));
|
|
9856
|
+
}
|
|
9857
|
+
/** Apply the accrued-premium offset and optional asset collateral to a relative NLV curve. */
|
|
9858
|
+
function marketPnlInQuote({ relativeValue, premium, assetBalance = 0n, price, baselinePrice }) {
|
|
9859
|
+
return new Decimal(relativeValue).plus(premium).plus(new Decimal(assetBalance.toString()).mul(new Decimal(price).minus(baselinePrice)));
|
|
9860
|
+
}
|
|
9861
|
+
/** Map a common reference-asset shock into a pool tick and quote-token USD multiplier. */
|
|
9862
|
+
function marketScenario({ currentTick, isAssetToken0, assetBeta, quoteBeta, shock }) {
|
|
9863
|
+
const assetFactor = new Decimal(assetBeta).mul(shock).plus(1);
|
|
9864
|
+
const quoteFactor = new Decimal(quoteBeta).mul(shock).plus(1);
|
|
9865
|
+
if (!assetFactor.isFinite() || !quoteFactor.isFinite() || assetFactor.lte(0) || quoteFactor.lte(0)) return null;
|
|
9866
|
+
const shift = assetFactor.div(quoteFactor).ln().div(new Decimal("1.0001").ln());
|
|
9867
|
+
const tick = currentTick + BigInt(shift.mul(isAssetToken0 ? 1 : -1).round().toFixed(0));
|
|
9868
|
+
return tick < -887272n || tick > 887272n ? null : {
|
|
9869
|
+
tick,
|
|
9870
|
+
quoteFactor
|
|
9871
|
+
};
|
|
9872
|
+
}
|
|
9873
|
+
/** Finite-difference risk in raw asset/quote units from three ordered quote prices. */
|
|
9874
|
+
function marketRiskFromValues({ lower, current, upper }) {
|
|
9875
|
+
const left = new Decimal(current.price).minus(lower.price);
|
|
9876
|
+
const right = new Decimal(upper.price).minus(current.price);
|
|
9877
|
+
if (left.lte(0) || right.lte(0)) return null;
|
|
9878
|
+
const leftSlope = new Decimal(current.value).minus(lower.value).div(left);
|
|
9879
|
+
const rightSlope = new Decimal(upper.value).minus(current.value).div(right);
|
|
9880
|
+
const delta = leftSlope.mul(right).plus(rightSlope.mul(left)).div(left.plus(right));
|
|
9881
|
+
const gamma = rightSlope.minus(leftSlope).mul(2).div(left.plus(right)).mul(new Decimal(current.price).pow(2));
|
|
9882
|
+
return {
|
|
9883
|
+
asset: delta,
|
|
9884
|
+
quote: new Decimal(current.value).minus(delta.mul(current.price)),
|
|
9885
|
+
gamma
|
|
9886
|
+
};
|
|
9887
|
+
}
|
|
9888
|
+
|
|
9889
|
+
//#endregion
|
|
9890
|
+
//#region src/panoptic/v2/reads/collateralCurve.ts
|
|
9891
|
+
/** Native-token margin inputs, independent of the tick used to display the curve. */
|
|
9892
|
+
async function getCollateralCurveInputs({ client, poolAddress, account, tokenIds, collateral0, collateral1, blockNumber }) {
|
|
9893
|
+
const ids = [...tokenIds].sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
9894
|
+
const [tracker0, tracker1] = await Promise.all([collateral0 ?? client.readContract({
|
|
9895
|
+
address: poolAddress,
|
|
9896
|
+
abi: panopticPoolV2Abi,
|
|
9897
|
+
functionName: "collateralToken0",
|
|
9898
|
+
blockNumber
|
|
9899
|
+
}), collateral1 ?? client.readContract({
|
|
9900
|
+
address: poolAddress,
|
|
9901
|
+
abi: panopticPoolV2Abi,
|
|
9902
|
+
functionName: "collateralToken1",
|
|
9903
|
+
blockNumber
|
|
9904
|
+
})]);
|
|
9905
|
+
const [positions, balances0, balances1] = await Promise.all([
|
|
9906
|
+
client.readContract({
|
|
9907
|
+
address: poolAddress,
|
|
9908
|
+
abi: panopticPoolV2Abi,
|
|
9909
|
+
functionName: "getFullPositionsData",
|
|
9910
|
+
args: [
|
|
9911
|
+
account,
|
|
9912
|
+
false,
|
|
9913
|
+
ids
|
|
9914
|
+
],
|
|
9915
|
+
blockNumber
|
|
9916
|
+
}),
|
|
9917
|
+
client.readContract({
|
|
9918
|
+
address: tracker0,
|
|
9919
|
+
abi: collateralTrackerV2Abi,
|
|
9920
|
+
functionName: "assetsAndInterest",
|
|
9921
|
+
args: [account],
|
|
9922
|
+
blockNumber
|
|
9923
|
+
}),
|
|
9924
|
+
client.readContract({
|
|
9925
|
+
address: tracker1,
|
|
9926
|
+
abi: collateralTrackerV2Abi,
|
|
9927
|
+
functionName: "assetsAndInterest",
|
|
9928
|
+
args: [account],
|
|
9929
|
+
blockNumber
|
|
9930
|
+
})
|
|
9931
|
+
]);
|
|
9932
|
+
return [
|
|
9933
|
+
positions[0],
|
|
9934
|
+
positions[1],
|
|
9935
|
+
...positions[2],
|
|
9936
|
+
...balances0,
|
|
9937
|
+
...balances1
|
|
9938
|
+
];
|
|
9939
|
+
}
|
|
9940
|
+
/** A spot-independent sampling grid, including exact liquidation boundaries and their neighbours. */
|
|
9941
|
+
function collateralCurveTicks(tokenIds, liquidationTicks) {
|
|
9942
|
+
const strikes = tokenIds.flatMap((id) => decodeTokenId(id).legs.map((leg) => leg.strike));
|
|
9943
|
+
const center = strikes.length === 0 ? 0n : strikes.reduce((a, b) => a + b, 0n) / BigInt(strikes.length);
|
|
9944
|
+
const ticks = new Set([-887272n, 887272n]);
|
|
9945
|
+
for (let i = 0n; i < 250n; i++) {
|
|
9946
|
+
ticks.add(center - 25000n + 50000n * i / 249n);
|
|
9947
|
+
ticks.add(-887272n + 1774544n * i / 249n);
|
|
9948
|
+
}
|
|
9949
|
+
for (const tick of liquidationTicks) {
|
|
9950
|
+
ticks.add(tick - 1n);
|
|
9951
|
+
ticks.add(tick);
|
|
9952
|
+
ticks.add(tick + 1n);
|
|
9953
|
+
}
|
|
9954
|
+
return [...ticks].filter((tick) => tick >= -887272n && tick <= 887272n).sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
9955
|
+
}
|
|
9956
|
+
/** Collateral requirements and liquidation boundaries evaluated at one block. */
|
|
9957
|
+
async function getCollateralCurve({ client, poolAddress, account, queryAddress, tokenIds, blockNumber: requestedBlockNumber }) {
|
|
9958
|
+
const blockNumber = requestedBlockNumber ?? await client.getBlockNumber();
|
|
9959
|
+
const boundaries = await client.readContract({
|
|
9960
|
+
address: queryAddress,
|
|
9961
|
+
abi: panopticQueryAbi,
|
|
9962
|
+
functionName: "getLiquidationPrices",
|
|
9963
|
+
args: [
|
|
9964
|
+
poolAddress,
|
|
9965
|
+
account,
|
|
9966
|
+
tokenIds
|
|
9967
|
+
],
|
|
9968
|
+
blockNumber
|
|
9969
|
+
});
|
|
9970
|
+
const liquidationTicks = boundaries.map(BigInt).filter((tick) => tick >= -887272n && tick <= 887272n);
|
|
9971
|
+
const ticks = collateralCurveTicks(tokenIds, liquidationTicks);
|
|
9972
|
+
const contracts = ticks.map((tick) => ({
|
|
9973
|
+
address: queryAddress,
|
|
9974
|
+
abi: panopticQueryAbi,
|
|
9975
|
+
functionName: "checkCollateral",
|
|
9976
|
+
args: [
|
|
9977
|
+
poolAddress,
|
|
9978
|
+
account,
|
|
9979
|
+
tokenIds,
|
|
9980
|
+
Number(tick)
|
|
9981
|
+
]
|
|
9982
|
+
}));
|
|
9983
|
+
const chunks = [];
|
|
9984
|
+
for (let i = 0; i < contracts.length; i += 100) chunks.push(contracts.slice(i, i + 100));
|
|
9985
|
+
const results = (await Promise.all(chunks.map((batch) => multicall(client, {
|
|
9986
|
+
contracts: batch,
|
|
9987
|
+
blockNumber,
|
|
9988
|
+
allowFailure: false
|
|
9989
|
+
})))).flat();
|
|
9990
|
+
return {
|
|
9991
|
+
blockNumber,
|
|
9992
|
+
liquidationTicks,
|
|
9993
|
+
points: results.map(([collateral0, required0, collateral1, required1], i) => ({
|
|
9994
|
+
tick: ticks[i],
|
|
9995
|
+
collateral0,
|
|
9996
|
+
required0,
|
|
9997
|
+
collateral1,
|
|
9998
|
+
required1
|
|
9999
|
+
}))
|
|
10000
|
+
};
|
|
10001
|
+
}
|
|
10002
|
+
|
|
10003
|
+
//#endregion
|
|
10004
|
+
//#region src/panoptic/v2/reads/positionValueCurve.ts
|
|
10005
|
+
const abi = parseAbi(["function computeNetLiquidationValue(uint256[] positionIdList, uint256 shortPremium, uint256 longPremium, uint256[] positionBalanceArray, int24[] atTicks) pure returns (int256[] value0, int256[] value1)"]);
|
|
10006
|
+
/** Stable identity for a position-dependent curve; premiums and spot are separate inputs. */
|
|
10007
|
+
function positionValueKey(positions) {
|
|
10008
|
+
return [...positions].sort((a, b) => a.tokenId < b.tokenId ? -1 : a.tokenId > b.tokenId ? 1 : 0).map(({ tokenId, positionSize }) => `${tokenId}:${positionSize}`).join(",");
|
|
10009
|
+
}
|
|
10010
|
+
/** All changes in the curve's active liquidity, independent of the current market tick. */
|
|
10011
|
+
function positionValueTicks(positions) {
|
|
10012
|
+
const ticks = new Set([-887272n, 887272n]);
|
|
10013
|
+
for (const { tokenId, positionSize } of positions) {
|
|
10014
|
+
if (tokenId < 0n || tokenId >= 1n << 256n || positionSize <= 0n || positionSize >= 1n << 128n) throw new RangeError("Invalid position id or size");
|
|
10015
|
+
const { legs, tickSpacing } = decodeTokenId(tokenId);
|
|
10016
|
+
for (const leg of legs) {
|
|
10017
|
+
if (leg.width === 0n) continue;
|
|
10018
|
+
const width = leg.width * tickSpacing;
|
|
10019
|
+
const lower = leg.strike - width / 2n;
|
|
10020
|
+
const upper = leg.strike + (width + 1n) / 2n;
|
|
10021
|
+
if (lower < -887272n || upper > 887272n || lower >= upper) throw new RangeError("Invalid position range");
|
|
10022
|
+
ticks.add(lower);
|
|
10023
|
+
ticks.add(upper);
|
|
10024
|
+
}
|
|
10025
|
+
}
|
|
10026
|
+
return [...ticks].sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
10027
|
+
}
|
|
10028
|
+
/** Read the immutable, premium-free part of NLV from the deployed pure calculation. */
|
|
10029
|
+
async function getPositionValueCurve({ client, queryAddress, positions }) {
|
|
10030
|
+
const ticks = positionValueTicks(positions);
|
|
10031
|
+
const [values0, values1] = await client.readContract({
|
|
10032
|
+
address: queryAddress,
|
|
10033
|
+
abi,
|
|
10034
|
+
functionName: "computeNetLiquidationValue",
|
|
10035
|
+
args: [
|
|
10036
|
+
positions.map((p) => p.tokenId),
|
|
10037
|
+
0n,
|
|
10038
|
+
0n,
|
|
10039
|
+
positions.map((p) => p.positionSize),
|
|
10040
|
+
ticks.map(Number)
|
|
10041
|
+
]
|
|
10042
|
+
});
|
|
10043
|
+
return ticks.map((tick, i) => ({
|
|
10044
|
+
tick,
|
|
10045
|
+
value0: values0[i],
|
|
10046
|
+
value1: values1[i]
|
|
10047
|
+
}));
|
|
10048
|
+
}
|
|
10049
|
+
/**
|
|
10050
|
+
* Between leg boundaries, token0 is affine in inverse sqrt price and token1 in sqrt price.
|
|
10051
|
+
* Endpoint interpolation differs from contract integer rounding by at most a few wei per leg.
|
|
10052
|
+
*/
|
|
10053
|
+
function preparePositionValueCurve(curve) {
|
|
10054
|
+
if (curve.length < 2) throw new RangeError("Incomplete position value curve");
|
|
10055
|
+
for (let i = 0; i < curve.length; i++) if (curve[i].tick < -887272n || curve[i].tick > 887272n || i > 0 && curve[i].tick <= curve[i - 1].tick) throw new RangeError("Invalid position value curve ticks");
|
|
10056
|
+
const points = curve.map((point) => ({
|
|
10057
|
+
...point,
|
|
10058
|
+
sqrt: tickToSqrtPriceX96(point.tick)
|
|
10059
|
+
}));
|
|
10060
|
+
return (tick) => {
|
|
10061
|
+
if (tick < points[0].tick || tick > points[points.length - 1].tick) throw new RangeError("Tick outside position value curve");
|
|
10062
|
+
let lo = 0;
|
|
10063
|
+
let hi = points.length - 1;
|
|
10064
|
+
while (hi - lo > 1) {
|
|
10065
|
+
const mid = Math.floor((lo + hi) / 2);
|
|
10066
|
+
if (points[mid].tick <= tick) lo = mid;
|
|
10067
|
+
else hi = mid;
|
|
10068
|
+
}
|
|
10069
|
+
const left = points[lo];
|
|
10070
|
+
const right = points[hi];
|
|
10071
|
+
const sqrt = tickToSqrtPriceX96(tick);
|
|
10072
|
+
const numerator = sqrt - left.sqrt;
|
|
10073
|
+
const denominator = right.sqrt - left.sqrt;
|
|
10074
|
+
return {
|
|
10075
|
+
value0: left.value0 + (right.value0 - left.value0) * numerator * right.sqrt / (denominator * sqrt),
|
|
10076
|
+
value1: left.value1 + (right.value1 - left.value1) * numerator / denominator
|
|
10077
|
+
};
|
|
10078
|
+
};
|
|
10079
|
+
}
|
|
10080
|
+
|
|
10081
|
+
//#endregion
|
|
10082
|
+
export { DEFAULT_MIN_SWAP_RATIO_BPS, DEFAULT_RECONNECT_CONFIG, MARKET_INDICATOR_PERIODS, REQUIRED_BASE_ERROR_SENTINEL, STRIKE_LADDER_TARGET_STRIKES, VARIANCE_RATIO_LAG, addPendingPosition, addTrackedChunks, apportion, assertCanBurn, assertCanForceExercise, assertCanLiquidate, assertCanMint, assertFresh, assertHealthy, assertLpPositionFunded, assertTradeable, buildCreditWrappedDispatch, buildSfpmSwapCalldata, buildSfpmSwapPlan, buildTemporaryLoanRecoveryDispatch, buildTokenShortfallRecoveryDispatch, calculateAccountGreeksPure, calculateMarketIndicator, calculateSpreadWad, calculateVarianceProfile, checkCollateralAcrossTicks, classifyStrategyGroups, classifyStrike, cleanupStalePendingPositions, clearPendingPositions, clearTrackedChunks, clearTradeHistory, collateralCurveTicks, collateralRuleKindFor, computeV4PoolId, confirmPendingPosition, convertToAssets, convertToShares, createEventPoller, createEventSubscription, createFlowNeutralTokenId, decodePanopticTokenURI, emptyLiquidateParams, encodePoolKeyBytes, encodeV3PoolKeyBytes, ensureSfpmV3PoolInitialized, estimateBlockNumbers, estimateCollateralBreakdown, estimateCollateralRequired, failPendingPosition, feesFromFeeGrowthDelta, fetchSfpmV3PoolId, getAccountBuyingPower, getAccountGreeks, getAccountHistory, getChunkLiquidities, getChunkSpreads, getClosedPositions, getCollateralCurve, getCollateralCurveInputs, getCollateralRequiredBase, getCollateralSharePrices, getCollateralTotalAssetsBatch, getDeltaHedgeParams, getEnforcedTickLimits, getExecutableLpMaxSize, getFactoryConstructMetadata, getFactoryOwnerOf, getFactoryTokenURI, getGuardianUnlockState, getHedgeLimits, getItmAmounts, getMarginBuffer, getMaxPositionSize, getMaxRedeem, getMaxWithdrawable, getNativeTokenPrice, getNotEnoughTokensError, getOpenPositionPreview, getPanopticPoolAddress, getPanopticPoolFromPoolId, getPendingPositions, getPoolCollateralAddresses, getPoolLiquidities, getPortfolioValue, getPositionChunkData, getPositionEnrichmentData, getPositionValueCurve, getPriceHistory, getRealizedPnL, getRequiredCreditForITM, getSafeMode, getStreamiaHistory, getSyncStatus, getTrackedChunks, getTradeHistory, getUniswapFeeHistory, getUniswapV3LpPositionState, getUniswapV3PoolFromId, getUniswapV3PoolInfo, getUniswapV3PoolLiquidities, getUniswapV4LpPositionState, getUniswapV4PoolBasicState, getUniswapV4PoolInfo, getUniswapV4PoolKeyFromId, getUniswapV4PoolLiquidities, interpolateBlocks, isGasError, isNonceError, isRetryableRpcError, isolateGroupTokenId, ladderStrikeSequence, logReturns, marketPnlInQuote, marketRiskFromValues, marketScenario, minePoolAddress, minePoolAddressLocalAsync, multicallRead, netLiquidationValueInQuote, optimizeTokenIdRiskPartners, parseCollateralLog, parsePoolLog, positionValueKey, positionValueTicks, prepareIndicatorCandles, preparePositionValueCurve, previewDeposit, previewMint, previewRedeem, previewWithdraw, quoteLiquidation, quoteOneTokenFlow, quoteSfpmSwap, quoteTemporaryLoanRecovery, quoteTokenShortfallRecovery, realizedBeta, removeTrackedChunks, resolveBlockNumbers, resolveLadderStrike, resolvePanopticPoolFromPoolId, resolveUniswapV4PoolKey, saveClosedPosition, scaleCollateralRequired, scanChunks, screenAccountExact, simulateBatchDispatch, simulateClosePosition, simulateDeployNewPool, simulateDeposit, simulateDispatch, simulateForceExercise, simulateLiquidate, simulateSFPMBurn, simulateSFPMMint, simulateSwapExactIn, simulateSwapExactOut, simulateWithdraw, slippageBpsToTickDistance, watchEvents };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["rolesV2Abi","ContractFunctionArgs","ContractFunctionName","rolesV2Abi","ScopeFunctionName","ScopeStep","Name","ScopeStepsPublicClient","Promise","ScopeStepsWalletClient","applyScopeSteps","Hex","ConditionFlat","addressEqualCompValue","customCompValue","sizeCapExtra","ParameterType","Operator","CANONICAL_ADAPTERS","ExecutionOptions","Hex","ScopeStep","ConditionFlat","DELEVERAGER_ROLE_KEY","buildDeleveragerDispatchConditions","buildDeleveragerRoleSteps","Hex","ScopeStep","ConditionFlat","DISPATCH_SELECTOR","roleKey","buildDispatchCustomConditions","buildDispatchCustomRoleSteps","Address","Hex","ScopeStep","ConditionFlat","LIQUIDATE_SELECTOR","LiquidatorConditionsParams","buildLiquidatorConditions","buildLiquidatorRoleSteps","Hex","ConditionFlat","LOAN_BITMASK_WINDOW_SHIFTS","loanBitmaskCompValueAt","buildLoanOnlyDispatchConditions","WITHDRAW_SELECTOR","DEPOSIT_SELECTOR","EXECUTE_SELECTOR","buildWithdrawConditions","buildDepositConditions","Hex","ScopeStep","ConditionFlat","MAINTENANCE_ROLE_KEY","DISPATCH_FROM_SELECTOR","buildDispatchFromConditions","buildMaintenanceRoleSteps","Hex","ScopeStep","ROLLER_ROLE_KEY","buildRollerRoleSteps","Hex","ScopeStep","ConditionFlat","MULTICALL_SELECTOR","MULTISEND_SELECTOR","WETH_DEPOSIT_SELECTOR","WETH_WITHDRAW_SELECTOR","WITHDRAW_WITH_POSITIONS_SELECTOR","buildWithdrawWithPositionsConditions","sfpmPoolIdPinExtra","buildSfpmSwapConditions","buildSfpmSwapVenueSteps","Hex","ScopeStep","SIZE_ADJUSTER_ROLE_KEY","buildSizeAdjusterRoleSteps","legFieldMask","loanWidthFieldsMask","strikeFieldsMask","optionRatioFieldsMask","isPureLoanTokenId","loanBitmaskCondition"],"sources":["../../src/zodiac/rolesAbi.d.ts","../../src/zodiac/applySteps.d.ts","../../src/zodiac/conditions.d.ts","../../src/zodiac/constants.d.ts","../../src/zodiac/roles/deleverager.d.ts","../../src/zodiac/roles/dispatchCustomRole.d.ts","../../src/zodiac/roles/liquidator.d.ts","../../src/zodiac/roles/loanHedger.d.ts","../../src/zodiac/roles/maintenance.d.ts","../../src/zodiac/roles/roller.d.ts","../../src/zodiac/roles/sfpmSwap.d.ts","../../src/zodiac/roles/sizeAdjuster.d.ts","../../src/zodiac/tokenIdMask.d.ts"],"sourcesContent":null,"mappings":";;;;;cACqBG;;;EAAAA,SAAAA,eA8FnB,EAAA,YAAA;;;;EC7FGC,CAAAA,EAAAA;IAAiB,SAAA,IAAA,EAAA,UAAA;IAA+BD,SAAAA,IAAAA,EAAAA,WAAAA;EAAU,CAAA,EAAtCD;IAAoB,SAAA,IAAA,EAAA,UAAA;;EAEjCyE,CAAAA,CAAAA;EAAS,SAAA,OAAA,EAAA,SAAA,EAAA;CAAA,EAAA;EACS,SAERrE,IAAAA,EAAAA,UAAAA;EAAI,SACgBH,IAAAA,EAAAA,aAAAA;EAAU,SAAgBG,eAAAA,EAAAA,YAAAA;EAAI,SAA1DL,MAAAA,EAAAA,SAAAA,CAAAA;IAEZG,SAAAA,IAAAA,EAAAA,SAAAA;IAAiB,SAAA,IAAA,EAAA,SAAA;;;;;;;EAOFG,SAAAA,IAAAA,EAAAA,UAAsB;EAQtBE,SAAAA,IAAAA,EAAAA,eAAsB;EAAA,SAAA,eAAA,EAAA,YAAA;EAAA,SAGnBN,MAAAA,EAAAA,SAAAA,CAAAA;IACEwE,SAAAA,IAAAA,EAAAA,SAAAA;IAIdnE,SAAAA,IAAAA,EAAAA,SAAAA;EAAO,CAAA,EAAA;;;;;;EAOSE,CAAAA,EAAAA;IAAe,SAAA,IAAA,EAAA,YAAA;IACrBH,SAAAA,IAAAA,EAAAA,SAAAA;IACAE,SAAAA,UAAAA,EAAAA,SAAAA,CAAAA;MAEPkE,SAAAA,IAAAA,EAAAA,QAAAA;MAaPnE,SAAAA,IAAAA,EAAAA,OAAAA;IAAO,CAAA,EAAA;;;;;MCvDMwD,SAAa,IAAA,EAAA,OAIZ;;MAGMnD,SAAAA,IAAAA,EAAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["rolesV2Abi","ContractFunctionArgs","ContractFunctionName","rolesV2Abi","ScopeFunctionName","ScopeStep","Name","ScopeStepsPublicClient","Promise","ScopeStepsWalletClient","applyScopeSteps","Hex","ConditionFlat","addressEqualCompValue","customCompValue","sizeCapExtra","ParameterType","Operator","CANONICAL_ADAPTERS","ExecutionOptions","Hex","ScopeStep","ConditionFlat","DELEVERAGER_ROLE_KEY","buildDeleveragerDispatchConditions","buildDeleveragerRoleSteps","Hex","ScopeStep","ConditionFlat","DISPATCH_SELECTOR","roleKey","buildDispatchCustomConditions","buildDispatchCustomRoleSteps","Address","Hex","ScopeStep","ConditionFlat","LIQUIDATE_SELECTOR","LiquidatorConditionsParams","buildLiquidatorConditions","buildLiquidatorRoleSteps","Hex","ConditionFlat","LOAN_BITMASK_WINDOW_SHIFTS","loanBitmaskCompValueAt","buildLoanOnlyDispatchConditions","WITHDRAW_SELECTOR","DEPOSIT_SELECTOR","EXECUTE_SELECTOR","buildWithdrawConditions","buildDepositConditions","Hex","ScopeStep","ConditionFlat","MAINTENANCE_ROLE_KEY","DISPATCH_FROM_SELECTOR","buildDispatchFromConditions","buildMaintenanceRoleSteps","Hex","ScopeStep","ROLLER_ROLE_KEY","buildRollerRoleSteps","Hex","ScopeStep","ConditionFlat","MULTICALL_SELECTOR","MULTISEND_SELECTOR","WETH_DEPOSIT_SELECTOR","WETH_WITHDRAW_SELECTOR","WITHDRAW_WITH_POSITIONS_SELECTOR","buildWithdrawWithPositionsConditions","sfpmPoolIdPinExtra","buildSfpmSwapConditions","buildSfpmSwapVenueSteps","Hex","ScopeStep","SIZE_ADJUSTER_ROLE_KEY","buildSizeAdjusterRoleSteps","legFieldMask","loanWidthFieldsMask","strikeFieldsMask","optionRatioFieldsMask","isPureLoanTokenId","loanBitmaskCondition"],"sources":["../../src/zodiac/rolesAbi.d.ts","../../src/zodiac/applySteps.d.ts","../../src/zodiac/conditions.d.ts","../../src/zodiac/constants.d.ts","../../src/zodiac/roles/deleverager.d.ts","../../src/zodiac/roles/dispatchCustomRole.d.ts","../../src/zodiac/roles/liquidator.d.ts","../../src/zodiac/roles/loanHedger.d.ts","../../src/zodiac/roles/maintenance.d.ts","../../src/zodiac/roles/roller.d.ts","../../src/zodiac/roles/sfpmSwap.d.ts","../../src/zodiac/roles/sizeAdjuster.d.ts","../../src/zodiac/tokenIdMask.d.ts"],"sourcesContent":null,"mappings":";;;;;cACqBG;;;EAAAA,SAAAA,eA8FnB,EAAA,YAAA;;;;EC7FGC,CAAAA,EAAAA;IAAiB,SAAA,IAAA,EAAA,UAAA;IAA+BD,SAAAA,IAAAA,EAAAA,WAAAA;EAAU,CAAA,EAAtCD;IAAoB,SAAA,IAAA,EAAA,UAAA;;EAEjCyE,CAAAA,CAAAA;EAAS,SAAA,OAAA,EAAA,SAAA,EAAA;CAAA,EAAA;EACS,SAERrE,IAAAA,EAAAA,UAAAA;EAAI,SACgBH,IAAAA,EAAAA,aAAAA;EAAU,SAAgBG,eAAAA,EAAAA,YAAAA;EAAI,SAA1DL,MAAAA,EAAAA,SAAAA,CAAAA;IAEZG,SAAAA,IAAAA,EAAAA,SAAAA;IAAiB,SAAA,IAAA,EAAA,SAAA;;;;;;;EAOFG,SAAAA,IAAAA,EAAAA,UAAsB;EAQtBE,SAAAA,IAAAA,EAAAA,eAAsB;EAAA,SAAA,eAAA,EAAA,YAAA;EAAA,SAGnBN,MAAAA,EAAAA,SAAAA,CAAAA;IACEwE,SAAAA,IAAAA,EAAAA,SAAAA;IAIdnE,SAAAA,IAAAA,EAAAA,SAAAA;EAAO,CAAA,EAAA;;;;;;EAOSE,CAAAA,EAAAA;IAAe,SAAA,IAAA,EAAA,YAAA;IACrBH,SAAAA,IAAAA,EAAAA,SAAAA;IACAE,SAAAA,UAAAA,EAAAA,SAAAA,CAAAA;MAEPkE,SAAAA,IAAAA,EAAAA,QAAAA;MAaPnE,SAAAA,IAAAA,EAAAA,OAAAA;IAAO,CAAA,EAAA;;;;;MCvDMwD,SAAa,IAAA,EAAA,OAIZ;;MAGMnD,SAAAA,IAAAA,EAAAA,WAAqB;;;;;IAKrBC,SAAAA,IAAAA,EAAe,OAAA;EAAA,CAAA,CAAA;EAAA,SAAiC4D,OAAAA,EAAAA,SAAAA,EAAAA;CAAG,EAAA;EAAM,SAAA,IAAA,EAAA,UAAA;;;;;;EAMzD3D,CAAAA,EAAAA;;;;;;;;;;;;ECZHC,SAAAA,IAAAA,EAAAA,UAQpB;EACoBC,SAAAA,IAoBpB,EAAA,yBAAA;;;;;;;;;;IAUoBC,SAAAA,IAAAA,EAAAA,SAIpB;EACoBC,CAAAA,CAAAA;;;;KFlDhBf,iBAAAA,GAAoBF,4BAA4BC;;ADDhCA,KCGTwE,SAAAA,GD2FV,WC1FWvE;;gBAESE;EALjBF,IAAAA,EAMSH,oBANQ,CAAA,OAMoBE,UANpB,EAAA,YAAA,EAM8CG,IAN9C,CAAA;AAAA,CAAA,EAAA,CAQpBF,iBARmDD,CAAAA;;AAAR;;AAE7C;;;AAGsBG,UAULC,sBAAAA,CAVKD;EAAI,yBACgBH,CAAAA,IAAAA,EAAAA;IAA0BG,IAAAA,EAAAA,KAAAA,MAAAA,EAAAA;IAAtDL,OAAAA,CAAAA,EAAAA,MAAAA;EAAoB,CAAA,CAAA,EAa1BO,OAXNJ,CAAAA;IAAiB,MAAA,EAAA,MAAA;;;UAeFK,sBAAAA;;;gBAGGN;IAXHI,YAAAA,EAYKoE,SAZiB,CAAA,cAIxB,CAAA;IAIElE,IAAAA,EAAAA,KAAAA;IAAsB,YAAA,CAAA,EAAA,MAAA;IAGnBN,oBAAAA,CAAAA,EAAAA,MAAAA;EAAU,CAAA,CAAA,EAKtBK,OAJcmE,CAAAA,KAAAA,MAAAA,EAAAA,CAAAA;;AAIP;;;;;iBAOSjE,eAAAA;EAAAA,YAAAA,EACNH,sBADqB;EAAA,YAAA,EAErBE,sBAFqB;EAAA,aACrBF,EAAAA,KAAAA,MAAAA,EAAAA;EAAsB,KACtBE,EAEPkE,SAFOlE,EAAAA;EAAsB,GAE7BkE,CAAAA,EAAAA,CAAAA,IAAAA,EAAAA,MAAAA,EAAAA,GAAAA,IAAAA;EAAS;AAaT;;;;;ICvDMX,YAAa,CAAA,EAAA,MAAA;;EAONnD,CAAAA;;;IDgDpBL;;;UCvDawD,aAAAA;;EFDI7D,SAAAA,EAAAA,MA8FnB;;aEzFauE;;ADLyB;AAClB,iBCOE7D,qBAAAA,CDPF,IAAA,EAAA,KAAA,MAAA,EAAA,CAAA,ECO8C6D,GDP9C;;;AAAuB;;AAEjCC,iBCUY7D,eAAAA,CDVH,OAAA,EAAA,KAAA,MAAA,EAAA,EAAA,KAAA,CAAA,ECUmD4D,GDVnD,CAAA,ECUyDA,GDVzD;;;;;;AAIPzE,iBCYUc,YAAAA,CDZVd,GAAAA,EAAAA,MAAAA,CAAAA,ECYqCyE,GDZrCzE;;;;;;;;ADPd;;;;ACCKG,cEMgBY,aFNC,EAAA;EAAA,SAAA,IAAA,EAAA,CAAA;EAAA,SAA+Bb,MAAAA,EAAAA,CAAAA;EAAU,SAAtCD,OAAAA,EAAAA,CAAAA;EAAoB,SAAA,KAAA,EAAA,CAAA;;EAEjCyE,SAAAA,QAAS,EAAA,CAAA;EAAA,SAAA,UAAA,EAAA,CAAA;CAAA;AAGCrE,cEUDW,QFVCX,EAAAA;EAAI,SACgBH,IAAAA,EAAAA,CAAAA;EAAU,SAAgBG,GAAAA,EAAAA,CAAAA;EAAI,SAA1DL,EAAAA,EAAAA,CAAAA;EAAoB,SAEhCG,GAAAA,EAAAA,CAAAA;EAAiB,SAAA,OAAA,EAAA,CAAA;;;;;;;EAOFG,SAAAA,QAAAA,EAAAA,EAAAA;EAQAE,SAAAA,oBAAsB,EAAA,EAAA;EAAA,SAAA,iBAAA,EAAA,EAAA;EAAA,SAGnBN,OAAAA,EAAAA,EAAAA;EAAU,SACRwE,MAAAA,EAAAA,EAAAA;EAAS,SAIvBnE,eAAAA,EAAAA,EAAAA;EAAO,SAAA,oBAAA,EAAA,EAAA;;;;;;AAOf;;;;;;AAiBW,cEVUU,kBFUV,EAAA;;;;;ACvDM8C,cCkDI7C,gBD9CH,EAAA;;EAGMN,SAAAA,IAAAA,EAAAA,CAAAA;;;;;;;;AFRxB;;;;ACAwC;;;;AACK;;AAE7C;;AACaT,cGWQmB,oBHXRnB,EAAAA,KAAAA,MAAAA,EAAAA;AAESE,iBGUEkB,kCAAAA,CAAAA,CHVFlB,EGUwC0D,aHVxC1D,EAAAA;AACoBH,iBGUlBsB,yBAAAA,CHVkBtB,MAAAA,EAAAA;EAAU,MAAgBG,EAAAA,KAAAA,MAAAA,EAAAA;EAAI,IAA1DL,EAAAA,KAAAA,MAAAA,EAAAA;EAAoB,OAEhCG,CAAAA,EGWYsE,GHXZtE;AAAiB,CAAA,CAAA,EGYfuE,SHZe,EAAA;;;;;ADTExE,cKGA0B,iBL2FnB,EAAA,KAAA,MAAA,EAAA;;iBKzFsBC,OAAAA,gBAAuB4C;;AJLP;;;;AACK;;AAE7C;;;AAGsBpE,iBIUEyB,6BAAAA,CJVFzB,OAAAA,EAAAA,KAAAA,MAAAA,EAAAA,EAAAA,KAAAA,CAAAA,EIUgEoE,GJVhEpE,CAAAA,EIUsE0D,aJVtE1D,EAAAA;;AAC8CA,iBIW5C0B,4BAAAA,CJX4C1B,MAAAA,EAAAA;EAAI,QAA1DL,EAAAA,MAAAA;EAAoB,OAEhCG,EIWWsE,GJXXtE;EAAiB,MAAA,EAAA,KAAA,MAAA,EAAA;;;UIePsE;IACRC;;;;;ALzBJ;;;;ACAwC;;;;AACK;;AAE7C;;;;;;;AAMEvE,cKWmBiC,kBLXnBjC,EAAAA,KAAAA,MAAAA,EAAAA;AAAiB,UKYFkC,0BAAAA,CLZE;;WKcNL;;QAEHA;;UAEEA;ELXK1B;EAQAE,MAAAA,EKKLwB,OLLKxB;EAAsB;EAAA,KAGnBN,EAAAA,SKIA8B,OLJA9B,EAAAA;EAAU;EACC,KAIvBK,CAAAA,EKCIkE,GLDJlE;AAAO;;iBKIS+B,yBAAAA,SAAkCD,6BAA6B0B;;iBAE/DxB,wBAAAA,SAAiCF;WAC5CoC;ELAWhE,MAAAA,EKCZuB,OLDYvB;CAAe,CAAA,EKEnCiE,SLFmC,EAAA;;;;;;ADvCvC;;;;ACAwC;;;;AACK;;AAE7C;;;;;;;;AAMmB;;;;;;;AAOnB;AAQiBlE,cMKIkC,0BNLkB,EAAA,SAAA,CAAA,CAAA,EAAA,EAAA,CAAA;AAAA,iBMMfC,sBAAAA,CNNe,UAAA,EAAA,MAAA,CAAA,EMM6B8B,GNN7B;;;;AAQxB;;;;;;AAOShE,iBMCAmC,+BAAAA,CAAAA,CNDe,EMCoBmB,aNDpB,EAAA;;AACrBzD,cMEGuC,iBNFHvC,EAAAA,YAAAA;;AAGPoE,cMCU5B,gBNDV4B,EAAAA,YAAAA;;AAaA,cMVU3B,gBNUV,EAAA,YAAA;;;;;ACvDX;iBKmDwBC,uBAAAA,uBAA8Ce;AL5CtE;iBK8CwBd,sBAAAA,uBAA6Cc;;;;;APtDrE;;;;ACAwC;;;;AACK;;AAE7C;AAAqB,cOWAV,oBPXA,EAAA,KAAA,MAAA,EAAA;;AAGChD,cOUDiD,sBPVCjD,EAAAA,KAAAA,MAAAA,EAAAA;AACoBH,iBOUlBqD,2BAAAA,CPVkBrD,IAAAA,EAAAA,KAAAA,MAAAA,EAAAA,CAAAA,EOUgC6D,aPVhC7D,EAAAA;AAA0BG,iBOW5CmD,yBAAAA,CPX4CnD,MAAAA,EAAAA;EAAI,MAA1DL,EAAAA,KAAAA,MAAAA,EAAAA;EAAoB,IAEhCG,EAAAA,KAAAA,MAAAA,EAAAA;EAAiB,IAAA,EAAA,KAAA,MAAA,EAAA;YOaLsE;IACVC;;;;;;ARvBJ;;;;ACAwC;;;AACfzE,cQSJ0D,eRTI1D,EAAAA,KAAAA,MAAAA,EAAAA;AAAoB,iBQUrB2D,oBAAAA,CRVqB,MAAA,EAAA;;EAEjCc,IAAAA,EAAAA,KAAAA,MAAS,EAAA;EAAA,OAAA,EAAA,KAAA,MAAA,EAAA;EAAA,OACRvE,CAAAA,EAAAA,MAAAA;EAAiB,OAERE,CAAAA,EQURoE,GRVQpE;CAAI,CAAA,EQWtBqE,SRVsCxE,EAAAA;;;;;ADPrBA,cUGA8D,kBV2FnB,EAAA,KAAA,MAAA,EAAA;;cUzFmBC;;ATJhB9D,cSMgB+D,qBTNC,EAAA,KAAA,MAAA,EAAA;;AAA+BhE,cSQhCiE,sBTRgCjE,EAAAA,KAAAA,MAAAA,EAAAA;;AAAR,cSUxBkE,gCTVwB,EAAA,KAAA,MAAA,EAAA;;AAE7C;;;;AAI0ClE,iBSUlBmE,oCAAAA,CTVkBnE,IAAAA,EAAAA,KAAAA,MAAAA,EAAAA,CAAAA,ESUyC6D,aTVzC7D,EAAAA;;;;AAEvB;;iBScKoE,kBAAAA,kBAAoCG;;;;;ATP5D;AAQA;AAAuC,iBSMfF,uBAAAA,CTNe,OAAA,EAAA,KAAA,MAAA,EAAA,EAAA,SAAA,EAAA,MAAA,CAAA,ESMqDR,aTNrD,EAAA;;;;AAQxB;;;;;;AAOf;;;;;;AAiBW;iBSTaS,uBAAAA;WACXC;;;ER/CIV;;EAOOnD;;;;;EAKAC,SAAAA,EAAAA,MAAAA;EAAe;EAAA,iBAAiC4D,EAAAA,KAAAA,MAAAA,EAAAA;EAAG;EAAM,kBAAA,EAAA,KAAA,MAAA,EAAA;;;;;;EAMzD3D;;IQmDpB4D;;;;;;AVtEJ;;;;ACAwC;;;AACfzE,cUSJ0E,sBVTI1E,EAAAA,KAAAA,MAAAA,EAAAA;AAAoB,iBUUrB2E,0BAAAA,CVVqB,MAAA,EAAA;;EAEjCF,IAAAA,EAAAA,KAAAA,MAAS,EAAA;EAAA,OAAA,EAAA,KAAA,MAAA,EAAA;EAAA,OACRvE,CAAAA,EAAAA,MAAAA;EAAiB,OAERE,CAAAA,EUURoE,GVVQpE;CAAI,CAAA,EUWtBqE,SVVsCxE,EAAAA;;;;;;;;ADP1C;;;;ACAwC;;;AACfD,iBWSD4E,YAAAA,CXTC5E,WAAAA,EAAAA,MAAAA,EAAAA,IAAAA,EAAAA,MAAAA,CAAAA,EAAAA,MAAAA;AAAoB;iBWWrB6E,mBAAAA,CAAAA;AXTxB;AAAqB,iBWWGC,gBAAAA,CAAAA,CXXH,EAAA,MAAA;;AAGC1E,iBWUE2E,qBAAAA,CAAAA,CXVF3E,EAAAA,MAAAA;;AAC8CA,iBWW5C4E,iBAAAA,CXX4C5E,OAAAA,EAAAA,MAAAA,CAAAA,EAAAA,OAAAA;;AAElEF,iBWWsB+E,oBAAAA,CAAAA,CXXtB/E,EAAAA;EAAiB,IAAA,EAAA,KAAA,MAAA,EAAA"}
|