ccxt 4.2.1 → 4.2.3

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.
@@ -1376,6 +1376,22 @@ class Exchange extends _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchang
1376
1376
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Exchange);
1377
1377
 
1378
1378
 
1379
+ /***/ }),
1380
+
1381
+ /***/ 5224:
1382
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1383
+
1384
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1385
+ /* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)
1386
+ /* harmony export */ });
1387
+ /* harmony import */ var _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3043);
1388
+ // -------------------------------------------------------------------------------
1389
+
1390
+ class Exchange extends _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e {
1391
+ }
1392
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Exchange);
1393
+
1394
+
1379
1395
  /***/ }),
1380
1396
 
1381
1397
  /***/ 3565:
@@ -2520,7 +2536,7 @@ class alpaca extends _abstract_alpaca_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
2520
2536
  'closeAllPositions': false,
2521
2537
  'closePosition': false,
2522
2538
  'createOrder': true,
2523
- 'fetchBalance': true,
2539
+ 'fetchBalance': false,
2524
2540
  'fetchBidsAsks': false,
2525
2541
  'fetchClosedOrders': true,
2526
2542
  'fetchCurrencies': false,
@@ -18711,6 +18727,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
18711
18727
  '-4046': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.AuthenticationError,
18712
18728
  '-4047': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
18713
18729
  '-4054': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
18730
+ '-4164': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
18714
18731
  '-5001': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
18715
18732
  '-5002': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds,
18716
18733
  '-5003': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds,
@@ -27155,6 +27172,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
27155
27172
  'trade/query': 3,
27156
27173
  'trade/openOrders': 3,
27157
27174
  'trade/historyOrders': 3,
27175
+ 'user/commissionRate': 3,
27158
27176
  'account/balance': 3,
27159
27177
  },
27160
27178
  'post': {
@@ -27162,6 +27180,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
27162
27180
  'trade/cancel': 3,
27163
27181
  'trade/batchOrders': 3,
27164
27182
  'trade/cancelOrders': 3,
27183
+ 'trade/cancelOpenOrders': 3,
27165
27184
  },
27166
27185
  },
27167
27186
  },
@@ -27313,6 +27332,9 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
27313
27332
  'post': {
27314
27333
  'userDataStream': 1,
27315
27334
  },
27335
+ 'put': {
27336
+ 'userDataStream': 1,
27337
+ },
27316
27338
  },
27317
27339
  },
27318
27340
  },
@@ -28352,22 +28374,30 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28352
28374
  // }
28353
28375
  //
28354
28376
  const marketId = this.safeString(ticker, 'symbol');
28355
- // const change = this.safeString (ticker, 'priceChange'); // this is not ccxt's change because it does high-low instead of last-open
28356
28377
  const lastQty = this.safeString(ticker, 'lastQty');
28357
28378
  // in spot markets, lastQty is not present
28358
28379
  // it's (bad, but) the only way we can check the tickers origin
28359
28380
  const type = (lastQty === undefined) ? 'spot' : 'swap';
28360
- const symbol = this.safeSymbol(marketId, market, undefined, type);
28381
+ market = this.safeMarket(marketId, market, undefined, type);
28382
+ const symbol = market['symbol'];
28361
28383
  const open = this.safeString(ticker, 'openPrice');
28362
28384
  const high = this.safeString(ticker, 'highPrice');
28363
28385
  const low = this.safeString(ticker, 'lowPrice');
28364
28386
  const close = this.safeString(ticker, 'lastPrice');
28365
28387
  const quoteVolume = this.safeString(ticker, 'quoteVolume');
28366
28388
  const baseVolume = this.safeString(ticker, 'volume');
28389
+ let percentage = undefined;
28390
+ let change = undefined;
28391
+ if (market['swap']) {
28392
+ // right now only swap uses the 24h change, spot will be added soon
28393
+ percentage = this.safeString(ticker, 'priceChangePercent');
28394
+ change = this.safeString(ticker, 'priceChange');
28395
+ }
28367
28396
  // let percentage = this.safeString (ticker, 'priceChangePercent');
28368
28397
  // if (percentage !== undefined) {
28369
28398
  // percentage = percentage.replace ('%', '');
28370
28399
  // } similarly to change, it's not ccxt's percentage because it does priceChange/open, and priceChange is high-low
28400
+ // const change = this.safeString (ticker, 'priceChange'); // this is not ccxt's change because it does high-low instead of last-open
28371
28401
  const ts = this.safeInteger(ticker, 'closeTime');
28372
28402
  const datetime = this.iso8601(ts);
28373
28403
  const bid = this.safeString(ticker, 'bidPrice');
@@ -28389,8 +28419,8 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28389
28419
  'close': close,
28390
28420
  'last': undefined,
28391
28421
  'previousClose': undefined,
28392
- 'change': undefined,
28393
- 'percentage': undefined,
28422
+ 'change': change,
28423
+ 'percentage': percentage,
28394
28424
  'average': undefined,
28395
28425
  'baseVolume': baseVolume,
28396
28426
  'quoteVolume': quoteVolume,
@@ -28746,6 +28776,10 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28746
28776
  const isTrailingAmountOrder = trailingAmount !== undefined;
28747
28777
  const isTrailingPercentOrder = trailingPercent !== undefined;
28748
28778
  const isTrailing = isTrailingAmountOrder || isTrailingPercentOrder;
28779
+ const stopLoss = this.safeValue(params, 'stopLoss');
28780
+ const takeProfit = this.safeValue(params, 'takeProfit');
28781
+ const isStopLoss = stopLoss !== undefined;
28782
+ const isTakeProfit = takeProfit !== undefined;
28749
28783
  if (((type === 'LIMIT') || (type === 'TRIGGER_LIMIT') || (type === 'STOP') || (type === 'TAKE_PROFIT')) && !isTrailing) {
28750
28784
  request['price'] = this.parseToNumeric(this.priceToPrecision(symbol, price));
28751
28785
  }
@@ -28791,6 +28825,42 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28791
28825
  request['priceRate'] = this.parseToNumeric(requestTrailingPercent);
28792
28826
  }
28793
28827
  }
28828
+ if (isStopLoss || isTakeProfit) {
28829
+ if (isStopLoss) {
28830
+ const slTriggerPrice = this.safeString2(stopLoss, 'triggerPrice', 'stopPrice', stopLoss);
28831
+ const slWorkingType = this.safeString(stopLoss, 'workingType', 'MARK_PRICE');
28832
+ const slType = this.safeString(stopLoss, 'type', 'STOP_MARKET');
28833
+ const slRequest = {
28834
+ 'stopPrice': this.parseToNumeric(this.priceToPrecision(symbol, slTriggerPrice)),
28835
+ 'workingType': slWorkingType,
28836
+ 'type': slType,
28837
+ };
28838
+ const slPrice = this.safeString(stopLoss, 'price');
28839
+ if (slPrice !== undefined) {
28840
+ slRequest['price'] = this.parseToNumeric(this.priceToPrecision(symbol, slPrice));
28841
+ }
28842
+ const slQuantity = this.safeString(stopLoss, 'quantity', amount);
28843
+ slRequest['quantity'] = this.parseToNumeric(this.amountToPrecision(symbol, slQuantity));
28844
+ request['stopLoss'] = this.json(slRequest);
28845
+ }
28846
+ if (isTakeProfit) {
28847
+ const tkTriggerPrice = this.safeString2(takeProfit, 'triggerPrice', 'stopPrice', takeProfit);
28848
+ const tkWorkingType = this.safeString(takeProfit, 'workingType', 'MARK_PRICE');
28849
+ const tpType = this.safeString(takeProfit, 'type', 'TAKE_PROFIT_MARKET');
28850
+ const tpRequest = {
28851
+ 'stopPrice': this.parseToNumeric(this.priceToPrecision(symbol, tkTriggerPrice)),
28852
+ 'workingType': tkWorkingType,
28853
+ 'type': tpType,
28854
+ };
28855
+ const slPrice = this.safeString(takeProfit, 'price');
28856
+ if (slPrice !== undefined) {
28857
+ tpRequest['price'] = this.parseToNumeric(this.priceToPrecision(symbol, slPrice));
28858
+ }
28859
+ const tkQuantity = this.safeString(takeProfit, 'quantity', amount);
28860
+ tpRequest['quantity'] = this.parseToNumeric(this.amountToPrecision(symbol, tkQuantity));
28861
+ request['takeProfit'] = this.json(tpRequest);
28862
+ }
28863
+ }
28794
28864
  let positionSide = undefined;
28795
28865
  if (reduceOnly) {
28796
28866
  positionSide = (side === 'buy') ? 'SHORT' : 'LONG';
@@ -28800,7 +28870,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28800
28870
  }
28801
28871
  request['positionSide'] = positionSide;
28802
28872
  request['quantity'] = this.parseToNumeric(this.amountToPrecision(symbol, amount));
28803
- params = this.omit(params, ['reduceOnly', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice', 'trailingAmount', 'trailingPercent']);
28873
+ params = this.omit(params, ['reduceOnly', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice', 'trailingAmount', 'trailingPercent', 'takeProfit', 'stopLoss']);
28804
28874
  }
28805
28875
  return this.extend(request, params);
28806
28876
  }
@@ -28810,6 +28880,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28810
28880
  * @name bingx#createOrder
28811
28881
  * @description create a trade order
28812
28882
  * @see https://bingx-api.github.io/docs/#/en-us/swapV2/trade-api.html#Trade%20order
28883
+ * @see https://bingx-api.github.io/docs/#/en-us/spot/trade-api.html#Create%20an%20Order
28813
28884
  * @param {string} symbol unified symbol of the market to create an order in
28814
28885
  * @param {string} type 'market' or 'limit'
28815
28886
  * @param {string} side 'buy' or 'sell'
@@ -28825,6 +28896,10 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28825
28896
  * @param {float} [params.cost] the quote quantity that can be used as an alternative for the amount
28826
28897
  * @param {float} [params.trailingAmount] *swap only* the quote amount to trail away from the current market price
28827
28898
  * @param {float} [params.trailingPercent] *swap only* the percent to trail away from the current market price
28899
+ * @param {object} [params.takeProfit] *takeProfit object in params* containing the triggerPrice at which the attached take profit order will be triggered
28900
+ * @param {float} [params.takeProfit.triggerPrice] take profit trigger price
28901
+ * @param {object} [params.stopLoss] *stopLoss object in params* containing the triggerPrice at which the attached stop loss order will be triggered
28902
+ * @param {float} [params.stopLoss.triggerPrice] stop loss trigger price
28828
28903
  * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
28829
28904
  */
28830
28905
  await this.loadMarkets();
@@ -28875,6 +28950,9 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28875
28950
  // }
28876
28951
  // }
28877
28952
  //
28953
+ if (typeof response === 'string') {
28954
+ response = JSON.parse(response);
28955
+ }
28878
28956
  const data = this.safeValue(response, 'data', {});
28879
28957
  const order = this.safeValue(data, 'order', data);
28880
28958
  return this.parseOrder(order, market);
@@ -29079,6 +29157,24 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
29079
29157
  // "orderType": "",
29080
29158
  // "workingType": "MARK_PRICE"
29081
29159
  // }
29160
+ // with tp and sl
29161
+ // {
29162
+ // orderId: 1741440894764281900,
29163
+ // symbol: 'LTC-USDT',
29164
+ // positionSide: 'LONG',
29165
+ // side: 'BUY',
29166
+ // type: 'MARKET',
29167
+ // price: 0,
29168
+ // quantity: 1,
29169
+ // stopPrice: 0,
29170
+ // workingType: 'MARK_PRICE',
29171
+ // clientOrderID: '',
29172
+ // timeInForce: 'GTC',
29173
+ // priceRate: 0,
29174
+ // stopLoss: '{"stopPrice":50,"workingType":"MARK_PRICE","type":"STOP_MARKET","quantity":1}',
29175
+ // takeProfit: '{"stopPrice":150,"workingType":"MARK_PRICE","type":"TAKE_PROFIT_MARKET","quantity":1}',
29176
+ // reduceOnly: false
29177
+ // }
29082
29178
  //
29083
29179
  const positionSide = this.safeString2(order, 'positionSide', 'ps');
29084
29180
  const marketType = (positionSide === undefined) ? 'spot' : 'swap';
@@ -29117,6 +29213,30 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
29117
29213
  'cost': _base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise */ .O.stringAbs(feeCost),
29118
29214
  };
29119
29215
  const clientOrderId = this.safeString2(order, 'clientOrderId', 'c');
29216
+ let stopLoss = this.safeValue(order, 'stopLoss');
29217
+ let stopLossPrice = undefined;
29218
+ if (stopLoss !== undefined) {
29219
+ stopLossPrice = this.safeNumber(stopLoss, 'stopLoss');
29220
+ }
29221
+ if ((stopLoss !== undefined) && (typeof stopLoss !== 'number')) {
29222
+ // stopLoss: '{"stopPrice":50,"workingType":"MARK_PRICE","type":"STOP_MARKET","quantity":1}',
29223
+ if (typeof stopLoss === 'string') {
29224
+ stopLoss = JSON.parse(stopLoss);
29225
+ }
29226
+ stopLossPrice = this.safeNumber(stopLoss, 'stopPrice');
29227
+ }
29228
+ let takeProfit = this.safeValue(order, 'takeProfit');
29229
+ let takeProfitPrice = undefined;
29230
+ if (takeProfit !== undefined) {
29231
+ takeProfitPrice = this.safeNumber(takeProfit, 'takeProfit');
29232
+ }
29233
+ if ((takeProfit !== undefined) && (typeof takeProfit !== 'number')) {
29234
+ // takeProfit: '{"stopPrice":150,"workingType":"MARK_PRICE","type":"TAKE_PROFIT_MARKET","quantity":1}',
29235
+ if (typeof takeProfit === 'string') {
29236
+ takeProfit = JSON.parse(takeProfit);
29237
+ }
29238
+ takeProfitPrice = this.safeNumber(takeProfit, 'stopPrice');
29239
+ }
29120
29240
  return this.safeOrder({
29121
29241
  'info': order,
29122
29242
  'id': orderId,
@@ -29133,8 +29253,8 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
29133
29253
  'price': price,
29134
29254
  'stopPrice': this.safeNumber(order, 'stopPrice'),
29135
29255
  'triggerPrice': this.safeNumber(order, 'stopPrice'),
29136
- 'stopLossPrice': this.safeNumber(order, 'stopLoss'),
29137
- 'takeProfitPrice': this.safeNumber(order, 'takeProfit'),
29256
+ 'stopLossPrice': stopLossPrice,
29257
+ 'takeProfitPrice': takeProfitPrice,
29138
29258
  'average': average,
29139
29259
  'cost': undefined,
29140
29260
  'amount': amount,
@@ -29241,6 +29361,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
29241
29361
  * @method
29242
29362
  * @name bingx#cancelAllOrders
29243
29363
  * @description cancel all open orders
29364
+ * @see https://bingx-api.github.io/docs/#/en-us/spot/trade-api.html#Cancel%20orders%20by%20symbol
29244
29365
  * @see https://bingx-api.github.io/docs/#/swapV2/trade-api.html#Cancel%20All%20Orders
29245
29366
  * @param {string} [symbol] unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
29246
29367
  * @param {object} [params] extra parameters specific to the exchange API endpoint
@@ -29251,42 +29372,70 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
29251
29372
  }
29252
29373
  await this.loadMarkets();
29253
29374
  const market = this.market(symbol);
29254
- if (market['type'] !== 'swap') {
29255
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' cancelAllOrders is only supported for swap markets.');
29256
- }
29257
29375
  const request = {
29258
29376
  'symbol': market['id'],
29259
29377
  };
29260
- const response = await this.swapV2PrivateDeleteTradeAllOpenOrders(this.extend(request, params));
29261
- //
29262
- // {
29263
- // "code": 0,
29264
- // "msg": "",
29265
- // "data": {
29266
- // "success": [
29267
- // {
29268
- // "symbol": "LINK-USDT",
29269
- // "orderId": 1597783835095859200,
29270
- // "side": "BUY",
29271
- // "positionSide": "LONG",
29272
- // "type": "TRIGGER_LIMIT",
29273
- // "origQty": "5.0",
29274
- // "price": "9.0000",
29275
- // "executedQty": "0.0",
29276
- // "avgPrice": "0.0000",
29277
- // "cumQuote": "0",
29278
- // "stopPrice": "9.5000",
29279
- // "profit": "",
29280
- // "commission": "",
29281
- // "status": "NEW",
29282
- // "time": 1669776326000,
29283
- // "updateTime": 1669776326000
29284
- // }
29285
- // ],
29286
- // "failed": null
29287
- // }
29288
- // }
29289
- //
29378
+ let response = undefined;
29379
+ if (market['spot']) {
29380
+ response = await this.spotV1PrivatePostTradeCancelOpenOrders(this.extend(request, params));
29381
+ //
29382
+ // {
29383
+ // "code": 0,
29384
+ // "msg": "",
29385
+ // "debugMsg": "",
29386
+ // "data": {
29387
+ // "orders": [{
29388
+ // "symbol": "ADA-USDT",
29389
+ // "orderId": 1740659971369992192,
29390
+ // "transactTime": 1703840651730,
29391
+ // "price": 5,
29392
+ // "stopPrice": 0,
29393
+ // "origQty": 10,
29394
+ // "executedQty": 0,
29395
+ // "cummulativeQuoteQty": 0,
29396
+ // "status": "CANCELED",
29397
+ // "type": "LIMIT",
29398
+ // "side": "SELL"
29399
+ // }]
29400
+ // }
29401
+ // }
29402
+ //
29403
+ }
29404
+ else if (market['swap']) {
29405
+ response = await this.swapV2PrivateDeleteTradeAllOpenOrders(this.extend(request, params));
29406
+ //
29407
+ // {
29408
+ // "code": 0,
29409
+ // "msg": "",
29410
+ // "data": {
29411
+ // "success": [
29412
+ // {
29413
+ // "symbol": "LINK-USDT",
29414
+ // "orderId": 1597783835095859200,
29415
+ // "side": "BUY",
29416
+ // "positionSide": "LONG",
29417
+ // "type": "TRIGGER_LIMIT",
29418
+ // "origQty": "5.0",
29419
+ // "price": "9.0000",
29420
+ // "executedQty": "0.0",
29421
+ // "avgPrice": "0.0000",
29422
+ // "cumQuote": "0",
29423
+ // "stopPrice": "9.5000",
29424
+ // "profit": "",
29425
+ // "commission": "",
29426
+ // "status": "NEW",
29427
+ // "time": 1669776326000,
29428
+ // "updateTime": 1669776326000
29429
+ // }
29430
+ // ],
29431
+ // "failed": null
29432
+ // }
29433
+ // }
29434
+ //
29435
+ }
29436
+ else {
29437
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' cancelAllOrders is only supported for spot and swap markets.');
29438
+ }
29290
29439
  return response;
29291
29440
  }
