§
    ne»jÏ:  ã                   ó  — d Z ddlZddlZddlZddlmZmZmZmZm	Z	 ddl
mZmZ ddlmZmZmZmZ ddlmZm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 dd
l m!Z!  ed¬¦  «         G d„ d¦  «        ¦   «         Z" edd¬¦  «         G d„ d¦  «        ¦   «         Z# edd¬¦  «         G d„ d¦  «        ¦   «         Z$ edd¬¦  «         G d„ d¦  «        ¦   «         Z% edd¬¦  «         G d„ d¦  «        ¦   «         Z& G d„ d¦  «        Z'dS )zæ
FreeExile MegaShop Orchestrator Service.
Coordinates product catalog, currency exchange / PPP pricing, platform compliance routing,
atomic receipt / crypto on-chain settlement, and inventory / coin delivery via Two-Phase Commit.
é    N)ÚDictÚListÚOptionalÚSetÚAny)Ú	dataclassÚfieldé   )ÚMegaShopCatalogÚProductCategoryÚShopProductÚChestDropProbability)ÚCurrencyExchangeEngineÚRegionalPricingTier)ÚPaymentGatewayRouterÚPlatformTypeÚPaymentGatewayÚPlatformPolicyViolationError)ÚWeb3CryptoVerifierÚCryptoChainÚCryptoTokenÚCryptoOrderÚ Web3TransactionVerificationError)ÚInstantBuyoutEngineT)Úslotsc                   óø   — e Zd ZU eed<   dZeed<    ee¬¦  «        Z	e
e         ed<    ee¬¦  «        Zeeeef                  ed<    ee¬¦  «        Zeeef         ed<    ee¬¦  «        Zeeef         ed<   d	S )
ÚPlayerProfileÚ
account_idr   Úcoin_balance)Údefault_factoryÚowned_skinsÚ	inventoryÚproduct_purchase_countsÚactive_passesN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   Úintr	   Úsetr!   r   Úlistr"   r   r   r   Údictr#   r$   Úfloat© ó    ú1C:\Projects\FreeExile\server\shop\shop_service.pyr   r   '   sÂ   € € € € € € à€O€O�OØ€L�#ÐÐÑØ!˜E°#Ð6Ñ6Ô6€K��S”Ð6Ð6Ñ6Ø&+ e¸DÐ&AÑ&AÔ&A€Iˆt�D˜˜c˜”NÔ#ÐAÐAÑAØ.3¨eÀDÐ.IÑ.IÔ.IÐ˜T # s (œ^ÐIÐIÑIØ&+ e¸DÐ&AÑ&AÔ&A€M�4˜˜U˜
Ô#ÐAÐAÑAÐAÐAr0   r   )r   Úfrozenc                   óv   — e Zd ZU eed<   eed<   dZeed<   dZeed<   dZ	eed<   d	Z
eed
<   dZee         ed<   dS )ÚPurchaseOrderResultÚorder_idÚsuccessÚ Úerror_messageç        Úfiat_amountÚUSDÚcurrencyr   Úexpected_coinsNÚweb3_details)r%   r&   r'   r(   r)   Úboolr8   r:   r.   r<   r=   r*   r>   r   r   r/   r0   r1   r4   r4   1   sy   € € € € € € à€M€M�MØ€M€M�MØ€M�3ÐÐÑØ€K�ÐÐÑØ€HˆcÐÐÑØ€N�CÐÐÑØ*.€L�(˜;Ô'Ð.Ð.Ñ.Ð.Ð.r0   r4   c                   óN   — e Zd ZU eed<   eed<   dZeed<   dZeed<   dZ	eed<   dS )	ÚSettlementResultr5   r6   r7   r8   r   Úcoins_creditedÚproduct_deliveredN)
r%   r&   r'   r(   r)   r?   r8   rB   r*   rC   r/   r0   r1   rA   rA   <   sU   € € € € € € à€M€M�MØ€M€M�MØ€M�3ÐÐÑØ€N�CÐÐÑØÐ�sÐÐÑÐÐr0   rA   c                   ó8   — e Zd ZU eed<   eed<   eed<   eed<   dS )ÚDroppedLootÚitem_idÚitem_name_keyÚrarityÚdrop_chance_percentN)r%   r&   r'   r(   r)   r*   r.   r/   r0   r1   rE   rE   E   s<   € € € € € € à€L€L�LØÐÐÑØ€K€K�KØÐÐÑÐÐr0   rE   c                   óP   — e Zd ZU eed<   dZeed<   dZeed<   dZe	e
         ed<   dS )ÚChestOpenResultr6   r7   r8   Úchest_product_idNÚdropped_item)r%   r&   r'   r?   r)   r8   r(   rL   rM   r   rE   r/   r0   r1   rK   rK   M   sQ   € € € € € € à€M€M�MØ€M�3ÐÐÑØÐ�cÐÐÑØ*.€L�(˜;Ô'Ð.Ð.Ñ.Ð.Ð.r0   rK   c                   óJ  — e Zd ZdZd"d„Zdedefd„Zdedefd„Zdede	fd„Z
