§
    ýX®j   ã                   ó~   — d Z ddlZddlmc mZ ddlZddlm	Z	m
Z
mZmZmZ ddlmZ d„ Zd„ Zd„ Zd„ Zd	„ Zd
„ Zd„ ZdS )uÄ  AutoPOE2 - Unit Tests for Faustus Currency Arbitrage (Doc 68 / Doc 70).
========================================================================
Kiá»ƒm thá»­ toÃ n diá»‡n:
- MÃ´ hÃ¬nh hÃ³a Ä‘á»“ thá»‹ tá»· giÃ¡ cÃ³ hÆ°á»›ng (Directed Weighted Graph).
- Thuáº­t toÃ¡n Dijkstra trÃªn -log(rate) tÃ¬m Ä‘Æ°á»�ng chuyá»ƒn Ä‘á»•i tiá»�n tá»‡ cÃ³ lá»£i nháº¥t.
- PhÃ¡t hiá»‡n Arbitrage tam giÃ¡c cÃ³ lÃ£i rÃ²ng sau khi trá»« thuáº¿ VÃ ng (Gold Tax).
- CÆ¡ cháº¿ báº£o vá»‡ trÆ°á»£t giÃ¡ an toÃ n (Slippage Guard <= 3.0%).
- Tá»‘i Æ°u hÃ³a thu mua Waystone T16 vá»›i chi phÃ­ tháº¥p nháº¥t.
- Thanh lÃ½ ngoáº¡i tá»‡ tháº·ng dÆ° báº£o vá»‡ Ä‘á»‹nh má»©c dá»± trá»¯ (INV-EXCHANGE-RESERVE-SAFE, INV-EXCHANGE-GOLD-TAX).
é    N)ÚCurrencyEdgeÚConversionRouteÚArbitrageOpportunityÚLiquidationPlanÚFaustusCurrencyArbitrage)ÚExchangePortfolioConfigc                  óÞ
  — t          ¦   «         } |                      ddddd¬¦  «         d}| j        }||v }|sªt          j        d|fd||f¦  «        t          j        |¦  «        d	t          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nd	t          j        |¦  «        d
