
    !:hH                    X   d dl mZ d dlmZ d dlZd dlZd dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lm Z  d d
lm!Z! d dlm"Z" d dlm#Z# d dlm$Z$ d dlm%Z% d dlm&Z& d dlm'Z' d dlm(Z( d dlm)Z) d dl*m+Z+ d dl,m-Z-  G d dee      Z.y)    )Exchange)ImplicitAPIN)AnyBalances
CurrenciesCurrencyDepositAddressIntMarketNumOrder	OrderBook	OrderSide	OrderTypeStrStringsTickerTickersTradeTradingFeesTransaction)List)ExchangeError)AuthenticationError)PermissionDenied)ArgumentsRequired)
BadRequest)InsufficientFunds)InvalidOrder)OrderNotFound)NotSupported)RateLimitExceeded)ExchangeNotAvailable)OnMaintenance)InvalidNonce)	TICK_SIZE)Precisec                   8    e Zd Zdef fdZi fdefdZi fdZi fdee	   fdZ
i fdZd Zi fdZi fd	Zde	fd
Zdi fdededefdZi fdefdZi fdefdZi fdefdZi fdedefdZdEdede	defdZdi fdedefdZdEdede	defdZddi fdedededee   fdZ de!fdZ"i fde#fdZ$i fde!fdZ%dEdede	de&fd Z'di fd!ede(fd"Z)dddi fde(dededee&   fd#Z*di fded$e+d%e,d&e-d'e.f
d(Z/di fd!ede(fd)Z0dddi fde(dedefd*Z1di fd+ed&e-d,ede2fd-Z3d. Z4dddi fd+e(dededee2   fd/Z5dEd0ed1e6de2fd2Z7d3e(fd4Z8dEd1e6fd5Z9i fd+ede:fd6Z;i fd+edee:   fd7Z<d8d9i ddfd:Z=d;e>d<ed=ed>ed?ed@efdAZ?i fd+ede:fdBZ@dCddi fdedededeeA   fdDZB xZCS )Fgeminireturnc                 :   | j                  t        t        |          i ddddddgddd	d
dddi dd ddddddddddddddddddddddddddddddddi d dd!dd"dd#dd$dd%dd&dd'dd(dd)dd*dd+dd,dd-dd.dd/dd0di d1dd2dd3dd4dd5dd6dd7dd8dd9dd:dd;dd<dd=dd>dd?dd@ddAddddddBddddddddCdDdEdFdFdGdHdIdJdKdLgdMdMdGdHdIg dNdOdPdQdRgidQdSgidQdTdTdTdTdTdTdTdTdTdTdTdTdUidVi dWdXdYdXdZdXd[dXd\dXd]dXd^dXd_dXd`dXdadXdbdXdcdXdddXdedXdfdXdgdXdhdXi didXdjdXdkdXdldXdmdXdndXdodXdpdXdqdXdrdXdsdXdtdXdudXdvdXdwdXdxdXdydXdXdXdXdXdXdXdXdzid{d|t        d}d~dddidt
        t        t        t        t        t        t        t        dddddddddddi dt
        dt
        dt
        dt
        dt
        dt
        dt
        dt        dt
        dt        dt        dt        dt        dt        dt        dt        dt
        t
        t        t        t        t        t        t        t        t        t
        t        t        t        t
        dt        t        t        ddddddg dddddddgddTdddddddddddddddddddddid
ddddd dddd dddddddddddddd ddd d ddÜdddddĜdd ddddŜd d dd idǜ	ddiddid dʜd d dʜd˜      S )Nidr)   nameGemini	countriesUS	rateLimitd   versionv1proThasCORSspotmarginFswapfutureoption	addMargincancelOrdercloseAllPositionsclosePositioncreateDepositAddresscreateMarketOrdercreateOrdercreateReduceOnlyOrderfetchBalancefetchBidsAsksfetchBorrowRateHistoriesfetchBorrowRateHistoryfetchClosedOrdersfetchCrossBorrowRatefetchCrossBorrowRatesfetchCurrenciesfetchDepositAddressfetchDepositAddressesfetchDepositAddressesByNetworkfetchDepositsWithdrawalsfetchFundingHistoryfetchFundingRatefetchFundingRateHistoryfetchFundingRatesfetchIndexOHLCVfetchIsolatedBorrowRatefetchIsolatedBorrowRatesfetchLeveragefetchLeverageTiersfetchMarginModefetchMarketsfetchMarkOHLCVfetchMyTrades
fetchOHLCVfetchOpenInterestHistoryfetchOpenOrders
fetchOrderfetchOrderBookfetchOrdersfetchPositionfetchPositionModefetchPositionsfetchPositionsRiskfetchPremiumIndexOHLCVfetchTickeremulated)fetchTickersfetchTradesfetchTradingFeefetchTradingFeesfetchTransactionspostOnlyreduceMarginsandboxsetLeveragesetMarginModesetPositionModewithdrawurlszchttps://user-images.githubusercontent.com/1294454/27816857-ce7be644-6096-11e7-82d6-3c257263229c.jpgzhttps://api.gemini.comzhttps://docs.gemini.comzhttps://exchange.gemini.com)publicprivatewebwebExchangezhttps://gemini.com/z https://docs.gemini.com/rest-apizhttps://docs.sandbox.gemini.comzhttps://api.sandbox.gemini.com)z#https://gemini.com/api-fee-schedulezhttps://gemini.com/trading-feesz https://gemini.com/transfer-fees)logoapiwwwdoctestfeesr}   get zrest-api   )z
v1/symbolszv1/symbols/details/{symbol}zv1/staking/rateszv1/pubticker/{symbol}zv2/ticker/{symbol}zv2/candles/{symbol}/{timeframe}zv1/trades/{symbol}zv1/auction/{symbol}zv1/auction/{symbol}/historyzv1/pricefeedzv1/book/{symbol}zv1/earn/ratespostzv1/staking/unstake   zv1/staking/stakezv1/staking/rewardszv1/staking/historyzv1/order/newzv1/order/cancelzv1/wrap/{symbol}zv1/order/cancel/sessionzv1/order/cancel/allzv1/order/statusz	v1/orderszv1/mytradeszv1/notionalvolumezv1/tradevolumezv1/clearing/newzv1/clearing/statuszv1/clearing/cancelzv1/clearing/confirmzv1/balanceszv1/balances/stakingzv1/notionalbalances/{currency}zv1/transferszv1/addresses/{network}zv1/deposit/{network}/newAddressz v1/deposit/{currency}/newAddresszv1/withdraw/{currency}zv1/account/transfer/{currency}zv1/payments/addbankzv1/payments/methodszv1/payments/sen/withdrawzv1/balances/earnzv1/earn/interestzv1/earn/historyz&v1/approvedAddresses/{network}/request)z&v1/approvedAddresses/account/{network}z%v1/approvedAddresses/{network}/removez
v1/accountzv1/account/createzv1/account/listzv1/heartbeatzv1/roles)r{   rz   rx   ry   precisionModer   tradinggMbp?gMb`?)takermakerhttpExceptions)400403404406429500502503
timeframes1m5m15m30m1hr6hr1day)r   r   r   r   1h6h1d
exceptionsAuctionNotOpenClientOrderIdTooLongClientOrderIdMustBeStringConflictingOptionsEndpointMismatchEndpointNotFoundIneligibleTimingr   InvalidJsonr%   InvalidApiKeyInvalidOrderTypeInvalidPriceInvalidQuantityInvalidSideInvalidSignatureInvalidSymbol)InvalidTimestampInPayloadMaintenanceMarketNotOpenMissingApikeyHeaderMissingOrderFieldMissingRoleMissingPayloadHeaderMissingSignatureHeaderNoSSLOptionsMustBeArrayr    	RateLimitSystemUnsupportedOption)z8The Gemini Exchange is currently undergoing maintenance.z?We are investigating technical issues with the Gemini Exchange.zInternal Server Error)exactbroadoptionsfetch_markets_from_api
   )USDTGUSDUSDDAIEURGBPSGDBTCETHLTCBCHSOL)fetchDetailsForAllSymbolsquoteCurrencies)webApiEnablewebApiRetriesbtcusdtethusdt)r   r   webApiMuteFailurefetchTickerV1bitcoinethereumbitcoincashlitecoinzcashfilecoindogecointezos	avalanchesolanacosmospolkadot)r   ERC20r   r   ZECFILDOGEXTZAVAXXr   ATOMDOTmillisecondspaxgusdPAXGr   )basequote)
fetchMarketsMethodfetchMarketFromWebRetriesfetchMarketsFromAPIr[   fetchUsdtMarketsrL   fetchTickerMethodnetworksnonceconflictingMarketsfeatures)IOCFOKPOGTD)
marginModetriggerPricetriggerPriceTypetriggerDirectionstopLossPricetakeProfitPriceattachedStopLossTakeProfittimeInForcehedgedtrailingleveragemarketBuyByCostmarketBuyRequiresPriceselfTradePreventioniceberg  )r   limitdaysBack	untilDayssymbolRequired)r   triggerr  r  )r   r  r  r  r  r  )	rr   rC   createOrdersr]   ra   r`   rc   rI   r^   extendsdefault)linearinverse)r  r8   r:   r;   )deep_extendsuperr)   describer&   r   r   r    r   r"   r   r#   r$   r%   r   r   )self	__class__s    S/var/www/html/turnos/venv/lib/python3.12/site-packages/ccxt/async_support/gemini.pyr  zgemini.describe   s	   fd < > \A
(\A
H\A
 $\A
 \A
 t\A
 4\A
  @@@ %@ 	@
 %@ %@ U@ t@ $U@  @ '@ $U@ t@ (@ @   !@" +E#@$ )%%@& $U'@( ')@* (+@, "4-@. &t/@0 (1@2 1$3@4 +D5@6 &u7@8 #E9@: *5;@< $U=@> "5?@@ *5A@B +EC@D  E@F %eG@H "5I@J K@L !%M@N  O@P dQ@R +ES@T "4U@V dW@X !$Y@Z u[@\  ]@^ $U_@` !%a@b %ec@d )%e@f tg@h !%##($(%/  %$!&#( @\A
T }674#@	 -65
 ??
 5#@	/U\A
N   " &'78,-12./;<.//078(),-)*"  *,a**A* -a* -a	*
 '* *1* +A* 21* .q* *1* $Q* &q* ,Q* )!* *1*  -a!*" -a#*$ .q%*& &q'*( .q)** 9!+*, '-*. 1!/*0 :11*2 ;A3*4 1!5*6 9!7*8 .q9*: .q;*< 3A=*> +A?*@ +AA*B *1C*D A!E*F CDAB&'-.+,()$%S*,7HO\A
` Ya\A
b ""c\A
n !'$(($+$	o\A
B C\A
T  $j *J  0  )*	 
 '
  '
  '
  ():  ":  #L  $%8  '  #L  &|  "<   '(;! " $Z# $ 2<#0%1+>)5#6,?.A0*4%2!2+)3? D Q^Wk-AE'U\A
d &>-/16'}(
 %)%'! &/	$:$(%&)-$
 &5$'(%"%&"(#$% ( &!& 'C'e\A
t #&+(,,0,1).+06:#'#'"&#(	( #($)$)+/27/4#()$, %)&+!$$(%)*.& ',#($)*/	# ',!%#($)*/( $()-#_2h y
 "9  $	 ##{Au\A
 \ \	    c                 @   K   | j                  |       d{   S 7 w)z
        fetches all available currencies on an exchange
        :param dict [params]: extra parameters specific to the endpoint
        :returns dict: an associative dictionary of currencies
        N)fetch_currencies_from_web)r  paramss     r  fetch_currencieszgemini.fetch_currencies~  s      33F;;;;s   c                   K   | j                  ddddd       d{   }|yi }| j                  |d      | j                  d<   | j                  |dg       }t	        d	t        |            D ]  }||   }| j                  |d	      }| j                  |      }| j                  |d
      rdnd}	| j                  | j                  | j                  |d                  }
i }| j                  |d      }d}|)| j                  |      }|||dddd|
dddddddd	||<   | j                  |||| j                  |d      dddd|	|
ddddddd|d      ||<    |S 7 Aw)z
 @ignore
        fetches all available currencies on an exchange
        :param dict [params]: extra parameters specific to the endpoint
        :returns dict: an associative dictionary of currencies
        rL   webExchangeGetTz="currencyData">z	</script>NtradingPairs
currenciesr      fiatcryptor   	   minmax)depositrv   )	infor,   networkactiver+  rv   fee	precisionlimitsr   )r,  r,   coder-   r.  r+  rv   r/  typer0  r1  r   )fetch_web_endpoint	safe_listr   
safe_valuerangelensafe_stringsafe_currency_codeparse_numberparse_precisionnetwork_id_to_codesafe_currency_structure)r  r  dataresultcurrenciesArrayicurrencyr,   r2  r3  r0  r   	networkIdnetworkCodes                 r  r  z gemini.fetch_currencies_from_web  s     ,,->@PRVXjlwxx<* '+~~dN'K^$//$bAq#o./ 5	A&q)H!!(A.B**2.D!--h:6D))$*>*>t?O?OPXZ[?\*]^IH((15IK$"55i@$#*"# $!* $(#'$
 $(#'%	)%(  77 ((15 &  $# 
  $#!	 %+9 F4L?5	l a ys   EEEEc                 p  K   | j                  | j                  dd      }|dk(  rtg }|j                  | j                  |             |j                  | j	                  |             t        j                  |  d{   }| j                  |d   |d         S | j                  |       d{   S 7 57 w)a	  
        retrieves data on all markets for gemini

        https://docs.gemini.com/rest-api/#symbols

        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: an array of objects representing market data
        r   r   fetch_markets_from_webNr   r   )	r6  r   appendrG  fetch_usdt_marketsasynciogatherarray_concatr   )r  r  methodpromisespromisesResults        r  fetch_marketszgemini.fetch_markets  s      /CE]^--HOOD77?@OOD33F;<#*>>8#<<N$$^A%6q8IJJ00888 =8s$   A:B6<B2=0B6-B4.B64B6c                   K   | j                  dddd       d {   }| j                  dz   }|j                  d      }t        |      }|dk  rt	        |      |d   j                  d	      }t        |      }|dk  rt	        |      g }t        d|      D ]  }	||	   }
|
j                  d
      }t        |      }|dk  rt	        |      |d   j                  dd      }|j                  dd      }|d   j                  dd      }|j                  d      }| j                  |d      }|d   j                  dd      }|j                  d      }t        |      dz
  }|dz
  }|d   j                  dd      }|j                  d      }| j                  |d|||       }| j                  |d|j                  |d            }| j                  |      }| j                  |      }|j                  i d|d|dz   |z   d|d|dd d|d|dd ddddddddd dd!dd"d d#dd$d d d d d d d | j                  |d      | j                  |d      d%d d d&|d d&d d d&d d d&d'd |
d(
        |S 7 [w))Nr[   webGetRestApiFz7<h1 id="symbols-and-minimums">Symbols and minimums</h1>z fetchMarketsFromWeb() the API doc HTML markup has changed, breaking the parser of order limits and precision info for markets.ztbody>   r   z
<tr>
z</td>
r   r   z<td>r   *    r,   symbol/r   r   settlebaseIdquoteIdsettleIdr3  r8   Tr9   r:   r;   r<   r.  contractr  )amountpricer(  r  r^  r_  cost
r  contractSizeexpiryexpiryDatetimestrike
optionTyper0  r1  createdr,  )r4  r,   splitr8  r!   r7  replacesafe_numbersafe_string_lowerr:  rH  )r  r  r?  errortables	numTablesrowsnumRowsr@  rB  rowcellsnumCellsmarketIdminAmountStringminAmountParts	minAmountamountPrecisionStringamountPrecisionPartsidLengthstartingIndexpricePrecisionStringpricePrecisionPartsr[  rZ  r   r   s                              r  rG  zgemini.fetch_markets_from_web  s    ,,^_e  VO  P  P  \  \H%K	q=u%%ayz*d)Q;u%%q'" M	Aq'CIIi(E5zH!|"5)) Qx''3H''R0H#Ah..vr:O,2237N((;I$)!H$4$4VR$@!#8#>#>s#C 8}q(H$qLM#(8#3#3FB#? "6"<"<S"A,,-@!Xm\dEefG++,@!XEUEUV]_aEbcF**62D++G4EMM 0h0$*u,0 0 	0
 $0 &0 70 D0 0 0 %0 0 %0 %0 $0  E!0" $#0$   $"&""../CQG!--.A1E  $#!
  )#
  $#
  $#$  _0 0;M	\ u Ps   I8I5II8c                 >    dddddd}|y| j                  ||d      S )NTF)openclosedcancel_only	post_only
limit_only)	safe_boolr  statusstatusess      r  parse_market_activezgemini.parse_market_activeN  s5    
 >~~h55r  c                 H  K   d| j                   v rg S | j                  | j                  dg       }g }t        dt	        |            D ]T  }||   }d|i}| j                  | j                  ||             d {   }|j                  | j                  |             V |S 7 (w)Nr   r   r   rW  )	rw   r6  r   r7  r8  publicGetV1SymbolsDetailsSymbolextendrH  parse_market)r  r  r   r@  rB  ru  requestrawResponses           r  rI  zgemini.fetch_usdt_marketsZ  s      TYYI??4<<9KRPq#./0 	:A'*H(G !% D DT[[QXZ`Ea bbKMM$++K89	:  cs   A5B"7B 8)B"c           	      $  K   | j                  |       d {   }g }| j                  | j                  di       }d}g }t        dt	        |            D ]  }||   |k7  s|j                  ||          ! | j                  |dd      rg }t        dt	        |            D ];  }||   }	d|	i}
