
    E#iG                    j   S SK rS SKJrJrJ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  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K(J)r)   " S S\RT                  RV                  5      r+g)    N)
ArrayCacheArrayCacheBySymbolByIdArrayCacheByTimestamp)AnyBalancesBoolIntNumOrder	OrderBook	OrderSide	OrderTypeStrStringsTickerTickersTrade)Client)List)ExchangeError)AuthenticationError)PermissionDenied)AccountSuspended)ArgumentsRequired)
BadRequest)	BadSymbol)InsufficientFunds)InvalidOrder)OrderNotFound)NotSupported)RateLimitExceeded)ExchangeNotAvailable)ChecksumError)Precisec                     ^  \ rS rSrS\4U 4S jjrS0 4S\S\S\S\S	\S
\4S jjr	S0 4S\S\
S\S	\S
\S\4S jjrS rSS0 4S\S\S\
S\S	\S
\S\4S jjrS0 4S\\   S\4S jjrS0 4S\S\S\4S jjrS rS0 4S\S\\   4S jjrS rS rS\4S jrS\4S jrS r0 4S\S\4S jjrS0 4S\S\ 4S jjr!S0 4S\S\ 4S jjr"SS0 4S\S \#S!\#S\\$   4S" jjr%SS0 4S\\   S \#S!\#S\\$   4S# jjr&S0 4S\S!\#S\'4S$ jjr(S0 4S\\   S!\#S\'4S% jjr)S&SS0 4S\S'\S \#S!\#S\\*   4
S( jjr+S)0 4U 4S* jjr,S\4S+ jr-S\4S, jr.0 4S- jr/S\4S. jr0S\4S/ jr1S0 r2S1 r3S\4S2 jr40 4S3 jr5SSS0 4S\S \#S!\#4S4 jjr6SSS0 4S\S \#S!\#S\\$   4S5 jjr7SGS\4S6 jjr8SGS7 jr9SSS0 4S\S \#S!\#S\\   4S8 jjr:SGS\4S9 jjr;SGS: jr<SS0 4S;\S<\S\4S= jjr=0 4S\>4S> jjr?S\4S? jr@SHS@\SA\S\4SB jjrAS\4SC jrBS\S\C4SD jrDS\4SE jrESFrFU =rG$ )Ikraken   returnc                 n  > U R                  [        [        U ]  5       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_SSSSSSSSS.00SSS0 SS0S.U R                  SS .SS![
        00 S"[
        _S#[        _S$[        _S%[
        _S&[
        _S'[
        _S([        _S)[
        _S*[
        _S+[
        _S,[
        _S-[
        _S.[
        _S/[
        _S0[
        _S1[        _S2[        _0 S3[        _S4[        _S5[        _S6[        _S7[        _S8[
        _S9[        _S:[        _S;[        _S<[        _S=[        _S>[        _S?[        _S@[        _SA[        _SB[        _SC[        _E[        [        [        [        [        [        [         [         [         [        [
        [        SD.ESE.0SF.5      $ )GNwsTwatchBalancewatchMyTrades
watchOHLCVwatchOrderBookwatchOrderBookForSymbolswatchOrderswatchTickerwatchTickerswatchBidsAskswatchTradeswatchTradesForSymbolscreateOrderWseditOrderWscancelOrderWscancelOrdersWscancelAllOrdersWsapizwss://ws.kraken.comzwss://ws-auth.kraken.comzwss://ws-auth.kraken.com/v2zwss://ws.kraken.com/v2zwss://beta-ws.kraken.comzwss://beta-ws-auth.kraken.com)publicprivate	privateV2publicV2betazbeta-private  checksumF)tradesLimit
OHLCVLimitordersLimitsymbolsByOrderIdr.   ip  )ping	keepAlivezEvent(s) not foundzAlready subscribedz'Currency pair not in ISO 4217-A3 formatzCurrency pair not supportedzMalformed requestzPair field must be an arrayz1Pair field unsupported for self subscription typezPair(s) not foundz*Subscription book depth must be an integerz Subscription depth not supportedz$Subscription field must be an objectzSubscription name invalidz%Subscription object unsupported fieldz-Subscription ohlc interval must be an integerz(Subscription ohlc interval not supportedz#Subscription ohlc requires intervalzEAccount:Invalid permissionsz EAuth:Account temporary disabledzEAuth:Account unconfirmedzEAuth:Rate limit exceededzEAuth:Too many requestsz+EDatabase: Internal error(to be deprecated)z EGeneral:Internal error[:<code>]zEGeneral:Invalid argumentsz$EOrder:Cannot open opposing positionzEOrder:Cannot open positionz2EOrder:Insufficient funds(insufficient user funds)z[EOrder:Insufficient margin(exchange does not have sufficient funds to allow margin trading)zEOrder:Invalid pricez EOrder:Margin allowance exceededzEOrder:Margin level too lowzaEOrder:Margin position size exceeded(client would exceed the maximum position size for self pair)z,EOrder:Order minimum not met(volume too low)zEOrder:Orders limit exceededzEOrder:Positions limit exceeded)zEOrder:Rate limit exceededz&EOrder:Scheduled orders limit exceededzEOrder:Unknown positionzEOrder:Unknown orderzEOrder:Invalid orderzEService:Deadline elapsedz#EService:Market in cancel_only modez"EService:Market in limit_only modez!EService:Market in post_only modezEService:UnavailablezETrade:Invalid requestzESession:Invalid session)exactbroad)hasurlsoptions	streaming
exceptions)deep_extendsuperr&   describerG   r   r   r   r   r   r!   r   r   r   r   r"   r    )self	__class__s    I/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/pro/kraken.pyrR   kraken.describe   sP   fd < >d   d	
 !$ +D t t    t (   t    !$!" $T#, "7#=%B$< :(G	   $"#$&# 		!
 ,j/,j/A9/ 6y/ ,Z	/
 6z/ LZ/ ,Y/ Ej/ ;J/ ?
/ 4Z/ @/ H/ CJ/ >z/  78H!/" ;<L#/$ 45H%/& 45F'/( 23D)/* F}+/, ;M-/. 5j//0 ?1/2 6|3/4 MN_5/6 v  xI7/8 /9/: ;L;/< 6|=/> |  ~J?/@ GA/B 7C/D :<E/F 7HBN3@0=0<5I?K>J=I0D2<4G]/	46eiA
 i i	    Nmethodsymboltyperequestamountpricec                    UR                  S5      nU(       aA  Uc  [        U R                  S-   5      eU R                  U R	                  X&5      5      US   S'   US:H  n	S n
U R                  U	SU5      u  pU
(       a  SUS   S'   U R                  US	5      nUb  XS   S
'   U R                  US5      nUb&  U R                  U R                  X,5      5      US   S'   U R                  US0 5      nU R                  US0 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US LnUS LnU R                  US5      nU R                  US5      nUS LnUS L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S LnUS LnUS LnUS Ln U R                  USS5      n!Ub  U!U R                  U5      -   OS n"Ub  U!U R                  U5      -   OS n#Ub  U!U R                  U5      -   OS n$Ub  U!U R                  U5      -   OS n%U(       d  U (       a  SOSn&US:X  Ga  U R                  US5      n'U'(       a  SUS   S'   U R                  US5      n(U(b  U(US   S'   U R                  USS/5      nU(       d#  U(       d  U(       d  U(       d  U(       d  U (       a  0 US   S '   U(       d  U(       Ga  0 US   S!'   U(       a5  S"US   S!   S#'   U R                  U R	                  X/5      5      US   S!   S$'   O<U(       a5  S%US   S!   S#'   U R                  U R	                  UU5      5      US   S!   S$'   Ub6  S&US   S!   S#'   U R                  U R	                  UU5      5      US   S!   S'   O8Ub5  S'US   S!   S#'   U R                  U R	                  UU5      5      US   S!   S'   U R                  USS/5      nGOU(       d  U(       a  U(       aE  U R                  U R	                  UU5      5      US   S    S'   U(       a
  S&US   S#'   GOaS"US   S#'   GOWU R                  U R	                  UU5      5      US   S    S'   U(       a
  S'US   S#'   GOS%US   S#'   GOU(       d  U(       d  U(       d  U (       a  U&US   S    S('   U(       dU  U(       d  U(       aG  S)US   S#'   U(       a  U R                  U"5      US   S    S'   GOU R                  U#5      US   S    S'   GOU&US   S*'   S+US   S#'   U(       a  U R                  U$5      US   S    S'   GO\U R                  U%5      US   S    S'   GO@US,:X  Ga9  U(       d  U(       a  [        U R                  S--   5      eU(       d  U(       aW  U(       a(  U R                  U R	                  UU5      5      US   S$'   OU R                  U R	                  UU5      5      US   S$'   OU(       d  U(       d  U(       d  U (       a  U&US   S.'   U(       dE  U(       d  U(       a7  U(       a  U R                  U"5      US   S$'   OVU R                  U#5      US   S$'   O>U&US   S*'   U(       a  U R                  U$5      US   S$'   OU R                  U%5      US   S$'   U R                  U/ S/Q5      nXG/$ )0Nlimitz& limit orders require a price argumentparamslimit_pricemarketFT	post_onlyclientOrderId	cl_ord_idcost	order_qtystopLoss
takeProfittriggerPricer]   stopLossPricetakeProfitPricetrailingAmounttrailingPercenttrailingLimitAmounttrailingLimitPercentoffset pctquoter6   
reduceOnlyreduce_onlytimeInForcetime_in_forcetriggersconditionalz	stop-loss
order_typetrigger_priceztake-profitzstop-loss-limitztake-profit-limit
price_typeztrailing-stoplimit_price_typeztrailing-stop-limitr7   zR editing the stopLoss and takeProfit on existing orders is currently not supportedtrigger_price_type)	rd   rf   rq   rk   rl   rm   rn   ro   rp   )endswithr   idparse_to_numericprice_to_precisionhandle_post_onlysafe_stringcost_to_precision	safe_dictnumber_to_string	safe_boolsafe_string_loweromitr    ))rS   rX   rY   rZ   r[   r\   r]   r`   isLimitOrderisMarketpostOnlyrd   rf   rh   ri   presetStopLosspresetTakeProfitpresetStopLossLimitpresetTakeProfitLimitisPresetStopLossisPresetTakeProfitrk   rl   isStopLossPriceOrderisTakeProfitPriceOrderrm   rn   ro   rp   isTrailingAmountOrderisTrailingPercentOrderisTrailingLimitAmountOrderisTrailingLimitPercentOrderrq   trailingAmountStringtrailingPercentStringtrailingLimitAmountStringtrailingLimitPercentString	priceTyperu   rw   s)                                            rU   order_request_wskraken.order_request_ws   s   }}W-}'2Z(Z[[/3/D/DTE\E\]cEk/lGHm,H$005&I-1GHk*((A$-:Hk*/-1-B-B4CYCYZ`Cg-hGHk*>>&*b9^^FL"=
))(NC++JG"..xA $ 0 0W E)5-T9((A**63DE,D8!0!<))&2BC**63DE"..v7LM#//8NO .d :!0!<%8%D"&:$&F#!!&(B7R`Rlv(=(=n(MMswTcTo)>)>)O Ovz\o\{FT-B-BCV-W$W  CG!^r^~Vd.C.CDX.Y%Y  FJ"48SEZa	_$=J37!-000GK&5@!/2YYvm'DEF#'=AVZp  uO  Sn02!*-#535!-0#EPGH%m4\BHLH]H]^b^u^uv|  _N  IOGH%m4_E'ERGH%m4\BHLH]H]^b^u^uv|  O  _P  IQGH%m4_E&2EVGH%m4\BFJF[F[\`\s\stz  }P  ]Q  GRGH%m4]C*6EXGH%m4\BFJF[F[\`\s\stz  }R  ]S  GTGH%m4]C6J+EF%)?'=A=R=RSWSjSjkq  tA  TB  >CGH%j1':#:K),7:E),7=A=R=RSWSjSjkq  tC  TD  >EGH%j1':#:M),7:G),7&*@D^b}>G!*-l;#)>BX6EGH%l3,AEAVAVWkAl)*5g>AEAVAVWlAm)*5g> =FGH%&896KGH%l31AEAVAVWpAq)*5g>AEAVAVWqAr)*5g>}$#5"477  .B  $B  C  C#'='9=9N9NtOfOfgmo|O}9~GH%o69=9N9NtOfOfgmo~O  :AGH%o6&*@D^b}:C!"67#)>BX,=A=R=RSg=h)/:=A=R=RSh=i)/:<EGH%&891=A=R=RSl=m)/:=A=R=RSm=n)/:6  $  @  rW   sidec           	        #    U R                  5       I Sh  vN   U R                  5       I Sh  vN nU R                  U5      nU R                  S   S   S   n	U R	                  5       n
U R                  U
5      nSUUU R                  U R                  X5      5      US   US.U
S.nU R                  S	XXXV5      u  pU R                  XU R                  X5      U5      I Sh  vN $  N N N7f)
aQ  
create a trade order

https://docs.kraken.com/api/docs/websocket-v2/add_order

:param str symbol: unified symbol of the market to create an order in
:param str type: 'market' or '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;   r*   r>   	add_orderrY   )r{   r   rg   rY   tokenrX   r`   req_idr6   )load_marketsauthenticaterb   rL   
request_idr   r   amount_to_precisionr   watchextend)rS   rY   rZ   r   r\   r]   r`   r   rb   url	requestIdmessageHashr[   s                rU   create_order_wskraken.create_order_ws  s      !!!''))V$iit$[1OO%	++I6!"!2243K3KF3[\ *  

 //w`enZZ$++g2NP[\\\% 	")" ]s2   C-C'C-C)B3C-"C+#C-)C-+C-c                     U R                  US0 5      nU R                  U5      nU R                  USS5      nUR                  XE5        g )Nresultreqidr   )r   parse_ordersafe_string_2resolve)rS   clientmessager   orderr   s         rU   handle_create_edit_orderkraken.handle_create_edit_order%  sF    6 26  ((('8Du*rW   r   c           	        #    U R                  5       I Sh  vN   U R                  5       I Sh  vN nU R                  S   S   S   n	U R                  5       n
U R	                  U
5      nSUU R                  U R                  X%5      5      US.U
S.nU R                  SX#XXg5      u  pU R                  XU R                  X5      U5      I Sh  vN $  N N N7f)	aq  
edit a trade order

https://docs.kraken.com/api/docs/websocket-v2/amend_order

:param str id: order id
:param str symbol: unified symbol of the market to create an order in
:param str type: 'market' or 'limit'
:param str side: 'buy' or 'sell'
:param float amount: how much of the currency you want to trade in units of the 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;   r*   r>   amend_order)order_idrg   r   r   r7   )
r   r   rL   r   r   r   r   r   r   r   )rS   r   rY   rZ   r   r\   r]   r`   r   r   r   r   r[   s                rU   edit_order_wskraken.edit_order_wsE  s      !!!''))iit$[1OO%	++I6#!2243K3KF3[\
  
 //vW^clZZ$++g2NP[\\\ 	") ]s2   CCCCBCCCCCidsc                 ~  #    Ub  [        U R                  S-   5      eU R                  5       I Sh  vN   U R                  5       I Sh  vN nU R                  S   S   S   nU R                  5       nU R                  U5      nSUUS.US.nU R                  XWU R                  X5      U5      I Sh  vN $  N No N7f)	aU  
cancel multiple orders

https://docs.kraken.com/api/docs/websocket-v2/cancel_order

:param str[] ids: order ids
:param str [symbol]: unified market symbol, default is None
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
NzK cancelOrdersWs() does not support cancelling orders for a specific symbol.r;   r*   r>   cancel_orderr   r   r   	r    r   r   r   rL   r   r   r   r   )	rS   r   rY   r`   r   r   r   r   r[   s	            rU   cancel_orders_wskraken.cancel_orders_wse  s      tww)vvww!!!''))iit$[1OO%	++I6$  
 ZZ$++g2NP[\\\ 	") ]s4   /B=B7B=	B9
A(B=2B;3B=9B=;B=c                   #    Ub  [        U R                  S-   5      eU R                  5       I Sh  vN   U R                  5       I Sh  vN nU R                  S   S   S   nU R                  5       nU R                  U5      nSU/US.US.nU R                  XWU R                  X5      U5      I Sh  vN $  N Np N7f)	aS  
cancels an open order

https://docs.kraken.com/api/docs/websocket-v2/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>`
NzJ cancelOrderWs() does not support cancelling orders for a specific symbol.r;   r*   r>   r   r   r   r   )	rS   r   rY   r`   r   r   r   r   r[   s	            rU   cancel_order_wskraken.cancel_order_ws  s      tww)uuvv!!!''))iit$[1OO%	++I6$D  
 ZZ$++g2NP[\\\ 	") ]s4   /B>B8B>	B:
A)B>3B<4B>:B><B>c                 J    U R                  US5      nUR                  X#5        g Nr   r   r   rS   r   r   reqIds       rU   handle_cancel_orderkraken.handle_cancel_order  "       (3w&rW   c                 |  #    Ub  [        U R                  S-   5      eU R                  5       I Sh  vN   U R                  5       I Sh  vN nU R                  S   S   S   nU R                  5       nU R                  U5      nSSU0US.nU R                  XFU R                  Xr5      U5      I Sh  vN $  N Nn N7f)	aw  
cancel all open orders

https://docs.kraken.com/api/docs/websocket-v2/cancel_all

:param str [symbol]: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
NzM cancelAllOrdersWs() does not support cancelling orders in a specific market.r;   r*   r>   
cancel_allr   r   r   )rS   rY   r`   r   r   r   r   r[   s           rU   cancel_all_orders_wskraken.cancel_all_orders_ws  s      tww)xxyy!!!''))iit$[1OO%	++I6"  
 ZZ$++g2NP[\\\ 	") ]s4   /B<B6B<	B8
A'B<1B:2B<8B<:B<c                 J    U R                  US5      nUR                  X#5        g r   r   r   s       rU   handle_cancel_all_orderskraken.handle_cancel_all_orders  r   rW   c                    U R                  US/ 5      nUS   nU R                  US5      nU R                  SS U5      nU R                  US5      nS nU R                  US5      n	U	b  Ub  [        R                  " X5      nU R                  US5      n
U R                  0 SU_SS _S	S _S
U R                  US
5      _SU R                  US5      _SU R                  US5      _SU R                  US5      _SU R                  US5      _SU R                  US5      _SU_SS _SU
_SU
_SS _SU R                  US5      _SU R                  US5      _SS _U	UUS.E5      nXR                  U'   UR                  X5        g )Ndatar   rY   tickervwapvolumelast	timestampdatetimehighlowbid	bidVolumebid_qtyask	askVolumeask_qtyopenclosepreviousClosechange
percentage
change_pctaverage)
baseVolumequoteVolumeinfo)	safe_listr   get_message_hashr$   
string_mulsafe_tickertickersr   )rS   r   r   r   r   rY   r   r   r   r   r   r   s               rU   handle_tickerkraken.handle_ticker  s
   . ~~gvr2a!!&(3++HdFC/%%fh7
!d&6!,,Z>K/!! #
f#
#
 #
 D$$VV4	#

 4##FE2#
 4##FE2#
 ))&)<#
 4##FE2#
 ))&)<#
 D#
 D#
 T#
 D#
 T#
 d&&vx8#
  $**6<@!#
" t##
$ %&)#
 ,  &Vv+rW   r   c                    U R                  US/ 5      nUS   nU R                  US5      nU R                  SS U5      nU R                  U R                  U5      nUc6  U R                  U R                  SS5      n[        U5      nXpR                  U'   U R                  U5      n	U R                  X95      n
[        S[        U
5      5       H  nUR                  X   5        M     UR                  Xv5        g )Nr   r   rY   traderC   rA   )r   r   r   
safe_valuetradessafe_integerrM   r   rb   parse_tradesrangelenappendr   )rS   r   r   r   r   rY   r   storedr_   rb   parsedis               rU   handle_tradeskraken.handle_trades  s    $ ~~gvr2Q!!%2++GT6Bf5>%%dllM4HE&F"(KKV$""40q#f+&AMM&)$ 'v+rW   c           
         U R                  US/ 5      nUS   nU R                  US5      nU R                  U5      nX`R                  ;  a  0 U R                  U'   U R	                  US5      nU R                  U5      nU R                  SS U5      n	U R                  U R                  U   U5      n
U R                  U R                  U0 5      U R                  U'   U
c9  U R	                  U R                  SS5      n[        U5      n
XR                  U   U'   [        U5      n[        SU5       H  nX<U-
  S-
     nU R                  US	5      nU R                  U5      nUU R                  US
5      U R                  US5      U R                  US5      U R                  US5      U R                  US5      /nU
R                  U5        M     UR                  X5        g )Nr   r   rY   intervalohlcvrD   rA      r   r   r   r   r   r   )r   r   safe_symbolohlcvsr  find_timeframer   r   rM   r   r  r  	parse8601r  r   )rS   r   r   r   firstmarketIdrY   r  	timeframer   r  r_   ohlcvsLengthr  candler   r   r  s                     rU   handle_ohlcvkraken.handle_ohlcv2  s   . ~~gvr2Q##E84!!(+++%"$DKK$$UJ7''1	++GT6BV!4i@"oodkk62FF>%%dllL$GE*51F-3KK	*4yq,'A*Q./F''<Hx0I  0  0  /  1  2F MM&! ( 	v+rW   c                 |    U R                  U R                  U R                  SS5      S5      nXR                  S'   U$ )Nr   r   r  )sumr  rM   )rS   r   s     rU   r   kraken.request_idh  s6    **4<<!DaH %WrW   c                    #    U R                  5       I Sh  vN   U R                  U5      nU R                  U/U5      I Sh  vN nX1   $  N4 N
7f)a  
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

https://docs.kraken.com/api/docs/websocket-v2/ticker

:param str symbol: unified symbol of the market to fetch the ticker for
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
N)r   rY   watch_tickers)rS   rY   r`   r   s       rU   watch_tickerkraken.watch_tickern  sN      !!!V$**F8V<< 	"<s!   AA+AA	AAsymbolsc                   #    U R                  5       I Sh  vN   U R                  USS5      nU R                  SSUSU5      I Sh  vN nU R                  (       a  0 nX4US   '   U$ U R	                  U R
                  SU5      $  Nm N?7f)am  
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

https://docs.kraken.com/api/docs/websocket-v2/ticker

:param str[] symbols:
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
NFr   rY   )r   market_symbolswatch_multi_helper
newUpdatesfilter_by_arrayr   rS   r!  r`   r   r   s        rU   r  kraken.watch_tickers}  s      !!!%%gtU;..x7DRXYY??F'-6(#$M##DLL(GDD 	"Ys!   BB/BB>BBc                   #    U R                  5       I Sh  vN   U R                  USS5      nSUS'   U R                  SSUSU5      I Sh  vN nU R                  (       a  0 nX4US   '   U$ U R	                  U R
                  SU5      $  Nr N?7f)aF  
watches best bid & ask for symbols

https://docs.kraken.com/api/docs/websocket-v2/ticker

:param str[] symbols: unified symbol of the market to fetch the ticker for
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
NFbboevent_triggerbidaskr   rY   )r   r#  r$  r%  r&  bidsasksr'  s        rU   watch_bids_askskraken.watch_bids_asks  s      !!!%%gtU;"'..x7DRXYY??F'-6(#$M##DMM8WEE 	" Zs!   BB	4BB>BBsincer_   c                 F   #    U R                  U/X#U5      I Sh  vN $  N7f)a  
get the list of most recent trades for a particular symbol

https://docs.kraken.com/api/docs/websocket-v2/trade

: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 dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
N)watch_trades_for_symbolsrS   rY   r0  r_   r`   s        rU   watch_tradeskraken.watch_trades  s$      22F8U6RRRRs   !!c                    #    U R                  SSUSU5      I Sh  vN nU R                  (       a5  U R                  US5      nU R                  US5      nUR	                  Xs5      nU R                  XRUSS5      $  N^7f)a  
get the list of most recent trades for a list of symbols

https://docs.kraken.com/api/docs/websocket-v2/trade

:param str[] symbols: 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 dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
r   Nr   rY   r   T)r$  r%  r   r   getLimitfilter_by_since_limit)rS   r!  r0  r_   r`   r   r  tradeSymbols           rU   r2  kraken.watch_trades_for_symbols  sw      ..w$PVWW??NN61-E**5(;KOOK7E))&TRR Xs   A<A:AA<c                 D   #    U R                  U/X#5      I Sh  vN $  N7f)a  
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

https://docs.kraken.com/api/docs/websocket-v2/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
N)watch_order_book_for_symbols)rS   rY   r_   r`   s       rU   watch_order_bookkraken.watch_order_book  s"      66xOOOOs     c           
         #    0 nUb6  U R                  U/ SQ5      (       a  X$S'   O[        U R                  S-   5      eU R                  SSUSU0U R	                  XC5      5      I Sh  vN nUR                  5       $  N7f)a  
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

https://docs.kraken.com/api/docs/websocket-v2/book

:param str[] symbols: unified array of symbols
: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
N)
      d   i  rA   depthzF watchOrderBook accepts limit values of 10, 25, 100, 500 and 1000 only	orderbookbookr_   )in_arrayr    r   r$  r   r_   )rS   r!  r_   r`   requiredParamsrD  s         rU   r<  #kraken.watch_order_book_for_symbols  s       "}}U$<==*/w'"477-u#uvv11+vwQXZ_P`bfbmbmn|  cF  G  G	   Gs   A%A>'A<(A>1mr  c                   #    U R                  5       I Sh  vN   SnU R                  U5      nUS   nU R                  S   S   S   nU R                  5       n	U R	                  SSU5      n
SUU/U R                  U R                  X"5      S	.U	S
.nU R                  X5      nU R                  XX5      I Sh  vN nU R                  (       a  UR                  X5      nU R                  XUSS5      $  N N<7f)aF  
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market

https://docs.kraken.com/api/docs/websocket-v2/ohlc

: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
NohlcrY   r;   r*   r?   r  	subscribe)channelrY   r  r   r   T)r   rb   rL   r   r   r   
timeframesrP   r   r%  r7  r8  )rS   rY   r  r0  r_   r`   namerb   r   r   r   rL  r[   r  s                 rU   watch_ohlcvkraken.watch_ohlcv  s      !!!V$!iit$Z0OO%	++GT6B!!( OODOOYR
  
	 ""95jj7HH??NN61E))%{DQQ) 	"" Is"   C5C1BC56C37;C53C5Fc                   >#    [         [        U ]  X5      I S h  vN nU R                  U R                  S5      nUb  U(       a}  0 n[        S[        U R                  5      5       HJ  nU R                  U   nU R                  U   nU R                  US0 5      nU R                  US5      n	XtU	'   ML     X@R                  S'   U$  N7f)NmarketsByWsNamer   r   wsname)
rQ   r&   r   r   rM   r  r  r!  marketsr   )rS   reloadr`   rU  rS  r  rY   rb   r   wsNamerT   s             rU   r   kraken.load_markets	  s     fd8HH//$,,8IJ# O1c$,,/0af-vvr:))$9*0' 1 />LL*+ Is   CCB*Cc                 d    UR                   n0 nUR                  S5      S:  a  SUS'   U$ SUS'   U$ )Nv2r   rG   rX   event)r   find)rS   r   r   r[   s       rU   rG   kraken.ping  sB    jj88D>Q &GH   &GGrW   c                 0    U R                  5       Ul        U$ N)millisecondslastPongrS   r   r   s      rU   handle_pongkraken.handle_pong   s    ++-rW   c                    #    U R                  5       I S h  vN   SnU R                  S   S   S   nU R                  X25      I S h  vN $  N4 N7f)N	heartbeatr;   r*   r?   )r   rL   r   )rS   r`   r[  r   s       rU   watch_heartbeatkraken.watch_heartbeat$  sP     !!!iit$Z0ZZ+++ 	" ,s!   AA/AAAAc                 J    U R                  US5      nUR                  X#5        g )NrM  r   )rS   r   r   r[  s       rU   handle_heartbeatkraken.handle_heartbeat*  s"       )4w&rW   c                 n   U R                  US5      nU R                  US/ 5      nU R                  US0 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	U R                  SS U5      n
S nUS	:X  ap  U R                  U   nUS   nUS   nUb  U R                  X5        Ub  U R                  X5        U R                  US
5      nXkS'   U R                  U5      US
'   XS'   O[        U5      nU R                  0 U5      U R                  U'   U R                  U   nSS/n[        S[        U5      5       HC  nUU   nUU   nU R                  UU/ 5      n[        U5      S:  d  M1  U R                  UU5        ME     XkS'   UR                  5         U R                  SSS5      nU(       GaO  / nU	b  US   nUS   n[        SS5       HP  nU R                  UU0 5      nU R                  US   5      U R                  US   5      -   nUR                  U5        MR     [        SS5       HP  nU R                  UU0 5      nU R                  US   5      U R                  US   5      -   nUR                  U5        MR     SR!                  U5      nU R#                  US5      nUU	:w  aW  [%        U R&                  S-   U R)                  U5      -   5      nUR*                  U
	 U R                  U	 UR-                  UU
5        g UR/                  X5        g )NrZ   r   r   rY   asksbidsrB   rD  updater   r   r.   Fr@  r  rr    )r   r   r   r   r  r   
orderbookscustom_handle_deltasr  r  
order_bookr  r_   handle_optionformat_numberr  joincrc32r#   r   orderbook_checksum_messagesubscriptionsrejectr   ) rS   r   r   rZ   r   r  rY   abcr   rD  
storedAsks
storedBidsr   rC  keysr  keybooksidedeltasrB   payloadArray	checkAsks	checkBids
currentAskformattedAsk
currentBidformattedBidpayloadlocalChecksumerrors                                    rU   handle_order_bookkraken.handle_order_book3  s7   p 0~~gvr2tQ+!!%2OOE62.OOE62.eZ0++KvF	8/I"6*J"6*J}))*8}))*8''{;H"(h%)^^H%=Ik"$,j! FE&*oob%&@DOOF#/IF#D1c$i(1g$S>R8v;?--h? ) #)h%%&6
EJL}%f-	%f-	 q"A!%Ar!BJ#'#5#5jm#DtGYGYZdefZgGh#hL ''5 & q"A!%Ar!BJ#'#5#5jm#DtGYGYZdefZgGh#hL ''5 & ggl+G JJw6M!%dggmd6U6UV\6]&]^((5OOF+e[1y.rW   c                     [        S[        U5      5       H<  nX#   nU R                  US5      nU R                  US5      nUR                  XV5        M>     g )Nr   r]   qty)r  r  safe_numberstore)rS   r  r  jdeltar]   r\   s          rU   rr  kraken.custom_handle_deltas  sN    q#f+&AIE$$UG4E%%eU3FNN5)	 'rW   c                     UR                  S5      nU R                  US5      nU R                  USS5      nX4-   nSnXV   S:X  a  US-  nXV   S:X  a  M  US:  a  XVS  nU$ )N.r   r  rr   0)splitr   )rS   r   partsintegerdecimalsjoinedResultr  s          rU   ru  kraken.format_number  sx    

3""5!,##E1b1)o$FA o$q5'+LrW   c                     U$ r_   rb  s      rU   handle_system_statuskraken.handle_system_status  s	    6 rW   c                   #    U R                   S   S   S   nU R                  U5      nSnU R                  UR                  U5      nU R	                  5       nU R                  US5      nU R                  US5      nUb  UbE  Xx-   U::  a=  U R                  U5      I S h  vN n	U R                  U	S5      nXeS'   XSR                  U'   U R                  US5      $  N:7f)	Nr;   r*   r=   authenticatedstartexpiresr   r   )	rL   r   r   ry  secondsr  privatePostGetWebSocketsTokenr   r   )
rS   r`   r   r   r  subscriptionnowr  r  responses
             rU   r   kraken.authenticate  s     iit$Y/S!'v';';]Klln!!,8##L)< |'?eoZ]E]!??GGH  >>(H=L$'!2>  /g66 Hs   BCC;Cc                   #    U R                  5       I S h  vN   U R                  5       I S h  vN nSnUnUb  U R                  U5      nUSU-   -  nU R                  S   S   S   n	U R	                  5       n
SSUS.U
S.nUb  U R                  US	   U5      US	'   U R                  XX5      I S h  vN nU R                  (       a  UR                  X$5      nU R                  XX45      $  N N N<7f)
N
executions:r;   r*   r>   rL  rM  r   r   r`   )
r   r   rY   rL   r   rP   r   r%  r7  filter_by_symbol_since_limit)rS   rO  rY   r0  r_   r`   r   subscriptionHashr   r   r   rL  r   s                rU   watch_privatekraken.watch_private  s     !!!''))'[[(F3<'Kiit$[1OO%	!'  
	 "&"2"29X3F"OIhzz#IPP??OOF2E00NN- 	")$ Qs2   C0C*C0C,BC01C.29C0,C0.C0c                 N   #    SUS'   U R                  SXX45      I Sh  vN $  N7f)a  
watches information on multiple trades made by the user

https://docs.kraken.com/api/docs/websocket-v2/executions

:param str symbol: unified market symbol of the market trades were made in
:param int [since]: the earliest time in ms to fetch trades for
:param int [limit]: the maximum number of trade structures to retrieve
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
Tsnap_tradesmyTradesN)r  r3  s        rU   watch_my_tradeskraken.watch_my_trades  s,      !%}''
F5QQQQs   %#%c                    U R                  US/ 5      n[        U5      nUS:  Ga  U R                  c-  U R                  U R                  SS5      n[        U5      U l        U R                  n0 n[        S[        U5      5       H@  n	U R                  XI0 5      n
U R                  U
5      nUR                  U5        US   nSX'   MB     SnUR                  U R                  U5        [        UR                  5       5      n[        S[        U5      5       H)  n	US-   X   -   nUR                  U R                  U5        M+     g g )	Nr   r   rC   rA   rY   Tr  r  )r   r  r  r  rM   r   r  r   parse_ws_trader  r   listr  )rS   r   r   r  	allTradesallTradesLengthr_   r  r!  r  r   r  rY   rO  r  r   s                   rU   handle_my_tradeskraken.handle_my_trades#  s   @ NN7FB7	i.Q}}$))$,,tL *5 1]]FG1c)n-yR8,,U3f%)"& . DNN4==$/'D1c$i("Sj472t}}k: ) rW   c                 V   U R                  US5      nUb  US   nS nSU;   aK  U R                  US/ 5      nU R                  US0 5      nU R                  US5      U R                  US5      S.nU R                  US5      nU R                  US5      nUS	:X  a  S
OSn	UU R                  US5      U R                  US5      U R	                  U5      UUU R                  US5      U R                  US5      U	U R                  US5      U R                  US5      U R                  US5      US.$ )NrY   feesr   r  assetrf   currencyr   liquidity_indttakermakerexec_idr   r{   r   
last_pricelast_qtyrf   )r   r   r   r   r   rY   rZ   r   takerOrMakerr]   r\   rf   fee)r   r   r   r  r  )
rS   r   rb   rY   r  r  firstFeer   liquidityIndicatorr  s
             rU   r  kraken.parse_ws_tradeX  sG   2 !!%2H%FU?>>%4D~~dAr2H((59 ,,Xw?C ##E;7!--e_E#5#<w7""5)4%%eZ81 $$UL9$$UF3(%%e\:&&uj9$$UF3
 	
rW   c                 h   #    U R                  SXX0R                  USS05      5      I Sh  vN $  N7f)a  
watches information on multiple orders made by the user

https://docs.kraken.com/api/docs/websocket-v2/executions

:param str symbol: unified market symbol of the market orders were made in
:param int [since]: the earliest time in ms to fetch orders for
:param int [limit]: the maximum number of  orde structures to retrieve
:param dict [params]: maximum number of orderic to the exchange API endpoint
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
orderssnap_ordersTN)r  r   r3  s        rU   watch_orderskraken.watch_orders  s5      ''&TZ]jlp\qHrsssss   )202c                    U R                  US/ 5      n[        U5      nUS:  Ga  U R                  U R                  SS5      nU R                  c  [        U5      U l        U R                  n0 n[        S[        U5      5       GH  n	U R                  XI0 5      n
U R                  U
S5      nU R                  U
5      nU R                  U
S5      nU R                  UR                  U5      nU R                  X5      nUnUb)  U R                  US   US   5      nU R                  U5      n[        U5      nUU:X  a4  Uc1  US   nU R                  U R                  S0 5      nUS	   U;   a  UUS	   	 UR                  U5        Uc  GM  S
X'   GM	     SnUR                  U R                  U5        [        UR!                  5       5      n[        S[        U5      5       H*  n	US-   UU	   -   nUR                  U R                  U5        M,     g g )Nr   r   rE   rA   r   rY   r   rF   r   Tr  r  )r   r  r  rM   r  r   r  r   r   parse_ws_orderr   hashmapr   r  r   r  r  )rS   r   r   r  	allOrdersallOrdersLengthr_   r  r!  r  r   r   r  rY   previousOrderspreviousOrdernewOrdernewRawOrderlengthr  rF   rO  r  r   s                           rU   handle_orderskraken.handle_orders  s   8 NN7FB7	i.Q%%dllM4HE{{"4U;[[FG1c)n-yR8%%eZ8,,U3))%:!%!H $ C! ,"&++mF.CXfEU"VK#22;?HVU?(="1IE'+t||EWY['\$T{&66,U4[9h'%&*GO' .( DNN4;;-'D1c$i("Sj472t{{K8 ); rW   c           
         U R                  US5      SS.nU R                  US5      nU R                  US5      nU R                  0 SU R                  US5      _SU R                  US	5      _S
U_SU R                  U5      _SU_SS _SU R                  U R                  US5      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U R                  US5      _SU_SU_SU R                  US5      _SU R	                  USS5      _S U R                  US5      S US S .E5      $ )!Nfee_usd_equivUSDr  
stop_pricer   r   r   rd   order_userrefr   r   lastTradeTimestampstatusorder_statusrY   rZ   r{   rw   rx   r   r   r]   ra   	stopPricerj   rf   cum_costr\   rg   cum_qty	avg_price)filledr   	remainingr  r   )r   
safe_orderr  parse_order_statusr   )rS   r   rb   r  r  r   s         rU   r  kraken.parse_ws_order  s   R $$UO<
 $$UL9	##E;7  
$""5*5 
T--e_E 
 E 
 1	 

  
 !$ 
 d--d.>.>un.UV 
 d&&uh7 
 D$$UL9 
 4++E?C 
  
 D$$UF3 
 T%%e]; 
  
 I 
  D$$UJ7! 
" d((YG# 
$ ''{;- 
  	rW   unifiedNamechannelNamec                 b  #    U R                  5       I S h  vN   U R                  US SSS5      n/ n[        S[        U5      5       H  nU R	                  US5      nUb5  UR                  U R                  US U R                  X7   5      5      5        MM  UR                  U R                  US U R                  X7   5      5      5        M     SUUS.U R                  5       S.n	U R                  U	S   U5      U	S'   U R                  S	   S
   S   n
U R                  XXU5      I S h  vN $  GN N7f)NFTr   r+  rL  )rM  rY   r   r`   r;   r*   r?   )r   r#  r  r  r   r  r   rY   r   rP   rL   watch_multiple)rS   r  r  r!  subscriptionArgsr`   messageHashesr  eventTriggerr[   r   s              rU   r$  kraken.watch_multi_helper#  s2    !!!%%gtUD%Hq#g,'A++FODL'$$T%:%:;dkkZaZdNe%fg$$T%:%:;dkkZaZdNe%fg ( "&! oo'
 !,,WX->Giit$Z0((WUefff) 	"( gs"   D/D*DD/%D-&D/-D/c                 ,  #    U R                  5       I Sh  vN   U R                  5       I Sh  vN nSnU R                  S   S   S   nU R                  5       nSUSUS.S.nU R	                  Xa5      nU R                  XCXs5      I Sh  vN $  Nw Na N7f)	a6  
watch balance and get the amount of funds available for trading or funds locked in orders

https://docs.kraken.com/api/docs/websocket-v2/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balancesr;   r*   r>   rL  r  )rX   r   r`   )r   r   rL   r   rP   r   )rS   r`   r   r   r   r   rL  r[   s           rU   watch_balancekraken.watch_balance:  s      !!!'')) iit$[1OO%	!%
	 ""95ZZ'GGG 	") Hs2   BBBBAB	B
BBBc                 ,   U R                  US/ 5      nSU0n[        S[        U5      5       HT  nU R                  X5   S5      nU R	                  U5      nU R                  5       nU R                  X5   S5      n	XS'   XU'   MV     Sn
U R                  U5      nU R                  U R                  U
0 5      nU R                  X5      nU R                  U5      U R                  U
'   U R                  US5      nUR                  U R                  U
   U5        g )	Nr   r   r   r  balancetotalspotrM  )r   r  r  r   safe_currency_codeaccountsafe_balancer   r  rP   r   )rS   r   r   r   r   r  
currencyIdcoder  eqrZ   r  
oldBalance
newBalancerM  s                  rU   handle_balancekraken.handle_balanceS  s   , ~~gvr2(q#d)$A))$'7;J**:6DllnG!!$'95B!G"4L % ##F+__T\\4<
%%j:
!..z:T""7I6t||D)73rW   unifiedElementNamesubChannelNamec                 R    US LnUnU(       d  US-  nOUSU-   -  nUb  USU-   -  nU$ )Ns@#r  )rS   r  r  rY   
withSymbolr   s         rU   r   kraken.get_message_hashz  sI     4'
(3K3<'K%3//KrW   c                 L    U R                  US5      nUb  X!R                  U'   g g )N	channelID)r   ry  )rS   r   r   	channelIds       rU   handle_subscription_status!kraken.handle_subscription_status  s/    0 $$Wk:	 .5  + !rW   c                     U R                  USS5      nUbf  U R                  USS5      nU R                  S   S   nU R                  XS5      nS nUc  [        U5      nO
XV   " U5      nUb  UR	                  Xt5        gg)	NerrorMessager  r   r   r*   rJ   FT)r   rO   find_broadly_matched_keyr   rz  )rS   r   r   r  r   rJ   broadKey	exceptions           rU   handle_error_messagekraken.handle_error_message  s    ( ))'>7K#**7GXFIOOD)'2E44UIHI),7	!OL9	$i3rW   c           	         U R                  US5      nUb  US:X  aB  U R                  US/ 5      nU R                  US0 5      nU R                  US5      nUS:X  a  SOSnU R                  U R                  U R
                  U R                  U R                  U R                  U R                  S	.nU R                  Xs5      nUb  U" X5        U R                  X5      (       a  U R                  US
S5      n	U R                  U R                  U R                  U R                   U R                   U R"                  U R$                  U R&                  S.nU R                  Xy5      nUb	  U" X5        g g g )NrM  r  r   r   	exec_typer   r  r  )r  rE  rK  r   r   r  r  r[  rX   )rf  systemStatussubscriptionStatusr   r   r   r   pong)r   r   r   r  r  r  r   r	  r  r  r   r!  r   rj  r  r  r   r   r   rc  )
rS   r   r   rM  r   r  execTypemethodsrX   r[  s
             rU   handle_messagekraken.handle_message  sf   ""7I6,&~~gvr:tQ3++E;?)1W)<*8 //..)),,++ 11,,	G __W6F!v'$$V55&&wBE!22 $ 9 9&*&E&E!::#<< $ 8 8";;((	G __W4F!v' " 6rW   )r  r  r_  )NN)H__name__
