You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1815 lines
88 KiB

-- PriestShadow.lua
-- June 2018
local addon, ns = ...
local Hekili = _G[ addon ]
local class = Hekili.Class
local state = Hekili.State
local FindUnitBuffByID, FindUnitDebuffByID = ns.FindUnitBuffByID, ns.FindUnitDebuffByID
local PTR = ns.PTR
-- Conduits
-- [x] dissonant_echoes
-- [-] haunting_apparitions
-- [x] mind_devourer
-- [x] rabid_shadows
-- Covenant
-- [-] courageous_ascension
-- [x] shattered_perceptions
-- [x] festering_transfusion
-- [x] fae_fermata
-- Endurance
-- [x] charitable_soul
-- [x] lights_inspiration
-- [x] translucent_image
-- Finesse
-- [x] clear_mind
-- [x] mental_recovery
-- [-] move_with_grace
-- [x] power_unto_others
if UnitClassBase( "player" ) == "PRIEST" then
local spec = Hekili:NewSpecialization( 258, true )
spec:RegisterResource( Enum.PowerType.Insanity, {
mind_flay = {
channel = "mind_flay",
last = function ()
local app = state.buff.casting.applied
local t = state.query_time
return app + floor( ( t - app ) / class.auras.mind_flay.tick_time ) * class.auras.mind_flay.tick_time
end,
interval = function () return class.auras.mind_flay.tick_time end,
value = function () return ( state.talent.fortress_of_the_mind.enabled and 1.2 or 1 ) * 3 end,
},
mind_sear = {
channel = "mind_sear",
last = function ()
local app = state.buff.casting.applied
local t = state.query_time
return app + floor( ( t - app ) / class.auras.mind_sear.tick_time ) * class.auras.mind_sear.tick_time
end,
interval = function () return class.auras.mind_sear.tick_time end,
value = function () return state.active_enemies end,
},
void_torrent = {
channel = "void_torrent",
last = function ()
local app = state.buff.casting.applied
local t = state.query_time
return app + floor( t - app )
end,
interval = function () return class.abilities.void_torrent.tick_time end,
value = 15,
},
mindbender = {
aura = "mindbender",
last = function ()
local app = state.buff.mindbender.expires - 15
local t = state.query_time
return app + floor( ( t - app ) / ( 1.5 * state.haste ) ) * ( 1.5 * state.haste )
end,
interval = function () return 1.5 * state.haste * ( state.conduit.rabid_shadows.enabled and 0.85 or 1 ) end,
value = function () return ( state.buff.surrender_to_madness.up and 12 or 6 ) end,
},
shadowfiend = {
aura = "shadowfiend",
last = function ()
local app = state.buff.shadowfiend.expires - 15
local t = state.query_time
return app + floor( ( t - app ) / ( 1.5 * state.haste ) ) * ( 1.5 * state.haste )
end,
interval = function () return 1.5 * state.haste * ( state.conduit.rabid_shadows.enabled and 0.85 or 1 ) end,
value = function () return ( state.buff.surrender_to_madness.up and 6 or 3 ) end,
},
death_and_madness = {
aura = "death_and_madness",
last = function ()
local app = state.buff.death_and_madness.applied
local t = state.query_time
return app + floor( t - app )
end,
interval = 1,
value = 10,
}
} )
spec:RegisterResource( Enum.PowerType.Mana )
-- Talents
spec:RegisterTalents( {
fortress_of_the_mind = 22328, -- 193195
death_and_madness = 22136, -- 321291
unfurling_darkness = 22314, -- 341273
body_and_soul = 22315, -- 64129
sanlayn = 23374, -- 199855
intangibility = 21976, -- 288733
twist_of_fate = 23125, -- 109142
misery = 23126, -- 238558
searing_nightmare = 23127, -- 341385
last_word = 23137, -- 263716
mind_bomb = 23375, -- 205369
psychic_horror = 21752, -- 64044
auspicious_spirits = 22310, -- 155271
psychic_link = 22311, -- 199484
shadow_crash = 21755, -- 205385
damnation = 21718, -- 341374
mindbender = 21719, -- 200174
void_torrent = 21720, -- 263165
ancient_madness = 21637, -- 341240
hungering_void = 21978, -- 345218
-- legacy_of_the_void = 21978, -- 193225
surrender_to_madness = 21979, -- 319952
} )
-- PvP Talents
spec:RegisterPvpTalents( {
driven_to_madness = 106, -- 199259
greater_fade = 3753, -- 213602
improved_mass_dispel = 5380, -- 341167
megalomania = 5446, -- 357701
mind_trauma = 113, -- 199445
psyfiend = 763, -- 211522
thoughtsteal = 5381, -- 316262
void_origins = 739, -- 228630
void_shield = 102, -- 280749
void_shift = 128, -- 108968
void_volley = 5447, -- 357711
} )
spec:RegisterTotem( "mindbender", 136214 )
spec:RegisterTotem( "shadowfiend", 136199 )
local thought_harvester_consumed = 0
local unfurling_darkness_triggered = 0
local swp_applied = 0
spec:RegisterHook( "COMBAT_LOG_EVENT_UNFILTERED", function( event, _, subtype, _, sourceGUID, sourceName, _, _, destGUID, destName, destFlags, _, spellID, spellName )
if sourceGUID == GUID then
if subtype == "SPELL_AURA_REMOVED" then
if spellID == 288343 then
thought_harvester_consumed = GetTime()
elseif spellID == 341207 then
Hekili:ForceUpdate( subtype, true )
end
elseif subtype == "SPELL_AURA_APPLIED" then
if spellID == 341273 then
unfurling_darkness_triggered = GetTime()
elseif spellID == 341207 then
Hekili:ForceUpdate( subtype, true )
end
end
end
end )
local ExpireVoidform = setfenv( function()
applyBuff( "shadowform" )
if Hekili.ActiveDebug then Hekili:Debug( "Voidform expired, Shadowform applied. Did it stick? %s.", buff.voidform.up and "Yes" or "No" ) end
end, state )
spec:RegisterHook( "reset_precast", function ()
if buff.voidform.up or time > 0 then
applyBuff( "shadowform" )
end
if unfurling_darkness_triggered > 0 and now - unfurling_darkness_triggered < 15 then
applyBuff( "unfurling_darkness_icd", now - unfurling_darkness_triggered )
end
if pet.mindbender.active then
applyBuff( "mindbender", pet.mindbender.remains )
buff.mindbender.applied = action.mindbender.lastCast
buff.mindbender.duration = 15
buff.mindbender.expires = action.mindbender.lastCast + 15
elseif pet.shadowfiend.active then
applyBuff( "shadowfiend", pet.shadowfiend.remains )
buff.shadowfiend.applied = action.shadowfiend.lastCast
buff.shadowfiend.duration = 15
buff.shadowfiend.expires = action.shadowfiend.lastCast + 15
end
if talent.mindbender.enabled then
cooldown.fiend = cooldown.mindbender
pet.fiend = pet.mindbender
else
cooldown.fiend = cooldown.shadowfiend
pet.fiend = pet.mindbender
end
if buff.voidform.up then
state:QueueAuraExpiration( "voidform", ExpireVoidform, buff.voidform.expires )
end
if IsActiveSpell( 356532 ) then
applyBuff( "direct_mask", class.abilities.fae_guardians.lastCast + 20 - now )
end
-- If we are channeling Mind Sear, see if it started with Thought Harvester.
local _, _, _, start, finish, _, _, spellID = UnitChannelInfo( "player" )
if spellID == 48045 then
start = start / 1000
finish = finish / 1000
if start - thought_harvester_consumed < 0.1 then
applyBuff( "mind_sear_th", finish - start )
buff.mind_sear_th.applied = start
buff.mind_sear_th.expires = finish
else
removeBuff( "mind_sear_th" )
end
else
removeBuff( "mind_sear_th" )
end
if settings.pad_void_bolt and cooldown.void_bolt.remains > 0 then
reduceCooldown( "void_bolt", latency * 2 )
end
if settings.pad_ascended_blast and cooldown.ascended_blast.remains > 0 then
reduceCooldown( "ascended_blast", latency * 2 )
end
end )
spec:RegisterHook( "pregain", function( amount, resource, overcap )
if amount > 0 and resource == "insanity" and state.buff.memory_of_lucid_dreams.up then
amount = amount * 2
end
return amount, resource, overcap
end )
spec:RegisterStateTable( "priest", {
self_power_infusion = true
} )
-- Auras
spec:RegisterAuras( {
body_and_soul = {
id = 65081,
duration = 3,
type = "Magic",
max_stack = 1,
},
dark_thought = {
id = 341207,
duration = 10,
max_stack = 1,
copy = "dark_thoughts"
},
death_and_madness = {
id = 321973,
duration = 4,
max_stack = 1,
},
desperate_prayer = {
id = 19236,
duration = 10,
max_stack = 1,
},
devouring_plague = {
id = 335467,
duration = 6,
type = "Disease",
max_stack = 1,
},
dispersion = {
id = 47585,
duration = 6,
max_stack = 1,
},
fade = {
id = 586,
duration = 10,
max_stack = 1,
},
focused_will = {
id = 45242,
duration = 8,
max_stack = 2,
},
levitate = {
id = 111759,
duration = 600,
type = "Magic",
max_stack = 1,
},
mind_bomb = {
id = 226943,
duration = 6,
type = "Magic",
max_stack = 1,
},
mind_flay = {
id = 15407,
duration = function () return 4.5 * haste end,
max_stack = 1,
tick_time = function () return 0.75 * haste end,
},
mind_sear = {
id = 48045,
duration = function () return 4.5 * haste end,
max_stack = 1,
tick_time = function () return 0.75 * haste end,
},
mind_sear_th = {
duration = function () return 4.5 * haste end,
max_stack = 1,
},
mind_vision = {
id = 2096,
duration = 60,
max_stack = 1,
},
mindbender = {
duration = 15,
max_stack = 1,
},
power_infusion = {
id = 10060,
duration = 20,
max_stack = 1
},
power_word_fortitude = {
id = 21562,
duration = 3600,
type = "Magic",
max_stack = 1,
shared = "player", -- use anyone's buff on the player, not just player's.
},
power_word_shield = {
id = 17,
duration = 15,
type = "Magic",
max_stack = 1,
},
psychic_horror = {
id = 64044,
duration = 4,
type = "Magic",
max_stack = 1,
},
psychic_scream = {
id = 8122,
duration = 8,
type = "Magic",
max_stack = 1,
},
shackle_undead = {
id = 9484,
duration = 50,
type = "Magic",
max_stack = 1,
},
shadow_crash_debuff = {
id = 342385,
duration = 15,
max_stack = 2
},
shadow_mend = {
id = 342992,
duration = 15,
max_stack = 2
},
shadow_word_pain = {
id = 589,
duration = 16,
type = "Magic",
max_stack = 1,
tick_time = function () return 2 * haste end,
},
shadowfiend = {
duration = 15,
max_stack = 1
},
shadowform = {
id = 232698,
duration = 3600,
max_stack = 1,
},
shadowy_apparitions = {
id = 78203,
},
silence = {
id = 15487,
duration = 4,
type = "Magic",
max_stack = 1,
},
surrender_to_madness = {
id = 319952,
duration = 25,
max_stack = 1,
},
twist_of_fate = {
id = 123254,
duration = 8,
max_stack = 1,
},
unfurling_darkness = {
id = 341282,
duration = 15,
max_stack = 1,
},
unfurling_darkness_icd = {
id = 341291,
duration = 15,
max_stack = 1
},
vampiric_embrace = {
id = 15286,
duration = 15,
max_stack = 1,
},
vampiric_touch = {
id = 34914,
duration = 21,
type = "Magic",
max_stack = 1,
tick_time = function () return 3 * haste end,
},
void_bolt = {
id = 228266,
},
void_torrent = {
id = 263165,
duration = 3,
max_stack = 1,
tick_time = 1,
},
voidform = {
id = 194249,
duration = 15, -- function () return talent.legacy_of_the_void.enabled and 3600 or 15 end,
max_stack = 1,
--[[ generate = function( t )
local name, _, count, _, duration, expires, caster, _, _, spellID, _, _, _, _, timeMod, v1, v2, v3 = FindUnitBuffByID( "player", 194249 )
if name then
t.name = name
t.count = max( 1, count )
t.applied = max( action.void_eruption.lastCast, now )
t.expires = t.applied + 3600
t.duration = 3600
t.caster = "player"
t.timeMod = 1
t.v1 = v1
t.v2 = v2
t.v3 = v3
t.unit = "player"
return
end
t.name = nil
t.count = 0
t.expires = 0
t.applied = 0
t.duration = 3600
t.caster = "nobody"
t.timeMod = 1
t.v1 = 0
t.v2 = 0
t.v3 = 0
t.unit = "player"
end,
meta = {
up = function ()
return buff.voidform.applied > 0 and buff.voidform.drop_time > query_time
end,
drop_time = function ()
if buff.voidform.applied == 0 then return 0 end
local app = buff.voidform.applied
app = app + floor( query_time - app )
local drain = 6 + ( 0.8 * buff.voidform.stacks )
local amt = insanity.current
while ( amt > 0 ) do
amt = amt - drain
drain = drain + 0.8
app = app + 1
end
return app
end,
stacks = function ()
return buff.voidform.applied > 0 and ( buff.voidform.count + floor( offset + delay ) ) or 0
end,
remains = function ()
return max( 0, buff.voidform.drop_time - query_time )
end,
}, ]]
},
weakened_soul = {
id = 6788,
duration = function () return 7.5 * haste end,
max_stack = 1,
},
-- Azerite Powers
chorus_of_insanity = {
id = 279572,
duration = 120,
max_stack = 120,
},
death_denied = {
id = 287723,
duration = 10,
max_stack = 1,
},
depth_of_the_shadows = {
id = 275544,
duration = 12,
max_stack = 30
},
--[[ harvested_thoughts = {
id = 273321,
duration = 15,
max_stack = 1,
}, ]]
searing_dialogue = {
id = 288371,
duration = 1,
max_stack = 1
},
thought_harvester = {
id = 288343,
duration = 20,
max_stack = 1,
copy = "harvested_thoughts" -- SimC uses this name (carryover from Legion?)
},
-- Legendaries (Shadowlands)
mind_devourer = {
id = 338333,
duration = 15,
max_stack = 1,
},
measured_contemplation = {
id = 341824,
duration = 3600,
max_stack = 4
},
-- Conduits
dissonant_echoes = {
id = 343144,
duration = 10,
max_stack = 1,
},
} )
--[[ spec:RegisterHook( "advance_end", function ()
if buff.voidform.up and talent.legacy_of_the_void.enabled and insanity.current == 0 then
insanity.regen = 0
removeBuff( "voidform" )
applyBuff( "shadowform" )
end
end ) ]]
spec:RegisterGear( "tier21", 152154, 152155, 152156, 152157, 152158, 152159 )
spec:RegisterGear( "tier20", 147163, 147164, 147165, 147166, 147167, 147168 )
spec:RegisterAura( "empty_mind", {
id = 247226,
duration = 12,
max_stack = 10,
} )
spec:RegisterGear( "tier19", 138310, 138313, 138316, 138319, 138322, 138370 )
spec:RegisterGear( "anunds_seared_shackles", 132409 )
spec:RegisterAura( "anunds_last_breath", {
id = 215210,
duration = 15,
max_stack = 50,
} )
spec:RegisterGear( "heart_of_the_void", 151814 )
spec:RegisterGear( "mangazas_madness", 132864 )
spec:RegisterGear( "mother_shahrazs_seduction", 132437 )
spec:RegisterGear( "soul_of_the_high_priest", 151646 )
spec:RegisterGear( "the_twins_painful_touch", 133973 )
spec:RegisterGear( "zenkaram_iridis_anadem", 133971 )
spec:RegisterGear( "zeks_exterminatus", 144438 )
spec:RegisterAura( "zeks_exterminatus", {
id = 236546,
duration = 15,
max_stack = 1,
} )
spec:RegisterStateExpr( "current_insanity_drain", function ()
return buff.voidform.up and ( 6 + ( 0.8 * buff.voidform.stacks ) ) or 0
end )
-- Abilities
spec:RegisterAbilities( {
damnation = {
id = 341374,
cast = 0,
cooldown = 45,
gcd = "spell",
talent = "damnation",
startsCombat = true,
texture = 236295,
-- TODO: Set up cycle.
-- cycle = function ()
handler = function ()
applyDebuff( "target", "shadow_word_pain" )
applyDebuff( "target", "vampiric_touch" )
applyDebuff( "target", "devouring_plague" )
if talent.unfurling_darkness.enabled and debuff.unfurling_darkness_icd.down then
applyBuff( "unfurling_darkness" )
applyDebuff( "player", "unfurling_darkness_icd" )
end
end,
},
desperate_prayer = {
id = 19236,
cast = 0,
cooldown = 90,
gcd = "spell",
toggle = "defensives",
startsCombat = true,
texture = 237550,
handler = function ()
health.max = health.max * 1.25
gain( 0.8 * health.max, "health" )
if conduit.lights_inspiration.enabled then applyBuff( "lights_inspiration" ) end
end,
auras = {
-- Conduit
lights_inspiration = {
id = 337749,
duration = 5,
max_stack = 1
}
}
},
devouring_plague = {
id = 335467,
cast = 0,
cooldown = 0,
gcd = "spell",
spend = function () return buff.mind_devourer.up and 0 or 50 end,
spendType = "insanity",
startsCombat = true,
texture = 252997,
cycle = "devouring_plague",
handler = function ()
removeBuff( "mind_devourer" )
applyDebuff( "target", "devouring_plague" )
end,
},
dispel_magic = {
id = 528,
cast = 0,
cooldown = 0,
gcd = "spell",
spend = function () return 0.016 * ( 1 + conduit.clear_mind.mod * 0.01 ) end,
spendType = "mana",
startsCombat = false,
texture = 136066,
usable = function () return buff.dispellable_magic.up end,
handler = function ()
removeBuff( "dispellable_magic" )
if time > 0 then gain( 6, "insanity" ) end
end,
},
dispersion = {
id = 47585,
cast = 0,
cooldown = function () return talent.intangibility.enabled and 90 or 120 end,
gcd = "spell",
toggle = "defensives",
defensive = true,
startsCombat = false,
texture = 237563,
handler = function ()
applyBuff( "dispersion" )
setCooldown( "global_cooldown", 6 )
end,
},
fade = {
id = 586,
cast = 0,
cooldown = 30,
gcd = "spell",
startsCombat = true,
texture = 135994,
handler = function ()
applyBuff( "fade" )
if conduit.translucent_image.enabled then applyBuff( "translucent_image" ) end
end,
auras = {
-- Conduit
translucent_image = {
id = 337661,
duration = 5,
max_stack = 1
}
}
},
leap_of_faith = {
id = 73325,
cast = 0,
cooldown = 90,
charges = function () return legendary.vault_of_heavens.enabled and 2 or nil end,
recharge = function () return legendary.vault_of_heavens.enabled and 90 or nil end,
gcd = "spell",
spend = 0.03,
spendType = "mana",
startsCombat = false,
texture = 463835,
handler = function ()
if azerite.death_denied.enabled then applyBuff( "death_denied" ) end
if legendary.vault_of_heavens.enabled then setDistance( 5 ) end
end,
},
levitate = {
id = 1706,
cast = 0,
cooldown = 0,
gcd = "spell",
spend = 0.01,
spendType = "mana",
startsCombat = true,
texture = 135928,
handler = function ()
applyBuff( "levitate" )
end,
},
mass_dispel = {
id = 32375,
cast = function () return pvptalent.improved_mass_dispel.enabled and 0.5 or 1.5 end,
cooldown = function () return pvptalent.improved_mass_dispel.enabled and 30 or 45 end,
gcd = "spell",
spend = function () return 0.08 * ( 1 + ( conduit.clear_mind.mod * 0.01 ) ) end,
spendType = "mana",
startsCombat = true,
texture = 135739,
usable = function () return buff.dispellable_magic.up or debuff.dispellable_magic.up end,
handler = function ()
removeBuff( "dispellable_magic" )
removeDebuff( "player", "dispellable_magic" )
if time > 0 then gain( 6, "insanity" ) end
end,
},
mind_blast = {
id = 8092,
cast = function () return buff.dark_thought.up and 0 or ( 1.5 * haste ) end,
charges = function () return 1 + ( buff.voidform.up and 1 or 0 ) + ( buff.dark_thought.up and 1 or 0 ) end,
cooldown = function ()
return 7.5 * haste
end,
recharge = function ()
return 7.5 * haste
end,
gcd = "spell",
castableWhileCasting = function ()
if buff.dark_thought.up and ( buff.casting.v1 == class.abilities.mind_flay.id or buff.casting.v1 == class.abilities.mind_sear.id or buff.casting.v1 == class.abilities.void_torrent.id ) then return true end
return nil
end,
velocity = 15,
spend = function () return ( talent.fortress_of_the_mind.enabled and 1.2 or 1 ) * ( -8 - buff.empty_mind.stack ) * ( buff.surrender_to_madness.up and 2 or 1 ) end,
spendType = "insanity",
startsCombat = true,
texture = 136224,
handler = function ()
removeBuff( "dark_thought" )
removeBuff( "harvested_thoughts" )
removeBuff( "empty_mind" )
end,
},
mind_bomb = {
id = 205369,
cast = 0,
cooldown = 30,
gcd = "spell",
startsCombat = true,
texture = 136173,
talent = "mind_bomb",
handler = function ()
applyDebuff( "target", "mind_bomb" )
end,
},
mind_flay = {
id = 15407,
cast = 4.5,
cooldown = 0,
gcd = "spell",
spend = 0,
spendType = "insanity",
channeled = true,
breakable = true,
breakchannel = function ()
removeDebuff( "target", "mind_flay" )
end,
prechannel = true,
tick_time = function () return class.auras.mind_flay.tick_time end,
startsCombat = true,
texture = 136208,
aura = "mind_flay",
nobuff = "boon_of_the_ascended",
bind = "ascended_blast",
start = function ()
applyDebuff( "target", "mind_flay" )
channelSpell( "mind_flay" )
forecastResources( "insanity" )
end,
},
mind_sear = {
id = 48045,
cast = 4.5,
cooldown = 0,
gcd = "spell",
spend = 0,
spendType = "insanity",
channeled = true,
breakable = true,
breakchannel = function ()
removeDebuff( "target", "mind_sear" )
removeBuff( "mind_sear_th" )
end,
prechannel = true,
tick_time = function () return class.auras.mind_flay.tick_time end,
startsCombat = true,
texture = 237565,
aura = "mind_sear",
start = function ()
applyDebuff( "target", "mind_sear" )
channelSpell( "mind_sear" )
if azerite.searing_dialogue.enabled then applyDebuff( "target", "searing_dialogue" ) end
if buff.thought_harvester.up then
removeBuff( "thought_harvester" )
applyBuff( "mind_sear_th" )
end
forecastResources( "insanity" )
end,
},
-- SimulationCraft module: Mindbender and Shadowfiend are interchangeable.
mindbender = {
id = function () return talent.mindbender.enabled and 200174 or 34433 end,
cast = 0,
cooldown = function () return ( essence.vision_of_perfection.enabled and 0.87 or 1 ) * ( talent.mindbender.enabled and 60 or 180 ) end,
gcd = "spell",
toggle = function () return not talent.mindbender.enabled and "cooldowns" or nil end,
startsCombat = true,
texture = function () return talent.mindbender.enabled and 136214 or 136199 end,
-- talent = "mindbender",
handler = function ()
summonPet( talent.mindbender.enabled and "mindbender" or "shadowfiend", 15 )
applyBuff( talent.mindbender.enabled and "mindbender" or "shadowfiend" )
end,
copy = { "shadowfiend", 200174, 34433, 132603 }
},
power_infusion = {
id = 10060,
cast = 0,
cooldown = function () return 120 - ( conduit.power_unto_others.mod and group and conduit.power_unto_others.mod or 0 ) end,
gcd = "off",
toggle = "cooldowns",
startsCombat = false,
texture = 135939,
indicator = function () return group and legendary.twins_of_the_sun_priestess.enabled and "cycle" or nil end,
handler = function ()
applyBuff( "power_infusion" )
stat.haste = stat.haste + 0.25
end,
},
power_word_fortitude = {
id = 21562,
cast = 0,
cooldown = 0,
gcd = "spell",
spend = 0.04,
spendType = "mana",
startsCombat = false,
texture = 135987,
usable = function () return buff.power_word_fortitude.down end,
handler = function ()
applyBuff( "power_word_fortitude" )
end,
},
power_word_shield = {
id = 17,
cast = 0,
cooldown = 0,
gcd = "spell",
spend = 0.02,
spendType = "mana",
nodebuff = "weakened_soul",
startsCombat = false,
texture = 135940,
handler = function ()
applyBuff( "power_word_shield" )
applyDebuff( "weakened_soul" )
if talent.body_and_soul.enabled then applyBuff( "body_and_soul" ) end
if time > 0 then gain( 6, "insanity" ) end
-- charitable_soul triggered by casting on others; not modeled.
end,
auras = {
-- Conduit
charitable_soul = {
id = 337716,
duration = 10,
max_stack = 1
}
}
},
psychic_horror = {
id = 64044,
cast = 0,
cooldown = 45,
gcd = "spell",
startsCombat = true,
texture = 237568,
talent = "psychic_horror",
handler = function ()
applyDebuff( "target", "psychic_horror" )
end,
},
psychic_scream = {
id = 8122,
cast = 0,
cooldown = 60,
gcd = "spell",
spend = 0.01,
spendType = "mana",
startsCombat = true,
texture = 136184,
notalent = "mind_bomb",
handler = function ()
applyDebuff( "target", "psychic_scream" )
end,
auras = {
-- Conduit
mental_recovery = {
id = 337956,
duration = 5,
max_stack = 1
}
}
},
purify_disease = {
id = 213634,
cast = 0,
cooldown = 8,
gcd = "spell",
spend = 0.01,
spendType = "mana",
startsCombat = true,
texture = 135935,
usable = function () return debuff.dispellable_disease.up end,
handler = function ()
removeBuff( "dispellable_disease" )
if time > 0 then gain( 6, "insanity" ) end
end,
},
searing_nightmare = {
id = 341385,
cast = 0,
cooldown = 0,
gcd = "spell",
castableWhileCasting = true,
talent = "searing_nightmare",
spend = 30,
spendType = "insanity",
startsCombat = true,
texture = 1022950,
channeling = "mind_sear",
handler = function ()
applyDebuff( "target", "shadow_word_pain" )
active_dot.shadow_word_pain = max( active_enemies, active_dot.shadow_word_pain )
end,
},
shackle_undead = {
id = 9484,
cast = 1.275,
cooldown = 0,
gcd = "spell",
spend = 0.01,
spendType = "mana",
startsCombat = true,
texture = 136091,
handler = function ()
applyDebuff( "target", "shackle_undead" )
end,
},
shadow_crash = {
id = 205385,
cast = 0,
cooldown = 30,
gcd = "spell",
spend = -20,
spendType = "insanity",
startsCombat = true,
texture = 136201,
},
shadow_mend = {
id = 186263,
cast = 1.5,
cooldown = 0,
gcd = "spell",
spend = 0.04,
spendType = "mana",
startsCombat = true,
texture = 136202,
handler = function ()
removeBuff( "depth_of_the_shadows" )
if level > 55 then addStack( "shadow_mend", nil, 1 ) end
removeBuff( "measured_contemplation" )
end,
},
shadow_word_death = {
id = 32379,
cast = 0,
cooldown = 20,
hasteCD = true,
gcd = "spell",
startsCombat = true,
texture = 136149,
usable = function ()
if settings.sw_death_protection == 0 then return true end
return health.percent >= settings.sw_death_protection, "health percent [ " .. health.percent .. " ] is below user setting [ " .. settings.sw_death_protection .. " ]"
end,
handler = function ()
removeBuff( "zeks_exterminatus" )
if legendary.painbreaker_psalm.enabled then
local power = 0
if debuff.shadow_word_pain.up then
power = power + 15 * min( debuff.shadow_word_pain.remains, 8 ) / 8
if debuff.shadow_word_pain.remains < 8 then removeDebuff( "shadow_word_pain" )
else debuff.shadow_word_pain.expires = debuff.shadow_word_pain.expires - 8 end
end
if debuff.vampiric_touch.up then
power = power + 15 * min( debuff.vampiric_touch.remains, 8 ) / 8
if debuff.vampiric_touch.remains <= 8 then removeDebuff( "vampiric_touch" )
else debuff.vampiric_touch.expires = debuff.vampiric_touch.expires - 8 end
end
if power > 0 then gain( power, "insanity" ) end
end
if legendary.shadowflame_prism.enabled then
if pet.fiend.active then pet.fiend.expires = pet.fiend.expires + 1 end
end
end,
},
shadow_word_pain = {
id = 589,
cast = 0,
cooldown = 0,
gcd = "spell",
spend = -4,
spendType = "insanity",
startsCombat = true,
texture = 136207,
cycle = "shadow_word_pain",
handler = function ()
applyDebuff( "target", "shadow_word_pain" )
end,
},
shadowform = {
id = 232698,
cast = 0,
cooldown = 0,
gcd = "spell",
startsCombat = false,
texture = 136200,
essential = true,
nobuff = function () return buff.voidform.up and "voidform" or "shadowform" end,
handler = function ()
applyBuff( "shadowform" )
end,
},
silence = {
id = 15487,
cast = 0,
cooldown = 45,
gcd = "off",
startsCombat = true,
texture = 458230,
toggle = "interrupts",
interrupt = true,
debuff = "casting",
readyTime = state.timeToInterrupt,
handler = function ()
interrupt()
applyDebuff( "target", "silence" )
end,
},
surrender_to_madness = {
id = 319952,
cast = 0,
cooldown = 90,
gcd = "spell",
toggle = "cooldowns",
startsCombat = true,
texture = 254090,
usable = function () return target.time_to_die < settings.stm_timer, format( "time_to_die %.2f > %.2f", target.time_to_die, settings.stm_timer ) end,
handler = function ()
applyBuff( "voidform" )
applyBuff( "surrender_to_madness" )
applyDebuff( "target", "surrender_to_madness" )
end,
},
vampiric_embrace = {
id = 15286,
cast = 0,
cooldown = 120,
gcd = "spell",
startsCombat = false,
texture = 136230,
handler = function ()
applyBuff( "vampiric_embrace" )
if time > 0 then gain( 6, "insanity" ) end
end,
},
vampiric_touch = {
id = 34914,
cast = function () return buff.unfurling_darkness.up and 0 or 1.5 * haste end,
cooldown = 0,
gcd = "spell",
spend = -5,
spendType = "insanity",
startsCombat = true,
texture = 135978,
cycle = function () return talent.misery.enabled and "shadow_word_pain" or "vampiric_touch" end,
handler = function ()
applyDebuff( "target", "vampiric_touch" )
if talent.misery.enabled then
applyDebuff( "target", "shadow_word_pain" )
end
if talent.unfurling_darkness.enabled then
if buff.unfurling_darkness.up then
removeBuff( "unfurling_darkness" )
elseif debuff.unfurling_darkness_icd.down then
applyBuff( "unfurling_darkness" )
applyDebuff( "player", "unfurling_darkness_icd" )
end
end
-- Thought Harvester is a 20% chance to proc, consumed by Mind Sear.
-- if azerite.thought_harvester.enabled then applyBuff( "harvested_thoughts" ) end
end,
},
void_bolt = {
id = 205448,
known = 228260,
cast = 0,
cooldown = function ()
return haste * 4.5
end,
gcd = "spell",
spend = function ()
return buff.surrender_to_madness.up and -24 or -12
end,
spendType = "insanity",
startsCombat = true,
texture = 1035040,
velocity = 40,
buff = function () return buff.dissonant_echoes.up and "dissonant_echoes" or "voidform" end,
bind = "void_eruption",
--[[ cooldown_ready = function ()
return buff.dissonant_echoes.up or buff.voidform.up
end, ]]
handler = function ()
removeBuff( "dissonant_echoes" )
if debuff.shadow_word_pain.up then debuff.shadow_word_pain.expires = debuff.shadow_word_pain.expires + 3 end
if debuff.vampiric_touch.up then debuff.vampiric_touch.expires = debuff.vampiric_touch.expires + 3 end
if talent.legacy_of_the_void.enabled and debuff.devouring_plague.up then debuff.devouring_plague.expires = query_time + debuff.devouring_plague.duration end
removeBuff( "anunds_last_breath" )
end,
impact = function ()
if talent.hungering_void.enabled then
if debuff.hungering_void.up then buff.voidform.expires = buff.voidform.expires + 1 end
applyDebuff( "target", "hungering_void", 6 )
end
end,
copy = 343355,
auras = {
hungering_void = {
id = 345219,
duration = 6,
max_stack = 1
}
}
},
void_eruption = {
id = 228260,
cast = function ()
if pvptalent.void_origins.enabled then return 0 end
return haste * 1.5
end,
cooldown = 90,
gcd = "spell",
startsCombat = true,
texture = 1386548,
nobuff = function () return buff.dissonant_echoes.up and "dissonant_echoes" or "voidform" end,
bind = "void_bolt",
toggle = "cooldowns",
cooldown_ready = function ()
return cooldown.void_eruption.remains == 0 and buff.voidform.down
end,
handler = function ()
applyBuff( "voidform" )
end,
},
void_torrent = {
id = 263165,
cast = 3,
channeled = true,
fixedCast = true,
cooldown = 30,
gcd = "spell",
spend = -15,
spendType = "insanity",
startsCombat = true,
texture = 1386551,
aura = "void_torrent",
talent = "void_torrent",
tick_time = function ()
return class.auras.void_torrent.tick_time
end,
breakchannel = function ()
removeDebuff( "target", "void_torrent" )
end,
start = function ()
applyDebuff( "target", "void_torrent" )
applyDebuff( "target", "devouring_plague" )
if debuff.vampiric_touch.up then applyDebuff( "target", "vampiric_touch" ) end -- This should refresh/pandemic properly.
if debuff.shadow_word_pain.up then applyDebuff( "target", "shadow_word_pain" ) end -- This should refresh/pandemic properly.
end,
tick = function ()
if debuff.vampiric_touch.up then applyDebuff( "target", "vampiric_touch" ) end -- This should refresh/pandemic properly.
if debuff.shadow_word_pain.up then applyDebuff( "target", "shadow_word_pain" ) end -- This should refresh/pandemic properly.
end,
},
-- Priest - Kyrian - 325013 - boon_of_the_ascended (Boon of the Ascended)
boon_of_the_ascended = {
id = 325013,
cast = 1.5,
cooldown = 180,
gcd = "spell",
startsCombat = false,
texture = 3565449,
toggle = "essences",
handler = function ()
applyBuff( "boon_of_the_ascended" )
end,
auras = {
boon_of_the_ascended = {
id = 325013,
duration = 10,
max_stack = 20 -- ???
}
}
},
ascended_nova = {
id = 325020,
known = 325013,
cast = 0,
cooldown = 0,
gcd = "spell", -- actually 1s and not 1.5s...
startsCombat = true,
texture = 3528287,
buff = "boon_of_the_ascended",
bind = "boon_of_the_ascended",
handler = function ()
addStack( "boon_of_the_ascended", nil, active_enemies )
end
},
ascended_blast = {
id = 325283,
known = 15407,
cast = 0,
cooldown = 3,
hasteCD = true,
gcd = "totem", -- actually 1s and not 1.5s...
startsCombat = true,
texture = 3528286,
buff = "boon_of_the_ascended",
bind = "mind_flay",
handler = function ()
addStack( "boon_of_the_ascended", nil, 5 )
if state.spec.shadow then gain( 6, "insanity" ) end
end,
},
-- Priest - Necrolord - 324724 - unholy_nova (Unholy Nova)
unholy_nova = {
id = 324724,
cast = 0,
cooldown = 60,
gcd = "spell",
spend = 0.05,
spendType = "mana",
startsCombat = true,
texture = 3578229,
toggle = "essences",
handler = function ()
applyDebuff( "target", "unholy_transfusion" )
active_dot.unholy_transfusion = active_enemies
if legendary.pallid_command.enabled then applyBuff( "pallid_command" ) end
if soulbind.kevins_oozeling.enabled then applyBuff( "kevins_oozeling" ) end
end,
range = 15,
auras = {
unholy_transfusion = {
id = 324724,
duration = function () return conduit.festering_transfusion.enabled and 17 or 15 end,
max_stack = 1,
},
pallid_command = {
id = 356418,
duration = 20,
max_stack = 1
}
}
},
-- Priest - Night Fae - 327661 - fae_guardians (Fae Guardians)
fae_guardians = {
id = 327661,
cast = 0,
cooldown = 90,
gcd = "spell",
spend = 0.02,
spendType = "mana",
toggle = "essences",
nobuff = "direct_mask",
handler = function ()
applyBuff( "fae_guardians" )
summonPet( "wrathful_faerie" )
applyDebuff( "target", "wrathful_faerie" )
summonPet( "guardian_faerie" )
applyBuff( "guardian_faerie" )
summonPet( "benevolent_faerie" )
applyBuff( "benevolent_faerie" )
if legendary.bwonsamdis_pact.enabled then
applyBuff( "direct_mask" )
applyDebuff( "target", "haunted_mask" )
end
-- TODO: Check totem/guardian API re: faeries.
end,
bind = "direct_mask",
auras = {
fae_guardians = {
id = 327661,
duration = 20,
max_stack = 1,
},
wrathful_faerie = {
id = 342132,
duration = 20,
max_stack = 1,
},
wrathful_faerie_fermata = {
id = 345452,
duration = function () return conduit.fae_fermata.enabled and ( conduit.fae_fermata.mod * 0.001 ) or 3 end,
max_stack = 1
},
guardian_faerie = {
id = 327694,
duration = 20,
max_stack = 1,
},
guardian_faerie_fermata = {
id = 345451,
duration = function () return conduit.fae_fermata.enabled and ( conduit.fae_fermata.mod * 0.001 ) or 3 end,
max_stack = 1
},
benevolent_faerie = {
id = 327710,
duration = 20,
max_stack = 1,
},
benevolent_faerie_fermata = {
id = 345453,
duration = function () return conduit.fae_fermata.enabled and ( conduit.fae_fermata.mod * 0.001 ) or 3 end,
max_stack = 1
},
haunted_mask = {
id = 356968,
duration = 20,
max_stack = 1,
},
direct_mask = {
duration = 20,
max_stack = 1,
}
}
},
direct_mask = {
id = 356532,
cast = 0,
cooldown = 0,
gcd = "off",
buff = "direct_mask",
bind = "fae_guardians",
handler = function ()
applyDebuff( "target", "haunted_mask" )
end,
},
-- Priest - Venthyr - 323673 - mindgames (Mindgames)
mindgames = {
id = 323673,
cast = 1.5,
cooldown = 45,
gcd = "spell",
spend = 0.002,
spendType = "mana",
toggle = "essences",
handler = function ()
applyDebuff( "target", "mindgames" )
end,
auras = {
mindgames = {
id = 323673,
duration = function () return ( conduit.shattered_perceptions.enabled and 7 or 5 ) + ( legendary.shadow_word_manipulation.enabled and 3 or 0 ) end,
max_stack = 1,
},
shadow_word_manipulation = {
id = 357028,
duration = 10,
max_stack = 1,
},
},
},
} )
spec:RegisterOptions( {
enabled = true,
aoe = 3,
nameplates = false,
nameplateRange = 8,
damage = true,
damageExpiration = 6,
potion = "potion_of_spectral_intellect",
package = "Shadow",
} )
spec:RegisterSetting( "pad_void_bolt", true, {
name = "Pad |T1035040:0|t Void Bolt Cooldown",
desc = "If checked, the addon will treat |T1035040:0|t Void Bolt's cooldown as slightly shorter, to help ensure that it is recommended as frequently as possible during Voidform.",
type = "toggle",
width = "full"
} )
spec:RegisterSetting( "pad_ascended_blast", true, {
name = "Pad |T3528286:0|t Ascended Blast Cooldown",
desc = "If checked, the addon will treat |T3528286:0|t Ascended Blast's cooldown as slightly shorter, to help ensure that it is recommended as frequently as possible during Boon of the Ascended.",
type = "toggle",
width = "full"
} )
spec:RegisterSetting( "sw_death_protection", 50, {
name = "|T136149:0|t Shadow Word: Death Health Threshold",
desc = "If set above 0, the addon will not recommend |T136149:0|t Shadow Word: Death while your health percentage is below this threshold. This setting can help keep you from killing yourself.",
type = "range",
min = 0,
max = 100,
step = 0.1,
width = "full",
} )
spec:RegisterSetting( "ignore_solvent", true, {
name = "Ignore Volatile Solvent for Void Eruption",
desc = "If disabled, when you have the Volatile Solvent conduit enabled, the addon will not use Void Eruption unless you currently have a Volatile Solvent buff applied (from casting Fleshcraft).",
type = "toggle",
width = "full",
} )
spec:RegisterSetting( "stm_timer", 20, {
name = "|T254090:0|t Surrender to Madness Time",
desc = "|T254090:0|t Surrender to Madness will kill you if your targeted enemy does not die within 25 seconds. The addon is able to estimate time-to-die, but " ..
"these values are estimates and fight circumstances can change quickly. This setting allows you to reserve a little extra time, so you are less likely to cause your own death.\n\n" ..
"Custom priorities can reference |cFFFFD100settings.stm_timer|r for their decisions.",
type = "range",
min = 5,
max = 25,
step = 0.1,
width = "full",
} )
spec:RegisterPack( "Shadow", 20211227, [[dmLvHcqijLEKKkDjuKOAtQeFcfkJss4ucuRcfiEfkOzrj1TqrsTlH(LaXWuPWXqrTmuiptGutdfPUMkfTnbs8nbqghkqDojveRta4DOirP5jaDpjP9PsP)jPIuhusfwikIhIcvtua1fvjf2ikaFefjzKOaPtkaQvsj5LOirMPajDtvsPDQsYpLurnujfDujvKSuvsr9ukmvjvDvvs1wLu4RcinwuKWEb5VQYGjoSslwqpwftgvxM0Mb1NPOrtPonvRwLuKxljA2sCBiTBf)wQHJshxaXYbEoutx01vvBhI(oegpkGoVkvRhfjkMpLy)idXmu9qg8nvORy0nyeJUbZ3GrrMzWbnZbDDcKrENvHmy3tLRPczmlQczyyV8gbKb7EV0lhQEidC)bhfYWotwCaeKGy6P9pmEA0GGD0FztVNdyHZGGD0tqGmc)EjdWduiKbFtf6kgDdgXOBW8nyuKzgCqZCqh0qg7pTBaKHHJY4qg2oNRduiKbxXhidd7L3iiPMaxXjzvG1JIgQasyuaYAsy0nyeZKvKvmU9oMkoaiRyQjPEe6wjj1ODoj13aGojjiS1HKCbMAsYP)tIjzbkjWn4O8izftnj1eOPoCs4DIjzbkjFwsqyRdj5cm1etYcusoLgRKKnj87(yAnj4MK0EtsMFLkMKfOKGtVuibONgfvhUYJqgfhNyO6Hmyb6Prd3eQEORygQEidD2WIYHycKXb4Pc8fYaOORpyscijb9nUbKXEsVhid2gHcEiAa)b3G0ZpxHsORyeu9qg6SHfLdXeiJdWtf4lKbU)LqF4r2po)f9PGpB69e1zdlkNelwib3)sOp8iYUSPx0hUli1jJ6SHfLdzSN07bYaUOy7dyHtOe6QGgQEidD2WIYHycKXb4Pc8fYOwsc)WWrS9YBeWnan(zHm2t69azGTxEJaUbOqj0vmnu9qg6SHfLdXeiJdWtf4lKHp4D88EKRW(XtsULeMVjKXEsVhiJfC2rFzda6Kqj0v3eQEidD2WIYHycKXSOkKb2E5ncL)Aq4RHFzdq1jHm2t69azGTxEJq5Vge(A4x2auDsOe6QGcu9qg6SHfLdXeiJMfYaRjKXEsVhidKlW3WIczGClFfYGrqgixWBwufYa1h(dRl4D(zdddLqxfGGQhYqNnSOCiMazCaEQaFHmQLKCl6Kr(IoB69e1zdlkhYypP3dKbYfL1b(5L9)ydLqxXGHQhYqNnSOCiMazCaEQaFHmYTOtg5l6SP3tuNnSOCiJ9KEpqgO(WFHLfNqjuczWrnFjWNk1edvp0vmdvpKHoByr5qmbYywufYGVGkr7EEC9u57X(tGIp6CuiJ9KEpqg8fujA3ZJRNkFp2Fcu8rNJcLqxXiO6Hm0zdlkhIjqgZIQqg4)ew6M)wunTVJtiJ9KEpqg4)ew6M)wunTVJtOe6QGgQEidD2WIYHycKXSOkKHz5oR9RHFlg7OEztVhiJ9KEpqgML7S2Vg(TySJ6Ln9EGsORyAO6Hm0zdlkhIjqgZIQqgCGUCyhOpKkgRfiJ9KEpqgCGUCyhOpKkgRfOekHmqxFGQh6kMHQhYqNnSOCiMazCaEQaFHmc)WWXWUNxd)sB9T4JoCLh)Sqg4e4Ne6kMHm2t69azC2s5TN075vCCczuCC(MfvHmc7EGsORyeu9qg6SHfLdXeiJdWtf4lKrTKKlWuZOJFSL9UcGm2t69azWDmRwEORPFGsORcAO6Hm0zdlkhIjqg7j9EGmq2o)PGpB69azWv8b4SP3dKX1Xkj1ODojxdWNn9EiPhsoDx4nIHe2Ul(ysYMKu0fNKWOBsIp4D88ojH)KKPtsCysU3Fsq4LcjnsfCwws8bVJN3jXhsQbdisY1UvQKG)aLed7L3iGDD4b5A9HhQdxbKSdNKR1hojmPS4KehtspKC6UWBedjHkCdusQX1GehMed7L3iGllQsIJjrdKVZYQ8ijbyZPbkjSDx8XKeGItGFsVhmjomjFSpMKyyV8gbCzrvsQjWXOKSdNeMOdxbK4ys6FgHmoapvGVqgixGVHfnY2D5b3G3HJj5cjvqIp4D88oj3wLegDtsSyHewnJWUo84EshPsYfsa)rHBGPgX2lVraxwu9XcCmAudKVZYQCsUqsTKC6UWBete1h(lSS4m(zj5cj1sYP7cVrmrS9YBepenG)46M2XpljbtYfsQGeFW745DscyvsyW3Kelwij3IozeRlWhZ34M2j6c0OoByr5KCHeKlW3WIgX6c8X8nUPDIUa9D(zddtsWKCHKAj50DH3iMiSRdp(zj5cjvqsTKG7Fj0hEezx20l6d3fK6KrD2WIYjXIfsc)WWrKDztVOpCxqQt(S)O70op(zjXIfsWAM(yIJU50a9H7csDsscgkHUIPHQhYqNnSOCiMazSN07bYaBV8gXdrd4p21hidUIpaNn9EGmU2TsLe8hOKCV)KW(ts(SKyeObqnjPomQJAsspKK2kj5cm1KehMKafSPn8VqcdyvGRK44HXss2t6ivsqyRdjWUPD6JjjmZuh0KKlWutCeY4a8ub(cze(HHJWR(m)lG77GJFwsUqsTKW1WpmCebytB4F5bVkW14NLKlKGz1s5LlWutCe1h(dRlGKasctdLqxDtO6Hm0zdlkhIjqg7j9EGmoBP82t698kooHmkooFZIQqghogkHUkOavpKHoByr5qmbYypP3dKbQp8hwxaKX5(POVCbMAIHUIziJdWtf4lKrUfDYiwxGpMVXnTt0fOrD2WIYj5cjywTuE5cm1ehr9H)W6ci5wsqUaFdlAe1h(dRl4D(zddtYfsQLeENrS9YBepenG)yxFIPFQ0htsUqsTKC6UWBete21Hh)SqgCfFaoB69azWG6M2KutG3apVtY16dNedDbKSN07HKSjbOWafBtsG76XKGWtBsW6c8X8nUPDIUafkHUkabvpKHoByr5qmbYypP3dKbFrNn9EGmo3pf9LlWutm0vmdzCaEQaFHmQGeENrKlkRd8Zl7)XocuyGIT3WIsIflKW7mITxEJ4HOb8h76teOWafBVHfLelwiPcsQLKWpmCe1h(JRi7pqbXpljxiXh8oEENKasYnVbjbtsWKCHKkij8ddh5lOYxA3Ft7mIZ9ujjbKKWpmCKVGkFPD)nTZi6YaF4CpvsIflKuljynFH98XX0vaJyWpgXEijyidUIpaNn9EGmQjqHvajztYhRKe4fD207HK6WOoQjjomjgbAautsAaj1OEsCmjtNK8zjPbKCV)KC2z6KKZItswsMgGUfscSIS)aFmjPML18RKuHpNYN7JjjxRpCscSIS)afqclOp4Gjzhoj37pji8sHKPtsolljbEbvss92930oXKGZ9ujMehMKp2htsQNrmysye7jcLqxXGHQhYqNnSOCiMazSN07bYaBV8gXdrd4pUUPnKbxXhGZMEpqgxhRKyyV8gbjbAd4KeyDtBsCys(yFmjXWE5nc4YIQKutGJrjzhojH6Wvaji8sHeLbY6aLe(h4JjjPTsYOmWKeZdpczCaEQaFHmy1mc76WJ7jDKkjxib8hfUbMAeBV8gbCzr1hlWXOrnq(olRYj5cjSAgHDD4rGIU(GjjGvjX8WHsORQtGQhYqNnSOCiMazSN07bYa1h(lSS4eYGR4dWztVhiJ6OGyVJj5Jvsq9HhwwCIjXHj5SSSkNKD4Ky)htf4JjjiBNtIJj5ZsYoCs(yFmjXWE5nc4YIQKutGJrjzhojH6WvajoMKpBKesQdo3tVNTuUBnjNfNKG6dpSS4KehMK79Nee9VWjjuj5pByrjjBsm1KK0wjb4WjjH3jbX6PpMKSKyE4riJdWtf4lKrfKC6UWBete1h(lSS4mESxGPIj5wsyMKlKubjCn8ddhT)JPc8X8HSDE8ZsIflKulj5w0jJ2)Xub(y(q2opQZgwuojbtIflKWQze21Hhbk66dMKawLKZIZx6OkjmKeZdNKGj5cjSAgHDD4X9KosLKlKa(Jc3atnITxEJaUSO6Jf4y0OgiFNLv5KCHewnJWUo8iqrxFWKCljNfNV0rvsSyHKWpmCKVGkFPD)nTZ4NLKlKe(HHJiBNd3a04NLKlKuljNUl8gXer2o)f2Lm(zj5cjvqsTKa(Jc3atnITxEJaUSO6Jf4y0OgiFNLv5KyXcj1scRMryxhECpPJujjysUqcwZxypFCmDfWig8JPzpqj0vmFdO6Hm0zdlkhIjqg7j9EGmq2o)f2LeYGR4dWztVhiJRJvsQr7Csysxss2KeB30wbKWc8g45Dsq4PnjmO)Xub(yssnANtYNLKSjHPjjxGPMyRjPbK0PTcij3IojMKEiXO(iKXb4Pc8fYWh8oEENKawLeg8nj5cj5w0jJ2)Xub(y(q2opQZgwuojxij3IozeRlWhZ34M2j6c0OoByr5KCHemRwkVCbMAIJO(WFyDbKeWQKeuiXIfsQGKkij3Ioz0(pMkWhZhY25rD2WIYj5cj1ssUfDYiwxGpMVXnTt0fOrD2WIYjjysSyHemRwkVCbMAIJO(WFyDbKuLeMjjyOe6kMzgQEidD2WIYHycKXEsVhidUIS)aFmFSL18RqgCfFaoB69aze4EySKKpwjjWkY(d8XKKAwwZVsIdtY9(tYzhsm1KeFYMKA0ohUbOK4do1LBnjnGehMedDb(ysYvUPDIUaLehtsUfDsLtYoCsq4Lcj2EsIo930MKCbMAIJqghGNkWxiJkibOWafBVHfLelwiXh8oEENKBjjaDtsSyHKCl6KrKTZFzda6KrD2WIYj5cjNUl8gXer2o)LnaOtgbk66dMKawLKGMegesmpCscMKlKubj1scYf4ByrJSDxEWn4D4ysSyHeFW745DsUTkjm4BssWKCHKkiPwsYTOtgX6c8X8nUPDIUanQZgwuojwSqsfKKBrNmI1f4J5BCt7eDbAuNnSOCsUqsTKGCb(gw0iwxGpMVXnTt0fOVZpByyscMKGHsORyMrq1dzOZgwuoetGm2t69azGSD(lSljKbxXhGZMEpqgxhRKudMqspKW4bMehMK79NeEpmwsYOkNKSj5S4KKaRi7pWhtsQzzn)Q1KSdNK0wbkjlqjPOymjP9oKW0KKlWutmj9pjPIBsccpTj50d)7zWriJdWtf4lKbMvlLxUatnXruF4pSUascijvqcttcdj50d)7zK7yCp7Kp9y3koQZgwuojbtYfs8bVJN3jjGvjHbFtsUqsUfDYiwxGpMVXnTt0fOrD2WIYjXIfsQLKCl6KrSUaFmFJBANOlqJ6SHfLdLqxXCqdvpKHoByr5qmbYypP3dKb2E5nIhIgWFCDtBiJZ9trF5cm1edDfZqghGNkWxiJkijxGPMrBDlPDK9KKeqsy0ni5cjywTuE5cm1ehr9H)W6cijGKW0KemjwSqsfKWQze21Hh3t6ivsUqc4pkCdm1i2E5nc4YIQpwGJrJAG8DwwLtsWqgCfFaoB69azCDSsIH9YBeKeOnGhaKeyDtBsCyssBLKCbMAsIJjzd7Fss2KWDLKgqY9(tI9IujXWE5nc4YIQKutGJrjrdKVZYQCsq4PnjxRp8qD4kGKgqIH9YBeWUoCs2t6i1iucDfZmnu9qg6SHfLdXeiJ9KEpqg4paOdxbVSFOlFumgY4C)u0xUatnXqxXmKXb4Pc8fYixGPMX0r1x2pURKeqsy0nj5cjHFy4iY25WnanYBedKbxXhGZMEpqgxhRKy8baD4kGKSj5Ax(Oymj9qYssUatnjjT3KehtIz7Jjjztc3vs2KK0wjb4M2jjPJQrOe6kMVju9qg6SHfLdXeiJ9KEpqgiBN)Yga0jHmo3pf9LlWutm0vmdzCaEQaFHmqUaFdlAK3j(9zj5cjvqs4hgoISDoCdqJ8gXqIflKe(HHJiBNd3a0iqrxFWKeqsoDx4nIjISD(lSlzeOORpysSyHewGI8zE4rMJiBN)c7ssYfsQLKWpmCmS0nV8XzeO7jj5cjywTuE5cm1ehr9H)W6cijGKe0KemjxizpPJuF8oJixuwh4Nx2)Jnj3wLKZ9trF6OOUIj5cjywTuE5cm1ehr9H)W6cijGKubj3KegssfKeuiHbHKCl6KXeHJZxd)G3uJ6SHfLtsWKemKbxXhGZMEpqgxhRKuJ25KuFda6KK0t5ojomjgbAauts2HtsnQNKfOKSN0rQKSdNK0wjjxGPMKGOhgljH7kj8pWhtssBLKJ9oJwIqj0vmhuGQhYqNnSOCiMazCaEQaFHm4DgrUOSoWpVS)h7y6Nk9XKKlKubj5w0jJyDb(y(g30orxGg1zdlkNKlKGz1s5LlWutCe1h(dRlGKBjb5c8nSOruF4pSUG35NnmmjwSqcVZi2E5nIhIgWFSRpX0pv6JjjbtYfsQGKAjb8hfUbMAeBV8gbCzr1hlWXOrnq(olRYjXIfs2t6i1hVZiYfL1b(5L9)ytYTvj5C)u0NokQRyscgYypP3dKbQp8qD4kakHUI5aeu9qg6SHfLdXeiJ9KEpqgy7L3iEiAa)X1nTHm4k(aC207bY46yLeJanacmji80MKAU(ec0TsfqsnXBbLK)uumMK0wjjxGPMKGWlfscvsc1sJGegDdMYjjuHBGssARKC6UWBedjNgvXKeUNkJqghGNkWxidWFu4gyQr21NqGUvQGhlElOrnq(olRYj5cjixGVHfnY7e)(SKCHKCbMAgthvFz)yp5Jr3GKBjPcsoDx4nIjITxEJ4HOb8hx30oY)Gn9EiHHKyE4KemucDfZmyO6Hm0zdlkhIjqg7j9EGmW2lVr8oGfBdzWv8b4SP3dKX1Xkjg2lVrqcJdwSnj9qcJhys(trXyssBfOKSaLKLZXK4ZPr9XmczCaEQaFHmaRZFksDY4Y54OpKCljmFdOe6kMRtGQhYqNnSOCiMazSN07bYa1h(dRlaY4C)u0xUatnXqxXmKHpPcaF285WqgPFQeFBvMgYWNubGpB(CuuL7BQqgmdzCaEQaFHmWSAP8YfyQjoI6d)H1fqYTKGCb(gw0iQp8hwxW78ZggMKlKe(HHJ8fu5lT7VPDg)Sqgh71hidMHsORy0nGQhYqNnSOCiMazWv8b4SP3dKX1XkjxRpCsyaL9ojztYPh8hvjjWlOssQ3U)M2jMewqFWK0djg1ts)tSZvsAysQbdiczCaEQaFHmc)WWr(cQ8L2930oJFwsUqcYf4ByrJ8oXVpljxiPwsc)WWrKTZHBaA8ZsYfsQLeKlW3WIgz7U8GBW7WXKCHKt3fEJyIO(WFHLfNr4FP8a6XEbM6lDuLKBRsI5HhrxgiKHpPcaF285WqgPFQeFBvM(sTHFy4iFbv(s7(BANXplKHpPcaF285OOk33uHmygY4yV(azWmKXEsVhiduF4p4YEhkHUIrmdvpKHoByr5qmbYypP3dKbQp8xyzXjKbxXhGZMEpqgxhRKCT(WjHjLfNK4WKCV)KW7HXssgv5KKnjafgOyBscCxposIr2SKCwC6JjjBscttsdibTbkj5cm1etccpTjXqxGpMKCLBANOlqjj3IoPYjzhoj37pjlqjz6KKp2htsmSxEJaUSOkj1e4yusAaj1eF)y7hscQ(uzeZQLYlxGPM4iQp8hwxWT1PVjjMAIjjTvsq9Xr)OK0WKCts2HtsARKmF0qfqsdtsUatnXrsQJcUTMeEtY0jjSafJjb1hEyzXjj)j9cjBPqsUatnXKSaLeENPYjbHN2KuJ6jbHToK8X(ysc2E5nc4YIQKWcCmkjomjH6WvajoMKf56LnSOriJdWtf4lKbYf4ByrJ8oXVpljxibSo)Pi1jJOnsfvNm6dj3sYzX5lDuLegsYnI3KKlKGz1s5LlWutCe1h(dRlGKassfKW0KWqsyejmiKKBrNmI6yfCpQZgwuojmKK9Kos9X7mICrzDGFEz)p2KWGqsUfDYil((X2pVIpvg1zdlkNegssfKGz1s5LlWutCe1h(dRlGKBRttYnjjysyqiPcsy1mc76WJ7jDKkjxib8hfUbMAeBV8gbCzr1hlWXOrnq(olRYjjyscMKlKubj1sc4pkCdm1i2E5nc4YIQpwGJrJAG8DwwLtIflKuljNUl8gXeHDD4Xpljxib8hfUbMAeBV8gbCzr1hlWXOrnq(olRYjXIfs2t6i1hVZiYfL1b(5L9)ytYTvj5C)u0NokQRyscgkHUIrmcQEidD2WIYHycKXEsVhidKlkRd8Zl7)XgY4C)u0xUatnXqxXmKXb4Pc8fYOcsakmqX2Byrj5cj5cm1mMoQ(Y(XDLKBjjOqIflKubj5w0jJOowb3J6SHfLtYfs4DgX2lVr8q0a(JD9jcuyGIT3WIssWKemjxiPcsQLKCl6Kr(IoB69e1zdlkNelwi50DH3iMiFrNn9EIafD9btYTvjH3ze5IY6a)8Y(FSJafD9btIflKC6UWBetKVOZMEprGIU(Gj52QKW7mITxEJ4HOb8h76teOORpyscMelwij8ddh)d8hu8X8XxqLJIXXplKbxXhGZMEpqgxZkmqX2KuJfL1b(HK67)XMeeowl3jjCXkNKEijWl6SP3dj7WjPtBfqs9BrNehHsORyuqdvpKHoByr5qmbYypP3dKb2E5nIhIgWFSRpqgCfFaoB69azyWQhFlKC6H7P3djztcoBwsolo9XKeJanaQjj9qsddZuNlWutmjiS1Hey30o9XKKGMKgqcAdusW5EQu5KG2Hys2HtYh7Jjj1eF)y7hscQ(ujj7Wj5Q6C9KCTowb3JqghGNkWxidGcduS9gwusUqsUatnJPJQVSFCxj5wsyAsUqsTKKBrNmI6yfCpQZgwuojxij3IozKfF)y7NxXNkJ6SHfLtYfsWSAP8YfyQjoI6d)H1fqYTKWiOe6kgX0q1dzOZgwuoetGm2t69azGTxEJ4HOb8h76dKX5(POVCbMAIHUIziJdWtf4lKbqHbk2EdlkjxijxGPMX0r1x2pURKCljmnjxiPwsYTOtgrDScUh1zdlkNKlKuljvqsUfDYiwxGpMVXnTt0fOrD2WIYj5cjywTuE5cm1ehr9H)W6ci5wsqUaFdlAe1h(dRl4D(zddtsWKCHKkiPwsYTOtgzX3p2(5v8PYOoByr5KyXcjvqsUfDYil((X2pVIpvg1zdlkNKlKGz1s5LlWutCe1h(dRlGKawLegrsWKemjxiPcsQLKCl6Kr(IoB69e1zdlkNelwi50DH3iMiFrNn9EIafD9btYTvjH3zeBV8gXdrd4p21NiqrxFWKemKbxXhGZMEpqgmLuLLeJanaQjjFws6HKftc6o3jjxGPMyswmjSng7Hf1Asug4rztsqyRdjWUPD6JjjbnjnGe0gOKGZ9uPYjbTdXKGWtBsQj((X2pKeu9PYiucDfJUju9qg6SHfLdXeiJ9KEpqgO(WFyDbqgN7NI(YfyQjg6kMHm8jva4ZMphgYi9tL4BRYiidFsfa(S5ZrrvUVPczWmKXb4Pc8fYaZQLYlxGPM4iQp8hwxaj3scYf4ByrJO(WFyDbVZpByysUqsfKulj4(xc9Hhr2Ln9I(WDbPozuNnSOCsSyHKAj50DH3iMiCrX2hWcNXpljbdzCSxFGmygkHUIrbfO6Hm0zdlkhIjqg7j9EGmq9H)Gl7DidFsfa(S5ZHHms)uj(2Qm6sf1g(HHJ8fu5lT7VPDg)SwSC6UWBetez78xyxY4N9sfHFy4iY25Wnan(zTyP2WpmCKVGkFPD)nTZ4N9s4hgoYDmUNDYNESBfh)SbhmKHpPcaF285OOk33uHmygY4yV(azWmKXb4Pc8fYOwsW9Ve6dpISlB6f9H7csDYOoByr5KyXcj1sYP7cVrmr4IITpGfoJFwOe6kgfGGQhYqNnSOCiMazSN07bYaUOy7dyHtidFsfa(S5ZHHms)uj(2Qmdz4tQaWNnFokQY9nvidMHmoapvGVqg4(xc9Hhr2Ln9I(WDbPozuNnSOCsUqsTKe(HHJiBNd3a04NLKlKuljHFy4iBJqbpFG)yVN4NfYGR4dWztVhiJRJvsyaffBFalCss)tSZvsAysqxFi50DH3igmjztc66tU(qsn6YMErjXOli1jjj8ddhHsORyedgQEidD2WIYHycKbxXhGZMEpqgxhRKyeObqGjzXKuwCscqXnijXHjPhssBLe0gPczSN07bYaBV8gXdrd4pUUPnucDfJQtGQhYqNnSOCiMazWv8b4SP3dKX1XkjgbAautswmjLfNKauCdssCys6HK0wjbTrQKSdNeJanacmjoMKEiHXdmKXEsVhidS9YBepenG)yxFGsOeY4G4avp0vmdvpKHoByr5qmbY4J1hcBVOVZItFmHUIziJ9KEpqgyDb(y(g30orxGczCUFk6lxGPMyORygY4a8ub(czubjixGVHfnI1f4J5BCt7eDb678ZggMKlKuljixGVHfnY2D5b3G3HJjjysSyHKkiH3zeBV8gXdrd4p21NiqHbk2EdlkjxibZQLYlxGPM4iQp8hwxaj3scZKemKbxXhGZMEpqgxhRKyOlWhtsUYnTt0fOK4WKCV)KGWlfsS9KeD6VPnj5cm1etYoCsQzJqbKeGh4p27HKD4KuJ25WnaLKfOKmDscqx(DRjPbKKnjafgOyBsmc0aOMK0djjIMKgqcAdusYfyQjocLqxXiO6Hm0zdlkhIjqgFS(qy7f9DwC6Jj0vmdzSN07bYaRlWhZ34M2j6cuiJZ9trF5cm1edDfZqghGNkWxiJCl6KrSUaFmFJBANOlqJ6SHfLtYfs4DgX2lVr8q0a(JD9jcuyGIT3WIsYfsWSAP8YfyQjoI6d)H1fqYTKWiidUIpaNn9EGmmSBqscJ7GZ3tsm0f4Jjjx5M2j6cuso9W907HKSjPsvzjXiqdGAsYNLeFiPo6RbucDvqdvpKHoByr5qmbYONY93bXbYGziJ9KEpqgO(WFHLfNqgCfFaoB69az0t5(7G4qc6wPIjjTvs2t69qspL7K8XByrjH)b(ysYXENrl(ysYoCsMojzXKSKauZFzbKSN07jcLqjKrc8PsnXq1dDfZq1dzOZgwuoetGm4k(aC207bY46yLKEiHXdmj1HrDutsYMetnjjWD9KK(PsFmjzhojkdK1bkjztsXhLKpljHAMkGeeEAtsnANd3auiJzrvidfL9oq3YRb8zNJczCaEQaFHmoDx4nIjISD(tbF207jcu01hmjbSkjmZisSyHKt3fEJyIiBN)uWNn9EIafD9btYTKWOaeKXEsVhidfL9oq3YRb8zNJcLqxXiO6Hm0zdlkhIjqgCfFaoB69azup4ojztIX95qsaUovGjbHN2Ke4(hwusmY9uPYjHXdmMehMe2gJ9WIgjPopKu6XubKa7M2jMeeEAtcAduscW1PcmjFSIjzZurztsYMe895qccpTjzN7KC4K0asUM(4KKpwjXZiKXSOkKHp4d4NByrFbYFN8J(4ks)OqghGNkWxiJWpmCez7C4gGg)SKCHKWpmCKTrOGNpWFS3t8ZsIflKe2ymjxib2nTZhqrxFWKeWQKWOBqIflKe(HHJSncf88b(J9EIFwsUqYP7cVrmrKTZFk4ZMEprGIU(GjHHKW8nj5wsGDt78bu01hmjwSqs4hgoISDoCdqJFwsUqYP7cVrmr2gHcE(a)XEprGIU(GjHHKW8nj5wsGDt78bu01hmjwSqsfKC6UWBetKTrOGNpWFS3teOORpysUTkjmFdsUqYP7cVrmrKTZFk4ZMEprGIU(Gj52QKW8nijysUqcSBANpGIU(Gj52QKWCDYnGm2t69az4d(a(5gw0xG83j)OpUI0pkucDvqdvpKHoByr5qmbYGR4dWztVhidJ7ZHedBvtsU2p2pKGWtBsQr7C4gGczmlQczGUNneOpSTQ5d9J9dKXb4Pc8fY40DH3iMiY25pf8ztVNiqrxFWKCljmFdiJ9KEpqgO7zdb6dBRA(q)y)aLqxX0q1dzOZgwuoetGmMfvHmW9Vu0m9X8b(H3Hmo3pf9LlWutm0vmdzSN07bYa3)srZ0hZh4hEhY4a8ub(cze(HHJSncf88b(J9EIFwsSyHKAjHf4koJyTa)yBek45d8h79qIflKObY3zzvEeBV8gHYFni81WVSbO6KqgCfFaoB69azyCFoKCn)dVtccpTjPMncfqsaEG)yVhs(41uTMe0TsLe8hOKKnj4XzvssBLKsJqXjjmO1KKCbMAgjjqT1HKpw5KGWtBsmSxEJq5KuNbHK0WKuFdq1jTMKRPpoj5Jvs6HegpWKSysq)hBswmjSng7HfncLqxDtO6Hm0zdlkhIjqgCfFaoB69azCDSsctwUPsIpyNRK0WKudgajWnGK0wjb2b4KKpwjPbK0djmEGjzHtfqsARKa7aCsYhRrsmSBqsYXbNVNK4WKGSDojk4ZMEpKC6UWBedjoMeMVbMKgqcAduswe79iKXSOkKb2h4F5zwwUVzdWVWLBQVg(bRG(45DiJdWtf4lKXP7cVrmrKTZFk4ZMEprGIU(Gj52QKW8nGm2t69azG9b(xEMLL7B2a8lC5M6RHFWkOpEEhkHUkOavpKHoByr5qmbYGR4dWztVhiJRJvsmSxEJq5KuNbHK0WKuFdq1jjbHToKmDsIpKuJ25Wna1AsAaj(qsOMiuDiPgTZjHjDjj5S4etIpKuJ25WnanssDGjHP0DGVdjnGKR0dOlnGtsXhLepj5ZsccpTjbN7PsLtYP7cVrm4iKXSOkKb2E5ncL)Aq4RHFzdq1jHmoapvGVqgNUl8gXezBek45d8h79ebk66dMKawLeMVbjxi50DH3iMiY25pf8ztVNiqrxFWKeWQKW8ni5cjvqYPrQZozC0dOlnGtIflKCAK6StgR8oW3HKGjXIfsQGKtJuNDYisDs77asSyHKtJuNDY44M25dEvscMKlKubj1ss4hgoISDoCdqJFwsSyHewGI8zE4rMJiBN)c7sssWKyXcjHngtYfsGDt78bu01hmjbSkjm9nGm2t69azGTxEJq5Vge(A4x2auDsOe6Qaeu9qg6SHfLdXeidUIpaNn9EGmUowjP44KKgMKEyQ)yLe(IUMkjjWNk1etspL7K4WKWG(htf4Jjj1ODojbwd)WWK4ys2t6ivRjPbKCV)KSaLKPtsYTOtQCs8jBs8mczSN07bY4SLYBpP3ZR44eYaNa)KqxXmKXb4Pc8fYOcsQLKCl6Kr7)yQaFmFiBNh1zdlkNelwiHRHFy4O9FmvGpMpKTZJFwscMKlKubjHFy4iY25Wnan(zjXIfsoDx4nIjISD(tbF207jcu01hmj3scZ3GKGHmkooFZIQqgCuZxc8PsnXqj0vmyO6Hm0zdlkhIjqg7j9EGm(y95PIIHm4k(aC207bYiWk8(ljjWBPeUNkjbUbK8XByrjXtffhaKCDSsspKC6UWBedj(qsd4kGKW7KKaFQutsWLoJqghGNkWxiJWpmCez7C4gGg)SKyXcjHFy4iBJqbpFG)yVN4NLelwi50DH3iMiY25pf8ztVNiqrxFWKCljmFdOekHmoCmu9qxXmu9qg6SHfLdXeiJ9KEpqgSncf88b(J9EGm4k(aC207bY46yLKA2iuajb4b(J9EibHN2KuJ25WnanscdAx4Ka3asQr7C4gGsYPrvmjnmmjNUl8gXqIpKK2kjJYatsy(gKG1tpCmjDARaeowj5Jvs6HKdNK)uumMK0wjHTS3vajoMe2fKK0WKK2kjvEh47qYPrQZoP1K0asCyssBfOKGWlfsMojjujzNoTvaj1ODojxdWNn9EijTDmjWUPDgjPoYurztsYMe895qsARKuwCscBJqbK4d8h79qsdtsARKa7M2jjztcY25KOGpB69qcCdiz6HeMs3b(o4iKXb4Pc8fYGf4koJyTa)yBek45d8h79qYfsQGKWpmCez7C4gGg)SKyXcj1sYPrQZozSY7aFhsUqsTKCAK6Stgh9a6sd4KCHKt3fEJyIiBN)uWNn9EIafD9btYTvjH5BqIflKa7M25dOORpyscijNUl8gXer2o)PGpB69ebk66dMKGj5cjvqcSBANpGIU(Gj52QKC6UWBetez78Nc(SP3teOORpysyijmFtsUqYP7cVrmrKTZFk4ZMEprGIU(GjjGvjX8WjHbHeMMelwib2nTZhqrxFWKCljNUl8gXezBek45d8h79e5FWMEpKyXcjHngtYfsGDt78bu01hmjbKKt3fEJyIiBN)uWNn9EIafD9btcdjH5BsIflKCAK6StgR8oW3Helwij8ddhdlDZlFCg)SKemucDfJGQhYqNnSOCiMazWv8b4SP3dKX1Xkjmz5Mkj(GDUssdtsnyaKa3assBLeyhGts(yLKgqspKW4bMKfovajPTscSdWjjFSgjjq90MKRCt7KegWQKy3fojWnGKAWaIqgZIQqgyFG)LNzz5(Mna)cxUP(A4hSc6JN3HmoapvGVqgHFy4iY25Wnan(zjXIfsshvj5wsy(gKCHKkiPwsonsD2jJJBANp4vjjyiJ9KEpqgyFG)LNzz5(Mna)cxUP(A4hSc6JN3HsORcAO6Hm0zdlkhIjqg7j9EGmGx9z(xa33bdzWv8b4SP3dKX1XkjmGvjHP6VaUVdMKEiHXdmj9pXoxjPHjPgTZHBaAKKRJvsyaRsct1FbCFhoMeFiPgTZHBakjomj37pj2lsLe1tBfqctfOrQKeGhKUzd207HKgqcdW1cNKgMeMuAmUrXrsc01tsGBaj8oXKKnjHkjFwscv4gOKSN0rUPpMKWawLeMQ)c4(oysYMe0Lb6OowjjTvsc)WWriJdWtf4lKrTKe(HHJiBNd3a04NLKlKubj1sYP7cVrmrKTZFzda6KXpljwSqsTKKBrNmISD(lBaqNmQZgwuojbtYfsQGeKlW3WIg5DIFFwsUqcMvlLxUatnXrKlkRd8Zl7)XMKQKWmjwSqYEshP(4DgrUOSoWpVS)hBsQscMvlLxUatnXrKlkRd8Zl7)XMKlKGz1s5LlWutCe5IY6a)8Y(FSj5wsyMKGjXIfsc)WWrKTZHBaA8ZsYfsQGeC)lH(WJMGgP(8bPB2Gn9EI6SHfLtIflKG7Fj0hEe21c)1WVWsJXnkoQZgwuojbdLqxX0q1dzOZgwuoetGm2t69azG6d3CrvmKX5(POVCbMAIHUIziJdWtf4lKHp4D88ojbKK6KBqYfsQGKkib5c8nSOXTuE8oXVpljxiPcsQLKt3fEJyIiBN)uWNn9EIFwsSyHKAjj3Ioz0(pMkWhZhY25rD2WIYjjyscMelwij8ddhr2ohUbOXpljbtYfsQGKAjj3Ioz0(pMkWhZhY25rD2WIYjXIfs4A4hgoA)htf4J5dz78iqrxFWKCljNfNV0rvsSyHKAjj8ddhr2ohUbOXpljbtYfsQGKAjj3IozeRlWhZ34M2j6c0OoByr5KyXcjywTuE5cm1ehr9H)W6cijGKCtscgYGR4dWztVhiJRJvsUwF4MlQIjbHToKSLcjbnjbURhtYcus(Swtsdi5E)jzbkj(qsnANd3a0ijxJb)bkjmO)Xub(yssnANtccVuibNEPqsOsYNLee26qsARKCwCss6OkjW(4yBfhjXiBws(yFmjztsUjdjjxGPMysq4Pnjg6c8XKKRCt7eDbAekHU6Mq1dzOZgwuoetGm2t69az8h7UC)nnYfYGR4dWztVhiJRJvsU(y3L7KCvJCjPhsy8aBnj2DH7JjjHaxHl3jjBsqSEscCdiHTrOas8b(J9EiPbKSCojy2fXGJqghGNkWxiJAjj3Ioz0(pMkWhZhY25rD2WIYj5cjixGVHfnY7e)(SKyXcjCn8ddhT)JPc8X8HSDE8ZsYfsc)WWrKTZHBaA8ZsIflKubjNUl8gXer2o)PGpB69ebk66dMKBjH5BqIflKuljixGVHfnY2D5b3G3HJjjysUqsTKe(HHJiBNd3a04NfkHUkOavpKHoByr5qmbYypP3dKry3ZRHFPT(w8rhUYHm4k(aC207bY46yLKEiHXdmjH)KewG3apDSsYh7Jjj1ODojxdWNn9Eib2b40AsCys(yLtIpyNRK0WKudgaj9qIr9K8XkjlCQaswsq2opSljjWnGKt3fEJyirHH9JRZ5oj7WjbUbKy)htf4JjjiBNtYNnDuLehMKCl6KkpczCaEQaFHmQLKWpmCez7C4gGg)SKCHKAj50DH3iMiY25pf8ztVN4NLKlKGz1s5LlWutCe1h(dRlGKBjHzsUqsTKKBrNmI1f4J5BCt7eDbAuNnSOCsSyHKkij8ddhr2ohUbOXpljxibZQLYlxGPM4iQp8hwxajbKegrYfsQLKCl6KrSUaFmFJBANOlqJ6SHfLtYfsQGewGI8zE4rMJiBN)c7ssYfsQGKAjrdKVZYQ8OIYEhOB51a(SZrjXIfsQLKCl6Kr7)yQaFmFiBNh1zdlkNKGjXIfs0a57SSkpQOS3b6wEnGp7CusUqYP7cVrmrfL9oq3YRb8zNJgbk66dMKawLeMdkmIKlKW1WpmC0(pMkWhZhY25XpljbtsWKyXcjvqs4hgoISDoCdqJFwsUqsUfDYiwxGpMVXnTt0fOrD2WIYjjyOe6Qaeu9qg6SHfLdXeiJ9KEpqgNTuE7j9EEfhNqgfhNVzrviJe4tLAIHsORyWq1dzOZgwuoetGmoapvGVqg26ws7i7jjjGvjjaDtiJ9KEpqgCfZQGn1hlyVRaOekHmc7EGQh6kMHQhYqNnSOCiMazCaEQaFHmWSAP8YfyQjoI6d)H1fqsaRssqdzSN07bYyXhD4k)fwwCcLqxXiO6Hm0zdlkhIjqg7j9EGmw8rhUYFtJCHm4k(aC207bYOopL7K8Xkj1b(Odx5KCvJCjbHToKmDssUfDsLtIpztIHUaFmj5k30orxGsspKWigssUatnXriJdWtf4lKbMvlLxUatnXXfF0HR830ixsULeMj5cjywTuE5cm1ehr9H)W6ci5wsyMKlKulj5w0jJyDb(y(g30orxGg1zdlkhkHsidUcV)scvp0vmdvpKXEsVhidSx05Oqg6SHfLdXeOe6kgbvpKHoByr5qmbY4a8ub(cze(HHJiBNd3a04NLelwij8ddhzBek45d8h79e)Sqg7j9EGmy707bkHUkOHQhYqNnSOCiMaz0SqgynHm2t69azGCb(gwuidKB5RqgvqcVZi2E5nIhIgWFSRpX0pv6JjjwSqsUatnJPJQVSFCxjjGvjHPjjysUqsfKW7mICrzDGFEz)p2X0pv6JjjwSqsUatnJPJQVSFCxjjGvjjOqsWqgixWBwufYG3j(9zHsORyAO6Hm0zdlkhIjqgnlKbwtiJ9KEpqgixGVHffYa5w(kKbYf4ByrJ8oXVpljxiPcs4Dg5kY(d8X8XwwZVgt)uPpMKyXcj5cm1mMoQ(Y(XDLKawLeMMKGHmqUG3SOkKXwkpEN43NfkHU6Mq1dzOZgwuoetGmAwidSMqg7j9EGmqUaFdlkKbYT8vidmRwkVCbMAIJO(WFyDbKCljmIegss4hgoISDoCdqJFwidUIpaNn9EGmmYfKK8X(ysIHUaFmj5k30orxGsYMKe0mKKCbMAIjPbKW0mKehMK79NKfOK4dj1ODoCdqHmqUG3SOkKbwxGpMVXnTt0fOVZpByyOe6QGcu9qg6SHfLdXeiJMfYaRjKXEsVhidKlW3WIczGClFfY40DH3iMiY25pf8ztVN4NLKlKubj1sc4pkCdm1iM1wbk(zVa0EUh1a57SSkNKlKuljNgPo7KXrpGU0aojwSqYP7cVrmr2gHcE(a)XEprGIU(GjjGvjX8WJOldKegescAsSyHKWpmCKTrOGNpWFS3t8ZsIflKe2ymjxib2nTZhqrxFWKeWQKWOBssWqgCfFaoB69azW4Dx4nIHKA2DHKASaFdlQ1KCDSYjjBsy7UqsOc3aLK9KoYn9XKeKTZHBaAKeg)da6KL7K8XkNKSj50tc6cjiS1HKSjzpPJCtLeKTZHBakji80MeFonQpMKSCooczGCbVzrvid2Ulp4g8oCmucDvacQEidD2WIYHycKXb4Pc8fYi8ddhr2ohUbOXplKXEsVhidyhOHLU5qj0vmyO6Hm0zdlkhIjqghGNkWxiJWpmCez7C4gGg)Sqg7j9EGmcvawbv6JjucDvDcu9qg6SHfLdXeiJ9KEpqgf30oXVRPp3evNeYGR4dWztVhiJRJvscQUPDYyysS6Znr1jjXHjjTvGsYcusyejnGe0gOKKlWutS1K0aswohtYc0HXssWSlIXhtsGBajOnqjjT3HKa0nXriJdWtf4lKbMvlLxUatnXXIBAN4310NBIQtsYTvjHrKyXcjvqsTKawN)uK6KXLZXrLb64etIflKawN)uK6KXLZXrFi5wscq3KKGHsORy(gq1dzOZgwuoetGmoapvGVqgHFy4iY25Wnan(zHm2t69azSZrXjylVZwkqj0vmZmu9qg6SHfLdXeiJ9KEpqgNTuE7j9EEfhNqgfhNVzrviJdIducDfZmcQEidD2WIYHycKXEsVhidWFE7j9EEfhNqgfhNVzrvid01hOekHsidKka79aDfJUbJyMzMzuqdzGybJpMyiJaToUMVkaFftvaqcj1BRK4OSnijbUbKWySa90OHBYyKa0a57aLtcUrvs2F2OBQCso27yQ4izvq1hLegfaKW49GubPYjHXW9Ve6dpYuWyKKnjmgU)LqF4rMIOoByr5mgjvWmdm4izvq1hLegfaKW49GubPYjHXW9Ve6dpYuWyKKnjmgU)LqF4rMIOoByr5mgjBsY1OohujPcMzGbhjRiRc064A(Qa8vmvbajKuVTsIJY2GKe4gqcJHU(WyKa0a57aLtcUrvs2F2OBQCso27yQ4izvq1hLKGoaiHX7bPcsLtcJH7Fj0hEKPGXijBsymC)lH(WJmfrD2WIYzmsQGzgyWrYQGQpkjm6MbajmEpivqQCsymC)lH(WJmfmgjztcJH7Fj0hEKPiQZgwuoJrsfmZadoswfu9rjHrbLaGegVhKkivojmgU)LqF4rMcgJKSjHXW9Ve6dpYue1zdlkNXiPcMzGbhjRcQ(OKWOauaqcJ3dsfKkNegd3)sOp8itbJrs2KWy4(xc9HhzkI6SHfLZyKubZmWGJKvKvbADCnFva(kMQaGesQ3wjXrzBqscCdiHXoCmJrcqdKVduoj4gvjz)zJUPYj5yVJPIJKvbvFusckbajmEpivqQCsySe4tLAg3Wt80DH3iggJKSjHXoDx4nIjUHhgJKkyMbgCKSISkaJY2Gu5KWGjzpP3djfhN4izfKblOH9Iczu36sIH9YBeKutGR4KSQU1LKaRhfnubKWOaK1KWOBWiMjRiRQBDjHXT3XuXbazvDRljm1KupcDRKKA0oNK6BaqNKee26qsUatnj50)jXKSaLe4gCuEKSQU1LeMAsQjqtD4KW7etYcus(SKGWwhsYfyQjMKfOKCknwjjBs439X0AsWnjP9MKm)kvmjlqjbNEPqcqpnkQoCLhjRiRQBDj5AWa1ZpvojHkCdusonA4MKeQM(GJKuhNJYMysMEyQTxak8VqYEsVhmj9uUhjR2t69GJSa90OHBYWQbHTrOGhIgWFWni98ZvRD4QafD9bhWG(g3GSApP3doYc0tJgUjdRge4IITpGfoT2HRI7Fj0hEK9JZFrFk4ZMEpwSG7Fj0hEezx20l6d3fK6KKv7j9EWrwGEA0Wnzy1GGTxEJaUbOw7WvRn8ddhX2lVra3a04NLSApP3doYc0tJgUjdRgKfC2rFzda6Kw7Wv9bVJN3JCf2pEElZ3KSApP3doYc0tJgUjdRgKpwFEQOwplQwfBV8gHYFni81WVSbO6KKv7j9EWrwGEA0Wnzy1GGCb(gwuRNfvRI6d)H1f8o)SHHTUzRI10AKB5Rvzez1EsVhCKfONgnCtgwniixuwh4Nx2)JT1oC1AZTOtg5l6SP3tuNnSOCYQ9KEp4ilqpnA4MmSAqq9H)clloT2HRMBrNmYx0ztVNOoByr5KvKv1TUKuZo9EWKv7j9EWvXErNJswTN07bxLTtVhRD4QHFy4iY25Wnan(zTyj8ddhzBek45d8h79e)SKv7j9EWmSAqqUaFdlQ1ZIQv5DIFFwRB2QynTg5w(A1k4DgX2lVr8q0a(JD9jM(PsFmTyjxGPMX0r1x2pURbSkth8Lk4DgrUOSoWpVS)h7y6Nk9X0ILCbMAgthvFz)4UgWQbLGjR2t69Gzy1GGCb(gwuRNfvRULYJ3j(9zTUzRI10AKB5RvrUaFdlAK3j(9zVubVZixr2FGpMp2YA(1y6Nk9X0ILCbMAgthvFz)4UgWQmDWKv1LeJCbjjFSpMKyOlWhtsUYnTt0fOKSjjbndjjxGPMysAajmndjXHj5E)jzbkj(qsnANd3auYQ9KEpygwniixGVHf16zr1QyDb(y(g30orxG(o)SHHTUzRI10AKB5RvXSAP8YfyQjoI6d)H1fClJyy4hgoISDoCdqJFwYQ6scJ3DH3igsQz3fsQXc8nSOwtY1XkNKSjHT7cjHkCdus2t6i30htsq2ohUbOrsy8paOtwUtYhRCsYMKtpjOlKGWwhsYMK9KoYnvsq2ohUbOKGWtBs850O(ysYY54iz1EsVhmdRgeKlW3WIA9SOAv2Ulp4g8oCS1nBvSMwJClFT6P7cVrmrKTZFk4ZMEpXp7LkQf8hfUbMAeZARaf)SxaAp3JAG8DwwLFP2tJuNDY4OhqxAa3ILt3fEJyISncf88b(J9EIafD9bhWQMhEeDzGmibTflHFy4iBJqbpFG)yVN4N1ILWgJVa7M25dOORp4awLr3myYQ9KEpygwniWoqdlDZT2HRg(HHJiBNd3a04NLSApP3dMHvdsOcWkOsFmT2HRg(HHJiBNd3a04NLSQUKCDSssq1nTtgdtIvFUjQojjomjPTcuswGscJiPbKG2aLKCbMAITMKgqYY5yswGomwscMDrm(yscCdibTbkjP9oKeGUjoswTN07bZWQbP4M2j(Dn95MO6Kw7WvXSAP8YfyQjowCt7e)UM(CtuDYBRYilwQOwW68NIuNmUCooQmqhNylwaRZFksDY4Y54Op3gGUzWKv7j9EWmSAq25O4eSL3zlfRD4QHFy4iY25Wnan(zjR2t69Gzy1GC2s5TN075vCCA9SOA1dIdz1EsVhmdRgeWFE7j9EEfhNwplQwfD9HSISQU1LK6OMbvsYMKpwjbHToKWKUhsAyssBLK6aF0HRCsCmj7jDKkz1EsVhCmS7P6Ip6Wv(lSS40AhUkMvlLxUatnXruF4pSUGawnOjRQlj15PCNKpwjPoWhD4kNKRAKljiS1HKPtsYTOtQCs8jBsm0f4Jjjx5M2j6cus6HegXqsYfyQjoswTN07bhd7Eyy1GS4JoCL)Mg5ATdxfZQLYlxGPM44Ip6Wv(BAK7TmFbZQLYlxGPM4iQp8hwxWTmFP2Cl6KrSUaFmFJBANOlqJ6SHfLtwrwv36scJhymzvDj56yLKA2iuajb4b(J9EibHN2KuJ25WnanscdAx4Ka3asQr7C4gGsYPrvmjnmmjNUl8gXqIpKK2kjJYatsy(gKG1tpCmjDARaeowj5Jvs6HKdNK)uumMK0wjHTS3vajoMe2fKK0WKK2kjvEh47qYPrQZoP1K0asCyssBfOKGWlfsMojjujzNoTvaj1ODojxdWNn9EijTDmjWUPDgjPoYurztsYMe895qsARKuwCscBJqbK4d8h79qsdtsARKa7M2jjztcY25KOGpB69qcCdiz6HeMs3b(o4iz1EsVhC8WXvzBek45d8h79yTdxLf4koJyTa)yBek45d8h79CPIWpmCez7C4gGg)SwSu7PrQZozSY7aFNl1EAK6Stgh9a6sd4xoDx4nIjISD(tbF207jcu01h8Tvz(gwSa7M25dOORp4aE6UWBetez78Nc(SP3teOORp4GVubSBANpGIU(GVT6P7cVrmrKTZFk4ZMEprGIU(GziZ38YP7cVrmrKTZFk4ZMEprGIU(GdyvZdNbHPTyb2nTZhqrxFW3E6UWBetKTrOGNpWFS3tK)bB69yXsyJXxGDt78bu01hCapDx4nIjISD(tbF207jcu01hmdz(MwSCAK6StgR8oW3XILWpmCmS0nV8Xz8ZgmzvDj56yLedVOZrjPhsy8ats2KWc6djgkR9NPmmgMKAc6tzr307jswvxs2t69GJhoMHvdc2l6CuRZfyQ5ZHRc(Jc3atnIvw7ptzWpwqFkl6MEprnq(olRYVurUatnJo(TCUfl5cm1mY1WpmC8S40hZiq3tgmzvDj56yLeMSCtLeFWoxjPHjPgmasGBajPTscSdWjjFSssdiPhsy8atYcNkGK0wjb2b4KKpwJKeOEAtYvUPDscdyvsS7cNe4gqsnyarYQ9KEp44HJzy1G8X6Ztf16zr1QyFG)LNzz5(Mna)cxUP(A4hSc6JN3T2HRg(HHJiBNd3a04N1IL0r1Bz(gxQO2tJuNDY44M25dE1GjRQljxhRKWawLeMQ)c4(oys6HegpWK0)e7CLKgMKA0ohUbOrsUowjHbSkjmv)fW9D4ys8HKA0ohUbOK4WKCV)KyVivsupTvajmvGgPssaEq6MnytVhsAajmaxlCsAysysPX4gfhjjqxpjbUbKW7ets2KeQK8zjjuHBGsYEsh5M(yscdyvsyQ(lG77GjjBsqxgOJ6yLK0wjj8ddhjR2t69GJhoMHvdc8QpZ)c4(oyRD4Q1g(HHJiBNd3a04N9sf1E6UWBetez78x2aGoz8ZAXsT5w0jJiBN)Yga0jJ6SHfLh8LkqUaFdlAK3j(9zVGz1s5LlWutCe5IY6a)8Y(FSRYSfl7jDK6J3ze5IY6a)8Y(FSRIz1s5LlWutCe5IY6a)8Y(FSVGz1s5LlWutCe5IY6a)8Y(FSVL5GTyj8ddhr2ohUbOXp7LkW9Ve6dpAcAK6ZhKUzd207jQZgwuUfl4(xc9HhHDTWFn8lS0yCJIJ6SHfLhmzvDj56yLKR1hU5IQysqyRdjBPqsqtsG76XKSaLKpR1K0asU3FswGsIpKuJ25WnansY1yWFGscd6FmvGpMKuJ25KGWlfsWPxkKeQK8zjbHToKK2kjNfNKKoQscSpo2wXrsmYMLKp2hts2KKBYqsYfyQjMeeEAtIHUaFmj5k30orxGgjR2t69GJhoMHvdcQpCZfvXwFUFk6lxGPM4QmBTdx1h8oEEpG1j34sfvGCb(gw04wkpEN43N9sf1E6UWBetez78Nc(SP3t8ZAXsT5w0jJ2)Xub(y(q2opQZgwuEWbBXs4hgoISDoCdqJF2GVurT5w0jJ2)Xub(y(q2opQZgwuUflCn8ddhT)JPc8X8HSDEeOORp4BploFPJQwSuB4hgoISDoCdqJF2GVurT5w0jJyDb(y(g30orxGg1zdlk3IfmRwkVCbMAIJO(WFyDbb8MbtwvxsUowj56JDxUtYvnYLKEiHXdS1Ky3fUpMKecCfUCNKSjbX6jjWnGe2gHciXh4p27HKgqYY5KGzxedoswTN07bhpCmdRgK)y3L7VPrUw7WvRn3Ioz0(pMkWhZhY25rD2WIYVGCb(gw0iVt87ZAXcxd)WWr7)yQaFmFiBNh)Sxc)WWrKTZHBaA8ZAXsfNUl8gXer2o)PGpB69ebk66d(wMVHfl1ICb(gw0iB3LhCdEhoo4l1g(HHJiBNd3a04NLSQUKCDSsspKW4bMKWFsclWBGNowj5J9XKKA0oNKRb4ZMEpKa7aCAnjomjFSYjXhSZvsAysQbdGKEiXOEs(yLKfovajljiBNh2LKe4gqYP7cVrmKOWW(X15CNKD4Ka3asS)JPc8XKeKTZj5ZMoQsIdtsUfDsLhjR2t69GJhoMHvdsy3ZRHFPT(w8rhUYT2HRwB4hgoISDoCdqJF2l1E6UWBetez78Nc(SP3t8ZEbZQLYlxGPM4iQp8hwxWTmFP2Cl6KrSUaFmFJBANOlqJ6SHfLBXsfHFy4iY25Wnan(zVGz1s5LlWutCe1h(dRliGm6sT5w0jJyDb(y(g30orxGg1zdlk)sfSaf5Z8WJmhr2o)f2L8sf1QbY3zzvEurzVd0T8AaF25OwSuBUfDYO9FmvGpMpKTZJ6SHfLhSflAG8DwwLhvu27aDlVgWNDo6Le4tLAgvu27aDlVgWNDoA80DH3iMiqrxFWbSkZbfgDHRHFy4O9FmvGpMpKTZJF2Gd2ILkc)WWrKTZHBaA8ZEj3IozeRlWhZ34M2j6c0OoByr5btwTN07bhpCmdRgKZwkV9KEpVIJtRNfvRMaFQutmz1EsVhC8WXmSAq4kMvbBQpwWExbw7WvT1TK2r2tgWQbOBswrwv36scJV4KKa12lkjm(ItFmjzpP3dosIHMKSjj2UPTciHf4nWZ7KKnjy7gKKCCW57jj(Kka8ztso9W907btspKCT(WjXqxqqyaL9ozvDj56yLedDb(ysYvUPDIUaLehMK79NeeEPqITNKOt)nTjjxGPMys2HtsnBekGKa8a)XEpKSdNKA0ohUbOKSaLKPtsa6YVBnjnGKSjbOWafBtIrGga1KKEijr0K0asqBGssUatnXrYQ9KEp44bXPkwxGpMVXnTt0fOw)X6dHTx03zXPpMvz26Z9trF5cm1exLzRD4QvGCb(gw0iwxGpMVXnTt0fOVZpBy4l1ICb(gw0iB3LhCdEhooylwQG3zeBV8gXdrd4p21NiqHbk2Edl6fmRwkVCbMAIJO(WFyDb3YCWKv1Led7gKKW4o489KedDb(ysYvUPDIUaLKtpCp9EijBsQuvwsmc0aOMK8zjXhsQJ(AqwTN07bhpiomSAqW6c8X8nUPDIUa16pwFiS9I(olo9XSkZwFUFk6lxGPM4QmBTdxn3IozeRlWhZ34M2j6c0OoByr5x4DgX2lVr8q0a(JD9jcuyGIT3WIEbZQLYlxGPM4iQp8hwxWTmISQUK0t5(7G4qc6wPIjjTvs2t69qspL7K8XByrjH)b(ysYXENrl(ysYoCsMojzXKSKauZFzbKSN07jswTN07bhpiomSAqq9H)clloTUNY93bXPkZKvKv7j9EWroQ5lb(uPM4QFS(8urTEwuTkFbvI29846PY3J9NafF05OKv7j9EWroQ5lb(uPMygwniFS(8urTEwuTk(pHLU5Vfvt774KSApP3doYrnFjWNk1eZWQb5J1NNkQ1ZIQvnl3zTFn8BXyh1lB69qwTN07bh5OMVe4tLAIzy1G8X6Ztf16zr1QCGUCyhOpKkgRfYkYQ6wxsU21hsQJAguTMeSD)lCsonsfqYwkKa2XuXK0WKKlWutmj7WjbF0zbEJjR2t69GJORpvpBP82t698kooTEwuTAy3J14e4NSkZw7Wvd)WWXWUNxd)sB9T4JoCLh)SKv7j9EWr01hgwniChZQLh6A6hRD4Q1MlWuZOJFSL9UciRQljxhRKuJ25KCnaF207HKEi50DH3igsy7U4JjjBssrxCscJUjj(G3XZ7Ke(tsMojXHj5E)jbHxkK0ivWzzjXh8oEENeFiPgmGijx7wPsc(dusmSxEJa21HhKR1hEOoCfqYoCsUwF4KWKYItsCmj9qYP7cVrmKeQWnqjPgxdsCysmSxEJaUSOkjoMenq(olRYJKeGnNgOKW2DXhtsakob(j9EWK4WK8X(ysIH9YBeWLfvjPMahJsYoCsyIoCfqIJjP)zKSApP3doIU(WWQbbz78Nc(SP3J1oCvKlW3WIgz7U8GBW7WXxQWh8oEE)2Qm6MwSWQze21Hh3t6i1lG)OWnWuJy7L3iGllQ(ybognQbY3zzv(LApDx4nIjI6d)fwwCg)SxQ90DH3iMi2E5nIhIgWFCDt74Nn4lv4dEhpVhWQm4BAXsUfDYiwxGpMVXnTt0fOrD2WIYVGCb(gw0iwxGpMVXnTt0fOVZpBy4GVu7P7cVrmryxhE8ZEPIAX9Ve6dpISlB6f9H7csDslwc)WWrKDztVOpCxqQt(S)O70op(zTybRz6Jjo6Mtd0hUli1jdMSQUKCTBLkj4pqj5E)jH9NK8zjXiqdGAssDyuh1KKEijTvsYfyQjjomjbkytB4FHegWQaxjXXdJLKSN0rQKGWwhsGDt70htsyMPoOjjxGPM4iz1EsVhCeD9HHvdc2E5nIhIgWFSRpw7Wvd)WWr4vFM)fW9DWXp7LA5A4hgoIaSPn8V8Gxf4A8ZEbZQLYlxGPM4iQp8hwxqazAYQ9KEp4i66ddRgKZwkV9KEpVIJtRNfvRE4yYQ6scdQBAtsnbEd88ojxRpCsm0fqYEsVhsYMeGcduSnjbURhtccpTjbRlWhZ34M2j6cuYQ9KEp4i66ddRgeuF4pSUaRp3pf9LlWutCvMT2HRMBrNmI1f4J5BCt7eDbAuNnSO8lywTuE5cm1ehr9H)W6cUf5c8nSOruF4pSUG35Nnm8LA5DgX2lVr8q0a(JD9jM(PsFmVu7P7cVrmryxhE8ZswvxsQjqHvajztYhRKe4fD207HK6WOoQjjomjgbAautsAaj1OEsCmjtNK8zjPbKCV)KC2z6KKZItswsMgGUfscSIS)aFmjPML18RKuHpNYN7JjjxRpCscSIS)afqclOp4Gjzhoj37pji8sHKPtsolljbEbvss92930oXKGZ9ujMehMKp2htsQNrmysye7jswTN07bhrxFyy1GWx0ztVhRp3pf9LlWutCvMT2HRwbVZiYfL1b(5L9)yhbkmqX2ByrTyH3zeBV8gXdrd4p21NiqHbk2EdlQflvuB4hgoI6d)XvK9hOG4N9Ip4D88EaV5nco4lve(HHJ8fu5lT7VPDgX5EQmGHFy4iFbv(s7(BANr0Lb(W5EQ0ILAXA(c75JJPRagXGFmI9emzvDj56yLed7L3iijqBaNKaRBAtIdtYh7Jjjg2lVraxwuLKAcCmkj7WjjuhUcibHxkKOmqwhOKW)aFmjjTvsgLbMKyE4rYQ9KEp4i66ddRgeS9YBepenG)46M2w7Wvz1mc76WJ7jDK6fWFu4gyQrS9YBeWLfvFSahJg1a57SSk)cRMryxhEeOORp4aw18WjRQlj1rbXEhtYhRKG6dpSS4etIdtYzzzvoj7WjX(pMkWhtsq2oNehtYNLKD4K8X(ysIH9YBeWLfvjPMahJsYoCsc1HRasCmjF2ijKuhCUNEpBPC3Asolojb1hEyzXjjomj37pji6FHtsOsYF2WIss2KyQjjPTscWHtscVtcI1tFmjzjX8WJKv7j9EWr01hgwniO(WFHLfNw7WvR40DH3iMiQp8xyzXz8yVatfFlZxQGRHFy4O9FmvGpMpKTZJFwlwQn3Ioz0(pMkWhZhY25rD2WIYd2IfwnJWUo8iqrxFWbS6zX5lDuLHMhEWxy1mc76WJ7jDK6fWFu4gyQrS9YBeWLfvFSahJg1a57SSk)cRMryxhEeOORp4BploFPJQwSe(HHJ8fu5lT7VPDg)Sxc)WWrKTZHBaA8ZEP2t3fEJyIiBN)c7sg)SxQOwWFu4gyQrS9YBeWLfvFSahJg1a57SSk3ILAz1mc76WJ7jDKAWxWA(c75JJPRagXGFmn7HSQUKCDSssnANtct6ssYMKy7M2kGewG3apVtccpTjHb9pMkWhtsQr7Cs(SKKnjmnj5cm1eBnjnGKoTvaj5w0jXK0djg1hjR2t69GJORpmSAqq2o)f2L0AhUQp4D88EaRYGV5LCl6Kr7)yQaFmFiBNh1zdlk)sUfDYiwxGpMVXnTt0fOrD2WIYVGz1s5LlWutCe1h(dRliGvdkwSurf5w0jJ2)Xub(y(q2opQZgwu(LAZTOtgX6c8X8nUPDIUanQZgwuEWwSGz1s5LlWutCe1h(dRlOkZbtwvxscCpmwsYhRKeyfz)b(yssnlR5xjXHj5E)j5SdjMAsIpztsnANd3aus8bN6YTMKgqIdtIHUaFmj5k30orxGsIJjj3IoPYjzhoji8sHeBpjrN(BAtsUatnXrYQ9KEp4i66ddRgeUIS)aFmFSL18Rw7WvRaOWafBVHf1IfFW7459Bdq30ILCl6KrKTZFzda6KrD2WIYVC6UWBetez78x2aGozeOORp4awnOzqmp8GVurTixGVHfnY2D5b3G3HJTyXh8oEE)2Qm4Bg8LkQn3IozeRlWhZ34M2j6c0OoByr5wSurUfDYiwxGpMVXnTt0fOrD2WIYVulYf4ByrJyDb(y(g30orxG(o)SHHdoyYQ6sY1Xkj1GjK0djmEGjXHj5E)jH3dJLKmQYjjBsolojjWkY(d8XKKAwwZVAnj7WjjTvGsYcuskkgtsAVdjmnj5cm1ets)tsQ4MKGWtBso9W)EgCKSApP3doIU(WWQbbz78xyxsRD4QywTuE5cm1ehr9H)W6ccyfmndp9W)Eg5og3Zo5tp2TIJ6SHfLh8fFW7459awLbFZl5w0jJyDb(y(g30orxGg1zdlk3ILAZTOtgX6c8X8nUPDIUanQZgwuozvDj56yLed7L3iijqBapaijW6M2K4WKK2kj5cm1KehtYg2)KKSjH7kjnGK79Ne7fPsIH9YBeWLfvjPMahJsIgiFNLv5KGWtBsUwF4H6WvajnGed7L3iGDD4KSN0rQrYQ9KEp4i66ddRgeS9YBepenG)46M2wFUFk6lxGPM4QmBTdxTICbMAgT1TK2r2tgqgDJlywTuE5cm1ehr9H)W6ccithSflvWQze21Hh3t6i1lG)OWnWuJy7L3iGllQ(ybognQbY3zzvEWKv1LKRJvsm(aGoCfqs2KCTlFumMKEizjjxGPMKK2BsIJjXS9XKKSjH7kjBssARKaCt7KK0r1iz1EsVhCeD9HHvdc(da6WvWl7h6YhfJT(C)u0xUatnXvz2AhUAUatnJPJQVSFCxdiJU5LWpmCez7C4gGg5nIHSQUKCDSssnANts9naOtsspL7K4WKyeObqnjzhoj1OEswGsYEshPsYoCssBLKCbMAscIEySKeURKW)aFmjjTvso27mAjswTN07bhrxFyy1GGSD(lBaqN06Z9trF5cm1exLzRD4QixGVHfnY7e)(SxQi8ddhr2ohUbOrEJySyj8ddhr2ohUbOrGIU(Gd4P7cVrmrKTZFHDjJafD9bBXclqr(mp8iZrKTZFHDjVuB4hgogw6Mx(4mc09KxWSAP8YfyQjoI6d)H1feWGo4l7jDK6J3ze5IY6a)8Y(FSVT65(POpDuuxXxWSAP8YfyQjoI6d)H1feWkUjdRiOWGKBrNmMiCC(A4h8MAuNnSO8GdMSApP3doIU(WWQbb1hEOoCfyTdxL3ze5IY6a)8Y(FSJPFQ0hZlvKBrNmI1f4J5BCt7eDbAuNnSO8lywTuE5cm1ehr9H)W6cUf5c8nSOruF4pSUG35NnmSfl8oJy7L3iEiAa)XU(et)uPpMbFPIAb)rHBGPgX2lVraxwu9XcCmAudKVZYQClw2t6i1hVZiYfL1b(5L9)yFB1Z9trF6OOUIdMSQUKCDSsIrGgabMeeEAtsnxFcb6wPciPM4TGsYFkkgtsARKKlWutsq4LcjHkjHAPrqcJUbt5KeQWnqjjTvsoDx4nIHKtJQysc3tLrYQ9KEp4i66ddRgeS9YBepenG)46M2w7Wvb)rHBGPgzxFcb6wPcES4TGg1a57SSk)cYf4ByrJ8oXVp7LCbMAgthvFz)yp5Jr342koDx4nIjITxEJ4HOb8hx30oY)Gn9EyO5HhmzvDj56yLed7L3iiHXbl2MKEiHXdmj)POymjPTcuswGsYY5ys850O(ygjR2t69GJORpmSAqW2lVr8oGfBBTdxfSo)Pi1jJlNJJ(ClZ3GS66yLKR1hojg6cijBso9G)OkjbEbvss92930oXKWc6dMKEiPoQZxJij1xNdCDMegVhyhGsIJjjTDmjoMKLeB30wbKWc8g45Dss7DibO8otFmjPhsQJ681GK)uumMe(cQKK0U)M2jMehtYg2)KKSjjDuLK(NKv7j9EWr01hgwniO(WFyDbwFUFk6lxGPM4QmBTdxfZQLYlxGPM4iQp8hwxWTixGVHfnI6d)H1f8o)SHHVe(HHJ8fu5lT7VPDg)SwFSxFQYS1(Kka8zZNJIQCFtTkZw7tQaWNnFoC10pvIVTkttwv36ss915axNdasiHXT1tLKK2oMKR1hojmGYENehLTOO6KB69qs2KGvLehMepjjeOBLys60wbKa6F6JsYXENrlysAysUwF4KWak7DMYsc6ENKrvojztc6wPssA7yscb6w5AQK0t5ojiAqLKGWtBssBLeSMKe2ZhhjRQljxhRKCT(WjHbu27KKnjNEWFuLKaVGkjPE7(BANysyb9btspKyupj9pXoxjPHjPgmGiz1EsVhCeD9HHvdcQp8hCzVBTdxn8ddh5lOYxA3Ft7m(zVGCb(gw0iVt87ZEP2WpmCez7C4gGg)SxQf5c8nSOr2Ulp4g8oC8Lt3fEJyIO(WFHLfNr4FP8a6XEbM6lDu92QMhEeDzGwFSxFQYS1(Kka8zZNJIQCFtTkZw7tQaWNnFoC10pvIVTktFP2WpmCKVGkFPD)nTZ4NLSQUKCDSsY16dNeMuwCsIdtY9(tcVhgljzuLts2KauyGITjjWD94ijgzZsYzXPpMKSjjmnjnGe0gOKKlWutmji80MedDb(ysYvUPDIUaLKCl6KkNKD4KCV)KSaLKPts(yFmjXWE5nc4YIQKutGJrjPbKut89JTFijO6tLrmRwkVCbMAIJO(WFyDb3wN(MKyQjMK0wjb1hh9JssdtYnjzhojPTsY8rdvajnmj5cm1ehjPok42As4njtNKWcumMeuF4HLfNK8N0lKSLcj5cm1etYcus4DMkNeeEAtsnQNee26qYh7Jjjy7L3iGllQsclWXOK4WKeQdxbK4yswKRx2WIgjR2t69GJORpmSAqq9H)clloT2HRICb(gw0iVt87ZEbSo)Pi1jJOnsfvNm6ZTNfNV0rvgEJ4nVGz1s5LlWutCe1h(dRliGvW0mKrmi5w0jJOowb3J6SHfLZW9Kos9X7mICrzDGFEz)p2mi5w0jJS47hB)8k(uzuNnSOCgwbMvlLxUatnXruF4pSUGBRtFZGzqQGvZiSRdpUN0rQxa)rHBGPgX2lVraxwu9XcCmAudKVZYQ8Gd(sf1c(Jc3atnITxEJaUSO6Jf4y0OgiFNLv5wSu7P7cVrmryxhE8ZEb8hfUbMAeBV8gbCzr1hlWXOrnq(olRYTyzpPJuF8oJixuwh4Nx2)J9Tvp3pf9PJI6koyYQ6sY1ScduSnj1yrzDGFiP((FSjbHJ1YDscxSYjPhsc8IoB69qYoCs60wbKu)w0jXrYQ9KEp4i66ddRgeKlkRd8Zl7)X26Z9trF5cm1exLzRD4QvauyGIT3WIEjxGPMX0r1x2pUR3guSyPICl6KruhRG7rD2WIYVW7mITxEJ4HOb8h76teOWafBVHfn4GVurT5w0jJ8fD207jQZgwuUflNUl8gXe5l6SP3teOORp4BRY7mICrzDGFEz)p2rGIU(GTy50DH3iMiFrNn9EIafD9bFBvENrS9YBepenG)yxFIafD9bhSflHFy44FG)GIpMp(cQCumo(zjRQljgS6X3cjNE4E69qs2KGZMLKZItFmjXiqdGAsspK0WWm15cm1etccBDib2nTtFmjjOjPbKG2aLeCUNkvojODiMKD4K8X(yssnX3p2(HKGQpvsYoCsUQoxpjxRJvW9iz1EsVhCeD9HHvdc2E5nIhIgWFSRpw7WvbkmqX2ByrVKlWuZy6O6l7h31Bz6l1MBrNmI6yfCpQZgwu(LCl6Krw89JTFEfFQmQZgwu(fmRwkVCbMAIJO(WFyDb3YiYQ6sctjvzjXiqdGAsYNLKEizXKGUZDsYfyQjMKftcBJXEyrTMeLbEu2Kee26qcSBAN(yssqtsdibTbkj4CpvQCsq7qmji80MKAIVFS9djbvFQmswTN07bhrxFyy1GGTxEJ4HOb8h76J1N7NI(YfyQjUkZw7WvbkmqX2ByrVKlWuZy6O6l7h31Bz6l1MBrNmI6yfCpQZgwu(LARi3IozeRlWhZ34M2j6c0OoByr5xWSAP8YfyQjoI6d)H1fClYf4ByrJO(WFyDbVZpBy4GVurT5w0jJS47hB)8k(uzuNnSOClwQi3IozKfF)y7NxXNkJ6SHfLFbZQLYlxGPM4iQp8hwxqaRYOGd(sf1MBrNmYx0ztVNOoByr5wSC6UWBetKVOZMEprGIU(GVTkVZi2E5nIhIgWFSRprGIU(GdMSApP3doIU(WWQbb1h(dRlW6Z9trF5cm1exLzRD4QywTuE5cm1ehr9H)W6cUf5c8nSOruF4pSUG35Nnm8LkQf3)sOp8iYUSPx0hUli1jTyP2t3fEJyIWffBFalCg)SbB9XE9PkZw7tQaWNnFokQY9n1QmBTpPcaF285Wvt)uj(2QmISApP3doIU(WWQbb1h(dUS3T(yV(uLzR9jva4ZMphfv5(MAvMT2NubGpB(C4QPFQeFBvgDPIAd)WWr(cQ8L2930oJFwlwoDx4nIjISD(lSlz8ZEPIWpmCez7C4gGg)SwSuB4hgoYxqLV0U)M2z8ZEj8ddh5og3Zo5tp2TIJF2Gd2AhUAT4(xc9Hhr2Ln9I(WDbPoPfl1E6UWBeteUOy7dyHZ4NLSQUKCDSscdOOy7dyHts6FIDUssdtc66djNUl8gXGjjBsqxFY1hsQrx20lkjgDbPojjHFy4iz1EsVhCeD9HHvdcCrX2hWcNw7WvX9Ve6dpISlB6f9H7csDYl1g(HHJiBNd3a04N9sTHFy4iBJqbpFG)yVN4N1AFsfa(S5ZrrvUVPwLzR9jva4ZMphUA6NkX3wLzYQ6sY1XkjgbAaeyswmjLfNKauCdssCys6HK0wjbTrQKv7j9EWr01hgwniy7L3iEiAa)X1nTjRQljxhRKyeObqnjzXKuwCscqXnijXHjPhssBLe0gPsYoCsmc0aiWK4ys6HegpWKv7j9EWr01hgwniy7L3iEiAa)XU(qwrwvxsUowjPhsy8atsDyuh1KKSjXutscCxpjPFQ0hts2HtIYazDGss2Ku8rj5ZssOMPcibHN2KuJ25WnaLSApP3doMaFQutC1pwFEQOwplQwvrzVd0T8AaF25Ow7WvpDx4nIjISD(tbF207jcu01hCaRYmJSy50DH3iMiY25pf8ztVNiqrxFW3YOaezvDjPEWDsYMeJ7ZHKaCDQatccpTjjW9pSOKyK7PsLtcJhymjomjSng7HfnssDEiP0JPcib2nTtmji80Me0gOKeGRtfys(yftYMPIYMKKnj47ZHeeEAtYo3j5WjPbKCn9XjjFSsINrYQ9KEp4yc8PsnXmSAq(y95PIA9SOAvFWhWp3WI(cK)o5h9XvK(rT2HRg(HHJiBNd3a04N9s4hgoY2iuWZh4p27j(zTyjSX4lWUPD(ak66doGvz0nSyj8ddhzBek45d8h79e)SxoDx4nIjISD(tbF207jcu01hmdz(M3c7M25dOORpylwc)WWrKTZHBaA8ZE50DH3iMiBJqbpFG)yVNiqrxFWmK5BElSBANpGIU(GTyPIt3fEJyISncf88b(J9EIafD9bFBvMVXLt3fEJyIiBN)uWNn9EIafD9bFBvMVrWxGDt78bu01h8TvzUo5gKv1LeJ7ZHedBvtsU2p2pKGWtBsQr7C4gGswTN07bhtGpvQjMHvdYhRppvuRNfvRIUNneOpSTQ5d9J9J1oC1t3fEJyIiBN)uWNn9EIafD9bFlZ3GSQUKyCFoKCn)dVtccpTjPMncfqsaEG)yVhs(41uTMe0TsLe8hOKKnj4XzvssBLKsJqXjjmO1KKCbMAgjjqT1HKpw5KGWtBsmSxEJq5KuNbHK0WKuFdq1jTMKRPpoj5Jvs6HegpWKSysq)hBswmjSng7HfnswTN07bhtGpvQjMHvdYhRppvuRNfvRI7FPOz6J5d8dVB95(POVCbMAIRYS1oC1WpmCKTrOGNpWFS3t8ZAXsTSaxXzeRf4hBJqbpFG)yVhlw0a57SSkpITxEJq5Vge(A4x2auDsYQ6sY1Xkjmz5Mkj(GDUssdtsnyaKa3assBLeyhGts(yLKgqspKW4bMKfovajPTscSdWjjFSgjXWUbjjhhC(EsIdtcY25KOGpB69qYP7cVrmK4ysy(gysAajOnqjzrS3JKv7j9EWXe4tLAIzy1G8X6Ztf16zr1QyFG)LNzz5(Mna)cxUP(A4hSc6JN3T2HRE6UWBetez78Nc(SP3teOORp4BRY8niRQljxhRKyyV8gHYjPodcjPHjP(gGQtsccBDiz6KeFiPgTZHBaQ1K0as8HKqnrO6qsnANtct6ssYzXjMeFiPgTZHBaAKK6atctP7aFhsAajxPhqxAaNKIpkjEsYNLeeEAtco3tLkNKt3fEJyWrYQ9KEp4yc8PsnXmSAq(y95PIA9SOAvS9YBek)1GWxd)YgGQtATdx90DH3iMiBJqbpFG)yVNiqrxFWbSkZ34YP7cVrmrKTZFk4ZMEprGIU(GdyvMVXLkonsD2jJJEaDPbClwonsD2jJvEh47eSflvCAK6StgrQtAFhyXYPrQZozCCt78bVAWxQO2WpmCez7C4gGg)SwSWcuKpZdpYCez78xyxYGTyjSX4lWUPD(ak66doGvz6BqwrwvxsUowjP44KKgMKEyQ)yLe(IUMkjjWNk1etspL7K4WKWG(htf4Jjj1ODojbwd)WWK4ys2t6ivRjPbKCV)KSaLKPtsYTOtQCs8jBs8mswTN07bhtGpvQjMHvdYzlL3EsVNxXXP1ZIQv5OMVe4tLAITgNa)Kvz2AhUAf1MBrNmA)htf4J5dz78OoByr5wSW1WpmC0(pMkWhZhY25XpBWxQi8ddhr2ohUbOXpRflNUl8gXer2o)PGpB69ebk66d(wMVrWKv1LKaRW7VKKaVLs4EQKe4gqYhVHfLepvuCaqY1Xkj9qYP7cVrmK4djnGRascVtsc8Psnjbx6mswTN07bhtGpvQjMHvdYhRppvuS1oC1WpmCez7C4gGg)SwSe(HHJSncf88b(J9EIFwlwoDx4nIjISD(tbF207jcu01h8TmFdidmREGUIr3KbdLqjeea]] )
end