@switchxfi/alm-sdk 1.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/README.md +138 -0
- package/dist/index.d.mts +325 -0
- package/dist/index.d.ts +325 -0
- package/dist/index.js +12036 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +11968 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +91 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/jsbi/lib/jsbi.ts","../node_modules/@thanpolas/crypto-utils/node_modules/jsbi/tsc-out/jsbi.mjs","../node_modules/@thanpolas/crypto-utils/src/utils.js","../node_modules/invariant/browser.js","../node_modules/decimal.js/decimal.js","../node_modules/@thanpolas/crypto-utils/src/fractions.js","../node_modules/@thanpolas/crypto-utils/src/tokens.js","../node_modules/@thanpolas/crypto-utils/src/pool-tokens.js","../node_modules/@thanpolas/crypto-utils/src/percentage.js","../node_modules/@thanpolas/crypto-utils/src/constants.js","../node_modules/@thanpolas/crypto-utils/src/index.js","../node_modules/@thanpolas/univ3prices/src/chain-context.js","../node_modules/@thanpolas/univ3prices/src/constants.js","../node_modules/@thanpolas/univ3prices/src/utils.js","../node_modules/@thanpolas/univ3prices/src/sqrt-price.js","../node_modules/@thanpolas/univ3prices/src/tick-price.js","../node_modules/@thanpolas/univ3prices/src/tick-math.js","../node_modules/@thanpolas/univ3prices/src/liquidity.js","../node_modules/@thanpolas/univ3prices/src/index.js","../src/types/index.ts","../abis/types/factories/AlgebraVault__factory.ts","../abis/types/factories/AlgebraVaultDepositGuard__factory.ts","../abis/types/factories/ERC20__factory.ts","../abis/types/factories/FarmingRewardsDistributor__factory.ts","../abis/types/factories/AlgebraPool__factory.ts","../src/contracts/index.ts","../src/graphql/queries.ts","../src/graphql/constants.ts","../src/utils/getGraphUrls.ts","../src/utils/cache.ts","../src/graphql/functions.ts","../src/utils/formatBigInt.ts","../src/functions/_totalBalances.ts","../src/functions/vault.ts","../src/functions/totalBalances.ts","../src/utils/parseBigInt.ts","../src/config/addresses.ts","../src/abis/multicall.json","../src/utils/multicallUtils.ts","../src/functions/userBalances.ts","../src/types/calculateGasMargin.ts","../src/utils/amountWithSlippage.ts","../src/functions/vaultBasics.ts","../src/functions/deposit.ts","../src/functions/withdraw.ts","../src/utils/timestamps.ts","../src/utils/getPrice.ts","../src/functions/priceFromPool.ts","../src/functions/_vaultEvents.ts","../src/functions/vaultEvents.ts","../src/functions/calculateFees.ts","../src/utils/truncateToDecimals.ts","../src/functions/calculateDtr.ts","../src/functions/calculateApr.ts","../src/functions/vaultMetrics.ts","../src/functions/vaultTvl.ts","../src/functions/vaultPositions.ts","../src/functions/getFeeAprs.ts","../src/utils/getFarmingRewardsDistributorAddress.ts","../src/functions/farmingActions.ts","../src/functions/farmingBalances.ts","../src/functions/calculatePnl.ts"],"names":["Math","imul","clz32","abs","max","floor","JSBI","Array","constructor","length","sign","__kMaxLength","RangeError","BigInt","arg","_","Number","isFinite","__zero","__isOneDigitInt","__oneDigit","__fromDouble","result","__fromString","SyntaxError","primitive","__toPrimitive","TypeError","toDebugString","digit","push","toString","join","radix","__toStringBasePowerOfTwo","__toStringGeneric","toNumber","x","xLength","value","__unsignedDigit","xMsd","__digit","msdLeadingZeros","__clz30","xBitLength","exponent","currentDigit","digitIndex","shift","mantissaHigh","mantissaHighBitsUnset","mantissaLow","mantissaLowBitsUnset","rounding","__decideRounding","signBit","__kBitConversionInts","__kBitConversionDouble","unaryMinus","__copy","bitwiseNot","__absoluteSubOne","__trim","__absoluteAddOne","exponentiate","y","expValue","__kMaxLengthBits","neededDigits","__initializeDigits","msd","__setDigit","runningSquare","multiply","resultLength","__clzmsd","i","__multiplyAccumulate","divide","__absoluteCompare","resultSign","divisor","quotient","__absoluteDivSmall","__absoluteDivLarge","remainder","remainderDigit","__absoluteModSmall","add","__absoluteAdd","__absoluteSub","subtract","leftShift","__rightShiftByAbsolute","__leftShiftByAbsolute","signedRightShift","unsignedRightShift","lessThan","__compareToBigInt","lessThanOrEqual","greaterThan","greaterThanOrEqual","equal","notEqual","bitwiseAnd","__absoluteAnd","y1","__absoluteOr","__absoluteAndNot","bitwiseXor","__absoluteXor","bitwiseOr","asIntN","n","neededLength","topDigit","compareDigit","__truncateToNBits","__truncateAndSubFromPowerOfTwo","asUintN","bitsInTopDigit","ADD","__toNumeric","__isBigInt","LT","__compare","LE","GT","GE","EQ","__equalToNumber","NE","newLength","last","pop","mantissaBitsUnset","topUnconsumedBit","mask","rawExponent","digits","kMantissaHighTopBit","msdTopBit","remainingMantissaBits","__isWhitespace","c","string","cursor","current","charCodeAt","chars","bitsPerChar","__kMaxBitsPerChar","roundup","__kBitsPerCharTableMultiplier","bitsMin","__kBitsPerCharTableShift","limDigit","limAlpha","parts","partsBits","done","part","bits","d","__fillFromParts","charsSoFar","multiplier","m","digitsSoFar","__inplaceMultiplyAdd","bitsInDigit","partBits","Error","charMask","charsRequired","pos","availableBits","newDigit","__kConversionChars","consumedBits","isRecursiveCall","bitLength","maxBitsPerChar","minBitsPerChar","secondHalfChars","conqueror","secondHalf","input","__halfDigit","__setHalfDigit","divisionResult","firstHalf","__unequalSign","leftNegative","__absoluteGreater","bothNegative","__absoluteLess","xSign","__compareToNumber","ySign","yAbs","xDigit","__compareToDouble","yBitLength","compareMantissa","__comparisonResultToBool","op","carry","r","borrow","inputLength","__setDigitGrow","yLength","numPairs","tmp","tmpLength","diff","multiplicand","accumulator","accumulatorIndex","m2Low","m2High","high","acc","m1","m1Low","m1High","rLow","__imul","rMid1","rMid2","rHigh","__internalMultiplyAdd","source","factor","summand","rx","ry","mLow","mHigh","dLow","dHigh","pLow","pMid1","pMid2","pHigh","upperHalf","lowerHalf","dividend","wantQuotient","wantRemainder","__halfDigitLength","n2","q","qhatv","__clz15","__specialLeftShift","u","vn1","halfDigitBuffer","qhat","j","ujn","rhat","vn2","ujn2","__inplaceSub","__inplaceAdd","__inplaceRightShift","startIndex","halfDigits","sum","subtrahend","r0","sub","r15","addDigit","__toShiftAmount","digitShift","bitsShift","grow","__rightShiftByMaximum","mustRoundDown","obj","hint","Symbol","toPrimitive","exoticToPrim","valueOf","call","drop","min","limit","msdBitsConsumed","resultMsd","minuendMsd","len","previous","updated","__digitPow","base","ArrayBuffer","Float64Array","__kBitConversionBuffer","Int32Array","LN2","log","t","a","b","o","e","l","g","s","h","_Array","_this","_classCallCheck","_callSuper","Object","setPrototypeOf","prototype","_inherits","_createClass","key","_step","_iterator","_createForOfIteratorHelper","err","f","arguments","fullSteps","subTop","_typeof","__kBitConversionIntHigh","__kBitConversionIntLow","_ref","_ref2","_ref3","hasBit","DataViewGetBigInt64","dataview","byteOffset","littleEndian","DataViewGetBigUint64","_ref4","_ref5","_slicedToArray","getUint32","low","DataViewSetBigInt64","DataViewSetBigUint64","d1","_ref6","_ref7","setUint32","kHiddenBit","roundingCanOverflow","__detectBigEndian","_wrapNativeSuper","utils","pow","Decimal","require_constants","require_utils","MaxUint256","sqrtRatio","require_src","SupportedChainId","_abi","Contract","BN","request","BigNumber","univ3pricesImport","getTotalAmountsAtTransactionEvent","import_univ3prices","univ3prices","AddressZero","parseUnits","formatUnits","deposit","withdraw"],"mappings":"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","file":"index.mjs","sourcesContent":[null,"// Copyright 2018 Google Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the “License”);\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// <https://apache.org/licenses/LICENSE-2.0>.\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an “AS IS” BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nclass JSBI extends Array {\n constructor(length, sign) {\n super(length);\n this.sign = sign;\n // Explicitly set the prototype as per\n // https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(this, JSBI.prototype);\n if (length > JSBI.__kMaxLength) {\n throw new RangeError('Maximum BigInt size exceeded');\n }\n }\n static BigInt(arg) {\n if (typeof arg === 'number') {\n if (arg === 0)\n return JSBI.__zero();\n if (JSBI.__isOneDigitInt(arg)) {\n if (arg < 0) {\n return JSBI.__oneDigit(-arg, true);\n }\n return JSBI.__oneDigit(arg, false);\n }\n if (!Number.isFinite(arg) || Math.floor(arg) !== arg) {\n throw new RangeError('The number ' + arg + ' cannot be converted to ' +\n 'BigInt because it is not an integer');\n }\n return JSBI.__fromDouble(arg);\n }\n else if (typeof arg === 'string') {\n const result = JSBI.__fromString(arg);\n if (result === null) {\n throw new SyntaxError('Cannot convert ' + arg + ' to a BigInt');\n }\n return result;\n }\n else if (typeof arg === 'boolean') {\n if (arg === true) {\n return JSBI.__oneDigit(1, false);\n }\n return JSBI.__zero();\n }\n else if (typeof arg === 'object') {\n if (arg.constructor === JSBI)\n return arg;\n const primitive = JSBI.__toPrimitive(arg);\n return JSBI.BigInt(primitive);\n }\n throw new TypeError('Cannot convert ' + arg + ' to a BigInt');\n }\n toDebugString() {\n const result = ['BigInt['];\n for (const digit of this) {\n result.push((digit ? (digit >>> 0).toString(16) : digit) + ', ');\n }\n result.push(']');\n return result.join('');\n }\n toString(radix = 10) {\n if (radix < 2 || radix > 36) {\n throw new RangeError('toString() radix argument must be between 2 and 36');\n }\n if (this.length === 0)\n return '0';\n if ((radix & (radix - 1)) === 0) {\n return JSBI.__toStringBasePowerOfTwo(this, radix);\n }\n return JSBI.__toStringGeneric(this, radix, false);\n }\n valueOf() {\n throw new Error('Convert JSBI instances to native numbers using `toNumber`.');\n }\n // Equivalent of \"Number(my_bigint)\" in the native implementation.\n // TODO: add more tests\n static toNumber(x) {\n const xLength = x.length;\n if (xLength === 0)\n return 0;\n if (xLength === 1) {\n const value = x.__unsignedDigit(0);\n return x.sign ? -value : value;\n }\n const xMsd = x.__digit(xLength - 1);\n const msdLeadingZeros = JSBI.__clz30(xMsd);\n const xBitLength = xLength * 30 - msdLeadingZeros;\n if (xBitLength > 1024)\n return x.sign ? -Infinity : Infinity;\n let exponent = xBitLength - 1;\n let currentDigit = xMsd;\n let digitIndex = xLength - 1;\n const shift = msdLeadingZeros + 3;\n let mantissaHigh = (shift === 32) ? 0 : currentDigit << shift;\n mantissaHigh >>>= 12;\n const mantissaHighBitsUnset = shift - 12;\n let mantissaLow = (shift >= 12) ? 0 : (currentDigit << (20 + shift));\n let mantissaLowBitsUnset = 20 + shift;\n if (mantissaHighBitsUnset > 0 && digitIndex > 0) {\n digitIndex--;\n currentDigit = x.__digit(digitIndex);\n mantissaHigh |= (currentDigit >>> (30 - mantissaHighBitsUnset));\n mantissaLow = currentDigit << mantissaHighBitsUnset + 2;\n mantissaLowBitsUnset = mantissaHighBitsUnset + 2;\n }\n while (mantissaLowBitsUnset > 0 && digitIndex > 0) {\n digitIndex--;\n currentDigit = x.__digit(digitIndex);\n if (mantissaLowBitsUnset >= 30) {\n mantissaLow |= (currentDigit << (mantissaLowBitsUnset - 30));\n }\n else {\n mantissaLow |= (currentDigit >>> (30 - mantissaLowBitsUnset));\n }\n mantissaLowBitsUnset -= 30;\n }\n const rounding = JSBI.__decideRounding(x, mantissaLowBitsUnset, digitIndex, currentDigit);\n if (rounding === 1 || (rounding === 0 && (mantissaLow & 1) === 1)) {\n mantissaLow = (mantissaLow + 1) >>> 0;\n if (mantissaLow === 0) {\n // Incrementing mantissaLow overflowed.\n mantissaHigh++;\n if ((mantissaHigh >>> 20) !== 0) {\n // Incrementing mantissaHigh overflowed.\n mantissaHigh = 0;\n exponent++;\n if (exponent > 1023) {\n // Incrementing the exponent overflowed.\n return x.sign ? -Infinity : Infinity;\n }\n }\n }\n }\n const signBit = x.sign ? (1 << 31) : 0;\n exponent = (exponent + 0x3FF) << 20;\n JSBI.__kBitConversionInts[JSBI.__kBitConversionIntHigh] =\n signBit | exponent | mantissaHigh;\n JSBI.__kBitConversionInts[JSBI.__kBitConversionIntLow] = mantissaLow;\n return JSBI.__kBitConversionDouble[0];\n }\n // Operations.\n static unaryMinus(x) {\n if (x.length === 0)\n return x;\n const result = x.__copy();\n result.sign = !x.sign;\n return result;\n }\n static bitwiseNot(x) {\n if (x.sign) {\n // ~(-x) == ~(~(x-1)) == x-1\n return JSBI.__absoluteSubOne(x).__trim();\n }\n // ~x == -x-1 == -(x+1)\n return JSBI.__absoluteAddOne(x, true);\n }\n static exponentiate(x, y) {\n if (y.sign) {\n throw new RangeError('Exponent must be positive');\n }\n if (y.length === 0) {\n return JSBI.__oneDigit(1, false);\n }\n if (x.length === 0)\n return x;\n if (x.length === 1 && x.__digit(0) === 1) {\n // (-1) ** even_number == 1.\n if (x.sign && (y.__digit(0) & 1) === 0) {\n return JSBI.unaryMinus(x);\n }\n // (-1) ** odd_number == -1, 1 ** anything == 1.\n return x;\n }\n // For all bases >= 2, very large exponents would lead to unrepresentable\n // results.\n if (y.length > 1)\n throw new RangeError('BigInt too big');\n let expValue = y.__unsignedDigit(0);\n if (expValue === 1)\n return x;\n if (expValue >= JSBI.__kMaxLengthBits) {\n throw new RangeError('BigInt too big');\n }\n if (x.length === 1 && x.__digit(0) === 2) {\n // Fast path for 2^n.\n const neededDigits = 1 + ((expValue / 30) | 0);\n const sign = x.sign && ((expValue & 1) !== 0);\n const result = new JSBI(neededDigits, sign);\n result.__initializeDigits();\n // All bits are zero. Now set the n-th bit.\n const msd = 1 << (expValue % 30);\n result.__setDigit(neededDigits - 1, msd);\n return result;\n }\n let result = null;\n let runningSquare = x;\n // This implicitly sets the result's sign correctly.\n if ((expValue & 1) !== 0)\n result = x;\n expValue >>= 1;\n for (; expValue !== 0; expValue >>= 1) {\n runningSquare = JSBI.multiply(runningSquare, runningSquare);\n if ((expValue & 1) !== 0) {\n if (result === null) {\n result = runningSquare;\n }\n else {\n result = JSBI.multiply(result, runningSquare);\n }\n }\n }\n // TODO see if there's a way for tsc to infer this will always happen?\n return result;\n }\n static multiply(x, y) {\n if (x.length === 0)\n return x;\n if (y.length === 0)\n return y;\n let resultLength = x.length + y.length;\n if (x.__clzmsd() + y.__clzmsd() >= 30) {\n resultLength--;\n }\n const result = new JSBI(resultLength, x.sign !== y.sign);\n result.__initializeDigits();\n for (let i = 0; i < x.length; i++) {\n JSBI.__multiplyAccumulate(y, x.__digit(i), result, i);\n }\n return result.__trim();\n }\n static divide(x, y) {\n if (y.length === 0)\n throw new RangeError('Division by zero');\n if (JSBI.__absoluteCompare(x, y) < 0)\n return JSBI.__zero();\n const resultSign = x.sign !== y.sign;\n const divisor = y.__unsignedDigit(0);\n let quotient;\n if (y.length === 1 && divisor <= 0x7FFF) {\n if (divisor === 1) {\n return resultSign === x.sign ? x : JSBI.unaryMinus(x);\n }\n quotient = JSBI.__absoluteDivSmall(x, divisor, null);\n }\n else {\n quotient = JSBI.__absoluteDivLarge(x, y, true, false);\n }\n quotient.sign = resultSign;\n return quotient.__trim();\n }\n static remainder(x, y) {\n if (y.length === 0)\n throw new RangeError('Division by zero');\n if (JSBI.__absoluteCompare(x, y) < 0)\n return x;\n const divisor = y.__unsignedDigit(0);\n if (y.length === 1 && divisor <= 0x7FFF) {\n if (divisor === 1)\n return JSBI.__zero();\n const remainderDigit = JSBI.__absoluteModSmall(x, divisor);\n if (remainderDigit === 0)\n return JSBI.__zero();\n return JSBI.__oneDigit(remainderDigit, x.sign);\n }\n const remainder = JSBI.__absoluteDivLarge(x, y, false, true);\n remainder.sign = x.sign;\n return remainder.__trim();\n }\n static add(x, y) {\n const sign = x.sign;\n if (sign === y.sign) {\n // x + y == x + y\n // -x + -y == -(x + y)\n return JSBI.__absoluteAdd(x, y, sign);\n }\n // x + -y == x - y == -(y - x)\n // -x + y == y - x == -(x - y)\n if (JSBI.__absoluteCompare(x, y) >= 0) {\n return JSBI.__absoluteSub(x, y, sign);\n }\n return JSBI.__absoluteSub(y, x, !sign);\n }\n static subtract(x, y) {\n const sign = x.sign;\n if (sign !== y.sign) {\n // x - (-y) == x + y\n // (-x) - y == -(x + y)\n return JSBI.__absoluteAdd(x, y, sign);\n }\n // x - y == -(y - x)\n // (-x) - (-y) == y - x == -(x - y)\n if (JSBI.__absoluteCompare(x, y) >= 0) {\n return JSBI.__absoluteSub(x, y, sign);\n }\n return JSBI.__absoluteSub(y, x, !sign);\n }\n static leftShift(x, y) {\n if (y.length === 0 || x.length === 0)\n return x;\n if (y.sign)\n return JSBI.__rightShiftByAbsolute(x, y);\n return JSBI.__leftShiftByAbsolute(x, y);\n }\n static signedRightShift(x, y) {\n if (y.length === 0 || x.length === 0)\n return x;\n if (y.sign)\n return JSBI.__leftShiftByAbsolute(x, y);\n return JSBI.__rightShiftByAbsolute(x, y);\n }\n static unsignedRightShift() {\n throw new TypeError('BigInts have no unsigned right shift; use >> instead');\n }\n static lessThan(x, y) {\n return JSBI.__compareToBigInt(x, y) < 0;\n }\n static lessThanOrEqual(x, y) {\n return JSBI.__compareToBigInt(x, y) <= 0;\n }\n static greaterThan(x, y) {\n return JSBI.__compareToBigInt(x, y) > 0;\n }\n static greaterThanOrEqual(x, y) {\n return JSBI.__compareToBigInt(x, y) >= 0;\n }\n static equal(x, y) {\n if (x.sign !== y.sign)\n return false;\n if (x.length !== y.length)\n return false;\n for (let i = 0; i < x.length; i++) {\n if (x.__digit(i) !== y.__digit(i))\n return false;\n }\n return true;\n }\n static notEqual(x, y) {\n return !JSBI.equal(x, y);\n }\n static bitwiseAnd(x, y) {\n if (!x.sign && !y.sign) {\n return JSBI.__absoluteAnd(x, y).__trim();\n }\n else if (x.sign && y.sign) {\n const resultLength = Math.max(x.length, y.length) + 1;\n // (-x) & (-y) == ~(x-1) & ~(y-1) == ~((x-1) | (y-1))\n // == -(((x-1) | (y-1)) + 1)\n let result = JSBI.__absoluteSubOne(x, resultLength);\n const y1 = JSBI.__absoluteSubOne(y);\n result = JSBI.__absoluteOr(result, y1, result);\n return JSBI.__absoluteAddOne(result, true, result).__trim();\n }\n // Assume that x is the positive BigInt.\n if (x.sign) {\n [x, y] = [y, x];\n }\n // x & (-y) == x & ~(y-1) == x &~ (y-1)\n return JSBI.__absoluteAndNot(x, JSBI.__absoluteSubOne(y)).__trim();\n }\n static bitwiseXor(x, y) {\n if (!x.sign && !y.sign) {\n return JSBI.__absoluteXor(x, y).__trim();\n }\n else if (x.sign && y.sign) {\n // (-x) ^ (-y) == ~(x-1) ^ ~(y-1) == (x-1) ^ (y-1)\n const resultLength = Math.max(x.length, y.length);\n const result = JSBI.__absoluteSubOne(x, resultLength);\n const y1 = JSBI.__absoluteSubOne(y);\n return JSBI.__absoluteXor(result, y1, result).__trim();\n }\n const resultLength = Math.max(x.length, y.length) + 1;\n // Assume that x is the positive BigInt.\n if (x.sign) {\n [x, y] = [y, x];\n }\n // x ^ (-y) == x ^ ~(y-1) == ~(x ^ (y-1)) == -((x ^ (y-1)) + 1)\n let result = JSBI.__absoluteSubOne(y, resultLength);\n result = JSBI.__absoluteXor(result, x, result);\n return JSBI.__absoluteAddOne(result, true, result).__trim();\n }\n static bitwiseOr(x, y) {\n const resultLength = Math.max(x.length, y.length);\n if (!x.sign && !y.sign) {\n return JSBI.__absoluteOr(x, y).__trim();\n }\n else if (x.sign && y.sign) {\n // (-x) | (-y) == ~(x-1) | ~(y-1) == ~((x-1) & (y-1))\n // == -(((x-1) & (y-1)) + 1)\n let result = JSBI.__absoluteSubOne(x, resultLength);\n const y1 = JSBI.__absoluteSubOne(y);\n result = JSBI.__absoluteAnd(result, y1, result);\n return JSBI.__absoluteAddOne(result, true, result).__trim();\n }\n // Assume that x is the positive BigInt.\n if (x.sign) {\n [x, y] = [y, x];\n }\n // x | (-y) == x | ~(y-1) == ~((y-1) &~ x) == -(((y-1) ~& x) + 1)\n let result = JSBI.__absoluteSubOne(y, resultLength);\n result = JSBI.__absoluteAndNot(result, x, result);\n return JSBI.__absoluteAddOne(result, true, result).__trim();\n }\n static asIntN(n, x) {\n if (x.length === 0)\n return x;\n n = Math.floor(n);\n if (n < 0) {\n throw new RangeError('Invalid value: not (convertible to) a safe integer');\n }\n if (n === 0)\n return JSBI.__zero();\n // If {x} has less than {n} bits, return it directly.\n if (n >= JSBI.__kMaxLengthBits)\n return x;\n const neededLength = ((n + 29) / 30) | 0;\n if (x.length < neededLength)\n return x;\n const topDigit = x.__unsignedDigit(neededLength - 1);\n const compareDigit = 1 << ((n - 1) % 30);\n if (x.length === neededLength && topDigit < compareDigit)\n return x;\n // Otherwise truncate and simulate two's complement.\n const hasBit = (topDigit & compareDigit) === compareDigit;\n if (!hasBit)\n return JSBI.__truncateToNBits(n, x);\n if (!x.sign)\n return JSBI.__truncateAndSubFromPowerOfTwo(n, x, true);\n if ((topDigit & (compareDigit - 1)) === 0) {\n for (let i = neededLength - 2; i >= 0; i--) {\n if (x.__digit(i) !== 0) {\n return JSBI.__truncateAndSubFromPowerOfTwo(n, x, false);\n }\n }\n if (x.length === neededLength && topDigit === compareDigit)\n return x;\n return JSBI.__truncateToNBits(n, x);\n }\n return JSBI.__truncateAndSubFromPowerOfTwo(n, x, false);\n }\n static asUintN(n, x) {\n if (x.length === 0)\n return x;\n n = Math.floor(n);\n if (n < 0) {\n throw new RangeError('Invalid value: not (convertible to) a safe integer');\n }\n if (n === 0)\n return JSBI.__zero();\n // If {x} is negative, simulate two's complement representation.\n if (x.sign) {\n if (n > JSBI.__kMaxLengthBits) {\n throw new RangeError('BigInt too big');\n }\n return JSBI.__truncateAndSubFromPowerOfTwo(n, x, false);\n }\n // If {x} is positive and has up to {n} bits, return it directly.\n if (n >= JSBI.__kMaxLengthBits)\n return x;\n const neededLength = ((n + 29) / 30) | 0;\n if (x.length < neededLength)\n return x;\n const bitsInTopDigit = n % 30;\n if (x.length == neededLength) {\n if (bitsInTopDigit === 0)\n return x;\n const topDigit = x.__digit(neededLength - 1);\n if ((topDigit >>> bitsInTopDigit) === 0)\n return x;\n }\n // Otherwise, truncate.\n return JSBI.__truncateToNBits(n, x);\n }\n // Operators.\n static ADD(x, y) {\n x = JSBI.__toPrimitive(x);\n y = JSBI.__toPrimitive(y);\n if (typeof x === 'string') {\n if (typeof y !== 'string')\n y = y.toString();\n return x + y;\n }\n if (typeof y === 'string') {\n return x.toString() + y;\n }\n x = JSBI.__toNumeric(x);\n y = JSBI.__toNumeric(y);\n if (JSBI.__isBigInt(x) && JSBI.__isBigInt(y)) {\n return JSBI.add(x, y);\n }\n if (typeof x === 'number' && typeof y === 'number') {\n return x + y;\n }\n throw new TypeError('Cannot mix BigInt and other types, use explicit conversions');\n }\n static LT(x, y) {\n return JSBI.__compare(x, y, 0);\n }\n static LE(x, y) {\n return JSBI.__compare(x, y, 1);\n }\n static GT(x, y) {\n return JSBI.__compare(x, y, 2);\n }\n static GE(x, y) {\n return JSBI.__compare(x, y, 3);\n }\n static EQ(x, y) {\n while (true) {\n if (JSBI.__isBigInt(x)) {\n if (JSBI.__isBigInt(y))\n return JSBI.equal(x, y);\n return JSBI.EQ(y, x);\n }\n else if (typeof x === 'number') {\n if (JSBI.__isBigInt(y))\n return JSBI.__equalToNumber(y, x);\n if (typeof y !== 'object')\n return x == y;\n y = JSBI.__toPrimitive(y);\n }\n else if (typeof x === 'string') {\n if (JSBI.__isBigInt(y)) {\n x = JSBI.__fromString(x);\n if (x === null)\n return false;\n return JSBI.equal(x, y);\n }\n if (typeof y !== 'object')\n return x == y;\n y = JSBI.__toPrimitive(y);\n }\n else if (typeof x === 'boolean') {\n if (JSBI.__isBigInt(y))\n return JSBI.__equalToNumber(y, +x);\n if (typeof y !== 'object')\n return x == y;\n y = JSBI.__toPrimitive(y);\n }\n else if (typeof x === 'symbol') {\n if (JSBI.__isBigInt(y))\n return false;\n if (typeof y !== 'object')\n return x == y;\n y = JSBI.__toPrimitive(y);\n }\n else if (typeof x === 'object') {\n if (typeof y === 'object' && y.constructor !== JSBI)\n return x == y;\n x = JSBI.__toPrimitive(x);\n }\n else {\n return x == y;\n }\n }\n }\n static NE(x, y) {\n return !JSBI.EQ(x, y);\n }\n // DataView-related functionality.\n static DataViewGetBigInt64(dataview, byteOffset, littleEndian = false) {\n return JSBI.asIntN(64, JSBI.DataViewGetBigUint64(dataview, byteOffset, littleEndian));\n }\n static DataViewGetBigUint64(dataview, byteOffset, littleEndian = false) {\n const [h, l] = littleEndian ? [4, 0] : [0, 4];\n const high = dataview.getUint32(byteOffset + h, littleEndian);\n const low = dataview.getUint32(byteOffset + l, littleEndian);\n const result = new JSBI(3, false);\n result.__setDigit(0, low & 0x3FFFFFFF);\n result.__setDigit(1, ((high & 0xFFFFFFF) << 2) | (low >>> 30));\n result.__setDigit(2, high >>> 28);\n return result.__trim();\n }\n static DataViewSetBigInt64(dataview, byteOffset, value, littleEndian = false) {\n JSBI.DataViewSetBigUint64(dataview, byteOffset, value, littleEndian);\n }\n static DataViewSetBigUint64(dataview, byteOffset, value, littleEndian = false) {\n value = JSBI.asUintN(64, value);\n let high = 0;\n let low = 0;\n if (value.length > 0) {\n low = value.__digit(0);\n if (value.length > 1) {\n const d1 = value.__digit(1);\n low = low | d1 << 30;\n high = d1 >>> 2;\n if (value.length > 2) {\n high = high | (value.__digit(2) << 28);\n }\n }\n }\n const [h, l] = littleEndian ? [4, 0] : [0, 4];\n dataview.setUint32(byteOffset + h, high, littleEndian);\n dataview.setUint32(byteOffset + l, low, littleEndian);\n }\n // Helpers.\n static __zero() {\n return new JSBI(0, false);\n }\n static __oneDigit(value, sign) {\n const result = new JSBI(1, sign);\n result.__setDigit(0, value);\n return result;\n }\n __copy() {\n const result = new JSBI(this.length, this.sign);\n for (let i = 0; i < this.length; i++) {\n result[i] = this[i];\n }\n return result;\n }\n __trim() {\n let newLength = this.length;\n let last = this[newLength - 1];\n while (last === 0) {\n newLength--;\n last = this[newLength - 1];\n this.pop();\n }\n if (newLength === 0)\n this.sign = false;\n return this;\n }\n __initializeDigits() {\n for (let i = 0; i < this.length; i++) {\n this[i] = 0;\n }\n }\n static __decideRounding(x, mantissaBitsUnset, digitIndex, currentDigit) {\n if (mantissaBitsUnset > 0)\n return -1;\n let topUnconsumedBit;\n if (mantissaBitsUnset < 0) {\n topUnconsumedBit = -mantissaBitsUnset - 1;\n }\n else {\n // {currentDigit} fit the mantissa exactly; look at the next digit.\n if (digitIndex === 0)\n return -1;\n digitIndex--;\n currentDigit = x.__digit(digitIndex);\n topUnconsumedBit = 29;\n }\n // If the most significant remaining bit is 0, round down.\n let mask = 1 << topUnconsumedBit;\n if ((currentDigit & mask) === 0)\n return -1;\n // If any other remaining bit is set, round up.\n mask -= 1;\n if ((currentDigit & mask) !== 0)\n return 1;\n while (digitIndex > 0) {\n digitIndex--;\n if (x.__digit(digitIndex) !== 0)\n return 1;\n }\n return 0;\n }\n static __fromDouble(value) {\n const sign = value < 0;\n JSBI.__kBitConversionDouble[0] = value;\n const rawExponent = (JSBI.__kBitConversionInts[JSBI.__kBitConversionIntHigh] >>> 20) &\n 0x7FF;\n const exponent = rawExponent - 0x3FF;\n const digits = ((exponent / 30) | 0) + 1;\n const result = new JSBI(digits, sign);\n const kHiddenBit = 0x00100000;\n let mantissaHigh = (JSBI.__kBitConversionInts[JSBI.__kBitConversionIntHigh] & 0xFFFFF) |\n kHiddenBit;\n let mantissaLow = JSBI.__kBitConversionInts[JSBI.__kBitConversionIntLow];\n const kMantissaHighTopBit = 20;\n // 0-indexed position of most significant bit in most significant digit.\n const msdTopBit = exponent % 30;\n // Number of unused bits in the mantissa. We'll keep them shifted to the\n // left (i.e. most significant part).\n let remainingMantissaBits = 0;\n // Next digit under construction.\n let digit;\n // First, build the MSD by shifting the mantissa appropriately.\n if (msdTopBit < kMantissaHighTopBit) {\n const shift = kMantissaHighTopBit - msdTopBit;\n remainingMantissaBits = shift + 32;\n digit = mantissaHigh >>> shift;\n mantissaHigh = (mantissaHigh << (32 - shift)) | (mantissaLow >>> shift);\n mantissaLow = mantissaLow << (32 - shift);\n }\n else if (msdTopBit === kMantissaHighTopBit) {\n remainingMantissaBits = 32;\n digit = mantissaHigh;\n mantissaHigh = mantissaLow;\n mantissaLow = 0;\n }\n else {\n const shift = msdTopBit - kMantissaHighTopBit;\n remainingMantissaBits = 32 - shift;\n digit = (mantissaHigh << shift) | (mantissaLow >>> (32 - shift));\n mantissaHigh = mantissaLow << shift;\n mantissaLow = 0;\n }\n result.__setDigit(digits - 1, digit);\n // Then fill in the rest of the digits.\n for (let digitIndex = digits - 2; digitIndex >= 0; digitIndex--) {\n if (remainingMantissaBits > 0) {\n remainingMantissaBits -= 30;\n digit = mantissaHigh >>> 2;\n mantissaHigh = (mantissaHigh << 30) | (mantissaLow >>> 2);\n mantissaLow = (mantissaLow << 30);\n }\n else {\n digit = 0;\n }\n result.__setDigit(digitIndex, digit);\n }\n return result.__trim();\n }\n static __isWhitespace(c) {\n if (c <= 0x0D && c >= 0x09)\n return true;\n if (c <= 0x9F)\n return c === 0x20;\n if (c <= 0x01FFFF) {\n return c === 0xA0 || c === 0x1680;\n }\n if (c <= 0x02FFFF) {\n c &= 0x01FFFF;\n return c <= 0x0A || c === 0x28 || c === 0x29 || c === 0x2F ||\n c === 0x5F || c === 0x1000;\n }\n return c === 0xFEFF;\n }\n static __fromString(string, radix = 0) {\n let sign = 0;\n let leadingZero = false;\n const length = string.length;\n let cursor = 0;\n if (cursor === length)\n return JSBI.__zero();\n let current = string.charCodeAt(cursor);\n // Skip whitespace.\n while (JSBI.__isWhitespace(current)) {\n if (++cursor === length)\n return JSBI.__zero();\n current = string.charCodeAt(cursor);\n }\n // Detect radix.\n if (current === 0x2B) { // '+'\n if (++cursor === length)\n return null;\n current = string.charCodeAt(cursor);\n sign = 1;\n }\n else if (current === 0x2D) { // '-'\n if (++cursor === length)\n return null;\n current = string.charCodeAt(cursor);\n sign = -1;\n }\n if (radix === 0) {\n radix = 10;\n if (current === 0x30) { // '0'\n if (++cursor === length)\n return JSBI.__zero();\n current = string.charCodeAt(cursor);\n if (current === 0x58 || current === 0x78) { // 'X' or 'x'\n radix = 16;\n if (++cursor === length)\n return null;\n current = string.charCodeAt(cursor);\n }\n else if (current === 0x4F || current === 0x6F) { // 'O' or 'o'\n radix = 8;\n if (++cursor === length)\n return null;\n current = string.charCodeAt(cursor);\n }\n else if (current === 0x42 || current === 0x62) { // 'B' or 'b'\n radix = 2;\n if (++cursor === length)\n return null;\n current = string.charCodeAt(cursor);\n }\n else {\n leadingZero = true;\n }\n }\n }\n else if (radix === 16) {\n if (current === 0x30) { // '0'\n // Allow \"0x\" prefix.\n if (++cursor === length)\n return JSBI.__zero();\n current = string.charCodeAt(cursor);\n if (current === 0x58 || current === 0x78) { // 'X' or 'x'\n if (++cursor === length)\n return null;\n current = string.charCodeAt(cursor);\n }\n else {\n leadingZero = true;\n }\n }\n }\n if (sign !== 0 && radix !== 10)\n return null;\n // Skip leading zeros.\n while (current === 0x30) {\n leadingZero = true;\n if (++cursor === length)\n return JSBI.__zero();\n current = string.charCodeAt(cursor);\n }\n // Allocate result.\n const chars = length - cursor;\n let bitsPerChar = JSBI.__kMaxBitsPerChar[radix];\n let roundup = JSBI.__kBitsPerCharTableMultiplier - 1;\n if (chars > (1 << 30) / bitsPerChar)\n return null;\n const bitsMin = (bitsPerChar * chars + roundup) >>> JSBI.__kBitsPerCharTableShift;\n const resultLength = ((bitsMin + 29) / 30) | 0;\n const result = new JSBI(resultLength, false);\n // Parse.\n const limDigit = radix < 10 ? radix : 10;\n const limAlpha = radix > 10 ? radix - 10 : 0;\n if ((radix & (radix - 1)) === 0) {\n // Power-of-two radix.\n bitsPerChar >>= JSBI.__kBitsPerCharTableShift;\n const parts = [];\n const partsBits = [];\n let done = false;\n do {\n let part = 0;\n let bits = 0;\n while (true) {\n let d;\n if (((current - 48) >>> 0) < limDigit) {\n d = current - 48;\n }\n else if ((((current | 32) - 97) >>> 0) < limAlpha) {\n d = (current | 32) - 87;\n }\n else {\n done = true;\n break;\n }\n bits += bitsPerChar;\n part = (part << bitsPerChar) | d;\n if (++cursor === length) {\n done = true;\n break;\n }\n current = string.charCodeAt(cursor);\n if (bits + bitsPerChar > 30)\n break;\n }\n parts.push(part);\n partsBits.push(bits);\n } while (!done);\n JSBI.__fillFromParts(result, parts, partsBits);\n }\n else {\n result.__initializeDigits();\n let done = false;\n let charsSoFar = 0;\n do {\n let part = 0;\n let multiplier = 1;\n while (true) {\n let d;\n if (((current - 48) >>> 0) < limDigit) {\n d = current - 48;\n }\n else if ((((current | 32) - 97) >>> 0) < limAlpha) {\n d = (current | 32) - 87;\n }\n else {\n done = true;\n break;\n }\n const m = multiplier * radix;\n if (m > 0x3FFFFFFF)\n break;\n multiplier = m;\n part = part * radix + d;\n charsSoFar++;\n if (++cursor === length) {\n done = true;\n break;\n }\n current = string.charCodeAt(cursor);\n }\n roundup = JSBI.__kBitsPerCharTableMultiplier * 30 - 1;\n const digitsSoFar = (((bitsPerChar * charsSoFar + roundup) >>>\n JSBI.__kBitsPerCharTableShift) / 30) | 0;\n result.__inplaceMultiplyAdd(multiplier, part, digitsSoFar);\n } while (!done);\n }\n if (cursor !== length) {\n if (!JSBI.__isWhitespace(current))\n return null;\n for (cursor++; cursor < length; cursor++) {\n current = string.charCodeAt(cursor);\n if (!JSBI.__isWhitespace(current))\n return null;\n }\n }\n // Get result.\n result.sign = (sign === -1);\n return result.__trim();\n }\n static __fillFromParts(result, parts, partsBits) {\n let digitIndex = 0;\n let digit = 0;\n let bitsInDigit = 0;\n for (let i = parts.length - 1; i >= 0; i--) {\n const part = parts[i];\n const partBits = partsBits[i];\n digit |= (part << bitsInDigit);\n bitsInDigit += partBits;\n if (bitsInDigit === 30) {\n result.__setDigit(digitIndex++, digit);\n bitsInDigit = 0;\n digit = 0;\n }\n else if (bitsInDigit > 30) {\n result.__setDigit(digitIndex++, digit & 0x3FFFFFFF);\n bitsInDigit -= 30;\n digit = part >>> (partBits - bitsInDigit);\n }\n }\n if (digit !== 0) {\n if (digitIndex >= result.length)\n throw new Error('implementation bug');\n result.__setDigit(digitIndex++, digit);\n }\n for (; digitIndex < result.length; digitIndex++) {\n result.__setDigit(digitIndex, 0);\n }\n }\n static __toStringBasePowerOfTwo(x, radix) {\n const length = x.length;\n let bits = radix - 1;\n bits = ((bits >>> 1) & 0x55) + (bits & 0x55);\n bits = ((bits >>> 2) & 0x33) + (bits & 0x33);\n bits = ((bits >>> 4) & 0x0F) + (bits & 0x0F);\n const bitsPerChar = bits;\n const charMask = radix - 1;\n const msd = x.__digit(length - 1);\n const msdLeadingZeros = JSBI.__clz30(msd);\n const bitLength = length * 30 - msdLeadingZeros;\n let charsRequired = ((bitLength + bitsPerChar - 1) / bitsPerChar) | 0;\n if (x.sign)\n charsRequired++;\n if (charsRequired > (1 << 28))\n throw new Error('string too long');\n const result = new Array(charsRequired);\n let pos = charsRequired - 1;\n let digit = 0;\n let availableBits = 0;\n for (let i = 0; i < length - 1; i++) {\n const newDigit = x.__digit(i);\n const current = (digit | (newDigit << availableBits)) & charMask;\n result[pos--] = JSBI.__kConversionChars[current];\n const consumedBits = bitsPerChar - availableBits;\n digit = newDigit >>> consumedBits;\n availableBits = 30 - consumedBits;\n while (availableBits >= bitsPerChar) {\n result[pos--] = JSBI.__kConversionChars[digit & charMask];\n digit >>>= bitsPerChar;\n availableBits -= bitsPerChar;\n }\n }\n const current = (digit | (msd << availableBits)) & charMask;\n result[pos--] = JSBI.__kConversionChars[current];\n digit = msd >>> (bitsPerChar - availableBits);\n while (digit !== 0) {\n result[pos--] = JSBI.__kConversionChars[digit & charMask];\n digit >>>= bitsPerChar;\n }\n if (x.sign)\n result[pos--] = '-';\n if (pos !== -1)\n throw new Error('implementation bug');\n return result.join('');\n }\n static __toStringGeneric(x, radix, isRecursiveCall) {\n const length = x.length;\n if (length === 0)\n return '';\n if (length === 1) {\n let result = x.__unsignedDigit(0).toString(radix);\n if (isRecursiveCall === false && x.sign) {\n result = '-' + result;\n }\n return result;\n }\n const bitLength = length * 30 - JSBI.__clz30(x.__digit(length - 1));\n const maxBitsPerChar = JSBI.__kMaxBitsPerChar[radix];\n const minBitsPerChar = maxBitsPerChar - 1;\n let charsRequired = bitLength * JSBI.__kBitsPerCharTableMultiplier;\n charsRequired += minBitsPerChar - 1;\n charsRequired = (charsRequired / minBitsPerChar) | 0;\n const secondHalfChars = (charsRequired + 1) >> 1;\n // Divide-and-conquer: split by a power of {radix} that's approximately\n // the square root of {x}, then recurse.\n const conqueror = JSBI.exponentiate(JSBI.__oneDigit(radix, false), JSBI.__oneDigit(secondHalfChars, false));\n let quotient;\n let secondHalf;\n const divisor = conqueror.__unsignedDigit(0);\n if (conqueror.length === 1 && divisor <= 0x7FFF) {\n quotient = new JSBI(x.length, false);\n quotient.__initializeDigits();\n let remainder = 0;\n for (let i = x.length * 2 - 1; i >= 0; i--) {\n const input = (remainder << 15) | x.__halfDigit(i);\n quotient.__setHalfDigit(i, (input / divisor) | 0);\n remainder = (input % divisor) | 0;\n }\n secondHalf = remainder.toString(radix);\n }\n else {\n const divisionResult = JSBI.__absoluteDivLarge(x, conqueror, true, true);\n quotient = divisionResult.quotient;\n const remainder = divisionResult.remainder.__trim();\n secondHalf = JSBI.__toStringGeneric(remainder, radix, true);\n }\n quotient.__trim();\n let firstHalf = JSBI.__toStringGeneric(quotient, radix, true);\n while (secondHalf.length < secondHalfChars) {\n secondHalf = '0' + secondHalf;\n }\n if (isRecursiveCall === false && x.sign) {\n firstHalf = '-' + firstHalf;\n }\n return firstHalf + secondHalf;\n }\n static __unequalSign(leftNegative) {\n return leftNegative ? -1 : 1;\n }\n static __absoluteGreater(bothNegative) {\n return bothNegative ? -1 : 1;\n }\n static __absoluteLess(bothNegative) {\n return bothNegative ? 1 : -1;\n }\n static __compareToBigInt(x, y) {\n const xSign = x.sign;\n if (xSign !== y.sign)\n return JSBI.__unequalSign(xSign);\n const result = JSBI.__absoluteCompare(x, y);\n if (result > 0)\n return JSBI.__absoluteGreater(xSign);\n if (result < 0)\n return JSBI.__absoluteLess(xSign);\n return 0;\n }\n static __compareToNumber(x, y) {\n if (JSBI.__isOneDigitInt(y)) {\n const xSign = x.sign;\n const ySign = (y < 0);\n if (xSign !== ySign)\n return JSBI.__unequalSign(xSign);\n if (x.length === 0) {\n if (ySign)\n throw new Error('implementation bug');\n return y === 0 ? 0 : -1;\n }\n // Any multi-digit BigInt is bigger than an int32.\n if (x.length > 1)\n return JSBI.__absoluteGreater(xSign);\n const yAbs = Math.abs(y);\n const xDigit = x.__unsignedDigit(0);\n if (xDigit > yAbs)\n return JSBI.__absoluteGreater(xSign);\n if (xDigit < yAbs)\n return JSBI.__absoluteLess(xSign);\n return 0;\n }\n return JSBI.__compareToDouble(x, y);\n }\n static __compareToDouble(x, y) {\n if (y !== y)\n return y; // NaN.\n if (y === Infinity)\n return -1;\n if (y === -Infinity)\n return 1;\n const xSign = x.sign;\n const ySign = (y < 0);\n if (xSign !== ySign)\n return JSBI.__unequalSign(xSign);\n if (y === 0) {\n throw new Error('implementation bug: should be handled elsewhere');\n }\n if (x.length === 0)\n return -1;\n JSBI.__kBitConversionDouble[0] = y;\n const rawExponent = (JSBI.__kBitConversionInts[JSBI.__kBitConversionIntHigh] >>> 20) &\n 0x7FF;\n if (rawExponent === 0x7FF) {\n throw new Error('implementation bug: handled elsewhere');\n }\n const exponent = rawExponent - 0x3FF;\n if (exponent < 0) {\n // The absolute value of y is less than 1. Only 0n has an absolute\n // value smaller than that, but we've already covered that case.\n return JSBI.__absoluteGreater(xSign);\n }\n const xLength = x.length;\n let xMsd = x.__digit(xLength - 1);\n const msdLeadingZeros = JSBI.__clz30(xMsd);\n const xBitLength = xLength * 30 - msdLeadingZeros;\n const yBitLength = exponent + 1;\n if (xBitLength < yBitLength)\n return JSBI.__absoluteLess(xSign);\n if (xBitLength > yBitLength)\n return JSBI.__absoluteGreater(xSign);\n // Same sign, same bit length. Shift mantissa to align with x and compare\n // bit for bit.\n const kHiddenBit = 0x00100000;\n let mantissaHigh = (JSBI.__kBitConversionInts[JSBI.__kBitConversionIntHigh] & 0xFFFFF) |\n kHiddenBit;\n let mantissaLow = JSBI.__kBitConversionInts[JSBI.__kBitConversionIntLow];\n const kMantissaHighTopBit = 20;\n const msdTopBit = 29 - msdLeadingZeros;\n if (msdTopBit !== (((xBitLength - 1) % 30) | 0)) {\n throw new Error('implementation bug');\n }\n let compareMantissa; // Shifted chunk of mantissa.\n let remainingMantissaBits = 0;\n // First, compare most significant digit against beginning of mantissa.\n if (msdTopBit < kMantissaHighTopBit) {\n const shift = kMantissaHighTopBit - msdTopBit;\n remainingMantissaBits = shift + 32;\n compareMantissa = mantissaHigh >>> shift;\n mantissaHigh = (mantissaHigh << (32 - shift)) | (mantissaLow >>> shift);\n mantissaLow = mantissaLow << (32 - shift);\n }\n else if (msdTopBit === kMantissaHighTopBit) {\n remainingMantissaBits = 32;\n compareMantissa = mantissaHigh;\n mantissaHigh = mantissaLow;\n mantissaLow = 0;\n }\n else {\n const shift = msdTopBit - kMantissaHighTopBit;\n remainingMantissaBits = 32 - shift;\n compareMantissa =\n (mantissaHigh << shift) | (mantissaLow >>> (32 - shift));\n mantissaHigh = mantissaLow << shift;\n mantissaLow = 0;\n }\n xMsd = xMsd >>> 0;\n compareMantissa = compareMantissa >>> 0;\n if (xMsd > compareMantissa)\n return JSBI.__absoluteGreater(xSign);\n if (xMsd < compareMantissa)\n return JSBI.__absoluteLess(xSign);\n // Then, compare additional digits against remaining mantissa bits.\n for (let digitIndex = xLength - 2; digitIndex >= 0; digitIndex--) {\n if (remainingMantissaBits > 0) {\n remainingMantissaBits -= 30;\n compareMantissa = mantissaHigh >>> 2;\n mantissaHigh = (mantissaHigh << 30) | (mantissaLow >>> 2);\n mantissaLow = (mantissaLow << 30);\n }\n else {\n compareMantissa = 0;\n }\n const digit = x.__unsignedDigit(digitIndex);\n if (digit > compareMantissa)\n return JSBI.__absoluteGreater(xSign);\n if (digit < compareMantissa)\n return JSBI.__absoluteLess(xSign);\n }\n // Integer parts are equal; check whether {y} has a fractional part.\n if (mantissaHigh !== 0 || mantissaLow !== 0) {\n if (remainingMantissaBits === 0)\n throw new Error('implementation bug');\n return JSBI.__absoluteLess(xSign);\n }\n return 0;\n }\n static __equalToNumber(x, y) {\n if (JSBI.__isOneDigitInt(y)) {\n if (y === 0)\n return x.length === 0;\n // Any multi-digit BigInt is bigger than an int32.\n return (x.length === 1) && (x.sign === (y < 0)) &&\n (x.__unsignedDigit(0) === Math.abs(y));\n }\n return JSBI.__compareToDouble(x, y) === 0;\n }\n // Comparison operations, chosen such that \"op ^ 2\" reverses direction:\n // 0 - lessThan\n // 1 - lessThanOrEqual\n // 2 - greaterThan\n // 3 - greaterThanOrEqual\n static __comparisonResultToBool(result, op) {\n switch (op) {\n case 0: return result < 0;\n case 1: return result <= 0;\n case 2: return result > 0;\n case 3: return result >= 0;\n }\n }\n static __compare(x, y, op) {\n x = JSBI.__toPrimitive(x);\n y = JSBI.__toPrimitive(y);\n if (typeof x === 'string' && typeof y === 'string') {\n switch (op) {\n case 0: return x < y;\n case 1: return x <= y;\n case 2: return x > y;\n case 3: return x >= y;\n }\n }\n if (JSBI.__isBigInt(x) && typeof y === 'string') {\n y = JSBI.__fromString(y);\n if (y === null)\n return false;\n return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(x, y), op);\n }\n if (typeof x === 'string' && JSBI.__isBigInt(y)) {\n x = JSBI.__fromString(x);\n if (x === null)\n return false;\n return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(x, y), op);\n }\n x = JSBI.__toNumeric(x);\n y = JSBI.__toNumeric(y);\n if (JSBI.__isBigInt(x)) {\n if (JSBI.__isBigInt(y)) {\n return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(x, y), op);\n }\n if (typeof y !== 'number')\n throw new Error('implementation bug');\n return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(x, y), op);\n }\n if (typeof x !== 'number')\n throw new Error('implementation bug');\n if (JSBI.__isBigInt(y)) {\n // Note that \"op ^ 2\" reverses the op's direction.\n return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(y, x), (op ^ 2));\n }\n if (typeof y !== 'number')\n throw new Error('implementation bug');\n switch (op) {\n case 0: return x < y;\n case 1: return x <= y;\n case 2: return x > y;\n case 3: return x >= y;\n }\n }\n __clzmsd() {\n return JSBI.__clz30(this.__digit(this.length - 1));\n }\n static __absoluteAdd(x, y, resultSign) {\n if (x.length < y.length)\n return JSBI.__absoluteAdd(y, x, resultSign);\n if (x.length === 0)\n return x;\n if (y.length === 0)\n return x.sign === resultSign ? x : JSBI.unaryMinus(x);\n let resultLength = x.length;\n if (x.__clzmsd() === 0 || (y.length === x.length && y.__clzmsd() === 0)) {\n resultLength++;\n }\n const result = new JSBI(resultLength, resultSign);\n let carry = 0;\n let i = 0;\n for (; i < y.length; i++) {\n const r = x.__digit(i) + y.__digit(i) + carry;\n carry = r >>> 30;\n result.__setDigit(i, r & 0x3FFFFFFF);\n }\n for (; i < x.length; i++) {\n const r = x.__digit(i) + carry;\n carry = r >>> 30;\n result.__setDigit(i, r & 0x3FFFFFFF);\n }\n if (i < result.length) {\n result.__setDigit(i, carry);\n }\n return result.__trim();\n }\n static __absoluteSub(x, y, resultSign) {\n if (x.length === 0)\n return x;\n if (y.length === 0)\n return x.sign === resultSign ? x : JSBI.unaryMinus(x);\n const result = new JSBI(x.length, resultSign);\n let borrow = 0;\n let i = 0;\n for (; i < y.length; i++) {\n const r = x.__digit(i) - y.__digit(i) - borrow;\n borrow = (r >>> 30) & 1;\n result.__setDigit(i, r & 0x3FFFFFFF);\n }\n for (; i < x.length; i++) {\n const r = x.__digit(i) - borrow;\n borrow = (r >>> 30) & 1;\n result.__setDigit(i, r & 0x3FFFFFFF);\n }\n return result.__trim();\n }\n static __absoluteAddOne(x, sign, result = null) {\n const inputLength = x.length;\n if (result === null) {\n result = new JSBI(inputLength, sign);\n }\n else {\n result.sign = sign;\n }\n let carry = 1;\n for (let i = 0; i < inputLength; i++) {\n const r = x.__digit(i) + carry;\n carry = r >>> 30;\n result.__setDigit(i, r & 0x3FFFFFFF);\n }\n if (carry !== 0) {\n result.__setDigitGrow(inputLength, 1);\n }\n return result;\n }\n static __absoluteSubOne(x, resultLength) {\n const length = x.length;\n resultLength = resultLength || length;\n const result = new JSBI(resultLength, false);\n let borrow = 1;\n for (let i = 0; i < length; i++) {\n const r = x.__digit(i) - borrow;\n borrow = (r >>> 30) & 1;\n result.__setDigit(i, r & 0x3FFFFFFF);\n }\n if (borrow !== 0)\n throw new Error('implementation bug');\n for (let i = length; i < resultLength; i++) {\n result.__setDigit(i, 0);\n }\n return result;\n }\n static __absoluteAnd(x, y, result = null) {\n let xLength = x.length;\n let yLength = y.length;\n let numPairs = yLength;\n if (xLength < yLength) {\n numPairs = xLength;\n const tmp = x;\n const tmpLength = xLength;\n x = y;\n xLength = yLength;\n y = tmp;\n yLength = tmpLength;\n }\n let resultLength = numPairs;\n if (result === null) {\n result = new JSBI(resultLength, false);\n }\n else {\n resultLength = result.length;\n }\n let i = 0;\n for (; i < numPairs; i++) {\n result.__setDigit(i, x.__digit(i) & y.__digit(i));\n }\n for (; i < resultLength; i++) {\n result.__setDigit(i, 0);\n }\n return result;\n }\n static __absoluteAndNot(x, y, result = null) {\n const xLength = x.length;\n const yLength = y.length;\n let numPairs = yLength;\n if (xLength < yLength) {\n numPairs = xLength;\n }\n let resultLength = xLength;\n if (result === null) {\n result = new JSBI(resultLength, false);\n }\n else {\n resultLength = result.length;\n }\n let i = 0;\n for (; i < numPairs; i++) {\n result.__setDigit(i, x.__digit(i) & ~y.__digit(i));\n }\n for (; i < xLength; i++) {\n result.__setDigit(i, x.__digit(i));\n }\n for (; i < resultLength; i++) {\n result.__setDigit(i, 0);\n }\n return result;\n }\n static __absoluteOr(x, y, result = null) {\n let xLength = x.length;\n let yLength = y.length;\n let numPairs = yLength;\n if (xLength < yLength) {\n numPairs = xLength;\n const tmp = x;\n const tmpLength = xLength;\n x = y;\n xLength = yLength;\n y = tmp;\n yLength = tmpLength;\n }\n let resultLength = xLength;\n if (result === null) {\n result = new JSBI(resultLength, false);\n }\n else {\n resultLength = result.length;\n }\n let i = 0;\n for (; i < numPairs; i++) {\n result.__setDigit(i, x.__digit(i) | y.__digit(i));\n }\n for (; i < xLength; i++) {\n result.__setDigit(i, x.__digit(i));\n }\n for (; i < resultLength; i++) {\n result.__setDigit(i, 0);\n }\n return result;\n }\n static __absoluteXor(x, y, result = null) {\n let xLength = x.length;\n let yLength = y.length;\n let numPairs = yLength;\n if (xLength < yLength) {\n numPairs = xLength;\n const tmp = x;\n const tmpLength = xLength;\n x = y;\n xLength = yLength;\n y = tmp;\n yLength = tmpLength;\n }\n let resultLength = xLength;\n if (result === null) {\n result = new JSBI(resultLength, false);\n }\n else {\n resultLength = result.length;\n }\n let i = 0;\n for (; i < numPairs; i++) {\n result.__setDigit(i, x.__digit(i) ^ y.__digit(i));\n }\n for (; i < xLength; i++) {\n result.__setDigit(i, x.__digit(i));\n }\n for (; i < resultLength; i++) {\n result.__setDigit(i, 0);\n }\n return result;\n }\n static __absoluteCompare(x, y) {\n const diff = x.length - y.length;\n if (diff !== 0)\n return diff;\n let i = x.length - 1;\n while (i >= 0 && x.__digit(i) === y.__digit(i))\n i--;\n if (i < 0)\n return 0;\n return x.__unsignedDigit(i) > y.__unsignedDigit(i) ? 1 : -1;\n }\n static __multiplyAccumulate(multiplicand, multiplier, accumulator, accumulatorIndex) {\n if (multiplier === 0)\n return;\n const m2Low = multiplier & 0x7FFF;\n const m2High = multiplier >>> 15;\n let carry = 0;\n let high = 0;\n for (let i = 0; i < multiplicand.length; i++, accumulatorIndex++) {\n let acc = accumulator.__digit(accumulatorIndex);\n const m1 = multiplicand.__digit(i);\n const m1Low = m1 & 0x7FFF;\n const m1High = m1 >>> 15;\n const rLow = JSBI.__imul(m1Low, m2Low);\n const rMid1 = JSBI.__imul(m1Low, m2High);\n const rMid2 = JSBI.__imul(m1High, m2Low);\n const rHigh = JSBI.__imul(m1High, m2High);\n acc += high + rLow + carry;\n carry = acc >>> 30;\n acc &= 0x3FFFFFFF;\n acc += ((rMid1 & 0x7FFF) << 15) + ((rMid2 & 0x7FFF) << 15);\n carry += acc >>> 30;\n high = rHigh + (rMid1 >>> 15) + (rMid2 >>> 15);\n accumulator.__setDigit(accumulatorIndex, acc & 0x3FFFFFFF);\n }\n for (; carry !== 0 || high !== 0; accumulatorIndex++) {\n let acc = accumulator.__digit(accumulatorIndex);\n acc += carry + high;\n high = 0;\n carry = acc >>> 30;\n accumulator.__setDigit(accumulatorIndex, acc & 0x3FFFFFFF);\n }\n }\n static __internalMultiplyAdd(source, factor, summand, n, result) {\n let carry = summand;\n let high = 0;\n for (let i = 0; i < n; i++) {\n const digit = source.__digit(i);\n const rx = JSBI.__imul(digit & 0x7FFF, factor);\n const ry = JSBI.__imul(digit >>> 15, factor);\n const r = rx + ((ry & 0x7FFF) << 15) + high + carry;\n carry = r >>> 30;\n high = ry >>> 15;\n result.__setDigit(i, r & 0x3FFFFFFF);\n }\n if (result.length > n) {\n result.__setDigit(n++, carry + high);\n while (n < result.length) {\n result.__setDigit(n++, 0);\n }\n }\n else {\n if (carry + high !== 0)\n throw new Error('implementation bug');\n }\n }\n __inplaceMultiplyAdd(multiplier, summand, length) {\n if (length > this.length)\n length = this.length;\n const mLow = multiplier & 0x7FFF;\n const mHigh = multiplier >>> 15;\n let carry = 0;\n let high = summand;\n for (let i = 0; i < length; i++) {\n const d = this.__digit(i);\n const dLow = d & 0x7FFF;\n const dHigh = d >>> 15;\n const pLow = JSBI.__imul(dLow, mLow);\n const pMid1 = JSBI.__imul(dLow, mHigh);\n const pMid2 = JSBI.__imul(dHigh, mLow);\n const pHigh = JSBI.__imul(dHigh, mHigh);\n let result = high + pLow + carry;\n carry = result >>> 30;\n result &= 0x3FFFFFFF;\n result += ((pMid1 & 0x7FFF) << 15) + ((pMid2 & 0x7FFF) << 15);\n carry += result >>> 30;\n high = pHigh + (pMid1 >>> 15) + (pMid2 >>> 15);\n this.__setDigit(i, result & 0x3FFFFFFF);\n }\n if (carry !== 0 || high !== 0) {\n throw new Error('implementation bug');\n }\n }\n static __absoluteDivSmall(x, divisor, quotient = null) {\n if (quotient === null)\n quotient = new JSBI(x.length, false);\n let remainder = 0;\n for (let i = x.length * 2 - 1; i >= 0; i -= 2) {\n let input = ((remainder << 15) | x.__halfDigit(i)) >>> 0;\n const upperHalf = (input / divisor) | 0;\n remainder = (input % divisor) | 0;\n input = ((remainder << 15) | x.__halfDigit(i - 1)) >>> 0;\n const lowerHalf = (input / divisor) | 0;\n remainder = (input % divisor) | 0;\n quotient.__setDigit(i >>> 1, (upperHalf << 15) | lowerHalf);\n }\n return quotient;\n }\n static __absoluteModSmall(x, divisor) {\n let remainder = 0;\n for (let i = x.length * 2 - 1; i >= 0; i--) {\n const input = ((remainder << 15) | x.__halfDigit(i)) >>> 0;\n remainder = (input % divisor) | 0;\n }\n return remainder;\n }\n static __absoluteDivLarge(dividend, divisor, wantQuotient, wantRemainder) {\n const n = divisor.__halfDigitLength();\n const n2 = divisor.length;\n const m = dividend.__halfDigitLength() - n;\n let q = null;\n if (wantQuotient) {\n q = new JSBI((m + 2) >>> 1, false);\n q.__initializeDigits();\n }\n const qhatv = new JSBI((n + 2) >>> 1, false);\n qhatv.__initializeDigits();\n // D1.\n const shift = JSBI.__clz15(divisor.__halfDigit(n - 1));\n if (shift > 0) {\n divisor = JSBI.__specialLeftShift(divisor, shift, 0 /* add no digits*/);\n }\n const u = JSBI.__specialLeftShift(dividend, shift, 1 /* add one digit */);\n // D2.\n const vn1 = divisor.__halfDigit(n - 1);\n let halfDigitBuffer = 0;\n for (let j = m; j >= 0; j--) {\n // D3.\n let qhat = 0x7FFF;\n const ujn = u.__halfDigit(j + n);\n if (ujn !== vn1) {\n const input = ((ujn << 15) | u.__halfDigit(j + n - 1)) >>> 0;\n qhat = (input / vn1) | 0;\n let rhat = (input % vn1) | 0;\n const vn2 = divisor.__halfDigit(n - 2);\n const ujn2 = u.__halfDigit(j + n - 2);\n while ((JSBI.__imul(qhat, vn2) >>> 0) > (((rhat << 16) | ujn2) >>> 0)) {\n qhat--;\n rhat += vn1;\n if (rhat > 0x7FFF)\n break;\n }\n }\n // D4.\n JSBI.__internalMultiplyAdd(divisor, qhat, 0, n2, qhatv);\n let c = u.__inplaceSub(qhatv, j, n + 1);\n if (c !== 0) {\n c = u.__inplaceAdd(divisor, j, n);\n u.__setHalfDigit(j + n, (u.__halfDigit(j + n) + c) & 0x7FFF);\n qhat--;\n }\n if (wantQuotient) {\n if (j & 1) {\n halfDigitBuffer = qhat << 15;\n }\n else {\n // TODO make this statically determinable\n q.__setDigit(j >>> 1, halfDigitBuffer | qhat);\n }\n }\n }\n if (wantRemainder) {\n u.__inplaceRightShift(shift);\n if (wantQuotient) {\n return { quotient: q, remainder: u };\n }\n return u;\n }\n if (wantQuotient)\n return q;\n // TODO find a way to make this statically unreachable?\n throw new Error('unreachable');\n }\n static __clz15(value) {\n return JSBI.__clz30(value) - 15;\n }\n // TODO: work on full digits, like __inplaceSub?\n __inplaceAdd(summand, startIndex, halfDigits) {\n let carry = 0;\n for (let i = 0; i < halfDigits; i++) {\n const sum = this.__halfDigit(startIndex + i) +\n summand.__halfDigit(i) +\n carry;\n carry = sum >>> 15;\n this.__setHalfDigit(startIndex + i, sum & 0x7FFF);\n }\n return carry;\n }\n __inplaceSub(subtrahend, startIndex, halfDigits) {\n const fullSteps = (halfDigits - 1) >>> 1;\n let borrow = 0;\n if (startIndex & 1) {\n // this: [..][..][..]\n // subtr.: [..][..]\n startIndex >>= 1;\n let current = this.__digit(startIndex);\n let r0 = current & 0x7FFF;\n let i = 0;\n for (; i < fullSteps; i++) {\n const sub = subtrahend.__digit(i);\n const r15 = (current >>> 15) - (sub & 0x7FFF) - borrow;\n borrow = (r15 >>> 15) & 1;\n this.__setDigit(startIndex + i, ((r15 & 0x7FFF) << 15) | (r0 & 0x7FFF));\n current = this.__digit(startIndex + i + 1);\n r0 = (current & 0x7FFF) - (sub >>> 15) - borrow;\n borrow = (r0 >>> 15) & 1;\n }\n // Unrolling the last iteration gives a 5% performance benefit!\n const sub = subtrahend.__digit(i);\n const r15 = (current >>> 15) - (sub & 0x7FFF) - borrow;\n borrow = (r15 >>> 15) & 1;\n this.__setDigit(startIndex + i, ((r15 & 0x7FFF) << 15) | (r0 & 0x7FFF));\n const subTop = sub >>> 15;\n if (startIndex + i + 1 >= this.length) {\n throw new RangeError('out of bounds');\n }\n if ((halfDigits & 1) === 0) {\n current = this.__digit(startIndex + i + 1);\n r0 = (current & 0x7FFF) - subTop - borrow;\n borrow = (r0 >>> 15) & 1;\n this.__setDigit(startIndex + subtrahend.length, (current & 0x3FFF8000) | (r0 & 0x7FFF));\n }\n }\n else {\n startIndex >>= 1;\n let i = 0;\n for (; i < subtrahend.length - 1; i++) {\n const current = this.__digit(startIndex + i);\n const sub = subtrahend.__digit(i);\n const r0 = (current & 0x7FFF) - (sub & 0x7FFF) - borrow;\n borrow = (r0 >>> 15) & 1;\n const r15 = (current >>> 15) - (sub >>> 15) - borrow;\n borrow = (r15 >>> 15) & 1;\n this.__setDigit(startIndex + i, ((r15 & 0x7FFF) << 15) | (r0 & 0x7FFF));\n }\n const current = this.__digit(startIndex + i);\n const sub = subtrahend.__digit(i);\n const r0 = (current & 0x7FFF) - (sub & 0x7FFF) - borrow;\n borrow = (r0 >>> 15) & 1;\n let r15 = 0;\n if ((halfDigits & 1) === 0) {\n r15 = (current >>> 15) - (sub >>> 15) - borrow;\n borrow = (r15 >>> 15) & 1;\n }\n this.__setDigit(startIndex + i, ((r15 & 0x7FFF) << 15) | (r0 & 0x7FFF));\n }\n return borrow;\n }\n __inplaceRightShift(shift) {\n if (shift === 0)\n return;\n let carry = this.__digit(0) >>> shift;\n const last = this.length - 1;\n for (let i = 0; i < last; i++) {\n const d = this.__digit(i + 1);\n this.__setDigit(i, ((d << (30 - shift)) & 0x3FFFFFFF) | carry);\n carry = d >>> shift;\n }\n this.__setDigit(last, carry);\n }\n static __specialLeftShift(x, shift, addDigit) {\n const n = x.length;\n const resultLength = n + addDigit;\n const result = new JSBI(resultLength, false);\n if (shift === 0) {\n for (let i = 0; i < n; i++)\n result.__setDigit(i, x.__digit(i));\n if (addDigit > 0)\n result.__setDigit(n, 0);\n return result;\n }\n let carry = 0;\n for (let i = 0; i < n; i++) {\n const d = x.__digit(i);\n result.__setDigit(i, ((d << shift) & 0x3FFFFFFF) | carry);\n carry = d >>> (30 - shift);\n }\n if (addDigit > 0) {\n result.__setDigit(n, carry);\n }\n return result;\n }\n static __leftShiftByAbsolute(x, y) {\n const shift = JSBI.__toShiftAmount(y);\n if (shift < 0)\n throw new RangeError('BigInt too big');\n const digitShift = (shift / 30) | 0;\n const bitsShift = shift % 30;\n const length = x.length;\n const grow = bitsShift !== 0 &&\n (x.__digit(length - 1) >>> (30 - bitsShift)) !== 0;\n const resultLength = length + digitShift + (grow ? 1 : 0);\n const result = new JSBI(resultLength, x.sign);\n if (bitsShift === 0) {\n let i = 0;\n for (; i < digitShift; i++)\n result.__setDigit(i, 0);\n for (; i < resultLength; i++) {\n result.__setDigit(i, x.__digit(i - digitShift));\n }\n }\n else {\n let carry = 0;\n for (let i = 0; i < digitShift; i++)\n result.__setDigit(i, 0);\n for (let i = 0; i < length; i++) {\n const d = x.__digit(i);\n result.__setDigit(i + digitShift, ((d << bitsShift) & 0x3FFFFFFF) | carry);\n carry = d >>> (30 - bitsShift);\n }\n if (grow) {\n result.__setDigit(length + digitShift, carry);\n }\n else {\n if (carry !== 0)\n throw new Error('implementation bug');\n }\n }\n return result.__trim();\n }\n static __rightShiftByAbsolute(x, y) {\n const length = x.length;\n const sign = x.sign;\n const shift = JSBI.__toShiftAmount(y);\n if (shift < 0)\n return JSBI.__rightShiftByMaximum(sign);\n const digitShift = (shift / 30) | 0;\n const bitsShift = shift % 30;\n let resultLength = length - digitShift;\n if (resultLength <= 0)\n return JSBI.__rightShiftByMaximum(sign);\n // For negative numbers, round down if any bit was shifted out (so that\n // e.g. -5n >> 1n == -3n and not -2n). Check now whether this will happen\n // and whether itc an cause overflow into a new digit. If we allocate the\n // result large enough up front, it avoids having to do grow it later.\n let mustRoundDown = false;\n if (sign) {\n const mask = (1 << bitsShift) - 1;\n if ((x.__digit(digitShift) & mask) !== 0) {\n mustRoundDown = true;\n }\n else {\n for (let i = 0; i < digitShift; i++) {\n if (x.__digit(i) !== 0) {\n mustRoundDown = true;\n break;\n }\n }\n }\n }\n // If bitsShift is non-zero, it frees up bits, preventing overflow.\n if (mustRoundDown && bitsShift === 0) {\n // Overflow cannot happen if the most significant digit has unset bits.\n const msd = x.__digit(length - 1);\n const roundingCanOverflow = ~msd === 0;\n if (roundingCanOverflow)\n resultLength++;\n }\n let result = new JSBI(resultLength, sign);\n if (bitsShift === 0) {\n // Zero out any overflow digit (see \"roundingCanOverflow\" above).\n result.__setDigit(resultLength - 1, 0);\n for (let i = digitShift; i < length; i++) {\n result.__setDigit(i - digitShift, x.__digit(i));\n }\n }\n else {\n let carry = x.__digit(digitShift) >>> bitsShift;\n const last = length - digitShift - 1;\n for (let i = 0; i < last; i++) {\n const d = x.__digit(i + digitShift + 1);\n result.__setDigit(i, ((d << (30 - bitsShift)) & 0x3FFFFFFF) | carry);\n carry = d >>> bitsShift;\n }\n result.__setDigit(last, carry);\n }\n if (mustRoundDown) {\n // Since the result is negative, rounding down means adding one to its\n // absolute value. This cannot overflow.\n result = JSBI.__absoluteAddOne(result, true, result);\n }\n return result.__trim();\n }\n static __rightShiftByMaximum(sign) {\n if (sign) {\n return JSBI.__oneDigit(1, true);\n }\n return JSBI.__zero();\n }\n static __toShiftAmount(x) {\n if (x.length > 1)\n return -1;\n const value = x.__unsignedDigit(0);\n if (value > JSBI.__kMaxLengthBits)\n return -1;\n return value;\n }\n static __toPrimitive(obj, hint = 'default') {\n if (typeof obj !== 'object')\n return obj;\n if (obj.constructor === JSBI)\n return obj;\n if (typeof Symbol !== 'undefined' &&\n typeof Symbol.toPrimitive === 'symbol') {\n if (obj[Symbol.toPrimitive]) {\n const primitive = obj[Symbol.toPrimitive](hint);\n if (typeof primitive !== 'object')\n return primitive;\n throw new TypeError('Cannot convert object to primitive value');\n }\n }\n const valueOf = obj.valueOf;\n if (valueOf) {\n const primitive = valueOf.call(obj);\n if (typeof primitive !== 'object')\n return primitive;\n }\n const toString = obj.toString;\n if (toString) {\n const primitive = toString.call(obj);\n if (typeof primitive !== 'object')\n return primitive;\n }\n throw new TypeError('Cannot convert object to primitive value');\n }\n static __toNumeric(value) {\n if (JSBI.__isBigInt(value))\n return value;\n return +value;\n }\n static __isBigInt(value) {\n return typeof value === 'object' && value !== null &&\n value.constructor === JSBI;\n }\n static __truncateToNBits(n, x) {\n const neededDigits = ((n + 29) / 30) | 0;\n const result = new JSBI(neededDigits, x.sign);\n const last = neededDigits - 1;\n for (let i = 0; i < last; i++) {\n result.__setDigit(i, x.__digit(i));\n }\n let msd = x.__digit(last);\n if ((n % 30) !== 0) {\n const drop = 32 - (n % 30);\n msd = (msd << drop) >>> drop;\n }\n result.__setDigit(last, msd);\n return result.__trim();\n }\n static __truncateAndSubFromPowerOfTwo(n, x, resultSign) {\n const neededDigits = ((n + 29) / 30) | 0;\n const result = new JSBI(neededDigits, resultSign);\n let i = 0;\n const last = neededDigits - 1;\n let borrow = 0;\n const limit = Math.min(last, x.length);\n for (; i < limit; i++) {\n const r = 0 - x.__digit(i) - borrow;\n borrow = (r >>> 30) & 1;\n result.__setDigit(i, r & 0x3FFFFFFF);\n }\n for (; i < last; i++) {\n result.__setDigit(i, (-borrow & 0x3FFFFFFF) | 0);\n }\n let msd = last < x.length ? x.__digit(last) : 0;\n const msdBitsConsumed = n % 30;\n let resultMsd;\n if (msdBitsConsumed === 0) {\n resultMsd = 0 - msd - borrow;\n resultMsd &= 0x3FFFFFFF;\n }\n else {\n const drop = 32 - msdBitsConsumed;\n msd = (msd << drop) >>> drop;\n const minuendMsd = 1 << (32 - drop);\n resultMsd = minuendMsd - msd - borrow;\n resultMsd &= (minuendMsd - 1);\n }\n result.__setDigit(last, resultMsd);\n return result.__trim();\n }\n // Digit helpers.\n __digit(i) {\n return this[i];\n }\n __unsignedDigit(i) {\n return this[i] >>> 0;\n }\n __setDigit(i, digit) {\n this[i] = digit | 0;\n }\n __setDigitGrow(i, digit) {\n this[i] = digit | 0;\n }\n __halfDigitLength() {\n const len = this.length;\n if (this.__unsignedDigit(len - 1) <= 0x7FFF)\n return len * 2 - 1;\n return len * 2;\n }\n __halfDigit(i) {\n return (this[i >>> 1] >>> ((i & 1) * 15)) & 0x7FFF;\n }\n __setHalfDigit(i, value) {\n const digitIndex = i >>> 1;\n const previous = this.__digit(digitIndex);\n const updated = (i & 1) ? (previous & 0x7FFF) | (value << 15) :\n (previous & 0x3FFF8000) | (value & 0x7FFF);\n this.__setDigit(digitIndex, updated);\n }\n static __digitPow(base, exponent) {\n let result = 1;\n while (exponent > 0) {\n if (exponent & 1)\n result *= base;\n exponent >>>= 1;\n base *= base;\n }\n return result;\n }\n static __detectBigEndian() {\n JSBI.__kBitConversionDouble[0] = -0.0;\n return JSBI.__kBitConversionInts[0] !== 0;\n }\n static __isOneDigitInt(x) {\n return (x & 0x3FFFFFFF) === x;\n }\n}\nJSBI.__kMaxLength = 1 << 25;\nJSBI.__kMaxLengthBits = JSBI.__kMaxLength << 5;\n// Lookup table for the maximum number of bits required per character of a\n// base-N string representation of a number. To increase accuracy, the array\n// value is the actual value multiplied by 32. To generate this table:\n//\n// for (let i = 0; i <= 36; i++) {\n// console.log(Math.ceil(Math.log2(i) * 32) + ',');\n// }\nJSBI.__kMaxBitsPerChar = [\n 0, 0, 32, 51, 64, 75, 83, 90, 96,\n 102, 107, 111, 115, 119, 122, 126, 128,\n 131, 134, 136, 139, 141, 143, 145, 147,\n 149, 151, 153, 154, 156, 158, 159, 160,\n 162, 163, 165, 166, // 33..36\n];\nJSBI.__kBitsPerCharTableShift = 5;\nJSBI.__kBitsPerCharTableMultiplier = 1 << JSBI.__kBitsPerCharTableShift;\nJSBI.__kConversionChars = '0123456789abcdefghijklmnopqrstuvwxyz'.split('');\nJSBI.__kBitConversionBuffer = new ArrayBuffer(8);\nJSBI.__kBitConversionDouble = new Float64Array(JSBI.__kBitConversionBuffer);\nJSBI.__kBitConversionInts = new Int32Array(JSBI.__kBitConversionBuffer);\nJSBI.__kBitConversionIntHigh = JSBI.__detectBigEndian() ? 0 : 1;\nJSBI.__kBitConversionIntLow = JSBI.__detectBigEndian() ? 1 : 0;\n// For IE11 compatibility.\n// Note that the custom replacements are tailored for JSBI's needs, and as\n// such are not reusable as general-purpose polyfills.\nJSBI.__clz30 = Math.clz32 ? function (x) {\n return Math.clz32(x) - 2;\n} : function (x) {\n if (x === 0)\n return 30;\n return 29 - (Math.log(x >>> 0) / Math.LN2 | 0) | 0;\n};\nJSBI.__imul = Math.imul || function (a, b) {\n return (a * b) | 0;\n};\nexport default JSBI;\n//# sourceMappingURL=jsbi.js.map","/**\n * @fileoverview Utilities and helpers.\n */\nconst JSBI = require('jsbi');\n\nconst utils = (module.exports = {});\n\n/**\n * Will calculate the exponent for the given decimals number.\n *\n * @param {string|number} decs The decimal number.\n * @return {bigint} The decimals exponent.\n */\nutils.expDecs = (decs) => {\n return JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(decs));\n};\n\n/**\n * Converts a value to JSBI, if it's already a JSBI will just return it.\n *\n * @param {string|number|JSBI} numstr The value to convert.\n * @return {bigint} JSBI representation of the value.\n */\nutils.biConv = (numstr) => {\n let bi = numstr;\n if (typeof sqrtRatio !== 'bigint') {\n bi = JSBI.BigInt(numstr);\n }\n return bi;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n",";(function (globalScope) {\r\n 'use strict';\r\n\r\n\r\n /*!\r\n * decimal.js v10.6.0\r\n * An arbitrary-precision Decimal type for JavaScript.\r\n * https://github.com/MikeMcl/decimal.js\r\n * Copyright (c) 2025 Michael Mclaughlin <M8ch88l@gmail.com>\r\n * MIT Licence\r\n */\r\n\r\n\r\n // ----------------------------------- EDITABLE DEFAULTS ------------------------------------ //\r\n\r\n\r\n // The maximum exponent magnitude.\r\n // The limit on the value of `toExpNeg`, `toExpPos`, `minE` and `maxE`.\r\n var EXP_LIMIT = 9e15, // 0 to 9e15\r\n\r\n // The limit on the value of `precision`, and on the value of the first argument to\r\n // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n MAX_DIGITS = 1e9, // 0 to 1e9\r\n\r\n // Base conversion alphabet.\r\n NUMERALS = '0123456789abcdef',\r\n\r\n // The natural logarithm of 10 (1025 digits).\r\n LN10 = '2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058',\r\n\r\n // Pi (1025 digits).\r\n PI = '3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789',\r\n\r\n\r\n // The initial configuration properties of the Decimal constructor.\r\n DEFAULTS = {\r\n\r\n // These values must be integers within the stated ranges (inclusive).\r\n // Most of these values can be changed at run-time using the `Decimal.config` method.\r\n\r\n // The maximum number of significant digits of the result of a calculation or base conversion.\r\n // E.g. `Decimal.config({ precision: 20 });`\r\n precision: 20, // 1 to MAX_DIGITS\r\n\r\n // The rounding mode used when rounding to `precision`.\r\n //\r\n // ROUND_UP 0 Away from zero.\r\n // ROUND_DOWN 1 Towards zero.\r\n // ROUND_CEIL 2 Towards +Infinity.\r\n // ROUND_FLOOR 3 Towards -Infinity.\r\n // ROUND_HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // ROUND_HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // ROUND_HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // ROUND_HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n //\r\n // E.g.\r\n // `Decimal.rounding = 4;`\r\n // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n rounding: 4, // 0 to 8\r\n\r\n // The modulo mode used when calculating the modulus: a mod n.\r\n // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n // The remainder (r) is calculated as: r = a - n * q.\r\n //\r\n // UP 0 The remainder is positive if the dividend is negative, else is negative.\r\n // DOWN 1 The remainder has the same sign as the dividend (JavaScript %).\r\n // FLOOR 3 The remainder has the same sign as the divisor (Python %).\r\n // HALF_EVEN 6 The IEEE 754 remainder function.\r\n // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). Always positive.\r\n //\r\n // Truncated division (1), floored division (3), the IEEE 754 remainder (6), and Euclidian\r\n // division (9) are commonly used for the modulus operation. The other rounding modes can also\r\n // be used, but they may not give useful results.\r\n modulo: 1, // 0 to 9\r\n\r\n // The exponent value at and beneath which `toString` returns exponential notation.\r\n // JavaScript numbers: -7\r\n toExpNeg: -7, // 0 to -EXP_LIMIT\r\n\r\n // The exponent value at and above which `toString` returns exponential notation.\r\n // JavaScript numbers: 21\r\n toExpPos: 21, // 0 to EXP_LIMIT\r\n\r\n // The minimum exponent value, beneath which underflow to zero occurs.\r\n // JavaScript numbers: -324 (5e-324)\r\n minE: -EXP_LIMIT, // -1 to -EXP_LIMIT\r\n\r\n // The maximum exponent value, above which overflow to Infinity occurs.\r\n // JavaScript numbers: 308 (1.7976931348623157e+308)\r\n maxE: EXP_LIMIT, // 1 to EXP_LIMIT\r\n\r\n // Whether to use cryptographically-secure random number generation, if available.\r\n crypto: false // true/false\r\n },\r\n\r\n\r\n // ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n Decimal, inexact, noConflict, quadrant,\r\n external = true,\r\n\r\n decimalError = '[DecimalError] ',\r\n invalidArgument = decimalError + 'Invalid argument: ',\r\n precisionLimitExceeded = decimalError + 'Precision limit exceeded',\r\n cryptoUnavailable = decimalError + 'crypto unavailable',\r\n tag = '[object Decimal]',\r\n\r\n mathfloor = Math.floor,\r\n mathpow = Math.pow,\r\n\r\n isBinary = /^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,\r\n isHex = /^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,\r\n isOctal = /^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,\r\n isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_SAFE_INTEGER = 9007199254740991,\r\n\r\n LN10_PRECISION = LN10.length - 1,\r\n PI_PRECISION = PI.length - 1,\r\n\r\n // Decimal.prototype object\r\n P = { toStringTag: tag };\r\n\r\n\r\n // Decimal prototype methods\r\n\r\n\r\n /*\r\n * absoluteValue abs\r\n * ceil\r\n * clampedTo clamp\r\n * comparedTo cmp\r\n * cosine cos\r\n * cubeRoot cbrt\r\n * decimalPlaces dp\r\n * dividedBy div\r\n * dividedToIntegerBy divToInt\r\n * equals eq\r\n * floor\r\n * greaterThan gt\r\n * greaterThanOrEqualTo gte\r\n * hyperbolicCosine cosh\r\n * hyperbolicSine sinh\r\n * hyperbolicTangent tanh\r\n * inverseCosine acos\r\n * inverseHyperbolicCosine acosh\r\n * inverseHyperbolicSine asinh\r\n * inverseHyperbolicTangent atanh\r\n * inverseSine asin\r\n * inverseTangent atan\r\n * isFinite\r\n * isInteger isInt\r\n * isNaN\r\n * isNegative isNeg\r\n * isPositive isPos\r\n * isZero\r\n * lessThan lt\r\n * lessThanOrEqualTo lte\r\n * logarithm log\r\n * [maximum] [max]\r\n * [minimum] [min]\r\n * minus sub\r\n * modulo mod\r\n * naturalExponential exp\r\n * naturalLogarithm ln\r\n * negated neg\r\n * plus add\r\n * precision sd\r\n * round\r\n * sine sin\r\n * squareRoot sqrt\r\n * tangent tan\r\n * times mul\r\n * toBinary\r\n * toDecimalPlaces toDP\r\n * toExponential\r\n * toFixed\r\n * toFraction\r\n * toHexadecimal toHex\r\n * toNearest\r\n * toNumber\r\n * toOctal\r\n * toPower pow\r\n * toPrecision\r\n * toSignificantDigits toSD\r\n * toString\r\n * truncated trunc\r\n * valueOf toJSON\r\n */\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\r\n P.absoluteValue = P.abs = function () {\r\n var x = new this.constructor(this);\r\n if (x.s < 0) x.s = 1;\r\n return finalise(x);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of positive Infinity.\r\n *\r\n */\r\n P.ceil = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 2);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal clamped to the range\r\n * delineated by `min` and `max`.\r\n *\r\n * min {number|string|bigint|Decimal}\r\n * max {number|string|bigint|Decimal}\r\n *\r\n */\r\n P.clampedTo = P.clamp = function (min, max) {\r\n var k,\r\n x = this,\r\n Ctor = x.constructor;\r\n min = new Ctor(min);\r\n max = new Ctor(max);\r\n if (!min.s || !max.s) return new Ctor(NaN);\r\n if (min.gt(max)) throw Error(invalidArgument + max);\r\n k = x.cmp(min);\r\n return k < 0 ? min : x.cmp(max) > 0 ? max : new Ctor(x);\r\n };\r\n\r\n\r\n /*\r\n * Return\r\n * 1 if the value of this Decimal is greater than the value of `y`,\r\n * -1 if the value of this Decimal is less than the value of `y`,\r\n * 0 if they have the same value,\r\n * NaN if the value of either Decimal is NaN.\r\n *\r\n */\r\n P.comparedTo = P.cmp = function (y) {\r\n var i, j, xdL, ydL,\r\n x = this,\r\n xd = x.d,\r\n yd = (y = new x.constructor(y)).d,\r\n xs = x.s,\r\n ys = y.s;\r\n\r\n // Either NaN or ±Infinity?\r\n if (!xd || !yd) {\r\n return !xs || !ys ? NaN : xs !== ys ? xs : xd === yd ? 0 : !xd ^ xs < 0 ? 1 : -1;\r\n }\r\n\r\n // Either zero?\r\n if (!xd[0] || !yd[0]) return xd[0] ? xs : yd[0] ? -ys : 0;\r\n\r\n // Signs differ?\r\n if (xs !== ys) return xs;\r\n\r\n // Compare exponents.\r\n if (x.e !== y.e) return x.e > y.e ^ xs < 0 ? 1 : -1;\r\n\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Compare digit by digit.\r\n for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n if (xd[i] !== yd[i]) return xd[i] > yd[i] ^ xs < 0 ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return xdL === ydL ? 0 : xdL > ydL ^ xs < 0 ? 1 : -1;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the cosine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * cos(0) = 1\r\n * cos(-0) = 1\r\n * cos(Infinity) = NaN\r\n * cos(-Infinity) = NaN\r\n * cos(NaN) = NaN\r\n *\r\n */\r\n P.cosine = P.cos = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.d) return new Ctor(NaN);\r\n\r\n // cos(0) = cos(-0) = 1\r\n if (!x.d[0]) return new Ctor(1);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n Ctor.rounding = 1;\r\n\r\n x = cosine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant == 2 || quadrant == 3 ? x.neg() : x, pr, rm, true);\r\n };\r\n\r\n\r\n /*\r\n *\r\n * Return a new Decimal whose value is the cube root of the value of this Decimal, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * cbrt(0) = 0\r\n * cbrt(-0) = -0\r\n * cbrt(1) = 1\r\n * cbrt(-1) = -1\r\n * cbrt(N) = N\r\n * cbrt(-I) = -I\r\n * cbrt(I) = I\r\n *\r\n * Math.cbrt(x) = (x < 0 ? -Math.pow(-x, 1/3) : Math.pow(x, 1/3))\r\n *\r\n */\r\n P.cubeRoot = P.cbrt = function () {\r\n var e, m, n, r, rep, s, sd, t, t3, t3plusx,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = x.s * mathpow(x.s * x, 1 / 3);\r\n\r\n // Math.cbrt underflow/overflow?\r\n // Pass x to Math.pow as integer, then adjust the exponent of the result.\r\n if (!s || Math.abs(s) == 1 / 0) {\r\n n = digitsToString(x.d);\r\n e = x.e;\r\n\r\n // Adjust n exponent so it is a multiple of 3 away from x exponent.\r\n if (s = (e - n.length + 1) % 3) n += (s == 1 || s == -2 ? '0' : '00');\r\n s = mathpow(n, 1 / 3);\r\n\r\n // Rarely, e may be one less than the result exponent value.\r\n e = mathfloor((e + 1) / 3) - (e % 3 == (e < 0 ? -1 : 2));\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new Ctor(n);\r\n r.s = x.s;\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n sd = (e = Ctor.precision) + 3;\r\n\r\n // Halley's method.\r\n // TODO? Compare Newton's method.\r\n for (;;) {\r\n t = r;\r\n t3 = t.times(t).times(t);\r\n t3plusx = t3.plus(x);\r\n r = divide(t3plusx.plus(x).times(t), t3plusx.plus(t3), sd + 2, 1);\r\n\r\n // TODO? Replace with for-loop and checkRoundingDigits.\r\n if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n n = n.slice(sd - 3, sd + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or 4999\r\n // , i.e. approaching a rounding boundary, continue the iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the exact result as the\r\n // nines may infinitely repeat.\r\n if (!rep) {\r\n finalise(t, e + 1, 0);\r\n\r\n if (t.times(t).times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n sd += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n // If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n finalise(r, e + 1, 1);\r\n m = !r.times(r).times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, e, Ctor.rounding, m);\r\n };\r\n\r\n\r\n /*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\r\n P.decimalPlaces = P.dp = function () {\r\n var w,\r\n d = this.d,\r\n n = NaN;\r\n\r\n if (d) {\r\n w = d.length - 1;\r\n n = (w - mathfloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n w = d[w];\r\n if (w) for (; w % 10 == 0; w /= 10) n--;\r\n if (n < 0) n = 0;\r\n }\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * n / 0 = I\r\n * n / N = N\r\n * n / I = 0\r\n * 0 / n = 0\r\n * 0 / 0 = N\r\n * 0 / N = N\r\n * 0 / I = 0\r\n * N / n = N\r\n * N / 0 = N\r\n * N / N = N\r\n * N / I = N\r\n * I / n = I\r\n * I / 0 = I\r\n * I / N = N\r\n * I / I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal divided by `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\n P.dividedBy = P.div = function (y) {\r\n return divide(this, new this.constructor(y));\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of `y`, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\n P.dividedToIntegerBy = P.divToInt = function (y) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n return finalise(divide(x, new Ctor(y), 0, 1, 1), Ctor.precision, Ctor.rounding);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n *\r\n */\r\n P.equals = P.eq = function (y) {\r\n return this.cmp(y) === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of negative Infinity.\r\n *\r\n */\r\n P.floor = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 3);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n * false.\r\n *\r\n */\r\n P.greaterThan = P.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n * otherwise return false.\r\n *\r\n */\r\n P.greaterThanOrEqualTo = P.gte = function (y) {\r\n var k = this.cmp(y);\r\n return k == 1 || k === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the hyperbolic cosine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [1, Infinity]\r\n *\r\n * cosh(x) = 1 + x^2/2! + x^4/4! + x^6/6! + ...\r\n *\r\n * cosh(0) = 1\r\n * cosh(-0) = 1\r\n * cosh(Infinity) = Infinity\r\n * cosh(-Infinity) = Infinity\r\n * cosh(NaN) = NaN\r\n *\r\n * x time taken (ms) result\r\n * 1000 9 9.8503555700852349694e+433\r\n * 10000 25 4.4034091128314607936e+4342\r\n * 100000 171 1.4033316802130615897e+43429\r\n * 1000000 3817 1.5166076984010437725e+434294\r\n * 10000000 abandoned after 2 minute wait\r\n *\r\n * TODO? Compare performance of cosh(x) = 0.5 * (exp(x) + exp(-x))\r\n *\r\n */\r\n P.hyperbolicCosine = P.cosh = function () {\r\n var k, n, pr, rm, len,\r\n x = this,\r\n Ctor = x.constructor,\r\n one = new Ctor(1);\r\n\r\n if (!x.isFinite()) return new Ctor(x.s ? 1 / 0 : NaN);\r\n if (x.isZero()) return one;\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n len = x.d.length;\r\n\r\n // Argument reduction: cos(4x) = 1 - 8cos^2(x) + 8cos^4(x) + 1\r\n // i.e. cos(x) = 1 - cos^2(x/4)(8 - 8cos^2(x/4))\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n // TODO? Estimation reused from cosine() and may not be optimal here.\r\n if (len < 32) {\r\n k = Math.ceil(len / 3);\r\n n = (1 / tinyPow(4, k)).toString();\r\n } else {\r\n k = 16;\r\n n = '2.3283064365386962890625e-10';\r\n }\r\n\r\n x = taylorSeries(Ctor, 1, x.times(n), new Ctor(1), true);\r\n\r\n // Reverse argument reduction\r\n var cosh2_x,\r\n i = k,\r\n d8 = new Ctor(8);\r\n for (; i--;) {\r\n cosh2_x = x.times(x);\r\n x = one.minus(cosh2_x.times(d8.minus(cosh2_x.times(d8))));\r\n }\r\n\r\n return finalise(x, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the hyperbolic sine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * sinh(x) = x + x^3/3! + x^5/5! + x^7/7! + ...\r\n *\r\n * sinh(0) = 0\r\n * sinh(-0) = -0\r\n * sinh(Infinity) = Infinity\r\n * sinh(-Infinity) = -Infinity\r\n * sinh(NaN) = NaN\r\n *\r\n * x time taken (ms)\r\n * 10 2 ms\r\n * 100 5 ms\r\n * 1000 14 ms\r\n * 10000 82 ms\r\n * 100000 886 ms 1.4033316802130615897e+43429\r\n * 200000 2613 ms\r\n * 300000 5407 ms\r\n * 400000 8824 ms\r\n * 500000 13026 ms 8.7080643612718084129e+217146\r\n * 1000000 48543 ms\r\n *\r\n * TODO? Compare performance of sinh(x) = 0.5 * (exp(x) - exp(-x))\r\n *\r\n */\r\n P.hyperbolicSine = P.sinh = function () {\r\n var k, pr, rm, len,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n len = x.d.length;\r\n\r\n if (len < 3) {\r\n x = taylorSeries(Ctor, 2, x, x, true);\r\n } else {\r\n\r\n // Alternative argument reduction: sinh(3x) = sinh(x)(3 + 4sinh^2(x))\r\n // i.e. sinh(x) = sinh(x/3)(3 + 4sinh^2(x/3))\r\n // 3 multiplications and 1 addition\r\n\r\n // Argument reduction: sinh(5x) = sinh(x)(5 + sinh^2(x)(20 + 16sinh^2(x)))\r\n // i.e. sinh(x) = sinh(x/5)(5 + sinh^2(x/5)(20 + 16sinh^2(x/5)))\r\n // 4 multiplications and 2 additions\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n k = 1.4 * Math.sqrt(len);\r\n k = k > 16 ? 16 : k | 0;\r\n\r\n x = x.times(1 / tinyPow(5, k));\r\n x = taylorSeries(Ctor, 2, x, x, true);\r\n\r\n // Reverse argument reduction\r\n var sinh2_x,\r\n d5 = new Ctor(5),\r\n d16 = new Ctor(16),\r\n d20 = new Ctor(20);\r\n for (; k--;) {\r\n sinh2_x = x.times(x);\r\n x = x.times(d5.plus(sinh2_x.times(d16.times(sinh2_x).plus(d20))));\r\n }\r\n }\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(x, pr, rm, true);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the hyperbolic tangent of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * tanh(x) = sinh(x) / cosh(x)\r\n *\r\n * tanh(0) = 0\r\n * tanh(-0) = -0\r\n * tanh(Infinity) = 1\r\n * tanh(-Infinity) = -1\r\n * tanh(NaN) = NaN\r\n *\r\n */\r\n P.hyperbolicTangent = P.tanh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(x.s);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 7;\r\n Ctor.rounding = 1;\r\n\r\n return divide(x.sinh(), x.cosh(), Ctor.precision = pr, Ctor.rounding = rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the arccosine (inverse cosine) in radians of the value of\r\n * this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [0, pi]\r\n *\r\n * acos(x) = pi/2 - asin(x)\r\n *\r\n * acos(0) = pi/2\r\n * acos(-0) = pi/2\r\n * acos(1) = 0\r\n * acos(-1) = pi\r\n * acos(1/2) = pi/3\r\n * acos(-1/2) = 2*pi/3\r\n * acos(|x| > 1) = NaN\r\n * acos(NaN) = NaN\r\n *\r\n */\r\n P.inverseCosine = P.acos = function () {\r\n var x = this,\r\n Ctor = x.constructor,\r\n k = x.abs().cmp(1),\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding;\r\n\r\n if (k !== -1) {\r\n return k === 0\r\n // |x| is 1\r\n ? x.isNeg() ? getPi(Ctor, pr, rm) : new Ctor(0)\r\n // |x| > 1 or x is NaN\r\n : new Ctor(NaN);\r\n }\r\n\r\n if (x.isZero()) return getPi(Ctor, pr + 4, rm).times(0.5);\r\n\r\n // TODO? Special case acos(0.5) = pi/3 and acos(-0.5) = 2*pi/3\r\n\r\n Ctor.precision = pr + 6;\r\n Ctor.rounding = 1;\r\n\r\n // See https://github.com/MikeMcl/decimal.js/pull/217\r\n x = new Ctor(1).minus(x).div(x.plus(1)).sqrt().atan();\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.times(2);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [1, Infinity]\r\n * Range: [0, Infinity]\r\n *\r\n * acosh(x) = ln(x + sqrt(x^2 - 1))\r\n *\r\n * acosh(x < 1) = NaN\r\n * acosh(NaN) = NaN\r\n * acosh(Infinity) = Infinity\r\n * acosh(-Infinity) = NaN\r\n * acosh(0) = NaN\r\n * acosh(-0) = NaN\r\n * acosh(1) = 0\r\n * acosh(-1) = NaN\r\n *\r\n */\r\n P.inverseHyperbolicCosine = P.acosh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (x.lte(1)) return new Ctor(x.eq(1) ? 0 : NaN);\r\n if (!x.isFinite()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(Math.abs(x.e), x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n external = false;\r\n\r\n x = x.times(x).minus(1).sqrt().plus(x);\r\n\r\n external = true;\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.ln();\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * asinh(x) = ln(x + sqrt(x^2 + 1))\r\n *\r\n * asinh(NaN) = NaN\r\n * asinh(Infinity) = Infinity\r\n * asinh(-Infinity) = -Infinity\r\n * asinh(0) = 0\r\n * asinh(-0) = -0\r\n *\r\n */\r\n P.inverseHyperbolicSine = P.asinh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 2 * Math.max(Math.abs(x.e), x.sd()) + 6;\r\n Ctor.rounding = 1;\r\n external = false;\r\n\r\n x = x.times(x).plus(1).sqrt().plus(x);\r\n\r\n external = true;\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.ln();\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * atanh(x) = 0.5 * ln((1 + x) / (1 - x))\r\n *\r\n * atanh(|x| > 1) = NaN\r\n * atanh(NaN) = NaN\r\n * atanh(Infinity) = NaN\r\n * atanh(-Infinity) = NaN\r\n * atanh(0) = 0\r\n * atanh(-0) = -0\r\n * atanh(1) = Infinity\r\n * atanh(-1) = -Infinity\r\n *\r\n */\r\n P.inverseHyperbolicTangent = P.atanh = function () {\r\n var pr, rm, wpr, xsd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.e >= 0) return new Ctor(x.abs().eq(1) ? x.s / 0 : x.isZero() ? x : NaN);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n xsd = x.sd();\r\n\r\n if (Math.max(xsd, pr) < 2 * -x.e - 1) return finalise(new Ctor(x), pr, rm, true);\r\n\r\n Ctor.precision = wpr = xsd - x.e;\r\n\r\n x = divide(x.plus(1), new Ctor(1).minus(x), wpr + pr, 1);\r\n\r\n Ctor.precision = pr + 4;\r\n Ctor.rounding = 1;\r\n\r\n x = x.ln();\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.times(0.5);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the arcsine (inverse sine) in radians of the value of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * asin(x) = 2*atan(x/(1 + sqrt(1 - x^2)))\r\n *\r\n * asin(0) = 0\r\n * asin(-0) = -0\r\n * asin(1/2) = pi/6\r\n * asin(-1/2) = -pi/6\r\n * asin(1) = pi/2\r\n * asin(-1) = -pi/2\r\n * asin(|x| > 1) = NaN\r\n * asin(NaN) = NaN\r\n *\r\n * TODO? Compare performance of Taylor series.\r\n *\r\n */\r\n P.inverseSine = P.asin = function () {\r\n var halfPi, k,\r\n pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n k = x.abs().cmp(1);\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n if (k !== -1) {\r\n\r\n // |x| is 1\r\n if (k === 0) {\r\n halfPi = getPi(Ctor, pr + 4, rm).times(0.5);\r\n halfPi.s = x.s;\r\n return halfPi;\r\n }\r\n\r\n // |x| > 1 or x is NaN\r\n return new Ctor(NaN);\r\n }\r\n\r\n // TODO? Special case asin(1/2) = pi/6 and asin(-1/2) = -pi/6\r\n\r\n Ctor.precision = pr + 6;\r\n Ctor.rounding = 1;\r\n\r\n x = x.div(new Ctor(1).minus(x.times(x)).sqrt().plus(1)).atan();\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.times(2);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the arctangent (inverse tangent) in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n *\r\n * atan(0) = 0\r\n * atan(-0) = -0\r\n * atan(1) = pi/4\r\n * atan(-1) = -pi/4\r\n * atan(Infinity) = pi/2\r\n * atan(-Infinity) = -pi/2\r\n * atan(NaN) = NaN\r\n *\r\n */\r\n P.inverseTangent = P.atan = function () {\r\n var i, j, k, n, px, t, r, wpr, x2,\r\n x = this,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding;\r\n\r\n if (!x.isFinite()) {\r\n if (!x.s) return new Ctor(NaN);\r\n if (pr + 4 <= PI_PRECISION) {\r\n r = getPi(Ctor, pr + 4, rm).times(0.5);\r\n r.s = x.s;\r\n return r;\r\n }\r\n } else if (x.isZero()) {\r\n return new Ctor(x);\r\n } else if (x.abs().eq(1) && pr + 4 <= PI_PRECISION) {\r\n r = getPi(Ctor, pr + 4, rm).times(0.25);\r\n r.s = x.s;\r\n return r;\r\n }\r\n\r\n Ctor.precision = wpr = pr + 10;\r\n Ctor.rounding = 1;\r\n\r\n // TODO? if (x >= 1 && pr <= PI_PRECISION) atan(x) = halfPi * x.s - atan(1 / x);\r\n\r\n // Argument reduction\r\n // Ensure |x| < 0.42\r\n // atan(x) = 2 * atan(x / (1 + sqrt(1 + x^2)))\r\n\r\n k = Math.min(28, wpr / LOG_BASE + 2 | 0);\r\n\r\n for (i = k; i; --i) x = x.div(x.times(x).plus(1).sqrt().plus(1));\r\n\r\n external = false;\r\n\r\n j = Math.ceil(wpr / LOG_BASE);\r\n n = 1;\r\n x2 = x.times(x);\r\n r = new Ctor(x);\r\n px = x;\r\n\r\n // atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n for (; i !== -1;) {\r\n px = px.times(x2);\r\n t = r.minus(px.div(n += 2));\r\n\r\n px = px.times(x2);\r\n r = t.plus(px.div(n += 2));\r\n\r\n if (r.d[j] !== void 0) for (i = j; r.d[i] === t.d[i] && i--;);\r\n }\r\n\r\n if (k) r = r.times(2 << (k - 1));\r\n\r\n external = true;\r\n\r\n return finalise(r, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is a finite number, otherwise return false.\r\n *\r\n */\r\n P.isFinite = function () {\r\n return !!this.d;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\r\n P.isInteger = P.isInt = function () {\r\n return !!this.d && mathfloor(this.e / LOG_BASE) > this.d.length - 2;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is NaN, otherwise return false.\r\n *\r\n */\r\n P.isNaN = function () {\r\n return !this.s;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\r\n P.isNegative = P.isNeg = function () {\r\n return this.s < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\r\n P.isPositive = P.isPos = function () {\r\n return this.s > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is 0 or -0, otherwise return false.\r\n *\r\n */\r\n P.isZero = function () {\r\n return !!this.d && this.d[0] === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n *\r\n */\r\n P.lessThan = P.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n *\r\n */\r\n P.lessThanOrEqualTo = P.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n };\r\n\r\n\r\n /*\r\n * Return the logarithm of the value of this Decimal to the specified base, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * If no base is specified, return log[10](arg).\r\n *\r\n * log[base](arg) = ln(arg) / ln(base)\r\n *\r\n * The result will always be correctly rounded if the base of the log is 10, and 'almost always'\r\n * otherwise:\r\n *\r\n * Depending on the rounding mode, the result may be incorrectly rounded if the first fifteen\r\n * rounding digits are [49]99999999999999 or [50]00000000000000. In that case, the maximum error\r\n * between the result and the correctly rounded result will be one ulp (unit in the last place).\r\n *\r\n * log[-b](a) = NaN\r\n * log[0](a) = NaN\r\n * log[1](a) = NaN\r\n * log[NaN](a) = NaN\r\n * log[Infinity](a) = NaN\r\n * log[b](0) = -Infinity\r\n * log[b](-0) = -Infinity\r\n * log[b](-a) = NaN\r\n * log[b](1) = 0\r\n * log[b](Infinity) = Infinity\r\n * log[b](NaN) = NaN\r\n *\r\n * [base] {number|string|bigint|Decimal} The base of the logarithm.\r\n *\r\n */\r\n P.logarithm = P.log = function (base) {\r\n var isBase10, d, denominator, k, inf, num, sd, r,\r\n arg = this,\r\n Ctor = arg.constructor,\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding,\r\n guard = 5;\r\n\r\n // Default base is 10.\r\n if (base == null) {\r\n base = new Ctor(10);\r\n isBase10 = true;\r\n } else {\r\n base = new Ctor(base);\r\n d = base.d;\r\n\r\n // Return NaN if base is negative, or non-finite, or is 0 or 1.\r\n if (base.s < 0 || !d || !d[0] || base.eq(1)) return new Ctor(NaN);\r\n\r\n isBase10 = base.eq(10);\r\n }\r\n\r\n d = arg.d;\r\n\r\n // Is arg negative, non-finite, 0 or 1?\r\n if (arg.s < 0 || !d || !d[0] || arg.eq(1)) {\r\n return new Ctor(d && !d[0] ? -1 / 0 : arg.s != 1 ? NaN : d ? 0 : 1 / 0);\r\n }\r\n\r\n // The result will have a non-terminating decimal expansion if base is 10 and arg is not an\r\n // integer power of 10.\r\n if (isBase10) {\r\n if (d.length > 1) {\r\n inf = true;\r\n } else {\r\n for (k = d[0]; k % 10 === 0;) k /= 10;\r\n inf = k !== 1;\r\n }\r\n }\r\n\r\n external = false;\r\n sd = pr + guard;\r\n num = naturalLogarithm(arg, sd);\r\n denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n\r\n // The result will have 5 rounding digits.\r\n r = divide(num, denominator, sd, 1);\r\n\r\n // If at a rounding boundary, i.e. the result's rounding digits are [49]9999 or [50]0000,\r\n // calculate 10 further digits.\r\n //\r\n // If the result is known to have an infinite decimal expansion, repeat this until it is clear\r\n // that the result is above or below the boundary. Otherwise, if after calculating the 10\r\n // further digits, the last 14 are nines, round up and assume the result is exact.\r\n // Also assume the result is exact if the last 14 are zero.\r\n //\r\n // Example of a result that will be incorrectly rounded:\r\n // log[1048576](4503599627370502) = 2.60000000000000009610279511444746...\r\n // The above result correctly rounded using ROUND_CEIL to 1 decimal place should be 2.7, but it\r\n // will be given as 2.6 as there are 15 zeros immediately after the requested decimal place, so\r\n // the exact result would be assumed to be 2.6, which rounded using ROUND_CEIL to 1 decimal\r\n // place is still 2.6.\r\n if (checkRoundingDigits(r.d, k = pr, rm)) {\r\n\r\n do {\r\n sd += 10;\r\n num = naturalLogarithm(arg, sd);\r\n denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n r = divide(num, denominator, sd, 1);\r\n\r\n if (!inf) {\r\n\r\n // Check for 14 nines from the 2nd rounding digit, as the first may be 4.\r\n if (+digitsToString(r.d).slice(k + 1, k + 15) + 1 == 1e14) {\r\n r = finalise(r, pr + 1, 0);\r\n }\r\n\r\n break;\r\n }\r\n } while (checkRoundingDigits(r.d, k += 10, rm));\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, pr, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the maximum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n P.max = function () {\r\n Array.prototype.push.call(arguments, this);\r\n return maxOrMin(this.constructor, arguments, -1);\r\n };\r\n */\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the minimum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n P.min = function () {\r\n Array.prototype.push.call(arguments, this);\r\n return maxOrMin(this.constructor, arguments, 1);\r\n };\r\n */\r\n\r\n\r\n /*\r\n * n - 0 = n\r\n * n - N = N\r\n * n - I = -I\r\n * 0 - n = -n\r\n * 0 - 0 = 0\r\n * 0 - N = N\r\n * 0 - I = -I\r\n * N - n = N\r\n * N - 0 = N\r\n * N - N = N\r\n * N - I = N\r\n * I - n = I\r\n * I - 0 = I\r\n * I - N = N\r\n * I - I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal minus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\n P.minus = P.sub = function (y) {\r\n var d, e, i, j, k, len, pr, rm, xd, xe, xLTy, yd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // If either is not finite...\r\n if (!x.d || !y.d) {\r\n\r\n // Return NaN if either is NaN.\r\n if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n // Return y negated if x is finite and y is ±Infinity.\r\n else if (x.d) y.s = -y.s;\r\n\r\n // Return x if y is finite and x is ±Infinity.\r\n // Return x if both are ±Infinity with different signs.\r\n // Return NaN if both are ±Infinity with the same sign.\r\n else y = new Ctor(y.d || x.s !== y.s ? x : NaN);\r\n\r\n return y;\r\n }\r\n\r\n // If signs differ...\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.plus(y);\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n // If either is zero...\r\n if (!xd[0] || !yd[0]) {\r\n\r\n // Return y negated if x is zero and y is non-zero.\r\n if (yd[0]) y.s = -y.s;\r\n\r\n // Return x if y is zero and x is non-zero.\r\n else if (xd[0]) y = new Ctor(x);\r\n\r\n // Return zero if both are zero.\r\n // From IEEE 754 (2008) 6.3: 0 - 0 = -0 - -0 = -0 when rounding to -Infinity.\r\n else return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n }\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n // Calculate base 1e7 exponents.\r\n e = mathfloor(y.e / LOG_BASE);\r\n xe = mathfloor(x.e / LOG_BASE);\r\n\r\n xd = xd.slice();\r\n k = xe - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (k) {\r\n xLTy = k < 0;\r\n\r\n if (xLTy) {\r\n d = xd;\r\n k = -k;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = xe;\r\n len = xd.length;\r\n }\r\n\r\n // Numbers with massively different exponents would result in a very high number of\r\n // zeros needing to be prepended, but this can be avoided while still ensuring correct\r\n // rounding by limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n if (k > i) {\r\n k = i;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents.\r\n d.reverse();\r\n for (i = k; i--;) d.push(0);\r\n d.reverse();\r\n\r\n // Base 1e7 exponents equal.\r\n } else {\r\n\r\n // Check digits to determine which is the bigger number.\r\n\r\n i = xd.length;\r\n len = yd.length;\r\n xLTy = i < len;\r\n if (xLTy) len = i;\r\n\r\n for (i = 0; i < len; i++) {\r\n if (xd[i] != yd[i]) {\r\n xLTy = xd[i] < yd[i];\r\n break;\r\n }\r\n }\r\n\r\n k = 0;\r\n }\r\n\r\n if (xLTy) {\r\n d = xd;\r\n xd = yd;\r\n yd = d;\r\n y.s = -y.s;\r\n }\r\n\r\n len = xd.length;\r\n\r\n // Append zeros to `xd` if shorter.\r\n // Don't add zeros to `yd` if shorter as subtraction only needs to start at `yd` length.\r\n for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n // Subtract yd from xd.\r\n for (i = yd.length; i > k;) {\r\n\r\n if (xd[--i] < yd[i]) {\r\n for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n --xd[j];\r\n xd[i] += BASE;\r\n }\r\n\r\n xd[i] -= yd[i];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] === 0;) xd.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n // Zero?\r\n if (!xd[0]) return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n y.d = xd;\r\n y.e = getBase10Exponent(xd, e);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n };\r\n\r\n\r\n /*\r\n * n % 0 = N\r\n * n % N = N\r\n * n % I = n\r\n * 0 % n = 0\r\n * -0 % n = -0\r\n * 0 % 0 = N\r\n * 0 % N = N\r\n * 0 % I = 0\r\n * N % n = N\r\n * N % 0 = N\r\n * N % N = N\r\n * N % I = N\r\n * I % n = N\r\n * I % 0 = N\r\n * I % N = N\r\n * I % I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal modulo `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * The result depends on the modulo mode.\r\n *\r\n */\r\n P.modulo = P.mod = function (y) {\r\n var q,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // Return NaN if x is ±Infinity or NaN, or y is NaN or ±0.\r\n if (!x.d || !y.s || y.d && !y.d[0]) return new Ctor(NaN);\r\n\r\n // Return x if y is ±Infinity or x is ±0.\r\n if (!y.d || x.d && !x.d[0]) {\r\n return finalise(new Ctor(x), Ctor.precision, Ctor.rounding);\r\n }\r\n\r\n // Prevent rounding of intermediate calculations.\r\n external = false;\r\n\r\n if (Ctor.modulo == 9) {\r\n\r\n // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n // result = x - q * y where 0 <= result < abs(y)\r\n q = divide(x, y.abs(), 0, 3, 1);\r\n q.s *= y.s;\r\n } else {\r\n q = divide(x, y, 0, Ctor.modulo, 1);\r\n }\r\n\r\n q = q.times(y);\r\n\r\n external = true;\r\n\r\n return x.minus(q);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\n P.naturalExponential = P.exp = function () {\r\n return naturalExponential(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\n P.naturalLogarithm = P.ln = function () {\r\n return naturalLogarithm(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\r\n P.negated = P.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s;\r\n return finalise(x);\r\n };\r\n\r\n\r\n /*\r\n * n + 0 = n\r\n * n + N = N\r\n * n + I = I\r\n * 0 + n = n\r\n * 0 + 0 = 0\r\n * 0 + N = N\r\n * 0 + I = I\r\n * N + n = N\r\n * N + 0 = N\r\n * N + N = N\r\n * N + I = N\r\n * I + n = I\r\n * I + 0 = I\r\n * I + N = N\r\n * I + I = I\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal plus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\n P.plus = P.add = function (y) {\r\n var carry, d, e, i, k, len, pr, rm, xd, yd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // If either is not finite...\r\n if (!x.d || !y.d) {\r\n\r\n // Return NaN if either is NaN.\r\n if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n // Return x if y is finite and x is ±Infinity.\r\n // Return x if both are ±Infinity with the same sign.\r\n // Return NaN if both are ±Infinity with different signs.\r\n // Return y if x is finite and y is ±Infinity.\r\n else if (!x.d) y = new Ctor(y.d || x.s === y.s ? x : NaN);\r\n\r\n return y;\r\n }\r\n\r\n // If signs differ...\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.minus(y);\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n // If either is zero...\r\n if (!xd[0] || !yd[0]) {\r\n\r\n // Return x if y is zero.\r\n // Return y if y is non-zero.\r\n if (!yd[0]) y = new Ctor(x);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n }\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n // Calculate base 1e7 exponents.\r\n k = mathfloor(x.e / LOG_BASE);\r\n e = mathfloor(y.e / LOG_BASE);\r\n\r\n xd = xd.slice();\r\n i = k - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (i) {\r\n\r\n if (i < 0) {\r\n d = xd;\r\n i = -i;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = k;\r\n len = xd.length;\r\n }\r\n\r\n // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n k = Math.ceil(pr / LOG_BASE);\r\n len = k > len ? k + 1 : len + 1;\r\n\r\n if (i > len) {\r\n i = len;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n d.reverse();\r\n for (; i--;) d.push(0);\r\n d.reverse();\r\n }\r\n\r\n len = xd.length;\r\n i = yd.length;\r\n\r\n // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n if (len - i < 0) {\r\n i = len;\r\n d = yd;\r\n yd = xd;\r\n xd = d;\r\n }\r\n\r\n // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n for (carry = 0; i;) {\r\n carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n xd[i] %= BASE;\r\n }\r\n\r\n if (carry) {\r\n xd.unshift(carry);\r\n ++e;\r\n }\r\n\r\n // Remove trailing zeros.\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n y.d = xd;\r\n y.e = getBase10Exponent(xd, e);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\r\n P.precision = P.sd = function (z) {\r\n var k,\r\n x = this;\r\n\r\n if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n if (x.d) {\r\n k = getPrecision(x.d);\r\n if (z && x.e + 1 > k) k = x.e + 1;\r\n } else {\r\n k = NaN;\r\n }\r\n\r\n return k;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode `rounding`.\r\n *\r\n */\r\n P.round = function () {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n return finalise(new Ctor(x), x.e + 1, Ctor.rounding);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the sine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n *\r\n * sin(0) = 0\r\n * sin(-0) = -0\r\n * sin(Infinity) = NaN\r\n * sin(-Infinity) = NaN\r\n * sin(NaN) = NaN\r\n *\r\n */\r\n P.sine = P.sin = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n Ctor.rounding = 1;\r\n\r\n x = sine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant > 2 ? x.neg() : x, pr, rm, true);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the square root of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * sqrt(-n) = N\r\n * sqrt(N) = N\r\n * sqrt(-I) = N\r\n * sqrt(I) = I\r\n * sqrt(0) = 0\r\n * sqrt(-0) = -0\r\n *\r\n */\r\n P.squareRoot = P.sqrt = function () {\r\n var m, n, sd, r, rep, t,\r\n x = this,\r\n d = x.d,\r\n e = x.e,\r\n s = x.s,\r\n Ctor = x.constructor;\r\n\r\n // Negative/NaN/Infinity/zero?\r\n if (s !== 1 || !d || !d[0]) {\r\n return new Ctor(!s || s < 0 && (!d || d[0]) ? NaN : d ? x : 1 / 0);\r\n }\r\n\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+x);\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = digitsToString(d);\r\n\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(n);\r\n e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new Ctor(n);\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n sd = (e = Ctor.precision) + 3;\r\n\r\n // Newton-Raphson iteration.\r\n for (;;) {\r\n t = r;\r\n r = t.plus(divide(x, t, sd + 2, 1)).times(0.5);\r\n\r\n // TODO? Replace with for-loop and checkRoundingDigits.\r\n if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n n = n.slice(sd - 3, sd + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the exact result as the\r\n // nines may infinitely repeat.\r\n if (!rep) {\r\n finalise(t, e + 1, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n sd += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n // If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n finalise(r, e + 1, 1);\r\n m = !r.times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, e, Ctor.rounding, m);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the tangent of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * tan(0) = 0\r\n * tan(-0) = -0\r\n * tan(Infinity) = NaN\r\n * tan(-Infinity) = NaN\r\n * tan(NaN) = NaN\r\n *\r\n */\r\n P.tangent = P.tan = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 10;\r\n Ctor.rounding = 1;\r\n\r\n x = x.sin();\r\n x.s = 1;\r\n x = divide(x, new Ctor(1).minus(x.times(x)).sqrt(), pr + 10, 0);\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant == 2 || quadrant == 4 ? x.neg() : x, pr, rm, true);\r\n };\r\n\r\n\r\n /*\r\n * n * 0 = 0\r\n * n * N = N\r\n * n * I = I\r\n * 0 * n = 0\r\n * 0 * 0 = 0\r\n * 0 * N = N\r\n * 0 * I = N\r\n * N * n = N\r\n * N * 0 = N\r\n * N * N = N\r\n * N * I = N\r\n * I * n = I\r\n * I * 0 = N\r\n * I * N = N\r\n * I * I = I\r\n *\r\n * Return a new Decimal whose value is this Decimal times `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n */\r\n P.times = P.mul = function (y) {\r\n var carry, e, i, k, r, rL, t, xdL, ydL,\r\n x = this,\r\n Ctor = x.constructor,\r\n xd = x.d,\r\n yd = (y = new Ctor(y)).d;\r\n\r\n y.s *= x.s;\r\n\r\n // If either is NaN, ±Infinity or ±0...\r\n if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n return new Ctor(!y.s || xd && !xd[0] && !yd || yd && !yd[0] && !xd\r\n\r\n // Return NaN if either is NaN.\r\n // Return NaN if x is ±0 and y is ±Infinity, or y is ±0 and x is ±Infinity.\r\n ? NaN\r\n\r\n // Return ±Infinity if either is ±Infinity.\r\n // Return ±0 if either is ±0.\r\n : !xd || !yd ? y.s / 0 : y.s * 0);\r\n }\r\n\r\n e = mathfloor(x.e / LOG_BASE) + mathfloor(y.e / LOG_BASE);\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Ensure xd points to the longer array.\r\n if (xdL < ydL) {\r\n r = xd;\r\n xd = yd;\r\n yd = r;\r\n rL = xdL;\r\n xdL = ydL;\r\n ydL = rL;\r\n }\r\n\r\n // Initialise the result array with zeros.\r\n r = [];\r\n rL = xdL + ydL;\r\n for (i = rL; i--;) r.push(0);\r\n\r\n // Multiply!\r\n for (i = ydL; --i >= 0;) {\r\n carry = 0;\r\n for (k = xdL + i; k > i;) {\r\n t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n r[k--] = t % BASE | 0;\r\n carry = t / BASE | 0;\r\n }\r\n\r\n r[k] = (r[k] + carry) % BASE | 0;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; !r[--rL];) r.pop();\r\n\r\n if (carry) ++e;\r\n else r.shift();\r\n\r\n y.d = r;\r\n y.e = getBase10Exponent(r, e);\r\n\r\n return external ? finalise(y, Ctor.precision, Ctor.rounding) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal in base 2, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toBinary = function (sd, rm) {\r\n return toStringBinary(this, 2, sd, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n *\r\n * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toDecimalPlaces = P.toDP = function (dp, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n if (dp === void 0) return x;\r\n\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n return finalise(x, dp + x.e + 1, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * `dp` fixed decimal places using rounding mode `rounding`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toExponential = function (dp, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = finiteToString(x, true);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = finalise(new Ctor(x), dp + 1, rm);\r\n str = finiteToString(x, true, dp + 1);\r\n }\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\r\n P.toFixed = function (dp, rm) {\r\n var str, y,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = finiteToString(x);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n y = finalise(new Ctor(x), dp + x.e + 1, rm);\r\n str = finiteToString(y, false, dp + y.e + 1);\r\n }\r\n\r\n // To determine whether to add the minus sign look at the value before it was rounded,\r\n // i.e. look at `x` rather than `y`.\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n };\r\n\r\n\r\n /*\r\n * Return an array representing the value of this Decimal as a simple fraction with an integer\r\n * numerator and an integer denominator.\r\n *\r\n * The denominator will be a positive non-zero value less than or equal to the specified maximum\r\n * denominator. If a maximum denominator is not specified, the denominator will be the lowest\r\n * value necessary to represent the number exactly.\r\n *\r\n * [maxD] {number|string|bigint|Decimal} Maximum denominator. Integer >= 1 and < Infinity.\r\n *\r\n */\r\n P.toFraction = function (maxD) {\r\n var d, d0, d1, d2, e, k, n, n0, n1, pr, q, r,\r\n x = this,\r\n xd = x.d,\r\n Ctor = x.constructor;\r\n\r\n if (!xd) return new Ctor(x);\r\n\r\n n1 = d0 = new Ctor(1);\r\n d1 = n0 = new Ctor(0);\r\n\r\n d = new Ctor(d1);\r\n e = d.e = getPrecision(xd) - x.e - 1;\r\n k = e % LOG_BASE;\r\n d.d[0] = mathpow(10, k < 0 ? LOG_BASE + k : k);\r\n\r\n if (maxD == null) {\r\n\r\n // d is 10**e, the minimum max-denominator needed.\r\n maxD = e > 0 ? d : n1;\r\n } else {\r\n n = new Ctor(maxD);\r\n if (!n.isInt() || n.lt(n1)) throw Error(invalidArgument + n);\r\n maxD = n.gt(d) ? (e > 0 ? d : n1) : n;\r\n }\r\n\r\n external = false;\r\n n = new Ctor(digitsToString(xd));\r\n pr = Ctor.precision;\r\n Ctor.precision = e = xd.length * LOG_BASE * 2;\r\n\r\n for (;;) {\r\n q = divide(n, d, 0, 1, 1);\r\n d2 = d0.plus(q.times(d1));\r\n if (d2.cmp(maxD) == 1) break;\r\n d0 = d1;\r\n d1 = d2;\r\n d2 = n1;\r\n n1 = n0.plus(q.times(d2));\r\n n0 = d2;\r\n d2 = d;\r\n d = n.minus(q.times(d2));\r\n n = d2;\r\n }\r\n\r\n d2 = divide(maxD.minus(d0), d1, 0, 1, 1);\r\n n0 = n0.plus(d2.times(n1));\r\n d0 = d0.plus(d2.times(d1));\r\n n0.s = n1.s = x.s;\r\n\r\n // Determine which fraction is closer to x, n0/d0 or n1/d1?\r\n r = divide(n1, d1, e, 1).minus(x).abs().cmp(divide(n0, d0, e, 1).minus(x).abs()) < 1\r\n ? [n1, d1] : [n0, d0];\r\n\r\n Ctor.precision = pr;\r\n external = true;\r\n\r\n return r;\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal in base 16, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toHexadecimal = P.toHex = function (sd, rm) {\r\n return toStringBinary(this, 16, sd, rm);\r\n };\r\n\r\n\r\n /*\r\n * Returns a new Decimal whose value is the nearest multiple of `y` in the direction of rounding\r\n * mode `rm`, or `Decimal.rounding` if `rm` is omitted, to the value of this Decimal.\r\n *\r\n * The return value will always have the same sign as this Decimal, unless either this Decimal\r\n * or `y` is NaN, in which case the return value will be also be NaN.\r\n *\r\n * The return value is not affected by the value of `precision`.\r\n *\r\n * y {number|string|bigint|Decimal} The magnitude to round to a multiple of.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toNearest() rounding mode not an integer: {rm}'\r\n * 'toNearest() rounding mode out of range: {rm}'\r\n *\r\n */\r\n P.toNearest = function (y, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n\r\n if (y == null) {\r\n\r\n // If x is not finite, return x.\r\n if (!x.d) return x;\r\n\r\n y = new Ctor(1);\r\n rm = Ctor.rounding;\r\n } else {\r\n y = new Ctor(y);\r\n if (rm === void 0) {\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(rm, 0, 8);\r\n }\r\n\r\n // If x is not finite, return x if y is not NaN, else NaN.\r\n if (!x.d) return y.s ? x : y;\r\n\r\n // If y is not finite, return Infinity with the sign of x if y is Infinity, else NaN.\r\n if (!y.d) {\r\n if (y.s) y.s = x.s;\r\n return y;\r\n }\r\n }\r\n\r\n // If y is not zero, calculate the nearest multiple of y to x.\r\n if (y.d[0]) {\r\n external = false;\r\n x = divide(x, y, 0, rm, 1).times(y);\r\n external = true;\r\n finalise(x);\r\n\r\n // If y is zero, return zero with the sign of x.\r\n } else {\r\n y.s = x.s;\r\n x = y;\r\n }\r\n\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return the value of this Decimal converted to a number primitive.\r\n * Zero keeps its sign.\r\n *\r\n */\r\n P.toNumber = function () {\r\n return +this;\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal in base 8, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toOctal = function (sd, rm) {\r\n return toStringBinary(this, 8, sd, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power `y`, rounded\r\n * to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * ECMAScript compliant.\r\n *\r\n * pow(x, NaN) = NaN\r\n * pow(x, ±0) = 1\r\n\r\n * pow(NaN, non-zero) = NaN\r\n * pow(abs(x) > 1, +Infinity) = +Infinity\r\n * pow(abs(x) > 1, -Infinity) = +0\r\n * pow(abs(x) == 1, ±Infinity) = NaN\r\n * pow(abs(x) < 1, +Infinity) = +0\r\n * pow(abs(x) < 1, -Infinity) = +Infinity\r\n * pow(+Infinity, y > 0) = +Infinity\r\n * pow(+Infinity, y < 0) = +0\r\n * pow(-Infinity, odd integer > 0) = -Infinity\r\n * pow(-Infinity, even integer > 0) = +Infinity\r\n * pow(-Infinity, odd integer < 0) = -0\r\n * pow(-Infinity, even integer < 0) = +0\r\n * pow(+0, y > 0) = +0\r\n * pow(+0, y < 0) = +Infinity\r\n * pow(-0, odd integer > 0) = -0\r\n * pow(-0, even integer > 0) = +0\r\n * pow(-0, odd integer < 0) = -Infinity\r\n * pow(-0, even integer < 0) = +Infinity\r\n * pow(finite x < 0, finite non-integer) = NaN\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n * x^y = exp(y*ln(x))\r\n *\r\n * Assuming the first 15 rounding digits are each equally likely to be any digit 0-9, the\r\n * probability of an incorrectly rounded result\r\n * P([49]9{14} | [50]0{14}) = 2 * 0.2 * 10^-14 = 4e-15 = 1/2.5e+14\r\n * i.e. 1 in 250,000,000,000,000\r\n *\r\n * If a result is incorrectly rounded the maximum error will be 1 ulp (unit in last place).\r\n *\r\n * y {number|string|bigint|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\r\n P.toPower = P.pow = function (y) {\r\n var e, k, pr, r, rm, s,\r\n x = this,\r\n Ctor = x.constructor,\r\n yn = +(y = new Ctor(y));\r\n\r\n // Either ±Infinity, NaN or ±0?\r\n if (!x.d || !y.d || !x.d[0] || !y.d[0]) return new Ctor(mathpow(+x, yn));\r\n\r\n x = new Ctor(x);\r\n\r\n if (x.eq(1)) return x;\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n if (y.eq(1)) return finalise(x, pr, rm);\r\n\r\n // y exponent\r\n e = mathfloor(y.e / LOG_BASE);\r\n\r\n // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n if (e >= y.d.length - 1 && (k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n r = intPow(Ctor, x, k, pr);\r\n return y.s < 0 ? new Ctor(1).div(r) : finalise(r, pr, rm);\r\n }\r\n\r\n s = x.s;\r\n\r\n // if x is negative\r\n if (s < 0) {\r\n\r\n // if y is not an integer\r\n if (e < y.d.length - 1) return new Ctor(NaN);\r\n\r\n // Result is positive if x is negative and the last digit of integer y is even.\r\n if ((y.d[e] & 1) == 0) s = 1;\r\n\r\n // if x.eq(-1)\r\n if (x.e == 0 && x.d[0] == 1 && x.d.length == 1) {\r\n x.s = s;\r\n return x;\r\n }\r\n }\r\n\r\n // Estimate result exponent.\r\n // x^y = 10^e, where e = y * log10(x)\r\n // log10(x) = log10(x_significand) + x_exponent\r\n // log10(x_significand) = ln(x_significand) / ln(10)\r\n k = mathpow(+x, yn);\r\n e = k == 0 || !isFinite(k)\r\n ? mathfloor(yn * (Math.log('0.' + digitsToString(x.d)) / Math.LN10 + x.e + 1))\r\n : new Ctor(k + '').e;\r\n\r\n // Exponent estimate may be incorrect e.g. x: 0.999999999999999999, y: 2.29, e: 0, r.e: -1.\r\n\r\n // Overflow/underflow?\r\n if (e > Ctor.maxE + 1 || e < Ctor.minE - 1) return new Ctor(e > 0 ? s / 0 : 0);\r\n\r\n external = false;\r\n Ctor.rounding = x.s = 1;\r\n\r\n // Estimate the extra guard digits needed to ensure five correct rounding digits from\r\n // naturalLogarithm(x). Example of failure without these extra digits (precision: 10):\r\n // new Decimal(2.32456).pow('2087987436534566.46411')\r\n // should be 1.162377823e+764914905173815, but is 1.162355823e+764914905173815\r\n k = Math.min(12, (e + '').length);\r\n\r\n // r = x^y = exp(y*ln(x))\r\n r = naturalExponential(y.times(naturalLogarithm(x, pr + k)), pr);\r\n\r\n // r may be Infinity, e.g. (0.9999999999999999).pow(-1e+40)\r\n if (r.d) {\r\n\r\n // Truncate to the required precision plus five rounding digits.\r\n r = finalise(r, pr + 5, 1);\r\n\r\n // If the rounding digits are [49]9999 or [50]0000 increase the precision by 10 and recalculate\r\n // the result.\r\n if (checkRoundingDigits(r.d, pr, rm)) {\r\n e = pr + 10;\r\n\r\n // Truncate to the increased precision plus five rounding digits.\r\n r = finalise(naturalExponential(y.times(naturalLogarithm(x, e + k)), e), e + 5, 1);\r\n\r\n // Check for 14 nines from the 2nd rounding digit (the first rounding digit may be 4 or 9).\r\n if (+digitsToString(r.d).slice(pr + 1, pr + 15) + 1 == 1e14) {\r\n r = finalise(r, pr + 1, 0);\r\n }\r\n }\r\n }\r\n\r\n r.s = s;\r\n external = true;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(r, pr, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * Return exponential notation if `sd` is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toPrecision = function (sd, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = finalise(new Ctor(x), sd, rm);\r\n str = finiteToString(x, sd <= x.e || x.e <= Ctor.toExpNeg, sd);\r\n }\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toSD() digits out of range: {sd}'\r\n * 'toSD() digits not an integer: {sd}'\r\n * 'toSD() rounding mode not an integer: {rm}'\r\n * 'toSD() rounding mode out of range: {rm}'\r\n *\r\n */\r\n P.toSignificantDigits = P.toSD = function (sd, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n }\r\n\r\n return finalise(new Ctor(x), sd, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n *\r\n */\r\n P.toString = function () {\r\n var x = this,\r\n Ctor = x.constructor,\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal truncated to a whole number.\r\n *\r\n */\r\n P.truncated = P.trunc = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal.\r\n * Unlike `toString`, negative zero will include the minus sign.\r\n *\r\n */\r\n P.valueOf = P.toJSON = function () {\r\n var x = this,\r\n Ctor = x.constructor,\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n return x.isNeg() ? '-' + str : str;\r\n };\r\n\r\n\r\n // Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n /*\r\n * digitsToString P.cubeRoot, P.logarithm, P.squareRoot, P.toFraction, P.toPower,\r\n * finiteToString, naturalExponential, naturalLogarithm\r\n * checkInt32 P.toDecimalPlaces, P.toExponential, P.toFixed, P.toNearest,\r\n * P.toPrecision, P.toSignificantDigits, toStringBinary, random\r\n * checkRoundingDigits P.logarithm, P.toPower, naturalExponential, naturalLogarithm\r\n * convertBase toStringBinary, parseOther\r\n * cos P.cos\r\n * divide P.atanh, P.cubeRoot, P.dividedBy, P.dividedToIntegerBy,\r\n * P.logarithm, P.modulo, P.squareRoot, P.tan, P.tanh, P.toFraction,\r\n * P.toNearest, toStringBinary, naturalExponential, naturalLogarithm,\r\n * taylorSeries, atan2, parseOther\r\n * finalise P.absoluteValue, P.atan, P.atanh, P.ceil, P.cos, P.cosh,\r\n * P.cubeRoot, P.dividedToIntegerBy, P.floor, P.logarithm, P.minus,\r\n * P.modulo, P.negated, P.plus, P.round, P.sin, P.sinh, P.squareRoot,\r\n * P.tan, P.times, P.toDecimalPlaces, P.toExponential, P.toFixed,\r\n * P.toNearest, P.toPower, P.toPrecision, P.toSignificantDigits,\r\n * P.truncated, divide, getLn10, getPi, naturalExponential,\r\n * naturalLogarithm, ceil, floor, round, trunc\r\n * finiteToString P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf,\r\n * toStringBinary\r\n * getBase10Exponent P.minus, P.plus, P.times, parseOther\r\n * getLn10 P.logarithm, naturalLogarithm\r\n * getPi P.acos, P.asin, P.atan, toLessThanHalfPi, atan2\r\n * getPrecision P.precision, P.toFraction\r\n * getZeroString digitsToString, finiteToString\r\n * intPow P.toPower, parseOther\r\n * isOdd toLessThanHalfPi\r\n * maxOrMin max, min\r\n * naturalExponential P.naturalExponential, P.toPower\r\n * naturalLogarithm P.acosh, P.asinh, P.atanh, P.logarithm, P.naturalLogarithm,\r\n * P.toPower, naturalExponential\r\n * nonFiniteToString finiteToString, toStringBinary\r\n * parseDecimal Decimal\r\n * parseOther Decimal\r\n * sin P.sin\r\n * taylorSeries P.cosh, P.sinh, cos, sin\r\n * toLessThanHalfPi P.cos, P.sin\r\n * toStringBinary P.toBinary, P.toHexadecimal, P.toOctal\r\n * truncate intPow\r\n *\r\n * Throws: P.logarithm, P.precision, P.toFraction, checkInt32, getLn10, getPi,\r\n * naturalLogarithm, config, parseOther, random, Decimal\r\n */\r\n\r\n\r\n function digitsToString(d) {\r\n var i, k, ws,\r\n indexOfLastWord = d.length - 1,\r\n str = '',\r\n w = d[0];\r\n\r\n if (indexOfLastWord > 0) {\r\n str += w;\r\n for (i = 1; i < indexOfLastWord; i++) {\r\n ws = d[i] + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n str += ws;\r\n }\r\n\r\n w = d[i];\r\n ws = w + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n } else if (w === 0) {\r\n return '0';\r\n }\r\n\r\n // Remove trailing zeros of last w.\r\n for (; w % 10 === 0;) w /= 10;\r\n\r\n return str + w;\r\n }\r\n\r\n\r\n function checkInt32(i, min, max) {\r\n if (i !== ~~i || i < min || i > max) {\r\n throw Error(invalidArgument + i);\r\n }\r\n }\r\n\r\n\r\n /*\r\n * Check 5 rounding digits if `repeating` is null, 4 otherwise.\r\n * `repeating == null` if caller is `log` or `pow`,\r\n * `repeating != null` if caller is `naturalLogarithm` or `naturalExponential`.\r\n */\r\n function checkRoundingDigits(d, i, rm, repeating) {\r\n var di, k, r, rd;\r\n\r\n // Get the length of the first word of the array d.\r\n for (k = d[0]; k >= 10; k /= 10) --i;\r\n\r\n // Is the rounding digit in the first word of d?\r\n if (--i < 0) {\r\n i += LOG_BASE;\r\n di = 0;\r\n } else {\r\n di = Math.ceil((i + 1) / LOG_BASE);\r\n i %= LOG_BASE;\r\n }\r\n\r\n // i is the index (0 - 6) of the rounding digit.\r\n // E.g. if within the word 3487563 the first rounding digit is 5,\r\n // then i = 4, k = 1000, rd = 3487563 % 1000 = 563\r\n k = mathpow(10, LOG_BASE - i);\r\n rd = d[di] % k | 0;\r\n\r\n if (repeating == null) {\r\n if (i < 3) {\r\n if (i == 0) rd = rd / 100 | 0;\r\n else if (i == 1) rd = rd / 10 | 0;\r\n r = rm < 4 && rd == 99999 || rm > 3 && rd == 49999 || rd == 50000 || rd == 0;\r\n } else {\r\n r = (rm < 4 && rd + 1 == k || rm > 3 && rd + 1 == k / 2) &&\r\n (d[di + 1] / k / 100 | 0) == mathpow(10, i - 2) - 1 ||\r\n (rd == k / 2 || rd == 0) && (d[di + 1] / k / 100 | 0) == 0;\r\n }\r\n } else {\r\n if (i < 4) {\r\n if (i == 0) rd = rd / 1000 | 0;\r\n else if (i == 1) rd = rd / 100 | 0;\r\n else if (i == 2) rd = rd / 10 | 0;\r\n r = (repeating || rm < 4) && rd == 9999 || !repeating && rm > 3 && rd == 4999;\r\n } else {\r\n r = ((repeating || rm < 4) && rd + 1 == k ||\r\n (!repeating && rm > 3) && rd + 1 == k / 2) &&\r\n (d[di + 1] / k / 1000 | 0) == mathpow(10, i - 3) - 1;\r\n }\r\n }\r\n\r\n return r;\r\n }\r\n\r\n\r\n // Convert string of `baseIn` to an array of numbers of `baseOut`.\r\n // Eg. convertBase('255', 10, 16) returns [15, 15].\r\n // Eg. convertBase('ff', 16, 10) returns [2, 5, 5].\r\n function convertBase(str, baseIn, baseOut) {\r\n var j,\r\n arr = [0],\r\n arrL,\r\n i = 0,\r\n strL = str.length;\r\n\r\n for (; i < strL;) {\r\n for (arrL = arr.length; arrL--;) arr[arrL] *= baseIn;\r\n arr[0] += NUMERALS.indexOf(str.charAt(i++));\r\n for (j = 0; j < arr.length; j++) {\r\n if (arr[j] > baseOut - 1) {\r\n if (arr[j + 1] === void 0) arr[j + 1] = 0;\r\n arr[j + 1] += arr[j] / baseOut | 0;\r\n arr[j] %= baseOut;\r\n }\r\n }\r\n }\r\n\r\n return arr.reverse();\r\n }\r\n\r\n\r\n /*\r\n * cos(x) = 1 - x^2/2! + x^4/4! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\n function cosine(Ctor, x) {\r\n var k, len, y;\r\n\r\n if (x.isZero()) return x;\r\n\r\n // Argument reduction: cos(4x) = 8*(cos^4(x) - cos^2(x)) + 1\r\n // i.e. cos(x) = 8*(cos^4(x/4) - cos^2(x/4)) + 1\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n len = x.d.length;\r\n if (len < 32) {\r\n k = Math.ceil(len / 3);\r\n y = (1 / tinyPow(4, k)).toString();\r\n } else {\r\n k = 16;\r\n y = '2.3283064365386962890625e-10';\r\n }\r\n\r\n Ctor.precision += k;\r\n\r\n x = taylorSeries(Ctor, 1, x.times(y), new Ctor(1));\r\n\r\n // Reverse argument reduction\r\n for (var i = k; i--;) {\r\n var cos2x = x.times(x);\r\n x = cos2x.times(cos2x).minus(cos2x).times(8).plus(1);\r\n }\r\n\r\n Ctor.precision -= k;\r\n\r\n return x;\r\n }\r\n\r\n\r\n /*\r\n * Perform division in the specified base.\r\n */\r\n var divide = (function () {\r\n\r\n // Assumes non-zero x and k, and hence non-zero result.\r\n function multiplyInteger(x, k, base) {\r\n var temp,\r\n carry = 0,\r\n i = x.length;\r\n\r\n for (x = x.slice(); i--;) {\r\n temp = x[i] * k + carry;\r\n x[i] = temp % base | 0;\r\n carry = temp / base | 0;\r\n }\r\n\r\n if (carry) x.unshift(carry);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, r;\r\n\r\n if (aL != bL) {\r\n r = aL > bL ? 1 : -1;\r\n } else {\r\n for (i = r = 0; i < aL; i++) {\r\n if (a[i] != b[i]) {\r\n r = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return r;\r\n }\r\n\r\n function subtract(a, b, aL, base) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * base + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1;) a.shift();\r\n }\r\n\r\n return function (x, y, pr, rm, dp, base) {\r\n var cmp, e, i, k, logBase, more, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0,\r\n yL, yz,\r\n Ctor = x.constructor,\r\n sign = x.s == y.s ? 1 : -1,\r\n xd = x.d,\r\n yd = y.d;\r\n\r\n // Either NaN, Infinity or 0?\r\n if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n return new Ctor(// Return NaN if either NaN, or both Infinity or 0.\r\n !x.s || !y.s || (xd ? yd && xd[0] == yd[0] : !yd) ? NaN :\r\n\r\n // Return ±0 if x is 0 or y is ±Infinity, or return ±Infinity as y is 0.\r\n xd && xd[0] == 0 || !yd ? sign * 0 : sign / 0);\r\n }\r\n\r\n if (base) {\r\n logBase = 1;\r\n e = x.e - y.e;\r\n } else {\r\n base = BASE;\r\n logBase = LOG_BASE;\r\n e = mathfloor(x.e / logBase) - mathfloor(y.e / logBase);\r\n }\r\n\r\n yL = yd.length;\r\n xL = xd.length;\r\n q = new Ctor(sign);\r\n qd = q.d = [];\r\n\r\n // Result exponent may be one less than e.\r\n // The digit array of a Decimal from toStringBinary may have trailing zeros.\r\n for (i = 0; yd[i] == (xd[i] || 0); i++);\r\n\r\n if (yd[i] > (xd[i] || 0)) e--;\r\n\r\n if (pr == null) {\r\n sd = pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else if (dp) {\r\n sd = pr + (x.e - y.e) + 1;\r\n } else {\r\n sd = pr;\r\n }\r\n\r\n if (sd < 0) {\r\n qd.push(1);\r\n more = true;\r\n } else {\r\n\r\n // Convert precision in number of base 10 digits to base 1e7 digits.\r\n sd = sd / logBase + 2 | 0;\r\n i = 0;\r\n\r\n // divisor < 1e7\r\n if (yL == 1) {\r\n k = 0;\r\n yd = yd[0];\r\n sd++;\r\n\r\n // k is the carry.\r\n for (; (i < xL || k) && sd--; i++) {\r\n t = k * base + (xd[i] || 0);\r\n qd[i] = t / yd | 0;\r\n k = t % yd | 0;\r\n }\r\n\r\n more = k || i < xL;\r\n\r\n // divisor >= 1e7\r\n } else {\r\n\r\n // Normalise xd and yd so highest order digit of yd is >= base/2\r\n k = base / (yd[0] + 1) | 0;\r\n\r\n if (k > 1) {\r\n yd = multiplyInteger(yd, k, base);\r\n xd = multiplyInteger(xd, k, base);\r\n yL = yd.length;\r\n xL = xd.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xd.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL;) rem[remL++] = 0;\r\n\r\n yz = yd.slice();\r\n yz.unshift(0);\r\n yd0 = yd[0];\r\n\r\n if (yd[1] >= base / 2) ++yd0;\r\n\r\n do {\r\n k = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, k.\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n // k will be how many times the divisor goes into the current remainder.\r\n k = rem0 / yd0 | 0;\r\n\r\n // Algorithm:\r\n // 1. product = divisor * trial digit (k)\r\n // 2. if product > remainder: product -= divisor, k--\r\n // 3. remainder -= product\r\n // 4. if product was < remainder at 2:\r\n // 5. compare new remainder and divisor\r\n // 6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n if (k > 1) {\r\n if (k >= base) k = base - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiplyInteger(yd, k, base);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n cmp = compare(prod, rem, prodL, remL);\r\n\r\n // product > remainder.\r\n if (cmp == 1) {\r\n k--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yd, prodL, base);\r\n }\r\n } else {\r\n\r\n // cmp is -1.\r\n // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n if (k == 0) cmp = k = 1;\r\n prod = yd.slice();\r\n }\r\n\r\n prodL = prod.length;\r\n if (prodL < remL) prod.unshift(0);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL, base);\r\n\r\n // If product was < previous remainder.\r\n if (cmp == -1) {\r\n remL = rem.length;\r\n\r\n // Compare divisor and new remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n if (cmp < 1) {\r\n k++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yd, remL, base);\r\n }\r\n }\r\n\r\n remL = rem.length;\r\n } else if (cmp === 0) {\r\n k++;\r\n rem = [0];\r\n } // if cmp === 1, k will be 0\r\n\r\n // Add the next digit, k, to the result array.\r\n qd[i++] = k;\r\n\r\n // Update the remainder.\r\n if (cmp && rem[0]) {\r\n rem[remL++] = xd[xi] || 0;\r\n } else {\r\n rem = [xd[xi]];\r\n remL = 1;\r\n }\r\n\r\n } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n\r\n more = rem[0] !== void 0;\r\n }\r\n\r\n // Leading zero?\r\n if (!qd[0]) qd.shift();\r\n }\r\n\r\n // logBase is 1 when divide is being used for base conversion.\r\n if (logBase == 1) {\r\n q.e = e;\r\n inexact = more;\r\n } else {\r\n\r\n // To calculate q.e, first get the number of digits of qd[0].\r\n for (i = 1, k = qd[0]; k >= 10; k /= 10) i++;\r\n q.e = i + e * logBase - 1;\r\n\r\n finalise(q, dp ? pr + q.e + 1 : pr, rm, more);\r\n }\r\n\r\n return q;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Round `x` to `sd` significant digits using rounding mode `rm`.\r\n * Check for over/under-flow.\r\n */\r\n function finalise(x, sd, rm, isTruncated) {\r\n var digits, i, j, k, rd, roundUp, w, xd, xdi,\r\n Ctor = x.constructor;\r\n\r\n // Don't round if sd is null or undefined.\r\n out: if (sd != null) {\r\n xd = x.d;\r\n\r\n // Infinity/NaN.\r\n if (!xd) return x;\r\n\r\n // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // w: the word of xd containing rd, a base 1e7 number.\r\n // xdi: the index of w within xd.\r\n // digits: the number of digits of w.\r\n // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n // they had leading zeros)\r\n // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n // Get the length of the first word of the digits array xd.\r\n for (digits = 1, k = xd[0]; k >= 10; k /= 10) digits++;\r\n i = sd - digits;\r\n\r\n // Is the rounding digit in the first word of xd?\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n w = xd[xdi = 0];\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = w / mathpow(10, digits - j - 1) % 10 | 0;\r\n } else {\r\n xdi = Math.ceil((i + 1) / LOG_BASE);\r\n k = xd.length;\r\n if (xdi >= k) {\r\n if (isTruncated) {\r\n\r\n // Needed by `naturalExponential`, `naturalLogarithm` and `squareRoot`.\r\n for (; k++ <= xdi;) xd.push(0);\r\n w = rd = 0;\r\n digits = 1;\r\n i %= LOG_BASE;\r\n j = i - LOG_BASE + 1;\r\n } else {\r\n break out;\r\n }\r\n } else {\r\n w = k = xd[xdi];\r\n\r\n // Get the number of digits of w.\r\n for (digits = 1; k >= 10; k /= 10) digits++;\r\n\r\n // Get the index of rd within w.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within w, adjusted for leading zeros.\r\n // The number of leading zeros of w is given by LOG_BASE - digits.\r\n j = i - LOG_BASE + digits;\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = j < 0 ? 0 : w / mathpow(10, digits - j - 1) % 10 | 0;\r\n }\r\n }\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n isTruncated = isTruncated || sd < 0 ||\r\n xd[xdi + 1] !== void 0 || (j < 0 ? w : w % mathpow(10, digits - j - 1));\r\n\r\n // The expression `w % mathpow(10, digits - j - 1)` returns all the digits of w to the right\r\n // of the digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression\r\n // will give 714.\r\n\r\n roundUp = rm < 4\r\n ? (rd || isTruncated) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || isTruncated || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? w / mathpow(10, digits - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n if (sd < 1 || !xd[0]) {\r\n xd.length = 0;\r\n if (roundUp) {\r\n\r\n // Convert sd to decimal places.\r\n sd -= x.e + 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n x.e = -sd || 0;\r\n } else {\r\n\r\n // Zero.\r\n xd[0] = x.e = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xd.length = xdi;\r\n k = 1;\r\n xdi--;\r\n } else {\r\n xd.length = xdi + 1;\r\n k = mathpow(10, LOG_BASE - i);\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of w.\r\n xd[xdi] = j > 0 ? (w / mathpow(10, digits - j) % mathpow(10, j) | 0) * k : 0;\r\n }\r\n\r\n if (roundUp) {\r\n for (;;) {\r\n\r\n // Is the digit to be rounded up in the first word of xd?\r\n if (xdi == 0) {\r\n\r\n // i will be the length of xd[0] before k is added.\r\n for (i = 1, j = xd[0]; j >= 10; j /= 10) i++;\r\n j = xd[0] += k;\r\n for (k = 1; j >= 10; j /= 10) k++;\r\n\r\n // if i != k the length has increased.\r\n if (i != k) {\r\n x.e++;\r\n if (xd[0] == BASE) xd[0] = 1;\r\n }\r\n\r\n break;\r\n } else {\r\n xd[xdi] += k;\r\n if (xd[xdi] != BASE) break;\r\n xd[xdi--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n }\r\n\r\n if (external) {\r\n\r\n // Overflow?\r\n if (x.e > Ctor.maxE) {\r\n\r\n // Infinity.\r\n x.d = null;\r\n x.e = NaN;\r\n\r\n // Underflow?\r\n } else if (x.e < Ctor.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n // Ctor.underflow = true;\r\n } // else Ctor.underflow = false;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n function finiteToString(x, isExp, sd) {\r\n if (!x.isFinite()) return nonFiniteToString(x);\r\n var k,\r\n e = x.e,\r\n str = digitsToString(x.d),\r\n len = str.length;\r\n\r\n if (isExp) {\r\n if (sd && (k = sd - len) > 0) {\r\n str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n } else if (len > 1) {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n\r\n str = str + (x.e < 0 ? 'e' : 'e+') + x.e;\r\n } else if (e < 0) {\r\n str = '0.' + getZeroString(-e - 1) + str;\r\n if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n } else if (e >= len) {\r\n str += getZeroString(e + 1 - len);\r\n if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n } else {\r\n if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n if (sd && (k = sd - len) > 0) {\r\n if (e + 1 === len) str += '.';\r\n str += getZeroString(k);\r\n }\r\n }\r\n\r\n return str;\r\n }\r\n\r\n\r\n // Calculate the base 10 exponent from the base 1e7 exponent.\r\n function getBase10Exponent(digits, e) {\r\n var w = digits[0];\r\n\r\n // Add the number of digits of the first word of the digits array.\r\n for ( e *= LOG_BASE; w >= 10; w /= 10) e++;\r\n return e;\r\n }\r\n\r\n\r\n function getLn10(Ctor, sd, pr) {\r\n if (sd > LN10_PRECISION) {\r\n\r\n // Reset global state in case the exception is caught.\r\n external = true;\r\n if (pr) Ctor.precision = pr;\r\n throw Error(precisionLimitExceeded);\r\n }\r\n return finalise(new Ctor(LN10), sd, 1, true);\r\n }\r\n\r\n\r\n function getPi(Ctor, sd, rm) {\r\n if (sd > PI_PRECISION) throw Error(precisionLimitExceeded);\r\n return finalise(new Ctor(PI), sd, rm, true);\r\n }\r\n\r\n\r\n function getPrecision(digits) {\r\n var w = digits.length - 1,\r\n len = w * LOG_BASE + 1;\r\n\r\n w = digits[w];\r\n\r\n // If non-zero...\r\n if (w) {\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n for (; w % 10 == 0; w /= 10) len--;\r\n\r\n // Add the number of digits of the first word.\r\n for (w = digits[0]; w >= 10; w /= 10) len++;\r\n }\r\n\r\n return len;\r\n }\r\n\r\n\r\n function getZeroString(k) {\r\n var zs = '';\r\n for (; k--;) zs += '0';\r\n return zs;\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of Decimal `x` to the power `n`, where `n` is an\r\n * integer of type number.\r\n *\r\n * Implements 'exponentiation by squaring'. Called by `pow` and `parseOther`.\r\n *\r\n */\r\n function intPow(Ctor, x, n, pr) {\r\n var isTruncated,\r\n r = new Ctor(1),\r\n\r\n // Max n of 9007199254740991 takes 53 loop iterations.\r\n // Maximum digits array length; leaves [28, 34] guard digits.\r\n k = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n external = false;\r\n\r\n for (;;) {\r\n if (n % 2) {\r\n r = r.times(x);\r\n if (truncate(r.d, k)) isTruncated = true;\r\n }\r\n\r\n n = mathfloor(n / 2);\r\n if (n === 0) {\r\n\r\n // To ensure correct rounding when r.d is truncated, increment the last word if it is zero.\r\n n = r.d.length - 1;\r\n if (isTruncated && r.d[n] === 0) ++r.d[n];\r\n break;\r\n }\r\n\r\n x = x.times(x);\r\n truncate(x.d, k);\r\n }\r\n\r\n external = true;\r\n\r\n return r;\r\n }\r\n\r\n\r\n function isOdd(n) {\r\n return n.d[n.d.length - 1] & 1;\r\n }\r\n\r\n\r\n /*\r\n * Handle `max` (`n` is -1) and `min` (`n` is 1).\r\n */\r\n function maxOrMin(Ctor, args, n) {\r\n var k, y,\r\n x = new Ctor(args[0]),\r\n i = 0;\r\n\r\n for (; ++i < args.length;) {\r\n y = new Ctor(args[i]);\r\n\r\n // NaN?\r\n if (!y.s) {\r\n x = y;\r\n break;\r\n }\r\n\r\n k = x.cmp(y);\r\n\r\n if (k === n || k === 0 && x.s === n) {\r\n x = y;\r\n }\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural exponential of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n * Repeat x = x / 32, k += 5, until |x| < 0.1\r\n * exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * Max integer argument: exp('20723265836946413') = 6.3e+9000000000000000\r\n * Min integer argument: exp('-20723265836946411') = 1.2e-9000000000000000\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n * exp(Infinity) = Infinity\r\n * exp(-Infinity) = 0\r\n * exp(NaN) = NaN\r\n * exp(±0) = 1\r\n *\r\n * exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n * The result will always be correctly rounded.\r\n *\r\n */\r\n function naturalExponential(x, sd) {\r\n var denominator, guard, j, pow, sum, t, wpr,\r\n rep = 0,\r\n i = 0,\r\n k = 0,\r\n Ctor = x.constructor,\r\n rm = Ctor.rounding,\r\n pr = Ctor.precision;\r\n\r\n // 0/NaN/Infinity?\r\n if (!x.d || !x.d[0] || x.e > 17) {\r\n\r\n return new Ctor(x.d\r\n ? !x.d[0] ? 1 : x.s < 0 ? 0 : 1 / 0\r\n : x.s ? x.s < 0 ? 0 : x : 0 / 0);\r\n }\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n t = new Ctor(0.03125);\r\n\r\n // while abs(x) >= 0.1\r\n while (x.e > -2) {\r\n\r\n // x = x / 2^5\r\n x = x.times(t);\r\n k += 5;\r\n }\r\n\r\n // Use 2 * log10(2^k) + 5 (empirically derived) to estimate the increase in precision\r\n // necessary to ensure the first 4 rounding digits are correct.\r\n guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n wpr += guard;\r\n denominator = pow = sum = new Ctor(1);\r\n Ctor.precision = wpr;\r\n\r\n for (;;) {\r\n pow = finalise(pow.times(x), wpr, 1);\r\n denominator = denominator.times(++i);\r\n t = sum.plus(divide(pow, denominator, wpr, 1));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n j = k;\r\n while (j--) sum = finalise(sum.times(sum), wpr, 1);\r\n\r\n // Check to see if the first 4 rounding digits are [49]999.\r\n // If so, repeat the summation with a higher precision, otherwise\r\n // e.g. with precision: 18, rounding: 1\r\n // exp(18.404272462595034083567793919843761) = 98372560.1229999999 (should be 98372560.123)\r\n // `wpr - guard` is the index of first rounding digit.\r\n if (sd == null) {\r\n\r\n if (rep < 3 && checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n Ctor.precision = wpr += 10;\r\n denominator = pow = t = new Ctor(1);\r\n i = 0;\r\n rep++;\r\n } else {\r\n return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n }\r\n } else {\r\n Ctor.precision = pr;\r\n return sum;\r\n }\r\n }\r\n\r\n sum = t;\r\n }\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural logarithm of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * ln(-n) = NaN\r\n * ln(0) = -Infinity\r\n * ln(-0) = -Infinity\r\n * ln(1) = 0\r\n * ln(Infinity) = Infinity\r\n * ln(-Infinity) = NaN\r\n * ln(NaN) = NaN\r\n *\r\n * ln(n) (n != 1) is non-terminating.\r\n *\r\n */\r\n function naturalLogarithm(y, sd) {\r\n var c, c0, denominator, e, numerator, rep, sum, t, wpr, x1, x2,\r\n n = 1,\r\n guard = 10,\r\n x = y,\r\n xd = x.d,\r\n Ctor = x.constructor,\r\n rm = Ctor.rounding,\r\n pr = Ctor.precision;\r\n\r\n // Is x negative or Infinity, NaN, 0 or 1?\r\n if (x.s < 0 || !xd || !xd[0] || !x.e && xd[0] == 1 && xd.length == 1) {\r\n return new Ctor(xd && !xd[0] ? -1 / 0 : x.s != 1 ? NaN : xd ? 0 : x);\r\n }\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n Ctor.precision = wpr += guard;\r\n c = digitsToString(xd);\r\n c0 = c.charAt(0);\r\n\r\n if (Math.abs(e = x.e) < 1.5e15) {\r\n\r\n // Argument reduction.\r\n // The series converges faster the closer the argument is to 1, so using\r\n // ln(a^b) = b * ln(a), ln(a) = ln(a^b) / b\r\n // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n // later be divided by this number, then separate out the power of 10 using\r\n // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n // max n is 6 (gives 0.7 - 1.3)\r\n while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n x = x.times(y);\r\n c = digitsToString(x.d);\r\n c0 = c.charAt(0);\r\n n++;\r\n }\r\n\r\n e = x.e;\r\n\r\n if (c0 > 1) {\r\n x = new Ctor('0.' + c);\r\n e++;\r\n } else {\r\n x = new Ctor(c0 + '.' + c.slice(1));\r\n }\r\n } else {\r\n\r\n // The argument reduction method above may result in overflow if the argument y is a massive\r\n // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n x = naturalLogarithm(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n Ctor.precision = pr;\r\n\r\n return sd == null ? finalise(x, pr, rm, external = true) : x;\r\n }\r\n\r\n // x1 is x reduced to a value near 1.\r\n x1 = x;\r\n\r\n // Taylor series.\r\n // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n // where x = (y - 1)/(y + 1) (|x| < 1)\r\n sum = numerator = x = divide(x.minus(1), x.plus(1), wpr, 1);\r\n x2 = finalise(x.times(x), wpr, 1);\r\n denominator = 3;\r\n\r\n for (;;) {\r\n numerator = finalise(numerator.times(x2), wpr, 1);\r\n t = sum.plus(divide(numerator, new Ctor(denominator), wpr, 1));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n sum = sum.times(2);\r\n\r\n // Reverse the argument reduction. Check that e is not 0 because, besides preventing an\r\n // unnecessary calculation, -0 + 0 = +0 and to ensure correct rounding -0 needs to stay -0.\r\n if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n sum = divide(sum, new Ctor(n), wpr, 1);\r\n\r\n // Is rm > 3 and the first 4 rounding digits 4999, or rm < 4 (or the summation has\r\n // been repeated previously) and the first 4 rounding digits 9999?\r\n // If so, restart the summation with a higher precision, otherwise\r\n // e.g. with precision: 12, rounding: 1\r\n // ln(135520028.6126091714265381533) = 18.7246299999 when it should be 18.72463.\r\n // `wpr - guard` is the index of first rounding digit.\r\n if (sd == null) {\r\n if (checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n Ctor.precision = wpr += guard;\r\n t = numerator = x = divide(x1.minus(1), x1.plus(1), wpr, 1);\r\n x2 = finalise(x.times(x), wpr, 1);\r\n denominator = rep = 1;\r\n } else {\r\n return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n }\r\n } else {\r\n Ctor.precision = pr;\r\n return sum;\r\n }\r\n }\r\n\r\n sum = t;\r\n denominator += 2;\r\n }\r\n }\r\n\r\n\r\n // ±Infinity, NaN.\r\n function nonFiniteToString(x) {\r\n // Unsigned.\r\n return String(x.s * x.s / 0);\r\n }\r\n\r\n\r\n /*\r\n * Parse the value of a new Decimal `x` from string `str`.\r\n */\r\n function parseDecimal(x, str) {\r\n var e, i, len;\r\n\r\n // TODO BigInt str: no need to check for decimal point, exponential form or leading zeros.\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(len - 1) === 48; --len);\r\n str = str.slice(i, len);\r\n\r\n if (str) {\r\n len -= i;\r\n x.e = e = e - i - 1;\r\n x.d = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first word of the digits array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE;\r\n\r\n if (i < len) {\r\n if (i) x.d.push(+str.slice(0, i));\r\n for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n str = str.slice(i);\r\n i = LOG_BASE - str.length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--;) str += '0';\r\n x.d.push(+str);\r\n\r\n if (external) {\r\n\r\n // Overflow?\r\n if (x.e > x.constructor.maxE) {\r\n\r\n // Infinity.\r\n x.d = null;\r\n x.e = NaN;\r\n\r\n // Underflow?\r\n } else if (x.e < x.constructor.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n // x.constructor.underflow = true;\r\n } // else x.constructor.underflow = false;\r\n }\r\n } else {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n /*\r\n * Parse the value of a new Decimal `x` from a string `str`, which is not a decimal value.\r\n */\r\n function parseOther(x, str) {\r\n var base, Ctor, divisor, i, isFloat, len, p, xd, xe;\r\n\r\n if (str.indexOf('_') > -1) {\r\n str = str.replace(/(\\d)_(?=\\d)/g, '$1');\r\n if (isDecimal.test(str)) return parseDecimal(x, str);\r\n } else if (str === 'Infinity' || str === 'NaN') {\r\n if (!+str) x.s = NaN;\r\n x.e = NaN;\r\n x.d = null;\r\n return x;\r\n }\r\n\r\n if (isHex.test(str)) {\r\n base = 16;\r\n str = str.toLowerCase();\r\n } else if (isBinary.test(str)) {\r\n base = 2;\r\n } else if (isOctal.test(str)) {\r\n base = 8;\r\n } else {\r\n throw Error(invalidArgument + str);\r\n }\r\n\r\n // Is there a binary exponent part?\r\n i = str.search(/p/i);\r\n\r\n if (i > 0) {\r\n p = +str.slice(i + 1);\r\n str = str.substring(2, i);\r\n } else {\r\n str = str.slice(2);\r\n }\r\n\r\n // Convert `str` as an integer then divide the result by `base` raised to a power such that the\r\n // fraction part will be restored.\r\n i = str.indexOf('.');\r\n isFloat = i >= 0;\r\n Ctor = x.constructor;\r\n\r\n if (isFloat) {\r\n str = str.replace('.', '');\r\n len = str.length;\r\n i = len - i;\r\n\r\n // log[10](16) = 1.2041... , log[10](88) = 1.9444....\r\n divisor = intPow(Ctor, new Ctor(base), i, i * 2);\r\n }\r\n\r\n xd = convertBase(str, base, BASE);\r\n xe = xd.length - 1;\r\n\r\n // Remove trailing zeros.\r\n for (i = xe; xd[i] === 0; --i) xd.pop();\r\n if (i < 0) return new Ctor(x.s * 0);\r\n x.e = getBase10Exponent(xd, xe);\r\n x.d = xd;\r\n external = false;\r\n\r\n // At what precision to perform the division to ensure exact conversion?\r\n // maxDecimalIntegerPartDigitCount = ceil(log[10](b) * otherBaseIntegerPartDigitCount)\r\n // log[10](2) = 0.30103, log[10](8) = 0.90309, log[10](16) = 1.20412\r\n // E.g. ceil(1.2 * 3) = 4, so up to 4 decimal digits are needed to represent 3 hex int digits.\r\n // maxDecimalFractionPartDigitCount = {Hex:4|Oct:3|Bin:1} * otherBaseFractionPartDigitCount\r\n // Therefore using 4 * the number of digits of str will always be enough.\r\n if (isFloat) x = divide(x, divisor, len * 4);\r\n\r\n // Multiply by the binary exponent part if present.\r\n if (p) x = x.times(Math.abs(p) < 54 ? mathpow(2, p) : Decimal.pow(2, p));\r\n external = true;\r\n\r\n return x;\r\n }\r\n\r\n\r\n /*\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\n function sine(Ctor, x) {\r\n var k,\r\n len = x.d.length;\r\n\r\n if (len < 3) {\r\n return x.isZero() ? x : taylorSeries(Ctor, 2, x, x);\r\n }\r\n\r\n // Argument reduction: sin(5x) = 16*sin^5(x) - 20*sin^3(x) + 5*sin(x)\r\n // i.e. sin(x) = 16*sin^5(x/5) - 20*sin^3(x/5) + 5*sin(x/5)\r\n // and sin(x) = sin(x/5)(5 + sin^2(x/5)(16sin^2(x/5) - 20))\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n k = 1.4 * Math.sqrt(len);\r\n k = k > 16 ? 16 : k | 0;\r\n\r\n x = x.times(1 / tinyPow(5, k));\r\n x = taylorSeries(Ctor, 2, x, x);\r\n\r\n // Reverse argument reduction\r\n var sin2_x,\r\n d5 = new Ctor(5),\r\n d16 = new Ctor(16),\r\n d20 = new Ctor(20);\r\n for (; k--;) {\r\n sin2_x = x.times(x);\r\n x = x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n // Calculate Taylor series for `cos`, `cosh`, `sin` and `sinh`.\r\n function taylorSeries(Ctor, n, x, y, isHyperbolic) {\r\n var j, t, u, x2,\r\n i = 1,\r\n pr = Ctor.precision,\r\n k = Math.ceil(pr / LOG_BASE);\r\n\r\n external = false;\r\n x2 = x.times(x);\r\n u = new Ctor(y);\r\n\r\n for (;;) {\r\n t = divide(u.times(x2), new Ctor(n++ * n++), pr, 1);\r\n u = isHyperbolic ? y.plus(t) : y.minus(t);\r\n y = divide(t.times(x2), new Ctor(n++ * n++), pr, 1);\r\n t = u.plus(y);\r\n\r\n if (t.d[k] !== void 0) {\r\n for (j = k; t.d[j] === u.d[j] && j--;);\r\n if (j == -1) break;\r\n }\r\n\r\n j = u;\r\n u = y;\r\n y = t;\r\n t = j;\r\n i++;\r\n }\r\n\r\n external = true;\r\n t.d.length = k + 1;\r\n\r\n return t;\r\n }\r\n\r\n\r\n // Exponent e must be positive and non-zero.\r\n function tinyPow(b, e) {\r\n var n = b;\r\n while (--e) n *= b;\r\n return n;\r\n }\r\n\r\n\r\n // Return the absolute value of `x` reduced to less than or equal to half pi.\r\n function toLessThanHalfPi(Ctor, x) {\r\n var t,\r\n isNeg = x.s < 0,\r\n pi = getPi(Ctor, Ctor.precision, 1),\r\n halfPi = pi.times(0.5);\r\n\r\n x = x.abs();\r\n\r\n if (x.lte(halfPi)) {\r\n quadrant = isNeg ? 4 : 1;\r\n return x;\r\n }\r\n\r\n t = x.divToInt(pi);\r\n\r\n if (t.isZero()) {\r\n quadrant = isNeg ? 3 : 2;\r\n } else {\r\n x = x.minus(t.times(pi));\r\n\r\n // 0 <= x < pi\r\n if (x.lte(halfPi)) {\r\n quadrant = isOdd(t) ? (isNeg ? 2 : 3) : (isNeg ? 4 : 1);\r\n return x;\r\n }\r\n\r\n quadrant = isOdd(t) ? (isNeg ? 1 : 4) : (isNeg ? 3 : 2);\r\n }\r\n\r\n return x.minus(pi).abs();\r\n }\r\n\r\n\r\n /*\r\n * Return the value of Decimal `x` as a string in base `baseOut`.\r\n *\r\n * If the optional `sd` argument is present include a binary exponent suffix.\r\n */\r\n function toStringBinary(x, baseOut, sd, rm) {\r\n var base, e, i, k, len, roundUp, str, xd, y,\r\n Ctor = x.constructor,\r\n isExp = sd !== void 0;\r\n\r\n if (isExp) {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n } else {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n }\r\n\r\n if (!x.isFinite()) {\r\n str = nonFiniteToString(x);\r\n } else {\r\n str = finiteToString(x);\r\n i = str.indexOf('.');\r\n\r\n // Use exponential notation according to `toExpPos` and `toExpNeg`? No, but if required:\r\n // maxBinaryExponent = floor((decimalExponent + 1) * log[2](10))\r\n // minBinaryExponent = floor(decimalExponent * log[2](10))\r\n // log[2](10) = 3.321928094887362347870319429489390175864\r\n\r\n if (isExp) {\r\n base = 2;\r\n if (baseOut == 16) {\r\n sd = sd * 4 - 3;\r\n } else if (baseOut == 8) {\r\n sd = sd * 3 - 2;\r\n }\r\n } else {\r\n base = baseOut;\r\n }\r\n\r\n // Convert the number as an integer then divide the result by its base raised to a power such\r\n // that the fraction part will be restored.\r\n\r\n // Non-integer.\r\n if (i >= 0) {\r\n str = str.replace('.', '');\r\n y = new Ctor(1);\r\n y.e = str.length - i;\r\n y.d = convertBase(finiteToString(y), 10, base);\r\n y.e = y.d.length;\r\n }\r\n\r\n xd = convertBase(str, 10, base);\r\n e = len = xd.length;\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] == 0;) xd.pop();\r\n\r\n if (!xd[0]) {\r\n str = isExp ? '0p+0' : '0';\r\n } else {\r\n if (i < 0) {\r\n e--;\r\n } else {\r\n x = new Ctor(x);\r\n x.d = xd;\r\n x.e = e;\r\n x = divide(x, y, sd, rm, 0, base);\r\n xd = x.d;\r\n e = x.e;\r\n roundUp = inexact;\r\n }\r\n\r\n // The rounding digit, i.e. the digit after the digit that may be rounded up.\r\n i = xd[sd];\r\n k = base / 2;\r\n roundUp = roundUp || xd[sd + 1] !== void 0;\r\n\r\n roundUp = rm < 4\r\n ? (i !== void 0 || roundUp) && (rm === 0 || rm === (x.s < 0 ? 3 : 2))\r\n : i > k || i === k && (rm === 4 || roundUp || rm === 6 && xd[sd - 1] & 1 ||\r\n rm === (x.s < 0 ? 8 : 7));\r\n\r\n xd.length = sd;\r\n\r\n if (roundUp) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up and so on.\r\n for (; ++xd[--sd] > base - 1;) {\r\n xd[sd] = 0;\r\n if (!sd) {\r\n ++e;\r\n xd.unshift(1);\r\n }\r\n }\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n // E.g. [4, 11, 15] becomes 4bf.\r\n for (i = 0, str = ''; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n\r\n // Add binary exponent suffix?\r\n if (isExp) {\r\n if (len > 1) {\r\n if (baseOut == 16 || baseOut == 8) {\r\n i = baseOut == 16 ? 4 : 3;\r\n for (--len; len % i; len++) str += '0';\r\n xd = convertBase(str, base, baseOut);\r\n for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n // xd[0] will always be be 1\r\n for (i = 1, str = '1.'; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n } else {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n }\r\n\r\n str = str + (e < 0 ? 'p' : 'p+') + e;\r\n } else if (e < 0) {\r\n for (; ++e;) str = '0' + str;\r\n str = '0.' + str;\r\n } else {\r\n if (++e > len) for (e -= len; e-- ;) str += '0';\r\n else if (e < len) str = str.slice(0, e) + '.' + str.slice(e);\r\n }\r\n }\r\n\r\n str = (baseOut == 16 ? '0x' : baseOut == 2 ? '0b' : baseOut == 8 ? '0o' : '') + str;\r\n }\r\n\r\n return x.s < 0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // Does not strip trailing zeros.\r\n function truncate(arr, len) {\r\n if (arr.length > len) {\r\n arr.length = len;\r\n return true;\r\n }\r\n }\r\n\r\n\r\n // Decimal methods\r\n\r\n\r\n /*\r\n * abs\r\n * acos\r\n * acosh\r\n * add\r\n * asin\r\n * asinh\r\n * atan\r\n * atanh\r\n * atan2\r\n * cbrt\r\n * ceil\r\n * clamp\r\n * clone\r\n * config\r\n * cos\r\n * cosh\r\n * div\r\n * exp\r\n * floor\r\n * hypot\r\n * ln\r\n * log\r\n * log2\r\n * log10\r\n * max\r\n * min\r\n * mod\r\n * mul\r\n * pow\r\n * random\r\n * round\r\n * set\r\n * sign\r\n * sin\r\n * sinh\r\n * sqrt\r\n * sub\r\n * sum\r\n * tan\r\n * tanh\r\n * trunc\r\n */\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the absolute value of `x`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\n function abs(x) {\r\n return new this(x).abs();\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the arccosine in radians of `x`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\n function acos(x) {\r\n return new this(x).acos();\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\n function acosh(x) {\r\n return new this(x).acosh();\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the sum of `x` and `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\n function add(x, y) {\r\n return new this(x).plus(y);\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the arcsine in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\n function asin(x) {\r\n return new this(x).asin();\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\n function asinh(x) {\r\n return new this(x).asinh();\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the arctangent in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\n function atan(x) {\r\n return new this(x).atan();\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\n function atanh(x) {\r\n return new this(x).atanh();\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the arctangent in radians of `y/x` in the range -pi to pi\r\n * (inclusive), rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi, pi]\r\n *\r\n * y {number|string|bigint|Decimal} The y-coordinate.\r\n * x {number|string|bigint|Decimal} The x-coordinate.\r\n *\r\n * atan2(±0, -0) = ±pi\r\n * atan2(±0, +0) = ±0\r\n * atan2(±0, -x) = ±pi for x > 0\r\n * atan2(±0, x) = ±0 for x > 0\r\n * atan2(-y, ±0) = -pi/2 for y > 0\r\n * atan2(y, ±0) = pi/2 for y > 0\r\n * atan2(±y, -Infinity) = ±pi for finite y > 0\r\n * atan2(±y, +Infinity) = ±0 for finite y > 0\r\n * atan2(±Infinity, x) = ±pi/2 for finite x\r\n * atan2(±Infinity, -Infinity) = ±3*pi/4\r\n * atan2(±Infinity, +Infinity) = ±pi/4\r\n * atan2(NaN, x) = NaN\r\n * atan2(y, NaN) = NaN\r\n *\r\n */\r\n function atan2(y, x) {\r\n y = new this(y);\r\n x = new this(x);\r\n var r,\r\n pr = this.precision,\r\n rm = this.rounding,\r\n wpr = pr + 4;\r\n\r\n // Either NaN\r\n if (!y.s || !x.s) {\r\n r = new this(NaN);\r\n\r\n // Both ±Infinity\r\n } else if (!y.d && !x.d) {\r\n r = getPi(this, wpr, 1).times(x.s > 0 ? 0.25 : 0.75);\r\n r.s = y.s;\r\n\r\n // x is ±Infinity or y is ±0\r\n } else if (!x.d || y.isZero()) {\r\n r = x.s < 0 ? getPi(this, pr, rm) : new this(0);\r\n r.s = y.s;\r\n\r\n // y is ±Infinity or x is ±0\r\n } else if (!y.d || x.isZero()) {\r\n r = getPi(this, wpr, 1).times(0.5);\r\n r.s = y.s;\r\n\r\n // Both non-zero and finite\r\n } else if (x.s < 0) {\r\n this.precision = wpr;\r\n this.rounding = 1;\r\n r = this.atan(divide(y, x, wpr, 1));\r\n x = getPi(this, wpr, 1);\r\n this.precision = pr;\r\n this.rounding = rm;\r\n r = y.s < 0 ? r.minus(x) : r.plus(x);\r\n } else {\r\n r = this.atan(divide(y, x, wpr, 1));\r\n }\r\n\r\n return r;\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the cube root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\n function cbrt(x) {\r\n return new this(x).cbrt();\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is `x` rounded to an integer using `ROUND_CEIL`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\n function ceil(x) {\r\n return finalise(x = new this(x), x.e + 1, 2);\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is `x` clamped to the range delineated by `min` and `max`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * min {number|string|bigint|Decimal}\r\n * max {number|string|bigint|Decimal}\r\n *\r\n */\r\n function clamp(x, min, max) {\r\n return new this(x).clamp(min, max);\r\n }\r\n\r\n\r\n /*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `obj` is an object with one or more of the following properties,\r\n *\r\n * precision {number}\r\n * rounding {number}\r\n * toExpNeg {number}\r\n * toExpPos {number}\r\n * maxE {number}\r\n * minE {number}\r\n * modulo {number}\r\n * crypto {boolean|number}\r\n * defaults {true}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\r\n function config(obj) {\r\n if (!obj || typeof obj !== 'object') throw Error(decimalError + 'Object expected');\r\n var i, p, v,\r\n useDefaults = obj.defaults === true,\r\n ps = [\r\n 'precision', 1, MAX_DIGITS,\r\n 'rounding', 0, 8,\r\n 'toExpNeg', -EXP_LIMIT, 0,\r\n 'toExpPos', 0, EXP_LIMIT,\r\n 'maxE', 0, EXP_LIMIT,\r\n 'minE', -EXP_LIMIT, 0,\r\n 'modulo', 0, 9\r\n ];\r\n\r\n for (i = 0; i < ps.length; i += 3) {\r\n if (p = ps[i], useDefaults) this[p] = DEFAULTS[p];\r\n if ((v = obj[p]) !== void 0) {\r\n if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n else throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n if (p = 'crypto', useDefaults) this[p] = DEFAULTS[p];\r\n if ((v = obj[p]) !== void 0) {\r\n if (v === true || v === false || v === 0 || v === 1) {\r\n if (v) {\r\n if (typeof crypto != 'undefined' && crypto &&\r\n (crypto.getRandomValues || crypto.randomBytes)) {\r\n this[p] = true;\r\n } else {\r\n throw Error(cryptoUnavailable);\r\n }\r\n } else {\r\n this[p] = false;\r\n }\r\n } else {\r\n throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the cosine of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\n function cos(x) {\r\n return new this(x).cos();\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the hyperbolic cosine of `x`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\n function cosh(x) {\r\n return new this(x).cosh();\r\n }\r\n\r\n\r\n /*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\r\n function clone(obj) {\r\n var i, p, ps;\r\n\r\n /*\r\n * The Decimal constructor and exported function.\r\n * Return a new Decimal instance.\r\n *\r\n * v {number|string|bigint|Decimal} A numeric value.\r\n *\r\n */\r\n function Decimal(v) {\r\n var e, i, t,\r\n x = this;\r\n\r\n // Decimal called without new.\r\n if (!(x instanceof Decimal)) return new Decimal(v);\r\n\r\n // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n // which points to Object.\r\n x.constructor = Decimal;\r\n\r\n if (isDecimalInstance(v)) {\r\n x.s = v.s;\r\n\r\n if (external) {\r\n if (!v.d || v.e > Decimal.maxE) {\r\n\r\n // Infinity.\r\n x.e = NaN;\r\n x.d = null;\r\n } else if (v.e < Decimal.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n } else {\r\n x.e = v.e;\r\n x.d = v.d.slice();\r\n }\r\n } else {\r\n x.e = v.e;\r\n x.d = v.d ? v.d.slice() : v.d;\r\n }\r\n\r\n return;\r\n }\r\n\r\n t = typeof v;\r\n\r\n if (t === 'number') {\r\n if (v === 0) {\r\n x.s = 1 / v < 0 ? -1 : 1;\r\n x.e = 0;\r\n x.d = [0];\r\n return;\r\n }\r\n\r\n if (v < 0) {\r\n v = -v;\r\n x.s = -1;\r\n } else {\r\n x.s = 1;\r\n }\r\n\r\n // Fast path for small integers.\r\n if (v === ~~v && v < 1e7) {\r\n for (e = 0, i = v; i >= 10; i /= 10) e++;\r\n\r\n if (external) {\r\n if (e > Decimal.maxE) {\r\n x.e = NaN;\r\n x.d = null;\r\n } else if (e < Decimal.minE) {\r\n x.e = 0;\r\n x.d = [0];\r\n } else {\r\n x.e = e;\r\n x.d = [v];\r\n }\r\n } else {\r\n x.e = e;\r\n x.d = [v];\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Infinity or NaN?\r\n if (v * 0 !== 0) {\r\n if (!v) x.s = NaN;\r\n x.e = NaN;\r\n x.d = null;\r\n return;\r\n }\r\n\r\n return parseDecimal(x, v.toString());\r\n }\r\n\r\n if (t === 'string') {\r\n if ((i = v.charCodeAt(0)) === 45) { // minus sign\r\n v = v.slice(1);\r\n x.s = -1;\r\n } else {\r\n if (i === 43) v = v.slice(1); // plus sign\r\n x.s = 1;\r\n }\r\n\r\n return isDecimal.test(v) ? parseDecimal(x, v) : parseOther(x, v);\r\n }\r\n\r\n if (t === 'bigint') {\r\n if (v < 0) {\r\n v = -v;\r\n x.s = -1;\r\n } else {\r\n x.s = 1;\r\n }\r\n\r\n return parseDecimal(x, v.toString());\r\n }\r\n\r\n throw Error(invalidArgument + v);\r\n }\r\n\r\n Decimal.prototype = P;\r\n\r\n Decimal.ROUND_UP = 0;\r\n Decimal.ROUND_DOWN = 1;\r\n Decimal.ROUND_CEIL = 2;\r\n Decimal.ROUND_FLOOR = 3;\r\n Decimal.ROUND_HALF_UP = 4;\r\n Decimal.ROUND_HALF_DOWN = 5;\r\n Decimal.ROUND_HALF_EVEN = 6;\r\n Decimal.ROUND_HALF_CEIL = 7;\r\n Decimal.ROUND_HALF_FLOOR = 8;\r\n Decimal.EUCLID = 9;\r\n\r\n Decimal.config = Decimal.set = config;\r\n Decimal.clone = clone;\r\n Decimal.isDecimal = isDecimalInstance;\r\n\r\n Decimal.abs = abs;\r\n Decimal.acos = acos;\r\n Decimal.acosh = acosh; // ES6\r\n Decimal.add = add;\r\n Decimal.asin = asin;\r\n Decimal.asinh = asinh; // ES6\r\n Decimal.atan = atan;\r\n Decimal.atanh = atanh; // ES6\r\n Decimal.atan2 = atan2;\r\n Decimal.cbrt = cbrt; // ES6\r\n Decimal.ceil = ceil;\r\n Decimal.clamp = clamp;\r\n Decimal.cos = cos;\r\n Decimal.cosh = cosh; // ES6\r\n Decimal.div = div;\r\n Decimal.exp = exp;\r\n Decimal.floor = floor;\r\n Decimal.hypot = hypot; // ES6\r\n Decimal.ln = ln;\r\n Decimal.log = log;\r\n Decimal.log10 = log10; // ES6\r\n Decimal.log2 = log2; // ES6\r\n Decimal.max = max;\r\n Decimal.min = min;\r\n Decimal.mod = mod;\r\n Decimal.mul = mul;\r\n Decimal.pow = pow;\r\n Decimal.random = random;\r\n Decimal.round = round;\r\n Decimal.sign = sign; // ES6\r\n Decimal.sin = sin;\r\n Decimal.sinh = sinh; // ES6\r\n Decimal.sqrt = sqrt;\r\n Decimal.sub = sub;\r\n Decimal.sum = sum;\r\n Decimal.tan = tan;\r\n Decimal.tanh = tanh; // ES6\r\n Decimal.trunc = trunc; // ES6\r\n\r\n if (obj === void 0) obj = {};\r\n if (obj) {\r\n if (obj.defaults !== true) {\r\n ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'maxE', 'minE', 'modulo', 'crypto'];\r\n for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n }\r\n }\r\n\r\n Decimal.config(obj);\r\n\r\n return Decimal;\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is `x` divided by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\n function div(x, y) {\r\n return new this(x).div(y);\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural exponential of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} The power to which to raise the base of the natural log.\r\n *\r\n */\r\n function exp(x) {\r\n return new this(x).exp();\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is `x` round to an integer using `ROUND_FLOOR`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\n function floor(x) {\r\n return finalise(x = new this(x), x.e + 1, 3);\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the square root of the sum of the squares of the arguments,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * hypot(a, b, ...) = sqrt(a^2 + b^2 + ...)\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\n function hypot() {\r\n var i, n,\r\n t = new this(0);\r\n\r\n external = false;\r\n\r\n for (i = 0; i < arguments.length;) {\r\n n = new this(arguments[i++]);\r\n if (!n.d) {\r\n if (n.s) {\r\n external = true;\r\n return new this(1 / 0);\r\n }\r\n t = n;\r\n } else if (t.d) {\r\n t = t.plus(n.times(n));\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return t.sqrt();\r\n }\r\n\r\n\r\n /*\r\n * Return true if object is a Decimal instance (where Decimal is any Decimal constructor),\r\n * otherwise return false.\r\n *\r\n */\r\n function isDecimalInstance(obj) {\r\n return obj instanceof Decimal || obj && obj.toStringTag === tag || false;\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\n function ln(x) {\r\n return new this(x).ln();\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the log of `x` to the base `y`, or to base 10 if no base\r\n * is specified, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * log[y](x)\r\n *\r\n * x {number|string|bigint|Decimal} The argument of the logarithm.\r\n * y {number|string|bigint|Decimal} The base of the logarithm.\r\n *\r\n */\r\n function log(x, y) {\r\n return new this(x).log(y);\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the base 2 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\n function log2(x) {\r\n return new this(x).log(2);\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the base 10 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\n function log10(x) {\r\n return new this(x).log(10);\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\n function max() {\r\n return maxOrMin(this, arguments, -1);\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\n function min() {\r\n return maxOrMin(this, arguments, 1);\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is `x` modulo `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\n function mod(x, y) {\r\n return new this(x).mod(y);\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is `x` multiplied by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\n function mul(x, y) {\r\n return new this(x).mul(y);\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is `x` raised to the power `y`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} The base.\r\n * y {number|string|bigint|Decimal} The exponent.\r\n *\r\n */\r\n function pow(x, y) {\r\n return new this(x).pow(y);\r\n }\r\n\r\n\r\n /*\r\n * Returns a new Decimal with a random value equal to or greater than 0 and less than 1, and with\r\n * `sd`, or `Decimal.precision` if `sd` is omitted, significant digits (or less if trailing zeros\r\n * are produced).\r\n *\r\n * [sd] {number} Significant digits. Integer, 0 to MAX_DIGITS inclusive.\r\n *\r\n */\r\n function random(sd) {\r\n var d, e, k, n,\r\n i = 0,\r\n r = new this(1),\r\n rd = [];\r\n\r\n if (sd === void 0) sd = this.precision;\r\n else checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n k = Math.ceil(sd / LOG_BASE);\r\n\r\n if (!this.crypto) {\r\n for (; i < k;) rd[i++] = Math.random() * 1e7 | 0;\r\n\r\n // Browsers supporting crypto.getRandomValues.\r\n } else if (crypto.getRandomValues) {\r\n d = crypto.getRandomValues(new Uint32Array(k));\r\n\r\n for (; i < k;) {\r\n n = d[i];\r\n\r\n // 0 <= n < 4294967296\r\n // Probability n >= 4.29e9, is 4967296 / 4294967296 = 0.00116 (1 in 865).\r\n if (n >= 4.29e9) {\r\n d[i] = crypto.getRandomValues(new Uint32Array(1))[0];\r\n } else {\r\n\r\n // 0 <= n <= 4289999999\r\n // 0 <= (n % 1e7) <= 9999999\r\n rd[i++] = n % 1e7;\r\n }\r\n }\r\n\r\n // Node.js supporting crypto.randomBytes.\r\n } else if (crypto.randomBytes) {\r\n\r\n // buffer\r\n d = crypto.randomBytes(k *= 4);\r\n\r\n for (; i < k;) {\r\n\r\n // 0 <= n < 2147483648\r\n n = d[i] + (d[i + 1] << 8) + (d[i + 2] << 16) + ((d[i + 3] & 0x7f) << 24);\r\n\r\n // Probability n >= 2.14e9, is 7483648 / 2147483648 = 0.0035 (1 in 286).\r\n if (n >= 2.14e9) {\r\n crypto.randomBytes(4).copy(d, i);\r\n } else {\r\n\r\n // 0 <= n <= 2139999999\r\n // 0 <= (n % 1e7) <= 9999999\r\n rd.push(n % 1e7);\r\n i += 4;\r\n }\r\n }\r\n\r\n i = k / 4;\r\n } else {\r\n throw Error(cryptoUnavailable);\r\n }\r\n\r\n k = rd[--i];\r\n sd %= LOG_BASE;\r\n\r\n // Convert trailing digits to zeros according to sd.\r\n if (k && sd) {\r\n n = mathpow(10, LOG_BASE - sd);\r\n rd[i] = (k / n | 0) * n;\r\n }\r\n\r\n // Remove trailing words which are zero.\r\n for (; rd[i] === 0; i--) rd.pop();\r\n\r\n // Zero?\r\n if (i < 0) {\r\n e = 0;\r\n rd = [0];\r\n } else {\r\n e = -1;\r\n\r\n // Remove leading words which are zero and adjust exponent accordingly.\r\n for (; rd[0] === 0; e -= LOG_BASE) rd.shift();\r\n\r\n // Count the digits of the first word of rd to determine leading zeros.\r\n for (k = 1, n = rd[0]; n >= 10; n /= 10) k++;\r\n\r\n // Adjust the exponent for leading zeros of the first word of rd.\r\n if (k < LOG_BASE) e -= LOG_BASE - k;\r\n }\r\n\r\n r.e = e;\r\n r.d = rd;\r\n\r\n return r;\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is `x` rounded to an integer using rounding mode `rounding`.\r\n *\r\n * To emulate `Math.round`, set rounding to 7 (ROUND_HALF_CEIL).\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\n function round(x) {\r\n return finalise(x = new this(x), x.e + 1, this.rounding);\r\n }\r\n\r\n\r\n /*\r\n * Return\r\n * 1 if x > 0,\r\n * -1 if x < 0,\r\n * 0 if x is 0,\r\n * -0 if x is -0,\r\n * NaN otherwise\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\n function sign(x) {\r\n x = new this(x);\r\n return x.d ? (x.d[0] ? x.s : 0 * x.s) : x.s || NaN;\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the sine of `x`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\n function sin(x) {\r\n return new this(x).sin();\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the hyperbolic sine of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\n function sinh(x) {\r\n return new this(x).sinh();\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the square root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\n function sqrt(x) {\r\n return new this(x).sqrt();\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is `x` minus `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\n function sub(x, y) {\r\n return new this(x).sub(y);\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the sum of the arguments, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * Only the result is rounded, not the intermediate calculations.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\n function sum() {\r\n var i = 0,\r\n args = arguments,\r\n x = new this(args[i]);\r\n\r\n external = false;\r\n for (; x.s && ++i < args.length;) x = x.plus(args[i]);\r\n external = true;\r\n\r\n return finalise(x, this.precision, this.rounding);\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the tangent of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\n function tan(x) {\r\n return new this(x).tan();\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the hyperbolic tangent of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\n function tanh(x) {\r\n return new this(x).tanh();\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is `x` truncated to an integer.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\n function trunc(x) {\r\n return finalise(x = new this(x), x.e + 1, 1);\r\n }\r\n\r\n\r\n // Create and configure initial Decimal constructor.\r\n Decimal = clone(DEFAULTS);\r\n Decimal.prototype.constructor = Decimal;\r\n Decimal['default'] = Decimal.Decimal = Decimal;\r\n\r\n // Create the internal constants from their string values.\r\n LN10 = new Decimal(LN10);\r\n PI = new Decimal(PI);\r\n\r\n\r\n // Export.\r\n\r\n\r\n // AMD.\r\n if (typeof define == 'function' && define.amd) {\r\n define(function () {\r\n return Decimal;\r\n });\r\n\r\n // Node and other environments that support module.exports.\r\n } else if (typeof module != 'undefined' && module.exports) {\r\n if (typeof Symbol == 'function' && typeof Symbol.iterator == 'symbol') {\r\n P[Symbol['for']('nodejs.util.inspect.custom')] = P.toString;\r\n P[Symbol.toStringTag] = 'Decimal';\r\n }\r\n\r\n module.exports = Decimal;\r\n\r\n // Browser.\r\n } else {\r\n if (!globalScope) {\r\n globalScope = typeof self != 'undefined' && self && self.self == self ? self : window;\r\n }\r\n\r\n noConflict = globalScope.Decimal;\r\n Decimal.noConflict = function () {\r\n globalScope.Decimal = noConflict;\r\n return Decimal;\r\n };\r\n\r\n globalScope.Decimal = Decimal;\r\n }\r\n})(this);\r\n","/**\n * @fileoverview Converts Big Integers to human readable format.\n */\n\nconst invariant = require('invariant');\nconst Decimal = require('decimal.js');\n\nconst fractions = (module.exports = {});\n\n/**\n * Will convert the fraction of the two tokens into a significant representation.\n *\n * @param {Array<bigint>} fraction Fraction tupple array containing the numerator\n * and denominator.\n * @param {Object=} optOptions Calculation options.\n * @param {number=} optOptions.significantDigits How many significant digits to use.\n * @param {boolean|Array=} optOptions.format Format the output using Intl.NumberFormat.\n * @param {boolean=} optOptions.reverse Set to true to reverse the ratio calculation.\n * @param {number=} optOptions.rounding Decimal.js rounding constant.\n * @return {string} The result.\n */\nfractions.toSignificant = (fraction, optOptions = {}) => {\n const { format, reverse } = optOptions;\n let { decimalPlaces: significantDigits, rounding } = optOptions;\n\n if (!significantDigits) {\n significantDigits = 5;\n }\n\n if (!rounding) {\n rounding = Decimal.ROUND_HALF_UP;\n }\n\n let [numerator, denominator] = fraction;\n\n if (reverse) {\n const tmpNumerator = numerator;\n numerator = denominator;\n denominator = tmpNumerator;\n }\n\n const res = new Decimal(numerator.toString())\n .div(denominator.toString())\n .toSignificantDigits(significantDigits, rounding)\n .toString();\n\n return fractions._checkformat(res, 'significant', significantDigits, format);\n};\n\n/**\n * Will convert the fraction of the two tokens into a fixed representation.\n *\n * @param {Array<bigint>} fraction Fraction tupple Array containing the numerator\n * and denominator.\n * @param {Object=} optOptions Calculation options.\n * @param {number=} optOptions.decimalPlaces How many decimals to use.\n * @param {boolean|Array=} optOptions.format Format the output using Intl.NumberFormat.\n * @param {boolean=} optOptions.reverse Set to true to reverse the ratio calculation.\n * @param {number=} optOptions.rounding Decimal.js rounding constant.\n * @return {string} The result.\n */\nfractions.toFixed = (fraction, optOptions = {}) => {\n const { format, reverse } = optOptions;\n let { decimalPlaces, rounding } = optOptions;\n\n if (!decimalPlaces) {\n decimalPlaces = 5;\n }\n\n if (!rounding) {\n rounding = Decimal.ROUND_HALF_UP;\n }\n\n let [numerator, denominator] = fraction;\n\n if (reverse) {\n const tmpNumerator = numerator;\n numerator = denominator;\n denominator = tmpNumerator;\n }\n\n const res = new Decimal(numerator.toString())\n .div(denominator.toString())\n .toFixed(decimalPlaces, rounding);\n\n return fractions._checkformat(res, 'fixed', decimalPlaces, format);\n};\n\n/**\n * Will divide and format the fraction by either using toFixed or toSignificant\n * automatically, depending if the fracrtion division is above or bellow 1.\n *\n * @param {Array<bigint>} fraction Fraction tupple Array containing the numerator\n * and denominator.\n * @param {Object=} optOptions Calculation options.\n * @param {number=} optOptions.decimalPlaces How many decimals to use.\n * @param {boolean|Array=} optOptions.format Format the output using Intl.NumberFormat.\n * @param {boolean=} optOptions.reverse Set to true to reverse the ratio calculation.\n * @param {number=} optOptions.rounding Decimal.js rounding constant.\n * @return {string} The result.\n */\nfractions.toAuto = (fraction, optOptions = {}) => {\n const { reverse } = optOptions;\n\n let [numerator, denominator] = fraction;\n\n if (reverse) {\n const tmpNumerator = numerator;\n numerator = denominator;\n denominator = tmpNumerator;\n }\n\n const tempRes = Decimal.div(\n numerator.toString(),\n denominator.toString(),\n ).toNumber();\n\n if (tempRes > 1) {\n return fractions.toFixed(fraction, optOptions);\n }\n\n return fractions.toSignificant(fraction, optOptions);\n};\n\n/**\n * Checks and applies format if it exists.\n *\n * @param {string} res result from the calculations\n * @param {string} callee Invoking function.\n * @param {number} decimalPlaces How many decimal places to use.\n * @param {boolean|Array=} optFormat Format the output using Intl.NumberFormat.\n * @return {string} Formatted outcome.\n * @private\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat\n */\nfractions._checkformat = (res, callee, decimalPlaces, optFormat) => {\n if (!optFormat) {\n return res;\n }\n\n if (optFormat === true) {\n const options = {};\n if (callee === 'significant') {\n options.maximumSignificantDigits = decimalPlaces;\n }\n if (callee === 'fixed') {\n options.maximumFractionDigits = decimalPlaces;\n }\n return Intl.NumberFormat('en-US', options).format(res);\n }\n\n if (Array.isArray(optFormat)) {\n return Intl.NumberFormat.apply(null, optFormat).format(res);\n }\n\n invariant(false, 'format argument can be either a boolean or an Array');\n};\n","/**\n * @fileoverview Token related utilities.\n */\n\nconst { expDecs } = require('./utils');\nconst { toSignificant, toFixed, toAuto } = require('./fractions');\n\nconst token = (module.exports = {});\n\n/**\n * Will format the token quantity with significant decimals.\n *\n * @param {string|bigint} tokens Quantity of Tokens.\n * @param {string|number} decimals Decimal places of the token.\n * @param {Object=} optOptions Calculation options.\n * @param {number=} optOptions.decimalPlaces How many decimals to use.\n * @param {boolean|Array=} optOptions.format Format the output using Intl.NumberFormat.\n * @param {number=} optOptions.rounding Decimal.js rounding constant.\n * @return {string} the formatted result.\n */\ntoken.tokenToSignificant = (tokens, decimals, optOptions) => {\n const decimalsExp = expDecs(decimals);\n\n const fraction = [tokens, decimalsExp];\n return toSignificant(fraction, optOptions);\n};\n\n/**\n * Will format the token quantity with fixed decimals.\n *\n * @param {string|bigint} tokens Quantity of Tokens.\n * @param {string|number} decimals Decimal places of the token.\n * @param {Object=} optOptions Calculation options.\n * @param {number=} optOptions.decimalPlaces How many decimals to use.\n * @param {boolean|Array=} optOptions.format Format the output using Intl.NumberFormat.\n * @param {number=} optOptions.rounding Decimal.js rounding constant.\n * @return {string} the formatted result.\n */\ntoken.tokenToFixed = (tokens, decimals, optOptions) => {\n const decimalsExp = expDecs(decimals);\n\n const fraction = [tokens, decimalsExp];\n return toFixed(fraction, optOptions);\n};\n\n/**\n * Will format the token quantity with fixed decimals.\n *\n * @param {string|bigint} tokens Quantity of Tokens.\n * @param {string|number} decimals Decimal places of the token.\n * @param {Object=} optOptions Calculation options.\n * @param {number=} optOptions.decimalPlaces How many decimals to use.\n * @param {boolean|Array=} optOptions.format Format the output using Intl.NumberFormat.\n * @param {number=} optOptions.rounding Decimal.js rounding constant.\n * @return {string} the formatted result.\n */\ntoken.tokenToAuto = (tokens, decimals, optOptions) => {\n const decimalsExp = expDecs(decimals);\n\n const fraction = [tokens, decimalsExp];\n return toAuto(fraction, optOptions);\n};\n","/**\n * @fileoverview Calculates rate between two liquidity pool tokens.\n */\n\nconst JSBI = require('jsbi');\n\nconst { expDecs, biConv } = require('./utils');\nconst { toAuto } = require('./fractions');\n\nconst token = (module.exports = {});\n\n/**\n * Calculates rate between two liquidity pool tokens.\n *\n * @param {Array<string|bigint>} poolFraction Array tuple with liquidity pool\n * quantity of Tokens.\n * @param {Array<string|number>} decimalFraction Array tuple of decimal\n * places of each token in poolFraction.\n * @param {Object=} optOptions Calculation options.\n * @param {number=} optOptions.decimalPlaces How many decimals to use.\n * @param {boolean|Array=} optOptions.format Format the output using Intl.NumberFormat.\n * @param {boolean=} optOptions.reverse Set to true to reverse the ratio calculation.\n * @param {number=} optOptions.rounding Decimal.js rounding constant.\n * @return {string} the formatted result.\n */\ntoken.poolTokensToAuto = (poolFraction, decimalFraction, optOptions = {}) => {\n const [token0Reserves, token1Reserves] = poolFraction;\n const [token0Decimals, token1Decimals] = decimalFraction;\n\n const scalarNumerator = expDecs(biConv(token0Decimals));\n const scalarDenominator = expDecs(biConv(token1Decimals));\n\n const adjustedForDecimalsNumerator = JSBI.BigInt(\n JSBI.multiply(scalarDenominator, biConv(token0Reserves)),\n );\n const adjustedForDecimalsDenominator = JSBI.BigInt(\n JSBI.multiply(scalarNumerator, biConv(token1Reserves)),\n );\n\n const numerator = adjustedForDecimalsNumerator;\n const denominator = adjustedForDecimalsDenominator;\n\n const fraction = [numerator, denominator];\n\n return toAuto(fraction, optOptions);\n};\n","/**\n * @fileoverview Calculate percentages of bignumbers\n */\n\nconst entity = (module.exports = {});\n\n/**\n * Get the percentage of the number (i.e. for 100 and 5%, return 5).\n *\n * @param {bigint} biNum The number to get the percentage of.\n * @param {number} basisPoints Percent expressed with a precision of 10000\n * (i.e. 1% = 100).\n * @param {number=} optPrecision The precision of the percentage, default 10000.\n * @return {bigint} The percentage of the number.\n */\nentity.percentage = (biNum, basisPoints, optPrecision = 10000) => {\n const precision = BigInt(optPrecision);\n const percentageMult = biNum * BigInt(basisPoints);\n const percentage = percentageMult / precision;\n\n return percentage;\n};\n\n/**\n * Get the percentage remainter of the number (i.e. for 100 and 5%, return 95).\n *\n * @param {bigint} biNum The number to get the percentage of.\n * @param {number} basisPoints Percent expressed with a precision of 10000\n * (i.e. 1% = 100).\n * @param {number=} optPrecision The precision of the percentage, default 10000.\n * @return {bigint} The percentage remainter of the number.\n */\nentity.percentRemainder = (biNum, basisPoints, optPrecision = 10000) => {\n const percentage = entity.percentage(biNum, basisPoints, optPrecision);\n const remainter = biNum - percentage;\n return remainter;\n};\n","/**\n * @fileoverview Constants needed.\n */\n\nconst Decimal = require('decimal.js');\n\nconst consts = (module.exports = {});\n\n/**\n * @enum {number} Rounding constants of Decimal package.\n * @see https://mikemcl.github.io/decimal.js/#modes\n */\nconsts.Rounding = {\n ROUND_UP: Decimal.ROUND_UP,\n ROUND_DOWN: Decimal.ROUND_DOWN,\n ROUND_CEIL: Decimal.ROUND_CEIL,\n ROUND_FLOOR: Decimal.ROUND_FLOOR,\n ROUND_HALF_UP: Decimal.ROUND_HALF_UP,\n ROUND_HALF_DOWN: Decimal.ROUND_HALF_DOWN,\n ROUND_HALF_EVEN: Decimal.ROUND_HALF_EVEN,\n ROUND_HALF_CEIL: Decimal.ROUND_HALF_CEIL,\n ROUND_HALF_FLOO: Decimal.ROUND_HALF_FLOO,\n};\n","/**\n * crypto-utils\n * Crypto utilities for tokens and format\n *\n * https://github.com/thanpolas/crypto-utils\n *\n * Copyright © Thanos Polychronakis\n * LICENSE on /LICENSE file.\n */\n\n/**\n * @fileoverview bootstrap and master exporting module.\n */\n\nconst { tokenToSignificant, tokenToFixed, tokenToAuto } = require('./tokens');\nconst { toSignificant, toFixed, toAuto } = require('./fractions');\nconst { poolTokensToAuto } = require('./pool-tokens');\nconst { percentage, percentRemainder } = require('./percentage');\nconst { expDecs, biConv } = require('./utils');\nconst { Rounding } = require('./constants');\n\nconst app = (module.exports = {});\n\napp.tokenToSignificant = tokenToSignificant;\napp.tokenToFixed = tokenToFixed;\napp.tokenToAuto = tokenToAuto;\napp.poolTokensToAuto = poolTokensToAuto;\napp.toSignificant = toSignificant;\napp.toFixed = toFixed;\napp.toAuto = toAuto;\napp.expDecs = expDecs;\napp.biConv = biConv;\napp.Rounding = Rounding;\napp.percentage = percentage;\napp.percentRemainder = percentRemainder;\n","/**\n * @fileoverview Functional context for chaining fraction calculating and\n * formatting commands.\n * @see https://github.com/thanpolas/crypto-utils\n */\n\nconst { toSignificant, toFixed, toAuto } = require('@thanpolas/crypto-utils');\n\n/**\n * Functional context for chaining commands.\n *\n * @param {Object<bigint>} fraction Fraction object containing the numerator\n * and denominator.\n * @return {Object} Chainable context with formatting functions.\n */\nmodule.exports = function chainContext(fraction) {\n return {\n toFixed: toFixed.bind(null, fraction),\n toSignificant: toSignificant.bind(null, fraction),\n toAuto: toAuto.bind(null, fraction),\n toFraction: () => fraction,\n };\n};\n","/**\n * @fileoverview Required Uniswap V3 constants.\n */\n\nconst JSBI = require('jsbi');\nconst { Rounding } = require('@thanpolas/crypto-utils');\n\nconst consts = (module.exports = {});\n\n/** @const {number} RESOLUTION fixed point resolution */\nconsts.RESOLUTION = JSBI.BigInt(96);\n\n// constants used internally but not expected to be used externally\nconsts.NEGATIVE_ONE = JSBI.BigInt(-1);\nconsts.ZERO = JSBI.BigInt(0);\nconsts.ONE = JSBI.BigInt(1);\nconsts.TWO = JSBI.BigInt(2);\n\n// used in liquidity amount math\nconsts.Q32 = JSBI.exponentiate(JSBI.BigInt(2), JSBI.BigInt(32));\nconsts.Q96 = JSBI.exponentiate(JSBI.BigInt(2), JSBI.BigInt(96));\nconsts.Q192 = JSBI.exponentiate(consts.Q96, JSBI.BigInt(2));\n\nconsts.MaxUint256 = JSBI.BigInt(\n '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',\n);\n\n/**\n * The minimum tick that can be used on any pool.\n */\nconsts.MIN_TICK = -887272;\n/**\n * The maximum tick that can be used on any pool.\n */\nconsts.MAX_TICK = -consts.MIN_TICK;\n\n/**\n * The sqrt ratio corresponding to the minimum tick that could be used on any pool.\n */\nconsts.MIN_SQRT_RATIO = JSBI.BigInt('4295128739');\n/**\n * The sqrt ratio corresponding to the maximum tick that could be used on any pool.\n */\nconsts.MAX_SQRT_RATIO = JSBI.BigInt(\n '1461446703485210103287273052203988822378723970342',\n);\n\n/**\n * @enum {number} Normalized rounding for this package.\n */\nconsts.Rounding = Rounding;\n","/**\n * @fileoverview Utilities and helpers.\n */\nconst JSBI = require('jsbi');\nconst invariant = require('invariant');\n\nconst MAX_SAFE_INTEGER = JSBI.BigInt(Number.MAX_SAFE_INTEGER);\n\nconst ZERO = JSBI.BigInt(0);\nconst ONE = JSBI.BigInt(1);\nconst TWO = JSBI.BigInt(2);\n\nconst utils = (module.exports = {});\n/**\n * Calculates the sqrt ratio as a Q64.96 corresponding to a given ratio of amount1 and amount0\n *\n * @param {bigint} amount1 the numerator amount, i.e. amount of token1.\n * @param {bigint} amount0 the denominator amount, i.en amount of token0.\n * @return {bigint} the sqrt ratio.\n */\nutils.encodeSqrtRatioX96 = (amount1, amount0) => {\n const numerator = JSBI.leftShift(JSBI.BigInt(amount1), JSBI.BigInt(192));\n const denominator = JSBI.BigInt(amount0);\n const ratioX192 = JSBI.divide(numerator, denominator);\n return utils.sqrt(ratioX192);\n};\n\n/**\n * Computes floor(sqrt(value))\n *\n * @param {bigint} value the value for which to compute the square root, rounded down\n * @return {bigint}\n */\nutils.sqrt = (value) => {\n invariant(JSBI.greaterThanOrEqual(value, ZERO), 'NEGATIVE');\n\n // rely on built in sqrt if possible\n if (JSBI.lessThan(value, MAX_SAFE_INTEGER)) {\n return JSBI.BigInt(Math.floor(Math.sqrt(JSBI.toNumber(value))));\n }\n\n let z = value;\n let x = JSBI.add(JSBI.divide(value, TWO), ONE);\n\n while (JSBI.lessThan(x, z)) {\n z = x;\n x = JSBI.divide(JSBI.add(JSBI.divide(value, x), x), TWO);\n }\n return z;\n};\n\n/**\n * Calculates the tick local range (bottom and top) values given the tick and\n * spacing.\n *\n * @param {string} tickStr The tick value.\n * @param {string} tickSpacingStr The tick spacing value.\n * @param {number=} tickStep How many tick steps wide to capture liquidity.\n * @return {Array<number>} a tuple of the lower and highest tick local range.\n */\nutils.tickRange = (tickStr, tickSpacingStr, tickStep = 0) => {\n const tick = Number(tickStr);\n const tickSpacing = Number(tickSpacingStr);\n\n const tickSpacingStepped = tickSpacing * tickStep;\n\n const tickLow =\n Math.floor(tick / tickSpacing) * tickSpacing - tickSpacingStepped;\n const tickHigh = tickLow + tickSpacing + tickSpacingStepped * 2;\n\n return [tickLow, tickHigh];\n};\n\n/**\n * Will calculate the exponent for the given decimals number.\n *\n * @param {string|number} decs The decimal number.\n * @return {bigint} The decimals exponent.\n */\nutils.expDecs = (decs) => {\n return JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(decs));\n};\n\n/**\n * Converts a value to JSBI, if it's already a JSBI will just return it.\n *\n * @param {string|number|JSBI} numstr The value to convert.\n * @return {bigint} JSBI representation of the value.\n */\nutils.biConv = (numstr) => {\n let bi = numstr;\n if (typeof sqrtRatio !== 'bigint') {\n bi = JSBI.BigInt(numstr);\n }\n return bi;\n};\n","/**\n * @fileoverview Calculates the price (ratio) from sqrt ratio.\n */\n\nconst JSBI = require('jsbi');\n\nconst chainContext = require('./chain-context');\nconst { Q192 } = require('./constants');\nconst { expDecs } = require('./utils');\n\nconst entity = (module.exports = {});\n\n/**\n * Calculates the price (ratio) from sqrt price.\n *\n * @param {Array<number|string>} tokenDecimals Array tuple of token decimals.\n * @param {string} sqrtRatioX96 The tick value.\n * @return {Object} The chain context.\n */\nentity.sqrtPrice = (tokenDecimals, sqrtRatioX96) => {\n const [token0Decimals, token1Decimals] = tokenDecimals;\n const scalarNumerator = expDecs(token0Decimals);\n const scalarDenominator = expDecs(token1Decimals);\n\n const sqrtRatioX96BI = JSBI.BigInt(sqrtRatioX96);\n\n const inputNumerator = JSBI.multiply(sqrtRatioX96BI, sqrtRatioX96BI);\n const inputDenominator = Q192;\n\n const adjustedForDecimalsNumerator = JSBI.BigInt(\n JSBI.multiply(scalarDenominator, inputDenominator),\n );\n const adjustedForDecimalsDenominator = JSBI.BigInt(\n JSBI.multiply(scalarNumerator, inputNumerator),\n );\n\n const numerator = adjustedForDecimalsNumerator;\n const denominator = adjustedForDecimalsDenominator;\n\n const fraction = [numerator, denominator];\n\n const chainCtx = chainContext(fraction);\n\n return chainCtx;\n};\n","/**\n * @fileoverview Calculates the price based on tick value.\n */\n\nconst JSBI = require('jsbi');\nconst chainContext = require('./chain-context');\n\nconst entity = (module.exports = {});\n\n/**\n * Calculates the price based on tick value.\n *\n * @param {Array<number|string>} tokenDecimals Array tuple of token decimals.\n * @param {string} tick The tick value.\n * @return {Object} The chain context.\n */\nentity.tickPrice = (tokenDecimals, tick) => {\n const [token0Decimals, token1Decimals] = tokenDecimals;\n const t0dec = Number(token0Decimals);\n const t1dec = Number(token1Decimals);\n const absTick = Math.abs(tick);\n\n const denominator = JSBI.exponentiate(\n JSBI.BigInt(10),\n JSBI.BigInt(Math.abs(t0dec - t1dec)),\n );\n\n const numerator = 1.0001 ** absTick;\n\n const fraction = [numerator, denominator];\n\n const chainCtx = chainContext(fraction);\n\n return chainCtx;\n};\n","/* eslint-disable no-bitwise */\n/**\n * @fileoverview Utility functions for converting tick to sqrt and the opposite.\n */\n\nconst invariant = require('invariant');\nconst JSBI = require('jsbi');\n\nconst {\n Q32,\n ZERO,\n ONE,\n TWO,\n MaxUint256,\n MIN_TICK,\n MAX_TICK,\n MIN_SQRT_RATIO,\n MAX_SQRT_RATIO,\n} = require('./constants');\n\nconst entity = (module.exports = {});\n\nentity.POWERS_OF_2 = [128, 64, 32, 16, 8, 4, 2, 1].map((pow) => [\n pow,\n JSBI.exponentiate(TWO, JSBI.BigInt(pow)),\n]);\n\n/**\n * Multiplies and right shifts.\n *\n * @param {bigint} val The multiplier.\n * @param {string} mulBy Multiply by.\n * @return {bigint}\n */\nfunction mulShift(val, mulBy) {\n return JSBI.signedRightShift(\n JSBI.multiply(val, JSBI.BigInt(mulBy)),\n JSBI.BigInt(128),\n );\n}\n\n/**\n * Returns the sqrt ratio as a Q64.96 for the given tick. The sqrt ratio is\n * computed as sqrt(1.0001)^tick\n *\n * @param {string} tick the tick for which to compute the sqrt ratio.\n * @return {bigint} The SQRT value.\n */\nentity.getSqrtRatioAtTick = (tick) => {\n invariant(\n tick >= MIN_TICK && tick <= MAX_TICK && Number.isInteger(tick),\n 'TICK',\n );\n const absTick = tick < 0 ? tick * -1 : tick;\n\n let ratio =\n (absTick & 0x1) !== 0\n ? JSBI.BigInt('0xfffcb933bd6fad37aa2d162d1a594001')\n : JSBI.BigInt('0x100000000000000000000000000000000');\n if ((absTick & 0x2) !== 0) {\n ratio = mulShift(ratio, '0xfff97272373d413259a46990580e213a');\n }\n if ((absTick & 0x4) !== 0) {\n ratio = mulShift(ratio, '0xfff2e50f5f656932ef12357cf3c7fdcc');\n }\n if ((absTick & 0x8) !== 0) {\n ratio = mulShift(ratio, '0xffe5caca7e10e4e61c3624eaa0941cd0');\n }\n if ((absTick & 0x10) !== 0) {\n ratio = mulShift(ratio, '0xffcb9843d60f6159c9db58835c926644');\n }\n if ((absTick & 0x20) !== 0) {\n ratio = mulShift(ratio, '0xff973b41fa98c081472e6896dfb254c0');\n }\n if ((absTick & 0x40) !== 0) {\n ratio = mulShift(ratio, '0xff2ea16466c96a3843ec78b326b52861');\n }\n if ((absTick & 0x80) !== 0) {\n ratio = mulShift(ratio, '0xfe5dee046a99a2a811c461f1969c3053');\n }\n if ((absTick & 0x100) !== 0) {\n ratio = mulShift(ratio, '0xfcbe86c7900a88aedcffc83b479aa3a4');\n }\n if ((absTick & 0x200) !== 0) {\n ratio = mulShift(ratio, '0xf987a7253ac413176f2b074cf7815e54');\n }\n if ((absTick & 0x400) !== 0) {\n ratio = mulShift(ratio, '0xf3392b0822b70005940c7a398e4b70f3');\n }\n if ((absTick & 0x800) !== 0) {\n ratio = mulShift(ratio, '0xe7159475a2c29b7443b29c7fa6e889d9');\n }\n if ((absTick & 0x1000) !== 0) {\n ratio = mulShift(ratio, '0xd097f3bdfd2022b8845ad8f792aa5825');\n }\n if ((absTick & 0x2000) !== 0) {\n ratio = mulShift(ratio, '0xa9f746462d870fdf8a65dc1f90e061e5');\n }\n if ((absTick & 0x4000) !== 0) {\n ratio = mulShift(ratio, '0x70d869a156d2a1b890bb3df62baf32f7');\n }\n if ((absTick & 0x8000) !== 0) {\n ratio = mulShift(ratio, '0x31be135f97d08fd981231505542fcfa6');\n }\n if ((absTick & 0x10000) !== 0) {\n ratio = mulShift(ratio, '0x9aa508b5b7a84e1c677de54f3e99bc9');\n }\n if ((absTick & 0x20000) !== 0) {\n ratio = mulShift(ratio, '0x5d6af8dedb81196699c329225ee604');\n }\n if ((absTick & 0x40000) !== 0) {\n ratio = mulShift(ratio, '0x2216e584f5fa1ea926041bedfe98');\n }\n if ((absTick & 0x80000) !== 0) {\n ratio = mulShift(ratio, '0x48a170391f7dc42444e8fa2');\n }\n\n if (tick > 0) {\n ratio = JSBI.divide(MaxUint256, ratio);\n }\n\n // back to Q96\n const result = JSBI.greaterThan(JSBI.remainder(ratio, Q32), ZERO)\n ? JSBI.add(JSBI.divide(ratio, Q32), ONE)\n : JSBI.divide(ratio, Q32);\n\n return result;\n};\n\n/**\n * Returns the tick corresponding to a given sqrt ratio,\n * s.t. #getSqrtRatioAtTick(tick) <= sqrtRatioX96\n * and #getSqrtRatioAtTick(tick + 1) > sqrtRatioX96\n *\n * @param {string} sqrtRatioX96 the sqrt ratio as a Q64.96 for which to\n * compute the tick.\n * @return {bigint} JSBI value of the tick.\n */\nentity.getTickAtSqrtRatio = (sqrtRatioX96) => {\n const sqrtRatio = JSBI.BigInt(sqrtRatioX96);\n invariant(\n JSBI.greaterThanOrEqual(sqrtRatio, MIN_SQRT_RATIO) &&\n JSBI.lessThan(sqrtRatio, MAX_SQRT_RATIO),\n 'SQRT_RATIO',\n );\n\n const sqrtRatioX128 = JSBI.leftShift(sqrtRatio, JSBI.BigInt(32));\n\n const msb = entity.mostSignificantBit(sqrtRatioX128);\n\n let r;\n if (JSBI.greaterThanOrEqual(JSBI.BigInt(msb), JSBI.BigInt(128))) {\n r = JSBI.signedRightShift(sqrtRatioX128, JSBI.BigInt(msb - 127));\n } else {\n r = JSBI.leftShift(sqrtRatioX128, JSBI.BigInt(127 - msb));\n }\n\n let log_2 = JSBI.leftShift(\n JSBI.subtract(JSBI.BigInt(msb), JSBI.BigInt(128)),\n JSBI.BigInt(64),\n );\n\n for (let i = 0; i < 14; i += 1) {\n r = JSBI.signedRightShift(JSBI.multiply(r, r), JSBI.BigInt(127));\n const f = JSBI.signedRightShift(r, JSBI.BigInt(128));\n log_2 = JSBI.bitwiseOr(log_2, JSBI.leftShift(f, JSBI.BigInt(63 - i)));\n r = JSBI.signedRightShift(r, f);\n }\n\n const log_sqrt10001 = JSBI.multiply(\n log_2,\n JSBI.BigInt('255738958999603826347141'),\n );\n\n const tickLow = JSBI.toNumber(\n JSBI.signedRightShift(\n JSBI.subtract(\n log_sqrt10001,\n JSBI.BigInt('3402992956809132418596140100660247210'),\n ),\n JSBI.BigInt(128),\n ),\n );\n const tickHigh = JSBI.toNumber(\n JSBI.signedRightShift(\n JSBI.add(\n log_sqrt10001,\n JSBI.BigInt('291339464771989622907027621153398088495'),\n ),\n JSBI.BigInt(128),\n ),\n );\n\n let result = tickLow;\n\n if (\n tickLow !== tickHigh &&\n JSBI.lessThanOrEqual(entity.getSqrtRatioAtTick(tickHigh), sqrtRatioX96)\n ) {\n result = tickHigh;\n }\n\n return result;\n};\n\n/**\n * Calculates the most significant bit.\n *\n * @param {bigint} x The value to calculate for.\n * @return {number} The most significant bit.\n */\nentity.mostSignificantBit = (x) => {\n invariant(JSBI.greaterThan(x, ZERO), 'ZERO');\n invariant(JSBI.lessThanOrEqual(x, MaxUint256), 'MAX');\n\n let msb = 0;\n for (const [power, min] of entity.POWERS_OF_2) {\n if (JSBI.greaterThanOrEqual(x, min)) {\n x = JSBI.signedRightShift(x, JSBI.BigInt(power));\n msb += power;\n }\n }\n return msb;\n};\n","/**\n * @fileoverview Calculates the reserves given the liquidity value and sqrt values.\n */\n\nconst JSBI = require('jsbi');\nconst { toFixed } = require('@thanpolas/crypto-utils');\n\n// const chainContext = require('./chain-context');\nconst { RESOLUTION, Q96 } = require('./constants');\nconst { getSqrtRatioAtTick, getTickAtSqrtRatio } = require('./tick-math');\nconst { tickRange, expDecs, biConv } = require('./utils');\n\nconst entity = (module.exports = {});\n\n/**\n * Calculates the reserves of tokens based on the current tick value and formats\n * appropriately given the decimals of each token.\n *\n * @param {Array<number|string>} tokenDecimals Array tuple of token decimals.\n * @param {string} liquidityStr The liquidity value.\n * @param {string} sqrtPriceStr The sqrt price value.\n * @param {string} tickSpacing The spacing between the ticks.\n * @param {Object} optOpts Calculation and formatting options.\n * @param {number=} optOpts.tickStep How many tick steps wide to capture liquidity.\n * @param {Object=} optOpts.token0Opts Token 0 liquidity crypto-utils formatting options.\n * @param {Object=} optOpts.token1Opts Token 1 liquidity crypto-utils formatting options.\n * @return {Array<string>} A tuple with the reserves of token0 and token1.\n */\nentity.getAmountsForCurrentLiquidity = (\n tokenDecimals,\n liquidityStr,\n sqrtPriceStr,\n tickSpacing,\n optOpts = {},\n) => {\n const { tickStep, token0Opts, token1Opts } = optOpts;\n\n const [dec0, dec1] = tokenDecimals;\n\n // Exponentiate the decimals\n const tok0Dec = expDecs(dec0);\n const tok1Dec = expDecs(dec1);\n\n // Convert to bigint\n const sqrtPrice = biConv(sqrtPriceStr);\n const liquidity = biConv(liquidityStr);\n\n // Get tick value from sqrt\n const tick = getTickAtSqrtRatio(sqrtPrice);\n\n // Get the tick range to calculate liquidity for\n const [tickLow, tickHigh] = tickRange(tick, tickSpacing, tickStep);\n\n // Get the sqrtRatio for the tick range (low and high tick).\n const sqrtA = getSqrtRatioAtTick(tickLow);\n const sqrtB = getSqrtRatioAtTick(tickHigh);\n\n // Calculate liquidity for both tokens\n const reserves = entity.getAmountsForLiquidityRange(\n sqrtPrice,\n sqrtA,\n sqrtB,\n liquidity,\n );\n\n const [token0RawLiquidity, token1RawLiquidity] = reserves;\n\n const fraction0 = [token0RawLiquidity, tok0Dec];\n const fraction1 = [token1RawLiquidity, tok1Dec];\n\n const reservesFormatted = [\n toFixed(fraction0, token0Opts),\n toFixed(fraction1, token1Opts),\n ];\n\n return reservesFormatted;\n};\n\n/**\n * Calculates the amount of token0 and token1 given current sqrt price and a range.\n *\n * @param {JSBI|string} sqrtRatioX96 Current SQRT Price.\n * @param {JSBI|string} sqrtRatioAX96 A sqrt price representing the first tick boundary.\n * @param {JSBI|string} sqrtRatioBX96 A sqrt price representing the second tick boundary.\n * @param {JSBI|string} liquidityStr The liquidity being valued.\n * @return {Array<string>} A tuple with the reserves of token0 and token1.\n */\nentity.getAmountsForLiquidityRange = (\n sqrtRatioX96,\n sqrtRatioAX96,\n sqrtRatioBX96,\n liquidityStr,\n) => {\n const sqrtRatio = biConv(sqrtRatioX96);\n let sqrtRatioA = biConv(sqrtRatioAX96);\n let sqrtRatioB = biConv(sqrtRatioBX96);\n const liquidity = biConv(liquidityStr);\n\n if (JSBI.greaterThan(sqrtRatioA, sqrtRatioB)) {\n sqrtRatioA = sqrtRatioB;\n sqrtRatioB = sqrtRatioA;\n }\n\n let amount0 = 0;\n let amount1 = 0;\n\n if (JSBI.lessThanOrEqual(sqrtRatio, sqrtRatioA)) {\n amount0 = entity.getAmount0ForLiquidity(sqrtRatioA, sqrtRatioB, liquidity);\n } else if (JSBI.lessThan(sqrtRatio, sqrtRatioB)) {\n amount0 = entity.getAmount0ForLiquidity(sqrtRatio, sqrtRatioB, liquidity);\n amount1 = entity.getAmount1ForLiquidity(sqrtRatioA, sqrtRatio, liquidity);\n } else {\n amount1 = entity.getAmount1ForLiquidity(sqrtRatioA, sqrtRatioB, liquidity);\n }\n\n return [amount0, amount1];\n};\n\n/**\n * Computes the amount of token0 for a given amount of liquidity and a price range.\n *\n * @param {bigint} sqrtRatioAX96 A sqrt price representing the first tick boundary.\n * @param {bigint} sqrtRatioBX96 A sqrt price representing the second tick boundary.\n * @param {bigint} liquidity The liquidity being valued.\n * @return {number} The amount of token0.\n */\nentity.getAmount0ForLiquidity = (sqrtRatioAX96, sqrtRatioBX96, liquidity) => {\n let sqrtRatioA = sqrtRatioAX96;\n let sqrtRatioB = sqrtRatioBX96;\n\n if (JSBI.greaterThan(sqrtRatioA, sqrtRatioB)) {\n sqrtRatioA = sqrtRatioB;\n sqrtRatioB = sqrtRatioA;\n }\n\n const leftShiftedLiquidity = JSBI.leftShift(liquidity, RESOLUTION);\n const sqrtDiff = JSBI.subtract(sqrtRatioB, sqrtRatioA);\n const multipliedRes = JSBI.multiply(leftShiftedLiquidity, sqrtDiff);\n const numerator = JSBI.divide(multipliedRes, sqrtRatioB);\n\n const amount0 = JSBI.divide(numerator, sqrtRatioA);\n\n return amount0;\n};\n\n/**\n * Computes the amount of token1 for a given amount of liquidity and a price range.\n *\n * @param {bigint} sqrtRatioAX96 A sqrt price representing the first tick boundary.\n * @param {bigint} sqrtRatioBX96 A sqrt price representing the second tick boundary.\n * @param {bigint} liquidity The liquidity being valued.\n * @return {number} The amount of token1.\n */\nentity.getAmount1ForLiquidity = (sqrtRatioAX96, sqrtRatioBX96, liquidity) => {\n let sqrtRatioA = sqrtRatioAX96;\n let sqrtRatioB = sqrtRatioBX96;\n\n if (JSBI.greaterThan(sqrtRatioA, sqrtRatioB)) {\n sqrtRatioA = sqrtRatioB;\n sqrtRatioB = sqrtRatioA;\n }\n\n const sqrtDiff = JSBI.subtract(sqrtRatioB, sqrtRatioA);\n const multipliedRes = JSBI.multiply(liquidity, sqrtDiff);\n\n const amount1 = JSBI.divide(multipliedRes, Q96);\n\n return amount1;\n};\n","/**\n * Uniswap V3 Prices calculator.\n * Library to calculate Uniswap V3 ratios (prices) from token pairs.\n *\n * https://github.com/thanpolas/univ3-prices\n *\n * Copyright © Thanos Polychronakis\n * LICENSE on /LICENSE file.\n */\n\n/**\n * @fileoverview Public API\n */\n\nconst { sqrtPrice } = require('./sqrt-price');\nconst {\n encodeSqrtRatioX96,\n sqrt,\n tickRange,\n biConv,\n expDecs,\n} = require('./utils');\nconst { tickPrice } = require('./tick-price');\nconst {\n getAmountsForCurrentLiquidity,\n getAmountsForLiquidityRange,\n} = require('./liquidity');\nconst { getSqrtRatioAtTick, getTickAtSqrtRatio } = require('./tick-math');\nconst consts = require('./constants');\n\nconst api = (module.exports = sqrtPrice);\n\napi.tickPrice = tickPrice;\napi.sqrtPrice = sqrtPrice;\n\n// Liquidity Functions\napi.getAmountsForCurrentLiquidity = getAmountsForCurrentLiquidity;\napi.getAmountsForLiquidityRange = getAmountsForLiquidityRange;\n\napi.tickMath = {\n getSqrtRatioAtTick,\n getTickAtSqrtRatio,\n};\n\napi.constants = consts;\n\napi.utils = {\n encodeSqrtRatioX96,\n sqrt,\n tickRange,\n expDecs,\n biConv,\n};\n","/* eslint-disable camelcase */\n/* eslint-disable no-shadow */\nimport { Signer } from '@ethersproject/abstract-signer';\nimport { Provider } from '@ethersproject/providers';\nimport { BigNumber } from 'ethers';\n\nexport type SignerOrProvider = Signer | Provider;\n\nexport enum SupportedChainId {\n Base = 8453,\n PulseChain = 369,\n BaseSepolia = 84532,\n}\n\nexport const algebraVaultDecimals = 18;\n\nexport type TotalAmountsBN = [BigNumber, BigNumber] & { total0: BigNumber; total1: BigNumber };\nexport type UserAmountsBN = [BigNumber, BigNumber, BigNumber];\nexport type TotalAmounts = [string, string, string] & { total0: string; total1: string };\nexport type UserAmounts = [string, string, string];\n\nexport type UserAmountsInVault = {\n poolAddress: string;\n vaultAddress: string;\n userAmounts: UserAmounts;\n};\n\nexport type UserAmountsInVaultBN = {\n poolAddress: string;\n vaultAddress: string;\n userAmounts: UserAmountsBN;\n};\n\nexport interface AlgebraVault {\n id: string;\n tokenA: string;\n tokenB: string;\n allowTokenA: boolean;\n allowTokenB: boolean;\n holdersCount?: string;\n fee?: string;\n}\n\nexport type VaultShares = {\n vault: {\n id: string;\n tokenA: string;\n tokenB: string;\n pool: string;\n };\n vaultShareBalance: string;\n vaultShareStaked: string;\n};\nexport type UserBalances = {\n vaultShares: VaultShares[];\n};\n\nexport interface VaultState {\n totalAmount0: string;\n totalAmount1: string;\n createdAtTimestamp: string;\n vault: string;\n sqrtPrice: string;\n totalSupply: string;\n}\n\nexport interface Fees extends VaultState {\n feeAmount0: string;\n feeAmount1: string;\n totalAmount0: string;\n totalAmount1: string;\n createdAtTimestamp: string;\n vault: string;\n sqrtPrice: string;\n totalSupply: string;\n}\n\nexport interface VaultTransactionEvent extends VaultState {\n amount0: string;\n amount1: string;\n totalAmount0: string;\n totalAmount1: string;\n totalAmount0BeforeEvent: string;\n totalAmount1BeforeEvent: string;\n createdAtTimestamp: string;\n vault: string;\n sqrtPrice: string;\n totalSupply: string;\n shares: string;\n}\n\nexport type FeesInfo = {\n timePeriod: number;\n feeAmount0: string;\n feeAmount1: string;\n pctAPR: number;\n};\n\nexport type DepositTokenRatio = {\n atTimestamp: string;\n percent: number;\n};\n\nexport type AverageDepositTokenRatio = {\n timePeriod: number; // in days\n percent: number;\n};\n\nexport type VaultApr = {\n timeInterval: number; // in days\n apr: number | null; // percent\n};\n\nexport type FeeAprData = {\n feeApr_1d: number | null;\n feeApr_3d: number | null;\n feeApr_7d: number | null;\n feeApr_30d: number | null;\n};\n\nexport type PriceChange = {\n timeInterval: number; // in days\n priceChange: number | null;\n};\n\nexport type UserBalanceInVault = {\n vaultAddress: string;\n poolAddress: string;\n shares: string;\n stakedShares: string;\n};\nexport type UserBalanceInVaultBN = {\n vaultAddress: string;\n poolAddress: string;\n shares: BigNumber;\n stakedShares: BigNumber;\n};\n\nexport type VaultMetrics = {\n timeInterval: number; // in days\n lpPriceChange: number | null;\n lpApr: number | null; // percent\n avgDtr: number;\n feeApr: number;\n};\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n AlgebraVault,\n AlgebraVaultInterface,\n IALMVault,\n} from \"../AlgebraVault\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_pool\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"_allowToken0\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"_allowToken1\",\n type: \"bool\",\n },\n {\n components: [\n {\n internalType: \"uint32\",\n name: \"twapPeriod\",\n type: \"uint32\",\n },\n {\n internalType: \"uint32\",\n name: \"auxTwapPeriod\",\n type: \"uint32\",\n },\n {\n internalType: \"uint32\",\n name: \"minObservationWindow\",\n type: \"uint32\",\n },\n {\n internalType: \"uint32\",\n name: \"maxTwapStaleness\",\n type: \"uint32\",\n },\n {\n internalType: \"uint32\",\n name: \"maxTwapStalenessLimit\",\n type: \"uint32\",\n },\n ],\n internalType: \"struct IALMVault.OracleSettings\",\n name: \"oracleSettingsInput\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"_vaultIndex\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [],\n name: \"DisconnectedPlugin\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"EmptyVault\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"IdenticalPositions\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidAddress\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidDeposit\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidOracleConfig\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidPosition\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidValue\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"NotManager\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"NotRebalancer\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"last\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"current\",\n type: \"uint256\",\n },\n ],\n name: \"StaleOracleData\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"TokensOwed\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"TwapPeriodOutOfRange\",\n type: \"error\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"depositFee\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"withdrawFee\",\n type: \"uint256\",\n },\n ],\n name: \"ActionFees\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"affiliate\",\n type: \"address\",\n },\n ],\n name: \"Affiliate\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"ammFeeRecipient\",\n type: \"address\",\n },\n ],\n name: \"AmmFeeRecipient\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"feeAmount0\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"feeAmount1\",\n type: \"uint256\",\n },\n ],\n name: \"CollectFees\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"allowToken0\",\n type: \"bool\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"allowToken1\",\n type: \"bool\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"twapPeriod\",\n type: \"uint256\",\n },\n ],\n name: \"DeployALMVault\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"shares\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount0\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount1\",\n type: \"uint256\",\n },\n ],\n name: \"Deposit\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"deposit0Max\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"deposit1Max\",\n type: \"uint256\",\n },\n ],\n name: \"DepositMax\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"farmingContract\",\n type: \"address\",\n },\n ],\n name: \"FarmingContract\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"hysteresis\",\n type: \"uint256\",\n },\n ],\n name: \"Hysteresis\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"int24\",\n name: \"tick\",\n type: \"int24\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"totalAmount0\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"totalAmount1\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"feeAmount0\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"feeAmount1\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"totalSupply\",\n type: \"uint256\",\n },\n ],\n name: \"Rebalance\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"rebalanceManager\",\n type: \"address\",\n },\n ],\n name: \"RebalanceManager\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"reward\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"bonusReward\",\n type: \"uint256\",\n },\n ],\n name: \"RewardsCollected\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"last\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"current\",\n type: \"uint256\",\n },\n ],\n name: \"StaleOracle\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint32\",\n name: \"twapPeriod\",\n type: \"uint32\",\n },\n {\n indexed: false,\n internalType: \"uint32\",\n name: \"auxTwapPeriod\",\n type: \"uint32\",\n },\n {\n indexed: false,\n internalType: \"uint32\",\n name: \"minObservationWindow\",\n type: \"uint32\",\n },\n {\n indexed: false,\n internalType: \"uint32\",\n name: \"maxTwapStaleness\",\n type: \"uint32\",\n },\n ],\n name: \"TwapConfigUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"shares\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount0\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount1\",\n type: \"uint256\",\n },\n ],\n name: \"Withdraw\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MAX_TWAP_PERIOD\",\n outputs: [\n {\n internalType: \"uint32\",\n name: \"\",\n type: \"uint32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"MIN_TWAP_PERIOD\",\n outputs: [\n {\n internalType: \"uint32\",\n name: \"\",\n type: \"uint32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"affiliate\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"allowToken0\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"allowToken1\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"almVaultFactory\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"ammFeeRecipient\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"basePositionId\",\n outputs: [\n {\n internalType: \"uint32\",\n name: \"\",\n type: \"uint32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"baseRange\",\n outputs: [\n {\n internalType: \"int24\",\n name: \"lower\",\n type: \"int24\",\n },\n {\n internalType: \"int24\",\n name: \"upper\",\n type: \"int24\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"collectFees\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"fees0\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"fees1\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"collectRewards\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"currentTick\",\n outputs: [\n {\n internalType: \"int24\",\n name: \"\",\n type: \"int24\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"subtractedValue\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"deposit0\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deposit1\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n ],\n name: \"deposit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"shares\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"deposit0Max\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"deposit1Max\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"depositFee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"farmingRewardsDistributor\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBasePosition\",\n outputs: [\n {\n internalType: \"uint128\",\n name: \"liquidity\",\n type: \"uint128\",\n },\n {\n internalType: \"uint256\",\n name: \"amount0\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount1\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLimitPosition\",\n outputs: [\n {\n internalType: \"uint128\",\n name: \"liquidity\",\n type: \"uint128\",\n },\n {\n internalType: \"uint256\",\n name: \"amount0\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount1\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTotalAmounts\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"total0\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"total1\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"hysteresis\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"limitPositionId\",\n outputs: [\n {\n internalType: \"uint32\",\n name: \"\",\n type: \"uint32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"limitRange\",\n outputs: [\n {\n internalType: \"int24\",\n name: \"lower\",\n type: \"int24\",\n },\n {\n internalType: \"int24\",\n name: \"upper\",\n type: \"int24\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"oracleSettings\",\n outputs: [\n {\n internalType: \"uint32\",\n name: \"twapPeriod\",\n type: \"uint32\",\n },\n {\n internalType: \"uint32\",\n name: \"auxTwapPeriod\",\n type: \"uint32\",\n },\n {\n internalType: \"uint32\",\n name: \"minObservationWindow\",\n type: \"uint32\",\n },\n {\n internalType: \"uint32\",\n name: \"maxTwapStaleness\",\n type: \"uint32\",\n },\n {\n internalType: \"uint32\",\n name: \"maxTwapStalenessLimit\",\n type: \"uint32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"int24\",\n name: \"_baseLower\",\n type: \"int24\",\n },\n {\n internalType: \"int24\",\n name: \"_baseUpper\",\n type: \"int24\",\n },\n {\n internalType: \"int24\",\n name: \"_limitLower\",\n type: \"int24\",\n },\n {\n internalType: \"int24\",\n name: \"_limitUpper\",\n type: \"int24\",\n },\n {\n internalType: \"int256\",\n name: \"swapQuantity\",\n type: \"int256\",\n },\n ],\n name: \"rebalance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rebalanceManager\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_depositFee\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_withdrawFee\",\n type: \"uint256\",\n },\n ],\n name: \"setActionFees\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_affiliate\",\n type: \"address\",\n },\n ],\n name: \"setAffiliate\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_ammFeeRecipient\",\n type: \"address\",\n },\n ],\n name: \"setAmmFeeRecipient\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_deposit0Max\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_deposit1Max\",\n type: \"uint256\",\n },\n ],\n name: \"setDepositMax\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_farmingRewardsDistributor\",\n type: \"address\",\n },\n ],\n name: \"setFarmingRewardsDistributor\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_hysteresis\",\n type: \"uint256\",\n },\n ],\n name: \"setHysteresis\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_rebalanceManager\",\n type: \"address\",\n },\n ],\n name: \"setRebalanceManager\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint32\",\n name: \"newTwapPeriod\",\n type: \"uint32\",\n },\n {\n internalType: \"uint32\",\n name: \"newAuxTwapPeriod\",\n type: \"uint32\",\n },\n {\n internalType: \"uint32\",\n name: \"newMinObservationWindow\",\n type: \"uint32\",\n },\n {\n internalType: \"uint32\",\n name: \"newMaxTwapStaleness\",\n type: \"uint32\",\n },\n ],\n name: \"setTwapConfig\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"tickSpacing\",\n outputs: [\n {\n internalType: \"int24\",\n name: \"\",\n type: \"int24\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"token0\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"token1\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"int256\",\n name: \"amount0Delta\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"amount1Delta\",\n type: \"int256\",\n },\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n name: \"v4SwapCallback\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"shares\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n ],\n name: \"withdraw\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"amount0\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount1\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"withdrawFee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class AlgebraVault__factory {\n static readonly abi = _abi;\n static createInterface(): AlgebraVaultInterface {\n return new utils.Interface(_abi) as AlgebraVaultInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): AlgebraVault {\n return new Contract(address, _abi, signerOrProvider) as AlgebraVault;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n AlgebraVaultDepositGuard,\n AlgebraVaultDepositGuardInterface,\n} from \"../AlgebraVaultDepositGuard\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_ALMVaultFactory\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_WRAPPED_NATIVE\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"_ALMVaultFactory\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"_WETH\",\n type: \"address\",\n },\n ],\n name: \"Deployed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"vault\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"shares\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n ],\n name: \"DepositForwarded\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"ALMVaultFactory\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"WRAPPED_NATIVE\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"vaultDeployer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"minimumProceeds\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n ],\n name: \"forwardDepositToALMVault\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"vaultTokens\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"vaultDeployer\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minimumProceeds\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n ],\n name: \"forwardNativeDepositToALMVault\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"vaultTokens\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"vaultDeployer\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"shares\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minAmount0\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"minAmount1\",\n type: \"uint256\",\n },\n ],\n name: \"forwardNativeWithdrawFromALMVault\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"amount0\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount1\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"vaultDeployer\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"shares\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minAmount0\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"minAmount1\",\n type: \"uint256\",\n },\n ],\n name: \"forwardWithdrawFromALMVault\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"amount0\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount1\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"vaultDeployer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"token0\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"token1\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"allowToken0\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"allowToken1\",\n type: \"bool\",\n },\n ],\n name: \"vaultKey\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n stateMutability: \"payable\",\n type: \"receive\",\n },\n] as const;\n\nexport class AlgebraVaultDepositGuard__factory {\n static readonly abi = _abi;\n static createInterface(): AlgebraVaultDepositGuardInterface {\n return new utils.Interface(_abi) as AlgebraVaultDepositGuardInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): AlgebraVaultDepositGuard {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as AlgebraVaultDepositGuard;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { ERC20, ERC20Interface } from \"../ERC20\";\n\nconst _abi = [\n {\n constant: true,\n inputs: [],\n name: \"name\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_from\",\n type: \"address\",\n },\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n name: \"\",\n type: \"uint8\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n name: \"balance\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n {\n name: \"_spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n payable: true,\n stateMutability: \"payable\",\n type: \"fallback\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n] as const;\n\nexport class ERC20__factory {\n static readonly abi = _abi;\n static createInterface(): ERC20Interface {\n return new utils.Interface(_abi) as ERC20Interface;\n }\n static connect(address: string, signerOrProvider: Signer | Provider): ERC20 {\n return new Contract(address, _abi, signerOrProvider) as ERC20;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n FarmingRewardsDistributor,\n FarmingRewardsDistributorInterface,\n} from \"../FarmingRewardsDistributor\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_stakingToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_eternalFarming\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [],\n name: \"ActiveReward\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"AddressZero\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InsufficientPermission\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidAmount\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidBurn\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"IsStakingToken\",\n type: \"error\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Paused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"Recovered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"rewardToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"reward\",\n type: \"uint256\",\n },\n ],\n name: \"RewardPaid\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"rewardToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"RewardReserved\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"rewardToken\",\n type: \"address\",\n },\n ],\n name: \"RewardTokenAdded\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"rewardToken\",\n type: \"address\",\n },\n ],\n name: \"RewardsAutoLocked\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"RewardsUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"Stake\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Unpaused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"receivedAmount\",\n type: \"uint256\",\n },\n ],\n name: \"Unstake\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_rewardToken\",\n type: \"address\",\n },\n ],\n name: \"addReward\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"almVaultFactory\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"claimable\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"claimableRewards\",\n outputs: [\n {\n internalType: \"address[]\",\n name: \"\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"eternalFarming\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAllRewards\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"claimableAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"lockImmediately\",\n type: \"bool\",\n },\n ],\n name: \"getAllRewardsWithLock\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"claimableAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAutoLockBps\",\n outputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_onBehalfOf\",\n type: \"address\",\n },\n {\n internalType: \"address[]\",\n name: \"_rewardTokens\",\n type: \"address[]\",\n },\n ],\n name: \"getReward\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"claimableAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_onBehalfOf\",\n type: \"address\",\n },\n {\n internalType: \"address[]\",\n name: \"_rewardTokens\",\n type: \"address[]\",\n },\n {\n internalType: \"bool\",\n name: \"lockImmediately\",\n type: \"bool\",\n },\n ],\n name: \"getRewardWithLock\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"claimableAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"getUserData\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"tokenAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"lastTimeUpdated\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"rewardToken\",\n type: \"address\",\n },\n ],\n name: \"getUserRewardPerToken\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"rewardToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"lockReserved\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"newTokenId\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"rewardToken\",\n type: \"address\",\n },\n ],\n name: \"lockedCredits\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paused\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"tokenAddress\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"tokenAmount\",\n type: \"uint256\",\n },\n ],\n name: \"recoverERC20\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"rewardData\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"lastTimeUpdated\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"rewardPerToken\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"rewardTokens\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"onBehalfOf\",\n type: \"address\",\n },\n ],\n name: \"stake\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"stakingToken\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"totalBalance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalStakes\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"unstake\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"lockImmediately\",\n type: \"bool\",\n },\n ],\n name: \"unstakeWithLock\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"updateReward\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class FarmingRewardsDistributor__factory {\n static readonly abi = _abi;\n static createInterface(): FarmingRewardsDistributorInterface {\n return new utils.Interface(_abi) as FarmingRewardsDistributorInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): FarmingRewardsDistributor {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as FarmingRewardsDistributor;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { AlgebraPool, AlgebraPoolInterface } from \"../AlgebraPool\";\n\nconst _abi = [\n {\n inputs: [],\n name: \"alreadyInitialized\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"arithmeticError\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"bottomTickLowerThanMIN\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"dynamicFeeActive\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"dynamicFeeDisabled\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"flashInsufficientPaid0\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"flashInsufficientPaid1\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"incorrectPluginFee\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"insufficientInputAmount\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"invalidAmountRequired\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"expectedSelector\",\n type: \"bytes4\",\n },\n ],\n name: \"invalidHookResponse\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"invalidLimitSqrtPrice\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"invalidNewCommunityFee\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"invalidNewTickSpacing\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"liquidityAdd\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"liquidityOverflow\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"liquiditySub\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"locked\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"notAllowed\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"notInitialized\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"pluginIsNotConnected\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"priceOutOfRange\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"tickInvalidLinks\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"tickIsNotInitialized\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"tickIsNotSpaced\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"tickOutOfRange\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"topTickAboveMAX\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"topTickLowerOrEqBottomTick\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"transferFailed\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"zeroAmountRequired\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"zeroLiquidityActual\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"zeroLiquidityDesired\",\n type: \"error\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"int24\",\n name: \"bottomTick\",\n type: \"int24\",\n },\n {\n indexed: true,\n internalType: \"int24\",\n name: \"topTick\",\n type: \"int24\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"liquidityAmount\",\n type: \"uint128\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount0\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount1\",\n type: \"uint256\",\n },\n ],\n name: \"Burn\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint24\",\n name: \"pluginFee\",\n type: \"uint24\",\n },\n ],\n name: \"BurnFee\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"int24\",\n name: \"bottomTick\",\n type: \"int24\",\n },\n {\n indexed: true,\n internalType: \"int24\",\n name: \"topTick\",\n type: \"int24\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"amount0\",\n type: \"uint128\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"amount1\",\n type: \"uint128\",\n },\n ],\n name: \"Collect\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"communityFeeNew\",\n type: \"uint16\",\n },\n ],\n name: \"CommunityFee\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newCommunityVault\",\n type: \"address\",\n },\n ],\n name: \"CommunityVault\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount0\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount1\",\n type: \"uint256\",\n },\n ],\n name: \"ExcessTokens\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"fee\",\n type: \"uint16\",\n },\n ],\n name: \"Fee\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount0\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount1\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"paid0\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"paid1\",\n type: \"uint256\",\n },\n ],\n name: \"Flash\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint160\",\n name: \"price\",\n type: \"uint160\",\n },\n {\n indexed: false,\n internalType: \"int24\",\n name: \"tick\",\n type: \"int24\",\n },\n ],\n name: \"Initialize\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"int24\",\n name: \"bottomTick\",\n type: \"int24\",\n },\n {\n indexed: true,\n internalType: \"int24\",\n name: \"topTick\",\n type: \"int24\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"liquidityAmount\",\n type: \"uint128\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount0\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount1\",\n type: \"uint256\",\n },\n ],\n name: \"Mint\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newPluginAddress\",\n type: \"address\",\n },\n ],\n name: \"Plugin\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint8\",\n name: \"newPluginConfig\",\n type: \"uint8\",\n },\n ],\n name: \"PluginConfig\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount0\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount1\",\n type: \"uint256\",\n },\n ],\n name: \"Skim\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"int256\",\n name: \"amount0\",\n type: \"int256\",\n },\n {\n indexed: false,\n internalType: \"int256\",\n name: \"amount1\",\n type: \"int256\",\n },\n {\n indexed: false,\n internalType: \"uint160\",\n name: \"price\",\n type: \"uint160\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"liquidity\",\n type: \"uint128\",\n },\n {\n indexed: false,\n internalType: \"int24\",\n name: \"tick\",\n type: \"int24\",\n },\n ],\n name: \"Swap\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint24\",\n name: \"overrideFee\",\n type: \"uint24\",\n },\n {\n indexed: false,\n internalType: \"uint24\",\n name: \"pluginFee\",\n type: \"uint24\",\n },\n ],\n name: \"SwapFee\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"int24\",\n name: \"newTickSpacing\",\n type: \"int24\",\n },\n ],\n name: \"TickSpacing\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"int24\",\n name: \"bottomTick\",\n type: \"int24\",\n },\n {\n internalType: \"int24\",\n name: \"topTick\",\n type: \"int24\",\n },\n {\n internalType: \"uint128\",\n name: \"amount\",\n type: \"uint128\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"burn\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"amount0\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount1\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"int24\",\n name: \"bottomTick\",\n type: \"int24\",\n },\n {\n internalType: \"int24\",\n name: \"topTick\",\n type: \"int24\",\n },\n {\n internalType: \"uint128\",\n name: \"amount0Requested\",\n type: \"uint128\",\n },\n {\n internalType: \"uint128\",\n name: \"amount1Requested\",\n type: \"uint128\",\n },\n ],\n name: \"collect\",\n outputs: [\n {\n internalType: \"uint128\",\n name: \"amount0\",\n type: \"uint128\",\n },\n {\n internalType: \"uint128\",\n name: \"amount1\",\n type: \"uint128\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"communityVault\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"factory\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"fee\",\n outputs: [\n {\n internalType: \"uint16\",\n name: \"currentFee\",\n type: \"uint16\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount0\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount1\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"flash\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCommunityFeePending\",\n outputs: [\n {\n internalType: \"uint128\",\n name: \"\",\n type: \"uint128\",\n },\n {\n internalType: \"uint128\",\n name: \"\",\n type: \"uint128\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPluginFeePending\",\n outputs: [\n {\n internalType: \"uint128\",\n name: \"\",\n type: \"uint128\",\n },\n {\n internalType: \"uint128\",\n name: \"\",\n type: \"uint128\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getReserves\",\n outputs: [\n {\n internalType: \"uint128\",\n name: \"\",\n type: \"uint128\",\n },\n {\n internalType: \"uint128\",\n name: \"\",\n type: \"uint128\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"globalState\",\n outputs: [\n {\n internalType: \"uint160\",\n name: \"price\",\n type: \"uint160\",\n },\n {\n internalType: \"int24\",\n name: \"tick\",\n type: \"int24\",\n },\n {\n internalType: \"uint16\",\n name: \"lastFee\",\n type: \"uint16\",\n },\n {\n internalType: \"uint8\",\n name: \"pluginConfig\",\n type: \"uint8\",\n },\n {\n internalType: \"uint16\",\n name: \"communityFee\",\n type: \"uint16\",\n },\n {\n internalType: \"bool\",\n name: \"unlocked\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint160\",\n name: \"initialPrice\",\n type: \"uint160\",\n },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isUnlocked\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"unlocked\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"lastFeeTransferTimestamp\",\n outputs: [\n {\n internalType: \"uint32\",\n name: \"\",\n type: \"uint32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"liquidity\",\n outputs: [\n {\n internalType: \"uint128\",\n name: \"\",\n type: \"uint128\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"maxLiquidityPerTick\",\n outputs: [\n {\n internalType: \"uint128\",\n name: \"\",\n type: \"uint128\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"leftoversRecipient\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"int24\",\n name: \"bottomTick\",\n type: \"int24\",\n },\n {\n internalType: \"int24\",\n name: \"topTick\",\n type: \"int24\",\n },\n {\n internalType: \"uint128\",\n name: \"liquidityDesired\",\n type: \"uint128\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"mint\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"amount0\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount1\",\n type: \"uint256\",\n },\n {\n internalType: \"uint128\",\n name: \"liquidityActual\",\n type: \"uint128\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"nextTickGlobal\",\n outputs: [\n {\n internalType: \"int24\",\n name: \"\",\n type: \"int24\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"plugin\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n name: \"positions\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"liquidity\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"innerFeeGrowth0Token\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"innerFeeGrowth1Token\",\n type: \"uint256\",\n },\n {\n internalType: \"uint128\",\n name: \"fees0\",\n type: \"uint128\",\n },\n {\n internalType: \"uint128\",\n name: \"fees1\",\n type: \"uint128\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"prevTickGlobal\",\n outputs: [\n {\n internalType: \"int24\",\n name: \"\",\n type: \"int24\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"safelyGetStateOfAMM\",\n outputs: [\n {\n internalType: \"uint160\",\n name: \"sqrtPrice\",\n type: \"uint160\",\n },\n {\n internalType: \"int24\",\n name: \"tick\",\n type: \"int24\",\n },\n {\n internalType: \"uint16\",\n name: \"lastFee\",\n type: \"uint16\",\n },\n {\n internalType: \"uint8\",\n name: \"pluginConfig\",\n type: \"uint8\",\n },\n {\n internalType: \"uint128\",\n name: \"activeLiquidity\",\n type: \"uint128\",\n },\n {\n internalType: \"int24\",\n name: \"nextTick\",\n type: \"int24\",\n },\n {\n internalType: \"int24\",\n name: \"previousTick\",\n type: \"int24\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"newCommunityFee\",\n type: \"uint16\",\n },\n ],\n name: \"setCommunityFee\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newCommunityVault\",\n type: \"address\",\n },\n ],\n name: \"setCommunityVault\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"newFee\",\n type: \"uint16\",\n },\n ],\n name: \"setFee\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newPluginAddress\",\n type: \"address\",\n },\n ],\n name: \"setPlugin\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint8\",\n name: \"newConfig\",\n type: \"uint8\",\n },\n ],\n name: \"setPluginConfig\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"int24\",\n name: \"newTickSpacing\",\n type: \"int24\",\n },\n ],\n name: \"setTickSpacing\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"skim\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"zeroToOne\",\n type: \"bool\",\n },\n {\n internalType: \"int256\",\n name: \"amountRequired\",\n type: \"int256\",\n },\n {\n internalType: \"uint160\",\n name: \"limitSqrtPrice\",\n type: \"uint160\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"swap\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"amount0\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"amount1\",\n type: \"int256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"leftoversRecipient\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"zeroToOne\",\n type: \"bool\",\n },\n {\n internalType: \"int256\",\n name: \"amountToSell\",\n type: \"int256\",\n },\n {\n internalType: \"uint160\",\n name: \"limitSqrtPrice\",\n type: \"uint160\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"swapWithPaymentInAdvance\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"amount0\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"amount1\",\n type: \"int256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"sync\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"tickSpacing\",\n outputs: [\n {\n internalType: \"int24\",\n name: \"\",\n type: \"int24\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"int16\",\n name: \"\",\n type: \"int16\",\n },\n ],\n name: \"tickTable\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"tickTreeRoot\",\n outputs: [\n {\n internalType: \"uint32\",\n name: \"\",\n type: \"uint32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"int16\",\n name: \"\",\n type: \"int16\",\n },\n ],\n name: \"tickTreeSecondLayer\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"int24\",\n name: \"\",\n type: \"int24\",\n },\n ],\n name: \"ticks\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"liquidityTotal\",\n type: \"uint256\",\n },\n {\n internalType: \"int128\",\n name: \"liquidityDelta\",\n type: \"int128\",\n },\n {\n internalType: \"int24\",\n name: \"prevTick\",\n type: \"int24\",\n },\n {\n internalType: \"int24\",\n name: \"nextTick\",\n type: \"int24\",\n },\n {\n internalType: \"uint256\",\n name: \"outerFeeGrowth0Token\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outerFeeGrowth1Token\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"token0\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"token1\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalFeeGrowth0Token\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalFeeGrowth1Token\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class AlgebraPool__factory {\n static readonly abi = _abi;\n static createInterface(): AlgebraPoolInterface {\n return new utils.Interface(_abi) as AlgebraPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): AlgebraPool {\n return new Contract(address, _abi, signerOrProvider) as AlgebraPool;\n }\n}\n","/* eslint-disable camelcase */\nimport { getAddress } from '@ethersproject/address';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { SignerOrProvider } from '../types';\nimport {\n ERC20__factory as ERC20Factory,\n ERC20,\n AlgebraPool__factory,\n AlgebraPool,\n AlgebraVaultDepositGuard__factory,\n AlgebraVaultDepositGuard,\n AlgebraVault__factory,\n AlgebraVault,\n FarmingRewardsDistributor__factory,\n FarmingRewardsDistributor,\n} from '../../abis/types';\n\nexport function getERC20Contract(address: string, signerOrProvider: SignerOrProvider): ERC20 {\n getAddress(address);\n return ERC20Factory.connect(address, signerOrProvider);\n}\n\nexport function getAlgebraVaultDepositGuardContract(\n address: string,\n signerOrProvider: SignerOrProvider,\n): AlgebraVaultDepositGuard {\n getAddress(address);\n return AlgebraVaultDepositGuard__factory.connect(address, signerOrProvider);\n}\n\nexport function getAlgebraVaultContract(address: string, signerOrProvider: SignerOrProvider): AlgebraVault {\n getAddress(address);\n return AlgebraVault__factory.connect(address, signerOrProvider);\n}\n\nexport function getAlgebraPoolContract(address: string, provider: JsonRpcProvider): AlgebraPool {\n try {\n return AlgebraPool__factory.connect(address, provider);\n } catch (e) {\n console.error(`Couldn't create AlgebraPool contract with address: ${address}`);\n throw e;\n }\n}\n\nexport function getFarmingRewardsDistributorContract(\n address: string,\n signerOrProvider: SignerOrProvider,\n): FarmingRewardsDistributor {\n try {\n return FarmingRewardsDistributor__factory.connect(address, signerOrProvider);\n } catch (e) {\n console.error(`Couldn't create FarmingRewardsDistributor contract with address: ${address}`);\n throw e;\n }\n}\n","// eslint-disable-next-line import/no-unresolved\nimport { gql } from 'graphql-request';\n\nexport function vaultQueryAlgebra() {\n return gql`\n query ($vaultAddress: String!) {\n almVault(id: $vaultAddress) {\n id\n token0\n token1\n allowToken0\n allowToken1\n holdersCount\n }\n }\n `;\n}\n\nexport function vaultByTokensQuery() {\n return gql`\n query ($addressTokenA: String!, $addressTokenB: String!) {\n almVaults(where: { token0: $addressTokenA, token1: $addressTokenB }) {\n id\n token0\n token1\n allowToken0\n allowToken1\n }\n }\n `;\n}\n\nexport const vaultByPoolQuery = gql`\n query ($poolAddress: String!) {\n almVaults(where: { pool: $poolAddress }) {\n id\n }\n }\n`;\n\nexport const allVaultsQuery = gql`\n query {\n almVaults {\n pool\n id\n token0\n token1\n allowToken0\n allowToken1\n totalSupply\n totalAmount0\n totalAmount1\n feeApr_1d\n feeApr_30d\n feeApr_3d\n feeApr_7d\n }\n }\n`;\n\nexport const rebalancesQuery = (page: number) => gql`\n query ($vaultAddress: String!, $createdAtTimestamp_gt: String!) {\n vaultRebalances(first:1000, skip: ${\n page * 1000\n }, where: { vault: $vaultAddress, createdAtTimestamp_gt: $createdAtTimestamp_gt }) {\n feeAmount0\n feeAmount1\n totalAmount0\n totalAmount1\n createdAtTimestamp\n vault\n sqrtPrice\n totalSupply\n }\n }\n`;\n\nexport const vaultCollectFeesQuery = (page: number) => gql`\n query ($vaultAddress: String!, $createdAtTimestamp_gt: String!) {\n vaultCollectFees(first: 1000, skip: ${\n page * 1000\n }, where: { vault: $vaultAddress, createdAtTimestamp_gt: $createdAtTimestamp_gt }) {\n feeAmount0\n feeAmount1\n totalAmount0\n totalAmount1\n createdAtTimestamp\n vault\n sqrtPrice\n totalSupply\n }\n }\n`;\n\nexport const vaultDepositsQuery = (page: number, createdAtTimestamp?: string, userAddress?: string) => {\n const filters = [`vault: $vaultAddress`];\n\n if (createdAtTimestamp) {\n filters.push(`createdAtTimestamp_gt: $createdAtTimestamp_gt`);\n }\n\n if (userAddress) {\n filters.push(`origin: $userAddress`);\n }\n\n return gql`\n query (\n $vaultAddress: String!\n ${createdAtTimestamp ? ', $createdAtTimestamp_gt: String' : ''}\n ${userAddress ? ', $userAddress: String' : ''}\n ) {\n vaultDeposits(\n first: 1000\n skip: ${page * 1000}\n where: { ${filters.join(', ')} }\n ) {\n vault\n createdAtTimestamp\n totalAmount0\n totalAmount1\n totalAmount0BeforeEvent\n totalAmount1BeforeEvent\n sqrtPrice\n totalSupply\n amount0\n amount1\n shares\n }\n }\n `;\n};\n\nexport const vaultWithdrawsQuery = (page: number, createdAtTimestamp?: string, userAddress?: string) => {\n const filters = [`vault: $vaultAddress`];\n\n if (createdAtTimestamp) {\n filters.push(`createdAtTimestamp_gt: $createdAtTimestamp_gt`);\n }\n\n if (userAddress) {\n filters.push(`origin: $userAddress`);\n }\n\n return gql`\n query (\n $vaultAddress: String!\n ${createdAtTimestamp ? ', $createdAtTimestamp_gt: String' : ''}\n ${userAddress ? ', $userAddress: String' : ''}\n ) {\n vaultWithdraws(\n first: 1000\n skip: ${page * 1000}\n where: { ${filters.join(', ')} }\n ) {\n createdAtTimestamp\n totalAmount0\n totalAmount1\n totalAmount0BeforeEvent\n totalAmount1BeforeEvent\n vault\n sqrtPrice\n totalSupply\n amount0\n amount1\n shares\n }\n }\n `;\n};\n\nexport const allEventsQuery = (page: number) => gql`\n query ($vaultAddress: String!, $createdAtTimestamp_gt: String!) {\n vaultRebalances(first:1000, skip: ${\n page * 1000\n }, where: { vault: $vaultAddress, createdAtTimestamp_gt: $createdAtTimestamp_gt }) {\n feeAmount0\n feeAmount1\n totalAmount0\n totalAmount1\n createdAtTimestamp\n vault\n sqrtPrice\n totalSupply\n },\n vaultCollectFees(first: 1000, skip: ${\n page * 1000\n }, where: { vault: $vaultAddress, createdAtTimestamp_gt: $createdAtTimestamp_gt }) {\n feeAmount0\n feeAmount1\n totalAmount0\n totalAmount1\n createdAtTimestamp\n vault\n sqrtPrice\n totalSupply\n },\n vaultDeposits(first: 1000, skip: ${\n page * 1000\n }, where: { vault: $vaultAddress, createdAtTimestamp_gt: $createdAtTimestamp_gt }) {\n vault\n createdAtTimestamp\n totalAmount0\n totalAmount1\n totalAmount0BeforeEvent\n totalAmount1BeforeEvent\n sqrtPrice\n totalSupply\n },\n vaultWithdraws(first: 1000, skip: ${\n page * 1000\n }, where: { vault: $vaultAddress, createdAtTimestamp_gt: $createdAtTimestamp_gt }) {\n createdAtTimestamp\n totalAmount0\n totalAmount1\n totalAmount0BeforeEvent\n totalAmount1BeforeEvent\n vault\n sqrtPrice\n totalSupply\n }\n }\n`;\n\nexport function userBalancesQuery() {\n return gql`\n query ($accountAddress: String!) {\n vaultShares(where: { user: $accountAddress }) {\n vault {\n id\n token0\n token1\n pool\n }\n vaultShareBalance\n vaultShareStaked\n }\n }\n `;\n}\n\nexport const feeAprQuery = gql`\n query ($vaultAddress: String!) {\n almVault(id: $vaultAddress) {\n feeApr_1d\n feeApr_3d\n feeApr_7d\n feeApr_30d\n }\n }\n`;\n","/* eslint-disable import/prefer-default-export */\nimport { SupportedChainId } from '../types';\n\ntype GraphQL = {\n url: string;\n publishedUrl: string;\n};\n\n// 'none' indicates that graph is not enabled on that chain\nexport const graphUrls: Record<SupportedChainId, GraphQL> = {\n [SupportedChainId.Base]: {\n url: 'https://api.studio.thegraph.com/query/50593/clamm-alm/version/latest',\n publishedUrl: 'https://api.studio.thegraph.com/query/50593/clamm-alm/version/latest',\n },\n [SupportedChainId.PulseChain]: {\n url: 'https://api.goldsky.com/api/public/project_cmewstc401ya201wy8ilu57up/subgraphs/alm/v1.0.0/gn',\n publishedUrl: 'https://api.goldsky.com/api/public/project_cmewstc401ya201wy8ilu57up/subgraphs/alm/v1.0.0/gn',\n },\n [SupportedChainId.BaseSepolia]: {\n url: 'https://api.studio.thegraph.com/query/50593/base-sepolia-alm/v0.0.6',\n publishedUrl: 'https://api.studio.thegraph.com/query/50593/base-sepolia-alm/v0.0.6',\n },\n};\n","import { graphUrls } from '../graphql/constants';\nimport { SupportedChainId } from '../types';\n\nexport default function getGraphUrls(\n chainId: SupportedChainId,\n isGraphRequired?: boolean,\n): { url: string; publishedUrl: string | undefined } {\n const { url, publishedUrl } = graphUrls[chainId];\n // const publishedUrl =\n // process.env.SUBGRAPH_API_KEY &&\n // graphUrls[chainId].publishedUrl.replace('[api-key]', process.env.SUBGRAPH_API_KEY);\n if (!url) throw new Error(`Unsupported on chain ${chainId}`);\n if (url === 'none' && isGraphRequired) throw new Error(`Function not available on chain ${chainId}`);\n return { url, publishedUrl };\n}\n","import NodeCache from 'node-cache';\n\nconst cache = new NodeCache();\n\nexport default cache;\n","/* eslint-disable camelcase */\n/* eslint-disable import/no-cycle */\n// eslint-disable-next-line import/no-unresolved\nimport { request } from 'graphql-request';\nimport {\n CollectFeesQueryData,\n FeeAprQueryResponse,\n RebalancesQueryData,\n VaultDepositsQueryData,\n VaultWithdrawsQueryData,\n} from '../types/vaultQueryData';\nimport { feeAprQuery } from './queries';\n\nexport async function sendAllEventsQueryRequest(\n url: string,\n vaultAddress: string,\n createdAtTimestamp_gt: string,\n query: string,\n): Promise<any> {\n return request<any, { vaultAddress: string; createdAtTimestamp_gt: string }>(url, query, {\n vaultAddress,\n createdAtTimestamp_gt,\n }).then((result) => result);\n}\n\nexport async function sendRebalancesQueryRequest(\n url: string,\n vaultAddress: string,\n createdAtTimestamp_gt: string,\n query: string,\n): Promise<RebalancesQueryData['vaultRebalances']> {\n return request<RebalancesQueryData, { vaultAddress: string; createdAtTimestamp_gt: string }>(url, query, {\n vaultAddress,\n createdAtTimestamp_gt,\n }).then(({ vaultRebalances }) => vaultRebalances);\n}\n\nexport async function sendCollectFeesQueryRequest(\n url: string,\n vaultAddress: string,\n createdAtTimestamp_gt: string,\n query: string,\n): Promise<CollectFeesQueryData['vaultCollectFees']> {\n return request<CollectFeesQueryData, { vaultAddress: string; createdAtTimestamp_gt: string }>(url, query, {\n vaultAddress,\n createdAtTimestamp_gt,\n }).then(({ vaultCollectFees }) => vaultCollectFees);\n}\n\nexport async function sendDepositsQueryRequest(\n url: string,\n vaultAddress: string,\n query: string,\n createdAtTimestamp_gt?: string,\n accountAddress?: string,\n): Promise<VaultDepositsQueryData['vaultDeposits']> {\n return request<\n VaultDepositsQueryData,\n { vaultAddress: string; createdAtTimestamp_gt?: string; userAddress?: string }\n >(url, query, {\n vaultAddress,\n createdAtTimestamp_gt,\n userAddress: accountAddress,\n }).then(({ vaultDeposits }) => vaultDeposits);\n}\n\nexport async function sendWithdrawsQueryRequest(\n url: string,\n vaultAddress: string,\n query: string,\n createdAtTimestamp_gt?: string,\n accountAddress?: string,\n): Promise<VaultWithdrawsQueryData['vaultWithdraws']> {\n return request<\n VaultWithdrawsQueryData,\n { vaultAddress: string; createdAtTimestamp_gt?: string; userAddress?: string }\n >(url, query, {\n vaultAddress,\n createdAtTimestamp_gt,\n userAddress: accountAddress,\n }).then(({ vaultWithdraws }) => vaultWithdraws);\n}\n\nexport async function sendFeeAprQueryRequest(url: string, vaultAddress: string): Promise<FeeAprQueryResponse> {\n return request<FeeAprQueryResponse, { vaultAddress: string }>(url, feeAprQuery, {\n vaultAddress: vaultAddress.toLowerCase(),\n });\n}\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport { BigNumber as BN } from 'bignumber.js';\nimport { BigNumber } from 'ethers';\n\nexport default function formatBigInt(value: number | string | BigNumber, decimals: number = 18): string {\n const bigVal = new BN(value.toString());\n const divisor = new BN(10).pow(decimals);\n\n return bigVal.div(divisor).toString();\n}\n","/* eslint-disable no-redeclare */\n/* eslint-disable import/prefer-default-export */\n/* eslint-disable no-underscore-dangle */\n\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { BigNumber } from 'ethers';\nimport { getERC20Contract, getAlgebraVaultContract } from '../contracts';\nimport { SupportedChainId, TotalAmounts, TotalAmountsBN, algebraVaultDecimals } from '../types';\nimport formatBigInt from '../utils/formatBigInt';\n// eslint-disable-next-line import/no-cycle\nimport cache from '../utils/cache';\n\nexport async function getTokenDecimals(\n tokenAddress: string,\n jsonProvider: JsonRpcProvider,\n chainId: SupportedChainId,\n): Promise<number> {\n const key = `token-${chainId}-${tokenAddress}`;\n const cachedData = cache.get(key);\n if (cachedData) {\n return cachedData as number;\n }\n const ttl = 24 * 60 * 60 * 1000;\n try {\n const tokenContract = getERC20Contract(tokenAddress, jsonProvider);\n const tokenDecimals = await tokenContract.decimals();\n cache.set(key, tokenDecimals, ttl);\n return tokenDecimals;\n } catch (error) {\n console.error(error);\n throw new Error(`Could not get token decimals for ${tokenAddress} on ${chainId}`);\n }\n}\n\nexport async function _getTotalAmounts(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n token0Decimals: number,\n token1Decimals: number,\n raw: false,\n): Promise<TotalAmounts>;\n\nexport async function _getTotalAmounts(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n token0Decimals: number,\n token1Decimals: number,\n raw: true,\n): Promise<TotalAmountsBN>;\n\nexport async function _getTotalAmounts(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n token0Decimals: number,\n token1Decimals: number,\n raw?: boolean,\n) {\n const vaultContract = getAlgebraVaultContract(vaultAddress, jsonProvider);\n const totalAmountsBN = await vaultContract.getTotalAmounts();\n\n if (!raw) {\n const totalAmounts = {\n total0: formatBigInt(totalAmountsBN.total0, token0Decimals),\n total1: formatBigInt(totalAmountsBN.total1, token1Decimals),\n 0: formatBigInt(totalAmountsBN.total0, token0Decimals),\n 1: formatBigInt(totalAmountsBN.total1, token1Decimals),\n } as TotalAmounts;\n return totalAmounts;\n }\n\n return totalAmountsBN;\n}\n\nexport async function _getTotalSupply(vaultAddress: string, jsonProvider: JsonRpcProvider): Promise<string>;\n\nexport async function _getTotalSupply(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n raw: true,\n): Promise<BigNumber>;\n\nexport async function _getTotalSupply(vaultAddress: string, jsonProvider: JsonRpcProvider, raw?: true) {\n try {\n const vaultContract = getAlgebraVaultContract(vaultAddress, jsonProvider);\n const totalSupply = await vaultContract.totalSupply();\n\n return raw ? totalSupply : formatBigInt(totalSupply, algebraVaultDecimals);\n } catch (error) {\n console.error(error);\n throw new Error(`Could not get total supply for ${vaultAddress}`);\n }\n}\n","// eslint-disable-next-line import/no-unresolved\nimport { request } from 'graphql-request';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { SupportedChainId, AlgebraVault } from '../types';\n// eslint-disable-next-line import/no-cycle\nimport {\n AllVaultsQueryData,\n VaultQueryData,\n VaultsByPoolQueryData,\n VaultsByTokensQueryData,\n VaultWithPoolQueryData,\n} from '../types/vaultQueryData';\nimport { getAlgebraVaultContract } from '../contracts';\nimport { allVaultsQuery, vaultByPoolQuery, vaultByTokensQuery, vaultQueryAlgebra } from '../graphql/queries';\nimport getGraphUrls from '../utils/getGraphUrls';\nimport cache from '../utils/cache';\nimport { sendFeeAprQueryRequest } from '../graphql/functions';\n// eslint-disable-next-line import/no-cycle\nimport { _getTotalAmounts } from './_totalBalances';\n\nfunction normalizeVaultData(vaultData: any): AlgebraVault {\n // If it's a v2 response (has token0/token1)\n if ('token0' in vaultData && 'token1' in vaultData) {\n return {\n id: vaultData.id,\n tokenA: vaultData.token0,\n tokenB: vaultData.token1,\n allowTokenA: vaultData.allowToken0,\n allowTokenB: vaultData.allowToken1,\n fee: vaultData.fee,\n holdersCount: vaultData.holdersCount,\n };\n }\n\n // If it's a v1 response (already has tokenA/tokenB)\n return vaultData;\n}\n\nasync function getVaultInfoFromContract(vaultAddress: string, jsonProvider: JsonRpcProvider): Promise<AlgebraVault> {\n const vault: AlgebraVault = {\n id: vaultAddress,\n tokenA: '',\n tokenB: '',\n allowTokenA: false,\n allowTokenB: false,\n };\n\n try {\n const vaultContract = getAlgebraVaultContract(vaultAddress, jsonProvider);\n\n const [tokenA, tokenB, allowTokenA, allowTokenB] = await Promise.all([\n vaultContract.token0(),\n vaultContract.token1(),\n vaultContract.allowToken0(),\n vaultContract.allowToken1(),\n ]);\n\n Object.assign(vault, { tokenA, tokenB, allowTokenA, allowTokenB });\n } catch (error) {\n throw new Error(`Could not get vault info for ${vaultAddress}`);\n }\n\n return vault;\n}\n\nasync function sendVaultQueryRequest(url: string, vaultAddress: string, query: string): Promise<AlgebraVault> {\n return request<VaultQueryData, { vaultAddress: string }>(url, query, {\n vaultAddress: vaultAddress.toLowerCase(),\n }).then(({ almVault }) => almVault);\n}\nasync function sendVaultsByTokensRequest(\n url: string,\n token1: string,\n token2: string,\n query: string,\n): Promise<AlgebraVault[]> {\n return request<VaultsByTokensQueryData, { addressTokenA: string; addressTokenB: string }>(url, query, {\n addressTokenA: token1,\n addressTokenB: token2,\n }).then(({ almVaults }) => almVaults);\n}\nasync function sendVaultsByPoolQueryRequest(url: string, poolAddress: string, query: string): Promise<string[]> {\n return request<VaultsByPoolQueryData, { poolAddress: string }>(url, query, {\n poolAddress: poolAddress.toLowerCase(),\n }).then(({ almVaults }) => almVaults.map((vault) => vault.id));\n}\n\nasync function sendAllVaultsQueryRequest(url: string, query: string): Promise<VaultWithPoolQueryData[]> {\n return request<AllVaultsQueryData>(url, query).then(({ almVaults }) => almVaults.map((vault) => vault));\n}\n\nexport async function getAlgebraVaultInfo(\n chainId: SupportedChainId,\n vaultAddress: string,\n jsonProvider?: JsonRpcProvider,\n): Promise<AlgebraVault> {\n const key = `vault-${chainId}-${vaultAddress}`;\n const ttl = 6 * 60 * 60 * 1000; // 6 hours\n const cachedData = cache.get(key);\n if (cachedData) {\n return cachedData as AlgebraVault;\n }\n\n const { url, publishedUrl } = getGraphUrls(chainId);\n const thisQuery = vaultQueryAlgebra();\n if (url === 'none' && jsonProvider) {\n const result = await getVaultInfoFromContract(vaultAddress, jsonProvider);\n cache.set(key, result, ttl);\n return result;\n }\n try {\n if (publishedUrl) {\n const result = await sendVaultQueryRequest(publishedUrl, vaultAddress, thisQuery);\n const normalizedResult = normalizeVaultData(result);\n cache.set(key, normalizedResult, ttl);\n return normalizedResult;\n }\n throw new Error(`Published URL is invalid for ${vaultAddress}`);\n } catch (error) {\n if (publishedUrl) {\n console.error('Request to published graph URL failed:', error);\n }\n try {\n const result = await sendVaultQueryRequest(url, vaultAddress, thisQuery);\n const normalizedResult = normalizeVaultData(result);\n cache.set(key, normalizedResult, ttl);\n return normalizedResult;\n } catch (error2) {\n console.error('Request to public graph URL failed:', error2);\n if (jsonProvider) {\n const result = await getVaultInfoFromContract(vaultAddress, jsonProvider);\n cache.set(key, result, ttl);\n return result;\n } else {\n throw new Error(`Could not get vault info for ${vaultAddress}`);\n }\n }\n }\n}\n\nexport interface ExtendedAlgebraVault extends AlgebraVault {\n apr: number;\n amount0: bigint;\n amount1: bigint;\n}\n\nexport async function getExtendedAlgebraVault(\n vaultAddress: string,\n chainId: SupportedChainId,\n jsonProvider: JsonRpcProvider,\n token0Decimals: number,\n token1Decimals: number,\n): Promise<ExtendedAlgebraVault> {\n const key = `vaultData-${vaultAddress}`;\n const ttl = 2 * 60 * 60 * 1000; // 2 hours\n const cachedData = cache.get(key);\n if (cachedData) {\n return cachedData as ExtendedAlgebraVault;\n }\n\n try {\n const vault = await getAlgebraVaultInfo(chainId, vaultAddress, jsonProvider);\n\n const totalAmounts = await _getTotalAmounts(vaultAddress, jsonProvider, token0Decimals, token1Decimals, true);\n\n const { url } = getGraphUrls(chainId);\n const { almVault } = await sendFeeAprQueryRequest(url, vaultAddress);\n\n const result = {\n ...vault,\n apr: almVault?.feeApr_1d || 0,\n amount0: totalAmounts[0].toBigInt(),\n amount1: totalAmounts[1].toBigInt(),\n };\n cache.set(key, result, ttl);\n return result;\n } catch (error2) {\n console.error('Request to public graph URL failed:', error2);\n throw new Error(`Could not get vaults by vault ${vaultAddress}`);\n }\n}\n\nasync function getVaultsByTokensAB(\n chainId: SupportedChainId,\n tokenA: string,\n tokenB: string,\n): Promise<VaultsByTokensQueryData['almVaults']> {\n const key = `vaultByTokens-${chainId}-${tokenA}-${tokenB}`;\n const cachedData = cache.get(key);\n if (cachedData) {\n return cachedData as VaultsByTokensQueryData['almVaults'];\n }\n\n const ttl = 3600000;\n const { url, publishedUrl } = getGraphUrls(chainId, true);\n\n const strVaultByTokensQuery = vaultByTokensQuery();\n\n try {\n if (publishedUrl) {\n const result = await sendVaultsByTokensRequest(publishedUrl, tokenA, tokenB, strVaultByTokensQuery);\n cache.set(key, result, ttl);\n return result;\n } else {\n throw new Error(`Published URL is invalid on chain ${chainId}`);\n }\n } catch (error) {\n if (publishedUrl) {\n console.error('Request to published graph URL failed:', error);\n }\n try {\n const result = await sendVaultsByTokensRequest(url, tokenA, tokenB, strVaultByTokensQuery);\n cache.set(key, result, ttl);\n return result;\n } catch (error2) {\n console.error('Request to public graph URL failed:', error2);\n throw new Error(`Could not get vaults by tokens, on chain ${chainId}`);\n }\n }\n}\n\nexport async function getVaultsByTokens(\n chainId: SupportedChainId,\n depositTokenAddress: string,\n pairedTokenAddress: string,\n): Promise<VaultsByTokensQueryData['almVaults']> {\n const arrVaults1 = (await getVaultsByTokensAB(chainId, depositTokenAddress, pairedTokenAddress)).filter(\n (v) => v.allowTokenA,\n );\n const arrVaults2 = (await getVaultsByTokensAB(chainId, pairedTokenAddress, depositTokenAddress)).filter(\n (v) => v.allowTokenB,\n );\n\n // eslint-disable-next-line no-return-await\n return [...arrVaults1, ...arrVaults2];\n}\n\nexport async function getVaultsByPool(poolAddress: string, chainId: SupportedChainId): Promise<string[]> {\n const key = `pool-${chainId}-${poolAddress}`;\n const cachedData = cache.get(key);\n if (cachedData) {\n return cachedData as string[];\n }\n const { url, publishedUrl } = getGraphUrls(chainId, true);\n const ttl = 3600000;\n try {\n if (publishedUrl) {\n const result = await sendVaultsByPoolQueryRequest(publishedUrl, poolAddress, vaultByPoolQuery);\n cache.set(key, result, ttl);\n return result;\n }\n throw new Error(`Published URL is invalid on chain ${chainId}`);\n } catch (error) {\n if (publishedUrl) {\n console.error('Request to published graph URL failed:', error);\n }\n try {\n const result = await sendVaultsByPoolQueryRequest(url, poolAddress, vaultByPoolQuery);\n cache.set(key, result, ttl);\n return result;\n } catch (error2) {\n console.error('Request to public graph URL failed:', error2);\n throw new Error(`Could not get vaults by pool ${poolAddress}`);\n }\n }\n}\n\nexport async function getAllVaults(chainId: SupportedChainId): Promise<VaultWithPoolQueryData[]> {\n const key = `allVaults-${chainId}`;\n const cachedData = cache.get(key);\n if (cachedData) {\n return cachedData as VaultWithPoolQueryData[];\n }\n const { url, publishedUrl } = getGraphUrls(chainId, true);\n const ttl = 3600000;\n try {\n if (publishedUrl) {\n const result = await sendAllVaultsQueryRequest(publishedUrl, allVaultsQuery);\n cache.set(key, result, ttl);\n return result;\n }\n throw new Error(`Published URL is invalid on chain ${chainId}`);\n } catch (error) {\n if (publishedUrl) {\n console.error('Request to published graph URL failed:', error);\n }\n try {\n const result = await sendAllVaultsQueryRequest(url, allVaultsQuery);\n cache.set(key, result, ttl);\n return result;\n } catch (error2) {\n console.error('Request to public graph URL failed:', error2);\n throw new Error(`Could not get all vaults`);\n }\n }\n}\n\nexport async function validateVaultData(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n): Promise<{ chainId: SupportedChainId; vault: AlgebraVault }> {\n const { chainId } = await jsonProvider.getNetwork();\n\n if (!Object.values(SupportedChainId).includes(chainId)) {\n throw new Error(`Unsupported chainId: ${chainId ?? 'undefined'}`);\n }\n\n const vault = await getAlgebraVaultInfo(chainId, vaultAddress, jsonProvider);\n\n return { chainId, vault };\n}\n\nexport async function getChainByProvider(jsonProvider: JsonRpcProvider): Promise<{ chainId: SupportedChainId }> {\n const { chainId } = await jsonProvider.getNetwork();\n\n if (!Object.values(SupportedChainId).includes(chainId)) {\n throw new Error(`Unsupported chainId: ${chainId ?? 'undefined'}`);\n }\n\n return { chainId };\n}\n","/* eslint-disable no-redeclare */\n/* eslint-disable import/prefer-default-export */\n\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { BigNumber } from 'ethers';\nimport { TotalAmounts, TotalAmountsBN } from '../types';\n// eslint-disable-next-line import/no-cycle\nimport { validateVaultData } from './vault';\nimport { _getTotalAmounts, _getTotalSupply } from './_totalBalances';\n\nexport async function getTotalAmounts(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n raw: false,\n token0Decimals: number,\n token1Decimals: number,\n): Promise<TotalAmounts>;\n\nexport async function getTotalAmounts(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n raw: true,\n token0Decimals: number,\n token1Decimals: number,\n): Promise<TotalAmountsBN>;\n\nexport async function getTotalAmounts(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n raw: boolean,\n token0Decimals: number,\n token1Decimals: number,\n) {\n const { vault } = await validateVaultData(vaultAddress, jsonProvider);\n\n if (!raw) {\n return _getTotalAmounts(vault.id, jsonProvider, token0Decimals, token1Decimals, false);\n }\n return _getTotalAmounts(vault.id, jsonProvider, token0Decimals, token1Decimals, true);\n}\n\nexport async function getTotalSupply(vaultAddress: string, jsonProvider: JsonRpcProvider): Promise<string>;\n\nexport async function getTotalSupply(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n raw: true,\n): Promise<BigNumber>;\n\nexport async function getTotalSupply(vaultAddress: string, jsonProvider: JsonRpcProvider, raw?: true) {\n await validateVaultData(vaultAddress, jsonProvider);\n\n if (!raw) {\n return _getTotalSupply(vaultAddress, jsonProvider);\n }\n return _getTotalSupply(vaultAddress, jsonProvider, true);\n}\n","import { BigNumber } from '@ethersproject/bignumber';\n\nexport default function parseBigInt(_value: number | string, decimals: number): BigNumber {\n let valueStr = _value.toString();\n\n // Handle scientific notation by converting to a full decimal string\n if (valueStr.includes('e') || valueStr.includes('E')) {\n valueStr = Number(valueStr).toFixed(decimals);\n }\n const [wholePart, fractionalPart = ''] = valueStr.split('.');\n if (fractionalPart.length > decimals) throw new Error(`Number ${valueStr} is too long`);\n\n const combined = wholePart + fractionalPart.padEnd(decimals, '0');\n\n const bigNumberValue = BigNumber.from(combined);\n\n return bigNumberValue;\n}\n","import { SupportedChainId } from '../types';\n\nexport type SupportedDexConfig = {\n depositGuardAddress: string;\n vaultDeployerAddress: string;\n};\n\n// externally\nexport const VAULT_DEPOSIT_GUARD: Record<SupportedChainId, string> = {\n [SupportedChainId.Base]: '0x1e18b4a180b13520bD202e571cD9dFE0A545Cc85', // clamm\n [SupportedChainId.PulseChain]: '0xF2aEc16CFFF9071bd18ad5BdC73A592d57D2C75C', // clamm\n [SupportedChainId.BaseSepolia]: '0x16396B68aC4f2c1D577694908AaE7f5AC0256995', // integral farming + alm\n};\n\n// internally\nexport const addressConfig: Record<SupportedChainId, SupportedDexConfig> = {\n [SupportedChainId.Base]: {\n depositGuardAddress: VAULT_DEPOSIT_GUARD[SupportedChainId.Base],\n vaultDeployerAddress: '0x00009cc27c811a3e0FdD2Fd737afCc721B67eE8e',\n },\n [SupportedChainId.PulseChain]: {\n depositGuardAddress: VAULT_DEPOSIT_GUARD[SupportedChainId.PulseChain],\n vaultDeployerAddress: '0xeDB164dBB25e070935f6312940423790CdFb0d08',\n },\n [SupportedChainId.BaseSepolia]: {\n depositGuardAddress: VAULT_DEPOSIT_GUARD[SupportedChainId.BaseSepolia],\n vaultDeployerAddress: '0xDeaD1F5aF792afc125812E875A891b038f888258',\n },\n};\n\nexport const MULTICALL_ADDRESSES: Partial<Record<SupportedChainId, string>> = {\n [SupportedChainId.Base]: '0x091e99cb1C49331a94dD62755D168E941AbD0693',\n [SupportedChainId.PulseChain]: '0xbB9aae2E6657A0cD4BbD808682EB4ee7B6329D78',\n [SupportedChainId.BaseSepolia]: '0xf08e7861984cb4d2ba8b69e3c4ae20443dfa3c31',\n};\n","[\n {\n \"inputs\": [],\n \"name\": \"getCurrentBlockTimestamp\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"timestamp\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"addr\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"getEthBalance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"balance\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"target\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasLimit\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"callData\",\n \"type\": \"bytes\"\n }\n ],\n \"internalType\": \"struct UniswapInterfaceMulticall.Call[]\",\n \"name\": \"calls\",\n \"type\": \"tuple[]\"\n }\n ],\n \"name\": \"multicall\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"blockNumber\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"success\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasUsed\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"returnData\",\n \"type\": \"bytes\"\n }\n ],\n \"internalType\": \"struct UniswapInterfaceMulticall.Result[]\",\n \"name\": \"returnData\",\n \"type\": \"tuple[]\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]","import { Provider } from '@ethersproject/providers';\nimport { Contract } from '@ethersproject/contracts';\nimport { Interface } from '@ethersproject/abi';\nimport { BigNumber, Signer } from 'ethers';\nimport { SupportedChainId } from '../types';\nimport { MULTICALL_ADDRESSES } from '../config/addresses';\nimport { getERC20Contract, getAlgebraVaultContract } from '../contracts';\nimport multicallAbi from '../abis/multicall.json';\n\ninterface Call {\n target: string;\n gasLimit: number;\n callData: string;\n}\n\nexport interface Result {\n success: boolean;\n gasUsed: BigNumber;\n returnData: string;\n}\n\ninterface MulticallResponse {\n blockNumber: BigNumber;\n returnData: Result[];\n}\n\nexport function getMulticallContract(chainId: SupportedChainId, provider: Provider | Signer): Contract {\n const address = MULTICALL_ADDRESSES[chainId];\n if (!address) {\n throw new Error(`Multicall not supported on chain ${chainId}`);\n }\n return new Contract(address, multicallAbi, provider);\n}\n\nexport async function multicall(\n calls: Call[],\n chainId: SupportedChainId,\n provider: Provider | Signer,\n): Promise<Result[]> {\n const multicallContract = getMulticallContract(chainId, provider);\n const { returnData }: MulticallResponse = await multicallContract.callStatic.multicall(calls);\n return returnData;\n}\n\nexport function encodeTotalAmountsCall(vaultAddress: string): Call {\n const vaultInterface = new Interface(getAlgebraVaultContract(vaultAddress, null as any).interface.format());\n return {\n target: vaultAddress,\n gasLimit: 1000000,\n callData: vaultInterface.encodeFunctionData('getTotalAmounts'),\n };\n}\n\nexport function encodeTotalSupplyCall(vaultAddress: string): Call {\n const vaultInterface = new Interface(getAlgebraVaultContract(vaultAddress, null as any).interface.format());\n return {\n target: vaultAddress,\n gasLimit: 1000000,\n callData: vaultInterface.encodeFunctionData('totalSupply'),\n };\n}\n\nexport function encodeDecimalsCall(tokenAddress: string): Call {\n const tokenInterface = new Interface(getERC20Contract(tokenAddress, null as any).interface.format());\n return {\n target: tokenAddress,\n gasLimit: 1000000,\n callData: tokenInterface.encodeFunctionData('decimals'),\n };\n}\n\nexport function decodeTotalAmountsResult(\n result: Result,\n vaultAddress: string,\n): { total0: BigNumber; total1: BigNumber } {\n if (!result.success) {\n throw new Error('Failed to get total amounts');\n }\n const vaultInterface = new Interface(getAlgebraVaultContract(vaultAddress, null as any).interface.format());\n const decoded = vaultInterface.decodeFunctionResult('getTotalAmounts', result.returnData);\n return {\n total0: decoded[0],\n total1: decoded[1],\n };\n}\n\nexport function decodeTotalSupplyResult(result: Result, vaultAddress: string): BigNumber {\n if (!result.success) {\n throw new Error('Failed to get total supply');\n }\n const vaultInterface = new Interface(getAlgebraVaultContract(vaultAddress, null as any).interface.format());\n return vaultInterface.decodeFunctionResult('totalSupply', result.returnData)[0];\n}\n\nexport function decodeDecimalsResult(result: Result, tokenAddress: string): number {\n if (!result.success) {\n throw new Error('Failed to get decimals');\n }\n const tokenInterface = new Interface(getERC20Contract(tokenAddress, null as any).interface.format());\n return tokenInterface.decodeFunctionResult('decimals', result.returnData)[0];\n}\n","/* eslint-disable no-redeclare */\n/* eslint-disable import/prefer-default-export */\n\nimport { JsonRpcProvider, Web3Provider } from '@ethersproject/providers';\nimport { BigNumber } from 'ethers';\n// eslint-disable-next-line import/no-unresolved\nimport { request } from 'graphql-request';\nimport { formatUnits } from '@ethersproject/units';\nimport { getAlgebraVaultContract } from '../contracts';\nimport {\n UserAmounts,\n UserAmountsBN,\n UserAmountsInVault,\n UserAmountsInVaultBN,\n UserBalanceInVault,\n UserBalanceInVaultBN,\n VaultShares,\n algebraVaultDecimals,\n} from '../types';\nimport formatBigInt from '../utils/formatBigInt';\n// eslint-disable-next-line import/no-cycle\nimport { getChainByProvider } from './vault';\nimport { UserBalancesQueryData } from '../types/vaultQueryData';\nimport { userBalancesQuery } from '../graphql/queries';\nimport parseBigInt from '../utils/parseBigInt';\nimport getGraphUrls from '../utils/getGraphUrls';\nimport {\n decodeDecimalsResult,\n decodeTotalAmountsResult,\n decodeTotalSupplyResult,\n encodeDecimalsCall,\n encodeTotalAmountsCall,\n encodeTotalSupplyCall,\n multicall,\n} from '../utils/multicallUtils';\nimport { _getTotalAmounts, _getTotalSupply } from './_totalBalances';\n\nconst promises: Record<string, Promise<any>> = {};\n\n/**\n * Helper function to get token address regardless of naming convention (token0/1 or tokenA/B)\n * @param vault The vault object from API\n * @param index Token index (0 or 1)\n * @returns Token address\n */\nfunction getTokenAddress(vault: any, index: number): string {\n if (index === 0) {\n return vault.token0 || vault.tokenA || '';\n } else {\n return vault.token1 || vault.tokenB || '';\n }\n}\n\n// eslint-disable-next-line no-underscore-dangle\nasync function _getUserBalance(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n): Promise<string>;\n\n// eslint-disable-next-line no-underscore-dangle\nasync function _getUserBalance(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n raw: true,\n): Promise<BigNumber>;\n\n// eslint-disable-next-line no-underscore-dangle\nasync function _getUserBalance(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n raw?: true,\n) {\n const vaultContract = getAlgebraVaultContract(vaultAddress, jsonProvider);\n const shares = await vaultContract.balanceOf(accountAddress);\n\n return raw ? shares : formatBigInt(shares, algebraVaultDecimals);\n}\n\nexport async function getUserBalance(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n): Promise<string>;\n\nexport async function getUserBalance(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n raw: true,\n): Promise<BigNumber>;\n\nexport async function getUserBalance(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n raw?: true,\n) {\n // eslint-disable-next-line no-return-await\n // await validateVaultData(vaultAddress, jsonProvider);\n\n return raw\n ? _getUserBalance(accountAddress, vaultAddress, jsonProvider, true)\n : _getUserBalance(accountAddress, vaultAddress, jsonProvider);\n}\n\nexport async function sendUserBalancesQueryRequest(\n url: string,\n accountAddress: string,\n query: string,\n): Promise<VaultShares[]> {\n return request<UserBalancesQueryData['vaultShares'], { accountAddress: string }>(url, query, {\n accountAddress: accountAddress.toLowerCase(),\n }).then(({ vaultShares }) => vaultShares);\n}\nfunction storeResult(key: string, result: any) {\n const cacheTtl =\n process.env.CACHE_TTL && !Number.isNaN(process.env.CACHE_TTL) ? Number(process.env.CACHE_TTL) : 120000; // 120000 = 2min\n promises[key] = Promise.resolve(result);\n setTimeout(() => {\n delete promises[key];\n }, cacheTtl);\n}\n\nexport async function getAllUserBalances(\n accountAddress: string,\n jsonProvider: JsonRpcProvider,\n): Promise<UserBalanceInVault[]>;\n\nexport async function getAllUserBalances(\n accountAddress: string,\n jsonProvider: JsonRpcProvider,\n raw: true,\n): Promise<UserBalanceInVaultBN[]>;\n\nexport async function getAllUserBalances(accountAddress: string, jsonProvider: JsonRpcProvider, raw?: true) {\n const { chainId } = await getChainByProvider(jsonProvider);\n const { publishedUrl, url } = getGraphUrls(chainId, true);\n\n let shares: UserBalanceInVault[];\n const key = `${chainId + accountAddress}-balances`;\n if (!Object.prototype.hasOwnProperty.call(promises, key)) {\n const strUserBalancesQuery = userBalancesQuery();\n try {\n if (publishedUrl) {\n const result = await sendUserBalancesQueryRequest(publishedUrl, accountAddress, strUserBalancesQuery);\n storeResult(key, result);\n } else {\n throw new Error(`Published URL is invalid on chain ${chainId}`);\n }\n } catch (error) {\n if (publishedUrl) {\n console.error('Request to published graph URL failed:', error);\n }\n try {\n const result = await sendUserBalancesQueryRequest(url, accountAddress, strUserBalancesQuery);\n storeResult(key, result);\n } catch (error2) {\n console.error('Request to public graph URL failed:', error2);\n throw new Error(`Could not get user balances for ${accountAddress} on chain ${chainId}`);\n }\n }\n }\n\n const balances: VaultShares[] = await promises[key];\n if (balances) {\n shares = balances.map((balance) => {\n return {\n vaultAddress: balance.vault.id,\n shares: balance.vaultShareBalance,\n stakedShares: balance.vaultShareStaked,\n poolAddress: balance.vault.pool,\n };\n });\n return raw\n ? shares.map((s) => {\n return {\n vaultAddress: s.vaultAddress,\n shares: parseBigInt(s.shares, algebraVaultDecimals),\n stakedShares: parseBigInt(s.stakedShares, algebraVaultDecimals),\n poolAddress: s.poolAddress,\n };\n })\n : shares;\n } else {\n return [];\n }\n}\n\nexport async function getUserAmounts(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n token0Decimals: number,\n token1Decimals: number,\n raw: false,\n): Promise<UserAmounts>;\n\nexport async function getUserAmounts(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n token0Decimals: number,\n token1Decimals: number,\n raw: true,\n): Promise<UserAmountsBN>;\n\nexport async function getUserAmounts(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n token0Decimals: number,\n token1Decimals: number,\n raw: boolean,\n) {\n const [totalAmounts, totalSupply, shares] = await Promise.all([\n _getTotalAmounts(vaultAddress, jsonProvider, token0Decimals, token1Decimals, true),\n _getTotalSupply(vaultAddress, jsonProvider, true),\n _getUserBalance(accountAddress, vaultAddress, jsonProvider, true),\n ]);\n\n if (totalSupply.isZero() || shares.isZero()) {\n return [BigNumber.from(0), BigNumber.from(0), BigNumber.from(0)];\n }\n\n const userAmountsBN: UserAmountsBN = [\n shares.mul(totalAmounts[0]).div(totalSupply),\n shares.mul(totalAmounts[1]).div(totalSupply),\n shares,\n ];\n\n const formattedUserAmounts: UserAmounts = [\n formatUnits(userAmountsBN[0], token0Decimals),\n formatUnits(userAmountsBN[1], token1Decimals),\n formatUnits(shares, algebraVaultDecimals),\n ];\n\n if (raw) {\n return userAmountsBN as UserAmountsBN;\n } else {\n return formattedUserAmounts as UserAmounts;\n }\n}\n\nexport async function getAllUserAmounts(\n accountAddress: string,\n jsonProvider: Web3Provider,\n): Promise<UserAmountsInVault[]>;\n\nexport async function getAllUserAmounts(\n accountAddress: string,\n jsonProvider: Web3Provider,\n raw: true,\n): Promise<UserAmountsInVaultBN[]>;\n\nexport async function getAllUserAmounts(accountAddress: string, jsonProvider: Web3Provider, raw?: true) {\n const { chainId } = await getChainByProvider(jsonProvider);\n const { publishedUrl, url } = getGraphUrls(chainId, true);\n\n const key = `${chainId + accountAddress}-all-user-amounts`;\n if (!Object.prototype.hasOwnProperty.call(promises, key)) {\n const strUserBalancesQuery = userBalancesQuery();\n try {\n if (publishedUrl) {\n const result = await sendUserBalancesQueryRequest(publishedUrl, accountAddress, strUserBalancesQuery);\n storeResult(key, result);\n } else {\n throw new Error(`Published URL is invalid on chain ${chainId}`);\n }\n } catch (error) {\n if (publishedUrl) {\n console.error('Request to published graph URL failed:', error);\n }\n try {\n const result = await sendUserBalancesQueryRequest(url, accountAddress, strUserBalancesQuery);\n storeResult(key, result);\n } catch (error2) {\n console.error('Request to public graph URL failed:', error2);\n throw new Error(`Could not get user balances for ${accountAddress} on chain ${chainId}`);\n }\n }\n }\n\n try {\n const balances: VaultShares[] = await promises[key];\n\n if (!balances?.length) {\n return [];\n }\n\n // Prepare multicall calls\n const calls = balances.flatMap((share: VaultShares) => {\n // Normalize token naming by checking which properties exist\n const token0Address = getTokenAddress(share.vault, 0);\n const token1Address = getTokenAddress(share.vault, 1);\n\n return [\n encodeTotalAmountsCall(share.vault.id),\n encodeTotalSupplyCall(share.vault.id),\n encodeDecimalsCall(token0Address),\n encodeDecimalsCall(token1Address),\n ];\n });\n\n // Execute multicall\n const signer = jsonProvider.getSigner(accountAddress);\n const results = await multicall(calls, chainId, signer);\n\n // Process results\n const processedResults = balances.map((share: VaultShares, index: number) => {\n const baseIndex = index * 4;\n const totalAmounts = decodeTotalAmountsResult(results[baseIndex], share.vault.id);\n const totalSupply = decodeTotalSupplyResult(results[baseIndex + 1], share.vault.id);\n\n const token0Address = getTokenAddress(share.vault, 0);\n const token1Address = getTokenAddress(share.vault, 1);\n\n const token0Decimals = decodeDecimalsResult(results[baseIndex + 2], token0Address);\n const token1Decimals = decodeDecimalsResult(results[baseIndex + 3], token1Address);\n\n const userBalance = parseBigInt(share.vaultShareBalance, algebraVaultDecimals);\n\n if (!totalSupply.isZero()) {\n const amount0 = userBalance.mul(totalAmounts.total0).div(totalSupply);\n const amount1 = userBalance.mul(totalAmounts.total1).div(totalSupply);\n\n if (!raw) {\n const userAmounts = [formatBigInt(amount0, token0Decimals), formatBigInt(amount1, token1Decimals)];\n return { vaultAddress: share.vault.id, userAmounts, poolAddress: share.vault.pool };\n } else {\n const userAmountsBN = [amount0, amount1];\n return { vaultAddress: share.vault.id, userAmounts: userAmountsBN, poolAddress: share.vault.pool };\n }\n } else {\n return {\n poolAddress: share.vault.pool,\n vaultAddress: share.vault.id,\n userAmounts: !raw\n ? {\n amount0: '0',\n amount1: '0',\n 0: '0',\n 1: '0',\n }\n : [BigNumber.from(0), BigNumber.from(0), BigNumber.from(0)],\n } as UserAmountsInVault | UserAmountsInVaultBN;\n }\n });\n\n return processedResults;\n } catch (error) {\n console.error('Could not get user amounts');\n throw error;\n }\n}\n","import { BigNumber } from '@ethersproject/bignumber';\n\nconst defaultGasLimit = 5e6;\n// const mantleGasLimit = 3e9;\n\nexport function getGasLimit(): number {\n // return chainId === SupportedChainId.mantle ? mantleGasLimit : defaultGasLimit;\n return defaultGasLimit;\n}\n\nexport function calculateGasMargin(value: BigNumber): BigNumber {\n return value.mul(BigNumber.from(10000 + 2000)).div(BigNumber.from(10000));\n}\n","import { BigNumber } from 'ethers';\n\nexport default function amountWithSlippage(amount: BigNumber, percentSlippage: number): BigNumber {\n return amount.mul(Math.floor((100 - percentSlippage) * 1000)).div(100000);\n}\n","import { SupportedChainId } from '../types';\nimport { addressConfig } from '../config/addresses';\n\nexport default function getVaultDeployer(vaultAddress: string, chainId: SupportedChainId): string {\n const vaultDeployerAddress = addressConfig[chainId]?.vaultDeployerAddress;\n\n // const polVaults = [\n // '0x4aef5144131db95c110af41c8ec09f46295a7c4b'.toLowerCase(),\n // '0x711901e4b9136119Fb047ABe8c43D49339f161c3'.toLowerCase(),\n // '0xE5bf5D33C617556B91558aAfb7BeadB68E9Cea81'.toLowerCase(),\n // ];\n // const polDeployer = '0xC30220fc19e2db669eaa3fa042C07b28F0c10737';\n\n // if (chainId === SupportedChainId.polygon && polVaults.includes(vaultAddress.toLowerCase())) {\n // vaultDeployerAddress = polDeployer;\n // }\n\n if (!vaultDeployerAddress) {\n throw new Error(`Vault deployer not found for vault ${vaultAddress} on chain ${chainId}`);\n }\n return vaultDeployerAddress;\n}\n","import { ContractTransaction, Overrides } from '@ethersproject/contracts';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { MaxUint256 } from '@ethersproject/constants';\nimport { BigNumber } from 'ethers';\nimport { getAlgebraVaultDepositGuardContract, getERC20Contract, getAlgebraVaultContract } from '../contracts';\nimport parseBigInt from '../utils/parseBigInt';\nimport { SupportedChainId, AlgebraVault } from '../types';\nimport { calculateGasMargin, getGasLimit } from '../types/calculateGasMargin';\n// eslint-disable-next-line import/no-cycle\nimport { getAlgebraVaultInfo, validateVaultData } from './vault';\nimport { addressConfig } from '../config/addresses';\nimport amountWithSlippage from '../utils/amountWithSlippage';\nimport getVaultDeployer from './vaultBasics';\nimport { getTokenDecimals } from './_totalBalances';\n\nexport async function isTokenAllowed(\n tokenIdx: 0 | 1,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n): Promise<boolean> {\n const { chainId } = await jsonProvider.getNetwork();\n if (!Object.values(SupportedChainId).includes(chainId)) {\n throw new Error(`Unsupported chainId: ${chainId}`);\n }\n\n const vault = await getAlgebraVaultInfo(chainId, vaultAddress, jsonProvider);\n if (!vault) throw new Error(`Vault ${vaultAddress} not found on chain ${chainId}`);\n\n const tokenAllowed = vault[tokenIdx === 0 ? 'allowTokenA' : 'allowTokenB'];\n\n return tokenAllowed;\n}\n\n// eslint-disable-next-line no-underscore-dangle\nasync function _isDepositTokenApproved(\n accountAddress: string,\n tokenIdx: 0 | 1,\n amount: string | number | BigNumber,\n vault: AlgebraVault,\n chainId: SupportedChainId,\n jsonProvider: JsonRpcProvider,\n): Promise<boolean> {\n const token = vault[tokenIdx === 0 ? 'tokenA' : 'tokenB'];\n\n const tokenContract = getERC20Contract(token, jsonProvider);\n const depositGuardAddress = addressConfig[chainId as SupportedChainId]?.depositGuardAddress ?? '';\n const currentAllowanceBN = await tokenContract.allowance(accountAddress, depositGuardAddress);\n const tokenDecimals = await tokenContract.decimals();\n\n const amountBN = amount instanceof BigNumber ? amount : parseBigInt(amount, tokenDecimals);\n\n return currentAllowanceBN.gt(BigNumber.from(0)) && currentAllowanceBN.gte(amountBN);\n}\n\nexport async function isDepositTokenApproved(\n accountAddress: string,\n tokenIdx: 0 | 1,\n amount: string | number | BigNumber,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n): Promise<boolean> {\n const { vault, chainId } = await validateVaultData(vaultAddress, jsonProvider);\n return _isDepositTokenApproved(accountAddress, tokenIdx, amount, vault, chainId, jsonProvider);\n}\n\nexport async function approveDepositToken(\n accountAddress: string,\n tokenIdx: 0 | 1,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n amount?: string | number | BigNumber,\n overrides?: Overrides,\n): Promise<ContractTransaction> {\n const { chainId, vault } = await validateVaultData(vaultAddress, jsonProvider);\n\n const signer = jsonProvider.getSigner(accountAddress);\n\n const token = vault[tokenIdx === 0 ? 'tokenA' : 'tokenB'];\n\n const tokenContract = getERC20Contract(token, signer);\n const tokenDecimals = await tokenContract.decimals();\n\n // eslint-disable-next-line no-nested-ternary\n const amountBN = amount\n ? amount instanceof BigNumber\n ? amount\n : parseBigInt(amount, +tokenDecimals || 18)\n : MaxUint256;\n\n const depositGuardAddress = addressConfig[chainId as SupportedChainId]?.depositGuardAddress ?? '';\n const gasLimit =\n overrides?.gasLimit ?? calculateGasMargin(await tokenContract.estimateGas.approve(depositGuardAddress, amountBN));\n\n return tokenContract.approve(depositGuardAddress, amountBN, { gasLimit });\n}\n\n// eslint-disable-next-line no-underscore-dangle\nexport async function _getMaxDepositAmount(\n tokenIdx: 0 | 1,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n): Promise<BigNumber> {\n const vaultContract = getAlgebraVaultContract(vaultAddress, jsonProvider);\n\n const maxDepositAmount = tokenIdx === 0 ? vaultContract.deposit0Max() : vaultContract.deposit1Max();\n\n return maxDepositAmount;\n}\n\nexport async function getMaxDepositAmount(\n tokenIdx: 0 | 1,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n): Promise<BigNumber> {\n await validateVaultData(vaultAddress, jsonProvider);\n\n const maxDepositAmount = _getMaxDepositAmount(tokenIdx, vaultAddress, jsonProvider);\n\n return maxDepositAmount;\n}\n\nexport async function deposit(\n accountAddress: string,\n amount0: string | number | BigNumber,\n amount1: string | number | BigNumber,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n percentSlippage = 1,\n overrides?: Overrides,\n): Promise<ContractTransaction> {\n const { chainId, vault } = await validateVaultData(vaultAddress, jsonProvider);\n const signer = jsonProvider.getSigner(accountAddress);\n const vaultDeployerAddress = getVaultDeployer(vaultAddress, chainId);\n\n const token0 = vault.tokenA;\n const token1 = vault.tokenB;\n const isToken0Allowed = vault.allowTokenA;\n const isToken1Allowed = vault.allowTokenB;\n const token0Decimals = await getTokenDecimals(token0, jsonProvider, chainId);\n const token1Decimals = await getTokenDecimals(token1, jsonProvider, chainId);\n const amount0BN = amount0 instanceof BigNumber ? amount0 : parseBigInt(amount0, +token0Decimals);\n const amount1BN = amount1 instanceof BigNumber ? amount1 : parseBigInt(amount1, +token1Decimals);\n if (!isToken0Allowed && amount0BN.gt(BigNumber.from(0))) {\n throw new Error(`Deposit of token0 is not allowed: ${chainId}, ${vaultAddress}`);\n }\n if (!isToken1Allowed && amount1BN.gt(BigNumber.from(0))) {\n throw new Error(`Deposit of token1 is not allowed: chain ${chainId}, vault ${vaultAddress}`);\n }\n let depositAmount = amount0BN;\n let depositToken = token0;\n let tokenIndex = 0 as 0 | 1;\n if (amount1BN.gt(BigNumber.from(0))) {\n depositAmount = amount1BN;\n depositToken = token1;\n tokenIndex = 1;\n }\n const amountBN = isToken0Allowed ? amount0BN : amount1BN;\n\n const isApproved = await _isDepositTokenApproved(accountAddress, tokenIndex, amountBN, vault, chainId, jsonProvider);\n if (!isApproved) {\n throw new Error(`Deposit is not approved for token: ${depositToken}, chain ${chainId}, vault ${vaultAddress}`);\n }\n\n const tokenContract = getERC20Contract(depositToken, jsonProvider);\n const userTokenBalance = await tokenContract.balanceOf(accountAddress);\n\n if (userTokenBalance.lt(depositAmount)) {\n throw new Error(`Deposit amount exceeds user token amount for token: ${depositToken}, chain ${chainId}`);\n }\n\n const maxDeposit0 = await _getMaxDepositAmount(0, vaultAddress, jsonProvider);\n const maxDeposit1 = await _getMaxDepositAmount(1, vaultAddress, jsonProvider);\n if (amount0BN.gt(maxDeposit0) || amount0BN.gt(maxDeposit1)) {\n throw new Error(`Deposit amount exceeds max deposit amount: vault ${vaultAddress}, chain ${chainId}`);\n }\n\n // obtain Deposit Guard contract\n const depositGuardAddress = addressConfig[chainId as SupportedChainId]?.depositGuardAddress ?? '';\n const depositGuardContract = getAlgebraVaultDepositGuardContract(depositGuardAddress, signer);\n const maxGasLimit = getGasLimit();\n\n // the first call: get estimated LP amount\n let lpAmount = BigNumber.from(0);\n\n try {\n lpAmount = await depositGuardContract.callStatic.forwardDepositToALMVault(\n vaultAddress,\n vaultDeployerAddress,\n depositToken,\n depositAmount,\n BigNumber.from(0),\n accountAddress,\n {\n gasLimit: maxGasLimit,\n },\n );\n } catch (error) {\n console.error('Error while getting estimated LP amount:', error);\n }\n\n // reduce the estimated LP amount by an acceptable slippage %, for example 1%\n if (percentSlippage < 0.01) throw new Error('Slippage parameter is less than 0.01%.');\n if (percentSlippage > 100) throw new Error('Slippage parameter is more than 100%.');\n lpAmount = lpAmount.mul(Math.floor((100 - percentSlippage) * 1000)).div(100000);\n\n const gasLimit =\n overrides?.gasLimit ??\n calculateGasMargin(\n await depositGuardContract.estimateGas.forwardDepositToALMVault(\n vaultAddress,\n vaultDeployerAddress,\n depositToken,\n depositAmount,\n lpAmount,\n accountAddress,\n ),\n );\n\n // the second call: actual deposit transaction\n const tx = await depositGuardContract.forwardDepositToALMVault(\n vaultAddress,\n vaultDeployerAddress,\n depositToken,\n depositAmount,\n lpAmount,\n accountAddress,\n {\n ...overrides,\n gasLimit,\n },\n );\n\n return tx;\n}\n\nexport async function depositNativeToken(\n accountAddress: string,\n amount0: string | number | BigNumber,\n amount1: string | number | BigNumber,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n percentSlippage = 1,\n overrides?: Overrides,\n): Promise<ContractTransaction> {\n const { chainId, vault } = await validateVaultData(vaultAddress, jsonProvider);\n // if (chainId === SupportedChainId.celo) {\n // throw new Error(`This function is not supported on chain ${chainId}`);\n // }\n\n const signer = jsonProvider.getSigner(accountAddress);\n const vaultDeployerAddress = getVaultDeployer(vaultAddress, chainId);\n\n const token0 = vault.tokenA;\n const token1 = vault.tokenB;\n const isToken0Allowed = vault.allowTokenA;\n const isToken1Allowed = vault.allowTokenB;\n const token0Contract = getERC20Contract(token0, signer);\n const token1Contract = getERC20Contract(token1, signer);\n const token0Decimals = await token0Contract.decimals();\n const token1Decimals = await token1Contract.decimals();\n const amount0BN = amount0 instanceof BigNumber ? amount0 : parseBigInt(amount0, +token0Decimals);\n const amount1BN = amount1 instanceof BigNumber ? amount1 : parseBigInt(amount1, +token1Decimals);\n if (!isToken0Allowed && amount0BN > BigNumber.from(0)) {\n throw new Error(`Deposit of token0 is not allowed: ${chainId}, ${vaultAddress}`);\n }\n if (!isToken1Allowed && amount1BN > BigNumber.from(0)) {\n throw new Error(`Deposit of token1 is not allowed: ${chainId}, ${vaultAddress}`);\n }\n let depositAmount = amount0BN;\n let depositToken = token0;\n if (amount1BN > BigNumber.from(0)) {\n depositAmount = amount1BN;\n depositToken = token1;\n }\n\n // obtain Deposit Guard contract\n const depositGuardAddress = addressConfig[chainId as SupportedChainId]?.depositGuardAddress;\n if (!depositGuardAddress) {\n throw new Error(`Deposit Guard not found for vault ${vaultAddress} on chain ${chainId}`);\n }\n const depositGuardContract = getAlgebraVaultDepositGuardContract(depositGuardAddress, signer);\n const wrappedNative = await depositGuardContract.WRAPPED_NATIVE();\n if (wrappedNative.toLowerCase() !== depositToken.toLowerCase()) {\n throw new Error('Deposit token is not wrapped native token');\n }\n\n const userNativeTokenBalance = await jsonProvider.getBalance(accountAddress);\n if (userNativeTokenBalance.lt(depositAmount)) {\n throw new Error(`Deposit amount exceeds user native token amount on chain ${chainId}`);\n }\n\n const maxGasLimit = getGasLimit();\n\n // if (chainId === SupportedChainId.hedera) {\n // depositAmount = depositAmount.mul(BigNumber.from(1e10));\n // }\n\n // the first call: get estimated LP amount\n let lpAmount = await depositGuardContract.callStatic.forwardNativeDepositToALMVault(\n vaultAddress,\n vaultDeployerAddress,\n BigNumber.from(0),\n accountAddress,\n {\n value: depositAmount,\n gasLimit: maxGasLimit,\n },\n );\n\n // reduce the estimated LP amount by an acceptable slippage %, for example 1%\n if (percentSlippage < 0.01) throw new Error('Slippage parameter is less than 0.01%.');\n if (percentSlippage > 100) throw new Error('Slippage parameter is more than 100%.');\n lpAmount = amountWithSlippage(lpAmount, percentSlippage);\n\n const gasLimit =\n overrides?.gasLimit ??\n calculateGasMargin(\n await depositGuardContract.estimateGas.forwardNativeDepositToALMVault(\n vaultAddress,\n vaultDeployerAddress,\n lpAmount,\n accountAddress,\n {\n value: depositAmount,\n },\n ),\n );\n\n // the second call: actual deposit transaction\n const tx = await depositGuardContract.forwardNativeDepositToALMVault(\n vaultAddress,\n vaultDeployerAddress,\n lpAmount,\n accountAddress,\n {\n value: depositAmount,\n ...overrides,\n gasLimit,\n },\n );\n\n return tx;\n}\n","/* eslint-disable import/prefer-default-export */\n\nimport { ContractTransaction, Overrides } from '@ethersproject/contracts';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { BigNumber } from 'ethers';\nimport { MaxUint256 } from '@ethersproject/constants';\nimport { getAlgebraVaultDepositGuardContract, getERC20Contract, getAlgebraVaultContract } from '../contracts';\nimport parseBigInt from '../utils/parseBigInt';\nimport { AlgebraVault, SupportedChainId, algebraVaultDecimals } from '../types';\nimport { getGasLimit, calculateGasMargin } from '../types/calculateGasMargin';\n// eslint-disable-next-line import/no-cycle\nimport { validateVaultData } from './vault';\nimport { addressConfig } from '../config/addresses';\nimport amountWithSlippage from '../utils/amountWithSlippage';\nimport { getUserBalance } from './userBalances';\nimport getVaultDeployer from './vaultBasics';\n\nexport async function approveVaultToken(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n shares?: string | number | BigNumber,\n overrides?: Overrides,\n): Promise<ContractTransaction> {\n const { chainId } = await validateVaultData(vaultAddress, jsonProvider);\n\n const signer = jsonProvider.getSigner(accountAddress);\n\n const vaultTokenContract = getERC20Contract(vaultAddress, signer);\n\n // eslint-disable-next-line no-nested-ternary\n const sharesBN = shares\n ? shares instanceof BigNumber\n ? shares\n : parseBigInt(shares, algebraVaultDecimals)\n : MaxUint256;\n\n const depositGuardAddress = addressConfig[chainId as SupportedChainId]?.depositGuardAddress;\n if (!depositGuardAddress) {\n throw new Error(`Deposit Guard for vault ${vaultAddress} not found on chain ${chainId}`);\n }\n const gasLimit =\n overrides?.gasLimit ??\n calculateGasMargin(await vaultTokenContract.estimateGas.approve(depositGuardAddress, sharesBN));\n\n return vaultTokenContract.approve(depositGuardAddress, sharesBN, { gasLimit });\n}\n\n// eslint-disable-next-line no-underscore-dangle\nasync function _isVaultTokenApproved(\n accountAddress: string,\n shares: string | number | BigNumber,\n vault: AlgebraVault,\n chainId: SupportedChainId,\n jsonProvider: JsonRpcProvider,\n): Promise<boolean> {\n const signer = jsonProvider.getSigner(accountAddress);\n\n const vaultTokenContract = getERC20Contract(vault.id, signer);\n const depositGuardAddress = addressConfig[chainId as SupportedChainId]?.depositGuardAddress;\n if (!depositGuardAddress) {\n throw new Error(`Deposit Guard for vault ${vault.id} not found on chain ${chainId}`);\n }\n const currentAllowanceBN = await vaultTokenContract.allowance(accountAddress, depositGuardAddress);\n\n const sharesBN = shares instanceof BigNumber ? shares : parseBigInt(shares, algebraVaultDecimals);\n\n return currentAllowanceBN.gt(BigNumber.from(0)) && currentAllowanceBN.gte(sharesBN);\n}\n\nexport async function isVaultTokenApproved(\n accountAddress: string,\n shares: string | number | BigNumber,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n): Promise<boolean> {\n const { chainId, vault } = await validateVaultData(vaultAddress, jsonProvider);\n return _isVaultTokenApproved(accountAddress, shares, vault, chainId, jsonProvider);\n}\n\nexport async function withdraw(\n accountAddress: string,\n shares: string | number | BigNumber,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n overrides?: Overrides,\n): Promise<ContractTransaction> {\n const { chainId } = await validateVaultData(vaultAddress, jsonProvider);\n const signer = jsonProvider.getSigner(accountAddress);\n const vaultContract = getAlgebraVaultContract(vaultAddress, signer);\n\n const userShares = getUserBalance(accountAddress, vaultAddress, jsonProvider, true);\n const withdrawShares = shares instanceof BigNumber ? shares : parseBigInt(shares, 18);\n if ((await userShares).lt(withdrawShares)) {\n throw new Error(`Withdraw amount exceeds user shares amount in vault ${vaultAddress} on chain ${chainId}`);\n }\n\n const params: Parameters<typeof vaultContract.withdraw> = [\n shares instanceof BigNumber ? shares : parseBigInt(shares, 18),\n accountAddress,\n ];\n const gasLimit = overrides?.gasLimit ?? calculateGasMargin(await vaultContract.estimateGas.withdraw(...params));\n params[2] = { ...overrides, gasLimit };\n\n return vaultContract.withdraw(...params);\n}\n\nexport async function withdrawWithSlippage(\n accountAddress: string,\n shares: string | number | BigNumber,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n percentSlippage = 1,\n overrides?: Overrides,\n): Promise<ContractTransaction> {\n const { chainId, vault } = await validateVaultData(vaultAddress, jsonProvider);\n\n const signer = jsonProvider.getSigner(accountAddress);\n\n const vaultDeployerAddress = getVaultDeployer(vaultAddress, chainId);\n\n // obtain Deposit Guard contract\n const depositGuardAddress = addressConfig[chainId as SupportedChainId]?.depositGuardAddress;\n if (!depositGuardAddress) {\n throw new Error(`Deposit Guard for vault ${vaultAddress} not found on chain ${chainId}`);\n }\n\n const userShares = getUserBalance(accountAddress, vaultAddress, jsonProvider, true);\n const withdrawShares = shares instanceof BigNumber ? shares : parseBigInt(shares, 18);\n if ((await userShares).lt(withdrawShares)) {\n throw new Error(`Withdraw amount exceeds user shares amount in vault ${vaultAddress} on chain ${chainId}`);\n }\n\n const isApproved = await _isVaultTokenApproved(accountAddress, withdrawShares, vault, chainId, jsonProvider);\n if (!isApproved) {\n throw new Error(`Vault token transfer is not approved for vault ${vaultAddress} on chain ${chainId}`);\n }\n\n const depositGuardContract = getAlgebraVaultDepositGuardContract(depositGuardAddress, signer);\n const maxGasLimit = getGasLimit();\n\n // the first call: get estimated LP amount\n let amounts = await depositGuardContract.callStatic.forwardWithdrawFromALMVault(\n vaultAddress,\n vaultDeployerAddress,\n withdrawShares,\n accountAddress,\n BigNumber.from(0),\n BigNumber.from(0),\n {\n gasLimit: maxGasLimit,\n },\n );\n\n // reduce the estimated LP amount by an acceptable slippage %, default - 1%\n if (percentSlippage < 0.01) throw new Error('Slippage parameter is less than 0.01%.');\n if (percentSlippage > 100) throw new Error('Slippage parameter is more than 100%.');\n amounts = {\n 0: amountWithSlippage(amounts[0], percentSlippage),\n 1: amountWithSlippage(amounts[1], percentSlippage),\n amount0: amountWithSlippage(amounts[0], percentSlippage),\n amount1: amountWithSlippage(amounts[1], percentSlippage),\n } as [BigNumber, BigNumber] & { amount0: BigNumber; amount1: BigNumber };\n\n const gasLimit =\n overrides?.gasLimit ??\n calculateGasMargin(\n await depositGuardContract.estimateGas.forwardWithdrawFromALMVault(\n vaultAddress,\n vaultDeployerAddress,\n withdrawShares,\n accountAddress,\n amounts[0],\n amounts[1],\n ),\n );\n\n // the second call: actual deposit transaction\n const tx = await depositGuardContract.forwardWithdrawFromALMVault(\n vaultAddress,\n vaultDeployerAddress,\n withdrawShares,\n accountAddress,\n amounts[0],\n amounts[1],\n {\n ...overrides,\n gasLimit,\n },\n );\n\n return tx;\n}\n\nexport async function withdrawNativeToken(\n accountAddress: string,\n shares: string | number | BigNumber,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n percentSlippage = 1,\n overrides?: Overrides,\n): Promise<ContractTransaction> {\n const { chainId, vault } = await validateVaultData(vaultAddress, jsonProvider);\n\n const signer = jsonProvider.getSigner(accountAddress);\n\n const vaultDeployerAddress = getVaultDeployer(vaultAddress, chainId);\n\n const userShares = getUserBalance(accountAddress, vaultAddress, jsonProvider, true);\n const withdrawShares = shares instanceof BigNumber ? shares : parseBigInt(shares, 18);\n if ((await userShares).lt(withdrawShares)) {\n throw new Error(`Withdraw amount exceeds user shares amount in vault ${vaultAddress} on chain ${chainId}`);\n }\n\n const isApproved = await _isVaultTokenApproved(accountAddress, withdrawShares, vault, chainId, jsonProvider);\n if (!isApproved) {\n throw new Error(`Vault token transfer is not approved for vault ${vaultAddress} on chain ${chainId}`);\n }\n\n // obtain Deposit Guard contract\n const depositGuardAddress = addressConfig[chainId as SupportedChainId]?.depositGuardAddress;\n if (!depositGuardAddress) {\n throw new Error(`Deposit Guard for vault ${vaultAddress} not found on chain ${chainId}`);\n }\n const depositGuardContract = getAlgebraVaultDepositGuardContract(depositGuardAddress, signer);\n const wrappedNative = await depositGuardContract.WRAPPED_NATIVE();\n if (\n wrappedNative.toLowerCase() !== vault.tokenA.toLowerCase() &&\n wrappedNative.toLowerCase() !== vault.tokenB.toLowerCase()\n ) {\n throw new Error('None of vault tokens is wrapped native token');\n }\n\n const maxGasLimit = getGasLimit();\n\n // the first call: get estimated LP amount\n let amounts = await depositGuardContract.callStatic.forwardNativeWithdrawFromALMVault(\n vaultAddress,\n vaultDeployerAddress,\n withdrawShares,\n accountAddress,\n BigNumber.from(0),\n BigNumber.from(0),\n {\n gasLimit: maxGasLimit,\n },\n );\n\n // reduce the estimated LP amount by an acceptable slippage %, default - 1%\n if (percentSlippage < 0.01) throw new Error('Slippage parameter is less than 0.01%.');\n if (percentSlippage > 100) throw new Error('Slippage parameter is more than 100%.');\n amounts = {\n 0: amountWithSlippage(amounts[0], percentSlippage),\n 1: amountWithSlippage(amounts[1], percentSlippage),\n amount0: amountWithSlippage(amounts[0], percentSlippage),\n amount1: amountWithSlippage(amounts[1], percentSlippage),\n } as [BigNumber, BigNumber] & { amount0: BigNumber; amount1: BigNumber };\n\n const gasLimit =\n overrides?.gasLimit ??\n calculateGasMargin(\n await depositGuardContract.estimateGas.forwardNativeWithdrawFromALMVault(\n vaultAddress,\n vaultDeployerAddress,\n withdrawShares,\n accountAddress,\n amounts[0],\n amounts[1],\n ),\n );\n\n // the second call: actual deposit transaction\n const tx = await depositGuardContract.forwardNativeWithdrawFromALMVault(\n vaultAddress,\n vaultDeployerAddress,\n withdrawShares,\n accountAddress,\n amounts[0],\n amounts[1],\n {\n ...overrides,\n gasLimit,\n },\n );\n\n return tx;\n}\n","export function daysToMilliseconds(days: number): number {\n return days * 24 * 60 * 60 * 1000;\n}\n\nexport function millisecondsToDays(ms: number): number {\n return ms / (24 * 60 * 60 * 1000);\n}\n","import { BigNumber } from 'ethers';\nimport univ3pricesImport from '@thanpolas/univ3prices';\n\nconst univ3prices = (univ3pricesImport as unknown as { default?: any })?.default ?? univ3pricesImport;\n\n// calculate price/ratio in the pool\nexport default function getPrice(\n isInverted: boolean,\n sqrtPrice: BigNumber,\n decimals0: number,\n decimals1: number,\n decimalPlaces = 3,\n): number {\n let decimalArray = [decimals0, decimals1];\n if (isInverted) {\n decimalArray = [decimals1, decimals0];\n }\n const price = univ3prices(decimalArray, sqrtPrice).toSignificant({\n reverse: isInverted,\n decimalPlaces,\n });\n\n return price;\n}\n","/* eslint-disable no-redeclare */\n/* eslint-disable import/prefer-default-export */\n\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { AlgebraVault, SupportedChainId, TotalAmountsBN } from '../types';\n// eslint-disable-next-line import/no-cycle\nimport { getAlgebraVaultInfo } from './vault';\nimport { getTotalAmounts } from './totalBalances';\nimport getPrice from '../utils/getPrice';\nimport { getAlgebraPoolContract, getAlgebraVaultContract } from '../contracts';\nimport { _getTotalAmounts, _getTotalSupply } from './_totalBalances';\n\nexport async function getSqrtPriceFromPool(vault: AlgebraVault, jsonProvider: JsonRpcProvider): Promise<BigNumber> {\n try {\n const vaultContract = getAlgebraVaultContract(vault.id, jsonProvider);\n const poolAddress: string = await vaultContract.pool();\n\n const poolContract = getAlgebraPoolContract(poolAddress, jsonProvider);\n const globalState = await poolContract.globalState();\n return globalState[0];\n } catch (e) {\n console.error(`Could not get price from vault ${vault.id} `);\n throw e;\n }\n}\n\n// current price in pool of scarse token in deposit tokens\nexport async function getCurrPrice(\n vault: AlgebraVault,\n jsonProvider: JsonRpcProvider,\n isVaultInverted: boolean,\n token0decimals: number,\n token1decimals: number,\n): Promise<number> {\n try {\n const sqrtPrice = await getSqrtPriceFromPool(vault, jsonProvider);\n const depositTokenDecimals = isVaultInverted ? token1decimals : token0decimals;\n const scarceTokenDecimals = isVaultInverted ? token0decimals : token1decimals;\n const price = getPrice(isVaultInverted, sqrtPrice, depositTokenDecimals, scarceTokenDecimals, 15);\n\n return price;\n } catch (e) {\n console.error(`Could not get price from vault ${vault.id} `);\n throw e;\n }\n}\n\nexport async function getVaultTvl(\n vault: AlgebraVault,\n jsonProvider: JsonRpcProvider,\n isVaultInverted: boolean,\n token0decimals: number,\n token1decimals: number,\n): Promise<{ tvl: number; totalAmounts: TotalAmountsBN }> {\n const totalAmounts = await _getTotalAmounts(vault.id, jsonProvider, token0decimals, token1decimals, true);\n const price = await getCurrPrice(vault, jsonProvider, isVaultInverted, token0decimals, token1decimals);\n const tvl = !isVaultInverted\n ? Number(totalAmounts.total0) + Number(totalAmounts.total1) * price\n : Number(totalAmounts.total1) + Number(totalAmounts.total0) * price;\n\n return { tvl, totalAmounts };\n}\n\n// current LP price in pool in deposit tokens\nexport async function getCurrLpPrice(\n vault: AlgebraVault,\n jsonProvider: JsonRpcProvider,\n chainId: SupportedChainId,\n isVaultInverted: boolean,\n token0decimals: number,\n token1decimals: number,\n): Promise<number> {\n try {\n const { tvl } = await getVaultTvl(vault, jsonProvider, isVaultInverted, token0decimals, token1decimals);\n const totalSupply = await _getTotalSupply(vault.id, jsonProvider);\n if (Number(totalSupply) === 0) {\n throw new Error(`Could not get LP price. Vault total supply is 0 for vault ${vault.id} on chain ${chainId}`);\n }\n const result = tvl / Number(totalSupply);\n return result;\n } catch (e) {\n console.error(`Could not get LP price from vault ${vault.id} `);\n throw e;\n }\n}\n\n// total amounts at deposit or withdrawal in deposit tokens\nexport async function getCurrentDtr(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n isVaultInverted: boolean,\n token0decimals: number,\n token1decimals: number,\n): Promise<number> {\n const { chainId } = await jsonProvider.getNetwork();\n\n if (!Object.values(SupportedChainId).includes(chainId)) {\n throw new Error(`Unsupported chainId: ${chainId ?? 'undefined'}`);\n }\n\n const vault = await getAlgebraVaultInfo(chainId, vaultAddress, jsonProvider);\n if (!vault) throw new Error(`Vault ${vaultAddress} not found on chain ${chainId}`);\n\n const totalAmounts = await getTotalAmounts(vaultAddress, jsonProvider, false, token0decimals, token1decimals);\n const price = await getCurrPrice(vault, jsonProvider, isVaultInverted, token0decimals, token1decimals);\n if (Number(totalAmounts.total0) + Number(totalAmounts.total1) * price === 0) return 0;\n const dtr = !isVaultInverted\n ? (Number(totalAmounts.total0) / (Number(totalAmounts.total0) + Number(totalAmounts.total1) * price)) * 100\n : (Number(totalAmounts.total1) / (Number(totalAmounts.total1) + Number(totalAmounts.total0) * price)) * 100;\n\n return dtr;\n}\n","/* eslint-disable camelcase */\n/* eslint-disable no-await-in-loop */\n/* eslint-disable radix */\n/* eslint-disable import/no-cycle */\n// eslint-disable-next-line import/no-unresolved\nimport { SupportedChainId, Fees, VaultTransactionEvent, VaultState } from '../types';\nimport {\n allEventsQuery,\n rebalancesQuery,\n vaultCollectFeesQuery,\n vaultDepositsQuery,\n vaultWithdrawsQuery,\n} from '../graphql/queries';\nimport { daysToMilliseconds } from '../utils/timestamps';\nimport getGraphUrls from '../utils/getGraphUrls';\nimport cache from '../utils/cache';\nimport {\n sendAllEventsQueryRequest,\n sendCollectFeesQueryRequest,\n sendDepositsQueryRequest,\n sendRebalancesQueryRequest,\n sendWithdrawsQueryRequest,\n} from '../graphql/functions';\n\n// eslint-disable-next-line no-underscore-dangle\nexport async function _getAllEvents(\n vaultAddress: string,\n chainId: SupportedChainId,\n days?: number,\n): Promise<VaultState[]> {\n const key = `allevents-${chainId}-${vaultAddress}-${days}`;\n const cachedData = cache.get(key);\n if (cachedData) {\n return cachedData as Fees[];\n }\n\n const ttl = 120000;\n const { publishedUrl, url } = getGraphUrls(chainId, true);\n\n const currTimestamp = Date.now();\n const startTimestamp = days\n ? parseInt(((currTimestamp - daysToMilliseconds(days)) / 1000).toString()).toString()\n : '0';\n const query = allEventsQuery;\n\n const allEvents = [] as Fees[];\n let endOfData = false;\n let page = 0;\n while (!endOfData) {\n let result;\n try {\n if (publishedUrl) {\n result = await sendAllEventsQueryRequest(publishedUrl, vaultAddress, startTimestamp, query(page));\n } else {\n throw new Error(`Published URL is invalid on chain ${chainId}`);\n }\n } catch (error) {\n if (publishedUrl) {\n console.error('Request to published graph URL failed:', error);\n }\n try {\n result = await sendAllEventsQueryRequest(url, vaultAddress, startTimestamp, query(page));\n } catch (error2) {\n console.error('Request to public graph URL failed:', error2);\n throw new Error(`Could not get rebalances for vault ${vaultAddress} on chain ${chainId}`);\n }\n }\n if (result) {\n allEvents.push(...result.vaultRebalances);\n allEvents.push(...result.vaultCollectFees);\n allEvents.push(...result.vaultDeposits);\n allEvents.push(...result.vaultWithdraws);\n page += 1;\n if (\n result.vaultRebalances.length < 1000 &&\n result.vaultCollectFees?.length < 1000 &&\n result.vaultDeposits.length < 1000 &&\n result.vaultWithdraws.length < 1000\n ) {\n endOfData = true;\n }\n } else {\n endOfData = true;\n }\n }\n cache.set(key, allEvents, ttl);\n\n return allEvents;\n}\n\n// eslint-disable-next-line no-underscore-dangle\nexport async function _getRebalances(vaultAddress: string, chainId: SupportedChainId, days?: number): Promise<Fees[]> {\n const key = `rebalances-${chainId}-${vaultAddress}-${days}`;\n const cachedData = cache.get(key);\n if (cachedData) {\n return cachedData as Fees[];\n }\n\n const ttl = 120000;\n const { publishedUrl, url } = getGraphUrls(chainId, true);\n\n const currTimestamp = Date.now();\n const startTimestamp = days\n ? parseInt(((currTimestamp - daysToMilliseconds(days)) / 1000).toString()).toString()\n : '0';\n\n const rebalances = [] as Fees[];\n let endOfData = false;\n let page = 0;\n while (!endOfData) {\n let result;\n try {\n if (publishedUrl) {\n result = await sendRebalancesQueryRequest(publishedUrl, vaultAddress, startTimestamp, rebalancesQuery(page));\n } else {\n throw new Error(`Published URL is invalid on chain ${chainId}`);\n }\n } catch (error) {\n if (publishedUrl) {\n console.error('Request to published graph URL failed:', error);\n }\n try {\n result = await sendRebalancesQueryRequest(url, vaultAddress, startTimestamp, rebalancesQuery(page));\n } catch (error2) {\n console.error('Request to public graph URL failed:', error2);\n throw new Error(`Could not get rebalances for vault ${vaultAddress} on chain ${chainId}`);\n }\n }\n if (result) {\n rebalances.push(...result);\n page += 1;\n if (result.length < 1000) {\n endOfData = true;\n }\n } else {\n endOfData = true;\n }\n }\n cache.set(key, rebalances, ttl);\n\n return rebalances;\n}\n\n// eslint-disable-next-line no-underscore-dangle\nexport async function _getFeesCollectedEvents(\n vaultAddress: string,\n chainId: SupportedChainId,\n days?: number,\n): Promise<Fees[]> {\n const key = `fees-${chainId}-${vaultAddress}-${days}`;\n const cachedData = cache.get(key);\n if (cachedData) {\n return cachedData as Fees[];\n }\n\n const ttl = 120000;\n const { publishedUrl, url } = getGraphUrls(chainId, true);\n\n const currTimestamp = Date.now();\n const startTimestamp = days\n ? parseInt(((currTimestamp - daysToMilliseconds(days)) / 1000).toString()).toString()\n : '0';\n\n const otherFees = [] as Fees[];\n let endOfData = false;\n let page = 0;\n while (!endOfData) {\n let result;\n try {\n if (publishedUrl) {\n result = await sendCollectFeesQueryRequest(\n publishedUrl,\n vaultAddress,\n startTimestamp,\n vaultCollectFeesQuery(page),\n );\n } else {\n throw new Error(`Published URL is invalid on chain ${chainId}`);\n }\n } catch (error) {\n if (publishedUrl) {\n console.error('Request to published graph URL failed:', error);\n }\n try {\n result = await sendCollectFeesQueryRequest(url, vaultAddress, startTimestamp, vaultCollectFeesQuery(page));\n } catch (error2) {\n console.error('Request to public graph URL failed:', error2);\n throw new Error(`Could not get collected fees for vault ${vaultAddress} on chain ${chainId}`);\n }\n }\n if (result) {\n otherFees.push(...result);\n page += 1;\n if (result.length < 1000) {\n endOfData = true;\n }\n } else {\n endOfData = true;\n }\n }\n cache.set(key, otherFees, ttl);\n\n return otherFees;\n}\n\n// eslint-disable-next-line no-underscore-dangle\nexport async function _getDeposits(\n vaultAddress: string,\n chainId: SupportedChainId,\n days?: number,\n): Promise<VaultTransactionEvent[]> {\n const key = `deposits-${chainId}-${vaultAddress}-${days}`;\n const cachedData = cache.get(key);\n if (cachedData) {\n return cachedData as VaultTransactionEvent[];\n }\n\n const ttl = 120000;\n const { publishedUrl, url } = getGraphUrls(chainId, true);\n\n const currTimestamp = Date.now();\n const startTimestamp = days\n ? parseInt(((currTimestamp - daysToMilliseconds(days)) / 1000).toString()).toString()\n : '0';\n\n const depositEvents = [] as VaultTransactionEvent[];\n let endOfData = false;\n let page = 0;\n while (!endOfData) {\n let result;\n try {\n if (publishedUrl) {\n result = await sendDepositsQueryRequest(publishedUrl, vaultAddress, vaultDepositsQuery(page), startTimestamp);\n } else {\n throw new Error(`Published URL is invalid on chain ${chainId}`);\n }\n } catch (error) {\n if (publishedUrl) {\n console.error('Request to published graph URL failed:', error);\n }\n try {\n result = await sendDepositsQueryRequest(url, vaultAddress, vaultDepositsQuery(page), startTimestamp);\n } catch (error2) {\n console.error('Request to public graph URL failed:', error2);\n throw new Error(`Could not get deposits for vault ${vaultAddress} on chain ${chainId}`);\n }\n }\n if (result) {\n depositEvents.push(...result);\n page += 1;\n if (result.length < 1000) {\n endOfData = true;\n }\n } else {\n endOfData = true;\n }\n }\n cache.set(key, depositEvents, ttl);\n\n return depositEvents;\n}\n\n// eslint-disable-next-line no-underscore-dangle\nexport async function _getWithdraws(\n vaultAddress: string,\n chainId: SupportedChainId,\n days?: number,\n): Promise<VaultTransactionEvent[]> {\n const key = `withdraws-${chainId}-${vaultAddress}-${days}`;\n const cachedData = cache.get(key);\n if (cachedData) {\n return cachedData as VaultTransactionEvent[];\n }\n\n const ttl = 120000;\n const { publishedUrl, url } = getGraphUrls(chainId, true);\n\n const currTimestamp = Date.now();\n const startTimestamp = days\n ? parseInt(((currTimestamp - daysToMilliseconds(days)) / 1000).toString()).toString()\n : '0';\n\n const withdrawEvents = [] as VaultTransactionEvent[];\n let endOfData = false;\n let page = 0;\n while (!endOfData) {\n let result;\n try {\n if (publishedUrl) {\n result = await sendWithdrawsQueryRequest(publishedUrl, vaultAddress, vaultWithdrawsQuery(page), startTimestamp);\n } else {\n throw new Error(`Published URL is invalid on chain ${chainId}`);\n }\n } catch (error) {\n if (publishedUrl) {\n console.error('Request to published graph URL failed:', error);\n }\n try {\n result = await sendWithdrawsQueryRequest(url, vaultAddress, vaultWithdrawsQuery(page), startTimestamp);\n } catch (error2) {\n console.error('Request to public graph URL failed:', error2);\n throw new Error(`Could not get withdraws for vault ${vaultAddress} on chain ${chainId}`);\n }\n }\n if (result) {\n withdrawEvents.push(...result);\n page += 1;\n if (result.length < 1000) {\n endOfData = true;\n }\n } else {\n endOfData = true;\n }\n }\n cache.set(key, withdrawEvents, ttl);\n\n return withdrawEvents;\n}\n\n// eslint-disable-next-line no-underscore-dangle\nexport async function _getAllVaultEvents(\n vaultAddress: string,\n chainId: SupportedChainId,\n days?: number,\n): Promise<VaultState[]> {\n const key = `allEvents-${chainId}-${vaultAddress}`;\n const cachedData = cache.get(key);\n if (cachedData) {\n return cachedData as VaultState[];\n }\n\n const ttl = 120000;\n const allEvents = await _getAllEvents(vaultAddress, chainId, days);\n const result = allEvents.sort(\n (a, b) => Number(b.createdAtTimestamp) - Number(a.createdAtTimestamp), // recent events first\n );\n cache.set(key, result, ttl);\n\n return result;\n}\n\nexport function getVaultStateAt(vaultEvents: VaultState[], daysAgo: number): VaultState | null {\n if (vaultEvents.length === 0) {\n return null;\n }\n const eventsBefore = vaultEvents.filter(\n (e) => Number(e.createdAtTimestamp) * 1000 <= Date.now() - daysToMilliseconds(daysAgo),\n );\n if (eventsBefore.length > 0) {\n return eventsBefore[0];\n } else {\n return null;\n }\n}\n","// eslint-disable-next-line import/no-cycle\nimport { sendDepositsQueryRequest, sendWithdrawsQueryRequest } from '../graphql/functions';\nimport { vaultDepositsQuery, vaultWithdrawsQuery } from '../graphql/queries';\nimport { SupportedChainId } from '../types';\nimport getGraphUrls from '../utils/getGraphUrls';\n\nexport async function getUserDeposits(accountAddress: string, vaultAddress: string, chainId: SupportedChainId) {\n const { publishedUrl } = getGraphUrls(chainId, true);\n\n try {\n if (publishedUrl) {\n const deposits = await sendDepositsQueryRequest(\n publishedUrl,\n vaultAddress,\n vaultDepositsQuery(0, undefined, accountAddress),\n undefined,\n accountAddress,\n );\n\n return deposits;\n } else {\n throw new Error(`Published URL is invalid on chain ${chainId}`);\n }\n } catch (error) {\n throw new Error(`Request to published graph URL failed: ${error}`);\n }\n}\n\nexport async function getUserWithdraws(accountAddress: string, vaultAddress: string, chainId: SupportedChainId) {\n const { publishedUrl } = getGraphUrls(chainId, true);\n\n try {\n if (publishedUrl) {\n const withdraws = await sendWithdrawsQueryRequest(\n publishedUrl,\n vaultAddress,\n vaultWithdrawsQuery(0, undefined, accountAddress),\n undefined,\n accountAddress,\n );\n\n return withdraws;\n } else {\n throw new Error(`Published URL is invalid on chain ${chainId}`);\n }\n } catch (error) {\n throw new Error(`Request to published graph URL failed: ${error}`);\n }\n}\n","/* eslint-disable no-redeclare */\n/* eslint-disable import/prefer-default-export */\n/* eslint-disable import/no-cycle */\n\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { Fees, FeesInfo, TotalAmounts, TotalAmountsBN, VaultState, VaultTransactionEvent } from '../types';\nimport { getChainByProvider, validateVaultData } from './vault';\nimport { getTokenDecimals } from './_totalBalances';\nimport formatBigInt from '../utils/formatBigInt';\nimport { daysToMilliseconds } from '../utils/timestamps';\nimport { isTokenAllowed } from './deposit';\nimport getPrice from '../utils/getPrice';\nimport { getVaultTvl } from './priceFromPool';\nimport getGraphUrls from '../utils/getGraphUrls';\nimport { _getFeesCollectedEvents, _getRebalances } from './_vaultEvents';\nimport { getUserDeposits, getUserWithdraws } from './vaultEvents';\n\nfunction getCollectedTokenAmountBN(ind: 0 | 1, feesDataset: Fees[]): BigNumber {\n const amounts =\n ind === 0\n ? feesDataset.map((r) => BigNumber.from(r.feeAmount0))\n : feesDataset.map((r) => BigNumber.from(r.feeAmount1));\n const amountBN = amounts.reduce((total, curr) => total.add(curr), BigNumber.from(0));\n return amountBN;\n}\n\nexport function getTotalAmountsAtFeeCollectionEvent(\n objFees: VaultState,\n isVaultInverted: boolean,\n token0Decimals: number,\n token1Decimals: number,\n): [number, number] {\n const depositTokenDecimals = isVaultInverted ? token1Decimals : token0Decimals;\n const scarceTokenDecimals = isVaultInverted ? token0Decimals : token1Decimals;\n const price0 = !isVaultInverted\n ? 1\n : getPrice(isVaultInverted, BigNumber.from(objFees.sqrtPrice), depositTokenDecimals, scarceTokenDecimals, 15);\n const price1 = isVaultInverted\n ? 1\n : getPrice(isVaultInverted, BigNumber.from(objFees.sqrtPrice), depositTokenDecimals, scarceTokenDecimals, 15);\n const amount0 = Number(formatBigInt(BigNumber.from(objFees.totalAmount0), token0Decimals)) * price0;\n const amount1 = Number(formatBigInt(BigNumber.from(objFees.totalAmount1), token1Decimals)) * price1;\n return [amount0, amount1];\n}\n\nexport function getFeesAmountInBaseTokens(\n objFees: Fees,\n isVaultInverted: boolean,\n token0Decimals: number,\n token1Decimals: number,\n): number {\n const depositTokenDecimals = isVaultInverted ? token1Decimals : token0Decimals;\n const scarceTokenDecimals = isVaultInverted ? token0Decimals : token1Decimals;\n const price0 = !isVaultInverted\n ? 1\n : getPrice(isVaultInverted, BigNumber.from(objFees.sqrtPrice), depositTokenDecimals, scarceTokenDecimals, 15);\n const price1 = isVaultInverted\n ? 1\n : getPrice(isVaultInverted, BigNumber.from(objFees.sqrtPrice), depositTokenDecimals, scarceTokenDecimals, 15);\n const amount0 = Number(formatBigInt(BigNumber.from(objFees.feeAmount0), token0Decimals)) * price0;\n const amount1 = Number(formatBigInt(BigNumber.from(objFees.feeAmount1), token1Decimals)) * price1;\n return amount0 + amount1;\n}\n\nexport function getTotalFeesAmountInBaseTokens(\n feesDataset: Fees[],\n t0decimals: number,\n t1decimals: number,\n isInverted: boolean,\n): number {\n const amount = feesDataset.reduce(\n (total, curr) => total + getFeesAmountInBaseTokens(curr, isInverted, t0decimals, t1decimals),\n 0,\n );\n return amount;\n}\n\nexport async function getFeesCollected(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n days?: number,\n): Promise<TotalAmounts>;\n\nexport async function getFeesCollected(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n raw: true,\n days?: number,\n): Promise<TotalAmountsBN>;\n\nexport async function getFeesCollected(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n rawOrDays?: true | number,\n days?: number,\n): Promise<TotalAmounts | TotalAmountsBN> {\n const { chainId, vault } = await validateVaultData(vaultAddress, jsonProvider);\n getGraphUrls(chainId, true);\n\n const token0Decimals = await getTokenDecimals(vault.tokenA, jsonProvider, chainId);\n const token1Decimals = await getTokenDecimals(vault.tokenB, jsonProvider, chainId);\n\n const numOfDays = typeof rawOrDays === 'boolean' ? days : rawOrDays;\n const rebalances = await _getRebalances(vaultAddress, chainId, numOfDays);\n if (!rebalances) throw new Error(`Error getting vault rebalances on ${chainId} for ${vaultAddress}`);\n const collectedFees = await _getFeesCollectedEvents(vaultAddress, chainId, numOfDays);\n if (!collectedFees) throw new Error(`Error getting vault collected fees on ${chainId} for ${vaultAddress}`);\n\n const amount0BN = getCollectedTokenAmountBN(0, rebalances).add(getCollectedTokenAmountBN(0, collectedFees));\n const amount1BN = getCollectedTokenAmountBN(1, rebalances).add(getCollectedTokenAmountBN(1, collectedFees));\n\n const feeAmountsBN = {\n total0: amount0BN,\n total1: amount1BN,\n 0: amount0BN,\n 1: amount1BN,\n } as TotalAmountsBN;\n\n if (typeof rawOrDays !== 'boolean') {\n const feeAmounts = {\n total0: formatBigInt(feeAmountsBN.total0, token0Decimals),\n total1: formatBigInt(feeAmountsBN.total1, token1Decimals),\n 0: formatBigInt(feeAmountsBN.total0, token0Decimals),\n 1: formatBigInt(feeAmountsBN.total1, token1Decimals),\n } as TotalAmounts;\n return feeAmounts;\n }\n\n return feeAmountsBN;\n}\n\nexport async function getFeesCollectedInfo(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n forDays?: number[],\n): Promise<FeesInfo[]> {\n const { chainId, vault } = await validateVaultData(vaultAddress, jsonProvider);\n getGraphUrls(chainId, true);\n\n const token0Decimals = await getTokenDecimals(vault.tokenA, jsonProvider, chainId);\n const token1Decimals = await getTokenDecimals(vault.tokenB, jsonProvider, chainId);\n const isVaultInverted = await isTokenAllowed(1, vaultAddress, jsonProvider);\n\n const { tvl } = await getVaultTvl(vault, jsonProvider, isVaultInverted, token0Decimals, token1Decimals);\n\n const defaultArrayDays = [1, 7, 30];\n const arrayDays = forDays && forDays.length > 0 ? forDays : defaultArrayDays;\n\n const maxTimePeriod = Math.max(...arrayDays);\n\n const rebalances = await _getRebalances(vaultAddress, chainId, maxTimePeriod);\n if (!rebalances) throw new Error(`Error getting vault rebalances on ${chainId} for ${vaultAddress}`);\n const collectedFees = await _getFeesCollectedEvents(vaultAddress, chainId, maxTimePeriod);\n if (!collectedFees) throw new Error(`Error getting vault collected fees on ${chainId} for ${vaultAddress}`);\n\n const result = [] as FeesInfo[];\n\n arrayDays.forEach((dayPeriod) => {\n const arrRebalances = rebalances\n .slice()\n .filter((r) => Number(r.createdAtTimestamp) * 1000 > Date.now() - daysToMilliseconds(dayPeriod));\n const arrOtherFees = collectedFees\n .slice()\n .filter((r) => Number(r.createdAtTimestamp) * 1000 > Date.now() - daysToMilliseconds(dayPeriod));\n const amount0BN = getCollectedTokenAmountBN(0, arrRebalances).add(getCollectedTokenAmountBN(0, arrOtherFees));\n const amount1BN = getCollectedTokenAmountBN(1, arrRebalances).add(getCollectedTokenAmountBN(1, arrOtherFees));\n const totalFeesAmount =\n getTotalFeesAmountInBaseTokens(arrRebalances, token0Decimals, token1Decimals, isVaultInverted) +\n getTotalFeesAmountInBaseTokens(arrOtherFees, token0Decimals, token1Decimals, isVaultInverted);\n const pct = dayPeriod !== 0 && tvl !== 0 ? (((totalFeesAmount / dayPeriod) * 365) / tvl) * 100 : 0;\n\n const feesCollectedInfo = {\n timePeriod: dayPeriod,\n feeAmount0: formatBigInt(amount0BN, token0Decimals),\n feeAmount1: formatBigInt(amount1BN, token1Decimals),\n pctAPR: pct,\n };\n result.push(feesCollectedInfo);\n });\n\n return result;\n}\n\ninterface UserFees {\n totalUserFees0: BigNumber;\n totalUserFees1: BigNumber;\n sinceTimestamp: number | null;\n}\n\nexport async function getUserFeesCollected(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n) {\n const { chainId } = await getChainByProvider(jsonProvider);\n\n try {\n const [deposits, withdraws, rebalances, fees] = await Promise.all([\n getUserDeposits(accountAddress, vaultAddress, chainId),\n getUserWithdraws(accountAddress, vaultAddress, chainId),\n _getRebalances(vaultAddress, chainId),\n _getFeesCollectedEvents(vaultAddress, chainId),\n ]);\n\n const allEvents = [\n ...deposits.map((e) => ({ ...e, type: 'deposit' })),\n ...withdraws.map((e) => ({ ...e, type: 'withdraw' })),\n ...rebalances.map((e) => ({ ...e, type: 'rebalance' })),\n ...fees.map((e) => ({ ...e, type: 'collect' })),\n ].sort((a, b) => Number(a.createdAtTimestamp) - Number(b.createdAtTimestamp));\n\n let userShares = BigNumber.from(0);\n let activeDepositStart: number | null = null;\n\n let totalUserFees0 = BigNumber.from(0);\n let totalUserFees1 = BigNumber.from(0);\n\n const getUserPercent = (shares: BigNumber, totalSupply: BigNumber) =>\n shares.isZero() ? BigNumber.from(0) : shares.mul(BigNumber.from(1e6)).div(totalSupply);\n\n // eslint-disable-next-line no-restricted-syntax\n for (const event of allEvents) {\n switch (event.type) {\n case 'deposit': {\n userShares = userShares.add((event as VaultTransactionEvent).shares);\n if (activeDepositStart === null && userShares.gt(0)) {\n activeDepositStart = Number(event.createdAtTimestamp);\n }\n break;\n }\n\n case 'withdraw': {\n userShares = userShares.sub((event as VaultTransactionEvent).shares);\n if (userShares.lte(0)) {\n activeDepositStart = null;\n }\n break;\n }\n\n case 'rebalance':\n case 'collect': {\n if (activeDepositStart !== null && userShares.gt(0)) {\n const percent = getUserPercent(userShares, BigNumber.from(event.totalSupply));\n const collected0 = BigNumber.from((event as Fees).feeAmount0 ?? 0);\n const collected1 = BigNumber.from((event as Fees).feeAmount1 ?? 0);\n\n totalUserFees0 = totalUserFees0.add(collected0.mul(percent).div(1e6));\n totalUserFees1 = totalUserFees1.add(collected1.mul(percent).div(1e6));\n } else {\n totalUserFees0 = BigNumber.from(0);\n totalUserFees1 = BigNumber.from(0);\n }\n break;\n }\n\n default:\n break;\n }\n }\n\n const result: UserFees = {\n totalUserFees0,\n totalUserFees1,\n sinceTimestamp: activeDepositStart,\n };\n return result;\n } catch (error) {\n throw new Error(`Request failed: ${error}`);\n }\n}\n","export default function truncateToDecimals(num: number, decimals: number): string {\n const parts = num.toString().split('.');\n if (parts.length === 1 || decimals === 0) return parts[0];\n return `${parts[0]}.${parts[1].slice(0, decimals)}`;\n}\n","/* eslint-disable no-redeclare */\n/* eslint-disable import/prefer-default-export */\n\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { parseUnits } from '@ethersproject/units';\nimport { AverageDepositTokenRatio, DepositTokenRatio, VaultState, VaultTransactionEvent } from '../types';\n// eslint-disable-next-line import/no-cycle\nimport { validateVaultData } from './vault';\nimport { getTokenDecimals } from './_totalBalances';\nimport formatBigInt from '../utils/formatBigInt';\nimport { daysToMilliseconds } from '../utils/timestamps';\nimport { isTokenAllowed } from './deposit';\nimport getPrice from '../utils/getPrice';\nimport { getTotalAmountsAtFeeCollectionEvent } from './calculateFees';\nimport { getCurrentDtr } from './priceFromPool';\nimport { _getDeposits, _getFeesCollectedEvents, _getRebalances, _getWithdraws } from './_vaultEvents';\nimport truncateToDecimals from '../utils/truncateToDecimals';\n\nexport function getAmountsInDepositToken(\n sqrtPrice: BigNumber,\n amount0: BigNumber,\n amount1: BigNumber,\n token0Decimals: number,\n token1Decimals: number,\n depositToken: 0 | 1,\n): BigNumber {\n const isVaultInverted = depositToken === 1;\n\n const depositTokenDecimals = isVaultInverted ? token1Decimals : token0Decimals;\n const scarceTokenDecimals = isVaultInverted ? token0Decimals : token1Decimals;\n const price0 = !isVaultInverted\n ? 1\n : getPrice(isVaultInverted, BigNumber.from(sqrtPrice), depositTokenDecimals, scarceTokenDecimals, 15);\n const price1 = isVaultInverted\n ? 1\n : getPrice(isVaultInverted, BigNumber.from(sqrtPrice), depositTokenDecimals, scarceTokenDecimals, 15);\n\n const amountInDepositToken =\n Number(formatBigInt(amount0, token0Decimals)) * price0 + Number(formatBigInt(amount1, token1Decimals)) * price1;\n\n const amountStr = truncateToDecimals(amountInDepositToken, depositTokenDecimals);\n const amountInDepositTokenBN = parseUnits(amountStr, depositTokenDecimals);\n\n return amountInDepositTokenBN;\n}\n\n// total amounts at deposit or withdrawal in deposit tokens\nfunction getTotalAmountsAtTransactionEvent(\n objTransactionEvent: VaultTransactionEvent,\n isVaultInverted: boolean,\n token0Decimals: number,\n token1Decimals: number,\n beforeEvent: boolean,\n): [number, number] {\n const depositTokenDecimals = isVaultInverted ? token1Decimals : token0Decimals;\n const scarceTokenDecimals = isVaultInverted ? token0Decimals : token1Decimals;\n const price0 = !isVaultInverted\n ? 1\n : getPrice(\n isVaultInverted,\n BigNumber.from(objTransactionEvent.sqrtPrice),\n depositTokenDecimals,\n scarceTokenDecimals,\n 15,\n );\n const price1 = isVaultInverted\n ? 1\n : getPrice(\n isVaultInverted,\n BigNumber.from(objTransactionEvent.sqrtPrice),\n depositTokenDecimals,\n scarceTokenDecimals,\n 15,\n );\n const amount0 = beforeEvent\n ? Number(formatBigInt(BigNumber.from(objTransactionEvent.totalAmount0BeforeEvent), token0Decimals)) * price0\n : Number(formatBigInt(BigNumber.from(objTransactionEvent.totalAmount0), token0Decimals)) * price0;\n const amount1 = beforeEvent\n ? Number(formatBigInt(BigNumber.from(objTransactionEvent.totalAmount1BeforeEvent), token1Decimals)) * price1\n : Number(formatBigInt(BigNumber.from(objTransactionEvent.totalAmount1), token1Decimals)) * price1;\n return [amount0, amount1];\n}\n\nexport function getDtrAtTransactionEvent(\n objTransactionEvent: VaultTransactionEvent,\n isVaultInverted: boolean,\n token0Decimals: number,\n token1Decimals: number,\n beforeEvent: boolean = false,\n): DepositTokenRatio {\n const timestamp = objTransactionEvent.createdAtTimestamp;\n const totalAmounts = getTotalAmountsAtTransactionEvent(\n objTransactionEvent,\n isVaultInverted,\n token0Decimals,\n token1Decimals,\n beforeEvent,\n );\n const dtr = isVaultInverted\n ? (totalAmounts[1] / (totalAmounts[0] + totalAmounts[1])) * 100\n : (totalAmounts[0] / (totalAmounts[0] + totalAmounts[1])) * 100;\n return { atTimestamp: timestamp, percent: dtr };\n}\n\nexport function getDtrAtFeeCollectionEvent(\n objFeeCollectionEvent: VaultState,\n isVaultInverted: boolean,\n token0Decimals: number,\n token1Decimals: number,\n): DepositTokenRatio {\n const timestamp = objFeeCollectionEvent.createdAtTimestamp;\n const totalAmounts = getTotalAmountsAtFeeCollectionEvent(\n objFeeCollectionEvent,\n isVaultInverted,\n token0Decimals,\n token1Decimals,\n );\n const dtr = isVaultInverted\n ? (totalAmounts[1] / (totalAmounts[0] + totalAmounts[1])) * 100\n : (totalAmounts[0] / (totalAmounts[0] + totalAmounts[1])) * 100;\n return { atTimestamp: timestamp, percent: dtr };\n}\n\n// time Interval in days\nexport async function getAllDtrsForTimeInterval(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n timeInterval: number,\n): Promise<DepositTokenRatio[]> {\n const { chainId, vault } = await validateVaultData(vaultAddress, jsonProvider);\n const token0Decimals = await getTokenDecimals(vault.tokenA, jsonProvider, chainId);\n const token1Decimals = await getTokenDecimals(vault.tokenB, jsonProvider, chainId);\n const isVaultInverted = await isTokenAllowed(1, vaultAddress, jsonProvider);\n\n const rebalances = await _getRebalances(vaultAddress, chainId, timeInterval);\n if (!rebalances) throw new Error(`Error getting vault rebalances on ${chainId} for ${vaultAddress}`);\n const collectedFees = await _getFeesCollectedEvents(vaultAddress, chainId, timeInterval);\n if (!collectedFees) throw new Error(`Error getting vault collected fees on ${chainId} for ${vaultAddress}`);\n const deposits = await _getDeposits(vaultAddress, chainId, timeInterval);\n if (!deposits) throw new Error(`Error getting vault deposits on ${chainId} for ${vaultAddress}`);\n const withdraws = await _getWithdraws(vaultAddress, chainId, timeInterval);\n if (!withdraws) throw new Error(`Error getting vault withdraws on ${chainId} for ${vaultAddress}`);\n\n const arrRebalances = rebalances\n .slice()\n .filter((r) => Number(r.createdAtTimestamp) * 1000 > Date.now() - daysToMilliseconds(timeInterval))\n .map((e) => getDtrAtFeeCollectionEvent(e, isVaultInverted, token0Decimals, token1Decimals));\n const arrOtherFees = collectedFees\n .slice()\n .filter((r) => Number(r.createdAtTimestamp) * 1000 > Date.now() - daysToMilliseconds(timeInterval))\n .map((e) => getDtrAtFeeCollectionEvent(e, isVaultInverted, token0Decimals, token1Decimals));\n const arrDeposits = deposits\n .slice()\n .filter((r) => Number(r.createdAtTimestamp) * 1000 > Date.now() - daysToMilliseconds(timeInterval))\n .map((e) => getDtrAtTransactionEvent(e, isVaultInverted, token0Decimals, token1Decimals));\n const arrWithdraws = withdraws\n .slice()\n .filter((r) => Number(r.createdAtTimestamp) * 1000 > Date.now() - daysToMilliseconds(timeInterval))\n .map((e) => getDtrAtTransactionEvent(e, isVaultInverted, token0Decimals, token1Decimals));\n const currentDtr = {\n atTimestamp: Math.floor(Date.now() / 1000).toString(),\n percent: await getCurrentDtr(vaultAddress, jsonProvider, isVaultInverted, token0Decimals, token1Decimals),\n } as DepositTokenRatio;\n\n const result = [...arrDeposits, ...arrWithdraws, ...arrRebalances, ...arrOtherFees, currentDtr].sort(\n (a, b) => Number(b.atTimestamp) - Number(a.atTimestamp), // recent events first, starting with current value\n );\n\n return result;\n}\n\nexport function getAverageDtr(allDtrs: DepositTokenRatio[]): number {\n if (allDtrs.length === 0) {\n return 0;\n }\n if (allDtrs.length === 1) {\n return allDtrs[0].percent; // current value\n }\n let dtrsSum = 0;\n for (let i = 0; i < allDtrs.length - 1; i += 1) {\n dtrsSum +=\n ((allDtrs[i].percent + allDtrs[i + 1].percent) / 2) *\n (Number(allDtrs[i + 1].atTimestamp) - Number(allDtrs[i].atTimestamp));\n }\n return dtrsSum / (Number(allDtrs[allDtrs.length - 1].atTimestamp) - Number(allDtrs[0].atTimestamp));\n}\n\n// timeInterval in days\nexport async function getAverageDepositTokenRatios(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n timeIntervals: number[] = [1, 7, 30],\n): Promise<AverageDepositTokenRatio[]> {\n let forTimeIntervals = timeIntervals;\n if (timeIntervals.length === 0) {\n forTimeIntervals = [0];\n }\n const maxTimeInterval = Math.max(...forTimeIntervals);\n const allDtrs = await getAllDtrsForTimeInterval(vaultAddress, jsonProvider, maxTimeInterval);\n const result = [] as AverageDepositTokenRatio[];\n forTimeIntervals.forEach((interval) => {\n const dtrsForTimeInterval =\n interval === 0\n ? [allDtrs[0]]\n : allDtrs.filter((elem) => Number(elem.atTimestamp) * 1000 >= Date.now() - daysToMilliseconds(interval));\n const averageDtr = getAverageDtr(dtrsForTimeInterval);\n result.push({ timePeriod: interval, percent: averageDtr });\n });\n return result;\n}\n","import { JsonRpcProvider } from '@ethersproject/providers';\nimport { BigNumber } from 'ethers';\nimport { AlgebraVault, PriceChange, TotalAmountsBN, VaultApr, VaultState, algebraVaultDecimals } from '../types';\n// eslint-disable-next-line import/no-cycle\nimport { validateVaultData } from './vault';\nimport { getTokenDecimals } from './_totalBalances';\nimport { getCurrLpPrice, getVaultTvl } from './priceFromPool';\nimport { millisecondsToDays } from '../utils/timestamps';\nimport getPrice from '../utils/getPrice';\nimport formatBigInt from '../utils/formatBigInt';\nimport getGraphUrls from '../utils/getGraphUrls';\n// eslint-disable-next-line import/no-cycle\nimport { _getAllVaultEvents, getVaultStateAt } from './_vaultEvents';\nimport cache from '../utils/cache';\n\nexport function getLpPriceAt(\n vaultEvents: VaultState[],\n daysAgo: number,\n isVaultInverted: boolean,\n token0decimals: number,\n token1decimals: number,\n): PriceChange | null {\n const e = getVaultStateAt(vaultEvents, daysAgo);\n if (!e) {\n return null;\n } else {\n const depositTokenDecimals = isVaultInverted ? token1decimals : token0decimals;\n const scarceTokenDecimals = isVaultInverted ? token0decimals : token1decimals;\n\n const { totalAmount0, totalAmount1, sqrtPrice } = e;\n const formattedTotalAmount0 = formatBigInt(totalAmount0, token0decimals);\n const formattedTotalAmount1 = formatBigInt(totalAmount1, token1decimals);\n const price = getPrice(isVaultInverted, BigNumber.from(sqrtPrice), depositTokenDecimals, scarceTokenDecimals, 15);\n const tvl = !isVaultInverted\n ? Number(formattedTotalAmount0) + Number(formattedTotalAmount1) * price\n : Number(formattedTotalAmount1) + Number(formattedTotalAmount0) * price;\n const totalSupply = Number(formatBigInt(e.totalSupply, algebraVaultDecimals));\n const days = millisecondsToDays(Date.now() - Number(e.createdAtTimestamp) * 1000);\n if (totalSupply === 0) {\n return null;\n }\n return { timeInterval: days, priceChange: tvl / totalSupply };\n }\n}\n\nexport async function getLpApr(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n vault: AlgebraVault,\n token0Decimals: number,\n token1Decimals: number,\n // timeIntervals?: number[],\n): Promise<{ aprs: (VaultApr | null)[]; vault: AlgebraVault; tvl: number; totalAmounts: TotalAmountsBN }> {\n const key = `lpApr-${vaultAddress}`;\n const cachedData = cache.get(key);\n if (cachedData) {\n return cachedData as { aprs: (VaultApr | null)[]; vault: AlgebraVault; tvl: number; totalAmounts: TotalAmountsBN };\n }\n const ttl = 30 * 60 * 1000;\n\n const isInv = vault.allowTokenB;\n\n const { tvl, totalAmounts } = await getVaultTvl(vault, jsonProvider, isInv, token0Decimals, token1Decimals);\n // const totalSupply = await _getTotalSupply(vault.id, jsonProvider);\n\n // if (Number(totalSupply) === 0) {\n // throw new Error(`Could not get LP price. Vault total supply is 0 for vault ${vault.id} on chain ${chainId}`);\n // }\n // const currLpPrice = tvl / Number(totalSupply);\n\n // const arrDays = timeIntervals && timeIntervals.length > 0 ? timeIntervals : [1, 7, 30];\n // const maxDays = Math.max(...arrDays) + 30;\n\n const vaultAprs = [] as VaultApr[];\n // const vaultEvents = await _getAllVaultEvents(vaultAddress, chainId, dex, maxDays);\n\n // arrDays.forEach((d) => {\n // const objLpPrice = getLpPriceAt(vaultEvents, d, isInv, decimals0, decimals1);\n // if (!objLpPrice?.priceChange) {\n // vaultAprs.push({ timeInterval: d, apr: null });\n // } else {\n // const days = objLpPrice.timeInterval;\n // const apr = ((currLpPrice - objLpPrice.priceChange) / ((objLpPrice.priceChange * days) / 365)) * 100;\n // vaultAprs.push({ timeInterval: d, apr });\n // }\n // });\n\n const result = {\n aprs: vaultAprs,\n vault,\n tvl,\n totalAmounts,\n };\n\n cache.set(key, result, ttl);\n return result;\n}\n\nexport async function getLpPriceChange(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n timeIntervals?: number[],\n): Promise<(PriceChange | null)[]> {\n const key = `lpPriceChange-${vaultAddress}`;\n const cachedData = cache.get(key);\n if (cachedData) {\n return cachedData as (PriceChange | null)[];\n }\n const ttl = 30 * 60 * 1000;\n\n const { chainId, vault } = await validateVaultData(vaultAddress, jsonProvider);\n getGraphUrls(chainId, true);\n\n const decimals0 = await getTokenDecimals(vault.tokenA, jsonProvider, chainId);\n const decimals1 = await getTokenDecimals(vault.tokenB, jsonProvider, chainId);\n const isInv = vault.allowTokenB;\n\n const currLpPrice = await getCurrLpPrice(vault, jsonProvider, chainId, isInv, decimals0, decimals1);\n\n const arrDays = timeIntervals && timeIntervals.length > 0 ? timeIntervals : [1, 7, 30];\n const maxDays = Math.max(...arrDays) + 30;\n\n const result = [] as PriceChange[];\n const vaultEvents = await _getAllVaultEvents(vaultAddress, chainId, maxDays);\n arrDays.forEach((d) => {\n const objLpPrice = getLpPriceAt(vaultEvents, d, isInv, decimals0, decimals1);\n const prevLpPrice = objLpPrice?.priceChange;\n if (!prevLpPrice || prevLpPrice === 0) {\n result.push({ timeInterval: d, priceChange: null });\n } else {\n result.push({ timeInterval: d, priceChange: ((currLpPrice - prevLpPrice) / prevLpPrice) * 100 });\n }\n });\n cache.set(key, result, ttl);\n return result;\n}\n","/* eslint-disable import/prefer-default-export */\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport {\n DepositTokenRatio,\n Fees,\n TotalAmounts,\n VaultMetrics,\n VaultTransactionEvent,\n algebraVaultDecimals,\n} from '../types';\n// eslint-disable-next-line import/no-cycle\nimport { validateVaultData } from './vault';\nimport { getTokenDecimals } from './_totalBalances';\nimport { getCurrentDtr } from './priceFromPool';\nimport { daysToMilliseconds } from '../utils/timestamps';\nimport getPrice from '../utils/getPrice';\nimport { getAlgebraPoolContract, getAlgebraVaultContract } from '../contracts';\nimport formatBigInt from '../utils/formatBigInt';\nimport { getAverageDtr, getDtrAtFeeCollectionEvent, getDtrAtTransactionEvent } from './calculateDtr';\nimport { getTotalFeesAmountInBaseTokens } from './calculateFees';\nimport { getLpPriceAt } from './calculateApr';\nimport { _getDeposits, _getFeesCollectedEvents, _getRebalances, _getWithdraws } from './_vaultEvents';\n\nexport async function getVaultMetrics(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n timeIntervals?: number[],\n): Promise<(VaultMetrics | null)[]> {\n const { chainId, vault } = await validateVaultData(vaultAddress, jsonProvider);\n\n const decimals0 = await getTokenDecimals(vault.tokenA, jsonProvider, chainId);\n const decimals1 = await getTokenDecimals(vault.tokenB, jsonProvider, chainId);\n const isInv = vault.allowTokenB;\n const depositTokenDecimals = isInv ? decimals1 : decimals0;\n const scarceTokenDecimals = isInv ? decimals0 : decimals1;\n const vaultContract = getAlgebraVaultContract(vaultAddress, jsonProvider);\n\n // to remove/rewrite\n const arrDays = timeIntervals && timeIntervals.length > 0 ? timeIntervals : [1, 7, 30];\n const maxTimeInterval = Math.max(...arrDays);\n // const allDtrs = await getAllDtrsForTimeInterval(vaultAddress, jsonProvider, maxTimeInterval);\n\n let currLpPrice = 0;\n let currTvl = 0;\n try {\n const totalAmountsBN = await vaultContract.getTotalAmounts();\n const totalAmounts = {\n total0: formatBigInt(totalAmountsBN.total0, decimals0),\n total1: formatBigInt(totalAmountsBN.total1, decimals1),\n 0: formatBigInt(totalAmountsBN.total0, decimals0),\n 1: formatBigInt(totalAmountsBN.total1, decimals1),\n } as TotalAmounts;\n\n const poolAddress: string = await vaultContract.pool();\n\n const poolContract = getAlgebraPoolContract(poolAddress, jsonProvider);\n const sqrtPrice = (await poolContract.globalState()).price;\n\n const price = getPrice(isInv, sqrtPrice, depositTokenDecimals, scarceTokenDecimals, 15);\n currTvl = !isInv\n ? Number(totalAmounts.total0) + Number(totalAmounts.total1) * price\n : Number(totalAmounts.total1) + Number(totalAmounts.total0) * price;\n\n const totalSupplyBN = await vaultContract.totalSupply();\n const totalSupply = formatBigInt(totalSupplyBN, algebraVaultDecimals);\n\n if (Number(totalSupply) === 0) {\n throw new Error(`Could not get LP price. Vault total supply is 0 for vault ${vaultAddress} on chain ${chainId}`);\n }\n\n currLpPrice = currTvl / Number(totalSupply);\n } catch (e) {\n console.error(`Could not get LP price from vault ${vaultAddress} `);\n throw e;\n }\n\n const rebalances = (await _getRebalances(vaultAddress, chainId)) as Fees[];\n if (!rebalances) throw new Error(`Error getting vault rebalances on ${chainId} for ${vaultAddress}`);\n const collectedFees = (await _getFeesCollectedEvents(vaultAddress, chainId)) as Fees[];\n if (!collectedFees) throw new Error(`Error getting vault collected fees on ${chainId} for ${vaultAddress}`);\n const deposits = (await _getDeposits(vaultAddress, chainId)) as VaultTransactionEvent[];\n if (!deposits) throw new Error(`Error getting vault deposits on ${chainId} for ${vaultAddress}`);\n const withdraws = (await _getWithdraws(vaultAddress, chainId)) as VaultTransactionEvent[];\n if (!withdraws) throw new Error(`Error getting vault withdraws on ${chainId} for ${vaultAddress}`);\n\n const vaultEvents = [...deposits, ...withdraws, ...rebalances, ...collectedFees].sort(\n (a, b) => Number(b.createdAtTimestamp) - Number(a.createdAtTimestamp), // recent events first\n );\n\n const arrRebalances = rebalances\n .slice()\n .filter((r) => Number(r.createdAtTimestamp) * 1000 > Date.now() - daysToMilliseconds(maxTimeInterval))\n .map((e) => getDtrAtFeeCollectionEvent(e, isInv, decimals0, decimals1));\n const arrOtherFees = collectedFees\n .slice()\n .filter((r) => Number(r.createdAtTimestamp) * 1000 > Date.now() - daysToMilliseconds(maxTimeInterval))\n .map((e) => getDtrAtFeeCollectionEvent(e, isInv, decimals0, decimals1));\n const arrDeposits = deposits\n .slice()\n .filter((r) => Number(r.createdAtTimestamp) * 1000 > Date.now() - daysToMilliseconds(maxTimeInterval))\n .map((e) => getDtrAtTransactionEvent(e, isInv, decimals0, decimals1));\n const arrWithdraws = withdraws\n .slice()\n .filter((r) => Number(r.createdAtTimestamp) * 1000 > Date.now() - daysToMilliseconds(maxTimeInterval))\n .map((e) => getDtrAtTransactionEvent(e, isInv, decimals0, decimals1));\n const currentDtr = {\n atTimestamp: Math.floor(Date.now() / 1000).toString(),\n percent: await getCurrentDtr(vaultAddress, jsonProvider, isInv, decimals0, decimals1),\n } as DepositTokenRatio;\n\n const allDtrs = [...arrDeposits, ...arrWithdraws, ...arrRebalances, ...arrOtherFees, currentDtr].sort(\n (a, b) => Number(b.atTimestamp) - Number(a.atTimestamp), // recent events first, starting with current value\n );\n\n const result = [] as VaultMetrics[];\n\n arrDays.forEach((d) => {\n const objLpPrice = getLpPriceAt(vaultEvents, d, isInv, decimals0, decimals1);\n const prevLpPrice = objLpPrice?.priceChange;\n const priceChange = !prevLpPrice || prevLpPrice === 0 ? null : ((currLpPrice - prevLpPrice) / prevLpPrice) * 100;\n\n const lpApr = !prevLpPrice\n ? null\n : ((currLpPrice - prevLpPrice) / ((prevLpPrice * objLpPrice.timeInterval) / 365)) * 100;\n\n const dtrsForTimeInterval = allDtrs.filter(\n (elem) => Number(elem.atTimestamp) * 1000 >= Date.now() - daysToMilliseconds(d),\n );\n const averageDtr = getAverageDtr(dtrsForTimeInterval);\n\n const filteredRebalances = rebalances\n .slice()\n .filter((r) => Number(r.createdAtTimestamp) * 1000 > Date.now() - daysToMilliseconds(d));\n const filteredFees = collectedFees\n .slice()\n .filter((r) => Number(r.createdAtTimestamp) * 1000 > Date.now() - daysToMilliseconds(d));\n const totalFeesAmount =\n getTotalFeesAmountInBaseTokens(filteredRebalances, decimals0, decimals1, isInv) +\n getTotalFeesAmountInBaseTokens(filteredFees, decimals0, decimals1, isInv);\n const feeApr = d !== 0 && currTvl !== 0 ? (((totalFeesAmount / d) * 365) / currTvl) * 100 : 0;\n\n result.push({\n timeInterval: d,\n lpPriceChange: priceChange,\n lpApr,\n avgDtr: averageDtr,\n feeApr,\n });\n });\n return result;\n}\n","/* eslint-disable no-redeclare */\n/* eslint-disable import/prefer-default-export */\n\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { DepositTokenRatio, AlgebraVault, VaultState, VaultTransactionEvent } from '../types';\n// eslint-disable-next-line import/no-cycle\nimport { validateVaultData } from './vault';\nimport { getTokenDecimals } from './_totalBalances';\nimport formatBigInt from '../utils/formatBigInt';\nimport { daysToMilliseconds } from '../utils/timestamps';\nimport getPrice from '../utils/getPrice';\nimport { getFeesAmountInBaseTokens, getTotalAmountsAtFeeCollectionEvent } from './calculateFees';\nimport { getCurrLpPrice, getCurrPrice, getCurrentDtr, getVaultTvl } from './priceFromPool';\nimport { _getDeposits, _getFeesCollectedEvents, _getRebalances, _getWithdraws } from './_vaultEvents';\nimport { getDtrAtFeeCollectionEvent, getDtrAtTransactionEvent } from './calculateDtr';\n\nexport type VaultEvent = {\n atTimestamp: string;\n dtr: number;\n tvl: number;\n feeAmount: number;\n lpPrice: number;\n poolPrice: number;\n};\n\nfunction formatVaultEvent(\n dtr: DepositTokenRatio,\n tvl: number,\n fee: number,\n lpPrice: number,\n poolPrice: number,\n): VaultEvent {\n return {\n atTimestamp: dtr.atTimestamp,\n dtr: dtr.percent,\n tvl,\n feeAmount: fee,\n lpPrice,\n poolPrice,\n };\n}\n\n// get price from the pool/vault\nfunction getPoolPriceAtTransactionEvent(\n objTransactionEvent: VaultState,\n isVaultInverted: boolean,\n token0Decimals: number,\n token1Decimals: number,\n): number {\n const depositTokenDecimals = isVaultInverted ? token1Decimals : token0Decimals;\n const scarceTokenDecimals = isVaultInverted ? token0Decimals : token1Decimals;\n const price = getPrice(\n isVaultInverted,\n BigNumber.from(objTransactionEvent.sqrtPrice),\n depositTokenDecimals,\n scarceTokenDecimals,\n 15,\n );\n return price;\n}\n\n// total amounts at deposit or withdrawal in deposit tokens\nfunction getTotalAmountsAtTransactionEvent(\n objTransactionEvent: VaultTransactionEvent,\n isVaultInverted: boolean,\n token0Decimals: number,\n token1Decimals: number,\n beforeEvent: boolean,\n): [number, number] {\n const depositTokenDecimals = isVaultInverted ? token1Decimals : token0Decimals;\n const scarceTokenDecimals = isVaultInverted ? token0Decimals : token1Decimals;\n const price0 = !isVaultInverted\n ? 1\n : getPrice(\n isVaultInverted,\n BigNumber.from(objTransactionEvent.sqrtPrice),\n depositTokenDecimals,\n scarceTokenDecimals,\n 15,\n );\n const price1 = isVaultInverted\n ? 1\n : getPrice(\n isVaultInverted,\n BigNumber.from(objTransactionEvent.sqrtPrice),\n depositTokenDecimals,\n scarceTokenDecimals,\n 15,\n );\n const amount0 = beforeEvent\n ? Number(formatBigInt(BigNumber.from(objTransactionEvent.totalAmount0BeforeEvent), token0Decimals)) * price0\n : Number(formatBigInt(BigNumber.from(objTransactionEvent.totalAmount0), token0Decimals)) * price0;\n const amount1 = beforeEvent\n ? Number(formatBigInt(BigNumber.from(objTransactionEvent.totalAmount1BeforeEvent), token1Decimals)) * price1\n : Number(formatBigInt(BigNumber.from(objTransactionEvent.totalAmount1), token1Decimals)) * price1;\n return [amount0, amount1];\n}\n\nexport function getTvlAtTransactionEvent(\n objTransactionEvent: VaultTransactionEvent,\n vault: AlgebraVault,\n token0decimals: number,\n token1decimals: number,\n): number {\n const isVaultInverted = vault.allowTokenB;\n const totalAmounts = getTotalAmountsAtTransactionEvent(\n objTransactionEvent,\n isVaultInverted,\n token0decimals,\n token1decimals,\n false,\n );\n const tvl = totalAmounts[0] + totalAmounts[1];\n\n return tvl;\n}\n\nexport function getTvlAtFeeCollectionEvent(\n objFeeCollectionEvent: VaultState,\n vault: AlgebraVault,\n token0decimals: number,\n token1decimals: number,\n): number {\n const isVaultInverted = vault.allowTokenB;\n const totalAmounts = getTotalAmountsAtFeeCollectionEvent(\n objFeeCollectionEvent,\n isVaultInverted,\n token0decimals,\n token1decimals,\n );\n const tvl = totalAmounts[0] + totalAmounts[1];\n return tvl;\n}\n\nfunction getLpPriceAtFeeCollectionEvent(\n objTransactionEvent: VaultState,\n vault: AlgebraVault,\n token0decimals: number,\n token1decimals: number,\n): number {\n const tvl = getTvlAtFeeCollectionEvent(objTransactionEvent, vault, token0decimals, token1decimals);\n const totalSupply = Number(formatBigInt(BigNumber.from(objTransactionEvent.totalSupply), 18));\n return tvl / totalSupply;\n}\n\nfunction getLpPriceAtTransactionEvent(\n objTransactionEvent: VaultTransactionEvent,\n vault: AlgebraVault,\n token0decimals: number,\n token1decimals: number,\n): number {\n const tvl = getTvlAtTransactionEvent(objTransactionEvent, vault, token0decimals, token1decimals);\n const totalSupply = Number(formatBigInt(BigNumber.from(objTransactionEvent.totalSupply), 18));\n return tvl / totalSupply;\n}\n\n// time Interval in days\nexport async function getVaultEventsForTimeInterval(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n timeInterval: number,\n): Promise<VaultEvent[]> {\n const { chainId, vault } = await validateVaultData(vaultAddress, jsonProvider);\n const token0Decimals = await getTokenDecimals(vault.tokenA, jsonProvider, chainId);\n const token1Decimals = await getTokenDecimals(vault.tokenB, jsonProvider, chainId);\n const isVaultInverted = vault.allowTokenB;\n\n const rebalances = await _getRebalances(vaultAddress, chainId, timeInterval);\n if (!rebalances) throw new Error(`Error getting vault rebalances on ${chainId} for ${vaultAddress}`);\n const collectedFees = await _getFeesCollectedEvents(vaultAddress, chainId, timeInterval);\n if (!collectedFees) throw new Error(`Error getting vault collected fees on ${chainId} for ${vaultAddress}`);\n const deposits = await _getDeposits(vaultAddress, chainId, timeInterval);\n if (!deposits) throw new Error(`Error getting vault deposits on ${chainId} for ${vaultAddress}`);\n const withdraws = await _getWithdraws(vaultAddress, chainId, timeInterval);\n if (!withdraws) throw new Error(`Error getting vault withdraws on ${chainId} for ${vaultAddress}`);\n\n const arrRebalances = rebalances\n .slice()\n .filter((r) => Number(r.createdAtTimestamp) * 1000 > Date.now() - daysToMilliseconds(timeInterval))\n .map((e) =>\n formatVaultEvent(\n getDtrAtFeeCollectionEvent(e, vault.allowTokenB, token0Decimals, token1Decimals),\n getTvlAtFeeCollectionEvent(e, vault, token0Decimals, token1Decimals),\n getFeesAmountInBaseTokens(e, vault.allowTokenB, token0Decimals, token1Decimals),\n getLpPriceAtFeeCollectionEvent(e, vault, token0Decimals, token1Decimals),\n getPoolPriceAtTransactionEvent(e, isVaultInverted, token0Decimals, token1Decimals),\n ),\n );\n const arrOtherFees = collectedFees\n .slice()\n .filter((r) => Number(r.createdAtTimestamp) * 1000 > Date.now() - daysToMilliseconds(timeInterval))\n .map((e) =>\n formatVaultEvent(\n getDtrAtFeeCollectionEvent(e, vault.allowTokenB, token0Decimals, token1Decimals),\n getTvlAtFeeCollectionEvent(e, vault, token0Decimals, token1Decimals),\n getFeesAmountInBaseTokens(e, vault.allowTokenB, token0Decimals, token1Decimals),\n getLpPriceAtFeeCollectionEvent(e, vault, token0Decimals, token1Decimals),\n getPoolPriceAtTransactionEvent(e, isVaultInverted, token0Decimals, token1Decimals),\n ),\n );\n const arrDeposits = deposits\n .slice()\n .filter((r) => Number(r.createdAtTimestamp) * 1000 > Date.now() - daysToMilliseconds(timeInterval))\n .map((e) =>\n formatVaultEvent(\n getDtrAtTransactionEvent(e, vault.allowTokenB, token0Decimals, token1Decimals),\n getTvlAtTransactionEvent(e, vault, token0Decimals, token1Decimals),\n 0,\n getLpPriceAtTransactionEvent(e, vault, token0Decimals, token1Decimals),\n getPoolPriceAtTransactionEvent(e, isVaultInverted, token0Decimals, token1Decimals),\n ),\n );\n const arrWithdraws = withdraws\n .slice()\n .filter((r) => Number(r.createdAtTimestamp) * 1000 > Date.now() - daysToMilliseconds(timeInterval))\n .map((e) =>\n formatVaultEvent(\n getDtrAtTransactionEvent(e, vault.allowTokenB, token0Decimals, token1Decimals),\n getTvlAtTransactionEvent(e, vault, token0Decimals, token1Decimals),\n 0,\n getLpPriceAtTransactionEvent(e, vault, token0Decimals, token1Decimals),\n getPoolPriceAtTransactionEvent(e, isVaultInverted, token0Decimals, token1Decimals),\n ),\n );\n const currentVaultEvent = {\n atTimestamp: Math.floor(Date.now() / 1000).toString(),\n dtr: await getCurrentDtr(vaultAddress, jsonProvider, isVaultInverted, token0Decimals, token1Decimals),\n tvl: (await getVaultTvl(vault, jsonProvider, isVaultInverted, token0Decimals, token1Decimals)).tvl,\n feeAmount: 0,\n lpPrice: await getCurrLpPrice(vault, jsonProvider, chainId, isVaultInverted, token0Decimals, token1Decimals),\n poolPrice: await getCurrPrice(vault, jsonProvider, isVaultInverted, token0Decimals, token1Decimals),\n } as VaultEvent;\n\n const result = [...arrDeposits, ...arrWithdraws, ...arrRebalances, ...arrOtherFees, currentVaultEvent].sort(\n (a, b) => Number(b.atTimestamp) - Number(a.atTimestamp), // recent events first, starting with current value\n );\n\n return result;\n}\n","// eslint-disable-next-line import/no-unresolved\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport univ3pricesImport from '@thanpolas/univ3prices';\n// eslint-disable-next-line import/no-cycle\nimport { validateVaultData } from './vault';\nimport { getAlgebraVaultContract } from '../contracts';\nimport { getTokenDecimals } from './_totalBalances';\nimport formatBigInt from '../utils/formatBigInt';\n\nconst univ3prices = (univ3pricesImport as unknown as { default?: any })?.default ?? univ3pricesImport;\n\nexport type VaultPositionsInfo = {\n currentTick: number;\n currentPrice: number;\n positions: {\n tickLower: number;\n tickUpper: number;\n priceLower: number;\n priceUpper: number;\n liquidity: string;\n amountToken0: string;\n amountToken1: string;\n positionTvl: number;\n }[];\n};\n\n// get price at tick in deposit tokens\nfunction getPriceInDepositToken(isVaultInverted: boolean, decimals: [number, number], tick: number): number {\n // Mirror utils/getPrice.ts behavior: swap decimals when inverted and also set reverse.\n const decimalArray: [number, number] = isVaultInverted ? [decimals[1], decimals[0]] : decimals;\n const priceStr: string = univ3prices\n .tickPrice(decimalArray, tick)\n .toSignificant({ reverse: isVaultInverted, decimalPlaces: 15 });\n const priceNum = Number(priceStr);\n return Number.isFinite(priceNum) && priceNum > 0 ? priceNum : 0;\n}\n\nexport async function getVaultPositions(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n decimals0?: number,\n decimals1?: number,\n): Promise<VaultPositionsInfo> {\n const { vault } = await validateVaultData(vaultAddress, jsonProvider);\n const tokenDecimals = [decimals0, decimals1] as [number, number];\n const isInv = vault.allowTokenB;\n const vaultContract = getAlgebraVaultContract(vaultAddress, jsonProvider);\n try {\n const currentTick = await vaultContract.currentTick();\n const currentPrice = getPriceInDepositToken(isInv, tokenDecimals, currentTick);\n const [baseRange, limitRange, basePosition, limitPosition] = await Promise.all([\n vaultContract.baseRange(),\n vaultContract.limitRange(),\n vaultContract.getBasePosition(),\n vaultContract.getLimitPosition(),\n ]);\n let priceAtBaseLower = 0;\n let priceAtBaseUpper = 0;\n let basePositionTvl = 0;\n if (basePosition.liquidity.gt('0')) {\n priceAtBaseLower = getPriceInDepositToken(isInv, tokenDecimals, baseRange.lower);\n priceAtBaseUpper = getPriceInDepositToken(isInv, tokenDecimals, baseRange.upper);\n basePositionTvl = !isInv\n ? Number(formatBigInt(basePosition.amount0, decimals0)) +\n Number(formatBigInt(basePosition.amount1, decimals1)) * currentPrice\n : Number(formatBigInt(basePosition.amount1, decimals1)) +\n Number(formatBigInt(basePosition.amount0, decimals0)) * currentPrice;\n }\n let priceAtLimitLower = 0;\n let priceAtLimitUpper = 0;\n let limitPositionTvl = 0;\n if (limitPosition.liquidity.gt('0')) {\n priceAtLimitLower = getPriceInDepositToken(isInv, tokenDecimals, limitRange.lower);\n priceAtLimitUpper = getPriceInDepositToken(isInv, tokenDecimals, limitRange.upper);\n limitPositionTvl = !isInv\n ? Number(formatBigInt(limitPosition.amount0, decimals0)) +\n Number(formatBigInt(limitPosition.amount1, decimals1)) * currentPrice\n : Number(formatBigInt(limitPosition.amount1, decimals1)) +\n Number(formatBigInt(limitPosition.amount0, decimals0)) * currentPrice;\n }\n\n return {\n currentTick,\n currentPrice,\n positions: [\n {\n tickLower: baseRange.lower,\n tickUpper: baseRange.upper,\n priceLower: priceAtBaseLower,\n priceUpper: priceAtBaseUpper,\n liquidity: basePosition.liquidity.toString(),\n amountToken0: basePosition.amount0.toString(),\n amountToken1: basePosition.amount1.toString(),\n positionTvl: basePositionTvl,\n },\n {\n tickLower: limitRange.lower,\n tickUpper: limitRange.upper,\n priceLower: priceAtLimitLower,\n priceUpper: priceAtLimitUpper,\n liquidity: limitPosition.liquidity.toString(),\n amountToken0: limitPosition.amount0.toString(),\n amountToken1: limitPosition.amount1.toString(),\n positionTvl: limitPositionTvl,\n },\n ],\n };\n } catch (e) {\n console.error(`Could not get vault positions for vault ${vaultAddress} `);\n throw e;\n }\n}\n\nexport type VaultRanges = {\n baseLower: number;\n baseUpper: number;\n limitLower: number;\n limitUpper: number;\n};\n\nexport async function getVaultRanges(vaultAddress: string, jsonProvider: JsonRpcProvider): Promise<VaultRanges> {\n const vaultContract = getAlgebraVaultContract(vaultAddress, jsonProvider);\n try {\n const [baseRange, limitRange] = await Promise.all([vaultContract.baseRange(), vaultContract.limitRange()]);\n return {\n baseLower: baseRange.lower,\n baseUpper: baseRange.upper,\n limitLower: limitRange.lower,\n limitUpper: limitRange.upper,\n };\n } catch (e) {\n console.error(`Could not get vault ranges for vault ${vaultAddress} `);\n throw e;\n }\n}\n\nexport type VaultRangePercents = {\n currentTick: number;\n currentPrice: number;\n base?: {\n tickLower: number;\n tickUpper: number;\n priceLower: number;\n priceUpper: number;\n widthPct: number;\n widthPctTick: number;\n distancePct: [number, number];\n edgeGapTicks: number;\n edgeGapPctOfSpacing: number;\n side: 'above' | 'below';\n inRange: boolean;\n };\n limit?: {\n tickLower: number;\n tickUpper: number;\n priceLower: number;\n priceUpper: number;\n widthPct: number;\n widthPctTick: number;\n distancePct: [number, number];\n edgeGapTicks: number;\n edgeGapPctOfSpacing: number;\n side: 'above' | 'below';\n inRange: boolean;\n };\n};\n\nfunction computeEdgePercents(currentPrice: number, priceLower: number, priceUpper: number): [number, number] {\n if (!Number.isFinite(currentPrice) || !(currentPrice > 0)) return [0, 0];\n const toLowerPct = ((priceLower - currentPrice) / currentPrice) * 100; // signed\n const toUpperPct = ((priceUpper - currentPrice) / currentPrice) * 100; // signed\n const absLower = Math.abs(toLowerPct);\n const absUpper = Math.abs(toUpperPct);\n if (absLower <= absUpper) {\n return [toLowerPct, toUpperPct];\n }\n return [toUpperPct, toLowerPct];\n}\n\nfunction computeRangeWidthPct(priceLower: number, priceUpper: number): number {\n if (!Number.isFinite(priceLower) || !Number.isFinite(priceUpper)) return 0;\n if (!(priceLower > 0) || !(priceUpper > 0)) return 0;\n const lower = Math.min(priceLower, priceUpper);\n const upper = Math.max(priceLower, priceUpper);\n return (upper / lower - 1) * 100;\n}\n\nfunction computeRangeWidthPctTick(tickLower: number, tickUpper: number): number {\n const lower = Math.min(tickLower, tickUpper);\n const upper = Math.max(tickLower, tickUpper);\n const delta = upper - lower;\n if (!Number.isFinite(delta) || delta <= 0) return 0;\n // 1.0001 ^ delta - 1\n const ratio = 1.0001 ** delta;\n return (ratio - 1) * 100;\n}\n\nfunction computeRangeSide(currentTick: number, tickLower: number, tickUpper: number): 'above' | 'below' {\n if (!Number.isFinite(currentTick)) return 'above';\n const lower = Math.min(tickLower, tickUpper);\n const upper = Math.max(tickLower, tickUpper);\n if (currentTick < lower) return 'above';\n if (currentTick > upper) return 'below';\n const distanceBelow = currentTick - lower;\n const distanceAbove = upper - currentTick;\n if (distanceAbove >= distanceBelow) return 'above';\n return 'below';\n}\n\n// Uniswap V3 / Algebra semantics: lower inclusive, upper exclusive\nfunction isTickInRange(currentTick: number, tickLower: number, tickUpper: number): boolean {\n if (!Number.isFinite(currentTick)) return false;\n const lower = Math.min(tickLower, tickUpper);\n const upper = Math.max(tickLower, tickUpper);\n return currentTick >= lower && currentTick < upper;\n}\n\nexport async function getVaultRangePercents(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n decimals0?: number,\n decimals1?: number,\n): Promise<VaultRangePercents> {\n const { chainId, vault } = await validateVaultData(vaultAddress, jsonProvider);\n const vaultContract = getAlgebraVaultContract(vaultAddress, jsonProvider);\n\n let tokenDecimals = [decimals0, decimals1] as [number | undefined, number | undefined];\n if (tokenDecimals[0] == null || tokenDecimals[1] == null) {\n const [d0, d1] = await Promise.all([\n getTokenDecimals(vault.tokenA, jsonProvider, chainId),\n getTokenDecimals(vault.tokenB, jsonProvider, chainId),\n ]);\n tokenDecimals = [tokenDecimals[0] ?? d0, tokenDecimals[1] ?? d1];\n }\n\n const decimalsPair = tokenDecimals as [number, number];\n const isInv = vault.allowTokenB;\n\n try {\n const [currentTick, tickSpacing] = await Promise.all([vaultContract.currentTick(), vaultContract.tickSpacing()]);\n const currentPrice = getPriceInDepositToken(isInv, decimalsPair, currentTick);\n\n const [baseRange, limitRange, basePosition, limitPosition] = await Promise.all([\n vaultContract.baseRange(),\n vaultContract.limitRange(),\n vaultContract.getBasePosition(),\n vaultContract.getLimitPosition(),\n ]);\n\n const result: VaultRangePercents = { currentTick, currentPrice };\n\n if (basePosition.liquidity.gt('0')) {\n const priceAtBaseLower = getPriceInDepositToken(isInv, decimalsPair, baseRange.lower);\n const priceAtBaseUpper = getPriceInDepositToken(isInv, decimalsPair, baseRange.upper);\n const baseDLower = baseRange.lower - currentTick; // negative if below\n const baseDUpper = baseRange.upper - currentTick; // positive if above\n const edgeGapTicksBase = Math.abs(baseDLower) <= Math.abs(baseDUpper) ? baseDLower : baseDUpper;\n const edgeGapPctBase = tickSpacing > 0 ? (edgeGapTicksBase / tickSpacing) * 100 : 0;\n result.base = {\n tickLower: baseRange.lower,\n tickUpper: baseRange.upper,\n priceLower: priceAtBaseLower,\n priceUpper: priceAtBaseUpper,\n widthPct: computeRangeWidthPct(priceAtBaseLower, priceAtBaseUpper),\n widthPctTick: computeRangeWidthPctTick(baseRange.lower, baseRange.upper),\n distancePct: computeEdgePercents(currentPrice, priceAtBaseLower, priceAtBaseUpper),\n edgeGapTicks: edgeGapTicksBase,\n edgeGapPctOfSpacing: edgeGapPctBase,\n side: computeRangeSide(currentTick, baseRange.lower, baseRange.upper),\n inRange: isTickInRange(currentTick, baseRange.lower, baseRange.upper),\n };\n }\n\n if (limitPosition.liquidity.gt('0')) {\n const priceAtLimitLower = getPriceInDepositToken(isInv, decimalsPair, limitRange.lower);\n const priceAtLimitUpper = getPriceInDepositToken(isInv, decimalsPair, limitRange.upper);\n const limitDLower = limitRange.lower - currentTick; // negative if below\n const limitDUpper = limitRange.upper - currentTick; // positive if above\n const edgeGapTicksLimit = Math.abs(limitDLower) <= Math.abs(limitDUpper) ? limitDLower : limitDUpper;\n const edgeGapPctLimit = tickSpacing > 0 ? (edgeGapTicksLimit / tickSpacing) * 100 : 0;\n result.limit = {\n tickLower: limitRange.lower,\n tickUpper: limitRange.upper,\n priceLower: priceAtLimitLower,\n priceUpper: priceAtLimitUpper,\n widthPct: computeRangeWidthPct(priceAtLimitLower, priceAtLimitUpper),\n widthPctTick: computeRangeWidthPctTick(limitRange.lower, limitRange.upper),\n distancePct: computeEdgePercents(currentPrice, priceAtLimitLower, priceAtLimitUpper),\n edgeGapTicks: edgeGapTicksLimit,\n edgeGapPctOfSpacing: edgeGapPctLimit,\n side: computeRangeSide(currentTick, limitRange.lower, limitRange.upper),\n inRange: isTickInRange(currentTick, limitRange.lower, limitRange.upper),\n };\n }\n\n return result;\n } catch (e) {\n console.error(`Could not get vault range percents for vault ${vaultAddress} `);\n throw e;\n }\n}\n","/* eslint-disable import/prefer-default-export */\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { FeeAprData } from '../types';\n// eslint-disable-next-line import/no-cycle\nimport { validateVaultData } from './vault';\nimport { graphUrls } from '../graphql/constants';\nimport getGraphUrls from '../utils/getGraphUrls';\nimport cache from '../utils/cache';\nimport { FeeAprQueryResponse } from '../types/vaultQueryData';\nimport { sendFeeAprQueryRequest } from '../graphql/functions';\n\n/**\n * Get fee APR values for a vault from a V2 subgraph\n * @param vaultAddress The address of the vault\n * @param jsonProvider A JsonRpcProvider\n * @param dex The DEX identifier\n * @returns Fee APR data for different time periods or null if data not available\n */\nexport async function getFeeAprs(vaultAddress: string, jsonProvider: JsonRpcProvider): Promise<FeeAprData | null> {\n const key = `feeAprs-${vaultAddress}`;\n const cachedData = cache.get(key);\n if (cachedData) {\n return cachedData as FeeAprData;\n }\n\n // Cache for 30 minutes\n const ttl = 30 * 60 * 1000;\n\n const { chainId } = await validateVaultData(vaultAddress, jsonProvider);\n\n // Check if the subgraph is version 2\n const dexConfig = graphUrls[chainId];\n if (!dexConfig) {\n console.error(`This function is not supported on chain ${chainId}:`);\n return null;\n }\n\n const { publishedUrl, url } = getGraphUrls(chainId, true);\n\n try {\n let result: FeeAprQueryResponse | null = null;\n\n if (publishedUrl) {\n try {\n result = await sendFeeAprQueryRequest(publishedUrl, vaultAddress);\n } catch (error) {\n console.error('Request to published graph URL failed:', error);\n }\n }\n\n if (!result) {\n try {\n result = await sendFeeAprQueryRequest(url, vaultAddress);\n } catch (error) {\n console.error('Request to public graph URL failed:', error);\n return null;\n }\n }\n\n if (!result?.almVault) {\n return null;\n }\n\n const feeAprData: FeeAprData = {\n feeApr_1d: result.almVault.feeApr_1d ? result.almVault.feeApr_1d : null,\n feeApr_3d: result.almVault.feeApr_3d ? result.almVault.feeApr_3d : null,\n feeApr_7d: result.almVault.feeApr_7d ? result.almVault.feeApr_7d : null,\n feeApr_30d: result.almVault.feeApr_30d ? result.almVault.feeApr_30d : null,\n };\n\n cache.set(key, feeAprData, ttl);\n return feeAprData;\n } catch (error) {\n console.error(`Could not get fee APRs for vault ${vaultAddress} on chain ${chainId}:`, error);\n return null;\n }\n}\n","import { JsonRpcProvider } from '@ethersproject/providers';\nimport { AddressZero } from '@ethersproject/constants';\nimport { getAlgebraVaultContract } from '../contracts';\n\nlet hasWarned = false;\n// eslint-disable-next-line import/prefer-default-export\nexport async function getFarmingRewardsDistributorAddress(\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n): Promise<string> {\n const vaultContract = getAlgebraVaultContract(vaultAddress, jsonProvider);\n if ((vaultContract as any).farmingRewardsDistributor) {\n return (vaultContract as any).farmingRewardsDistributor();\n } else if (!hasWarned) {\n console.warn('Farming rewards distributor address is not available');\n hasWarned = true;\n }\n return AddressZero;\n}\n","import { JsonRpcProvider } from '@ethersproject/providers';\nimport { BigNumber, ContractTransaction, Overrides } from 'ethers';\nimport { AddressZero } from '@ethersproject/constants';\nimport { parseUnits } from '@ethersproject/units';\nimport { getERC20Contract, getFarmingRewardsDistributorContract } from '../contracts';\nimport { calculateGasMargin } from '../types/calculateGasMargin';\nimport { algebraVaultDecimals } from '../types';\nimport { getFarmingRewardsDistributorAddress } from '../utils/getFarmingRewardsDistributorAddress';\n\nexport async function stake(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n shares: string | number | BigNumber,\n overrides?: Overrides,\n): Promise<ContractTransaction> {\n const {\n network: { chainId },\n } = jsonProvider;\n const signer = jsonProvider.getSigner(accountAddress);\n\n const farmingDistributorAddress = await getFarmingRewardsDistributorAddress(vaultAddress, jsonProvider);\n if (farmingDistributorAddress === AddressZero) {\n throw new Error(`Farming does not exist for vault ${vaultAddress} on chain ${chainId}`);\n }\n\n const farmingDistributorContract = getFarmingRewardsDistributorContract(farmingDistributorAddress, signer);\n\n const sharesBN = parseUnits(shares.toString(), algebraVaultDecimals);\n\n const vaultTokenContract = getERC20Contract(vaultAddress, signer);\n const currentAllowanceBN = await vaultTokenContract.allowance(accountAddress, farmingDistributorAddress);\n\n const isApproved = currentAllowanceBN.gt(BigNumber.from(0)) && currentAllowanceBN.gte(sharesBN);\n if (!isApproved) {\n throw new Error(`Stake is not approved for token, chain ${chainId}, vault ${vaultAddress}`);\n }\n\n const tokenContract = getERC20Contract(vaultAddress, jsonProvider);\n const userTokenBalance = await tokenContract.balanceOf(accountAddress);\n\n if (userTokenBalance.lt(sharesBN)) {\n throw new Error(`Stake amount exceeds user token amount, chain ${chainId}`);\n }\n\n const gasLimit =\n overrides?.gasLimit ??\n calculateGasMargin(await farmingDistributorContract.estimateGas.stake(sharesBN, accountAddress));\n\n const tx = await farmingDistributorContract.stake(sharesBN, accountAddress, {\n ...overrides,\n gasLimit,\n });\n\n return tx;\n}\n\nexport async function unstake(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n shares: string | number | BigNumber,\n overrides?: Overrides,\n): Promise<ContractTransaction> {\n const signer = jsonProvider.getSigner(accountAddress);\n\n const farmingDistributorAddress = await getFarmingRewardsDistributorAddress(vaultAddress, jsonProvider);\n if (farmingDistributorAddress === AddressZero) {\n throw new Error(`Farming does not exist for vault ${vaultAddress}`);\n }\n\n const farmingDistributorContract = getFarmingRewardsDistributorContract(farmingDistributorAddress, signer);\n\n const sharesBN = parseUnits(shares.toString(), algebraVaultDecimals);\n\n const gasLimit =\n overrides?.gasLimit ??\n calculateGasMargin(await farmingDistributorContract.estimateGas.unstake(sharesBN, { from: accountAddress }));\n\n const tx = await farmingDistributorContract.unstake(sharesBN, { from: accountAddress, ...overrides, gasLimit });\n\n return tx;\n}\n\nexport async function harvest(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n overrides?: Overrides,\n): Promise<ContractTransaction> {\n const signer = jsonProvider.getSigner(accountAddress);\n\n const farmingDistributorAddress = await getFarmingRewardsDistributorAddress(vaultAddress, jsonProvider);\n const farmingDistributorContract = getFarmingRewardsDistributorContract(farmingDistributorAddress, signer);\n\n const gasLimit =\n overrides?.gasLimit ??\n calculateGasMargin(await farmingDistributorContract.estimateGas.getAllRewards({ from: accountAddress }));\n\n const tx = await farmingDistributorContract.getAllRewards({ from: accountAddress, ...overrides, gasLimit });\n\n return tx;\n}\n\nexport async function addRewardTokenToDistributor(\n accountAddress: string,\n vaultAddress: string,\n rewardToken: string,\n jsonProvider: JsonRpcProvider,\n overrides?: Overrides,\n): Promise<ContractTransaction> {\n const signer = jsonProvider.getSigner(accountAddress);\n\n const farmingDistributorAddress = await getFarmingRewardsDistributorAddress(vaultAddress, jsonProvider);\n const farmingDistributorContract = getFarmingRewardsDistributorContract(farmingDistributorAddress, signer);\n\n const gasLimit =\n overrides?.gasLimit ??\n calculateGasMargin(\n await farmingDistributorContract.estimateGas.addReward(rewardToken, { from: accountAddress, ...overrides }),\n );\n\n const tx = await farmingDistributorContract.addReward(rewardToken, { from: accountAddress, ...overrides, gasLimit });\n\n return tx;\n}\n\nexport async function getTokenRewardAddresses(vaultAddress: string, jsonProvider: JsonRpcProvider): Promise<string[]> {\n const farmingDistributorAddress = await getFarmingRewardsDistributorAddress(vaultAddress, jsonProvider);\n const farmingDistributorContract = getFarmingRewardsDistributorContract(farmingDistributorAddress, jsonProvider);\n\n const [rewardTokenAddresses] = await farmingDistributorContract.claimableRewards(AddressZero);\n\n return rewardTokenAddresses.map((address) => address.toLowerCase());\n}\n","/* eslint-disable no-redeclare */\n/* eslint-disable import/prefer-default-export */\n\nimport { BigNumber } from 'ethers';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { AddressZero } from '@ethersproject/constants';\nimport { formatUnits } from '@ethersproject/units';\nimport { getFarmingRewardsDistributorContract } from '../contracts';\nimport formatBigInt from '../utils/formatBigInt';\nimport { algebraVaultDecimals, UserAmounts, UserAmountsBN } from '../types';\nimport { _getTotalAmounts, _getTotalSupply } from './_totalBalances';\nimport { getFarmingRewardsDistributorAddress } from '../utils/getFarmingRewardsDistributorAddress';\n\n// eslint-disable-next-line no-underscore-dangle\nasync function _getUserBalanceStaked(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n): Promise<string>;\n\n// eslint-disable-next-line no-underscore-dangle\nasync function _getUserBalanceStaked(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n raw: true,\n): Promise<BigNumber>;\n\n// eslint-disable-next-line no-underscore-dangle\nasync function _getUserBalanceStaked(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n raw?: true,\n) {\n const farmingDistributorAddress = await getFarmingRewardsDistributorAddress(vaultAddress, jsonProvider);\n if (farmingDistributorAddress === AddressZero) {\n return raw ? BigNumber.from(0) : '0';\n }\n const farmingDistributorContract = getFarmingRewardsDistributorContract(farmingDistributorAddress, jsonProvider);\n\n const { tokenAmount } = await farmingDistributorContract.getUserData(accountAddress);\n\n return raw ? tokenAmount : formatBigInt(tokenAmount, algebraVaultDecimals);\n}\n\nexport async function getUserAmountsStaked(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n token0Decimals: number,\n token1Decimals: number,\n raw: false,\n): Promise<UserAmounts>;\n\nexport async function getUserAmountsStaked(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n token0Decimals: number,\n token1Decimals: number,\n raw: true,\n): Promise<UserAmountsBN>;\n\nexport async function getUserAmountsStaked(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n token0Decimals: number,\n token1Decimals: number,\n raw: boolean,\n) {\n const [shares, totalAmounts, totalSupply] = await Promise.all([\n _getUserBalanceStaked(accountAddress, vaultAddress, jsonProvider, true),\n _getTotalAmounts(vaultAddress, jsonProvider, token0Decimals, token1Decimals, true),\n _getTotalSupply(vaultAddress, jsonProvider, true),\n ]);\n\n if (totalSupply.isZero() || shares.isZero()) {\n return [BigNumber.from(0), BigNumber.from(0), BigNumber.from(0)];\n }\n\n const userAmountsBN: UserAmountsBN = [\n shares.mul(totalAmounts[0]).div(totalSupply),\n shares.mul(totalAmounts[1]).div(totalSupply),\n shares,\n ];\n\n const formattedUserAmounts: UserAmounts = [\n formatUnits(userAmountsBN[0], token0Decimals),\n formatUnits(userAmountsBN[1], token1Decimals),\n formatUnits(shares, algebraVaultDecimals),\n ];\n\n if (raw) {\n return userAmountsBN as UserAmountsBN;\n } else {\n return formattedUserAmounts as UserAmounts;\n }\n}\n\n// eslint-disable-next-line no-underscore-dangle\nexport async function getUserFarmingRewards(\n accountAddress: string,\n vaultAddress: string,\n jsonProvider: JsonRpcProvider,\n) {\n const farmingDistributorAddress = await getFarmingRewardsDistributorAddress(vaultAddress, jsonProvider);\n if (farmingDistributorAddress === AddressZero) {\n return new Map<string, BigNumber>();\n }\n const farmingDistributorContract = getFarmingRewardsDistributorContract(farmingDistributorAddress, jsonProvider);\n\n const [[rewardTokenAddresses], rewardTokenAmounts] = await Promise.all([\n farmingDistributorContract.claimableRewards(accountAddress),\n farmingDistributorContract.callStatic.getAllRewards({ from: accountAddress }),\n ]);\n\n const rewardsMapping = new Map<string, BigNumber>();\n\n for (let i = 0; i < rewardTokenAddresses.length; i += 1) {\n rewardsMapping.set(rewardTokenAddresses[i].toLowerCase(), rewardTokenAmounts[i]);\n }\n\n return rewardsMapping;\n}\n","import { JsonRpcProvider } from '@ethersproject/providers';\nimport { BigNumber } from 'ethers';\nimport cache from '../utils/cache';\nimport formatBigInt from '../utils/formatBigInt';\n// eslint-disable-next-line import/no-cycle\nimport { getAmountsInDepositToken } from './calculateDtr';\nimport { getSqrtPriceFromPool } from './priceFromPool';\nimport { getChainByProvider, validateVaultData } from './vault';\nimport { getUserDeposits, getUserWithdraws } from './vaultEvents';\n\ninterface UserPnl {\n totalDepositAmountBN: BigNumber;\n totalWithdrawAmountBN: BigNumber;\n pnlBN: BigNumber;\n pnl: string;\n roi: number;\n}\n\n/** calculates the PNL/ROI of a user in price of the deposit token */\n// eslint-disable-next-line import/prefer-default-export\nexport async function calculateUserDepositTokenPNL(\n accountAddress: string,\n vaultAddress: string,\n currentAmount0: string,\n currentAmount1: string,\n decimals0: number,\n decimals1: number,\n jsonProvider: JsonRpcProvider,\n): Promise<UserPnl> {\n const { chainId } = await getChainByProvider(jsonProvider);\n\n const key = `userDepositTokenPNL-${chainId}-${accountAddress}`;\n const cachedData = cache.get(key);\n if (cachedData) {\n return cachedData as UserPnl;\n }\n\n const ttl = 3600000;\n\n const { vault } = await validateVaultData(vaultAddress, jsonProvider);\n try {\n const [deposits, withdraws] = await Promise.all([\n getUserDeposits(accountAddress, vaultAddress, chainId),\n getUserWithdraws(accountAddress, vaultAddress, chainId),\n ]);\n\n const totalDepositAmountBN = deposits.reduce((acc, deposit) => {\n const amount = getAmountsInDepositToken(\n BigNumber.from(deposit.sqrtPrice),\n BigNumber.from(deposit.amount0),\n BigNumber.from(deposit.amount1),\n decimals0,\n decimals1,\n vault.allowTokenA ? 0 : 1,\n );\n return acc.add(amount);\n }, BigNumber.from(0));\n\n const totalWithdrawAmountBN = withdraws.reduce((acc, withdraw) => {\n const amount = getAmountsInDepositToken(\n BigNumber.from(withdraw.sqrtPrice),\n BigNumber.from(withdraw.amount0),\n BigNumber.from(withdraw.amount1),\n decimals0,\n decimals1,\n vault.allowTokenA ? 0 : 1,\n );\n return acc.add(amount);\n }, BigNumber.from(0));\n\n const currentSqrtPrice = await getSqrtPriceFromPool(vault, jsonProvider);\n const currentAmount = getAmountsInDepositToken(\n currentSqrtPrice,\n BigNumber.from(currentAmount0),\n BigNumber.from(currentAmount1),\n decimals0,\n decimals1,\n vault.allowTokenA ? 0 : 1,\n );\n\n const pnlBN = totalWithdrawAmountBN.add(currentAmount).sub(totalDepositAmountBN);\n\n const pnl = formatBigInt(pnlBN, vault.allowTokenA ? decimals0 : decimals1);\n const roi =\n (Number(pnl) / Number(formatBigInt(totalDepositAmountBN, vault.allowTokenA ? decimals0 : decimals1))) * 100;\n\n const result = {\n totalDepositAmountBN,\n totalWithdrawAmountBN,\n pnlBN,\n pnl,\n roi,\n };\n cache.set(key, result, ttl);\n return result;\n } catch (error) {\n throw new Error(`Request to published graph URL failed: ${error}`);\n }\n}\n"]}
|