@meteora-ag/dlmm 1.3.17-rc.6 → 1.3.17-rc.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.js +58 -32
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +28 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -5770,6 +5770,7 @@ declare class DLMM {
|
|
|
5770
5770
|
*/
|
|
5771
5771
|
static getLbPairs(connection: Connection, opt?: Opt): Promise<LbPairAccount[]>;
|
|
5772
5772
|
static getPairPubkeyIfExists(connection: Connection, tokenX: PublicKey, tokenY: PublicKey, binStep: BN, baseFactor: BN, opt?: Opt): Promise<PublicKey | null>;
|
|
5773
|
+
static getCustomizablePermissionlessLbPairIfExists(connection: Connection, tokenX: PublicKey, tokenY: PublicKey, opt?: Opt): Promise<PublicKey | null>;
|
|
5773
5774
|
/**
|
|
5774
5775
|
* The `create` function is a static method that creates a new instance of the `DLMM` class
|
|
5775
5776
|
* @param {Connection} connection - The `connection` parameter is an instance of the `Connection`
|
package/dist/index.js
CHANGED
|
@@ -7926,6 +7926,32 @@ var DLMM = class {
|
|
|
7926
7926
|
return null;
|
|
7927
7927
|
}
|
|
7928
7928
|
}
|
|
7929
|
+
static async getCustomizablePermissionlessLbPairIfExists(connection, tokenX, tokenY, opt) {
|
|
7930
|
+
const cluster = _optionalChain([opt, 'optionalAccess', _36 => _36.cluster]) || "mainnet-beta";
|
|
7931
|
+
const provider = new (0, _anchor.AnchorProvider)(
|
|
7932
|
+
connection,
|
|
7933
|
+
{},
|
|
7934
|
+
_anchor.AnchorProvider.defaultOptions()
|
|
7935
|
+
);
|
|
7936
|
+
const program = new (0, _anchor.Program)(
|
|
7937
|
+
IDL,
|
|
7938
|
+
_nullishCoalesce(_optionalChain([opt, 'optionalAccess', _37 => _37.programId]), () => ( LBCLMM_PROGRAM_IDS[cluster])),
|
|
7939
|
+
provider
|
|
7940
|
+
);
|
|
7941
|
+
try {
|
|
7942
|
+
const [lpPair] = deriveCustomizablePermissionlessLbPair(
|
|
7943
|
+
tokenX,
|
|
7944
|
+
tokenY,
|
|
7945
|
+
program.programId
|
|
7946
|
+
);
|
|
7947
|
+
const account = await program.account.lbPair.fetchNullable(lpPair);
|
|
7948
|
+
if (account)
|
|
7949
|
+
return lpPair;
|
|
7950
|
+
return null;
|
|
7951
|
+
} catch (error) {
|
|
7952
|
+
return null;
|
|
7953
|
+
}
|
|
7954
|
+
}
|
|
7929
7955
|
/**
|
|
7930
7956
|
* The `create` function is a static method that creates a new instance of the `DLMM` class
|
|
7931
7957
|
* @param {Connection} connection - The `connection` parameter is an instance of the `Connection`
|
|
@@ -7936,7 +7962,7 @@ var DLMM = class {
|
|
|
7936
7962
|
* @returns The `create` function returns a `Promise` that resolves to a `DLMM` object.
|
|
7937
7963
|
*/
|
|
7938
7964
|
static async create(connection, dlmm, opt) {
|
|
7939
|
-
const cluster = _optionalChain([opt, 'optionalAccess',
|
|
7965
|
+
const cluster = _optionalChain([opt, 'optionalAccess', _38 => _38.cluster]) || "mainnet-beta";
|
|
7940
7966
|
const provider = new (0, _anchor.AnchorProvider)(
|
|
7941
7967
|
connection,
|
|
7942
7968
|
{},
|
|
@@ -7944,7 +7970,7 @@ var DLMM = class {
|
|
|
7944
7970
|
);
|
|
7945
7971
|
const program = new (0, _anchor.Program)(
|
|
7946
7972
|
IDL,
|
|
7947
|
-
_nullishCoalesce(_optionalChain([opt, 'optionalAccess',
|
|
7973
|
+
_nullishCoalesce(_optionalChain([opt, 'optionalAccess', _39 => _39.programId]), () => ( LBCLMM_PROGRAM_IDS[cluster])),
|
|
7948
7974
|
provider
|
|
7949
7975
|
);
|
|
7950
7976
|
const binArrayBitMapExtensionPubkey = deriveBinArrayBitmapExtension(
|
|
@@ -7960,14 +7986,14 @@ var DLMM = class {
|
|
|
7960
7986
|
connection,
|
|
7961
7987
|
accountsToFetch
|
|
7962
7988
|
);
|
|
7963
|
-
const lbPairAccountInfoBuffer = _optionalChain([accountsInfo, 'access',
|
|
7989
|
+
const lbPairAccountInfoBuffer = _optionalChain([accountsInfo, 'access', _40 => _40[0], 'optionalAccess', _41 => _41.data]);
|
|
7964
7990
|
if (!lbPairAccountInfoBuffer)
|
|
7965
7991
|
throw new Error(`LB Pair account ${dlmm.toBase58()} not found`);
|
|
7966
7992
|
const lbPairAccInfo = program.coder.accounts.decode(
|
|
7967
7993
|
"lbPair",
|
|
7968
7994
|
lbPairAccountInfoBuffer
|
|
7969
7995
|
);
|
|
7970
|
-
const binArrayBitMapAccountInfoBuffer = _optionalChain([accountsInfo, 'access',
|
|
7996
|
+
const binArrayBitMapAccountInfoBuffer = _optionalChain([accountsInfo, 'access', _42 => _42[1], 'optionalAccess', _43 => _43.data]);
|
|
7971
7997
|
let binArrayBitMapExtensionAccInfo = null;
|
|
7972
7998
|
if (binArrayBitMapAccountInfoBuffer) {
|
|
7973
7999
|
binArrayBitMapExtensionAccInfo = program.coder.accounts.decode(
|
|
@@ -7975,7 +8001,7 @@ var DLMM = class {
|
|
|
7975
8001
|
binArrayBitMapAccountInfoBuffer
|
|
7976
8002
|
);
|
|
7977
8003
|
}
|
|
7978
|
-
const clockAccountInfoBuffer = _optionalChain([accountsInfo, 'access',
|
|
8004
|
+
const clockAccountInfoBuffer = _optionalChain([accountsInfo, 'access', _44 => _44[2], 'optionalAccess', _45 => _45.data]);
|
|
7979
8005
|
if (!clockAccountInfoBuffer)
|
|
7980
8006
|
throw new Error(`Clock account not found`);
|
|
7981
8007
|
const clock = ClockLayout.decode(clockAccountInfoBuffer);
|
|
@@ -8036,7 +8062,7 @@ var DLMM = class {
|
|
|
8036
8062
|
* objects.
|
|
8037
8063
|
*/
|
|
8038
8064
|
static async createMultiple(connection, dlmmList, opt) {
|
|
8039
|
-
const cluster = _optionalChain([opt, 'optionalAccess',
|
|
8065
|
+
const cluster = _optionalChain([opt, 'optionalAccess', _46 => _46.cluster]) || "mainnet-beta";
|
|
8040
8066
|
const provider = new (0, _anchor.AnchorProvider)(
|
|
8041
8067
|
connection,
|
|
8042
8068
|
{},
|
|
@@ -8044,7 +8070,7 @@ var DLMM = class {
|
|
|
8044
8070
|
);
|
|
8045
8071
|
const program = new (0, _anchor.Program)(
|
|
8046
8072
|
IDL,
|
|
8047
|
-
_nullishCoalesce(_optionalChain([opt, 'optionalAccess',
|
|
8073
|
+
_nullishCoalesce(_optionalChain([opt, 'optionalAccess', _47 => _47.programId]), () => ( LBCLMM_PROGRAM_IDS[cluster])),
|
|
8048
8074
|
provider
|
|
8049
8075
|
);
|
|
8050
8076
|
const binArrayBitMapExtensions = dlmmList.map(
|
|
@@ -8060,14 +8086,14 @@ var DLMM = class {
|
|
|
8060
8086
|
accountsToFetch
|
|
8061
8087
|
);
|
|
8062
8088
|
const clockAccount = accountsInfo.pop();
|
|
8063
|
-
const clockAccountInfoBuffer = _optionalChain([clockAccount, 'optionalAccess',
|
|
8089
|
+
const clockAccountInfoBuffer = _optionalChain([clockAccount, 'optionalAccess', _48 => _48.data]);
|
|
8064
8090
|
if (!clockAccountInfoBuffer)
|
|
8065
8091
|
throw new Error(`Clock account not found`);
|
|
8066
8092
|
const clock = ClockLayout.decode(clockAccountInfoBuffer);
|
|
8067
8093
|
const lbPairArraysMap = /* @__PURE__ */ new Map();
|
|
8068
8094
|
for (let i = 0; i < dlmmList.length; i++) {
|
|
8069
8095
|
const lbPairPubKey = dlmmList[i];
|
|
8070
|
-
const lbPairAccountInfoBuffer = _optionalChain([accountsInfo, 'access',
|
|
8096
|
+
const lbPairAccountInfoBuffer = _optionalChain([accountsInfo, 'access', _49 => _49[i], 'optionalAccess', _50 => _50.data]);
|
|
8071
8097
|
if (!lbPairAccountInfoBuffer)
|
|
8072
8098
|
throw new Error(`LB Pair account ${lbPairPubKey.toBase58()} not found`);
|
|
8073
8099
|
const binArrayAccInfo = program.coder.accounts.decode(
|
|
@@ -8080,7 +8106,7 @@ var DLMM = class {
|
|
|
8080
8106
|
for (let i = dlmmList.length; i < accountsInfo.length; i++) {
|
|
8081
8107
|
const index = i - dlmmList.length;
|
|
8082
8108
|
const lbPairPubkey = dlmmList[index];
|
|
8083
|
-
const binArrayBitMapAccountInfoBuffer = _optionalChain([accountsInfo, 'access',
|
|
8109
|
+
const binArrayBitMapAccountInfoBuffer = _optionalChain([accountsInfo, 'access', _51 => _51[i], 'optionalAccess', _52 => _52.data]);
|
|
8084
8110
|
if (binArrayBitMapAccountInfoBuffer) {
|
|
8085
8111
|
const binArrayBitMapExtensionAccInfo = program.coder.accounts.decode(
|
|
8086
8112
|
"binArrayBitmapExtension",
|
|
@@ -8164,7 +8190,7 @@ var DLMM = class {
|
|
|
8164
8190
|
);
|
|
8165
8191
|
const program = new (0, _anchor.Program)(
|
|
8166
8192
|
IDL,
|
|
8167
|
-
_nullishCoalesce(_optionalChain([opt, 'optionalAccess',
|
|
8193
|
+
_nullishCoalesce(_optionalChain([opt, 'optionalAccess', _53 => _53.programId]), () => ( LBCLMM_PROGRAM_IDS[_nullishCoalesce(_optionalChain([opt, 'optionalAccess', _54 => _54.cluster]), () => ( "mainnet-beta"))])),
|
|
8168
8194
|
provider
|
|
8169
8195
|
);
|
|
8170
8196
|
const presetParameter = await program.account.presetParameter.all();
|
|
@@ -8182,7 +8208,7 @@ var DLMM = class {
|
|
|
8182
8208
|
* Pair account, and the value is an object of PositionInfo
|
|
8183
8209
|
*/
|
|
8184
8210
|
static async getAllLbPairPositionsByUser(connection, userPubKey, opt) {
|
|
8185
|
-
const cluster = _optionalChain([opt, 'optionalAccess',
|
|
8211
|
+
const cluster = _optionalChain([opt, 'optionalAccess', _55 => _55.cluster]) || "mainnet-beta";
|
|
8186
8212
|
const provider = new (0, _anchor.AnchorProvider)(
|
|
8187
8213
|
connection,
|
|
8188
8214
|
{},
|
|
@@ -8190,7 +8216,7 @@ var DLMM = class {
|
|
|
8190
8216
|
);
|
|
8191
8217
|
const program = new (0, _anchor.Program)(
|
|
8192
8218
|
IDL,
|
|
8193
|
-
_nullishCoalesce(_optionalChain([opt, 'optionalAccess',
|
|
8219
|
+
_nullishCoalesce(_optionalChain([opt, 'optionalAccess', _56 => _56.programId]), () => ( LBCLMM_PROGRAM_IDS[cluster])),
|
|
8194
8220
|
provider
|
|
8195
8221
|
);
|
|
8196
8222
|
const positionsV2 = await program.account.positionV2.all([
|
|
@@ -8324,8 +8350,8 @@ var DLMM = class {
|
|
|
8324
8350
|
getTokenDecimals(program.provider.connection, lbPairAcc.tokenXMint),
|
|
8325
8351
|
getTokenDecimals(program.provider.connection, lbPairAcc.tokenYMint)
|
|
8326
8352
|
]);
|
|
8327
|
-
const reserveXBalance = _nullishCoalesce(_optionalChain([lbPairReserveMapV2, 'access',
|
|
8328
|
-
const reserveYBalance = _nullishCoalesce(_optionalChain([lbPairReserveMapV2, 'access',
|
|
8353
|
+
const reserveXBalance = _nullishCoalesce(_optionalChain([lbPairReserveMapV2, 'access', _57 => _57.get, 'call', _58 => _58(lbPair.toBase58()), 'optionalAccess', _59 => _59.reserveX]), () => ( BigInt(0)));
|
|
8354
|
+
const reserveYBalance = _nullishCoalesce(_optionalChain([lbPairReserveMapV2, 'access', _60 => _60.get, 'call', _61 => _61(lbPair.toBase58()), 'optionalAccess', _62 => _62.reserveY]), () => ( BigInt(0)));
|
|
8329
8355
|
const tokenX = {
|
|
8330
8356
|
publicKey: lbPairAcc.tokenXMint,
|
|
8331
8357
|
reserve: lbPairAcc.reserveX,
|
|
@@ -8371,7 +8397,7 @@ var DLMM = class {
|
|
|
8371
8397
|
tokenX,
|
|
8372
8398
|
tokenY,
|
|
8373
8399
|
lbPairPositionsData: [
|
|
8374
|
-
..._nullishCoalesce(_optionalChain([positionsMap, 'access',
|
|
8400
|
+
..._nullishCoalesce(_optionalChain([positionsMap, 'access', _63 => _63.get, 'call', _64 => _64(lbPair.toBase58()), 'optionalAccess', _65 => _65.lbPairPositionsData]), () => ( [])),
|
|
8375
8401
|
{
|
|
8376
8402
|
publicKey: positionPubKey,
|
|
8377
8403
|
positionData,
|
|
@@ -8511,7 +8537,7 @@ var DLMM = class {
|
|
|
8511
8537
|
);
|
|
8512
8538
|
const program = new (0, _anchor.Program)(
|
|
8513
8539
|
IDL,
|
|
8514
|
-
_nullishCoalesce(_optionalChain([opt, 'optionalAccess',
|
|
8540
|
+
_nullishCoalesce(_optionalChain([opt, 'optionalAccess', _66 => _66.programId]), () => ( LBCLMM_PROGRAM_IDS[opt.cluster])),
|
|
8515
8541
|
provider
|
|
8516
8542
|
);
|
|
8517
8543
|
const [lbPair] = derivePermissionLbPair(
|
|
@@ -8560,7 +8586,7 @@ var DLMM = class {
|
|
|
8560
8586
|
);
|
|
8561
8587
|
const program = new (0, _anchor.Program)(
|
|
8562
8588
|
IDL,
|
|
8563
|
-
_nullishCoalesce(_optionalChain([opt, 'optionalAccess',
|
|
8589
|
+
_nullishCoalesce(_optionalChain([opt, 'optionalAccess', _67 => _67.programId]), () => ( LBCLMM_PROGRAM_IDS[opt.cluster])),
|
|
8564
8590
|
provider
|
|
8565
8591
|
);
|
|
8566
8592
|
const [lbPair] = deriveCustomizablePermissionlessLbPair(
|
|
@@ -8610,7 +8636,7 @@ var DLMM = class {
|
|
|
8610
8636
|
);
|
|
8611
8637
|
const program = new (0, _anchor.Program)(
|
|
8612
8638
|
IDL,
|
|
8613
|
-
_nullishCoalesce(_optionalChain([opt, 'optionalAccess',
|
|
8639
|
+
_nullishCoalesce(_optionalChain([opt, 'optionalAccess', _68 => _68.programId]), () => ( LBCLMM_PROGRAM_IDS[opt.cluster])),
|
|
8614
8640
|
provider
|
|
8615
8641
|
);
|
|
8616
8642
|
const existsPool = await this.getPairPubkeyIfExists(
|
|
@@ -8723,7 +8749,8 @@ var DLMM = class {
|
|
|
8723
8749
|
* @returns a Promise that resolves to the transaction.
|
|
8724
8750
|
*/
|
|
8725
8751
|
async setPairStatusPermissionless(enable, creator) {
|
|
8726
|
-
const
|
|
8752
|
+
const status = enable ? 0 : 1;
|
|
8753
|
+
const tx = await this.program.methods.setPairStatusPermissionless(status).accounts({
|
|
8727
8754
|
lbPair: this.pubkey,
|
|
8728
8755
|
creator
|
|
8729
8756
|
}).transaction();
|
|
@@ -8766,7 +8793,7 @@ var DLMM = class {
|
|
|
8766
8793
|
swapForY,
|
|
8767
8794
|
new (0, _anchor.BN)(activeIdToLoop),
|
|
8768
8795
|
this.lbPair,
|
|
8769
|
-
_nullishCoalesce(_optionalChain([this, 'access',
|
|
8796
|
+
_nullishCoalesce(_optionalChain([this, 'access', _69 => _69.binArrayBitmapExtension, 'optionalAccess', _70 => _70.account]), () => ( null))
|
|
8770
8797
|
);
|
|
8771
8798
|
if (binArrayIndex === null)
|
|
8772
8799
|
shouldStop = true;
|
|
@@ -10257,7 +10284,7 @@ var DLMM = class {
|
|
|
10257
10284
|
swapForY,
|
|
10258
10285
|
activeId,
|
|
10259
10286
|
this.lbPair,
|
|
10260
|
-
_nullishCoalesce(_optionalChain([this, 'access',
|
|
10287
|
+
_nullishCoalesce(_optionalChain([this, 'access', _71 => _71.binArrayBitmapExtension, 'optionalAccess', _72 => _72.account]), () => ( null)),
|
|
10261
10288
|
binArrays
|
|
10262
10289
|
);
|
|
10263
10290
|
if (binArrayAccountToSwap == null) {
|
|
@@ -10317,7 +10344,7 @@ var DLMM = class {
|
|
|
10317
10344
|
swapForY,
|
|
10318
10345
|
activeId,
|
|
10319
10346
|
this.lbPair,
|
|
10320
|
-
_nullishCoalesce(_optionalChain([this, 'access',
|
|
10347
|
+
_nullishCoalesce(_optionalChain([this, 'access', _73 => _73.binArrayBitmapExtension, 'optionalAccess', _74 => _74.account]), () => ( null)),
|
|
10321
10348
|
binArrays
|
|
10322
10349
|
);
|
|
10323
10350
|
if (binArrayAccountToSwap == null) {
|
|
@@ -10401,7 +10428,7 @@ var DLMM = class {
|
|
|
10401
10428
|
swapForY,
|
|
10402
10429
|
activeId,
|
|
10403
10430
|
this.lbPair,
|
|
10404
|
-
_nullishCoalesce(_optionalChain([this, 'access',
|
|
10431
|
+
_nullishCoalesce(_optionalChain([this, 'access', _75 => _75.binArrayBitmapExtension, 'optionalAccess', _76 => _76.account]), () => ( null)),
|
|
10405
10432
|
binArrays
|
|
10406
10433
|
);
|
|
10407
10434
|
if (binArrayAccountToSwap == null) {
|
|
@@ -10479,7 +10506,7 @@ var DLMM = class {
|
|
|
10479
10506
|
swapForY,
|
|
10480
10507
|
activeId,
|
|
10481
10508
|
this.lbPair,
|
|
10482
|
-
_nullishCoalesce(_optionalChain([this, 'access',
|
|
10509
|
+
_nullishCoalesce(_optionalChain([this, 'access', _77 => _77.binArrayBitmapExtension, 'optionalAccess', _78 => _78.account]), () => ( null)),
|
|
10483
10510
|
binArrays
|
|
10484
10511
|
);
|
|
10485
10512
|
if (binArrayAccountToSwap == null) {
|
|
@@ -11283,7 +11310,6 @@ var DLMM = class {
|
|
|
11283
11310
|
]);
|
|
11284
11311
|
}
|
|
11285
11312
|
}
|
|
11286
|
-
console.log("let return");
|
|
11287
11313
|
return {
|
|
11288
11314
|
sendPositionOwnerTokenProveIxs,
|
|
11289
11315
|
initializeBinArraysAndPositionIxs,
|
|
@@ -11679,7 +11705,7 @@ var DLMM = class {
|
|
|
11679
11705
|
swapForY,
|
|
11680
11706
|
new (0, _anchor.BN)(activeBinId),
|
|
11681
11707
|
this.lbPair,
|
|
11682
|
-
_nullishCoalesce(_optionalChain([this, 'access',
|
|
11708
|
+
_nullishCoalesce(_optionalChain([this, 'access', _79 => _79.binArrayBitmapExtension, 'optionalAccess', _80 => _80.account]), () => ( null))
|
|
11683
11709
|
);
|
|
11684
11710
|
if (toBinArrayIndex === null)
|
|
11685
11711
|
return true;
|
|
@@ -11716,7 +11742,7 @@ var DLMM = class {
|
|
|
11716
11742
|
swapForY,
|
|
11717
11743
|
new (0, _anchor.BN)(activeBinId),
|
|
11718
11744
|
this.lbPair,
|
|
11719
|
-
_nullishCoalesce(_optionalChain([this, 'access',
|
|
11745
|
+
_nullishCoalesce(_optionalChain([this, 'access', _81 => _81.binArrayBitmapExtension, 'optionalAccess', _82 => _82.account]), () => ( null))
|
|
11720
11746
|
);
|
|
11721
11747
|
const accountsToFetch = [];
|
|
11722
11748
|
const [binArrayBitMapExtensionPubkey] = deriveBinArrayBitmapExtension(
|
|
@@ -11747,13 +11773,13 @@ var DLMM = class {
|
|
|
11747
11773
|
let fromBinArray = null;
|
|
11748
11774
|
let toBinArray = null;
|
|
11749
11775
|
let binArrayBitmapExtension = null;
|
|
11750
|
-
if (!!_optionalChain([binArrayAccounts, 'optionalAccess',
|
|
11776
|
+
if (!!_optionalChain([binArrayAccounts, 'optionalAccess', _83 => _83[0]])) {
|
|
11751
11777
|
binArrayBitmapExtension = binArrayBitMapExtensionPubkey;
|
|
11752
11778
|
}
|
|
11753
|
-
if (!!_optionalChain([binArrayAccounts, 'optionalAccess',
|
|
11779
|
+
if (!!_optionalChain([binArrayAccounts, 'optionalAccess', _84 => _84[1]])) {
|
|
11754
11780
|
fromBinArray = fromBinArrayPubkey;
|
|
11755
11781
|
}
|
|
11756
|
-
if (!!_optionalChain([binArrayAccounts, 'optionalAccess',
|
|
11782
|
+
if (!!_optionalChain([binArrayAccounts, 'optionalAccess', _85 => _85[2]]) && !!toBinArrayIndex) {
|
|
11757
11783
|
toBinArray = toBinArrayPubkey;
|
|
11758
11784
|
}
|
|
11759
11785
|
const { blockhash, lastValidBlockHeight } = await this.program.provider.connection.getLatestBlockhash("confirmed");
|
|
@@ -12229,7 +12255,7 @@ var DLMM = class {
|
|
|
12229
12255
|
const [lowerBinId2] = getBinArrayLowerUpperBinId(index);
|
|
12230
12256
|
return bins.map((b, i) => [lowerBinId2.toNumber() + i, b]);
|
|
12231
12257
|
}));
|
|
12232
|
-
const version = _nullishCoalesce(_optionalChain([binArrays, 'access',
|
|
12258
|
+
const version = _nullishCoalesce(_optionalChain([binArrays, 'access', _86 => _86.find, 'call', _87 => _87((binArray) => binArray != null), 'optionalAccess', _88 => _88.version]), () => ( 1));
|
|
12233
12259
|
return Array.from(enumerateBins(
|
|
12234
12260
|
binsById,
|
|
12235
12261
|
lowerBinId,
|