dedee         fd	„Zdedeeeef                  fd
„Zd#dede	dede	fd„Zdej        ej        dfdededededededededefd„Zdededefd„Zdedededefd„Zdededefd„Zded edefd!„ZdS )$ÚMegaShopServicez^Central Gateway Service for all FreeExile Monetization, In-Game Store, and Payment Processing.ÚreturnNc                 óà   — t          ¦   «         | _        t          ¦   «         | _        t	          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _	        i | _
        i | _        d S ©N)r   Úcatalogr   Ú	fx_enginer   Úgateway_routerr   Úcrypto_verifierr   Úbuyout_engineÚplayersÚpending_orders)Úselfs    r1   Ú__init__zMegaShopService.__init__X   s[   € Ý&Ñ(Ô(ˆŒÝ/Ñ1Ô1ˆŒÝ2Ñ4Ô4ˆÔÝ1Ñ3Ô3ˆÔÝ0Ñ2Ô2ˆÔà13ˆŒØ9;ˆÔÐÐr0   r   c                 ó’   — || j         vr2t          |¬¦  «        | j         |<   | j                             |¦  «         | j         |         S )N)r   )rX   r   rW   Úregister_account©rZ   r   s     r1   Úregister_playerzMegaShopService.register_playerb   sJ   € Ø˜Tœ\Ð)Ð)Ý'4À
Ð'KÑ'KÔ'KˆDŒL˜Ñ$ØÔ×/Ò/°
Ñ;Ô;Ð;ØŒ|˜JÔ'Ð'r0   c                 óX   — || j         vr|                      |¦  «        S | j         |         S rR   )rX   r_   r^   s     r1   Ú
get_playerzMegaShopService.get_playerh   s0   € Ø˜Tœ\Ð)Ð)Ø×'Ò'¨
Ñ3Ô3Ð3ØŒ|˜JÔ'Ð'r0   c                 ó6   — |                       |¦  «        j        S rR   )ra   r   r^   s     r1   Úget_player_coin_balancez'MegaShopService.get_player_coin_balancem   s   € Ø�Š˜zÑ*Ô*Ô7Ð7r0   c                 ó6   — |                       |¦  «        j        S rR   )ra   r!   r^   s     r1   Úget_player_owned_skinsz&MegaShopService.get_player_owned_skinsp   s   € Ø�Š˜zÑ*Ô*Ô6Ð6r0   c                 ó6   — |                       |¦  «        j        S rR   )ra   r"   r^   s     r1   Úget_player_inventoryz$MegaShopService.get_player_inventorys   s   € Ø�Š˜zÑ*Ô*Ô4Ð4r0   Údirect_creditÚamountÚreasonc                 óº   — |                       |¦  «        }|xj        |z  c_        | j        j                             |¦  «        }|r|j        |j        d<   |j        S )NÚ	ThienMenh)ra   r   rW   ÚaccountsÚgetÚ
currencies)rZ   r   ri   rj   ÚplayerÚstashs         r1   Úcredit_player_coinsz#MegaShopService.credit_player_coinsv   sb   € Ø—’ Ñ,Ô,ˆØÐÔ˜vÑ%ÐÔàÔ"Ô+×/Ò/°
Ñ;Ô;ˆØð 	@Ø,2Ô,?ˆEÔ˜[Ñ)ØÔ"Ð"r0   ÚUSr7   Ú
product_idÚplatformÚgatewayÚcountry_codeÚcrypto_chainÚcrypto_tokenÚbuyer_walletc	                 óÄ  — | j                              |¦  «        }	|	st          ddd|› d�¦  «        S |                      |¦  «        }
|	j        dk    r:|
j                             |d¦  «        }||	j        k    rt          ddd|› �¦  «        S 	 | j                             |||||¬¦  «        }n5# t          $ r(}t          ddt          |¦  «        ¦  «        cY d }~S d }~ww xY w|t          j        k    }|	j        dk    r|	j        n	|	j        dz  }|	j        t           j        k    rT|	j        dk    rI|	j        }|s|t$          j        t$          j        fv r#|t+          t-          |d	z  ¦  «        ¦  «        z   }n%|}n"| j                             ||j        |¬
¦  «        }| j                             ||¦  «        }| j                             |¦  «        }d }|rX|t8          j        k    s|t<          j        k    rt          ddd¦  «        S | j          !                    ||||||¬¦  «        }|j"        }||||||tG          j#        ¦   «         dœ| j$        |<   t          |d||||¬¦  «        S )Nr7   FúProduct ú
 not foundr   zPurchase limit reached for )r   rt   ru   Úrequested_gatewayrw   ç      Y@gš™™™™™¹?)Úbase_usdru   Úis_web3_cryptoz9Crypto chain and token must be specified for Web3 payment)r   rt   Úfiat_usd_amountÚchainÚtokenrz   )r   rt   ru   rv   r=   Ú	is_cryptoÚ	timestampT)r5   r6   r:   r<   r=   r>   )%rS   Úget_productr4   ra   Úpurchase_limit_per_accountr#   rn   rU   Úcreate_payment_orderr   r(   r   ÚGATEWAY_CRYPTO_WEB3Úbase_fiat_usdÚ