|j                  | j                  | j                  |
|                   = t        j                  |  d {   }t        dt	        |            D ]%  }|j                  | j                  ||                ' |S | j                  | j                  d      }|v| j                  |d      }t        dt	        |            D ]J  }||   }	| j                  ||	j                               }|+|j                  | j                  |             L |S t        dt	        |            D ]%  }|j                  | j                  ||                ' |S 7 7 w)Nr   efilfilr   r   FrW  r"  )publicGetV1Symbols	safe_dictr   r7  r8  rH  r  r  r  rJ  rK  r  r5  index_byupper)r  r  marketIdsRawr@  r   	bugSymbol	marketIdsrB  rN  ru  r  	responsesr"  indexedTradingPairstradingPairs                  r  r   zgemini.fetch_markets_from_apik  s    !44V<< ../DbI		q#l+, 	2AA)+  a1	2 >>'#>FH1c)n- d$Q<h!  D DT[[QXZ`Ea bcd$ &nnh77I1c)n- ?d//	!=>?   >>$,,GL'&*mmL!&D#q#i.1 FA(|H"&..1DhnnFV"WK".d&7&7&DE	F  q#i.1 CAMM$"3"3IaL"ABCg =F 8s1   HH
AH BH3H4B2H'A$HHc                    d }d }d }d }d }d }d }d }	d}
d }d }d }t        |t              }t        |t              }|s|s| j                  |d      }| j	                  |d      }| j	                  |d      }| j	                  |d      }| j                  | j                  |d            }	| j                  |d      }| j                  |d      }| j                  |d	      }nt|r|}n| j                  |d
      }| j                  | j                  | j                  |d                  }| j                  | j                  | j                  |d                  }| j	                  |d      }|j                         }|j                  d      d
