
    E#i:H                    P   S SK Jr  S SKJr  S SKrS SKJrJrJrJ	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJrJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJ r   S SKJ!r!  S SKJ"r"  S SKJ#r#  S SKJ$r$  S SKJ%r%  S SKJ&r&  S SKJ'r'  S SKJ(r(  S SK)J*r*  S SK+J,r,   " S S\\5      r-g)    )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                     ^  \ rS rSrS\4U 4S jjr0 4S\4S jjr0 4S jr0 4S\	\
   4S jjr0 4S jrS r0 4S	 jr0 4S
 jrS\
4S jrS0 4S\S\S\4S jjr0 4S\4S jjr0 4S\4S jjr0 4S\4S jjr0 4S\S\4S jjrSIS\S\
S\4S jjrS0 4S\S\4S jjrSIS\S\
S\4S jjr SS0 4S\S\S\S\	\   4S jjr!S\"4S jr#0 4S\$4S jjr%0 4S\"4S jjr&SIS \S\
S\'4S! jjr(S0 4S"\S\)4S# jjr*SSS0 4S\)S\S\S\	\'   4S$ jjr+S0 4S\S%\,S&\-S'\.S(\/4
S) jjr0S0 4S"\S\)4S* jjr1SSS0 4S\)S\S\4S+ jjr2S0 4S,\S'\.S-\S.\)S\34
S/ jjr4S0 r5SSS0 4S,\)S\S\S\	\3   4S1 jjr6SIS2\S3\7S\34S4 jjr8S5\)4S6 jr9SIS3\74S7 jjr:0 4S,\S\;4S8 jjr<0 4S,\S\	\;   4S9 jjr=S:S;0 SS4S< jr>S=\?S>\S?\S@\SA\SB\4SC jr@0 4S,\S\;4SD jjrASESS0 4S\SF\S\S\S\	\B   4
SG jjrCSHrDU =rE$ )Jgemini   returnc                 @  > U R                  [        [        U ]  5       0 SS_SS_SS/_SS_S	S
_SS_S0 SS _SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_0 S S_S!S_S"S_S#S_S$S_S%S_S&S_S'S_S(S_S)S_S*S_S+S_S,S_S-S_S.S_S/S_S0S_E0 S1S_S2S_S3S_S4S_S5S_S6S_S7S_S8S_S9S_S:S_S;S_S<S_S=S_S>S_S?S_S@S_SAS_ESSSSSBSSSSSSSSC.E_SDSESFSFSGSHSI.SJSKSL/SMSMSGSHSI./ SNQSO._SPSQSR/0SQSS/0SQSTSTSTSTSTSTSTSTSTSTSTSTSU.0SV0 SWSX_SYSX_SZSX_S[SX_S\SX_S]SX_S^SX_S_SX_S`SX_SaSX_SbSX_ScSX_SdSX_SeSX_SfSX_SgSX_ShSX_0 SiSX_SjSX_SkSX_SlSX_SmSX_SnSX_SoSX_SpSX_SqSX_SrSX_SsSX_StSX_SuSX_SvSX_SwSX_SxSX_SySX_ESXSXSXSXSXSXSXSz.E0S{._S|[        _S}S~SSS.0_S[
        [        [        [        [        [        [        [        S._SSSSSSSSS._S0 S[
        _S[
        _S[
        _S[
        _S[
        _S[
        _S[
        _S[        _S[
        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[
        _[
        [        [        [        [        [        [        [        [        [
        [        [        [        [
        S.E[        [        [        S.S._SSSS/ SQS.SSS.SS/SSTSS.SSSSSSSSSSSSSS.SSSSS.0/ SQS._SSSSS SSSS SSSSS.SSSSSSSS.S SSS S SS.SSSSS.SS SSSS.S S SS 0S.	SS0SS0S S.S S S.S._5      $ )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|   r{   ry   rz   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USDC)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)efilusd
maticrlusd	maticusdceurusdc	maticgusdmaticusdefilfileurusd)fetchMarketsMethodfetchMarketFromWebRetriesfetchMarketsFromAPIr\   fetchUsdtMarketsrM   fetchTickerMethodnetworksnonceconflictingMarketsbrokenPairs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  )	rs   rD   createOrdersr^   rb   ra   rd   rJ   r_   extendsdefault)linearinverse)r  r9   r;   r<   )deep_extendsuperr)   describer&   r   r   r    r   r"   r   r#   r$   r%   r   r   )self	__class__s    E/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/gemini.pyr"  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 (F(
 %)%'! &/	$:$(%&)-$
 &5$'(%"%&"(#$% ( &!& '  O(e]A
v #&+(,,0,1).+06:#'#'"&#(	( #($)$)+/27/4#()$, %)&+!$$(%)*.& ',#($)*/	# ',!%#($)*/( $()-#_2h y
 "9  $	 ##{Aw]A
 ] ]	    c                 $    U R                  U5      $ )z
fetches all available currencies on an exchange
:param dict [params]: extra parameters specific to the endpoint
:returns dict: an associative dictionary of currencies
)fetch_currencies_from_web)r#  paramss     r%  fetch_currenciesgemini.fetch_currencies~  s     --f55r'  c                    U R                  SSSSS5      nUc  0 $ 0 nU R                  US5      U R                  S'   U R                  US/ 5      n[	        S	[        U5      5       H  nXE   nU R                  US	5      nU R                  U5      nU R                  US
5      (       a  SOSn	U R                  U R                  U R                  US5      5      5      n
0 nU R                  US5      nSnUb(  U R                  U5      nUUUSSSSU
SSS.SSS.S.S.	X'   U R                  UUUU R                  US5      SSSSU	U
SSS.SSS.S.US.5      X8'   M     U$ )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
       rM   webExchangeGetTz="currencyData">z	</script>NtradingPairs
currenciesr      fiatcryptor   	   minmax)depositrw   )	infor-   networkactiver8  rw   fee	precisionlimitsr   )r9  r-   coder.   r;  r8  rw   r<  typer=  r>  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-   r?  r@  r=  r   	networkIdnetworkCodes                 r%  r)   gemini.fetch_currencies_from_web  s    &&'8:JDRdfqr<I* '+~~dN'K^$//$bAq#o./A&)H!!(A.B**2.D!--h::6D))$*>*>t?O?OPXZ[?\*]^IH((15IK$"55i@$#*"# $!* $(#'$
 $(#'%	)%(  77 ((15 &  $# 
  $#!	 %+9 FL? 0l r'  c                 "   U R                  U R                  SS5      nUS:X  a\  / nUR                  U R                  U5      5        UR                  U R	                  U5      5        UnU R                  US   US   5      $ U R                  U5      $ )z
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_webr   r   )rC  r   appendrU  fetch_usdt_marketsarray_concatr   )r#  r*  methodpromisespromisesResults        r%  fetch_marketsgemini.fetch_markets  s     /CE]^--HOOD77?@OOD33F;<%N$$^A%6q8IJJ**622r'  c                    U R                  SSSS5      nU R                  S-   nUR                  S5      n[        U5      nUS:  a  [	        U5      eUS   R                  S	5      n[        U5      nUS:  a  [	        U5      e/ n[        SU5       GH  n	Xi   n
U
R                  S
5      n[        U5      nUS:  a  [	        U5      eUS   R                  SS5      nUR                  SS5      nUS   R                  SS5      nUR                  S5      nU R                  US5      nUS   R                  SS5      nUR                  S5      n[        U5      S-
  nUS-
  nUS   R                  SS5      nUR                  S5      nU R                  USUUU 5      nU R                  USUR                  US5      5      nU R                  U5      nU R                  U5      nUR                  0 SU_SUS-   U-   _SU_SU_SS _SU_SU_SS _SS_SS_SS_SS_S S_S!S_S"S _S#S_S$S _S S S S S S U R                  US5      U R                  US5      S%.S S S&.US S&.S S S&.S S S&.S'.S U
S(.
E5        GM     U$ ))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settleIdr@  r9   Tr:   r;   r<   r=   r;  contractr  )amountpricer5  r  rk  rl  cost
r  contractSizeexpiryexpiryDatetimestrike
optionTyper=  r>  createdr9  )rA  r-   splitrE  r!   rD  replacesafe_numbersafe_string_lowerrG  rV  )r#  r*  rL  errortables	numTablesrowsnumRowsrM  rO  rowcellsnumCellsmarketIdminAmountStringminAmountParts	minAmountamountPrecisionStringamountPrecisionPartsidLengthstartingIndexpricePrecisionStringpricePrecisionPartsrh  rg  r   r   s                              r%  rU  gemini.fetch_markets_from_web  sg   &&~  PI  J  \  \H%K	q=u%%ayz*d)Q;u%%q'"A'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; #\ r'  c                 >    SSSSSS.nUc  gU R                  X!S5      $ )NTF)openclosedcancel_only	post_only
limit_only)	safe_boolr#  statusstatusess      r%  parse_market_activegemini.parse_market_activeN  s3    
 >~~h55r'  c                 0   SU R                   ;   a  / $ U R                  U R                  S/ 5      n/ n[        S[	        U5      5       HK  nX$   nSU0nU R                  U R                  Xa5      5      nUR                  U R                  U5      5        MM     U$ )Nr   r   r   rd  )	rx   rC  r   rD  rE  publicGetV1SymbolsDetailsSymbolextendrV  parse_market)r#  r*  r   rM  rO  r  requestrawResponses           r%  rW  gemini.fetch_usdt_marketsZ  s     TYYI??4<<9KRPq#./0A'*H(G >>t{{7?[\KMM$++K89 1 r'  c           	         U R                  U5      n/ nU R                  U R                  S0 5      nU R                  U R                  S/ 5      n/ n[	        S[        U5      5       H1  nU R                  X'   U5      (       a  M  UR                  X'   5        M3     U R                  USS5      (       a  / n[	        S[        U5      5       H:  nXg   n	SU	0n
UR                  U R                  U R                  X5      5      5        M<     Un[	        S[        U5      5       H%  nUR                  U R                  X   5      5        M'     U$ U R                  U R                  S5      nUb  U R                  US5      n[	        S[        U5      5       Hc  nXg   n	U R                  XR                  5       5      nUc  M+  U R                  X5      (       a  MC  UR                  U R                  U5      5        Me     U$ [	        S[        U5      5       H@  nU R                  Xg   U5      (       a  M  UR                  U R                  Xg   5      5        MB     U$ )Nr   r   r   r   Frd  r/  )publicGetV1Symbols	safe_dictr   rB  rD  rE  in_arrayrV  r  r  r  r  index_byupper)r#  r*  marketIdsRawrM  r   r   	marketIdsrO  rZ  r  r  	responsesr/  indexedTradingPairspairInfos                  r%  r   gemini.fetch_markets_from_apik  s   ..v6 ../DbInnT\\="E	q#l+,A==+>>  1 - >>'#>FFH1c)n-$<h!  D DT[[QXEa bc .$ !I1c)n-d//	=> .    >>$,,GL'&*mmL!&D#q#i.1A(|H#~~.A>>CSTH+DMM(4X4Xd&7&7&AB	 2  q#i.1A=={CCd&7&7	&EF 2 r'  c                 P   S nS nS nS nS nS nS nS n	Sn
S nS nS n[        U[        5      n[        U[        5      nU(       d  U(       d  U R                  US5      nU R	                  US5      nU R	                  US5      nU R	                  US5      nU R                  U R                  US5      5      n	U R                  US5      nU R                  US5      nU R                  US	5      nGOU(       a  UnOU R                  US
5      nU R                  U R                  U R                  US5      5      5      nU R                  U R                  U R                  US5      5      5      nU R	                  US5      nUR                  5       nUR                  S5      S
:  nUR                  SS5      nU R                  U R                  S0 5      nUR                  5       nUU;   a  UU   nUS   nUS   nU(       a  US   nOyU R                  SS/ 5      n[!        S
[#        U5      5       HM  nUU   nUR%                  U5      (       d  M   U R'                  S[#        U5      -  5      nUS
U nUnU(       a  Un  O   U R)                  U5      nU R)                  U5      nU R)                  U5      nUS-   U-   nUb  US-   U-   nSn
UnSnSnU
(       a  SOSn0 SU_SU_SU_SU_SU_SU_SU_SU_S U_SU
(       + _S!S_SU
_S"S_S#S_S$U	_S%U
_S&U_UUS S S S UUS'.S S S(.US S(.S S S(.S S S(.S).S US*.
E$ )+NFrd  	tick_sizequote_incrementmin_order_sizer  base_currencyquote_currencycontract_price_currencyr   r   r`  rc  PERPr   r   r   r   r   r   re  :Tr;   r9   r-   rf  rg  rh  ri  r@  r:   r<   r=   r;  rj  r  )rl  rk  r5  rm  ro  )
isinstancestrlistry  rx  r  rF  rH  rI  r  findrw  r  r   lowerhandle_optionrD  rE  endswithparse_to_intrG  )r#  responser  rg  rh  ri  tickSizeamountPrecisionminSizer  r;   rp  r  r  isStringisArraymarketIdUpperisPerpmarketIdWithoutPerpr   lowerCaseIdconflictingMarketr   rO  quoteCurrencyquoteLengthr   r   rf  rd  r@  s                                  r%  r  gemini.parse_market  s9   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7A$3A$6M*33MBB&*&7&7S=O8O&P!4Q{!C"/!'4H 8 &&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'  Nrd  r  c           	          U R                  5         U R                  U5      nSUS   0nUb  X%S'   X%S'   U R                  U R                  XS5      5      nU R	                  XdS   SSSSS	5      $ )
a  
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
rd  r-   N
limit_bids
limit_asksbidsasksrl  rk  )load_marketsmarketpublicGetV1BookSymbolr  parse_order_book)r#  rd  r  r*  r  r  r  s          r%  fetch_order_bookgemini.fetch_order_book6  s     	V$fTl
 $)L!$)L!--dkk'.JK$$Xh/?vvW^`hiir'  c                     U R                  5         U R                  U5      nSUS   0nU R                  U R                  XB5      5      nU R	                  XS5      $ Nrd  r-   )r  r  publicGetV1PubtickerSymbolr  parse_tickerr#  rd  r*  r  r  r  s         r%  fetch_ticker_v1gemini.fetch_ticker_v1L  sZ    V$fTl
 224;;w3OP   22r'  c                     U R                  5         U R                  U5      nSUS   0nU R                  U R                  XB5      5      nU R	                  XS5      $ r  )r  r  publicGetV2TickerSymbolr  r  r  s         r%  fetch_ticker_v2gemini.fetch_ticker_v2a  sZ    V$fTl
 //G0LM   22r'  c                     U R                  X5      nU R                  X5      nX4/u  pVU R                  UUS   US   US   US   US   US   US   S.5      $ )	Nr  highlowchange
percentageaverager9  )r  r  r  r  r  r  r9  )r  r  r   )r#  rd  r*  tickerPromiseAtickerPromiseBtickerAtickerBs          r%  fetch_ticker_v1_and_v2gemini.fetch_ticker_v1_and_v2w  s{    --f=--f=*;FOFO5>h'!,/y)FO*
  	r'  c                     U R                  U R                  SS5      nUS:X  a  U R                  X5      $ US:X  a  U R                  X5      $ U R	                  X5      $ )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   fetchTickerV2)rC  r   r  r  r  )r#  rd  r*  rY  s       r%  fetch_tickergemini.fetch_ticker  s^     /BOT_$''77_$''77**6::r'  tickerr  c                    U R                  US0 5      nU R                  US5      nS nU R                  US5      nU R                  Xb5      nS nS nS n	S n
UbV  UcS  [	        U5      S-
  nUS:X  a  USS nUSS nO
USS nUSS nU R                  U5      n	U R                  U5      n
U	S	-   U
-   nUc,  Ub)  US
   nU R                  US5      nU R                  US5      nU R                  US5      nU R                  USSU5      nU R                  US5      nU R                  US5      nU R                  X75      nU R                  X85      nU R                  0 S
U_SU_SU R                  U5      _SU R                  US5      _SU R                  US5      _SU R                  US5      _SS _SU R                  US5      _SS _SS _SU_SU_SU_SS _SS _SU_SS _UUUS.EU5      $ )Nvolume	timestamppairr   r1     rc     re  rd  rg  rh  rl  lastclosepercentChange24hr  datetimer  r  bid	bidVolumeask	askVolumevwappreviousCloser  r  r  )
baseVolumequoteVolumer9  )rC  safe_integerry  safe_marketrE  rG  safe_string_upperrF  safe_string_2safe_tickeriso8601)r#  r  r  r  r  rd  r  rg  rh  r   r   r  rl  r  r  r  r  r  s                     r%  r  gemini.parse_ticker  s   J 26%%fk:	))&&9!!(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
/%%f5
&&v7 !
f!
!
 Y/!
 D$$VV4	!

 4##FE2!
 4##FE2!
 !
 4##FE2!
 !
 D!
 D!
 T!
 D!
 T!
 d!
  *!!
" t#!
$ %&)!
* + 	r'  symbolsc                     U R                  5         U R                  U5      nU R                  X15      nU R                  U R                  S/ 5      nU R                  XE5      $ )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>`
r   )r  publicGetV1Pricefeedparse_tickersrB  r   remove_keys_from_dict)r#  r  r*  r  rM  r   s         r%  fetch_tickersgemini.fetch_tickers  sY     	,,V4 ##H6nnT\\="E))&>>r'  tradec                    U R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nU R                  U5      nU R                  US5      US.nU R                  US5      n	U R                  US5      n
U R                  US	5      nU R	                  S U5      nU R                  UUUUU R                  U5      US US U	S U
US
.U5      $ )Ntimestampmstidorder_idfee_currency
fee_amountrn  rP  rl  rk  r@  )r-   orderr9  r  r  rd  r@  sidetakerOrMakerrl  rn  rk  r<  )r  rF  rG  ry  safe_symbol
safe_trader
  )r#  r  r  r  r-   orderIdfeeCurrencyIdfeeCurrencyCoder<  priceStringamountStringr  rd  s                r%  parse_tradegemini.parse_trade  s   D %%e];	eU+""5*5((?11-@$$UL9'
 &&ug6''x8%%eV4!!$/"Y/  " 
  	r'  sincec                     U R                  5         U R                  U5      nSUS   0nUb  [        US5      US'   Ub  X&S'   U R                  U R	                  Xd5      5      nU R                  XuX#5      $ )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>`
rd  r-   r  limit_tradesr  )r  r  r6  publicGetV1TradesSymbolr  parse_tradesr#  rd  r'  r  r*  r  r  r  s           r%  fetch_tradesgemini.fetch_tradesO  s     	V$fTl
 &)%oGN##(K //G0LM   5@@r'  c                 .   SU0n[        S[        U5      5       Hh  nX   nU R                  US5      nU R                  U5      nU R	                  5       nU R                  US5      US'   U R                  US5      US'   XrU'   Mj     U R                  U5      $ )Nr9  r   rP  	availablefreerk  total)rD  rE  rF  rG  accountsafe_balance)r#  r  rM  rO  balance
currencyIdr?  r3  s           r%  parse_balancegemini.parse_balancet  s    )q#h-(AkG))':>J**:6DllnG"..wDGFO#//BGG"4L )   ((r'  c                    U R                  5         U R                  U5      nU R                  US5      nU R                  US5      n[        R                  " US5      n[        R                  " US5      nU R                  U5      nU R                  U5      n0 n	[        S[        U R                  5      5       H  n
U R                  U
   nUUUUSSS.X'   M     U	$ )a(  
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
api_maker_fee_bpsapi_taker_fee_bps10000r   T)r9  rd  r   r   r  	tierBased)	r  privatePostV1NotionalvolumerF  r'   
string_divrH  rD  rE  r  )r#  r*  r  makerBpstakerBpsmakerStringtakerStringr   r   rM  rO  rd  s               r%  fetch_trading_feesgemini.fetch_trading_fees  s     	33F;: ##H.AB##H.AB((7;((7;!!+.!!+.q#dll+,A\\!_F  "!FN - r'  c                 f    U R                  5         U R                  U5      nU R                  U5      $ )a<  
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>`
)r  privatePostV1Balancesr7  )r#  r*  r  s      r%  fetch_balancegemini.fetch_balance  s1     	--f5!!(++r'  r  c                 h   U R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nSnUS   (       a  SnUS   (       a  S	nU R                  US
5      nU R                  US5      n	U R                  US5      n
U
S:X  a  Sn
OU
S:X  d  U
S:X  a  Sn
OUS   n
S nU R                  US5      nU R                  X5      nU R                  US5      nU R                  US5      nU R                  US5      nU R	                  US/ 5      nU R                  US5      nSnSnUb  US:X  a  SnOUS:X  a  SnO
US:X  a  SnS nU R                  0 S!U_S"U_S#U_S$U_S%U R                  U5      _S&S _S'U_SU_SU
_S(U_S)U_SU_S
U_S*S _S+U	_S,S _S-U_UUUS S..EU5      $ )/Nr  original_amountremaining_amountexecuted_amountr  is_liver  is_cancelledcanceledrl  avg_execution_pricer@  exchange limitr  z
market buyzmarket sellr  rd  r  r  client_order_idr   r   GTCFimmediate-or-cancelr  fill-or-killr  maker-or-cancelr  Tr-   clientOrderIdr9  r  r  lastTradeTimestampr  r  rq   r  r  rn  rk  )filled	remainingr<  trades)r  rF  r  ry  rC  
safe_orderr
  )r#  r  r  r  rk  r[  rZ  r  rl  r  r@  r<  r  rd  r-   r  rX  optionsArrayr=   r  rq   s                        r%  parse_ordergemini.parse_order  s   F %%e];	!!%):;$$U,>?	!!%):;F F  0""5*?@v.##D\!T]%:D=D##E84!!(3eZ0%%eV4((0ABui<!!,2..#>)#,,"  
" 
] 
 E 
 	 

 Y/ 
 !$ 
 f 
 f 
 D 
 ; 
  
 D 
 U 
 D 
 w 
  D! 
" f# 
$ "+ 
, - 	r'  r-   c                     U R                  5         SU0nU R                  U R                  XC5      5      nU R                  U5      $ )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>`
r  )r  privatePostV1OrderStatusr  r_  r#  r-   rd  r*  r  r  s         r%  fetch_ordergemini.fetch_orderf  sJ     	
 00W1MN0 ))r'  c                     U R                  5         U R                  U5      nSnUb  U R                  U5      nU R                  XVX#5      $ )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#  rd  r'  r  r*  r  r  s          r%  fetch_open_ordersgemini.fetch_open_orders  sN     	++F34 [[(F  5@@r'  r@  r  rk  rl  c                 ,   U R                  5         US:w  a  [        U R                  S-   5      eU R                  USS5      nU R	                  USS/5      nUc  [        U R                  5       5      nU R                  U5      nU R                  X5      n	U R                  X5      n
UUS   U	U
USS.nU R                  USU5      nU R	                  US5      nU R                  U/ S	Q5      nU R	                  U/ S
Q5      nUS:X  a  [        U R                  S-   U-   S-   5      eUb  U R                  X5      US'   SUS'   OU R                  US5      nU R	                  US5      nUb2  US:X  d  US:X  a  S/US'   OUS:X  d  US:X  a  S/US'   OUS:X  a  S/US'   U R                  USS5      nU R	                  US5      nU(       a  S/US'   U R                  US5      nUb  U/US'   U R                  U R                  X5      5      nU R!                  U5      $ )aA  
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>`
r  z' createOrder() allows limit orders onlyrX  rS  r-   rR  )rS  rd  rk  rl  r  r@  r@  )r  
stop_price	stopPrice)r  rl  rm  r@  	stopLimitzO createOrder() requires a triggerPrice parameter or a stop_price parameter for z ordersrl  zexchange stop limitr  r  rU  r   r  rV  r  rW  rq   F)r  r   r-   r  omitr  r   r  amount_to_precisionprice_to_precisionrF  safe_string_nr   r  privatePostV1OrderNewr  r_  )r#  rd  r@  r  rk  rl  r*  rX  r  r$  r#  r  r  r  rq   r   r  s                    r%  create_ordergemini.create_order  s`    	7?*S STT**6?DUV6O5F#GH  1 1 34MV$//?--f<,Tl" $
 566*))&2]^6#VW;#DGG.$  CG  %G  JS  %S  T  T#$($;$;F$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	"--dkk'.JK0 ))r'  c                     U R                  5         SU0nU R                  U R                  XC5      5      nU R                  U5      $ )aE  
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>`
r  )r  privatePostV1OrderCancelr  r_  rc  s         r%  cancel_ordergemini.cancel_order  sJ     	
 00W1MN2 ))r'  c                 .   Uc  [        U R                  S-   5      eU R                  5         U R                  U5      nSUS   0nUb  X6S'   Ub  U R	                  US-  5      US'   U R                  U R                  Xd5      5      nU R                  XuX#5      $ )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>`
z+ fetchMyTrades() requires a symbol argumentrd  r-   r)  i  r  )r   r-   r  r  r  privatePostV1Mytradesr  r+  r,  s           r%  fetch_my_tradesgemini.fetch_my_trades<  s     >#DGG.[$[\\V$fTl
 &+N##'#4#4UT\#BGK --dkk'.JK  5@@r'  r?  addresstagc                    U R                  XE5      u  pEU R                  U5        U R                  5         U R                  U5      nUS   UUS.nU R	                  U R                  Xu5      5      nU R                  US5      n	U	S:X  a*  [        U R                  S-   U R                  U5      -   5      eU R                  X5      $ )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>`
r-   )rP  rk  r~  rM  rz  z withdraw() failed: )handle_withdraw_tag_and_paramscheck_addressr  rP  privatePostV1WithdrawCurrencyr  rF  r   r-   jsonparse_transaction)
r#  r?  rk  r~  r  r*  rP  r  r  rM  s
             r%  rw   gemini.withdrawV  s     99#F7#==& 

 55dkk'6RS0 !!(H5W*@ @499XCV VWW%%h99r'  c                     U R                  U R                  SS5      nUS:X  a  U R                  5       $ U R                  5       $ )Nr   r   )rF  r   r   seconds)r#  nonceMethods     r%  r   gemini.nonce  s=    &&t||WnM.($$&&||~r'  c                     U R                  5         0 nUb  X5S'   Ub  X%S'   U R                  U R                  XT5      5      nU R                  U5      $ )a  
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>`
limit_transfersr  )r  privatePostV1Transfersr  parse_transactions)r#  r?  r'  r  r*  r  r  s          r%  fetch_deposits_withdrawals!gemini.fetch_deposits_withdrawals  s\     	).%&#(K ..t{{7/KL&&x00r'  transactionrP  c                 D   U R                  US5      nU R                  US5      nU R                  XB5      nU R                  US5      nU R                  US5      nU R                  US5      nS n	U R	                  US5      n
U
b  U
US.n	0 SU_S	U R                  US
S5      _SU R                  US5      _SU_SU R                  U5      _SS _SU_SS _SS _SS _SS _SS _SU_SU R	                  US5      _SU_SU R                  U5      _SS _S U R                  US5      U	S.E$ )Nr  rP  destinationr@  r  	feeAmountr  r9  r-   eidwithdrawalIdtxidtxHashr  r  r:  r~  	addressToaddressFromr  tagTotagFromrk  updatedmessage)internalcommentr<  )r  rF  rG  ry  rx  r  r
  parse_transaction_status)r#  r  rP  r  r6  r?  r~  r@  	statusRawr<  r  s              r%  r  gemini.parse_transaction  s   & %%k=A	%%k:>
&&z<"";>%%k6:$$[(;	$$[+>	 ! C
K
$$$[%H
 D$$[(;
 	

 Y/
 t
 w
 
 4
 4
 T
 t
 D
 d&&{H=
 
  d33I>!
" t#
$ ''Y?)
 	
r'  r  c                 0    SSS.nU R                  X!U5      $ )Nok)AdvancedComplete)rF  r  s      r%  r  gemini.parse_transaction_status  s$    
 &99r'  c                 Z    U R                  US5      nU R                  S U5      nUS US US.$ )Nr~  )rP  r:  r~  r  r9  )rF  rG  )r#  depositAddressrP  r~  r?  s        r%  parse_deposit_addressgemini.parse_deposit_address  sA     "">9=&&tX6"
 	
r'  c                     U R                  5         U R                  X5      nSnU R                  U5      u  pBU R                  U R	                  X45      S5      nU R	                  XQ5      $ )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>`
NrP  )r  "fetch_deposit_addresses_by_networkhandle_network_code_and_paramsr  rC  )r#  r?  r*  groupedByNetworkrR  networkGroups         r%  fetch_deposit_addressgemini.fetch_deposit_address  sc     	BB4P"AA&I}}T__5E%SU_`|22r'  c                 h   U R                  5         U R                  U5      nUS   nSnU R                  U5      u  pBUc  [        U R                  S-   5      eU R                  U5      nSU0nU R                  U R                  Xb5      5      nU R                  Xq/SXAS.5      nU R                  US5      $ )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
r?  Nz5 fetchDepositAddresses() requires a network parameterr:  F)r:  rP  )
r  rP  r  r   r-   network_code_to_idprivatePostV1AddressesNetworkr  parse_deposit_addressesgroup_by)	r#  r?  r*  rP  rR  rQ  r  r  resultss	            r%  r  )gemini.fetch_deposit_addresses_by_network  s     	==&"AA&I#DGG.e$eff++K8	y
 55dkk'6RS..xT_Hrs}}Wi00r'  ry   GETc                    SU R                  X5      -   nU R                  X@R                  U5      5      nUS:X  a  U R                  5         U R                  n	U	R                  S5      S:  a  [        U R                  S-   5      e[        U R                  5       5      n
U R                  UU
S.U5      nU R                  U5      nU R                  U5      nU R                  U R                  U5      U R                  U R                  5      [         R"                  5      nSU R                  UUS.nOU(       a  US	U R%                  U5      -   -  nU R&                  S
   U   U-   nUS:X  d  US:X  a  U R                  U5      nXsXeS.$ )Nre  rz   r3  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)urlrY  bodyheaders)implode_paramsro  extract_paramscheck_required_credentialsapiKeyr  r   r-   r  r   r  r  string_to_base64hmacencodesecrethashlibsha384	urlencoderx   )r#  pathr~   rY  r*  r  r  r  queryr  r   r  payload	signatures                 r%  signgemini.sign!  sd   D''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dOOr'  httpCodereasonr  rY  r  r  c
                    UcG  [        U[        5      (       a1  U R                  S-   U-   n
U R                  U R                  S   Xj5        g U R                  US5      nUS:X  a  U R                  US5      nU R                  US5      nU R                  S-   U-   n
U R                  U R                  S   X5        U R                  U R                  S   X5        U R                  U R                  S   X5        [        U
5      eg )Nrb  r   rM  rz  r  r  r   )r  r  r-   throw_broadly_matched_exceptionr   rF  throw_exactly_matched_exceptionr   )r#  r  r  r  rY  r  r  r  requestHeadersrequestBodyfeedbackrM  reasonInnerr  s                 r%  handle_errorsgemini.handle_errors?  s    $$$77S=4/44T__W5Mt^ !!(H5W**8X>K&&x;Gww}w.H001I;a001I7]001I7]))r'  c                     U R                  5         U R                  U5      nSUS   0nU R                  U R                  XB5      5      nU R	                  US5      nU R                  U5        UUSSUS.$ )aM  
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>`
rP  r-   r~  N)rP  r~  r  r:  r9  )r  rP  &privatePostV1DepositCurrencyNewAddressr  rF  r  )r#  r?  r*  rP  r  r  r~  s          r%  create_deposit_addressgemini.create_deposit_addressW  s     	==&
 >>t{{7?[\""8Y77#
 	
r'  r   	timeframec                     U R                  5         U R                  U5      nU R                  U R                  X"5      nUUS   S.nU R	                  U R                  X5      5      n	U R                  XX#U5      $ )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
r-   )r  rd  )r  r  rF  r   !publicGetV2CandlesSymbolTimeframer  parse_ohlcvs)
r#  rd  r  r'  r  r*  r  timeframeIdr  r  s
             r%  fetch_ohlcvgemini.fetch_ohlcvq  sw     	V$&&t	M$Tl
 99$++g:VW   9UKKr'   )N)F__name__