œz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}| j        d         d         }|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}|j        }t          j        }	d}
d}|
|z  } |	|¦  «        }||k    }|�s+t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |	¦  «        t          j        |
¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}	x}
x}x}}|j        }t          j        }	d}
d}|
|z  }d}||z  } |	|¦  «        }||k    }|�s>t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |	¦  «        t          j        |
¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}	x}
x}x}x}x}}|j        }d}||k    }|sªt          j        d|fd ||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}dS )!uU   Kiá»ƒm tra khá»Ÿi táº¡o Ä‘á»“ thá»‹ tá»· giÃ¡ tiá»�n tá»‡ vÃ  tÃ­nh toÃ¡n log_weight.ú	Chaos Orbú
Divine OrbçOè´�N{?éd   ç{®Gáz„?©ÚrateÚgold_taxÚ
bid_spread©Úin)z-%(py1)s in %(py5)s
{%(py5)s = %(py3)s.graph
}Ú	arbitrage©Úpy1Úpy3Úpy5úassert %(py7)sÚpy7Nr   ©ú==)z/%(py2)s
{%(py2)s = %(py0)s.to_curr
} == %(py5)sÚedge©Úpy0Úpy2r   ç      ð?ç     Àb@)zu%(py2)s
{%(py2)s = %(py0)s.rate
} == %(py13)s
{%(py13)s = %(py6)s
{%(py6)s = %(py4)s.approx
}((%(py8)s / %(py10)s))
}Úpytest)r    r!   Úpy4Úpy6Úpy8Úpy10Úpy13zassert %(py15)sÚpy15ç®Gáz®ï?)zŒ%(py2)s
{%(py2)s = %(py0)s.effective_rate
} == %(py16)s
{%(py16)s = %(py6)s
{%(py6)s = %(py4)s.approx
}(((%(py8)s / %(py10)s) * %(py13)s))
})r    r!   r%   r&   r'   r(   r)   Úpy16zassert %(py18)sÚpy18©ú>)z1%(py2)s
{%(py2)s = %(py0)s.log_weight
} > %(py5)s)r   Úadd_rateÚgraphÚ
@pytest_arÚ_call_reprcompareÚ	_safereprÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚAssertionErrorÚ_format_explanationÚto_currr   r$   ÚapproxÚeffective_rateÚ
log_weight)r   Ú@py_assert0Ú@py_assert4Ú@py_assert2Ú@py_format6Ú@py_format8r   Ú@py_assert1Ú@py_assert3Ú@py_assert5Ú@py_assert7Ú@py_assert9Ú@py_assert11Ú@py_assert12Ú@py_format14Ú@py_format16Ú@py_assert14Ú@py_assert15Ú@py_format17Ú@py_format19s                       ú=C:\Projects\AutoPOE2\tests\test_faustus_currency_arbitrage.pyÚ-test_arbitrage_graph_initialization_and_edgesrQ      s	  € å(Ñ*Ô*€IØ×Ò�{ L°{ÈSÐ]aÐÑbÔbÐbàÐ)˜)œ/Ð)ˆ;˜/Ð)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)ˆ;˜/Ð)Ñ)Ô)Õ)Ô)ˆ;Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)˜)Ñ)Ô)Ð)Õ)Ô)˜)Ñ)Ô)Ð)Ð)Õ)Ô)˜/Ñ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØŒ?˜;Ô'¨Ô*€DØŒ<Ð'˜<Ð'ˆ<˜<Ò'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'ˆ<˜<Ð'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'ˆ4Ñ'Ô'Ð'Õ'Ô'ˆ4Ñ'Ô'Ð'Ð'Õ'Ô'ˆ<Ñ'Ô'Õ'Ô'˜<Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ØŒ9Ð2�œÐ2 cÐ2¨EÐ2 c¨E¡kÐ2˜˜ kÑ2Ô2Ð2ˆ9Ð2Ò2Ð2Ð2Ñ2Õ2Ô2Ð2Ð2Ð2Ð2ˆ9Ð2Ð2Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2ˆ4Ñ2Ô2Ð2Õ2Ô2ˆ4Ñ2Ô2Ð2Ð2Õ2Ô2ˆ9Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2�Ñ2Ô2Ð2Õ2Ô2�Ñ2Ô2Ð2Ð2Õ2Ô2˜Ñ2Ô2Õ2Ô2 cÑ2Ô2Õ2Ô2¨EÑ2Ô2Õ2Ô2Ð2Ñ2Ô2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ØÔÐE¥&¤-ÐE°ÐE°uÐE°°u±ÐEÀÐE°ÀÑ0DÐE - -Ð0DÑ"EÔ"EÐEÐÐ"EÒEÐEÐEÑEÕEÔEÐEÐEÐEÐEÐÐ"EÐEÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔEˆ4ÑEÔEÐEÕEÔEˆ4ÑEÔEÐEÐEÕEÔEÐÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔE¥&ÑEÔEÐEÕEÔE¥&ÑEÔEÐEÐEÕEÔE -ÑEÔEÕEÔE°ÑEÔEÕEÔE°uÑEÔEÕEÔEÀÑEÔEÕEÔEÐ"EÑEÔEÐEÐEÑEÐEÐEÐEÐEÐEÑEÐEÕEÕEÔEÐEÑEÔEÑEÔEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEØŒ?Ð˜QÐˆ?˜QÒÐÐÐÕÔÐÐÐÐˆ?˜QÐÑÔÐÕÔÑÔÐÐÕÔˆ4ÑÔÐÕÔˆ4ÑÔÐÐÕÔˆ?ÑÔÕÔ˜QÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐÐÐó    c            	      óð  — t          d¬¦  «        } |                      dddd¬¦  «         |                      ddd	d
¬¦  «         |                      dddd
¬¦  «         |                      ddd¬¦  «        }d}||u}|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}|j        }t          |¦  «        }d}||k    }|�st          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }	dd|	iz  }
t          t          j
        |