k\  }|j                  dd      }| j                  | j                  di       }|j                         }||v r||   }|d   }|d   }|rs|d   }nm| j                  ddg       }t!        d
t#        |            D ]B  }||   }|j%                  |      s| j'                  dt#        |      z        }|d
| }|}|r|} n | j)                  |      }| j)                  |      }| j)                  |      }|dz   |z   }||dz   |z   }d}
|}d}d}|
rdnd}i d|d|d|d|d|d|d|d|d |d|
 d!dd|
d"dd#dd$|	d%|
d&|||d d d d ||d'd d d(|d d(d d d(d d d(d)d |d*
S )+NFrW  	tick_sizequote_incrementmin_order_sizer  base_currencyquote_currencycontract_price_currencyr   r   rS  rV  PERPr   r   r   r   r   r   rX  :Tr:   r8   r,   rY  rZ  r[  r\  r3  r9   r;   r<   r.  r]  r  )r_  r^  r(  r`  rb  )
isinstancestrlistrl  rk  r  r9  r;  r<  r  findrj  r  r   lowerhandle_optionr7  r8  endswithparse_to_intr:  )r  responseru  rZ  r[  r\  tickSizeamountPrecisionminSizer  r:   rc  r  r  isStringisArraymarketIdUpperisPerpmarketIdWithoutPerpr   lowerCaseIdconflictingMarketr   rB  quoteCurrencyquoteLengthr   r   rY  rW  r3  s                                  r  r  zgemini.parse_market  s:   B x-h---hAH"..xEO''2CDH&&x1ABG--d.>.>x.RSF%%h@F&&x1ABG''2KLH #11(A>,,T-A-A$BRBRS[]^B_-`a"&"3"3D4H4HIYIYZbdeIf4g"h**8Q7$NN,M#((0A5F"/"7"7"C!%>RTV!W-335K00$6{$C!*62+G409H"&"4"45JL]_a"bq#o"67 A$3A$6M*33MB&*&7&7S=O8O&P!4Q{!C"/!'4H &&v.''0((2e#c\F*FD#LFGv60
(0
f0
 D0
 U	0

 f0
 f0
 w0
 0
 D0
 H0
 e0
 D0
 e0
 e0
 f0
  !0
" f#0
$ ("!)  
 #
  
  $ _0
 0	
r  NrW  r  c           	        K   | j                          d{    | j                  |      }d|d   i}|
||d<   ||d<   | j                  | j                  ||             d{   }| j	                  ||d   ddddd	      S 7 k7  w)
a2  
        fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

        https://docs.gemini.com/rest-api/#current-order-book

        :param str symbol: unified symbol of the market to fetch the order book for
        :param int [limit]: the maximum amount of order book entries to return
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
        NrW  r,   
limit_bids
limit_asksbidsasksr_  r^  )load_marketsmarketpublicGetV1BookSymbolr  parse_order_book)r  rW  r  r  r  r  r  s          r  fetch_order_bookzgemini.fetch_order_book5  s      !!!V$fTl
 $)GL!$)GL!33DKK4PQQ$$Xvh/?vvW^`hii 	" Rs"   BBAB#B$BBc                    K   | j                          d {    | j                  |      }d|d   i}| j                  | j                  ||             d {   }| j	                  ||      S 7 W7 wNrW  r,   )r  r  publicGetV1PubtickerSymbolr  parse_tickerr  rW  r  r  r  r  s         r  fetch_ticker_v1zgemini.fetch_ticker_v1K  sw     !!!V$fTl
 88Wf9UVV   622% 	"
 W"   A2A.A A2A0A20A2c                    K   | j                          d {    | j                  |      }d|d   i}| j                  | j                  ||             d {   }| j	                  ||      S 7 W7 wr  )r  r  publicGetV2TickerSymbolr  r  r  s         r  fetch_ticker_v2zgemini.fetch_ticker_v2`  sw     !!!V$fTl
 55dkk'66RSS   622' 	"
 Tr  c                    K   | j                  ||      }| j                  ||      }t        j                  ||g  d {   \  }}| j	                  ||d   |d   |d   |d   |d   |d   |d   d      S 7 6w)	Nr  highlowchange
