
    E#iaN                    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CurrencyDepositAddressIntLedgerEntryMarketNumOrder	OrderBook	OrderSide	OrderTypeStrStringsTickerTickersTradeTransactionTransferEntry)List)ExchangeError)AuthenticationError)PermissionDenied)AccountSuspended)
BadRequest)	BadSymbol)InsufficientFunds)InvalidOrder)OrderNotFound)OrderImmediatelyFillable)RateLimitExceeded)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S\4S jr	SSS0 4S\
S\S	\S\\   4S
 jjrSGS\S\S\4S jjrSSS0 4S\
S\S	\4S jjrS\4S jr0 4S\4S jjrS0 4S\S	\S\4S jjrSGS\S\S\4S jjr0 4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SGS\S\S\4S jjr S r!SGS\S\"4S jjr#SSS0 4S\S\S\S	\S\\"   4
S  jjr$SGS!\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%\)S&\*S'\+4
S( jjr,S0 4S)\S\
4S* jjr-S\S\.4S+ jr/SGS\S\04S, jjr10 4S\S\04S- jjr2S0 4S.\S\\0   4S/ jjr30 4S\S&\*S0\S1\S\44
S2 jjr5SGS3\S\S\44S4 jjr6S5\
S\
4S6 jr7S0 4S\S&\*S7\S8\
S\84
S9 jjr9SGS:\S\S\84S; jjr:S<S=0 SS4S> jr;S?\<S@\SA\SB\SC\SD\4SE jr=SFr>U =r?$ )Hzonda   returnc           (        > U R                  [        [        U ]  5       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	_S(S _E0 S)S	_S*S	_S+S	_S,S	_S-S	_S.S	_S/S	_S0S	_S1S	_S2S	_S3S	_S4S_S5S	_S6S	_S7S	_S8S	_S9S	_E0 S:S	_S;S	_S<S	_S=S	_S>S	_S?S_S@S	_SAS	_SBS	_SCS	_SDS	_SES_SFS_SGS	_SHS	_SIS	_SJS	_E0 SKS_SLS	_SMS	_SNS_SOS	_SPS	_SQS	_SRS	_SSS	_STS	_SUS	_SVS	_SWS	_SXS	_SYS_SZS_S[S	_E0 S\S_S]S	_S^S	_S_S	_S`S	_SaS _SbS	_ScS	_SdS	_SeS	_SfS _SgS	_ShS	_SiS	_SjS	_SkS	_SlS	_ES	S	SSSm.ESnSoSpSqSrSsStSuSvSwSxSySzS{.S|S}S~SSSSSS.SS/SSS.S/ SQ0S/ SQ0S/ SQ0/ SQ/ SQSS/S/S.S.U R	                  S5      U R	                  S5      SS	S.U R	                  S5      U R	                  S5      SSU R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      //U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      /U R	                  S5      U R	                  S5      //S.S.S0 0S.SS/ SQSS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 SSS	S.S S	SS	S	S	S.S S SS 0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.ESS0S.5      $ )Nr)   ZondaEE  CORSTspotmarginFswapfutureoption	addMarginborrowCrossMarginborrowIsolatedMarginborrowMargincancelAllOrderscancelOrdercancelOrderscloseAllPositionsclosePositioncreateDepositAddresscreateOrdercreateReduceOnlyOrderfetchAllGreeksfetchBalancefetchBorrowInterestfetchBorrowRatefetchBorrowRateHistoriesfetchBorrowRateHistoryfetchBorrowRatesfetchBorrowRatesPerSymbolfetchCrossBorrowRatefetchCrossBorrowRatesfetchCurrenciesfetchDepositfetchDepositAddressfetchDepositAddressesfetchDepositAddressesByNetworkfetchDepositsfetchFundingHistoryfetchFundingIntervalfetchFundingIntervalsfetchFundingRatefetchFundingRateHistoryfetchFundingRatesfetchGreeksfetchIndexOHLCVfetchIsolatedBorrowRatefetchIsolatedBorrowRatesfetchIsolatedPositionsfetchLedgerfetchLeveragefetchLeveragesfetchLeverageTiersfetchLiquidationsfetchLongShortRatiofetchLongShortRatioHistoryfetchMarginAdjustmentHistoryfetchMarginModefetchMarginModesfetchMarketLeverageTiersfetchMarketsfetchMarkOHLCVfetchMarkPricefetchMarkPricesfetchMyLiquidationsfetchMySettlementHistoryfetchMyTrades
fetchOHLCVfetchOpenInterestfetchOpenInterestHistoryfetchOpenInterestsfetchOpenOrderfetchOpenOrdersfetchOptionfetchOptionChainfetchOrderBookfetchOrderBooksfetchPositionfetchPositionHistoryfetchPositionModefetchPositionsfetchPositionsForSymbolfetchPositionsHistoryfetchPositionsRiskfetchPremiumIndexOHLCVfetchSettlementHistoryfetchTickerfetchTickers	fetchTimefetchTradesfetchTradingFeefetchTradingFeesfetchTransactionFeefetchTransactionFeesfetchTransactionsfetchTransferfetchUnderlyingAssetsfetchVolatilityHistoryfetchWithdrawalfetchWithdrawalsreduceMarginrepayCrossMarginrepayIsolatedMarginrepayMarginsetLeverage	setMargin)setMarginModesetPositionModetransferwithdraw6018030090018003600720014400216004320086400259200604800)1m3m5m15m30m1h2h4h6h12h1d3d1wzzondacrypto.exchangez-https://auth.zondaglobal.com/ref/jHlbB4mIkdS1zdhttps://user-images.githubusercontent.com/1294454/159202310-a0e38007-5e7c-4ba9-a32f-c8263a0291fe.jpgzhttps://zondaglobal.comzhttps://{hostname}/API/Publicz-https://{hostname}/API/Trading/tradingApi.phpzhttps://api.{hostname}/rest)publicprivatev1_01Publicv1_01Privatez"https://docs.zondacrypto.exchange/z https://github.com/BitBayNet/APIz2https://zondaglobal.com/en/helpdesk/zonda-exchangez1https://zondaglobal.com/legal/zonda-exchange/fees)referrallogowwwapidocsupportfeesget)z{id}/allz{id}/marketz{id}/orderbookz{id}/tickerz{id}/tradespost)	infotradecancel	orderbookordersr   r   historytransactions)ztrading/tickerztrading/ticker/{symbol}ztrading/statsztrading/stats/{symbol}ztrading/orderbook/{symbol}ztrading/transactions/{symbol}z,trading/candle/history/{symbol}/{resolution})z&api_payments/deposits/crypto/addresseszpayments/withdrawal/{detailId}zpayments/deposit/{detailId}ztrading/offerztrading/stop/offertrading/config/{symbol}ztrading/history/transactionszbalances/BITBAY/historybalances/BITBAY/balancez#fiat_cantor/rate/{baseId}/{quoteId}zfiat_cantor/historyz>client_payments/v2/customer/crypto/{currency}/channels/depositzAclient_payments/v2/customer/crypto/{currency}/channels/withdrawalz.client_payments/v2/customer/crypto/deposit/feez1client_payments/v2/customer/crypto/withdrawal/fee)
ztrading/offer/{symbol}ztrading/stop/offer/{symbol}r   r   z7balances/BITBAY/balance/transfer/{source}/{destination}zfiat_cantor/exchangezapi_payments/withdrawals/cryptozapi_payments/withdrawals/fiatz*client_payments/v2/customer/crypto/depositz-client_payments/v2/customer/crypto/withdrawalz*trading/offer/{symbol}/{id}/{side}/{price}z/trading/stop/offer/{symbol}/{id}/{side}/{price}zbalances/BITBAY/balance/{id})r   r   deleteputz0.0z0.001)makertaker
percentage	tierBasedz0.0030z0.00430z0.00421250z0.00413750z0.00407500z0.003910000z0.003815000z0.003720000z0.003625000z0.003537500z0.003450000z0.003375000z0.0032100000z0.0031150000200000z0.0029250000z0.0028375000z0.0027500000z0.0026625000z0.0025875000z0.0024z0.0023z0.0022z0.0021z0.0020z0.0019z0.0018z0.0017)r   r   )r   r   r   r   tiersr   )tradingfiatfunding!v1_01PublicGetTradingTickerSymbolv1_01PublicGetTradingTicker)EURUSDGBPPLNfillResponseFromRequest)fetchTickerMethodfetchTickersMethodfiatCurrenciesr   )IOCFOKPOGTD)
marginModetriggerPricetriggerDirectiontriggerPriceTypestopLossPricetakeProfitPriceattachedStopLossTakeProfittimeInForcehedgedtrailingleveragemarketBuyByCostmarketBuyRequiresPriceselfTradePreventionicebergi )r   limitdaysBack	untilDayssymbolRequiredd   )r   r  triggerr   r  r  )	sandboxr@   createOrdersrn   
fetchOrderrt   fetchOrdersfetchClosedOrdersro   )linearinverse)r1   r3   r4   400401402403404405406408501502503504505506509510FUNDS_NOT_SUFFICIENT)"OFFER_FUNDS_NOT_EXCEEDING_MINIMUMSOFFER_NOT_FOUND&OFFER_WOULD_HAVE_BEEN_PARTIALLY_FILLEDACTION_LIMIT_EXCEEDEDUNDER_MAINTENANCEREQUEST_TIMESTAMP_TOO_OLDPERMISSIONS_NOT_SUFFICIENTINVALID_STOP_RATETIMEOUTRESPONSE_TIMEOUTACTION_BLOCKEDINVALID_HASH_SIGNATUREGGCzGlobal Game Coin)idname	countries	rateLimithas
timeframeshostnameurlsr   r   optionsfeaturesprecisionMode
exceptionscommonCurrencies)deep_extendsuperr)   describeparse_numberr&   r   r    r   r   r%   r   r   r!   r"   r#   r$   r   )self	__class__s    D/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/zonda.pyr>  zonda.describe   s   eT ; =kkk %k 	k
 %k %k Uk $Uk 'k k "5k tk k $Uk  k  '!k" t#k$ (%k& !%'k( )k* &u+k, "5-k. +E/k0 )%1k2 #E3k4 ,U5k6 '7k8 (9k: "5;k< =k> &t?k@ (AkB 1%CkD  EkF &uGkH 'IkJ (KkL #EMkN *5OkP $UQkR uSkT "5UkV *5WkX +EYkZ )%[k\ t]k^  _k` !%akb %eckd $Uekf &ugkh -eikj /kkl "5mkn #Eokp +Eqkr skt !%ukv !%wkx "5ykz &u{k| +E}k~  k@ dAkB $UCkD +EEkF %eGkH !%IkJ "4KkL uMkN #EOkP !$QkR "5SkT  UkV 'WkX $UYkZ !%[k\ *5]k^ (_k` %eakb )%ckd )%ekf tgkh ikj Ukkl tmkn "5okp #Eqkr &uskt 'ukv $Twkx  ykz ({k| )%}k~ "5k@ #DAkB CkD #EEkF &uGkH uIkJ uKkL UMkN "'#(  UkZ  /K~0=N#@$A	 96 PK&    
  
 " EI
 7E%!EHV "..u5!..w7"&!&	 "..x8!..x8"&!% "..x8$:K:KC:PQ!..x8$:K:KF:ST!..x8$:K:KF:ST!..x8$:K:KF:ST!..x8$:K:KG:TU!..x8$:K:KG:TU!..x8$:K:KG:TU!..x8$:K:KG:TU!..x8$:K:KG:TU!..x8$:K:KG:TU!..x8$:K:KG:TU!..x8$:K:KH:UV!..x8$:K:KH:UV!..x8$:K:KH:UV!..x8$:K:KH:UV!..x8$:K:KH:UV!..x8$:K:KH:UV!..x8$:K:KH:UV!..x8$:K:KH:UV'", "..x8$:K:KC:PQ!..x8$:K:KF:ST!..x8$:K:KF:ST!..x8$:K:KF:ST!..x8$:K:KG:TU!..x8$:K:KG:TU!..x8$:K:KG:TU!..x8$:K:KG:TU!..x8$:K:KG:TU!..x8$:K:KG:TU!..x8$:K:KG:TU!..x8$:K:KH:UV!..x8$:K:KH:UV!..x8$:K:KH:UV!..x8$:K:KH:UV!..x8$:K:KH:UV!..x8$:K:KH:UV!..x8$:K:KH:UV!..x8$:K:KH:UV'"-+1f s<| &I&C">-t	  %&+(,,1,0).+06:#'#'"&#(	( #($)$)+/27/4#()$, %)&+!%$*%+*/& #'&+!$#($)*/( $()-#U-^ ##
 ##g7p ' } |  |  |	 
 |  |  (  |  *  *  |  }  *  ' " }# $ y% & '(9' ( 7C#0:R):%2-9.>%1($1"2*=? D )!u}@
 } }	    c                     U R                  U5      nU R                  US0 5      n[        UR                  5       5      nU R	                  U5      $ )z

https://docs.zondacrypto.exchange/reference/ticker-1

retrieves data on all markets for zonda
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: an array of objects representing market data
items)r   
safe_valuelistvaluesparse_markets)r@  paramsresponserF  marketss        rB  fetch_marketszonda.fetch_markets  sI     33F;( '26u||~&!!'**rD  c                    U R                  US0 5      nU R                  US5      n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5      nU R                  U5      n	U R                  U R                  S0 5      n
U R                  U R                  S/ 5      nU R                  X5      (       d  U R                  X5      (       a  U R                  U R                  S0 5      n
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 U R                  U
S5      U R                  U
S5      S S S S S U R                  U R                  U R                  US5      5      5      U R                  U R                  U R                  US5      5      5      S .S S S!.U R                  US"5      S S!.S S S!.S S S!.S#.S US$.E$ )%Nmarketcodefirstsecondcurrencyr   r   r   r/  symbol/basequotesettlebaseIdquoteIdsettleIdtyper1   Tr2   Fr3   r4   r5   activecontractr  r   r   scale)amountprice)minmaxminOffer)r   rb  rc  cost)r  r   r   contractSizeexpiryexpiryDatetime
optionTypestrike	precisionlimitscreatedr   )	rG  safe_stringsafe_currency_coder   r7  in_arraysafe_numberr?  parse_precision)r@  itemrQ  r/  rS  rT  r[  r\  rX  rY  r   r   s               rB  parse_marketzonda.parse_market  s   x4ff-426!!%4""6:6&&v.''0tyy)R87GL==..$--2V2V??499fb9D2
"2
dSj5(2
 D2
 U	2

 d2
 f2
 w2
 2
 F2
 D2
 e2
 E2
 e2
 e2
 d2
  !2
" d#2
$ %%dG4%%dG4 "++D,@,@AQAQRWY`Aa,bc**4+?+?@P@PQWY`@a+bc  
  ++E:>
  
  $ c2
 2	
rD  NrV  sincer  c                     U R                  5         0 nU R                  U R                  XT5      5      nU R                  US/ 5      nU R	                  USX#SS05      $ )a  

https://docs.zondacrypto.exchange/reference/active-orders

fetch all unfilled currently open orders
:param str symbol: not used by zonda fetchOpenOrders
: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>`
rF  Nstatusopen)load_marketsv1_01PrivateGetTradingOfferextend	safe_listparse_orders)r@  rV  rx  r  rK  requestrL  rF  s           rB  fetch_open_orderszonda.fetch_open_orders  s\     	33DKK4PQx"5  eXv<NOOrD  orderrQ  c                    U R                  US5      nU R                  X2S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	                  0 SU R                  US5      _SS _S	U_S
U_SU R                  U5      _SS _SS _SU_SU R                  US5      _SS _SU_SU R                  US5      _SU R                  US5      _SS _SU_SS _SS _US S S S.EU5      $ )NrQ  -timestartAmountcurrentAmountpostOnlyr/  clientOrderIdr   	timestampdatetimelastTradeTimestamprz  rV  r^  moder   side	offerTyperc  rater   rb  rg  filled)	remainingaveragefeetrades)rp  safe_symbolsafe_integerrG  
safe_orderiso8601safe_string_lower)	r@  r  rQ  marketIdrV  r  rb  r  r  s	            rB  parse_orderzonda.parse_order  s   4 ##E84!!(C8%%eV4	!!%7$$UO<	??5*5  
$""5$/ 
T 
 E 
 	 

 Y/ 
 !$ 
 d 
 f 
 D$$UF3 
 4 
  
 D**5+> 
 T%%eV4 
 D 
 f 
  D! 
" d# 
$ #+ 
, - 	rD  c                 ^   U R                  5         0 nU(       a'  U R                  U5      /nU R                  U5      nXeS'   SU R                  U R	                  XT5      5      0nU R                  U5      nU R                  US5      n	U R                  U	SX#5      n
Uc  U
$ U R                  X5      $ )a  

https://docs.zondacrypto.exchange/reference/transactions-history

fetch all trades made by the user
: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>`
rM  queryrF  N)	r|  	market_idrV  jsonr~  )v1_01PrivateGetTradingHistoryTransactionsrG  parse_tradesfilter_by_symbol)r@  rV  rx  r  rK  r  rM  r  rL  rF  results              rB  fetch_my_tradeszonda.fetch_my_tradesL  s     	~~f-.G[[(F!(I		$++g*F GHAA%H* '2""5$=>M$$V44rD  c                    U R                  US5      nUc*  [        U R                  S-   U R                  U5      -   5      e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	'   XU'   Mj     U R                  U5      $ )
Nbalancesz empty balance response r   r   rU  lockedFundsusedavailableFundsfree)
rG  r   r/  r  rangelenrp  rq  accountsafe_balance)	r@  rL  r  r  ibalance
currencyIdrR  r  s	            rB  parse_balancezonda.parse_balancez  s    ??8Z8*D DtyyQYGZ Z[[)q#h-(AkG))':>J**:6DllnG"..wFGFO"..w8HIGFO"4L )   ((rD  c                 f    U R                  5         U R                  U5      nU R                  U5      $ )a?  

https://docs.zondacrypto.exchange/reference/list-of-wallets

query for balance and get the amount of funds available for trading or funds locked in orders
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
)r|  $v1_01PrivateGetBalancesBITBAYBalancer  )r@  rK  rL  s      rB  fetch_balancezonda.fetch_balance  s1     	<<VD!!(++rD  c           	         U R                  5         U R                  U5      nSUS   0nU R                  U R                  XS5      5      nU R	                  US/ 5      nU R	                  US/ 5      nU R                  US5      n	US   U R                  USS5      U R                  USS5      U	U R                  U	5      U R                  US5      S	.$ )
a  

https://docs.zondacrypto.exchange/reference/orderbook-2

fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
: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
rV  r/  buysellr  racaseqNo)rV  bidsasksr  r  nonce)r|  rQ  $v1_01PublicGetTradingOrderbookSymbolr~  rG  r  parse_bids_asksr  )
r@  rV  r  rK  rQ  r  rL  rawBidsrawAsksr  s
             rB  fetch_order_bookzonda.fetch_order_book  s     	V$fTl
 <<T[[=YZ$ //(E26//(FB7%%h<	X&(($=(($="Y/&&x9
 	
rD  tickerc                 h   U R                  US5      nU R                  USS5      nU R                  XB5      nU R                  US5      nU R                  US5      nU R	                  0 SU R                  XB5      _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 R                  US5      _SU_SU_SU R                  US5      _SS _SS _SS _U R                  US5      S US.EU5      $ )NrQ  rR  mr  r  rV  r  r  highhlowlbid
highestBid	bidVolumeask	lowestAsk	askVolumevwapr{  r24hcloselastpreviousClosepreviousRatechanger   r  v)
baseVolumequoteVolumer   )	rG  safe_string_2safe_marketr  safe_tickerr  r  rp  rs  )r@  r  rQ  tickerMarketr  r  r  s          rB  parse_tickerzonda.parse_ticker  s   L vx8%%lFC@!!(3%%ff5	vv. !
d&&x8!
!
 Y/!
 D$$VS1	!

 4##FC0!
 4##FL9!
 !
 4##FK8!
 !
 D!
 D$$VV4!
 T!
 D!
 T__V^D!
 d!
  $!!
" t#!
$ **637)!
* + 	rD  c                    U R                  5         U R                  U5      nSUS   0nSnU R                  U R                  SU5      nU R	                  USSU5      nSnXu:X  a!  U R                  U R                  XB5      5      nO?US:X  a!  U R                  U R                  XB5      5      nO[        U R                  S-   5      eU R                  US	S
5      n	U R                  X5      $ )aV  
v1_01PublicGetTradingTickerSymbol retrieves timestamp, datetime, bid, ask, close, last, previousClose, v1_01PublicGetTradingStatsSymbol retrieves high, low, volume and opening price of an asset