coin_priceÚcategoryr   ÚCOINSr   ÚPLATFORM_WEB_PCÚPLATFORM_ANDROID_SIDELOADr*   ÚroundrT   Úcalculate_coins_rewardÚvalueÚcalculate_localized_fiat_priceÚget_currency_for_countryr   ÚCHAIN_UNKNOWNr   ÚTOKEN_UNKNOWNrV   Úcreate_crypto_orderr5   ÚtimerY   )rZ   r   rt   ru   rv   rw   rx   ry   rz   Úproductrp   Úcountr5   Úer…   r€   Ú
base_coinsr=   Úlocalized_priceÚcurrency_codeÚ
web3_orders                        r1   Úcreate_purchase_orderz%MegaShopService.create_purchase_order‚   sä  € ð ”,×*Ò*¨:Ñ6Ô6ˆØð 	UÝ& r¨5Ð2S¸ZÐ2SÐ2SÐ2SÑTÔTÐTð —’ Ñ,Ô,ˆØÔ-°Ò1Ð1ØÔ2×6Ò6°zÀ1ÑEÔEˆEØ˜Ô:Ò:Ð:Ý*¨2¨uÐ6`ÐT^Ð6`Ð6`ÑaÔaÐað		:ØÔ*×?Ò?Ø%Ø%Ø!Ø")Ø)ð @ñ ô ˆHˆHøõ ,ð 	:ð 	:ð 	:Ý& r¨5µ#°a±&´&Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9øøøøð	:øøøð ¥Ô BÒBˆ	Ø,3Ô,AÀAÒ,EÐ,E�7Ô(Ð(ÈGÔL^ÐafÑLfˆàÔ�Ô4Ò4Ð4¸Ô9KÈaÒ9OÐ9OØ Ô+ˆJØð ,˜H­Ô)EÅ|ÔGmÐ(nÐnÐnØ!+­cµ%¸
ÀTÑ8IÑ2JÔ2JÑ.KÔ.KÑ!K��à!+��à!œ^×BÒBØ!Ø!œØ(ð Cñ ô ˆNð œ.×GÒGÈÐR^Ñ_Ô_ˆØœ×?Ò?ÀÑMÔMˆà,0ˆ
Øð 	+Ø�{Ô8Ò8Ð8¸LÍKÔLeÒ<eÐ<eÝ*¨2¨uÐ6qÑrÔrÐrØÔ-×AÒAØ%Ø%Ø (Ø"Ø"Ø)ð Bñ ô ˆJð "Ô*ˆHð %Ø$Ø ØØ,Ø"Ýœ™œð)
ð )
ˆÔ˜HÑ%õ #ØØØ'Ø"Ø)Ø#ð
ñ 
ô 
ð 	
s   ÂB- Â-
CÂ7CÃCÃCr5   Úreceipt_payloadc                 óò  — | j                              |¦  «        }|st          |dd|› �¦  «        S |d         }d}|t          j        k    r| j                             ||¦  «        }nv|t          j        k    r| j                             ||¦  «        }nJ|t          j	        t          j
        t          j        fv r%t          |od|                     ¦   «         v¦  «        }|st          |dd¦  «        S |d         }|d         }|d         }|                      |¦  «        }	|	j                             |d	¦  «        d
z   |	j        |<   |                      ||d|› �¬¦  «         | j         |= t          |d||¬¦  «        S )NFúUnknown pending order rv   Úinvalidz*Receipt verification rejected by processorr   rt   r=   r   r
   Úfiat_order_©rj   T©r5   r6   rB   rC   )rY   rn   rA   r   ÚGATEWAY_APPLE_IAPrV   Úverify_apple_storekit_receiptÚGATEWAY_GOOGLE_PLAYÚverify_google_play_receiptÚGATEWAY_STRIPEÚGATEWAY_PAYPALÚGATEWAY_LOCAL_VIETNAMr?   Úlowerra   r#   rr   )
rZ   r5   r¢   Ú
order_metarv   Úis_validr   rt   Úcoins_to_creditrp   s
             r1   Úsettle_fiat_orderz!MegaShopService.settle_fiat_orderÜ   s¥  € ØÔ(×,Ò,¨XÑ6Ô6ˆ
Øð 	ZÝ# H¨eÐ5XÈhÐ5XÐ5XÑYÔYÐYà˜YÔ'ˆØˆà•nÔ6Ò6Ð6ØÔ+×IÒIÈ/Ð[cÑdÔdˆHˆHØ�Ô:Ò:Ð:ØÔ+×FÒFÀÐX`ÑaÔaˆHˆHØ�Ô6½Ô8UÕWeÔW{Ð|Ð|Ð|Ý˜OÐX°IÀ×AVÒAVÑAXÔAXÐ4XÑYÔYˆHàð 	cÝ# H¨eÐ5aÑbÔbÐbð   Ô-ˆ
Ø Ô-ˆ
Ø$Ð%5Ô6ˆà—’ Ñ,Ô,ˆØ5;Ô5S×5WÒ5WÐXbÐdeÑ5fÔ5fÐijÑ5jˆÔ& zÑ2Ø× Ò  ¨_ÐE]ÐS[ÐE]ÐE]Ð Ñ^Ô^Ð^àÔ Ð)ÝØØØ*Ø(ð	
ñ 
ô 
ð 	
r0   Útx_hashrƒ   c                 óF  — | j                              |¦  «        }|st          |dd|› �¦  «        S 	 | j                             |||¦  «        \  }}n5# t
          $ r(}t          |dt          |¦  «        ¦  «        cY d }~S d }~ww xY w|st          |dd¦  «        S |d         }|d         }	|d         }
