§
    Ú¾j×/  ã                  ó�   — d Z ddlmZ ddlmZmZmZmZmZm	Z	 ddl
mZmZmZmZmZmZ ddlmZmZ ddlmZmZ  G d„ d¦  «        Zd	S )
z÷
FreeExile Ascendancy & Flesh Metamorphosis Engine.
Authoritative calculation of character transcendence, trial progression,
point allocation (10 trials x 3 points = 30 points), and Paradigm Shifters
that alter items, skills, and base attributes.
é    )Úannotations)ÚDictÚListÚOptionalÚSetÚTupleÚAny)ÚAscendancyTrialÚAscendancyClassIdÚAscendancyNodeTypeÚAscendancyNodeÚCharacterAscendancyStateÚAscendancyAppliedEffects)Úget_canonical_trialsÚget_ascendancy_nodes)ÚCharacterLoadoutÚ	ChanVoDanc                  ól   — e Zd ZdZd&d„Zd'd„Z	 d(d)d„Zd*d„Zd+d„Zd,d„Z	d,d„Z
d-d„Zd.d„Z	 	 d/d0d%„Zd	S )1ÚAscendancyEngineu  
    LÃµi TÃ­nh ToÃ¡n ThÄƒng Hoa & Tiáº¿n HÃ³a NhÃ¢n Váº­t (Server-Authoritative).
    Quáº£n lÃ½ 10 ThÃ­ Luyá»‡n Cá»• Ä�Ã n, cáº¥p phÃ¡t 30 Ä‘iá»ƒm ThÄƒng Hoa vÃ  Ã¡p dá»¥ng
    cÃ¡c biáº¿n Ä‘á»•i mang tÃ­nh cÃ¡ch máº¡ng (Paradigm Shifts) lÃªn Item, Skill, Chá»‰ sá»‘.
    ÚreturnÚNonec                ót   — d„ t          ¦   «         D ¦   «         | _        t          ¦   «         | _        i | _        d S )Nc                ó   — i | ]
}|j         |“ŒS © )Útrial_index)Ú.0Úts     ú7C:\Projects\FreeExile\server\world\ascendancy_engine.pyú
<dictcomp>z-AscendancyEngine.__init__.<locals>.<dictcomp>"   s)   € ð 3
ð 3
ð 3
Ø!"ˆAŒM˜1ð3
ð 3
ð 3
ó    )r   Útrialsr   ÚnodesÚplayer_states©Úselfs    r   Ú__init__zAscendancyEngine.__init__!   sF   € ð3
ð 3
Ý&:Ñ&<Ô&<ð3
ñ 3
ô 3
ˆŒõ 1EÑ0FÔ0FˆŒ
ØBDˆÔÐÐr    Úactor_idÚintr   c                ó^   — || j         vrt          |¬¦  «        | j         |<   | j         |         S )N)r'   )r#   r   )r%   r'   s     r   Úget_or_create_statez$AscendancyEngine.get_or_create_state(   s6   € Ø˜4Ô-Ð-Ð-Ý+CÈXÐ+VÑ+VÔ+VˆDÔ˜xÑ(ØÔ! (Ô+Ð+r    Nr   Úplayer_levelúOptional[int]úTuple[bool, str, int]c                ó®  — |dk     s|dk    r	dd|› d�dfS | j         |         }|�$||j        k     rdd|j        › d	|j        › d
|› d�dfS |                      |¦  «        }||j        v r	dd|› d�dfS |dk    r|dz
  |j        vrdd|dz
  › d�dfS |j                             |¦  «         |j        }d|j        › d|› dt          |j        ¦  «        › d�}d||fS )uS   HoÃ n thÃ nh 1 trong 10 Thá»­ thÃ¡ch Cá»±c Háº¡n, nháº­n ngay 3 Ä‘iá»ƒm thÄƒng hoa.é   é
   Fu   ThÃ­ luyá»‡n #u-    khÃ´ng tá»“n táº¡i (chá»‰ tá»« 1 Ä‘áº¿n 10).r   Nu   YÃªu cáº§u cáº¥p Ä‘á»™ u    Ä‘á»ƒ má»Ÿ khÃ³a u    (Cáº¥p hiá»‡n táº¡i: ú).u!    Ä‘Ã£ hoÃ n thÃ nh trÆ°á»›c Ä‘Ã³.u!   ChÆ°a hoÃ n thÃ nh ThÃ­ luyá»‡n #ú.u   VÆ°á»£t qua u    thÃ nh cÃ´ng! Nháº­n Ä‘Æ°á»£c u#    Ä�iá»ƒm ThÄƒng Hoa. Tiáº¿n Ä‘á»™: z/10.T)r!   Úrequired_levelÚname_vir*   Úcompleted_trialsÚaddÚreward_pointsÚlen)r%   r'   r   r+   ÚtrialÚstateÚpoints_awardedÚmsgs           r   Úcomplete_trialzAscendancyEngine.complete_trial-   s‡  € ð ˜Š?ˆ?˜k¨BÒ.Ð.ØÐe¨;ÐeÐeÐeÐghÐhÐhà”˜KÔ(ˆØÐ#¨°uÔ7KÒ(KÐ(Kàð H¨%Ô*>ð  Hð  HÐRWÔR_ð  Hð  Hð  xDð  Hð  Hð  HØðð ð ×(Ò(¨Ñ2Ô2ˆØ˜%Ô0Ð0Ð0ØÐY¨;ÐYÐYÐYÐ[\Ð\Ð\à˜Š?ˆ? ¨a¡¸Ô8NÐNÐNØÐP¸kÈA¹oÐPÐPÐPÐRSÐSÐSàÔ×"Ò" ;Ñ/Ô/Ð/ØÔ,ˆð?˜5œ=ð ?ð ?Ø-ð?ð ?å  Ô!7Ñ8Ô8ð?ð ?ð ?ð 	ð
 �S˜.Ð(Ð(r    Úclass_idr   úTuple[bool, str]c                óœ   — |                       |¦  «        }|j        sdS |j        �|j        |k    r	|j        rdS ||_        dd|j        › d�fS )uP   Chá»�n Há»‡ PhÃ¡i ThÄƒng Hoa sau khi Ä‘Ã£ vÆ°á»£t qua Ã­t nháº¥t 1 ThÃ­ Luyá»‡n.)FuL   Cáº§n hoÃ n thÃ nh Ã­t nháº¥t ThÃ­ Luyá»‡n 1 Ä‘á»ƒ thá»©c tá»‰nh ThÄƒng Hoa.N)FuP   Pháº£i hoÃ n tráº£ toÃ n bá»™ Ä‘iá»ƒm thÄƒng hoa trÆ°á»›c khi Ä‘á»•i Há»‡ PhÃ¡i.Tu%   Thá»©c tá»‰nh Há»‡ PhÃ¡i ThÄƒng Hoa: u    thÃ nh cÃ´ng.)r*   r5   Úchosen_classÚallocated_nodesÚvalue)r%   r'   r>   r:   s       r   Úchoose_ascendancy_classz(AscendancyEngine.choose_ascendancy_classL   sr   € ð ×(Ò(¨Ñ2Ô2ˆØÔ%ð 	iØhÐhàÔÐ)¨eÔ.@ÀHÒ.LÐ.LØÔ$ð qØpÐpà%ˆÔØÐ[¸X¼^Ð[Ð[Ð[Ð[Ð[r    r:   c                óD   ‡ — t          ˆ fd„|j        D ¦   «         ¦  «        S )Nc              3  óN   •K  — | ]}|‰j         v ¯‰j         |         j        V — Œ d S ©N)r"   Úpoints_cost)r   Únidr%   s     €r   ú	<genexpr>z4AscendancyEngine.get_spent_points.<locals>.<genexpr>\   sE   øè è € ð 