https://docs.zondacrypto.exchange/reference/market-statistics

: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 str [params.method]: v1_01PublicGetTradingTickerSymbol(default) or v1_01PublicGetTradingStatsSymbol
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
rV  r/  r   r   methodN v1_01PublicGetTradingStatsSymbolzo fetchTicker params["method"] must be "v1_01PublicGetTradingTickerSymbol" or "v1_01PublicGetTradingStatsSymbol"r  stats)r|  rQ  rp  r7  r  r   r~  r  r   r/  safe_value_2r  )
r@  rV  rK  rQ  r  r  defaultMethodr   rL  r  s
             rB  fetch_tickerzonda.fetch_ticker  s     	V$fTl
 5((7JFS ..vxATVcd&==dkk'>Z[H: "DD<<T[[=YZH TWW  (Y  Y  Z  Z!!(Hg>  //rD  symbolsc                 `   U R                  5         SnU R                  U R                  SU5      nU R                  USSU5      nSnXS:X  a  U R	                  U5      nO0US:X  a  U R                  U5      nO[        U R                  S-   5      eU R                  US5      nU R                  Xq5      $ )a  
@ignore
       v1_01PublicGetTradingTicker retrieves timestamp, datetime, bid, ask, close, last, previousClose for each market, v1_01PublicGetTradingStats retrieves high, low, volume and opening price of each market

       https://docs.zondacrypto.exchange/reference/market-statistics

       :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
       :param str [params.method]: v1_01PublicGetTradingTicker(default) or v1_01PublicGetTradingStats
       :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
       r   r   r  Nv1_01PublicGetTradingStatszd fetchTickers params["method"] must be "v1_01PublicGetTradingTicker" or "v1_01PublicGetTradingStats"rF  )
r|  rp  r7  r  r   r  r   r/  	safe_dictparse_tickers)r@  r  rK  r  r  r   rL  rF  s           rB  fetch_tickerszonda.fetch_tickersK  s     	.((7KVT!//BVXef'77?H@  #??66v>H" TWW  (N  N  O  Ox1!!%11rD  rR  c                    / nUb%  U R                  U5      nUR                  US   5        SU0nUb  X'S'   Ub  X7S'   U R                  Xt5      nU R                  SU R	                  U5      05      nUS   n	U R                  U	SX#5      $ )a  
fetch the history of changes, actions done by the user or operations that altered the balance of the user

https://docs.zondacrypto.exchange/reference/operations-history

:param str [code]: unified currency code, default is None
:param int [since]: timestamp in ms of the earliest ledger entry, default is None
:param int [limit]: max number of ledger entries to return, default is None
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
Nr/  balanceCurrenciesfromTimer  r  rF  )rU  appendr~  $v1_01PrivateGetBalancesBITBAYHistoryr  parse_ledger)
r@  rR  rx  r  rK  r  rU  r  rL  rF  s
             rB  fetch_ledgerzonda.fetch_ledger  s     }}T*H$$Xd^4!2
 "'J$G++g.<<gtyyQXGY=Z[!  e;;rD  ru  rU  c                    U R                  US5      nU R                  US0 5      nU R                  US5      nU R                  XR5      nU R                  US0 5      nU R                  US5      nSn[        R
                  " US5      (       a  Sn[        R                  " U5      nU R                  US	0 5      n	U R                  US