__module____qualname____firstlineno__r   rR   strdictr
   r   r   r   floatr   r   r   r   r   r   r   r   r   r   r   r   r   r	  r  r   r   r  r   r   r  r.  r	   r   r4  r2  r   r=  r<  r  rP  r   rG   rc  rg  rj  r  rr  ru  r  r   r  r  r  r  r  r  r  r$  r   r  r  r   r  r   r!  r*  __static_attributes____classcell__)rT   s   @rU   r&   r&      s   j# jX nrz| w!s w!C w!s w!T w![^ w!gj w!r pt|~  ]C  ]y  ]	  ][`  ]il  ]  DI  ]D+@ im{  IK ]c ]3 ]i ]y ]be ]ux ]  PU ]@ DHPR ]$s) ]S ]8 <@ ] ]S ]u ]8'  8<B ] ]4PU; ]4' 8,t,F ,B4,6 4,l 68  F  6:" E7 E E& 8<B FW F7 F( <@d[] S SS S Sbfglbm S OSaenp Sd3i S S[^ Suyz  vA S& @DB PS P PS\ P SW_a !$s) !C !fo !( ?CQUdhqs !R !R !R3 !R^a !Rx|  ~B  yC !RF ).b 6 &  ,. ,'v 't/ t/l* 
6 : )+ 72 7;\`ik O O3 OVY O2 37TX\eg RC Rs RRU Rlpqvlw R3;v 3;j5
n 04$UYbd t tC ts timnsit t=9F =9~EN _cuy  CE gC gc gT[ g. *, H H2%4V %4N3  \_ 6 6@!6 !t !F#(V #( #(rW   r&   ),ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   r   r   ccxt.base.typesr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   !ccxt.async_support.base.ws.clientr   typingr   ccxt.base.errorsr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   ccxt.base.preciser$   async_supportr&   r  rW   rU   <module>r>     su     f f H  H  H  H 4  * 0 - - . ' & . ) * ) . 1 * %Q(T&& Q(rW   