|                      |¦  «        }|j                             |	d¦  «        dz   |j        |	<   |  	                    ||
d	|› �¬
¦  «         | j         |= t          |d|
|	¬¦  «        S )NFr¤   z(On-chain transaction verification failedr   rt   r=   r   r
   Ú
crypto_tx_r§   Tr¨   )
rY   rn   rA   rV   Úverify_and_settle_orderr   r(   ra   r#   rr   )rZ   r5   rµ   rƒ   r±   ÚverifiedÚ_rœ   r   rt   r³   rp   s               r1   Úsettle_crypto_orderz#MegaShopService.settle_crypto_order  st  € ð Ô(×,Ò,¨XÑ6Ô6ˆ
Øð 	ZÝ# H¨eÐ5XÈhÐ5XÐ5XÑYÔYÐYð	=ØÔ.×FÒFÀxÐQXÐZ_Ñ`Ô`‰KˆH�a�aøÝ/ð 	=ð 	=ð 	=Ý# H¨eµS¸±V´VÑ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<øøøøð	=øøøð ð 	aÝ# H¨eÐ5_Ñ`Ô`Ð`à Ô-ˆ
Ø Ô-ˆ
Ø$Ð%5Ô6ˆà—’ Ñ,Ô,ˆØ5;Ô5S×5WÒ5WÐXbÐdeÑ5fÔ5fÐijÑ5jˆÔ& zÑ2Ø× Ò  ¨_ÐE[ÐRYÐE[ÐE[Ð Ñ\Ô\Ð\àÔ Ð)ÝØØØ*Ø(ð	
ñ 
ô 
ð 	
s   ²A Á
BÁA?Á9BÁ?Bc                 ó°  — | j                              |¦  «        }|st          ddd|› d�¦  «        S |                      |¦  «        }|                     ¦   «         }|j        |k     rt          ddd|j        › d|› �¦  «        S |j        dk    r:|j                             |d¦  «        }||j        k    rt          ddd|› �¦  «        S |xj        |z  c_        |j                             |d¦  «        d	z   |j        |<   |j	        t          j        k    r|j                             |¦  «         nx|j	        t          j        k    r0|j                             |t#          j        ¦   «         d
dœ¦  «         n3|j	        t          j        k    rt#          j        ¦   «         dz   |j        |<   t          dt)          j        ¦   «         j        d d…         › �d|¬¦  «        S )Nr7   Fr|   r}   zInsufficient Gold Cores: have z, need r   z#Account purchase limit reached for r
   Úutility)rF   Úobtained_atÚtypei �' Ú	coin_buy_é   T)r5   r6   rC   )rS   r‡   rA   ra   Úcalculate_discounted_pricer   rˆ   r#   rn   r�   r   ÚSKINSr!   ÚaddÚITEMSr"   Úappendr™   ÚPASSESr$   ÚuuidÚuuid4Úhex)rZ   r   rt   rš   rp   Úpricer›   s          r1   Úpurchase_product_with_coinsz+MegaShopService.purchase_product_with_coins'  s
  € ð
 ”,×*Ò*¨:Ñ6Ô6ˆØð 	RÝ# B¨Ð/P¸*Ð/PÐ/PÐ/PÑQÔQÐQà—’ Ñ,Ô,ˆØ×2Ò2Ñ4Ô4ˆàÔ Ò&Ð&Ý#ØØØT°Ô1DÐTÐTÈUÐTÐTñô ð ð Ô-°Ò1Ð1ØÔ2×6Ò6°zÀ1ÑEÔEˆEØ˜Ô:Ò:Ð:Ý'¨¨EÐ3eÐYcÐ3eÐ3eÑfÔfÐfð 	ÐÔ˜uÑ$ÐÔØ5;Ô5S×5WÒ5WÐXbÐdeÑ5fÔ5fÐijÑ5jˆÔ& zÑ2ð Ô�Ô4Ò4Ð4ØÔ×"Ò" :Ñ.Ô.Ð.Ð.ØÔ¥Ô!6Ò6Ð6ØÔ×#Ò#Ø%Ý#œy™{œ{Ø!ð%ð %ñ ô ð ð ð
 Ô¥Ô!7Ò7Ð7Ý/3¬y©{¬{¸jÑ/IˆFÔ  Ñ,åØ7¥¤¡¤Ô!1°"°1°"Ô!5Ð7Ð7ØØ(ð
ñ 
ô 
ð 	
r0   rL   c                 óÔ  — | j                              |¦  «        }|r|j        t          j        k    rt          dd|› �¦  «        S |                      |¦  «        }|                     ¦   «         }|j        |k     rt          dd|› �¦  «        S |xj        |z  c_        |j	        }|st          dd¦  «        S t          j        dd¦  «        }d}d }	|D ]}
||
j        z  }||k    r|
}	 nŒ|	s|d         }	t          |	j        |	j        |	j        |	j        ¬¦  «        }|j                             |j        |j        |j        t'          j        ¦   «         |d	œ¦  «         t          d
||¬¦  «        S )NFzInvalid mystery chest z'Insufficient coins to open chest: need z*Chest contains no drop table configurationr9   r   r   )rF   rG   rH   rI   )rF   rG   rH   r¾   ÚsourceT)r6   rL   rM   )rS   r‡   r�   r   ÚCHESTSrK   ra   rÂ   r   Úchest_drop_ratesÚrandomÚuniformrI   rE   rF   rG   rH   r"   rÆ   r™   )rZ   r   rL   rš   rp   rË   Ú
drop_ratesÚrand_valÚ
cumulativeÚselected_dropÚdropÚloots               r1   Úpurchase_and_open_chestz'MegaShopService.purchase_and_open_chestY  sÈ  € ð
 ”,×*Ò*Ð+;Ñ<Ô<ˆØð 	W˜'Ô*­oÔ.DÒDÐDÝ" 5Ð*UÐCSÐ*UÐ*UÑVÔVÐVà—’ Ñ,Ô,ˆØ×2Ò2Ñ4Ô4ˆàÔ Ò&Ð&Ý" 5Ð*[ÐTYÐ*[Ð*[Ñ\Ô\Ð\ð 	ÐÔ˜uÑ$ÐÔð Ô-ˆ
