
    ":h                         d dl Zd dlmZmZmZmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ  G d dej0                  j2                        Zy)    N)
ArrayCacheArrayCacheBySymbolByIdArrayCacheBySymbolBySideArrayCacheByTimestamp)AnyBalancesBoolIntMarketOrder	OrderBookPositionStrStringsTickerTrade)Client)Listc            
       *    e Zd Zdef fdZi fdededefdZd Zd Z	d	d
d
i fdede
de
dee   fdZdefdZd*dedefdZi fdedefdZdefdZd
d
i fdede
de
dee   fdZdefdZd
i fdede
defdZdefdZd
d
d
i fdede
de
dee   fdZdefdZd*dededefdZd
d
d
i fdede
de
dee   fdZ i fdefdZ!d*defdZ"d
d
d
i fde#de
de
dee$   fd Z%defd!Z&d*dede$fd"Z'i fde(fd#Z)defd$Z*d% Z+defd&Z,i fd'Z-i fd(Z.defd)Z/ xZ0S )+hashkeyreturnc                     | j                  t        t        |          ddddddddddd
dddddd	d
dididd ddddddid      S )NTF)
wswatchBalancewatchMyTrades
watchOHLCVwatchOrderBookwatchOrderswatchTickerwatchTradeswatchTradesForSymbolswatchPositionsapiz(wss://stream-glb.hashkey.com/quote/ws/v1z&wss://stream-glb.hashkey.com/api/v1/ws)publicprivater   z/wss://stream-glb.sim.hashkeydev.com/quote/ws/v1z-wss://stream-glb.sim.hashkeydev.com/api/v1/ws)r   test6 )fetchBalanceSnapshotawaitBalanceSnapshot)listenKeyRefreshRate	listenKeyr   	keepAlivei'  )hasurlsoptions	streaming)deep_extendsuperr   describe)self	__class__s    J/var/www/html/turnos/venv/lib/python3.12/site-packages/ccxt/pro/hashkey.pyr3   zhashkey.describe   s    gt = ? $!%""&###)."' "L#K
 &W'V )0!,0,1! UG&B
 & &	    markettopicmessageHashc                    K   |d   |dd}| j                   d   d   d   }| j                  ||| j                  ||      |       d {   S 7 w)Nidsub)symbolr9   eventr#   r   r$   )r.   watchr1   )r4   r8   r9   r:   paramsrequesturls          r6   wath_publiczhashkey.wath_public8   s]     Tl

 iit$X.ZZ[$2B2B7F2SU`aaaas   AAA	Ac                    K   | j                          d {   }| j                  |      }| j                  ||d |       d {   S 7 17 wN)authenticateget_private_urlr@   )r4   r:   r+   rC   s       r6   watch_privatezhashkey.watch_privateA   sH     ++--	""9-ZZ[$DDD .Ds!   AA,AA
A
Ac                 8    | j                   d   d   d   dz   |z   S )Nr#   r   r%   /)r.   )r4   r+   s     r6   rH   zhashkey.get_private_urlF   s%    yy%i036BBr7   1mNr>   sincelimitc                 f  K   | j                          d{    | j                  |      }|d   }| j                  | j                  ||      }d|z   }d|z   dz   |z   }	| j	                  |||	|       d{   }
| j
                  r|
j                  ||      }| j                  |
||dd      S 7 7 9w)a  
        watches historical candlestick data containing the open, high, low, and close price, and the volume of a market

        https://hashkeyglobal-apidoc.readme.io/reference/websocket-api#public-stream

        :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
        :param bool [params.binary]: True or False - default False
        :returns int[][]: A list of candles ordered, open, high, low, close, volume
        Nr>   kline_ohlcv::r   T)load_marketsr8   safe_string
timeframesrD   
newUpdatesgetLimitfilter_by_since_limit)r4   r>   	timeframerM   rN   rA   r8   intervalr9   r:   ohlcvs              r6   watch_ohlcvzhashkey.watch_ohlcvI   s      !!!V$!##DOOY	J8#'#-	9&&vuk6JJ??NN651E))%q$GG 	" Ks"   B1B-AB15B/68B1/B1clientc                    | j                  |d      }| j                  |      }| j                  ||      }|| j                  vri | j                  |<   | j	                  |d      }| j                  |d      }| j                  |      }|| j                  |   vr8| j                  | j                  dd      }	t        |	      | j                  |   |<   | j                  |dg       }
| j                  |   |   }t        dt        |
            D ]8  }| j	                  |
|i       }| j                  ||      }|j                  |       : d|z   d	z   |z   }|j                  ||       y )
Nr>   rA   	klineType
OHLCVLimit  datar   rQ   rR   )rT   safe_marketsafe_symbolohlcvs	safe_dictfind_timeframesafe_integerr/   r   	safe_listrangelenparse_ws_ohlcvappendresolve)r4   r]   messagemarketIdr8   r>   rA   r_   rY   rN   rb   storedicandleparsedr:   s                   r6   handle_ohlcvzhashkey.handle_ohlcvb   sX   6 ##GX6!!(+!!(F3$++%"$DKK2$$V[9	''	2	T[[00%%dllL$GE-B5-IDKK	*~~gvr2V$Y/q#d)$ 	"A^^D!R0F((8FMM&!	" '#-	9v{+r7   c           	          | j                  |d      | j                  |d      | j                  |d      | j                  |d      | j                  |d      | j                  |d      gS )Ntohlcv)rh   safe_number)r4   r[   r8   s      r6   rl   zhashkey.parse_ws_ohlcv   sn     eS)UC(UC(UC(UC(UC(
 	
r7   c                    K   | j                          d{    | j                  |      }|d   }d}d|z   }| j                  ||||       d{   S 7 =7 w)a*  
        watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

        https://hashkeyglobal-apidoc.readme.io/reference/websocket-api#public-stream

        :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 bool [params.binary]: True or False - default False
        :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
        Nr>   	realtimesticker:)rS   r8   rD   )r4   r>   rA   r8   r9   r:   s         r6   watch_tickerzhashkey.watch_ticker   sg      !!!V$!&(%%fe[&III 	"
 Js!   AA8AAAAc                     | j                  |dg       }| j                  | j                  |d            }|d   }d|z   }|| j                  |<   |j	                  | j                  |   |       y )Nrb   r   r>   r   )ri   parse_tickerrf   tickersrn   )r4   r]   ro   rb   tickerr>   r:   s          r6   handle_tickerzhashkey.handle_ticker   sj    : ~~gvr2""4>>$#:;!&(%Vt||F+[9r7   c                   K   | j                          d{    | j                  |      }|d   }d}d|z   }| j                  ||||       d{   }| j                  r|j	                  ||      }| j                  |||dd      S 7 p7 9w)a  
        watches information on multiple trades made in a market

        https://hashkeyglobal-apidoc.readme.io/reference/websocket-api#public-stream

        :param str symbol: unified market symbol of the market trades were made in
        :param int [since]: the earliest time in ms to fetch orders for
        :param int [limit]: the maximum number of trade structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param bool [params.binary]: True or False - default False
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
        Nr>   tradetrades:	timestampT)rS   r8   rD   rV   rW   rX   )	r4   r>   rM   rN   rA   r8   r9   r:   tradess	            r6   watch_tradeszhashkey.watch_trades   s      !!!V$!&(''{FKK??OOFE2E))&%TRR 	"
 Ls!   BB8BB	8B	Bc                    | j                  |d      }| j                  |      }|d   }|| j                  vr5| j                  | j                  dd      }t        |      | j                  |<   | j                  |   }| j                  |d      }|a| j                  |d      }t        dt        |            D ]7  }	| j                  ||	      }
| j                  |
|      }|j                  |       9 d|z   }|j                  ||       y )Nr>   tradesLimitra   rb   rw   r   r   )rT   rc   r   rh   r/   r   ri   sort_byrj   rk   rf   parse_ws_traderm   rn   )r4   r]   ro   rp   r8   r>   rN   rq   rb   rr   r   rt   r:   s                r6   handle_tradeszhashkey.handle_trades   s    2 ##GX6!!(+!$++%%%dllM4HE",U"3DKKV$~~gv.<<c*D1c$i( &tQ/,,UF;f%& %v-v{+r7   c                    K   | j                          d{    | j                  |      }|d   }d}d|z   }| j                  ||||       d{   }|j                         S 7 M7 w)aK  
        watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

        https://hashkeyglobal-apidoc.readme.io/reference/websocket-api#public-stream

        :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
        Nr>   depth
orderbook:)rS   r8   rD   rN   )r4   r>   rN   rA   r8   r9   r:   	orderbooks           r6   watch_order_bookzhashkey.watch_order_book  ss      !!!V$!"V+**65+vNN	   	"
 Os!   A(A$8A(A&A(&A(c                    | j                  |d      }| j                  |      }d|z   }|| j                  vr| j                  i       | j                  |<   | j                  |   }| j	                  |dg       }| j                  |d      }| j                  |d      }	| j                  |||	dd      }
|j                  |
       | j                  |d      |d	<   || j                  |<   |j                  ||       y )
Nr>   r   rb   r   rw   bar<   nonce)
rT   rd   
orderbooks
order_bookri   rf   rh   parse_order_bookresetrn   )r4   r]   ro   rp   r>   r:   r   rb   	dataEntryr   snapshots              r6   handle_order_bookzhashkey.handle_order_book1  s    < ##GX6!!(+"V+$//)&*oob&9DOOF#OOF+	~~gvr2NN4+	%%i5	((FIsCP!!..w=	'"+y+.r7   c                   K   | j                          d{    d}|| j                  |      }|dz   |z   }| j                  |       d{   }| j                  r|j	                  ||      }| j                  ||||d      S 7 m7 9w)aD  
        watches information on multiple orders made by the user

        https://hashkeyglobal-apidoc.readme.io/reference/websocket-api#private-stream

        :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 order structures to retrieve
        :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>`
        NordersrR   T)rS   r>   rI   rV   rW   filter_by_symbol_since_limit)r4   r>   rM   rN   rA   r:   r   s          r6   watch_orderszhashkey.watch_orders^  s      !!![[(F%+f4K))+66??OOFE2E00tTT 	"
 7!   BB5BB8BBc                 8   | j                   -| j                  | j                  dd      }t        |      | _         | j	                  |      }| j                   }|j                  |       d}|j                  ||       |d   }|dz   |z   }|j                  ||       y )NordersLimitra   r   r>   rR   )r   rh   r/   r   parse_ws_orderrm   rn   )	r4   r]   ro   rN   rt   r   r:   r>   symbolSpecificMessageHashs	            r6   handle_orderzhashkey.handle_ordert  s    H ;;%%dllM4HE07DK$$W-fv{+!$/#$5$>!v89r7   orderc                 $   | j                  |d      }| j                  ||      }| j                  |d      }| j                  |d      }d }| j	                  |      \  }}| j                  | j                  |d            }| j                  |d      }d }	| j                  ||      \  }}}	|d   rd }| j                  i d| j                  |d      d	| j                  |d
      d| j                  |      d|dd dd d| j                  | j                  |d            d|d   d|d|d|d| j                  |d      d| j                  |d      d| j                  | j                  |d            d| j                  |d      d| j                  |d      dd d d d | j                  | j                  |d             d | j                  | j                  |d!            | j                  | j                  |d"            d#||	|d$	|      S )%NsOSrx   fcontractr<   rr   clientOrderIdr{   datetimer   lastTradeTimestamplastUpdateTimestampstatusXr>   typetimeInForcesidepricepaverageVamountqfilledz	remainingr	stopPriceZNn)currencyr   )	triggerPricetakeProfitPricestopLossPricecostr   fee
reduceOnlypostOnlyinfo)rT   rc   rh   safe_string_lowerparseOrderSideAndReduceOnlyparseOrderType$parseOrderTypeTimeInForceAndPostOnly
safe_orderiso8601parse_order_status	omit_zerosafe_currency_code)
r4   r   r8   rp   r   r   r   r   r   r   s
             r6   r   zhashkey.parse_ws_order  s   ##E3/!!(F3%%eS1	%%eS1