29292
29441
  async cancelOrders(ids, symbol = undefined, params = {}) {
@@ -29299,6 +29448,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
29299
29448
  * @param {string[]} ids order ids
29300
29449
  * @param {string} symbol unified market symbol, default is undefined
29301
29450
  * @param {object} [params] extra parameters specific to the exchange API endpoint
29451
+ * @param {string[]} [params.clientOrderIds] client order ids
29302
29452
  * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
29303
29453
  */
29304
29454
  if (symbol === undefined) {
@@ -29309,19 +29459,27 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
29309
29459
  const request = {
29310
29460
  'symbol': market['id'],
29311
29461
  };
29462
+ const clientOrderIds = this.safeValue(params, 'clientOrderIds');
29463
+ let idsToParse = ids;
29464
+ const areClientOrderIds = (clientOrderIds !== undefined);
29465
+ if (areClientOrderIds) {
29466
+ idsToParse = clientOrderIds;
29467
+ }
29312
29468
  const parsedIds = [];
29313
- for (let i = 0; i < ids.length; i++) {
29314
- const id = ids[i];
29469
+ for (let i = 0; i < idsToParse.length; i++) {
29470
+ const id = idsToParse[i];
29315
29471
  const stringId = id.toString();
29316
29472
  parsedIds.push(stringId);
29317
29473
  }
29318
29474
  let response = undefined;
29319
29475
  if (market['spot']) {
29320
- request['orderIds'] = parsedIds.join(',');
29476
+ const spotReqKey = areClientOrderIds ? 'clientOrderIds' : 'orderIds';
29477
+ request[spotReqKey] = parsedIds.join(',');
29321
29478
  response = await this.spotV1PrivatePostTradeCancelOrders(this.extend(request, params));
29322
29479
  }
29323
29480
  else {
29324
- request['orderIdList'] = parsedIds;
29481
+ const swapReqKey = areClientOrderIds ? 'ClientOrderIDList' : 'orderIdList';
29482
+ request[swapReqKey] = parsedIds;
29325
29483
  response = await this.swapV2PrivateDeleteTradeBatchOrders(this.extend(request, params));
29326
29484
  }
29327
29485
  //
@@ -45175,8 +45333,8 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
45175
45333
  }
45176
45334
  let marginMode = undefined;
45177
45335
  [marginMode, params] = this.handleMarginModeAndParams('cancelOrders', params);
45178
- const stop = this.safeValue(params, 'stop');
45179
- params = this.omit(params, 'stop');
45336
+ const stop = this.safeValue2(params, 'stop', 'trigger');
45337
+ params = this.omit(params, ['stop', 'trigger']);
45180
45338
  const orderIdList = [];
45181
45339
  for (let i = 0; i < ids.length; i++) {
45182
45340
  const individualId = ids[i];
@@ -45272,8 +45430,8 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
45272
45430
  const request = {
45273
45431
  'symbol': market['id'],
45274
45432
  };
45275
- const stop = this.safeValue(params, 'stop');
45276
- params = this.omit(params, 'stop');
45433
+ const stop = this.safeValue2(params, 'stop', 'trigger');
45434
+ params = this.omit(params, ['stop', 'trigger']);
45277
45435
  let response = undefined;
45278
45436
  if (market['spot']) {
45279
45437
  if (marginMode !== undefined) {
@@ -52312,8 +52470,8 @@ class bitmart extends _abstract_bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
52312
52470
  response = await this.privatePostSpotV3CancelOrder(this.extend(request, params));
52313
52471
  }
52314
52472
  else {
52315
- const stop = this.safeValue(params, 'stop');
52316
- params = this.omit(params, ['stop']);
52473
+ const stop = this.safeValue2(params, 'stop', 'trigger');
52474
+ params = this.omit(params, ['stop', 'trigger']);
52317
52475
  if (!stop) {
52318
52476
  response = await this.privatePostContractPrivateCancelOrder(this.extend(request, params));
52319
52477
  }
@@ -67114,6 +67272,12 @@ class bitstamp extends _abstract_bitstamp_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
67114
67272
  * @method
67115
67273
  * @name bitstamp#createOrder
67116
67274
  * @description create a trade order
67275
+ * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenInstantBuyOrder
67276
+ * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenMarketBuyOrder
67277
+ * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenLimitBuyOrder
67278
+ * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenInstantSellOrder
67279
+ * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenMarketSellOrder
67280
+ * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenLimitSellOrder
67117
67281
  * @param {string} symbol unified symbol of the market to create an order in
67118
67282
  * @param {string} type 'market' or 'limit'
67119
67283
  * @param {string} side 'buy' or 'sell'
@@ -67124,27 +67288,42 @@ class bitstamp extends _abstract_bitstamp_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
67124
67288
  */
67125
67289
  await this.loadMarkets();
67126
67290
  const market = this.market(symbol);
67127
- let method = 'privatePost' + this.capitalize(side);
67128
67291
  const request = {
67129
67292
  'pair': market['id'],
67130
67293
  'amount': this.amountToPrecision(symbol, amount),
67131
67294
  };
67295
+ const clientOrderId = this.safeString2(params, 'client_order_id', 'clientOrderId');
67296
+ if (clientOrderId !== undefined) {
67297
+ request['client_order_id'] = clientOrderId;
67298
+ params = this.omit(params, ['clientOrderId']);
67299
+ }
67300
+ let response = undefined;
67301
+ const capitalizedSide = this.capitalize(side);
67132
67302
  if (type === 'market') {
67133
- method += 'Market';
67303
+ if (capitalizedSide === 'Buy') {
67304
+ response = await this.privatePostBuyMarketPair(this.extend(request, params));
67305
+ }
67306
+ else {
67307
+ response = await this.privatePostSellMarketPair(this.extend(request, params));
67308
+ }
67134
67309
  }
67135
67310
  else if (type === 'instant') {
67136
- method += 'Instant';
67311
+ if (capitalizedSide === 'Buy') {
67312
+ response = await this.privatePostBuyInstantPair(this.extend(request, params));
67313
+ }
67314
+ else {
67315
+ response = await this.privatePostSellInstantPair(this.extend(request, params));
67316
+ }
67137
67317
  }
67138
67318
  else {
67139
67319
  request['price'] = this.priceToPrecision(symbol, price);
67320
+ if (capitalizedSide === 'Buy') {
67321
+ response = await this.privatePostBuyPair(this.extend(request, params));
67322
+ }
67323
+ else {
67324
+ response = await this.privatePostSellPair(this.extend(request, params));
67325
+ }
67140
67326
  }
67141
- method += 'Pair';
67142
- const clientOrderId = this.safeString2(params, 'client_order_id', 'clientOrderId');
67143
- if (clientOrderId !== undefined) {
67144
- request['client_order_id'] = clientOrderId;
67145
- params = this.omit(params, ['client_order_id', 'clientOrderId']);
67146
- }
67147
- const response = await this[method](this.extend(request, params));
67148
67327
  const order = this.parseOrder(response, market);
67149
67328
  order['type'] = type;
67150
67329
  return order;
@@ -67177,13 +67356,16 @@ class bitstamp extends _abstract_bitstamp_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
67177
67356
  await this.loadMarkets();
67178
67357
  let market = undefined;
67179
67358
  const request = {};
67180
- let method = 'privatePostCancelAllOrders';
67359
+ let response = undefined;
67181
67360
  if (symbol !== undefined) {
67182
67361
  market = this.market(symbol);
67183
67362
  request['pair'] = market['id'];
67184
- method = 'privatePostCancelAllOrdersPair';
67363
+ response = await this.privatePostCancelAllOrdersPair(this.extend(request, params));
67185
67364
  }
67186
- return await this[method](this.extend(request, params));
67365
+ else {
67366
+ response = await this.privatePostCancelAllOrders(this.extend(request, params));
67367
+ }
67368
+ return response;
67187
67369
  }
67188
67370
  parseOrderStatus(status) {
67189
67371
  const statuses = {
@@ -163919,7 +164101,7 @@ class kucoinfutures extends _abstract_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_
163919
164101
  * @see https://www.kucoin.com/docs/rest/futures-trading/orders/cancel-multiple-futures-stop-orders
163920
164102
  * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
163921
164103
  * @param {object} [params] extra parameters specific to the exchange API endpoint
163922
- * @param {object} [params.stop] When true, all the trigger orders will be cancelled
164104
+ * @param {object} [params.trigger] When true, all the trigger orders will be cancelled
163923
164105
  * @returns Response from the exchange
163924
164106
  */
163925
164107
  await this.loadMarkets();
@@ -163927,8 +164109,8 @@ class kucoinfutures extends _abstract_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_
163927
164109
  if (symbol !== undefined) {
163928
164110
  request['symbol'] = this.marketId(symbol);
163929
164111
  }
163930
- const stop = this.safeValue(params, 'stop');
163931
- params = this.omit(params, 'stop');
164112
+ const stop = this.safeValue2(params, 'stop', 'trigger');
164113
+ params = this.omit(params, ['stop', 'trigger']);
163932
164114
  let response = undefined;
163933
164115
  if (stop) {
163934
164116
  response = await this.futuresPrivateDeleteStopOrders(this.extend(request, params));
@@ -164097,7 +164279,7 @@ class kucoinfutures extends _abstract_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_
164097
164279
  * @param {int} [since] timestamp in ms of the earliest order to retrieve
164098
164280
  * @param {int} [limit] The maximum number of orders to retrieve
164099
164281
  * @param {object} [params] exchange specific parameters
164100
- * @param {bool} [params.stop] set to true to retrieve untriggered stop orders
164282
+ * @param {bool} [params.trigger] set to true to retrieve untriggered stop orders
164101
164283
  * @param {int} [params.until] End time in ms
164102
164284
  * @param {string} [params.side] buy or sell
164103
164285
  * @param {string} [params.type] limit or market
@@ -164110,9 +164292,9 @@ class kucoinfutures extends _abstract_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_
164110
164292
  if (paginate) {
164111
164293
  return await this.fetchPaginatedCallDynamic('fetchOrdersByStatus', symbol, since, limit, params);
164112
164294
  }
164113
- const stop = this.safeValue(params, 'stop');
164295
+ const stop = this.safeValue2(params, 'stop', 'trigger');
164114
164296
  const until = this.safeInteger2(params, 'until', 'till');
164115
- params = this.omit(params, ['stop', 'until', 'till']);
164297
+ params = this.omit(params, ['stop', 'until', 'till', 'trigger']);
164116
164298
  if (status === 'closed') {
164117
164299
  status = 'done';
164118
164300
  }
@@ -173145,7 +173327,13 @@ class lykke extends _abstract_lykke_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
173145
173327
  };
173146
173328
  // publicGetTickers or publicGetPrices
173147
173329
  const method = this.safeString(this.options, 'fetchTickerMethod', 'publicGetTickers');
173148
- const response = await this[method](this.extend(request, params));
173330
+ let response = undefined;
173331
+ if (method === 'publicGetPrices') {
173332
+ response = await this.publicGetPrices(this.extend(request, params));
173333
+ }
173334
+ else {
173335
+ response = await this.publicGetTickers(this.extend(request, params));
173336
+ }
173149
173337
  const ticker = this.safeValue(response, 'payload', []);
173150
173338
  //
173151
173339
  // publicGetTickers
@@ -173499,8 +173687,13 @@ class lykke extends _abstract_lykke_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
173499
173687
  if (type === 'limit') {
173500
173688
  query['price'] = parseFloat(this.priceToPrecision(market['symbol'], price));
173501
173689
  }
173502
- const method = 'privatePostOrders' + this.capitalize(type);
173503
- const result = await this[method](this.extend(query, params));
173690
+ let result = undefined;
173691
+ if (this.capitalize(type) === 'Market') {
173692
+ result = await this.privatePostOrdersMarket(this.extend(query, params));
173693
+ }
173694
+ else {
173695
+ result = await this.privatePostOrdersLimit(this.extend(query, params));
173696
+ }
173504
173697
  //
173505
173698
  // market
173506
173699
  //
@@ -187311,7 +187504,7 @@ class okcoin extends _abstract_okcoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
187311
187504
  // 'ordId': id,
187312
187505
  };
187313
187506
  const clientOrderId = this.safeString2(params, 'clOrdId', 'clientOrderId');
187314
- const stop = this.safeValue(params, 'stop');
187507
+ const stop = this.safeValue2(params, 'stop', 'trigger');
187315
187508
  if (stop) {
187316
187509
  if (clientOrderId !== undefined) {
187317
187510
  request['algoClOrdId'] = clientOrderId;
@@ -187328,7 +187521,7 @@ class okcoin extends _abstract_okcoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
187328
187521
  request['ordId'] = id;
187329
187522
  }
187330
187523
  }
187331
- const query = this.omit(params, ['clientOrderId', 'stop']);
187524
+ const query = this.omit(params, ['clientOrderId', 'stop', 'trigger']);
187332
187525
  let response = undefined;
187333
187526
  if (stop) {
187334
187527
  response = await this.privateGetTradeOrderAlgo(this.extend(request, query));
@@ -191494,12 +191687,13 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
191494
191687
  * @param {string} id order id
191495
191688
  * @param {string} symbol unified symbol of the market the order was made in
191496
191689
  * @param {object} [params] extra parameters specific to the exchange API endpoint
191690
+ * @param {boolean} [params.trigger] true if trigger orders
191497
191691
  * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
191498
191692
  */
191499
191693
  if (symbol === undefined) {
191500
191694
  throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
191501
191695
  }
191502
- const stop = this.safeValue(params, 'stop');
191696
+ const stop = this.safeValue2(params, 'stop', 'trigger');
191503
191697
  if (stop) {
191504
191698
  const orderInner = await this.cancelOrders([id], symbol, params);
191505
191699
  return this.safeValue(orderInner, 0);
@@ -191871,6 +192065,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
191871
192065
  * @param {string} id the order id
191872
192066
  * @param {string} symbol unified market symbol
191873
192067
  * @param {object} [params] extra and exchange specific parameters
192068
+ * @param {boolean} [params.trigger] true if fetching trigger orders
191874
192069
  * @returns [an order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
191875
192070
  */
191876
192071
  if (symbol === undefined) {
@@ -191888,7 +192083,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
191888
192083
  const options = this.safeValue(this.options, 'fetchOrder', {});
191889
192084
  const defaultMethod = this.safeString(options, 'method', 'privateGetTradeOrder');
191890
192085
  let method = this.safeString(params, 'method', defaultMethod);
191891
- const stop = this.safeValue(params, 'stop');
192086
+ const stop = this.safeValue2(params, 'stop', 'trigger');
191892
192087
  if (stop) {
191893
192088
  method = 'privateGetTradeOrderAlgo';
191894
192089
  if (clientOrderId !== undefined) {
@@ -191906,7 +192101,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
191906
192101
  request['ordId'] = id;
191907
192102
  }
191908
192103
  }
191909
- const query = this.omit(params, ['method', 'clOrdId', 'clientOrderId', 'stop']);
192104
+ const query = this.omit(params, ['method', 'clOrdId', 'clientOrderId', 'stop', 'trigger']);
191910
192105
  let response = undefined;
191911
192106
  if (method === 'privateGetTradeOrderAlgo') {
191912
192107
  response = await this.privateGetTradeOrderAlgo(this.extend(request, query));
@@ -192062,7 +192257,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
192062
192257
  const defaultMethod = this.safeString(options, 'method', 'privateGetTradeOrdersPending');
192063
192258
  let method = this.safeString(params, 'method', defaultMethod);
192064
192259
  const ordType = this.safeString(params, 'ordType');
192065
- const stop = this.safeValue(params, 'stop');
192260
+ const stop = this.safeValue2(params, 'stop', 'trigger');
192066
192261
  if (stop || (ordType in algoOrderTypes)) {
192067
192262
  method = 'privateGetTradeOrdersAlgoPending';
192068
192263
  if (stop) {
@@ -192071,7 +192266,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
192071
192266
  }
192072
192267
  }
192073
192268
  }
192074
- const query = this.omit(params, ['method', 'stop']);
192269
+ const query = this.omit(params, ['method', 'stop', 'trigger']);
192075
192270
  let response = undefined;
192076
192271
  if (method === 'privateGetTradeOrdersAlgoPending') {
192077
192272
  response = await this.privateGetTradeOrdersAlgoPending(this.extend(request, query));
@@ -192224,7 +192419,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
192224
192419
  const defaultMethod = this.safeString(options, 'method', 'privateGetTradeOrdersHistory');
192225
192420
  let method = this.safeString(params, 'method', defaultMethod);
192226
192421
  const ordType = this.safeString(params, 'ordType');
192227
- const stop = this.safeValue(params, 'stop');
192422
+ const stop = this.safeValue2(params, 'stop', 'trigger');
192228
192423
  if (stop || (ordType in algoOrderTypes)) {
192229
192424
  method = 'privateGetTradeOrdersAlgoHistory';
192230
192425
  const algoId = this.safeString(params, 'algoId');
@@ -192249,7 +192444,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
192249
192444
  query = this.omit(query, ['until', 'till']);
192250
192445
  }
192251
192446
  }
192252
- const send = this.omit(query, ['method', 'stop', 'ordType']);
192447
+ const send = this.omit(query, ['method', 'stop', 'ordType', 'trigger']);
192253
192448
  let response = undefined;
192254
192449
  if (method === 'privateGetTradeOrdersAlgoHistory') {
192255
192450
  response = await this.privateGetTradeOrdersAlgoHistory(this.extend(request, send));
@@ -192411,7 +192606,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
192411
192606
  const defaultMethod = this.safeString(options, 'method', 'privateGetTradeOrdersHistory');
192412
192607
  let method = this.safeString(params, 'method', defaultMethod);
192413
192608
  const ordType = this.safeString(params, 'ordType');
192414
- const stop = this.safeValue(params, 'stop');
192609
+ const stop = this.safeValue2(params, 'stop', 'trigger');
192415
192610
  if (stop || (ordType in algoOrderTypes)) {
192416
192611
  method = 'privateGetTradeOrdersAlgoHistory';
192417
192612
  if (stop) {
@@ -192432,7 +192627,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
192432
192627
  }
192433
192628
  request['state'] = 'filled';
192434
192629
  }
192435
- const send = this.omit(query, ['method', 'stop']);
192630
+ const send = this.omit(query, ['method', 'stop', 'trigger']);
192436
192631
  let response = undefined;
192437
192632
  if (method === 'privateGetTradeOrdersAlgoHistory') {
192438
192633
  response = await this.privateGetTradeOrdersAlgoHistory(this.extend(request, send));
@@ -205894,9 +206089,15 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
205894
206089
  if (symbol !== undefined) {
205895
206090
  request['symbol'] = this.marketId(symbol);
205896
206091
  }
205897
- const stop = this.safeValue(params, 'stop');
205898
- const method = stop ? 'privateDeleteStopOrders' : 'privateDeleteOrders';
205899
- const response = await this[method](this.extend(request, params));
206092
+ const stop = this.safeValue2(params, 'stop', 'trigger');
206093
+ params = this.omit(params, ['stop', 'trigger']);
206094
+ let response = undefined;
206095
+ if (stop) {
206096
+ response = await this.privateDeleteStopOrders(this.extend(request, params));
206097
+ }
206098
+ else {
206099
+ response = await this.privateDeleteOrders(this.extend(request, params));
206100
+ }
205900
206101
  //
205901
206102
  // {
205902
206103
  // "code": "200000",
@@ -205958,9 +206159,9 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
205958
206159
  * @returns An [array of order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
205959
206160
  */
205960
206161
  await this.loadMarkets();
205961
- const stop = this.safeValue(params, 'stop');
206162
+ const stop = this.safeValue2(params, 'stop', 'trigger');
205962
206163
  const until = this.safeInteger2(params, 'until', 'till');
205963
- params = this.omit(params, ['stop', 'until', 'till']);
206164
+ params = this.omit(params, ['triger', 'stop', 'until', 'till']);
205964
206165
  if (status === 'closed') {
205965
206166
  status = 'done';
205966
206167
  }
@@ -205982,8 +206183,13 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
205982
206183
  if (until !== undefined) {
205983
206184
  request['endAt'] = until;
205984
206185
  }
205985
- const method = stop ? 'privateGetStopOrders' : 'privateGetOrders';
205986
- const response = await this[method](this.extend(request, params));
206186
+ let response = undefined;
206187
+ if (stop) {
206188
+ response = await this.privateGetStopOrders(this.extend(request, params));
206189
+ }
206190
+ else {
206191
+ response = await this.privateGetOrders(this.extend(request, params));
206192
+ }
205987
206193
  //
205988
206194
  // {
205989
206195
  // "code": "200000",
@@ -206093,20 +206299,20 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
206093
206299
  */
206094
206300
  await this.loadMarkets();
206095
206301
  const request = {};
206096
- let method = 'privateGetOrdersOrderId';
206302
+ let response = undefined;
206097
206303
  if (id === undefined) {
206098
206304
  const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');
206099
206305
  if (clientOrderId === undefined) {
206100
206306
  throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder(this.id + ' fetchOrder() requires parameter id or params.clientOid');
206101
206307
  }
206102
206308
  request['clientOid'] = clientOrderId;
206103
- method = 'privateGetOrdersByClientOid';
206104
206309
  params = this.omit(params, ['clientOid', 'clientOrderId']);
206310
+ response = await this.privateGetClientOrderIdClientOid(this.extend(request, params));
206105
206311
  }
206106
206312
  else {
206107
206313
  request['order-id'] = id;
206314
+ response = await this.privateGetOrdersOrderId(this.extend(request, params));
206108
206315
  }
206109
- const response = await this[method](this.extend(request, params));
206110
206316
  //
206111
206317
  // {
206112
206318
  // "code": "200000",
@@ -206426,7 +206632,7 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
206426
206632
  const version = this.safeString(params, 'version', defaultVersion);
206427
206633
  const tail = '/api/' + version + '/' + this.implodeParams(path, params);
206428
206634
  url += tail;
206429
- const query = this.omit(params, path);
206635
+ const query = this.omit(params, this.extractParams(path));
206430
206636
  const queryLength = Object.keys(query).length;
206431
206637
  if (api === 'public') {
206432
206638
  if (queryLength) {
@@ -209342,25 +209548,27 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209342
209548
  const listenKeyRefreshRate = this.safeInteger(this.options, 'listenKeyRefreshRate', 1200000);
209343
209549
  const delay = this.sum(listenKeyRefreshRate, 10000);
209344
209550
  if (time - lastAuthenticatedTime > delay) {
209345
- let method = 'publicPostUserDataStream';
209551
+ let response = undefined;
209346
209552
  if (type === 'future') {
209347
- method = 'fapiPrivatePostListenKey';
209553
+ response = await this.fapiPrivatePostListenKey(query);
209348
209554
  }
209349
209555
  else if (type === 'delivery') {
209350
- method = 'dapiPrivatePostListenKey';
209556
+ response = await this.dapiPrivatePostListenKey(query);
209351
209557
  }
209352
209558
  else if (type === 'margin' && isCrossMargin) {
209353
- method = 'sapiPostUserDataStream';
209559
+ response = await this.sapiPostUserDataStream(query);
209354
209560
  }
209355
209561
  else if (isIsolatedMargin) {
209356
- method = 'sapiPostUserDataStreamIsolated';
209357
209562
  if (symbol === undefined) {
209358
209563
  throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.ArgumentsRequired(this.id + ' authenticate() requires a symbol argument for isolated margin mode');
209359
209564
  }
209360
209565
  const marketId = this.marketId(symbol);
209361
209566
  query = this.extend(query, { 'symbol': marketId });
209567
+ response = await this.sapiPostUserDataStreamIsolated(query);
209568
+ }
209569
+ else {
209570
+ response = await this.publicPostUserDataStream(query);
209362
209571
  }
209363
- const response = await this[method](query);
209364
209572
  this.options[type] = this.extend(options, {
209365
209573
  'listenKey': this.safeString(response, 'listenKey'),
209366
209574
  'lastAuthenticatedTime': time,
@@ -209386,26 +209594,27 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209386
209594
  // A network error happened: we can't renew a listen key that does not exist.
209387
209595
  return;
209388
209596
  }
209389
- let method = 'publicPutUserDataStream';
209390
209597
  const request = {};
209391
209598
  const symbol = this.safeString(params, 'symbol');
209392
209599
  const sendParams = this.omit(params, ['type', 'symbol']);
209393
- if (type === 'future') {
209394
- method = 'fapiPrivatePutListenKey';
209395
- }
209396
- else if (type === 'delivery') {
209397
- method = 'dapiPrivatePutListenKey';
209398
- }
209399
- else {
209400
- request['listenKey'] = listenKey;
209401
- if (type === 'margin') {
209402
- request['symbol'] = symbol;
209403
- method = 'sapiPutUserDataStream';
209404
- }
209405
- }
209406
209600
  const time = this.milliseconds();
209407
209601
  try {
209408
- await this[method](this.extend(request, sendParams));
209602
+ if (type === 'future') {
209603
+ await this.fapiPrivatePutListenKey(this.extend(request, sendParams));
209604
+ }
209605
+ else if (type === 'delivery') {
209606
+ await this.dapiPrivatePutListenKey(this.extend(request, sendParams));
209607
+ }
209608
+ else {
209609
+ request['listenKey'] = listenKey;
209610
+ if (type === 'margin') {
209611
+ request['symbol'] = symbol;
209612
+ await this.sapiPutUserDataStream(this.extend(request, sendParams));
209613
+ }
209614
+ else {
209615
+ await this.publicPutUserDataStream(this.extend(request, sendParams));
209616
+ }
209617
+ }
209409
209618
  }
209410
209619
  catch (error) {
209411
209620
  const url = this.urls['api']['ws'][type] + '/' + this.options[type]['listenKey'];
@@ -211133,6 +211342,7 @@ class bingx extends _bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
211133
211342
  },
211134
211343
  },
211135
211344
  'options': {
211345
+ 'listenKeyRefreshRate': 3540000,
211136
211346
  'ws': {
211137
211347
  'gunzip': true,
211138
211348
  },
@@ -211730,7 +211940,7 @@ class bingx extends _bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
211730
211940
  const lastAuthenticatedTime = this.safeInteger(this.options, 'lastAuthenticatedTime', 0);
211731
211941
  const listenKeyRefreshRate = this.safeInteger(this.options, 'listenKeyRefreshRate', 3600000); // 1 hour
211732
211942
  if (time - lastAuthenticatedTime > listenKeyRefreshRate) {
211733
- const response = await this.userAuthPrivatePostUserDataStream({ 'listenKey': listenKey }); // extend the expiry
211943
+ const response = await this.userAuthPrivatePutUserDataStream({ 'listenKey': listenKey }); // extend the expiry
211734
211944
  this.options['listenKey'] = this.safeString(response, 'listenKey');
211735
211945
  this.options['lastAuthenticatedTime'] = time;
211736
211946
  }
@@ -223184,7 +223394,7 @@ class bybit extends _bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
223184
223394
  */
223185
223395
  await this.loadMarkets();
223186
223396
  symbols = this.marketSymbols(symbols, undefined, false);
223187
- const messageHash = 'tickers::' + symbols.join(',');
223397
+ const messageHashes = [];
223188
223398
  const url = this.getUrlByMarketType(symbols[0], false, params);
223189
223399
  params = this.cleanParams(params);
223190
223400
  const options = this.safeValue(this.options, 'watchTickers', {});
@@ -223194,8 +223404,9 @@ class bybit extends _bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
223194
223404
  for (let i = 0; i < marketIds.length; i++) {
223195
223405
  const marketId = marketIds[i];
223196
223406
  topics.push(topic + '.' + marketId);
223407
+ messageHashes.push('ticker:' + symbols[i]);
223197
223408
  }
223198
- const ticker = await this.watchTopics(url, messageHash, topics, params);
223409
+ const ticker = await this.watchTopics(url, messageHashes, topics, params);
223199
223410
  if (this.newUpdates) {
223200
223411
  return ticker;
223201
223412
  }
@@ -223331,17 +223542,6 @@ class bybit extends _bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
223331
223542
  this.tickers[symbol] = parsed;
223332
223543
  const messageHash = 'ticker:' + symbol;
223333
223544
  client.resolve(this.tickers[symbol], messageHash);
223334
- // watchTickers part
223335
- const messageHashes = this.findMessageHashes(client, 'tickers::');
223336
- for (let i = 0; i < messageHashes.length; i++) {
223337
- const messageHashTicker = messageHashes[i];
223338
- const parts = messageHashTicker.split('::');
223339
- const symbolsString = parts[1];
223340
- const symbols = symbolsString.split(',');
223341
- if (this.inArray(parsed['symbol'], symbols)) {
223342
- client.resolve(parsed, messageHashTicker);
223343
- }
223344
- }
223345
223545
  }
223346
223546
  async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
223347
223547
  /**
@@ -223862,10 +224062,15 @@ class bybit extends _bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
223862
224062
  }
223863
224063
  const trades = this.myTrades;
223864
224064
  const symbols = {};
223865
- const method = spot ? 'parseWsTrade' : 'parseTrade';
223866
224065
  for (let i = 0; i < data.length; i++) {
223867
224066
  const rawTrade = data[i];
223868
- const parsed = this[method](rawTrade);
224067
+ let parsed = undefined;
224068
+ if (spot) {
224069
+ parsed = this.parseWsTrade(rawTrade);
224070
+ }
224071
+ else {
224072
+ parsed = this.parseTrade(rawTrade);
224073
+ }
223869
224074
  const symbol = parsed['symbol'];
223870
224075
  symbols[symbol] = true;
223871
224076
  trades.append(parsed);
@@ -283119,6 +283324,752 @@ class yobit extends _abstract_yobit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
283119
283324
  }
283120
283325
 
283121
283326
 
283327
+ /***/ }),
283328
+
283329
+ /***/ 5934:
283330
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
283331
+
283332
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
283333
+ /* harmony export */ Z: () => (/* binding */ zaif)
283334
+ /* harmony export */ });
283335
+ /* harmony import */ var _abstract_zaif_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5224);
283336
+ /* harmony import */ var _base_errors_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6689);
283337
+ /* harmony import */ var _base_Precise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2194);
283338
+ /* harmony import */ var _base_functions_number_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9292);
283339
+ /* harmony import */ var _static_dependencies_noble_hashes_sha512_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7110);
283340
+ // ---------------------------------------------------------------------------
283341
+
283342
+
283343
+
283344
+
283345
+
283346
+ // ---------------------------------------------------------------------------
283347
+ /**
283348
+ * @class zaif
283349
+ * @augments Exchange
283350
+ */
283351
+ class zaif extends _abstract_zaif_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
283352
+ describe() {
283353
+ return this.deepExtend(super.describe(), {
283354
+ 'id': 'zaif',
283355
+ 'name': 'Zaif',
283356
+ 'countries': ['JP'],
283357
+ // 10 requests per second = 1000ms / 10 = 100ms between requests (public market endpoints)
283358
+ 'rateLimit': 100,
283359
+ 'version': '1',
283360
+ 'has': {
283361
+ 'CORS': undefined,
283362
+ 'spot': true,
283363
+ 'margin': undefined,
283364
+ 'swap': false,
283365
+ 'future': false,
283366
+ 'option': false,
283367
+ 'cancelOrder': true,
283368
+ 'createMarketOrder': false,
283369
+ 'createOrder': true,
283370
+ 'fetchBalance': true,
283371
+ 'fetchClosedOrders': true,
283372
+ 'fetchFundingHistory': false,
283373
+ 'fetchFundingRate': false,
283374
+ 'fetchFundingRateHistory': false,
283375
+ 'fetchFundingRates': false,
283376
+ 'fetchIndexOHLCV': false,
283377
+ 'fetchMarkets': true,
283378
+ 'fetchMarkOHLCV': false,
283379
+ 'fetchOpenInterestHistory': false,
283380
+ 'fetchOpenOrders': true,
283381
+ 'fetchOrderBook': true,
283382
+ 'fetchPremiumIndexOHLCV': false,
283383
+ 'fetchTicker': true,
283384
+ 'fetchTrades': true,
283385
+ 'fetchTradingFee': false,
283386
+ 'fetchTradingFees': false,
283387
+ 'withdraw': true,
283388
+ },
283389
+ 'urls': {
283390
+ 'logo': 'https://user-images.githubusercontent.com/1294454/27766927-39ca2ada-5eeb-11e7-972f-1b4199518ca6.jpg',
283391
+ 'api': {
283392
+ 'rest': 'https://api.zaif.jp',
283393
+ },
283394
+ 'www': 'https://zaif.jp',
283395
+ 'doc': [
283396
+ 'https://techbureau-api-document.readthedocs.io/ja/latest/index.html',
283397
+ 'https://corp.zaif.jp/api-docs',
283398
+ 'https://corp.zaif.jp/api-docs/api_links',
283399
+ 'https://www.npmjs.com/package/zaif.jp',
283400
+ 'https://github.com/you21979/node-zaif',
283401
+ ],
283402
+ 'fees': 'https://zaif.jp/fee?lang=en',
283403
+ },
283404
+ 'fees': {
283405
+ 'trading': {
283406
+ 'percentage': true,
283407
+ 'taker': this.parseNumber('0.001'),
283408
+ 'maker': this.parseNumber('0'),
283409
+ },
283410
+ },
283411
+ 'api': {
283412
+ 'public': {
283413
+ 'get': {
283414
+ 'depth/{pair}': 1,
283415
+ 'currencies/{pair}': 1,
283416
+ 'currencies/all': 1,
283417
+ 'currency_pairs/{pair}': 1,
283418
+ 'currency_pairs/all': 1,
283419
+ 'last_price/{pair}': 1,
283420
+ 'ticker/{pair}': 1,
283421
+ 'trades/{pair}': 1,
283422
+ },
283423
+ },
283424
+ 'private': {
283425
+ 'post': {
283426
+ 'active_orders': 5,
283427
+ 'cancel_order': 5,
283428
+ 'deposit_history': 5,
283429
+ 'get_id_info': 5,
283430
+ 'get_info': 10,
283431
+ 'get_info2': 5,
283432
+ 'get_personal_info': 5,
283433
+ 'trade': 5,
283434
+ 'trade_history': 50,
283435
+ 'withdraw': 5,
283436
+ 'withdraw_history': 5,
283437
+ },
283438
+ },
283439
+ 'ecapi': {
283440
+ 'post': {
283441
+ 'createInvoice': 1,
283442
+ 'getInvoice': 1,
283443
+ 'getInvoiceIdsByOrderNumber': 1,
283444
+ 'cancelInvoice': 1,
283445
+ },
283446
+ },
283447
+ 'tlapi': {
283448
+ 'post': {
283449
+ 'get_positions': 66,
283450
+ 'position_history': 66,
283451
+ 'active_positions': 5,
283452
+ 'create_position': 33,
283453
+ 'change_position': 33,
283454
+ 'cancel_position': 33, // 3 in 10 seconds
283455
+ },
283456
+ },
283457
+ 'fapi': {
283458
+ 'get': {
283459
+ 'groups/{group_id}': 1,
283460
+ 'last_price/{group_id}/{pair}': 1,
283461
+ 'ticker/{group_id}/{pair}': 1,
283462
+ 'trades/{group_id}/{pair}': 1,
283463
+ 'depth/{group_id}/{pair}': 1,
283464
+ },
283465
+ },
283466
+ },
283467
+ 'options': {},
283468
+ 'precisionMode': _base_functions_number_js__WEBPACK_IMPORTED_MODULE_1__/* .TICK_SIZE */ .sh,
283469
+ 'exceptions': {
283470
+ 'exact': {
283471
+ 'unsupported currency_pair': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest, // {"error": "unsupported currency_pair"}
283472
+ },
283473
+ 'broad': {},
283474
+ },
283475
+ });
283476
+ }
283477
+ async fetchMarkets(params = {}) {
283478
+ /**
283479
+ * @method
283480
+ * @name zaif#fetchMarkets
283481
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id12
283482
+ * @description retrieves data on all markets for zaif
283483
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283484
+ * @returns {object[]} an array of objects representing market data
283485
+ */
283486
+ const markets = await this.publicGetCurrencyPairsAll(params);
283487
+ //
283488
+ // [
283489
+ // {
283490
+ // "aux_unit_point": 0,
283491
+ // "item_japanese": "\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3",
283492
+ // "aux_unit_step": 5.0,
283493
+ // "description": "\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3\u30fb\u65e5\u672c\u5186\u306e\u53d6\u5f15\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059",
283494
+ // "item_unit_min": 0.001,
283495
+ // "event_number": 0,
283496
+ // "currency_pair": "btc_jpy",
283497
+ // "is_token": false,
283498
+ // "aux_unit_min": 5.0,
283499
+ // "aux_japanese": "\u65e5\u672c\u5186",
283500
+ // "id": 1,
283501
+ // "item_unit_step": 0.0001,
283502
+ // "name": "BTC/JPY",
283503
+ // "seq": 0,
283504
+ // "title": "BTC/JPY"
283505
+ // }
283506
+ // ]
283507
+ //
283508
+ return this.parseMarkets(markets);
283509
+ }
283510
+ parseMarket(market) {
283511
+ const id = this.safeString(market, 'currency_pair');
283512
+ const name = this.safeString(market, 'name');
283513
+ const [baseId, quoteId] = name.split('/');
283514
+ const base = this.safeCurrencyCode(baseId);
283515
+ const quote = this.safeCurrencyCode(quoteId);
283516
+ const symbol = base + '/' + quote;
283517
+ return {
283518
+ 'id': id,
283519
+ 'symbol': symbol,
283520
+ 'base': base,
283521
+ 'quote': quote,
283522
+ 'settle': undefined,
283523
+ 'baseId': baseId,
283524
+ 'quoteId': quoteId,
283525
+ 'settleId': undefined,
283526
+ 'type': 'spot',
283527
+ 'spot': true,
283528
+ 'margin': undefined,
283529
+ 'swap': false,
283530
+ 'future': false,
283531
+ 'option': false,
283532
+ 'active': undefined,
283533
+ 'contract': false,
283534
+ 'linear': undefined,
283535
+ 'inverse': undefined,
283536
+ 'contractSize': undefined,
283537
+ 'expiry': undefined,
283538
+ 'expiryDatetime': undefined,
283539
+ 'strike': undefined,
283540
+ 'optionType': undefined,
283541
+ 'precision': {
283542
+ 'amount': this.safeNumber(market, 'item_unit_step'),
283543
+ 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'aux_unit_point'))),
283544
+ },
283545
+ 'limits': {
283546
+ 'leverage': {
283547
+ 'min': undefined,
283548
+ 'max': undefined,
283549
+ },
283550
+ 'amount': {
283551
+ 'min': this.safeNumber(market, 'item_unit_min'),
283552
+ 'max': undefined,
283553
+ },
283554
+ 'price': {
283555
+ 'min': this.safeNumber(market, 'aux_unit_min'),
283556
+ 'max': undefined,
283557
+ },
283558
+ 'cost': {
283559
+ 'min': undefined,
283560
+ 'max': undefined,
283561
+ },
283562
+ },
283563
+ 'created': undefined,
283564
+ 'info': market,
283565
+ };
283566
+ }
283567
+ parseBalance(response) {
283568
+ const balances = this.safeValue(response, 'return', {});
283569
+ const deposit = this.safeValue(balances, 'deposit');
283570
+ const result = {
283571
+ 'info': response,
283572
+ 'timestamp': undefined,
283573
+ 'datetime': undefined,
283574
+ };
283575
+ const funds = this.safeValue(balances, 'funds', {});
283576
+ const currencyIds = Object.keys(funds);
283577
+ for (let i = 0; i < currencyIds.length; i++) {
283578
+ const currencyId = currencyIds[i];
283579
+ const code = this.safeCurrencyCode(currencyId);
283580
+ const balance = this.safeString(funds, currencyId);
283581
+ const account = this.account();
283582
+ account['free'] = balance;
283583
+ account['total'] = balance;
283584
+ if (deposit !== undefined) {
283585
+ if (currencyId in deposit) {
283586
+ account['total'] = this.safeString(deposit, currencyId);
283587
+ }
283588
+ }
283589
+ result[code] = account;
283590
+ }
283591
+ return this.safeBalance(result);
283592
+ }
283593
+ async fetchBalance(params = {}) {
283594
+ /**
283595
+ * @method
283596
+ * @name zaif#fetchBalance
283597
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id10
283598
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
283599
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283600
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
283601
+ */
283602
+ await this.loadMarkets();
283603
+ const response = await this.privatePostGetInfo(params);
283604
+ return this.parseBalance(response);
283605
+ }
283606
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
283607
+ /**
283608
+ * @method
283609
+ * @name zaif#fetchOrderBook
283610
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id34
283611
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
283612
+ * @param {string} symbol unified symbol of the market to fetch the order book for
283613
+ * @param {int} [limit] the maximum amount of order book entries to return
283614
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283615
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
283616
+ */
283617
+ await this.loadMarkets();
283618
+ const market = this.market(symbol);
283619
+ const request = {
283620
+ 'pair': market['id'],
283621
+ };
283622
+ const response = await this.publicGetDepthPair(this.extend(request, params));
283623
+ return this.parseOrderBook(response, market['symbol']);
283624
+ }
283625
+ parseTicker(ticker, market = undefined) {
283626
+ //
283627
+ // {
283628
+ // "last": 9e-08,
283629
+ // "high": 1e-07,
283630
+ // "low": 9e-08,
283631
+ // "vwap": 0.0,
283632
+ // "volume": 135250.0,
283633
+ // "bid": 9e-08,
283634
+ // "ask": 1e-07
283635
+ // }
283636
+ //
283637
+ const symbol = this.safeSymbol(undefined, market);
283638
+ const vwap = this.safeString(ticker, 'vwap');
283639
+ const baseVolume = this.safeString(ticker, 'volume');
283640
+ const quoteVolume = _base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise */ .O.stringMul(baseVolume, vwap);
283641
+ const last = this.safeString(ticker, 'last');
283642
+ return this.safeTicker({
283643
+ 'symbol': symbol,
283644
+ 'timestamp': undefined,
283645
+ 'datetime': undefined,
283646
+ 'high': this.safeString(ticker, 'high'),
283647
+ 'low': this.safeString(ticker, 'low'),
283648
+ 'bid': this.safeString(ticker, 'bid'),
283649
+ 'bidVolume': undefined,
283650
+ 'ask': this.safeString(ticker, 'ask'),
283651
+ 'askVolume': undefined,
283652
+ 'vwap': vwap,
283653
+ 'open': undefined,
283654
+ 'close': last,
283655
+ 'last': last,
283656
+ 'previousClose': undefined,
283657
+ 'change': undefined,
283658
+ 'percentage': undefined,
283659
+ 'average': undefined,
283660
+ 'baseVolume': baseVolume,
283661
+ 'quoteVolume': quoteVolume,
283662
+ 'info': ticker,
283663
+ }, market);
283664
+ }
283665
+ async fetchTicker(symbol, params = {}) {
283666
+ /**
283667
+ * @method
283668
+ * @name zaif#fetchTicker
283669
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id22
283670
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
283671
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
283672
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283673
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
283674
+ */
283675
+ await this.loadMarkets();
283676
+ const market = this.market(symbol);
283677
+ const request = {
283678
+ 'pair': market['id'],
283679
+ };
283680
+ const ticker = await this.publicGetTickerPair(this.extend(request, params));
283681
+ //
283682
+ // {
283683
+ // "last": 9e-08,
283684
+ // "high": 1e-07,
283685
+ // "low": 9e-08,
283686
+ // "vwap": 0.0,
283687
+ // "volume": 135250.0,
283688
+ // "bid": 9e-08,
283689
+ // "ask": 1e-07
283690
+ // }
283691
+ //
283692
+ return this.parseTicker(ticker, market);
283693
+ }
283694
+ parseTrade(trade, market = undefined) {
283695
+ //
283696
+ // fetchTrades (public)
283697
+ //
283698
+ // {
283699
+ // "date": 1648559414,
283700
+ // "price": 5880375.0,
283701
+ // "amount": 0.017,
283702
+ // "tid": 176126557,
283703
+ // "currency_pair": "btc_jpy",
283704
+ // "trade_type": "ask"
283705
+ // }
283706
+ //
283707
+ let side = this.safeString(trade, 'trade_type');
283708
+ side = (side === 'bid') ? 'buy' : 'sell';
283709
+ const timestamp = this.safeTimestamp(trade, 'date');
283710
+ const id = this.safeString2(trade, 'id', 'tid');
283711
+ const priceString = this.safeString(trade, 'price');
283712
+ const amountString = this.safeString(trade, 'amount');
283713
+ const marketId = this.safeString(trade, 'currency_pair');
283714
+ const symbol = this.safeSymbol(marketId, market, '_');
283715
+ return this.safeTrade({
283716
+ 'id': id,
283717
+ 'info': trade,
283718
+ 'timestamp': timestamp,
283719
+ 'datetime': this.iso8601(timestamp),
283720
+ 'symbol': symbol,
283721
+ 'type': undefined,
283722
+ 'side': side,
283723
+ 'order': undefined,
283724
+ 'takerOrMaker': undefined,
283725
+ 'price': priceString,
283726
+ 'amount': amountString,
283727
+ 'cost': undefined,
283728
+ 'fee': undefined,
283729
+ }, market);
283730
+ }
283731
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
283732
+ /**
283733
+ * @method
283734
+ * @name zaif#fetchTrades
283735
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id28
283736
+ * @description get the list of most recent trades for a particular symbol
283737
+ * @param {string} symbol unified symbol of the market to fetch trades for
283738
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
283739
+ * @param {int} [limit] the maximum amount of trades to fetch
283740
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283741
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
283742
+ */
283743
+ await this.loadMarkets();
283744
+ const market = this.market(symbol);
283745
+ const request = {
283746
+ 'pair': market['id'],
283747
+ };
283748
+ let response = await this.publicGetTradesPair(this.extend(request, params));
283749
+ //
283750
+ // [
283751
+ // {
283752
+ // "date": 1648559414,
283753
+ // "price": 5880375.0,
283754
+ // "amount": 0.017,
283755
+ // "tid": 176126557,
283756
+ // "currency_pair": "btc_jpy",
283757
+ // "trade_type": "ask"
283758
+ // }, ...
283759
+ // ]
283760
+ //
283761
+ const numTrades = response.length;
283762
+ if (numTrades === 1) {
283763
+ const firstTrade = response[0];
283764
+ if (!Object.keys(firstTrade).length) {
283765
+ response = [];
283766
+ }
283767
+ }
283768
+ return this.parseTrades(response, market, since, limit);
283769
+ }
283770
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
283771
+ /**
283772
+ * @method
283773
+ * @name zaif#createOrder
283774
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/MarginTradingAPI.html#id23
283775
+ * @description create a trade order
283776
+ * @param {string} symbol unified symbol of the market to create an order in
283777
+ * @param {string} type must be 'limit'
283778
+ * @param {string} side 'buy' or 'sell'
283779
+ * @param {float} amount how much of currency you want to trade in units of base currency
283780
+ * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
283781
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283782
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
283783
+ */
283784
+ await this.loadMarkets();
283785
+ if (type !== 'limit') {
283786
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(this.id + ' createOrder() allows limit orders only');
283787
+ }
283788
+ const market = this.market(symbol);
283789
+ const request = {
283790
+ 'currency_pair': market['id'],
283791
+ 'action': (side === 'buy') ? 'bid' : 'ask',
283792
+ 'amount': amount,
283793
+ 'price': price,
283794
+ };
283795
+ const response = await this.privatePostTrade(this.extend(request, params));
283796
+ return this.safeOrder({
283797
+ 'info': response,
283798
+ 'id': response['return']['order_id'].toString(),
283799
+ }, market);
283800
+ }
283801
+ async cancelOrder(id, symbol = undefined, params = {}) {
283802
+ /**
283803
+ * @method
283804
+ * @name zaif#cancelOrder
283805
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id37
283806
+ * @description cancels an open order
283807
+ * @param {string} id order id
283808
+ * @param {string} symbol not used by zaif cancelOrder ()
283809
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283810
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
283811
+ */
283812
+ const request = {
283813
+ 'order_id': id,
283814
+ };
283815
+ return await this.privatePostCancelOrder(this.extend(request, params));
283816
+ }
283817
+ parseOrder(order, market = undefined) {
283818
+ //
283819
+ // {
283820
+ // "currency_pair": "btc_jpy",
283821
+ // "action": "ask",
283822
+ // "amount": 0.03,
283823
+ // "price": 56000,
283824
+ // "timestamp": 1402021125,
283825
+ // "comment" : "demo"
283826
+ // }
283827
+ //
283828
+ let side = this.safeString(order, 'action');
283829
+ side = (side === 'bid') ? 'buy' : 'sell';
283830
+ const timestamp = this.safeTimestamp(order, 'timestamp');
283831
+ const marketId = this.safeString(order, 'currency_pair');
283832
+ const symbol = this.safeSymbol(marketId, market, '_');
283833
+ const price = this.safeString(order, 'price');
283834
+ const amount = this.safeString(order, 'amount');
283835
+ const id = this.safeString(order, 'id');
283836
+ return this.safeOrder({
283837
+ 'id': id,
283838
+ 'clientOrderId': undefined,
283839
+ 'timestamp': timestamp,
283840
+ 'datetime': this.iso8601(timestamp),
283841
+ 'lastTradeTimestamp': undefined,
283842
+ 'status': 'open',
283843
+ 'symbol': symbol,
283844
+ 'type': 'limit',
283845
+ 'timeInForce': undefined,
283846
+ 'postOnly': undefined,
283847
+ 'side': side,
283848
+ 'price': price,
283849
+ 'stopPrice': undefined,
283850
+ 'triggerPrice': undefined,
283851
+ 'cost': undefined,
283852
+ 'amount': amount,
283853
+ 'filled': undefined,
283854
+ 'remaining': undefined,
283855
+ 'trades': undefined,
283856
+ 'fee': undefined,
283857
+ 'info': order,
283858
+ 'average': undefined,
283859
+ }, market);
283860
+ }
283861
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
283862
+ /**
283863
+ * @method
283864
+ * @name zaif#fetchOpenOrders
283865
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/MarginTradingAPI.html#id28
283866
+ * @description fetch all unfilled currently open orders
283867
+ * @param {string} symbol unified market symbol
283868
+ * @param {int} [since] the earliest time in ms to fetch open orders for
283869
+ * @param {int} [limit] the maximum number of open orders structures to retrieve
283870
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283871
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
283872
+ */
283873
+ await this.loadMarkets();
283874
+ let market = undefined;
283875
+ const request = {
283876
+ // 'is_token': false,
283877
+ // 'is_token_both': false,
283878
+ };
283879
+ if (symbol !== undefined) {
283880
+ market = this.market(symbol);
283881
+ request['currency_pair'] = market['id'];
283882
+ }
283883
+ const response = await this.privatePostActiveOrders(this.extend(request, params));
283884
+ return this.parseOrders(response['return'], market, since, limit);
283885
+ }
283886
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
283887
+ /**
283888
+ * @method
283889
+ * @name zaif#fetchClosedOrders
283890
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id24
283891
+ * @description fetches information on multiple closed orders made by the user
283892
+ * @param {string} symbol unified market symbol of the market orders were made in
283893
+ * @param {int} [since] the earliest time in ms to fetch orders for
283894
+ * @param {int} [limit] the maximum number of order structures to retrieve
283895
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283896
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
283897
+ */
283898
+ await this.loadMarkets();
283899
+ let market = undefined;
283900
+ const request = {
283901
+ // 'from': 0,
283902
+ // 'count': 1000,
283903
+ // 'from_id': 0,
283904
+ // 'end_id': 1000,
283905
+ // 'order': 'DESC',
283906
+ // 'since': 1503821051,
283907
+ // 'end': 1503821051,
283908
+ // 'is_token': false,
283909
+ };
283910
+ if (symbol !== undefined) {
283911
+ market = this.market(symbol);
283912
+ request['currency_pair'] = market['id'];
283913
+ }
283914
+ const response = await this.privatePostTradeHistory(this.extend(request, params));
283915
+ return this.parseOrders(response['return'], market, since, limit);
283916
+ }
283917
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
283918
+ /**
283919
+ * @method
283920
+ * @name zaif#withdraw
283921
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id41
283922
+ * @description make a withdrawal
283923
+ * @param {string} code unified currency code
283924
+ * @param {float} amount the amount to withdraw
283925
+ * @param {string} address the address to withdraw to
283926
+ * @param {string} tag
283927
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283928
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
283929
+ */
283930
+ [tag, params] = this.handleWithdrawTagAndParams(tag, params);
283931
+ this.checkAddress(address);
283932
+ await this.loadMarkets();
283933
+ const currency = this.currency(code);
283934
+ if (code === 'JPY') {
283935
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(this.id + ' withdraw() does not allow ' + code + ' withdrawals');
283936
+ }
283937
+ const request = {
283938
+ 'currency': currency['id'],
283939
+ 'amount': amount,
283940
+ 'address': address,
283941
+ // 'message': 'Hi!', // XEM and others
283942
+ // 'opt_fee': 0.003, // BTC and MONA only
283943
+ };
283944
+ if (tag !== undefined) {
283945
+ request['message'] = tag;
283946
+ }
283947
+ const result = await this.privatePostWithdraw(this.extend(request, params));
283948
+ //
283949
+ // {
283950
+ // "success": 1,
283951
+ // "return": {
283952
+ // "id": 23634,
283953
+ // "fee": 0.001,
283954
+ // "txid":,
283955
+ // "funds": {
283956
+ // "jpy": 15320,
283957
+ // "btc": 1.392,
283958
+ // "xem": 100.2,
283959
+ // "mona": 2600
283960
+ // }
283961
+ // }
283962
+ // }
283963
+ //
283964
+ const returnData = this.safeValue(result, 'return');
283965
+ return this.parseTransaction(returnData, currency);
283966
+ }
283967
+ parseTransaction(transaction, currency = undefined) {
283968
+ //
283969
+ // {
283970
+ // "id": 23634,
283971
+ // "fee": 0.001,
283972
+ // "txid":,
283973
+ // "funds": {
283974
+ // "jpy": 15320,
283975
+ // "btc": 1.392,
283976
+ // "xem": 100.2,
283977
+ // "mona": 2600
283978
+ // }
283979
+ // }
283980
+ //
283981
+ currency = this.safeCurrency(undefined, currency);
283982
+ let fee = undefined;
283983
+ const feeCost = this.safeValue(transaction, 'fee');
283984
+ if (feeCost !== undefined) {
283985
+ fee = {
283986
+ 'cost': feeCost,
283987
+ 'currency': currency['code'],
283988
+ };
283989
+ }
283990
+ return {
283991
+ 'id': this.safeString(transaction, 'id'),
283992
+ 'txid': this.safeString(transaction, 'txid'),
283993
+ 'timestamp': undefined,
283994
+ 'datetime': undefined,
283995
+ 'network': undefined,
283996
+ 'addressFrom': undefined,
283997
+ 'address': undefined,
283998
+ 'addressTo': undefined,
283999
+ 'amount': undefined,
284000
+ 'type': undefined,
284001
+ 'currency': currency['code'],
284002
+ 'status': undefined,
284003
+ 'updated': undefined,
284004
+ 'tagFrom': undefined,
284005
+ 'tag': undefined,
284006
+ 'tagTo': undefined,
284007
+ 'comment': undefined,
284008
+ 'internal': undefined,
284009
+ 'fee': fee,
284010
+ 'info': transaction,
284011
+ };
284012
+ }
284013
+ customNonce() {
284014
+ const num = (this.milliseconds() / 1000).toString();
284015
+ const nonce = parseFloat(num);
284016
+ return nonce.toFixed(8);
284017
+ }
284018
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
284019
+ let url = this.urls['api']['rest'] + '/';
284020
+ if (api === 'public') {
284021
+ url += 'api/' + this.version + '/' + this.implodeParams(path, params);
284022
+ }
284023
+ else if (api === 'fapi') {
284024
+ url += 'fapi/' + this.version + '/' + this.implodeParams(path, params);
284025
+ }
284026
+ else {
284027
+ this.checkRequiredCredentials();
284028
+ if (api === 'ecapi') {
284029
+ url += 'ecapi';
284030
+ }
284031
+ else if (api === 'tlapi') {
284032
+ url += 'tlapi';
284033
+ }
284034
+ else {
284035
+ url += 'tapi';
284036
+ }
284037
+ const nonce = this.customNonce();
284038
+ body = this.urlencode(this.extend({
284039
+ 'method': path,
284040
+ 'nonce': nonce,
284041
+ }, params));
284042
+ headers = {
284043
+ 'Content-Type': 'application/x-www-form-urlencoded',
284044
+ 'Key': this.apiKey,
284045
+ 'Sign': this.hmac(this.encode(body), this.encode(this.secret), _static_dependencies_noble_hashes_sha512_js__WEBPACK_IMPORTED_MODULE_4__/* .sha512 */ .o),
284046
+ };
284047
+ }
284048
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
284049
+ }
284050
+ handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
284051
+ if (response === undefined) {
284052
+ return undefined;
284053
+ }
284054
+ //
284055
+ // {"error": "unsupported currency_pair"}
284056
+ //
284057
+ const feedback = this.id + ' ' + body;
284058
+ const error = this.safeString(response, 'error');
284059
+ if (error !== undefined) {
284060
+ this.throwExactlyMatchedException(this.exceptions['exact'], error, feedback);
284061
+ this.throwBroadlyMatchedException(this.exceptions['broad'], error, feedback);
284062
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(feedback); // unknown message
284063
+ }
284064
+ const success = this.safeValue(response, 'success', true);
284065
+ if (!success) {
284066
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(feedback);
284067
+ }
284068
+ return undefined;
284069
+ }
284070
+ }
284071
+
284072
+
283122
284073
  /***/ }),