percentageaverager,  )r  r  r  r  r  r  r,  )r  r  rJ  rK  r  )r  rW  r  tickerPromiseAtickerPromiseBtickerAtickerBs          r  fetch_ticker_v1_and_v2zgemini.fetch_ticker_v1_and_v2v  s     --ff=--ff=!(..1Q!RRFOFO5>h'!,/y)FO*
  	 Ss   <A7A57A7c                    K   | j                  | j                  dd      }|dk(  r| j                  ||       d{   S |dk(  r| j                  ||       d{   S | j	                  ||       d{   S 7 =7  7 w)a  
        fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

        https://docs.gemini.com/rest-api/#ticker
        https://docs.gemini.com/rest-api/#ticker-v2

        :param str symbol: unified symbol of the market to fetch the ticker for
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param dict [params.fetchTickerMethod]: 'fetchTickerV2', 'fetchTickerV1' or 'fetchTickerV1AndV2' - 'fetchTickerV1' for original ccxt.gemini.fetchTicker - 'fetchTickerV1AndV2' for 2 api calls to get the result of both fetchTicker methods - default = 'fetchTickerV1'
        :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
        r   r   NfetchTickerV2)r6  r   r  r  r  )r  rW  r  rM  s       r  fetch_tickerzgemini.fetch_ticker  s~      /BOT_$--ff===_$--ff===00@@@ >=@s3   8A>A8A>A:A>3A<4A>:A><A>tickerr  c                    | j                  |di       }| j                  |d      }d }| j                  |d      }| j                  ||      }d }d }d }	d }