0 5      n
U R                  UU R                  US5      US U R                  US5      S U R                  U R                  US5      5      U R                  U5      U R                  U5      U R                  U	S5      U R                  U
S5      SUU R                  U5      S S.U5      $ )Nr  r  rU  r  totalinr   outfundsBefore
fundsAfter	historyIddetailIdr^  ok)r   r/  	directionr  referenceIdreferenceAccountr^  rU  rb  beforeafterrz  r  r  r  )r  rG  rp  safe_currencyr'   	string_lt
string_negsafe_ledger_entryparse_ledger_entry_typerq  r?  rs  r  )r@  ru  rU  r  r  r  r  rb  r	  r  r  s              rB  parse_ledger_entryzonda.parse_ledger_entry  sw   X %%dF3	//$	26%%gz:
%%j;x4!!&'2	VS))I''/F oodM2>__T<<
%%""45"++D*= $001A1A$1OP//
;''/&&{G<%%j':"Y/'
  ! 	rD  c                 H    SSSSSSSSSSSSSSS.nU R                  X!U5      $ )Ntransactionr  r   )	ADD_FUNDSBITCOIN_GOLD_FORKCREATE_BALANCEFUNDS_MIGRATIONWITHDRAWAL_LOCK_FUNDSWITHDRAWAL_SUBTRACT_FUNDSWITHDRAWAL_UNLOCK_FUNDSTRANSACTION_COMMISSION_OUTCOMETRANSACTION_COMMISSION_RETURN TRANSACTION_OFFER_ABORTED_RETURN"TRANSACTION_OFFER_COMPLETED_RETURNTRANSACTION_POST_INCOMETRANSACTION_POST_OUTCOMETRANSACTION_PRE_LOCKINGrp  )r@  r^  typess      rB  r  zonda.parse_ledger_entry_type  sH    &!.+,%2)6'4.3-20729'.(/'.
  T22rD  c           	          U R                  US0 5      n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      U R                  US5      /$ )N   r   or  r  cr  )rG  r  rs  )r@  ohlcvrQ  rS  s       rB  parse_ohlcvzonda.parse_ohlcv  s     q"-eQ'UC(UC(UC(UC(UC(
 	