;;DAj""4#3#3E3#?@&&uc2&*&O&OPTVa&b#k8*D  
$""5#. 
T--eS9 
 Y/ 
 	 

 !$ 
 "4 
 d--d.>.>uc.JK 
 fX& 
 D 
 ; 
 D 
 T%%eS1 
 t''s3 
 dnnT%5%5eS%AB 
 d&&uc2 
  ))%5! 
" # 
$ !#!NN4#3#3E3#?@ 33D4D4DUC4PQ..)9)9%)EF % ; 
< = 	r7   c                   K   | j                          d{    d}|| j                  |      }|d|z   z  }| j                  |       d{   }| j                  r|j	                  ||      }| j                  |||dd      S 7 m7 9w)aD  
        watches information on multiple trades made by the user

        https://hashkeyglobal-apidoc.readme.io/reference/websocket-api#private-stream

        :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>`
        NmyTradesrR   r   T)rS   r>   rI   rV   rW   rX   )r4   r>   rM   rN   rA   r:   r   s          r6   watch_my_tradeszhashkey.watch_my_trades  s      !!! [[(F3<'K))+66??OOFE2E))&%TRR 	"
 7r   c                 F   | j                   -| j                  | j                  dd      }t        |      | _         | j                   }| j	                  |      }|j                  |       || _         d}|j                  ||       |d   }|dz   |z   }	|j                  ||	       y )Nr   ra   r   r>   rR   )r   rh   r/   r   r   rm   rn   )
r4   r]   ro   subscriptionrN   tradesArrayrt   r:   r>   r   s
             r6   handle_my_tradezhashkey.handle_my_trade  s    " == %%dllM4HE259DMmm$$W-6"# {K0!$/#$5$>!{$=>r7   c                    | j                  |d      }| j                  ||      }| j                  |d      }| j                  |d      }d }||rd}nd}| j	                  | j                  |dd      || j                  |      |d   | j                  |d	      | j                  |d
      | j                  |d      d |d | j                  |d      d |d|      S )Nr   rw   mmakertakerr|   Tr>   r   r   r   rx   )r<   r   r   r>   r   r   r   r   takerOrMakerr   r   r   r   )rT   rc   rh   	safe_bool
safe_tradesafe_string_2r   r   )r4   r   r8   rp   r   isMakerr   s          r6   r   zhashkey.parse_ws_trade  s    6 ##E3/!!(F3%%eS1	.., &&$$UC5"Y/X&**5#6%%eS1&&uc2(%%eS1 
  	r7   symbolsc                   K   | j                          d{    | j                          d{   }| j                  |      }d}g }||j                  |       n6t	        dt        |            D ]  }||   }	|j                  |dz   |	z            | j                  |      }
| j                  |
|d|       d{   }| j                  r|S | j                  | j                  |||d      S 7 7 7 5w)a7  

        https://hashkeyglobal-apidoc.readme.io/reference/websocket-api#private-stream

        watch all open positions
        :param str[] [symbols]: list of unified market symbols to watch positions for
        :param int [since]: the earliest time in ms to fetch positions for
        :param int [limit]: the maximum number of positions to retrieve
        :param dict params: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
        N	positionsr   rR   T)rS   rG   market_symbolsrm   rj   rk   rH   watch_multiplerV   filter_by_symbols_since_limitr   )r4   r   rM   rN   rA   r+   r:   messageHashesrr   r>   rC   r   s               r6   watch_positionszhashkey.watch_positions:  s      !!!++--	%%g.!?  -1c'l+ A $$[3%6%?@A ""9---c=$VV	??11$..'5RWY]^^ 	"- Ws2   C2C,C2C.BC2:C0;2C2.C20C2c                     | j                   t               | _         | j                   }| j                  |      }|j                  |       d}|j	                  ||       |d   }|j	                  ||dz   |z          y )Nr   r>   rR   )r   r   parse_ws_positionrm   rn   )r4   r]   ro   r   rt   r:   r>   s          r6   handle_positionzhashkey.handle_positionW  st    , >>!57DNNN	''0 !v{+!v{S069:r7   c                    | j                  |d      }| j                  |      }| j                  |d      }| j                  i d|d   dd d|d| j	                  |      d| j                  |d      d	d d
| j                  |d      d| j                  |d      d| j                  |d      d| j                  |d      d| j                  |d      dd d| j                  |d      dd d| j                  |d      d| j                  |d      dd| j                  |d      d | j                  |d      d d d d d d d |d       S )!Nr   Er>   r<   r   r   	contractsPcontractSizer   r   notionalpvleverager|   unrealizedPnluprealizedPnlr   
collateral
entryPricer   	markPriceliquidationPricer   
marginModemthedgedTmmr   )maintenanceMarginmaintenanceMarginPercentageinitialMargininitialMarginPercentagemarginRatior   	lastPricer   r   
percentager   )rT   rc   rh   safe_positionr   r}   r   )r4   positionr8   rp   r   s        r6   r   zhashkey.parse_ws_positionw  s   ##Hc2!!(+%%h4	!! #
fX&#
$#
 #
 Y/	#

 ))(C8#
 D#
 D**8S9#
 ((48#
 ))(C8#
 T--h=#
 4++Hc:#
 $#
 $**8S9#
 #
  0 03 ?#
  $004@!#
" d##
$ "&!1!1(D!A+/!--h<'+#'!#9#
  	r7   c                 $  K   | j                          d{   }| j                          d{    d}| j                  dd||      \  }}d|z   }| j                  |      }| j	                  |      }| j                  |||       d}d}| j                  | j                  ddd      \  }}| j                  | j                  ddd      \  }}|r|r|j                  |d	z          d{    | j                  ||d|       d{   S 7 7 7 $7 
w)
a  
        watch balance and get the amount of funds available for trading or funds locked in orders

        https://hashkeyglobal-apidoc.readme.io/reference/websocket-api#private-stream

        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param str [params.type]: 'spot' or 'swap' - the type of the market to watch balance for(default 'spot')
        :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
        Nspotr   balance:r(   Tr)   Fz:fetchBalanceSnapshot)
rG   rS   handle_market_type_and_paramsrH   r]   set_balance_cachehandle_option_and_paramsr/   futurer@   )	r4   rA   r+   r   r:   rC   r]   r(   r)   s	            r6   watch_balancezhashkey.watch_balance  s,     ++--	!!!99.$PVX\]f 4'""9-S!vt[9##'+'D'DT\\Sacy{  (A$f'+'D'DT\\Sacy  |A  (B$f$8--'> >???ZZ[$DDD .! @DsD   DDDD
B8D'D(DDD
DDDc                 ,   ||j                   v ry | j                  | j                  d      }| j                  |dd      }|rE|dz   dz   }||j                  vr/|j                  |       | j                  | j                  |||       i | j                  |<   y )Nr   r(   TrR   )	subscriptionsrf   r/   r   futuresr  spawnload_balance_snapshotbalance)r4   r]   r   subscribeHashr/   r   r:   s          r6   r  zhashkey.set_balance_cache  s    F000..~>>>'+A4H*'==K6>>1k*

455v{DQTr7   c                 <  K   | j                  d|i       d {   }| j                  || j                  | j                  |i             | j                  |<   |j                  |   }|j                          |j                  | j                  |   d|z          y 7 w)Nr   r  )fetch_balanceextend
safe_valuer!  r  rn   )r4   r]   r:   r   responser  s         r6   r   zhashkey.load_balance_snapshot  s     ++VTN;;![[4??4<<QUWY3Z[T,t||D):+<= <s   BBBBc                 b   | j                  |d      }| j                  |dg       }| j                  |d      }|dk(  }|rdnd}|| j                  vri | j                  |<   || j                  |   d<   | j                  |d      }| j	                  |      }	| j                         }
| j                  |d	      |
d
<   | j                  |d      |
d<   |
| j                  |   |	<   | j                  | j                  |         | j                  |<   d|z   }|j                  | j                  |   |       y )NeBr   outboundAccountInfor  swapr   r   r   freerz   usedr  )rT   ri   rf   r!  r   accountsafe_balancern   )r4   r]   ro   r?   rb   balanceUpdateisSpotr   
currencyIdcoder/  r:   s               r6   handle_balancezhashkey.handle_balance  s(   &   #.~~gsB/tQ///vV$!#DLL%,T6"%%mS9
&&z2,,.**=#>**=#>#*T4 !..t||D/ABT 4't||D);7r7   c                 <  K   | j                  | j                  d      }||S | j                  |       d {   }| j                  |d      }|| j                  d<   | j                  | j                  dd      }| j	                  || j
                  ||       |S 7 bw)Nr+   r*   r'   )rT   r/   privatePostApiV1UserDataStreamrh   delaykeep_alive_listen_key)r4   rA   r+   r'  r*   s        r6   rG   zhashkey.authenticate  s     $$T\\;?	 <<VDD $$X{;	$-[!#00?UW^_

')C)CYPVW Es   5BBA#Bc                   K   |y d|i}	 | j                  | j                  ||             d {    | j                  | j                  dd      }| j	                  || j
                  ||       y 7 @# t        $ rY}| j                  |      }| j                  |      }d | j                  d<   |j                  |       | j                  |= Y d }~y d }~ww xY ww)Nr+   r*   iO )privatePutApiV1UserDataStreamr%  rh   r/   r8  r9  	ExceptionrH   r]   rejectclients)r4   r+   rA   rB   r*   errorrC   r]   s           r6   r9  zhashkey.keep_alive_listen_key  s     
		"44T[[&5QRRR#'#4#4T\\CY[b#c JJ+T-G-GTZ[ S  	"&&y1C[[%F(,DLL%MM% S!	"s?   C$A2 A0?A2 /C0A2 2	C;AC
CCCc                    t        |t              r| j                  |di       }| j                  |dd      }|dk(  r| j	                  ||       y |dk(  r| j                  ||       y |dk(  r| j                  ||       y |dk(  r| j                  ||       y |dk(  s|d	k(  r| j                  ||       y |d
k(  r| j                  ||       y |dk(  r| j                  ||       y |dk(  s|dk(  r| j                  ||       y y )Nr   r9   r)  kliner   r   r   contractExecutionReportexecutionReport
ticketInfooutboundContractPositionInfor+  outboundContractAccountInfo)
isinstancelistrf   r   ru   r   r   r   r   r   r   r5  )r4   r]   ro   r9   s       r6   handle_messagezhashkey.handle_message  s   gt$nnWa4G""7GS9Gfg.k!vw/gvw/g""67300e?P6Pfg.l"  144  1,,%;X2X0 3Yr7   rF   )1__name__
__module____qualname__r   r3   r   strrD   rI   rH   r
   r   rH  r\   r   ru   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   dictr   r   r   r   r   r   r   r   r   r   r  r  r   r5  rG   r9  rI  __classcell__)r5   s   @r6   r   r      s   '# 'R VX b bs b bE
C 8<$]ajl H HC HWZ Hquvzq{ H2-,6 -,^
F 
d 
, 68 J JF J$":F ":H <@d[] S SS S Sbfglbm S.(,F (,T @DB !S ! !S\ !&+/ +/Z 04$UYbd U UC Us Uimnsit U,.:6 .:`+D +& +E +Z 37TX\eg SC Ss SRU Slpqvlw S, EG ?f ?<3E 3j 8<$]ajl _W _C _WZ _quv~q _:;f ;@!& !H !F *, E E4
  
 >#8V #8J )+   =? ""1V 1r7   r   )ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   r   r   r   ccxt.base.typesr   r   r	   r
   r   r   r   r   r   r   r   r   !ccxt.async_support.base.ws.clientr   typingr   async_supportr    r7   r6   <module>rX     sB     A  A u u u u 4 U1d  (( U1r7   