|T|Rt	        |      dz
  }|dk(  r|dd }|dd }n
|dd }|dd }| j                  |      }	| j                  |      }
|	d	z   |
z   }|+|)|d
   }| j                  |d      }| j                  |d      }| j                  |d      }| j                  |dd|      }| j                  |d      }| j                  |d      }| j                  ||      }| j                  ||      }| j                  i d
|d|d| j                  |      d| j                  |d      d| j                  |d      d| j                  |d      dd d| j                  |d      dd dd d|d|d|dd dd d|dd |||d|      S )Nvolume	timestamppairr   r$     rV     rX  rW  rZ  r[  r_  lastclosepercentChange24hr  datetimer  r  bid	bidVolumeask	askVolumevwappreviousCloser  r  r  )
baseVolumequoteVolumer,  )r6  safe_integerrl  safe_marketr8  r:  safe_string_upperr9  safe_string_2safe_tickeriso8601)r  r  r  r  r  rW  ru  rZ  r[  r   r   r{  r_  r  r  r  r  r  s                     r  r  zgemini.parse_ticker  s   J 26%%fk:	))&&9!!(F3 v~8}q(H1}!!A"1Q-!!A"1Q-**62D++G4ECZ%'FN!3H%F++FH=F,,VY?G  1!!&&'5A%%f.@A
/%%ff5
&&vw7 !
f!
!
 Y/!
 D$$VV4	!

 4##FE2!
 4##FE2!
 !
 4##FE2!
 !
 D!
 D!
 T!
 D!
 T!
 d!
  *!!
" t#!
$ %&)!
* + 	r  symbolsc                    K   | j                          d{    | j                  |       d{   }| j                  ||      S 7 /7 w)a  
        fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market

        https://docs.gemini.com/rest-api/#price-feed

        :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
        N)r  publicGetV1Pricefeedparse_tickers)r  r  r  r  s       r  fetch_tickerszgemini.fetch_tickers  sK      !!!226:: !!(G44! 	":s   A
AA
AA
A
tradec                    | j                  |d      }| j                  |d      }| j                  |d      }| j                  |d      }| j                  |      }| j                  |d      |d}| j                  |d      }	| j                  |d      }
| j                  |d	      }| j	                  d |      }| j                  ||||| j                  |      |d |d |	d |
|d
|      S )Ntimestampmstidorder_idfee_currency
fee_amountra  rC  r_  r^  r3  )r,   orderr,  r  r  rW  r3  sidetakerOrMakerr_  ra  r^  r/  )r  r9  r:  rl  safe_symbol
safe_trader  )r  r  r  r  r,   orderIdfeeCurrencyIdfeeCurrencyCoder/  priceStringamountStringr  rW  s                r  parse_tradezgemini.parse_trade  s   D %%e];	eU+""5*5((?11-@$$UL9'
 &&ug6''x8%%eV4!!$/"Y/  " 
  	r  sincec                   K   | j                          d{    | j                  |      }d|d   i}|t        |d      |d<   |||d<   | j                  | j	                  ||             d{   }| j                  ||||      S 7 q7 w)a  
        get the list of most recent trades for a particular symbol

        https://docs.gemini.com/rest-api/#trade-history

        :param str symbol: unified symbol of the market to fetch trades for
        :param int [since]: timestamp in ms of the earliest trade to fetch
        :param int [limit]: the maximum amount of trades to fetch
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
        NrW  r,   r
  limit_tradesr  )r  r  r)  publicGetV1TradesSymbolr  parse_tradesr  rW  r  r  r  r  r  r  s           r  fetch_tradeszgemini.fetch_tradesL  s      !!!V$fTl
 &)%oGN##(GK 55dkk'66RSS   65%@@/ 	" Ts"   BBAB/B
0B
Bc                 .   d|i}t        dt        |            D ]i  }||   }| j                  |d      }| j                  |      }| j	                         }| j                  |d      |d<   | j                  |d      |d<   |||<   k | j                  |      S )Nr,  r   rC  	availablefreer^  total)r7  r8  r9  r:  accountsafe_balance)r  r  r@  rB  balance
currencyIdr2  r  s           r  parse_balancezgemini.parse_balanceq  s    )q#h-( 	#AqkG))':>J**:6DllnG"..wDGFO#//BGG"F4L	#   ((r  c                   K   | j                          d{    | j                  |       d{   }| j                  |d      }| j                  |d      }t        j                  |d      }t        j                  |d      }| j                  |      }| j                  |      }i }	t        dt        | j                              D ]  }
| j                  |
   }||||ddd|	|<    |	S 7 7 w)aP  
        fetch the trading fees for multiple markets

        https://docs.gemini.com/rest-api/#get-notional-volume

        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
        Napi_maker_fee_bpsapi_taker_fee_bps10000r   T)r,  rW  r   r   r  	tierBased)	r  privatePostV1Notionalvolumer9  r'   