283123
284074
 
283124
284075
  /***/ 5140:
@@ -290162,751 +291113,6 @@ YAHOO.lang = {
290162
291113
  }
290163
291114
  };
290164
291115
 
290165
- /***/ }),
290166
-
290167
- /***/ 7558:
290168
- /***/ (() => {
290169
-
290170
-
290171
- // ---------------------------------------------------------------------------
290172
- var __importDefault = (undefined && undefined.__importDefault) || function (mod) {
290173
- return (mod && mod.__esModule) ? mod : { "default": mod };
290174
- };
290175
- Object.defineProperty(exports, "__esModule", { value: true });
290176
- const zaif_js_1 = __importDefault(require("./abstract/zaif.js"));
290177
- const errors_js_1 = require("./base/errors.js");
290178
- const Precise_js_1 = require("./base/Precise.js");
290179
- const number_js_1 = require("./base/functions/number.js");
290180
- const sha512_js_1 = require("./static_dependencies/noble-hashes/sha512.js");
290181
- // ---------------------------------------------------------------------------
290182
- /**
290183
- * @class zaif
290184
- * @extends Exchange
290185
- */
290186
- class zaif extends zaif_js_1.default {
290187
- describe() {
290188
- return this.deepExtend(super.describe(), {
290189
- 'id': 'zaif',
290190
- 'name': 'Zaif',
290191
- 'countries': ['JP'],
290192
- // 10 requests per second = 1000ms / 10 = 100ms between requests (public market endpoints)
290193
- 'rateLimit': 100,
290194
- 'version': '1',
290195
- 'has': {
290196
- 'CORS': undefined,
290197
- 'spot': true,
290198
- 'margin': undefined,
290199
- 'swap': false,
290200
- 'future': false,
290201
- 'option': false,
290202
- 'cancelOrder': true,
290203
- 'createMarketOrder': false,
290204
- 'createOrder': true,
290205
- 'fetchBalance': true,
290206
- 'fetchClosedOrders': true,
290207
- 'fetchFundingHistory': false,
290208
- 'fetchFundingRate': false,
290209
- 'fetchFundingRateHistory': false,
290210
- 'fetchFundingRates': false,
290211
- 'fetchIndexOHLCV': false,
290212
- 'fetchMarkets': true,
290213
- 'fetchMarkOHLCV': false,
290214
- 'fetchOpenInterestHistory': false,
290215
- 'fetchOpenOrders': true,
290216
- 'fetchOrderBook': true,
290217
- 'fetchPremiumIndexOHLCV': false,
290218
- 'fetchTicker': true,
290219
- 'fetchTrades': true,
290220
- 'fetchTradingFee': false,
290221
- 'fetchTradingFees': false,
290222
- 'withdraw': true,
290223
- },
290224
- 'urls': {
290225
- 'logo': 'https://user-images.githubusercontent.com/1294454/27766927-39ca2ada-5eeb-11e7-972f-1b4199518ca6.jpg',
290226
- 'api': {
290227
- 'rest': 'https://api.zaif.jp',
290228
- },
290229
- 'www': 'https://zaif.jp',
290230
- 'doc': [
290231
- 'https://techbureau-api-document.readthedocs.io/ja/latest/index.html',
290232
- 'https://corp.zaif.jp/api-docs',
290233
- 'https://corp.zaif.jp/api-docs/api_links',
290234
- 'https://www.npmjs.com/package/zaif.jp',
290235
- 'https://github.com/you21979/node-zaif',
290236
- ],
290237
- 'fees': 'https://zaif.jp/fee?lang=en',
290238
- },
290239
- 'fees': {
290240
- 'trading': {
290241
- 'percentage': true,
290242
- 'taker': this.parseNumber('0.001'),
290243
- 'maker': this.parseNumber('0'),
290244
- },
290245
- },
290246
- 'api': {
290247
- 'public': {
290248
- 'get': {
290249
- 'depth/{pair}': 1,
290250
- 'currencies/{pair}': 1,
290251
- 'currencies/all': 1,
290252
- 'currency_pairs/{pair}': 1,
290253
- 'currency_pairs/all': 1,
290254
- 'last_price/{pair}': 1,
290255
- 'ticker/{pair}': 1,
290256
- 'trades/{pair}': 1,
290257
- },
290258
- },
290259
- 'private': {
290260
- 'post': {
290261
- 'active_orders': 5,
290262
- 'cancel_order': 5,
290263
- 'deposit_history': 5,
290264
- 'get_id_info': 5,
290265
- 'get_info': 10,
290266
- 'get_info2': 5,
290267
- 'get_personal_info': 5,
290268
- 'trade': 5,
290269
- 'trade_history': 50,
290270
- 'withdraw': 5,
290271
- 'withdraw_history': 5,
290272
- },
290273
- },
290274
- 'ecapi': {
290275
- 'post': {
290276
- 'createInvoice': 1,
290277
- 'getInvoice': 1,
290278
- 'getInvoiceIdsByOrderNumber': 1,
290279
- 'cancelInvoice': 1,
290280
- },
290281
- },
290282
- 'tlapi': {
290283
- 'post': {
290284
- 'get_positions': 66,
290285
- 'position_history': 66,
290286
- 'active_positions': 5,
290287
- 'create_position': 33,
290288
- 'change_position': 33,
290289
- 'cancel_position': 33, // 3 in 10 seconds
290290
- },
290291
- },
290292
- 'fapi': {
290293
- 'get': {
290294
- 'groups/{group_id}': 1,
290295
- 'last_price/{group_id}/{pair}': 1,
290296
- 'ticker/{group_id}/{pair}': 1,
290297
- 'trades/{group_id}/{pair}': 1,
290298
- 'depth/{group_id}/{pair}': 1,
290299
- },
290300
- },
290301
- },
290302
- 'options': {},
290303
- 'precisionMode': number_js_1.TICK_SIZE,
290304
- 'exceptions': {
290305
- 'exact': {
290306
- 'unsupported currency_pair': errors_js_1.BadRequest, // {"error": "unsupported currency_pair"}
290307
- },
290308
- 'broad': {},
290309
- },
290310
- });
290311
- }
290312
- async fetchMarkets(params = {}) {
290313
- /**
290314
- * @method
290315
- * @name zaif#fetchMarkets
290316
- * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id12
290317
- * @description retrieves data on all markets for zaif
290318
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290319
- * @returns {object[]} an array of objects representing market data
290320
- */
290321
- const markets = await this.publicGetCurrencyPairsAll(params);
290322
- //
290323
- // [
290324
- // {
290325
- // "aux_unit_point": 0,
290326
- // "item_japanese": "\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3",
290327
- // "aux_unit_step": 5.0,
290328
- // "description": "\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3\u30fb\u65e5\u672c\u5186\u306e\u53d6\u5f15\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059",
290329
- // "item_unit_min": 0.001,
290330
- // "event_number": 0,
290331
- // "currency_pair": "btc_jpy",
290332
- // "is_token": false,
290333
- // "aux_unit_min": 5.0,
290334
- // "aux_japanese": "\u65e5\u672c\u5186",
290335
- // "id": 1,
290336
- // "item_unit_step": 0.0001,
290337
- // "name": "BTC/JPY",
290338
- // "seq": 0,
290339
- // "title": "BTC/JPY"
290340
- // }
290341
- // ]
290342
- //
290343
- return this.parseMarkets(markets);
290344
- }
290345
- parseMarket(market) {
290346
- const id = this.safeString(market, 'currency_pair');
290347
- const name = this.safeString(market, 'name');
290348
- const [baseId, quoteId] = name.split('/');
290349
- const base = this.safeCurrencyCode(baseId);
290350
- const quote = this.safeCurrencyCode(quoteId);
290351
- const symbol = base + '/' + quote;
290352
- return {
290353
- 'id': id,
290354
- 'symbol': symbol,
290355
- 'base': base,
290356
- 'quote': quote,
290357
- 'settle': undefined,
290358
- 'baseId': baseId,
290359
- 'quoteId': quoteId,
290360
- 'settleId': undefined,
290361
- 'type': 'spot',
290362
- 'spot': true,
290363
- 'margin': undefined,
290364
- 'swap': false,
290365
- 'future': false,
290366
- 'option': false,
290367
- 'active': undefined,
290368
- 'contract': false,
290369
- 'linear': undefined,
290370
- 'inverse': undefined,
290371
- 'contractSize': undefined,
290372
- 'expiry': undefined,
290373
- 'expiryDatetime': undefined,
290374
- 'strike': undefined,
290375
- 'optionType': undefined,
290376
- 'precision': {
290377
- 'amount': this.safeNumber(market, 'item_unit_step'),
290378
- 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'aux_unit_point'))),
290379
- },
290380
- 'limits': {
290381
- 'leverage': {
290382
- 'min': undefined,
290383
- 'max': undefined,
290384
- },
290385
- 'amount': {
290386
- 'min': this.safeNumber(market, 'item_unit_min'),
290387
- 'max': undefined,
290388
- },
290389
- 'price': {
290390
- 'min': this.safeNumber(market, 'aux_unit_min'),
290391
- 'max': undefined,
290392
- },
290393
- 'cost': {
290394
- 'min': undefined,
290395
- 'max': undefined,
290396
- },
290397
- },
290398
- 'created': undefined,
290399
- 'info': market,
290400
- };
290401
- }
290402
- parseBalance(response) {
290403
- const balances = this.safeValue(response, 'return', {});
290404
- const deposit = this.safeValue(balances, 'deposit');
290405
- const result = {
290406
- 'info': response,
290407
- 'timestamp': undefined,
290408
- 'datetime': undefined,
290409
- };
290410
- const funds = this.safeValue(balances, 'funds', {});
290411
- const currencyIds = Object.keys(funds);
290412
- for (let i = 0; i < currencyIds.length; i++) {
290413
- const currencyId = currencyIds[i];
290414
- const code = this.safeCurrencyCode(currencyId);
290415
- const balance = this.safeString(funds, currencyId);
290416
- const account = this.account();
290417
- account['free'] = balance;
290418
- account['total'] = balance;
290419
- if (deposit !== undefined) {
290420
- if (currencyId in deposit) {
290421
- account['total'] = this.safeString(deposit, currencyId);
290422
- }
290423
- }
290424
- result[code] = account;
290425
- }
290426
- return this.safeBalance(result);
290427
- }
290428
- async fetchBalance(params = {}) {
290429
- /**
290430
- * @method
290431
- * @name zaif#fetchBalance
290432
- * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id10
290433
- * @description query for balance and get the amount of funds available for trading or funds locked in orders
290434
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290435
- * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
290436
- */
290437
- await this.loadMarkets();
290438
- const response = await this.privatePostGetInfo(params);
290439
- return this.parseBalance(response);
290440
- }
290441
- async fetchOrderBook(symbol, limit = undefined, params = {}) {
290442
- /**
290443
- * @method
290444
- * @name zaif#fetchOrderBook
290445
- * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id34
290446
- * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
290447
- * @param {string} symbol unified symbol of the market to fetch the order book for
290448
- * @param {int} [limit] the maximum amount of order book entries to return
290449
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290450
- * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
290451
- */
290452
- await this.loadMarkets();
290453
- const market = this.market(symbol);
290454
- const request = {
290455
- 'pair': market['id'],
290456
- };
290457
- const response = await this.publicGetDepthPair(this.extend(request, params));
290458
- return this.parseOrderBook(response, market['symbol']);
290459
- }
290460
- parseTicker(ticker, market = undefined) {
290461
- //
290462
- // {
290463
- // "last": 9e-08,
290464
- // "high": 1e-07,
290465
- // "low": 9e-08,
290466
- // "vwap": 0.0,
290467
- // "volume": 135250.0,
290468
- // "bid": 9e-08,
290469
- // "ask": 1e-07
290470
- // }
290471
- //
290472
- const symbol = this.safeSymbol(undefined, market);
290473
- const timestamp = this.milliseconds();
290474
- const vwap = this.safeString(ticker, 'vwap');
290475
- const baseVolume = this.safeString(ticker, 'volume');
290476
- const quoteVolume = Precise_js_1.Precise.stringMul(baseVolume, vwap);
290477
- const last = this.safeString(ticker, 'last');
290478
- return this.safeTicker({
290479
- 'symbol': symbol,
290480
- 'timestamp': timestamp,
290481
- 'datetime': this.iso8601(timestamp),
290482
- 'high': this.safeString(ticker, 'high'),
290483
- 'low': this.safeString(ticker, 'low'),
290484
- 'bid': this.safeString(ticker, 'bid'),
290485
- 'bidVolume': undefined,
290486
- 'ask': this.safeString(ticker, 'ask'),
290487
- 'askVolume': undefined,
290488
- 'vwap': vwap,
290489
- 'open': undefined,
290490
- 'close': last,
290491
- 'last': last,
290492
- 'previousClose': undefined,
290493
- 'change': undefined,
290494
- 'percentage': undefined,
290495
- 'average': undefined,
290496
- 'baseVolume': baseVolume,
290497
- 'quoteVolume': quoteVolume,
290498
- 'info': ticker,
290499
- }, market);
290500
- }
290501
- async fetchTicker(symbol, params = {}) {
290502
- /**
290503
- * @method
290504
- * @name zaif#fetchTicker
290505
- * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id22
290506
- * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
290507
- * @param {string} symbol unified symbol of the market to fetch the ticker for
290508
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290509
- * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
290510
- */
290511
- await this.loadMarkets();
290512
- const market = this.market(symbol);
290513
- const request = {
290514
- 'pair': market['id'],
290515
- };
290516
- const ticker = await this.publicGetTickerPair(this.extend(request, params));
290517
- //
290518
- // {
290519
- // "last": 9e-08,
290520
- // "high": 1e-07,
290521
- // "low": 9e-08,
290522
- // "vwap": 0.0,
290523
- // "volume": 135250.0,
290524
- // "bid": 9e-08,
290525
- // "ask": 1e-07
290526
- // }
290527
- //
290528
- return this.parseTicker(ticker, market);
290529
- }
290530
- parseTrade(trade, market = undefined) {
290531
- //
290532
- // fetchTrades (public)
290533
- //
290534
- // {
290535
- // "date": 1648559414,
290536
- // "price": 5880375.0,
290537
- // "amount": 0.017,
290538
- // "tid": 176126557,
290539
- // "currency_pair": "btc_jpy",
290540
- // "trade_type": "ask"
290541
- // }
290542
- //
290543
- let side = this.safeString(trade, 'trade_type');
290544
- side = (side === 'bid') ? 'buy' : 'sell';
290545
- const timestamp = this.safeTimestamp(trade, 'date');
290546
- const id = this.safeString2(trade, 'id', 'tid');
290547
- const priceString = this.safeString(trade, 'price');
290548
- const amountString = this.safeString(trade, 'amount');
290549
- const marketId = this.safeString(trade, 'currency_pair');
290550
- const symbol = this.safeSymbol(marketId, market, '_');
290551
- return this.safeTrade({
290552
- 'id': id,
290553
- 'info': trade,
290554
- 'timestamp': timestamp,
290555
- 'datetime': this.iso8601(timestamp),
290556
- 'symbol': symbol,
290557
- 'type': undefined,
290558
- 'side': side,
290559
- 'order': undefined,
290560
- 'takerOrMaker': undefined,
290561
- 'price': priceString,
290562
- 'amount': amountString,
290563
- 'cost': undefined,
290564
- 'fee': undefined,
290565
- }, market);
290566
- }
290567
- async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
290568
- /**
290569
- * @method
290570
- * @name zaif#fetchTrades
290571
- * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id28
290572
- * @description get the list of most recent trades for a particular symbol
290573
- * @param {string} symbol unified symbol of the market to fetch trades for
290574
- * @param {int} [since] timestamp in ms of the earliest trade to fetch
290575
- * @param {int} [limit] the maximum amount of trades to fetch
290576
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290577
- * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
290578
- */
290579
- await this.loadMarkets();
290580
- const market = this.market(symbol);
290581
- const request = {
290582
- 'pair': market['id'],
290583
- };
290584
- let response = await this.publicGetTradesPair(this.extend(request, params));
290585
- //
290586
- // [
290587
- // {
290588
- // "date": 1648559414,
290589
- // "price": 5880375.0,
290590
- // "amount": 0.017,
290591
- // "tid": 176126557,
290592
- // "currency_pair": "btc_jpy",
290593
- // "trade_type": "ask"
290594
- // }, ...
290595
- // ]
290596
- //
290597
- const numTrades = response.length;
290598
- if (numTrades === 1) {
290599
- const firstTrade = response[0];
290600
- if (!Object.keys(firstTrade).length) {
290601
- response = [];
290602
- }
290603
- }
290604
- return this.parseTrades(response, market, since, limit);
290605
- }
290606
- async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
290607
- /**
290608
- * @method
290609
- * @name zaif#createOrder
290610
- * @see https://zaif-api-document.readthedocs.io/ja/latest/MarginTradingAPI.html#id23
290611
- * @description create a trade order
290612
- * @param {string} symbol unified symbol of the market to create an order in
290613
- * @param {string} type must be 'limit'
290614
- * @param {string} side 'buy' or 'sell'
290615
- * @param {float} amount how much of currency you want to trade in units of base currency
290616
- * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
290617
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290618
- * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
290619
- */
290620
- await this.loadMarkets();
290621
- if (type !== 'limit') {
290622
- throw new errors_js_1.ExchangeError(this.id + ' createOrder() allows limit orders only');
290623
- }
290624
- const market = this.market(symbol);
290625
- const request = {
290626
- 'currency_pair': market['id'],
290627
- 'action': (side === 'buy') ? 'bid' : 'ask',
290628
- 'amount': amount,
290629
- 'price': price,
290630
- };
290631
- const response = await this.privatePostTrade(this.extend(request, params));
290632
- return this.safeOrder({
290633
- 'info': response,
290634
- 'id': response['return']['order_id'].toString(),
290635
- }, market);
290636
- }
290637
- async cancelOrder(id, symbol = undefined, params = {}) {
290638
- /**
290639
- * @method
290640
- * @name zaif#cancelOrder
290641
- * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id37
290642
- * @description cancels an open order
290643
- * @param {string} id order id
290644
- * @param {string} symbol not used by zaif cancelOrder ()
290645
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290646
- * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
290647
- */
290648
- const request = {
290649
- 'order_id': id,
290650
- };
290651
- return await this.privatePostCancelOrder(this.extend(request, params));
290652
- }
290653
- parseOrder(order, market = undefined) {
290654
- //
290655
- // {
290656
- // "currency_pair": "btc_jpy",
290657
- // "action": "ask",
290658
- // "amount": 0.03,
290659
- // "price": 56000,
290660
- // "timestamp": 1402021125,
290661
- // "comment" : "demo"
290662
- // }
290663
- //
290664
- let side = this.safeString(order, 'action');
290665
- side = (side === 'bid') ? 'buy' : 'sell';
290666
- const timestamp = this.safeTimestamp(order, 'timestamp');
290667
- const marketId = this.safeString(order, 'currency_pair');
290668
- const symbol = this.safeSymbol(marketId, market, '_');
290669
- const price = this.safeString(order, 'price');
290670
- const amount = this.safeString(order, 'amount');
290671
- const id = this.safeString(order, 'id');
290672
- return this.safeOrder({
290673
- 'id': id,
290674
- 'clientOrderId': undefined,
290675
- 'timestamp': timestamp,
290676
- 'datetime': this.iso8601(timestamp),
290677
- 'lastTradeTimestamp': undefined,
290678
- 'status': 'open',
290679
- 'symbol': symbol,
290680
- 'type': 'limit',
290681
- 'timeInForce': undefined,
290682
- 'postOnly': undefined,
290683
- 'side': side,
290684
- 'price': price,
290685
- 'stopPrice': undefined,
290686
- 'triggerPrice': undefined,
290687
- 'cost': undefined,
290688
- 'amount': amount,
290689
- 'filled': undefined,
290690
- 'remaining': undefined,
290691
- 'trades': undefined,
290692
- 'fee': undefined,
290693
- 'info': order,
290694
- 'average': undefined,
290695
- }, market);
290696
- }
290697
- async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
290698
- /**
290699
- * @method
290700
- * @name zaif#fetchOpenOrders
290701
- * @see https://zaif-api-document.readthedocs.io/ja/latest/MarginTradingAPI.html#id28
290702
- * @description fetch all unfilled currently open orders
290703
- * @param {string} symbol unified market symbol
290704
- * @param {int} [since] the earliest time in ms to fetch open orders for
290705
- * @param {int} [limit] the maximum number of open orders structures to retrieve
290706
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290707
- * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
290708
- */
290709
- await this.loadMarkets();
290710
- let market = undefined;
290711
- const request = {
290712
- // 'is_token': false,
290713
- // 'is_token_both': false,
290714
- };
290715
- if (symbol !== undefined) {
290716
- market = this.market(symbol);
290717
- request['currency_pair'] = market['id'];
290718
- }
290719
- const response = await this.privatePostActiveOrders(this.extend(request, params));
290720
- return this.parseOrders(response['return'], market, since, limit);
290721
- }
290722
- async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
290723
- /**
290724
- * @method
290725
- * @name zaif#fetchClosedOrders
290726
- * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id24
290727
- * @description fetches information on multiple closed orders made by the user
290728
- * @param {string} symbol unified market symbol of the market orders were made in
290729
- * @param {int} [since] the earliest time in ms to fetch orders for
290730
- * @param {int} [limit] the maximum number of order structures to retrieve
290731
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290732
- * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
290733
- */
290734
- await this.loadMarkets();
290735
- let market = undefined;
290736
- const request = {
290737
- // 'from': 0,
290738
- // 'count': 1000,
290739
- // 'from_id': 0,
290740
- // 'end_id': 1000,
290741
- // 'order': 'DESC',
290742
- // 'since': 1503821051,
290743
- // 'end': 1503821051,
290744
- // 'is_token': false,
290745
- };
290746
- if (symbol !== undefined) {
290747
- market = this.market(symbol);
290748
- request['currency_pair'] = market['id'];
290749
- }
290750
- const response = await this.privatePostTradeHistory(this.extend(request, params));
290751
- return this.parseOrders(response['return'], market, since, limit);
290752
- }
290753
- async withdraw(code, amount, address, tag = undefined, params = {}) {
290754
- /**
290755
- * @method
290756
- * @name zaif#withdraw
290757
- * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id41
290758
- * @description make a withdrawal
290759
- * @param {string} code unified currency code
290760
- * @param {float} amount the amount to withdraw
290761
- * @param {string} address the address to withdraw to
290762
- * @param {string} tag
290763
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290764
- * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
290765
- */
290766
- [tag, params] = this.handleWithdrawTagAndParams(tag, params);
290767
- this.checkAddress(address);
290768
- await this.loadMarkets();
290769
- const currency = this.currency(code);
290770
- if (code === 'JPY') {
290771
- throw new errors_js_1.ExchangeError(this.id + ' withdraw() does not allow ' + code + ' withdrawals');
290772
- }
290773
- const request = {
290774
- 'currency': currency['id'],
290775
- 'amount': amount,
290776
- 'address': address,
290777
- // 'message': 'Hi!', // XEM and others
290778
- // 'opt_fee': 0.003, // BTC and MONA only
290779
- };
290780
- if (tag !== undefined) {
290781
- request['message'] = tag;
290782
- }
290783
- const result = await this.privatePostWithdraw(this.extend(request, params));
290784
- //
290785
- // {
290786
- // "success": 1,
290787
- // "return": {
290788
- // "id": 23634,
290789
- // "fee": 0.001,
290790
- // "txid":,
290791
- // "funds": {
290792
- // "jpy": 15320,
290793
- // "btc": 1.392,
290794
- // "xem": 100.2,
290795
- // "mona": 2600
290796
- // }
290797
- // }
290798
- // }
290799
- //
290800
- const returnData = this.safeValue(result, 'return');
290801
- return this.parseTransaction(returnData, currency);
290802
- }
290803
- parseTransaction(transaction, currency = undefined) {
290804
- //
290805
- // {
290806
- // "id": 23634,
290807
- // "fee": 0.001,
290808
- // "txid":,
290809
- // "funds": {
290810
- // "jpy": 15320,
290811
- // "btc": 1.392,
290812
- // "xem": 100.2,
290813
- // "mona": 2600
290814
- // }
290815
- // }
290816
- //
290817
- currency = this.safeCurrency(undefined, currency);
290818
- let fee = undefined;
290819
- const feeCost = this.safeValue(transaction, 'fee');
290820
- if (feeCost !== undefined) {
290821
- fee = {
290822
- 'cost': feeCost,
290823
- 'currency': currency['code'],
290824
- };
290825
- }
290826
- return {
290827
- 'id': this.safeString(transaction, 'id'),
290828
- 'txid': this.safeString(transaction, 'txid'),
290829
- 'timestamp': undefined,
290830
- 'datetime': undefined,
290831
- 'network': undefined,
290832
- 'addressFrom': undefined,
290833
- 'address': undefined,
290834
- 'addressTo': undefined,
290835
- 'amount': undefined,
290836
- 'type': undefined,
290837
- 'currency': currency['code'],
290838
- 'status': undefined,
290839
- 'updated': undefined,
290840
- 'tagFrom': undefined,
290841
- 'tag': undefined,
290842
- 'tagTo': undefined,
290843
- 'comment': undefined,
290844
- 'internal': undefined,
290845
- 'fee': fee,
290846
- 'info': transaction,
290847
- };
290848
- }
290849
- customNonce() {
290850
- const num = (this.milliseconds() / 1000).toString();
290851
- const nonce = parseFloat(num);
290852
- return nonce.toFixed(8);
290853
- }
290854
- sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
290855
- let url = this.urls['api']['rest'] + '/';
290856
- if (api === 'public') {
290857
- url += 'api/' + this.version + '/' + this.implodeParams(path, params);
290858
- }
290859
- else if (api === 'fapi') {
290860
- url += 'fapi/' + this.version + '/' + this.implodeParams(path, params);
290861
- }
290862
- else {
290863
- this.checkRequiredCredentials();
290864
- if (api === 'ecapi') {
290865
- url += 'ecapi';
290866
- }
290867
- else if (api === 'tlapi') {
290868
- url += 'tlapi';
290869
- }
290870
- else {
290871
- url += 'tapi';
290872
- }
290873
- const nonce = this.customNonce();
290874
- body = this.urlencode(this.extend({
290875
- 'method': path,
290876
- 'nonce': nonce,
290877
- }, params));
290878
- headers = {
290879
- 'Content-Type': 'application/x-www-form-urlencoded',
290880
- 'Key': this.apiKey,
290881
- 'Sign': this.hmac(this.encode(body), this.encode(this.secret), sha512_js_1.sha512),
290882
- };
290883
- }
290884
- return { 'url': url, 'method': method, 'body': body, 'headers': headers };
290885
- }
290886
- handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
290887
- if (response === undefined) {
290888
- return undefined;
290889
- }
290890
- //
290891
- // {"error": "unsupported currency_pair"}
290892
- //
290893
- const feedback = this.id + ' ' + body;
290894
- const error = this.safeString(response, 'error');
290895
- if (error !== undefined) {
290896
- this.throwExactlyMatchedException(this.exceptions['exact'], error, feedback);
290897
- this.throwBroadlyMatchedException(this.exceptions['broad'], error, feedback);
290898
- throw new errors_js_1.ExchangeError(feedback); // unknown message
290899
- }
290900
- const success = this.safeValue(response, 'success', true);
290901
- if (!success) {
290902
- throw new errors_js_1.ExchangeError(feedback);
290903
- }
290904
- return undefined;
290905
- }
290906
- }
290907
- exports.default = zaif;
290908
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemFpZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInphaWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLCtFQUErRTs7Ozs7QUFFL0UsaUVBQTBDO0FBQzFDLGdEQUE2RDtBQUM3RCxrREFBNEM7QUFDNUMsMERBQXVEO0FBQ3ZELDRFQUFzRTtBQUd0RSwrRUFBK0U7QUFFL0U7OztHQUdHO0FBQ0gsTUFBcUIsSUFBSyxTQUFRLGlCQUFRO0lBQ3RDLFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRyxFQUFFO1lBQ3ZDLElBQUksRUFBRSxNQUFNO1lBQ1osTUFBTSxFQUFFLE1BQU07WUFDZCxXQUFXLEVBQUUsQ0FBRSxJQUFJLENBQUU7WUFDckIsMEZBQTBGO1lBQzFGLFdBQVcsRUFBRSxHQUFHO1lBQ2hCLFNBQVMsRUFBRSxHQUFHO1lBQ2QsS0FBSyxFQUFFO2dCQUNILE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsSUFBSTtnQkFDWixRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLG1CQUFtQixFQUFFLEtBQUs7Z0JBQzFCLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixjQUFjLEVBQUUsSUFBSTtnQkFDcEIsbUJBQW1CLEVBQUUsSUFBSTtnQkFDekIscUJBQXFCLEVBQUUsS0FBSztnQkFDNUIsa0JBQWtCLEVBQUUsS0FBSztnQkFDekIseUJBQXlCLEVBQUUsS0FBSztnQkFDaEMsbUJBQW1CLEVBQUUsS0FBSztnQkFDMUIsaUJBQWlCLEVBQUUsS0FBSztnQkFDeEIsY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLGdCQUFnQixFQUFFLEtBQUs7Z0JBQ3ZCLDBCQUEwQixFQUFFLEtBQUs7Z0JBQ2pDLGlCQUFpQixFQUFFLElBQUk7Z0JBQ3ZCLGdCQUFn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QVMsRUFBRTtZQUNyQixJQUFJLENBQUMsNEJBQTRCLENBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLDRCQUE0QixDQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzlFLE1BQU0sSUFBSSx5QkFBYSxDQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsa0JBQWtCO1NBQ3pEO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixNQUFNLElBQUkseUJBQWEsQ0FBRSxRQUFRLENBQUMsQ0FBQztTQUN0QztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7Q0FDSjtBQWp1QkQsdUJBaXVCQyIsInNvdXJjZXNDb250ZW50IjpbIlxuLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pbXBvcnQgRXhjaGFuZ2UgZnJvbSAnLi9hYnN0cmFjdC96YWlmLmpzJztcbmltcG9ydCB7IEV4Y2hhbmdlRXJyb3IsIEJhZFJlcXVlc3QgfSBmcm9tICcuL2Jhc2UvZXJyb3JzLmpzJztcbmltcG9ydCB7IFByZWNpc2UgfSBmcm9tICcuL2Jhc2UvUHJlY2lzZS5qcyc7XG5pbXBvcnQgeyBUSUNLX1NJWkUgfSBmcm9tICcuL2Jhc2UvZnVuY3Rpb25zL251bWJlci5qcyc7XG5pbXBvcnQgeyBzaGE1MTIgfSBmcm9tICcuL3N0YXRpY19kZXBlbmRlbmNpZXMvbm9ibGUtaGFzaGVzL3NoYTUxMi5qcyc7XG5pbXBvcnQgeyBCYWxhbmNlcywgQ3VycmVuY3ksIEludCwgTWFya2V0LCBPcmRlciwgT3JkZXJCb29rLCBPcmRlclNpZGUsIE9yZGVyVHlwZSwgU3RyLCBUaWNrZXIsIFRyYWRlLCBUcmFuc2FjdGlvbiB9IGZyb20gJy4vYmFzZS90eXBlcy5qcyc7XG5cbi8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBAY2xhc3MgemFpZlxuICogQGV4dGVuZHMgRXhjaGFuZ2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgemFpZiBleHRlbmRzIEV4Y2hhbmdlIHtcbiAgICBkZXNjcmliZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZXBFeHRlbmQgKHN1cGVyLmRlc2NyaWJlICgpLCB7XG4gICAgICAgICAgICAnaWQnOiAnemFpZicsXG4gICAgICAgICAgICAnbmFtZSc6ICdaYWlmJyxcbiAgICAgICAgICAgICdjb3VudHJpZXMnOiBbICdKUCcgXSxcbiAgICAgICAgICAgIC8vIDEwIHJlcXVlc3RzIHBlciBzZWNvbmQgPSAxMDAwbXMgLyAxMCA9IDEwMG1zIGJldHdlZW4gcmVxdWVzdHMgKHB1YmxpYyBtYXJrZXQgZW5kcG9pbnRzKVxuICAgICAgICAgICAgJ3JhdGVMaW1pdCc6IDEwMCxcbiAgICAgICAgICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICAgICAgICAgJ2hhcyc6IHtcbiAgICAgICAgICAgICAgICAnQ09SUyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAnc3BvdCc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ21hcmdpbic6IHVuZGVmaW5lZCwgLy8gaGFzIGJ1dCB1bmltcGxlbWVudGVkXG4gICAgICAgICAgICAgICAgJ3N3YXAnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZnV0dXJlJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ29wdGlvbic6IGZhbHNlLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcic6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZU1hcmtldE9yZGVyJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZU9yZGVyJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hCYWxhbmNlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hDbG9zZWRPcmRlcnMnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdmZXRjaEZ1bmRpbmdIaXN0b3J5JzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ2ZldGNoRnVuZGluZ1JhdGUnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hGdW5kaW5nUmF0ZUhpc3RvcnknOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hGdW5kaW5nUmF0ZXMnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hJbmRleE9ITENWJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ2ZldGNoTWFya2V0cyc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2ZldGNoTWFya09ITENWJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ2ZldGNoT3BlbkludGVyZXN0SGlzdG9yeSc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICdmZXRjaE9wZW5PcmRlcnMnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdmZXRjaE9yZGVyQm9vayc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2ZldGNoUHJlbWl1bUluZGV4T0hMQ1YnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hUaWNrZXInOiB0cnVlLFxuICAgICAgICAgICAgICAgICdmZXRjaFRyYWRlcyc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2ZldGNoVHJhZGluZ0ZlZSc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICdmZXRjaFRyYWRpbmdGZWVzJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JzogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAndXJscyc6IHtcbiAgICAgICAgICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2OTI3LTM5Y2EyYWRhLTVlZWItMTFlNy05NzJmLTFiNDE5OTUxOGNhNi5qcGcnLFxuICAgICAgICAgICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAgICAgICAgICdyZXN0JzogJ2h0dHBzOi8vYXBpLnphaWYuanAnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ3d3dyc6ICdodHRwczovL3phaWYuanAnLFxuICAgICAgICAgICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAgICAgICAgICdodHRwczovL3RlY2hidXJlYXUtYXBpLWRvY3VtZW50LnJlYWR0aGVkb2NzLmlvL2phL2xhdGVzdC9pbmRleC5odG1sJyxcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vY29ycC56YWlmLmpwL2FwaS1kb2NzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vY29ycC56YWlmLmpwL2FwaS1kb2NzL2FwaV9saW5rcycsXG4gICAgICAgICAgICAgICAgICAgICdodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS96YWlmLmpwJyxcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS95b3UyMTk3OS9ub2RlLXphaWYnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgJ2ZlZXMnOiAnaHR0cHM6Ly96YWlmLmpwL2ZlZT9sYW5nPWVuJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZmVlcyc6IHtcbiAgICAgICAgICAgICAgICAndHJhZGluZyc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAndGFrZXInOiB0aGlzLnBhcnNlTnVtYmVyICgnMC4wMDEnKSxcbiAgICAgICAgICAgICAgICAgICAgJ21ha2VyJzogdGhpcy5wYXJzZU51bWJlciAoJzAnKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2dldCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdkZXB0aC97cGFpcn0nOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2N1cnJlbmNpZXMve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjdXJyZW5jaWVzL2FsbCc6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAnY3VycmVuY3lfcGFpcnMve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjdXJyZW5jeV9wYWlycy9hbGwnOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2xhc3RfcHJpY2Uve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0aWNrZXIve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0cmFkZXMve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgICAgICAgICAncG9zdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhY3RpdmVfb3JkZXJzJzogNSwgLy8gMTAgaW4gNSBzZWNvbmRzID0gMiBwZXIgc2Vjb25kID0+IGNvc3QgPSAxMCAvIDIgPSA1XG4gICAgICAgICAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyJzogNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdkZXBvc2l0X2hpc3RvcnknOiA1LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9pZF9pbmZvJzogNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfaW5mbyc6IDEwLCAvLyAxMCBpbiAxMCBzZWNvbmRzID0gMSBwZXIgc2Vjb25kID0+IGNvc3QgPSAxMCAvIDEgPSAxMFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9pbmZvMic6IDUsIC8vIDIwIGluIDEwIHNlY29uZHMgPSAyIHBlciBzZWNvbmQgPT4gY29zdCA9IDEwIC8gMiA9IDVcbiAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfcGVyc29uYWxfaW5mbyc6IDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAndHJhZGUnOiA1LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYWRlX2hpc3RvcnknOiA1MCwgLy8gMTIgaW4gNjAgc2Vjb25kcyA9IDAuMiBwZXIgc2Vjb25kID0+IGNvc3QgPSAxMCAvIDAuMiA9IDUwXG4gICAgICAgICAgICAgICAgICAgICAgICAnd2l0aGRyYXcnOiA1LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2hpc3RvcnknOiA1LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2VjYXBpJzoge1xuICAgICAgICAgICAgICAgICAgICAncG9zdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGVJbnZvaWNlJzogMSwgLy8gdW52ZXJpZmllZFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldEludm9pY2UnOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldEludm9pY2VJZHNCeU9yZGVyTnVtYmVyJzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjYW5jZWxJbnZvaWNlJzogMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICd0bGFwaSc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3Bvc3QnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X3Bvc2l0aW9ucyc6IDY2LCAvLyAxMCBpbiA2MCBzZWNvbmRzID0gMC4xNjYgcGVyIHNlY29uZCA9PiBjb3N0ID0gMTAgLyAwLjE2NiA9IDY2XG4gICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb25faGlzdG9yeSc6IDY2LCAvLyAxMCBpbiA2MCBzZWNvbmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAnYWN0aXZlX3Bvc2l0aW9ucyc6IDUsIC8vIDIwIGluIDEwIHNlY29uZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGVfcG9zaXRpb24nOiAzMywgLy8gMyBpbiAxMCBzZWNvbmRzID0gMC4zIHBlciBzZWNvbmQgPT4gY29zdCA9IDEwIC8gMC4zID0gMzNcbiAgICAgICAgICAgICAgICAgICAgICAgICdjaGFuZ2VfcG9zaXRpb24nOiAzMywgLy8gMyBpbiAxMCBzZWNvbmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAnY2FuY2VsX3Bvc2l0aW9uJzogMzMsIC8vIDMgaW4gMTAgc2Vjb25kc1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2ZhcGknOiB7XG4gICAgICAgICAgICAgICAgICAgICdnZXQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXBzL3tncm91cF9pZH0nOiAxLCAvLyB0ZXN0aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAnbGFzdF9wcmljZS97Z3JvdXBfaWR9L3twYWlyfSc6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAndGlja2VyL3tncm91cF9pZH0ve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0cmFkZXMve2dyb3VwX2lkfS97cGFpcn0nOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcHRoL3tncm91cF9pZH0ve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdvcHRpb25zJzoge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdwcmVjaXNpb25Nb2RlJzogVElDS19TSVpFLFxuICAgICAgICAgICAgJ2V4Y2VwdGlvbnMnOiB7XG4gICAgICAgICAgICAgICAgJ2V4YWN0Jzoge1xuICAgICAgICAgICAgICAgICAgICAndW5zdXBwb3J0ZWQgY3VycmVuY3lfcGFpcic6IEJhZFJlcXVlc3QsIC8vIHtcImVycm9yXCI6IFwidW5zdXBwb3J0ZWQgY3VycmVuY3lfcGFpclwifVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2Jyb2FkJzoge1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBuYW1lIHphaWYjZmV0Y2hNYXJrZXRzXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly96YWlmLWFwaS1kb2N1bWVudC5yZWFkdGhlZG9jcy5pby9qYS9sYXRlc3QvUHVibGljQVBJLmh0bWwjaWQxMlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gcmV0cmlldmVzIGRhdGEgb24gYWxsIG1hcmtldHMgZm9yIHphaWZcbiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIGV4dHJhIHBhcmFtZXRlcnMgc3BlY2lmaWMgdG8gdGhlIGV4Y2hhbmdlIEFQSSBlbmRwb2ludFxuICAgICAgICAgKiBAcmV0dXJucyB7b2JqZWN0W119IGFuIGFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIG1hcmtldCBkYXRhXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRDdXJyZW5jeVBhaXJzQWxsIChwYXJhbXMpO1xuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgW1xuICAgICAgICAvLyAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJhdXhfdW5pdF9wb2ludFwiOiAwLFxuICAgICAgICAvLyAgICAgICAgICAgICBcIml0ZW1famFwYW5lc2VcIjogXCJcXHUzMGQzXFx1MzBjM1xcdTMwYzhcXHUzMGIzXFx1MzBhNFxcdTMwZjNcIixcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJhdXhfdW5pdF9zdGVwXCI6IDUuMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlxcdTMwZDNcXHUzMGMzXFx1MzBjOFxcdTMwYjNcXHUzMGE0XFx1MzBmM1xcdTMwZmJcXHU2NWU1XFx1NjcyY1xcdTUxODZcXHUzMDZlXFx1NTNkNlxcdTVmMTVcXHUzMDkyXFx1ODg0Y1xcdTMwNDZcXHUzMDUzXFx1MzA2OFxcdTMwNGNcXHUzMDY3XFx1MzA0ZFxcdTMwN2VcXHUzMDU5XCIsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiaXRlbV91bml0X21pblwiOiAwLjAwMSxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJldmVudF9udW1iZXJcIjogMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJjdXJyZW5jeV9wYWlyXCI6IFwiYnRjX2pweVwiLFxuICAgICAgICAvLyAgICAgICAgICAgICBcImlzX3Rva2VuXCI6IGZhbHNlLFxuICAgICAgICAvLyAgICAgICAgICAgICBcImF1eF91bml0X21pblwiOiA1LjAsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiYXV4X2phcGFuZXNlXCI6IFwiXFx1NjVlNVxcdTY3MmNcXHU1MTg2XCIsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJpdGVtX3VuaXRfc3RlcFwiOiAwLjAwMDEsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwibmFtZVwiOiBcIkJUQy9KUFlcIixcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJzZXFcIjogMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIkJUQy9KUFlcIlxuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIF1cbiAgICAgICAgLy9cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VNYXJrZXRzIChtYXJrZXRzKTtcbiAgICB9XG5cbiAgICBwYXJzZU1hcmtldCAobWFya2V0KTogTWFya2V0IHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnNhZmVTdHJpbmcgKG1hcmtldCwgJ2N1cnJlbmN5X3BhaXInKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuc2FmZVN0cmluZyAobWFya2V0LCAnbmFtZScpO1xuICAgICAgICBjb25zdCBbIGJhc2VJZCwgcXVvdGVJZCBdID0gbmFtZS5zcGxpdCAoJy8nKTtcbiAgICAgICAgY29uc3QgYmFzZSA9IHRoaXMuc2FmZUN1cnJlbmN5Q29kZSAoYmFzZUlkKTtcbiAgICAgICAgY29uc3QgcXVvdGUgPSB0aGlzLnNhZmVDdXJyZW5jeUNvZGUgKHF1b3RlSWQpO1xuICAgICAgICBjb25zdCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICdzZXR0bGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZUlkJzogYmFzZUlkLFxuICAgICAgICAgICAgJ3F1b3RlSWQnOiBxdW90ZUlkLFxuICAgICAgICAgICAgJ3NldHRsZUlkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3R5cGUnOiAnc3BvdCcsXG4gICAgICAgICAgICAnc3BvdCc6IHRydWUsXG4gICAgICAgICAgICAnbWFyZ2luJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3N3YXAnOiBmYWxzZSxcbiAgICAgICAgICAgICdmdXR1cmUnOiBmYWxzZSxcbiAgICAgICAgICAgICdvcHRpb24nOiBmYWxzZSxcbiAgICAgICAgICAgICdhY3RpdmUnOiB1bmRlZmluZWQsIC8vIGNhbiB0cmFkZSBvciBub3RcbiAgICAgICAgICAgICdjb250cmFjdCc6IGZhbHNlLFxuICAgICAgICAgICAgJ2xpbmVhcic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbnZlcnNlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2NvbnRyYWN0U2l6ZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdleHBpcnknOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZXhwaXJ5RGF0ZXRpbWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnc3RyaWtlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wdGlvblR5cGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncHJlY2lzaW9uJzoge1xuICAgICAgICAgICAgICAgICdhbW91bnQnOiB0aGlzLnNhZmVOdW1iZXIgKG1hcmtldCwgJ2l0ZW1fdW5pdF9zdGVwJyksXG4gICAgICAgICAgICAgICAgJ3ByaWNlJzogdGhpcy5wYXJzZU51bWJlciAodGhpcy5wYXJzZVByZWNpc2lvbiAodGhpcy5zYWZlU3RyaW5nIChtYXJrZXQsICdhdXhfdW5pdF9wb2ludCcpKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2xpbWl0cyc6IHtcbiAgICAgICAgICAgICAgICAnbGV2ZXJhZ2UnOiB7XG4gICAgICAgICAgICAgICAgICAgICdtaW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICdtYXgnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnYW1vdW50Jzoge1xuICAgICAgICAgICAgICAgICAgICAnbWluJzogdGhpcy5zYWZlTnVtYmVyIChtYXJrZXQsICdpdGVtX3VuaXRfbWluJyksXG4gICAgICAgICAgICAgICAgICAgICdtYXgnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAncHJpY2UnOiB7XG4gICAgICAgICAgICAgICAgICAgICdtaW4nOiB0aGlzLnNhZmVOdW1iZXIgKG1hcmtldCwgJ2F1eF91bml0X21pbicpLFxuICAgICAgICAgICAgICAgICAgICAnbWF4JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2Nvc3QnOiB7XG4gICAgICAgICAgICAgICAgICAgICdtaW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICdtYXgnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnY3JlYXRlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHBhcnNlQmFsYW5jZSAocmVzcG9uc2UpOiBCYWxhbmNlcyB7XG4gICAgICAgIGNvbnN0IGJhbGFuY2VzID0gdGhpcy5zYWZlVmFsdWUgKHJlc3BvbnNlLCAncmV0dXJuJywge30pO1xuICAgICAgICBjb25zdCBkZXBvc2l0ID0gdGhpcy5zYWZlVmFsdWUgKGJhbGFuY2VzLCAnZGVwb3NpdCcpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZnVuZHMgPSB0aGlzLnNhZmVWYWx1ZSAoYmFsYW5jZXMsICdmdW5kcycsIHt9KTtcbiAgICAgICAgY29uc3QgY3VycmVuY3lJZHMgPSBPYmplY3Qua2V5cyAoZnVuZHMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbmN5SWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW5jeUlkID0gY3VycmVuY3lJZHNbaV07XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gdGhpcy5zYWZlQ3VycmVuY3lDb2RlIChjdXJyZW5jeUlkKTtcbiAgICAgICAgICAgIGNvbnN0IGJhbGFuY2UgPSB0aGlzLnNhZmVTdHJpbmcgKGZ1bmRzLCBjdXJyZW5jeUlkKTtcbiAgICAgICAgICAgIGNvbnN0IGFjY291bnQgPSB0aGlzLmFjY291bnQgKCk7XG4gICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBiYWxhbmNlO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IGJhbGFuY2U7XG4gICAgICAgICAgICBpZiAoZGVwb3NpdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbmN5SWQgaW4gZGVwb3NpdCkge1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zYWZlU3RyaW5nIChkZXBvc2l0LCBjdXJyZW5jeUlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY29kZV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVCYWxhbmNlIChyZXN1bHQpO1xuICAgIH1cblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAocGFyYW1zID0ge30pOiBQcm9taXNlPEJhbGFuY2VzPiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBuYW1lIHphaWYjZmV0Y2hCYWxhbmNlXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly96YWlmLWFwaS1kb2N1bWVudC5yZWFkdGhlZG9jcy5pby9qYS9sYXRlc3QvVHJhZGluZ0FQSS5odG1sI2lkMTBcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIHF1ZXJ5IGZvciBiYWxhbmNlIGFuZCBnZXQgdGhlIGFtb3VudCBvZiBmdW5kcyBhdmFpbGFibGUgZm9yIHRyYWRpbmcgb3IgZnVuZHMgbG9ja2VkIGluIG9yZGVyc1xuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gZXh0cmEgcGFyYW1ldGVycyBzcGVjaWZpYyB0byB0aGUgZXhjaGFuZ2UgQVBJIGVuZHBvaW50XG4gICAgICAgICAqIEByZXR1cm5zIHtvYmplY3R9IGEgW2JhbGFuY2Ugc3RydWN0dXJlXXtAbGluayBodHRwczovL2RvY3MuY2N4dC5jb20vIy8/aWQ9YmFsYW5jZS1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHZXRJbmZvIChwYXJhbXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUJhbGFuY2UgKHJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAoc3ltYm9sOiBzdHJpbmcsIGxpbWl0OiBJbnQgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KTogUHJvbWlzZTxPcmRlckJvb2s+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNmZXRjaE9yZGVyQm9va1xuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vemFpZi1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L1B1YmxpY0FQSS5odG1sI2lkMzRcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGZldGNoZXMgaW5mb3JtYXRpb24gb24gb3BlbiBvcmRlcnMgd2l0aCBiaWQgKGJ1eSkgYW5kIGFzayAoc2VsbCkgcHJpY2VzLCB2b2x1bWVzIGFuZCBvdGhlciBkYXRhXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzeW1ib2wgdW5pZmllZCBzeW1ib2wgb2YgdGhlIG1hcmtldCB0byBmZXRjaCB0aGUgb3JkZXIgYm9vayBmb3JcbiAgICAgICAgICogQHBhcmFtIHtpbnR9IFtsaW1pdF0gdGhlIG1heGltdW0gYW1vdW50IG9mIG9yZGVyIGJvb2sgZW50cmllcyB0byByZXR1cm5cbiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIGV4dHJhIHBhcmFtZXRlcnMgc3BlY2lmaWMgdG8gdGhlIGV4Y2hhbmdlIEFQSSBlbmRwb2ludFxuICAgICAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBBIGRpY3Rpb25hcnkgb2YgW29yZGVyIGJvb2sgc3RydWN0dXJlc117QGxpbmsgaHR0cHM6Ly9kb2NzLmNjeHQuY29tLyMvP2lkPW9yZGVyLWJvb2stc3RydWN0dXJlfSBpbmRleGVkIGJ5IG1hcmtldCBzeW1ib2xzXG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBjb25zdCBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICdwYWlyJzogbWFya2V0WydpZCddLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0RGVwdGhQYWlyICh0aGlzLmV4dGVuZCAocmVxdWVzdCwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXJCb29rIChyZXNwb25zZSwgbWFya2V0WydzeW1ib2wnXSk7XG4gICAgfVxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0OiBNYXJrZXQgPSB1bmRlZmluZWQpOiBUaWNrZXIge1xuICAgICAgICAvL1xuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBcImxhc3RcIjogOWUtMDgsXG4gICAgICAgIC8vICAgICBcImhpZ2hcIjogMWUtMDcsXG4gICAgICAgIC8vICAgICBcImxvd1wiOiA5ZS0wOCxcbiAgICAgICAgLy8gICAgIFwidndhcFwiOiAwLjAsXG4gICAgICAgIC8vICAgICBcInZvbHVtZVwiOiAxMzUyNTAuMCxcbiAgICAgICAgLy8gICAgIFwiYmlkXCI6IDllLTA4LFxuICAgICAgICAvLyAgICAgXCJhc2tcIjogMWUtMDdcbiAgICAgICAgLy8gfVxuICAgICAgICAvL1xuICAgICAgICBjb25zdCBzeW1ib2wgPSB0aGlzLnNhZmVTeW1ib2wgKHVuZGVmaW5lZCwgbWFya2V0KTtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGNvbnN0IHZ3YXAgPSB0aGlzLnNhZmVTdHJpbmcgKHRpY2tlciwgJ3Z3YXAnKTtcbiAgICAgICAgY29uc3QgYmFzZVZvbHVtZSA9IHRoaXMuc2FmZVN0cmluZyAodGlja2VyLCAndm9sdW1lJyk7XG4gICAgICAgIGNvbnN0IHF1b3RlVm9sdW1lID0gUHJlY2lzZS5zdHJpbmdNdWwgKGJhc2VWb2x1bWUsIHZ3YXApO1xuICAgICAgICBjb25zdCBsYXN0ID0gdGhpcy5zYWZlU3RyaW5nICh0aWNrZXIsICdsYXN0Jyk7XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVUaWNrZXIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB0aGlzLnNhZmVTdHJpbmcgKHRpY2tlciwgJ2hpZ2gnKSxcbiAgICAgICAgICAgICdsb3cnOiB0aGlzLnNhZmVTdHJpbmcgKHRpY2tlciwgJ2xvdycpLFxuICAgICAgICAgICAgJ2JpZCc6IHRoaXMuc2FmZVN0cmluZyAodGlja2VyLCAnYmlkJyksXG4gICAgICAgICAgICAnYmlkVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Fzayc6IHRoaXMuc2FmZVN0cmluZyAodGlja2VyLCAnYXNrJyksXG4gICAgICAgICAgICAnYXNrVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3Z3YXAnOiB2d2FwLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiBsYXN0LFxuICAgICAgICAgICAgJ2xhc3QnOiBsYXN0LFxuICAgICAgICAgICAgJ3ByZXZpb3VzQ2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogYmFzZVZvbHVtZSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHF1b3RlVm9sdW1lLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH0sIG1hcmtldCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKHN5bWJvbDogc3RyaW5nLCBwYXJhbXMgPSB7fSk6IFByb21pc2U8VGlja2VyPiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBuYW1lIHphaWYjZmV0Y2hUaWNrZXJcbiAgICAgICAgICogQHNlZSBodHRwczovL3phaWYtYXBpLWRvY3VtZW50LnJlYWR0aGVkb2NzLmlvL2phL2xhdGVzdC9QdWJsaWNBUEkuaHRtbCNpZDIyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBmZXRjaGVzIGEgcHJpY2UgdGlja2VyLCBhIHN0YXRpc3RpY2FsIGNhbGN1bGF0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGNhbGN1bGF0ZWQgb3ZlciB0aGUgcGFzdCAyNCBob3VycyBmb3IgYSBzcGVjaWZpYyBtYXJrZXRcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbCB1bmlmaWVkIHN5bWJvbCBvZiB0aGUgbWFya2V0IHRvIGZldGNoIHRoZSB0aWNrZXIgZm9yXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBleHRyYSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBleGNoYW5nZSBBUEkgZW5kcG9pbnRcbiAgICAgICAgICogQHJldHVybnMge29iamVjdH0gYSBbdGlja2VyIHN0cnVjdHVyZV17QGxpbmsgaHR0cHM6Ly9kb2NzLmNjeHQuY29tLyMvP2lkPXRpY2tlci1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBjb25zdCBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICdwYWlyJzogbWFya2V0WydpZCddLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlclBhaXIgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgICAgXCJsYXN0XCI6IDllLTA4LFxuICAgICAgICAvLyAgICAgXCJoaWdoXCI6IDFlLTA3LFxuICAgICAgICAvLyAgICAgXCJsb3dcIjogOWUtMDgsXG4gICAgICAgIC8vICAgICBcInZ3YXBcIjogMC4wLFxuICAgICAgICAvLyAgICAgXCJ2b2x1bWVcIjogMTM1MjUwLjAsXG4gICAgICAgIC8vICAgICBcImJpZFwiOiA5ZS0wOCxcbiAgICAgICAgLy8gICAgIFwiYXNrXCI6IDFlLTA3XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICB9XG5cbiAgICBwYXJzZVRyYWRlICh0cmFkZSwgbWFya2V0OiBNYXJrZXQgPSB1bmRlZmluZWQpOiBUcmFkZSB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIGZldGNoVHJhZGVzIChwdWJsaWMpXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICAge1xuICAgICAgICAvLyAgICAgICAgICBcImRhdGVcIjogMTY0ODU1OTQxNCxcbiAgICAgICAgLy8gICAgICAgICAgXCJwcmljZVwiOiA1ODgwMzc1LjAsXG4gICAgICAgIC8vICAgICAgICAgIFwiYW1vdW50XCI6IDAuMDE3LFxuICAgICAgICAvLyAgICAgICAgICBcInRpZFwiOiAxNzYxMjY1NTcsXG4gICAgICAgIC8vICAgICAgICAgIFwiY3VycmVuY3lfcGFpclwiOiBcImJ0Y19qcHlcIixcbiAgICAgICAgLy8gICAgICAgICAgXCJ0cmFkZV90eXBlXCI6IFwiYXNrXCJcbiAgICAgICAgLy8gICAgICB9XG4gICAgICAgIC8vXG4gICAgICAgIGxldCBzaWRlID0gdGhpcy5zYWZlU3RyaW5nICh0cmFkZSwgJ3RyYWRlX3R5cGUnKTtcbiAgICAgICAgc2lkZSA9IChzaWRlID09PSAnYmlkJykgPyAnYnV5JyA6ICdzZWxsJztcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5zYWZlVGltZXN0YW1wICh0cmFkZSwgJ2RhdGUnKTtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnNhZmVTdHJpbmcyICh0cmFkZSwgJ2lkJywgJ3RpZCcpO1xuICAgICAgICBjb25zdCBwcmljZVN0cmluZyA9IHRoaXMuc2FmZVN0cmluZyAodHJhZGUsICdwcmljZScpO1xuICAgICAgICBjb25zdCBhbW91bnRTdHJpbmcgPSB0aGlzLnNhZmVTdHJpbmcgKHRyYWRlLCAnYW1vdW50Jyk7XG4gICAgICAgIGNvbnN0IG1hcmtldElkID0gdGhpcy5zYWZlU3RyaW5nICh0cmFkZSwgJ2N1cnJlbmN5X3BhaXInKTtcbiAgICAgICAgY29uc3Qgc3ltYm9sID0gdGhpcy5zYWZlU3ltYm9sIChtYXJrZXRJZCwgbWFya2V0LCAnXycpO1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlVHJhZGUgKHtcbiAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgJ2luZm8nOiB0cmFkZSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgJ3R5cGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnc2lkZSc6IHNpZGUsXG4gICAgICAgICAgICAnb3JkZXInOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndGFrZXJPck1ha2VyJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2VTdHJpbmcsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50U3RyaW5nLFxuICAgICAgICAgICAgJ2Nvc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmVlJzogdW5kZWZpbmVkLFxuICAgICAgICB9LCBtYXJrZXQpO1xuICAgIH1cblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChzeW1ib2w6IHN0cmluZywgc2luY2U6IEludCA9IHVuZGVmaW5lZCwgbGltaXQ6IEludCA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pOiBQcm9taXNlPFRyYWRlW10+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNmZXRjaFRyYWRlc1xuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vemFpZi1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L1B1YmxpY0FQSS5odG1sI2lkMjhcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGdldCB0aGUgbGlzdCBvZiBtb3N0IHJlY2VudCB0cmFkZXMgZm9yIGEgcGFydGljdWxhciBzeW1ib2xcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbCB1bmlmaWVkIHN5bWJvbCBvZiB0aGUgbWFya2V0IHRvIGZldGNoIHRyYWRlcyBmb3JcbiAgICAgICAgICogQHBhcmFtIHtpbnR9IFtzaW5jZV0gdGltZXN0YW1wIGluIG1zIG9mIHRoZSBlYXJsaWVzdCB0cmFkZSB0byBmZXRjaFxuICAgICAgICAgKiBAcGFyYW0ge2ludH0gW2xpbWl0XSB0aGUgbWF4aW11bSBhbW91bnQgb2YgdHJhZGVzIHRvIGZldGNoXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBleHRyYSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBleGNoYW5nZSBBUEkgZW5kcG9pbnRcbiAgICAgICAgICogQHJldHVybnMge1RyYWRlW119IGEgbGlzdCBvZiBbdHJhZGUgc3RydWN0dXJlc117QGxpbmsgaHR0cHM6Ly9kb2NzLmNjeHQuY29tLyMvP2lkPXB1YmxpYy10cmFkZXN9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBjb25zdCBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICdwYWlyJzogbWFya2V0WydpZCddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRyYWRlc1BhaXIgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBbXG4gICAgICAgIC8vICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgIFwiZGF0ZVwiOiAxNjQ4NTU5NDE0LFxuICAgICAgICAvLyAgICAgICAgICAgICAgXCJwcmljZVwiOiA1ODgwMzc1LjAsXG4gICAgICAgIC8vICAgICAgICAgICAgICBcImFtb3VudFwiOiAwLjAxNyxcbiAgICAgICAgLy8gICAgICAgICAgICAgIFwidGlkXCI6IDE3NjEyNjU1NyxcbiAgICAgICAgLy8gICAgICAgICAgICAgIFwiY3VycmVuY3lfcGFpclwiOiBcImJ0Y19qcHlcIixcbiAgICAgICAgLy8gICAgICAgICAgICAgIFwidHJhZGVfdHlwZVwiOiBcImFza1wiXG4gICAgICAgIC8vICAgICAgICAgIH0sIC4uLlxuICAgICAgICAvLyAgICAgIF1cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgbnVtVHJhZGVzID0gcmVzcG9uc2UubGVuZ3RoO1xuICAgICAgICBpZiAobnVtVHJhZGVzID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFRyYWRlID0gcmVzcG9uc2VbMF07XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5rZXlzIChmaXJzdFRyYWRlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzIChyZXNwb25zZSwgbWFya2V0LCBzaW5jZSwgbGltaXQpO1xuICAgIH1cblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChzeW1ib2w6IHN0cmluZywgdHlwZTogT3JkZXJUeXBlLCBzaWRlOiBPcmRlclNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBuYW1lIHphaWYjY3JlYXRlT3JkZXJcbiAgICAgICAgICogQHNlZSBodHRwczovL3phaWYtYXBpLWRvY3VtZW50LnJlYWR0aGVkb2NzLmlvL2phL2xhdGVzdC9NYXJnaW5UcmFkaW5nQVBJLmh0bWwjaWQyM1xuICAgICAgICAgKiBAZGVzY3JpcHRpb24gY3JlYXRlIGEgdHJhZGUgb3JkZXJcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbCB1bmlmaWVkIHN5bWJvbCBvZiB0aGUgbWFya2V0IHRvIGNyZWF0ZSBhbiBvcmRlciBpblxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBtdXN0IGJlICdsaW1pdCdcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZGUgJ2J1eScgb3IgJ3NlbGwnXG4gICAgICAgICAqIEBwYXJhbSB7ZmxvYXR9IGFtb3VudCBob3cgbXVjaCBvZiBjdXJyZW5jeSB5b3Ugd2FudCB0byB0cmFkZSBpbiB1bml0cyBvZiBiYXNlIGN1cnJlbmN5XG4gICAgICAgICAqIEBwYXJhbSB7ZmxvYXR9IFtwcmljZV0gdGhlIHByaWNlIGF0IHdoaWNoIHRoZSBvcmRlciBpcyB0byBiZSBmdWxsZmlsbGVkLCBpbiB1bml0cyBvZiB0aGUgcXVvdGUgY3VycmVuY3ksIGlnbm9yZWQgaW4gbWFya2V0IG9yZGVyc1xuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gZXh0cmEgcGFyYW1ldGVycyBzcGVjaWZpYyB0byB0aGUgZXhjaGFuZ2UgQVBJIGVuZHBvaW50XG4gICAgICAgICAqIEByZXR1cm5zIHtvYmplY3R9IGFuIFtvcmRlciBzdHJ1Y3R1cmVde0BsaW5rIGh0dHBzOi8vZG9jcy5jY3h0LmNvbS8jLz9pZD1vcmRlci1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSAhPT0gJ2xpbWl0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGNyZWF0ZU9yZGVyKCkgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWFya2V0ID0gdGhpcy5tYXJrZXQgKHN5bWJvbCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgICAnY3VycmVuY3lfcGFpcic6IG1hcmtldFsnaWQnXSxcbiAgICAgICAgICAgICdhY3Rpb24nOiAoc2lkZSA9PT0gJ2J1eScpID8gJ2JpZCcgOiAnYXNrJyxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VHJhZGUgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FmZU9yZGVyICh7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3JldHVybiddWydvcmRlcl9pZCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9LCBtYXJrZXQpO1xuICAgIH1cblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZDogc3RyaW5nLCBzeW1ib2w6IFN0ciA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNjYW5jZWxPcmRlclxuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vemFpZi1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L1RyYWRpbmdBUEkuaHRtbCNpZDM3XG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBjYW5jZWxzIGFuIG9wZW4gb3JkZXJcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIG9yZGVyIGlkXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzeW1ib2wgbm90IHVzZWQgYnkgemFpZiBjYW5jZWxPcmRlciAoKVxuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gZXh0cmEgcGFyYW1ldGVycyBzcGVjaWZpYyB0byB0aGUgZXhjaGFuZ2UgQVBJIGVuZHBvaW50XG4gICAgICAgICAqIEByZXR1cm5zIHtvYmplY3R9IEFuIFtvcmRlciBzdHJ1Y3R1cmVde0BsaW5rIGh0dHBzOi8vZG9jcy5jY3h0LmNvbS8jLz9pZD1vcmRlci1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgJ29yZGVyX2lkJzogaWQsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICB9XG5cbiAgICBwYXJzZU9yZGVyIChvcmRlciwgbWFya2V0OiBNYXJrZXQgPSB1bmRlZmluZWQpOiBPcmRlciB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICB7XG4gICAgICAgIC8vICAgICAgICAgXCJjdXJyZW5jeV9wYWlyXCI6IFwiYnRjX2pweVwiLFxuICAgICAgICAvLyAgICAgICAgIFwiYWN0aW9uXCI6IFwiYXNrXCIsXG4gICAgICAgIC8vICAgICAgICAgXCJhbW91bnRcIjogMC4wMyxcbiAgICAgICAgLy8gICAgICAgICBcInByaWNlXCI6IDU2MDAwLFxuICAgICAgICAvLyAgICAgICAgIFwidGltZXN0YW1wXCI6IDE0MDIwMjExMjUsXG4gICAgICAgIC8vICAgICAgICAgXCJjb21tZW50XCIgOiBcImRlbW9cIlxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvL1xuICAgICAgICBsZXQgc2lkZSA9IHRoaXMuc2FmZVN0cmluZyAob3JkZXIsICdhY3Rpb24nKTtcbiAgICAgICAgc2lkZSA9IChzaWRlID09PSAnYmlkJykgPyAnYnV5JyA6ICdzZWxsJztcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5zYWZlVGltZXN0YW1wIChvcmRlciwgJ3RpbWVzdGFtcCcpO1xuICAgICAgICBjb25zdCBtYXJrZXRJZCA9IHRoaXMuc2FmZVN0cmluZyAob3JkZXIsICdjdXJyZW5jeV9wYWlyJyk7XG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IHRoaXMuc2FmZVN5bWJvbCAobWFya2V0SWQsIG1hcmtldCwgJ18nKTtcbiAgICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLnNhZmVTdHJpbmcgKG9yZGVyLCAncHJpY2UnKTtcbiAgICAgICAgY29uc3QgYW1vdW50ID0gdGhpcy5zYWZlU3RyaW5nIChvcmRlciwgJ2Ftb3VudCcpO1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuc2FmZVN0cmluZyAob3JkZXIsICdpZCcpO1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlT3JkZXIgKHtcbiAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgJ2NsaWVudE9yZGVySWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2xhc3RUcmFkZVRpbWVzdGFtcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdzdGF0dXMnOiAnb3BlbicsXG4gICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgJ3R5cGUnOiAnbGltaXQnLFxuICAgICAgICAgICAgJ3RpbWVJbkZvcmNlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3Bvc3RPbmx5JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAnc3RvcFByaWNlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3RyaWdnZXJQcmljZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjb3N0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdmaWxsZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncmVtYWluaW5nJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3RyYWRlcyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnaW5mbyc6IG9yZGVyLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgIH0sIG1hcmtldCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZmV0Y2hPcGVuT3JkZXJzIChzeW1ib2w6IFN0ciA9IHVuZGVmaW5lZCwgc2luY2U6IEludCA9IHVuZGVmaW5lZCwgbGltaXQ6IEludCA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pOiBQcm9taXNlPE9yZGVyW10+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNmZXRjaE9wZW5PcmRlcnNcbiAgICAgICAgICogQHNlZSBodHRwczovL3phaWYtYXBpLWRvY3VtZW50LnJlYWR0aGVkb2NzLmlvL2phL2xhdGVzdC9NYXJnaW5UcmFkaW5nQVBJLmh0bWwjaWQyOFxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gZmV0Y2ggYWxsIHVuZmlsbGVkIGN1cnJlbnRseSBvcGVuIG9yZGVyc1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3ltYm9sIHVuaWZpZWQgbWFya2V0IHN5bWJvbFxuICAgICAgICAgKiBAcGFyYW0ge2ludH0gW3NpbmNlXSB0aGUgZWFybGllc3QgdGltZSBpbiBtcyB0byBmZXRjaCBvcGVuIG9yZGVycyBmb3JcbiAgICAgICAgICogQHBhcmFtIHtpbnR9IFtsaW1pdF0gdGhlIG1heGltdW0gbnVtYmVyIG9mICBvcGVuIG9yZGVycyBzdHJ1Y3R1cmVzIHRvIHJldHJpZXZlXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBleHRyYSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBleGNoYW5nZSBBUEkgZW5kcG9pbnRcbiAgICAgICAgICogQHJldHVybnMge09yZGVyW119IGEgbGlzdCBvZiBbb3JkZXIgc3RydWN0dXJlc117QGxpbmsgaHR0cHM6Ly9kb2NzLmNjeHQuY29tLyMvP2lkPW9yZGVyLXN0cnVjdHVyZX1cbiAgICAgICAgICovXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtYXJrZXQ6IE1hcmtldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgIC8vICdpc190b2tlbic6IGZhbHNlLFxuICAgICAgICAgICAgLy8gJ2lzX3Rva2VuX2JvdGgnOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHN5bWJvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgICAgIHJlcXVlc3RbJ2N1cnJlbmN5X3BhaXInXSA9IG1hcmtldFsnaWQnXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RBY3RpdmVPcmRlcnMgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcmRlcnMgKHJlc3BvbnNlWydyZXR1cm4nXSwgbWFya2V0LCBzaW5jZSwgbGltaXQpO1xuICAgIH1cblxuICAgIGFzeW5jIGZldGNoQ2xvc2VkT3JkZXJzIChzeW1ib2w6IFN0ciA9IHVuZGVmaW5lZCwgc2luY2U6IEludCA9IHVuZGVmaW5lZCwgbGltaXQ6IEludCA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pOiBQcm9taXNlPE9yZGVyW10+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNmZXRjaENsb3NlZE9yZGVyc1xuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vemFpZi1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L1RyYWRpbmdBUEkuaHRtbCNpZDI0XG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBmZXRjaGVzIGluZm9ybWF0aW9uIG9uIG11bHRpcGxlIGNsb3NlZCBvcmRlcnMgbWFkZSBieSB0aGUgdXNlclxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3ltYm9sIHVuaWZpZWQgbWFya2V0IHN5bWJvbCBvZiB0aGUgbWFya2V0IG9yZGVycyB3ZXJlIG1hZGUgaW5cbiAgICAgICAgICogQHBhcmFtIHtpbnR9IFtzaW5jZV0gdGhlIGVhcmxpZXN0IHRpbWUgaW4gbXMgdG8gZmV0Y2ggb3JkZXJzIGZvclxuICAgICAgICAgKiBAcGFyYW0ge2ludH0gW2xpbWl0XSB0aGUgbWF4aW11bSBudW1iZXIgb2YgIG9yZGUgc3RydWN0dXJlcyB0byByZXRyaWV2ZVxuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gZXh0cmEgcGFyYW1ldGVycyBzcGVjaWZpYyB0byB0aGUgZXhjaGFuZ2UgQVBJIGVuZHBvaW50XG4gICAgICAgICAqIEByZXR1cm5zIHtPcmRlcltdfSBhIGxpc3Qgb2YgW29yZGVyIHN0cnVjdHVyZXNde0BsaW5rIGh0dHBzOi8vZG9jcy5jY3h0LmNvbS8jLz9pZD1vcmRlci1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbWFya2V0OiBNYXJrZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgICAvLyAnZnJvbSc6IDAsXG4gICAgICAgICAgICAvLyAnY291bnQnOiAxMDAwLFxuICAgICAgICAgICAgLy8gJ2Zyb21faWQnOiAwLFxuICAgICAgICAgICAgLy8gJ2VuZF9pZCc6IDEwMDAsXG4gICAgICAgICAgICAvLyAnb3JkZXInOiAnREVTQycsXG4gICAgICAgICAgICAvLyAnc2luY2UnOiAxNTAzODIxMDUxLFxuICAgICAgICAgICAgLy8gJ2VuZCc6IDE1MDM4MjEwNTEsXG4gICAgICAgICAgICAvLyAnaXNfdG9rZW4nOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHN5bWJvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgICAgIHJlcXVlc3RbJ2N1cnJlbmN5X3BhaXInXSA9IG1hcmtldFsnaWQnXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RUcmFkZUhpc3RvcnkgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcmRlcnMgKHJlc3BvbnNlWydyZXR1cm4nXSwgbWFya2V0LCBzaW5jZSwgbGltaXQpO1xuICAgIH1cblxuICAgIGFzeW5jIHdpdGhkcmF3IChjb2RlOiBzdHJpbmcsIGFtb3VudCwgYWRkcmVzcywgdGFnID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQG1ldGhvZFxuICAgICAgICAgKiBAbmFtZSB6YWlmI3dpdGhkcmF3XG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly96YWlmLWFwaS1kb2N1bWVudC5yZWFkdGhlZG9jcy5pby9qYS9sYXRlc3QvVHJhZGluZ0FQSS5odG1sI2lkNDFcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIG1ha2UgYSB3aXRoZHJhd2FsXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIHVuaWZpZWQgY3VycmVuY3kgY29kZVxuICAgICAgICAgKiBAcGFyYW0ge2Zsb2F0fSBhbW91bnQgdGhlIGFtb3VudCB0byB3aXRoZHJhd1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyB0aGUgYWRkcmVzcyB0byB3aXRoZHJhdyB0b1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBleHRyYSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBleGNoYW5nZSBBUEkgZW5kcG9pbnRcbiAgICAgICAgICogQHJldHVybnMge29iamVjdH0gYSBbdHJhbnNhY3Rpb24gc3RydWN0dXJlXXtAbGluayBodHRwczovL2RvY3MuY2N4dC5jb20vIy8/aWQ9dHJhbnNhY3Rpb24tc3RydWN0dXJlfVxuICAgICAgICAgKi9cbiAgICAgICAgWyB0YWcsIHBhcmFtcyBdID0gdGhpcy5oYW5kbGVXaXRoZHJhd1RhZ0FuZFBhcmFtcyAodGFnLCBwYXJhbXMpO1xuICAgICAgICB0aGlzLmNoZWNrQWRkcmVzcyAoYWRkcmVzcyk7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jeSAoY29kZSk7XG4gICAgICAgIGlmIChjb2RlID09PSAnSlBZJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIHdpdGhkcmF3KCkgZG9lcyBub3QgYWxsb3cgJyArIGNvZGUgKyAnIHdpdGhkcmF3YWxzJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IGN1cnJlbmN5WydpZCddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdhZGRyZXNzJzogYWRkcmVzcyxcbiAgICAgICAgICAgIC8vICdtZXNzYWdlJzogJ0hpIScsIC8vIFhFTSBhbmQgb3RoZXJzXG4gICAgICAgICAgICAvLyAnb3B0X2ZlZSc6IDAuMDAzLCAvLyBCVEMgYW5kIE1PTkEgb25seVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlcXVlc3RbJ21lc3NhZ2UnXSA9IHRhZztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0V2l0aGRyYXcgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIHtcbiAgICAgICAgLy8gICAgICAgICBcInN1Y2Nlc3NcIjogMSxcbiAgICAgICAgLy8gICAgICAgICBcInJldHVyblwiOiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIFwiaWRcIjogMjM2MzQsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiZmVlXCI6IDAuMDAxLFxuICAgICAgICAvLyAgICAgICAgICAgICBcInR4aWRcIjosXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiZnVuZHNcIjoge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgXCJqcHlcIjogMTUzMjAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBcImJ0Y1wiOiAxLjM5MixcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIFwieGVtXCI6IDEwMC4yLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgXCJtb25hXCI6IDI2MDBcbiAgICAgICAgLy8gICAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgcmV0dXJuRGF0YSA9IHRoaXMuc2FmZVZhbHVlIChyZXN1bHQsICdyZXR1cm4nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUcmFuc2FjdGlvbiAocmV0dXJuRGF0YSwgY3VycmVuY3kpO1xuICAgIH1cblxuICAgIHBhcnNlVHJhbnNhY3Rpb24gKHRyYW5zYWN0aW9uLCBjdXJyZW5jeTogQ3VycmVuY3kgPSB1bmRlZmluZWQpOiBUcmFuc2FjdGlvbiB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICB7XG4gICAgICAgIC8vICAgICAgICAgXCJpZFwiOiAyMzYzNCxcbiAgICAgICAgLy8gICAgICAgICBcImZlZVwiOiAwLjAwMSxcbiAgICAgICAgLy8gICAgICAgICBcInR4aWRcIjosXG4gICAgICAgIC8vICAgICAgICAgXCJmdW5kc1wiOiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIFwianB5XCI6IDE1MzIwLFxuICAgICAgICAvLyAgICAgICAgICAgICBcImJ0Y1wiOiAxLjM5MixcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJ4ZW1cIjogMTAwLjIsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwibW9uYVwiOiAyNjAwXG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvL1xuICAgICAgICBjdXJyZW5jeSA9IHRoaXMuc2FmZUN1cnJlbmN5ICh1bmRlZmluZWQsIGN1cnJlbmN5KTtcbiAgICAgICAgbGV0IGZlZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZmVlQ29zdCA9IHRoaXMuc2FmZVZhbHVlICh0cmFuc2FjdGlvbiwgJ2ZlZScpO1xuICAgICAgICBpZiAoZmVlQ29zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmZWUgPSB7XG4gICAgICAgICAgICAgICAgJ2Nvc3QnOiBmZWVDb3N0LFxuICAgICAgICAgICAgICAgICdjdXJyZW5jeSc6IGN1cnJlbmN5Wydjb2RlJ10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLnNhZmVTdHJpbmcgKHRyYW5zYWN0aW9uLCAnaWQnKSxcbiAgICAgICAgICAgICd0eGlkJzogdGhpcy5zYWZlU3RyaW5nICh0cmFuc2FjdGlvbiwgJ3R4aWQnKSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbmV0d29yayc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhZGRyZXNzRnJvbSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhZGRyZXNzJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2FkZHJlc3NUbyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhbW91bnQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndHlwZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IGN1cnJlbmN5Wydjb2RlJ10sXG4gICAgICAgICAgICAnc3RhdHVzJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3VwZGF0ZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndGFnRnJvbSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICd0YWcnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndGFnVG8nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY29tbWVudCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbnRlcm5hbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmZWUnOiBmZWUsXG4gICAgICAgICAgICAnaW5mbyc6IHRyYW5zYWN0aW9uLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGN1c3RvbU5vbmNlICgpIHtcbiAgICAgICAgY29uc3QgbnVtID0gKHRoaXMubWlsbGlzZWNvbmRzICgpIC8gMTAwMCkudG9TdHJpbmcgKCk7XG4gICAgICAgIGNvbnN0IG5vbmNlID0gcGFyc2VGbG9hdCAobnVtKTtcbiAgICAgICAgcmV0dXJuIG5vbmNlLnRvRml4ZWQgKDgpO1xuICAgIH1cblxuICAgIHNpZ24gKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bJ3Jlc3QnXSArICcvJztcbiAgICAgICAgaWYgKGFwaSA9PT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSAnYXBpLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXBpID09PSAnZmFwaScpIHtcbiAgICAgICAgICAgIHVybCArPSAnZmFwaS8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQ3JlZGVudGlhbHMgKCk7XG4gICAgICAgICAgICBpZiAoYXBpID09PSAnZWNhcGknKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9ICdlY2FwaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFwaSA9PT0gJ3RsYXBpJykge1xuICAgICAgICAgICAgICAgIHVybCArPSAndGxhcGknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gJ3RhcGknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9uY2UgPSB0aGlzLmN1c3RvbU5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgc2hhNTEyKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgJ3VybCc6IHVybCwgJ21ldGhvZCc6IG1ldGhvZCwgJ2JvZHknOiBib2R5LCAnaGVhZGVycyc6IGhlYWRlcnMgfTtcbiAgICB9XG5cbiAgICBoYW5kbGVFcnJvcnMgKGh0dHBDb2RlLCByZWFzb24sIHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5LCByZXNwb25zZSwgcmVxdWVzdEhlYWRlcnMsIHJlcXVlc3RCb2R5KSB7XG4gICAgICAgIGlmIChyZXNwb25zZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICB7XCJlcnJvclwiOiBcInVuc3VwcG9ydGVkIGN1cnJlbmN5X3BhaXJcIn1cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgZmVlZGJhY2sgPSB0aGlzLmlkICsgJyAnICsgYm9keTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLnNhZmVTdHJpbmcgKHJlc3BvbnNlLCAnZXJyb3InKTtcbiAgICAgICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGhyb3dFeGFjdGx5TWF0Y2hlZEV4Y2VwdGlvbiAodGhpcy5leGNlcHRpb25zWydleGFjdCddLCBlcnJvciwgZmVlZGJhY2spO1xuICAgICAgICAgICAgdGhpcy50aHJvd0Jyb2FkbHlNYXRjaGVkRXhjZXB0aW9uICh0aGlzLmV4Y2VwdGlvbnNbJ2Jyb2FkJ10sIGVycm9yLCBmZWVkYmFjayk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAoZmVlZGJhY2spOyAvLyB1bmtub3duIG1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5zYWZlVmFsdWUgKHJlc3BvbnNlLCAnc3VjY2VzcycsIHRydWUpO1xuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yIChmZWVkYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4iXX0=
290909
-
290910
291116
  /***/ })