ð 
àØ�d”jÐ Ð ð ŒJ�sŒOÔ'à Ð Ð Ð ð
ð 
r    )ÚsumrB   )r%   r:   s   ` r   Úget_spent_pointsz!AscendancyEngine.get_spent_points[   s>   ø€ Ýð 
ð 
ð 
ð 
àÔ,ð
ñ 
ô 
ñ 
ô 
ð 	
r    Únode_idc                ó  ‡— |                       |¦  «        Š‰j        €dS || j        vrdd|› d�fS | j        |         }|j        ‰j        k    rdd|› d‰j        j        › d�fS |‰j        v rdd|› d�fS |                      ‰¦  «        }‰j        |z
  }||j        k     rdd	|j        › d
|› d�fS |j	        r"t          ˆfd„|j	        D ¦   «         ¦  «        sdS ‰j                             |¦  «         dd|j        › d|j        j        › d�fS )uL   Cá»™ng Ä‘iá»ƒm vÃ o máº¯t xÃ­ch ThÄƒng Hoa (Minor, Notable hoáº·c Keystone).N)Fu#   ChÆ°a chá»�n Há»‡ PhÃ¡i ThÄƒng Hoa.Fõ   Máº¯t xÃ­ch #u    khÃ´ng tá»“n táº¡i.u    khÃ´ng thuá»™c Há»‡ PhÃ¡i r2   u    Ä‘Ã£ Ä‘Æ°á»£c kÃ­ch hoáº¡t.u'   KhÃ´ng Ä‘á»§ Ä‘iá»ƒm ThÄƒng Hoa (Cáº§n u   , cÃ²n r1   c              3  ó*   •K  — | ]}|‰j         v V — Œd S rG   )rB   )r   Úreqr:   s     €r   rJ   z1AscendancyEngine.allocate_node.<locals>.<genexpr>x   s+   øè è € ÐZÐZ¸�s˜eÔ3Ð3ÐZÐZÐZÐZÐZÐZr    )Fu=   ChÆ°a kÃ­ch hoáº¡t máº¯t xÃ­ch dáº«n Ä‘Æ°á»�ng tiÃªn quyáº¿t.Tu'   KÃ­ch hoáº¡t thÃ nh cÃ´ng máº¯t xÃ­ch 'z' ()r*   rA   r"   r>   rC   rB   rL   Útotal_points_earnedrH   Úprerequisite_node_idsÚanyr6   r4   Ú	node_type)r%   r'   rM   ÚnodeÚspentÚ	availabler:   s         @r   Úallocate_nodezAscendancyEngine.allocate_nodeb   sz  ø€ à×(Ò(¨Ñ2Ô2ˆØÔÐ%Ø?Ð?à˜$œ*Ð$Ð$ØÐG¨'ÐGÐGÐGÐGÐGàŒz˜'Ô"ˆØŒ=˜EÔ.Ò.Ð.ØÐi¨'ÐiÐiÈeÔN`ÔNfÐiÐiÐiÐiÐià�eÔ+Ð+Ð+ØÐO¨'ÐOÐOÐOÐOÐOà×%Ò% eÑ,Ô,ˆØÔ-°Ñ5ˆ	Ø�tÔ'Ò'Ð'ØÐjÀDÔDTÐjÐjÐ]fÐjÐjÐjÐjÐjàÔ%ð 	^ÝÐZÐZÐZÐZ¸tÔ?YÐZÑZÔZÑZÔZð ^Ø]Ð]àÔ×!Ò! 'Ñ*Ô*Ð*ØÐh¸t¼|ÐhÐhÐPTÔP^ÔPdÐhÐhÐhÐhÐhr    c                ó  — |                       |¦  «        }||j        vrdd|› d�fS |j        D ]=}||k    rŒ	| j                             |¦  «        }|r||j        v rdd|j        › d�fc S Œ>|j                             |¦  «         dd|› d�fS )	u+   HoÃ n tráº£ Ä‘iá»ƒm máº¯t xÃ­ch ThÄƒng Hoa.FrO   u    chÆ°a Ä‘Æ°á»£c kÃ­ch hoáº¡t.u!   KhÃ´ng thá»ƒ táº©y: Máº¯t xÃ­ch 'u%   ' Ä‘ang phá»¥ thuá»™c vÃ o node nÃ y.Tu   Ä�Ã£ hoÃ n tráº£ máº¯t xÃ­ch #r2   )r*   rB   r"   ÚgetrS   r4   Úremove)r%   r'   rM   r:   Úother_idÚ
other_nodes         r   Úrefund_nodezAscendancyEngine.refund_node~   sÔ   € à×(Ò(¨Ñ2Ô2ˆØ˜%Ô/Ð/Ð/ØÐP¨'ÐPÐPÐPÐPÐPàÔ-ð 	|ð 	|ˆHØ˜7Ò"Ð"ØØœŸš¨Ñ1Ô1ˆJØð |˜g¨Ô)IÐIÐIØÐ{À*ÔBTÐ{Ð{Ð{Ð{Ð{Ð{Ð{øàÔ×$Ò$ WÑ-Ô-Ð-ØÐ@°gÐ@Ð@Ð@Ð@Ð@r    ÚruleÚstrÚctxúDict[str, Any]c                ó"  — |dk    rd|d<   d|d<   d|d<   d6S |dk    rd|d<   |d	xx         d
z  cc<   d|d<   d6S |dk    rd|d<   |dxx         dz  cc<   d6S |dk    rd|d<   |dxx         dz  cc<   d6S |dk    rd|d<   d6S |dk    rd|d<   |dxx         dz  cc<   d6S |dk    r!d|d<   |dxx         dz  cc<   d|d<   d|d<   d6S |dk    r8d |d!         d"<   d |d!         d#<   |d$xx         d%z  cc<   |d	xx         d%z  cc<   d6S |d&k    r'd'|d(<   |d)xx         d
z  cc<   |d$xx         d*z  cc<   d6S |d+k    r,d,|d-<   d,|d.<   |d/xx         d0z  cc<   |d1xx         dz  cc<   d6S |d2k    r'd|d3<   |d/xx         dz  cc<   |d4xx         d5z  cc<   d6S d6S )7uV   Thá»±c thi tá»«ng quy táº¯c Keystone lÃ m biáº¿n Ä‘á»•i Item, Skill hoáº·c Base Stats.ÚRULE_SINGLE_WEAPON_CHAOSTÚoffhand_disabledg      @Útwo_hand_boostÚskills_to_chaosÚRULE_BONE_PLATING_ARMORÚ
bone_armorÚ
armor_multg      @g      à?Úele_to_physÚRULE_NAKED_JEWELRY_BOOSTÚjewelry_disabledÚskills_dmg_boostgffffffö?ÚRULE_BLOOD_PRIMACYÚskills_cost_lifeg      ø?ÚRULE_CONVERT_ALL_TO_CHAOSÚRULE_STRIKE_TO_SLAM_CONVERSIONÚstrikes_to_slamÚcooldown_multÚRULE_CHAOS_INOCULATION_BONEç      ð?Ú	forced_hpÚ	ward_multg      @Úchaos_immuneÚpoison_immuneÚRULE_ABSOLUTE_PHYSIQUEÚPHYSIQUEÚ	attr_convÚAGILITYÚMINDÚhp_multg      @ÚRULE_MIND_OVER_MATTER_SOULg333333ã?Ú	mom_ratioÚqi_multg      è?ÚRULE_BERSERK_SAVAGE_BLOODç        Ú	forced_qiÚforced_wardÚdmg_multg       @Úatk_spdÚ!RULE_GODHOOD_AVATAR_METAMORPHOSISÚavatar_metamorphosis_activeÚmax_resists_bonusgš™™™™™©?Nr   )r%   r`   rb   s      r   Ú_apply_keystone_rulez%AscendancyEngine._apply_keystone_ruleŽ   sÝ  € àÐ-Ò-Ð-Ø&*ˆCÐ"Ñ#Ø$'ˆCÐ Ñ!Ø%)ˆCÐ!Ñ"Ð"Ð"ØÐ.Ò.Ð.Ø $ˆC�ÑØ�ÐÐÔ Ñ$ÐÐÑØ!%ˆC�ÑÐÐØÐ/Ò/Ð/Ø&*ˆCÐ"Ñ#ØÐ"Ð#Ð#Ô# tÑ+Ð#Ð#Ñ#Ð#Ð#ØÐ)Ò)Ð)Ø&*ˆCÐ"Ñ#ØÐ"Ð#Ð#Ô# tÑ+Ð#Ð#Ñ#Ð#Ð#ØÐ0Ò0Ð0Ø%)ˆCÐ!Ñ"Ð"Ð"ØÐ5Ò5Ð5Ø%)ˆCÐ!Ñ"Ø�Ð Ð Ô  DÑ(Ð Ð Ñ Ð Ð ØÐ2Ò2Ð2Ø"ˆC�ÑØ�ÐÐÔ Ñ#ÐÐÑØ"&ˆC�ÑØ#'ˆC�Ñ Ð Ð ØÐ-Ò-Ð-Ø*4ˆC�Ô˜YÑ'Ø'1ˆC�Ô˜VÑ$Ø�	ˆNˆNŒN˜cÑ!ˆNˆN‰NØ�ÐÐÔ Ñ$ÐÐÑÐÐØÐ1Ò1Ð1Ø#ˆC�ÑØ�	ˆNˆNŒN˜cÑ!ˆNˆN‰NØ�	ˆNˆNŒN˜dÑ"ˆNˆN‰NˆNˆNØÐ0Ò0Ð0Ø"ˆC�ÑØ!$ˆC�ÑØ�
ˆOˆOŒO˜sÑ"ˆOˆO‰OØ�	ˆNˆNŒN˜dÑ"ˆNˆN‰NˆNˆNØÐ8Ò8Ð8Ø15ˆCÐ-Ñ.Ø�
ˆOˆOŒO˜tÑ#ˆOˆO‰OØÐ#Ð$Ð$Ô$¨Ñ,Ð$Ð$Ñ$Ð$Ð$ð 9Ð8r    c                óŒ   — i dd“dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd “dd “dd “di “dd“dd“dd“ddddddddddddg dœ¥S )Nr�   rw   r„   ry   rk   r‰   rŠ   r†   Úcst_spdÚcrit_chÚcrit_mlÚpen_bnrx   r‡   rˆ   r~   rf   Frn   rg   )rj   rl   rq   rh   rt   ro   ru   rz   r{   rƒ   rŒ   r�   Úactive_rulesr   r$   s    r   Ú_init_mutation_contextz'AscendancyEngine._init_mutation_context»   sþ   € ð
Ø�sð
Ø% sð
Ø,7¸ð
Ø>JÈCð
à˜ð
à&¨ð
à-6¸ð
à=FÈð
ð �sð
ð % cð
ð ,7¸ð
ð ?JÈ4ð
ð ˜4ð	
ð "-¨bð	
ð 3EÀeð	
ð
  ð
ð
 (8¸ð
ð
 MRØ°EÈeØ$¸#ÐPSØ!°EÈØ+0ÀsØð
ð 
ð 
ð 	
r    Úloadoutr   Úactive_skillsúOptional[List[ChanVoDan]]Úequipped_itemsúOptional[Dict[str, Any]]r   c           	     óœ  — |                       |¦  «        }|                      ¦   «         }|j        D �]M}| j                             |¦  «        }|sŒ |j                             ¦   «         D ]¼\  }	}
|	dk    r|dxx         |
z  cc<   Œ|	dk    r|dxx         |
z  cc<   Œ3|	dk    r|dxx         |
z  cc<   ŒJ|	dk    r|dxx         |
z  cc<   Œa|	d	k    r|d
xx         |
z  cc<   Œx|	dk    r|dxx         |
z  cc<   Œ�|	dk    r|dxx         |
z  cc<   Œ¦|	dk    r|dxx         |
z  cc<   Œ½|j        t          j	        k    rB|j
        r;|d                              |j
        ¦  «         |                      |j
        |¦  «         �ŒOt          d7i dt          |d         d¦  «        “dt          |d         d¦  «        “dt          |d         d¦  «        “dt          |d         d¦  «        “dt          |d         d¦  «        “d	t          |d
         d¦  «        “dt          |d         d¦  «        “dt          |d         d¦  «        “dt          |d         d¦  «        “dt          |d         d¦  «        “d|d         “d|d         “d|d         “d|d         “d|d         “d |d          “d!|d"         “d#|d$         “d%|d&         “d'|d'         “d(|d)         “d*|d+         “d,t          |d-         d¦  «        “d.t          |d/         d¦  «        “d0|d0         “d1|d1         “d2|d3         “d4|d4         “d5t          |d5         d¦  «        “d6|d         “ŽS )8uS   TÃ­nh toÃ¡n hiá»‡u á»©ng cá»™ng dá»“n vÃ  thá»±c thi cÃ¡c Keystone Paradigm Shifts.Údamage_multiplierr‰   Úhp_multiplierr�   Úward_multiplierry   Úarmor_multiplierrk   Úattack_speed_bonusrŠ   Úcrit_chance_bonusr‘   Úcrit_multiplier_bonusr’   Úpenetration_bonusr“   r”   é   Úqi_multiplierr„   Úcast_speed_bonusr�   Úforced_max_hprx   Úforced_max_qir‡   Úforced_max_wardrˆ   Úattribute_conversionsr~   rf   rn   Útwo_hand_stat_boostrg   Úarmor_converts_to_bone_platerj   Úelemental_taken_as_physicalrl   rq   Úskills_convert_to_chaosrh   Ústrikes_convert_to_slamrt   Úskills_damage_boostro   Úcooldown_multiplierru   rz   r{   Úmind_over_matter_ratiorƒ   rŒ   r�   Úactive_paradigm_rulesr   )r*   r•   rB   r"   r[   Ústat_modifiersÚitemsrU   r   ÚKEYSTONEÚparadigm_rule_idÚappendrŽ   r   Úround)r%   r'   r–   r—   r™   r:   rb   rI   rV   ÚkÚvs              r   Úcalculate_mutationsz$AscendancyEngine.calculate_mutationsÉ   s©  € ð ×(Ò(¨Ñ2Ô2ˆØ×)Ò)Ñ+Ô+ˆàÔ(ð 	Fñ 	FˆCØ”:—>’> #Ñ&Ô&ˆDØð ØàÔ+×1Ò1Ñ3Ô3ð 'ð '‘��1ØÐ+Ò+Ð+Ø˜
�O�O”O qÑ(�O�O‘O�OØ˜/Ò)Ð)Ø˜	�N�N”N aÑ'�N�N‘N�NØÐ+Ò+Ð+Ø˜Ð$Ð$Ô$¨Ñ)Ð$Ð$Ñ$Ð$ØÐ,Ò,Ð,Ø˜Ð%Ð%Ô%¨Ñ*Ð%Ð%Ñ%Ð%ØÐ.Ò.Ð.Ø˜	�N�N”N aÑ'�N�N‘N�NØÐ-Ò-Ð-Ø˜	�N�N”N aÑ'�N�N‘N�NØÐ1Ò1Ð1Ø˜	�N�N”N aÑ'�N�N‘N�NØÐ-Ò-Ð-Ø˜�M�M”M QÑ&�M�M‘MøàŒ~Õ!3Ô!<Ò<Ð<ÀÔAVÐ<Ø�NÔ#×*Ò*¨4Ô+@ÑAÔAÐAØ×)Ò)¨$Ô*?ÀÑEÔEÐEùå'ð 
ð 
ð 
Ý  I¤°Ñ2Ô2Ð2ð
å  I¤°Ñ2Ô2Ð2ð
õ " # kÔ"2°AÑ6Ô6Ð6ð
õ # 3 |Ô#4°aÑ8Ô8Ð8ð	
õ
 $ C¨
¤O°QÑ7Ô7Ð7ð
õ  % S¨¤^°QÑ7Ô7Ð7ð
õ # 3 y¤>°1Ñ5Ô5Ð5ð
õ $ C¨	¤N°AÑ6Ô6Ð6ð
õ #(¨¨I¬¸Ñ":Ô":Ð":ð
õ $ C¨¤M°1Ñ5Ô5Ð5ð
ð ˜kÔ*Ð*ð
ð ˜kÔ*Ð*ð
ð   Ô.Ð.ð
ð #& kÔ"2Ð"2ð
ð !Ð!3Ô4Ð4ð
ð  !Ð!3Ô4Ð4ð!
ð" !$Ð$4Ô 5Ð 5ð#
ð$ *-¨\Ô):Ð):ð%
ð& ),¨MÔ(:Ð(:ð'
ð( !Ð!3Ô4Ð4ð)
ð* %(Ð(9Ô$:Ð$:ð+
ð, %(Ð(9Ô$:Ð$:ð-
õ. !& cÐ*<Ô&=¸qÑ AÔ AÐ Að/
õ0 !& c¨/Ô&:¸AÑ >Ô >Ð >ð1
ð2 ˜^Ô,Ð,ð3
ð4 ˜oÔ.Ð.ð5
ð6 $' {Ô#3Ð#3ð7
ð8 ),Ð,IÔ(JÐ(Jð9
õ: $ CÐ(;Ô$<¸aÑ@Ô@Ð@ð;
ð< #& nÔ"5Ð"5ð=
ð 	
r    )r   r   )r'   r(   r   r   rG   )r'   r(   r   r(   r+   r,   r   r-   )r'   r(   r>   r   r   r?   )r:   r   r   r(   )r'   r(   rM   r(   r   r?   )r`   ra   rb   rc   r   r   )r   rc   )NN)
r'   r(   r–   r   r—   r˜   r™   rš   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r*   r=   rD   rL   rY   r_   rŽ   r•   r¼   r   r    r   r   r      s  € € € € € ðð ðEð Eð Eð Eð,ð ,ð ,ð ,ð NRð)ð )ð )ð )ð )ð>\ð \ð \ð \ð
ð 
ð 
ð 
ðið ið ið ið8Að Að Að Að +-ð +-ð +-ð +-ðZ
ð 
ð 
ð 
ð$ 48Ø37ðE
ð E
ð E
ð E
ð E
ð E
ð E
r    r   N)rÀ   Ú
__future__r   Útypingr   r   r   r   r   r	   Úserver.world.ascendancy_typesr
   r   r   r   r   r   Úserver.world.ascendancy_catalogr   r   Úserver.world.martial_typesr   r   r   r   r    r   ú<module>rÆ      s"  ððð ð #Ð "Ð "Ð "Ð "Ð "Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð CÐ BÐ BÐ BÐ BÐ BÐ BÐ Bðt
ð t
ð t
ð t
ð t
ñ t
ô t
ð t
ð t
ð t
r    