string_divr;  r7  r8  r  )r  r  r  makerBpstakerBpsmakerStringtakerStringr   r   r@  rB  rW  s               r  fetch_trading_feeszgemini.fetch_trading_fees}  s      !!!99&AA: ##H.AB##H.AB((7;((7;!!+.!!+.q#dll+, 		A\\!_F  "!F6N		 _ 	"As    C-C)C-C+B:C-+C-c                    K   | j                          d{    | j                  |       d{   }| j                  |      S 7 .7 w)ad  
        query for balance and get the amount of funds available for trading or funds locked in orders

        https://docs.gemini.com/rest-api/#get-available-balances

        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
        N)r  privatePostV1Balancesr  )r  r  r  s      r  fetch_balancezgemini.fetch_balance  sG      !!!33F;;!!(++ 	";s   A	AA	AA	A	r  c                 H   | j                  |d      }| j                  |d      }| j                  |d      }| j                  |d      }d}|d   rd}|d   rd	}| j                  |d
      }| j                  |d      }	| j                  |d      }
|
dk(  rd}
n|
dk(  s|
dk(  rd}
n|d   }
d }| j                  |d      }| j                  ||      }| j                  |d      }| j                  |d      }| j                  |d      }| j	                  |dg       }| j                  |d      }d}d}||dk(  rd}n|dk(  rd}n	|dk(  rd}d }| j                  i d!|d"|d#|d$|d%| j                  |      d&d d'|d|d|
d(|d)|d|d
|d*d d+|	d,d d-||||d d.|      S )/Nr  original_amountremaining_amountexecuted_amountr  is_liver  is_cancelledcanceledr_  avg_execution_pricer3  exchange limitr  z
market buyzmarket sellr  rW  r  r  client_order_idr   r   GTCFimmediate-or-cancelr   fill-or-killr   maker-or-cancelr   Tr,   clientOrderIdr,  r  r  lastTradeTimestampr  r  rp   r   r  ra  r^  )filled	remainingr/  trades)r  r9  r  rl  r6  
safe_orderr  )r  r  r  r  r^  r>  r=  r  r_  r  r3  r/  ru  rW  r,   r  r;  optionsArrayr<   r  rp   s                        r  parse_orderzgemini.parse_order  s   F %%e];	!!%):;$$U,>?	!!%):;F F  0""5*?@v.##D\!T]%:D=D##E84!!(F3eZ0%%eV4((0ABui<!!,2..#>)#,,"  
" 
] 
 E 
 	 

 Y/ 
 !$ 
 f 
 f 
 D 
 ; 
  
 D 
 U 
 D 
 w 
  D! 
" f# 
$ "+ 
, - 	r  r,   c                    K   | j                          d{    d|i}| j                  | j                  ||             d{   }| j                  |      S 7 B7 w)a  
        fetches information on an order made by the user

        https://docs.gemini.com/rest-api/#order-status

        :param str id: order id
        :param str symbol: unified symbol of the market the order was made in
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
        Nr  )r  privatePostV1OrderStatusr  rB  r  r,   rW  r  r  r  s         r  fetch_orderzgemini.fetch_orderc  se      !!!
 66t{{7F7STT0 ))9 	" U!   AA,AAAAc                    K   | j                          d{    | j                  |       d{   }d}|| j                  |      }| j                  ||||      S 7 F7 /w)a  
        fetch all unfilled currently open orders

        https://docs.gemini.com/rest-api/#get-active-orders

        :param str symbol: unified market symbol
        :param int [since]: the earliest time in ms to fetch open orders for
        :param int [limit]: the maximum number of  open orders structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        N)r  privatePostV1Ordersr  parse_orders)r  rW  r  r  r  r  r  s          r  fetch_open_orderszgemini.fetch_open_orders  sh      !!!11&994 [[(F  65%@@= 	"9s   A!AA!A.A!A!r3  r  r^  r_  c                 F  K   | j                          d{    |dk7  rt        | j                  dz         | j                  |dd      }| j	                  |ddg      }|t        | j                               }| j                  |      }| j                  ||      }	| j                  ||      }
||d   |	|
|dd}| j                  |d	|      }| j	                  |d	      }| j                  |g d
      }| j	                  |g d      }|dk(  rt        | j                  dz   |z   dz         || j                  ||      |d<   d|d	<   n| j                  |d      }| j	                  |d      }|-|dk(  s|dk(  rdg|d<   n|dk(  s|dk(  rdg|d<   n|dk(  rdg|d<   | j                  |dd      }| j	                  |d      }|rdg|d<   | j                  |d      }||g|d<   | j                  | j                  ||             d{   }| j!                  |      S 7 7 w)a  
        create a trade order

        https://docs.gemini.com/rest-api/#new-order

        :param str symbol: unified symbol of the market to create an order in
        :param str type: must be 'limit'
        :param str side: 'buy' or 'sell'
        :param float amount: how much of currency you want to trade in units of base currency
        :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
        Nr  z' createOrder() allows limit orders onlyr;  r6  r,   r5  )r6  rW  r^  r_  r  r3  r3  )r   
stop_price	stopPrice)r   rM  rN  r3  	stopLimitzO createOrder() requires a triggerPrice parameter or a stop_price parameter for z ordersrM  zexchange stop limitr  r   r8  r   r   r9  r   r:  rp   F)r  r   r,   r  omitr  r   r  amount_to_precisionprice_to_precisionr9  safe_string_nr   r  privatePostV1OrderNewr  rB  )r  rW  r3  r  r^  r_  r  r;  r  r  r  r  r   r  rp   r   r  s                    r  create_orderzgemini.create_order  s     !!!7?*S STT**6?DUV6O5F#GH  1 1 34MV$//?--fe<,Tl" $
 566*))&2]^6#VW;#DGG.$  CG  %G  JS  %S  T  T#$($;$;FL$QGL!3GFO **6=AKYYv}5F&5(k=R.R*?)@GI&!U*~0M*8)9GI& D(*;)<GI&~~fj%@HYYvz2F&7%8	"&&vy9G"&-Y	"33DKK4PQQ0 ))O 	"^ Rs"   H!HG/H!HH!H!c                    K   | j                          d{    d|i}| j                  | j                  ||             d{   }| j                  |      S 7 B7 w)a}  
        cancels an open order

        https://docs.gemini.com/rest-api/#cancel-order

        :param str id: order id
        :param str symbol: unified symbol of the market the order was made in
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
        Nr  )r  privatePostV1OrderCancelr  rB  rE  s         r  cancel_orderzgemini.cancel_order  se      !!!
 66t{{7F7STT2 )); 	" UrG  c                 `  K   |t        | j                  dz         | j                          d{    | j                  |      }d|d   i}|||d<   || j	                  |dz        |d<   | j                  | j                  ||             d{   }| j                  ||||      S 7 y7 w)a  
        fetch all trades made by the user

        https://docs.gemini.com/rest-api/#get-past-trades

        :param str symbol: unified market symbol
        :param int [since]: the earliest time in ms to fetch trades for
        :param int [limit]: the maximum number of trades structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
        Nz+ fetchMyTrades() requires a symbol argumentrW  r,   r  i  r  )r   r,   r  r  r  privatePostV1Mytradesr  r  r  s           r  fetch_my_tradeszgemini.fetch_my_trades9  s      >#DGG.[$[\\!!!V$fTl
 &+GN##'#4#4UT\#BGK 33DKK4PQQ  65%@@ 	" Rs"   .B.B*A B.B,B.,B.r2  addressc                   K   | j                  ||      \  }}| j                  |       | j                          d{    | j                  |      }|d   ||d}| j	                  | j                  ||             d{   }| j                  |d      }	|	dk(  r*t        | j                  dz   | j                  |      z         | j                  ||      S 7 7 Yw)a  
        make a withdrawal

        https://docs.gemini.com/rest-api/#withdraw-crypto-funds

        :param str code: unified currency code
        :param float amount: the amount to withdraw
        :param str address: the address to withdraw to
        :param str tag:
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
        Nr,   )rC  r^  r\  r@  rm  z withdraw() failed: )handle_withdraw_tag_and_paramscheck_addressr  rC  privatePostV1WithdrawCurrencyr  r9  r   r,   jsonparse_transaction)