290911
291117
 
290912
291118
  /******/ });
@@ -291015,212 +291221,212 @@ __webpack_require__.r(__webpack_exports__);
291015
291221
  /* harmony export */ Precise: () => (/* reexport safe */ _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_155__.O),
291016
291222
  /* harmony export */ RateLimitExceeded: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.RateLimitExceeded),
291017
291223
  /* harmony export */ RequestTimeout: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.RequestTimeout),
291018
- /* harmony export */ ace: () => (/* reexport safe */ _src_ace_js__WEBPACK_IMPORTED_MODULE_2__.Z),
291019
- /* harmony export */ alpaca: () => (/* reexport safe */ _src_alpaca_js__WEBPACK_IMPORTED_MODULE_3__.Z),
291020
- /* harmony export */ ascendex: () => (/* reexport safe */ _src_ascendex_js__WEBPACK_IMPORTED_MODULE_4__.Z),
291021
- /* harmony export */ bequant: () => (/* reexport safe */ _src_bequant_js__WEBPACK_IMPORTED_MODULE_5__.Z),
291022
- /* harmony export */ bigone: () => (/* reexport safe */ _src_bigone_js__WEBPACK_IMPORTED_MODULE_6__.Z),
291023
- /* harmony export */ binance: () => (/* reexport safe */ _src_binance_js__WEBPACK_IMPORTED_MODULE_7__.Z),
291024
- /* harmony export */ binancecoinm: () => (/* reexport safe */ _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_8__.Z),
291025
- /* harmony export */ binanceus: () => (/* reexport safe */ _src_binanceus_js__WEBPACK_IMPORTED_MODULE_9__.Z),
291026
- /* harmony export */ binanceusdm: () => (/* reexport safe */ _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_10__.Z),
291027
- /* harmony export */ bingx: () => (/* reexport safe */ _src_bingx_js__WEBPACK_IMPORTED_MODULE_11__.Z),
291028
- /* harmony export */ bit2c: () => (/* reexport safe */ _src_bit2c_js__WEBPACK_IMPORTED_MODULE_12__.Z),
291029
- /* harmony export */ bitbank: () => (/* reexport safe */ _src_bitbank_js__WEBPACK_IMPORTED_MODULE_13__.Z),
291030
- /* harmony export */ bitbay: () => (/* reexport safe */ _src_bitbay_js__WEBPACK_IMPORTED_MODULE_14__.Z),
291031
- /* harmony export */ bitbns: () => (/* reexport safe */ _src_bitbns_js__WEBPACK_IMPORTED_MODULE_15__.Z),
291032
- /* harmony export */ bitcoincom: () => (/* reexport safe */ _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_16__.Z),
291033
- /* harmony export */ bitfinex: () => (/* reexport safe */ _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_17__.Z),
291034
- /* harmony export */ bitfinex2: () => (/* reexport safe */ _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_18__.Z),
291035
- /* harmony export */ bitflyer: () => (/* reexport safe */ _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_19__.Z),
291036
- /* harmony export */ bitforex: () => (/* reexport safe */ _src_bitforex_js__WEBPACK_IMPORTED_MODULE_20__.Z),
291037
- /* harmony export */ bitget: () => (/* reexport safe */ _src_bitget_js__WEBPACK_IMPORTED_MODULE_21__.Z),
291038
- /* harmony export */ bithumb: () => (/* reexport safe */ _src_bithumb_js__WEBPACK_IMPORTED_MODULE_22__.Z),
291039
- /* harmony export */ bitmart: () => (/* reexport safe */ _src_bitmart_js__WEBPACK_IMPORTED_MODULE_23__.Z),
291040
- /* harmony export */ bitmex: () => (/* reexport safe */ _src_bitmex_js__WEBPACK_IMPORTED_MODULE_24__.Z),
291041
- /* harmony export */ bitopro: () => (/* reexport safe */ _src_bitopro_js__WEBPACK_IMPORTED_MODULE_25__.Z),
291042
- /* harmony export */ bitpanda: () => (/* reexport safe */ _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_26__.Z),
291043
- /* harmony export */ bitrue: () => (/* reexport safe */ _src_bitrue_js__WEBPACK_IMPORTED_MODULE_27__.Z),
291044
- /* harmony export */ bitso: () => (/* reexport safe */ _src_bitso_js__WEBPACK_IMPORTED_MODULE_28__.Z),
291045
- /* harmony export */ bitstamp: () => (/* reexport safe */ _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_29__.Z),
291046
- /* harmony export */ bitteam: () => (/* reexport safe */ _src_bitteam_js__WEBPACK_IMPORTED_MODULE_30__.Z),
291047
- /* harmony export */ bitvavo: () => (/* reexport safe */ _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_31__.Z),
291048
- /* harmony export */ bl3p: () => (/* reexport safe */ _src_bl3p_js__WEBPACK_IMPORTED_MODULE_32__.Z),
291049
- /* harmony export */ blockchaincom: () => (/* reexport safe */ _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_33__.Z),
291050
- /* harmony export */ btcalpha: () => (/* reexport safe */ _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_34__.Z),
291051
- /* harmony export */ btcbox: () => (/* reexport safe */ _src_btcbox_js__WEBPACK_IMPORTED_MODULE_35__.Z),
291052
- /* harmony export */ btcmarkets: () => (/* reexport safe */ _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_36__.Z),
291053
- /* harmony export */ btcturk: () => (/* reexport safe */ _src_btcturk_js__WEBPACK_IMPORTED_MODULE_37__.Z),
291054
- /* harmony export */ bybit: () => (/* reexport safe */ _src_bybit_js__WEBPACK_IMPORTED_MODULE_38__.Z),
291055
- /* harmony export */ cex: () => (/* reexport safe */ _src_cex_js__WEBPACK_IMPORTED_MODULE_39__.Z),
291056
- /* harmony export */ coinbase: () => (/* reexport safe */ _src_coinbase_js__WEBPACK_IMPORTED_MODULE_40__.Z),
291057
- /* harmony export */ coinbasepro: () => (/* reexport safe */ _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_41__.Z),
291058
- /* harmony export */ coincheck: () => (/* reexport safe */ _src_coincheck_js__WEBPACK_IMPORTED_MODULE_42__.Z),
291059
- /* harmony export */ coinex: () => (/* reexport safe */ _src_coinex_js__WEBPACK_IMPORTED_MODULE_43__.Z),
291060
- /* harmony export */ coinlist: () => (/* reexport safe */ _src_coinlist_js__WEBPACK_IMPORTED_MODULE_44__.Z),
291061
- /* harmony export */ coinmate: () => (/* reexport safe */ _src_coinmate_js__WEBPACK_IMPORTED_MODULE_45__.Z),
291062
- /* harmony export */ coinone: () => (/* reexport safe */ _src_coinone_js__WEBPACK_IMPORTED_MODULE_46__.Z),
291063
- /* harmony export */ coinsph: () => (/* reexport safe */ _src_coinsph_js__WEBPACK_IMPORTED_MODULE_47__.Z),
291064
- /* harmony export */ coinspot: () => (/* reexport safe */ _src_coinspot_js__WEBPACK_IMPORTED_MODULE_48__.Z),
291065
- /* harmony export */ cryptocom: () => (/* reexport safe */ _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_49__.Z),
291066
- /* harmony export */ currencycom: () => (/* reexport safe */ _src_currencycom_js__WEBPACK_IMPORTED_MODULE_50__.Z),
291224
+ /* harmony export */ ace: () => (/* reexport safe */ _src_ace_js__WEBPACK_IMPORTED_MODULE_1__.Z),
291225
+ /* harmony export */ alpaca: () => (/* reexport safe */ _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__.Z),
291226
+ /* harmony export */ ascendex: () => (/* reexport safe */ _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__.Z),
291227
+ /* harmony export */ bequant: () => (/* reexport safe */ _src_bequant_js__WEBPACK_IMPORTED_MODULE_4__.Z),
291228
+ /* harmony export */ bigone: () => (/* reexport safe */ _src_bigone_js__WEBPACK_IMPORTED_MODULE_5__.Z),
291229
+ /* harmony export */ binance: () => (/* reexport safe */ _src_binance_js__WEBPACK_IMPORTED_MODULE_6__.Z),
291230
+ /* harmony export */ binancecoinm: () => (/* reexport safe */ _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_7__.Z),
291231
+ /* harmony export */ binanceus: () => (/* reexport safe */ _src_binanceus_js__WEBPACK_IMPORTED_MODULE_8__.Z),
291232
+ /* harmony export */ binanceusdm: () => (/* reexport safe */ _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_9__.Z),
291233
+ /* harmony export */ bingx: () => (/* reexport safe */ _src_bingx_js__WEBPACK_IMPORTED_MODULE_10__.Z),
291234
+ /* harmony export */ bit2c: () => (/* reexport safe */ _src_bit2c_js__WEBPACK_IMPORTED_MODULE_11__.Z),
291235
+ /* harmony export */ bitbank: () => (/* reexport safe */ _src_bitbank_js__WEBPACK_IMPORTED_MODULE_12__.Z),
291236
+ /* harmony export */ bitbay: () => (/* reexport safe */ _src_bitbay_js__WEBPACK_IMPORTED_MODULE_13__.Z),
291237
+ /* harmony export */ bitbns: () => (/* reexport safe */ _src_bitbns_js__WEBPACK_IMPORTED_MODULE_14__.Z),
291238
+ /* harmony export */ bitcoincom: () => (/* reexport safe */ _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_15__.Z),
291239
+ /* harmony export */ bitfinex: () => (/* reexport safe */ _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_16__.Z),
291240
+ /* harmony export */ bitfinex2: () => (/* reexport safe */ _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_17__.Z),
291241
+ /* harmony export */ bitflyer: () => (/* reexport safe */ _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_18__.Z),
291242
+ /* harmony export */ bitforex: () => (/* reexport safe */ _src_bitforex_js__WEBPACK_IMPORTED_MODULE_19__.Z),
291243
+ /* harmony export */ bitget: () => (/* reexport safe */ _src_bitget_js__WEBPACK_IMPORTED_MODULE_20__.Z),
291244
+ /* harmony export */ bithumb: () => (/* reexport safe */ _src_bithumb_js__WEBPACK_IMPORTED_MODULE_21__.Z),
291245
+ /* harmony export */ bitmart: () => (/* reexport safe */ _src_bitmart_js__WEBPACK_IMPORTED_MODULE_22__.Z),
291246
+ /* harmony export */ bitmex: () => (/* reexport safe */ _src_bitmex_js__WEBPACK_IMPORTED_MODULE_23__.Z),
291247
+ /* harmony export */ bitopro: () => (/* reexport safe */ _src_bitopro_js__WEBPACK_IMPORTED_MODULE_24__.Z),
291248
+ /* harmony export */ bitpanda: () => (/* reexport safe */ _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_25__.Z),
291249
+ /* harmony export */ bitrue: () => (/* reexport safe */ _src_bitrue_js__WEBPACK_IMPORTED_MODULE_26__.Z),
291250
+ /* harmony export */ bitso: () => (/* reexport safe */ _src_bitso_js__WEBPACK_IMPORTED_MODULE_27__.Z),
291251
+ /* harmony export */ bitstamp: () => (/* reexport safe */ _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_28__.Z),
291252
+ /* harmony export */ bitteam: () => (/* reexport safe */ _src_bitteam_js__WEBPACK_IMPORTED_MODULE_29__.Z),
291253
+ /* harmony export */ bitvavo: () => (/* reexport safe */ _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_30__.Z),
291254
+ /* harmony export */ bl3p: () => (/* reexport safe */ _src_bl3p_js__WEBPACK_IMPORTED_MODULE_31__.Z),
291255
+ /* harmony export */ blockchaincom: () => (/* reexport safe */ _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_32__.Z),
291256
+ /* harmony export */ btcalpha: () => (/* reexport safe */ _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_33__.Z),
291257
+ /* harmony export */ btcbox: () => (/* reexport safe */ _src_btcbox_js__WEBPACK_IMPORTED_MODULE_34__.Z),
291258
+ /* harmony export */ btcmarkets: () => (/* reexport safe */ _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_35__.Z),
291259
+ /* harmony export */ btcturk: () => (/* reexport safe */ _src_btcturk_js__WEBPACK_IMPORTED_MODULE_36__.Z),
291260
+ /* harmony export */ bybit: () => (/* reexport safe */ _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__.Z),
291261
+ /* harmony export */ cex: () => (/* reexport safe */ _src_cex_js__WEBPACK_IMPORTED_MODULE_38__.Z),
291262
+ /* harmony export */ coinbase: () => (/* reexport safe */ _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__.Z),
291263
+ /* harmony export */ coinbasepro: () => (/* reexport safe */ _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__.Z),
291264
+ /* harmony export */ coincheck: () => (/* reexport safe */ _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__.Z),
291265
+ /* harmony export */ coinex: () => (/* reexport safe */ _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__.Z),
291266
+ /* harmony export */ coinlist: () => (/* reexport safe */ _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__.Z),
291267
+ /* harmony export */ coinmate: () => (/* reexport safe */ _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__.Z),
291268
+ /* harmony export */ coinone: () => (/* reexport safe */ _src_coinone_js__WEBPACK_IMPORTED_MODULE_45__.Z),
291269
+ /* harmony export */ coinsph: () => (/* reexport safe */ _src_coinsph_js__WEBPACK_IMPORTED_MODULE_46__.Z),
291270
+ /* harmony export */ coinspot: () => (/* reexport safe */ _src_coinspot_js__WEBPACK_IMPORTED_MODULE_47__.Z),
291271
+ /* harmony export */ cryptocom: () => (/* reexport safe */ _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_48__.Z),
291272
+ /* harmony export */ currencycom: () => (/* reexport safe */ _src_currencycom_js__WEBPACK_IMPORTED_MODULE_49__.Z),
291067
291273
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
291068
- /* harmony export */ delta: () => (/* reexport safe */ _src_delta_js__WEBPACK_IMPORTED_MODULE_51__.Z),
291069
- /* harmony export */ deribit: () => (/* reexport safe */ _src_deribit_js__WEBPACK_IMPORTED_MODULE_52__.Z),
291070
- /* harmony export */ digifinex: () => (/* reexport safe */ _src_digifinex_js__WEBPACK_IMPORTED_MODULE_53__.Z),
291274
+ /* harmony export */ delta: () => (/* reexport safe */ _src_delta_js__WEBPACK_IMPORTED_MODULE_50__.Z),
291275
+ /* harmony export */ deribit: () => (/* reexport safe */ _src_deribit_js__WEBPACK_IMPORTED_MODULE_51__.Z),
291276
+ /* harmony export */ digifinex: () => (/* reexport safe */ _src_digifinex_js__WEBPACK_IMPORTED_MODULE_52__.Z),
291071
291277
  /* harmony export */ errors: () => (/* reexport module object */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__),