¦  «        ¦  «        ‚dx}x}x}}|j        d         }|j        }d}||k    }|st          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd |iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}x}x}}|j        d         }|j        }d}||k    }|st          j        d|fd!||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd |iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}x}x}}|j        d"         }|j        }d}||k    }|st          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd |iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}x}x}}|j        d"         }|j        }d}||k    }|st          j        d|fd!||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd |iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}x}x}}|j        }d#}||k    }|sªt          j        d|fd$||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        d%œz  }d&d'|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}|j        }d}||k    }|sªt          j        d(|fd)||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        d%œz  }d&d'|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}|j        }d}d*}d+}||z  }||z  }d,}||z  }||k    }|sãt          j        d(|fd-||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d.œz  }d/d0|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}x}x}x}x}}dS )1uo  
    Kiá»ƒm tra thuáº­t toÃ¡n tÃ¬m Ä‘Æ°á»�ng chuyá»ƒn Ä‘á»•i tá»‘t nháº¥t:
    TrÆ°á»�ng há»£p Ä‘Æ°á»�ng vÃ²ng qua Exalted Orb cÃ³ lá»£i hÆ¡n Ä‘á»•i trá»±c tiáº¿p sang Divine Orb:
    - Trá»±c tiáº¿p: 1 Divine = 150 Chaos (1 Chaos = 0.00666 Divine)
    - GiÃ¡n tiáº¿p: 1 Chaos = 0.1 Exalt; 1 Exalt = 0.075 Divine -> 1 Chaos = 0.0075 Divine (+12.5% lá»£i nhuáº­n)
    ç      @©Úmax_slippage_pctr
   r   r   r   )r   r   úExalted Orbçš™™™™™¹?ç{®Gázt?g333333³?ç      Y@©Ú	amount_inN©úis not©z%(py0)s is not %(py3)sÚroute©r    r   úassert %(py5)sr   é   r   )zJ%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.hops
})
} == %(py8)sÚlen)r    r   r   r   r'   zassert %(py10)sr(   r   )z1%(py3)s
{%(py3)s = %(py1)s.from_curr
} == %(py6)s©r   r   r&   úassert %(py8)sr'   )z/%(py3)s
{%(py3)s = %(py1)s.to_curr
} == %(py6)sé   z&Chaos Orb -> Exalted Orb -> Divine Orb)z0%(py2)s
{%(py2)s = %(py0)s.path_str
} == %(py5)sr   r   r   r.   )z9%(py2)s
{%(py2)s = %(py0)s.rate_advantage_pct
} > %(py5)sr"   r#   r+   )zX%(py2)s
{%(py2)s = %(py0)s.final_amount
} > ((%(py5)s * (%(py7)s / %(py9)s)) * %(py13)s))r    r!   r   r   Úpy9r)   zassert %(py16)sr,   )r   r0   Úfind_best_conversion_pathr2   r3   r5   r6   r7   r4   r8   r9   Úhopsrd   Ú	from_currr:   Úpath_strÚrate_advantage_pctÚfinal_amount)r   r`   r@   rC   Ú@py_format4rA   r?   rF   Ú@py_assert6Ú@py_format9Ú@py_format11r>   rE   Ú@py_format7rD   rB   Ú@py_assert8Ú@py_assert10rH   rI   rL   Ú@py_format15rN   s                          rP   Ú6test_dijkstra_best_conversion_path_multi_hop_advantagerw   $   sÀ  € õ )¸#Ð>Ñ>Ô>€Ið ×Ò�{ L°{ÈtÐÑTÔTÐTð ×Ò�{ M¸ÈÐÑOÔOÐOØ×Ò�} l¸È5ÐÑQÔQÐQà×/Ò/°¸\ÐUZÐ/Ñ[Ô[€EØÐˆ5˜ÐÐÐÐÕÔÐÐÐÐˆ5˜ÐÑÔÐÕÔÑÔÐÐÕÔˆ5ÑÔÐÕÔˆ5ÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØŒzÐ�3ˆz‰?Œ?Ð˜aÐˆ?˜aÒÐÐÑÕÔÐÐÐÐˆ?˜aÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆuÑÔÐÕÔˆuÑÔÐÐÕÔˆzÑÔÕÔˆ?ÑÔÕÔ˜aÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐÐÐØŒ:�aŒ=Ð1ˆ=Ô"Ð1 kÐ1Ð" kÒ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð" kÐ1Ñ1Ô1Õ1Ô1ˆ=Ñ1Ô1Õ1Ô1Ð"Ñ1Ô1Õ1Ô1 kÑ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ØŒ:�aŒ=Ð1ˆ=Ô Ð1 MÐ1Ð  MÒ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð  MÐ1Ñ1Ô1Õ1Ô1ˆ=Ñ1Ô1Õ1Ô1Ð Ñ1Ô1Õ1Ô1 MÑ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ØŒ:�aŒ=Ð3ˆ=Ô"Ð3 mÐ3Ð" mÒ3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð" mÐ3Ñ3Ô3Õ3Ô3ˆ=Ñ3Ô3Õ3Ô3Ð"Ñ3Ô3Õ3Ô3 mÑ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ØŒ:�aŒ=Ð0ˆ=Ô Ð0 LÐ0Ð  LÒ0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0Ð  LÐ0Ñ0Ô0Õ0Ô0ˆ=Ñ0Ô0Õ0Ô0Ð Ñ0Ô0Õ0Ô0 LÑ0Ô0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ØŒ>ÐEÐEÐEˆ>ÐEÒEÐEÐEÐEÕEÔEÐEÐEÐEÐEˆ>ÐEÐEÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔEˆ5ÑEÔEÐEÕEÔEˆ5ÑEÔEÐEÐEÕEÔEˆ>ÑEÔEÕEÔEÐEÑEÔEÐEÐEÑEÐEÐEÐEÐEÐEÑEÐEÕEÕEÔEÐEÑEÔEÑEÔEÐEÐEÐEÐEÐEÐEÐEØÔ#Ð' aÐ'Ð# aÒ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð# aÐ'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'ˆ5Ñ'Ô'Ð'Õ'Ô'ˆ5Ñ'Ô'Ð'Ð'Õ'Ô'Ð#Ñ'Ô'Õ'Ô' aÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ØÔÐ< Ð<¨Ð<¨uÐ<¨¨u©Ð< ¨Ñ 5Ð<¸Ð<Ð 5¸Ñ <Ð<ÐÐ <Ò<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<ÐÐ <Ð<Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<ˆ5Ñ<Ô<Ð<Õ<Ô<ˆ5Ñ<Ô<Ð<Ð<Õ<Ô<ÐÑ<Ô<Õ<Ô< Ñ<Ô<Õ<Ô<¨Ñ<Ô<Õ<Ô<¨uÑ<Ô<Õ<Ô<¸Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<rR   c                  ó†  — t          d¬¦  «        } |                      ddd¬¦  «         |                      ddd¬¦  «         |                      ddd¬¦  «         |                      dd	d¬¦  «         |                      dd	d
¬¦  «        }d}||u }|s¬t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }t          j	        d¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}dS )uv   INV-EXCHANGE-SLIPPAGE-GUARD: Cáº¥m cÃ¡c tuyáº¿n Ä‘Æ°á»�ng cÃ³ Æ°á»›c tÃ­nh trÆ°á»£t giÃ¡ > max_slippage_pct (<= 3.0%).g      @rU   ÚAÚBg333333ó?©r   ÚCÚDÚEç      $@r[   N©Úis)z%(py0)s is %(py3)sr`   ra   uJ   Pháº£i tá»« chá»‘i tuyáº¿n Ä‘Æ°á»�ng vÆ°á»£t ngÆ°á»¡ng trÆ°á»£t giÃ¡ 3.0%!z
>assert %(py5)sr   )r   r0   ri   r2   r3   r5   r6   r7   r4   Ú_format_assertmsgr8   r9   )r   r`   r@   rC   ro   rA   s         rP   Ú*test_slippage_guard_rejects_excessive_hopsrƒ   @   ss  € å(¸#Ð>Ñ>Ô>€Ið ×Ò�s˜C cÐÑ*Ô*Ð*Ø×Ò�s˜C cÐÑ*Ô*Ð*Ø×Ò�s˜C cÐÑ*Ô*Ð*Ø×Ò�s˜C cÐÑ*Ô*Ð*à×/Ò/°°SÀDÐ/ÑIÔI€EØÐfˆ5�Dˆ=ÐfÐfÐfÕfÔfÐfÐfÐfÐfˆ5�DÐfÑfÔfÐfÕfÔfÑfÔfÐfÐfÕfÔfˆ5ÑfÔfÐfÕfÔfˆ5ÑfÔfÐfÐfÕfÔf�DÑfÔfÐfÐfÑfÐfÕfÔfÐfÑfÔfÐfÑfÐfÐfÐfÑfÐfÕfÕfÔfÐfÑfÔfÑfÔfÐfÐfÐfÐfÐfÐfÐfrR   c                  ó.	  — t          dd¬¦  «        } |                      ddddd¬	¦  «         |                      dd
ddd¬	¦  «         |                      d
dddd¬	¦  «         |                      ddd¬¦  «        }t          |¦  «        }d}||k    }|sòt	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        nddt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}|d         }|j        }g d¢}||k    }	|	sªt	          j        d|	fd||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }
d d!|
iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}	}|j        }d"}||k    }	|	sªt	          j        d|	fd#||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }
d d!|
iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}	}|j        }d$}||k    }	|	sªt	          j        d|	fd%||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }
d d!|
iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}	}|j        }d&}||u }	|	sªt	          j        d'|	fd(||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }
d d!|
iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}	}dS ))uV   Kiá»ƒm tra phÃ¡t hiá»‡n cÆ¡ há»™i Arbitrage tam giÃ¡c cÃ³ lÃ£i rÃ²ng sau thuáº¿ VÃ ng.g-Cëâ6?é¸  )Úchaos_per_gold_rateÚmin_gold_reserver
   rW   g¸…ëQ¸¾?é   rY   r   r   gºI+‡¶?é
   g     `c@é   rZ   i N  ©Úbase_currencyÚtest_amountÚcurrent_goldr   r.   ©z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)srd   Úopps©r    r   r   r&   rf   r'   N)r
   rW   r   r
   r   )z2%(py2)s
{%(py2)s = %(py0)s.cycle_path
} == %(py5)sÚbest_oppr   r   r   r   )z7%(py2)s
{%(py2)s = %(py0)s.gross_profit_pct
} > %(py5)srT   )z7%(py2)s
{%(py2)s = %(py0)s.net_profit_chaos
} > %(py5)sTr€   )z5%(py2)s
{%(py2)s = %(py0)s.is_executable
} is %(py5)s)r   r0   Údetect_triangular_arbitragerd   r2   r3   r5   r6   r7   r4   r8   r9   Ú
cycle_pathÚgross_profit_pctÚnet_profit_chaosÚis_executable)r   r�   r@   rE   r?   rs   rq   r’   rC   rD   rA   rB   s               rP   Ú+test_detect_triangular_arbitrage_profitabler˜   N   sQ  € å(Ø"Øðñ ô €Ið ×Ò�{ M¸ÀqÐUZÐÑ[Ô[Ð[Ø×Ò�} l¸ÈÐX]ÐÑ^Ô^Ð^Ø×Ò�| [°uÀrÐV[ÐÑ\Ô\Ð\à×0Ò0¸{ÐX]ÐlqÐ0ÑrÔr€DÝˆt‰9Œ9Ð�qÐˆ9�qŠ=ÐÐÐÕÔÐÐÐÐˆ9�qÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆtÑÔÐÕÔˆtÑÔÐÐÕÔˆ9ÑÔÕÔ�qÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØ�AŒw€HØÔÐYÐ"YÐ"YÐ"YÐYÐÐ"YÒYÐYÐYÐYÕYÔYÐYÐYÐYÐYÐÐ"YÐYÑYÔYÐYÕYÔYÑYÔYÐYÐYÕYÔYˆ8ÑYÔYÐYÕYÔYˆ8ÑYÔYÐYÐYÕYÔYÐÑYÔYÕYÔYÐ"YÑYÔYÐYÐYÑYÐYÐYÐYÐYÐYÑYÐYÕYÕYÔYÐYÑYÔYÑYÔYÐYÐYÐYÐYÐYÐYÐYØÔ$Ð+ tÐ+Ð$ tÒ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð$ tÐ+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ˆ8Ñ+Ô+Ð+Õ+Ô+ˆ8Ñ+Ô+Ð+Ð+Õ+Ô+Ð$Ñ+Ô+Õ+Ô+ tÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØÔ$Ð* sÐ*Ð$ sÒ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð$ sÐ*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*ˆ8Ñ*Ô*Ð*Õ*Ô*ˆ8Ñ*Ô*Ð*Ð*Õ*Ô*Ð$Ñ*Ô*Õ*Ô* sÑ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ØÔ!Ð) TÐ)Ð! TÐ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð! TÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆ8Ñ)Ô)Ð)Õ)Ô)ˆ8Ñ)Ô)Ð)Ð)Õ)Ô)Ð!Ñ)Ô)Õ)Ô) TÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)rR   c                  óŒ  — t          d¬¦  «        } |                      ddddd¬¦  «         |                      dd	d
dd¬¦  «         |                      d	dddd¬¦  «         |                      ddd¬¦  «        }t          |¦  «        }d}||k    }|sòt	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        nddt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}|d         }|j        }d}||u }|st	          j        d|fd||f¦  «        t	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}x}}d}|d         }|j        }||v }|st	          j        d|fd ||f¦  «        t	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        d!œz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}x}}dS )"u`   INV-EXCHANGE-GOLD-TAX: Tá»« chá»‘i Arbitrage náº¿u sá»‘ dÆ° VÃ ng sau thuáº¿ < min_gold_reserve.i'  )r‡   r
   rW   g333333Ã?iÐ  rY   r   r   rX   r…   r#   i   r"   ià.  r‹   r   r.   r�   rd   r�   r‘   rf   r'   NFr€   )z5%(py3)s
{%(py3)s = %(py1)s.is_executable
} is %(py6)sre   zthap hon nguong toi thieur   )z.%(py1)s in %(py6)s
{%(py6)s = %(py4)s.reason
})r   r%   r&   )r   r0   r“   rd   r2   r3   r5   r6   r7   r4   r8   r9   r—   Úreason)	r   r�   r@   rE   r?   rs   rq   r>   rD   s	            rP   Ú;test_detect_triangular_arbitrage_rejects_when_gold_depletedr›   d   s7  € å(¸%Ð@Ñ@Ô@€Ià×Ò�{ M¸ÀtÐX]ÐÑ^Ô^Ð^Ø×Ò�} l¸ÈÐY^ÐÑ_Ô_Ð_Ø×Ò�| [°uÀtÐX]ÐÑ^Ô^Ð^ð ×0Ò0¸{ÐX[ÐjoÐ0ÑpÔp€DÝˆt‰9Œ9Ð�qÐˆ9�qŠ=ÐÐÐÕÔÐÐÐÐˆ9�qÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆtÑÔÐÕÔˆtÑÔÐÐÕÔˆ9ÑÔÕÔ�qÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØ�Œ7Ð)ˆ7Ô Ð) EÐ)Ð  EÐ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð  EÐ)Ñ)Ô)Õ)Ô)ˆ7Ñ)Ô)Õ)Ô)Ð Ñ)Ô)Õ)Ô) EÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ø&Ð8¨$¨q¬'Ð8¨'¬.Ð8Ð&¨.Ð8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð&¨.Ð8Ñ8Ô8Õ8Ô8Ð&Ñ8Ô8Õ8Ô8¨'Ñ8Ô8Õ8Ô8¨.Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8rR   c                  ó  — t          ¦   «         } |                      ddd¬¦  «         |                      ddd¬¦  «         ddd	œ}|                      d
d|d¬¦  «        }d}||u}|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}x}}dS )u[   Kiá»ƒm tra tÃ¬m tuyáº¿n mua Waystone T16 vá»›i chi phÃ­ tháº¥p nháº¥t tá»« vÃ­ tiá»�n tá»‡.r
   zWaystone (Tier 16)gUUUUUUµ?r{   r   g      .@r   é   )r
   r   é   rˆ   é˜:  )Útarget_tierÚcountÚavailable_walletrŽ   Nr]   r_   r`   ra   rb   r   r   )z3%(py2)s
{%(py2)s = %(py0)s.source_curr
} == %(py5)sr   r   r   ©ú>=)z4%(py2)s
{%(py2)s = %(py0)s.final_amount
} >= %(py5)s)r   r0   Úplan_waystone_purchaser2   r3   r5   r6   r7   r4   r8   r9   Úsource_currrn   )
r   Úwalletr`   r@   rC   ro   rA   r?   rD   rB   s
             rP   Ú*test_plan_waystone_purchase_cheapest_router¨   s   s  € å(Ñ*Ô*€Ið
 ×Ò�{Ð$8¸zÐÑJÔJÐJØ×Ò�|Ð%9ÀÐÑEÔEÐEð Øðð €Fð
 ×,Ò,ØØØØð	 -ñ ô €Eð Ðˆ5˜ÐÐÐÐÕÔÐÐÐÐˆ5˜ÐÑÔÐÕÔÑÔÐÐÕÔˆ5ÑÔÐÕÔˆ5ÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÔÐ, Ð,Ð Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆ5Ñ,Ô,Ð,Õ,Ô,ˆ5Ñ,Ô,Ð,Ð,Õ,Ô,ÐÑ,Ô,Õ,Ô, Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØÔÐ" Ð"Ð Ò"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"Ð Ð"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆ5Ñ"Ô"Ð"Õ"Ô"ˆ5Ñ"Ô"Ð"Ð"Õ"Ô"ÐÑ"Ô"Õ"Ô" Ñ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"rR   c                  óØ  — t          ¦   «         } d| j        d<   d| j        d<   d| j        d<   t          | d¬¦  «        }|                     ddd	d
¬¦  «         |                     dddd¬¦  «         |                     dddd¬¦  «         ddddœ}|                     |d¬¦  «        }|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d}	|j        }|	|v }
|
sªt          j        d|
fd |	|f¦  «        t          j        |	¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d!œz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}
}d}	|j        }|	|v }
|
sªt          j        d|
fd |	|f¦  «        t          j        |	¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d!œz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}
}|j        }d"}||k    }|sªt          j        d|fd#||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }d}||k    }|sªt          j        d|fd$||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}t#          d%„ |j        D ¦   «         d¦  «        }d}
||
u}|s—t          j        d&|fd'||
f¦  «        d(t          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nd(t          j        |
¦  «        d)œz  }d*d+|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}
|j        }d,}||k    }|sªt          j        d-|fd.||f¦  «        d(t          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nd(t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}dS )/uf   Kiá»ƒm tra thanh lÃ½ ngoáº¡i tá»‡ phá»¥ sang Divine Orb báº£o toÃ n Ä‘á»‹nh má»©c dá»± trá»¯ an toÃ n.é(   úOrb of AlterationrŠ   úOrb of Alchemyé2   r
   r…   )Úconfigr‡   gš™™™™™É?rˆ   )r   r   g      à?r‰   r   gðøÃ�?|?éú   éð   éx   éÍ   )r«   r¬   r
   rŸ   )rŽ   rc   r£   )z4%(py2)s
{%(py2)s = %(py0)s.total_orders
} >= %(py5)sÚplanr   r   r   Nr   )z9%(py1)s in %(py5)s
{%(py5)s = %(py3)s.source_currencies
}r   rg   )z?%(py2)s
{%(py2)s = %(py0)s.projected_divine_earned
} >= %(py5)s)z>%(py2)s
{%(py2)s = %(py0)s.remaining_gold_balance
} >= %(py5)sc              3   ó0   K  — | ]}|j         d k    ¯|V — ŒdS )r«   N)Úsell_currency)Ú.0Úos     rP   ú	<genexpr>zCtest_plan_surplus_liquidation_preserves_reserves.<locals>.<genexpr>­   s/   è è € ÐWÐW˜A°´ÐCVÒ0VÐ0V�aÐ0VÐ0VÐ0VÐ0VÐWÐWrR   r]   r_   Ú	alt_orderra   rb   r   éÈ   r   )z3%(py2)s
{%(py2)s = %(py0)s.sell_amount
} == %(py5)s)r   Údefault_reservesr   r0   Úplan_surplus_liquidationÚtotal_ordersr2   r3   r5   r6   r7   r4   r8   r9   Úsource_currenciesÚprojected_divine_earnedÚremaining_gold_balanceÚnextÚordersÚsell_amount)Úcfgr   r§   r³   rC   r?   rD   rA   rB   r>   r@   r¹   ro   s                rP   Ú0test_plan_surplus_liquidation_preserves_reservesrÅ   Ž   s	  € å
!Ñ
#Ô
#€CØ02€CÔÐ,Ñ-Ø-/€CÔÐ)Ñ*Ø(*€CÔ˜Ñ%å(°ÀdÐKÑKÔK€IØ×ÒÐ*¨K¸dÈQÐÑOÔOÐOØ×ÒÐ'¨¸4È"ÐÑMÔMÐMØ×Ò�{ L°{ÈSÐÑQÔQÐQð !ØØðð €Fð ×-Ò-¨fÀ5Ð-ÑIÔI€DØÔÐ! Ð!Ð Ò!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!Ð Ð!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆ4Ñ!Ô!Ð!Õ!Ô!ˆ4Ñ!Ô!Ð!Ð!Õ!Ô!ÐÑ!Ô!Õ!Ô! Ñ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ØÐ8 $Ô"8Ð8ÐÐ"8Ð8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8ÐÐ"8Ð8Ñ8Ô8Õ8Ô8ÐÑ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8 $Ñ8Ô8Ð8Õ8Ô8 $Ñ8Ô8Ð8Ð8Õ8Ô8Ð"8Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ØÐ5˜tÔ5Ð5ÐÐ5Ð5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5ÐÐ5Ð5Ñ5Ô5Õ5Ô5ÐÑ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5˜tÑ5Ô5Ð5Õ5Ô5˜tÑ5Ô5Ð5Ð5Õ5Ô5Ð5Ñ5Ô5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ØÔ'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆ4Ñ,Ô,Ð,Õ,Ô,ˆ4Ñ,Ô,Ð,Ð,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØÔ&Ð.¨$Ð.Ð&¨$Ò.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð&¨$Ð.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.ˆ4Ñ.Ô.Ð.Õ.Ô.ˆ4Ñ.Ô.Ð.Ð.Õ.Ô.Ð&Ñ.Ô.Õ.Ô.¨$Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.õ ÐWÐW ¤ÐWÑWÔWÐY]Ñ^Ô^€IØ Ð ˆ9˜DÐ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆ9˜DÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆ9Ñ Ô Ð Õ Ô ˆ9Ñ Ô Ð Ð Õ Ô ˜DÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð ØÔ Ð' CÐ'Ð  CÒ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð  CÐ'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'ˆ9Ñ'Ô'Ð'Õ'Ô'ˆ9Ñ'Ô'Ð'Ð'Õ'Ô'Ð Ñ'Ô'Õ'Ô' CÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'rR   )Ú__doc__Úbuiltinsr5   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter2   r$   Ú5src.assistant_tool.economy.faustus_currency_arbitrager   r   r   r   r   Ú+src.assistant_tool.currency_exchange.modelsr   rQ   rw   rƒ   r˜   r›   r¨   rÅ   © rR   rP   ú<module>rÎ      s  ðð	ð 	ð € € € € € € € € € € € € €€€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð PÐ OÐ OÐ OÐ OÐ Oð
ð 
ð 
ð=ð =ð =ð8gð gð gð*ð *ð *ð,9ð 9ð 9ð#ð #ð #ð6!(ð !(ð !(ð !(ð !(rR   