rD  r   	timeframec                    U R                  5         U R                  U5      nUS   S-   US   -   nUU R                  U R                  X"5      S.nUc  SnO[	        US5      nU R                  U5      n	XI-  S-  n
Uc  U R                  5       US'   US   U
-
  US	'   OX8S	'   U R                  US	   U
5      US'   U R                  U R                  X5      5      nU R                  US
/ 5      nU R                  XX#U5      $ )aM  

https://docs.zondacrypto.exchange/reference/candles-chart

fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
: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  r\  )rV  
resolutionr  i*  r/   tofromrF  )r|  rQ  rp  r4  rd  parse_timeframemillisecondssum2v1_01PublicGetTradingCandleHistorySymbolResolutionr~  r  parse_ohlcvs)r@  rV  r/  rx  r  rK  rQ  tradingSymbolr  duration	timerangerL  rF  s                rB  fetch_ohlcvzonda.fetch_ohlcv  s    	V$x(3.	1BB#**4??IQ
 =Eu%E''	2$t+	= --/GDM%dmi7GFO#FO HHWV_i@GDMJJ4;;W^Kgh x"5  	%HHrD  r   c                 J   U R                  USS5      nU R                  USS5      nU R                  US5      nS nUb  U(       a  SOSnU R                  USS	5      nU R                  US
S5      nU R	                  US5      n	U R	                  US5      n
U R                  XS5      nUS   nS nU	b  US:X  a  US   OUS   nUU	S.nU R	                  US5      nS nUb  U(       a  SOSnU R                  U R	                  US5      UUU R                  U5      UUUUUS UUUS.U5      $ )Nr  t
userActiontywasTakerr   r   r  rrb  acommissionValuerQ  r  rV  r  rX  rY  )rU  rg  offerIdr  r/  )r/  r  r  r  rV  r^  r  rc  rb  rg  takerOrMakerr  r   )safe_integer_2safe_string_lower_2rG  r  rp  r  
safe_trader  )r@  r   rQ  r  r  rB  rG  priceStringamountStringfeeCostStringr  rV  r  feeCurrencyr  r^  s                   rB  parse_tradezonda.parse_trade6  sg   D ''vs;	''|TB??5*5 &.7GL((<))%3?((0AB##E84!!(C8!$-1U]&.K'%C   	2#7D""5$/"Y/ "( 
  	rD  c                    U R                  5         U R                  U5      nUS   S-   US   -   nSU0nUb  US-
  US'   Ub  X7S'   U R                  U R                  Xt5      5      nU R	                  US5      n	U R                  XX#5      $ )	a  

https://docs.zondacrypto.exchange/reference/last-transactions

get the list of most recent trades for a particular symbol
: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>`
r[  r  r\  rV  r)  r  r  rF  )r|  rQ  'v1_01PublicGetTradingTransactionsSymbolr~  r  r  )
r@  rV  rx  r  rK  rQ  r9  r  rL  rF  s
             rB  fetch_tradeszonda.fetch_trades  s     	V$x(3.	1BBm
 "'!)GJ$G??G@\]x1  ==rD  r^  r  rb  rc  c                 t   U R                  5         U R                  U5      nUS   S-   US   -   n[        U R                  X5      5      nUUR	                  5       US.n	U R                  USS5      n
U
SLnUS:H  nUS	:H  nUS
:H  =(       d    U=(       a    UnUS:H  =(       d    U=(       a    UnU=(       d    UnU(       d  U(       a#  U R                  X5      U	S'   U(       a  S
OSU	S'   O5U(       d  U(       a  U(       a  SOS	U	S'   O[        U R                  S-   5      eU R                  USS/5      nSnU(       aT  U(       d  [        U R                  S-   5      eU R                  X5      U	S'   U R                  U R                  X5      5      nO U R                  U R                  X5      5      nU R                  USS5      nU R                  USS5      nU(       a  SOSnU R                  US5      nU R!                  0 SU_SU_SS_SS_SS_SU_SU_SU_S U_S!U_S"U_S#S_S$S_S%S_S&S_S'S_S(U_S)S0E5      $ )*aO  
create a trade order

https://docs.zondacrypto.exchange/reference/new-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>`
r[  r  r\  )rV  r  rb  	stopPricer   Nr  rQ  z
stop-limitzstop-marketr  r  z createOrder() invalid typez[ createOrder() zonda requires `triggerPrice` parameter for stop-limit or stop-market ordersstopRaterF  stopOfferId	completedFclosedr{  r   r/  r   r  r  r  rz  rV  r^  r  rc  rb  rg  r  r  r  r  r  r  )r|  rQ  floatamount_to_precisionupperr  price_to_precisionr   r/  omit&v1_01PrivatePostTradingStopOfferSymbolr~  "v1_01PrivatePostTradingOfferSymbolr  	safe_boolrG  r  )r@  rV  r^  r  rb  rc  rK  rQ  r9  r  r   isStopLossPriceisLimitOrderisMarketOrderisStopLimitisStopMarketisStopOrderrL  r/  rY  rz  r   s                         rB  create_orderzonda.create_order  s    	V$x(3.	1BBt//?@#

 ))&+O't3w(|+R1Q/},S1R?!1\;"55fDGFO.9lwGFOl/;mGFO*G GHH6K#AB"#DGG  /L  %L  M  M"&"9"9&"PGJBB4;;wC_`H>>t{{7?[\Hn )]CNN8[%@	&Fx@  
" 
H 
  
 	 

 !$ 
 f 
 f 
 D 
 D 
 U 
 f 
 D 
 d 
  
 t 
  4! 
" l# 
$ T% 
  	rD  r/  c                    U R                  US5      nUc  [        U R                  S-   5      eU R                  US5      nUc  [        U R                  S-   5      eU R	                  5         U R                  U5      nUS   S-   US   -   nUUUUS.nU R                  U R                  X5      5      n	U R                  U	5      $ )	aO  

https://docs.zondacrypto.exchange/reference/cancel-order

cancels an open 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  z; cancelOrder() requires a `side` parameter("buy" or "sell")rc  z< cancelOrder() requires a `price` parameter(float or string)r[  r  r\  )rV  r/  r  rc  )	rp  r   r/  rG  r|  rQ  /v1_01PrivateDeleteTradingOfferSymbolIdSidePricer~  r  )
r@  r/  rV  rK  r  rc  rQ  r9  r  rL  s
             rB  cancel_orderzonda.cancel_order  s     /<*g ghh0=*h hiiV$x(3.	1BB#	
 GGT[Hde ))rD  c                 2    SSSS.nU R                  X!S5      $ )NT)r   r   r   F)rb  )r@  rU  r   s      rB  is_fiatzonda.is_fiat6  s%     

 ~~n>>rD  c                     U R                  US5      nU R                  US5      nU R                  U5        UU R                  X25      S UU R                  US5      S.$ )NrU  addresstag)r   rU  networkrs  rt  )rp  check_addressrq  )r@  depositAddressrU  r  rs  s        rB  parse_deposit_addresszonda.parse_deposit_address>  sg     %%njA