291072
291278
  /* harmony export */ exchanges: () => (/* binding */ exchanges),
291073
- /* harmony export */ exmo: () => (/* reexport safe */ _src_exmo_js__WEBPACK_IMPORTED_MODULE_54__.Z),
291074
- /* harmony export */ fmfwio: () => (/* reexport safe */ _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_55__.Z),
291279
+ /* harmony export */ exmo: () => (/* reexport safe */ _src_exmo_js__WEBPACK_IMPORTED_MODULE_53__.Z),
291280
+ /* harmony export */ fmfwio: () => (/* reexport safe */ _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_54__.Z),
291075
291281
  /* harmony export */ functions: () => (/* reexport module object */ _src_base_functions_js__WEBPACK_IMPORTED_MODULE_156__),
291076
- /* harmony export */ gate: () => (/* reexport safe */ _src_gate_js__WEBPACK_IMPORTED_MODULE_56__.Z),
291077
- /* harmony export */ gateio: () => (/* reexport safe */ _src_gateio_js__WEBPACK_IMPORTED_MODULE_57__.Z),
291078
- /* harmony export */ gemini: () => (/* reexport safe */ _src_gemini_js__WEBPACK_IMPORTED_MODULE_58__.Z),
291079
- /* harmony export */ hitbtc: () => (/* reexport safe */ _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_59__.Z),
291080
- /* harmony export */ hitbtc3: () => (/* reexport safe */ _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_60__.Z),
291081
- /* harmony export */ hollaex: () => (/* reexport safe */ _src_hollaex_js__WEBPACK_IMPORTED_MODULE_61__.Z),
291082
- /* harmony export */ htx: () => (/* reexport safe */ _src_htx_js__WEBPACK_IMPORTED_MODULE_62__.Z),
291083
- /* harmony export */ huobi: () => (/* reexport safe */ _src_huobi_js__WEBPACK_IMPORTED_MODULE_63__.Z),
291084
- /* harmony export */ huobijp: () => (/* reexport safe */ _src_huobijp_js__WEBPACK_IMPORTED_MODULE_64__.Z),
291085
- /* harmony export */ idex: () => (/* reexport safe */ _src_idex_js__WEBPACK_IMPORTED_MODULE_65__.Z),
291086
- /* harmony export */ independentreserve: () => (/* reexport safe */ _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_66__.Z),
291087
- /* harmony export */ indodax: () => (/* reexport safe */ _src_indodax_js__WEBPACK_IMPORTED_MODULE_67__.Z),
291088
- /* harmony export */ kraken: () => (/* reexport safe */ _src_kraken_js__WEBPACK_IMPORTED_MODULE_68__.Z),
291089
- /* harmony export */ krakenfutures: () => (/* reexport safe */ _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_69__.Z),
291090
- /* harmony export */ kucoin: () => (/* reexport safe */ _src_kucoin_js__WEBPACK_IMPORTED_MODULE_70__.Z),
291091
- /* harmony export */ kucoinfutures: () => (/* reexport safe */ _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_71__.Z),
291092
- /* harmony export */ kuna: () => (/* reexport safe */ _src_kuna_js__WEBPACK_IMPORTED_MODULE_72__.Z),
291093
- /* harmony export */ latoken: () => (/* reexport safe */ _src_latoken_js__WEBPACK_IMPORTED_MODULE_73__.Z),
291094
- /* harmony export */ lbank: () => (/* reexport safe */ _src_lbank_js__WEBPACK_IMPORTED_MODULE_74__.Z),
291095
- /* harmony export */ luno: () => (/* reexport safe */ _src_luno_js__WEBPACK_IMPORTED_MODULE_75__.Z),
291096
- /* harmony export */ lykke: () => (/* reexport safe */ _src_lykke_js__WEBPACK_IMPORTED_MODULE_76__.Z),
291097
- /* harmony export */ mercado: () => (/* reexport safe */ _src_mercado_js__WEBPACK_IMPORTED_MODULE_77__.Z),
291098
- /* harmony export */ mexc: () => (/* reexport safe */ _src_mexc_js__WEBPACK_IMPORTED_MODULE_78__.Z),
291099
- /* harmony export */ ndax: () => (/* reexport safe */ _src_ndax_js__WEBPACK_IMPORTED_MODULE_79__.Z),
291100
- /* harmony export */ novadax: () => (/* reexport safe */ _src_novadax_js__WEBPACK_IMPORTED_MODULE_80__.Z),
291101
- /* harmony export */ oceanex: () => (/* reexport safe */ _src_oceanex_js__WEBPACK_IMPORTED_MODULE_81__.Z),
291102
- /* harmony export */ okcoin: () => (/* reexport safe */ _src_okcoin_js__WEBPACK_IMPORTED_MODULE_82__.Z),
291103
- /* harmony export */ okx: () => (/* reexport safe */ _src_okx_js__WEBPACK_IMPORTED_MODULE_83__.Z),
291104
- /* harmony export */ p2b: () => (/* reexport safe */ _src_p2b_js__WEBPACK_IMPORTED_MODULE_84__.Z),
291105
- /* harmony export */ paymium: () => (/* reexport safe */ _src_paymium_js__WEBPACK_IMPORTED_MODULE_85__.Z),
291106
- /* harmony export */ phemex: () => (/* reexport safe */ _src_phemex_js__WEBPACK_IMPORTED_MODULE_86__.Z),
291107
- /* harmony export */ poloniex: () => (/* reexport safe */ _src_poloniex_js__WEBPACK_IMPORTED_MODULE_87__.Z),
291108
- /* harmony export */ poloniexfutures: () => (/* reexport safe */ _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_88__.Z),
291282
+ /* harmony export */ gate: () => (/* reexport safe */ _src_gate_js__WEBPACK_IMPORTED_MODULE_55__.Z),
291283
+ /* harmony export */ gateio: () => (/* reexport safe */ _src_gateio_js__WEBPACK_IMPORTED_MODULE_56__.Z),
291284
+ /* harmony export */ gemini: () => (/* reexport safe */ _src_gemini_js__WEBPACK_IMPORTED_MODULE_57__.Z),
291285
+ /* harmony export */ hitbtc: () => (/* reexport safe */ _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_58__.Z),
291286
+ /* harmony export */ hitbtc3: () => (/* reexport safe */ _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_59__.Z),
291287
+ /* harmony export */ hollaex: () => (/* reexport safe */ _src_hollaex_js__WEBPACK_IMPORTED_MODULE_60__.Z),
291288
+ /* harmony export */ htx: () => (/* reexport safe */ _src_htx_js__WEBPACK_IMPORTED_MODULE_61__.Z),
291289
+ /* harmony export */ huobi: () => (/* reexport safe */ _src_huobi_js__WEBPACK_IMPORTED_MODULE_62__.Z),
291290
+ /* harmony export */ huobijp: () => (/* reexport safe */ _src_huobijp_js__WEBPACK_IMPORTED_MODULE_63__.Z),
291291
+ /* harmony export */ idex: () => (/* reexport safe */ _src_idex_js__WEBPACK_IMPORTED_MODULE_64__.Z),
291292
+ /* harmony export */ independentreserve: () => (/* reexport safe */ _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_65__.Z),
291293
+ /* harmony export */ indodax: () => (/* reexport safe */ _src_indodax_js__WEBPACK_IMPORTED_MODULE_66__.Z),
291294
+ /* harmony export */ kraken: () => (/* reexport safe */ _src_kraken_js__WEBPACK_IMPORTED_MODULE_67__.Z),
291295
+ /* harmony export */ krakenfutures: () => (/* reexport safe */ _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_68__.Z),
291296
+ /* harmony export */ kucoin: () => (/* reexport safe */ _src_kucoin_js__WEBPACK_IMPORTED_MODULE_69__.Z),
291297
+ /* harmony export */ kucoinfutures: () => (/* reexport safe */ _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_70__.Z),
291298
+ /* harmony export */ kuna: () => (/* reexport safe */ _src_kuna_js__WEBPACK_IMPORTED_MODULE_71__.Z),
291299
+ /* harmony export */ latoken: () => (/* reexport safe */ _src_latoken_js__WEBPACK_IMPORTED_MODULE_72__.Z),
291300
+ /* harmony export */ lbank: () => (/* reexport safe */ _src_lbank_js__WEBPACK_IMPORTED_MODULE_73__.Z),
291301
+ /* harmony export */ luno: () => (/* reexport safe */ _src_luno_js__WEBPACK_IMPORTED_MODULE_74__.Z),
291302
+ /* harmony export */ lykke: () => (/* reexport safe */ _src_lykke_js__WEBPACK_IMPORTED_MODULE_75__.Z),
291303
+ /* harmony export */ mercado: () => (/* reexport safe */ _src_mercado_js__WEBPACK_IMPORTED_MODULE_76__.Z),
291304
+ /* harmony export */ mexc: () => (/* reexport safe */ _src_mexc_js__WEBPACK_IMPORTED_MODULE_77__.Z),
291305
+ /* harmony export */ ndax: () => (/* reexport safe */ _src_ndax_js__WEBPACK_IMPORTED_MODULE_78__.Z),
291306
+ /* harmony export */ novadax: () => (/* reexport safe */ _src_novadax_js__WEBPACK_IMPORTED_MODULE_79__.Z),
291307
+ /* harmony export */ oceanex: () => (/* reexport safe */ _src_oceanex_js__WEBPACK_IMPORTED_MODULE_80__.Z),
291308
+ /* harmony export */ okcoin: () => (/* reexport safe */ _src_okcoin_js__WEBPACK_IMPORTED_MODULE_81__.Z),
291309
+ /* harmony export */ okx: () => (/* reexport safe */ _src_okx_js__WEBPACK_IMPORTED_MODULE_82__.Z),
291310
+ /* harmony export */ p2b: () => (/* reexport safe */ _src_p2b_js__WEBPACK_IMPORTED_MODULE_83__.Z),
291311
+ /* harmony export */ paymium: () => (/* reexport safe */ _src_paymium_js__WEBPACK_IMPORTED_MODULE_84__.Z),
291312
+ /* harmony export */ phemex: () => (/* reexport safe */ _src_phemex_js__WEBPACK_IMPORTED_MODULE_85__.Z),
291313
+ /* harmony export */ poloniex: () => (/* reexport safe */ _src_poloniex_js__WEBPACK_IMPORTED_MODULE_86__.Z),
291314
+ /* harmony export */ poloniexfutures: () => (/* reexport safe */ _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_87__.Z),
291109
291315
  /* harmony export */ pro: () => (/* binding */ pro),