r  r2  r^  r\  tagr  rC  r  r  r@  s
             r  rv   zgemini.withdrawS  s      99#vFV7#!!!==& 

 ;;DKKQW<XYY0 !!(H5W*@ @499XCV VWW%%h99E 	" Zs#   :CCAC?C ACCc                     | j                  | j                  dd      }|dk(  r| j                         S | j                         S )Nr   r   )r9  r   r   seconds)r  nonceMethods     r  r   zgemini.nonce  s=    &&t||WnM.($$&&||~r  c                    K   | j                          d{    i }|||d<   |||d<   | j                  | j                  ||             d{   }| j                  |      S 7 N7 w)aZ  
        fetch history of deposits and withdrawals

        https://docs.gemini.com/rest-api/#transfers

        :param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
        :param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
        :param int [limit]: max number of deposit/withdrawals to return, default is None
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a list of `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
        Nlimit_transfersr  )r  privatePostV1Transfersr  parse_transactions)r  r2  r  r  r  r  r  s          r  fetch_deposits_withdrawalsz!gemini.fetch_deposits_withdrawals  s{      !!!).G%&#(GK 44T[[&5QRR&&x00 	" Ss!   A)A%8A)A'A)'A)transactionrC  c                 D   | j                  |d      }| j                  |d      }| j                  ||      }| j                  |d      }| j                  |d      }| j                  |d      }d }	| j	                  |d      }
|
|
|d}	i d|d	| j                  |d
d      d| j                  |d      d|d| j                  |      dd d|dd dd dd dd dd d|d| j	                  |d      d|d| j                  |      dd d | j                  |d      |	dS )Nr  rC  destinationr3  r  	feeAmountr  r,  r,   eidwithdrawalIdtxidtxHashr  r  r-  r\  	addressToaddressFromrc  tagTotagFromr^  updatedmessage)internalcommentr/  )r  r9  r:  rl  rk  r  r  parse_transaction_status)r  rl  rC  r  r  r2  r\  r3  	statusRawr/  ro  s              r  rb  zgemini.parse_transaction  s   & %%k=A	%%k:>
&&z8<"";>%%k6:$$[(;	$$[+>	 ! C
K
$$$[%H
 D$$[(;
 	

 Y/
 t
 w
 
 4
 4
 T
 t
 D
 d&&{H=
 
  d33I>!
" t#
$ ''Y?)
 	
r  r  c                 2    ddd}| j                  |||      S )Nok)AdvancedComplete)r9  r  s      r  r|  zgemini.parse_transaction_status  s&    
 &&99r  c                 Z    | j                  |d      }| j                  d |      }|d |d |dS )Nr\  )rC  r-  r\  rc  r,  )r9  r:  )r  depositAddressrC  r\  r2  s        r  parse_deposit_addresszgemini.parse_deposit_address  sA     "">9=&&tX6"
 	
r  c                 
  K   | j                          d{    | j                  ||       d{   }d}| j                  |      \  }}| j                  | j	                  ||      d      }| j	                  ||      S 7 h7 Pw)a  

        https://docs.gemini.com/rest-api/#get-deposit-addresses

        fetch the deposit address for a currency associated with self account
        :param str code: unified currency code
        :param dict [params]: extra parameters specific to the endpoint
        :param str [params.network]:  *required* The chain of currency
        :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
        NrC  )r  "fetch_deposit_addresses_by_networkhandle_network_code_and_paramsr  r6  )r  r2  r  groupedByNetworkrE  networkGroups         r  fetch_deposit_addresszgemini.fetch_deposit_address  s      !!!!%!H!Hv!VV"AA&IV}}T__5E{%SU_`|T22 	"Vs    BA?BBABBc                   K   | j                          d{    | j                  |      }|d   }d}| j                  |      \  }}|t        | j                  dz         | j                  |      }d|i}| j                  | j                  ||             d{   }| j                  ||gd||d      }| j                  |d      S 7 7 0w)a  
        fetch a dictionary of addresses for a currency, indexed by network

        https://docs.gemini.com/rest-api/#get-deposit-addresses

        :param str code: unified currency code of the currency for the deposit address
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param str [params.network]:  *required* The chain of currency
        :returns dict: a dictionary of `address structures <https://docs.ccxt.com/#/?id=address-structure>` indexed by the network
        Nr2  z5 fetchDepositAddresses() requires a network parameterr-  F)r-  rC  )