Øð 	XÝ" 5Ð*VÑWÔWÐWå”> # uÑ-Ô-ˆØˆ
Ø8<ˆàð 	ð 	ˆDØ˜$Ô2Ñ2ˆJØ˜:Ò%Ð%Ø $�Ø�ð &ð ð 	*Ø& qœMˆMõ Ø!Ô)Ø'Ô5Ø Ô'Ø -Ô Að	
ñ 
ô 
ˆð 	Ô×ÒØ”|Ø!Ô/Ø”kÝœ9™;œ;Ø&ð!
ð !
ñ 	ô 	ð 	õ ØØ-Øð
ñ 
ô 
ð 	
r0   )rP   N)rh   ) r%   r&   r'   Ú__doc__r[   r(   r   r_   ra   r*   rc   r   re   r   r   r   rg   rr   r   r–   r   r—   r   r   r4   r¡   rA   r´   r»   rÌ   rK   rÙ   r/   r0   r1   rO   rO   U   sz  € € € € € ØhÐhð<ð <ð <ð <ð(¨#ð (°-ð (ð (ð (ð (ð( Sð (¨]ð (ð (ð (ð (ð
8°#ð 8¸#ð 8ð 8ð 8ð 8ð7°ð 7¸¸S¼ð 7ð 7ð 7ð 7ð5¨sð 5°t¸DÀÀcÀ¼NÔ7Kð 5ð 5ð 5ð 5ð#ð #¨cð #¸3ð #Èð #Ðbeð #ð #ð #ð #ð$ !Ø$/Ô$=Ø$/Ô$=ØðU
ð U
àðU
ð ðU
ð ð	U
ð
  ðU
