
    FD]e\                     
   % 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
  S SKJr  S SKJr  S SKJr  S SKJrJrJrJrJr  S SKrS SKJr   S SK	Jr  \b  S SKrS S	KJrJr  S S
K J!r!J"r"J#r#  \RH                  " \RJ                  " \&5      5      r'S r(S r)S r* " S S\RV                  RX                  5      r- " S S5      r.\ " S S5      5       r/\RV                  Ra                  SSSS9r1\RV                  Ra                  SSSS9r2\RV                  Ra                  SSSS9r3\RV                  Ra                  SSSS9r4\RV                  Ra                  SS SS9r5\RV                  Ra                  S!S"SS9r6\RV                  Ro                  S#S$S%/ S&QS'9r8\RV                  Ra                  S(S)SS9r9\RV                  Ru                  S*S+\;" 5       S,9r<S-\=S.\>S/\>S0\>S1\>S2\>S3\>S4\RV                  Rt                  4S5 jr?0 r@\\ R                  \\\RV                  R                  \RV                  R                  \RV                  R                  4   \\RV                  R                  \RV                  R                  \RV                  R                  4   4   4   \CS6'   S7S8SS9.S:S;SS9.S<S=SS9.S>S?SS9.S@SASS9.SBSCSS9.SD.rD\\=\\=\\\>\>\>4   \\RV                  Rt                  S4   4   4   4   \CSE'   \' SF3rE\R                  " \E5      (       al  \G" \E5       rH\R                  " \H5      rJ\JSG   S*   R                  5        H/  u  rLrM\L\D;   a  M  \MSH   \MSI   \MSJ   4\MSK   \MSL   \MSM   4SS9.\D\L'   M1     SSS5        SN// SOQ/ SPQ/ SQQ/ SRQSSST/SD.rN\\=\\=   4   \CSU'   \R                  SV\R                  SV\R                  SV\R                  SV0rS\\\=4   \CSW'   0 rT\\\ R                  4   \CSX'   SYSZS[S&.rU\\=\=4   \CS\'   0 qV\\=\ R                  4   \CS]'   SqW\ R                  \CS^'   SqX\ R                  \CS_'   SrY\Z\CS`'   Sa\ R                  Sb\\>\>\>4   Sc\Sd\Z4Se jr[Sf\/Sa\ R                  4Sg jr\Shr]Shr^ " Si Sj\5      r_\_" 5       r`\aSk:X  a  \ R                  " Sl\`R                   Sm35        \	 H  rd\dR                  \`R                  :X  d  M  \dR                  (       a  \dR                  5         \	R                  " \d5        \ R                  " Sl\`R                   Sn35        \dR                  R                  \`R                  li          O   \" \`5        g! \ a    Sr GNf = f! , (       d  f       GN= f)o    N)	ModTypesRegisterModSDKModEnabledSaveTypeGameOptionManagerHookModsSettingsManager)PlayerRecentDamageEventData)EDamageSurfaceType)	dataclass)AnyListTupleDictUnion)path)CommandExtensions)RegisterConsoleCommandUnregisterConsoleCommand)is_obj_instanceobj_name_splitterparse_objectc                 ,    [        [        X5      U5      $ N)maxmin)valueminvmaxvs      hZ:\mnt\Skyabridged\SteamLibrary\steamapps\common\Borderlands 2\sdk_mods\BetterDamageFeedback\__init__.pyclampr#   %   s    s5&&    c                 H    U R                   U R                  U R                  4$ r   )XYZvectors    r"   Vectorr+   )   s    HHfhh))r$   c                 H    U R                   U R                  U R                  4$ r   )PitchYawRoll)rotators    r"   Rotatorr1   -   s    MM7;;55r$   c            
       <    \ rS rSr SSS.S\S\S\SS4S	 jjjrS
rg)
SubHeading1   T)IsHiddenCaptionDescriptionr5   returnNc                (    Xl         X l        X0l        g r   r6   r7   r5   )selfr6   r7   r5   s       r"   __init__SubHeading.__init__2   s     & r$   r:   ) )__name__
__module____qualname____firstlineno__strboolr<   __static_attributes__ r$   r"   r3   r3   1   s7    /1GK),@D	 r$   r3   c                   j    \ rS rSr% Sr\\S'   Sr\\S'   Sr\\S'   SSS.SS	 jjjr	S
 r
