enUS Localization Update Announcement / localization-update-announcement (push) Canceled after 0s
576 lines
25 KiB
Lua
576 lines
25 KiB
Lua
-- Bagshui Default Profiles
|
|
-- Exposes: Bagshui.config.Profiles
|
|
|
|
Bagshui:AddComponent(function()
|
|
-- Array of tables that defines non-editable built-in profile templates.
|
|
-- Each one *must* have a unique `id` property that will become its object ID.
|
|
-- See Components\Profiles.lua for details, especially the `profileSkeleton` declaration.
|
|
---@type table<string, any>[]
|
|
Bagshui.config.Profiles = {
|
|
version = 3,
|
|
|
|
defaults = {
|
|
-- This is the default profile, which specifies the default layout.
|
|
{
|
|
id = "Bagshui",
|
|
name = "Bagshui",
|
|
structure = {
|
|
primary = {
|
|
layout = {
|
|
-- Row 1
|
|
{
|
|
{
|
|
name = L.Explosives,
|
|
categories = {
|
|
"Explosives",
|
|
},
|
|
},
|
|
{
|
|
name = L.Bags,
|
|
categories = {
|
|
"Bags",
|
|
},
|
|
},
|
|
{
|
|
name = string.format("%s/%s", L.Mounts, L.Companions),
|
|
categories = {
|
|
"Mounts",
|
|
"Companions",
|
|
},
|
|
},
|
|
{
|
|
name = L.Openable,
|
|
categories = {
|
|
"Openable",
|
|
},
|
|
},
|
|
{
|
|
name = L.Junk,
|
|
categories = {
|
|
"QualGray",
|
|
},
|
|
},
|
|
{
|
|
name = L.Uncategorized,
|
|
categories = {
|
|
"Uncategorized",
|
|
},
|
|
},
|
|
{
|
|
name = L.Empty,
|
|
categories = {
|
|
"EmptySlot",
|
|
},
|
|
},
|
|
},
|
|
|
|
-- Row 2
|
|
{
|
|
{
|
|
name = L.Food,
|
|
categories = {
|
|
"Food",
|
|
},
|
|
sortOrder = "MinLevel",
|
|
},
|
|
{
|
|
name = L.Drink,
|
|
categories = {
|
|
"Drink",
|
|
},
|
|
sortOrder = "MinLevel",
|
|
},
|
|
{
|
|
name = L.Consumables,
|
|
categories = {
|
|
"Consumables",
|
|
},
|
|
},
|
|
{
|
|
name = L.Health,
|
|
categories = {
|
|
"PotionsHealth",
|
|
"Bandages",
|
|
},
|
|
sortOrder = "MinLevelNameRev",
|
|
},
|
|
{
|
|
name = L.Mana,
|
|
categories = {
|
|
"PotionsMana",
|
|
},
|
|
sortOrder = "MinLevelNameRev",
|
|
},
|
|
{
|
|
name = L.PotionsSlashRunes,
|
|
categories = {
|
|
"Potions",
|
|
"Runes",
|
|
},
|
|
sortOrder = "MinLevelNameRev",
|
|
},
|
|
{
|
|
name = L.Buffs,
|
|
categories = {
|
|
"Elixirs",
|
|
"FoodBuffs",
|
|
"Juju",
|
|
"Scrolls",
|
|
"WeaponBuffs",
|
|
},
|
|
sortOrder = "MinLevelNameRev",
|
|
},
|
|
},
|
|
|
|
-- Row 3
|
|
{
|
|
{
|
|
name = L.Recipes,
|
|
categories = {
|
|
"Recipes",
|
|
},
|
|
},
|
|
{
|
|
name = L.ProfessionCrafts,
|
|
categories = {
|
|
"ProfessionCrafts",
|
|
},
|
|
},
|
|
{
|
|
name = L.ProfessionReagents,
|
|
categories = {
|
|
"ProfessionBags",
|
|
"ProfessionReagents",
|
|
},
|
|
},
|
|
{
|
|
name = L["Trade Goods"],
|
|
categories = {
|
|
"AllProfessionBags",
|
|
"TradeGoods",
|
|
},
|
|
},
|
|
},
|
|
|
|
-- Row 4
|
|
{
|
|
{
|
|
name = L.MyGear,
|
|
categories = {
|
|
"SoulboundGear",
|
|
"EquippedGear",
|
|
},
|
|
},
|
|
{
|
|
name = L.BindOnEquip,
|
|
categories = {
|
|
"BOE",
|
|
},
|
|
},
|
|
{
|
|
name = L.Gear,
|
|
categories = {
|
|
"Armor",
|
|
"Weapons",
|
|
},
|
|
},
|
|
},
|
|
|
|
-- Row 5
|
|
{
|
|
{
|
|
name = string.format(L.Suffix_Items, L.Quest),
|
|
categories = {
|
|
"Quest",
|
|
"ActiveQuest",
|
|
},
|
|
},
|
|
{
|
|
name = L.Tokens,
|
|
categories = {
|
|
"Tokens",
|
|
},
|
|
},
|
|
{
|
|
name = L.Keys,
|
|
categories = {
|
|
"KeyAndKeyLike",
|
|
},
|
|
},
|
|
{
|
|
name = string.format(L.Suffix_Reagents, _G.CLASS),
|
|
categories = {
|
|
"ClassReagents",
|
|
},
|
|
},
|
|
{
|
|
name = string.format(L.Suffix_Items, _G.CLASS),
|
|
categories = {
|
|
"ClassItems",
|
|
"ClassBooks",
|
|
},
|
|
},
|
|
{
|
|
name = L.Misc,
|
|
categories = {
|
|
"Teleports",
|
|
"TradeTools",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
docked = {
|
|
Keyring = {
|
|
layout = {
|
|
-- Row 1
|
|
{
|
|
{
|
|
name = L.Empty,
|
|
categories = {
|
|
"EmptySlot",
|
|
},
|
|
},
|
|
{
|
|
name = L.Uncategorized,
|
|
categories = {
|
|
"Uncategorized",
|
|
},
|
|
},
|
|
{
|
|
name = L.Glyphs,
|
|
categories = {
|
|
"TWGlyphs",
|
|
},
|
|
},
|
|
{
|
|
name = L.Keys,
|
|
categories = {
|
|
"KeyAndKeyLike",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
-- This empty table must be present for the profile to be available as an
|
|
-- option for default Design profile.
|
|
-- Defaults for the Design profile come from inventory-scoped settings that have
|
|
-- `profileScope = BS_SETTING_PROFILE_SCOPE.DESIGN` (Config\Settings.lua).
|
|
design = {},
|
|
},
|
|
|
|
-- OneBagshui is a "OneBag" style layout where everything is in a single group
|
|
-- and the only organization is via sorting.
|
|
{
|
|
id = "OneBagshui",
|
|
name = "OneBagshui",
|
|
structure = {
|
|
defaultSortOrder = "Manual",
|
|
stackEmptySlots = false,
|
|
-- Since there's only one group, the labels aren't necessary.
|
|
hideGroupLabelsOverride = true,
|
|
primary = {
|
|
layout = {
|
|
-- Row 1
|
|
{
|
|
{
|
|
name = L.Hidden,
|
|
categories = {},
|
|
hide = true,
|
|
},
|
|
},
|
|
|
|
-- Row 2
|
|
{
|
|
{
|
|
name = L.Inventory,
|
|
categories = {
|
|
"ActiveQuest",
|
|
"Armor",
|
|
"Bags",
|
|
"Bandages",
|
|
"ClassBooks",
|
|
"ClassItems",
|
|
"ClassReagents",
|
|
"Companions",
|
|
"Consumables",
|
|
"Disguises",
|
|
"Drink",
|
|
"Elixirs",
|
|
"EmptySlot",
|
|
"EquippedGear",
|
|
"Explosives",
|
|
"Food",
|
|
"FoodBuffs",
|
|
"Juju",
|
|
"KeyAndKeyLike",
|
|
"Mounts",
|
|
"Openable",
|
|
"Potions",
|
|
"PotionsHealth",
|
|
"PotionsMana",
|
|
"ProfessionCrafts",
|
|
"ProfessionReagents",
|
|
"QualGray",
|
|
"Quest",
|
|
"Recipes",
|
|
"Runes",
|
|
"Scrolls",
|
|
"SoulboundGear",
|
|
"Teleports",
|
|
"Tokens",
|
|
"TradeGoods",
|
|
"TradeTools",
|
|
"Uncategorized",
|
|
"WeaponBuffs",
|
|
"Weapons",
|
|
},
|
|
-- Invisible background and border.
|
|
background = { 0, 0, 0, 0 },
|
|
border = { 0, 0, 0, 0 },
|
|
},
|
|
},
|
|
},
|
|
},
|
|
docked = {
|
|
Keyring = {
|
|
layout = {
|
|
-- Row 1
|
|
{
|
|
{
|
|
name = L.Hidden,
|
|
categories = {},
|
|
hide = true,
|
|
},
|
|
},
|
|
|
|
-- Row 2
|
|
{
|
|
{
|
|
name = L.Inventory,
|
|
categories = {
|
|
"EmptySlot",
|
|
"KeyAndKeyLike",
|
|
"TWGlyphs",
|
|
"Uncategorized",
|
|
},
|
|
background = { 0, 0, 0, 0 },
|
|
border = { 0, 0, 0, 0 },
|
|
},
|
|
},
|
|
},
|
|
defaultSortOrder = "Manual",
|
|
stackEmptySlots = false,
|
|
hideGroupLabelsOverride = true,
|
|
},
|
|
},
|
|
},
|
|
|
|
design = {
|
|
windowMaxColumns = 10,
|
|
},
|
|
},
|
|
}, -- End defaults.
|
|
|
|
-- Changes that need to occur during updates.
|
|
migrate = function(profiles, oldVersion)
|
|
-- In v2, the Tokens Category was added to both the Bagshui and OneBagshui Structures.
|
|
if oldVersion < 2 then
|
|
for id, profile in pairs(profiles.list) do
|
|
-- Only add Tokens if there hasn't been significant editing.
|
|
if
|
|
-- Based on default Bagshui Structure.
|
|
profile.structure
|
|
and profile.structure.primary
|
|
and profile.structure.primary.layout
|
|
and type(profile.structure.primary.layout[5]) == "table"
|
|
-- Quest Items
|
|
and (type(profile.structure.primary.layout[5][1]) == "table" and profile.structure.primary.layout[5][1].name == string.format(
|
|
L.Suffix_Items,
|
|
L.Quest
|
|
) and type(profile.structure.primary.layout[5][1].categories) == "table" and table.getn(
|
|
profile.structure.primary.layout[5][1].categories
|
|
) == 2 and BsUtil.TableContainsValue(profile.structure.primary.layout[5][1].categories, "Quest") and BsUtil.TableContainsValue(
|
|
profile.structure.primary.layout[5][1].categories,
|
|
"ActiveQuest"
|
|
))
|
|
-- Keys
|
|
and (type(profile.structure.primary.layout[5][2]) == "table" and profile.structure.primary.layout[5][2].name == L.Keys and type(
|
|
profile.structure.primary.layout[5][2].categories
|
|
) == "table" and table.getn(profile.structure.primary.layout[5][2].categories) == 1 and profile.structure.primary.layout[5][2].categories[1] == "KeyAndKeyLike")
|
|
-- Safeguard to make sure profile default exists.
|
|
and Bagshui.config.Profiles
|
|
and Bagshui.config.Profiles.defaults
|
|
and Bagshui.config.Profiles.defaults[1]
|
|
and Bagshui.config.Profiles.defaults[1].structure
|
|
and Bagshui.config.Profiles.defaults[1].structure.primary
|
|
and Bagshui.config.Profiles.defaults[1].structure.primary.layout
|
|
and Bagshui.config.Profiles.defaults[1].structure.primary.layout[5]
|
|
and Bagshui.config.Profiles.defaults[1].structure.primary.layout[5][2]
|
|
then
|
|
-- Tokens is a separate Group in Bagshui.
|
|
table.insert(
|
|
profile.structure.primary.layout[5],
|
|
2,
|
|
BsUtil.TableCopy(Bagshui.config.Profiles.defaults[1].structure.primary.layout[5][2])
|
|
)
|
|
elseif
|
|
-- Based on OneBagshui Structure.
|
|
profile.structure
|
|
and profile.structure.primary
|
|
and profile.structure.primary.layout
|
|
and type(profile.structure.primary.layout[2]) == "table"
|
|
and type(profile.structure.primary.layout[2][1]) == "table"
|
|
and profile.structure.primary.layout[2][1].name == L.Inventory
|
|
and type(profile.structure.primary.layout[2][1].categories) == "table"
|
|
and table.getn(profile.structure.primary.layout[2][1].categories) == 37
|
|
-- Yes this is silly but it only will ever run once.
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "ActiveQuest")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Armor")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Bags")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Bandages")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "ClassBooks")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "ClassItems")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "ClassReagents")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Companions")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Consumables")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Disguises")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Drink")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Elixirs")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "EmptySlot")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "EquippedGear")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Explosives")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Food")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "FoodBuffs")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Juju")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "KeyAndKeyLike")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Mounts")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Potions")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "PotionsHealth")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "PotionsMana")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "ProfessionCrafts")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "ProfessionReagents")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "QualGray")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Quest")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Recipes")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Runes")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Scrolls")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "SoulboundGear")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Teleports")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "TradeGoods")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "TradeTools")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Uncategorized")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "WeaponBuffs")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Weapons")
|
|
then
|
|
-- Tokens is used for sorting in OneBagshui (if changed away from Manual sort, obvs).
|
|
table.insert(profile.structure.primary.layout[2][1].categories, "Tokens")
|
|
table.sort(profile.structure.primary.layout[2][1].categories)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- In v3, the Openable Category was added to both the Bagshui and OneBagshui Structures.
|
|
if oldVersion < 3 then
|
|
for id, profile in pairs(profiles.list) do
|
|
-- Only add Openable if there hasn't been significant editing.
|
|
if
|
|
-- Based on default Bagshui Structure.
|
|
profile.structure
|
|
and profile.structure.primary
|
|
and profile.structure.primary.layout
|
|
and type(profile.structure.primary.layout[1]) == "table"
|
|
-- Mounts/Companions
|
|
and (type(profile.structure.primary.layout[1][3]) == "table" and profile.structure.primary.layout[1][3].name == string.format(
|
|
"%s/%s",
|
|
L.Mounts,
|
|
L.Companions
|
|
) and type(profile.structure.primary.layout[1][3].categories) == "table" and table.getn(
|
|
profile.structure.primary.layout[1][3].categories
|
|
) == 2 and BsUtil.TableContainsValue(
|
|
profile.structure.primary.layout[1][3].categories,
|
|
"Mounts"
|
|
) and BsUtil.TableContainsValue(profile.structure.primary.layout[1][3].categories, "Companions"))
|
|
-- Junk
|
|
and (type(profile.structure.primary.layout[1][4]) == "table" and profile.structure.primary.layout[1][4].name == L.Junk and type(
|
|
profile.structure.primary.layout[1][4].categories
|
|
) == "table" and table.getn(profile.structure.primary.layout[1][4].categories) == 1 and profile.structure.primary.layout[1][4].categories[1] == "QualGray")
|
|
-- Safeguard to make sure profile default exists.
|
|
and Bagshui.config.Profiles
|
|
and Bagshui.config.Profiles.defaults
|
|
and Bagshui.config.Profiles.defaults[1]
|
|
and Bagshui.config.Profiles.defaults[1].structure
|
|
and Bagshui.config.Profiles.defaults[1].structure.primary
|
|
and Bagshui.config.Profiles.defaults[1].structure.primary.layout
|
|
and Bagshui.config.Profiles.defaults[1].structure.primary.layout[1]
|
|
and Bagshui.config.Profiles.defaults[1].structure.primary.layout[1][4]
|
|
then
|
|
-- Openable is a separate Group in Bagshui.
|
|
table.insert(
|
|
profile.structure.primary.layout[1],
|
|
4,
|
|
BsUtil.TableCopy(Bagshui.config.Profiles.defaults[1].structure.primary.layout[1][4])
|
|
)
|
|
elseif
|
|
-- Based on OneBagshui Structure.
|
|
profile.structure
|
|
and profile.structure.primary
|
|
and profile.structure.primary.layout
|
|
and type(profile.structure.primary.layout[2]) == "table"
|
|
and type(profile.structure.primary.layout[2][1]) == "table"
|
|
and profile.structure.primary.layout[2][1].name == L.Inventory
|
|
and type(profile.structure.primary.layout[2][1].categories) == "table"
|
|
and table.getn(profile.structure.primary.layout[2][1].categories) == 38
|
|
-- Yes this is silly but it only will ever run once.
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "ActiveQuest")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Armor")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Bags")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Bandages")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "ClassBooks")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "ClassItems")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "ClassReagents")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Companions")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Consumables")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Disguises")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Drink")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Elixirs")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "EmptySlot")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "EquippedGear")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Explosives")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Food")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "FoodBuffs")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Juju")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "KeyAndKeyLike")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Mounts")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Potions")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "PotionsHealth")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "PotionsMana")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "ProfessionCrafts")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "ProfessionReagents")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "QualGray")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Quest")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Recipes")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Runes")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Scrolls")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "SoulboundGear")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Teleports")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Tokens")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "TradeGoods")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "TradeTools")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Uncategorized")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "WeaponBuffs")
|
|
and BsUtil.TableContainsValue(profile.structure.primary.layout[2][1].categories, "Weapons")
|
|
then
|
|
-- Openable is used for sorting in OneBagshui (if changed away from Manual sort, obvs).
|
|
table.insert(profile.structure.primary.layout[2][1].categories, "Openable")
|
|
table.sort(profile.structure.primary.layout[2][1].categories)
|
|
end
|
|
end
|
|
end
|
|
end,
|
|
}
|
|
end)
|