ð ðU
ð "ðU
ð "ðU
ð ðU
ð 
ðU
ð U
ð U
ð U
ðt!
¨#ð !
Àð !
ÐHXð !
ð !
ð !
ð !
ðL 
àð 
ð ð 
ð ð	 
ð
 
ð 
ð  
ð  
ð  
ðJ-
àð-
ð ð-
ð 
ð	-
ð -
ð -
ð -
ðd8
àð8
ð ð8
ð 
ð	8
ð 8
ð 8
ð 8
ð 8
ð 8
r0   rO   )(rÚ   r™   rÈ   rÑ   Útypingr   r   r   r   r   Údataclassesr   r	   Úshop_catalogr   r   r   r   Úcurrency_exchanger   r   Úpayment_gateway_routerr   r   r   r   Úreceipt_verifierr   r   r   r   r   Útrade.two_phase_commitr   r   r4   rA   rE   rK   rO   r/   r0   r1   ú<module>râ      sþ  ððð ð €€€Ø €€€Ø €€€Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 7Ð 6Ð 6Ð 6Ð 6Ð 6ð €�ÐÑÔðBð Bð Bð Bð Bñ Bô Bñ ÔðBð €�˜dÐ#Ñ#Ô#ð/ð /ð /ð /ð /ñ /ô /ñ $Ô#ð/ð €�˜dÐ#Ñ#Ô#ð ð  ð  ð  ð  ñ  ô  ñ $Ô#ð ð €�˜dÐ#Ñ#Ô#ðð ð ð ð ñ ô ñ $Ô#ðð €�˜dÐ#Ñ#Ô#ð/ð /ð /ð /ð /ñ /ô /ñ $Ô#ð/ð|
ð |
ð |
ð |
ð |
ñ |
ô |
ð |
ð |
ð |
r0   