__module____qualname____firstlineno__r   r"  r   r+  r)  r   r   r\  rU  r  rW  r   r  r  r
   r   r  r  r  r  r   r  dictr  r   r   r  r   r%  r-  r   r7  r   rD  rH  r   r_  r   rd  ri  r   r   floatr   rt  rx  r|  r   rw   r   r  r   r  r  r  r	   r  r  r  intr  r  r  r  __static_attributes____classcell__)r$  s   @r%  r)   r)      s   ^# ^@ ') 6Z 6 02 Wr $& 3$v, 3$ -/ [z
6 )+ " -/ 5nR
 R
h :>b js j3 jY j, 35 3c 3* 35 3c 3, :< S  02 ;3 ;f ;&X4 X X6 Xt 04B ?W ?7 ?<= =v = =~ 6:UW #A3 #As #A# #A\`af\g #AJ
) 
) )+ 8{ 8t $& ,( ,] ]v ] ]~ 26b '*c '*3 '*R /3TXac *A *A3 *Ac *Ahlmrhs *AX gksu U*3 U*i U*y U*RW U*`c U*n 37r (*s (*C (*T -1tRV_a Ac A AC A4 KOWY 1:S 1:% 1:# 1:C 1:^i 1:f 6:[_hj 1s 1# 1UX 1ost  pA 1*6
T 6
X 6
Q\ 6
p:s :
h 
$ 79 3# 3^ 3$ DF 1s 1$~J^ 14 &eBSW P<c 3 S # X\ dg 0 8: 
3 
n 
4 9=4^bkm L# L# LS LX[ Lrvw{r| L Lr'  r)   ).ccxt.base.exchanger   ccxt.abstract.geminir   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'  r%  <module>r     sv    ( ,  J  J  J  J  J  J  * 0 - . ' . ) * ) . 1 * ) 4 %qLX{ qLr'  