291110
- /* harmony export */ probit: () => (/* reexport safe */ _src_probit_js__WEBPACK_IMPORTED_MODULE_89__.Z),
291111
- /* harmony export */ timex: () => (/* reexport safe */ _src_timex_js__WEBPACK_IMPORTED_MODULE_90__.Z),
291112
- /* harmony export */ tokocrypto: () => (/* reexport safe */ _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_91__.Z),
291113
- /* harmony export */ upbit: () => (/* reexport safe */ _src_upbit_js__WEBPACK_IMPORTED_MODULE_92__.Z),
291316
+ /* harmony export */ probit: () => (/* reexport safe */ _src_probit_js__WEBPACK_IMPORTED_MODULE_88__.Z),
291317
+ /* harmony export */ timex: () => (/* reexport safe */ _src_timex_js__WEBPACK_IMPORTED_MODULE_89__.Z),
291318
+ /* harmony export */ tokocrypto: () => (/* reexport safe */ _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_90__.Z),
291319
+ /* harmony export */ upbit: () => (/* reexport safe */ _src_upbit_js__WEBPACK_IMPORTED_MODULE_91__.Z),
291114
291320
  /* harmony export */ version: () => (/* binding */ version),
291115
- /* harmony export */ wavesexchange: () => (/* reexport safe */ _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_93__.Z),
291116
- /* harmony export */ wazirx: () => (/* reexport safe */ _src_wazirx_js__WEBPACK_IMPORTED_MODULE_94__.Z),
291117
- /* harmony export */ whitebit: () => (/* reexport safe */ _src_whitebit_js__WEBPACK_IMPORTED_MODULE_95__.Z),
291118
- /* harmony export */ woo: () => (/* reexport safe */ _src_woo_js__WEBPACK_IMPORTED_MODULE_96__.Z),
291119
- /* harmony export */ yobit: () => (/* reexport safe */ _src_yobit_js__WEBPACK_IMPORTED_MODULE_97__.Z),
291120
- /* harmony export */ zaif: () => (/* reexport safe */ _src_zaif_js__WEBPACK_IMPORTED_MODULE_1__.Z),
291321
+ /* harmony export */ wavesexchange: () => (/* reexport safe */ _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_92__.Z),
291322
+ /* harmony export */ wazirx: () => (/* reexport safe */ _src_wazirx_js__WEBPACK_IMPORTED_MODULE_93__.Z),
291323
+ /* harmony export */ whitebit: () => (/* reexport safe */ _src_whitebit_js__WEBPACK_IMPORTED_MODULE_94__.Z),
291324
+ /* harmony export */ woo: () => (/* reexport safe */ _src_woo_js__WEBPACK_IMPORTED_MODULE_95__.Z),
291325
+ /* harmony export */ yobit: () => (/* reexport safe */ _src_yobit_js__WEBPACK_IMPORTED_MODULE_96__.Z),
291326
+ /* harmony export */ zaif: () => (/* reexport safe */ _src_zaif_js__WEBPACK_IMPORTED_MODULE_97__.Z),
291121
291327
  /* harmony export */ zonda: () => (/* reexport safe */ _src_zonda_js__WEBPACK_IMPORTED_MODULE_98__.Z)