r  rC  r  r   r,   network_code_to_idprivatePostV1AddressesNetworkr  parse_deposit_addressesgroup_by)	r  r2  r  rC  rE  rD  r  r  resultss	            r  r  z)gemini.fetch_deposit_addresses_by_network  s      !!!==&"AA&IV#DGG.e$eff++K8	y
 ;;DKKQW<XYY..x$T_mqHrs}}Wi00 	" Zs"   CC	BCC/CCrx   GETc                    d| j                  ||      z   }| j                  || j                  |            }|dk(  r| j                          | j                  }	|	j                  d      dk  rt        | j                  dz         t        | j                               }
| j                  ||
d|      }| j                  |      }| j                  |      }| j                  | j                  |      | j                  | j                        t         j"                        }d| j                  ||d}n|r|d	| j%                  |      z   z  }| j&                  d
   |   |z   }|dk(  s|dk(  r| j                  |      }||||dS )NrX  ry   r  r   z> sign() requires an account-key, master-keys are not-supported)r  r   z
text/plain)zContent-TypezX-GEMINI-APIKEYzX-GEMINI-PAYLOADzX-GEMINI-SIGNATURE?r}   POSTDELETE)urlrM  bodyheaders)implode_paramsrP  extract_paramscheck_required_credentialsapiKeyr  r   r,   r  r   r  ra  string_to_base64hmacencodesecrethashlibsha384	urlencoderw   )r  pathr}   rM  r  r  r  r  queryr  r   r  payload	signatures                 r  signzgemini.sign  sl   D''f55		&$"5"5d";<)++-[[F{{9%))$''4t*tuu

%Ekk# G ii(G++G4G		$++g"6DKK8PRYR`R`aI ,#';;$+&/	G sT^^E222iis#c)f&H"499U#DfdwOOr  httpCodereasonr  rM  r  r  c
                    |Ct        |t              r2| j                  dz   |z   }
| j                  | j                  d   ||
       y | j                  |d      }|dk(  r| j                  |d      }| j                  |d      }| j                  dz   |z   }
| j                  | j                  d   ||
       | j                  | j                  d   ||
       | j                  | j                  d   ||
       t        |
      y )NrU  r   r@  rm  r  ry  r   )r  r  r,   throw_broadly_matched_exceptionr   r9  throw_exactly_matched_exceptionr   )r  r  r  r  rM  r  r  r  requestHeadersrequestBodyfeedbackr@  reasonInnerry  s                 r  handle_errorszgemini.handle_errors<  s    $$77S=4/44T__W5MtU]^ !!(H5W**8X>K&&x;Gww}w.H001I;X`a001I7T\]001I7T\]))r  c                   K   | j                          d{    | j                  |      }d|d   i}| j                  | j                  ||             d{   }| j	                  |d      }| j                  |       ||dd|dS 7 p7 1w)a}  
        create a currency deposit address

        https://docs.gemini.com/rest-api/#new-deposit-address

        :param str code: unified currency code of the currency for the deposit address
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
        NrC  r,   r\  )rC  r\  rc  r-  r,  )r  rC  &privatePostV1DepositCurrencyNewAddressr  r9  r_  )r  r2  r  rC  r  r  r\  s          r  create_deposit_addresszgemini.create_deposit_addressT  s      !!!==&
 DDT[[QXZ`Eabb""8Y77#
 	
 	"
 cs"   BBA BB	0B	Br   c                 *  K   | j                          d{    | j                  |      }| j                  | j                  ||      }||d   d}| j	                  | j                  ||             d{   }	| j                  |	||||      S 7 x7 w)a  
        fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market

        https://docs.gemini.com/rest-api/#candles

        :param str symbol: unified symbol of the market to fetch OHLCV data for
        :param str timeframe: the length of time each candle represents
        :param int [since]: timestamp in ms of the earliest candle to fetch
        :param int [limit]: the maximum amount of candles to fetch
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns int[][]: A list of candles ordered, open, high, low, close, volume
        Nr,   )	timeframerW  )r  r  r9  r   !publicGetV2CandlesSymbolTimeframer  parse_ohlcvs)
r  rW  r  r  r  r  r  timeframeIdr  r  s
             r  fetch_ohlcvzgemini.fetch_ohlcvn  s      !!!V$&&t	9M$Tl
 ??GU[@\]]   69eUKK 	" ^s"   BBAB5B6BB)N)D__name__
__module____qualname__r   r  r   r  r  r   r   rP  rG  r  rI  r   r  r  r
   r   r  r  r  r  r   r  dictr  r   r   r  r   r  r  r   r  r   r)  r,  r   rB  r   rF  rK  r   r   floatr   rU  rX  r[  r   rv   r   rk  r   rb  r|  r  r	   r  r  r  intr  r  r  r  __classcell__)r  s   @r  r)   r)      s   ]# ]~
 -/ <: < 68 Wr *, 9V 9$ 35 [z
6 /1 " 35 4lR
 R
h @DB jS j jS\ j, 9; 3C 3* 9; 3C 3, @B 3  68 A AF A&X4 X X6 Xt 6:" 57 5 58= =v = =~ <@d[] #A #AS #A #Abfglbm #AJ
) 
) /1 8[ 8t *, , ,] ]v ] ]~ 8<B '*C '* '*R 59tZ^gi *Ac *A *ATW *Anrsxny *AX mqy{ U* U*I U*Y U*X] U*fi U*n 9=R (*S (*# (*T 37TX\eg AC As ARU A4 JNVX 1:3 1: 1: 1:]h 1:f <@daenp 1S 1 1[^ 1uy  {F  vG 1*6
T 6
X 6
Q\ 6
p:s :
h 
$ =? 3 3> 3$ JL 1S 1PTUcPd 14 &eBSW P<c 3 S # X\ dg 0 >@ 
 
N 
4 8<$]ajl L LC LWZ Lquvzq{ Lr  r)   )/ ccxt.async_support.base.exchanger   ccxt.abstract.geminir   rJ  r  ccxt.base.typesr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   typingr   ccxt.base.errorsr   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   ccxt.base.decimal_to_precisionr&   ccxt.base.preciser'   r)    r  r  <module>r     sy    6 ,   J  J  J  J  J  J  * 0 - . ' . ) * ) . 1 * ) 4 %mLX{ mLr  