"">9=7#"//
E##NE:
 	
rD  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S5      nU R                  Xs5      $ )a  

https://docs.zondacrypto.exchange/reference/deposit-addresses-for-crypto

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 exchange API endpoint
:param str [params.walletId]: Wallet id to filter deposit adresses.
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
rU  r/  datar   )r|  rU  1v1_01PrivateGetApiPaymentsDepositsCryptoAddressesr~  rG  r  rx  )r@  rR  rK  rU  r  rL  r{  rS  s           rB  fetch_deposit_addresszonda.fetch_deposit_addressS  s}     	==&
 II$++V]Jfg x0tQ'))%::rD  codesc                     U R                  5         U R                  U5      nU R                  US5      nU R                  XA5      $ )a  

https://docs.zondacrypto.exchange/reference/deposit-addresses-for-crypto

fetch deposit addresses for multiple currencies and chain types
:param str[]|None codes: zonda does not support filtering filtering by multiple codes and will ignore self parameter.
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a list of `address structures <https://docs.ccxt.com/#/?id=address-structure>`
r{  )r|  r|  r  parse_deposit_addresses)r@  r  rK  rL  r{  s        rB  fetch_deposit_addresseszonda.fetch_deposit_addressesu  sC     	II&Q ~~h/++D88rD  fromAccount	toAccountc                 L   U R                  5         U R                  U5      nUUUU R                  X5      S.nU R                  U R	                  Xu5      5      nU R                  X5      n	U R                  U R                  S0 5      n
U R                  U
SS5      nU(       a  X)S'   U	$ )a  

https://docs.zondacrypto.exchange/reference/internal-transfer

transfer currency internally between wallets on the same account
:param str code: unified currency code
:param float amount: amount to transfer
:param str fromAccount: account to transfer from
:param str toAccount: account to transfer to
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `transfer structure <https://docs.ccxt.com/#/?id=transfer-structure>`
)sourcedestinationrU  fundsr   r   Trb  )	r|  rU  currency_to_precision>v1_01PrivatePostBalancesBITBAYBalanceTransferSourceDestinationr~  parse_transferrG  r7  rb  )r@  rR  rb  r  r  rK  rU  r  rL  r   transferOptionsr   s               rB  r   zonda.transfer  s     	==&!$//=	
 VVW[WbWbcjWst: &&x://$,,
BG"&..B[]a"b"!'XrD  r   c                 2   U R                  US5      nU R                  US0 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S S S U R                  X5      S UUU R                  U5      S.	$ )Nrz  r3  r/  r2  rU  )	r   r/  r  r  rU  rb  r  r  rz  )rp  rG  rq  parse_transfer_status)	r@  r   rU  rz  r  fromIdr2  toIdr  s	            rB  r  zonda.parse_transfer  s    : !!(H5ooh;!!+t4__XtR0D)%%k:>
//
E!008

 
	
rD  rz  c                 0    SSS.nU R                  X!U5      $ )Nr  failed)OkFailr%  )r@  rz  statusess      rB  r  zonda.parse_transfer_status  s$    
 &99rD  rs  rt  c                    U R                  XE5      u  pEU R                  U5        U R                  5         SnU R                  U5      nUS   UUS.nU R	                  U5      (       a!  U R                  U R                  X5      5      nO'Ub  XHS'   U R                  U R                  X5      5      nU R                  US5      n	U R                  X5      $ )a  