291122
291328
  /* harmony export */ });
291123
291329
  /* harmony import */ var _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3043);
291124
291330
  /* harmony import */ var _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_155__ = __webpack_require__(2194);
291125
291331
  /* harmony import */ var _src_base_functions_js__WEBPACK_IMPORTED_MODULE_156__ = __webpack_require__(7100);
291126
291332
  /* harmony import */ var _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__ = __webpack_require__(6689);
291127
- /* harmony import */ var _src_ace_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9869);
291128
- /* harmony import */ var _src_alpaca_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5660);
291129
- /* harmony import */ var _src_ascendex_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9612);
291130
- /* harmony import */ var _src_bequant_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2049);
291131
- /* harmony import */ var _src_bigone_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7679);
291132
- /* harmony import */ var _src_binance_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(9987);
291133
- /* harmony import */ var _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(9212);
291134
- /* harmony import */ var _src_binanceus_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(2723);
291135
- /* harmony import */ var _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(3254);
291136
- /* harmony import */ var _src_bingx_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(7960);
291137
- /* harmony import */ var _src_bit2c_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(7691);
291138
- /* harmony import */ var _src_bitbank_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(7820);
291139
- /* harmony import */ var _src_bitbay_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(668);
291140
- /* harmony import */ var _src_bitbns_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(7790);
291141
- /* harmony import */ var _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(1819);
291142
- /* harmony import */ var _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(6537);
291143
- /* harmony import */ var _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(730);
291144
- /* harmony import */ var _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(8429);
291145
- /* harmony import */ var _src_bitforex_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(2035);
291146
- /* harmony import */ var _src_bitget_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(9051);
291147
- /* harmony import */ var _src_bithumb_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(5305);
291148
- /* harmony import */ var _src_bitmart_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(3718);
291149
- /* harmony import */ var _src_bitmex_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(7077);
291150
- /* harmony import */ var _src_bitopro_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(172);
291151
- /* harmony import */ var _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(2737);
291152
- /* harmony import */ var _src_bitrue_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(854);
291153
- /* harmony import */ var _src_bitso_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(4388);
291154
- /* harmony import */ var _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(4667);
291155
- /* harmony import */ var _src_bitteam_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(8994);
291156
- /* harmony import */ var _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(9943);
291157
- /* harmony import */ var _src_bl3p_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(9476);
291158
- /* harmony import */ var _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(182);
291159
- /* harmony import */ var _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(6246);
291160
- /* harmony import */ var _src_btcbox_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(7796);
291161
- /* harmony import */ var _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(1776);
291162
- /* harmony import */ var _src_btcturk_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(6304);
291163
- /* harmony import */ var _src_bybit_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(3527);
291164
- /* harmony import */ var _src_cex_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(6445);
291165
- /* harmony import */ var _src_coinbase_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(437);
291166
- /* harmony import */ var _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(8856);
291167
- /* harmony import */ var _src_coincheck_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(2117);
291168
- /* harmony import */ var _src_coinex_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(332);
291169
- /* harmony import */ var _src_coinlist_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(3623);
291170
- /* harmony import */ var _src_coinmate_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(9816);
291171
- /* harmony import */ var _src_coinone_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(7811);
291172
- /* harmony import */ var _src_coinsph_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(5782);
291173
- /* harmony import */ var _src_coinspot_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(7794);
291174
- /* harmony import */ var _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(9129);
291175
- /* harmony import */ var _src_currencycom_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(3214);
291176
- /* harmony import */ var _src_delta_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(1753);
291177
- /* harmony import */ var _src_deribit_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(24);
291178
- /* harmony import */ var _src_digifinex_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(8846);
291179
- /* harmony import */ var _src_exmo_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(1729);
291180
- /* harmony import */ var _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(5788);
291181
- /* harmony import */ var _src_gate_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(7290);
291182
- /* harmony import */ var _src_gateio_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(7036);
291183
- /* harmony import */ var _src_gemini_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(6743);
291184
- /* harmony import */ var _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(4714);
291185
- /* harmony import */ var _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(4815);
291186
- /* harmony import */ var _src_hollaex_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(8422);
291187
- /* harmony import */ var _src_htx_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(5939);
291188
- /* harmony import */ var _src_huobi_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(8146);
291189
- /* harmony import */ var _src_huobijp_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(7034);
291190
- /* harmony import */ var _src_idex_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(8232);
291191
- /* harmony import */ var _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(9570);
291192
- /* harmony import */ var _src_indodax_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(1605);
291193
- /* harmony import */ var _src_kraken_js__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(9922);
291194
- /* harmony import */ var _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(4470);
291195
- /* harmony import */ var _src_kucoin_js__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(3583);
291196
- /* harmony import */ var _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(1924);
291197
- /* harmony import */ var _src_kuna_js__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(7732);
291198
- /* harmony import */ var _src_latoken_js__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(2545);
291199
- /* harmony import */ var _src_lbank_js__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(3944);
291200
- /* harmony import */ var _src_luno_js__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(1758);
291201
- /* harmony import */ var _src_lykke_js__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(3803);
291202
- /* harmony import */ var _src_mercado_js__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(9013);
291203
- /* harmony import */ var _src_mexc_js__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(6641);
291204
- /* harmony import */ var _src_ndax_js__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(4531);
291205
- /* harmony import */ var _src_novadax_js__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(2449);
291206
- /* harmony import */ var _src_oceanex_js__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(6749);
291207
- /* harmony import */ var _src_okcoin_js__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(3007);
291208
- /* harmony import */ var _src_okx_js__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(4042);
291209
- /* harmony import */ var _src_p2b_js__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(2466);
291210
- /* harmony import */ var _src_paymium_js__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(7082);
291211
- /* harmony import */ var _src_phemex_js__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(79);
291212
- /* harmony import */ var _src_poloniex_js__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(8891);
291213
- /* harmony import */ var _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(6877);
291214
- /* harmony import */ var _src_probit_js__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(3657);
291215
- /* harmony import */ var _src_timex_js__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(1067);
291216
- /* harmony import */ var _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(5261);
291217
- /* harmony import */ var _src_upbit_js__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(7584);
291218
- /* harmony import */ var _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(3853);
291219
- /* harmony import */ var _src_wazirx_js__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(6536);
291220
- /* harmony import */ var _src_whitebit_js__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(5467);
291221
- /* harmony import */ var _src_woo_js__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(517);
291222
- /* harmony import */ var _src_yobit_js__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(3850);
291223
- /* harmony import */ var _src_zaif_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7558);
291333
+ /* harmony import */ var _src_ace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9869);
291334
+ /* harmony import */ var _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5660);
291335
+ /* harmony import */ var _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9612);
291336
+ /* harmony import */ var _src_bequant_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2049);
291337
+ /* harmony import */ var _src_bigone_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7679);
291338
+ /* harmony import */ var _src_binance_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(9987);
291339
+ /* harmony import */ var _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(9212);
291340
+ /* harmony import */ var _src_binanceus_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(2723);
291341
+ /* harmony import */ var _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(3254);
291342
+ /* harmony import */ var _src_bingx_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(7960);
291343
+ /* harmony import */ var _src_bit2c_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(7691);
291344
+ /* harmony import */ var _src_bitbank_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(7820);
291345
+ /* harmony import */ var _src_bitbay_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(668);
291346
+ /* harmony import */ var _src_bitbns_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(7790);
291347
+ /* harmony import */ var _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(1819);
291348
+ /* harmony import */ var _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(6537);
291349
+ /* harmony import */ var _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(730);
291350
+ /* harmony import */ var _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(8429);
291351
+ /* harmony import */ var _src_bitforex_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(2035);
291352
+ /* harmony import */ var _src_bitget_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(9051);
291353
+ /* harmony import */ var _src_bithumb_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(5305);
291354
+ /* harmony import */ var _src_bitmart_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(3718);
291355
+ /* harmony import */ var _src_bitmex_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(7077);
291356
+ /* harmony import */ var _src_bitopro_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(172);
291357
+ /* harmony import */ var _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(2737);
291358
+ /* harmony import */ var _src_bitrue_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(854);
291359
+ /* harmony import */ var _src_bitso_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(4388);
291360
+ /* harmony import */ var _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(4667);
291361
+ /* harmony import */ var _src_bitteam_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(8994);
291362
+ /* harmony import */ var _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(9943);
291363
+ /* harmony import */ var _src_bl3p_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(9476);
291364
+ /* harmony import */ var _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(182);
291365
+ /* harmony import */ var _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(6246);
291366
+ /* harmony import */ var _src_btcbox_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(7796);
291367
+ /* harmony import */ var _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(1776);
291368
+ /* harmony import */ var _src_btcturk_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(6304);
291369
+ /* harmony import */ var _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(3527);
291370
+ /* harmony import */ var _src_cex_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(6445);
291371
+ /* harmony import */ var _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(437);
291372
+ /* harmony import */ var _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(8856);
291373
+ /* harmony import */ var _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(2117);
291374
+ /* harmony import */ var _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(332);
291375
+ /* harmony import */ var _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(3623);
291376
+ /* harmony import */ var _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(9816);
291377
+ /* harmony import */ var _src_coinone_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(7811);
291378
+ /* harmony import */ var _src_coinsph_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(5782);
291379
+ /* harmony import */ var _src_coinspot_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(7794);
291380
+ /* harmony import */ var _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(9129);
291381
+ /* harmony import */ var _src_currencycom_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(3214);
291382
+ /* harmony import */ var _src_delta_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(1753);
291383
+ /* harmony import */ var _src_deribit_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(24);
291384
+ /* harmony import */ var _src_digifinex_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(8846);
291385
+ /* harmony import */ var _src_exmo_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(1729);
291386
+ /* harmony import */ var _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(5788);
291387
+ /* harmony import */ var _src_gate_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(7290);
291388
+ /* harmony import */ var _src_gateio_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(7036);
291389
+ /* harmony import */ var _src_gemini_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(6743);
291390
+ /* harmony import */ var _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(4714);
291391
+ /* harmony import */ var _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(4815);
291392
+ /* harmony import */ var _src_hollaex_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(8422);
291393
+ /* harmony import */ var _src_htx_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(5939);
291394
+ /* harmony import */ var _src_huobi_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(8146);
291395
+ /* harmony import */ var _src_huobijp_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(7034);
291396
+ /* harmony import */ var _src_idex_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(8232);
291397
+ /* harmony import */ var _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(9570);
291398
+ /* harmony import */ var _src_indodax_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(1605);
291399
+ /* harmony import */ var _src_kraken_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(9922);
291400
+ /* harmony import */ var _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(4470);
291401
+ /* harmony import */ var _src_kucoin_js__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(3583);
291402
+ /* harmony import */ var _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(1924);
291403
+ /* harmony import */ var _src_kuna_js__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(7732);
291404
+ /* harmony import */ var _src_latoken_js__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(2545);
291405
+ /* harmony import */ var _src_lbank_js__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(3944);
291406
+ /* harmony import */ var _src_luno_js__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(1758);
291407
+ /* harmony import */ var _src_lykke_js__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(3803);
291408
+ /* harmony import */ var _src_mercado_js__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(9013);
291409
+ /* harmony import */ var _src_mexc_js__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(6641);
291410
+ /* harmony import */ var _src_ndax_js__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(4531);
291411
+ /* harmony import */ var _src_novadax_js__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(2449);
291412
+ /* harmony import */ var _src_oceanex_js__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(6749);
291413
+ /* harmony import */ var _src_okcoin_js__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(3007);
291414
+ /* harmony import */ var _src_okx_js__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(4042);
291415
+ /* harmony import */ var _src_p2b_js__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(2466);
291416
+ /* harmony import */ var _src_paymium_js__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(7082);
291417
+ /* harmony import */ var _src_phemex_js__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(79);
291418
+ /* harmony import */ var _src_poloniex_js__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(8891);
291419
+ /* harmony import */ var _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(6877);
291420
+ /* harmony import */ var _src_probit_js__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(3657);
291421
+ /* harmony import */ var _src_timex_js__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(1067);
291422
+ /* harmony import */ var _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(5261);
291423
+ /* harmony import */ var _src_upbit_js__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(7584);
291424
+ /* harmony import */ var _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(3853);
291425
+ /* harmony import */ var _src_wazirx_js__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(6536);
291426
+ /* harmony import */ var _src_whitebit_js__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(5467);
291427
+ /* harmony import */ var _src_woo_js__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(517);
291428
+ /* harmony import */ var _src_yobit_js__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(3850);
291429
+ /* harmony import */ var _src_zaif_js__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(5934);
291224
291430
  /* harmony import */ var _src_zonda_js__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(5140);
