diff --git a/FreshShit/CLEUSaver/event.lua b/FreshShit/CLEUSaver/event.lua
new file mode 100644
index 0000000..77f9fc5
--- /dev/null
+++ b/FreshShit/CLEUSaver/event.lua
@@ -0,0 +1,13 @@
+--- COMBAT_LOG_EVENT_UNFILTERED
+---@param e string
+---@param ... any
+function(allstates, e, ...)
+ local spellId, err = CLEUParser.GetSpellId(...)
+ if err then return end
+ local spellname, err = CLEUParser.GetSpellName(...)
+ if err then return end
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return end
+
+ aura_env.LogSpell(spellname, spellId, subevent, ...)
+end
diff --git a/FreshShit/CLEUSaver/init.lua b/FreshShit/CLEUSaver/init.lua
new file mode 100644
index 0000000..25baa34
--- /dev/null
+++ b/FreshShit/CLEUSaver/init.lua
@@ -0,0 +1,1057 @@
+CLEUEventInfo = {
+ ["GENERIC"] = {
+ ["timestamp"] = 1,
+ ["subevent"] = 2,
+ ["hideCaster"] = 3,
+ ["sourceGUID"] = 4,
+ ["sourceName"] = 5,
+ ["sourceFlags"] = 6,
+ ["sourceRaidFlags"] = 7,
+ ["destGUID"] = 8,
+ ["destName"] = 9,
+ ["destFlags"] = 10,
+ ["destRaidFlags"] = 11,
+ },
+ ["GENERIC_SPELL"] = {
+ ["spellId"] = 12,
+ ["spellName"] = 13,
+ ["spellSchool"] = 14,
+ },
+ ["GENERIC_DAMAGE"] = {
+ ["amount"] = 15,
+ ["overkill"] = 16,
+ ["school"] = 17,
+ ["resisted"] = 18,
+ ["blocked"] = 19,
+ ["absorbed"] = 20,
+ ["critical"] = 21,
+ ["glancing"] = 22,
+ ["crushing"] = 23,
+ ["isOffHand"] = 24,
+ },
+ ["GENERIC_MISSED"] = {
+ ["missType"] = 15,
+ ["isOffHand"] = 16,
+ ["amountMissed"] = 17,
+ ["critical"] = 18,
+ },
+ ["GENERIC_HEAL"] = {
+ ["amount"] = 15,
+ ["overhealing"] = 16,
+ ["absorbed"] = 17,
+ ["critical"] = 18,
+ },
+ ["GENERIC_HEAL_ABSORBED"] = {
+ ["extraGUID"] = 15,
+ ["extraName"] = 16,
+ ["extraFlags"] = 17,
+ ["extraRaidFlags"] = 18,
+ ["extraSpellID"] = 19,
+ ["extraSpellName"] = 20,
+ ["extraSchool"] = 21,
+ ["absorbedAmount"] = 22,
+ ["totalAmount"] = 23,
+ },
+ ["GENERIC_ENERGIZE"] = {
+ ["amount"] = 15,
+ ["overEnergize"] = 16,
+ ["powerType"] = 17,
+ },
+ ["GENERIC_DRAIN"] = {
+ ["amount"] = 15,
+ ["powerType"] = 16,
+ ["extraAmount"] = 17,
+ },
+ ["GENERIC_LEECH"] = {
+ ["amount"] = 15,
+ ["powerType"] = 16,
+ ["extraAmount"] = 17,
+ },
+ ["GENERIC_INTERRUPT"] = {
+ ["extraSpellId"] = 15,
+ ["extraSpellName"] = 16,
+ ["extraSchool"] = 17,
+ },
+ ["GENERIC_DISPEL"] = {
+ ["extraSpellId"] = 15,
+ ["extraSpellName"] = 16,
+ ["extraSchool"] = 17,
+ ["auraType"] = 18,
+ },
+ ["GENERIC_DISPEL_FAILED"] = {
+ ["extraSpellId"] = 15,
+ ["extraSpellName"] = 16,
+ ["extraSchool"] = 17,
+ },
+ ["GENERIC_STOLEN"] = {
+ ["extraSpellId"] = 15,
+ ["extraSpellName"] = 16,
+ ["extraSchool"] = 17,
+ ["auraType"] = 18,
+ },
+ ["GENERIC_EXTRA_ATTACKS"] = {
+ ["amount"] = 15,
+ },
+ ["GENERIC_AURA_APPLIED"] = {
+ ["auraType"] = 15,
+ ["amount"] = 16,
+ },
+ ["GENERIC_AURA_REMOVED"] = {
+ ["auraType"] = 15,
+ ["amount"] = 16,
+ },
+ ["GENERIC_AURA_APPLIED_DOSE"] = {
+ ["auraType"] = 15,
+ ["amount"] = 16,
+ },
+ ["GENERIC_AURA_REMOVED_DOSE"] = {
+ ["auraType"] = 15,
+ ["amount"] = 16,
+ },
+ ["GENERIC_AURA_REFRESH"] = {
+ ["auraType"] = 15,
+ },
+ ["GENERIC_AURA_BROKEN"] = {
+ ["auraType"] = 15,
+ },
+ ["GENERIC_AURA_BROKEN_SPELL"] = {
+ ["extraSpellId"] = 15,
+ ["extraSpellName"] = 16,
+ ["extraSchool"] = 17,
+ ["auraType"] = 18,
+ },
+ ["GENERIC_CAST_START"] = {
+ },
+ ["GENERIC_CAST_SUCCESS"] = {
+ },
+ ["GENERIC_CAST_FAILED"] = {
+ },
+}
+
+CLEUEventInfo["SWING_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"]
+CLEUEventInfo["SWING_MISSED"] = CLEUEventInfo["GENERIC_MISSED"]
+CLEUEventInfo["SWING_HEAL"] = CLEUEventInfo["GENERIC_HEAL"]
+CLEUEventInfo["SWING_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"]
+CLEUEventInfo["SWING_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"]
+CLEUEventInfo["SWING_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"]
+CLEUEventInfo["SWING_LEECH"] = CLEUEventInfo["GENERIC_LEECH"]
+CLEUEventInfo["SWING_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"]
+CLEUEventInfo["SWING_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"]
+CLEUEventInfo["SWING_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"]
+CLEUEventInfo["SWING_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"]
+CLEUEventInfo["SWING_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"]
+CLEUEventInfo["SWING_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"]
+CLEUEventInfo["SWING_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"]
+CLEUEventInfo["SWING_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"]
+CLEUEventInfo["SWING_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"]
+CLEUEventInfo["SWING_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"]
+CLEUEventInfo["SWING_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"]
+CLEUEventInfo["SWING_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"]
+CLEUEventInfo["SWING_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"]
+CLEUEventInfo["SWING_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"]
+CLEUEventInfo["SWING_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"]
+
+CLEUEventInfo["RANGE_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"]
+CLEUEventInfo["RANGE_MISSED"] = CLEUEventInfo["GENERIC_MISSED"]
+CLEUEventInfo["RANGE_HEAL"] = CLEUEventInfo["GENERIC_HEAL"]
+CLEUEventInfo["RANGE_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"]
+CLEUEventInfo["RANGE_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"]
+CLEUEventInfo["RANGE_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"]
+CLEUEventInfo["RANGE_LEECH"] = CLEUEventInfo["GENERIC_LEECH"]
+CLEUEventInfo["RANGE_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"]
+CLEUEventInfo["RANGE_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"]
+CLEUEventInfo["RANGE_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"]
+CLEUEventInfo["RANGE_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"]
+CLEUEventInfo["RANGE_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"]
+CLEUEventInfo["RANGE_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"]
+CLEUEventInfo["RANGE_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"]
+CLEUEventInfo["RANGE_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"]
+CLEUEventInfo["RANGE_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"]
+CLEUEventInfo["RANGE_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"]
+CLEUEventInfo["RANGE_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"]
+CLEUEventInfo["RANGE_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"]
+CLEUEventInfo["RANGE_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"]
+CLEUEventInfo["RANGE_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"]
+CLEUEventInfo["RANGE_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"]
+
+CLEUEventInfo["SPELL_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"]
+CLEUEventInfo["SPELL_MISSED"] = CLEUEventInfo["GENERIC_MISSED"]
+CLEUEventInfo["SPELL_HEAL"] = CLEUEventInfo["GENERIC_HEAL"]
+CLEUEventInfo["SPELL_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"]
+CLEUEventInfo["SPELL_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"]
+CLEUEventInfo["SPELL_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"]
+CLEUEventInfo["SPELL_LEECH"] = CLEUEventInfo["GENERIC_LEECH"]
+CLEUEventInfo["SPELL_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"]
+CLEUEventInfo["SPELL_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"]
+CLEUEventInfo["SPELL_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"]
+CLEUEventInfo["SPELL_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"]
+CLEUEventInfo["SPELL_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"]
+CLEUEventInfo["SPELL_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"]
+CLEUEventInfo["SPELL_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"]
+CLEUEventInfo["SPELL_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"]
+CLEUEventInfo["SPELL_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"]
+CLEUEventInfo["SPELL_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"]
+CLEUEventInfo["SPELL_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"]
+CLEUEventInfo["SPELL_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"]
+CLEUEventInfo["SPELL_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"]
+CLEUEventInfo["SPELL_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"]
+CLEUEventInfo["SPELL_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"]
+
+CLEUEventInfo["SPELL_PERIODIC_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"]
+CLEUEventInfo["SPELL_PERIODIC_MISSED"] = CLEUEventInfo["GENERIC_MISSED"]
+CLEUEventInfo["SPELL_PERIODIC_HEAL"] = CLEUEventInfo["GENERIC_HEAL"]
+CLEUEventInfo["SPELL_PERIODIC_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"]
+CLEUEventInfo["SPELL_PERIODIC_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"]
+CLEUEventInfo["SPELL_PERIODIC_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"]
+CLEUEventInfo["SPELL_PERIODIC_LEECH"] = CLEUEventInfo["GENERIC_LEECH"]
+CLEUEventInfo["SPELL_PERIODIC_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"]
+CLEUEventInfo["SPELL_PERIODIC_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"]
+CLEUEventInfo["SPELL_PERIODIC_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"]
+CLEUEventInfo["SPELL_PERIODIC_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"]
+CLEUEventInfo["SPELL_PERIODIC_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"]
+CLEUEventInfo["SPELL_PERIODIC_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"]
+CLEUEventInfo["SPELL_PERIODIC_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"]
+CLEUEventInfo["SPELL_PERIODIC_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"]
+CLEUEventInfo["SPELL_PERIODIC_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"]
+CLEUEventInfo["SPELL_PERIODIC_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"]
+CLEUEventInfo["SPELL_PERIODIC_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"]
+CLEUEventInfo["SPELL_PERIODIC_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"]
+CLEUEventInfo["SPELL_PERIODIC_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"]
+CLEUEventInfo["SPELL_PERIODIC_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"]
+CLEUEventInfo["SPELL_PERIODIC_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"]
+
+---@class CLEUParser
+CLEUParser = {
+ ---@param ... any
+ ---@return number, nil|string
+ GetTimestamp = function(...)
+ local val = select(CLEUEventInfo["GENERIC"]["timestamp"], ...)
+ if val == nil then return 0, "Timestamp is nil or missing" end
+ if type(val) ~= "number" then return 0, "Timestamp is not a number" end
+ return val, nil
+ end,
+ ---@param ... any
+ ---@return string, nil|string
+ GetSubevent = function(...)
+ local val = select(CLEUEventInfo["GENERIC"]["subevent"], ...)
+ if val == nil then return "", "Subevent is nil or missing" end
+ if type(val) ~= "string" then return "", "Subevent is not a string" end
+ return val, nil
+ end,
+ ---@param ... any
+ ---@return boolean, nil|string
+ GetHideCaster = function(...)
+ local val = select(CLEUEventInfo["GENERIC"]["hideCaster"], ...)
+ if val == nil then return false, "HideCaster is nil or missing" end
+ if type(val) ~= "boolean" then return false, "HideCaster is not a boolean" end
+ return val, nil
+ end,
+ ---@param ... any
+ ---@return string, nil|string
+ GetSourceGUID = function(...)
+ local val = select(CLEUEventInfo["GENERIC"]["sourceGUID"], ...)
+ if val == nil then return "", "SourceGUID is nil or missing" end
+ if type(val) ~= "string" then return "", "SourceGUID is not a string" end
+ return val, nil
+ end,
+ ---@param ... any
+ ---@return string, nil|string
+ GetSourceName = function(...)
+ local val = select(CLEUEventInfo["GENERIC"]["sourceName"], ...)
+ if val == nil then return "", "SourceName is nil or missing" end
+ if type(val) ~= "string" then return "", "SourceName is not a string" end
+ return val, nil
+ end,
+ ---@param ... any
+ ---@return number, nil|string
+ GetSourceFlags = function(...)
+ local val = select(CLEUEventInfo["GENERIC"]["sourceFlags"], ...)
+ if val == nil then return 0, "SourceFlags is nil or missing" end
+ if type(val) ~= "number" then return 0, "SourceFlags is not a number" end
+ return val, nil
+ end,
+ ---@param ... any
+ ---@return number, nil|string
+ GetSourceRaidFlags = function(...)
+ local val = select(CLEUEventInfo["GENERIC"]["sourceRaidFlags"], ...)
+ if val == nil then return 0, "SourceRaidFlags is nil or missing" end
+ if type(val) ~= "number" then return 0, "SourceRaidFlags is not a number" end
+ return val, nil
+ end,
+ ---@param ... any
+ ---@return string, nil|string
+ GetDestGUID = function(...)
+ local val = select(CLEUEventInfo["GENERIC"]["destGUID"], ...)
+ if val == nil then return "", "DestGUID is nil or missing" end
+ if type(val) ~= "string" then return "", "DestGUID is not a string" end
+ return val, nil
+ end,
+ ---@param ... any
+ ---@return string, nil|string
+ GetDestName = function(...)
+ local val = select(CLEUEventInfo["GENERIC"]["destName"], ...)
+ if val == nil then return "", "DestName is nil or missing" end
+ if type(val) ~= "string" then return "", "DestName is not a string" end
+ return val, nil
+ end,
+ ---@param ... any
+ ---@return number, nil|string
+ GetDestFlags = function(...)
+ local val = select(CLEUEventInfo["GENERIC"]["destFlags"], ...)
+ if val == nil then return 0, "DestFlags is nil or missing" end
+ if type(val) ~= "number" then return 0, "DestFlags is not a number" end
+ return val, nil
+ end,
+ ---@param ... any
+ ---@return number, nil|string
+ GetDestRaidFlags = function(...)
+ local val = select(CLEUEventInfo["GENERIC"]["destRaidFlags"], ...)
+ if val == nil then return 0, "DestRaidFlags is nil or missing" end
+ if type(val) ~= "number" then return 0, "DestRaidFlags is not a number" end
+ return val, nil
+ end,
+
+
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---@param ... any
+ ---@return number, nil|string
+ GetSpellId = function(...)
+ local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellId"], ...)
+ if val == nil then return 0, "SpellId is nil or missing" end
+ if type(val) ~= "number" then return 0, "SpellId is not a number" end
+ return val, nil
+ end,
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---@param ... any
+ ---@return string, nil|string
+ GetSpellName = function(...)
+ local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellName"], ...)
+ if val == nil then return "", "SpellName is nil or missing" end
+ if type(val) ~= "string" then return "", "SpellName is not a string" end
+ return val, nil
+ end,
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---@param ... any
+ ---@return number, nil|string
+ GetSpellSchool = function(...)
+ local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellSchool"], ...)
+ if val == nil then return 0, "SpellSchool is nil or missing" end
+ if type(val) ~= "number" then return 0, "SpellSchool is not a number" end
+ return val, nil
+ end,
+
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_DAMAGE|
+ --- |_HEAL|
+ --- |_ENERGIZE|
+ --- |_DRAIN|
+ --- |_LEECH|
+ --- |_EXTRA_ATTACKS|
+ --- |_AURA_APPLIED|
+ --- |_AURA_REMOVED|
+ --- |_AURA_APPLIED_DOSE|
+ --- |_AURA_REMOVED_DOSE|
+ ---@param ... any
+ ---@return number, nil|string
+ GetAmount = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return 0, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["amount"], ...)
+ if val == nil then return 0, "Amount is nil or missing" end
+ if type(val) ~= "number" then return 0, "Amount is not a number" end
+ return val, nil
+ end,
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_DAMAGE|
+ ---@param ... any
+ ---@return number, nil|string
+ GetOverkill = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return 0, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["overkill"], ...)
+ if val == nil then return 0, "Overkill is nil or missing" end
+ if type(val) ~= "number" then return 0, "Overkill is not a number" end
+ return val, nil
+ end,
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_DAMAGE|
+ ---@param ... any
+ ---@return number, nil|string
+ GetSchool = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return 0, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["school"], ...)
+ if val == nil then return 0, "School is nil or missing" end
+ if type(val) ~= "number" then return 0, "School is not a number" end
+ return val, nil
+ end,
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_DAMAGE|
+ ---
+ --- Apparently this is allowed to be nil?
+ ---@param ... any
+ ---@return boolean, nil|string
+ GetResisted = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return false, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["resisted"], ...)
+ if val == nil then return false, "Resisted is nil or missing" end
+ if type(val) ~= "boolean" then return false, "Resisted is not a boolean" end
+ return val, nil
+ end,
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_DAMAGE|
+ ---
+ --- Apparently this is allowed to be nil?
+ ---@param ... any
+ ---@return boolean, nil|string
+ GetBlocked = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return false, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["blocked"], ...)
+ if val == nil then return false, "Blocked is nil or missing" end
+ if type(val) ~= "boolean" then return false, "Blocked is not a boolean" end
+ return val, nil
+ end,
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_DAMAGE|
+ --- |_HEAL|
+ ---
+ --- Apparently this is allowed to be nil?
+ ---@param ... any
+ ---@return boolean, nil|string
+ GetAbsorbed = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return false, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["absorbed"], ...)
+ if val == nil then return false, "Absorbed is nil or missing" end
+ if type(val) ~= "boolean" then return false, "Absorbed is not a boolean" end
+ return val, nil
+ end,
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_DAMAGE|
+ --- |_MISSED|
+ --- |_HEAL|
+ ---@param ... any
+ ---@return boolean, nil|string
+ GetCritical = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return false, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["critical"], ...)
+ if val == nil then return false, "Critical is nil or missing" end
+ if type(val) ~= "boolean" then return false, "Critical is not a boolean" end
+ return val, nil
+ end,
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_DAMAGE|
+ ---@param ... any
+ ---@return boolean, nil|string
+ GetGlancing = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return false, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["glancing"], ...)
+ if val == nil then return false, "Glancing is nil or missing" end
+ if type(val) ~= "boolean" then return false, "Glancing is not a boolean" end
+ return val, nil
+ end,
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_DAMAGE|
+ ---@param ... any
+ ---@return boolean, nil|string
+ GetCrushing = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return false, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["crushing"], ...)
+ if val == nil then return false, "Crushing is nil or missing" end
+ if type(val) ~= "boolean" then return false, "Crushing is not a boolean" end
+ return val, nil
+ end,
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_DAMAGE|
+ --- |_MISSED|
+ ---@param ... any
+ ---@return boolean, nil|string
+ GetIsOffHand = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return false, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["isOffHand"], ...)
+ if val == nil then return false, "IsOffHand is nil or missing" end
+ if type(val) ~= "boolean" then return false, "IsOffHand is not a boolean" end
+ return val, nil
+ end,
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_MISSED|
+ ---
+ --- return type is unconfirmed!
+ ---@param ... any
+ ---@return string, nil|string
+ GetMissType = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return "", string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["missType"], ...)
+ if val == nil then return "", "MissType is nil or missing" end
+ if type(val) ~= "string" then return "", "MissType is not a string" end
+ return val, nil
+ end,
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_MISSED|
+ ---@param ... any
+ ---@return number, nil|string
+ ---
+ --- return type is unconfirmed!
+ GetAmountMissed = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return 0, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["amountMissed"], ...)
+ if val == nil then return 0, "AmountMissed is nil or missing" end
+ if type(val) ~= "number" then return 0, "AmountMissed is not a number" end
+ return val, nil
+ end,
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_HEAL|
+ ---
+ --- return type is unconfirmed!
+ ---@param ... any
+ ---@return number, nil|string
+ GetOverhealing = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return 0, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["overhealing"], ...)
+ if val == nil then return 0, "Overhealing is nil or missing" end
+ if type(val) ~= "number" then return 0, "Overhealing is not a number" end
+ return val, nil
+ end,
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_HEAL_ABSORBED|
+ ---@param ... any
+ ---@return string, nil|string
+ GetExtraGUID = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return "", string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["extraGUID"], ...)
+ if val == nil then return "", "ExtraGUID is nil or missing" end
+ if type(val) ~= "string" then return "", "ExtraGUID is not a string" end
+ return val, nil
+ end,
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_HEAL_ABSORBED|
+ ---@param ... any
+ ---@return string, nil|string
+ GetExtraName = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return "", string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["extraName"], ...)
+ if val == nil then return "", "ExtraName is nil or missing" end
+ if type(val) ~= "string" then return "", "ExtraName is not a string" end
+ return val, nil
+ end,
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_HEAL_ABSORBED|
+ ---@param ... any
+ ---@return number, nil|string
+ GetExtraFlags = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return 0, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["extraFlags"], ...)
+ if val == nil then return 0, "ExtraFlags is nil or missing" end
+ if type(val) ~= "number" then return 0, "ExtraFlags is not a number" end
+ return val, nil
+ end,
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_HEAL_ABSORBED|
+ ---@param ... any
+ ---@return number, nil|string
+ GetExtraRaidFlags = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return 0, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["extraRaidFlags"], ...)
+ if val == nil then return 0, "ExtraRaidFlags is nil or missing" end
+ if type(val) ~= "number" then return 0, "ExtraRaidFlags is not a number" end
+ return val, nil
+ end,
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_HEAL_ABSORBED|
+ ---
+ --- WARNING! Different from "GetExtraSpellId" (capital ID!)
+ --- This is the doing of Blizzard, not me.
+ ---@see CLEUParser.GetExtraSpellId
+ ---@param ... any
+ ---@return number, nil|string
+ GetExtraSpellID = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return 0, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["extraSpellID"], ...)
+ if val == nil then return 0, "ExtraSpellID is nil or missing" end
+ if type(val) ~= "number" then return 0, "ExtraSpellID is not a number" end
+ return val, nil
+ end,
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_HEAL_ABSORBED|
+ --- |_INTERRUPT|
+ --- |_DISPEL|
+ --- |_DISPEL_FAILED|
+ --- |_STOLEN|
+ --- |_AURA_BROKEN_SPELL|
+ ---@param ... any
+ ---@return string, nil|string
+ GetExtraSpellName = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return "", string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["extraSpellName"], ...)
+ if val == nil then return "", "extraSpellName is nil or missing" end
+ if type(val) ~= "string" then return "", "extraSpellName is not a string" end
+ return val, nil
+ end,
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_HEAL_ABSORBED|
+ --- |_INTERRUPT|
+ --- |_DISPEL|
+ --- |_DISPEL_FAILED|
+ --- |_STOLEN|
+ --- |_AURA_BROKEN_SPELL|
+ ---@param ... any
+ ---@return number, nil|string
+ GetExtraSchool = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return 0, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["extraSchool"], ...)
+ if val == nil then return 0, "ExtraSchool is nil or missing" end
+ if type(val) ~= "number" then return 0, "ExtraSchool is not a number" end
+ return val, nil
+ end,
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_HEAL_ABSORBED|
+ ---@param ... any
+ ---@return number, nil|string
+ GetAbsorbedAmount = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return 0, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["absorbedAmount"], ...)
+ if val == nil then return 0, "AbsorbedAmount is nil or missing" end
+ if type(val) ~= "number" then return 0, "AbsorbedAmount is not a number" end
+ return val, nil
+ end,
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_ENERGIZE|
+ ---@param ... any
+ ---@return number, nil|string
+ GetOverEnergize = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return 0, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["overEnergize"], ...)
+ if val == nil then return 0, "OverEnergize is nil or missing" end
+ if type(val) ~= "number" then return 0, "OverEnergize is not a number" end
+ return val, nil
+ end,
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_ENERGIZE|
+ --- |_DRAIN|
+ --- |_LEECH|
+ ---
+ --- return type is unconfirmed!
+ ---@param ... any
+ ---@return number, nil|string
+ GetPowerType = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return 0, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["powerType"], ...)
+ if val == nil then return 0, "PowerType is nil or missing" end
+ if type(val) ~= "number" then return 0, "PowerType is not a number" end
+ return val, nil
+ end,
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_DRAIN|
+ --- |_LEECH|
+ ---@param ... any
+ ---@return number, nil|string
+ GetExtraAmount = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return 0, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["extraAmount"], ...)
+ if val == nil then return 0, "ExtraAmount is nil or missing" end
+ if type(val) ~= "number" then return 0, "ExtraAmount is not a number" end
+ return val, nil
+ end,
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_INTERRUPT|
+ --- |_DISPEL|
+ --- |_DISPEL_FAILED|
+ --- |_STOLEN|
+ --- |_AURA_BROKEN_SPELL|
+ ---
+ --- WARNING! Different from "GetExtraSpellID" (capital ID!)
+ --- This is the doing of Blizzard, not me.
+ ---@see CLEUParser.GetExtraSpellID
+ ---@param ... any
+ ---@return number, nil|string
+ GetExtraSpellId = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return 0, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["extraSpellId"], ...)
+ if val == nil then return 0, "ExtraSpellId is nil or missing" end
+ if type(val) ~= "number" then return 0, "ExtraSpellId is not a number" end
+ return val, nil
+ end,
+
+ --- Specific to subevents prefixed by:
+ --- |Prefix|
+ --- |-----|
+ --- |RANGE|
+ --- |SWING|
+ --- |SPELL|
+ --- |SPELL_PERIODIC|
+ --- |SPELL_BUILDING|
+ ---
+ --- And suffixed by:
+ --- |Suffix|
+ --- |------|
+ --- |_DISPEL|
+ --- |_STOLEN|
+ --- |_AURA_APPLIED|
+ --- |_AURA_REMOVED|
+ --- |_AURA_APPLIED_DOSE|
+ --- |_AURA_REMOVED_DOSE|
+ --- |_AURA_REFRESH|
+ --- |_AURA_BROKEN|
+ --- |_AURA_BROKEN_SPELL|
+ ---@param ... any
+ ---@return number, nil|string
+ GetExtraAuraType = function(...)
+ local subevent, err = CLEUParser.GetSubevent(...)
+ if err then return 0, string.format("Failed getting subevent due to: %s", err) end
+ local val = select(CLEUEventInfo[subevent]["auraType"], ...)
+ if val == nil then return 0, "AuraType is nil or missing" end
+ if type(val) ~= "number" then return 0, "AuraType is not a number" end
+ return val, nil
+ end,
+}
+
+local function varargToString(...)
+ local output = {}
+ for i = 1, select("#", ...) do
+ output[#output + 1] = string.format("%d = %s", i, tostring(select(i, ...)))
+ end
+ return table.concat(output, "; ")
+end
+
+if not WeakAurasSaved then WeakAurasSaved = {} end
+if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end
+if not WeakAurasSaved.Cyka.CLEUExample then WeakAurasSaved.Cyka.CLEUExample = {} end
+--/run WeakAurasSaved.Cyka.CLEUExample = {}
+---@param spellName string
+---@param spellId number
+---@param subevent string
+---@param ... any
+aura_env.LogSpell = function(spellName, spellId, subevent, ...)
+ table.insert(WeakAurasSaved.Cyka.CLEUExample, varargToString(spellName, spellId, subevent, ...))
+end
diff --git a/FreshShit/ChatKeyScanner/event.lua b/FreshShit/ChatKeyScanner/event.lua
index 5ef215b..0ff1f41 100644
--- a/FreshShit/ChatKeyScanner/event.lua
+++ b/FreshShit/ChatKeyScanner/event.lua
@@ -46,6 +46,7 @@ function(allstates, e, ...)
name = formattedName,
keyname = keyname,
color = color,
+ -- tooltip = message, -- Tooltip doesn't work for some reason...
author = author,
channel = channel,
progressType = "timed",
diff --git a/FreshShit/ChatKeyScanner/export b/FreshShit/ChatKeyScanner/export
index 8498c5c..8b5bf38 100644
--- a/FreshShit/ChatKeyScanner/export
+++ b/FreshShit/ChatKeyScanner/export
@@ -1 +1 @@
-!nRXIsTnsYVL13rTMnyVwMhjS1MulpmbiGHc5SuxrHKglnwwhYs(0dEKSR)2VU7rJEzzzBo2TUIarAup97UNULAnfTbAQHAQDBRSx7T1uNOPAH)dw1oW)jn1JV62(AQd9dS4bhYmFWkWFQM6HUoF7BSaRzgd89DJCGLE(QrJc5rA9BT7UD0uFrE7oWnmpZX(bx774fPPEuV(d6DJeNh576haKRVIw)oA97s)DB6V7GlcBa4d1PmtoERkZmYX3lKy7iwqeCbaYihpNWXIRHlfRcxhf4yBZdcfeyq6c4Lw8HXJgn4LPCn1t7DX1N81lGNt3YIdyDbcmL76EMvOaVHXd5pY9IuHD58SMQ(rhOoqxDWb3ailgjQ6ux2laYtb96aobQ619UaqoTgqmoZnASMQhBcpuYPXEzSwKyjtF34jEzIEaZYjoe0rDivQZegQkYRjuTaghxuxihHCtFpG)telpFpoI4jmhVvh6uD7QbpSdMRJTNM6f9ozaA9Ie8jysrfZnC7ediaPRpJ81Id56MUSWqTHKA3exCsm4zj1pINwE1qNVXlViS8Weh18oxkKZLc5CPqoxDAVlXTKMKRDiGotMRqxlCorUrCvplBqev)pXSa(mJtIDDNzC7yhyBQbKaj8JSEbmQoMqOt8u5wvrESp6o5dgjWTl0K7z54zJwyVro2cvbOcoqeMWd(k6nneDLJ4bEm3FhCHjvy39aDMZe4P93L2oy59Iobcka5u9Mdo(SVQIgg3rjbBdU6AHzqWlPbLa9CGa9dE(jRBDgnw99yWIV5Jsc9(oBJEzimhnMf9f(lQMmppEWNfIMDGdSrlWngzKrbGRmeBXIyIGusqobxvOxup6ME96JbwrWdUAAuMlGGXoZJ4lCVbMxW9SrmV9EDeusGKBog9nOOHUKWB5KdpG(7csZmKIhOqjWLdDDsJ(9JJCDaVu1R(6GloRFpGZ9HaAHbQZ8SxsodH7D8KHySnqNJbti6UmH9Sw)96GkQWi(uI9FsOuagCceKHRGH5AQ9EEQJi6bYz6GR8a)fiLq6Yr0Iw8rmWxg2iYpOVIM6zWwKXAriQxipnmHN2Tcoszoo6fWt2F0mJd(w4ywalhX7MWDai6(J0LaeHbpVne)ywWdJ5qwlqBm2X8bW4liz6d0txphBrUUVnCWHUqsIzg347d)9uFxRkKFcgDeeDcckS7TH8NYCDdf6)FNHzPeuKwg15jlwu237nI495WbqSaWR7hbE4cMtqfcFgqH6eiWZE)Bed87iPesF0yWn8wOwcoeYjOm9uujaptp9rfvfF4nItUK9KGpGKdUHvOgaaqwr8yy99FJi8auUpiW8j2ljucwrxUqrHvPZBerpYpoirVRc1muL8sGqsmbasDL3iQFdpkoasMf5pZ4lqcLVnM59lG)N)tCP)Vae9iFDja6jpUKg5Tkl4rmWjZkG5k0k9eh4oZOVJ94OQups4rvuc06cGr2A7)AvvFD606uvjpUKQ6TkJPkNLpMDqGt8KhXtV4vONqGLHW5HKQpZYjelvEa)z4MneN6oZO1mJnar(DB4cfk7(ZBa(F28OlWBGNmnW3oGhc5Ry2(56VOtXkWIiCcvDZL1NqLl)CoWnRTQqQLdZ4Wi)ji)91PwKaMu7oWR(yD3McKREaC)A0uIQLVUa3y9djxP2QvRFJQVDMbvXkpy254AJC4Uqlwe)cplIn0L)Rct4wjG(PcqomGZEykw5xjWbWKy24JZm((SZNzi(b29mJlzpag0WyS2wj1yELriZfsnb))y2J8eFGqWXyMHGgcxdo2hdp8hGJ16DZ)AMXzxE9v3m4G(d(Hc083q)XfkssaL8srww(Z3NzieNoT3RlSB783mm9Mzg)5winNz85a(l1GgLTKlzx6EbYuYWev6FTCKsghvgpDkWrCV6WtjwQt7D2jNW9H3NHQdDJRNJ2BNC6OUk5qZ(BNHMRJdM6YxdTe0f1wvkBxfW8Sxpm1npMA3vWwRJ25d5qGs7o51oYxyrr9uE8xWzNC5mAT)(7JyqbjvluqBH8i(lEdTmascEk4GpfskpzMXJmKEYqKcqeKKJN86be554(hHq0JNDgCNHDao13fYbr80OypkxttcVBoVYX13ep(IICKsrM2Yo9QmZvEgFPrOLUnj7YNwiFmmGHfXl5KVliEIH57cFamUsWhLWXiueCs9v(hjPWAxWqz5p)gL)4mk1a8RP5wZV97CUNYK5TyCK5DqsYDDVxkmoBTyC(NRccHTSyW4q(3ZxgZO8Azgb2RXUt4AHMv6uUJs9XKewKV(UmUd(39VEQam5sPrxjnwesgfioDMqsZeVHw5vHao2CMXpdpnhsrZ88qD(cCsFa0(pcgbGktHwLcBMPG2SExusCU7H7liJUqmFZh3ktdaaSvMOS5kBpLPymZsXKbeSNfL1IvDgRKNoS2NgvF2UYpdL1IP2yy6jmxZMlwGag8NadMczKaanEhXw)es(ZlOuaNFOWVj8igL7QzIowK(rx3XZI)CELpeUq2z8DaRZ9ES9x4VaLP5XpZ6s20Y1ICNY(Vxy7Au(9P0yRcG9HeWM)nFucW9taCUxqrb4GQAtGR8BsOey7La2898xcqPCSGEZlbTuCk2)CjGKIsUEDlcHIuik3yArW6k5T66GS4w2EBjMRRbVs7zN6jd1EvPTifXf3CudYhC5FpcrhAYEce)V8nTdoV84KorQ87wu6tlSGparXVsr23FyD(shMJ5MpKsW8TWy5WS98dHMJGuEoHy0gO0IHamOtiUvlrtkNJLJD0Phmq)s1pRdx0VFVlaf2zh9LE3OR0PthrlnYmrGZnk9H5V88SCfY1WKLWVTB3oxwd88FSUjYpOejBSOd(to3a0nHmBeNI(tHl0HFnhJVgCxYOdeB(TJ0mzVckJ5CnWdjK95MUir)0uAvEGpInrnHTbLOvZmUQXPpKKyQXMlRgMerc2GdKY3Wv0s9htrn0rR54kX9V0CdR3TP4Vn2S(kTi0xsMLKAnez5ps0HHHIdnAslvdxKjyPBHwQMTq9EZcJsPx5ZNw8gsO2Y2qQzpvDBdbynt9QASrR2V7F2aVQrLvymVv0JA7(JiUR6qQ7ir5(LATsqtbBZslB9y(J438nu)44jtB(9sEvBLZ5)p3C5ylXt41vfCbBNqys7FAf0I5vK5TmjRJge4F4)PxNRF9ykhY(XmB8)RO6xwkQseZcVdT8omIp94DzO9EraRYUlfNKH2ckNGrOmjmOvrITClGSMu9cL(MRH3MzeA5cQiadsKnU9ixF)GMe6Bhq1e2D3DxogSRgd2RoggwnggU6yym)5SoEK599dau2SXgD6(S8x08J6oBSu5AZUnZ4eeDH(Opf0xyOVxMY(MpF4a)tX6FT8Xty98HyPN8dGcoFYjASCBaJqVkhd3yWKZdc8dQNKNLGgaLpjs4Z8OMg9SGku94s0d4B3DajiokH2oIs7Fc6Ff9uRNk3ogCsEeeJQogUCxGKsmIB1VuWLu7(hMNCYgHBe(hybEP2HTstTuJsoTgK7KP6bgsECcEj5hF)IEnML)jCS)tIZWcI5BTC4XksS5wRZwYoAnj59s3r2jRjP5x6okN5j39Rk9kLJHUDf2BA(Zcg9vtTKU30KTlx)NgWMKrBP7ixfbYQawjRSSUZKRxHDj)OjdO32cwgmoMbf6KCr)ih2hAB71zf2r2SmGd4aTVpZJWRBkAqFLWc(fwg7yXxh)5SM4tj4AOCekMoH1PvQ595jlMf51f9IzK34gYRUgFzxk5AdQXkwvFuuLhT3U4OLSy0qValS1gkjw(xIvAITL8oSk2ScSH2zQ2vROYYV4px20qUvvUrTKKqyZxzmtk58O9tjAU1Jbttst8qAQ6rSkTSRgwkNaF1Xd)vr1eL8uWXn6LuDCJg1vZ2sW1ehVyQhD6BkS2y5PXoU85Tp71z187wS6POBuH7Br4)vJ78sC61Vd)ygRnkRThN68NtP7NOpPYRZtolByb3HYfFgUH1eSYOmW2kLb28VrzUSpYF5Y9mJnScNtYZXg)Dj9LZS(Xc8(F)5EwfzOwGQ8HvUy1hXsGs)j51rgQPw7lwm9TQI1xOPsLcv1SxtZZXJ8bIfV0haUFlLoIHfUIjzVYX09FdKYz0lYXGELgU2))ESUx5P8fA9Z62a2un1BtVIg34tBE9aVPnFW6SnlmLYhE1GbxD58JhooDU0OZIE80CXvEQFLdqELZmonv5(tgYOHcETMG80jZEXJzvFL3p387kgB3kNFX(kFO0We2V7UvmLL97U9CdEB)U7m)WOslUOXSIWsPHjL4GfoGD0oQz626RS)CdhyFL9km2IeoMFcEronrV(iopADXzSs7)(
\ No newline at end of file
+!nR1ctnoos4FlBUJAd7qYMeEV1otT8imWSqGcNzOUIcBReRK4dh7C(bbMzx)B)6ULKFfhNWCSBDfdm2sT(6NQvlzP3wVVUwGUwNMT3R526At11SW)bTo23BUU2PxFxpDTbE(wC)JzdF0Y3BMU2Xo2F9RmFRyZ(EEoH2qtpF9Orb8q9ZACW27UxNdoy72D2E)93END0h1yha6xKe0BNDBPRXChoXZ)gpB3qDTt62RF3BvS5ephpFqc61wVxl9EDO)Un93DWgHbemJnKJDPXggA75gqQriZpeEa6FKTRDWeXZWJIwHNd9ThpM7hiqVFsd4Jw8brJg1)LzCDTZ7E5nN95lH(Pxzr(Soix5ooxyfiWniAa)jUBOgmk7N11mo5iT(gA9p6waSiKPAZCyVaGR5YMYLJIgcWaoZjCski34Zjq0UP7LxI0f5MkAHcHFONt0uxnHQ3gvSqUVlZ5lGcb2aWCShai3zK0Q2)6BUS7zGWWCSh7QRjEX3lKfsK3Iy)T8Xsdimehpg57Jc4gdDybb6di1Ei240iWtRSKIEl2AG9x5fBeAEGmWjRNTn5zBtE22KNTvZDrIzU2tzHC9Jb4gYCe6QiYaLgXtDTgd(fT)teZNhBEwKJtS5DtSHHP5tkKWpA9cy6ThcHYrZudvdLrm0XXEk4K6TlmeMLDua0yRwObAEQngmexsKbCoYgMAC0ZZTUZE0eT9jpIle05gEgefckM2ThD6fFwdc)8bhoeBXczzK(K4FAGJShlS5HEdFs5b3V12OiGm6KjSWFN)I2qMRl3)JcnGffcZAUEwyQlBSVniqwqWeQjIPvNH8xyb0o52UDHzWm)HxYDhJKT9ETuI0fUKe1waJye3Eky49GzsWmIGHCxlB3XKH4iXuwU)NDfgeqlSSZikGTGIy71s5frLkZmtnlyIe2OHyEvahHiqnnZ1ZLJ4mLz7U(uNmxF9Oxe9MKaWlk0Xg6q76p3)Yl61fWZdMtlIrALMwd1jl7aCgDF(ZaeBi8fXMnIn3Wn28DB4aZKD(5naDDmp8s8fONz(EJ95bbXMSXEzsc2kFGAiH5)hB0Gr8mxfOrZtgw5Kzkn9WOGqVPO96ZZSW50Q0FGTZd10Hca1ocE)vKlxZYZqGnMLq(KwJgn(nkTuSjLOH7h)jSTr2ChyLksEH(czdC4)QB00bC)TKK(HCuoWNZECgMeTa5azkKnFFS53I)uSP4hy0XMxXEesgfeHPKuCJ5weqMZC2lW)pH9eqx4eCiW01ytbpIn9gfBYX0)8GFi28lDV9FfBEXv3C9T9pQx)Fihp)n0lTuvsrOswYlYQF(wSPqDA1CVoWOhN9LbjVeB(NBH8m28J(8xQaM2BPAACH3fG1ofjkJDLsu7ujQioTYjrC3QWPGi1Q5o7Kr5oy)uOo2jQAjAVDYyJ60odmhUDkm3e5pZH)kSsWIFBvQUDTpZD8RdPozrQzhHy9ASohKbG2nBL16OQ7lVDkl(5c2PqoZghE4HicTrw1av0gOmI)IVqndKiXjxa(mgSwwS5tmKFQPi5OWNhg57kJ6bGCTD(Jay2J74u6UalvAMNdKdIKPrrUuUM6eUBUOXXXdk9qoZrPfPwRXjpL6UYk4RCgAHxLzx(WsLJb(qfu8qLK8nbZLoMVjIbW5vc5OagJqvWojw5FitH1mNJYYBXbQ(XEuId4xtYTMD43B)aLjZD5yKgDqAY9DEqPm2BTCm)Z1bqyilNmO(LL3PsyA)9kmc0RWVtyTu3kTk3jjXykglYxFFQ0b)7HVFUac5k5rhfpwgiqjT0mgcK6YOHgznHagBgB(ZqVzafDZls1Nwsq6JG1)jWjaCzgZ2pOEQbAZQdrj15(hFiNo6aZ5R)0wPwaGGTsvLnxB)PkfZW0umPebJzzzTyLNXs27Gk7nS6SDf7d118P2yy6jmxZMlxHab8NahwBYjbeA(osS(jK9FkNrbc(H6wNYHnpI5UQlTXI0pgg2Uw8NZA8HPlKFg36Sb39PMWEzGY0C5xyDfBwXArUV9H7l8D16(cxuc0rFnycykQTvoYoqs2Pm)hNWHOJyZ(tSXGRceEOKWJDGqVyZB98G)EUNJvo6GkzL0DoZXjqW5VWavOaz7jjRhh23oZhmW)iq9LquAbcv6XxyWEGf4r14DhSSj3nOa1k15k2CbTWgsCksKsv6J4CK)qO(X8u0wPeN4f5lzQgm1PaqDuY2Ts3FOxS5Vd24VoH5(lG24nNxqD2EBfYmqlS8Xubi6Dfh9qSzp7XtclmMDQMnFE2SfyJsf14SSgT((2rtFYg2HcVgfdU6JXrSVf1Ece)VAVnqWlpsUtKspUN160zw(H7KDNiw2SXUEbWECGmx2b4Kgq3JG5jWgA4wne714tyvvNC(r9nUs7JgWd9619sqVV4KFV7TgTB1QLyNjQekqmkQebzF8tPt5vTH58GFB2SzMj)4Y4y5pK7SalRTS1VLP)bvmGngXuSTx4bd43HtWtNWH8DaZwC4ipLJvWzm1PjMRxT95Kgj(NKzQ01Tr0eL21emIw1tLQAN)Om)sTnxvPisvcgGnK520rSt93NanSX0Htkf7FP(gwVBtXFRTz1fmrWxqNvS6vOYQFuWHZMe5(RtnvHuKQyjdHAQIHqBHMfeMWVIlZS8bi52QgqIBpXCpgMLvpjQQ2gnA(U)zn8PALwOWIErxA3ZVhXUS1AUNuLhwP3sctoFZkR(8u(t4jGhyCA00z1)wHOQTYe8)NBUA0KrcFFfZMZ3juMKTbTgwXSgYSEgz7Odb(h(Fgvf6xnsza7ht9X)Vc1VSsOKQzUJMlBaJ48yVpf2hetyBV7kXKC0wqvbmcs50Gg5z2Q9aQslnYvbBM9TwpLrRwrftWGeztAoYXZZVobFtFQ0Uo7U7QryC5imE9ryq5imy9ryc)50nUOY775dqwV2gT68S6x09J2UXyfVvMDl28meUapmMc2ExGNBQX(2pECFVZXYyT8WvyD9G5sZ98H6gNBhornmqqOtKX0jcC5CFFp)Qz5fsyaiNls4ZCP9(5AbfA6YvWd4T7oGgefk5TTOc95W2qXi1Q5YDtGGKNa1OSLHlUzoYigYT6vyYLY6(hdp7Snc2i4pW60s8dBLKAPcJCsni3Rs1dcKA5e8rko(HLDAKf)jyI3CXAy(r8Twn9yfjJ5wVMHKU0Qm59khr6kRY08RCefZ8K591LFfYXqVUgJnj)zoN(6zwsgBsY2vB)tMWkZOTYrKPIavvaRLxwv3P851yuQVftF6qtWYGdTNYZTHWL9J6RKqdBVwRXi4ppZwmM(2sR4h5H4Z1f7ZETqb)qjtST4VM4509INWWxHXryyAfuLvPIJLtvmlkRl78vuV4eWlVgF1UuYSnOARzv9HHLU0EZu3b6Zxom05qHBTHsIL9SOssSTIJIk)MvGb0m10UEfvw887CyZc4wLfg1qXcHpFTrMmYzH9dsl3RtatsstYqsQ6rSs9SRhkftGV(4W)U4Q0ipdcCdFjXgxRwv1STcSMA7gr7rN(0aVAuMpX2HVO)zVwRxC3Ynp5dJY9Edc)VBSZQXjp)o8Bs8QHSY94uv8CcF)a9Lr((IKtZgMlCOyXNbBynfRmkLSTseGn)BuNlgJ8xUEhBUHvWcAEgX4VlTVyM13Nt2)7p3Z6OdvsuPDwAJLVelrk9NvC10goHp8XKJ6m)DAJAmqxRYtKm5uvXct01OAOk7kRr3NJN49fnELhqCVgTBjUJxLC7)k9(S9Vbwzp6f1Txd2hL1D(Sz6A3L80I3wQfVOuYJjwCNwOJOIUstNYdgIxHKPSN17ThPBbH8z0nIAU8UUa9A7sTGLaRR1nPscWQyJTavhdMUCfyGNV8i8laadeVgr4vPsx7cCFFYlytic9sLPbszA3sKO2lirf(KjzyEhP0bKy4nYqrqiEtDEBy(IFigjlt6WiP9mIfDp4EBKGf(cpLO)engijgef09(7TH9f)WrsosnJ2CzJ5199EJy(IFoQsu(uIcmisG(2)nsawYN5sYzQx0ia9zK0vEtXbVrss(pHwjMbGauueDdTF4BeJZ8z5KCcAXq1qELfs)92W0IFPVs0xIesJjcqU3(nI7v9beLCxqIrONHIadz3fSiVvzbR8luwM5rrpAIKuBiigfRT)R1urFe0LBQKDxWu9wLXC5FL1sStiXQPWzPuCRqlCtNx69pUKB5mErBPLtXk4O5kzU86hFD)(xF1I3qD6syFE9B67oR(JwxS5I3cz1DyV0RToDX29MoGjUaZVMlXEYD2E5(RED2EHcbeR)xAIWETpOqwPED2TK01eSfwbVxNDwCvnQXL5ViukSQuVoTRyMknIkMMqJUqwgQTm5)imwSuausL21NWa7o49fw))(d
\ No newline at end of file
diff --git a/FreshShit/OreCamper/export b/FreshShit/OreCamper/export
new file mode 100644
index 0000000..04c8074
--- /dev/null
+++ b/FreshShit/OreCamper/export
@@ -0,0 +1,2 @@
+rt
+!LJrBtnoVX)l05M5UPeMeia39HBMM3aY1qcnY8WD94CIWwXrhosPs2qG26F7DxjlBhiaPx78mtNoWKOSA1Q99xKFdFpFI2NS)EnoAVd8jl8jH4)a0iL8EFs3rxn0NCJufYuTPb3gQKl9jTJ5p(ivfMn1tkJt4aOvJMntZs8pP5No(Jh(PpEqJM738OgnB6pRwtGYp42)WJoQ5rFS5N(y96np44Jpc3VPpHkcMlvxi5IeFsNEd96n2DVDKXsfWsdB4pSU)W9nFEG5ZMiq4a6L0agUfHgKWLcTrUsOQeybS)mUGRNBxdlTqH1jkEuetPTu3RaaUmKDt6SzEpSK5toR3Glo5YbW(MFstv09XBLfh3puBPRo9g2DmrcbofFLpzsNweVjeVwJbILIxkzzm9bG4ebDbl)uMJaxaJgNmVKixOygIqUO3GbiEPIswlXY8bY40fcIv0B4tu0qEQg0c1Rd4Rzd4lGl9gGDJ5rIsTkOxmecuG49nMfLRXaAglPgRpC8jbXuTgppiNbiWfPGT2P6S7(uOA(JSNceaFtURtvtzdJPSHXu2WykRV3HiYubFbnHzU5aASv4IncZWdDof4U2v9cJatc5VLsvSSPNKghNn9Q5CGaeLr0SMWWhaTopaCRtx6okb5w0RrlbpfIqkyOAvmJhzvhrkEO94J7A2b0DIKtaNmqmiJB1T)Le4AKju0RZOrTuo3BhKky37lTrjYG7a)ndYhx)a0sXHiUopCl9CUG1P7Pw(lfHYpn58U9Vk(qnedotbonG)jnHAOKnG5eeQLdjDg3RhGOMfplpoYB0fogQVWWpnSY0v8qWBd1M00eGmJwMu6dqvbdyIieHdoQUrSd5v2hintjOX)Mtq2)iNrd)zLipsieOGaNyJB0mKwAxyKrFdeCbLl2ESlIL3o8ToRfb4qMc1T5IFJ6Bu(d5Amq1JTc(X7wwM7cnVBmpLHOJxZlaC4rxnr4wK9AMe8PIPraRp6sVb9h2duYGSmj4vdxSz(kT2fznPQxkoRYLgY00eubAc0wQKrkMwd5Dc4ANuGmMp5ef)XSP)LuAi68b58DQrRA5BguDjo(ppxHEHuMm)ICgYVTjzuRWFMQtyHSqimbz4QH2y6yqObdpyYsvaKEX3Dz)SPTJPIBZzwp3E9r33zqa51DO6eUiQnvD9L9Rv(RAe8agFdjE)BiOLgVCUno0ePgF6TN3F0Xxr)2prh0vmxeMjxSmnjMJPwkSUvuFF1O(caPtUa5XlxgI2esA(3itGrwbwksAHm1Rw4Y6(BPO7Bxic4IYCuEJf42Q6rVC5m3TwRw20lh2hQ)HhWwjeCpZ(sTA1(tGWtxKnLghB4hD1LvrasNRb5seTguTmvf8cBHfKrUzJ7ozJqHuvrSKYTMLkmTq8(cEAxGt21DV7w5wG1t21rHpK9LSP2)4Zk5YS)XNZMUJvtTdG7CMiBQIbUIW3mr4tovPaypi4TdC1BFqmeyctC3EHSLsnpPp4JtHIuF3YC)iB6NbYj4XokTfhiBA9NCtXsOEmQQa1IbH)E5EU)cMtfrSqZ2jQuqj9mu0ZL3)A77sgHUMg82jHVGfUZgqfJooJhYEnY5ktyWPqUdGoxdL3l2WbyRwYThXJVWs6tzj463)HSP)XTJiwR4NDow7ntQGW43VZ7a39)W7qHj3Xz332y8Hk0)FwUSWd97Vfb(roNG2TYJVnUaVnsG(OrjrDEOOTi7lG3ZB0yCWCwWTfPDwVJAdqOO4gsKuKxBoy8HuEO)XMAtglM)tte9DyUuXdfPATOnqgXdGu2UG(QHXfIY33)h5Ic1qO8ZEUeU6H1GUi(FWMIkAjVV4efwMh72gQYC7dDZjGbs1XdYl0uTK7eSSBc2GHNT67e9Ckeq8vxhtnChaOuIPHkdw2LVtK)ZTOphdE2(r6TAjMD4E6dRDNBrJwvW(BooSwdh8YoPADP3Okxz(yc1RaYw107S(D(Zff1nBUw)H9hoS34jd6DINRXXVvPvsd(yBn8zGKyXYmkbZ265WrivTN7Rp9C3bDPDdmBuBu9FWVM6F5)xO(h3)0Z2c9FoA)AgGM)Aga9VKbyt9J)7OHOX(pZqm0m48gmaDgnCIBSK3Ya4WRQfOAOZlAbUX38WaEvu15Vrq(SV5mLzYOcyYsQLdj4TvC5ywA7DqyMhHOr20lGM)JlaBgXbOHjJ7CgpAogTwpFaG2XqrftvesRUD)38vsw3Gu9rlm0gAkkKb5xh273kFjnxU(2p)j9wFIjZ0NAtP184cecwryBgj1C)pvyDJhNlVgpRn8yDeno0C1P0AfgosOV(kg92wqvh91NZc50RjiE6RBlxbDx1sXeudK9Krrqrq5elDUz9IJqL)Lf78F5RQDLhxeHMpku7YHIEwBJMoS(0HzF5L6YY2Kn0Yx(OXOISZBBbEsrL7bB9vkkyLVQy16V6uoPrLYtFNP7TdYAN69LEZP1NqNUcjexGdnBcsmeVR9bhmp3GuXHw7STzqoB04()1rd9An45V10JsqXHXORkJ(nQI7aMR5(O06)Vc
\ No newline at end of file
diff --git a/FreshShit/PersonalAnnouncer/event.lua b/FreshShit/PersonalAnnouncer/event.lua
index 51af5ac..4a18fc1 100644
--- a/FreshShit/PersonalAnnouncer/event.lua
+++ b/FreshShit/PersonalAnnouncer/event.lua
@@ -1,4 +1,4 @@
--- TICKER_500
+w-- TICKER_500
function(e)
if ActiveSet == nil then
ActiveSet = Cooldowns[UnitClass("player")]