https://docs.zondacrypto.exchange/reference/crypto-withdrawal-1

make a withdrawal
:param str code: unified currency code
:param float amount: the amount to withdraw
:param str address: the address to withdraw to
:param str tag:
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
Nr/  )rU  rb  rs  rt  r{  )
handle_withdraw_tag_and_paramsrv  r|  rU  rp  *v1_01PrivatePostApiPaymentsWithdrawalsFiatr~  ,v1_01PrivatePostApiPaymentsWithdrawalsCryptor  parse_transaction)
r@  rR  rb  rs  rt  rK  rL  rU  r  r{  s
             rB  r   zonda.withdraw   s     99#F7#==& 
 <<FFt{{SZGcdH!$HHU\IefH ~~h/%%d55rD  r  c                     U R                  S U5      n0 SU R                  US5      _SS _SS _SS _SS _SS _SS _SS _S	S _S
S _SUS   _SS _SS _SS _SS _SS _SS _S S US.E$ )Nr/  txidr  r  ru  addressFromrs  	addressTorb  r^  rU  rR  rz  updatedtagFromrt  tagTocomment)internalr  r   )r  rp  )r@  r  rU  s      rB  r  zonda.parse_transaction*  s
    %%dH5
$"";5
D
 
 	

 t
 4
 t
 
 d
 D
 (
 d
 t
 t
 4
  T!
" t#
$ )
 	