291225
291431
  /* harmony import */ var _src_pro_alpaca_js__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(2467);
291226
291432
  /* harmony import */ var _src_pro_ascendex_js__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(2383);
@@ -291312,7 +291518,7 @@ SOFTWARE.
291312
291518
 
291313
291519
  //-----------------------------------------------------------------------------
291314
291520
  // this is updated by vss.js when building
291315
- const version = '4.2.1';
291521
+ const version = '4.2.3';
291316
291522
  _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion = version;
291317
291523
  //-----------------------------------------------------------------------------
291318
291524
 
@@ -291471,103 +291677,103 @@ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion
291471
291677
 
291472
291678
 
291473
291679
  const exchanges = {
291474
- 'ace': _src_ace_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z,
291475
- 'alpaca': _src_alpaca_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z,
291476
- 'ascendex': _src_ascendex_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z,
291477
- 'bequant': _src_bequant_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z,
291478
- 'bigone': _src_bigone_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z,
291479
- 'binance': _src_binance_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z,
291480
- 'binancecoinm': _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z,
291481
- 'binanceus': _src_binanceus_js__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z,
291482
- 'binanceusdm': _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z,
291483
- 'bingx': _src_bingx_js__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z,
291484
- 'bit2c': _src_bit2c_js__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z,
291485
- 'bitbank': _src_bitbank_js__WEBPACK_IMPORTED_MODULE_13__/* ["default"] */ .Z,
291486
- 'bitbay': _src_bitbay_js__WEBPACK_IMPORTED_MODULE_14__/* ["default"] */ .Z,
291487
- 'bitbns': _src_bitbns_js__WEBPACK_IMPORTED_MODULE_15__/* ["default"] */ .Z,
291488
- 'bitcoincom': _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_16__/* ["default"] */ .Z,
291489
- 'bitfinex': _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_17__/* ["default"] */ .Z,
291490
- 'bitfinex2': _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_18__/* ["default"] */ .Z,
291491
- 'bitflyer': _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_19__/* ["default"] */ .Z,
291492
- 'bitforex': _src_bitforex_js__WEBPACK_IMPORTED_MODULE_20__/* ["default"] */ .Z,
291493
- 'bitget': _src_bitget_js__WEBPACK_IMPORTED_MODULE_21__/* ["default"] */ .Z,
291494
- 'bithumb': _src_bithumb_js__WEBPACK_IMPORTED_MODULE_22__/* ["default"] */ .Z,
291495
- 'bitmart': _src_bitmart_js__WEBPACK_IMPORTED_MODULE_23__/* ["default"] */ .Z,
291496
- 'bitmex': _src_bitmex_js__WEBPACK_IMPORTED_MODULE_24__/* ["default"] */ .Z,
291497
- 'bitopro': _src_bitopro_js__WEBPACK_IMPORTED_MODULE_25__/* ["default"] */ .Z,
291498
- 'bitpanda': _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_26__/* ["default"] */ .Z,
291499
- 'bitrue': _src_bitrue_js__WEBPACK_IMPORTED_MODULE_27__/* ["default"] */ .Z,
291500
- 'bitso': _src_bitso_js__WEBPACK_IMPORTED_MODULE_28__/* ["default"] */ .Z,
291501
- 'bitstamp': _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_29__/* ["default"] */ .Z,
291502
- 'bitteam': _src_bitteam_js__WEBPACK_IMPORTED_MODULE_30__/* ["default"] */ .Z,
291503
- 'bitvavo': _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_31__/* ["default"] */ .Z,
291504
- 'bl3p': _src_bl3p_js__WEBPACK_IMPORTED_MODULE_32__/* ["default"] */ .Z,
291505
- 'blockchaincom': _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_33__/* ["default"] */ .Z,
291506
- 'btcalpha': _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_34__/* ["default"] */ .Z,
291507
- 'btcbox': _src_btcbox_js__WEBPACK_IMPORTED_MODULE_35__/* ["default"] */ .Z,
291508
- 'btcmarkets': _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_36__/* ["default"] */ .Z,
291509
- 'btcturk': _src_btcturk_js__WEBPACK_IMPORTED_MODULE_37__/* ["default"] */ .Z,
291510
- 'bybit': _src_bybit_js__WEBPACK_IMPORTED_MODULE_38__/* ["default"] */ .Z,
291511
- 'cex': _src_cex_js__WEBPACK_IMPORTED_MODULE_39__/* ["default"] */ .Z,
291512
- 'coinbase': _src_coinbase_js__WEBPACK_IMPORTED_MODULE_40__/* ["default"] */ .Z,
291513
- 'coinbasepro': _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_41__/* ["default"] */ .Z,
291514
- 'coincheck': _src_coincheck_js__WEBPACK_IMPORTED_MODULE_42__/* ["default"] */ .Z,
291515
- 'coinex': _src_coinex_js__WEBPACK_IMPORTED_MODULE_43__/* ["default"] */ .Z,
291516
- 'coinlist': _src_coinlist_js__WEBPACK_IMPORTED_MODULE_44__/* ["default"] */ .Z,
291517
- 'coinmate': _src_coinmate_js__WEBPACK_IMPORTED_MODULE_45__/* ["default"] */ .Z,
291518
- 'coinone': _src_coinone_js__WEBPACK_IMPORTED_MODULE_46__/* ["default"] */ .Z,
291519
- 'coinsph': _src_coinsph_js__WEBPACK_IMPORTED_MODULE_47__/* ["default"] */ .Z,
291520
- 'coinspot': _src_coinspot_js__WEBPACK_IMPORTED_MODULE_48__/* ["default"] */ .Z,
291521
- 'cryptocom': _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_49__/* ["default"] */ .Z,
291522
- 'currencycom': _src_currencycom_js__WEBPACK_IMPORTED_MODULE_50__/* ["default"] */ .Z,
291523
- 'delta': _src_delta_js__WEBPACK_IMPORTED_MODULE_51__/* ["default"] */ .Z,
291524
- 'deribit': _src_deribit_js__WEBPACK_IMPORTED_MODULE_52__/* ["default"] */ .Z,
291525
- 'digifinex': _src_digifinex_js__WEBPACK_IMPORTED_MODULE_53__/* ["default"] */ .Z,
291526
- 'exmo': _src_exmo_js__WEBPACK_IMPORTED_MODULE_54__/* ["default"] */ .Z,
291527
- 'fmfwio': _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_55__/* ["default"] */ .Z,
291528
- 'gate': _src_gate_js__WEBPACK_IMPORTED_MODULE_56__/* ["default"] */ .Z,
291529
- 'gateio': _src_gateio_js__WEBPACK_IMPORTED_MODULE_57__/* ["default"] */ .Z,
291530
- 'gemini': _src_gemini_js__WEBPACK_IMPORTED_MODULE_58__/* ["default"] */ .Z,
291531
- 'hitbtc': _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_59__/* ["default"] */ .Z,
291532
- 'hitbtc3': _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_60__/* ["default"] */ .Z,
291533
- 'hollaex': _src_hollaex_js__WEBPACK_IMPORTED_MODULE_61__/* ["default"] */ .Z,
291534
- 'htx': _src_htx_js__WEBPACK_IMPORTED_MODULE_62__/* ["default"] */ .Z,
291535
- 'huobi': _src_huobi_js__WEBPACK_IMPORTED_MODULE_63__/* ["default"] */ .Z,
291536
- 'huobijp': _src_huobijp_js__WEBPACK_IMPORTED_MODULE_64__/* ["default"] */ .Z,
291537
- 'idex': _src_idex_js__WEBPACK_IMPORTED_MODULE_65__/* ["default"] */ .Z,
291538
- 'independentreserve': _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_66__/* ["default"] */ .Z,
291539
- 'indodax': _src_indodax_js__WEBPACK_IMPORTED_MODULE_67__/* ["default"] */ .Z,
291540
- 'kraken': _src_kraken_js__WEBPACK_IMPORTED_MODULE_68__/* ["default"] */ .Z,
291541
- 'krakenfutures': _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_69__/* ["default"] */ .Z,
291542
- 'kucoin': _src_kucoin_js__WEBPACK_IMPORTED_MODULE_70__/* ["default"] */ .Z,
291543
- 'kucoinfutures': _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_71__/* ["default"] */ .Z,
291544
- 'kuna': _src_kuna_js__WEBPACK_IMPORTED_MODULE_72__/* ["default"] */ .Z,
291545
- 'latoken': _src_latoken_js__WEBPACK_IMPORTED_MODULE_73__/* ["default"] */ .Z,
291546
- 'lbank': _src_lbank_js__WEBPACK_IMPORTED_MODULE_74__/* ["default"] */ .Z,
291547
- 'luno': _src_luno_js__WEBPACK_IMPORTED_MODULE_75__/* ["default"] */ .Z,
291548
- 'lykke': _src_lykke_js__WEBPACK_IMPORTED_MODULE_76__/* ["default"] */ .Z,
291549
- 'mercado': _src_mercado_js__WEBPACK_IMPORTED_MODULE_77__/* ["default"] */ .Z,
291550
- 'mexc': _src_mexc_js__WEBPACK_IMPORTED_MODULE_78__/* ["default"] */ .Z,
291551
- 'ndax': _src_ndax_js__WEBPACK_IMPORTED_MODULE_79__/* ["default"] */ .Z,
291552
- 'novadax': _src_novadax_js__WEBPACK_IMPORTED_MODULE_80__/* ["default"] */ .Z,
291553
- 'oceanex': _src_oceanex_js__WEBPACK_IMPORTED_MODULE_81__/* ["default"] */ .Z,
291554
- 'okcoin': _src_okcoin_js__WEBPACK_IMPORTED_MODULE_82__/* ["default"] */ .Z,
291555
- 'okx': _src_okx_js__WEBPACK_IMPORTED_MODULE_83__/* ["default"] */ .Z,
291556
- 'p2b': _src_p2b_js__WEBPACK_IMPORTED_MODULE_84__/* ["default"] */ .Z,
291557
- 'paymium': _src_paymium_js__WEBPACK_IMPORTED_MODULE_85__/* ["default"] */ .Z,
291558
- 'phemex': _src_phemex_js__WEBPACK_IMPORTED_MODULE_86__/* ["default"] */ .Z,
291559
- 'poloniex': _src_poloniex_js__WEBPACK_IMPORTED_MODULE_87__/* ["default"] */ .Z,
291560
- 'poloniexfutures': _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_88__/* ["default"] */ .Z,
291561
- 'probit': _src_probit_js__WEBPACK_IMPORTED_MODULE_89__/* ["default"] */ .Z,
291562
- 'timex': _src_timex_js__WEBPACK_IMPORTED_MODULE_90__/* ["default"] */ .Z,
291563
- 'tokocrypto': _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_91__/* ["default"] */ .Z,
291564
- 'upbit': _src_upbit_js__WEBPACK_IMPORTED_MODULE_92__/* ["default"] */ .Z,
291565
- 'wavesexchange': _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_93__/* ["default"] */ .Z,
291566
- 'wazirx': _src_wazirx_js__WEBPACK_IMPORTED_MODULE_94__/* ["default"] */ .Z,
291567
- 'whitebit': _src_whitebit_js__WEBPACK_IMPORTED_MODULE_95__/* ["default"] */ .Z,
291568
- 'woo': _src_woo_js__WEBPACK_IMPORTED_MODULE_96__/* ["default"] */ .Z,
291569
- 'yobit': _src_yobit_js__WEBPACK_IMPORTED_MODULE_97__/* ["default"] */ .Z,
291570
- 'zaif': _src_zaif_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z,
291680
+ 'ace': _src_ace_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z,
291681
+ 'alpaca': _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z,
291682
+ 'ascendex': _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z,
291683
+ 'bequant': _src_bequant_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z,
291684
+ 'bigone': _src_bigone_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z,
291685
+ 'binance': _src_binance_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z,
291686
+ 'binancecoinm': _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z,
291687
+ 'binanceus': _src_binanceus_js__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z,
291688
+ 'binanceusdm': _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z,
291689
+ 'bingx': _src_bingx_js__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z,
291690
+ 'bit2c': _src_bit2c_js__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z,
291691
+ 'bitbank': _src_bitbank_js__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z,
291692
+ 'bitbay': _src_bitbay_js__WEBPACK_IMPORTED_MODULE_13__/* ["default"] */ .Z,
291693
+ 'bitbns': _src_bitbns_js__WEBPACK_IMPORTED_MODULE_14__/* ["default"] */ .Z,
291694
+ 'bitcoincom': _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_15__/* ["default"] */ .Z,
291695
+ 'bitfinex': _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_16__/* ["default"] */ .Z,
291696
+ 'bitfinex2': _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_17__/* ["default"] */ .Z,
291697
+ 'bitflyer': _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_18__/* ["default"] */ .Z,
291698
+ 'bitforex': _src_bitforex_js__WEBPACK_IMPORTED_MODULE_19__/* ["default"] */ .Z,
291699
+ 'bitget': _src_bitget_js__WEBPACK_IMPORTED_MODULE_20__/* ["default"] */ .Z,
291700
+ 'bithumb': _src_bithumb_js__WEBPACK_IMPORTED_MODULE_21__/* ["default"] */ .Z,
291701
+ 'bitmart': _src_bitmart_js__WEBPACK_IMPORTED_MODULE_22__/* ["default"] */ .Z,
291702
+ 'bitmex': _src_bitmex_js__WEBPACK_IMPORTED_MODULE_23__/* ["default"] */ .Z,
291703
+ 'bitopro': _src_bitopro_js__WEBPACK_IMPORTED_MODULE_24__/* ["default"] */ .Z,
291704
+ 'bitpanda': _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_25__/* ["default"] */ .Z,
291705
+ 'bitrue': _src_bitrue_js__WEBPACK_IMPORTED_MODULE_26__/* ["default"] */ .Z,
291706
+ 'bitso': _src_bitso_js__WEBPACK_IMPORTED_MODULE_27__/* ["default"] */ .Z,
291707
+ 'bitstamp': _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_28__/* ["default"] */ .Z,
291708
+ 'bitteam': _src_bitteam_js__WEBPACK_IMPORTED_MODULE_29__/* ["default"] */ .Z,
291709
+ 'bitvavo': _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_30__/* ["default"] */ .Z,
291710
+ 'bl3p': _src_bl3p_js__WEBPACK_IMPORTED_MODULE_31__/* ["default"] */ .Z,
291711
+ 'blockchaincom': _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_32__/* ["default"] */ .Z,
291712
+ 'btcalpha': _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_33__/* ["default"] */ .Z,
291713
+ 'btcbox': _src_btcbox_js__WEBPACK_IMPORTED_MODULE_34__/* ["default"] */ .Z,
291714
+ 'btcmarkets': _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_35__/* ["default"] */ .Z,
291715
+ 'btcturk': _src_btcturk_js__WEBPACK_IMPORTED_MODULE_36__/* ["default"] */ .Z,
291716
+ 'bybit': _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__/* ["default"] */ .Z,
291717
+ 'cex': _src_cex_js__WEBPACK_IMPORTED_MODULE_38__/* ["default"] */ .Z,
291718
+ 'coinbase': _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__/* ["default"] */ .Z,
291719
+ 'coinbasepro': _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__/* ["default"] */ .Z,
291720
+ 'coincheck': _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__/* ["default"] */ .Z,
291721
+ 'coinex': _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__/* ["default"] */ .Z,
291722
+ 'coinlist': _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__/* ["default"] */ .Z,
291723
+ 'coinmate': _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__/* ["default"] */ .Z,
291724
+ 'coinone': _src_coinone_js__WEBPACK_IMPORTED_MODULE_45__/* ["default"] */ .Z,
291725
+ 'coinsph': _src_coinsph_js__WEBPACK_IMPORTED_MODULE_46__/* ["default"] */ .Z,
291726
+ 'coinspot': _src_coinspot_js__WEBPACK_IMPORTED_MODULE_47__/* ["default"] */ .Z,
291727
+ 'cryptocom': _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_48__/* ["default"] */ .Z,
291728
+ 'currencycom': _src_currencycom_js__WEBPACK_IMPORTED_MODULE_49__/* ["default"] */ .Z,
291729
+ 'delta': _src_delta_js__WEBPACK_IMPORTED_MODULE_50__/* ["default"] */ .Z,
291730
+ 'deribit': _src_deribit_js__WEBPACK_IMPORTED_MODULE_51__/* ["default"] */ .Z,
291731
+ 'digifinex': _src_digifinex_js__WEBPACK_IMPORTED_MODULE_52__/* ["default"] */ .Z,
291732
+ 'exmo': _src_exmo_js__WEBPACK_IMPORTED_MODULE_53__/* ["default"] */ .Z,
291733
+ 'fmfwio': _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_54__/* ["default"] */ .Z,
291734
+ 'gate': _src_gate_js__WEBPACK_IMPORTED_MODULE_55__/* ["default"] */ .Z,
291735
+ 'gateio': _src_gateio_js__WEBPACK_IMPORTED_MODULE_56__/* ["default"] */ .Z,
291736
+ 'gemini': _src_gemini_js__WEBPACK_IMPORTED_MODULE_57__/* ["default"] */ .Z,
291737
+ 'hitbtc': _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_58__/* ["default"] */ .Z,
291738
+ 'hitbtc3': _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_59__/* ["default"] */ .Z,
291739
+ 'hollaex': _src_hollaex_js__WEBPACK_IMPORTED_MODULE_60__/* ["default"] */ .Z,
291740
+ 'htx': _src_htx_js__WEBPACK_IMPORTED_MODULE_61__/* ["default"] */ .Z,
291741
+ 'huobi': _src_huobi_js__WEBPACK_IMPORTED_MODULE_62__/* ["default"] */ .Z,
291742
+ 'huobijp': _src_huobijp_js__WEBPACK_IMPORTED_MODULE_63__/* ["default"] */ .Z,
291743
+ 'idex': _src_idex_js__WEBPACK_IMPORTED_MODULE_64__/* ["default"] */ .Z,
291744
+ 'independentreserve': _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_65__/* ["default"] */ .Z,
291745
+ 'indodax': _src_indodax_js__WEBPACK_IMPORTED_MODULE_66__/* ["default"] */ .Z,
291746
+ 'kraken': _src_kraken_js__WEBPACK_IMPORTED_MODULE_67__/* ["default"] */ .Z,
291747
+ 'krakenfutures': _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_68__/* ["default"] */ .Z,
291748
+ 'kucoin': _src_kucoin_js__WEBPACK_IMPORTED_MODULE_69__/* ["default"] */ .Z,
291749
+ 'kucoinfutures': _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_70__/* ["default"] */ .Z,
291750
+ 'kuna': _src_kuna_js__WEBPACK_IMPORTED_MODULE_71__/* ["default"] */ .Z,
291751
+ 'latoken': _src_latoken_js__WEBPACK_IMPORTED_MODULE_72__/* ["default"] */ .Z,
291752
+ 'lbank': _src_lbank_js__WEBPACK_IMPORTED_MODULE_73__/* ["default"] */ .Z,
291753
+ 'luno': _src_luno_js__WEBPACK_IMPORTED_MODULE_74__/* ["default"] */ .Z,
291754
+ 'lykke': _src_lykke_js__WEBPACK_IMPORTED_MODULE_75__/* ["default"] */ .Z,
291755
+ 'mercado': _src_mercado_js__WEBPACK_IMPORTED_MODULE_76__/* ["default"] */ .Z,
291756
+ 'mexc': _src_mexc_js__WEBPACK_IMPORTED_MODULE_77__/* ["default"] */ .Z,
291757
+ 'ndax': _src_ndax_js__WEBPACK_IMPORTED_MODULE_78__/* ["default"] */ .Z,
291758
+ 'novadax': _src_novadax_js__WEBPACK_IMPORTED_MODULE_79__/* ["default"] */ .Z,
291759
+ 'oceanex': _src_oceanex_js__WEBPACK_IMPORTED_MODULE_80__/* ["default"] */ .Z,
291760
+ 'okcoin': _src_okcoin_js__WEBPACK_IMPORTED_MODULE_81__/* ["default"] */ .Z,
291761
+ 'okx': _src_okx_js__WEBPACK_IMPORTED_MODULE_82__/* ["default"] */ .Z,
291762
+ 'p2b': _src_p2b_js__WEBPACK_IMPORTED_MODULE_83__/* ["default"] */ .Z,
291763
+ 'paymium': _src_paymium_js__WEBPACK_IMPORTED_MODULE_84__/* ["default"] */ .Z,
291764
+ 'phemex': _src_phemex_js__WEBPACK_IMPORTED_MODULE_85__/* ["default"] */ .Z,
291765
+ 'poloniex': _src_poloniex_js__WEBPACK_IMPORTED_MODULE_86__/* ["default"] */ .Z,
291766
+ 'poloniexfutures': _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_87__/* ["default"] */ .Z,
291767
+ 'probit': _src_probit_js__WEBPACK_IMPORTED_MODULE_88__/* ["default"] */ .Z,
291768
+ 'timex': _src_timex_js__WEBPACK_IMPORTED_MODULE_89__/* ["default"] */ .Z,
291769
+ 'tokocrypto': _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_90__/* ["default"] */ .Z,
291770
+ 'upbit': _src_upbit_js__WEBPACK_IMPORTED_MODULE_91__/* ["default"] */ .Z,
291771
+ 'wavesexchange': _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_92__/* ["default"] */ .Z,
291772
+ 'wazirx': _src_wazirx_js__WEBPACK_IMPORTED_MODULE_93__/* ["default"] */ .Z,
291773
+ 'whitebit': _src_whitebit_js__WEBPACK_IMPORTED_MODULE_94__/* ["default"] */ .Z,
291774
+ 'woo': _src_woo_js__WEBPACK_IMPORTED_MODULE_95__/* ["default"] */ .Z,
291775
+ 'yobit': _src_yobit_js__WEBPACK_IMPORTED_MODULE_96__/* ["default"] */ .Z,
291776
+ 'zaif': _src_zaif_js__WEBPACK_IMPORTED_MODULE_97__/* ["default"] */ .Z,
291571
291777
  'zonda': _src_zonda_js__WEBPACK_IMPORTED_MODULE_98__/* ["default"] */ .Z,
291572
291778
  };
291573
291779
  const pro = {