S\4S jrSrg)Location;   r   xyzNr)   r8   c                    Ub4  UR                   U l        UR                  U l        UR                  U l        g Xl        X l        X0l        g r   )r&   rJ   r'   rK   r(   rL   )r;   rJ   rK   rL   r*   s        r"   r<   Location.__init__@   s;    XXDFXXDFXXDFr$   c                 H    U R                   U R                  U R                  4$ r   rJ   rK   rL   r;   s    r"   getLocation.getJ   s    ''r$   c                 $    U R                  5        $ r   )rR   rQ   s    r"   __repr__Location.__repr__M   s    ((*r$   rP   )r   r   r   r8   N)r?   r@   rA   rB   rJ   int__annotations__rK   rL   r<   rR   rC   rU   rE   rF   r$   r"   rH   rH   ;   s?    AsJAsJAsJ  (# r$   rH   c                       \ rS rSr% Sr\\S'   Sr\R                  \S'   Sr
\\S'   Sr\\S'   \R                  r\\S'   S	r\\S
'   S	r\\S'   S	r\\S'   S rSrg)RecentDamageQ   r   damage_dealtNdamage_typelocationtimesurfaceFcritresistedhealingc                 >    U R                   c  [        5       U l         g g r   )r_   rH   rQ   s    r"   __post_init__RecentDamage.__post_init__\   s    == $JDM !r$   )r_   )r?   r@   rA   rB   r]   rX   rY   r^   	unrealsdkUObjectr_   rH   r`   r   DMGSURFACE_Genericra   rb   rD   rc   rd   rf   rE   rF   r$   r"   r[   r[   Q   sc    L#%)K"")HhD#M"4"G"GGGD$HdGT'r$   r[   zHide Damage Numberz$Disable damage numbers from showing.F)r6   r7   StartingValuezCrit Particlez"Enable 'CRITICAL' particle effect.TzColoured Critsz+Enable critical hit number colour shifting.zLarger Critsz#Enable larger critical hit numbers.z
Hit Soundsz?Play a sound when hitting enemies based on the health type hit.z
Crit Soundz)Play a sound when landing a critical hit.zCrit Sound Effectz'Sound to play on landing a critical hitDing)rl   ArcadeClick)r6   r7   rk   ChoiceszPlay Sounds From PlayerziPlay damage sounds from the player instead of from where you hit, disabling volume dropoff with distance.zDamage Coloursz'Adjust the colours for each damage typer6   r7   Childrenelementredgreenbluecrit_red
crit_green	crit_bluer8   c           	      J   [         R                  R                  U SU  3[        5       S9n[         R                  R	                  SSUSSSS9n[         R                  R	                  S	S
USSSS9n	[         R                  R	                  SSUSSSS9n
[         R                  R	                  SSUSSSS9n[         R                  R	                  SSUSSSS9n[         R                  R	                  SSUSSSS9nUU	U
UUU/Ul        [        R
                  R                  U5        U$ )NzSet the colours for rp   Redz	Red Valuer   d      )r6   r7   rk   MinValueMaxValue	IncrementGreenzGreen ValueBluez
Blue ValueCrit RedzCrit Red Value
Crit GreenzCrit Green Value	Crit BluezCrit Blue Value)r   OptionsNestedlistSliderrq   damage_colours_optionappend)rr   rs   rt   ru   rv   rw   rx   new_colour_optionr_optiong_optionb_optioncrit_r_optioncrit_g_optioncrit_b_options                 r"   gen_damage_colour_optionr      s    &--44*7)4 5 
 $$++ , H $$++! , H $$++  , H "))00$ 1 M "))00&  1 M "))00% 1 M 	" ""))*;<r$   damage_type_colour_dict)F   r   r   )r{   #   r   BodyCritOption)2   r   r   )r{   r{   r   )P      r   )r{   r   r   )r      r   )r   (   r{   )r   r   r   )r   r{   r   )r   r   r   )r   r   r{   )Normal	ExplosiveFireShock	CorrosiveSlagdefault_damage_coloursz/settings.jsonr   rz   r   r   r   r   r   z#GD_Impact.DamageType.DmgType_Normal)z0GD_Explosive.DamageType.DmgType_Explosive_Impactz<GD_Explosive.DamageType.DmgType_Explosive_Impact_ForceFlinchz9GD_Explosive.DamageType.DmgType_Explosive_Impact_Friendly)z2GD_Incendiary.DamageType.DmgType_Incendiary_Impactz8GD_Incendiary.DamageType.DmgType_Incendiary_Impact_NoDoTz2GD_Incendiary.DamageType.DmgType_Incendiary_Status)z(GD_Shock.DamageType.DmgType_Shock_Impactz.GD_Shock.DamageType.DmgType_Shock_Impact_NoDoTz(GD_Shock.DamageType.DmgType_Shock_Status)z0GD_Corrosive.DamageType.DmgType_Corrosive_Impactz6GD_Corrosive.DamageType.DmgType_Corrosive_Impact_NoDoTz0GD_Corrosive.DamageType.DmgType_Corrosive_Statusz$GD_Amp.DamageType.DmgType_Amp_Impactz$GD_Amp.DamageType.DmgType_Amp_Statuscolour_name_damage_typesz#Ake_Imp_Bullets.Ak_Play_Imp_Bulletshit_sound_names
hit_soundsz1Ake_UI.UI_Generic.Ak_Play_UI_Generic_InGame_Closez+Ake_UI.UI_HUD.Ak_Play_UI_HUD_Token_Unlockedz2Ake_UI.UI_Generic.Ak_Play_UI_Generic_InGame_Selectcrit_sound_namescrit_soundswillow_globalssound_manageruse_custom_data_inputPCdamage_locationra   was_critc                 h   [         U   n[        R                  (       a  [        U R                  R
                  5      OUn[        R                  (       a2  U(       a+  [        R                  [        [        R                     U5        [        R                  (       a  [        R                  UU5        g g r   )r   sound_location_optionCurrentValuer+   PawnrH   crit_sound_optionr   StaticPlayWorldAkEventr   crit_sound_selectionhit_sound_option)r   r   ra   r   soundr_   s         r"   play_damage_soundr   6  s     wE !-- 	rww  
 %%(,,,99:	
 $$,,	
 %r$   eventc                    U R                   nUS::  a  g [        R                  5       R                  5       nU R                  R                  5       nSUR                  U R                  5      ;  a!  [        XU R                  U R                  5        [        R                  (       a  g [        UR                  5      nUR                  R                   R#                  UR$                  UU5      nU R                  c  SnOU R                  [&        ;  ab  U R                  R(                  R*                  U R                  R(                  R,                  U R                  R(                  R.                  4nUn	OR[&        U R                     u  p[0        R                  (       a  U R                  (       a  U	nOUn[3        S U 5       5      nX#R4                  :  a  Sn
X#R6                  -  nOSn
UR9                  UR:                  U
5        UR=                  UR>                  W5        UR9                  UR@                  U5        URB                  S-  nURD                  S-  n[G        URH                  RJ                  5      n[3        S [M        X5       5       5      n[O        U Vs/ s H  oS-  PM	     sn5      n[Q        UU-
  U-  S	S
5      n[R        R                  (       a  U R                  (       a  SU-  S-   OUnUR=                  URT                  UUU45        U R                  (       a!  [V        R                  (       a  URX                  OSnU R                  c  SO[[        U R                  R\                  5      nUR^                  UR`                  URb                  URd                  URf                  S.U   nUR9                  UU5        UR9                  URh                  U Rj                  (       a  URl                  OS5        UR9                  URn                  U Rp                  (       a  URr                  OS5        UR=                  URt                  U5        URv                  Ul<        UR{                  S5        g s  snf )N-C6?Status)ffffff?r   r   c              3   >   #    U  H  oR                   S -  v   M     g7f)r{   N)r   .0rJ   s     r"   	<genexpr>'display_damage_event.<locals>.<genexpr>p  s     L^~~3^s   r|   r      c              3   .   #    U  H  u  pX-
  v   M     g 7fr   rF   )r   lrs      r"   r   r     s     X2W$!2Ws   g        g      ?g      ?g?)r   r|   r         F)>r]   r   GetWillowGlobalsGetGlobalsDefinitionr_   rR   PathNamer^   r   ra   rb   hide_damage_number_optionr   r1   Rotation	WorldInfoMyEmitterPoolSpawnEmitterDamageDisplayParticlesr   DamageColorRGBcrit_colour_optiontuple#DamageDisplayShortenDamageThreshold$DamageDisplayShortenDamageMultiplyBySetFloatParameterDamageDisplayShortenParamNameSetVectorParameter#DamageDisplayParticleColorParamName$DamageDisplayParticleDamageParamName DamageDisplayParticleSizeMinDist DamageDisplayParticleSizeMaxDistr+   
ViewTargetrH   zipsumr#   crit_size_option"DamageDisplayParticleSizeParamNamecrit_option*DamageDisplayParticleCriticalHitParamValuerX   DamageLanguageId)DamageDisplayParticleCriticalHitParamName+DamageDisplayParticleCriticalHitParamNameEs+DamageDisplayParticleCriticalHitParamNameFr+DamageDisplayParticleCriticalHitParamNameIt+DamageDisplayParticleCriticalHitParamNameDe%DamageDisplayParticleHealingParamNamerd   &DamageDisplayParticleHealingParamValue$DamageDisplayParticleResistParamNamerc   %DamageDisplayParticleResistParamValue)DamageDisplayParticleResistColorParamNameDamageDisplaySortPriorityTranslucencySortPriorityForceUpdate)r   r   damageglobals_defevent_locationparticle_rotation	particlesdisplay_colourstandard_colourcrit_colourdamage_shorten_parammin_distmax_distpc_view_locationlocation_differencerJ   location_difference_sqsizecrit_val	damage_id
crit_params                        r"   display_damage_eventr
  N  s   F 113HHJK^^'')Nr{{5#4#455"emmUZZH --,**77**I
  (			"9	9))++))++))++

 &'>u?P?P'Q$**uzz(N,NL^LL??? BBB 113G   77 88& ;;Q>H;;Q>Hbmm445X#6F2WXX 0C!D0C1Q$0C!DE(83x?cJD$$#(::sTzC4  66tT8J ::+22 	>>  &C0A0A0R0R,S  @@BBBBBBBB J 
H599>Cmm::QR
 88=B^^99QR   ==~ *5)N)NI&% Q "Es   Q4r|   c            	       j  ^  \ rS rSr% Sr\\S'   Sr\\S'   Sr\\S'   S\	 S	\
 3r\\S
'   \R                  r\\S'   \R                   r\\S'   \\\\\\\\\/	r\\R6                  R<                     \S'   S\R6                  R<                  S\SS4S jr \!" S5      S\"RF                  S\"RH                  S\"RJ                  S\&4S j5       r'S r(\)b   \*" S5         \*" S5        S\,RZ                  SS4S jr.\/" S\.\0SS9r1\1Re                  SS S!9  \1Re                  S"S#S$S%9  \1Re                  S&S#S'S%9  \1Re                  S(S)S*S+S,9  S\,RZ                  SS4S- jr3\/" S\3\0SS9r4\4Re                  S.S/S!9  \4Re                  SS S!9  \4Re                  S(S)S*S+S,9  S2U 4S0 jjr5S1r6U =r7$ ! \+ a     Nf = f! \+ a     Nf = f)3BetterDamageFeedbacki  zBetter Damage FeedbackName
ZetaDaemonAuthorz;Enhances damage numbers and feedback from damaging enemies.r7   v.VersionTypesSaveEnabledStater   option	new_valuer8   Nc                 r    U[         :w  d  U R                  S:w  a  g [        R                  [        U   5        g )NEnabled)r   r   r   StaticPlayUIAkEventr   )r;   r  r  s      r"   ModOptionChanged%BetterDamageFeedback.ModOptionChanged  s.     ))T[[I-E))+i*@Ar$   zBWillowGame.WillowDamageTypeDefinition.DisplayRecentDamageForPlayerthisfunctionparamsc                 :   [         (       a  g[        UR                  5      n[        R                  nUR
                  R                  R                  S:  a  [        R                  nO/UR
                  R                  5       (       a  [        R                  n[        UR                  UR                  [        UR                  S9UR                  UUR                   S-  S:H  UR                   S-  S:H  UR                   S-  S:H  5      n[#        XcR$                  5        g)NFr   r)   r|   r   r   )r   r   DamageEventDatar   DMGSURFACE_FleshDamagedActorr[   ShieldDamageDMGSURFACE_ShieldIsFullyArmoredDMGSURFACE_ArmorTotalDamageForDamageTypeDamageTypeDefinitionrH   DamageLocation
DamageTimeDamageEventFlagsr
  r   )r;   r  r  r  damage_event_datara   r   s          r"   display_damage#BetterDamageFeedback.display_damage  s     ! 78N8NO$55))66CCgM(::G++::<<(99G6622-<<=((..2a7..2a7..2a7	
 	UII.r$   c           
      >   [         R                  " SS5      q[         R                  " SS5      q[        R                  5        H#  u  p[         R                  " SU5      [        U'   M%     [        R                  5        H#  u  p[         R                  " SU5      [        U'   M%     [         R                  " SS5      nSUl	        SUl
        [        R                  5        H  u  pE[        U   S	   u  pgn[        U   S
   u  pn[        XFXxXU5      nU[        U   S'   U Hy  n[         R                  " SU5      nUR                  S   UR                  S   UR                  S   4UR                  S   UR                  S   UR                  S   44[        U'   M{     M     g )NWillowGlobalsz!WillowGame.Default__WillowGlobalsWorldSoundManagerz!Engine.Default__WorldSoundManagerAkEvent#DistributionVectorParticleParameterzsFX_CHAR_Damage_Matrix.Particles.Part_Dynamic_Number:ParticleModuleSizeScale_9.DistributionVectorParticleParameter_0)
   r4  r4  r   r   r   WillowDamageTypeDefinitionr   r|   r   r   r      )rh   
FindObjectr   r   r   itemsr   r   r   MaxInput	MaxOutputr   r   r   rq   r   )r;   keyr   objnamedamage_typesrs   rt   ru   rv   rw   rx   colour_optionr^   s                 r"   find_objects!BetterDamageFeedback.find_objects  s   "--@
 ",,!D
 +002JC(33IuEK 3 *//1JC'229eDJsO 2 ""1 B
 $$":"@"@"BD5d;FCC.DT.J6.R+H)45iM 6C"4(2+**+GU &..q1%..q1%..q1 &..q1%..q1%..q10',  , #Cr$   add_elementadd_damage_typeargsc           	         U R                   [        ;   a5  U R                  (       d#  [        R                  " U R                    S35        g [        U R                  5      S:w  a  [        R                  " S5        g [        U R                  5      S:w  a  [        R                  " S5        g  [        S U R                   5       5      u  pn [        S U R                   5       5      u  pEn[        0 :X  a  S nO[        U R                   XX4XV5      nXU4XEU4US.[        U R                   '   g ! [         a    [        R                  " S5         g f = f! [         a    [        R                  " S5         g f = f)	Nz  is already a registered elementr   z<'colour' must have 3 integer args in the format of 'r, g, b'z2'crit' must have 3 args in the format of 'r, g, b'c              3   8   #    U  H  n[        U5      v   M     g 7fr   rX   r   s     r"   r   ;BetterDamageFeedback.add_element_handler.<locals>.<genexpr>.  s     (EAQ   c              3   8   #    U  H  n[        U5      v   M     g 7fr   rG  r   s     r"   r   rH  5  s     7R	1A	rI  z:'crit' must have 3 integer args in the format of 'r, g, b'r   )rr   r   suppress_existsrh   Loglencolourrb   r   
ValueErrorr   r   )rD  rs   rt   ru   rv   rw   rx   r?  s           r"   add_element_handler(BetterDamageFeedback.add_element_handler   sI   ||55++MMT\\N2R"ST4;;1$R 499~"RS#((E(E#E D277R		7R2R/i '", $ 8LL#dj! T*!y9'4"4<<0%  R 	  P 	s$   +D+ E + EE E43E4z2Adds a damage type as an option for customisation.)splitterdescriptionrr   zWThe name of the element, used to group multiple damage types together under one colour.)helprN  r   )zThe colour for regular hits, in 'r g b' format. Values must be between 1-100 due to settings display limitations, are later divided by 100 to create the actual colour)nargsrT  rb   )zThe colour for critical hits, in 'r g b' format. Values must be between 1-100 due to settings display limitations, are later divided by 100 to create the actual colourz-xz--suppress-exists
store_truez9Suppress the error message when an object already exists.)actionrT  c                    [        U R                  5      nUc  g [        US5      (       d  [        R                  " SU S35        g U[
        ;   a+  U R                  (       d  [        R                  " U S35        g U R                  nU[        ;  a  [        R                  " SU S35        g [
        0 :X  d  [        U   S   cB  U[        ;   a#  [        U   R                  U R                  5        g U R                  /[        U'   g [        U   S   nUR                  S   UR                  S	   UR                  S
   4UR                  S   UR                  S   UR                  S   44[
        U'   g )Nr5  ztype z$ is not a WillowDamageTypeDefinitionz$ is already a registered damage typezelement z is not a registered elementr   r   r|   r   r   r   r6  )r   typer   rh   rL  r   rK  rr   r   r   r   rq   )rD  r^   rr   r?  s       r"   add_damage_type_handler,BetterDamageFeedback.add_damage_type_handlerh  se   &tyy1K"";0LMMk]2VWX55++MM[M1U"VWllG44	1MNO'2-)'28<D66,W5<<TYYG  :>,W527;HEM "**1-!**1-!**1- "**1-!**1-!**1-4#K0r$   rY  zThe DamageType.c                 B   > U R                  5         [        TU ]	  5         g r   )r@  superEnable)r;   	__class__s    r"   r^  BetterDamageFeedback.Enable  s    r$   rF   rW   )8r?   r@   rA   rB   r  rC   rY   r  r7   VERSION_MAJORVERSION_MINORr  r   Gameplayr  r   LoadOnMainMenur  r   r   r   r   r   r   r   r   r   r   r   r   Baser   r  r	   rh   ri   	UFunctionFStructrD   r-  r@  r   r   KeyErrorargparse	NamespacerP  r   r   element_parseradd_argumentrZ  type_parserr^  rE   __classcell__)r_  s   @r"   r  r    s   (D#(FCTKT}oQ}o6GS6''E8'(7(F(FoF!
1GT-'',,- 
B#++00B=@B	B 

NO %% !!	
 
 P6)V $	$]3	$%67%	h&8&8 %	T %	N 0&M	
 	##j 	$ 	
 	## 	$ 	
 	## 	$ 	
 	##L	 	$ 	
$	(*<*< $	 $	L -#&M	
 	  .? @  j 	! 	
 	  L	 	! 	
 O  		  		s$   F F) F&%F&)F21F2r  __main__[z] Manually loadedz] Removed last instance)jrh   Mods.ModMenur   r   r   r   r   r   r	   r
   r   Mods.Structsr   
Mods.Enumsr   dataclassesr   typingr   r   r   r   r   jsonosr   r   ImportErrorri  Mods.CommandExtensionsr   r   Mods.CommandExtensions.builtinsr   r   r   dirnamerealpath__file__dir_pathr#   r+   r1   r   Fieldr3   rH   r[   Booleanr   r   r   r   r   r   Spinnerr   r   r   r   r   rC   rX   r   r   ri   r   rY   r   settings_pathisfileopenfileloadsettings_jsonr8  rr   datar   rj   r!  r&  r$  r   r   r   r   r   r   r   rD   r   r
  ra  rb  r  instancer?   rL  r  mod	IsEnabledDisableremover_  r@   rF   r$   r"   <module>r     s   
 
 
 5 ) ! 0 0  &  W  <<h/0'*6&&,,  , ' ' ' *1199 6 :  
 ##++4 , 
 #**22= 3  
 !((005 1  
 !((00Q 1  
 "))11; 2  
 %,,449'	 5   &--55%{ 6  
 &--449V 5  GG	G G 	G
 G G G !!Gp  	!!((!!((!!((*	

 	!!((!!((!!((*	
		 ( $]dK%}M ,$G!<4H$ldK ,$G eE#sC-(%0E0E0L0Ld0R*SST	TUW 
 *N+;;}	m			$*956FGMMOMGT00ed7mT&\Bj)4+=tK?PQ/"7+ P 
 55


 	/.-2 $sDI~. < ))+P'')N'')N((*O	2(#-.  ;=
D#Y%6%667 < @;A$ $sCx. 
 -/T#y((() . %)	!! (#'y   ' $ t #

3S=)
  
 	
0`! `!)2C2C `!F m6 m`  !zMMAhmm_$56788x}}$}}KKMMAhmm_,CDE -0MM,D,DH)  H y  D 
	s   T< AU<UU
U