rD  r   GETc           	      P   U R                  U R                  S   U   5      nUS:X  aZ  U R                  X@R                  U5      5      nUSU R	                  X5      -   S-   -  nU(       a  USU R                  U5      -   -  nGO!US:X  aW  U R                  X@R                  U5      5      nUSU R	                  X5      -   -  nU(       a  USU R                  U5      -   -  nGOUS:X  Ga$  U R                  5         U R                  X@R                  U5      5      nUSU R	                  X5      -   -  n[        U R                  5       5      n	S n
US:w  a.  U(       a  USU R                  U5      -   -  nU R                  U	-   n
O&Uc#  U R                  U5      nU R                  U	-   U-   n
U	U R                  5       U R                  U R                  U R                  U
5      U R                  U R                  5      [        R                   5      S	S
.nOU R                  5         U R                  U R#                  UU R%                  5       S.U5      5      nSU R                  U R                  U R                  U5      U R                  U R                  5      [        R                   5      S.nXsXeS.$ )Nr   r   rW  z.json?r   r   POSTzapplication/json)zRequest-TimestampzOperation-IdAPI-KeyAPI-HashContent-Type)r  momentz!application/x-www-form-urlencoded)r  r  r  )urlr  bodyheaders)implode_hostnamer6  r_  extract_paramsimplode_params	urlencodecheck_required_credentialsstrr5  apiKeyr  uuidhmacencodesecrethashlibsha512r~  r  )r@  pathr   r  rK  r  r  r  r  r  payloads              rB  sign
zonda.signJ  s]   ##DIIe$4S$9:(?IIf&9&9$&?@E3,,T::WDDCsT^^E222M!IIf&9&9$&?@E3,,T:::CsT^^E222N"++-IIf&9&9$&?@E3,,T:::C))+,EG3!666C++-yy'++-4%* $		;; IIdkk'&:DKK<TV]VdVde 2G ++->>$++**,/ # D
 !D;; IIdkk$&7T[[9QSZSaSabG
 dOOrD  httpCodereasonr  r  r  r  c
                    Uc  g SU;   aK  U R                  US5      n
U R                  S-   U-   nU R                  U R                  X5        [	        U5      eSU;   a  U R                  US5      nUS:X  ak  U R                  US5      nU R                  S-   U-   n[        S[        U5      5       H#  nX   nU R                  U R                  X5        M%     [	        U5      eg )NrR   rz  r  errorsr   )rp  r/  throw_exactly_matched_exceptionr:  r   rG  r  r  )r@  r  r  r  r  r  r  rL  requestHeadersrequestBodyrR  feedbackrz  r  r  errors                   rB  handle_errorszonda.handle_errorsw  s    X4 ##Hf5Dww}t+H00$Q))! %%h9F8<77S=4/q#f+.A"IE88%Z / $H--rD   )N)@__name__
__module____qualname____firstlineno__r   r>  r   r   rN  rv  r   r	   r   r  dictr  r  r   r  r  r  r   r  r   r  r  r   r   r  r
   r  r   r  r  rH  r-  r<  r   rO  rS  r   r   r[  r   ri  rm  boolrp  r   rx  r}  r  r   r   r  r  r   r   r  r  intr  __static_attributes____classcell__)rA  s   @rB  r)   r)      s   ~# ~@ $& +$v, +B@
F @
D /3TXac P P3 Pc Phlmrhs P&6 6v 6 6p -1tRV_a ,5c ,5 ,5C ,5\) ) $& ,( , :>b ,
s ,
3 ,
Y ,
\@4 @ @6 @D 02 C03 C0J 04B F2W F27 F2P (,$TZ\ < <C <s <aefqar <8jt jx j; jX	3&
 
4 
0 9=4^bkm .I# .I# .IS .IX[ .Irvw{r| .I`H Hv H HT 6:UW >3 >s ># >\`af\g >4 gksu {3 {i {y {RW {`c {z 37r *s *C *>? ? ?
h 
R` 
* 79  ;#  ;^  ;D 8<B 9W 94P^K_ 98 [] 7S 7% 7c 7c 7an 7r-
t -
x -
= -
^:C :C : KOWY (6S (6% (6# (6C (6^i (6T
T 
X 
Q\ 
@ &eBSW +PZ-c -3 -S -# -X\ -dg - -rD  r)   ).ccxt.base.exchanger   ccxt.abstract.zondar   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  rD  rB  <module>r     st    ( +  M  M  M  M  M  M  * 0 - - ' & . ) * 5 . * ) 4 %HHk HrD  