diff --git a/CSMPFunctions.lua b/CSMPFunctions.lua
index 9b79d35..d658e3d 100644
--- a/CSMPFunctions.lua
+++ b/CSMPFunctions.lua
@@ -412,7 +412,7 @@ function CSServer(Port,PlayerLimit)
end
end
-function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,Ticket)
+function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,IconType,Ticket)
if (rbxlegacyversion == "delta" or rbxlegacyversion == "delta-gamma" or rbxlegacyversion == "omega" or rbxlegacyversion == "delta-pre-gamma" or rbxlegacyversion == "delta-omega" or rbxlegacyversion == "delta-beta") then
pcall(function() game:SetPlaceID(-1, false) end);
pcall(function() game:GetService("Players"):SetChatStyle(Enum.ChatStyle.ClassicAndBubble) end);
@@ -496,7 +496,17 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He
end
end
pcall(function() Player:SetUnder13(false) end);
- pcall(function() Player:SetMembershipType(Enum.MembershipType.BuildersClub) end);
+ if (rbxlegacyversion == "delta" or rbxlegacyversion == "omega" or rbxlegacyversion == "delta-omega") then
+ if (IconType == "BC") then
+ Player:SetMembershipType(Enum.MembershipType.BuildersClub);
+ elseif (IconType == "TBC") then
+ Player:SetMembershipType(Enum.MembershipType.TurboBuildersClub);
+ elseif (IconType == "OBC") then
+ Player:SetMembershipType(Enum.MembershipType.OutrageousBuildersClub);
+ elseif (IconType == "NBC") then
+ Player:SetMembershipType(Enum.MembershipType.None);
+ end
+ end
pcall(function() Player:SetAccountAge(365) end);
Player:SetSuperSafeChat(false);
Player.CharacterAppearance=0;
@@ -523,7 +533,6 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He
player = game:GetService("Players"):CreateLocalPlayer(UserID)
player:SetSuperSafeChat(false)
pcall(function() player:SetUnder13(false) end);
- pcall(function() player:SetMembershipType(Enum.MembershipType.BuildersClub) end);
pcall(function() player:SetAccountAge(365) end);
player.CharacterAppearance=0;
pcall(function() player.Name=PlayerName or ""; end);
@@ -602,7 +611,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He
end
end
-function CSSolo(UserID,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID)
+function CSSolo(UserID,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,IconType)
if (rbxlegacyversion == "omega" or rbxlegacyversion == "delta-omega") then
game:GetService("RunService"):Run();
else
@@ -630,6 +639,19 @@ function CSSolo(UserID,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,
local plr = game.Players:CreateLocalPlayer(UserID);
plr.Name = PlayerName;
plr:LoadCharacter();
+ pcall(function() plr:SetUnder13(false) end);
+ if (rbxlegacyversion == "delta" or rbxlegacyversion == "omega" or rbxlegacyversion == "delta-omega") then
+ if (IconType == "BC") then
+ plr:SetMembershipType(Enum.MembershipType.BuildersClub);
+ elseif (IconType == "TBC") then
+ plr:SetMembershipType(Enum.MembershipType.TurboBuildersClub);
+ elseif (IconType == "OBC") then
+ plr:SetMembershipType(Enum.MembershipType.OutrageousBuildersClub);
+ elseif (IconType == "NBC") then
+ plr:SetMembershipType(Enum.MembershipType.None);
+ end
+ end
+ pcall(function() plr:SetAccountAge(365) end);
plr.CharacterAppearance=0;
InitalizeClientAppearance(plr,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID);
LoadCharacterNew(newWaitForChild(plr,"Appearance"),plr.Character);
diff --git a/CoreGui2011.rbxm b/CoreGui2011.rbxm
deleted file mode 100644
index cbd6915..0000000
--- a/CoreGui2011.rbxm
+++ /dev/null
@@ -1,3601 +0,0 @@
-
- null
- nil
- -
-
- false
-
- GUI_Copy
- script.PlayerList:clone().Parent = game.StarterGui;
-script:remove();
- true
-
-
-
-
- false
-
- PlayerList
- local t = {}
-
-local function ScopedConnect(parentInstance, instance, event, signalFunc, syncFunc, removeFunc)
- local eventConnection = nil
-
- --Connection on parentInstance is scoped by parentInstance (when destroyed, it goes away)
- local tryConnect = function()
- if game:IsAncestorOf(parentInstance) then
- --Entering the world, make sure we are connected/synced
- if not eventConnection then
- eventConnection = instance[event]:connect(signalFunc)
- if syncFunc then syncFunc() end
- end
- else
- --Probably leaving the world, so disconnect for now
- if eventConnection then
- eventConnection:disconnect()
- if removeFunc then removeFunc() end
- end
- end
- end
-
- --Hook it up to ancestryChanged signal
- local connection = parentInstance.AncestryChanged:connect(tryConnect)
-
- --Now connect us if we're already in the world
- tryConnect()
-
- return connection
-end
-
-local function CreateButtons(frame, buttons, yPos, ySize)
- local buttonNum = 1
- local buttonObjs = {}
- for i, obj in ipairs(buttons) do
- local button = Instance.new("TextButton")
- button.Name = "Button" .. buttonNum
- button.Font = Enum.Font.Arial
- button.FontSize = Enum.FontSize.Size18
- button.AutoButtonColor = true
- button.Style = Enum.ButtonStyle.RobloxButtonDefault
- button.Text = obj.Text
- button.TextColor3 = Color3.new(1,1,1)
- button.MouseButton1Click:connect(obj.Function)
- button.Parent = frame
- buttonObjs[buttonNum] = button
-
- buttonNum = buttonNum + 1
- end
- local numButtons = buttonNum-1
-
- if numButtons == 1 then
- frame.Button1.Position = UDim2.new(0.35, 0, yPos.Scale, yPos.Offset)
- frame.Button1.Size = UDim2.new(.4,0,ySize.Scale, ySize.Offset)
- elseif numButtons == 2 then
- frame.Button1.Position = UDim2.new(0.1, 0, yPos.Scale, yPos.Offset)
- frame.Button1.Size = UDim2.new(.8/3,0, ySize.Scale, ySize.Offset)
-
- frame.Button2.Position = UDim2.new(0.55, 0, yPos.Scale, yPos.Offset)
- frame.Button2.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset)
- elseif numButtons >= 3 then
- local spacing = .1 / numButtons
- local buttonSize = .9 / numButtons
-
- buttonNum = 1
- while buttonNum <= numButtons do
- buttonObjs[buttonNum].Position = UDim2.new(spacing*buttonNum + (buttonNum-1) * buttonSize, 0, yPos.Scale, yPos.Offset)
- buttonObjs[buttonNum].Size = UDim2.new(buttonSize, 0, ySize.Scale, ySize.Offset)
- buttonNum = buttonNum + 1
- end
- end
-end
-
-local function setSliderPos(newAbsPosX,slider,sliderPosition,bar,steps)
-
- local newStep = steps - 1 --otherwise we really get one more step than we want
-
- local relativePosX = math.min(1, math.max(0, (newAbsPosX - bar.AbsolutePosition.X) / bar.AbsoluteSize.X ) )
- local wholeNum, remainder = math.modf(relativePosX * newStep)
- if remainder > 0.5 then
- wholeNum = wholeNum + 1
- end
- relativePosX = wholeNum/newStep
-
- local result = math.ceil(relativePosX * newStep)
- if sliderPosition.Value ~= (result + 1) then --onky update if we moved a step
- sliderPosition.Value = result + 1
-
- if relativePosX == 1 then
- slider.Position = UDim2.new(1,-slider.AbsoluteSize.X,slider.Position.Y.Scale,slider.Position.Y.Offset)
- else
- slider.Position = UDim2.new(relativePosX,0,slider.Position.Y.Scale,slider.Position.Y.Offset)
- end
- end
-
-end
-
-local function cancelSlide(areaSoak)
- areaSoak.Visible = false
- if areaSoakMouseMoveCon then areaSoakMouseMoveCon:disconnect() end
-end
-
-t.CreateStyledMessageDialog = function(title, message, style, buttons)
- local frame = Instance.new("Frame")
- frame.Size = UDim2.new(0.5, 0, 0, 165)
- frame.Position = UDim2.new(0.25, 0, 0.5, -72.5)
- frame.Name = "MessageDialog"
- frame.Active = true
- frame.Style = Enum.FrameStyle.RobloxRound
-
- local styleImage = Instance.new("ImageLabel")
- styleImage.Name = "StyleImage"
- styleImage.BackgroundTransparency = 1
- styleImage.Position = UDim2.new(0,5,0,15)
- if style == "error" or style == "Error" then
- styleImage.Size = UDim2.new(0, 71, 0, 71)
- styleImage.Image = "http://www.roblox.com/asset?id=42565285"
- elseif style == "notify" or style == "Notify" then
- styleImage.Size = UDim2.new(0, 71, 0, 71)
- styleImage.Image = "http://www.roblox.com/asset?id=42604978"
- elseif style == "confirm" or style == "Confirm" then
- styleImage.Size = UDim2.new(0, 74, 0, 76)
- styleImage.Image = "http://www.roblox.com/asset?id=42557901"
- else
- return t.CreateMessageDialog(title,message,buttons)
- end
- styleImage.Parent = frame
-
- local titleLabel = Instance.new("TextLabel")
- titleLabel.Name = "Title"
- titleLabel.Text = title
- titleLabel.BackgroundTransparency = 1
- titleLabel.TextColor3 = Color3.new(221/255,221/255,221/255)
- titleLabel.Position = UDim2.new(0, 80, 0, 0)
- titleLabel.Size = UDim2.new(1, -80, 0, 40)
- titleLabel.Font = Enum.Font.ArialBold
- titleLabel.FontSize = Enum.FontSize.Size36
- titleLabel.TextXAlignment = Enum.TextXAlignment.Center
- titleLabel.TextYAlignment = Enum.TextYAlignment.Center
- titleLabel.Parent = frame
-
- local messageLabel = Instance.new("TextLabel")
- messageLabel.Name = "Message"
- messageLabel.Text = message
- messageLabel.TextColor3 = Color3.new(221/255,221/255,221/255)
- messageLabel.Position = UDim2.new(0.025, 80, 0, 45)
- messageLabel.Size = UDim2.new(0.95, -80, 0, 55)
- messageLabel.BackgroundTransparency = 1
- messageLabel.Font = Enum.Font.Arial
- messageLabel.FontSize = Enum.FontSize.Size18
- messageLabel.TextWrap = true
- messageLabel.TextXAlignment = Enum.TextXAlignment.Left
- messageLabel.TextYAlignment = Enum.TextYAlignment.Top
- messageLabel.Parent = frame
-
- CreateButtons(frame, buttons, UDim.new(0, 105), UDim.new(0, 40) )
-
- return frame
-end
-
-t.CreateMessageDialog = function(title, message, buttons)
- local frame = Instance.new("Frame")
- frame.Size = UDim2.new(0.5, 0, 0.5, 0)
- frame.Position = UDim2.new(0.25, 0, 0.25, 0)
- frame.Name = "MessageDialog"
- frame.Active = true
- frame.Style = Enum.FrameStyle.RobloxRound
-
- local titleLabel = Instance.new("TextLabel")
- titleLabel.Name = "Title"
- titleLabel.Text = title
- titleLabel.BackgroundTransparency = 1
- titleLabel.TextColor3 = Color3.new(221/255,221/255,221/255)
- titleLabel.Position = UDim2.new(0, 0, 0, 0)
- titleLabel.Size = UDim2.new(1, 0, 0.15, 0)
- titleLabel.Font = Enum.Font.ArialBold
- titleLabel.FontSize = Enum.FontSize.Size36
- titleLabel.TextXAlignment = Enum.TextXAlignment.Center
- titleLabel.TextYAlignment = Enum.TextYAlignment.Center
- titleLabel.Parent = frame
-
- local messageLabel = Instance.new("TextLabel")
- messageLabel.Name = "Message"
- messageLabel.Text = message
- messageLabel.TextColor3 = Color3.new(221/255,221/255,221/255)
- messageLabel.Position = UDim2.new(0.025, 0, 0.175, 0)
- messageLabel.Size = UDim2.new(0.95, 0, .55, 0)
- messageLabel.BackgroundTransparency = 1
- messageLabel.Font = Enum.Font.Arial
- messageLabel.FontSize = Enum.FontSize.Size18
- messageLabel.TextWrap = true
- messageLabel.TextXAlignment = Enum.TextXAlignment.Left
- messageLabel.TextYAlignment = Enum.TextYAlignment.Top
- messageLabel.Parent = frame
-
- CreateButtons(frame, buttons, UDim.new(0.8,0), UDim.new(0.15, 0))
-
- return frame
-end
-
-t.CreateDropDownMenu = function(items, onSelect, forRoblox)
- local width = UDim.new(0, 100)
- local height = UDim.new(0, 32)
-
- local xPos = 0.055
- local frame = Instance.new("Frame")
- frame.Name = "DropDownMenu"
- frame.BackgroundTransparency = 1
- frame.Size = UDim2.new(width, height)
-
- local dropDownMenu = Instance.new("TextButton")
- dropDownMenu.Name = "DropDownMenuButton"
- dropDownMenu.TextWrap = true
- dropDownMenu.TextColor3 = Color3.new(1,1,1)
- dropDownMenu.Text = "Choose One"
- dropDownMenu.Font = Enum.Font.ArialBold
- dropDownMenu.FontSize = Enum.FontSize.Size18
- dropDownMenu.TextXAlignment = Enum.TextXAlignment.Left
- dropDownMenu.TextYAlignment = Enum.TextYAlignment.Center
- dropDownMenu.BackgroundTransparency = 1
- dropDownMenu.AutoButtonColor = true
- dropDownMenu.Style = Enum.ButtonStyle.RobloxButton
- dropDownMenu.Size = UDim2.new(1,0,1,0)
- dropDownMenu.Parent = frame
- dropDownMenu.ZIndex = 2
-
- local dropDownIcon = Instance.new("ImageLabel")
- dropDownIcon.Name = "Icon"
- dropDownIcon.Active = false
- dropDownIcon.Image = "http://www.roblox.com/asset/?id=45732894"
- dropDownIcon.BackgroundTransparency = 1
- dropDownIcon.Size = UDim2.new(0,11,0,6)
- dropDownIcon.Position = UDim2.new(1,-11,0.5, -2)
- dropDownIcon.Parent = dropDownMenu
- dropDownIcon.ZIndex = 2
-
- local itemCount = #items
- local dropDownItemCount = #items
- local useScrollButtons = false
- if dropDownItemCount > 6 then
- useScrollButtons = true
- dropDownItemCount = 6
- end
-
- local droppedDownMenu = Instance.new("TextButton")
- droppedDownMenu.Name = "List"
- droppedDownMenu.Text = ""
- droppedDownMenu.BackgroundTransparency = 1
- --droppedDownMenu.AutoButtonColor = true
- droppedDownMenu.Style = Enum.ButtonStyle.RobloxButton
- droppedDownMenu.Visible = false
- droppedDownMenu.Active = true --Blocks clicks
- droppedDownMenu.Position = UDim2.new(0,0,0,0)
- droppedDownMenu.Size = UDim2.new(1,0, (1 + dropDownItemCount)*.8, 0)
- droppedDownMenu.Parent = frame
- droppedDownMenu.ZIndex = 2
-
- local choiceButton = Instance.new("TextButton")
- choiceButton.Name = "ChoiceButton"
- choiceButton.BackgroundTransparency = 1
- choiceButton.BorderSizePixel = 0
- choiceButton.Text = "ReplaceMe"
- choiceButton.TextColor3 = Color3.new(1,1,1)
- choiceButton.TextXAlignment = Enum.TextXAlignment.Left
- choiceButton.TextYAlignment = Enum.TextYAlignment.Center
- choiceButton.BackgroundColor3 = Color3.new(1, 1, 1)
- choiceButton.Font = Enum.Font.Arial
- choiceButton.FontSize = Enum.FontSize.Size18
- if useScrollButtons then
- choiceButton.Size = UDim2.new(1,-13, .8/((dropDownItemCount + 1)*.8),0)
- else
- choiceButton.Size = UDim2.new(1, 0, .8/((dropDownItemCount + 1)*.8),0)
- end
- choiceButton.TextWrap = true
- choiceButton.ZIndex = 2
-
- local dropDownSelected = false
-
- local scrollUpButton
- local scrollDownButton
- local scrollMouseCount = 0
-
- local setZIndex = function(baseZIndex)
- droppedDownMenu.ZIndex = baseZIndex +1
- if scrollUpButton then
- scrollUpButton.ZIndex = baseZIndex + 3
- end
- if scrollDownButton then
- scrollDownButton.ZIndex = baseZIndex + 3
- end
-
- local children = droppedDownMenu:GetChildren()
- if children then
- for i, child in ipairs(children) do
- if child.Name == "ChoiceButton" then
- child.ZIndex = baseZIndex + 2
- elseif child.Name == "ClickCaptureButton" then
- child.ZIndex = baseZIndex
- end
- end
- end
- end
-
- local scrollBarPosition = 1
- local updateScroll = function()
- if scrollUpButton then
- scrollUpButton.Active = scrollBarPosition > 1
- end
- if scrollDownButton then
- scrollDownButton.Active = scrollBarPosition + dropDownItemCount <= itemCount
- end
-
- local children = droppedDownMenu:GetChildren()
- if not children then return end
-
- local childNum = 1
- for i, obj in ipairs(children) do
- if obj.Name == "ChoiceButton" then
- if childNum < scrollBarPosition or childNum >= scrollBarPosition + dropDownItemCount then
- obj.Visible = false
- else
- obj.Position = UDim2.new(0,0,((childNum-scrollBarPosition+1)*.8)/((dropDownItemCount+1)*.8),0)
- obj.Visible = true
- end
- obj.TextColor3 = Color3.new(1,1,1)
- obj.BackgroundTransparency = 1
-
- childNum = childNum + 1
- end
- end
- end
- local toggleVisibility = function()
- dropDownSelected = not dropDownSelected
-
- dropDownMenu.Visible = not dropDownSelected
- droppedDownMenu.Visible = dropDownSelected
- if dropDownSelected then
- setZIndex(4)
- else
- setZIndex(2)
- end
- if useScrollButtons then
- updateScroll()
- end
- end
- droppedDownMenu.MouseButton1Click:connect(toggleVisibility)
-
- local updateSelection = function(text)
- local foundItem = false
- local children = droppedDownMenu:GetChildren()
- local childNum = 1
- if children then
- for i, obj in ipairs(children) do
- if obj.Name == "ChoiceButton" then
- if obj.Text == text then
- obj.Font = Enum.Font.ArialBold
- foundItem = true
- scrollBarPosition = childNum
- else
- obj.Font = Enum.Font.Arial
- end
- childNum = childNum + 1
- end
- end
- end
- if not text then
- dropDownMenu.Text = "Choose One"
- scrollBarPosition = 1
- else
- if not foundItem then
- error("Invalid Selection Update -- " .. text)
- end
-
- if scrollBarPosition + dropDownItemCount > itemCount + 1 then
- scrollBarPosition = itemCount - dropDownItemCount + 1
- end
-
- dropDownMenu.Text = text
- end
- end
-
- local function scrollDown()
- if scrollBarPosition + dropDownItemCount <= itemCount then
- scrollBarPosition = scrollBarPosition + 1
- updateScroll()
- return true
- end
- return false
- end
- local function scrollUp()
- if scrollBarPosition > 1 then
- scrollBarPosition = scrollBarPosition - 1
- updateScroll()
- return true
- end
- return false
- end
-
- if useScrollButtons then
- --Make some scroll buttons
- scrollUpButton = Instance.new("ImageButton")
- scrollUpButton.Name = "ScrollUpButton"
- scrollUpButton.BackgroundTransparency = 1
- scrollUpButton.Image = "rbxasset://textures/ui/scrollbuttonUp.png"
- scrollUpButton.Size = UDim2.new(0,17,0,17)
- scrollUpButton.Position = UDim2.new(1,-11,(1*.8)/((dropDownItemCount+1)*.8),0)
- scrollUpButton.MouseButton1Click:connect(
- function()
- scrollMouseCount = scrollMouseCount + 1
- end)
- scrollUpButton.MouseLeave:connect(
- function()
- scrollMouseCount = scrollMouseCount + 1
- end)
- scrollUpButton.MouseButton1Down:connect(
- function()
- scrollMouseCount = scrollMouseCount + 1
-
- scrollUp()
- local val = scrollMouseCount
- wait(0.5)
- while val == scrollMouseCount do
- if scrollUp() == false then
- break
- end
- wait(0.1)
- end
- end)
-
- scrollUpButton.Parent = droppedDownMenu
-
- scrollDownButton = Instance.new("ImageButton")
- scrollDownButton.Name = "ScrollDownButton"
- scrollDownButton.BackgroundTransparency = 1
- scrollDownButton.Image = "rbxasset://textures/ui/scrollbuttonDown.png"
- scrollDownButton.Size = UDim2.new(0,17,0,17)
- scrollDownButton.Position = UDim2.new(1,-11,1,-11)
- scrollDownButton.Parent = droppedDownMenu
- scrollDownButton.MouseButton1Click:connect(
- function()
- scrollMouseCount = scrollMouseCount + 1
- end)
- scrollDownButton.MouseLeave:connect(
- function()
- scrollMouseCount = scrollMouseCount + 1
- end)
- scrollDownButton.MouseButton1Down:connect(
- function()
- scrollMouseCount = scrollMouseCount + 1
-
- scrollDown()
- local val = scrollMouseCount
- wait(0.5)
- while val == scrollMouseCount do
- if scrollDown() == false then
- break
- end
- wait(0.1)
- end
- end)
-
- local scrollbar = Instance.new("ImageLabel")
- scrollbar.Name = "ScrollBar"
- scrollbar.Image = "rbxasset://textures/ui/scrollbar.png"
- scrollbar.BackgroundTransparency = 1
- scrollbar.Size = UDim2.new(0, 18, (dropDownItemCount*.8)/((dropDownItemCount+1)*.8), -(17) - 11 - 4)
- scrollbar.Position = UDim2.new(1,-11,(1*.8)/((dropDownItemCount+1)*.8),17+2)
- scrollbar.Parent = droppedDownMenu
- end
-
- for i,item in ipairs(items) do
- -- needed to maintain local scope for items in event listeners below
- local button = choiceButton:clone()
- if forRoblox then
- button.RobloxLocked = true
- end
- button.Text = item
- button.Parent = droppedDownMenu
- button.MouseButton1Click:connect(function()
- --Remove Highlight
- button.TextColor3 = Color3.new(1,1,1)
- button.BackgroundTransparency = 1
-
- updateSelection(item)
- onSelect(item)
-
- toggleVisibility()
- end)
- button.MouseEnter:connect(function()
- --Add Highlight
- button.TextColor3 = Color3.new(0,0,0)
- button.BackgroundTransparency = 0
- end)
-
- button.MouseLeave:connect(function()
- --Remove Highlight
- button.TextColor3 = Color3.new(1,1,1)
- button.BackgroundTransparency = 1
- end)
- end
-
- --This does the initial layout of the buttons
- updateScroll()
-
- local bigFakeButton = Instance.new("TextButton")
- bigFakeButton.BackgroundTransparency = 1
- bigFakeButton.Name = "ClickCaptureButton"
- bigFakeButton.Size = UDim2.new(0, 4000, 0, 3000)
- bigFakeButton.Position = UDim2.new(0, -2000, 0, -1500)
- bigFakeButton.ZIndex = 1
- bigFakeButton.Text = ""
- bigFakeButton.Parent = droppedDownMenu
- bigFakeButton.MouseButton1Click:connect(toggleVisibility)
-
- dropDownMenu.MouseButton1Click:connect(toggleVisibility)
- return frame, updateSelection
-end
-
-t.CreatePropertyDropDownMenu = function(instance, property, enum)
-
- local items = enum:GetEnumItems()
- local names = {}
- local nameToItem = {}
- for i,obj in ipairs(items) do
- names[i] = obj.Name
- nameToItem[obj.Name] = obj
- end
-
- local frame
- local updateSelection
- frame, updateSelection = t.CreateDropDownMenu(names, function(text) instance[property] = nameToItem[text] end)
-
- ScopedConnect(frame, instance, "Changed",
- function(prop)
- if prop == property then
- updateSelection(instance[property].Name)
- end
- end,
- function()
- updateSelection(instance[property].Name)
- end)
-
- return frame
-end
-
-t.GetFontHeight = function(font, fontSize)
- if font == nil or fontSize == nil then
- error("Font and FontSize must be non-nil")
- end
-
- if font == Enum.Font.Legacy then
- if fontSize == Enum.FontSize.Size8 then
- return 12
- elseif fontSize == Enum.FontSize.Size9 then
- return 14
- elseif fontSize == Enum.FontSize.Size10 then
- return 15
- elseif fontSize == Enum.FontSize.Size11 then
- return 17
- elseif fontSize == Enum.FontSize.Size12 then
- return 18
- elseif fontSize == Enum.FontSize.Size14 then
- return 21
- elseif fontSize == Enum.FontSize.Size18 then
- return 27
- elseif fontSize == Enum.FontSize.Size24 then
- return 36
- elseif fontSize == Enum.FontSize.Size36 then
- return 54
- elseif fontSize == Enum.FontSize.Size48 then
- return 72
- else
- error("Unknown FontSize")
- end
- elseif font == Enum.Font.Arial or font == Enum.Font.ArialBold then
- if fontSize == Enum.FontSize.Size8 then
- return 8
- elseif fontSize == Enum.FontSize.Size9 then
- return 9
- elseif fontSize == Enum.FontSize.Size10 then
- return 10
- elseif fontSize == Enum.FontSize.Size11 then
- return 11
- elseif fontSize == Enum.FontSize.Size12 then
- return 12
- elseif fontSize == Enum.FontSize.Size14 then
- return 14
- elseif fontSize == Enum.FontSize.Size18 then
- return 18
- elseif fontSize == Enum.FontSize.Size24 then
- return 24
- elseif fontSize == Enum.FontSize.Size36 then
- return 36
- elseif fontSize == Enum.FontSize.Size48 then
- return 48
- else
- error("Unknown FontSize")
- end
- else
- error("Unknown Font " .. font)
- end
-end
-
-local function layoutGuiObjectsHelper(frame, guiObjects, settingsTable)
- local totalPixels = frame.AbsoluteSize.Y
- local pixelsRemaining = frame.AbsoluteSize.Y
- for i, child in ipairs(guiObjects) do
- if child:IsA("TextLabel") or child:IsA("TextButton") then
- local isLabel = child:IsA("TextLabel")
- if isLabel then
- pixelsRemaining = pixelsRemaining - settingsTable["TextLabelPositionPadY"]
- else
- pixelsRemaining = pixelsRemaining - settingsTable["TextButtonPositionPadY"]
- end
- child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining)
- child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, pixelsRemaining)
-
- if child.TextFits and child.TextBounds.Y < pixelsRemaining then
- child.Visible = true
- if isLabel then
- child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.TextBounds.Y + settingsTable["TextLabelSizePadY"])
- else
- child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.TextBounds.Y + settingsTable["TextButtonSizePadY"])
- end
-
- while not child.TextFits do
- child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.AbsoluteSize.Y + 1)
- end
- pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y
-
- if isLabel then
- pixelsRemaining = pixelsRemaining - settingsTable["TextLabelPositionPadY"]
- else
- pixelsRemaining = pixelsRemaining - settingsTable["TextButtonPositionPadY"]
- end
- else
- child.Visible = false
- pixelsRemaining = -1
- end
-
- else
- --GuiObject
- child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining)
- pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y
- child.Visible = (pixelsRemaining >= 0)
- end
- end
-end
-
-t.LayoutGuiObjects = function(frame, guiObjects, settingsTable)
- if not frame:IsA("GuiObject") then
- error("Frame must be a GuiObject")
- end
- for i, child in ipairs(guiObjects) do
- if not child:IsA("GuiObject") then
- error("All elements that are layed out must be of type GuiObject")
- end
- end
-
- if not settingsTable then
- settingsTable = {}
- end
-
- if not settingsTable["TextLabelSizePadY"] then
- settingsTable["TextLabelSizePadY"] = 0
- end
- if not settingsTable["TextLabelPositionPadY"] then
- settingsTable["TextLabelPositionPadY"] = 0
- end
- if not settingsTable["TextButtonSizePadY"] then
- settingsTable["TextButtonSizePadY"] = 12
- end
- if not settingsTable["TextButtonPositionPadY"] then
- settingsTable["TextButtonPositionPadY"] = 2
- end
-
- --Wrapper frame takes care of styled objects
- local wrapperFrame = Instance.new("Frame")
- wrapperFrame.Name = "WrapperFrame"
- wrapperFrame.BackgroundTransparency = 1
- wrapperFrame.Size = UDim2.new(1,0,1,0)
- wrapperFrame.Parent = frame
-
- for i, child in ipairs(guiObjects) do
- child.Parent = wrapperFrame
- end
-
- local recalculate = function()
- wait()
- layoutGuiObjectsHelper(wrapperFrame, guiObjects, settingsTable)
- end
-
- frame.Changed:connect(
- function(prop)
- if prop == "AbsoluteSize" then
- --Wait a heartbeat for it to sync in
- recalculate()
- end
- end)
- frame.AncestryChanged:connect(recalculate)
-
- layoutGuiObjectsHelper(wrapperFrame, guiObjects, settingsTable)
-end
-
-
-t.CreateSlider = function(steps,width,position)
- local sliderGui = Instance.new("Frame")
- sliderGui.Size = UDim2.new(1,0,1,0)
- sliderGui.BackgroundTransparency = 1
- sliderGui.Name = "SliderGui"
-
- local areaSoak = Instance.new("TextButton")
- areaSoak.Name = "AreaSoak"
- areaSoak.Text = ""
- areaSoak.BackgroundTransparency = 1
- areaSoak.Active = false
- areaSoak.Size = UDim2.new(1,0,1,0)
- areaSoak.Visible = false
- areaSoak.ZIndex = 4
- areaSoak.Parent = sliderGui
-
- local sliderPosition = Instance.new("IntValue")
- sliderPosition.Name = "SliderPosition"
- sliderPosition.Value = 0
- sliderPosition.Parent = sliderGui
-
- local id = math.random(1,100)
-
- local bar = Instance.new("Frame")
- bar.Name = "Bar"
- bar.BackgroundColor3 = Color3.new(0,0,0)
- if type(width) == "number" then
- bar.Size = UDim2.new(0,width,0,5)
- else
- bar.Size = UDim2.new(0,200,0,5)
- end
- bar.BorderColor3 = Color3.new(95/255,95/255,95/255)
- bar.ZIndex = 2
- bar.Parent = sliderGui
-
- if position["X"] and position["X"]["Scale"] and position["X"]["Offset"] and position["Y"] and position["Y"]["Scale"] and position["Y"]["Offset"] then
- bar.Position = position
- end
-
- local slider = Instance.new("ImageButton")
- slider.Name = "Slider"
- slider.BackgroundTransparency = 1
- slider.Image = "rbxasset://textures/ui/Slider.png"
- slider.Position = UDim2.new(0,0,0.5,-10)
- slider.Size = UDim2.new(0,20,0,20)
- slider.ZIndex = 3
- slider.Parent = bar
-
- local areaSoakMouseMoveCon = nil
-
- areaSoak.MouseLeave:connect(function()
- if areaSoak.Visible then
- cancelSlide(areaSoak)
- end
- end)
- areaSoak.MouseButton1Up:connect(function()
- if areaSoak.Visible then
- cancelSlide(areaSoak)
- end
- end)
-
- slider.MouseButton1Down:connect(function()
- areaSoak.Visible = true
- if areaSoakMouseMoveCon then areaSoakMouseMoveCon:disconnect() end
- areaSoakMouseMoveCon = areaSoak.MouseMoved:connect(function(x,y)
- setSliderPos(x,slider,sliderPosition,bar,steps)
- end)
- end)
-
- slider.MouseButton1Up:connect(function() cancelSlide(areaSoak) end)
-
- sliderPosition.Changed:connect(function(prop)
- local relativePosX = (sliderPosition.Value - 1) / steps
- slider.Position = UDim2.new(relativePosX,0,slider.Position.Y.Scale,slider.Position.Y.Offset)
- end)
-
- return sliderGui, sliderPosition
-
-end
-
-
-t.CreateScrollingFrame = function(orderList,scrollStyle)
- local frame = Instance.new("Frame")
- frame.Name = "ScrollingFrame"
- frame.BackgroundTransparency = 1
- frame.Size = UDim2.new(1,0,1,0)
-
- local scrollUpButton = Instance.new("ImageButton")
- scrollUpButton.Name = "ScrollUpButton"
- scrollUpButton.BackgroundTransparency = 1
- scrollUpButton.Image = "rbxasset://textures/ui/scrollbuttonUp.png"
- scrollUpButton.Size = UDim2.new(0,17,0,17)
-
-
- local scrollDownButton = Instance.new("ImageButton")
- scrollDownButton.Name = "ScrollDownButton"
- scrollDownButton.BackgroundTransparency = 1
- scrollDownButton.Image = "rbxasset://textures/ui/scrollbuttonDown.png"
- scrollDownButton.Size = UDim2.new(0,17,0,17)
-
- local style = "simple"
- if scrollStyle and tostring(scrollStyle) then
- style = scrollStyle
- end
-
- local scrollPosition = 1
- local rowSize = 1
-
- local layoutGridScrollBar = function()
- local guiObjects = {}
- if orderList then
- for i, child in ipairs(orderList) do
- if child.Parent == frame then
- table.insert(guiObjects, child)
- end
- end
- else
- local children = frame:GetChildren()
- if children then
- for i, child in ipairs(children) do
- if child:IsA("GuiObject") then
- table.insert(guiObjects, child)
- end
- end
- end
- end
- if #guiObjects == 0 then
- scrollUpButton.Active = false
- scrollDownButton.Active = false
- scrollPosition = 1
- return
- end
-
- if scrollPosition > #guiObjects then
- scrollPosition = #guiObjects
- end
-
- local totalPixelsY = frame.AbsoluteSize.Y
- local pixelsRemainingY = frame.AbsoluteSize.Y
-
- local totalPixelsX = frame.AbsoluteSize.X
-
- local xCounter = 0
- local rowSizeCounter = 0
- local setRowSize = true
-
- local pixelsBelowScrollbar = 0
- local pos = #guiObjects
- while pixelsBelowScrollbar < totalPixelsY and pos >= 1 do
- if pos >= scrollPosition then
- pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y
- else
- xCounter = xCounter + guiObjects[pos].AbsoluteSize.X
- rowSizeCounter = rowSizeCounter + 1
- if xCounter >= totalPixelsX then
- if setRowSize then
- rowSize = rowSizeCounter - 1
- setRowSize = false
- end
-
- rowSizeCounter = 0
- xCounter = 0
- if pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y <= totalPixelsY then
- --It fits, so back up our scroll position
- pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y
- if scrollPosition <= rowSize then
- scrollPosition = rowSize
- break
- else
- --print("Backing up ScrollPosition from -- " ..scrollPosition)
- scrollPosition = scrollPosition - rowSize
- end
- else
- break
- end
- end
- end
- pos = pos - 1
- end
-
- xCounter = 0
- --print("ScrollPosition = " .. scrollPosition)
- pos = scrollPosition
- rowSizeCounter = 0
- setRowSize = true
- local lastChildSize = 0
-
- local xOffset,yOffset = 0
- if guiObjects[1] then
- yOffset = math.ceil(math.floor(math.fmod(totalPixelsY,guiObjects[1].AbsoluteSize.X))/2)
- xOffset = math.ceil(math.floor(math.fmod(totalPixelsX,guiObjects[1].AbsoluteSize.Y))/2)
- end
-
- for i, child in ipairs(guiObjects) do
- if i < scrollPosition then
- --print("Hiding " .. child.Name)
- child.Visible = false
- else
- if pixelsRemainingY < 0 then
- --print("Out of Space " .. child.Name)
- child.Visible = false
- else
- --print("Laying out " .. child.Name)
- --GuiObject
- if setRowSize then rowSizeCounter = rowSizeCounter + 1 end
- if xCounter + child.AbsoluteSize.X >= totalPixelsX then
- if setRowSize then
- rowSize = rowSizeCounter - 1
- setRowSize = false
- end
- xCounter = 0
- pixelsRemainingY = pixelsRemainingY - child.AbsoluteSize.Y
- end
- child.Position = UDim2.new(child.Position.X.Scale,xCounter + xOffset, 0, totalPixelsY - pixelsRemainingY + yOffset)
- xCounter = xCounter + child.AbsoluteSize.X
- child.Visible = ((pixelsRemainingY - child.AbsoluteSize.Y) >= 0)
- lastChildSize = child.AbsoluteSize
- end
- end
- end
-
- scrollUpButton.Active = (scrollPosition > 1)
- if lastChildSize == 0 then
- scrollDownButton.Active = false
- else
- scrollDownButton.Active = ((pixelsRemainingY - lastChildSize.Y) < 0)
- end
- end
-
-
- local layoutSimpleScrollBar = function()
- local guiObjects = {}
-
- if orderList then
- for i, child in ipairs(orderList) do
- if child.Parent == frame then
- table.insert(guiObjects, child)
- end
- end
- else
- local children = frame:GetChildren()
- if children then
- for i, child in ipairs(children) do
- if child:IsA("GuiObject") then
- table.insert(guiObjects, child)
- end
- end
- end
- end
- if #guiObjects == 0 then
- scrollUpButton.Active = false
- scrollDownButton.Active = false
- scrollPosition = 1
- return
- end
-
- if scrollPosition > #guiObjects then
- scrollPosition = #guiObjects
- end
-
- local totalPixels = frame.AbsoluteSize.Y
- local pixelsRemaining = frame.AbsoluteSize.Y
-
- local pixelsBelowScrollbar = 0
- local pos = #guiObjects
- while pixelsBelowScrollbar < totalPixels and pos >= 1 do
- if pos >= scrollPosition then
- pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y
- else
- if pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y <= totalPixels then
- --It fits, so back up our scroll position
- pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y
- if scrollPosition <= 1 then
- scrollPosition = 1
- break
- else
- --print("Backing up ScrollPosition from -- " ..scrollPosition)
- scrollPosition = scrollPosition - 1
- end
- else
- break
- end
- end
- pos = pos - 1
- end
-
- --print("ScrollPosition = " .. scrollPosition)
- pos = scrollPosition
- for i, child in ipairs(guiObjects) do
- if i < scrollPosition then
- --print("Hiding " .. child.Name)
- child.Visible = false
- else
- if pixelsRemaining < 0 then
- --print("Out of Space " .. child.Name)
- child.Visible = false
- else
- --print("Laying out " .. child.Name)
- --GuiObject
- child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining)
- pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y
- child.Visible = (pixelsRemaining >= 0)
- end
- end
- end
- scrollUpButton.Active = (scrollPosition > 1)
- scrollDownButton.Active = (pixelsRemaining < 0)
- end
-
- local reentrancyGuard = false
- local recalculate = function()
- if reentrancyGuard then
- return
- end
- reentrancyGuard = true
- wait()
- local success, err = nil
- if style == "grid" then
- success, err = pcall(function() layoutGridScrollBar(frame) end)
- elseif style == "simple" then
- success, err = pcall(function() layoutSimpleScrollBar(frame) end)
- end
- if not success then print(err) end
-
- reentrancyGuard = false
- end
-
- local scrollUp = function()
- if scrollUpButton.Active then
- scrollPosition = scrollPosition - rowSize
- recalculate()
- end
- end
-
- local scrollDown = function()
- if scrollDownButton.Active then
- scrollPosition = scrollPosition + rowSize
- recalculate()
- end
- end
-
- local scrollMouseCount = 0
- scrollUpButton.MouseButton1Click:connect(
- function()
- --print("Up-MouseButton1Click")
- scrollMouseCount = scrollMouseCount + 1
- end)
- scrollUpButton.MouseLeave:connect(
- function()
- --print("Up-Leave")
- scrollMouseCount = scrollMouseCount + 1
- end)
-
- scrollUpButton.MouseButton1Down:connect(
- function()
- --print("Up-Down")
- scrollMouseCount = scrollMouseCount + 1
-
- scrollUp()
- local val = scrollMouseCount
- wait(0.5)
- while val == scrollMouseCount do
- if scrollUp() == false then
- break
- end
- wait(0.1)
- end
- end)
-
- scrollDownButton.MouseButton1Click:connect(
- function()
- --print("Down-Click")
- scrollMouseCount = scrollMouseCount + 1
- end)
- scrollDownButton.MouseLeave:connect(
- function()
- --print("Down-Leave")
- scrollMouseCount = scrollMouseCount + 1
- end)
- scrollDownButton.MouseButton1Down:connect(
- function()
- --print("Down-Down")
- scrollMouseCount = scrollMouseCount + 1
-
- scrollDown()
- local val = scrollMouseCount
- wait(0.5)
- while val == scrollMouseCount do
- if scrollDown() == false then
- break
- end
- wait(0.1)
- end
- end)
-
-
- frame.ChildAdded:connect(function()
- recalculate()
- end)
-
- frame.ChildRemoved:connect(function()
- recalculate()
- end)
-
- frame.Changed:connect(
- function(prop)
- if prop == "AbsoluteSize" then
- --Wait a heartbeat for it to sync in
- recalculate()
- end
- end)
- frame.AncestryChanged:connect(recalculate)
-
- return frame, scrollUpButton, scrollDownButton, recalculate
-end
-local function binaryGrow(min, max, fits)
- if min > max then
- return min
- end
- local biggestLegal = min
-
- while min <= max do
- local mid = min + math.floor((max - min) / 2)
- if fits(mid) and (biggestLegal == nil or biggestLegal < mid) then
- biggestLegal = mid
-
- --Try growing
- min = mid + 1
- else
- --Doesn't fit, shrink
- max = mid - 1
- end
- end
- return biggestLegal
-end
-
-
-local function binaryShrink(min, max, fits)
- if min > max then
- return min
- end
- local smallestLegal = max
-
- while min <= max do
- local mid = min + math.floor((max - min) / 2)
- if fits(mid) and (smallestLegal == nil or smallestLegal > mid) then
- smallestLegal = mid
-
- --It fits, shrink
- max = mid - 1
- else
- --Doesn't fit, grow
- min = mid + 1
- end
- end
- return smallestLegal
-end
-
-
-local function getGuiOwner(instance)
- while instance ~= nil do
- if instance:IsA("ScreenGui") or instance:IsA("BillboardGui") then
- return instance
- end
- instance = instance.Parent
- end
- return nil
-end
-
-t.AutoTruncateTextObject = function(textLabel)
- local text = textLabel.Text
-
- local fullLabel = textLabel:Clone()
- fullLabel.Name = "Full" .. textLabel.Name
- fullLabel.BorderSizePixel = 0
- fullLabel.BackgroundTransparency = 0
- fullLabel.Text = text
- fullLabel.TextXAlignment = Enum.TextXAlignment.Center
- fullLabel.Position = UDim2.new(0,-3,0,0)
- fullLabel.Size = UDim2.new(0,100,1,0)
- fullLabel.Visible = false
- fullLabel.Parent = textLabel
-
- local shortText = nil
- local mouseEnterConnection = nil
- local mouseLeaveConnection= nil
-
- local checkForResize = function()
- if getGuiOwner(textLabel) == nil then
- return
- end
- textLabel.Text = text
- if textLabel.TextFits then
- --Tear down the rollover if it is active
- if mouseEnterConnection then
- mouseEnterConnection:disconnect()
- mouseEnterConnection = nil
- end
- if mouseLeaveConnection then
- mouseLeaveConnection:disconnect()
- mouseLeaveConnection = nil
- end
- else
- local len = string.len(text)
- textLabel.Text = text .. "~"
-
- --Shrink the text
- local textSize = binaryGrow(0, len,
- function(pos)
- if pos == 0 then
- textLabel.Text = "~"
- else
- textLabel.Text = string.sub(text, 1, pos) .. "~"
- end
- return textLabel.TextFits
- end)
- shortText = string.sub(text, 1, textSize) .. "~"
- textLabel.Text = shortText
-
- --Make sure the fullLabel fits
- if not fullLabel.TextFits then
- --Already too small, grow it really bit to start
- fullLabel.Size = UDim2.new(0, 10000, 1, 0)
- end
-
- --Okay, now try to binary shrink it back down
- local fullLabelSize = binaryShrink(textLabel.AbsoluteSize.X,fullLabel.AbsoluteSize.X,
- function(size)
- fullLabel.Size = UDim2.new(0, size, 1, 0)
- return fullLabel.TextFits
- end)
- fullLabel.Size = UDim2.new(0,fullLabelSize+6,1,0)
-
- --Now setup the rollover effects, if they are currently off
- if mouseEnterConnection == nil then
- mouseEnterConnection = textLabel.MouseEnter:connect(
- function()
- fullLabel.ZIndex = textLabel.ZIndex + 1
- fullLabel.Visible = true
- --textLabel.Text = ""
- end)
- end
- if mouseLeaveConnection == nil then
- mouseLeaveConnection = textLabel.MouseLeave:connect(
- function()
- fullLabel.Visible = false
- --textLabel.Text = shortText
- end)
- end
- end
- end
- textLabel.AncestryChanged:connect(checkForResize)
- textLabel.Changed:connect(
- function(prop)
- if prop == "AbsoluteSize" then
- checkForResize()
- end
- end)
-
- checkForResize()
-
- local function changeText(newText)
- text = newText
- fullLabel.Text = text
- checkForResize()
- end
-
- return textLabel, changeText
-end
-
-local function TransitionTutorialPages(fromPage, toPage, transitionFrame, currentPageValue)
- if fromPage then
- fromPage.Visible = false
- if transitionFrame.Visible == false then
- transitionFrame.Size = fromPage.Size
- transitionFrame.Position = fromPage.Position
- end
- else
- if transitionFrame.Visible == false then
- transitionFrame.Size = UDim2.new(0.0,50,0.0,50)
- transitionFrame.Position = UDim2.new(0.5,-25,0.5,-25)
- end
- end
- transitionFrame.Visible = true
- currentPageValue.Value = nil
-
- local newsize, newPosition
- if toPage then
- --Make it visible so it resizes
- toPage.Visible = true
-
- newSize = toPage.Size
- newPosition = toPage.Position
-
- toPage.Visible = false
- else
- newSize = UDim2.new(0.0,50,0.0,50)
- newPosition = UDim2.new(0.5,-25,0.5,-25)
- end
- transitionFrame:TweenSizeAndPosition(newSize, newPosition, Enum.EasingDirection.InOut, Enum.EasingStyle.Quad, 0.3, true,
- function(state)
- if state == Enum.TweenStatus.Completed then
- transitionFrame.Visible = false
- if toPage then
- toPage.Visible = true
- currentPageValue.Value = toPage
- end
- end
- end)
-end
-
-t.CreateTutorial = function(name, tutorialKey, createButtons)
- local frame = Instance.new("Frame")
- frame.Name = "Tutorial-" .. name
- frame.BackgroundTransparency = 1
- frame.Size = UDim2.new(0.6, 0, 0.6, 0)
- frame.Position = UDim2.new(0.2, 0, 0.2, 0)
-
- local transitionFrame = Instance.new("Frame")
- transitionFrame.Name = "TransitionFrame"
- transitionFrame.Style = Enum.FrameStyle.RobloxRound
- transitionFrame.Size = UDim2.new(0.6, 0, 0.6, 0)
- transitionFrame.Position = UDim2.new(0.2, 0, 0.2, 0)
- transitionFrame.Visible = false
- transitionFrame.Parent = frame
-
- local currentPageValue = Instance.new("ObjectValue")
- currentPageValue.Name = "CurrentTutorialPage"
- currentPageValue.Value = nil
- currentPageValue.Parent = frame
-
- local boolValue = Instance.new("BoolValue")
- boolValue.Name = "Buttons"
- boolValue.Value = createButtons
- boolValue.Parent = frame
-
- local pages = Instance.new("Frame")
- pages.Name = "Pages"
- pages.BackgroundTransparency = 1
- pages.Size = UDim2.new(1,0,1,0)
- pages.Parent = frame
-
- local function getVisiblePageAndHideOthers()
- local visiblePage = nil
- local children = pages:GetChildren()
- if children then
- for i,child in ipairs(children) do
- if child.Visible then
- if visiblePage then
- child.Visible = false
- else
- visiblePage = child
- end
- end
- end
- end
- return visiblePage
- end
-
- local showTutorial = function(alwaysShow)
- if alwaysShow or UserSettings().GameSettings:GetTutorialState(tutorialKey) == false then
- print("Showing tutorial-",tutorialKey)
- local currentTutorialPage = getVisiblePageAndHideOthers()
-
- local firstPage = pages:FindFirstChild("TutorialPage1")
- if firstPage then
- TransitionTutorialPages(currentTutorialPage, firstPage, transitionFrame, currentPageValue)
- else
- error("Could not find TutorialPage1")
- end
- end
- end
-
- local dismissTutorial = function()
- local currentTutorialPage = getVisiblePageAndHideOthers()
-
- if currentTutorialPage then
- TransitionTutorialPages(currentTutorialPage, nil, transitionFrame, currentPageValue)
- end
-
- UserSettings().GameSettings:SetTutorialState(tutorialKey, true)
- end
-
- local gotoPage = function(pageNum)
- local page = pages:FindFirstChild("TutorialPage" .. pageNum)
- local currentTutorialPage = getVisiblePageAndHideOthers()
- TransitionTutorialPages(currentTutorialPage, page, transitionFrame, currentPageValue)
- end
-
- return frame, showTutorial, dismissTutorial, gotoPage
-end
-
-local function CreateBasicTutorialPage(name, handleResize, skipTutorial)
- local frame = Instance.new("Frame")
- frame.Name = "TutorialPage"
- frame.Style = Enum.FrameStyle.RobloxRound
- frame.Size = UDim2.new(0.6, 0, 0.6, 0)
- frame.Position = UDim2.new(0.2, 0, 0.2, 0)
- frame.Visible = false
-
- local frameHeader = Instance.new("TextLabel")
- frameHeader.Name = "Header"
- frameHeader.Text = name
- frameHeader.BackgroundTransparency = 1
- frameHeader.FontSize = Enum.FontSize.Size24
- frameHeader.Font = Enum.Font.ArialBold
- frameHeader.TextColor3 = Color3.new(1,1,1)
- frameHeader.TextXAlignment = Enum.TextXAlignment.Center
- frameHeader.TextWrap = true
- frameHeader.Size = UDim2.new(1,-55, 0, 22)
- frameHeader.Position = UDim2.new(0,0,0,0)
- frameHeader.Parent = frame
-
- local skipButton = Instance.new("ImageButton")
- skipButton.Name = "SkipButton"
- skipButton.AutoButtonColor = false
- skipButton.BackgroundTransparency = 1
- skipButton.Image = "http://www.roblox.com/asset/?id=37813546"
- skipButton.MouseButton1Click:connect(function()
- skipButton.Image = "http://www.roblox.com/asset/?id=37813546"
- skipTutorial()
- end)
- skipButton.MouseEnter:connect(function()
- skipButton.Image = "http://www.roblox.com/asset/?id=37813556"
- end)
- skipButton.MouseLeave:connect(function()
- skipButton.Image = "http://www.roblox.com/asset/?id=37813546"
- end)
- skipButton.Size = UDim2.new(0, 55, 0, 22)
- skipButton.Position = UDim2.new(1, -55, 0, 0)
- skipButton.Parent = frame
-
- local innerFrame = Instance.new("Frame")
- innerFrame.Name = "ContentFrame"
- innerFrame.BackgroundTransparency = 1
- innerFrame.Position = UDim2.new(0,0,0,22)
- innerFrame.Parent = frame
-
- local nextButton = Instance.new("TextButton")
- nextButton.Name = "NextButton"
- nextButton.Text = "Next"
- nextButton.TextColor3 = Color3.new(1,1,1)
- nextButton.Font = Enum.Font.Arial
- nextButton.FontSize = Enum.FontSize.Size18
- nextButton.Style = Enum.ButtonStyle.RobloxButtonDefault
- nextButton.Size = UDim2.new(0,80, 0, 32)
- nextButton.Position = UDim2.new(0.5, 5, 1, -32)
- nextButton.Active = false
- nextButton.Visible = false
- nextButton.Parent = frame
-
- local prevButton = Instance.new("TextButton")
- prevButton.Name = "PrevButton"
- prevButton.Text = "Previous"
- prevButton.TextColor3 = Color3.new(1,1,1)
- prevButton.Font = Enum.Font.Arial
- prevButton.FontSize = Enum.FontSize.Size18
- prevButton.Style = Enum.ButtonStyle.RobloxButton
- prevButton.Size = UDim2.new(0,80, 0, 32)
- prevButton.Position = UDim2.new(0.5, -85, 1, -32)
- prevButton.Active = false
- prevButton.Visible = false
- prevButton.Parent = frame
-
- innerFrame.Size = UDim2.new(1,0,1,-22-35)
-
- local parentConnection = nil
-
- local function basicHandleResize()
- if frame.Visible and frame.Parent then
- local maxSize = math.min(frame.Parent.AbsoluteSize.X, frame.Parent.AbsoluteSize.Y)
- handleResize(200,maxSize)
- end
- end
-
- frame.Changed:connect(
- function(prop)
- if prop == "Parent" then
- if parentConnection ~= nil then
- parentConnection:disconnect()
- parentConnection = nil
- end
- if frame.Parent and frame.Parent:IsA("GuiObject") then
- parentConnection = frame.Parent.Changed:connect(
- function(parentProp)
- if parentProp == "AbsoluteSize" then
- wait()
- basicHandleResize()
- end
- end)
- basicHandleResize()
- end
- end
-
- if prop == "Visible" then
- basicHandleResize()
- end
- end)
-
- return frame, innerFrame
-end
-
-t.CreateTextTutorialPage = function(name, text, skipTutorialFunc)
- local frame = nil
- local contentFrame = nil
-
- local textLabel = Instance.new("TextLabel")
- textLabel.BackgroundTransparency = 1
- textLabel.TextColor3 = Color3.new(1,1,1)
- textLabel.Text = text
- textLabel.TextWrap = true
- textLabel.TextXAlignment = Enum.TextXAlignment.Left
- textLabel.TextYAlignment = Enum.TextYAlignment.Center
- textLabel.Font = Enum.Font.Arial
- textLabel.FontSize = Enum.FontSize.Size14
- textLabel.Size = UDim2.new(1,0,1,0)
-
- local function handleResize(minSize, maxSize)
- size = binaryShrink(minSize, maxSize,
- function(size)
- frame.Size = UDim2.new(0, size, 0, size)
- return textLabel.TextFits
- end)
- frame.Size = UDim2.new(0, size, 0, size)
- frame.Position = UDim2.new(0.5, -size/2, 0.5, -size/2)
- end
-
- frame, contentFrame = CreateBasicTutorialPage(name, handleResize, skipTutorialFunc)
- textLabel.Parent = contentFrame
-
- return frame
-end
-
-t.CreateImageTutorialPage = function(name, imageAsset, x, y, skipTutorialFunc)
- local frame = nil
- local contentFrame = nil
-
- local imageLabel = Instance.new("ImageLabel")
- imageLabel.BackgroundTransparency = 1
- imageLabel.Image = imageAsset
- imageLabel.Size = UDim2.new(0,x,0,y)
- imageLabel.Position = UDim2.new(0.5,-x/2,0.5,-y/2)
-
- local function handleResize(minSize, maxSize)
- size = binaryShrink(minSize, maxSize,
- function(size)
- return size >= x and size >= y
- end)
- if size >= x and size >= y then
- imageLabel.Size = UDim2.new(0,x, 0,y)
- imageLabel.Position = UDim2.new(0.5,-x/2, 0.5, -y/2)
- else
- if x > y then
- --X is limiter, so
- imageLabel.Size = UDim2.new(1,0,y/x,0)
- imageLabel.Position = UDim2.new(0,0, 0.5 - (y/x)/2, 0)
- else
- --Y is limiter
- imageLabel.Size = UDim2.new(x/y,0,1, 0)
- imageLabel.Position = UDim2.new(0.5-(x/y)/2, 0, 0, 0)
- end
- end
- frame.Size = UDim2.new(0, size, 0, size)
- frame.Position = UDim2.new(0.5, -size/2, 0.5, -size/2)
- end
-
- frame, contentFrame = CreateBasicTutorialPage(name, handleResize, skipTutorialFunc)
- imageLabel.Parent = contentFrame
-
- return frame
-end
-
-t.AddTutorialPage = function(tutorial, tutorialPage)
- local transitionFrame = tutorial.TransitionFrame
- local currentPageValue = tutorial.CurrentTutorialPage
-
- if not tutorial.Buttons.Value then
- tutorialPage.ContentFrame.Size = UDim2.new(1,0,1,-22)
- tutorialPage.NextButton.Parent = nil
- tutorialPage.PrevButton.Parent = nil
- end
-
- local children = tutorial.Pages:GetChildren()
- if children and #children > 0 then
- tutorialPage.Name = "TutorialPage" .. (#children+1)
- local previousPage = children[#children]
- if not previousPage:IsA("GuiObject") then
- error("All elements under Pages must be GuiObjects")
- end
-
- if tutorial.Buttons.Value then
- if previousPage.NextButton.Active then
- error("NextButton already Active on previousPage, please only add pages with RbxGui.AddTutorialPage function")
- end
- previousPage.NextButton.MouseButton1Click:connect(
- function()
- TransitionTutorialPages(previousPage, tutorialPage, transitionFrame, currentPageValue)
- end)
- previousPage.NextButton.Active = true
- previousPage.NextButton.Visible = true
-
- if tutorialPage.PrevButton.Active then
- error("PrevButton already Active on tutorialPage, please only add pages with RbxGui.AddTutorialPage function")
- end
- tutorialPage.PrevButton.MouseButton1Click:connect(
- function()
- TransitionTutorialPages(tutorialPage, previousPage, transitionFrame, currentPageValue)
- end)
- tutorialPage.PrevButton.Active = true
- tutorialPage.PrevButton.Visible = true
- end
-
- tutorialPage.Parent = tutorial.Pages
- else
- --First child
- tutorialPage.Name = "TutorialPage1"
- tutorialPage.Parent = tutorial.Pages
- end
-end
-
-t.Help =
- function(funcNameOrFunc)
- --input argument can be a string or a function. Should return a description (of arguments and expected side effects)
- if funcNameOrFunc == "CreatePropertyDropDownMenu" or funcNameOrFunc == t.CreatePropertyDropDownMenu then
- return "Function CreatePropertyDropDownMenu. " ..
- "Arguments: (instance, propertyName, enumType). " ..
- "Side effect: returns a container with a drop-down-box that is linked to the 'property' field of 'instance' which is of type 'enumType'"
- end
- if funcNameOrFunc == "CreateDropDownMenu" or funcNameOrFunc == t.CreateDropDownMenu then
- return "Function CreateDropDownMenu. " ..
- "Arguments: (items, onItemSelected). " ..
- "Side effect: Returns 2 results, a container to the gui object and a 'updateSelection' function for external updating. The container is a drop-down-box created around a list of items"
- end
- if funcNameOrFunc == "CreateMessageDialog" or funcNameOrFunc == t.CreateMessageDialog then
- return "Function CreateMessageDialog. " ..
- "Arguments: (title, message, buttons). " ..
- "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button"
- end
- if funcNameOrFunc == "CreateStyledMessageDialog" or funcNameOrFunc == t.CreateStyledMessageDialog then
- return "Function CreateStyledMessageDialog. " ..
- "Arguments: (title, message, style, buttons). " ..
- "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button, 'style' is a string, either Error, Notify or Confirm"
- end
- if funcNameOrFunc == "GetFontHeight" or funcNameOrFunc == t.GetFontHeight then
- return "Function GetFontHeight. " ..
- "Arguments: (font, fontSize). " ..
- "Side effect: returns the size in pixels of the given font + fontSize"
- end
- if funcNameOrFunc == "LayoutGuiObjects" or funcNameOrFunc == t.LayoutGuiObjects then
-
- end
- if funcNameOrFunc == "CreateScrollingFrame" or funcNameOrFunc == t.CreateScrollingFrame then
- return "Function CreateScrollingFrame. " ..
- "Arguments: (orderList, style) " ..
- "Side effect: returns 4 objects, (scrollFrame, scrollUpButton, scrollDownButton, recalculateFunction). 'scrollFrame' can be filled with GuiObjects. It will lay them out and allow scrollUpButton/scrollDownButton to interact with them. Orderlist is optional (and specifies the order to layout the children. Without orderlist, it uses the children order. style is also optional, and allows for a 'grid' styling if style is passed 'grid' as a string. recalculateFunction can be called when a relayout is needed (when orderList changes)"
- end
- if funcNameOrFunc == "AutoTruncateTextObject" or funcNameOrFunc == t.AutoTruncateTextObject then
- return "Function AutoTruncateTextObject. " ..
- "Arguments: (textLabel) " ..
- "Side effect: returns 2 objects, (textLabel, changeText). The 'textLabel' input is modified to automatically truncate text (with ellipsis), if it gets too small to fit. 'changeText' is a function that can be used to change the text, it takes 1 string as an argument"
- end
- if funcNameOrFunc == "CreateSlider" or funcNameOrFunc == t.CreateSlider then
- return "Function CreateSlider. " ..
- "Arguments: (steps, width, position) " ..
- "Side effect: returns 2 objects, (sliderGui, sliderPosition). The 'steps' argument specifies how many different positions the slider can hold along the bar. 'width' specifies in pixels how wide the bar should be (modifiable afterwards if desired). 'position' argument should be a UDim2 for slider positioning. 'sliderPosition' is an IntValue whose current .Value specifies the specific step the slider is currently on."
- end
- end
-
-local NewPlayerListGui = Instance.new("ScreenGui",script.Parent)
-NewPlayerListGui.Name = "NewPlayerList"
-
-coroutine.resume(coroutine.create(function()
-NewPlayerListGui.Parent = game.CoreGui
-if game.CoreGui:FindFirstChild("NewPlayerList") then
-game.CoreGui["NewPlayerList"].Parent = nil
-end end))
-
-local localTesting = true
-
-local friendWord = "Friend"
-local friendWordLowercase = "friend"
-
-local testFriendingPlaces = {}
-testFriendingPlaces[41324860] = true
-local enableFriendingGlobally = false
-
-local testPlayerListPlaces = {}
-testPlayerListPlaces[41324860] = true
-testPlayerListPlaces[10042455] = true
-local enablePlayerListGlobally = false
-
-local bigEasingStyle = Enum.EasingStyle.Back
-local smallEasingStyle = Enum.EasingStyle.Quart
-local lightBackground = true
-
-local function waitForChild(instance, name)
- while not instance:FindFirstChild(name) do
- instance.ChildAdded:wait()
- end
-end
-
-local function waitForProperty(instance, prop)
- while not instance[prop] do
- instance.Changed:wait()
- end
-end
-
-local function Color3I(r,g,b)
- return Color3.new(r/255,g/255,b/255)
-end
-
-function robloxLock(instance)
-end
-
-function ArrayRemove(t, obj)
- for i, obj2 in ipairs(t) do
- if obj == obj2 then
- table.remove(t, i)
- return true
- end
- end
- return false
-end
-
-local function getPlayers()
- local result = {}
- local players = game:GetService("Players"):GetChildren()
- if players then
- for i, player in ipairs(players) do
- if player:IsA("Player") then
- table.insert(result, player)
- end
- end
- end
- return result
-end
-
-local brickColorTable = {}
-for i = 0, 63 do
- brickColorTable[BrickColor.palette(i).Name] = BrickColor.palette(i).Color
-end
-
-local function remapColor(i, j)
- brickColorTable[BrickColor.palette(i).Name] = BrickColor.palette(j).Color
-end
-
-remapColor(13, 12)
-remapColor(14, 12)
-remapColor(15, 12)
-remapColor(61, 29)
-remapColor(63, 62)
-remapColor(56, 50)
-remapColor(45, 53)
-remapColor(51, 20)
-remapColor(4, 20)
-remapColor(59, 35)
-remapColor(60, 29)
-
-local function getColor(brickColor)
- if brickColorTable[brickColor.Name] then
- return brickColorTable[brickColor.Name]
- else
- return brickColor.Color;
- end
-end
-
-
-
-local function getTeams()
- local result = {}
- local teams = game:GetService("Teams"):GetChildren()
- for i, team in ipairs(teams) do
- if team:IsA("Team") then
- table.insert(result, team)
- end
- end
- return result
-end
-
-local supportFriends = false
-local currentBoardType = "PlayerList"
-local currentStatCount = 0
-
-local createBoardsFunction = nil
-
-
-local playerTable = {}
-local teamTable = {}
-local teamColorTable = {}
-
-local removePlayerFunction = nil
-local recreatePlayerFunction = nil
-local addPlayerFunction = function(player)
- if recreatePlayerFunction then
- recreatePlayerFunction(player)
- end
-end
-local sortPlayerListsFunction = nil
-
-local minimizedState = nil
-local bigWindowImposter = nil
-local smallWindowPosition = UDim2.new(0, -20, 0,5)--UDim2.new(0, 0, 0,0)
-local smallWindowSize = UDim2.new(1,0,1,0)--UDim2.new(1,5,1,0)
-local bigWindowSize = UDim2.new(0.6,0,0.6,0)
-local bigWindowPosition = UDim2.new(.2, 0, .2,0)
-
-local debounceTeamsChanged = false
-
-local currentWindowState = "Small"
-local previousWindowState = nil
-local transitionWindowsFunction = nil
-
-local container = nil
-local topRightTrayContainer = nil
-
-local playerContextMenu = nil
-local contextMenuElements = {}
-
-local function addContextMenuLabel(getText1, getText2, isVisible)
- local t = {}
- t.Type = "Label"
- t.GetText1 = getText1
- t.GetText2 = getText2
- t.IsVisible = isVisible
- table.insert(contextMenuElements, t)
-end
-local function addContextMenuButton(text, isVisible, isActive, doIt)
- local t = {}
- t.Text = text
- t.Type = "Button"
- t.IsVisible = isVisible
- t.IsActive = isActive
- t.DoIt = doIt
- table.insert(contextMenuElements, t)
-end
-
-local function getFriendStatus(player)
- if player == game.Players.LocalPlayer then
- return Enum.FriendStatus.NotFriend
- else
- return game.Players.LocalPlayer:GetFriendStatus(player)
- end
-end
---Populate the ContextMenus
-addContextMenuLabel(
- --GetText1
- function(player)
- return "Loading..."
- end,
- --GetText2
- nil,
- --IsVisible
- function(player)
- return getFriendStatus(player) == Enum.FriendStatus.Unknown
- end)
-
---[[
-addContextMenuLabel(
- --GetText1
- function(player)
- return player.Name
- end,
- --GetText2
- nil,
- --IsVisible
- function(player)
- return true
- end)]]--
-addContextMenuButton("Send " .. friendWord .. " Request",
- --IsVisible
- function(player)
- return getFriendStatus(player) == Enum.FriendStatus.NotFriend
- end,
- --IsActive
- function(player)
- return true
- end,
- --DoIt
- function(player)
- return game.Players.LocalPlayer:RequestFriendship(player)
- end
-)
-addContextMenuButton("Un" .. friendWordLowercase,
- --IsVisible
- function(player)
- return getFriendStatus(player) == Enum.FriendStatus.Friend
- end,
- --IsActive
- function(player)
- return true
- end,
- --DoIt
- function(player)
- return game.Players.LocalPlayer:RevokeFriendship(player)
- end
-)
-addContextMenuButton("Accept " .. friendWord .. " Request",
- --IsVisible
- function(player)
- return getFriendStatus(player) == Enum.FriendStatus.FriendRequestReceived
- end,
- --IsActive
- function(player)
- return true
- end,
- --DoIt
- function(player)
- return game.Players.LocalPlayer:RequestFriendship(player)
- end
-)
-
-addContextMenuButton("Deny " .. friendWord .. " Request",
- --IsVisible
- function(player)
- return getFriendStatus(player) == Enum.FriendStatus.FriendRequestReceived
- end,
- --IsActive
- function(player)
- return true
- end,
- --DoIt
- function(player)
- return game.Players.LocalPlayer:RevokeFriendship(player)
- end
-)
-
-addContextMenuButton("Cancel " .. friendWord .. " Request",
- --IsVisible
- function(player)
- return getFriendStatus(player) == Enum.FriendStatus.FriendRequestSent
- end,
- --IsActive
- function(player)
- return true
- end,
- --DoIt
- function(player)
- return game.Players.LocalPlayer:RevokeFriendship(player)
- end
-)
-
-
-local function getStatColumns(players)
- for i, player in ipairs(players) do
- local leaderstats = player:FindFirstChild("leaderstats")
- if leaderstats then
- --print(player, " is King of the List")
- local stats = {}
- local children = leaderstats:GetChildren()
- if children then
- for i, stat in ipairs(children) do
- if stat:IsA("IntValue") then
- table.insert(stats, stat.Name)
- else
- --TODO: This should check for IntValue only but current ScoreHud does not
- table.insert(stats, stat.Name)
- end
- end
- end
- return stats
- end
- end
- return nil
-end
-
-local function determineBoardType()
- local players = getPlayers()
-
- local foundLeaderstats = false
- local numStats = 0
- local foundTeam = false
-
- local stats = getStatColumns(players)
- if stats then
- foundLeaderstats = true
- numStats = #stats
- end
-
- for i, player in ipairs(players) do
- if not foundTeam then
- if not player.Neutral then
- foundTeam = true
- break
- end
- end
- end
-
- if foundLeaderstats and foundTeam then
- return "TeamScore", numStats
- elseif foundLeaderstats then
- return "PlayerScore", numStats
- elseif foundTeam then
- return "TeamList", numStats
- else
- return "PlayerList", numStats
- end
-end
-
-local function toggleBigWindow()
- if container == nil then
- return
- end
-
- if currentWindowState == "Big" then
- --Hide it
- if previousWindowState == nil or previousWindowState == "Big" or previousWindowState == "None" then
- transitionWindowsFunction("None")
- else
- transitionWindowsFunction("Small")
- end
- else
- previousWindowState = currentWindowState
- transitionWindowsFunction("Big")
- end
-end
-local previousBigPlayerList = nil
-local function rebuildBoard(owner, boardType, numStats)
- print("RebuildBoard")
- if topRightTrayContainer == nil then
- topRightTrayContainer = owner:FindFirstChild("PlayerListTopRightFrame")
- if topRightTrayContainer == nil then
- topRightTrayContainer = Instance.new("Frame")
- topRightTrayContainer.Name = "PlayerListTopRightFrame"
- topRightTrayContainer.BackgroundTransparency = 1
- topRightTrayContainer.Size = UDim2.new(0.2, 16, 0.42, 16)--UDim2.new(0.2, 0, 0.42, 0)
- topRightTrayContainer.Position = UDim2.new(0.8, 0, 0, 0)--UDim2.new(0.8, 0, 0, 0)
- topRightTrayContainer.Parent = container
- end
- end
- if minimizedState == nil then
- minimizedState = Instance.new("Frame")
- minimizedState.Name = "MinimizedPlayerlist"
- minimizedState.BackgroundTransparency = 1
- minimizedState.Position = UDim2.new(1, -166, 0,0) --UDim2.new(1, -153, 0,0)
- minimizedState.Size = UDim2.new(0, 151, 0, 30)
-
- --[[local playerListButton = Instance.new("ImageButton")
- playerListButton.Name = "GoBigButton"
- playerListButton.Image = "rbxasset://textures/ui/playerlist_hidden_maximize.png"
- playerListButton.BackgroundTransparency = 1
- playerListButton.Size = UDim2.new(0.0, 116, 0, 30)
- playerListButton.Position = UDim2.new(0, 35, 0, 0)
- playerListButton.MouseButton1Click:connect(
- function()
- toggleBigWindow()
- end)
- playerListButton.Parent = minimizedState]]
-
- playerListButton = Instance.new("ImageButton")
- playerListButton.Name = "GoSmallButton"
- playerListButton.Image = "rbxasset://textures/ui/playerlist_hidden_small.png"
- playerListButton.BackgroundTransparency = 1
- playerListButton.Size = UDim2.new(0.0, 35, 0, 30)
- playerListButton.Position = UDim2.new(1, -35, 0, 0)
- playerListButton.MouseButton1Click:connect(
- function()
- transitionWindowsFunction("Small")
- end)
- playerListButton.Parent = minimizedState
-
- minimizedState.Visible = false
- robloxLock(minimizedState)
- minimizedState.Parent = topRightTrayContainer
- end
- if bigWindowImposter == nil then
- bigWindowImposter = owner:FindFirstChild("BigPlayerListWindowImposter")
- if bigWindowImposter == nil then
- bigWindowImposter = Instance.new("Frame")
- bigWindowImposter.Name = "BigPlayerListWindowImposter"
- bigWindowImposter.Visible = false
- --bigWindowImposter.Style = Enum.FrameStyle.RobloxRound
- bigWindowImposter.BackgroundColor3 = Color3.new(0,0,0)
- bigWindowImposter.BackgroundTransparency = 0.7
- bigWindowImposter.BorderSizePixel = 0
- --bigWindowImposter.Size = UDim2.new(0.4, 0, 0.4, 0)
- bigWindowImposter.Size = UDim2.new(0.4, 7, 0.4, 7)
- bigWindowImposter.Position = UDim2.new(0.3, 0, 0.3, 0)
- robloxLock(bigWindowImposter)
- bigWindowImposter.Parent = container
- end
- end
- if container == nil or container ~= owner then
- container = owner
-
- topRightTrayContainer.Parent = container
- bigWindowImposter.Parent = container
- end
-
- local smallVisible = true
- local bigVisible = false
- if container then
- if topRightTrayContainer then
- --Delete the old boards
- if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then
- smallVisible = topRightTrayContainer.SmallPlayerlist.Visible
- topRightTrayContainer.SmallPlayerlist.Parent = nil
- print("Removed small playerlist")
- else
- print("Did not remove small playerlist")
- end
- end
- if container:FindFirstChild("BigPlayerlist") then
- bigVisible = container.BigPlayerlist.Visible or (previousBigPlayerList ~= nil)
- container.BigPlayerlist.Parent = nil
- if previousBigPlayerList ~= nil then
- pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end)
- previousBigPlayerList = nil
- end
- end
- end
-
- local smallBoard, bigBoard = createBoardsFunction(boardType, numStats)
- if smallBoard then
- smallBoard.Visible = smallVisible
- smallBoard.Parent = topRightTrayContainer
- end
- if bigBoard then
- if bigVisible then
- previousBigPlayerList = bigBoard
- local centerDialogSupported, msg = pcall(function() game.GuiService:AddCenterDialog(previousBigPlayerList, Enum.CenterDialogType.PlayerInitiatedDialog,
- function()
- previousBigPlayerList.Visible = true
- end)
- end)
- bigBoard.Visible = bigVisible
- else
- bigBoard.Visible = false
- end
- bigBoard.Parent = container
- end
- return container
-end
-
-
-local function showBigPlayerWindow()
- if container:FindFirstChild("BigPlayerlist") then
- if container.BigPlayerlist.Visible then
- return
- end
- end
-
- bigWindowImposter.Visible = true
- bigWindowImposter:TweenSizeAndPosition(bigWindowSize, bigWindowPosition, Enum.EasingDirection.Out, bigEasingStyle, 0.3, true,
- function(state)
- if state == Enum.TweenStatus.Completed then
- bigWindowImposter.Visible = false
- if container:FindFirstChild("BigPlayerlist") then
- container.BigPlayerlist.Visible = true
- end
- end
- end)
-end
-
-local function hideBigPlayerWindow(completed)
- if playerContextMenu then
- playerContextMenu.Visible = false
- end
-
- if container:FindFirstChild("BigPlayerlist") then
- if container.BigPlayerlist.Visible == false and bigWindowImposter.Visible == false then
- if completed then
- completed()
- end
- --Already completely hidden
- return
- end
- container.BigPlayerlist.Visible = false
- end
-
- local completedFunction = completed
- bigWindowImposter.Visible = true
- bigWindowImposter:TweenSizeAndPosition(UDim2.new(0.4, 0, 0.4, 0), UDim2.new(0.3, 0, 0.3, 0), Enum.EasingDirection.In, Enum.EasingStyle.Quart, 0.15, true,
- function(state)
- if state == Enum.TweenStatus.Completed then
- bigWindowImposter.Visible = false
- if completedFunction then
- completedFunction()
- end
- end
- end)
-end
-local function hideSmallPlayerWindow(completed)
- if playerContextMenu then
- playerContextMenu.Visible = false
- end
- if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then
- local completedFunction = completed
- if topRightTrayContainer.SmallPlayerlist.Visible then
- topRightTrayContainer.SmallPlayerlist:TweenPosition(UDim2.new(1,0,smallWindowPosition.Y.Scale, smallWindowPosition.Y.Offset), Enum.EasingDirection.Out, smallEasingStyle, 0.3, true,
- function(state)
- --print(state)
- if state == Enum.TweenStatus.Completed then
- if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then
- topRightTrayContainer.SmallPlayerlist.Visible = false
- end
- if completedFunction then
- completedFunction()
- end
- end
- end)
- return
- end
- end
- if completed then
- completed()
- end
-end
-
-
-transitionWindowsFunction = function(desiredState)
- if desiredState == "Big" then
- minimizedState.Visible = false
- hideSmallPlayerWindow()
-
- if previousBigPlayerList ~= nil then
- if previousBigPlayerList ~= container:FindFirstChild("BigPlayerlist") then
- pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end)
- previousBigPlayerList = nil
- previousBigPlayerList = container:FindFirstChild("BigPlayerlist")
- end
- else
- previousBigPlayerList = container:FindFirstChild("BigPlayerlist")
- end
-
- if previousBigPlayerList then
- local firstShow = false
- local centerDialogSupported, msg = pcall(function() game.GuiService:AddCenterDialog(previousBigPlayerList, Enum.CenterDialogType.PlayerInitiatedDialog,
- function()
- if not firstShow then
- showBigPlayerWindow()
- firstShow = true
- else
- previousBigPlayerList.Visible = true
- end
- end)
- end)
- if centerDialogSupported == false then
- print("Exception", msg)
- showBigPlayerWindow()
- end
- else
- showBigPlayerWindow()
- end
- currentWindowState = "Big"
- elseif desiredState == "Small" then
- minimizedState.Visible = false
- if previousBigPlayerList ~= nil then
- pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end)
- previousBigPlayerList = nil
- end
-
- hideBigPlayerWindow()
- if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then
- if not topRightTrayContainer.SmallPlayerlist.Visible or topRightTrayContainer.SmallPlayerlist.Position ~= smallWindowPosition then
- topRightTrayContainer.SmallPlayerlist.Visible = true
- topRightTrayContainer.SmallPlayerlist:TweenPosition(smallWindowPosition, Enum.EasingDirection.Out, smallEasingStyle, 0.3, true)
- end
- end
- currentWindowState = "Small"
- elseif desiredState == "None" then
- if previousBigPlayerList ~= nil then
- pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end)
- previousBigPlayerList = nil
- end
-
- local smallDone = false
- local bigDone = false
- hideSmallPlayerWindow(
- function()
- smallDone = true
- if bigDone and smallDone then
- minimizedState.Visible = true
- end
- end)
- hideBigPlayerWindow(
- function()
- bigDone = true
- if bigDone and smallDone then
- minimizedState.Visible = true
- end
- end)
- currentWindowState = "None"
- end
-end
-
-local function getStatValuesForPlayer(player)
- local leaderstats = player:FindFirstChild("leaderstats")
- if leaderstats then
- local children = leaderstats:GetChildren()
- if children then
- local result = {}
- --Just go based on position
- for i, stat in ipairs(children) do
- if stat:IsA("IntValue") then
- table.insert(result, stat)
- else
- table.insert(result, 0)
- end
- end
-
- return result, leaderstats
- end
- end
- return nil
-end
-
---ChildAdded on Player (if it's name is "leaderstats")
-
-if UserSettings and LoadLibrary then
-
- RbxGui,msg = t
- print("Libraries loaded")
-
- local function createTeamName(name, color)
- local fontHeight = 20 --RbxGui.GetFontHeight(Enum.Font.ArialBold, Enum.FontSize.Size18)
- local frame = Instance.new("Frame")
- frame.Name = "Team-" .. name
- frame.BorderSizePixel = 0
- frame.BackgroundTransparency = 0.5
- frame.BackgroundColor3 = Color3.new(1,1,1)
- frame.Size = UDim2.new(1, 0, 0, fontHeight)
- frame.Position = UDim2.new(0,0,0,0)
-
- local label = Instance.new("TextLabel")
- label.Name = "NameLabel"
- label.Text = " " .. name
- label.Font = Enum.Font.ArialBold
- label.FontSize = Enum.FontSize.Size18
- label.Position = UDim2.new(0,0,0,0)
- label.Size = UDim2.new(1,0,1,0)
- label.TextColor3 = Color3.new(1,1,1)
- label.BackgroundTransparency = 0.5
- label.BackgroundColor3 = getColor(color)
- label.BorderSizePixel = 0
- label.TextXAlignment = Enum.TextXAlignment.Left
- label = RbxGui.AutoTruncateTextObject(label)
- label.Parent = frame
-
- return frame
- end
-
- local function getFriendStatusIcon(friendStatus)
- if friendStatus == Enum.FriendStatus.Unknown or friendStatus == Enum.FriendStatus.NotFriend then
- return nil
- elseif friendStatus == Enum.FriendStatus.Friend then
- return "rbxasset://textures/ui/PlayerlistFriendIcon.png"
- elseif friendStatus == Enum.FriendStatus.FriendRequestSent then
- return "rbxasset://textures/ui/PlayerlistFriendRequestSentIcon.png"
- elseif friendStatus == Enum.FriendStatus.FriendRequestReceived then
- return "rbxasset://textures/ui/PlayerlistFriendRequestReceivedIcon.png"
- else
- error("Unknown FriendStatus: " .. friendStatus)
- end
- end
-
- local function getMembershipTypeIcon(membershipType)
- --TODO: replace with proper icons
- if membershipType == Enum.MembershipType.None then
- return ""
- elseif membershipType == Enum.MembershipType.BuildersClub then
- return "rbxasset://textures/ui/TinyBcIcon.png"
- elseif membershipType == Enum.MembershipType.TurboBuildersClub then
- return "rbxasset://textures/ui/TinyTbcIcon.png"
- elseif membershipType == Enum.MembershipType.OutrageousBuildersClub then
- return "rbxasset://textures/ui/TinyObcIcon.png"
- else
- error("Uknown membershipType" .. membershipType)
- end
- end
-
-
- local function updatePlayerFriendStatus(nameObject, friendStatus)
- local fontHeight = 20 --RbxGui.GetFontHeight(Enum.Font.ArialBold, Enum.FontSize.Size14)
-
- local friendIconImage = getFriendStatusIcon(friendStatus)
- nameObject.MembershipTypeLabel.FriendStatusLabel.Visible = (friendIconImage ~= nil)
-
- if friendIconImage ~= nil then
- --Show friend icon
- nameObject.MembershipTypeLabel.FriendStatusLabel.Image = friendIconImage
- nameObject.NameLabel.Position =UDim2.new(0,2*fontHeight,0,1)
- nameObject.NameLabel.Size = UDim2.new(1,-2*fontHeight,1,-2)
- else
- --Hide the friend icon
- nameObject.NameLabel.Position = UDim2.new(0,fontHeight+1,0,1)
- nameObject.NameLabel.Size = UDim2.new(1,-(fontHeight+1),1,-2)
- end
- end
- local function updatePlayerName(nameObject, membershipStatus, teamColor)
- local fontHeight = 20 --RbxGui.GetFontHeight(Enum.Font.ArialBold, Enum.FontSize.Size14)
-
- nameObject.Size = UDim2.new(1,0,0,fontHeight)
- nameObject.MembershipTypeLabel.Image = getMembershipTypeIcon(membershipStatus)
- end
-
-
- local function updatePlayerNameColor(player, teamColor)
- local function updatePlayerNameColorHelper(nameObject)
- if teamColor ~= nil then
- nameObject.NameLabel.TextColor3 = getColor(teamColor)
- nameObject.NameLabel.FullNameLabel.TextColor3 = getColor(teamColor)
- else
- nameObject.NameLabel.TextColor3 = Color3.new(1,1,1)
- nameObject.NameLabel.FullNameLabel.TextColor3 = Color3.new(1,1,1)
- end
- end
-
- updatePlayerNameColorHelper(playerTable[player].NameObjectSmall)
- updatePlayerNameColorHelper(playerTable[player].NameObjectBig)
- end
-
-
- local function createPlayerName(name, membershipStatus, teamColor, friendStatus)
- local frame = Instance.new("Frame")
- frame.Name = "Player_" .. name
- if lightBackground then
- frame.BackgroundColor3 = Color3.new(1,1,1)
- else
- frame.BackgroundColor3 = Color3.new(1,1,1)
- end
- frame.BackgroundTransparency = 0.5
- frame.BorderSizePixel = 0
-
- local membershipStatusLabel = Instance.new("ImageLabel")
- membershipStatusLabel.Name = "MembershipTypeLabel"
- membershipStatusLabel.BackgroundTransparency = 1
- membershipStatusLabel.Size = UDim2.new(1,0,1,0)
- membershipStatusLabel.Position = UDim2.new(0,0,0,0)
- membershipStatusLabel.SizeConstraint = Enum.SizeConstraint.RelativeYY
- membershipStatusLabel.Parent = frame
-
- local friendStatusLabel = Instance.new("ImageLabel")
- friendStatusLabel.Name = "FriendStatusLabel"
- friendStatusLabel.Visible = false
- friendStatusLabel.BackgroundTransparency = 1
- friendStatusLabel.Size = UDim2.new(1,0,1,0)
- friendStatusLabel.Position = UDim2.new(1,0,0,0)
- friendStatusLabel.Parent = membershipStatusLabel
-
- local changeNameFunction
- local nameLabel = Instance.new("TextLabel")
- nameLabel.Name = "NameLabel"
- nameLabel.Text = name
- nameLabel.Font = Enum.Font.ArialBold
- nameLabel.FontSize = Enum.FontSize.Size14
- nameLabel.TextColor3 = Color3.new(1,1,1)
- nameLabel.BackgroundTransparency = 1
- nameLabel.BackgroundColor3 = Color3.new(0,0,0)
- nameLabel.TextXAlignment = Enum.TextXAlignment.Left
- nameLabel, changeNameFunction = RbxGui.AutoTruncateTextObject(nameLabel)
- nameLabel.Parent = frame
-
- updatePlayerName(frame, membershipStatus, teamColor)
- if supportFriends then
- updatePlayerFriendStatus(frame, friendStatus)
- else
- updatePlayerFriendStatus(frame, Enum.FriendStatus.NotFriend)
- end
- return frame, changeNameFunction
- end
-
- local function createStatColumn(i, numColumns, isTeam, color3, isHeader)
- local textLabel = Instance.new("TextLabel")
- textLabel.Name = "Stat" .. i
- textLabel.TextColor3 = Color3.new(1,1,1)
- textLabel.TextXAlignment = Enum.TextXAlignment.Right
- textLabel.TextYAlignment = Enum.TextYAlignment.Center
- textLabel.FontSize = Enum.FontSize.Size14
- if isHeader then
- textLabel.FontSize = Enum.FontSize.Size18
- else
- textLabel.FontSize = Enum.FontSize.Size14
- end
- if isHeader or isTeam then
- textLabel.Font = Enum.Font.ArialBold
- else
- textLabel.Font = Enum.Font.Arial
- end
-
- if isTeam then
- textLabel.BackgroundColor3 = color3
- textLabel.Text = 0
- else
- textLabel.BackgroundColor3 = Color3.new(0,0,0)
- textLabel.Text = ""
- end
- textLabel.BackgroundTransparency = 1
- if i == numColumns then
- textLabel.Size = UDim2.new(1/numColumns, -6, 1, 0)
- else
- textLabel.Size = UDim2.new(1/numColumns, -4, 1, 0)
- end
-
- textLabel.Position = UDim2.new((i-1) * (1/numColumns), 0, 0, 0)
- return RbxGui.AutoTruncateTextObject(textLabel)
- end
-
- local function createStatHeaders(stats, numColumns, isBig)
- local frame = Instance.new("Frame")
- frame.Name = "Headers"
- frame.BorderSizePixel = 0
- frame.BackgroundColor3 = Color3.new(0,0,0)
- frame.BackgroundTransparency = 1
-
- local nameSize
- if isBig then
- nameSize = 0.5
- elseif numColumns == 1 then
- nameSize = 0.7
- elseif numColumns == 2 then
- nameSize = 0.6
- else
- nameSize = 0.45
- end
- frame.Size = UDim2.new(1-nameSize, 0, 1,0)
- if isBig then
- frame.Position = UDim2.new(nameSize,-25, 0,0)
- else
- frame.Position = UDim2.new(nameSize,0, 0,0)
- end
-
- local i = 1
- while i <= numColumns do
- local headerColumn, changeText = createStatColumn(i, numColumns, false, nil, true)
- changeText(stats[i])
- headerColumn.Parent = frame
- i = i + 1
- end
- return frame, textChangers
- end
-
- local function createStatColumns(nameObject, numColumns, isTeam, isBig)
- local frame = Instance.new("Frame")
- frame.Name = nameObject.Name .. "_WithStats"
- frame.BorderSizePixel = 0
- frame.BackgroundColor3 = nameObject.BackgroundColor3
- frame.BackgroundTransparency = nameObject.BackgroundTransparency
- frame.Size = nameObject.Size
- frame.Position = nameObject.Position
-
- nameObject.BackgroundTransparency = 1
-
- if numColumns == 0 then
- nameObject.Size = UDim2.new(1,0,1,0)
- nameObject.Position = UDim2.new(0,0,0,0)
- nameObject.Parent = frame
- return frame
- end
-
- local statFrame = Instance.new("Frame")
- statFrame.Name = "Stats"
- if isTeam then
- statFrame.BorderSizePixel = 0
- statFrame.BackgroundColor3 = nameObject.NameLabel.BackgroundColor3
- statFrame.BackgroundTransparency = nameObject.NameLabel.BackgroundTransparency
- else
- statFrame.BackgroundTransparency = 1
- end
-
- local nameSize
- if isBig then
- nameSize = 0.5
- elseif numColumns == 1 then
- nameSize = 0.7
- elseif numColumns == 2 then
- nameSize = 0.6
- else
- nameSize = 0.45
- end
- nameObject.Size = UDim2.new(nameSize, 0, 1, 0)
- nameObject.Position = UDim2.new(0, 0, 0, 0)
- statFrame.Size = UDim2.new(1-nameSize,0, 1,0)
- statFrame.Position = UDim2.new(nameSize,0, 0,0)
-
- nameObject.Parent = frame
- statFrame.Parent = frame
-
- local textChangers = {}
- local i = 1
- while i <= numColumns do
- local statColumn, changeText = createStatColumn(i, numColumns, isTeam, statFrame.BackgroundColor3)
- statColumn.Parent = statFrame
- table.insert(textChangers, changeText)
-
- i = i + 1
- end
-
- return frame, statFrame, textChangers
- end
-
- local function createAlternatingRows(objects)
- for i, line in ipairs(objects) do
- if i % 2 == 0 then
- line.BackgroundTransparency = 1
- else
- line.BackgroundTransparency = 0.95
- end
- end
- end
- local removeFromTeam = nil
-
- local function clearTableEntry(obj, tableInfo)
- if tableInfo.MainObjectSmall then
- tableInfo.MainObjectSmall.Parent = nil
- tableInfo.MainObjectSmall = nil
- end
- if tableInfo.MainObjectBig then
- tableInfo.MainObjectBig.Parent = nil
- tableInfo.MainObjectBig = nil
- end
- if tableInfo.Connections then
- for i, connection in ipairs(tableInfo.Connections) do
- connection:disconnect()
- end
- tableInfo.Connections = nil
- end
- if tableInfo.LeaderStatConnections then
- for i, connection in ipairs(tableInfo.LeaderStatConnections) do
- connection:disconnect()
- end
- tableInfo.LeaderStatConnections = nil
- end
- if tableInfo.CurrentTeam then
- removeFromTeam(obj)
- tableInfo.CurrentTeam = nil
- end
- if tableInfo.Players then
- for i, player in ipairs(tableInfo.Players) do
- playerTable[player].CurrentTeam = nil
- end
- tableInfo.Players = {}
- end
- if tableInfo.StatValues then
- tableInfo.StatValues = nil
- end
- end
-
- local function resetPlayerTable()
- for player, info in pairs(playerTable) do
- clearTableEntry(player, info)
- playerTable[player] = nil
- end
- playerTable = {}
- end
-
- local function resetTeamTable()
- for team, info in pairs(teamTable) do
- clearTableEntry(team, info)
- teamTable[team] = nil
- end
- teamTable = {}
- teamColorTable = {}
- end
-
- local function getBoardTypeInfo()
- local isTeam = (currentBoardType == "TeamScore" or currentBoardType == "TeamList")
- local isScore = (currentBoardType == "TeamScore" or currentBoardType == "PlayerScore")
- return isTeam, isScore
- end
-
-
- local function recomputeTeamScore(team, column)
- if not team or team == "Neutral" then
- return
- end
-
- local function recomputeScoreHelper(statChangers)
- if statChangers and column <= #statChangers then
- local sum = 0
- for i, p in ipairs(teamTable[team].Players) do
- if playerTable[p].StatValues and column <= #playerTable[p].StatValues then
- sum = sum + playerTable[p].StatValues[column].Value
- end
- end
- statChangers[column](sum)
- end
- end
-
- recomputeScoreHelper(teamTable[team].StatChangersSmall)
- recomputeScoreHelper(teamTable[team].StatChangersBig)
- end
- local function recomputeCompleteTeamScore(team)
- local col = 1
- while col <= currentStatCount do
- recomputeTeamScore(team, col)
- col = col + 1
- end
- end
- removeFromTeam = function(player)
- if playerTable[player].CurrentTeam ~= nil then
- ArrayRemove(teamTable[playerTable[player].CurrentTeam].Players, player)
- recomputeCompleteTeamScore(playerTable[player].CurrentTeam)
- playerTable[player].CurrentTeam = nil
- end
- end
-
- local function assignToTeam(player)
- local isTeam, isScore = getBoardTypeInfo()
-
- if isTeam then
- local newTeam = nil
-
- if player.Neutral or teamColorTable[player.TeamColor.Name] == nil then
- newTeam = "Neutral"
- else
- newTeam = teamColorTable[player.TeamColor.Name]
- end
-
- if playerTable[player].CurrentTeam == newTeam then
- return
- end
-
- removeFromTeam(player)
-
- playerTable[player].CurrentTeam = newTeam
- table.insert(teamTable[newTeam].Players, player)
-
- if newTeam == "Neutral" then
- updatePlayerNameColor(player, nil)
- else
- updatePlayerNameColor(player, player.TeamColor)
- end
-
- recomputeCompleteTeamScore(newTeam)
-
- --Relayout
- if sortPlayerListsFunction then
- sortPlayerListsFunction()
- end
- end
- end
-
- local function buildTeamObject(team, numStatColumns, suffix)
- local isTeam, isScore = getBoardTypeInfo()
- local teamObject = createTeamName(team.Name, team.TeamColor)
- if not teamTable[team] then
- teamTable[team] = {}
- end
- teamTable[team]["NameObject" .. suffix] = teamObject
- if isScore then
- local statObject
- local textChangers
- teamObject, statObject, textChangers = createStatColumns(teamObject, numStatColumns, true, suffix == "Big")
- teamTable[team]["StatObject" .. suffix] = statObject
- teamTable[team]["StatChangers" .. suffix] = textChangers
- end
- teamTable[team]["MainObject" .. suffix] = teamObject
- if not teamTable[team].Players then
- teamTable[team].Players = {}
- end
- return teamObject
- end
-
- local currentContextMenuPlayer = nil
- local function updatePlayerContextMenu(player)
- currentContextMenuPlayer = player
- local elementHeight = 20
- local function highlight(button)
- button.TextColor3 = Color3.new(0,0,0)
- button.BackgroundColor3 = Color3.new(0.8,0.8,0.8)
- end
- local function clearHighlight(button)
- button.TextColor3 = Color3.new(1,1,1)
- button.BackgroundColor3 = Color3.new(0,0,0)
- end
- if playerContextMenu == nil then
- playerContextMenu = Instance.new("Frame")
- playerContextMenu.Name = "PlayerListContextMenu"
- playerContextMenu.BackgroundTransparency = 1
- playerContextMenu.Visible = false
-
- local playerContextMenuButton = Instance.new("TextButton")
- playerContextMenuButton.Name = "PlayerListContextMenuButton"
- playerContextMenuButton.Text = ""
- playerContextMenuButton.Style = Enum.ButtonStyle.RobloxButtonDefault
- playerContextMenuButton.ZIndex = 4
- playerContextMenuButton.Size = UDim2.new(1, 0, 1, -20)
- playerContextMenuButton.Visible = true
- playerContextMenuButton.Parent = playerContextMenu
-
- for i, contextElement in ipairs(contextMenuElements) do
- local element = contextElement
- if element.Type == "Button" then
- local button = Instance.new("TextButton")
- button.Name = "ContextButton" .. i
- button.BackgroundColor3 = Color3.new(0,0,0)
- button.BorderSizePixel = 0
- button.TextXAlignment = Enum.TextXAlignment.Left
- button.Text = " " .. contextElement.Text
- button.Font = Enum.Font.Arial
- button.FontSize = Enum.FontSize.Size14
- button.Size = UDim2.new(1, 8, 0, elementHeight)
- button.TextColor3 = Color3.new(1,1,1)
- button.ZIndex = 4
- button.Parent = playerContextMenuButton
- button.MouseButton1Click:connect(function()
- if button.Active then
- local success, result = pcall(function() element.DoIt(currentContextMenuPlayer) end)
- playerContextMenu.Visible = false
- end
- end)
-
- button.MouseEnter:connect(function()
- if button.Active then
- highlight(button)
- end
- end)
- button.MouseLeave:connect(function()
- if button.Active then
- clearHighlight(button)
- end
- end)
-
- contextElement.Button = button
- contextElement.Element = button
- elseif element.Type == "Label" then
- local frame = Instance.new("Frame")
- frame.Name = "ContextLabel" .. i
- frame.BackgroundTransparency = 1
- frame.Size = UDim2.new(1, 8, 0, elementHeight)
-
- local label = Instance.new("TextLabel")
- label.Name = "Text1"
- label.BackgroundTransparency = 1
- label.BackgroundColor3 = Color3.new(1,1,1)
- label.BorderSizePixel = 0
- label.TextXAlignment = Enum.TextXAlignment.Left
- label.Font = Enum.Font.ArialBold
- label.FontSize = Enum.FontSize.Size14
- label.Position = UDim2.new(0.0, 0, 0, 0)
- label.Size = UDim2.new(0.5, 0, 1, 0)
- label.TextColor3 = Color3.new(1,1,1)
- label.ZIndex = 4
- label.Parent = frame
- element.Label1 = label
-
- if element.GetText2 then
- label = Instance.new("TextLabel")
- label.Name = "Text2"
- label.BackgroundTransparency = 1
- label.BackgroundColor3 = Color3.new(1,1,1)
- label.BorderSizePixel = 0
- label.TextXAlignment = Enum.TextXAlignment.Right
- label.Font = Enum.Font.Arial
- label.FontSize = Enum.FontSize.Size14
- label.Position = UDim2.new(0.5, 0, 0, 0)
- label.Size = UDim2.new(0.5, 0, 1, 0)
- label.TextColor3 = Color3.new(1,1,1)
- label.ZIndex = 4
- label.Parent = frame
- element.Label2 = label
- end
- frame.Parent = playerContextMenuButton
- element.Label = frame
- element.Element = frame
- end
- end
-
- playerContextMenu.ZIndex = 4
- playerContextMenu.MouseLeave:connect(function() playerContextMenu.Visible = false end)
- robloxLock(playerContextMenu)
- playerContextMenu.Parent = NewPlayerListGui
-
- end
-
- local elementPos = 0
- for i, contextElement in ipairs(contextMenuElements) do
- local isVisible = false
-
- if contextElement.IsVisible then
- local success, visible = pcall(function() return contextElement.IsVisible(currentContextMenuPlayer) end)
- if success then
- isVisible = visible
- else
- print("Error in IsVisible call: " .. visible)
- end
- end
-
- if contextElement.Type == "Button" then
- contextElement.Button.Visible = isVisible
- if contextElement.Button.Visible then
- isVisible = true
- clearHighlight(contextElement.Button)
- if contextElement.IsActive then
- local success, active = pcall(function() return contextElement.IsActive(currentContextMenuPlayer) end)
- if success then
- contextElement.Button.Active = active
- else
- print("Error in IsActive call: " .. active)
- end
- end
- if contextElement.Button.Active then
- contextElement.Button.TextColor3 = Color3.new(1,1,1)
- else
- contextElement.Button.TextColor3 = Color3.new(0.7,0.7,0.7)
- end
- end
- elseif contextElement.Type == "Label" then
- contextElement.Label.Visible = isVisible
- if contextElement.Label.Visible then
- local success, text = pcall(function() return contextElement.GetText1(currentContextMenuPlayer) end)
- if success then
- contextElement.Label1.Text = " " .. text
- else
- print("Error in GetText1 call: " .. text)
- end
-
- if contextElement.GetText2 then
- local success, text = pcall(function() return contextElement.GetText2(currentContextMenuPlayer) end)
- if success then
- contextElement.Label2.Text = " " .. text
- else
- print("Error in GetText2 call: " .. text)
- end
- end
- end
- end
- if isVisible then
- contextElement.Element.Position = UDim2.new(0,-4, 0, elementPos * elementHeight - 4)
- elementPos = elementPos + 1
- end
- end
- playerContextMenu.Size = UDim2.new(0, 150, 0, elementPos*elementHeight + 13 + 20)
- end
- local function showPlayerMenu(player, x, y)
- updatePlayerContextMenu(player)
- x = x - (playerContextMenu.AbsoluteSize.X/2)
- if x + playerContextMenu.AbsoluteSize.X >= NewPlayerListGui.AbsoluteSize.X then
- x = NewPlayerListGui.AbsoluteSize.X - playerContextMenu.AbsoluteSize.X
- end
- playerContextMenu.Visible = true
- playerContextMenu.Position = UDim2.new(0, x, 0, y-playerContextMenu.AbsoluteSize.Y)
- end
-
- local function buildPlayerObject(player, numStatColumns, suffix)
- local isTeam, isScore = getBoardTypeInfo()
-
- local playerObject = nil
- local changePlayerNameFunction = nil
- local currentColor = nil
- if isTeam and not player.Neutral then
- currentColor = player.TeamColor.Color
- else
- currentColor = Color3.new(1,1,1)
- end
- playerObject, changePlayerNameFunction = createPlayerName(player.Name, player.MembershipType, currentColor, getFriendStatus(player))
-
- if not playerTable[player] then
- playerTable[player] = {}
- end
- if not playerTable[player].Connections then
- playerTable[player].Connections = {}
- end
- if not playerTable[player].CurrentTeam then
- playerTable[player].CurrentTeam = nil
- end
- playerTable[player]["NameObject" .. suffix] = playerObject
- playerTable[player]["ChangeName" .. suffix] = changePlayerNameFunction
-
- if isScore then
- local statObject = nil
- local textChangers = nil
- playerObject, statObject, textChangers = createStatColumns(playerObject, numStatColumns, false, suffix == "Big")
- playerTable[player]["StatObject" .. suffix]= statObject
- playerTable[player]["StatChangers" .. suffix] = textChangers
-
- local statValues, leaderstats = getStatValuesForPlayer(player)
- if not statValues or #statValues < numStatColumns then
- if not playerTable[player].LeaderStatConnections then
- playerTable[player].LeaderStatConnections = {}
- end
- --Setup a listener to see when this data gets filled in
- if not leaderstats then
- --print("No leaderstats for ", player)
- --We don't even have a leaderstats child, wait for one
- table.insert(playerTable[player].LeaderStatConnections,
- player.ChildAdded:connect(
- function(child)
- if child.Name == "leaderstats" then
- --print("Got a leaderstats for ", player)
-
- --Connections will be torn down
- recreatePlayerFunction(player)
- else
- --print("Unknown child, listening for connection")
- table.insert(playerTable[player].LeaderStatConnections,
- child.Changed:connect(
- function(prop)
- if prop == "Name" and child.Name == "leaderstats" then
- --Connections will be torn down
- recreatePlayerFunction(player)
- end
- end))
- end
- end))
- else
- --print("Need more children")
- --We have a leaderstats, but not enough children, recreate if we get them
- table.insert(playerTable[player].LeaderStatConnections,
- leaderstats.ChildAdded:connect(
- function(child)
- --TODO only look for IntValue
- recreatePlayerFunction(player)
- end)
- )
- table.insert(playerTable[player].LeaderStatConnections,
- leaderstats.AncestryChanged:connect(
- function(child)
- --We got deleted, try again
- recreatePlayerFunction(player)
- end)
- )
- end
- end
- if statValues then
- if not playerTable[player].StatValues then
- playerTable[player].StatValues = {}
- end
- local pos = 1
- while pos <= numStatColumns and pos <= #statValues do
- local currentColumn = pos
- local statValue = statValues[pos]
- local statChanger = textChangers[pos]
-
- local updateStat = function(val)
- statChanger(val)
- recomputeTeamScore(playerTable[player].CurrentTeam, currentColumn)
- end
- if pos > #playerTable[player].StatValues then
- table.insert(playerTable[player].StatValues, statValue)
- end
-
- table.insert(playerTable[player].Connections,
- statValue.Changed:connect(updateStat)
- )
- table.insert(playerTable[player].Connections,
- statValue.AncestryChanged:connect(
- function()
- recreatePlayerFunction(player)
- end)
- )
- updateStat(statValue.Value)
- pos = pos + 1
- end
- end
- end
-
- if supportFriends and player ~= game.Players.LocalPlayer and player.userId > 0 and game.Players.LocalPlayer.userId > 0 then
- local button = Instance.new("TextButton")
- button.Name = playerObject.Name .. "Button"
- button.Text = ""
- button.Active = false
- button.Size = playerObject.Size
- button.Position = playerObject.Position
- button.BackgroundColor3 = playerObject.BackgroundColor3
-
- local secondButton = Instance.new("TextButton")
- secondButton.Name = playerObject.Name .. "RealButton"
- secondButton.Text = ""
- secondButton.BackgroundTransparency = 1
- secondButton.BackgroundColor3 = playerObject.BackgroundColor3
- secondButton.Parent.BackgroundTransparency = 1
- secondButton.Parent.Visible = true
- secondButton.ZIndex = 2
- secondButton.Size = UDim2.new(1,0,1,0)
-
- local previousTransparency = nil
- table.insert(playerTable[player].Connections,
- secondButton.MouseEnter:connect(--button.MouseEnter:connect(
- function()
- if previousTransparency == nil then
- previousTransparency = secondButton--[[button]].BackgroundTransparency
- end
-
- if lightBackground then
- --button.BackgroundColor3 = Color3.new(0,0,0)
- --button.BackgroundTransparency = 0
- secondButton.Parent.BackgroundTransparency = 0
- else
- --button.BackgroundColor3 = Color3.new(1,1,1)
- --secondButton.button.BackgroundTransparency = 1--0.80
- secondButton.Parent.BackgroundTransparency = 1
- end
- end))
- table.insert(playerTable[player].Connections,
- secondButton.MouseLeave:connect(--button.MouseLeave:connect(
- function()
- if previousTransparency ~= nil then
- if lightBackground then
- --button.BackgroundColor3 = Color3.new(1,1,1)
- --button.BackgroundTransparency = previousTransparency
- else
- --secondButtonbutton.BackgroundColor3 = Color3.new(1,1,1)
- --nbutton.BackgroundTransparency = previousTransparency
- end
-
- previousTransparency = nil
- end
- secondButton.Parent.BackgroundTransparency = 1
- end))
-
- local mouseDownX, mouseDownY
- table.insert(playerTable[player].Connections,
- secondButton.MouseButton1Down:connect(function(x,y)
- mouseDownX = x
- mouseDownY = y
- end))
- table.insert(playerTable[player].Connections,
- secondButton.MouseButton1Click:connect(function()
- showPlayerMenu(player, mouseDownX, secondButton.AbsolutePosition.Y + secondButton.AbsoluteSize.Y )
- end))
- playerObject.BackgroundTransparency = 1
- playerObject.Size = UDim2.new(1,0,1,0)
- playerObject.Position = UDim2.new(0,0,0,0)
- playerObject.Parent = button
-
- playerTable[player]["MainObject" .. suffix] = button
-
- playerObject = button
- else
- playerTable[player]["MainObject" .. suffix] = playerObject
-
- if player == game.Players.LocalPlayer and supportFriends then
- table.insert(playerTable[player].Connections,
- player.FriendStatusChanged:connect(
- function(otherPlayer, friendStatus)
- if playerTable[otherPlayer] then
- updatePlayerFriendStatus(playerTable[otherPlayer]["NameObject" .. suffix], friendStatus)
- end
- end)
- )
- end
- end
- table.insert(playerTable[player].Connections,
- player.Changed:connect(
- function(prop)
- if prop == "MembershipType" then
- updatePlayerName(playerTable[player]["NameObject" .. suffix], player.MembershipType, currentColor)
- elseif prop == "Name" then
- playerTable[player]["ChangeName" .. suffix](player.Name)
- elseif prop == "Neutral" or prop == "TeamColor" then
- assignToTeam(player)
- end
- end)
- )
- return playerObject
- end
-
- local function orderScrollList(scrollOrder, objectName, scrollFrame)
- local pos = 0
- local order = {}
- local isTeam, isScore = getBoardTypeInfo()
- for i, obj in ipairs(scrollOrder) do
- order[obj] = 0
- end
-
- if isTeam then
- local teams = getTeams()
- for i, team in ipairs(teams) do
- --print(team, objectName, teamTable[team][objectName])
- order[teamTable[team][objectName]] = pos
- pos = pos + 1
- for i, player in ipairs(teamTable[team].Players) do
- if playerTable[player] then
- order[playerTable[player][objectName]] = pos
- pos = pos + 1
- end
- end
- end
-
- if #teamTable["Neutral"].Players > 0 then
- teamTable["Neutral"][objectName].Parent = scrollFrame
- order[teamTable["Neutral"][objectName]] = pos
- pos = pos + 1
- for i, player in ipairs(teamTable["Neutral"].Players) do
- order[playerTable[player][objectName]] = pos
- pos = pos + 1
- end
- else
- teamTable["Neutral"][objectName].Parent = nil
- end
- else
- local players = getPlayers()
- for i, player in ipairs(players) do
- order[playerTable[player][objectName]] = pos
- pos = pos + 1
- end
- end
-
- table.sort(scrollOrder,
- function(a,b)
- return order[a] < order[b]
- end)
- end
-
- local function createPlayerListBasics(frame, isBig)
- local headerFrame = Instance.new("Frame")
- headerFrame.Name = "Header"
- headerFrame.BackgroundTransparency = 1
- headerFrame.Size = UDim2.new(1,-13,0,26)
- headerFrame.Position = UDim2.new(0,0,0,0) --UDim2.new(0,-6,0,-6)
- headerFrame.Parent = frame
-
- local lowerPaneFrame = Instance.new("Frame")
- lowerPaneFrame.Name = "ScrollingArea"
- lowerPaneFrame.BackgroundTransparency = 1
- lowerPaneFrame.Size = UDim2.new(1,-3,1,-26)
- lowerPaneFrame.Position = UDim2.new(0,0,0,26)
- lowerPaneFrame.Parent = frame
-
- local scrollOrder = {}
- local scrollFrame, scrollUp, scrollDown, recalculateScroll = RbxGui.CreateScrollingFrame(scrollOrder)
-
- local scrollBar = Instance.new("Frame")
- scrollBar.Name = "ScrollBar"
- scrollBar.BackgroundTransparency = 0.9
- scrollBar.BackgroundColor3 = Color3.new(1,1,1)
- scrollBar.BorderSizePixel = 0
- scrollBar.Size = UDim2.new(0, 17, 1, -36)
- if isBig then scrollBar.Size = UDim2.new(0, 17, 1, -61) end
- scrollBar.Parent = lowerPaneFrame
-
- scrollFrame.Parent = lowerPaneFrame
- scrollUp.Parent = lowerPaneFrame
- scrollDown.Parent = lowerPaneFrame
-
- if isBig then
- scrollFrame.Position = UDim2.new(0,0,0,0) --UDim2.new(0,-7,0,0)
- scrollUp.Position = UDim2.new(1,-41,0,5) --UDim2.new(1,-19,0,0)
- scrollDown.Position = UDim2.new(1,-41,1,-35) -- UDim2.new(1,-19,1,-15)
- scrollBar.Position = UDim2.new(1, -41, 0, 24) -- UDim2.new(1, -19, 0, 19)
-
- scrollFrame.Size = UDim2.new(1,-48,1,0)
- headerFrame.Size = UDim2.new(1,-20,0,32)
-
- else
- scrollBar.Position = UDim2.new(1, -19, 0, 14) --UDim2.new(1, -17, 0, 19)
- scrollFrame.Position = UDim2.new(0,1,0,0) -- UDim2.new(0,-5,0,0)
- scrollUp.Position = UDim2.new(1,-19,0,-5) --UDim2.new(1,-17,0,0)
- scrollDown.Position = UDim2.new(1,-19,1,-20) --UDim2.new(1,-17,1,-15)
-
- lowerPaneFrame.Position = UDim2.new(0,0,0,30)
-
- local toggleScrollBar = function(visible)
- if visible then
- scrollFrame.Size = UDim2.new(1,-16,1,0)
- headerFrame.Size = UDim2.new(1,-16,0,32)
- else
- scrollFrame.Size = UDim2.new(1,0,1,0)--UDim2.new(1,5,1,0)
- headerFrame.Size = UDim2.new(1,5,0,32)
- end
- scrollUp.Visible = visible
- scrollDown.Visible = visible
- scrollBar.Visible = visible
- end
- scrollUp.Changed:connect(function(prop)
- if prop == "Active" then
- toggleScrollBar(scrollUp.Active or scrollDown.Active)
- end
- end)
-
- scrollDown.Changed:connect(function(prop)
- if prop == "Active" then
- toggleScrollBar(scrollUp.Active or scrollDown.Active)
- end
- end)
-
- toggleScrollBar(scrollUp.Active or scrollDown.Active)
- end
- return headerFrame, scrollFrame, recalculateScroll, scrollOrder
- end
-
- createBoardsFunction = function (boardType, numStatColumns)
- print("Create Boards")
- local smallFrame = Instance.new("Frame")
- smallFrame.Name = "SmallPlayerlist"
- smallFrame.Position = smallWindowPosition
- smallFrame.Active = false
- smallFrame.Size = smallWindowSize
- --smallFrame.Style = Enum.FrameStyle.RobloxRound
- smallFrame.BackgroundColor3 = Color3.new(0,0,0)
- smallFrame.BackgroundTransparency = 0.7
- smallFrame.BorderSizePixel = 0
-
- local bigFrame = Instance.new("Frame")
- bigFrame.Name = "BigPlayerlist"
- bigFrame.Size = bigWindowSize
- bigFrame.Position = bigWindowPosition
- --bigFrame.Style = Enum.FrameStyle.RobloxRound
- bigFrame.BackgroundColor3 = Color3.new(0,0,0)
- bigFrame.BackgroundTransparency = 0.7
- bigFrame.BorderSizePixel = 0
- bigFrame.Visible = false
-
- local bigFrameWrapper = Instance.new("Frame")
- bigFrameWrapper.Name = "Expander"
- --bigFrameWrapper.Size = UDim2.new(1,5,1,0)
- bigFrameWrapper.Size = UDim2.new(1,21,1,16)
- bigFrameWrapper.Position = UDim2.new(0, 0, 0,0)
- bigFrameWrapper.BackgroundTransparency = 1
- bigFrameWrapper.Parent = bigFrame
-
- local smallHeaderFrame, scrollFrameSmall, recalculateScrollSmall, scrollOrderSmall = createPlayerListBasics(smallFrame, false)
- local bigHeaderFrame, scrollFrameBig, recalculateScrollBig, scrollOrderBig = createPlayerListBasics(bigFrameWrapper, true)
-
- local playerListButton = Instance.new("ImageButton")
- playerListButton.Name = "GoBigButton"
- playerListButton.BackgroundTransparency = 1
- playerListButton.Image = "rbxasset://textures/ui/playerlist_small_maximize.png"
- playerListButton.Size = UDim2.new(0.0, 35, 0, 29)
- playerListButton.Position = UDim2.new(0, 0, 0, 0)
- playerListButton.MouseButton1Click:connect(
- function()
- toggleBigWindow()
- end)
- playerListButton.Parent = smallHeaderFrame
-
- playerListButton = Instance.new("ImageButton")
- playerListButton.Name = "CloseButton"
- playerListButton.BackgroundTransparency = 1
- playerListButton.Image = "rbxasset://textures/ui/playerlist_small_hide.png"
- playerListButton.Size = UDim2.new(0.0, 38, 0, 29)
- playerListButton.Position = UDim2.new(0, 35, 0, 0)
- playerListButton.MouseButton1Click:connect(
- function()
- transitionWindowsFunction("None")
- end)
- playerListButton.Parent = smallHeaderFrame
-
- playerListButton = Instance.new("ImageButton")
- playerListButton.Name = "CloseButton"
- playerListButton.Image = "rbxasset://textures/ui/playerlist_big_hide.png"
- playerListButton.BackgroundTransparency = 1
- playerListButton.Size = UDim2.new(0.0, 29, 0, 29)
- playerListButton.Position = UDim2.new(1, -30, 0.5, -15)
- playerListButton.MouseButton1Click:connect(
- function()
- toggleBigWindow()
- end)
- playerListButton.Parent = bigHeaderFrame
-
- local placeName = Instance.new("TextLabel")
- placeName.Name = "PlaceName"
- placeName.Text = " Player List"
- placeName.FontSize = Enum.FontSize.Size24
- placeName.TextXAlignment = Enum.TextXAlignment.Left
- placeName.Font = Enum.Font.ArialBold
- placeName.BackgroundTransparency = 1
- placeName.TextColor3 = Color3.new(1,1,1)
- placeName.Size = UDim2.new(0.5, 0, 1, 0)
- placeName.Position = UDim2.new(0, 0, 0.0, 0)
- placeName = RbxGui.AutoTruncateTextObject(placeName)
- placeName.Parent = bigHeaderFrame
-
-
- currentBoardType = boardType
- currentStatCount = numStatColumns
- local isTeam, isScore = getBoardTypeInfo()
- local players = getPlayers()
-
- if isScore then
- local statColumns = getStatColumns(players)
- numStatColumns = #statColumns
- if numStatColumns > 3 then
- numStatColumns = 3
- end
- createStatHeaders(statColumns, numStatColumns, false).Parent = smallHeaderFrame
- createStatHeaders(statColumns, currentStatCount, true).Parent = bigHeaderFrame
- end
-
- --Clean up all old stuff
- resetPlayerTable()
-
- for i, player in ipairs(players) do
- local playerObject = buildPlayerObject(player, numStatColumns, "Small")
- table.insert(scrollOrderSmall, playerObject)
- playerObject.Parent = scrollFrameSmall
-
- playerObject = buildPlayerObject(player, currentStatCount, "Big")
- table.insert(scrollOrderBig, playerObject)
- playerObject.Parent = scrollFrameBig
- end
-
- --Clean up old stuff
- resetTeamTable()
-
- local teamStatObjects = {}
- if isTeam then
- local teams = getTeams()
- local i = #teams
- while i >= 1 do
- --We go backwards so the "first" team color gets the team
- local team = teams[i]
- teamColorTable[team.TeamColor.Name] = team
- i = i - 1
- end
-
- --Adding/Removing a Team causes a full invalidation of the board
- for i, team in ipairs(teams) do
- local teamObject = buildTeamObject(team, numStatColumns, "Small")
- table.insert(scrollOrderSmall, teamObject)
- teamObject.Parent = scrollFrameSmall
-
- teamObject = buildTeamObject(team, currentStatCount, "Big")
- table.insert(scrollOrderBig, teamObject)
- teamObject.Parent = scrollFrameBig
- end
-
- teamTable["Neutral"] = {}
- teamTable["Neutral"].Players = {}
-
- local neutralTeamObject = createTeamName("Neutral", BrickColor.palette(8))
- teamTable["Neutral"].NameObjectSmall = neutralTeamObject
- teamTable["Neutral"].StatObjectSmall = nil
- teamTable["Neutral"].MainObjectSmall = neutralTeamObject
- table.insert(scrollOrderSmall, neutralTeamObject)
-
- neutralTeamObject = createTeamName("Neutral", BrickColor.palette(8))
- teamTable["Neutral"].NameObjectBig = neutralTeamObject
- teamTable["Neutral"].StatObjectBig = nil
- teamTable["Neutral"].MainObjectBig = neutralTeamObject
- table.insert(scrollOrderBig, neutralTeamObject)
-
- local neutralPlayers = {}
- for i, player in ipairs(players) do
- assignToTeam(player)
- end
- end
-
- removePlayerFunction = function(player)
- if playerTable[player] then
- ArrayRemove(scrollOrderSmall, playerTable[player].MainObjectSmall)
- ArrayRemove(scrollOrderBig, playerTable[player].MainObjectBig)
-
- clearTableEntry(player, playerTable[player])
-
- playerTable[player] = nil
- end
- end
- recreatePlayerFunction = function(player)
- removePlayerFunction(player)
-
- local playerObject = buildPlayerObject(player, numStatColumns, "Small")
- table.insert(scrollOrderSmall, playerObject)
- robloxLock(playerObject)
- playerObject.Parent = scrollFrameSmall
-
- playerObject = buildPlayerObject(player, currentStatCount, "Big")
- table.insert(scrollOrderBig, playerObject)
- robloxLock(playerObject)
- playerObject.Parent = scrollFrameBig
-
- local isTeam, isScore = getBoardTypeInfo()
- if isTeam then
- assignToTeam(player)
- end
-
- sortPlayerListsFunction()
- end
-
- sortPlayerListsFunction = function()
- orderScrollList(scrollOrderSmall, "MainObjectSmall", scrollFrameSmall)
- recalculateScrollSmall()
- createAlternatingRows(scrollOrderSmall)
-
- orderScrollList(scrollOrderBig, "MainObjectBig", scrollFrameBig)
- recalculateScrollBig()
- createAlternatingRows(scrollOrderBig)
- end
-
- sortPlayerListsFunction()
-
- robloxLock(smallFrame)
- robloxLock(bigFrame)
- return smallFrame, bigFrame
- end
-
- --Teams changing invalidates the whole board
- local function teamsChanged()
- if debounceTeamsChanged then
- return
- end
-
- debounceTeamsChanged = true
- wait()
- rebuildBoard(NewPlayerListGui, determineBoardType())
- debounceTeamsChanged = false
- end
-
-
- local checkIfBoardChanged = function()
- local newBoardType, numStats = determineBoardType()
- if newBoardType ~= currentBoardType or numStats ~= currentStatCount then
- --print("BoardChanged to " .. newBoardType .. " with " .. numStats .. " stats")
- rebuildBoard(NewPlayerListGui, newBoardType, numStats)
- end
- end
-
- local function buildPlayerList()
- waitForChild(game, "Players")
- waitForProperty(game.Players, "LocalPlayer")
-
- local playerListEnabled = testPlayerListPlaces[game.PlaceId] or enablePlayerListGlobally
- if localTesting and (game.PlaceId == 0) or (game.PlaceId == -1) then
- playerListEnabled = true
- end
- if not playerListEnabled then
- --No playerlist
- return
- end
-
- supportFriends = testFriendingPlaces[game.PlaceId] or enableFriendingGlobally
- if localTesting and (game.PlaceId == 0) or (game.PlaceId == -1) then
- supportFriends = false
- end
-
- local teams = game:GetService("Teams")
- if teams then
- local teamConnections = {}
-
- teams.ChildAdded:connect(
- function(child)
- if child:IsA("Team") then
- teamsChanged()
- teamConnections[child] = child.Changed:connect(
- function(prop)
- if prop == "TeamColor" or prop == "Name" then
- --Rebuild when things change
- teamsChanged()
- end
- end)
- end
- end)
- teams.ChildRemoved:connect(
- function(child)
- if child:IsA("Team") then
- if teamConnections[child] then
- teamConnections[child]:disconnect()
- teamConnections[child] = nil
- end
- teamsChanged()
- end
- end)
- end
-
- game.Players.ChildAdded:connect(
- function(player)
- if player:IsA("Player") then
- addPlayerFunction(player)
- end
- end)
-
- game.Players.ChildRemoved:connect(
- function(player)
- if player:IsA("Player") then
- if removePlayerFunction then
- removePlayerFunction(player)
- end
- end
- end)
-
- rebuildBoard(NewPlayerListGui, determineBoardType())
-
- delay(0,
- function()
- while true do
- wait(5)
- checkIfBoardChanged()
- end
- end)
- end
-
- buildPlayerList()
-end
- true
-
-
-
-
\ No newline at end of file
diff --git a/CoreGui2012.rbxm b/CoreGui2012.rbxm
deleted file mode 100644
index cbd6915..0000000
--- a/CoreGui2012.rbxm
+++ /dev/null
@@ -1,3601 +0,0 @@
-
- null
- nil
- -
-
- false
-
- GUI_Copy
- script.PlayerList:clone().Parent = game.StarterGui;
-script:remove();
- true
-
-
-
-
- false
-
- PlayerList
- local t = {}
-
-local function ScopedConnect(parentInstance, instance, event, signalFunc, syncFunc, removeFunc)
- local eventConnection = nil
-
- --Connection on parentInstance is scoped by parentInstance (when destroyed, it goes away)
- local tryConnect = function()
- if game:IsAncestorOf(parentInstance) then
- --Entering the world, make sure we are connected/synced
- if not eventConnection then
- eventConnection = instance[event]:connect(signalFunc)
- if syncFunc then syncFunc() end
- end
- else
- --Probably leaving the world, so disconnect for now
- if eventConnection then
- eventConnection:disconnect()
- if removeFunc then removeFunc() end
- end
- end
- end
-
- --Hook it up to ancestryChanged signal
- local connection = parentInstance.AncestryChanged:connect(tryConnect)
-
- --Now connect us if we're already in the world
- tryConnect()
-
- return connection
-end
-
-local function CreateButtons(frame, buttons, yPos, ySize)
- local buttonNum = 1
- local buttonObjs = {}
- for i, obj in ipairs(buttons) do
- local button = Instance.new("TextButton")
- button.Name = "Button" .. buttonNum
- button.Font = Enum.Font.Arial
- button.FontSize = Enum.FontSize.Size18
- button.AutoButtonColor = true
- button.Style = Enum.ButtonStyle.RobloxButtonDefault
- button.Text = obj.Text
- button.TextColor3 = Color3.new(1,1,1)
- button.MouseButton1Click:connect(obj.Function)
- button.Parent = frame
- buttonObjs[buttonNum] = button
-
- buttonNum = buttonNum + 1
- end
- local numButtons = buttonNum-1
-
- if numButtons == 1 then
- frame.Button1.Position = UDim2.new(0.35, 0, yPos.Scale, yPos.Offset)
- frame.Button1.Size = UDim2.new(.4,0,ySize.Scale, ySize.Offset)
- elseif numButtons == 2 then
- frame.Button1.Position = UDim2.new(0.1, 0, yPos.Scale, yPos.Offset)
- frame.Button1.Size = UDim2.new(.8/3,0, ySize.Scale, ySize.Offset)
-
- frame.Button2.Position = UDim2.new(0.55, 0, yPos.Scale, yPos.Offset)
- frame.Button2.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset)
- elseif numButtons >= 3 then
- local spacing = .1 / numButtons
- local buttonSize = .9 / numButtons
-
- buttonNum = 1
- while buttonNum <= numButtons do
- buttonObjs[buttonNum].Position = UDim2.new(spacing*buttonNum + (buttonNum-1) * buttonSize, 0, yPos.Scale, yPos.Offset)
- buttonObjs[buttonNum].Size = UDim2.new(buttonSize, 0, ySize.Scale, ySize.Offset)
- buttonNum = buttonNum + 1
- end
- end
-end
-
-local function setSliderPos(newAbsPosX,slider,sliderPosition,bar,steps)
-
- local newStep = steps - 1 --otherwise we really get one more step than we want
-
- local relativePosX = math.min(1, math.max(0, (newAbsPosX - bar.AbsolutePosition.X) / bar.AbsoluteSize.X ) )
- local wholeNum, remainder = math.modf(relativePosX * newStep)
- if remainder > 0.5 then
- wholeNum = wholeNum + 1
- end
- relativePosX = wholeNum/newStep
-
- local result = math.ceil(relativePosX * newStep)
- if sliderPosition.Value ~= (result + 1) then --onky update if we moved a step
- sliderPosition.Value = result + 1
-
- if relativePosX == 1 then
- slider.Position = UDim2.new(1,-slider.AbsoluteSize.X,slider.Position.Y.Scale,slider.Position.Y.Offset)
- else
- slider.Position = UDim2.new(relativePosX,0,slider.Position.Y.Scale,slider.Position.Y.Offset)
- end
- end
-
-end
-
-local function cancelSlide(areaSoak)
- areaSoak.Visible = false
- if areaSoakMouseMoveCon then areaSoakMouseMoveCon:disconnect() end
-end
-
-t.CreateStyledMessageDialog = function(title, message, style, buttons)
- local frame = Instance.new("Frame")
- frame.Size = UDim2.new(0.5, 0, 0, 165)
- frame.Position = UDim2.new(0.25, 0, 0.5, -72.5)
- frame.Name = "MessageDialog"
- frame.Active = true
- frame.Style = Enum.FrameStyle.RobloxRound
-
- local styleImage = Instance.new("ImageLabel")
- styleImage.Name = "StyleImage"
- styleImage.BackgroundTransparency = 1
- styleImage.Position = UDim2.new(0,5,0,15)
- if style == "error" or style == "Error" then
- styleImage.Size = UDim2.new(0, 71, 0, 71)
- styleImage.Image = "http://www.roblox.com/asset?id=42565285"
- elseif style == "notify" or style == "Notify" then
- styleImage.Size = UDim2.new(0, 71, 0, 71)
- styleImage.Image = "http://www.roblox.com/asset?id=42604978"
- elseif style == "confirm" or style == "Confirm" then
- styleImage.Size = UDim2.new(0, 74, 0, 76)
- styleImage.Image = "http://www.roblox.com/asset?id=42557901"
- else
- return t.CreateMessageDialog(title,message,buttons)
- end
- styleImage.Parent = frame
-
- local titleLabel = Instance.new("TextLabel")
- titleLabel.Name = "Title"
- titleLabel.Text = title
- titleLabel.BackgroundTransparency = 1
- titleLabel.TextColor3 = Color3.new(221/255,221/255,221/255)
- titleLabel.Position = UDim2.new(0, 80, 0, 0)
- titleLabel.Size = UDim2.new(1, -80, 0, 40)
- titleLabel.Font = Enum.Font.ArialBold
- titleLabel.FontSize = Enum.FontSize.Size36
- titleLabel.TextXAlignment = Enum.TextXAlignment.Center
- titleLabel.TextYAlignment = Enum.TextYAlignment.Center
- titleLabel.Parent = frame
-
- local messageLabel = Instance.new("TextLabel")
- messageLabel.Name = "Message"
- messageLabel.Text = message
- messageLabel.TextColor3 = Color3.new(221/255,221/255,221/255)
- messageLabel.Position = UDim2.new(0.025, 80, 0, 45)
- messageLabel.Size = UDim2.new(0.95, -80, 0, 55)
- messageLabel.BackgroundTransparency = 1
- messageLabel.Font = Enum.Font.Arial
- messageLabel.FontSize = Enum.FontSize.Size18
- messageLabel.TextWrap = true
- messageLabel.TextXAlignment = Enum.TextXAlignment.Left
- messageLabel.TextYAlignment = Enum.TextYAlignment.Top
- messageLabel.Parent = frame
-
- CreateButtons(frame, buttons, UDim.new(0, 105), UDim.new(0, 40) )
-
- return frame
-end
-
-t.CreateMessageDialog = function(title, message, buttons)
- local frame = Instance.new("Frame")
- frame.Size = UDim2.new(0.5, 0, 0.5, 0)
- frame.Position = UDim2.new(0.25, 0, 0.25, 0)
- frame.Name = "MessageDialog"
- frame.Active = true
- frame.Style = Enum.FrameStyle.RobloxRound
-
- local titleLabel = Instance.new("TextLabel")
- titleLabel.Name = "Title"
- titleLabel.Text = title
- titleLabel.BackgroundTransparency = 1
- titleLabel.TextColor3 = Color3.new(221/255,221/255,221/255)
- titleLabel.Position = UDim2.new(0, 0, 0, 0)
- titleLabel.Size = UDim2.new(1, 0, 0.15, 0)
- titleLabel.Font = Enum.Font.ArialBold
- titleLabel.FontSize = Enum.FontSize.Size36
- titleLabel.TextXAlignment = Enum.TextXAlignment.Center
- titleLabel.TextYAlignment = Enum.TextYAlignment.Center
- titleLabel.Parent = frame
-
- local messageLabel = Instance.new("TextLabel")
- messageLabel.Name = "Message"
- messageLabel.Text = message
- messageLabel.TextColor3 = Color3.new(221/255,221/255,221/255)
- messageLabel.Position = UDim2.new(0.025, 0, 0.175, 0)
- messageLabel.Size = UDim2.new(0.95, 0, .55, 0)
- messageLabel.BackgroundTransparency = 1
- messageLabel.Font = Enum.Font.Arial
- messageLabel.FontSize = Enum.FontSize.Size18
- messageLabel.TextWrap = true
- messageLabel.TextXAlignment = Enum.TextXAlignment.Left
- messageLabel.TextYAlignment = Enum.TextYAlignment.Top
- messageLabel.Parent = frame
-
- CreateButtons(frame, buttons, UDim.new(0.8,0), UDim.new(0.15, 0))
-
- return frame
-end
-
-t.CreateDropDownMenu = function(items, onSelect, forRoblox)
- local width = UDim.new(0, 100)
- local height = UDim.new(0, 32)
-
- local xPos = 0.055
- local frame = Instance.new("Frame")
- frame.Name = "DropDownMenu"
- frame.BackgroundTransparency = 1
- frame.Size = UDim2.new(width, height)
-
- local dropDownMenu = Instance.new("TextButton")
- dropDownMenu.Name = "DropDownMenuButton"
- dropDownMenu.TextWrap = true
- dropDownMenu.TextColor3 = Color3.new(1,1,1)
- dropDownMenu.Text = "Choose One"
- dropDownMenu.Font = Enum.Font.ArialBold
- dropDownMenu.FontSize = Enum.FontSize.Size18
- dropDownMenu.TextXAlignment = Enum.TextXAlignment.Left
- dropDownMenu.TextYAlignment = Enum.TextYAlignment.Center
- dropDownMenu.BackgroundTransparency = 1
- dropDownMenu.AutoButtonColor = true
- dropDownMenu.Style = Enum.ButtonStyle.RobloxButton
- dropDownMenu.Size = UDim2.new(1,0,1,0)
- dropDownMenu.Parent = frame
- dropDownMenu.ZIndex = 2
-
- local dropDownIcon = Instance.new("ImageLabel")
- dropDownIcon.Name = "Icon"
- dropDownIcon.Active = false
- dropDownIcon.Image = "http://www.roblox.com/asset/?id=45732894"
- dropDownIcon.BackgroundTransparency = 1
- dropDownIcon.Size = UDim2.new(0,11,0,6)
- dropDownIcon.Position = UDim2.new(1,-11,0.5, -2)
- dropDownIcon.Parent = dropDownMenu
- dropDownIcon.ZIndex = 2
-
- local itemCount = #items
- local dropDownItemCount = #items
- local useScrollButtons = false
- if dropDownItemCount > 6 then
- useScrollButtons = true
- dropDownItemCount = 6
- end
-
- local droppedDownMenu = Instance.new("TextButton")
- droppedDownMenu.Name = "List"
- droppedDownMenu.Text = ""
- droppedDownMenu.BackgroundTransparency = 1
- --droppedDownMenu.AutoButtonColor = true
- droppedDownMenu.Style = Enum.ButtonStyle.RobloxButton
- droppedDownMenu.Visible = false
- droppedDownMenu.Active = true --Blocks clicks
- droppedDownMenu.Position = UDim2.new(0,0,0,0)
- droppedDownMenu.Size = UDim2.new(1,0, (1 + dropDownItemCount)*.8, 0)
- droppedDownMenu.Parent = frame
- droppedDownMenu.ZIndex = 2
-
- local choiceButton = Instance.new("TextButton")
- choiceButton.Name = "ChoiceButton"
- choiceButton.BackgroundTransparency = 1
- choiceButton.BorderSizePixel = 0
- choiceButton.Text = "ReplaceMe"
- choiceButton.TextColor3 = Color3.new(1,1,1)
- choiceButton.TextXAlignment = Enum.TextXAlignment.Left
- choiceButton.TextYAlignment = Enum.TextYAlignment.Center
- choiceButton.BackgroundColor3 = Color3.new(1, 1, 1)
- choiceButton.Font = Enum.Font.Arial
- choiceButton.FontSize = Enum.FontSize.Size18
- if useScrollButtons then
- choiceButton.Size = UDim2.new(1,-13, .8/((dropDownItemCount + 1)*.8),0)
- else
- choiceButton.Size = UDim2.new(1, 0, .8/((dropDownItemCount + 1)*.8),0)
- end
- choiceButton.TextWrap = true
- choiceButton.ZIndex = 2
-
- local dropDownSelected = false
-
- local scrollUpButton
- local scrollDownButton
- local scrollMouseCount = 0
-
- local setZIndex = function(baseZIndex)
- droppedDownMenu.ZIndex = baseZIndex +1
- if scrollUpButton then
- scrollUpButton.ZIndex = baseZIndex + 3
- end
- if scrollDownButton then
- scrollDownButton.ZIndex = baseZIndex + 3
- end
-
- local children = droppedDownMenu:GetChildren()
- if children then
- for i, child in ipairs(children) do
- if child.Name == "ChoiceButton" then
- child.ZIndex = baseZIndex + 2
- elseif child.Name == "ClickCaptureButton" then
- child.ZIndex = baseZIndex
- end
- end
- end
- end
-
- local scrollBarPosition = 1
- local updateScroll = function()
- if scrollUpButton then
- scrollUpButton.Active = scrollBarPosition > 1
- end
- if scrollDownButton then
- scrollDownButton.Active = scrollBarPosition + dropDownItemCount <= itemCount
- end
-
- local children = droppedDownMenu:GetChildren()
- if not children then return end
-
- local childNum = 1
- for i, obj in ipairs(children) do
- if obj.Name == "ChoiceButton" then
- if childNum < scrollBarPosition or childNum >= scrollBarPosition + dropDownItemCount then
- obj.Visible = false
- else
- obj.Position = UDim2.new(0,0,((childNum-scrollBarPosition+1)*.8)/((dropDownItemCount+1)*.8),0)
- obj.Visible = true
- end
- obj.TextColor3 = Color3.new(1,1,1)
- obj.BackgroundTransparency = 1
-
- childNum = childNum + 1
- end
- end
- end
- local toggleVisibility = function()
- dropDownSelected = not dropDownSelected
-
- dropDownMenu.Visible = not dropDownSelected
- droppedDownMenu.Visible = dropDownSelected
- if dropDownSelected then
- setZIndex(4)
- else
- setZIndex(2)
- end
- if useScrollButtons then
- updateScroll()
- end
- end
- droppedDownMenu.MouseButton1Click:connect(toggleVisibility)
-
- local updateSelection = function(text)
- local foundItem = false
- local children = droppedDownMenu:GetChildren()
- local childNum = 1
- if children then
- for i, obj in ipairs(children) do
- if obj.Name == "ChoiceButton" then
- if obj.Text == text then
- obj.Font = Enum.Font.ArialBold
- foundItem = true
- scrollBarPosition = childNum
- else
- obj.Font = Enum.Font.Arial
- end
- childNum = childNum + 1
- end
- end
- end
- if not text then
- dropDownMenu.Text = "Choose One"
- scrollBarPosition = 1
- else
- if not foundItem then
- error("Invalid Selection Update -- " .. text)
- end
-
- if scrollBarPosition + dropDownItemCount > itemCount + 1 then
- scrollBarPosition = itemCount - dropDownItemCount + 1
- end
-
- dropDownMenu.Text = text
- end
- end
-
- local function scrollDown()
- if scrollBarPosition + dropDownItemCount <= itemCount then
- scrollBarPosition = scrollBarPosition + 1
- updateScroll()
- return true
- end
- return false
- end
- local function scrollUp()
- if scrollBarPosition > 1 then
- scrollBarPosition = scrollBarPosition - 1
- updateScroll()
- return true
- end
- return false
- end
-
- if useScrollButtons then
- --Make some scroll buttons
- scrollUpButton = Instance.new("ImageButton")
- scrollUpButton.Name = "ScrollUpButton"
- scrollUpButton.BackgroundTransparency = 1
- scrollUpButton.Image = "rbxasset://textures/ui/scrollbuttonUp.png"
- scrollUpButton.Size = UDim2.new(0,17,0,17)
- scrollUpButton.Position = UDim2.new(1,-11,(1*.8)/((dropDownItemCount+1)*.8),0)
- scrollUpButton.MouseButton1Click:connect(
- function()
- scrollMouseCount = scrollMouseCount + 1
- end)
- scrollUpButton.MouseLeave:connect(
- function()
- scrollMouseCount = scrollMouseCount + 1
- end)
- scrollUpButton.MouseButton1Down:connect(
- function()
- scrollMouseCount = scrollMouseCount + 1
-
- scrollUp()
- local val = scrollMouseCount
- wait(0.5)
- while val == scrollMouseCount do
- if scrollUp() == false then
- break
- end
- wait(0.1)
- end
- end)
-
- scrollUpButton.Parent = droppedDownMenu
-
- scrollDownButton = Instance.new("ImageButton")
- scrollDownButton.Name = "ScrollDownButton"
- scrollDownButton.BackgroundTransparency = 1
- scrollDownButton.Image = "rbxasset://textures/ui/scrollbuttonDown.png"
- scrollDownButton.Size = UDim2.new(0,17,0,17)
- scrollDownButton.Position = UDim2.new(1,-11,1,-11)
- scrollDownButton.Parent = droppedDownMenu
- scrollDownButton.MouseButton1Click:connect(
- function()
- scrollMouseCount = scrollMouseCount + 1
- end)
- scrollDownButton.MouseLeave:connect(
- function()
- scrollMouseCount = scrollMouseCount + 1
- end)
- scrollDownButton.MouseButton1Down:connect(
- function()
- scrollMouseCount = scrollMouseCount + 1
-
- scrollDown()
- local val = scrollMouseCount
- wait(0.5)
- while val == scrollMouseCount do
- if scrollDown() == false then
- break
- end
- wait(0.1)
- end
- end)
-
- local scrollbar = Instance.new("ImageLabel")
- scrollbar.Name = "ScrollBar"
- scrollbar.Image = "rbxasset://textures/ui/scrollbar.png"
- scrollbar.BackgroundTransparency = 1
- scrollbar.Size = UDim2.new(0, 18, (dropDownItemCount*.8)/((dropDownItemCount+1)*.8), -(17) - 11 - 4)
- scrollbar.Position = UDim2.new(1,-11,(1*.8)/((dropDownItemCount+1)*.8),17+2)
- scrollbar.Parent = droppedDownMenu
- end
-
- for i,item in ipairs(items) do
- -- needed to maintain local scope for items in event listeners below
- local button = choiceButton:clone()
- if forRoblox then
- button.RobloxLocked = true
- end
- button.Text = item
- button.Parent = droppedDownMenu
- button.MouseButton1Click:connect(function()
- --Remove Highlight
- button.TextColor3 = Color3.new(1,1,1)
- button.BackgroundTransparency = 1
-
- updateSelection(item)
- onSelect(item)
-
- toggleVisibility()
- end)
- button.MouseEnter:connect(function()
- --Add Highlight
- button.TextColor3 = Color3.new(0,0,0)
- button.BackgroundTransparency = 0
- end)
-
- button.MouseLeave:connect(function()
- --Remove Highlight
- button.TextColor3 = Color3.new(1,1,1)
- button.BackgroundTransparency = 1
- end)
- end
-
- --This does the initial layout of the buttons
- updateScroll()
-
- local bigFakeButton = Instance.new("TextButton")
- bigFakeButton.BackgroundTransparency = 1
- bigFakeButton.Name = "ClickCaptureButton"
- bigFakeButton.Size = UDim2.new(0, 4000, 0, 3000)
- bigFakeButton.Position = UDim2.new(0, -2000, 0, -1500)
- bigFakeButton.ZIndex = 1
- bigFakeButton.Text = ""
- bigFakeButton.Parent = droppedDownMenu
- bigFakeButton.MouseButton1Click:connect(toggleVisibility)
-
- dropDownMenu.MouseButton1Click:connect(toggleVisibility)
- return frame, updateSelection
-end
-
-t.CreatePropertyDropDownMenu = function(instance, property, enum)
-
- local items = enum:GetEnumItems()
- local names = {}
- local nameToItem = {}
- for i,obj in ipairs(items) do
- names[i] = obj.Name
- nameToItem[obj.Name] = obj
- end
-
- local frame
- local updateSelection
- frame, updateSelection = t.CreateDropDownMenu(names, function(text) instance[property] = nameToItem[text] end)
-
- ScopedConnect(frame, instance, "Changed",
- function(prop)
- if prop == property then
- updateSelection(instance[property].Name)
- end
- end,
- function()
- updateSelection(instance[property].Name)
- end)
-
- return frame
-end
-
-t.GetFontHeight = function(font, fontSize)
- if font == nil or fontSize == nil then
- error("Font and FontSize must be non-nil")
- end
-
- if font == Enum.Font.Legacy then
- if fontSize == Enum.FontSize.Size8 then
- return 12
- elseif fontSize == Enum.FontSize.Size9 then
- return 14
- elseif fontSize == Enum.FontSize.Size10 then
- return 15
- elseif fontSize == Enum.FontSize.Size11 then
- return 17
- elseif fontSize == Enum.FontSize.Size12 then
- return 18
- elseif fontSize == Enum.FontSize.Size14 then
- return 21
- elseif fontSize == Enum.FontSize.Size18 then
- return 27
- elseif fontSize == Enum.FontSize.Size24 then
- return 36
- elseif fontSize == Enum.FontSize.Size36 then
- return 54
- elseif fontSize == Enum.FontSize.Size48 then
- return 72
- else
- error("Unknown FontSize")
- end
- elseif font == Enum.Font.Arial or font == Enum.Font.ArialBold then
- if fontSize == Enum.FontSize.Size8 then
- return 8
- elseif fontSize == Enum.FontSize.Size9 then
- return 9
- elseif fontSize == Enum.FontSize.Size10 then
- return 10
- elseif fontSize == Enum.FontSize.Size11 then
- return 11
- elseif fontSize == Enum.FontSize.Size12 then
- return 12
- elseif fontSize == Enum.FontSize.Size14 then
- return 14
- elseif fontSize == Enum.FontSize.Size18 then
- return 18
- elseif fontSize == Enum.FontSize.Size24 then
- return 24
- elseif fontSize == Enum.FontSize.Size36 then
- return 36
- elseif fontSize == Enum.FontSize.Size48 then
- return 48
- else
- error("Unknown FontSize")
- end
- else
- error("Unknown Font " .. font)
- end
-end
-
-local function layoutGuiObjectsHelper(frame, guiObjects, settingsTable)
- local totalPixels = frame.AbsoluteSize.Y
- local pixelsRemaining = frame.AbsoluteSize.Y
- for i, child in ipairs(guiObjects) do
- if child:IsA("TextLabel") or child:IsA("TextButton") then
- local isLabel = child:IsA("TextLabel")
- if isLabel then
- pixelsRemaining = pixelsRemaining - settingsTable["TextLabelPositionPadY"]
- else
- pixelsRemaining = pixelsRemaining - settingsTable["TextButtonPositionPadY"]
- end
- child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining)
- child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, pixelsRemaining)
-
- if child.TextFits and child.TextBounds.Y < pixelsRemaining then
- child.Visible = true
- if isLabel then
- child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.TextBounds.Y + settingsTable["TextLabelSizePadY"])
- else
- child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.TextBounds.Y + settingsTable["TextButtonSizePadY"])
- end
-
- while not child.TextFits do
- child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.AbsoluteSize.Y + 1)
- end
- pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y
-
- if isLabel then
- pixelsRemaining = pixelsRemaining - settingsTable["TextLabelPositionPadY"]
- else
- pixelsRemaining = pixelsRemaining - settingsTable["TextButtonPositionPadY"]
- end
- else
- child.Visible = false
- pixelsRemaining = -1
- end
-
- else
- --GuiObject
- child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining)
- pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y
- child.Visible = (pixelsRemaining >= 0)
- end
- end
-end
-
-t.LayoutGuiObjects = function(frame, guiObjects, settingsTable)
- if not frame:IsA("GuiObject") then
- error("Frame must be a GuiObject")
- end
- for i, child in ipairs(guiObjects) do
- if not child:IsA("GuiObject") then
- error("All elements that are layed out must be of type GuiObject")
- end
- end
-
- if not settingsTable then
- settingsTable = {}
- end
-
- if not settingsTable["TextLabelSizePadY"] then
- settingsTable["TextLabelSizePadY"] = 0
- end
- if not settingsTable["TextLabelPositionPadY"] then
- settingsTable["TextLabelPositionPadY"] = 0
- end
- if not settingsTable["TextButtonSizePadY"] then
- settingsTable["TextButtonSizePadY"] = 12
- end
- if not settingsTable["TextButtonPositionPadY"] then
- settingsTable["TextButtonPositionPadY"] = 2
- end
-
- --Wrapper frame takes care of styled objects
- local wrapperFrame = Instance.new("Frame")
- wrapperFrame.Name = "WrapperFrame"
- wrapperFrame.BackgroundTransparency = 1
- wrapperFrame.Size = UDim2.new(1,0,1,0)
- wrapperFrame.Parent = frame
-
- for i, child in ipairs(guiObjects) do
- child.Parent = wrapperFrame
- end
-
- local recalculate = function()
- wait()
- layoutGuiObjectsHelper(wrapperFrame, guiObjects, settingsTable)
- end
-
- frame.Changed:connect(
- function(prop)
- if prop == "AbsoluteSize" then
- --Wait a heartbeat for it to sync in
- recalculate()
- end
- end)
- frame.AncestryChanged:connect(recalculate)
-
- layoutGuiObjectsHelper(wrapperFrame, guiObjects, settingsTable)
-end
-
-
-t.CreateSlider = function(steps,width,position)
- local sliderGui = Instance.new("Frame")
- sliderGui.Size = UDim2.new(1,0,1,0)
- sliderGui.BackgroundTransparency = 1
- sliderGui.Name = "SliderGui"
-
- local areaSoak = Instance.new("TextButton")
- areaSoak.Name = "AreaSoak"
- areaSoak.Text = ""
- areaSoak.BackgroundTransparency = 1
- areaSoak.Active = false
- areaSoak.Size = UDim2.new(1,0,1,0)
- areaSoak.Visible = false
- areaSoak.ZIndex = 4
- areaSoak.Parent = sliderGui
-
- local sliderPosition = Instance.new("IntValue")
- sliderPosition.Name = "SliderPosition"
- sliderPosition.Value = 0
- sliderPosition.Parent = sliderGui
-
- local id = math.random(1,100)
-
- local bar = Instance.new("Frame")
- bar.Name = "Bar"
- bar.BackgroundColor3 = Color3.new(0,0,0)
- if type(width) == "number" then
- bar.Size = UDim2.new(0,width,0,5)
- else
- bar.Size = UDim2.new(0,200,0,5)
- end
- bar.BorderColor3 = Color3.new(95/255,95/255,95/255)
- bar.ZIndex = 2
- bar.Parent = sliderGui
-
- if position["X"] and position["X"]["Scale"] and position["X"]["Offset"] and position["Y"] and position["Y"]["Scale"] and position["Y"]["Offset"] then
- bar.Position = position
- end
-
- local slider = Instance.new("ImageButton")
- slider.Name = "Slider"
- slider.BackgroundTransparency = 1
- slider.Image = "rbxasset://textures/ui/Slider.png"
- slider.Position = UDim2.new(0,0,0.5,-10)
- slider.Size = UDim2.new(0,20,0,20)
- slider.ZIndex = 3
- slider.Parent = bar
-
- local areaSoakMouseMoveCon = nil
-
- areaSoak.MouseLeave:connect(function()
- if areaSoak.Visible then
- cancelSlide(areaSoak)
- end
- end)
- areaSoak.MouseButton1Up:connect(function()
- if areaSoak.Visible then
- cancelSlide(areaSoak)
- end
- end)
-
- slider.MouseButton1Down:connect(function()
- areaSoak.Visible = true
- if areaSoakMouseMoveCon then areaSoakMouseMoveCon:disconnect() end
- areaSoakMouseMoveCon = areaSoak.MouseMoved:connect(function(x,y)
- setSliderPos(x,slider,sliderPosition,bar,steps)
- end)
- end)
-
- slider.MouseButton1Up:connect(function() cancelSlide(areaSoak) end)
-
- sliderPosition.Changed:connect(function(prop)
- local relativePosX = (sliderPosition.Value - 1) / steps
- slider.Position = UDim2.new(relativePosX,0,slider.Position.Y.Scale,slider.Position.Y.Offset)
- end)
-
- return sliderGui, sliderPosition
-
-end
-
-
-t.CreateScrollingFrame = function(orderList,scrollStyle)
- local frame = Instance.new("Frame")
- frame.Name = "ScrollingFrame"
- frame.BackgroundTransparency = 1
- frame.Size = UDim2.new(1,0,1,0)
-
- local scrollUpButton = Instance.new("ImageButton")
- scrollUpButton.Name = "ScrollUpButton"
- scrollUpButton.BackgroundTransparency = 1
- scrollUpButton.Image = "rbxasset://textures/ui/scrollbuttonUp.png"
- scrollUpButton.Size = UDim2.new(0,17,0,17)
-
-
- local scrollDownButton = Instance.new("ImageButton")
- scrollDownButton.Name = "ScrollDownButton"
- scrollDownButton.BackgroundTransparency = 1
- scrollDownButton.Image = "rbxasset://textures/ui/scrollbuttonDown.png"
- scrollDownButton.Size = UDim2.new(0,17,0,17)
-
- local style = "simple"
- if scrollStyle and tostring(scrollStyle) then
- style = scrollStyle
- end
-
- local scrollPosition = 1
- local rowSize = 1
-
- local layoutGridScrollBar = function()
- local guiObjects = {}
- if orderList then
- for i, child in ipairs(orderList) do
- if child.Parent == frame then
- table.insert(guiObjects, child)
- end
- end
- else
- local children = frame:GetChildren()
- if children then
- for i, child in ipairs(children) do
- if child:IsA("GuiObject") then
- table.insert(guiObjects, child)
- end
- end
- end
- end
- if #guiObjects == 0 then
- scrollUpButton.Active = false
- scrollDownButton.Active = false
- scrollPosition = 1
- return
- end
-
- if scrollPosition > #guiObjects then
- scrollPosition = #guiObjects
- end
-
- local totalPixelsY = frame.AbsoluteSize.Y
- local pixelsRemainingY = frame.AbsoluteSize.Y
-
- local totalPixelsX = frame.AbsoluteSize.X
-
- local xCounter = 0
- local rowSizeCounter = 0
- local setRowSize = true
-
- local pixelsBelowScrollbar = 0
- local pos = #guiObjects
- while pixelsBelowScrollbar < totalPixelsY and pos >= 1 do
- if pos >= scrollPosition then
- pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y
- else
- xCounter = xCounter + guiObjects[pos].AbsoluteSize.X
- rowSizeCounter = rowSizeCounter + 1
- if xCounter >= totalPixelsX then
- if setRowSize then
- rowSize = rowSizeCounter - 1
- setRowSize = false
- end
-
- rowSizeCounter = 0
- xCounter = 0
- if pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y <= totalPixelsY then
- --It fits, so back up our scroll position
- pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y
- if scrollPosition <= rowSize then
- scrollPosition = rowSize
- break
- else
- --print("Backing up ScrollPosition from -- " ..scrollPosition)
- scrollPosition = scrollPosition - rowSize
- end
- else
- break
- end
- end
- end
- pos = pos - 1
- end
-
- xCounter = 0
- --print("ScrollPosition = " .. scrollPosition)
- pos = scrollPosition
- rowSizeCounter = 0
- setRowSize = true
- local lastChildSize = 0
-
- local xOffset,yOffset = 0
- if guiObjects[1] then
- yOffset = math.ceil(math.floor(math.fmod(totalPixelsY,guiObjects[1].AbsoluteSize.X))/2)
- xOffset = math.ceil(math.floor(math.fmod(totalPixelsX,guiObjects[1].AbsoluteSize.Y))/2)
- end
-
- for i, child in ipairs(guiObjects) do
- if i < scrollPosition then
- --print("Hiding " .. child.Name)
- child.Visible = false
- else
- if pixelsRemainingY < 0 then
- --print("Out of Space " .. child.Name)
- child.Visible = false
- else
- --print("Laying out " .. child.Name)
- --GuiObject
- if setRowSize then rowSizeCounter = rowSizeCounter + 1 end
- if xCounter + child.AbsoluteSize.X >= totalPixelsX then
- if setRowSize then
- rowSize = rowSizeCounter - 1
- setRowSize = false
- end
- xCounter = 0
- pixelsRemainingY = pixelsRemainingY - child.AbsoluteSize.Y
- end
- child.Position = UDim2.new(child.Position.X.Scale,xCounter + xOffset, 0, totalPixelsY - pixelsRemainingY + yOffset)
- xCounter = xCounter + child.AbsoluteSize.X
- child.Visible = ((pixelsRemainingY - child.AbsoluteSize.Y) >= 0)
- lastChildSize = child.AbsoluteSize
- end
- end
- end
-
- scrollUpButton.Active = (scrollPosition > 1)
- if lastChildSize == 0 then
- scrollDownButton.Active = false
- else
- scrollDownButton.Active = ((pixelsRemainingY - lastChildSize.Y) < 0)
- end
- end
-
-
- local layoutSimpleScrollBar = function()
- local guiObjects = {}
-
- if orderList then
- for i, child in ipairs(orderList) do
- if child.Parent == frame then
- table.insert(guiObjects, child)
- end
- end
- else
- local children = frame:GetChildren()
- if children then
- for i, child in ipairs(children) do
- if child:IsA("GuiObject") then
- table.insert(guiObjects, child)
- end
- end
- end
- end
- if #guiObjects == 0 then
- scrollUpButton.Active = false
- scrollDownButton.Active = false
- scrollPosition = 1
- return
- end
-
- if scrollPosition > #guiObjects then
- scrollPosition = #guiObjects
- end
-
- local totalPixels = frame.AbsoluteSize.Y
- local pixelsRemaining = frame.AbsoluteSize.Y
-
- local pixelsBelowScrollbar = 0
- local pos = #guiObjects
- while pixelsBelowScrollbar < totalPixels and pos >= 1 do
- if pos >= scrollPosition then
- pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y
- else
- if pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y <= totalPixels then
- --It fits, so back up our scroll position
- pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y
- if scrollPosition <= 1 then
- scrollPosition = 1
- break
- else
- --print("Backing up ScrollPosition from -- " ..scrollPosition)
- scrollPosition = scrollPosition - 1
- end
- else
- break
- end
- end
- pos = pos - 1
- end
-
- --print("ScrollPosition = " .. scrollPosition)
- pos = scrollPosition
- for i, child in ipairs(guiObjects) do
- if i < scrollPosition then
- --print("Hiding " .. child.Name)
- child.Visible = false
- else
- if pixelsRemaining < 0 then
- --print("Out of Space " .. child.Name)
- child.Visible = false
- else
- --print("Laying out " .. child.Name)
- --GuiObject
- child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining)
- pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y
- child.Visible = (pixelsRemaining >= 0)
- end
- end
- end
- scrollUpButton.Active = (scrollPosition > 1)
- scrollDownButton.Active = (pixelsRemaining < 0)
- end
-
- local reentrancyGuard = false
- local recalculate = function()
- if reentrancyGuard then
- return
- end
- reentrancyGuard = true
- wait()
- local success, err = nil
- if style == "grid" then
- success, err = pcall(function() layoutGridScrollBar(frame) end)
- elseif style == "simple" then
- success, err = pcall(function() layoutSimpleScrollBar(frame) end)
- end
- if not success then print(err) end
-
- reentrancyGuard = false
- end
-
- local scrollUp = function()
- if scrollUpButton.Active then
- scrollPosition = scrollPosition - rowSize
- recalculate()
- end
- end
-
- local scrollDown = function()
- if scrollDownButton.Active then
- scrollPosition = scrollPosition + rowSize
- recalculate()
- end
- end
-
- local scrollMouseCount = 0
- scrollUpButton.MouseButton1Click:connect(
- function()
- --print("Up-MouseButton1Click")
- scrollMouseCount = scrollMouseCount + 1
- end)
- scrollUpButton.MouseLeave:connect(
- function()
- --print("Up-Leave")
- scrollMouseCount = scrollMouseCount + 1
- end)
-
- scrollUpButton.MouseButton1Down:connect(
- function()
- --print("Up-Down")
- scrollMouseCount = scrollMouseCount + 1
-
- scrollUp()
- local val = scrollMouseCount
- wait(0.5)
- while val == scrollMouseCount do
- if scrollUp() == false then
- break
- end
- wait(0.1)
- end
- end)
-
- scrollDownButton.MouseButton1Click:connect(
- function()
- --print("Down-Click")
- scrollMouseCount = scrollMouseCount + 1
- end)
- scrollDownButton.MouseLeave:connect(
- function()
- --print("Down-Leave")
- scrollMouseCount = scrollMouseCount + 1
- end)
- scrollDownButton.MouseButton1Down:connect(
- function()
- --print("Down-Down")
- scrollMouseCount = scrollMouseCount + 1
-
- scrollDown()
- local val = scrollMouseCount
- wait(0.5)
- while val == scrollMouseCount do
- if scrollDown() == false then
- break
- end
- wait(0.1)
- end
- end)
-
-
- frame.ChildAdded:connect(function()
- recalculate()
- end)
-
- frame.ChildRemoved:connect(function()
- recalculate()
- end)
-
- frame.Changed:connect(
- function(prop)
- if prop == "AbsoluteSize" then
- --Wait a heartbeat for it to sync in
- recalculate()
- end
- end)
- frame.AncestryChanged:connect(recalculate)
-
- return frame, scrollUpButton, scrollDownButton, recalculate
-end
-local function binaryGrow(min, max, fits)
- if min > max then
- return min
- end
- local biggestLegal = min
-
- while min <= max do
- local mid = min + math.floor((max - min) / 2)
- if fits(mid) and (biggestLegal == nil or biggestLegal < mid) then
- biggestLegal = mid
-
- --Try growing
- min = mid + 1
- else
- --Doesn't fit, shrink
- max = mid - 1
- end
- end
- return biggestLegal
-end
-
-
-local function binaryShrink(min, max, fits)
- if min > max then
- return min
- end
- local smallestLegal = max
-
- while min <= max do
- local mid = min + math.floor((max - min) / 2)
- if fits(mid) and (smallestLegal == nil or smallestLegal > mid) then
- smallestLegal = mid
-
- --It fits, shrink
- max = mid - 1
- else
- --Doesn't fit, grow
- min = mid + 1
- end
- end
- return smallestLegal
-end
-
-
-local function getGuiOwner(instance)
- while instance ~= nil do
- if instance:IsA("ScreenGui") or instance:IsA("BillboardGui") then
- return instance
- end
- instance = instance.Parent
- end
- return nil
-end
-
-t.AutoTruncateTextObject = function(textLabel)
- local text = textLabel.Text
-
- local fullLabel = textLabel:Clone()
- fullLabel.Name = "Full" .. textLabel.Name
- fullLabel.BorderSizePixel = 0
- fullLabel.BackgroundTransparency = 0
- fullLabel.Text = text
- fullLabel.TextXAlignment = Enum.TextXAlignment.Center
- fullLabel.Position = UDim2.new(0,-3,0,0)
- fullLabel.Size = UDim2.new(0,100,1,0)
- fullLabel.Visible = false
- fullLabel.Parent = textLabel
-
- local shortText = nil
- local mouseEnterConnection = nil
- local mouseLeaveConnection= nil
-
- local checkForResize = function()
- if getGuiOwner(textLabel) == nil then
- return
- end
- textLabel.Text = text
- if textLabel.TextFits then
- --Tear down the rollover if it is active
- if mouseEnterConnection then
- mouseEnterConnection:disconnect()
- mouseEnterConnection = nil
- end
- if mouseLeaveConnection then
- mouseLeaveConnection:disconnect()
- mouseLeaveConnection = nil
- end
- else
- local len = string.len(text)
- textLabel.Text = text .. "~"
-
- --Shrink the text
- local textSize = binaryGrow(0, len,
- function(pos)
- if pos == 0 then
- textLabel.Text = "~"
- else
- textLabel.Text = string.sub(text, 1, pos) .. "~"
- end
- return textLabel.TextFits
- end)
- shortText = string.sub(text, 1, textSize) .. "~"
- textLabel.Text = shortText
-
- --Make sure the fullLabel fits
- if not fullLabel.TextFits then
- --Already too small, grow it really bit to start
- fullLabel.Size = UDim2.new(0, 10000, 1, 0)
- end
-
- --Okay, now try to binary shrink it back down
- local fullLabelSize = binaryShrink(textLabel.AbsoluteSize.X,fullLabel.AbsoluteSize.X,
- function(size)
- fullLabel.Size = UDim2.new(0, size, 1, 0)
- return fullLabel.TextFits
- end)
- fullLabel.Size = UDim2.new(0,fullLabelSize+6,1,0)
-
- --Now setup the rollover effects, if they are currently off
- if mouseEnterConnection == nil then
- mouseEnterConnection = textLabel.MouseEnter:connect(
- function()
- fullLabel.ZIndex = textLabel.ZIndex + 1
- fullLabel.Visible = true
- --textLabel.Text = ""
- end)
- end
- if mouseLeaveConnection == nil then
- mouseLeaveConnection = textLabel.MouseLeave:connect(
- function()
- fullLabel.Visible = false
- --textLabel.Text = shortText
- end)
- end
- end
- end
- textLabel.AncestryChanged:connect(checkForResize)
- textLabel.Changed:connect(
- function(prop)
- if prop == "AbsoluteSize" then
- checkForResize()
- end
- end)
-
- checkForResize()
-
- local function changeText(newText)
- text = newText
- fullLabel.Text = text
- checkForResize()
- end
-
- return textLabel, changeText
-end
-
-local function TransitionTutorialPages(fromPage, toPage, transitionFrame, currentPageValue)
- if fromPage then
- fromPage.Visible = false
- if transitionFrame.Visible == false then
- transitionFrame.Size = fromPage.Size
- transitionFrame.Position = fromPage.Position
- end
- else
- if transitionFrame.Visible == false then
- transitionFrame.Size = UDim2.new(0.0,50,0.0,50)
- transitionFrame.Position = UDim2.new(0.5,-25,0.5,-25)
- end
- end
- transitionFrame.Visible = true
- currentPageValue.Value = nil
-
- local newsize, newPosition
- if toPage then
- --Make it visible so it resizes
- toPage.Visible = true
-
- newSize = toPage.Size
- newPosition = toPage.Position
-
- toPage.Visible = false
- else
- newSize = UDim2.new(0.0,50,0.0,50)
- newPosition = UDim2.new(0.5,-25,0.5,-25)
- end
- transitionFrame:TweenSizeAndPosition(newSize, newPosition, Enum.EasingDirection.InOut, Enum.EasingStyle.Quad, 0.3, true,
- function(state)
- if state == Enum.TweenStatus.Completed then
- transitionFrame.Visible = false
- if toPage then
- toPage.Visible = true
- currentPageValue.Value = toPage
- end
- end
- end)
-end
-
-t.CreateTutorial = function(name, tutorialKey, createButtons)
- local frame = Instance.new("Frame")
- frame.Name = "Tutorial-" .. name
- frame.BackgroundTransparency = 1
- frame.Size = UDim2.new(0.6, 0, 0.6, 0)
- frame.Position = UDim2.new(0.2, 0, 0.2, 0)
-
- local transitionFrame = Instance.new("Frame")
- transitionFrame.Name = "TransitionFrame"
- transitionFrame.Style = Enum.FrameStyle.RobloxRound
- transitionFrame.Size = UDim2.new(0.6, 0, 0.6, 0)
- transitionFrame.Position = UDim2.new(0.2, 0, 0.2, 0)
- transitionFrame.Visible = false
- transitionFrame.Parent = frame
-
- local currentPageValue = Instance.new("ObjectValue")
- currentPageValue.Name = "CurrentTutorialPage"
- currentPageValue.Value = nil
- currentPageValue.Parent = frame
-
- local boolValue = Instance.new("BoolValue")
- boolValue.Name = "Buttons"
- boolValue.Value = createButtons
- boolValue.Parent = frame
-
- local pages = Instance.new("Frame")
- pages.Name = "Pages"
- pages.BackgroundTransparency = 1
- pages.Size = UDim2.new(1,0,1,0)
- pages.Parent = frame
-
- local function getVisiblePageAndHideOthers()
- local visiblePage = nil
- local children = pages:GetChildren()
- if children then
- for i,child in ipairs(children) do
- if child.Visible then
- if visiblePage then
- child.Visible = false
- else
- visiblePage = child
- end
- end
- end
- end
- return visiblePage
- end
-
- local showTutorial = function(alwaysShow)
- if alwaysShow or UserSettings().GameSettings:GetTutorialState(tutorialKey) == false then
- print("Showing tutorial-",tutorialKey)
- local currentTutorialPage = getVisiblePageAndHideOthers()
-
- local firstPage = pages:FindFirstChild("TutorialPage1")
- if firstPage then
- TransitionTutorialPages(currentTutorialPage, firstPage, transitionFrame, currentPageValue)
- else
- error("Could not find TutorialPage1")
- end
- end
- end
-
- local dismissTutorial = function()
- local currentTutorialPage = getVisiblePageAndHideOthers()
-
- if currentTutorialPage then
- TransitionTutorialPages(currentTutorialPage, nil, transitionFrame, currentPageValue)
- end
-
- UserSettings().GameSettings:SetTutorialState(tutorialKey, true)
- end
-
- local gotoPage = function(pageNum)
- local page = pages:FindFirstChild("TutorialPage" .. pageNum)
- local currentTutorialPage = getVisiblePageAndHideOthers()
- TransitionTutorialPages(currentTutorialPage, page, transitionFrame, currentPageValue)
- end
-
- return frame, showTutorial, dismissTutorial, gotoPage
-end
-
-local function CreateBasicTutorialPage(name, handleResize, skipTutorial)
- local frame = Instance.new("Frame")
- frame.Name = "TutorialPage"
- frame.Style = Enum.FrameStyle.RobloxRound
- frame.Size = UDim2.new(0.6, 0, 0.6, 0)
- frame.Position = UDim2.new(0.2, 0, 0.2, 0)
- frame.Visible = false
-
- local frameHeader = Instance.new("TextLabel")
- frameHeader.Name = "Header"
- frameHeader.Text = name
- frameHeader.BackgroundTransparency = 1
- frameHeader.FontSize = Enum.FontSize.Size24
- frameHeader.Font = Enum.Font.ArialBold
- frameHeader.TextColor3 = Color3.new(1,1,1)
- frameHeader.TextXAlignment = Enum.TextXAlignment.Center
- frameHeader.TextWrap = true
- frameHeader.Size = UDim2.new(1,-55, 0, 22)
- frameHeader.Position = UDim2.new(0,0,0,0)
- frameHeader.Parent = frame
-
- local skipButton = Instance.new("ImageButton")
- skipButton.Name = "SkipButton"
- skipButton.AutoButtonColor = false
- skipButton.BackgroundTransparency = 1
- skipButton.Image = "http://www.roblox.com/asset/?id=37813546"
- skipButton.MouseButton1Click:connect(function()
- skipButton.Image = "http://www.roblox.com/asset/?id=37813546"
- skipTutorial()
- end)
- skipButton.MouseEnter:connect(function()
- skipButton.Image = "http://www.roblox.com/asset/?id=37813556"
- end)
- skipButton.MouseLeave:connect(function()
- skipButton.Image = "http://www.roblox.com/asset/?id=37813546"
- end)
- skipButton.Size = UDim2.new(0, 55, 0, 22)
- skipButton.Position = UDim2.new(1, -55, 0, 0)
- skipButton.Parent = frame
-
- local innerFrame = Instance.new("Frame")
- innerFrame.Name = "ContentFrame"
- innerFrame.BackgroundTransparency = 1
- innerFrame.Position = UDim2.new(0,0,0,22)
- innerFrame.Parent = frame
-
- local nextButton = Instance.new("TextButton")
- nextButton.Name = "NextButton"
- nextButton.Text = "Next"
- nextButton.TextColor3 = Color3.new(1,1,1)
- nextButton.Font = Enum.Font.Arial
- nextButton.FontSize = Enum.FontSize.Size18
- nextButton.Style = Enum.ButtonStyle.RobloxButtonDefault
- nextButton.Size = UDim2.new(0,80, 0, 32)
- nextButton.Position = UDim2.new(0.5, 5, 1, -32)
- nextButton.Active = false
- nextButton.Visible = false
- nextButton.Parent = frame
-
- local prevButton = Instance.new("TextButton")
- prevButton.Name = "PrevButton"
- prevButton.Text = "Previous"
- prevButton.TextColor3 = Color3.new(1,1,1)
- prevButton.Font = Enum.Font.Arial
- prevButton.FontSize = Enum.FontSize.Size18
- prevButton.Style = Enum.ButtonStyle.RobloxButton
- prevButton.Size = UDim2.new(0,80, 0, 32)
- prevButton.Position = UDim2.new(0.5, -85, 1, -32)
- prevButton.Active = false
- prevButton.Visible = false
- prevButton.Parent = frame
-
- innerFrame.Size = UDim2.new(1,0,1,-22-35)
-
- local parentConnection = nil
-
- local function basicHandleResize()
- if frame.Visible and frame.Parent then
- local maxSize = math.min(frame.Parent.AbsoluteSize.X, frame.Parent.AbsoluteSize.Y)
- handleResize(200,maxSize)
- end
- end
-
- frame.Changed:connect(
- function(prop)
- if prop == "Parent" then
- if parentConnection ~= nil then
- parentConnection:disconnect()
- parentConnection = nil
- end
- if frame.Parent and frame.Parent:IsA("GuiObject") then
- parentConnection = frame.Parent.Changed:connect(
- function(parentProp)
- if parentProp == "AbsoluteSize" then
- wait()
- basicHandleResize()
- end
- end)
- basicHandleResize()
- end
- end
-
- if prop == "Visible" then
- basicHandleResize()
- end
- end)
-
- return frame, innerFrame
-end
-
-t.CreateTextTutorialPage = function(name, text, skipTutorialFunc)
- local frame = nil
- local contentFrame = nil
-
- local textLabel = Instance.new("TextLabel")
- textLabel.BackgroundTransparency = 1
- textLabel.TextColor3 = Color3.new(1,1,1)
- textLabel.Text = text
- textLabel.TextWrap = true
- textLabel.TextXAlignment = Enum.TextXAlignment.Left
- textLabel.TextYAlignment = Enum.TextYAlignment.Center
- textLabel.Font = Enum.Font.Arial
- textLabel.FontSize = Enum.FontSize.Size14
- textLabel.Size = UDim2.new(1,0,1,0)
-
- local function handleResize(minSize, maxSize)
- size = binaryShrink(minSize, maxSize,
- function(size)
- frame.Size = UDim2.new(0, size, 0, size)
- return textLabel.TextFits
- end)
- frame.Size = UDim2.new(0, size, 0, size)
- frame.Position = UDim2.new(0.5, -size/2, 0.5, -size/2)
- end
-
- frame, contentFrame = CreateBasicTutorialPage(name, handleResize, skipTutorialFunc)
- textLabel.Parent = contentFrame
-
- return frame
-end
-
-t.CreateImageTutorialPage = function(name, imageAsset, x, y, skipTutorialFunc)
- local frame = nil
- local contentFrame = nil
-
- local imageLabel = Instance.new("ImageLabel")
- imageLabel.BackgroundTransparency = 1
- imageLabel.Image = imageAsset
- imageLabel.Size = UDim2.new(0,x,0,y)
- imageLabel.Position = UDim2.new(0.5,-x/2,0.5,-y/2)
-
- local function handleResize(minSize, maxSize)
- size = binaryShrink(minSize, maxSize,
- function(size)
- return size >= x and size >= y
- end)
- if size >= x and size >= y then
- imageLabel.Size = UDim2.new(0,x, 0,y)
- imageLabel.Position = UDim2.new(0.5,-x/2, 0.5, -y/2)
- else
- if x > y then
- --X is limiter, so
- imageLabel.Size = UDim2.new(1,0,y/x,0)
- imageLabel.Position = UDim2.new(0,0, 0.5 - (y/x)/2, 0)
- else
- --Y is limiter
- imageLabel.Size = UDim2.new(x/y,0,1, 0)
- imageLabel.Position = UDim2.new(0.5-(x/y)/2, 0, 0, 0)
- end
- end
- frame.Size = UDim2.new(0, size, 0, size)
- frame.Position = UDim2.new(0.5, -size/2, 0.5, -size/2)
- end
-
- frame, contentFrame = CreateBasicTutorialPage(name, handleResize, skipTutorialFunc)
- imageLabel.Parent = contentFrame
-
- return frame
-end
-
-t.AddTutorialPage = function(tutorial, tutorialPage)
- local transitionFrame = tutorial.TransitionFrame
- local currentPageValue = tutorial.CurrentTutorialPage
-
- if not tutorial.Buttons.Value then
- tutorialPage.ContentFrame.Size = UDim2.new(1,0,1,-22)
- tutorialPage.NextButton.Parent = nil
- tutorialPage.PrevButton.Parent = nil
- end
-
- local children = tutorial.Pages:GetChildren()
- if children and #children > 0 then
- tutorialPage.Name = "TutorialPage" .. (#children+1)
- local previousPage = children[#children]
- if not previousPage:IsA("GuiObject") then
- error("All elements under Pages must be GuiObjects")
- end
-
- if tutorial.Buttons.Value then
- if previousPage.NextButton.Active then
- error("NextButton already Active on previousPage, please only add pages with RbxGui.AddTutorialPage function")
- end
- previousPage.NextButton.MouseButton1Click:connect(
- function()
- TransitionTutorialPages(previousPage, tutorialPage, transitionFrame, currentPageValue)
- end)
- previousPage.NextButton.Active = true
- previousPage.NextButton.Visible = true
-
- if tutorialPage.PrevButton.Active then
- error("PrevButton already Active on tutorialPage, please only add pages with RbxGui.AddTutorialPage function")
- end
- tutorialPage.PrevButton.MouseButton1Click:connect(
- function()
- TransitionTutorialPages(tutorialPage, previousPage, transitionFrame, currentPageValue)
- end)
- tutorialPage.PrevButton.Active = true
- tutorialPage.PrevButton.Visible = true
- end
-
- tutorialPage.Parent = tutorial.Pages
- else
- --First child
- tutorialPage.Name = "TutorialPage1"
- tutorialPage.Parent = tutorial.Pages
- end
-end
-
-t.Help =
- function(funcNameOrFunc)
- --input argument can be a string or a function. Should return a description (of arguments and expected side effects)
- if funcNameOrFunc == "CreatePropertyDropDownMenu" or funcNameOrFunc == t.CreatePropertyDropDownMenu then
- return "Function CreatePropertyDropDownMenu. " ..
- "Arguments: (instance, propertyName, enumType). " ..
- "Side effect: returns a container with a drop-down-box that is linked to the 'property' field of 'instance' which is of type 'enumType'"
- end
- if funcNameOrFunc == "CreateDropDownMenu" or funcNameOrFunc == t.CreateDropDownMenu then
- return "Function CreateDropDownMenu. " ..
- "Arguments: (items, onItemSelected). " ..
- "Side effect: Returns 2 results, a container to the gui object and a 'updateSelection' function for external updating. The container is a drop-down-box created around a list of items"
- end
- if funcNameOrFunc == "CreateMessageDialog" or funcNameOrFunc == t.CreateMessageDialog then
- return "Function CreateMessageDialog. " ..
- "Arguments: (title, message, buttons). " ..
- "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button"
- end
- if funcNameOrFunc == "CreateStyledMessageDialog" or funcNameOrFunc == t.CreateStyledMessageDialog then
- return "Function CreateStyledMessageDialog. " ..
- "Arguments: (title, message, style, buttons). " ..
- "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button, 'style' is a string, either Error, Notify or Confirm"
- end
- if funcNameOrFunc == "GetFontHeight" or funcNameOrFunc == t.GetFontHeight then
- return "Function GetFontHeight. " ..
- "Arguments: (font, fontSize). " ..
- "Side effect: returns the size in pixels of the given font + fontSize"
- end
- if funcNameOrFunc == "LayoutGuiObjects" or funcNameOrFunc == t.LayoutGuiObjects then
-
- end
- if funcNameOrFunc == "CreateScrollingFrame" or funcNameOrFunc == t.CreateScrollingFrame then
- return "Function CreateScrollingFrame. " ..
- "Arguments: (orderList, style) " ..
- "Side effect: returns 4 objects, (scrollFrame, scrollUpButton, scrollDownButton, recalculateFunction). 'scrollFrame' can be filled with GuiObjects. It will lay them out and allow scrollUpButton/scrollDownButton to interact with them. Orderlist is optional (and specifies the order to layout the children. Without orderlist, it uses the children order. style is also optional, and allows for a 'grid' styling if style is passed 'grid' as a string. recalculateFunction can be called when a relayout is needed (when orderList changes)"
- end
- if funcNameOrFunc == "AutoTruncateTextObject" or funcNameOrFunc == t.AutoTruncateTextObject then
- return "Function AutoTruncateTextObject. " ..
- "Arguments: (textLabel) " ..
- "Side effect: returns 2 objects, (textLabel, changeText). The 'textLabel' input is modified to automatically truncate text (with ellipsis), if it gets too small to fit. 'changeText' is a function that can be used to change the text, it takes 1 string as an argument"
- end
- if funcNameOrFunc == "CreateSlider" or funcNameOrFunc == t.CreateSlider then
- return "Function CreateSlider. " ..
- "Arguments: (steps, width, position) " ..
- "Side effect: returns 2 objects, (sliderGui, sliderPosition). The 'steps' argument specifies how many different positions the slider can hold along the bar. 'width' specifies in pixels how wide the bar should be (modifiable afterwards if desired). 'position' argument should be a UDim2 for slider positioning. 'sliderPosition' is an IntValue whose current .Value specifies the specific step the slider is currently on."
- end
- end
-
-local NewPlayerListGui = Instance.new("ScreenGui",script.Parent)
-NewPlayerListGui.Name = "NewPlayerList"
-
-coroutine.resume(coroutine.create(function()
-NewPlayerListGui.Parent = game.CoreGui
-if game.CoreGui:FindFirstChild("NewPlayerList") then
-game.CoreGui["NewPlayerList"].Parent = nil
-end end))
-
-local localTesting = true
-
-local friendWord = "Friend"
-local friendWordLowercase = "friend"
-
-local testFriendingPlaces = {}
-testFriendingPlaces[41324860] = true
-local enableFriendingGlobally = false
-
-local testPlayerListPlaces = {}
-testPlayerListPlaces[41324860] = true
-testPlayerListPlaces[10042455] = true
-local enablePlayerListGlobally = false
-
-local bigEasingStyle = Enum.EasingStyle.Back
-local smallEasingStyle = Enum.EasingStyle.Quart
-local lightBackground = true
-
-local function waitForChild(instance, name)
- while not instance:FindFirstChild(name) do
- instance.ChildAdded:wait()
- end
-end
-
-local function waitForProperty(instance, prop)
- while not instance[prop] do
- instance.Changed:wait()
- end
-end
-
-local function Color3I(r,g,b)
- return Color3.new(r/255,g/255,b/255)
-end
-
-function robloxLock(instance)
-end
-
-function ArrayRemove(t, obj)
- for i, obj2 in ipairs(t) do
- if obj == obj2 then
- table.remove(t, i)
- return true
- end
- end
- return false
-end
-
-local function getPlayers()
- local result = {}
- local players = game:GetService("Players"):GetChildren()
- if players then
- for i, player in ipairs(players) do
- if player:IsA("Player") then
- table.insert(result, player)
- end
- end
- end
- return result
-end
-
-local brickColorTable = {}
-for i = 0, 63 do
- brickColorTable[BrickColor.palette(i).Name] = BrickColor.palette(i).Color
-end
-
-local function remapColor(i, j)
- brickColorTable[BrickColor.palette(i).Name] = BrickColor.palette(j).Color
-end
-
-remapColor(13, 12)
-remapColor(14, 12)
-remapColor(15, 12)
-remapColor(61, 29)
-remapColor(63, 62)
-remapColor(56, 50)
-remapColor(45, 53)
-remapColor(51, 20)
-remapColor(4, 20)
-remapColor(59, 35)
-remapColor(60, 29)
-
-local function getColor(brickColor)
- if brickColorTable[brickColor.Name] then
- return brickColorTable[brickColor.Name]
- else
- return brickColor.Color;
- end
-end
-
-
-
-local function getTeams()
- local result = {}
- local teams = game:GetService("Teams"):GetChildren()
- for i, team in ipairs(teams) do
- if team:IsA("Team") then
- table.insert(result, team)
- end
- end
- return result
-end
-
-local supportFriends = false
-local currentBoardType = "PlayerList"
-local currentStatCount = 0
-
-local createBoardsFunction = nil
-
-
-local playerTable = {}
-local teamTable = {}
-local teamColorTable = {}
-
-local removePlayerFunction = nil
-local recreatePlayerFunction = nil
-local addPlayerFunction = function(player)
- if recreatePlayerFunction then
- recreatePlayerFunction(player)
- end
-end
-local sortPlayerListsFunction = nil
-
-local minimizedState = nil
-local bigWindowImposter = nil
-local smallWindowPosition = UDim2.new(0, -20, 0,5)--UDim2.new(0, 0, 0,0)
-local smallWindowSize = UDim2.new(1,0,1,0)--UDim2.new(1,5,1,0)
-local bigWindowSize = UDim2.new(0.6,0,0.6,0)
-local bigWindowPosition = UDim2.new(.2, 0, .2,0)
-
-local debounceTeamsChanged = false
-
-local currentWindowState = "Small"
-local previousWindowState = nil
-local transitionWindowsFunction = nil
-
-local container = nil
-local topRightTrayContainer = nil
-
-local playerContextMenu = nil
-local contextMenuElements = {}
-
-local function addContextMenuLabel(getText1, getText2, isVisible)
- local t = {}
- t.Type = "Label"
- t.GetText1 = getText1
- t.GetText2 = getText2
- t.IsVisible = isVisible
- table.insert(contextMenuElements, t)
-end
-local function addContextMenuButton(text, isVisible, isActive, doIt)
- local t = {}
- t.Text = text
- t.Type = "Button"
- t.IsVisible = isVisible
- t.IsActive = isActive
- t.DoIt = doIt
- table.insert(contextMenuElements, t)
-end
-
-local function getFriendStatus(player)
- if player == game.Players.LocalPlayer then
- return Enum.FriendStatus.NotFriend
- else
- return game.Players.LocalPlayer:GetFriendStatus(player)
- end
-end
---Populate the ContextMenus
-addContextMenuLabel(
- --GetText1
- function(player)
- return "Loading..."
- end,
- --GetText2
- nil,
- --IsVisible
- function(player)
- return getFriendStatus(player) == Enum.FriendStatus.Unknown
- end)
-
---[[
-addContextMenuLabel(
- --GetText1
- function(player)
- return player.Name
- end,
- --GetText2
- nil,
- --IsVisible
- function(player)
- return true
- end)]]--
-addContextMenuButton("Send " .. friendWord .. " Request",
- --IsVisible
- function(player)
- return getFriendStatus(player) == Enum.FriendStatus.NotFriend
- end,
- --IsActive
- function(player)
- return true
- end,
- --DoIt
- function(player)
- return game.Players.LocalPlayer:RequestFriendship(player)
- end
-)
-addContextMenuButton("Un" .. friendWordLowercase,
- --IsVisible
- function(player)
- return getFriendStatus(player) == Enum.FriendStatus.Friend
- end,
- --IsActive
- function(player)
- return true
- end,
- --DoIt
- function(player)
- return game.Players.LocalPlayer:RevokeFriendship(player)
- end
-)
-addContextMenuButton("Accept " .. friendWord .. " Request",
- --IsVisible
- function(player)
- return getFriendStatus(player) == Enum.FriendStatus.FriendRequestReceived
- end,
- --IsActive
- function(player)
- return true
- end,
- --DoIt
- function(player)
- return game.Players.LocalPlayer:RequestFriendship(player)
- end
-)
-
-addContextMenuButton("Deny " .. friendWord .. " Request",
- --IsVisible
- function(player)
- return getFriendStatus(player) == Enum.FriendStatus.FriendRequestReceived
- end,
- --IsActive
- function(player)
- return true
- end,
- --DoIt
- function(player)
- return game.Players.LocalPlayer:RevokeFriendship(player)
- end
-)
-
-addContextMenuButton("Cancel " .. friendWord .. " Request",
- --IsVisible
- function(player)
- return getFriendStatus(player) == Enum.FriendStatus.FriendRequestSent
- end,
- --IsActive
- function(player)
- return true
- end,
- --DoIt
- function(player)
- return game.Players.LocalPlayer:RevokeFriendship(player)
- end
-)
-
-
-local function getStatColumns(players)
- for i, player in ipairs(players) do
- local leaderstats = player:FindFirstChild("leaderstats")
- if leaderstats then
- --print(player, " is King of the List")
- local stats = {}
- local children = leaderstats:GetChildren()
- if children then
- for i, stat in ipairs(children) do
- if stat:IsA("IntValue") then
- table.insert(stats, stat.Name)
- else
- --TODO: This should check for IntValue only but current ScoreHud does not
- table.insert(stats, stat.Name)
- end
- end
- end
- return stats
- end
- end
- return nil
-end
-
-local function determineBoardType()
- local players = getPlayers()
-
- local foundLeaderstats = false
- local numStats = 0
- local foundTeam = false
-
- local stats = getStatColumns(players)
- if stats then
- foundLeaderstats = true
- numStats = #stats
- end
-
- for i, player in ipairs(players) do
- if not foundTeam then
- if not player.Neutral then
- foundTeam = true
- break
- end
- end
- end
-
- if foundLeaderstats and foundTeam then
- return "TeamScore", numStats
- elseif foundLeaderstats then
- return "PlayerScore", numStats
- elseif foundTeam then
- return "TeamList", numStats
- else
- return "PlayerList", numStats
- end
-end
-
-local function toggleBigWindow()
- if container == nil then
- return
- end
-
- if currentWindowState == "Big" then
- --Hide it
- if previousWindowState == nil or previousWindowState == "Big" or previousWindowState == "None" then
- transitionWindowsFunction("None")
- else
- transitionWindowsFunction("Small")
- end
- else
- previousWindowState = currentWindowState
- transitionWindowsFunction("Big")
- end
-end
-local previousBigPlayerList = nil
-local function rebuildBoard(owner, boardType, numStats)
- print("RebuildBoard")
- if topRightTrayContainer == nil then
- topRightTrayContainer = owner:FindFirstChild("PlayerListTopRightFrame")
- if topRightTrayContainer == nil then
- topRightTrayContainer = Instance.new("Frame")
- topRightTrayContainer.Name = "PlayerListTopRightFrame"
- topRightTrayContainer.BackgroundTransparency = 1
- topRightTrayContainer.Size = UDim2.new(0.2, 16, 0.42, 16)--UDim2.new(0.2, 0, 0.42, 0)
- topRightTrayContainer.Position = UDim2.new(0.8, 0, 0, 0)--UDim2.new(0.8, 0, 0, 0)
- topRightTrayContainer.Parent = container
- end
- end
- if minimizedState == nil then
- minimizedState = Instance.new("Frame")
- minimizedState.Name = "MinimizedPlayerlist"
- minimizedState.BackgroundTransparency = 1
- minimizedState.Position = UDim2.new(1, -166, 0,0) --UDim2.new(1, -153, 0,0)
- minimizedState.Size = UDim2.new(0, 151, 0, 30)
-
- --[[local playerListButton = Instance.new("ImageButton")
- playerListButton.Name = "GoBigButton"
- playerListButton.Image = "rbxasset://textures/ui/playerlist_hidden_maximize.png"
- playerListButton.BackgroundTransparency = 1
- playerListButton.Size = UDim2.new(0.0, 116, 0, 30)
- playerListButton.Position = UDim2.new(0, 35, 0, 0)
- playerListButton.MouseButton1Click:connect(
- function()
- toggleBigWindow()
- end)
- playerListButton.Parent = minimizedState]]
-
- playerListButton = Instance.new("ImageButton")
- playerListButton.Name = "GoSmallButton"
- playerListButton.Image = "rbxasset://textures/ui/playerlist_hidden_small.png"
- playerListButton.BackgroundTransparency = 1
- playerListButton.Size = UDim2.new(0.0, 35, 0, 30)
- playerListButton.Position = UDim2.new(1, -35, 0, 0)
- playerListButton.MouseButton1Click:connect(
- function()
- transitionWindowsFunction("Small")
- end)
- playerListButton.Parent = minimizedState
-
- minimizedState.Visible = false
- robloxLock(minimizedState)
- minimizedState.Parent = topRightTrayContainer
- end
- if bigWindowImposter == nil then
- bigWindowImposter = owner:FindFirstChild("BigPlayerListWindowImposter")
- if bigWindowImposter == nil then
- bigWindowImposter = Instance.new("Frame")
- bigWindowImposter.Name = "BigPlayerListWindowImposter"
- bigWindowImposter.Visible = false
- --bigWindowImposter.Style = Enum.FrameStyle.RobloxRound
- bigWindowImposter.BackgroundColor3 = Color3.new(0,0,0)
- bigWindowImposter.BackgroundTransparency = 0.7
- bigWindowImposter.BorderSizePixel = 0
- --bigWindowImposter.Size = UDim2.new(0.4, 0, 0.4, 0)
- bigWindowImposter.Size = UDim2.new(0.4, 7, 0.4, 7)
- bigWindowImposter.Position = UDim2.new(0.3, 0, 0.3, 0)
- robloxLock(bigWindowImposter)
- bigWindowImposter.Parent = container
- end
- end
- if container == nil or container ~= owner then
- container = owner
-
- topRightTrayContainer.Parent = container
- bigWindowImposter.Parent = container
- end
-
- local smallVisible = true
- local bigVisible = false
- if container then
- if topRightTrayContainer then
- --Delete the old boards
- if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then
- smallVisible = topRightTrayContainer.SmallPlayerlist.Visible
- topRightTrayContainer.SmallPlayerlist.Parent = nil
- print("Removed small playerlist")
- else
- print("Did not remove small playerlist")
- end
- end
- if container:FindFirstChild("BigPlayerlist") then
- bigVisible = container.BigPlayerlist.Visible or (previousBigPlayerList ~= nil)
- container.BigPlayerlist.Parent = nil
- if previousBigPlayerList ~= nil then
- pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end)
- previousBigPlayerList = nil
- end
- end
- end
-
- local smallBoard, bigBoard = createBoardsFunction(boardType, numStats)
- if smallBoard then
- smallBoard.Visible = smallVisible
- smallBoard.Parent = topRightTrayContainer
- end
- if bigBoard then
- if bigVisible then
- previousBigPlayerList = bigBoard
- local centerDialogSupported, msg = pcall(function() game.GuiService:AddCenterDialog(previousBigPlayerList, Enum.CenterDialogType.PlayerInitiatedDialog,
- function()
- previousBigPlayerList.Visible = true
- end)
- end)
- bigBoard.Visible = bigVisible
- else
- bigBoard.Visible = false
- end
- bigBoard.Parent = container
- end
- return container
-end
-
-
-local function showBigPlayerWindow()
- if container:FindFirstChild("BigPlayerlist") then
- if container.BigPlayerlist.Visible then
- return
- end
- end
-
- bigWindowImposter.Visible = true
- bigWindowImposter:TweenSizeAndPosition(bigWindowSize, bigWindowPosition, Enum.EasingDirection.Out, bigEasingStyle, 0.3, true,
- function(state)
- if state == Enum.TweenStatus.Completed then
- bigWindowImposter.Visible = false
- if container:FindFirstChild("BigPlayerlist") then
- container.BigPlayerlist.Visible = true
- end
- end
- end)
-end
-
-local function hideBigPlayerWindow(completed)
- if playerContextMenu then
- playerContextMenu.Visible = false
- end
-
- if container:FindFirstChild("BigPlayerlist") then
- if container.BigPlayerlist.Visible == false and bigWindowImposter.Visible == false then
- if completed then
- completed()
- end
- --Already completely hidden
- return
- end
- container.BigPlayerlist.Visible = false
- end
-
- local completedFunction = completed
- bigWindowImposter.Visible = true
- bigWindowImposter:TweenSizeAndPosition(UDim2.new(0.4, 0, 0.4, 0), UDim2.new(0.3, 0, 0.3, 0), Enum.EasingDirection.In, Enum.EasingStyle.Quart, 0.15, true,
- function(state)
- if state == Enum.TweenStatus.Completed then
- bigWindowImposter.Visible = false
- if completedFunction then
- completedFunction()
- end
- end
- end)
-end
-local function hideSmallPlayerWindow(completed)
- if playerContextMenu then
- playerContextMenu.Visible = false
- end
- if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then
- local completedFunction = completed
- if topRightTrayContainer.SmallPlayerlist.Visible then
- topRightTrayContainer.SmallPlayerlist:TweenPosition(UDim2.new(1,0,smallWindowPosition.Y.Scale, smallWindowPosition.Y.Offset), Enum.EasingDirection.Out, smallEasingStyle, 0.3, true,
- function(state)
- --print(state)
- if state == Enum.TweenStatus.Completed then
- if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then
- topRightTrayContainer.SmallPlayerlist.Visible = false
- end
- if completedFunction then
- completedFunction()
- end
- end
- end)
- return
- end
- end
- if completed then
- completed()
- end
-end
-
-
-transitionWindowsFunction = function(desiredState)
- if desiredState == "Big" then
- minimizedState.Visible = false
- hideSmallPlayerWindow()
-
- if previousBigPlayerList ~= nil then
- if previousBigPlayerList ~= container:FindFirstChild("BigPlayerlist") then
- pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end)
- previousBigPlayerList = nil
- previousBigPlayerList = container:FindFirstChild("BigPlayerlist")
- end
- else
- previousBigPlayerList = container:FindFirstChild("BigPlayerlist")
- end
-
- if previousBigPlayerList then
- local firstShow = false
- local centerDialogSupported, msg = pcall(function() game.GuiService:AddCenterDialog(previousBigPlayerList, Enum.CenterDialogType.PlayerInitiatedDialog,
- function()
- if not firstShow then
- showBigPlayerWindow()
- firstShow = true
- else
- previousBigPlayerList.Visible = true
- end
- end)
- end)
- if centerDialogSupported == false then
- print("Exception", msg)
- showBigPlayerWindow()
- end
- else
- showBigPlayerWindow()
- end
- currentWindowState = "Big"
- elseif desiredState == "Small" then
- minimizedState.Visible = false
- if previousBigPlayerList ~= nil then
- pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end)
- previousBigPlayerList = nil
- end
-
- hideBigPlayerWindow()
- if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then
- if not topRightTrayContainer.SmallPlayerlist.Visible or topRightTrayContainer.SmallPlayerlist.Position ~= smallWindowPosition then
- topRightTrayContainer.SmallPlayerlist.Visible = true
- topRightTrayContainer.SmallPlayerlist:TweenPosition(smallWindowPosition, Enum.EasingDirection.Out, smallEasingStyle, 0.3, true)
- end
- end
- currentWindowState = "Small"
- elseif desiredState == "None" then
- if previousBigPlayerList ~= nil then
- pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end)
- previousBigPlayerList = nil
- end
-
- local smallDone = false
- local bigDone = false
- hideSmallPlayerWindow(
- function()
- smallDone = true
- if bigDone and smallDone then
- minimizedState.Visible = true
- end
- end)
- hideBigPlayerWindow(
- function()
- bigDone = true
- if bigDone and smallDone then
- minimizedState.Visible = true
- end
- end)
- currentWindowState = "None"
- end
-end
-
-local function getStatValuesForPlayer(player)
- local leaderstats = player:FindFirstChild("leaderstats")
- if leaderstats then
- local children = leaderstats:GetChildren()
- if children then
- local result = {}
- --Just go based on position
- for i, stat in ipairs(children) do
- if stat:IsA("IntValue") then
- table.insert(result, stat)
- else
- table.insert(result, 0)
- end
- end
-
- return result, leaderstats
- end
- end
- return nil
-end
-
---ChildAdded on Player (if it's name is "leaderstats")
-
-if UserSettings and LoadLibrary then
-
- RbxGui,msg = t
- print("Libraries loaded")
-
- local function createTeamName(name, color)
- local fontHeight = 20 --RbxGui.GetFontHeight(Enum.Font.ArialBold, Enum.FontSize.Size18)
- local frame = Instance.new("Frame")
- frame.Name = "Team-" .. name
- frame.BorderSizePixel = 0
- frame.BackgroundTransparency = 0.5
- frame.BackgroundColor3 = Color3.new(1,1,1)
- frame.Size = UDim2.new(1, 0, 0, fontHeight)
- frame.Position = UDim2.new(0,0,0,0)
-
- local label = Instance.new("TextLabel")
- label.Name = "NameLabel"
- label.Text = " " .. name
- label.Font = Enum.Font.ArialBold
- label.FontSize = Enum.FontSize.Size18
- label.Position = UDim2.new(0,0,0,0)
- label.Size = UDim2.new(1,0,1,0)
- label.TextColor3 = Color3.new(1,1,1)
- label.BackgroundTransparency = 0.5
- label.BackgroundColor3 = getColor(color)
- label.BorderSizePixel = 0
- label.TextXAlignment = Enum.TextXAlignment.Left
- label = RbxGui.AutoTruncateTextObject(label)
- label.Parent = frame
-
- return frame
- end
-
- local function getFriendStatusIcon(friendStatus)
- if friendStatus == Enum.FriendStatus.Unknown or friendStatus == Enum.FriendStatus.NotFriend then
- return nil
- elseif friendStatus == Enum.FriendStatus.Friend then
- return "rbxasset://textures/ui/PlayerlistFriendIcon.png"
- elseif friendStatus == Enum.FriendStatus.FriendRequestSent then
- return "rbxasset://textures/ui/PlayerlistFriendRequestSentIcon.png"
- elseif friendStatus == Enum.FriendStatus.FriendRequestReceived then
- return "rbxasset://textures/ui/PlayerlistFriendRequestReceivedIcon.png"
- else
- error("Unknown FriendStatus: " .. friendStatus)
- end
- end
-
- local function getMembershipTypeIcon(membershipType)
- --TODO: replace with proper icons
- if membershipType == Enum.MembershipType.None then
- return ""
- elseif membershipType == Enum.MembershipType.BuildersClub then
- return "rbxasset://textures/ui/TinyBcIcon.png"
- elseif membershipType == Enum.MembershipType.TurboBuildersClub then
- return "rbxasset://textures/ui/TinyTbcIcon.png"
- elseif membershipType == Enum.MembershipType.OutrageousBuildersClub then
- return "rbxasset://textures/ui/TinyObcIcon.png"
- else
- error("Uknown membershipType" .. membershipType)
- end
- end
-
-
- local function updatePlayerFriendStatus(nameObject, friendStatus)
- local fontHeight = 20 --RbxGui.GetFontHeight(Enum.Font.ArialBold, Enum.FontSize.Size14)
-
- local friendIconImage = getFriendStatusIcon(friendStatus)
- nameObject.MembershipTypeLabel.FriendStatusLabel.Visible = (friendIconImage ~= nil)
-
- if friendIconImage ~= nil then
- --Show friend icon
- nameObject.MembershipTypeLabel.FriendStatusLabel.Image = friendIconImage
- nameObject.NameLabel.Position =UDim2.new(0,2*fontHeight,0,1)
- nameObject.NameLabel.Size = UDim2.new(1,-2*fontHeight,1,-2)
- else
- --Hide the friend icon
- nameObject.NameLabel.Position = UDim2.new(0,fontHeight+1,0,1)
- nameObject.NameLabel.Size = UDim2.new(1,-(fontHeight+1),1,-2)
- end
- end
- local function updatePlayerName(nameObject, membershipStatus, teamColor)
- local fontHeight = 20 --RbxGui.GetFontHeight(Enum.Font.ArialBold, Enum.FontSize.Size14)
-
- nameObject.Size = UDim2.new(1,0,0,fontHeight)
- nameObject.MembershipTypeLabel.Image = getMembershipTypeIcon(membershipStatus)
- end
-
-
- local function updatePlayerNameColor(player, teamColor)
- local function updatePlayerNameColorHelper(nameObject)
- if teamColor ~= nil then
- nameObject.NameLabel.TextColor3 = getColor(teamColor)
- nameObject.NameLabel.FullNameLabel.TextColor3 = getColor(teamColor)
- else
- nameObject.NameLabel.TextColor3 = Color3.new(1,1,1)
- nameObject.NameLabel.FullNameLabel.TextColor3 = Color3.new(1,1,1)
- end
- end
-
- updatePlayerNameColorHelper(playerTable[player].NameObjectSmall)
- updatePlayerNameColorHelper(playerTable[player].NameObjectBig)
- end
-
-
- local function createPlayerName(name, membershipStatus, teamColor, friendStatus)
- local frame = Instance.new("Frame")
- frame.Name = "Player_" .. name
- if lightBackground then
- frame.BackgroundColor3 = Color3.new(1,1,1)
- else
- frame.BackgroundColor3 = Color3.new(1,1,1)
- end
- frame.BackgroundTransparency = 0.5
- frame.BorderSizePixel = 0
-
- local membershipStatusLabel = Instance.new("ImageLabel")
- membershipStatusLabel.Name = "MembershipTypeLabel"
- membershipStatusLabel.BackgroundTransparency = 1
- membershipStatusLabel.Size = UDim2.new(1,0,1,0)
- membershipStatusLabel.Position = UDim2.new(0,0,0,0)
- membershipStatusLabel.SizeConstraint = Enum.SizeConstraint.RelativeYY
- membershipStatusLabel.Parent = frame
-
- local friendStatusLabel = Instance.new("ImageLabel")
- friendStatusLabel.Name = "FriendStatusLabel"
- friendStatusLabel.Visible = false
- friendStatusLabel.BackgroundTransparency = 1
- friendStatusLabel.Size = UDim2.new(1,0,1,0)
- friendStatusLabel.Position = UDim2.new(1,0,0,0)
- friendStatusLabel.Parent = membershipStatusLabel
-
- local changeNameFunction
- local nameLabel = Instance.new("TextLabel")
- nameLabel.Name = "NameLabel"
- nameLabel.Text = name
- nameLabel.Font = Enum.Font.ArialBold
- nameLabel.FontSize = Enum.FontSize.Size14
- nameLabel.TextColor3 = Color3.new(1,1,1)
- nameLabel.BackgroundTransparency = 1
- nameLabel.BackgroundColor3 = Color3.new(0,0,0)
- nameLabel.TextXAlignment = Enum.TextXAlignment.Left
- nameLabel, changeNameFunction = RbxGui.AutoTruncateTextObject(nameLabel)
- nameLabel.Parent = frame
-
- updatePlayerName(frame, membershipStatus, teamColor)
- if supportFriends then
- updatePlayerFriendStatus(frame, friendStatus)
- else
- updatePlayerFriendStatus(frame, Enum.FriendStatus.NotFriend)
- end
- return frame, changeNameFunction
- end
-
- local function createStatColumn(i, numColumns, isTeam, color3, isHeader)
- local textLabel = Instance.new("TextLabel")
- textLabel.Name = "Stat" .. i
- textLabel.TextColor3 = Color3.new(1,1,1)
- textLabel.TextXAlignment = Enum.TextXAlignment.Right
- textLabel.TextYAlignment = Enum.TextYAlignment.Center
- textLabel.FontSize = Enum.FontSize.Size14
- if isHeader then
- textLabel.FontSize = Enum.FontSize.Size18
- else
- textLabel.FontSize = Enum.FontSize.Size14
- end
- if isHeader or isTeam then
- textLabel.Font = Enum.Font.ArialBold
- else
- textLabel.Font = Enum.Font.Arial
- end
-
- if isTeam then
- textLabel.BackgroundColor3 = color3
- textLabel.Text = 0
- else
- textLabel.BackgroundColor3 = Color3.new(0,0,0)
- textLabel.Text = ""
- end
- textLabel.BackgroundTransparency = 1
- if i == numColumns then
- textLabel.Size = UDim2.new(1/numColumns, -6, 1, 0)
- else
- textLabel.Size = UDim2.new(1/numColumns, -4, 1, 0)
- end
-
- textLabel.Position = UDim2.new((i-1) * (1/numColumns), 0, 0, 0)
- return RbxGui.AutoTruncateTextObject(textLabel)
- end
-
- local function createStatHeaders(stats, numColumns, isBig)
- local frame = Instance.new("Frame")
- frame.Name = "Headers"
- frame.BorderSizePixel = 0
- frame.BackgroundColor3 = Color3.new(0,0,0)
- frame.BackgroundTransparency = 1
-
- local nameSize
- if isBig then
- nameSize = 0.5
- elseif numColumns == 1 then
- nameSize = 0.7
- elseif numColumns == 2 then
- nameSize = 0.6
- else
- nameSize = 0.45
- end
- frame.Size = UDim2.new(1-nameSize, 0, 1,0)
- if isBig then
- frame.Position = UDim2.new(nameSize,-25, 0,0)
- else
- frame.Position = UDim2.new(nameSize,0, 0,0)
- end
-
- local i = 1
- while i <= numColumns do
- local headerColumn, changeText = createStatColumn(i, numColumns, false, nil, true)
- changeText(stats[i])
- headerColumn.Parent = frame
- i = i + 1
- end
- return frame, textChangers
- end
-
- local function createStatColumns(nameObject, numColumns, isTeam, isBig)
- local frame = Instance.new("Frame")
- frame.Name = nameObject.Name .. "_WithStats"
- frame.BorderSizePixel = 0
- frame.BackgroundColor3 = nameObject.BackgroundColor3
- frame.BackgroundTransparency = nameObject.BackgroundTransparency
- frame.Size = nameObject.Size
- frame.Position = nameObject.Position
-
- nameObject.BackgroundTransparency = 1
-
- if numColumns == 0 then
- nameObject.Size = UDim2.new(1,0,1,0)
- nameObject.Position = UDim2.new(0,0,0,0)
- nameObject.Parent = frame
- return frame
- end
-
- local statFrame = Instance.new("Frame")
- statFrame.Name = "Stats"
- if isTeam then
- statFrame.BorderSizePixel = 0
- statFrame.BackgroundColor3 = nameObject.NameLabel.BackgroundColor3
- statFrame.BackgroundTransparency = nameObject.NameLabel.BackgroundTransparency
- else
- statFrame.BackgroundTransparency = 1
- end
-
- local nameSize
- if isBig then
- nameSize = 0.5
- elseif numColumns == 1 then
- nameSize = 0.7
- elseif numColumns == 2 then
- nameSize = 0.6
- else
- nameSize = 0.45
- end
- nameObject.Size = UDim2.new(nameSize, 0, 1, 0)
- nameObject.Position = UDim2.new(0, 0, 0, 0)
- statFrame.Size = UDim2.new(1-nameSize,0, 1,0)
- statFrame.Position = UDim2.new(nameSize,0, 0,0)
-
- nameObject.Parent = frame
- statFrame.Parent = frame
-
- local textChangers = {}
- local i = 1
- while i <= numColumns do
- local statColumn, changeText = createStatColumn(i, numColumns, isTeam, statFrame.BackgroundColor3)
- statColumn.Parent = statFrame
- table.insert(textChangers, changeText)
-
- i = i + 1
- end
-
- return frame, statFrame, textChangers
- end
-
- local function createAlternatingRows(objects)
- for i, line in ipairs(objects) do
- if i % 2 == 0 then
- line.BackgroundTransparency = 1
- else
- line.BackgroundTransparency = 0.95
- end
- end
- end
- local removeFromTeam = nil
-
- local function clearTableEntry(obj, tableInfo)
- if tableInfo.MainObjectSmall then
- tableInfo.MainObjectSmall.Parent = nil
- tableInfo.MainObjectSmall = nil
- end
- if tableInfo.MainObjectBig then
- tableInfo.MainObjectBig.Parent = nil
- tableInfo.MainObjectBig = nil
- end
- if tableInfo.Connections then
- for i, connection in ipairs(tableInfo.Connections) do
- connection:disconnect()
- end
- tableInfo.Connections = nil
- end
- if tableInfo.LeaderStatConnections then
- for i, connection in ipairs(tableInfo.LeaderStatConnections) do
- connection:disconnect()
- end
- tableInfo.LeaderStatConnections = nil
- end
- if tableInfo.CurrentTeam then
- removeFromTeam(obj)
- tableInfo.CurrentTeam = nil
- end
- if tableInfo.Players then
- for i, player in ipairs(tableInfo.Players) do
- playerTable[player].CurrentTeam = nil
- end
- tableInfo.Players = {}
- end
- if tableInfo.StatValues then
- tableInfo.StatValues = nil
- end
- end
-
- local function resetPlayerTable()
- for player, info in pairs(playerTable) do
- clearTableEntry(player, info)
- playerTable[player] = nil
- end
- playerTable = {}
- end
-
- local function resetTeamTable()
- for team, info in pairs(teamTable) do
- clearTableEntry(team, info)
- teamTable[team] = nil
- end
- teamTable = {}
- teamColorTable = {}
- end
-
- local function getBoardTypeInfo()
- local isTeam = (currentBoardType == "TeamScore" or currentBoardType == "TeamList")
- local isScore = (currentBoardType == "TeamScore" or currentBoardType == "PlayerScore")
- return isTeam, isScore
- end
-
-
- local function recomputeTeamScore(team, column)
- if not team or team == "Neutral" then
- return
- end
-
- local function recomputeScoreHelper(statChangers)
- if statChangers and column <= #statChangers then
- local sum = 0
- for i, p in ipairs(teamTable[team].Players) do
- if playerTable[p].StatValues and column <= #playerTable[p].StatValues then
- sum = sum + playerTable[p].StatValues[column].Value
- end
- end
- statChangers[column](sum)
- end
- end
-
- recomputeScoreHelper(teamTable[team].StatChangersSmall)
- recomputeScoreHelper(teamTable[team].StatChangersBig)
- end
- local function recomputeCompleteTeamScore(team)
- local col = 1
- while col <= currentStatCount do
- recomputeTeamScore(team, col)
- col = col + 1
- end
- end
- removeFromTeam = function(player)
- if playerTable[player].CurrentTeam ~= nil then
- ArrayRemove(teamTable[playerTable[player].CurrentTeam].Players, player)
- recomputeCompleteTeamScore(playerTable[player].CurrentTeam)
- playerTable[player].CurrentTeam = nil
- end
- end
-
- local function assignToTeam(player)
- local isTeam, isScore = getBoardTypeInfo()
-
- if isTeam then
- local newTeam = nil
-
- if player.Neutral or teamColorTable[player.TeamColor.Name] == nil then
- newTeam = "Neutral"
- else
- newTeam = teamColorTable[player.TeamColor.Name]
- end
-
- if playerTable[player].CurrentTeam == newTeam then
- return
- end
-
- removeFromTeam(player)
-
- playerTable[player].CurrentTeam = newTeam
- table.insert(teamTable[newTeam].Players, player)
-
- if newTeam == "Neutral" then
- updatePlayerNameColor(player, nil)
- else
- updatePlayerNameColor(player, player.TeamColor)
- end
-
- recomputeCompleteTeamScore(newTeam)
-
- --Relayout
- if sortPlayerListsFunction then
- sortPlayerListsFunction()
- end
- end
- end
-
- local function buildTeamObject(team, numStatColumns, suffix)
- local isTeam, isScore = getBoardTypeInfo()
- local teamObject = createTeamName(team.Name, team.TeamColor)
- if not teamTable[team] then
- teamTable[team] = {}
- end
- teamTable[team]["NameObject" .. suffix] = teamObject
- if isScore then
- local statObject
- local textChangers
- teamObject, statObject, textChangers = createStatColumns(teamObject, numStatColumns, true, suffix == "Big")
- teamTable[team]["StatObject" .. suffix] = statObject
- teamTable[team]["StatChangers" .. suffix] = textChangers
- end
- teamTable[team]["MainObject" .. suffix] = teamObject
- if not teamTable[team].Players then
- teamTable[team].Players = {}
- end
- return teamObject
- end
-
- local currentContextMenuPlayer = nil
- local function updatePlayerContextMenu(player)
- currentContextMenuPlayer = player
- local elementHeight = 20
- local function highlight(button)
- button.TextColor3 = Color3.new(0,0,0)
- button.BackgroundColor3 = Color3.new(0.8,0.8,0.8)
- end
- local function clearHighlight(button)
- button.TextColor3 = Color3.new(1,1,1)
- button.BackgroundColor3 = Color3.new(0,0,0)
- end
- if playerContextMenu == nil then
- playerContextMenu = Instance.new("Frame")
- playerContextMenu.Name = "PlayerListContextMenu"
- playerContextMenu.BackgroundTransparency = 1
- playerContextMenu.Visible = false
-
- local playerContextMenuButton = Instance.new("TextButton")
- playerContextMenuButton.Name = "PlayerListContextMenuButton"
- playerContextMenuButton.Text = ""
- playerContextMenuButton.Style = Enum.ButtonStyle.RobloxButtonDefault
- playerContextMenuButton.ZIndex = 4
- playerContextMenuButton.Size = UDim2.new(1, 0, 1, -20)
- playerContextMenuButton.Visible = true
- playerContextMenuButton.Parent = playerContextMenu
-
- for i, contextElement in ipairs(contextMenuElements) do
- local element = contextElement
- if element.Type == "Button" then
- local button = Instance.new("TextButton")
- button.Name = "ContextButton" .. i
- button.BackgroundColor3 = Color3.new(0,0,0)
- button.BorderSizePixel = 0
- button.TextXAlignment = Enum.TextXAlignment.Left
- button.Text = " " .. contextElement.Text
- button.Font = Enum.Font.Arial
- button.FontSize = Enum.FontSize.Size14
- button.Size = UDim2.new(1, 8, 0, elementHeight)
- button.TextColor3 = Color3.new(1,1,1)
- button.ZIndex = 4
- button.Parent = playerContextMenuButton
- button.MouseButton1Click:connect(function()
- if button.Active then
- local success, result = pcall(function() element.DoIt(currentContextMenuPlayer) end)
- playerContextMenu.Visible = false
- end
- end)
-
- button.MouseEnter:connect(function()
- if button.Active then
- highlight(button)
- end
- end)
- button.MouseLeave:connect(function()
- if button.Active then
- clearHighlight(button)
- end
- end)
-
- contextElement.Button = button
- contextElement.Element = button
- elseif element.Type == "Label" then
- local frame = Instance.new("Frame")
- frame.Name = "ContextLabel" .. i
- frame.BackgroundTransparency = 1
- frame.Size = UDim2.new(1, 8, 0, elementHeight)
-
- local label = Instance.new("TextLabel")
- label.Name = "Text1"
- label.BackgroundTransparency = 1
- label.BackgroundColor3 = Color3.new(1,1,1)
- label.BorderSizePixel = 0
- label.TextXAlignment = Enum.TextXAlignment.Left
- label.Font = Enum.Font.ArialBold
- label.FontSize = Enum.FontSize.Size14
- label.Position = UDim2.new(0.0, 0, 0, 0)
- label.Size = UDim2.new(0.5, 0, 1, 0)
- label.TextColor3 = Color3.new(1,1,1)
- label.ZIndex = 4
- label.Parent = frame
- element.Label1 = label
-
- if element.GetText2 then
- label = Instance.new("TextLabel")
- label.Name = "Text2"
- label.BackgroundTransparency = 1
- label.BackgroundColor3 = Color3.new(1,1,1)
- label.BorderSizePixel = 0
- label.TextXAlignment = Enum.TextXAlignment.Right
- label.Font = Enum.Font.Arial
- label.FontSize = Enum.FontSize.Size14
- label.Position = UDim2.new(0.5, 0, 0, 0)
- label.Size = UDim2.new(0.5, 0, 1, 0)
- label.TextColor3 = Color3.new(1,1,1)
- label.ZIndex = 4
- label.Parent = frame
- element.Label2 = label
- end
- frame.Parent = playerContextMenuButton
- element.Label = frame
- element.Element = frame
- end
- end
-
- playerContextMenu.ZIndex = 4
- playerContextMenu.MouseLeave:connect(function() playerContextMenu.Visible = false end)
- robloxLock(playerContextMenu)
- playerContextMenu.Parent = NewPlayerListGui
-
- end
-
- local elementPos = 0
- for i, contextElement in ipairs(contextMenuElements) do
- local isVisible = false
-
- if contextElement.IsVisible then
- local success, visible = pcall(function() return contextElement.IsVisible(currentContextMenuPlayer) end)
- if success then
- isVisible = visible
- else
- print("Error in IsVisible call: " .. visible)
- end
- end
-
- if contextElement.Type == "Button" then
- contextElement.Button.Visible = isVisible
- if contextElement.Button.Visible then
- isVisible = true
- clearHighlight(contextElement.Button)
- if contextElement.IsActive then
- local success, active = pcall(function() return contextElement.IsActive(currentContextMenuPlayer) end)
- if success then
- contextElement.Button.Active = active
- else
- print("Error in IsActive call: " .. active)
- end
- end
- if contextElement.Button.Active then
- contextElement.Button.TextColor3 = Color3.new(1,1,1)
- else
- contextElement.Button.TextColor3 = Color3.new(0.7,0.7,0.7)
- end
- end
- elseif contextElement.Type == "Label" then
- contextElement.Label.Visible = isVisible
- if contextElement.Label.Visible then
- local success, text = pcall(function() return contextElement.GetText1(currentContextMenuPlayer) end)
- if success then
- contextElement.Label1.Text = " " .. text
- else
- print("Error in GetText1 call: " .. text)
- end
-
- if contextElement.GetText2 then
- local success, text = pcall(function() return contextElement.GetText2(currentContextMenuPlayer) end)
- if success then
- contextElement.Label2.Text = " " .. text
- else
- print("Error in GetText2 call: " .. text)
- end
- end
- end
- end
- if isVisible then
- contextElement.Element.Position = UDim2.new(0,-4, 0, elementPos * elementHeight - 4)
- elementPos = elementPos + 1
- end
- end
- playerContextMenu.Size = UDim2.new(0, 150, 0, elementPos*elementHeight + 13 + 20)
- end
- local function showPlayerMenu(player, x, y)
- updatePlayerContextMenu(player)
- x = x - (playerContextMenu.AbsoluteSize.X/2)
- if x + playerContextMenu.AbsoluteSize.X >= NewPlayerListGui.AbsoluteSize.X then
- x = NewPlayerListGui.AbsoluteSize.X - playerContextMenu.AbsoluteSize.X
- end
- playerContextMenu.Visible = true
- playerContextMenu.Position = UDim2.new(0, x, 0, y-playerContextMenu.AbsoluteSize.Y)
- end
-
- local function buildPlayerObject(player, numStatColumns, suffix)
- local isTeam, isScore = getBoardTypeInfo()
-
- local playerObject = nil
- local changePlayerNameFunction = nil
- local currentColor = nil
- if isTeam and not player.Neutral then
- currentColor = player.TeamColor.Color
- else
- currentColor = Color3.new(1,1,1)
- end
- playerObject, changePlayerNameFunction = createPlayerName(player.Name, player.MembershipType, currentColor, getFriendStatus(player))
-
- if not playerTable[player] then
- playerTable[player] = {}
- end
- if not playerTable[player].Connections then
- playerTable[player].Connections = {}
- end
- if not playerTable[player].CurrentTeam then
- playerTable[player].CurrentTeam = nil
- end
- playerTable[player]["NameObject" .. suffix] = playerObject
- playerTable[player]["ChangeName" .. suffix] = changePlayerNameFunction
-
- if isScore then
- local statObject = nil
- local textChangers = nil
- playerObject, statObject, textChangers = createStatColumns(playerObject, numStatColumns, false, suffix == "Big")
- playerTable[player]["StatObject" .. suffix]= statObject
- playerTable[player]["StatChangers" .. suffix] = textChangers
-
- local statValues, leaderstats = getStatValuesForPlayer(player)
- if not statValues or #statValues < numStatColumns then
- if not playerTable[player].LeaderStatConnections then
- playerTable[player].LeaderStatConnections = {}
- end
- --Setup a listener to see when this data gets filled in
- if not leaderstats then
- --print("No leaderstats for ", player)
- --We don't even have a leaderstats child, wait for one
- table.insert(playerTable[player].LeaderStatConnections,
- player.ChildAdded:connect(
- function(child)
- if child.Name == "leaderstats" then
- --print("Got a leaderstats for ", player)
-
- --Connections will be torn down
- recreatePlayerFunction(player)
- else
- --print("Unknown child, listening for connection")
- table.insert(playerTable[player].LeaderStatConnections,
- child.Changed:connect(
- function(prop)
- if prop == "Name" and child.Name == "leaderstats" then
- --Connections will be torn down
- recreatePlayerFunction(player)
- end
- end))
- end
- end))
- else
- --print("Need more children")
- --We have a leaderstats, but not enough children, recreate if we get them
- table.insert(playerTable[player].LeaderStatConnections,
- leaderstats.ChildAdded:connect(
- function(child)
- --TODO only look for IntValue
- recreatePlayerFunction(player)
- end)
- )
- table.insert(playerTable[player].LeaderStatConnections,
- leaderstats.AncestryChanged:connect(
- function(child)
- --We got deleted, try again
- recreatePlayerFunction(player)
- end)
- )
- end
- end
- if statValues then
- if not playerTable[player].StatValues then
- playerTable[player].StatValues = {}
- end
- local pos = 1
- while pos <= numStatColumns and pos <= #statValues do
- local currentColumn = pos
- local statValue = statValues[pos]
- local statChanger = textChangers[pos]
-
- local updateStat = function(val)
- statChanger(val)
- recomputeTeamScore(playerTable[player].CurrentTeam, currentColumn)
- end
- if pos > #playerTable[player].StatValues then
- table.insert(playerTable[player].StatValues, statValue)
- end
-
- table.insert(playerTable[player].Connections,
- statValue.Changed:connect(updateStat)
- )
- table.insert(playerTable[player].Connections,
- statValue.AncestryChanged:connect(
- function()
- recreatePlayerFunction(player)
- end)
- )
- updateStat(statValue.Value)
- pos = pos + 1
- end
- end
- end
-
- if supportFriends and player ~= game.Players.LocalPlayer and player.userId > 0 and game.Players.LocalPlayer.userId > 0 then
- local button = Instance.new("TextButton")
- button.Name = playerObject.Name .. "Button"
- button.Text = ""
- button.Active = false
- button.Size = playerObject.Size
- button.Position = playerObject.Position
- button.BackgroundColor3 = playerObject.BackgroundColor3
-
- local secondButton = Instance.new("TextButton")
- secondButton.Name = playerObject.Name .. "RealButton"
- secondButton.Text = ""
- secondButton.BackgroundTransparency = 1
- secondButton.BackgroundColor3 = playerObject.BackgroundColor3
- secondButton.Parent.BackgroundTransparency = 1
- secondButton.Parent.Visible = true
- secondButton.ZIndex = 2
- secondButton.Size = UDim2.new(1,0,1,0)
-
- local previousTransparency = nil
- table.insert(playerTable[player].Connections,
- secondButton.MouseEnter:connect(--button.MouseEnter:connect(
- function()
- if previousTransparency == nil then
- previousTransparency = secondButton--[[button]].BackgroundTransparency
- end
-
- if lightBackground then
- --button.BackgroundColor3 = Color3.new(0,0,0)
- --button.BackgroundTransparency = 0
- secondButton.Parent.BackgroundTransparency = 0
- else
- --button.BackgroundColor3 = Color3.new(1,1,1)
- --secondButton.button.BackgroundTransparency = 1--0.80
- secondButton.Parent.BackgroundTransparency = 1
- end
- end))
- table.insert(playerTable[player].Connections,
- secondButton.MouseLeave:connect(--button.MouseLeave:connect(
- function()
- if previousTransparency ~= nil then
- if lightBackground then
- --button.BackgroundColor3 = Color3.new(1,1,1)
- --button.BackgroundTransparency = previousTransparency
- else
- --secondButtonbutton.BackgroundColor3 = Color3.new(1,1,1)
- --nbutton.BackgroundTransparency = previousTransparency
- end
-
- previousTransparency = nil
- end
- secondButton.Parent.BackgroundTransparency = 1
- end))
-
- local mouseDownX, mouseDownY
- table.insert(playerTable[player].Connections,
- secondButton.MouseButton1Down:connect(function(x,y)
- mouseDownX = x
- mouseDownY = y
- end))
- table.insert(playerTable[player].Connections,
- secondButton.MouseButton1Click:connect(function()
- showPlayerMenu(player, mouseDownX, secondButton.AbsolutePosition.Y + secondButton.AbsoluteSize.Y )
- end))
- playerObject.BackgroundTransparency = 1
- playerObject.Size = UDim2.new(1,0,1,0)
- playerObject.Position = UDim2.new(0,0,0,0)
- playerObject.Parent = button
-
- playerTable[player]["MainObject" .. suffix] = button
-
- playerObject = button
- else
- playerTable[player]["MainObject" .. suffix] = playerObject
-
- if player == game.Players.LocalPlayer and supportFriends then
- table.insert(playerTable[player].Connections,
- player.FriendStatusChanged:connect(
- function(otherPlayer, friendStatus)
- if playerTable[otherPlayer] then
- updatePlayerFriendStatus(playerTable[otherPlayer]["NameObject" .. suffix], friendStatus)
- end
- end)
- )
- end
- end
- table.insert(playerTable[player].Connections,
- player.Changed:connect(
- function(prop)
- if prop == "MembershipType" then
- updatePlayerName(playerTable[player]["NameObject" .. suffix], player.MembershipType, currentColor)
- elseif prop == "Name" then
- playerTable[player]["ChangeName" .. suffix](player.Name)
- elseif prop == "Neutral" or prop == "TeamColor" then
- assignToTeam(player)
- end
- end)
- )
- return playerObject
- end
-
- local function orderScrollList(scrollOrder, objectName, scrollFrame)
- local pos = 0
- local order = {}
- local isTeam, isScore = getBoardTypeInfo()
- for i, obj in ipairs(scrollOrder) do
- order[obj] = 0
- end
-
- if isTeam then
- local teams = getTeams()
- for i, team in ipairs(teams) do
- --print(team, objectName, teamTable[team][objectName])
- order[teamTable[team][objectName]] = pos
- pos = pos + 1
- for i, player in ipairs(teamTable[team].Players) do
- if playerTable[player] then
- order[playerTable[player][objectName]] = pos
- pos = pos + 1
- end
- end
- end
-
- if #teamTable["Neutral"].Players > 0 then
- teamTable["Neutral"][objectName].Parent = scrollFrame
- order[teamTable["Neutral"][objectName]] = pos
- pos = pos + 1
- for i, player in ipairs(teamTable["Neutral"].Players) do
- order[playerTable[player][objectName]] = pos
- pos = pos + 1
- end
- else
- teamTable["Neutral"][objectName].Parent = nil
- end
- else
- local players = getPlayers()
- for i, player in ipairs(players) do
- order[playerTable[player][objectName]] = pos
- pos = pos + 1
- end
- end
-
- table.sort(scrollOrder,
- function(a,b)
- return order[a] < order[b]
- end)
- end
-
- local function createPlayerListBasics(frame, isBig)
- local headerFrame = Instance.new("Frame")
- headerFrame.Name = "Header"
- headerFrame.BackgroundTransparency = 1
- headerFrame.Size = UDim2.new(1,-13,0,26)
- headerFrame.Position = UDim2.new(0,0,0,0) --UDim2.new(0,-6,0,-6)
- headerFrame.Parent = frame
-
- local lowerPaneFrame = Instance.new("Frame")
- lowerPaneFrame.Name = "ScrollingArea"
- lowerPaneFrame.BackgroundTransparency = 1
- lowerPaneFrame.Size = UDim2.new(1,-3,1,-26)
- lowerPaneFrame.Position = UDim2.new(0,0,0,26)
- lowerPaneFrame.Parent = frame
-
- local scrollOrder = {}
- local scrollFrame, scrollUp, scrollDown, recalculateScroll = RbxGui.CreateScrollingFrame(scrollOrder)
-
- local scrollBar = Instance.new("Frame")
- scrollBar.Name = "ScrollBar"
- scrollBar.BackgroundTransparency = 0.9
- scrollBar.BackgroundColor3 = Color3.new(1,1,1)
- scrollBar.BorderSizePixel = 0
- scrollBar.Size = UDim2.new(0, 17, 1, -36)
- if isBig then scrollBar.Size = UDim2.new(0, 17, 1, -61) end
- scrollBar.Parent = lowerPaneFrame
-
- scrollFrame.Parent = lowerPaneFrame
- scrollUp.Parent = lowerPaneFrame
- scrollDown.Parent = lowerPaneFrame
-
- if isBig then
- scrollFrame.Position = UDim2.new(0,0,0,0) --UDim2.new(0,-7,0,0)
- scrollUp.Position = UDim2.new(1,-41,0,5) --UDim2.new(1,-19,0,0)
- scrollDown.Position = UDim2.new(1,-41,1,-35) -- UDim2.new(1,-19,1,-15)
- scrollBar.Position = UDim2.new(1, -41, 0, 24) -- UDim2.new(1, -19, 0, 19)
-
- scrollFrame.Size = UDim2.new(1,-48,1,0)
- headerFrame.Size = UDim2.new(1,-20,0,32)
-
- else
- scrollBar.Position = UDim2.new(1, -19, 0, 14) --UDim2.new(1, -17, 0, 19)
- scrollFrame.Position = UDim2.new(0,1,0,0) -- UDim2.new(0,-5,0,0)
- scrollUp.Position = UDim2.new(1,-19,0,-5) --UDim2.new(1,-17,0,0)
- scrollDown.Position = UDim2.new(1,-19,1,-20) --UDim2.new(1,-17,1,-15)
-
- lowerPaneFrame.Position = UDim2.new(0,0,0,30)
-
- local toggleScrollBar = function(visible)
- if visible then
- scrollFrame.Size = UDim2.new(1,-16,1,0)
- headerFrame.Size = UDim2.new(1,-16,0,32)
- else
- scrollFrame.Size = UDim2.new(1,0,1,0)--UDim2.new(1,5,1,0)
- headerFrame.Size = UDim2.new(1,5,0,32)
- end
- scrollUp.Visible = visible
- scrollDown.Visible = visible
- scrollBar.Visible = visible
- end
- scrollUp.Changed:connect(function(prop)
- if prop == "Active" then
- toggleScrollBar(scrollUp.Active or scrollDown.Active)
- end
- end)
-
- scrollDown.Changed:connect(function(prop)
- if prop == "Active" then
- toggleScrollBar(scrollUp.Active or scrollDown.Active)
- end
- end)
-
- toggleScrollBar(scrollUp.Active or scrollDown.Active)
- end
- return headerFrame, scrollFrame, recalculateScroll, scrollOrder
- end
-
- createBoardsFunction = function (boardType, numStatColumns)
- print("Create Boards")
- local smallFrame = Instance.new("Frame")
- smallFrame.Name = "SmallPlayerlist"
- smallFrame.Position = smallWindowPosition
- smallFrame.Active = false
- smallFrame.Size = smallWindowSize
- --smallFrame.Style = Enum.FrameStyle.RobloxRound
- smallFrame.BackgroundColor3 = Color3.new(0,0,0)
- smallFrame.BackgroundTransparency = 0.7
- smallFrame.BorderSizePixel = 0
-
- local bigFrame = Instance.new("Frame")
- bigFrame.Name = "BigPlayerlist"
- bigFrame.Size = bigWindowSize
- bigFrame.Position = bigWindowPosition
- --bigFrame.Style = Enum.FrameStyle.RobloxRound
- bigFrame.BackgroundColor3 = Color3.new(0,0,0)
- bigFrame.BackgroundTransparency = 0.7
- bigFrame.BorderSizePixel = 0
- bigFrame.Visible = false
-
- local bigFrameWrapper = Instance.new("Frame")
- bigFrameWrapper.Name = "Expander"
- --bigFrameWrapper.Size = UDim2.new(1,5,1,0)
- bigFrameWrapper.Size = UDim2.new(1,21,1,16)
- bigFrameWrapper.Position = UDim2.new(0, 0, 0,0)
- bigFrameWrapper.BackgroundTransparency = 1
- bigFrameWrapper.Parent = bigFrame
-
- local smallHeaderFrame, scrollFrameSmall, recalculateScrollSmall, scrollOrderSmall = createPlayerListBasics(smallFrame, false)
- local bigHeaderFrame, scrollFrameBig, recalculateScrollBig, scrollOrderBig = createPlayerListBasics(bigFrameWrapper, true)
-
- local playerListButton = Instance.new("ImageButton")
- playerListButton.Name = "GoBigButton"
- playerListButton.BackgroundTransparency = 1
- playerListButton.Image = "rbxasset://textures/ui/playerlist_small_maximize.png"
- playerListButton.Size = UDim2.new(0.0, 35, 0, 29)
- playerListButton.Position = UDim2.new(0, 0, 0, 0)
- playerListButton.MouseButton1Click:connect(
- function()
- toggleBigWindow()
- end)
- playerListButton.Parent = smallHeaderFrame
-
- playerListButton = Instance.new("ImageButton")
- playerListButton.Name = "CloseButton"
- playerListButton.BackgroundTransparency = 1
- playerListButton.Image = "rbxasset://textures/ui/playerlist_small_hide.png"
- playerListButton.Size = UDim2.new(0.0, 38, 0, 29)
- playerListButton.Position = UDim2.new(0, 35, 0, 0)
- playerListButton.MouseButton1Click:connect(
- function()
- transitionWindowsFunction("None")
- end)
- playerListButton.Parent = smallHeaderFrame
-
- playerListButton = Instance.new("ImageButton")
- playerListButton.Name = "CloseButton"
- playerListButton.Image = "rbxasset://textures/ui/playerlist_big_hide.png"
- playerListButton.BackgroundTransparency = 1
- playerListButton.Size = UDim2.new(0.0, 29, 0, 29)
- playerListButton.Position = UDim2.new(1, -30, 0.5, -15)
- playerListButton.MouseButton1Click:connect(
- function()
- toggleBigWindow()
- end)
- playerListButton.Parent = bigHeaderFrame
-
- local placeName = Instance.new("TextLabel")
- placeName.Name = "PlaceName"
- placeName.Text = " Player List"
- placeName.FontSize = Enum.FontSize.Size24
- placeName.TextXAlignment = Enum.TextXAlignment.Left
- placeName.Font = Enum.Font.ArialBold
- placeName.BackgroundTransparency = 1
- placeName.TextColor3 = Color3.new(1,1,1)
- placeName.Size = UDim2.new(0.5, 0, 1, 0)
- placeName.Position = UDim2.new(0, 0, 0.0, 0)
- placeName = RbxGui.AutoTruncateTextObject(placeName)
- placeName.Parent = bigHeaderFrame
-
-
- currentBoardType = boardType
- currentStatCount = numStatColumns
- local isTeam, isScore = getBoardTypeInfo()
- local players = getPlayers()
-
- if isScore then
- local statColumns = getStatColumns(players)
- numStatColumns = #statColumns
- if numStatColumns > 3 then
- numStatColumns = 3
- end
- createStatHeaders(statColumns, numStatColumns, false).Parent = smallHeaderFrame
- createStatHeaders(statColumns, currentStatCount, true).Parent = bigHeaderFrame
- end
-
- --Clean up all old stuff
- resetPlayerTable()
-
- for i, player in ipairs(players) do
- local playerObject = buildPlayerObject(player, numStatColumns, "Small")
- table.insert(scrollOrderSmall, playerObject)
- playerObject.Parent = scrollFrameSmall
-
- playerObject = buildPlayerObject(player, currentStatCount, "Big")
- table.insert(scrollOrderBig, playerObject)
- playerObject.Parent = scrollFrameBig
- end
-
- --Clean up old stuff
- resetTeamTable()
-
- local teamStatObjects = {}
- if isTeam then
- local teams = getTeams()
- local i = #teams
- while i >= 1 do
- --We go backwards so the "first" team color gets the team
- local team = teams[i]
- teamColorTable[team.TeamColor.Name] = team
- i = i - 1
- end
-
- --Adding/Removing a Team causes a full invalidation of the board
- for i, team in ipairs(teams) do
- local teamObject = buildTeamObject(team, numStatColumns, "Small")
- table.insert(scrollOrderSmall, teamObject)
- teamObject.Parent = scrollFrameSmall
-
- teamObject = buildTeamObject(team, currentStatCount, "Big")
- table.insert(scrollOrderBig, teamObject)
- teamObject.Parent = scrollFrameBig
- end
-
- teamTable["Neutral"] = {}
- teamTable["Neutral"].Players = {}
-
- local neutralTeamObject = createTeamName("Neutral", BrickColor.palette(8))
- teamTable["Neutral"].NameObjectSmall = neutralTeamObject
- teamTable["Neutral"].StatObjectSmall = nil
- teamTable["Neutral"].MainObjectSmall = neutralTeamObject
- table.insert(scrollOrderSmall, neutralTeamObject)
-
- neutralTeamObject = createTeamName("Neutral", BrickColor.palette(8))
- teamTable["Neutral"].NameObjectBig = neutralTeamObject
- teamTable["Neutral"].StatObjectBig = nil
- teamTable["Neutral"].MainObjectBig = neutralTeamObject
- table.insert(scrollOrderBig, neutralTeamObject)
-
- local neutralPlayers = {}
- for i, player in ipairs(players) do
- assignToTeam(player)
- end
- end
-
- removePlayerFunction = function(player)
- if playerTable[player] then
- ArrayRemove(scrollOrderSmall, playerTable[player].MainObjectSmall)
- ArrayRemove(scrollOrderBig, playerTable[player].MainObjectBig)
-
- clearTableEntry(player, playerTable[player])
-
- playerTable[player] = nil
- end
- end
- recreatePlayerFunction = function(player)
- removePlayerFunction(player)
-
- local playerObject = buildPlayerObject(player, numStatColumns, "Small")
- table.insert(scrollOrderSmall, playerObject)
- robloxLock(playerObject)
- playerObject.Parent = scrollFrameSmall
-
- playerObject = buildPlayerObject(player, currentStatCount, "Big")
- table.insert(scrollOrderBig, playerObject)
- robloxLock(playerObject)
- playerObject.Parent = scrollFrameBig
-
- local isTeam, isScore = getBoardTypeInfo()
- if isTeam then
- assignToTeam(player)
- end
-
- sortPlayerListsFunction()
- end
-
- sortPlayerListsFunction = function()
- orderScrollList(scrollOrderSmall, "MainObjectSmall", scrollFrameSmall)
- recalculateScrollSmall()
- createAlternatingRows(scrollOrderSmall)
-
- orderScrollList(scrollOrderBig, "MainObjectBig", scrollFrameBig)
- recalculateScrollBig()
- createAlternatingRows(scrollOrderBig)
- end
-
- sortPlayerListsFunction()
-
- robloxLock(smallFrame)
- robloxLock(bigFrame)
- return smallFrame, bigFrame
- end
-
- --Teams changing invalidates the whole board
- local function teamsChanged()
- if debounceTeamsChanged then
- return
- end
-
- debounceTeamsChanged = true
- wait()
- rebuildBoard(NewPlayerListGui, determineBoardType())
- debounceTeamsChanged = false
- end
-
-
- local checkIfBoardChanged = function()
- local newBoardType, numStats = determineBoardType()
- if newBoardType ~= currentBoardType or numStats ~= currentStatCount then
- --print("BoardChanged to " .. newBoardType .. " with " .. numStats .. " stats")
- rebuildBoard(NewPlayerListGui, newBoardType, numStats)
- end
- end
-
- local function buildPlayerList()
- waitForChild(game, "Players")
- waitForProperty(game.Players, "LocalPlayer")
-
- local playerListEnabled = testPlayerListPlaces[game.PlaceId] or enablePlayerListGlobally
- if localTesting and (game.PlaceId == 0) or (game.PlaceId == -1) then
- playerListEnabled = true
- end
- if not playerListEnabled then
- --No playerlist
- return
- end
-
- supportFriends = testFriendingPlaces[game.PlaceId] or enableFriendingGlobally
- if localTesting and (game.PlaceId == 0) or (game.PlaceId == -1) then
- supportFriends = false
- end
-
- local teams = game:GetService("Teams")
- if teams then
- local teamConnections = {}
-
- teams.ChildAdded:connect(
- function(child)
- if child:IsA("Team") then
- teamsChanged()
- teamConnections[child] = child.Changed:connect(
- function(prop)
- if prop == "TeamColor" or prop == "Name" then
- --Rebuild when things change
- teamsChanged()
- end
- end)
- end
- end)
- teams.ChildRemoved:connect(
- function(child)
- if child:IsA("Team") then
- if teamConnections[child] then
- teamConnections[child]:disconnect()
- teamConnections[child] = nil
- end
- teamsChanged()
- end
- end)
- end
-
- game.Players.ChildAdded:connect(
- function(player)
- if player:IsA("Player") then
- addPlayerFunction(player)
- end
- end)
-
- game.Players.ChildRemoved:connect(
- function(player)
- if player:IsA("Player") then
- if removePlayerFunction then
- removePlayerFunction(player)
- end
- end
- end)
-
- rebuildBoard(NewPlayerListGui, determineBoardType())
-
- delay(0,
- function()
- while true do
- wait(5)
- checkIfBoardChanged()
- end
- end)
- end
-
- buildPlayerList()
-end
- true
-
-
-
-
\ No newline at end of file
diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization.Designer.cs b/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization.Designer.cs
index 6dc6719..4b6b99b 100644
--- a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization.Designer.cs
+++ b/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization.Designer.cs
@@ -39,46 +39,189 @@ namespace RBXLegacyLauncher
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CharacterCustomization));
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
- this.button3 = new System.Windows.Forms.Button();
+ this.radioButton1 = new System.Windows.Forms.RadioButton();
+ this.radioButton2 = new System.Windows.Forms.RadioButton();
+ this.radioButton3 = new System.Windows.Forms.RadioButton();
+ this.radioButton4 = new System.Windows.Forms.RadioButton();
+ this.label1 = new System.Windows.Forms.Label();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.textBox2 = new System.Windows.Forms.TextBox();
+ this.textBox3 = new System.Windows.Forms.TextBox();
+ this.textBox4 = new System.Windows.Forms.TextBox();
+ this.label4 = new System.Windows.Forms.Label();
+ this.label3 = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.label5 = new System.Windows.Forms.Label();
+ this.label6 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(9, 12);
this.button1.Name = "button1";
- this.button1.Size = new System.Drawing.Size(243, 54);
+ this.button1.Size = new System.Drawing.Size(116, 36);
this.button1.TabIndex = 31;
- this.button1.Text = "Character Colors";
+ this.button1.Text = "Body Colors";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.Button1Click);
//
// button2
//
- this.button2.Location = new System.Drawing.Point(9, 72);
+ this.button2.Location = new System.Drawing.Point(135, 12);
this.button2.Name = "button2";
- this.button2.Size = new System.Drawing.Size(243, 54);
+ this.button2.Size = new System.Drawing.Size(116, 36);
this.button2.TabIndex = 32;
- this.button2.Text = "Hats";
+ this.button2.Text = "Accessories";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.Button2Click);
//
- // button3
+ // radioButton1
//
- this.button3.Location = new System.Drawing.Point(9, 132);
- this.button3.Name = "button3";
- this.button3.Size = new System.Drawing.Size(242, 54);
- this.button3.TabIndex = 33;
- this.button3.Text = "Clothing";
- this.button3.UseVisualStyleBackColor = true;
- this.button3.Click += new System.EventHandler(this.Button3Click);
+ this.radioButton1.Location = new System.Drawing.Point(29, 190);
+ this.radioButton1.Name = "radioButton1";
+ this.radioButton1.Size = new System.Drawing.Size(40, 16);
+ this.radioButton1.TabIndex = 34;
+ this.radioButton1.Text = "BC";
+ this.radioButton1.UseVisualStyleBackColor = true;
+ this.radioButton1.CheckedChanged += new System.EventHandler(this.RadioButton1CheckedChanged);
+ //
+ // radioButton2
+ //
+ this.radioButton2.Location = new System.Drawing.Point(75, 190);
+ this.radioButton2.Name = "radioButton2";
+ this.radioButton2.Size = new System.Drawing.Size(50, 16);
+ this.radioButton2.TabIndex = 35;
+ this.radioButton2.Text = "TBC";
+ this.radioButton2.UseVisualStyleBackColor = true;
+ this.radioButton2.CheckedChanged += new System.EventHandler(this.RadioButton2CheckedChanged);
+ //
+ // radioButton3
+ //
+ this.radioButton3.Location = new System.Drawing.Point(124, 190);
+ this.radioButton3.Name = "radioButton3";
+ this.radioButton3.Size = new System.Drawing.Size(50, 16);
+ this.radioButton3.TabIndex = 36;
+ this.radioButton3.Text = "OBC";
+ this.radioButton3.UseVisualStyleBackColor = true;
+ this.radioButton3.CheckedChanged += new System.EventHandler(this.RadioButton3CheckedChanged);
+ //
+ // radioButton4
+ //
+ this.radioButton4.Checked = true;
+ this.radioButton4.Location = new System.Drawing.Point(180, 190);
+ this.radioButton4.Name = "radioButton4";
+ this.radioButton4.Size = new System.Drawing.Size(53, 16);
+ this.radioButton4.TabIndex = 37;
+ this.radioButton4.TabStop = true;
+ this.radioButton4.Text = "None";
+ this.radioButton4.UseVisualStyleBackColor = true;
+ this.radioButton4.CheckedChanged += new System.EventHandler(this.RadioButton4CheckedChanged);
+ //
+ // label1
+ //
+ this.label1.Location = new System.Drawing.Point(94, 170);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(60, 17);
+ this.label1.TabIndex = 38;
+ this.label1.Text = "Icon Type";
+ //
+ // textBox1
+ //
+ this.textBox1.Location = new System.Drawing.Point(71, 69);
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(180, 20);
+ this.textBox1.TabIndex = 39;
+ this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ this.textBox1.TextChanged += new System.EventHandler(this.TextBox1TextChanged);
+ //
+ // textBox2
+ //
+ this.textBox2.Location = new System.Drawing.Point(71, 95);
+ this.textBox2.Name = "textBox2";
+ this.textBox2.Size = new System.Drawing.Size(180, 20);
+ this.textBox2.TabIndex = 40;
+ this.textBox2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ this.textBox2.TextChanged += new System.EventHandler(this.TextBox2TextChanged);
+ //
+ // textBox3
+ //
+ this.textBox3.Location = new System.Drawing.Point(71, 121);
+ this.textBox3.Name = "textBox3";
+ this.textBox3.Size = new System.Drawing.Size(180, 20);
+ this.textBox3.TabIndex = 41;
+ this.textBox3.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ this.textBox3.TextChanged += new System.EventHandler(this.TextBox3TextChanged);
+ //
+ // textBox4
+ //
+ this.textBox4.Location = new System.Drawing.Point(71, 147);
+ this.textBox4.Name = "textBox4";
+ this.textBox4.Size = new System.Drawing.Size(180, 20);
+ this.textBox4.TabIndex = 42;
+ this.textBox4.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ this.textBox4.TextChanged += new System.EventHandler(this.TextBox4TextChanged);
+ //
+ // label4
+ //
+ this.label4.Location = new System.Drawing.Point(12, 147);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(49, 15);
+ this.label4.TabIndex = 46;
+ this.label4.Text = "Face ID";
+ //
+ // label3
+ //
+ this.label3.Location = new System.Drawing.Point(12, 124);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(49, 15);
+ this.label3.TabIndex = 45;
+ this.label3.Text = "Pants ID";
+ //
+ // label2
+ //
+ this.label2.Location = new System.Drawing.Point(12, 98);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(42, 15);
+ this.label2.TabIndex = 44;
+ this.label2.Text = "Shirt ID";
+ //
+ // label5
+ //
+ this.label5.Location = new System.Drawing.Point(12, 72);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(53, 15);
+ this.label5.TabIndex = 43;
+ this.label5.Text = "T-Shirt ID";
+ //
+ // label6
+ //
+ this.label6.Location = new System.Drawing.Point(9, 51);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(242, 15);
+ this.label6.TabIndex = 47;
+ this.label6.Text = "Clothing";
+ this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// CharacterCustomization
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.ControlLightLight;
- this.ClientSize = new System.Drawing.Size(263, 198);
- this.Controls.Add(this.button3);
+ this.ClientSize = new System.Drawing.Size(263, 218);
+ this.Controls.Add(this.label6);
+ this.Controls.Add(this.label4);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.label5);
+ this.Controls.Add(this.textBox4);
+ this.Controls.Add(this.textBox3);
+ this.Controls.Add(this.textBox2);
+ this.Controls.Add(this.textBox1);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.radioButton4);
+ this.Controls.Add(this.radioButton3);
+ this.Controls.Add(this.radioButton2);
+ this.Controls.Add(this.radioButton1);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
@@ -88,8 +231,22 @@ namespace RBXLegacyLauncher
this.Text = "Character Customization";
this.Load += new System.EventHandler(this.CharacterCustomizationLoad);
this.ResumeLayout(false);
+ this.PerformLayout();
}
- private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.Label label5;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.TextBox textBox4;
+ private System.Windows.Forms.TextBox textBox3;
+ private System.Windows.Forms.TextBox textBox2;
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.RadioButton radioButton4;
+ private System.Windows.Forms.RadioButton radioButton3;
+ private System.Windows.Forms.RadioButton radioButton2;
+ private System.Windows.Forms.RadioButton radioButton1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button1;
}
diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization.cs b/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization.cs
index b8c5e41..c4fe919 100644
--- a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization.cs
+++ b/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization.cs
@@ -36,6 +36,26 @@ namespace RBXLegacyLauncher
void CharacterCustomizationLoad(object sender, EventArgs e)
{
+ textBox1.Text = GlobalVars.Custom_TShirt.ToString();
+ textBox2.Text = GlobalVars.Custom_Shirt.ToString();
+ textBox3.Text = GlobalVars.Custom_Pants.ToString();
+ textBox4.Text = GlobalVars.Custom_Face.ToString();
+ if (GlobalVars.Custom_IconType.Equals("BC"))
+ {
+ radioButton1.Checked = true;
+ }
+ else if (GlobalVars.Custom_IconType.Equals("TBC"))
+ {
+ radioButton2.Checked = true;
+ }
+ else if (GlobalVars.Custom_IconType.Equals("OBC"))
+ {
+ radioButton3.Checked = true;
+ }
+ else if (GlobalVars.Custom_IconType.Equals("NBC"))
+ {
+ radioButton4.Checked = true;
+ }
string hatdir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\charcustom\\hats";
if (Directory.Exists(hatdir))
{
@@ -59,10 +79,104 @@ namespace RBXLegacyLauncher
chats.Show();
}
- void Button3Click(object sender, EventArgs e)
+ void TextBox1TextChanged(object sender, EventArgs e)
{
- CharacterCustomization_ClothingMenu clothes = new CharacterCustomization_ClothingMenu();
- clothes.Show();
+ int parsedValue;
+ if (int.TryParse(textBox1.Text, out parsedValue))
+ {
+ if (textBox1.Text.Equals(""))
+ {
+ GlobalVars.Custom_TShirt = 0;
+ }
+ else
+ {
+ GlobalVars.Custom_TShirt = Convert.ToInt32(textBox1.Text);
+ }
+ }
+ else
+ {
+ GlobalVars.Custom_TShirt = 0;
+ }
+ }
+
+ void TextBox2TextChanged(object sender, EventArgs e)
+ {
+ int parsedValue;
+ if (int.TryParse(textBox2.Text, out parsedValue))
+ {
+ if (textBox2.Text.Equals(""))
+ {
+ GlobalVars.Custom_Shirt = 0;
+ }
+ else
+ {
+ GlobalVars.Custom_Shirt = Convert.ToInt32(textBox2.Text);
+ }
+ }
+ else
+ {
+ GlobalVars.Custom_Shirt = 0;
+ }
+ }
+
+ void TextBox3TextChanged(object sender, EventArgs e)
+ {
+ int parsedValue;
+ if (int.TryParse(textBox3.Text, out parsedValue))
+ {
+ if (textBox3.Text.Equals(""))
+ {
+ GlobalVars.Custom_Pants = 0;
+ }
+ else
+ {
+ GlobalVars.Custom_Pants = Convert.ToInt32(textBox3.Text);
+ }
+ }
+ else
+ {
+ GlobalVars.Custom_Pants = 0;
+ }
+ }
+
+ void TextBox4TextChanged(object sender, EventArgs e)
+ {
+ int parsedValue;
+ if (int.TryParse(textBox4.Text, out parsedValue))
+ {
+ if (textBox4.Text.Equals(""))
+ {
+ GlobalVars.Custom_Face = 0;
+ }
+ else
+ {
+ GlobalVars.Custom_Face = Convert.ToInt32(textBox4.Text);
+ }
+ }
+ else
+ {
+ GlobalVars.Custom_Face = 0;
+ }
+ }
+
+ void RadioButton1CheckedChanged(object sender, EventArgs e)
+ {
+ GlobalVars.Custom_IconType = "BC";
+ }
+
+ void RadioButton2CheckedChanged(object sender, EventArgs e)
+ {
+ GlobalVars.Custom_IconType = "TBC";
+ }
+
+ void RadioButton3CheckedChanged(object sender, EventArgs e)
+ {
+ GlobalVars.Custom_IconType = "OBC";
+ }
+
+ void RadioButton4CheckedChanged(object sender, EventArgs e)
+ {
+ GlobalVars.Custom_IconType = "NBC";
}
}
}
diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.cs b/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.cs
deleted file mode 100644
index 8b575ff..0000000
--- a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.cs
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Created by SharpDevelop.
- * User: BITL
- * Date: 6/17/2017
- * Time: 8:41 AM
- *
- * To change this template use Tools | Options | Coding | Edit Standard Headers.
- */
-using System;
-using System.Drawing;
-using System.Windows.Forms;
-
-namespace RBXLegacyLauncher
-{
- ///
- /// Description of CharacterCustomization_ClothingMenu.
- ///
- public partial class CharacterCustomization_ClothingMenu : Form
- {
- public CharacterCustomization_ClothingMenu()
- {
- //
- // The InitializeComponent() call is required for Windows Forms designer support.
- //
- InitializeComponent();
-
- //
- // TODO: Add constructor code after the InitializeComponent() call.
- //
- }
-
- void TextBox1TextChanged(object sender, EventArgs e)
- {
- int parsedValue;
- if (int.TryParse(textBox1.Text, out parsedValue))
- {
- if (textBox1.Text.Equals(""))
- {
- GlobalVars.Custom_TShirt = 0;
- }
- else
- {
- GlobalVars.Custom_TShirt = Convert.ToInt32(textBox1.Text);
- }
- }
- else
- {
- GlobalVars.Custom_TShirt = 0;
- }
- }
-
- void TextBox2TextChanged(object sender, EventArgs e)
- {
- int parsedValue;
- if (int.TryParse(textBox2.Text, out parsedValue))
- {
- if (textBox2.Text.Equals(""))
- {
- GlobalVars.Custom_Shirt = 0;
- }
- else
- {
- GlobalVars.Custom_Shirt = Convert.ToInt32(textBox2.Text);
- }
- }
- else
- {
- GlobalVars.Custom_Shirt = 0;
- }
- }
-
- void TextBox3TextChanged(object sender, EventArgs e)
- {
- int parsedValue;
- if (int.TryParse(textBox3.Text, out parsedValue))
- {
- if (textBox3.Text.Equals(""))
- {
- GlobalVars.Custom_Pants = 0;
- }
- else
- {
- GlobalVars.Custom_Pants = Convert.ToInt32(textBox3.Text);
- }
- }
- else
- {
- GlobalVars.Custom_Pants = 0;
- }
- }
-
- void TextBox4TextChanged(object sender, EventArgs e)
- {
- int parsedValue;
- if (int.TryParse(textBox4.Text, out parsedValue))
- {
- if (textBox4.Text.Equals(""))
- {
- GlobalVars.Custom_Face = 0;
- }
- else
- {
- GlobalVars.Custom_Face = Convert.ToInt32(textBox4.Text);
- }
- }
- else
- {
- GlobalVars.Custom_Face = 0;
- }
- }
-
- void CharacterCustomization_ClothingMenuLoad(object sender, EventArgs e)
- {
- textBox1.Text = GlobalVars.Custom_TShirt.ToString();
- textBox2.Text = GlobalVars.Custom_Shirt.ToString();
- textBox3.Text = GlobalVars.Custom_Pants.ToString();
- textBox4.Text = GlobalVars.Custom_Face.ToString();
- }
- }
-}
diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/GlobalVars.cs b/RBXLegacyLauncher/RBXLegacyLauncher/GlobalVars.cs
index ee3cf9b..5498ff6 100644
--- a/RBXLegacyLauncher/RBXLegacyLauncher/GlobalVars.cs
+++ b/RBXLegacyLauncher/RBXLegacyLauncher/GlobalVars.cs
@@ -10,11 +10,13 @@
public static string SharedArgs = "";
public static string DefaultScript = "";
public static string DefaultScriptMD5 = "";
+ public static bool AdminMode = false;
//vars for loader
public static bool ReadyToLaunch = false;
//server settings.
public static string Map = "Baseplate.rbxl";
public static int RobloxPort = 53640;
+ public static int ServerPort = 53640;
public static int DefaultRobloxPort = 53640;
public static int PlayerLimit = 12;
//player settings
@@ -40,6 +42,11 @@
public static bool ClientCreator_LegacyMode = false;
public static string ClientCreator_SelectedClientMD5 = "";
public static string ClientCreator_SelectedClientVersion = "";
+ //infoeditor
+ public static string InfoEditor_Version = "";
+ public static string InfoEditor_DefaultClient = "";
+ public static string InfoEditor_ScriptPath = "";
+ public static string InfoEditor_ScriptMD5 = "";
//charcustom
public static string Custom_Hat1ID_Offline = "NoHat.rbxm";
public static string Custom_Hat2ID_Offline = "NoHat.rbxm";
@@ -48,18 +55,17 @@
public static int Custom_Shirt = 0;
public static int Custom_Pants = 0;
public static int Custom_Face = 0;
+ public static string Custom_IconType = "NBC";
public static int HeadColorID = 24;
public static int TorsoColorID = 23;
public static int LeftArmColorID = 24;
public static int RightArmColorID = 24;
public static int LeftLegColorID = 119;
public static int RightLegColorID = 119;
- //color menu.
public static string ColorMenu_HeadColor = "Color [A=255, R=245, G=205, B=47]";
public static string ColorMenu_TorsoColor = "Color [A=255, R=13, G=105, B=172]";
public static string ColorMenu_LeftArmColor = "Color [A=255, R=245, G=205, B=47]";
public static string ColorMenu_RightArmColor = "Color [A=255, R=245, G=205, B=47]";
public static string ColorMenu_LeftLegColor = "Color [A=255, R=164, G=189, B=71]";
public static string ColorMenu_RightLegColor = "Color [A=255, R=164, G=189, B=71]";
- public static bool AdminMode = false;
}
\ No newline at end of file
diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.Designer.cs b/RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.Designer.cs
similarity index 51%
rename from RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.Designer.cs
rename to RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.Designer.cs
index e17b9f5..30c2c57 100644
--- a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.Designer.cs
+++ b/RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.Designer.cs
@@ -1,14 +1,14 @@
/*
* Created by SharpDevelop.
- * User: BITL
- * Date: 6/17/2017
- * Time: 8:41 AM
+ * User: BITL-Gaming
+ * Date: 11/28/2016
+ * Time: 7:55 AM
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
namespace RBXLegacyLauncher
{
- partial class CharacterCustomization_ClothingMenu
+ partial class InfoEditor
{
///
/// Designer variable used to keep track of non-visual components.
@@ -36,110 +36,149 @@ namespace RBXLegacyLauncher
///
private void InitializeComponent()
{
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CharacterCustomization_ClothingMenu));
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InfoEditor));
+ this.button1 = new System.Windows.Forms.Button();
+ this.button2 = new System.Windows.Forms.Button();
+ this.button3 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
+ this.label4 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.textBox2 = new System.Windows.Forms.TextBox();
this.textBox3 = new System.Windows.Forms.TextBox();
this.textBox4 = new System.Windows.Forms.TextBox();
- this.label4 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(166, 204);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(154, 30);
+ this.button1.TabIndex = 7;
+ this.button1.Text = "Save";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.Button1Click);
+ //
+ // button2
+ //
+ this.button2.Location = new System.Drawing.Point(7, 204);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(150, 30);
+ this.button2.TabIndex = 10;
+ this.button2.Text = "Load";
+ this.button2.UseVisualStyleBackColor = true;
+ this.button2.Click += new System.EventHandler(this.Button2Click);
+ //
+ // button3
+ //
+ this.button3.Location = new System.Drawing.Point(8, 175);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(312, 23);
+ this.button3.TabIndex = 12;
+ this.button3.Text = "New info.txt";
+ this.button3.UseVisualStyleBackColor = true;
+ this.button3.Click += new System.EventHandler(this.Button3Click);
+ //
// label1
//
- this.label1.Location = new System.Drawing.Point(12, 9);
+ this.label1.Location = new System.Drawing.Point(7, 2);
this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(53, 15);
- this.label1.TabIndex = 0;
- this.label1.Text = "T-Shirt ID";
+ this.label1.Size = new System.Drawing.Size(44, 15);
+ this.label1.TabIndex = 13;
+ this.label1.Text = "Version";
//
// label2
//
- this.label2.Location = new System.Drawing.Point(12, 37);
+ this.label2.Location = new System.Drawing.Point(7, 43);
this.label2.Name = "label2";
- this.label2.Size = new System.Drawing.Size(42, 15);
- this.label2.TabIndex = 2;
- this.label2.Text = "Shirt ID";
+ this.label2.Size = new System.Drawing.Size(76, 17);
+ this.label2.TabIndex = 14;
+ this.label2.Text = "Default Client";
//
// label3
//
- this.label3.Location = new System.Drawing.Point(12, 62);
+ this.label3.Location = new System.Drawing.Point(7, 86);
this.label3.Name = "label3";
- this.label3.Size = new System.Drawing.Size(49, 15);
- this.label3.TabIndex = 3;
- this.label3.Text = "Pants ID";
+ this.label3.Size = new System.Drawing.Size(76, 18);
+ this.label3.TabIndex = 15;
+ this.label3.Text = "Script Path";
+ //
+ // label4
+ //
+ this.label4.Location = new System.Drawing.Point(7, 130);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(71, 16);
+ this.label4.TabIndex = 16;
+ this.label4.Text = "Script MD5";
//
// textBox1
//
- this.textBox1.Location = new System.Drawing.Point(71, 6);
+ this.textBox1.Location = new System.Drawing.Point(8, 20);
this.textBox1.Name = "textBox1";
- this.textBox1.Size = new System.Drawing.Size(100, 20);
- this.textBox1.TabIndex = 4;
+ this.textBox1.Size = new System.Drawing.Size(311, 20);
+ this.textBox1.TabIndex = 17;
this.textBox1.TextChanged += new System.EventHandler(this.TextBox1TextChanged);
//
// textBox2
//
- this.textBox2.Location = new System.Drawing.Point(71, 32);
+ this.textBox2.Location = new System.Drawing.Point(7, 63);
this.textBox2.Name = "textBox2";
- this.textBox2.Size = new System.Drawing.Size(100, 20);
- this.textBox2.TabIndex = 5;
+ this.textBox2.Size = new System.Drawing.Size(313, 20);
+ this.textBox2.TabIndex = 18;
this.textBox2.TextChanged += new System.EventHandler(this.TextBox2TextChanged);
//
// textBox3
//
- this.textBox3.Location = new System.Drawing.Point(71, 59);
+ this.textBox3.Location = new System.Drawing.Point(8, 107);
this.textBox3.Name = "textBox3";
- this.textBox3.Size = new System.Drawing.Size(100, 20);
- this.textBox3.TabIndex = 6;
+ this.textBox3.Size = new System.Drawing.Size(312, 20);
+ this.textBox3.TabIndex = 19;
this.textBox3.TextChanged += new System.EventHandler(this.TextBox3TextChanged);
//
// textBox4
//
- this.textBox4.Location = new System.Drawing.Point(71, 86);
+ this.textBox4.Location = new System.Drawing.Point(8, 149);
this.textBox4.Name = "textBox4";
- this.textBox4.Size = new System.Drawing.Size(100, 20);
- this.textBox4.TabIndex = 7;
+ this.textBox4.Size = new System.Drawing.Size(311, 20);
+ this.textBox4.TabIndex = 20;
this.textBox4.TextChanged += new System.EventHandler(this.TextBox4TextChanged);
//
- // label4
- //
- this.label4.Location = new System.Drawing.Point(12, 89);
- this.label4.Name = "label4";
- this.label4.Size = new System.Drawing.Size(49, 15);
- this.label4.TabIndex = 8;
- this.label4.Text = "Face ID";
- //
- // CharacterCustomization_ClothingMenu
+ // InfoEditor
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.ControlLightLight;
- this.ClientSize = new System.Drawing.Size(179, 113);
- this.Controls.Add(this.label4);
+ this.ClientSize = new System.Drawing.Size(332, 247);
this.Controls.Add(this.textBox4);
this.Controls.Add(this.textBox3);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
+ this.Controls.Add(this.label4);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
- this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Controls.Add(this.button3);
+ this.Controls.Add(this.button2);
+ this.Controls.Add(this.button1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
- this.Name = "CharacterCustomization_ClothingMenu";
- this.Text = "Clothing";
- this.Load += new System.EventHandler(this.CharacterCustomization_ClothingMenuLoad);
+ this.Name = "InfoEditor";
+ this.Text = "Info Editor";
+ this.Load += new System.EventHandler(this.ClientinfoCreatorLoad);
this.ResumeLayout(false);
this.PerformLayout();
}
- private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox textBox4;
private System.Windows.Forms.TextBox textBox3;
+ private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox textBox2;
- private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.Button button1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox textBox1;
}
}
diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.cs b/RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.cs
new file mode 100644
index 0000000..2c24bb1
--- /dev/null
+++ b/RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.cs
@@ -0,0 +1,142 @@
+/*
+ * Created by SharpDevelop.
+ * User: BITL-Gaming
+ * Date: 11/28/2016
+ * Time: 7:55 AM
+ *
+ * To change this template use Tools | Options | Coding | Edit Standard Headers.
+ */
+using System;
+using System.Drawing;
+using System.Windows.Forms;
+using System.IO;
+using System.Diagnostics;
+using System.Threading;
+
+namespace RBXLegacyLauncher
+{
+ ///
+ /// Description of ClientinfoCreator.
+ ///
+ public partial class InfoEditor : Form
+ {
+ public InfoEditor()
+ {
+ //
+ // The InitializeComponent() call is required for Windows Forms designer support.
+ //
+ InitializeComponent();
+
+ //
+ // TODO: Add constructor code after the InitializeComponent() call.
+ //
+ }
+
+ void Button2Click(object sender, EventArgs e)
+ {
+ using (var ofd = new OpenFileDialog())
+ {
+ ofd.Filter = "Text files (*.txt)|*.txt";
+ ofd.FilterIndex = 2;
+ ofd.FileName = "info.txt";
+ ofd.Title = "Load info.txt";
+ if (ofd.ShowDialog() == DialogResult.OK)
+ {
+ string line1;
+ string Decryptline1, Decryptline2, Decryptline3, Decryptline4;
+
+ using(StreamReader reader = new StreamReader(ofd.FileName))
+ {
+ line1 = reader.ReadLine();
+ }
+
+ if (!SecurityFuncs.IsBase64String(line1))
+ return;
+
+ string ConvertedLine = SecurityFuncs.Base64Decode(line1);
+ string[] result = ConvertedLine.Split('|');
+ Decryptline1 = SecurityFuncs.Base64Decode(result[0]);
+ Decryptline2 = SecurityFuncs.Base64Decode(result[1]);
+ Decryptline3 = SecurityFuncs.Base64Decode(result[2]);
+ Decryptline4 = SecurityFuncs.Base64Decode(result[3]);
+
+ GlobalVars.InfoEditor_Version = Decryptline1;
+ GlobalVars.InfoEditor_DefaultClient = Decryptline2;
+ GlobalVars.InfoEditor_ScriptPath = Decryptline3;
+ GlobalVars.InfoEditor_ScriptMD5 = Decryptline4;
+
+ textBox1.Text = GlobalVars.InfoEditor_Version;
+ textBox2.Text = GlobalVars.InfoEditor_DefaultClient;
+ textBox3.Text = GlobalVars.InfoEditor_ScriptPath;
+ textBox4.Text = GlobalVars.InfoEditor_ScriptMD5.ToUpper();
+ }
+ }
+ }
+
+ void Button1Click(object sender, EventArgs e)
+ {
+ using (var sfd = new SaveFileDialog())
+ {
+ sfd.Filter = "Text files (*.txt)|*.txt";
+ sfd.FilterIndex = 2;
+ sfd.FileName = "info.txt";
+ sfd.Title = "Save info.txt";
+
+ if (sfd.ShowDialog() == DialogResult.OK)
+ {
+ string[] lines = {
+ SecurityFuncs.Base64Encode(GlobalVars.InfoEditor_Version.ToString()),
+ SecurityFuncs.Base64Encode(GlobalVars.InfoEditor_DefaultClient.ToString()),
+ SecurityFuncs.Base64Encode(GlobalVars.InfoEditor_ScriptPath.ToString()),
+ SecurityFuncs.Base64Encode(GlobalVars.InfoEditor_ScriptMD5.ToString())
+ };
+ File.WriteAllText(sfd.FileName, SecurityFuncs.Base64Encode(string.Join("|",lines)));
+ }
+ }
+ }
+
+ void ClientinfoCreatorLoad(object sender, EventArgs e)
+ {
+
+ }
+
+ void Button3Click(object sender, EventArgs e)
+ {
+ GlobalVars.InfoEditor_Version = "";
+ GlobalVars.InfoEditor_DefaultClient = "";
+ GlobalVars.InfoEditor_ScriptPath = "";
+ GlobalVars.InfoEditor_ScriptMD5 = "";
+ textBox1.Text = GlobalVars.InfoEditor_Version;
+ textBox2.Text = GlobalVars.InfoEditor_DefaultClient;
+ textBox3.Text = GlobalVars.InfoEditor_ScriptPath;
+ textBox4.Text = GlobalVars.InfoEditor_ScriptMD5.ToUpper();
+ }
+
+ void TextBox1TextChanged(object sender, EventArgs e)
+ {
+ GlobalVars.InfoEditor_Version = textBox1.Text;
+ }
+
+ void TextBox2TextChanged(object sender, EventArgs e)
+ {
+ GlobalVars.InfoEditor_DefaultClient = textBox2.Text;
+ }
+
+ void TextBox3TextChanged(object sender, EventArgs e)
+ {
+ GlobalVars.InfoEditor_ScriptPath = textBox3.Text;
+ }
+
+ void TextBox4TextChanged(object sender, EventArgs e)
+ {
+ textBox4.Text = textBox4.Text.ToUpper();
+ GlobalVars.InfoEditor_ScriptMD5 = textBox4.Text.ToUpper();
+ }
+
+ void Button4Click(object sender, EventArgs e)
+ {
+ DocForm doc = new DocForm();
+ doc.Show();
+ }
+ }
+}
diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.resx b/RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.resx
similarity index 100%
rename from RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.resx
rename to RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.resx
diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/LauncherFuncs.cs b/RBXLegacyLauncher/RBXLegacyLauncher/LauncherFuncs.cs
index 2164b1e..e5ee1c9 100644
--- a/RBXLegacyLauncher/RBXLegacyLauncher/LauncherFuncs.cs
+++ b/RBXLegacyLauncher/RBXLegacyLauncher/LauncherFuncs.cs
@@ -31,7 +31,7 @@ namespace RBXLegacyLauncher
public static void ReadConfigValues(string cfgpath)
{
string line1;
- string Decryptline1, Decryptline2, Decryptline3, Decryptline4, Decryptline5, Decryptline6, Decryptline7, Decryptline8, Decryptline9, Decryptline10, Decryptline11, Decryptline12, Decryptline13, Decryptline14, Decryptline15, Decryptline16, Decryptline17, Decryptline18, Decryptline19, Decryptline20, Decryptline21, Decryptline22, Decryptline23, Decryptline24, Decryptline25, Decryptline26;
+ string Decryptline1, Decryptline2, Decryptline3, Decryptline4, Decryptline5, Decryptline6, Decryptline7, Decryptline8, Decryptline9, Decryptline10, Decryptline11, Decryptline12, Decryptline13, Decryptline14, Decryptline15, Decryptline16, Decryptline17, Decryptline18, Decryptline19, Decryptline20, Decryptline21, Decryptline22, Decryptline23, Decryptline24, Decryptline25, Decryptline26, Decryptline27;
using(StreamReader reader = new StreamReader(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\config.txt"))
{
@@ -69,6 +69,7 @@ namespace RBXLegacyLauncher
Decryptline24 = SecurityFuncs.Base64Decode(result[23]);
Decryptline25 = SecurityFuncs.Base64Decode(result[24]);
Decryptline26 = SecurityFuncs.Base64Decode(result[25]);
+ Decryptline27 = SecurityFuncs.Base64Decode(result[26]);
bool bline1 = Convert.ToBoolean(Decryptline1);
GlobalVars.CloseOnLaunch = bline1;
@@ -83,7 +84,7 @@ namespace RBXLegacyLauncher
GlobalVars.Map = Decryptline5;
int iline6 = Convert.ToInt32(Decryptline6);
- GlobalVars.RobloxPort = iline6;
+ GlobalVars.ServerPort = iline6;
GlobalVars.Custom_Hat1ID_Offline = Decryptline7;
GlobalVars.Custom_Hat2ID_Offline = Decryptline8;
@@ -116,7 +117,7 @@ namespace RBXLegacyLauncher
int iline22 = Convert.ToInt32(Decryptline22);
GlobalVars.PlayerLimit = iline22;
-
+
int iline23 = Convert.ToInt32(Decryptline23);
GlobalVars.Custom_TShirt = iline23;
int iline24 = Convert.ToInt32(Decryptline24);
@@ -125,6 +126,7 @@ namespace RBXLegacyLauncher
GlobalVars.Custom_Pants = iline25;
int iline26 = Convert.ToInt32(Decryptline26);
GlobalVars.Custom_Face = iline26;
+ GlobalVars.Custom_IconType = Decryptline27;
}
public static void WriteConfigValues(string cfgpath)
@@ -135,7 +137,7 @@ namespace RBXLegacyLauncher
SecurityFuncs.Base64Encode(GlobalVars.PlayerName.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.SelectedClient.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.Map.ToString()),
- SecurityFuncs.Base64Encode(GlobalVars.RobloxPort.ToString()),
+ SecurityFuncs.Base64Encode(GlobalVars.ServerPort.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.Custom_Hat1ID_Offline.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.Custom_Hat2ID_Offline.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.Custom_Hat3ID_Offline.ToString()),
@@ -155,19 +157,33 @@ namespace RBXLegacyLauncher
SecurityFuncs.Base64Encode(GlobalVars.Custom_TShirt.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.Custom_Shirt.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.Custom_Pants.ToString()),
- SecurityFuncs.Base64Encode(GlobalVars.Custom_Face.ToString())
+ SecurityFuncs.Base64Encode(GlobalVars.Custom_Face.ToString()),
+ SecurityFuncs.Base64Encode(GlobalVars.Custom_IconType.ToString())
};
File.WriteAllText(cfgpath, SecurityFuncs.Base64Encode(string.Join("|",lines)));
}
public static void ResetConfigValues()
{
+ string line1;
+ string Decryptline2;
+ using(StreamReader reader = new StreamReader(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\info.txt"))
+ {
+ line1 = reader.ReadLine();
+ }
+
+ if (!SecurityFuncs.IsBase64String(line1))
+ return;
+ string ConvertedLine = SecurityFuncs.Base64Decode(line1);
+ string[] result = ConvertedLine.Split('|');
+ Decryptline2 = SecurityFuncs.Base64Decode(result[1]);
+
GlobalVars.CloseOnLaunch = false;
GlobalVars.UserID = 0;
GlobalVars.PlayerName = "Player";
- GlobalVars.SelectedClient = "Mid-2008";
+ GlobalVars.SelectedClient = Decryptline2;
GlobalVars.Map = "Baseplate.rbxl";
- GlobalVars.RobloxPort = 53640;
+ GlobalVars.ServerPort = 53640;
GlobalVars.Custom_Hat1ID_Offline = "NoHat.rbxm";
GlobalVars.Custom_Hat2ID_Offline = "NoHat.rbxm";
GlobalVars.Custom_Hat3ID_Offline = "NoHat.rbxm";
@@ -188,6 +204,7 @@ namespace RBXLegacyLauncher
GlobalVars.Custom_Shirt = 0;
GlobalVars.Custom_Pants = 0;
GlobalVars.Custom_Face = 0;
+ GlobalVars.Custom_IconType = "NBC";
}
public static void ReadClientValues(string clientpath)
@@ -274,18 +291,5 @@ namespace RBXLegacyLauncher
//2147483647 is max id.
GlobalVars.UserID = randomID;
}
-
- public static bool IsProcessOpen(string name)
- {
- foreach (Process clsProcess in Process.GetProcesses())
- {
- if (clsProcess.ProcessName.Contains(name))
- {
- return true;
- }
- }
-
- return false;
- }
}
}
diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/LoaderForm.cs b/RBXLegacyLauncher/RBXLegacyLauncher/LoaderForm.cs
index 51eea62..72cae20 100644
--- a/RBXLegacyLauncher/RBXLegacyLauncher/LoaderForm.cs
+++ b/RBXLegacyLauncher/RBXLegacyLauncher/LoaderForm.cs
@@ -85,26 +85,32 @@ namespace RBXLegacyLauncher
string HatIDOffline3 = GlobalVars.Custom_Hat3ID_Offline;
if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == true)
{
- args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(" + GlobalVars.UserID + ",'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote;
+ args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(" + GlobalVars.UserID + ",'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote;
}
else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == true)
{
- args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(" + GlobalVars.UserID + ",'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote;
+ args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(" + GlobalVars.UserID + ",'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote;
}
else if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == false)
{
- args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(0,'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote;
+ args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(0,'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote;
}
else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == false)
{
- args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(0,'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote;
+ args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(0,'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote;
}
try
{
if (SecurityFuncs.checkClientMD5(client) == true)
{
- Process.Start(rbxexe, args);
- this.Close();
+ Process pclient = new Process();
+ pclient.StartInfo.FileName = rbxexe;
+ pclient.StartInfo.Arguments = args;
+ pclient.EnableRaisingEvents = true;
+ pclient.Exited += new EventHandler(ClientExited);
+ pclient.Start();
+ this.ShowInTaskbar = false;
+ this.WindowState = FormWindowState.Minimized;
}
else
{
@@ -122,6 +128,27 @@ namespace RBXLegacyLauncher
}
}
+ void ClientExited(object sender, EventArgs e)
+ {
+ Process[] sudp = Process.GetProcessesByName("sudppipe");
+ if (sudp != null)
+ {
+ foreach (var process in sudp)
+ {
+ process.Kill();
+ }
+ }
+
+ Process[] self = Process.GetProcessesByName("RBXLegacyLauncher");
+ if (self != null)
+ {
+ foreach (var process in self)
+ {
+ process.Kill();
+ }
+ }
+ }
+
private void CheckIfFinished(object state)
{
if (GlobalVars.ReadyToLaunch == false)
@@ -137,7 +164,12 @@ namespace RBXLegacyLauncher
string port = SecurityFuncs.Base64Decode(SplitArg[1]);
string client = SecurityFuncs.Base64Decode(SplitArg[2]);
label1.Text = "Launching " + client + " Game...";
- Process.Start("sudppipe.exe", "-p " + ip + " " + port + " " + port);
+ Process sudp = new Process();
+ sudp.StartInfo.FileName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\sudppipe.exe";
+ sudp.StartInfo.Arguments = "-p " + ip + " " + port + " " + port;
+ sudp.StartInfo.UseShellExecute = false;
+ sudp.StartInfo.CreateNoWindow = true;
+ sudp.Start();
StartGame();
}
}
diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.Designer.cs b/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.Designer.cs
index bafa5ca..87ed9e6 100644
--- a/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.Designer.cs
+++ b/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.Designer.cs
@@ -40,6 +40,9 @@ namespace RBXLegacyLauncher
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
+ this.button11 = new System.Windows.Forms.Button();
+ this.label35 = new System.Windows.Forms.Label();
+ this.textBox4 = new System.Windows.Forms.TextBox();
this.label42 = new System.Windows.Forms.Label();
this.button19 = new System.Windows.Forms.Button();
this.button10 = new System.Windows.Forms.Button();
@@ -50,6 +53,10 @@ namespace RBXLegacyLauncher
this.label3 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.tabPage2 = new System.Windows.Forms.TabPage();
+ this.label45 = new System.Windows.Forms.Label();
+ this.textBox7 = new System.Windows.Forms.TextBox();
+ this.textBox3 = new System.Windows.Forms.TextBox();
+ this.label29 = new System.Windows.Forms.Label();
this.label40 = new System.Windows.Forms.Label();
this.button20 = new System.Windows.Forms.Button();
this.button18 = new System.Windows.Forms.Button();
@@ -80,21 +87,6 @@ namespace RBXLegacyLauncher
this.listBox3 = new System.Windows.Forms.ListBox();
this.label21 = new System.Windows.Forms.Label();
this.label14 = new System.Windows.Forms.Label();
- this.tabPage5 = new System.Windows.Forms.TabPage();
- this.textBox3 = new System.Windows.Forms.TextBox();
- this.label29 = new System.Windows.Forms.Label();
- this.button11 = new System.Windows.Forms.Button();
- this.button9 = new System.Windows.Forms.Button();
- this.button8 = new System.Windows.Forms.Button();
- this.button7 = new System.Windows.Forms.Button();
- this.label35 = new System.Windows.Forms.Label();
- this.textBox4 = new System.Windows.Forms.TextBox();
- this.label34 = new System.Windows.Forms.Label();
- this.label12 = new System.Windows.Forms.Label();
- this.label33 = new System.Windows.Forms.Label();
- this.label31 = new System.Windows.Forms.Label();
- this.label2 = new System.Windows.Forms.Label();
- this.checkBox3 = new System.Windows.Forms.CheckBox();
this.tabPage7 = new System.Windows.Forms.TabPage();
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.tabPage8 = new System.Windows.Forms.TabPage();
@@ -107,6 +99,10 @@ namespace RBXLegacyLauncher
this.label7 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
+ this.button21 = new System.Windows.Forms.Button();
+ this.button9 = new System.Windows.Forms.Button();
+ this.button8 = new System.Windows.Forms.Button();
+ this.checkBox3 = new System.Windows.Forms.CheckBox();
this.checkBox1 = new System.Windows.Forms.CheckBox();
this.button3 = new System.Windows.Forms.Button();
this.label13 = new System.Windows.Forms.Label();
@@ -121,18 +117,13 @@ namespace RBXLegacyLauncher
this.label26 = new System.Windows.Forms.Label();
this.label27 = new System.Windows.Forms.Label();
this.label28 = new System.Windows.Forms.Label();
- this.button6 = new System.Windows.Forms.Button();
this.textBox5 = new System.Windows.Forms.TextBox();
- this.label43 = new System.Windows.Forms.Label();
- this.label44 = new System.Windows.Forms.Label();
- this.button21 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.tabControl1.SuspendLayout();
this.tabPage1.SuspendLayout();
this.tabPage2.SuspendLayout();
this.tabPage3.SuspendLayout();
this.tabPage6.SuspendLayout();
- this.tabPage5.SuspendLayout();
this.tabPage7.SuspendLayout();
this.tabPage8.SuspendLayout();
this.tabPage4.SuspendLayout();
@@ -159,7 +150,6 @@ namespace RBXLegacyLauncher
this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Controls.Add(this.tabPage3);
this.tabControl1.Controls.Add(this.tabPage6);
- this.tabControl1.Controls.Add(this.tabPage5);
this.tabControl1.Controls.Add(this.tabPage7);
this.tabControl1.Controls.Add(this.tabPage8);
this.tabControl1.Controls.Add(this.tabPage4);
@@ -175,6 +165,9 @@ namespace RBXLegacyLauncher
//
// tabPage1
//
+ this.tabPage1.Controls.Add(this.button11);
+ this.tabPage1.Controls.Add(this.label35);
+ this.tabPage1.Controls.Add(this.textBox4);
this.tabPage1.Controls.Add(this.label42);
this.tabPage1.Controls.Add(this.button19);
this.tabPage1.Controls.Add(this.button10);
@@ -194,6 +187,35 @@ namespace RBXLegacyLauncher
this.tabPage1.ToolTipText = "Join a server via IP Address";
this.tabPage1.UseVisualStyleBackColor = true;
//
+ // button11
+ //
+ this.button11.Location = new System.Drawing.Point(213, 47);
+ this.button11.Name = "button11";
+ this.button11.Size = new System.Drawing.Size(177, 20);
+ this.button11.TabIndex = 41;
+ this.button11.Text = "SAVE PORT";
+ this.button11.UseVisualStyleBackColor = true;
+ this.button11.Click += new System.EventHandler(this.Button11Click);
+ //
+ // label35
+ //
+ this.label35.Location = new System.Drawing.Point(268, 5);
+ this.label35.Name = "label35";
+ this.label35.Size = new System.Drawing.Size(72, 16);
+ this.label35.TabIndex = 40;
+ this.label35.Text = "Server Port";
+ this.label35.TextAlign = System.Drawing.ContentAlignment.TopCenter;
+ //
+ // textBox4
+ //
+ this.textBox4.Location = new System.Drawing.Point(214, 24);
+ this.textBox4.Name = "textBox4";
+ this.textBox4.Size = new System.Drawing.Size(176, 20);
+ this.textBox4.TabIndex = 39;
+ this.textBox4.Text = "53640";
+ this.textBox4.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ this.textBox4.TextChanged += new System.EventHandler(this.TextBox4TextChanged);
+ //
// label42
//
this.label42.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
@@ -206,7 +228,7 @@ namespace RBXLegacyLauncher
//
this.button19.Location = new System.Drawing.Point(213, 217);
this.button19.Name = "button19";
- this.button19.Size = new System.Drawing.Size(88, 54);
+ this.button19.Size = new System.Drawing.Size(174, 54);
this.button19.TabIndex = 16;
this.button19.Text = "PLAY SOLO";
this.button19.UseVisualStyleBackColor = true;
@@ -214,11 +236,11 @@ namespace RBXLegacyLauncher
//
// button10
//
- this.button10.Location = new System.Drawing.Point(86, 47);
+ this.button10.Location = new System.Drawing.Point(16, 47);
this.button10.Name = "button10";
- this.button10.Size = new System.Drawing.Size(241, 20);
+ this.button10.Size = new System.Drawing.Size(177, 20);
this.button10.TabIndex = 15;
- this.button10.Text = "ADD SERVER TO SAVED SERVERS LIST";
+ this.button10.Text = "SAVE SERVER";
this.button10.UseVisualStyleBackColor = true;
this.button10.Click += new System.EventHandler(this.Button10Click);
//
@@ -258,9 +280,9 @@ namespace RBXLegacyLauncher
//
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.button1.Location = new System.Drawing.Point(111, 217);
+ this.button1.Location = new System.Drawing.Point(13, 217);
this.button1.Name = "button1";
- this.button1.Size = new System.Drawing.Size(88, 54);
+ this.button1.Size = new System.Drawing.Size(186, 54);
this.button1.TabIndex = 3;
this.button1.Text = "JOIN SERVER";
this.button1.UseVisualStyleBackColor = true;
@@ -270,9 +292,9 @@ namespace RBXLegacyLauncher
//
this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.label3.Location = new System.Drawing.Point(131, 5);
+ this.label3.Location = new System.Drawing.Point(43, 5);
this.label3.Name = "label3";
- this.label3.Size = new System.Drawing.Size(148, 13);
+ this.label3.Size = new System.Drawing.Size(128, 13);
this.label3.TabIndex = 1;
this.label3.Text = "Server IP Address";
this.label3.TextAlign = System.Drawing.ContentAlignment.TopCenter;
@@ -281,9 +303,9 @@ namespace RBXLegacyLauncher
//
this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.textBox1.Location = new System.Drawing.Point(86, 21);
+ this.textBox1.Location = new System.Drawing.Point(16, 24);
this.textBox1.Name = "textBox1";
- this.textBox1.Size = new System.Drawing.Size(241, 20);
+ this.textBox1.Size = new System.Drawing.Size(177, 20);
this.textBox1.TabIndex = 0;
this.textBox1.Text = "localhost";
this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
@@ -291,6 +313,10 @@ namespace RBXLegacyLauncher
//
// tabPage2
//
+ this.tabPage2.Controls.Add(this.label45);
+ this.tabPage2.Controls.Add(this.textBox7);
+ this.tabPage2.Controls.Add(this.textBox3);
+ this.tabPage2.Controls.Add(this.label29);
this.tabPage2.Controls.Add(this.label40);
this.tabPage2.Controls.Add(this.button20);
this.tabPage2.Controls.Add(this.button18);
@@ -309,6 +335,44 @@ namespace RBXLegacyLauncher
this.tabPage2.ToolTipText = "Start a server for other players to play";
this.tabPage2.UseVisualStyleBackColor = true;
//
+ // label45
+ //
+ this.label45.Location = new System.Drawing.Point(208, 131);
+ this.label45.Name = "label45";
+ this.label45.Size = new System.Drawing.Size(191, 18);
+ this.label45.TabIndex = 45;
+ this.label45.Text = "Port";
+ this.label45.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // textBox7
+ //
+ this.textBox7.Location = new System.Drawing.Point(203, 152);
+ this.textBox7.Name = "textBox7";
+ this.textBox7.Size = new System.Drawing.Size(196, 20);
+ this.textBox7.TabIndex = 44;
+ this.textBox7.Text = "53640";
+ this.textBox7.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ this.textBox7.TextChanged += new System.EventHandler(this.TextBox7TextChanged);
+ //
+ // textBox3
+ //
+ this.textBox3.Location = new System.Drawing.Point(6, 152);
+ this.textBox3.Name = "textBox3";
+ this.textBox3.Size = new System.Drawing.Size(191, 20);
+ this.textBox3.TabIndex = 43;
+ this.textBox3.Text = "12";
+ this.textBox3.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ this.textBox3.TextChanged += new System.EventHandler(this.TextBox3TextChanged);
+ //
+ // label29
+ //
+ this.label29.Location = new System.Drawing.Point(6, 131);
+ this.label29.Name = "label29";
+ this.label29.Size = new System.Drawing.Size(196, 18);
+ this.label29.TabIndex = 42;
+ this.label29.Text = "Player Limit";
+ this.label29.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
// label40
//
this.label40.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
@@ -341,9 +405,9 @@ namespace RBXLegacyLauncher
//
this.label32.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label32.ForeColor = System.Drawing.Color.Red;
- this.label32.Location = new System.Drawing.Point(12, 171);
+ this.label32.Location = new System.Drawing.Point(12, 177);
this.label32.Name = "label32";
- this.label32.Size = new System.Drawing.Size(378, 53);
+ this.label32.Size = new System.Drawing.Size(378, 47);
this.label32.TabIndex = 19;
this.label32.Text = "NOTE: Be sure you have port forwarded the server\'s port before you start a public" +
" server. This port can be found and changed in the OPTIONS tab.";
@@ -362,7 +426,7 @@ namespace RBXLegacyLauncher
//
this.label19.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.label19.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
- this.label19.Location = new System.Drawing.Point(6, 165);
+ this.label19.Location = new System.Drawing.Point(6, 175);
this.label19.Name = "label19";
this.label19.Size = new System.Drawing.Size(393, 2);
this.label19.TabIndex = 13;
@@ -383,7 +447,7 @@ namespace RBXLegacyLauncher
//
this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.label1.Location = new System.Drawing.Point(152, 3);
+ this.label1.Location = new System.Drawing.Point(162, 3);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(87, 16);
this.label1.TabIndex = 1;
@@ -398,7 +462,7 @@ namespace RBXLegacyLauncher
this.listBox1.FormattingEnabled = true;
this.listBox1.Location = new System.Drawing.Point(6, 22);
this.listBox1.Name = "listBox1";
- this.listBox1.Size = new System.Drawing.Size(393, 134);
+ this.listBox1.Size = new System.Drawing.Size(393, 108);
this.listBox1.TabIndex = 0;
this.listBox1.SelectedIndexChanged += new System.EventHandler(this.ListBox1SelectedIndexChanged);
//
@@ -556,31 +620,35 @@ namespace RBXLegacyLauncher
//
this.label38.Location = new System.Drawing.Point(213, 261);
this.label38.Name = "label38";
- this.label38.Size = new System.Drawing.Size(120, 20);
+ this.label38.Size = new System.Drawing.Size(177, 20);
this.label38.TabIndex = 7;
+ this.label38.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label39
//
this.label39.Location = new System.Drawing.Point(213, 249);
this.label39.Name = "label39";
- this.label39.Size = new System.Drawing.Size(149, 12);
+ this.label39.Size = new System.Drawing.Size(186, 12);
this.label39.TabIndex = 6;
this.label39.Text = "CURRENT SERVER PORT:";
+ this.label39.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// label37
//
this.label37.Location = new System.Drawing.Point(6, 261);
this.label37.Name = "label37";
- this.label37.Size = new System.Drawing.Size(120, 20);
+ this.label37.Size = new System.Drawing.Size(186, 20);
this.label37.TabIndex = 5;
+ this.label37.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label36
//
this.label36.Location = new System.Drawing.Point(6, 249);
this.label36.Name = "label36";
- this.label36.Size = new System.Drawing.Size(136, 12);
+ this.label36.Size = new System.Drawing.Size(186, 12);
this.label36.TabIndex = 4;
this.label36.Text = "CURRENT SERVER IP:";
+ this.label36.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// listBox4
//
@@ -616,160 +684,6 @@ namespace RBXLegacyLauncher
this.label14.TabIndex = 0;
this.label14.Text = "SERVERS";
//
- // tabPage5
- //
- this.tabPage5.Controls.Add(this.button21);
- this.tabPage5.Controls.Add(this.label44);
- this.tabPage5.Controls.Add(this.label43);
- this.tabPage5.Controls.Add(this.textBox3);
- this.tabPage5.Controls.Add(this.label29);
- this.tabPage5.Controls.Add(this.button11);
- this.tabPage5.Controls.Add(this.button9);
- this.tabPage5.Controls.Add(this.button8);
- this.tabPage5.Controls.Add(this.button7);
- this.tabPage5.Controls.Add(this.label35);
- this.tabPage5.Controls.Add(this.textBox4);
- this.tabPage5.Controls.Add(this.label34);
- this.tabPage5.Controls.Add(this.label12);
- this.tabPage5.Controls.Add(this.label33);
- this.tabPage5.Controls.Add(this.label31);
- this.tabPage5.Controls.Add(this.label2);
- this.tabPage5.Controls.Add(this.checkBox3);
- this.tabPage5.Location = new System.Drawing.Point(4, 22);
- this.tabPage5.Name = "tabPage5";
- this.tabPage5.Padding = new System.Windows.Forms.Padding(3);
- this.tabPage5.Size = new System.Drawing.Size(405, 284);
- this.tabPage5.TabIndex = 5;
- this.tabPage5.Text = "OPTIONS";
- this.tabPage5.ToolTipText = "Configure specific aspects of your server, launcher, and player appearance";
- this.tabPage5.UseVisualStyleBackColor = true;
- //
- // textBox3
- //
- this.textBox3.Location = new System.Drawing.Point(201, 167);
- this.textBox3.Name = "textBox3";
- this.textBox3.Size = new System.Drawing.Size(100, 20);
- this.textBox3.TabIndex = 41;
- this.textBox3.TextChanged += new System.EventHandler(this.TextBox3TextChanged);
- //
- // label29
- //
- this.label29.Location = new System.Drawing.Point(134, 170);
- this.label29.Name = "label29";
- this.label29.Size = new System.Drawing.Size(61, 18);
- this.label29.TabIndex = 40;
- this.label29.Text = "Player Limit";
- //
- // button11
- //
- this.button11.Location = new System.Drawing.Point(95, 143);
- this.button11.Name = "button11";
- this.button11.Size = new System.Drawing.Size(212, 20);
- this.button11.TabIndex = 38;
- this.button11.Text = "SAVE PORT TO SAVED PORTS LIST";
- this.button11.UseVisualStyleBackColor = true;
- this.button11.Click += new System.EventHandler(this.Button11Click);
- //
- // button9
- //
- this.button9.Location = new System.Drawing.Point(54, 212);
- this.button9.Name = "button9";
- this.button9.Size = new System.Drawing.Size(100, 33);
- this.button9.TabIndex = 37;
- this.button9.Text = "Reset Config";
- this.button9.UseVisualStyleBackColor = true;
- this.button9.Click += new System.EventHandler(this.Button9Click);
- //
- // button8
- //
- this.button8.Location = new System.Drawing.Point(96, 19);
- this.button8.Name = "button8";
- this.button8.Size = new System.Drawing.Size(212, 52);
- this.button8.TabIndex = 35;
- this.button8.Text = "Customize Character";
- this.button8.UseVisualStyleBackColor = true;
- this.button8.Click += new System.EventHandler(this.Button8Click);
- //
- // button7
- //
- this.button7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.button7.Location = new System.Drawing.Point(54, 248);
- this.button7.Name = "button7";
- this.button7.Size = new System.Drawing.Size(100, 33);
- this.button7.TabIndex = 34;
- this.button7.Text = "Save Config";
- this.button7.UseVisualStyleBackColor = true;
- this.button7.Click += new System.EventHandler(this.Button7Click);
- //
- // label35
- //
- this.label35.Location = new System.Drawing.Point(83, 103);
- this.label35.Name = "label35";
- this.label35.Size = new System.Drawing.Size(234, 16);
- this.label35.TabIndex = 33;
- this.label35.Text = "PORT (Used for starting and joining servers)";
- this.label35.TextAlign = System.Drawing.ContentAlignment.TopCenter;
- //
- // textBox4
- //
- this.textBox4.Location = new System.Drawing.Point(96, 122);
- this.textBox4.Name = "textBox4";
- this.textBox4.Size = new System.Drawing.Size(211, 20);
- this.textBox4.TabIndex = 32;
- this.textBox4.Text = "53640";
- this.textBox4.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
- this.textBox4.TextChanged += new System.EventHandler(this.TextBox4TextChanged);
- //
- // label34
- //
- this.label34.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
- this.label34.Location = new System.Drawing.Point(14, 194);
- this.label34.Name = "label34";
- this.label34.Size = new System.Drawing.Size(378, 2);
- this.label34.TabIndex = 31;
- //
- // label12
- //
- this.label12.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
- this.label12.Location = new System.Drawing.Point(14, 80);
- this.label12.Name = "label12";
- this.label12.Size = new System.Drawing.Size(378, 2);
- this.label12.TabIndex = 30;
- //
- // label33
- //
- this.label33.Location = new System.Drawing.Point(293, 196);
- this.label33.Name = "label33";
- this.label33.Size = new System.Drawing.Size(79, 13);
- this.label33.TabIndex = 29;
- this.label33.Text = "LAN OPTIONS";
- //
- // label31
- //
- this.label31.Location = new System.Drawing.Point(150, 86);
- this.label31.Name = "label31";
- this.label31.Size = new System.Drawing.Size(110, 14);
- this.label31.TabIndex = 28;
- this.label31.Text = "SERVER SETTINGS";
- //
- // label2
- //
- this.label2.Location = new System.Drawing.Point(95, 3);
- this.label2.Name = "label2";
- this.label2.Size = new System.Drawing.Size(222, 13);
- this.label2.TabIndex = 27;
- this.label2.Text = "PLAYER OPTIONS AND CUSTOMIZATION";
- //
- // checkBox3
- //
- this.checkBox3.Location = new System.Drawing.Point(282, 212);
- this.checkBox3.Name = "checkBox3";
- this.checkBox3.Size = new System.Drawing.Size(108, 18);
- this.checkBox3.TabIndex = 22;
- this.checkBox3.Text = "Local Play Mode";
- this.checkBox3.UseVisualStyleBackColor = true;
- this.checkBox3.CheckedChanged += new System.EventHandler(this.CheckBox3CheckedChanged);
- //
// tabPage7
//
this.tabPage7.BackColor = System.Drawing.SystemColors.ControlText;
@@ -779,7 +693,7 @@ namespace RBXLegacyLauncher
this.tabPage7.Padding = new System.Windows.Forms.Padding(3);
this.tabPage7.Size = new System.Drawing.Size(405, 284);
this.tabPage7.TabIndex = 7;
- this.tabPage7.Text = "CMD";
+ this.tabPage7.Text = "CONSOLE";
//
// richTextBox1
//
@@ -896,15 +810,58 @@ namespace RBXLegacyLauncher
this.label5.Text = "label5";
this.label5.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
+ // button21
+ //
+ this.button21.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F);
+ this.button21.Location = new System.Drawing.Point(338, 89);
+ this.button21.Name = "button21";
+ this.button21.Size = new System.Drawing.Size(87, 20);
+ this.button21.TabIndex = 44;
+ this.button21.Text = "Install URI";
+ this.button21.UseVisualStyleBackColor = true;
+ this.button21.Click += new System.EventHandler(this.Button21Click);
+ //
+ // button9
+ //
+ this.button9.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F);
+ this.button9.Location = new System.Drawing.Point(248, 111);
+ this.button9.Name = "button9";
+ this.button9.Size = new System.Drawing.Size(85, 20);
+ this.button9.TabIndex = 37;
+ this.button9.Text = "Reset Config";
+ this.button9.UseVisualStyleBackColor = true;
+ this.button9.Click += new System.EventHandler(this.Button9Click);
+ //
+ // button8
+ //
+ this.button8.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
+ this.button8.Location = new System.Drawing.Point(127, 107);
+ this.button8.Name = "button8";
+ this.button8.Size = new System.Drawing.Size(109, 24);
+ this.button8.TabIndex = 35;
+ this.button8.Text = "Customization";
+ this.button8.UseVisualStyleBackColor = true;
+ this.button8.Click += new System.EventHandler(this.Button8Click);
+ //
+ // checkBox3
+ //
+ this.checkBox3.Location = new System.Drawing.Point(248, 68);
+ this.checkBox3.Name = "checkBox3";
+ this.checkBox3.Size = new System.Drawing.Size(177, 18);
+ this.checkBox3.TabIndex = 22;
+ this.checkBox3.Text = "Local Play Mode";
+ this.checkBox3.UseVisualStyleBackColor = true;
+ this.checkBox3.CheckedChanged += new System.EventHandler(this.CheckBox3CheckedChanged);
+ //
// checkBox1
//
this.checkBox1.Checked = true;
this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked;
this.checkBox1.Location = new System.Drawing.Point(248, 48);
this.checkBox1.Name = "checkBox1";
- this.checkBox1.Size = new System.Drawing.Size(158, 19);
+ this.checkBox1.Size = new System.Drawing.Size(177, 19);
this.checkBox1.TabIndex = 5;
- this.checkBox1.Text = "Close Launcher on Launch";
+ this.checkBox1.Text = "Minimize Launcher on Launch";
this.checkBox1.UseCompatibleTextRendering = true;
this.checkBox1.UseVisualStyleBackColor = true;
this.checkBox1.CheckedChanged += new System.EventHandler(this.CheckBox1CheckedChanged);
@@ -913,11 +870,11 @@ namespace RBXLegacyLauncher
//
this.button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.button3.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.button3.Location = new System.Drawing.Point(250, 65);
+ this.button3.Location = new System.Drawing.Point(248, 89);
this.button3.Name = "button3";
- this.button3.Size = new System.Drawing.Size(171, 20);
+ this.button3.Size = new System.Drawing.Size(87, 20);
this.button3.TabIndex = 6;
- this.button3.Text = "Launch ROBLOX Studio";
+ this.button3.Text = "Open Studio";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.Button3Click);
//
@@ -931,20 +888,20 @@ namespace RBXLegacyLauncher
//
// button4
//
- this.button4.Location = new System.Drawing.Point(12, 105);
+ this.button4.Location = new System.Drawing.Point(12, 107);
this.button4.Name = "button4";
- this.button4.Size = new System.Drawing.Size(224, 26);
+ this.button4.Size = new System.Drawing.Size(109, 24);
this.button4.TabIndex = 9;
- this.button4.Text = "Regenerate Player ID";
+ this.button4.Text = "Generate New ID";
this.button4.UseVisualStyleBackColor = true;
this.button4.Click += new System.EventHandler(this.Button4Click);
//
// button5
//
this.button5.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.button5.Location = new System.Drawing.Point(250, 111);
+ this.button5.Location = new System.Drawing.Point(338, 111);
this.button5.Name = "button5";
- this.button5.Size = new System.Drawing.Size(171, 20);
+ this.button5.Size = new System.Drawing.Size(87, 20);
this.button5.TabIndex = 10;
this.button5.Text = "Save Config";
this.button5.UseVisualStyleBackColor = true;
@@ -1026,17 +983,6 @@ namespace RBXLegacyLauncher
this.label28.TabIndex = 19;
this.label28.Text = "Baseplate.rbxl";
//
- // button6
- //
- this.button6.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.button6.Location = new System.Drawing.Point(250, 89);
- this.button6.Name = "button6";
- this.button6.Size = new System.Drawing.Size(171, 20);
- this.button6.TabIndex = 3;
- this.button6.Text = "Clientinfo Editor";
- this.button6.UseVisualStyleBackColor = true;
- this.button6.Click += new System.EventHandler(this.Button6Click);
- //
// textBox5
//
this.textBox5.Location = new System.Drawing.Point(59, 86);
@@ -1048,32 +994,6 @@ namespace RBXLegacyLauncher
this.textBox5.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.textBox5.TextChanged += new System.EventHandler(this.TextBox5TextChanged);
//
- // label43
- //
- this.label43.Location = new System.Drawing.Point(54, 196);
- this.label43.Name = "label43";
- this.label43.Size = new System.Drawing.Size(100, 13);
- this.label43.TabIndex = 42;
- this.label43.Text = "CONFIG OPTIONS";
- //
- // label44
- //
- this.label44.Location = new System.Drawing.Point(183, 196);
- this.label44.Name = "label44";
- this.label44.Size = new System.Drawing.Size(77, 13);
- this.label44.TabIndex = 43;
- this.label44.Text = "URI OPTIONS";
- //
- // button21
- //
- this.button21.Location = new System.Drawing.Point(183, 224);
- this.button21.Name = "button21";
- this.button21.Size = new System.Drawing.Size(75, 39);
- this.button21.TabIndex = 44;
- this.button21.Text = "Install URI";
- this.button21.UseVisualStyleBackColor = true;
- this.button21.Click += new System.EventHandler(this.Button21Click);
- //
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -1081,18 +1001,21 @@ namespace RBXLegacyLauncher
this.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.ClientSize = new System.Drawing.Size(427, 459);
+ this.Controls.Add(this.button21);
this.Controls.Add(this.textBox5);
- this.Controls.Add(this.button6);
this.Controls.Add(this.label28);
this.Controls.Add(this.label27);
this.Controls.Add(this.label26);
this.Controls.Add(this.label25);
this.Controls.Add(this.label24);
+ this.Controls.Add(this.button9);
this.Controls.Add(this.label23);
+ this.Controls.Add(this.button8);
this.Controls.Add(this.label22);
this.Controls.Add(this.label15);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.button5);
+ this.Controls.Add(this.checkBox3);
this.Controls.Add(this.button4);
this.Controls.Add(this.label13);
this.Controls.Add(this.button3);
@@ -1111,19 +1034,18 @@ namespace RBXLegacyLauncher
this.tabPage1.ResumeLayout(false);
this.tabPage1.PerformLayout();
this.tabPage2.ResumeLayout(false);
+ this.tabPage2.PerformLayout();
this.tabPage3.ResumeLayout(false);
this.tabPage3.PerformLayout();
this.tabPage6.ResumeLayout(false);
- this.tabPage5.ResumeLayout(false);
- this.tabPage5.PerformLayout();
this.tabPage7.ResumeLayout(false);
this.tabPage8.ResumeLayout(false);
this.tabPage4.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
- private System.Windows.Forms.Label label43;
- private System.Windows.Forms.Label label44;
+ private System.Windows.Forms.TextBox textBox7;
+ private System.Windows.Forms.Label label45;
private System.Windows.Forms.Button button21;
private System.Windows.Forms.Label label41;
private System.Windows.Forms.Label label40;
@@ -1158,17 +1080,10 @@ namespace RBXLegacyLauncher
private System.Windows.Forms.TextBox textBox6;
private System.Windows.Forms.Button button8;
private System.Windows.Forms.TextBox textBox5;
- private System.Windows.Forms.Label label2;
- private System.Windows.Forms.Label label31;
- private System.Windows.Forms.Label label33;
- private System.Windows.Forms.Label label34;
private System.Windows.Forms.TextBox textBox4;
private System.Windows.Forms.Label label35;
- private System.Windows.Forms.Button button7;
- private System.Windows.Forms.TabPage tabPage5;
private System.Windows.Forms.Label label32;
private System.Windows.Forms.Label label30;
- private System.Windows.Forms.Button button6;
private System.Windows.Forms.Label label28;
private System.Windows.Forms.Label label27;
private System.Windows.Forms.CheckBox checkBox3;
@@ -1185,7 +1100,6 @@ namespace RBXLegacyLauncher
private System.Windows.Forms.Button button5;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.Label label13;
- private System.Windows.Forms.Label label12;
private System.Windows.Forms.Label label19;
private System.Windows.Forms.Label label20;
private System.Windows.Forms.Label label16;
diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.cs b/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.cs
index 706f341..0d18165 100644
--- a/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.cs
+++ b/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.cs
@@ -91,12 +91,17 @@ namespace RBXLegacyLauncher
}
WriteConfigValues();
- Process.Start("sudppipe.exe", "-p " + GlobalVars.IP + " " + GlobalVars.RobloxPort + " " + GlobalVars.RobloxPort);
+ Process sudp = new Process();
+ sudp.StartInfo.FileName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\sudppipe.exe";
+ sudp.StartInfo.Arguments = "-p " + GlobalVars.IP + " " + GlobalVars.RobloxPort + " " + GlobalVars.RobloxPort;
+ sudp.StartInfo.UseShellExecute = false;
+ sudp.StartInfo.CreateNoWindow = true;
+ sudp.Start();
StartClient();
if (GlobalVars.CloseOnLaunch == true)
{
- this.Close();
+ this.WindowState = FormWindowState.Minimized;
}
}
@@ -107,7 +112,7 @@ namespace RBXLegacyLauncher
if (GlobalVars.CloseOnLaunch == true)
{
- this.Close();
+ this.WindowState = FormWindowState.Minimized;
}
}
@@ -121,7 +126,7 @@ namespace RBXLegacyLauncher
StartStudio();
if (GlobalVars.CloseOnLaunch == true)
{
- this.Close();
+ this.WindowState = FormWindowState.Minimized;
}
}
@@ -357,12 +362,6 @@ namespace RBXLegacyLauncher
}
}
- void Button6Click(object sender, EventArgs e)
- {
- ClientinfoEditor cie = new ClientinfoEditor();
- cie.Show();
- }
-
void Button7Click(object sender, EventArgs e)
{
WriteConfigValues();
@@ -425,18 +424,30 @@ namespace RBXLegacyLauncher
void ListBox3SelectedIndexChanged(object sender, EventArgs e)
{
+ try
+ {
GlobalVars.IP = listBox3.SelectedItem.ToString();
textBox1.Text = GlobalVars.IP;
checkBox3.Enabled = false;
GlobalVars.LocalPlayMode = false;
label37.Text = GlobalVars.IP;
+ }
+ catch (Exception)
+ {
+ }
}
void ListBox4SelectedIndexChanged(object sender, EventArgs e)
{
+ try
+ {
GlobalVars.RobloxPort = Convert.ToInt32(listBox4.SelectedItem.ToString());
textBox4.Text = GlobalVars.RobloxPort.ToString();
label38.Text = GlobalVars.RobloxPort.ToString();
+ }
+ catch (Exception)
+ {
+ }
}
void Button10Click(object sender, EventArgs e)
@@ -510,7 +521,7 @@ namespace RBXLegacyLauncher
if (GlobalVars.CloseOnLaunch == true)
{
- this.Close();
+ this.WindowState = FormWindowState.Minimized;
}
}
@@ -522,7 +533,7 @@ namespace RBXLegacyLauncher
if (GlobalVars.CloseOnLaunch == true)
{
- this.Close();
+ this.WindowState = FormWindowState.Minimized;
}
}
@@ -585,6 +596,27 @@ namespace RBXLegacyLauncher
}
}
+ void TextBox7TextChanged(object sender, EventArgs e)
+ {
+ int parsedValue;
+ if (int.TryParse(textBox7.Text, out parsedValue))
+ {
+ if (textBox7.Text.Equals(""))
+ {
+ //set it to the normal port, 53640. it wouldn't make any sense if we set it to 0.
+ GlobalVars.ServerPort = GlobalVars.DefaultRobloxPort;
+ }
+ else
+ {
+ GlobalVars.ServerPort = Convert.ToInt32(textBox7.Text);
+ }
+ }
+ else
+ {
+ GlobalVars.ServerPort = GlobalVars.DefaultRobloxPort;
+ }
+ }
+
void ResetConfigValues()
{
LauncherFuncs.ResetConfigValues();
@@ -640,26 +672,31 @@ namespace RBXLegacyLauncher
string HatIDOffline3 = GlobalVars.Custom_Hat3ID_Offline;
if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == true)
{
- args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(" + GlobalVars.UserID + ",'localhost'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote;
+ args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(" + GlobalVars.UserID + ",'localhost'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote;
}
else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == true)
{
- args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(" + GlobalVars.UserID + ",'localhost'," + GlobalVars.RobloxPort + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote;
+ args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(" + GlobalVars.UserID + ",'localhost'," + GlobalVars.RobloxPort + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote;
}
else if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == false)
{
- args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(0,'localhost'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote;
+ args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(0,'localhost'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote;
}
else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == false)
{
- args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(0,'localhost'," + GlobalVars.RobloxPort + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote;
+ args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(0,'localhost'," + GlobalVars.RobloxPort + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote;
}
try
{
ConsolePrint("Client Loaded.", 4);
if (SecurityFuncs.checkClientMD5(GlobalVars.SelectedClient) == true)
{
- Process.Start(rbxexe, args);
+ Process client = new Process();
+ client.StartInfo.FileName = rbxexe;
+ client.StartInfo.Arguments = args;
+ client.EnableRaisingEvents = true;
+ client.Exited += new EventHandler(ClientExited);
+ client.Start();
}
}
catch (Exception)
@@ -675,6 +712,23 @@ namespace RBXLegacyLauncher
}
}
+ void ClientExited(object sender, EventArgs e)
+ {
+ Process[] sudp = Process.GetProcessesByName("sudppipe");
+ if (sudp != null)
+ {
+ foreach (var process in sudp)
+ {
+ process.Kill();
+ }
+
+ if (this.WindowState == FormWindowState.Minimized)
+ {
+ this.WindowState = FormWindowState.Normal;
+ }
+ }
+ }
+
void StartSolo()
{
string mapfile = GlobalVars.MapsDir + @"\\" + GlobalVars.Map;
@@ -686,19 +740,19 @@ namespace RBXLegacyLauncher
string HatIDOffline3 = GlobalVars.Custom_Hat3ID_Offline;
if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == true)
{
- args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSSolo(" + GlobalVars.UserID + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote;
+ args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSSolo(" + GlobalVars.UserID + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote;
}
else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == true)
{
- args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSSolo(" + GlobalVars.UserID + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote;
+ args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSSolo(" + GlobalVars.UserID + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote;
}
else if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == false)
{
- args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSSolo(0,'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote;
+ args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSSolo(0,'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote;
}
else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == false )
{
- args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSSolo(0,'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote;
+ args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSSolo(0,'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote;
}
try
{
@@ -718,7 +772,7 @@ namespace RBXLegacyLauncher
string rbxexe = GlobalVars.ClientDir + @"\\" + GlobalVars.SelectedClient + @"\\RobloxApp.exe";
string quote = "\"";
string args = "";
- args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSServer(" + GlobalVars.RobloxPort + "," + GlobalVars.PlayerLimit + "); " + quote;
+ args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSServer(" + GlobalVars.ServerPort + "," + GlobalVars.PlayerLimit + "); " + quote;
try
{
ConsolePrint("Server Loaded.", 4);
@@ -737,7 +791,7 @@ namespace RBXLegacyLauncher
string rbxexe = GlobalVars.ClientDir + @"\\" + GlobalVars.SelectedClient + @"\\RobloxApp.exe";
string quote = "\"";
string args = "";
- args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSServer(" + GlobalVars.RobloxPort + "," + GlobalVars.PlayerLimit + "); " + quote + " -no3d";
+ args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSServer(" + GlobalVars.ServerPort + "," + GlobalVars.PlayerLimit + "); " + quote + " -no3d";
try
{
ConsolePrint("Server Loaded in No3d.", 4);
@@ -786,7 +840,12 @@ namespace RBXLegacyLauncher
}
else if (command.Equals("rbxlegacy client"))
{
- Process.Start("sudppipe.exe", "-p " + GlobalVars.IP + " " + GlobalVars.RobloxPort + " " + GlobalVars.RobloxPort);
+ Process sudp = new Process();
+ sudp.StartInfo.FileName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\sudppipe.exe";
+ sudp.StartInfo.Arguments = "-p " + GlobalVars.IP + " " + GlobalVars.RobloxPort + " " + GlobalVars.RobloxPort;
+ sudp.StartInfo.UseShellExecute = false;
+ sudp.StartInfo.CreateNoWindow = true;
+ sudp.Start();
StartClient();
}
else if (command.Equals("rbxlegacy client solo"))
@@ -813,6 +872,18 @@ namespace RBXLegacyLauncher
{
ResetConfigValues();
}
+ else if (command.Equals("rbxlegacy sdk"))
+ {
+ SDKForm sdk = new SDKForm();
+ sdk.Show();
+ ConsolePrint("Launched SDK.", 4);
+ }
+ else if (command.Equals("sdk"))
+ {
+ SDKForm sdk = new SDKForm();
+ sdk.Show();
+ ConsolePrint("Launched SDK.", 4);
+ }
else if (command.Equals("rbxlegacy help"))
{
ConsoleRBXLegacyHelp(0);
@@ -865,6 +936,7 @@ namespace RBXLegacyLauncher
ConsolePrint("= server | Loads server with launcher settings", 3);
ConsolePrint("-- no3d | Loads server in NoGraphics mode with launcher settings", 4);
ConsolePrint("= studio | Loads Roblox Studio with launcher settings", 3);
+ ConsolePrint("= sdk | Loads the RBXLegacy SDK", 3);
ConsolePrint("= config", 3);
ConsolePrint("-- save | Saves the config file", 4);
ConsolePrint("-- load | Reloads the config file", 4);
diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.resx b/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.resx
index 52e7305..ac14fe9 100644
--- a/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.resx
+++ b/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.resx
@@ -203,7 +203,8 @@
- NOTE: Make sure the server you join is in the region of the world you live in! (i.e West US, East US, Europe, etc). If you have a problem where you can't see your character, REGENERATE YOUR PLAYER ID THEN REJOIN THE SERVER. If you tried to connect to the server and you get an error, REJOIN THE SERVER. If the server requires a different port than the normal ROBLOX port (53640), change it in the OPTIONS tab.
+ NOTE: Make sure the server you join is in the region of the world you live in! (i.e West US, East US, Europe, etc). If you have a problem where you can't see your character, REGENERATE YOUR PLAYER ID THEN REJOIN THE SERVER. If you tried to connect to the server and you get an error, REJOIN THE SERVER.
+
WARNING: This client loads assets directly from a server. This means that you may not be able to play it over a LAN or local connection without internet access. This may also mean that some things won't load (i.e the healthbar)
diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/RBXLegacyLauncher.csproj b/RBXLegacyLauncher/RBXLegacyLauncher/RBXLegacyLauncher.csproj
index 38804cf..c36ac36 100644
--- a/RBXLegacyLauncher/RBXLegacyLauncher/RBXLegacyLauncher.csproj
+++ b/RBXLegacyLauncher/RBXLegacyLauncher/RBXLegacyLauncher.csproj
@@ -18,6 +18,9 @@
False
obj\$(Configuration)\
4
+ False
+ False
+ OnBuildSuccess
x86
@@ -42,6 +45,8 @@
False
TRACE
obj\
+ Program
+ ..\..\..\RBXLegacy\release\RBXLegacy\RBXLegacyLauncher.exe
@@ -59,10 +64,6 @@
CharacterCustomization.cs
-
-
- CharacterCustomization_ClothingMenu.cs
-
CharacterCustomization_HatMenu.cs
@@ -76,6 +77,10 @@
DocForm.cs
+
+
+ InfoEditor.cs
+
@@ -86,6 +91,10 @@
QuickConfigure.cs
+
+
+ SDKForm.cs
+
@@ -107,9 +116,6 @@
CharacterCustomization.cs
-
- CharacterCustomization_ClothingMenu.cs
-
CharacterCustomization_HatMenu.cs
@@ -119,6 +125,9 @@
DocForm.Designer.cs
+
+ InfoEditor.Designer.cs
+
LoaderForm.cs
@@ -128,6 +137,9 @@
QuickConfigure.cs
+
+ SDKForm.cs
+
ServerInfo.cs
diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.Designer.cs b/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.Designer.cs
new file mode 100644
index 0000000..cc6df5b
--- /dev/null
+++ b/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.Designer.cs
@@ -0,0 +1,80 @@
+/*
+ * Created by SharpDevelop.
+ * User: BITL
+ * Date: 6/23/2017
+ * Time: 2:33 PM
+ *
+ * To change this template use Tools | Options | Coding | Edit Standard Headers.
+ */
+namespace RBXLegacyLauncher
+{
+ partial class SDKForm
+ {
+ ///
+ /// Designer variable used to keep track of non-visual components.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Disposes resources used by the form.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing) {
+ if (components != null) {
+ components.Dispose();
+ }
+ }
+ base.Dispose(disposing);
+ }
+
+ ///
+ /// This method is required for Windows Forms designer support.
+ /// Do not change the method contents inside the source code editor. The Forms designer might
+ /// not be able to load this method if it was changed manually.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SDKForm));
+ this.button1 = new System.Windows.Forms.Button();
+ this.button2 = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(12, 12);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(260, 63);
+ this.button1.TabIndex = 0;
+ this.button1.Text = "Clientinfo Editor";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.Button1Click);
+ //
+ // button2
+ //
+ this.button2.Location = new System.Drawing.Point(12, 81);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(260, 63);
+ this.button2.TabIndex = 1;
+ this.button2.Text = "Info Editor";
+ this.button2.UseVisualStyleBackColor = true;
+ this.button2.Click += new System.EventHandler(this.Button2Click);
+ //
+ // SDKForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.SystemColors.ControlLightLight;
+ this.ClientSize = new System.Drawing.Size(284, 157);
+ this.Controls.Add(this.button2);
+ this.Controls.Add(this.button1);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Name = "SDKForm";
+ this.Text = "RBXLegacy SDK";
+ this.ResumeLayout(false);
+ }
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.Button button1;
+ }
+}
diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.cs b/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.cs
new file mode 100644
index 0000000..807891b
--- /dev/null
+++ b/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.cs
@@ -0,0 +1,44 @@
+/*
+ * Created by SharpDevelop.
+ * User: BITL
+ * Date: 6/23/2017
+ * Time: 2:33 PM
+ *
+ * To change this template use Tools | Options | Coding | Edit Standard Headers.
+ */
+using System;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace RBXLegacyLauncher
+{
+ ///
+ /// Description of SDKForm.
+ ///
+ public partial class SDKForm : Form
+ {
+ public SDKForm()
+ {
+ //
+ // The InitializeComponent() call is required for Windows Forms designer support.
+ //
+ InitializeComponent();
+
+ //
+ // TODO: Add constructor code after the InitializeComponent() call.
+ //
+ }
+
+ void Button1Click(object sender, EventArgs e)
+ {
+ ClientinfoEditor cie = new ClientinfoEditor();
+ cie.Show();
+ }
+
+ void Button2Click(object sender, EventArgs e)
+ {
+ InfoEditor ie = new InfoEditor();
+ ie.Show();
+ }
+ }
+}
diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.resx b/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.resx
new file mode 100644
index 0000000..8fcf2e5
--- /dev/null
+++ b/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.resx
@@ -0,0 +1,6293 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ AAABAAYAEBAAAAAAIABoBAAAZgAAACAgAAAAACAAqBAAAM4EAAAwMAAAAAAgAKglAAB2FQAAQEAAAAAA
+ IAAoQgAAHjsAAICAAAAAACAAKAgBAEZ9AAAAAAAAAAAgACggBABuhQEAKAAAABAAAAAgAAAAAQAgAAAA
+ AABABAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////95eXn/1dXV/25ubv/Q0ND/iYmJ/6Wl
+ pf+hoaH/hYWF/4mJif/V1dX/srKy/9zc3P//////////////////////f39///////9ubm7/0NDQ/4mJ
+ if/FxcX/sbGx/5WVlf+JiYn/1dXV/5SUlP/Kysr//////////////////////8/Pz///////+vr///Ly
+ ///X1///zs7//+Li///39///////////////////6+v/////////////xsb//5mZ//+MjP//+Pj//4mJ
+ //9hYf//q6v//9DQ//+8vP//dnb//4GB///l5f//2Nj//5CQ//+Rkf//5ub//66u///x8f//mZn//4mJ
+ ///y8v//mpr//29v//96ev//k5P//0pK///x8f//nZ3//5iY////////l5f//+rq//+rq///9PT//8vL
+ ///19f//ra3//1BQ///9/f//lpb//9vb//+Njf//h4f///39////////t7f//8vL////////qKj///f3
+ //+dnf//kZH//+bm//9jY///+vr//4eH//++vv//iIj//4mJ///5+f///////8zM//+fn////v7//6Wl
+ ///6+v//np7//6ys///V1f//jY3///j4//+MjP//zs7//2Ji///t7f///v7//5yc///7+///4+P//4uL
+ //+iov///Pz//83N///Pz///2Nj//21t//+hof//oaH//4uL//+YmP//tLT//7Gx///Hx///ior//5iY
+ ///c3P//w8P//6Cg//+goP//nJz//7+////9/f///////////////////////9TU//+srP////////Dw
+ ///a2v//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//KAAAACAAAABAAAAAAQAgAAAAAACAEAAAAAAAAAAA
+ AAAAAAAAAAAAAP//////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////3t7
+ e/9ra2v/f39//9fX1/97e3v/a2tr/39/f//X19f/u7u7/2tra/9zc3P/w8PD/5+fn///////e3t7/8PD
+ w/+7u7v/a2tr/4uLi//r6+v//////3t7e//Dw8P/////////////////////////////////////////
+ ////////T09P/6+vr////////////09PT/+Dg4P/6+vr//////9PT0//r6+v/6+vr/+vr6//Z2dn/39/
+ f/8nJyf/r6+v/09PT/+vr6//8/Pz/+vr6///////T09P/6+vr///////////////////////////////
+ //////////////////9PT0//r6+v////////////T09P/4ODg//r6+v//////09PT/+vr6//x8fH/9fX
+ 1/9/f3///////09PT/+vr6//T09P/6+vr//z8/P/6+vr/7u7u/9XV1f/n5+f/+vr6///////////////
+ /////////////////////////////09PT/+vr6////////////97e3v/a2tr/39/f//X19f/u7u7/2tr
+ a/+Li4v/6+vr/8fHx/9/f3//a2tr/+vr6/+7u7v/a2tr/4uLi//r6+v/e3t7/8PDw//b29v/w8PD////
+ ////////////////////////////////////////e3t7/8PDw///////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////+zs
+ ///Nzf///////9XV//+Li///lJT//6io//+8vP//z8///+Pj///6+v//////////////////////////
+ ////////9fX//7m5/////////////////////////////7u7//+Pj///j4///4+P//+ysv//////////
+ ///o6P//Ojr//zo6//83N///YGD//6+v//+srP//mJj//4OD//9vb///Q0P//5SU//+lpf//vb3/////
+ //////////////z8//9TU///V1f//1ZW///k5P//////////////////YGD//5mZ//+vr///qqr//0ZG
+ ////////5eX//zk5///IyP//8/P//yIi//+env/////////////////////////////i4v//Hx///1ZW
+ //9MTP//l5f////////+/v//aWn//5iY////////ysr//z8///+dnf////////////9eXv//4+P/////
+ ///+/v//PT3//+Hh//84OP//zs7/////////////Pz///1JS//93d///b2///0ZG//8zM////v7//4yM
+ //8MDP//+vr///v7//9ubv//bW3//4KC//97e//////////////+/v//WVn//62t/////////////1tb
+ ///m5v////////////8sLP//ODj//9TU//////////////39//8tLf//Ojr//7m5//8+Pv//9fX//0lJ
+ ///U1P//i4v//wQE///Q0P////////////+Zmf//ZGT///7+/////////////5CQ//93d///////////
+ ////////WFj//+jo/////////////z4+///Z2f/////////////W1v//Q0P//x0d///5+f///////y4u
+ //81Nf//dHT///v7////////fHz//1ZW///7+//////////////////////////////Cwv//SEj///v7
+ //////////////////9WVv//6+v/////////////8PD/////////////0tL//w4O//+env//QkL/////
+ //////////////b2/////////v7//4iI//8yMv//dHT//1dX///6+v//////////////////5ub//zQ0
+ ///q6v///////////////////////1NT///u7v////////j4//8/P///bm7///Dw////////3t7//1pa
+ //8XF///+fn///////+6uv//x8f///b2////////0dH//yQk///k5P//MjL//+fn////////////////
+ ///u7v//S0v//6Cg////////////////////////T0////Dw/////////Pz//z8///+wsP//Njb//7u7
+ /////////////xwc///39///+/v//yUl//91df//JSX//97e///k5P//Rkb//z4+///Q0P//////////
+ ///////////////////6+v//aGj//3d3///9/f////////////9NTf//8/P/////////////Pj7/////
+ //+zs///goL/////////////Ghr///7+///n5///Hx///3Jy//9TU////////5ub//8LC///uLj/////
+ /////////////+jo///09P/////////////+/v//j4///1FR///y8v///////0pK///39///////////
+ //89Pf//xsb//zc3///W1v////////////8fH/////////39///g4P//vr7//+np///+/v//R0f//5qa
+ ///////////////////+/v//UFD//0RE///x8f/////////////+/v//UVH//5aW////////SEj///n5
+ /////////////zc3//9WVv//6en//////////////////x0d///R0f//6ur///39/////////v7//3Jy
+ //9PT///R0f//+Tk/////////////6am//9wcP//urr//0BA///t7f///////319//90dP///v7/////
+ //9ERP///Pz/////////////////////////////3t7//4SE//86Ov//YGD//3Jy//9YWP//RUX//0ND
+ //83N///hIT////////MzP//OTn//7Ky///p6f//ODj///T0////////v7///zw8//95ef//bGz///7+
+ /////////////0JC//9+fv//e3v//3h4//90dP//cHD//0JC//9UVP//rKz///f3////////////////
+ ///////////////////////////////////z8///YWH//yUl//+/v///////////////////xcX//3Bw
+ ///9/f//////////////////z8///8PD///Gxv//yMj//8vL///Nzf//8PD/////////////////////
+ ////////////////////////////////////////////////////////zc3/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA
+ AAAAAAAAAAAAAAAAAAD//////v7+/////////////v7+///////+/v7////////////+/v7/////////
+ ///+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v//////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v///////v7+////
+ /////////v7+///////+/v7////////////+/v7////////////+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v//////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v///////v7+/////////////v7+//////+qqqr/X19f/19f
+ X/9fX1//ZGRk//////+qqqr/X19f/19fX/9fX1//ZGRk//7+/v/+/v7/goKC/19fX/9fX1//ZGRk//7+
+ /v+qqqr/3Nzc//7+/v+qqqr/ZGRk//7+/v/+/v7/goKC/19fX/9fX1//3Nzc//7+/v/+/v7/+vr6/19f
+ X/+0tLT///////7+/v/+/v7///////7+/v/+/v7///////7+/v//////////////////////////////
+ //93d3f/BgYG/9/f3//f39//4ODg//////93d3f/BgYG/9/f3//f39//4ODg//////+IiIj/DQ0N/9/f
+ 3//f39//ODg4//////93d3f/rq6u/9/f3/9oaGj/BwcH//////+IiIj/DQ0N/9/f3//f39//aGho////
+ ////////9/f3/wAAAP+Hh4f////////////////////////////////////////////+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v93d3f/BwcH//7+/v/+/v7//v7+//7+/v93d3f/BAQE/5+fn//S0tL//v7+//7+
+ /v93d3f/BwcH//7+/v/MzMz/Kioq//7+/v93d3f/SkpK/19fX/8sLCz/BwcH//7+/v93d3f/BwcH//7+
+ /v/+/v7//v7+//7+/v/+/v7/9/f3/wAAAP+Hh4f//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v///////v7+/////////////v7+//////93d3f/BwcH///////+/v7///////////93d3f/BAQE/5+f
+ n//S0tL///////7+/v93d3f/BwcH//7+/v/MzMz/oqKi//7+/v93d3f/x8fH//7+/v93d3f/BwcH//7+
+ /v93d3f/BwcH//7+/v/+/v7///////7+/v/+/v7/f39//ywsLP99fX3/3Nzc//7+/v/+/v7///////7+
+ /v/+/v7///////7+/v////////////////////////////////93d3f/BwcH////////////////////
+ //93d3f/BgYG/9/f3//f39//4ODg//////+IiIj/DQ0N/9/f3//f39//aGho//////+IiIj/tbW1/9/f
+ 3/9oaGj/Hx8f//////+IiIj/DQ0N/9/f3//f39//aGho//////+IiIj/DQ0N/+jo6P/u7u7/UFBQ////
+ ///////////////////////////////////+/v7//v7+//7+/v/+/v7//v7+//7+/v93d3f/BwcH//7+
+ /v/+/v7//v7+//7+/v+qqqr/X19f/19fX/9fX1//ZGRk//7+/v/+/v7/goKC/19fX/9fX1//3Nzc//7+
+ /v/+/v7/goKC/19fX/9fX1//3Nzc//7+/v/+/v7/goKC/19fX/9fX1//3Nzc//7+/v+qqqr/ZGRk//7+
+ /v/+/v7/h4eH//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v///////v7+/////////////v7+////
+ //93d3f/BwcH///////+/v7////////////+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v//////////////
+ ///////////////////u7u7/4ODg////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+/9XV
+ /v+Pj/7//v7+//7+/v/Y2P7/fHz+/0hI/v9aWv7/bm7+/4GB/v+Wlv7/qan+/729/v/R0f7/5ub+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/mZn+/7Oz/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v///////v7+/9ra///X1///19f+/9fX///X1/7/19f//+rq///+/v7/////////
+ ///+/v7/zs7//xQU/v8MDP7/XV3//zU1/v8JCf7/VVX//5aW/v+Hh/7/c3P//19f/v9LS/7/Nzf//yMj
+ /v8PD/7/AwP//+vr/v/19f7/oaH///39/v/+/v7///////7+/v/+/v7///////7+/v+pqf7/Dg7//xQU
+ /v9VVf7/5eX///7+/v/+/v7///////7+/v///////////xUV//8GBv//Bwf//wcH//8HB///AwP//3R0
+ ///////////////////Jyf//EhL//35+///c3P//JSX//wYG///n5///////////////////////////
+ ///////////////////9/f//IyP//6Cg//9AQP//BAT//1pa///29v///////////////////////8DA
+ //8MDP//trb//+rq//9dXf//ERH//5aW///8/P/////////////+/v7//v7+/w8P/v/Pz/7//v7+//7+
+ /v/+/v7/dXX+/2Zm/v/+/v7//v7+/8TE/v8PD/7/iIj+//7+/v/+/v7/yMj+/wAA/v8+Pv7/7u7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/ZGT+/wUF/v9FRf7/29v+/zg4/v83N/7/5ub+//7+
+ /v/+/v7/09P+/xER/v+dnf7//v7+//7+/v/+/v7/urr+/yMj/v86Ov7/6+v+//7+/v///////v7+/w8P
+ ///V1f///v7+///////+/v7/g4P//1hY///+/v7/vr7//w0N//+Rkf7///////7+/v/+/v7/zc3//xER
+ /v9HR/7/Kyv//9bW/v+xsf7/hob//1tb/v8wMP7/tbX///7+/v/o6P7/LS3//xYW/v/39/7///////f3
+ /v9cXP7/HR3//83N/v/j4/7/HR3//4CA/v/+/v7///////7+/v/+/v7/+fn//zw8/v9UVP7//v7///7+
+ /v///////f3//wwM///V1f//////////////////kZH//0lJ//+4uP//DAz//5mZ////////////////
+ ////////x8f//xgY//+Skv//AQH//0xM//8AAP//UVH//35+//9ERP//b2////////9OTv//DQ3//wEB
+ ///o6P/////////////+/v//hob//w0N//8lJf//ZGT///7+///////////////////+/v//b2///ykp
+ ///y8v/////////////+/v7//f3+/wwM/v/b2/7//v7+//7+/v/+/v7/n5/+/xcX/v8LC/7/o6P+//7+
+ /v/+/v7//v7+//7+/v/+/v7/sbH+/wAA/v8dHf7/srL+//Ly/v8AAP7/6Oj+//7+/v9sbP7/MDD+//7+
+ /v/n5/7/Kyv+/wAA/v+pqf7//v7+//7+/v/+/v7//v7+/6+v/v9WVv7/+vr+//7+/v/+/v7//v7+//7+
+ /v+lpf7/Dg7+/9bW/v/+/v7//v7+//7+/v//////+/v+/wkJ///c3P///v7+///////+/v7/rKz//wYG
+ //+qqv7////////////+/v7///////j4/v+AgP7/Bwf//xkZ/v/x8f7///////7+/v8PD/7/RUX//0lJ
+ /v8YGP7/wcH///7+/v/+/v7/6ur//y4u/v9DQ/7/9/f///7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7//////9LS/v8MDP7/rKz///7+/v/+/v7///////7+/v//////+/v//wgI///g4P//////////
+ ////////w8P//7Ky////////////////////////w8P//yoq//8qKv//goL//ygo////////////////
+ //+2tv//iYn//21t///j4///////////////////2Nj//0BA//8AAP//SEj///X1////////////////
+ ////////////////////////7+///yYm//92dv///v7////////////////////////+/v7/+fn+/wUF
+ /v/h4f7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/v7/7/RET+/wAA/v+Dg/7/rq7+/ysr
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//39/v9zc/7/BQX+/1BQ/v/R0f7/Nzf+/0ND
+ /v/09P7//v7+//7+/v/+/v7//v7+//7+/v/9/f7/T0/+/z4+/v/7+/7//v7+//7+/v/+/v7//v7+//7+
+ /v//////+fn+/wQE///l5f///v7+///////+/v7/paX//19f/v+Bgf7/9fX///7+/v/+/v7//v7//7W1
+ /v8tLf7/CQn//ykp/v/9/f7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/d3f7/SUn//xgY
+ /v/8/P7/rKz//wcH/v/Jyf7///////7+/v/+/v7///////7+/v/+/v7/gYH//xER/v+4uP7///////7+
+ /v/+/v7///////7+/v//////9/f//wEB///n5///////////////////dnb//zIy//81Nf//IyP//7i4
+ ///+/v/////////////7+///e3v//wAA///s7P////////////8cHP//Hx///zAw//92dv//5eX/////
+ ////////kZH//0RE///Pz///Dw///6Sk/////////////////////////////////////////v7//6io
+ //8NDf//kpL///7+///////////////////+/v7/9/f+/wAA/v/q6v7//v7+//7+/v/+/v7/fX3+/11d
+ /v/7+/7/jo7+/wwM/v9oaP7//v7+//7+/v/+/v7/qan+/wAA/v/29v7//v7+//b2/v8AAP7/ra3+/6qq
+ /v8iIv7/ODj+//7+/v/+/v7/R0f+/3Fx/v8bG/7/hYX+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/Hx/7/GBj+/2ho/v/6+v7//v7+//7+/v//////9PT+/wAA///t7f///v7+////
+ ///+/v7/hob//1ZW/v/+/v7//////5mZ/v87O/7///////7+/v/+/v7/paX//wAA/v/9/f7//////+Dg
+ /v8AAP7/nJz//6ys/v8KCv7/y8v///7+/v/z8/7/CAj//w4O/v9mZv7//v7///7+/v/+/v7///////7+
+ /v/+/v7//Pz///7+/v/+/v7///////7+/v/+/v7/4eH//y8v/v9CQv7/7Oz///7+/v//////8fH//wAA
+ ///w8P//////////////////jo7//09P////////7u7//z8///9hYf//////////////////oqL//wkJ
+ /////////////+Tk//9aWv//ODj//xUV//91df////////////+ysv//AAD//0hI///6+v//////////
+ ///////////////////j4///OTn//+Tk//////////////////////////////Ly//9NTf//JSX//9jY
+ ///+/v7/7+/+/wAA/v/z8/7//v7+//7+/v/+/v7/lJT+/0ZG/v/Z2f7/KCj+/0VF/v/t7f7//v7+//7+
+ /v/+/v7/np7+/xER/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/9/f7//v7+//7+/v9RUf7/Kyv+//Hx
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v9MTP7/Fhb+/yMj/v/g4P7//v7+//7+/v/+/v7//v7+//7+
+ /v9xcf7/Gxv+/9zc/v//////6+v+/wAA///29v///v7+///////+/v7/nJz//wUF/v8DA/7/cHD///v7
+ /v/+/v7///////7+/v/+/v7/l5f//xoa/v/+/v7///////7+/v/+/v7///////7+/v/+/v7//f3//2xs
+ /v8XF/7/Cgr//42N/v/9/f7///////7+/v/+/v7//////6Oj/v8UFP7/5+f//2dn/v8eHv7/2tr///7+
+ /v/+/v7//v7//3l5/v8YGP7/19f///7+/v//////6ur//wAA///5+f//////////////////3t7//7u7
+ ///g4P///v7///////////////////7+///V1f//VFT//wQE//80NP//TU3//2dn//+AgP//mZn//7Ky
+ ///Ly///a2v//yMj///g4P//wsL//x8f//9JSf//6Oj/////////////5+f//xMT//+np/////////39
+ //9tbf//Ghr//9XV///+/v//gYH//xQU///T0//////////////+/v7/5eX+/wAA/v/7+/7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/j4/7/i4v+/zEx/v8HB/7/T0/+/6am/v+xsf7/mJj+/35+
+ /v9lZf7/S0v+/zIy/v8YGP7/Jyf+/+Pj/v/+/v7//v7+/+7u/v9UVP7/GRn+/7q6/v/+/v7/VFT+/1BQ
+ /v/+/v7//v7+//7+/v/9/f7/dXX+/xUV/v9ubv7/ERH+/83N/v/+/v7//v7+//7+/v//////5OT+/wAA
+ //++vv//ubn+/7i4//+0tP7/sbH//66u/v+qqv7/lJT//0BA/v8FBf7/QED//5qa/v/t7f7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7/m5v//w0N
+ /v9QUP7/EhL//+bm/v/+/v7///////7+/v/+/v7//v7//319/v8ODv7/yMj///7+/v/+/v7///////7+
+ /v//////4+P//yAg//8mJv//Jib//ysr//8sLP//MDD//zIy//80NP//QED//4uL///i4v//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////9bW//8wMP//oaH///////////////////////////////////7+///h4f//////////
+ ///////////////////+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/5+f7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v///////v7+/////////////v7+///////+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v//////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v///////v7+/////////////v7+///////+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v//////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v///////v7+/////////////v7+////
+ ///+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
+ /v///////////////////////v7+////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////v7+/////////////v7+///////+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+
+ /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v///////////////////////v7+////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////8AAAAAAAD//wAA
+ AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
+ //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA
+ AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
+ //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA
+ AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
+ //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA
+ AAAAAP//AAAAAAAA//8oAAAAQAAAAIAAAAABACAAAAAAAABCAAAAAAAAAAAAAAAAAAAAAAAA////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////8/Pz/9/f3//f39//39/f/9/f3//f39//6+v
+ r///////z8/P/39/f/9/f3//f39//39/f/9/f3//r6+v////////////z8/P/39/f/9/f3//f39//39/
+ f/+vr6///////8/Pz/+vr6/////////////Pz8//f39//6+vr////////////8/Pz/9/f3//f39//39/
+ f/+vr6///////////////////////8/Pz/9/f3//r6+v////////////////////////////////////
+ //////////////////////////////////////////////////////////////////+fn5//AAAA/y8v
+ L/9/f3//f39//39/f/+vr6///////5+fn/8AAAD/Ly8v/39/f/9/f3//f39//6+vr///////z8/P/09P
+ T/8vLy//f39//39/f/9PT0//X19f//////+fn5//X19f////////////n5+f/wAAAP9fX1///////8/P
+ z/9PT0//Ly8v/39/f/9/f3//f39//6+vr/////////////////+fn5//AAAA/19fX///////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////n5+f/wAAAP9fX1////////////////////////////+fn5//AAAA/19fX///////////////
+ /////////////5+fn/8AAAD/X19f////////////n5+f/19fX///////n5+f/y8vL/9/f3//f39//09P
+ T/8AAAD/X19f//////+fn5//AAAA/19fX////////////8/Pz/+vr6//////////////////n5+f/wAA
+ AP9fX1//////////////////////////////////////////////////////////////////////////
+ /////////////////////////////5+fn/8AAAD/X19f////////////////////////////n5+f/wAA
+ AP8vLy//f39//6+vr/////////////////+fn5//AAAA/19fX///////z8/P/09PT/9fX1///////5+f
+ n/8vLy//f39//39/f/9PT0//AAAA/19fX///////n5+f/wAAAP9fX1//////////////////////////
+ /////////////5+fn/8AAAD/X19f////////////////////////////////////////////////////
+ //////////////////////////////////////////////////+fn5//AAAA/19fX///////////////
+ /////////////5+fn/8AAAD/Ly8v/39/f/+vr6//////////////////n5+f/wAAAP9fX1///////8/P
+ z/9/f3//r6+v//////+fn5//X19f////////////n5+f/wAAAP9fX1///////5+fn/8AAAD/X19f////
+ /////////////////////////////8/Pz/9PT0//Ly8v/39/f/+vr6//////////////////////////
+ ////////////////////////////////////////////////////////////////////////n5+f/wAA
+ AP9fX1////////////////////////////+fn5//AAAA/19fX////////////////////////////5+f
+ n/8AAAD/X19f////////////z8/P/6+vr///////n5+f/19fX////////////5+fn/8AAAD/X19f////
+ //+fn5//AAAA/19fX////////////8/Pz/+vr6///////8/Pz/9PT0//Ly8v/6+vr//Pz8//f39//6+v
+ r///////////////////////////////////////////////////////////////////////////////
+ /////////////5+fn/8AAAD/X19f////////////////////////////n5+f/wAAAP8vLy//f39//39/
+ f/9/f3//r6+v///////Pz8//T09P/y8vL/9/f3//f39//39/f/+vr6///////8/Pz/9/f3//f39//39/
+ f/9PT0//Ly8v/6+vr///////z8/P/09PT/8vLy//f39//39/f/9/f3//r6+v//////+fn5//AAAA/19f
+ X////////////5+fn/9fX1//////////////////////////////////////////////////////////
+ //////////////////////////////////+fn5//AAAA/19fX////////////////////////////8/P
+ z/9/f3//f39//39/f/9/f3//f39//6+vr////////////8/Pz/9/f3//f39//39/f/+vr6//////////
+ ////////z8/P/39/f/9/f3//f39//6+vr//////////////////Pz8//f39//39/f/9/f3//r6+v////
+ ////////z8/P/39/f/+vr6/////////////Pz8//r6+v////////////////////////////////////
+ ////////////////////////////////////////////////////////n5+f/wAAAP9fX1//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////8/P
+ z/9/f3//r6+v////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////+0tP//R0f//+/v/////////////9ra//9+fv//IyP//w0N//8gIP//NDT//0hI
+ //9bW///cHD//4OD//+Xl///qqr//76+///S0v//7u7/////////////////////////////////////
+ ////////////////////////////////////////2dn//zQ0//+1tf//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////+srP//BQX//wAA//8uLv//oKD//zg4//8AAP//BAT//0pK
+ //93d///Y2P//09P//86Ov//Jyf//xIS//8BAf//AAD//wAA//8AAP//AAD//0lJ/////////////87O
+ ///w8P//////////////////////////////////////////////////5+f//yIi//8CAv//AAD//1ZW
+ ///m5v/////////////////////////////////////////////Ozv//Hx///x8f//8fH///Hx///x8f
+ //8fH///Hx///x8f//+trf////////////////////////////+lpf//AwP//zU1//+urv//Dg7//wAA
+ //8GBv//k5P//+np////////////////////////////////////////+/v//+np///V1f//wMD//01N
+ //8MDP//+vr//729//8MDP//KSn//9zc////////////////////////////////////////8/P//zQ0
+ //8ODv//zc3//4+P//8MDP//EBD//5iY///9/f//////////////////////////////////w8P//wAA
+ //9HR///X1///19f//9fX///X1///1dX//8AAP//lJT///////////////////////+fn///AgL//zw8
+ ///x8f///////8/P//8YGP//BQX//8PD////////////////////////////////////////////////
+ //////////////////+lpf//AAD//35+//8JCf//LCz//xQU//8TE///v7//////////////////////
+ ////////+vr//0lJ//8FBf//u7v/////////////4OD//0xM//8AAP//Ozv//9TU////////////////
+ /////////////7+///8AAP//v7/////////////////////////z8///AAD//4aG////////////////
+ //+Xl///AQH//0ND///z8///////////////////a2v//wAA//8ICP//rq7/////////////////////
+ ////////////////////////////////////////5eX//wAA//8AAP//Nzf//+3t///d3f//Kyv//wUF
+ //+amv///////////////////v7//2Fh//8AAP//oqL/////////////////////////////qan//xgY
+ //8FBf//np7///////////////////////+/v///AAD//8fH/////////////////////////v7//wMD
+ //93d/////////////+Pj///AAD//0tL///29v///////////////////////2ho//8VFf//NTX//wIC
+ //+Wlv////////Ly///Jyf//np7//3Jy//9HR///Y2P//////////////////5+f//8BAf//Hx////Hx
+ //////////////Hx//9KSv//AAD//3Bw///7+////////35+//8AAP//hob/////////////////////
+ /////////////+/v//8lJf//FRX//+Li////////////////////////urr//wAA///IyP//////////
+ //////////////////8QEP//aWn///////+Hh///AAD//1JS///5+f//////////////////////////
+ //9hYf//Hx////Hx//8gIP//AAD//0hI//8BAf//AAD//wAA//8ICP//ExP//w8P///7+////////5KS
+ //8BAf//CQn//woK///5+f///////////////////Pz//3R0//8AAP//SUn//46O//8AAP//aWn///7+
+ //////////////////////////////39//9PT///AwP//729/////////////////////////////7e3
+ //8AAP//ycn/////////////////////////////HR3//1tb//9/f///AAD//1pa///7+///////////
+ ////////////////////////X1///xcX//89Pf//AAD//0JC//+zs///AAD//3Fx///a2v///Pz//6Sk
+ //8AAP//yMj///////+Skv//AQH//w8P//8AAP//wsL/////////////////////////////np7//wYG
+ //8AAP//Tk7///v7//////////////////////////////////+Fhf//AAD//4qK////////////////
+ //////////////////+3t///AAD//9DQ/////////////////////////////yws//8LC///AAD//2Nj
+ ///8/P//////////////////////////////////+Pj//z8///8AAP//ERH//52d///+/v//8vL//wAA
+ //+Hh/////////7+//+Cgv//AAD//4uL/////////////5qa//8BAf//AAD//4KC////////////////
+ ///////////////////Cwv//TU3///X1//////////////////////////////////+5uf//AgL//1RU
+ ///+/v//////////////////////////////////sbH//wAA///Q0P//////////////////////////
+ //86Ov//AAD//2tr///9/f//////////////////////////////////xMT//yoq//8AAP//HR3//+fn
+ //////////////////8PD///Kyv//319//9UVP//AAD//1BQ///x8f//////////////////oKD//wIC
+ //8tLf//8/P/////////////////////////////////////////////////////////////////////
+ ///g4P//FBT//ykp///x8f///////////////////////////////////////7Cw//8AAP//09P/////
+ ////////////////////////SEj//3V1///+/v/////////////////////////////w8P//aWn//wEB
+ //8bG///Jib//zIy////////////////////////Xl7//yAg//8BAf//AgL//4OD///9/f//////////
+ //////////////7+//9PT///AAD//zo6///x8f//////////////////////////////////////////
+ ///////////////////39///NDT//w0N///W1v//////////////////////////////////////////
+ //+wsP//AAD//9fX/////////////////////////////8PD////////////////////////////////
+ //+vr///Gxv//wEB//9paf//8PD//09P//84OP//////////////////////////////////9/f//+Pj
+ /////////////////////////////8PD//84OP//AAD//yIi//8FBf//Njb//+7u////////////////
+ ////////////////////////////////////////ZGT//wAA//+srP//////////////////////////
+ ////////////////////////qKj//wAA///X1///////////////////////////////////////////
+ ///////////////////9/f//nJz//xsb//8AAP//S0v//9TU//9ISP//Ozv/////////////////////
+ /////////////////////////////////////////Pz//2Bg//8AAP//AQH//46O///6+v//rq7//wcH
+ //8xMf//7Oz/////////////////////////////////////////////nJz//wAA//9ubv//////////
+ /////////////////////////////////////////////6io//8AAP//3Nz/////////////////////
+ ///z8///f3///39///+Wlv//+fn////////////////////////19f//hYX//w4O//8DA///Dg7//z8/
+ ///////////////////////////////////////////////////////////////////o6P//YGD//wEB
+ //8gIP//+vr///////9ZWf//AAD//5+f/////////////////////////////////////////////729
+ //8REf//HBz//83N//////////////////////////////////////////////////+mpv//AAD//9/f
+ ////////////////////////8PD//wAA//8AAP//AAD//yws///ExP//////////////////////////
+ ///q6v//bm7//wYG//8JCf//6en//////////////////3Z2//93d///h4f//5iY///b2///////////
+ //////////////////84OP//Nzf///////+Xl///AAD//29v////////////////////////////////
+ ////////////////////////2dn//yUl//8KCv//rKz/////////////////////////////////////
+ ////////n5///wAA///f3/////////////////////////f3//8AAP//g4P//7Oz//8dHf//AQH//2ho
+ ///v7/////////////////////////////87O///AAD//+vr//////////////////8HB///AgL//wAA
+ //8AAP//AwP//1ZW///Q0P/////////////u7v//AwP//4CA//+0tP//AwP//1BQ///8/P//////////
+ ///////////////////////////////////////////////////t7f//QUH//wEB//+EhP///v7/////
+ /////////////////////////////5+f//8AAP//5ub////////////////////////+/v//AAD//3t7
+ ////////8vL//21t//8CAv//GRn//+fn////////////////////////ODj//wAA///09P//////////
+ ///w8P//AAD//4yM///4+P//3t7//z09//8AAP//qan/////////////p6f//wAA//+Xl///Cwv//zc3
+ ///19f////////////////////////////////////////////////////////////////////////n5
+ //9kZP//AAD//1pa///39/////////////////////////////+cnP//AAD//+jo////////////////
+ /////////////wcH//90dP//////////////////enr//wAA///z8////////////////////////zMz
+ //8AAP///Pz/////////////2tr//wAA//9/f///6en//9zc//8LC///T0///////////////////11d
+ //8DA///Fhb//yIi///p6f//////////////////////////////////////////////////////////
+ /////////////////////////v7//4yM//8CAv//Nzf//+bm////////////////////////l5f//wAA
+ ///o6P////////////////////////////8PD///bW3//////////////v7//1VV//8XF///////////
+ //////////////////8xMf//Bgb//////////////////8TE//8AAP//AAD//wAA//8DA///Dw///+Tk
+ //////////////z8//8VFf//AAD//xMT///Y2P//////////////////////////////////////////
+ //+mpv//1NT/////////////////////////////////////////////sbH//wwM//8cHP//zs7/////
+ /////////////5eX//8AAP//8PD/////////////////////////////Fhb//2Rk////////+Pj//2Bg
+ //8AAP//YGD/////////////////////////////Kir//xAQ///////////////////5+f//1NT//7Gx
+ //+Ojv//a2v//6io///////////////////IyP//AAD//wgI///Cwv//////////////////////////
+ ///////////////////i4v//Dg7//xQU///Ozv//////////////////////////////////////////
+ ///Ozv//CQn//woK///Y2P////////////+Tk///AAD///Dw/////////////////////////////x4e
+ //9cXP//6Oj//zo6//8AAP//e3v///39/////////////////////////////ygo//8ZGf//////////
+ ///////////////////////////////////////////////////9/f//VVX//wAA//+goP//////////
+ ///////////////////////////////////+/v//SUn//wkJ//8eHv//EBD//8jI////////////////
+ ///////////////////+/v//bm7//wAA//91df//////////////////kJD//wAA///x8f//////////
+ //////////////////8mJv//CAj//wUF//8KCv//qKj/////////////////////////////////////
+ //8gIP//IiL////////////////////////////////////////////////////////9/f//ZWX//wAA
+ //8BAf//Kyv//9LS////////////////////////////////////////oaH//wAA//+MjP//4eH//yMj
+ //8NDf//wMD/////////////////////////////dnb//wAA//9tbf///v7//////////////////5CQ
+ //8AAP//9/f/////////////////////////////Wlr//1ZW//95ef//0ND/////////////////////
+ ////////////////////////Hh7//xUV//+Wlv//sLD//8nJ///i4v//+fn/////////////////////
+ ///9/f//ZWX//wAA//+EhP//ubn//xgY//8ICP//lpb///7+////////////////////////5+f//xER
+ //84OP///Pz////////k5P//Jyf//woK//+6uv//////////////////f3///wAA//9lZf///v7/////
+ //////////////////+Kiv//AAD///f3////////////////////////////////////////////////
+ /////////////////////////////9zc//+Cgv//KCj//wAA//8AAP//AAD//wAA//8AAP//AAD//wEB
+ //8VFf//Li7//0hI//9hYf//TU3//wAA//+IiP/////////////p6f//Skr//wAA//9RUf//7e3/////
+ /////////////1FR//8HB///1tb//////////////////+jo//8sLP//Bwf//7Oz////////hob//wAA
+ //9eXv///Pz/////////////////////////////iIj//wAA///6+v//////////////////////////
+ ///////////////////////////////////o6P//kpL//zc3//8AAP//AQH//zw8//+Wlv//6+v///Hx
+ ///X1///vb3//6Sk//+Li///cnL//1hY//8+Pv//JSX//wwM//+Li/////////////////////////7+
+ //+Pj///Bwf//x0d///Cwv///////6mp//8AAP//hob/////////////////////////////7Oz//zEx
+ //8FBf//Xl7//wAA//9WVv//+/v//////////////////////////////////4iI//8AAP////////n5
+ ///39///9fX///Dw///w8P//6en//+jo///k5P//3d3//6Gh//9HR///AwP//wAA//8tLf//h4f//+Dg
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////8/P//8oKP//AwP//3l5//8WFv//NDT///v7////////////////
+ ///////////////////u7v//Njb//wAA//9PT///+fn/////////////////////////////////////
+ //+AgP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//ICD//3l5
+ ///T0///////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////9PT//2Rk//8AAP//Bgb//9HR
+ //////////////////////////////////////////////Hx//94eP//+Pj/////////////////////
+ ////////////////////////v7///4CA//+IiP//iIj//4mJ//+QkP//kJD//5KS//+Xl///l5f//5qa
+ //+fn///xcX///39////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////qqr//42N////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////wAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAgAAAAAAAACAEAAAAAAAAA
+ AAAAAAAAAAAAAP//////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////z8/P/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/7+/v/////////////////8/Pz//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP+/v7////////////////////////////8/Pz//AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/v7+//////////////////z8/P/8AAAD/v7+/////////////////////
+ ////////Pz8//wAAAP8AAAD/AAAA/7+/v////////////////////////////z8/P/8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/v7+//////////////////////////////////////////////////z8/
+ P/8AAAD/AAAA/wAAAP+/v7//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////Pz8//wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/v7+//////////////////z8/
+ P/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/7+/v///////////////
+ /////////////z8/P/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+/v7//////////
+ ////////Pz8//wAAAP+/v7////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+/////
+ ////////////////////////Pz8//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+/v7//////////
+ ////////////////////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/v///////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+/////////////////////
+ ////////////////////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/v///////////////
+ /////////////////////////////////////////////z8/P/8AAAD/AAAA/wAAAP+/v7//////////
+ //////////////////8/Pz//AAAA/7+/v/////////////////8/Pz//AAAA/7+/v///////////////
+ /////////////z8/P/8AAAD/AAAA/wAAAP+/v7//////////////////Pz8//wAAAP8AAAD/AAAA/7+/
+ v////////////////////////////z8/P/8AAAD/v7+/////////////////////////////////////
+ //8/Pz//AAAA/wAAAP8AAAD/v7+/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////z8/
+ P/8AAAD/AAAA/wAAAP+/v7//////////////////////////////////////////////////////////
+ //8/Pz//AAAA/wAAAP8AAAD/v7+/////////////////////////////////////////////////////
+ ////////Pz8//wAAAP8AAAD/AAAA/7+/v////////////////////////////z8/P/8AAAD/v7+/////
+ /////////////z8/P/8AAAD/v7+/////////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/
+ v/////////////////8/Pz//AAAA/wAAAP8AAAD/v7+/////////////////////////////Pz8//wAA
+ AP+/v7///////////////////////////////////////z8/P/8AAAD/AAAA/wAAAP+/v7//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/v///////////////
+ /////////////////////////////////////////////z8/P/8AAAD/AAAA/wAAAP+/v7//////////
+ //////////////////////////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+/////
+ ////////////////////////Pz8//wAAAP+/v7//////////////////Pz8//wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/v7+//////////////////z8/P/8AAAD/AAAA/wAA
+ AP+/v7//////////////////////////////////////////////////////////////////////////
+ ////////Pz8//wAAAP8AAAD/AAAA/7+/v///////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //8/Pz//AAAA/wAAAP8AAAD/v7+/////////////////////////////////////////////////////
+ ////////Pz8//wAAAP8AAAD/AAAA/7+/v///////////////////////////////////////////////
+ /////////////z8/P/8AAAD/AAAA/wAAAP+/v7////////////////////////////8/Pz//AAAA/7+/
+ v/////////////////8/Pz//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP+/v7//////////////////Pz8//wAAAP8AAAD/AAAA/7+/v///////////////////////////////
+ //////////////////////////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////z8/P/8AAAD/AAAA/wAAAP+/v7//////////
+ //////////////////////////////////////////////////8/Pz//AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/7+/v///////////////////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/
+ v/////////////////8/Pz//AAAA/wAAAP8AAAD/v7+//////////////////z8/P/8AAAD/v7+/////
+ ////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/v/////////////////8/Pz//AAAA/wAA
+ AP8AAAD/v7+/////////////////////////////////////////////////////////////////////
+ /////////////z8/P/8AAAD/AAAA/wAAAP+/v7//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////Pz8//wAAAP8AAAD/AAAA/7+/v///////////////////////////////////////////////
+ /////////////z8/P/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/v7+/////////////////////
+ //////////////////8/Pz//AAAA/wAAAP8AAAD/v7+//////////////////z8/P/8AAAD/AAAA/wAA
+ AP+/v7//////////////////Pz8//wAAAP+/v7////////////////////////////8/Pz//AAAA/wAA
+ AP8AAAD/v7+//////////////////z8/P/8AAAD/AAAA/wAAAP+/v7//////////////////////////
+ ////////////////////////////////////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/
+ v///////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+/////
+ ////////////////////////////////////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/
+ v////////////////////////////////////////////////////////////z8/P/8AAAD/AAAA/wAA
+ AP+/v7////////////////////////////////////////////////////////////8/Pz//AAAA/7+/
+ v////////////////////////////z8/P/8AAAD/AAAA/wAAAP+/v7//////////////////Pz8//wAA
+ AP8AAAD/AAAA/7+/v///////////////////////////////////////////////////////////////
+ ////////Pz8//wAAAP8AAAD/AAAA/7+/v///////Pz8//wAAAP+/v7//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////z8/P/8AAAD/AAAA/wAAAP+/v7//////////////////////////////////////////
+ //////////////////8/Pz//AAAA/wAAAP8AAAD/v7+/////////////////////////////////////
+ ////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/v///////////////////////////////
+ /////////////////////////////z8/P/8AAAD/v7+/////////////////////////////Pz8//wAA
+ AP8AAAD/AAAA/7+/v/////////////////8/Pz//AAAA/wAAAP8AAAD/v7+/////////////////////
+ //////////////////////////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+/////
+ //8/Pz//AAAA/7+/v///////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/
+ v////////////////////////////////////////////////////////////z8/P/8AAAD/AAAA/wAA
+ AP+/v7////////////////////////////////////////////////////////////8/Pz//AAAA/wAA
+ AP8AAAD/v7+/////////////////////////////Pz8//wAAAP+/v7//////////////////Pz8//wAA
+ AP+/v7////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+//////////////////z8/
+ P/8AAAD/AAAA/wAAAP+/v7////////////////////////////8/Pz//AAAA/7+/v///////////////
+ //8/Pz//AAAA/wAAAP8AAAD/v7+/////////////////////////////Pz8//wAAAP+/v7//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////8/Pz//AAAA/wAAAP8AAAD/v7+/////////////////////////////////////
+ ////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/v///////////////////////////////
+ /////////////////////////////z8/P/8AAAD/AAAA/wAAAP+/v7//////////////////////////
+ //8/Pz//AAAA/7+/v/////////////////8/Pz//AAAA/7+/v////////////////////////////z8/
+ P/8AAAD/AAAA/wAAAP+/v7//////////////////Pz8//wAAAP8AAAD/AAAA/7+/v///////////////
+ /////////////z8/P/8AAAD/v7+//////////////////z8/P/8AAAD/AAAA/wAAAP+/v7//////////
+ //////////////////8/Pz//AAAA/7+/v///////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////z8/P/8AAAD/AAAA/wAA
+ AP+/v7////////////////////////////////////////////////////////////8/Pz//AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+/v7//////////////////////////
+ //8/Pz//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/7+/v///////////////////////////////
+ ////////Pz8//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+/v7//////////////////////////
+ /////////////z8/P/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/v7+/////////////////////
+ ////////Pz8//wAAAP8AAAD/AAAA/7+/v////////////////////////////z8/P/8AAAD/v7+/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/v///////////////////////////////
+ /////////////////////////////z8/P/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/7+/v////////////////////////////z8/P/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/v7+///////////////////////////////////////8/Pz//AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/7+/v///////////////////////////////////////Pz8//wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP+/v7////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+/////
+ ////////////////////////Pz8//wAAAP+/v7//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////8/Pz//AAAA/wAA
+ AP8AAAD/v7+/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////z8/P/8AAAD/AAAA/wAAAP+/v7//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////Pz8//wAA
+ AP8AAAD/AAAA/7+/v///////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///c3P//Ojr//9PT///////////////////////////////////////////////////Q0P//dHT//xoa
+ //8QEP//JSX//zc3//9KSv//Xl7//3Nz//+Ghv//mpr//6ys///AwP//19f//+np///7+///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////z8//9YWP//eHj///b2////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////2dn//x0d//8AAP//EBD//8LC////////////////
+ /////////////+Pj//+Jif//Kyv//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8SEv//Jib//zg4//9LS///YGD//3R0//+Hh///m5v//6+v
+ ///Dw///+Pj/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////a2v//wAA//8AAP//IyP//7u7////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////9LS
+ //8VFf//AAD//wAA//8AAP//CAj//6ys////////8fH//56e//9CQv//AgL//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+0tP//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////4iI//8AAP//AAD//wAA//8AAP//AAD//11d
+ ///p6f//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////Nzf//FRX//wAA//8AAP//AAD//wAA//8AAP//AwP//4aG
+ //8JCf//AAD//wAA//8AAP//AAD//wAA//8REf//Zmb//8HB///29v//5+f//9PT//+7u///qan//5aW
+ //9/f///bGz//1hY//9ERP//Li7//xwc//8HB///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//3Fx////////////////////////7+///0xM///ExP//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //+iov//AQH//wAA//8AAP//Cgr//wAA//8AAP//AAD//xMT//+fn////f3/////////////////////
+ ////////////////////////////////////////////////////////////////////////rKz//z8/
+ //8/P///Pz///z8///8/P///Pz///z8///8/P///Pz///z8///8/P///Pz///z8///8/P///Pz///z8/
+ //95ef//////////////////////////////////////////////////////////////////yMj//w8P
+ //8AAP//AAD//woK//+lpf//KSn//wAA//8AAP//AAD//wAA//8AAP//AAD//wgI//9VVf//sLD///j4
+ ////////////////////////////////////////////////////////////////////////////////
+ ///y8v//3d3//8nJ//+1tf//oqL//4uL//94eP//TEz//wAA//8AAP//MDD//////////////////+rq
+ //8wMP//AAD//wYG//+goP//////////////////////////////////////////////////////////
+ ////////////////////////////////////////u7v//wYG//8AAP//AAD//1BQ///w8P//cHD//wMD
+ //8AAP//AAD//wAA//9AQP//2dn/////////////////////////////////////////////////////
+ //////////////////////////////////+Rkf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//z4+////////////////////////////////
+ /////////////////////////////8HB//8PD///AAD//wAA//8ODv//vr7////////s7P//OTn//wAA
+ //8AAP//AAD//wAA//8aGv//8fH/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///o6P//AAD//wAA//8CAv//7u7////////k5P//Kir//wAA//8AAP//AAD//wAA//93d////Pz/////
+ /////////////////////////////////////////////////////////////////////////////8/P
+ //8PD///AAD//wAA//85Of//9fX/////////////y8v//zAw//8AAP//AAD//wAA//8HB///gYH///j4
+ /////////////////////////////////////////////////////////////////////////////5GR
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//MDD///////////////////////////////////////////////////////++vv//Cgr//wAA
+ //8AAP//Dw///8jI///////////////////19f//TEz//wAA//8AAP//AAD//xYW///y8v//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////8qKv//AAD//wAA//+wsP//3d3//yQk
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//9OTv//8vL/////////////////////////////////////
+ ///////////////////////////////////h4f//Ghr//wAA//8AAP//JSX//+rq////////////////
+ ////////+/v//4qK//8KCv//AAD//wAA//8AAP//KSn//8HB////////////////////////////////
+ ////////////////////////////////////////gID//wAA//8AAP//X1///7+///+/v///v7///7+/
+ //+/v///v7///7+///+/v///v7///7+///+fn///AAD//wAA//8jI///////////////////////////
+ ////////////////////////tbX//woK//8AAP//AAD//xUV///Nzf//////////////////////////
+ ///8/P//YmL//wAA//8AAP//AAD//zMz///o6P//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////2xs//8AAP//AAD//01N//8dHf//AAD//wAA//8GBv//qan//1FR//8AAP//AAD//wAA
+ //8tLf//4OD/////////////////////////////////////////////////////////////7e3//ykp
+ //8AAP//AAD//xYW///d3f///////////////////////////////////////93d//9HR///AAD//wAA
+ //8AAP//AQH//2Vl///t7f//////////////////////////////////////////////////////////
+ //9/f///AAD//wAA//9/f////////////////////////////////////////////////////////+Hh
+ //8AAP//AAD//xQU/////////////////////////////////////////////7Oz//8GBv//AAD//wAA
+ //8WFv//0tL////////////////////////////////////////d3f//AAD//wAA//8AAP//AAD//yMj
+ ///b2///////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////rKz//wAA//8AAP//AAD//wAA
+ //8AAP//Cgr//7q6/////////f3//3t7//8BAf//AAD//wAA//8WFv//xMT/////////////////////
+ //////////////////////////////b2//88PP//AAD//wAA//8KCv//y8v/////////////////////
+ //////////////////////////////////+lpf//FRX//wAA//8AAP//AAD//xcX//+mpv//////////
+ /////////////////////////////////////////////39///8AAP//AAD//39/////////////////
+ ////////////////////////////////////////8PD//wAA//8AAP//BQX/////////////////////
+ //////////////////+kpP//Bgb//wAA//8AAP//HR3//9zc////////////////////////////////
+ /////////////9HR//8AAP//AAD//wAA//8AAP//AAD//xUV///Kyv//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////r6///AQH//wAA//8AAP//AAD//w8P///Dw////////////////////////6Sk
+ //8ICP//AAD//wAA//8GBv//oKD////////////////////////////////////////8/P//U1P//wAA
+ //8AAP//AwP//7a2////////////////////////////////////////////////////////////////
+ ///s7P//YmL//wAA//8AAP//AAD//wQE///R0f//////////////////////////////////////////
+ ////////f3///wAA//8AAP//kJD/////////////////////////////////////////////////////
+ ///8/P//AAD//wAA//8AAP//9fX/////////////////////////////pKT//wMD//8AAP//AAD//yQk
+ ///c3P//////////////////////////////////////////////////0dH//wAA//8AAP//FBT//wYG
+ //8AAP//AAD//woK//+2tv//////////////////////////////////////////////////9/f//9DQ
+ //+lpf//eXn//05O///Dw////////////////////////////////////////76+//8EBP//AAD//wAA
+ //8VFf//ycn//////////////////////////////////8fH//8YGP//AAD//wAA//8AAP//d3f///z8
+ /////////////////////////////25u//8AAP//AAD//wAA//+amv//////////////////////////
+ //////////////////////////////////////////////////+Pj///AAD//wAA//8AAP//jo7/////
+ //////////////////////////////////////////////////9/f///AAD//wAA//+Rkf//////////
+ //////////////////////////////////////////////////8NDf//AAD//wAA///o6P//////////
+ /////////////5aW//8CAv//AAD//wAA//8kJP//5OT/////////////////////////////////////
+ ///////////////////R0f//AAD//wAA//8/P///wMD//w8P//8AAP//AAD//wQE//+dnf//////////
+ ///6+v//09P//6io//9+fv//U1P//ycn//8DA///AAD//wAA//8AAP//AAD//3l5////////////////
+ //////////////////+0tP//Cgr//wAA//8AAP//AAD//2dn////////////////////////////////
+ /////////////+Li//8xMf//AAD//wAA//8AAP//Tk7///Ly//////////////////+MjP//AAD//wAA
+ //8AAP//f3//////////////////////////////////////////////////////////////////////
+ ////////wsL//wUF//8AAP//AAD//1ZW///9/f//////////////////////////////////////////
+ /////////////3p6//8AAP//AAD//5GR////////////////////////////////////////////////
+ /////////////xsb//8AAP//AAD//9vb//////////////////+Vlf//AQH//wAA//8AAP//LS3//+jo
+ /////////////////////////////////////////////////////////////8bG//8AAP//AAD//z8/
+ ////////z8///xkZ//8AAP//AAD//wEB//+EhP//f3///wUF//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//OTn/////////////////////////////qqr//wYG//8AAP//AAD//wAA
+ //8AAP//KSn///////////////////////////////////////////////////T0//9TU///AAD//wAA
+ //8AAP//LS3//+Dg////////pqb//wEB//8AAP//AAD//2Fh///9/f//////////////////////////
+ /////////////////////////////////////////////+bm//8YGP//AAD//wAA//8rK///8/P/////
+ ////////////////////////////////////////////////////////cHD//wAA//8AAP//kZH/////
+ ////////////////////////////////////////////////////////KCj//wAA//8AAP//zMz/////
+ ////////iYn//wAA//8AAP//AAD//zEx///q6v//////////////////////////////////////////
+ ////////////////////////v7///wAA//8AAP//Pz/////////5+f//Z2f//wAA//8AAP//AAD//wAA
+ //8cHP//AAD//wAA//8AAP//AAD//wAA//8AAP//AQH//yIi//9MTP//AAD//wAA//8DA///8PD/////
+ /////////////5+f//8DA///AAD//wAA//8iIv//AgL//wAA//8AAP//6Oj/////////////////////
+ //////////////////////////////39//9+fv//AQH//wAA//8AAP//Fhb//4yM//8GBv//AAD//wAA
+ //9ISP//+vr/////////////////////////////////////////////////////////////////////
+ ///6+v//PDz//wAA//8AAP//Dg7//9jY////////////////////////////////////////////////
+ //////////////////9wcP//AAD//wAA//+Rkf//////////////////////////////////////////
+ //////////////////81Nf//AAD//wAA//+9vf///////4WF//8AAP//AAD//wAA//83N///7+//////
+ //////////////////////////////////////////////////////////////////+/v///AAD//wAA
+ //9LS///xsb//ysr//8AAP//AAD//wAA//8EBP//eXn//5qa//8AAP//AAD//xwc//9ycv//oaH//8vL
+ ///z8/////////////8pKf//AAD//wAA//+zs///////////////////pKT//wMD//8AAP//AAD//yQk
+ //8ZGf//AAD//wAA//+lpf//////////////////////////////////////////////////////////
+ //+np///CQn//wAA//8AAP//AAD//wAA//8AAP//MjL///Ly////////////////////////////////
+ /////////////////////////////////////////////29v//8AAP//AAD//wEB//+vr///////////
+ /////////////////////////////////////////////////////////////3Bw//8AAP//AAD//5eX
+ /////////////////////////////////////////////////////////////0FB//8AAP//AAD//7Cw
+ //95ef//AAD//wAA//8AAP//Q0P//+/v////////////////////////////////////////////////
+ /////////////////////////////7+///8AAP//AAD//xAQ//8CAv//AAD//wAA//8AAP//NDT//8/P
+ ////////urr//wAA//8AAP//OTn//////////////////////////////////2xs//8AAP//AAD//3Bw
+ ////////////////////////pKT//wYG//8AAP//AAD//wAA//8AAP//AAD//2Rk////////////////
+ ///////////////////////////////////////////////////Jyf//GRn//wAA//8AAP//AAD//yAg
+ ///n5///////////////////////////////////////////////////////////////////////////
+ //+mpv//AAD//wAA//8AAP//eXn/////////////////////////////////////////////////////
+ ////////////////////////cHD//wAA//8AAP//oaH/////////////////////////////////////
+ ////////////////////////UVH//wAA//8AAP//Ly///wAA//8AAP//AAD//0RE///19f//////////
+ ////////////////////////////////////////////////////////////////////////sbH//wAA
+ //8AAP//AAD//wAA//8AAP//Cgr//42N///8/P/////////////Z2f//AAD//wAA//8fH///////////
+ ////////////////////////iIj//wAA//8AAP//Ly//////////////////////////////s7P//wYG
+ //8AAP//AAD//wAA//8AAP//JCT/////////////////////////////////////////////////////
+ ///////////////////k5P//MjL//wAA//8TE///19f/////////////////////////////////////
+ ////////////////////////////////////////0tL//wsL//8AAP//AAD//0VF///8/P//////////
+ //////////////////////////////////////////////////////////////////9wcP//AAD//wAA
+ //+hof////////////////////////////////////////////////////////////9iYv//AAD//wAA
+ //8AAP//AAD//wAA//9PT///+fn/////////////////////////////////////////////////////
+ /////////////////////////////+bm//9LS///AAD//wAA//8AAP//AAD//0VF///e3v//////////
+ //////////////T0//8AAP//AAD//wQE///8/P///////////////////f3//4CA//8CAv//AAD//wAA
+ //8ICP//9vb/////////////////////////////s7P//wYG//8AAP//AAD//wAA//8AAP//5OT/////
+ ///////////////////////////////////////////////////////////////////19f//XV3//8TE
+ /////////////////////////////////////////////////////////////////////////////+/v
+ //8lJf//AAD//wAA//8gIP//6+v/////////////////////////////////////////////////////
+ /////////////////////////////2dn//8AAP//AAD//6Gh////////////////////////////////
+ /////////////////////////////25u//8AAP//AAD//wAA//8AAP//Vlb///n5////////////////
+ //////////////////////////////////////////////////////////////39//+Zmf//EBD//wAA
+ //8AAP//AAD//xIS//+hof///f3//////////////////////////////////xER//8AAP//AAD//6+v
+ ///m5v///////+/v//9OTv//AAD//wAA//8AAP//HBz//8jI////////////////////////////////
+ ////////urr//woK//8AAP//AAD//wAA//+fn///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////9/f//UFD//wAA//8AAP//Bwf//8rK////////////////
+ ////////////////////////////////////////////////////////////////////////YmL//wAA
+ //8AAP//oaH/////////////////////////////////////////////////////////////enr//wAA
+ //8AAP//AAD//1tb///8/P//////////////////////////////////////////////////////////
+ ///////////////////Y2P//Pj7//wAA//8AAP//AAD//wAA//8AAP//YmL/////////////////////
+ ////////////////////////LCz//wAA//8AAP//AAD//wAA//8PD///FRX//wAA//8AAP//AAD//zw8
+ ///n5///////////////////////////////////////////////////vr7//woK//8AAP//AAD//xUV
+ ///S0v//////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////4aG
+ //8AAP//AAD//wAA//+cnP//////////////////////////////////////////////////////////
+ //////////////////////////////////9iYv//AAD//wAA//+hof//////////////////////////
+ //////////////////////////////////+Jif//AAD//wAA//9paf///Pz/////////////////////
+ ///////////////////////////////////////////////////5+f//goL//wcH//8AAP//AAD//wAA
+ //8EBP//AAD//wAA//9iYv////////////////////////////////////////////9ISP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//9tbf//+vr/////////////////////////////////////
+ ////////////////////////p6f//wAA//8AAP//AAD//xMT///IyP//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////+7u///AwP//wAA//8AAP//ZGT/////////////////////
+ /////////////////////////////////////////////////////////////////////////////2Ji
+ //8AAP//AAD//6ys/////////////////////////////////////////////////////////////5iY
+ //8AAP//bm7///39////////////////////////////////////////////////////////////////
+ ////////xsb//ysr//8AAP//AAD//wAA//8CAv//bW3//5WV//8AAP//AAD//2lp////////////////
+ /////////////////////////////729//91df//UlL//y0t//8HB///AAD//wAA//8ICP//oKD/////
+ //////////////////////////////////////////////////////////////z8//+UlP//AAD//wAA
+ //8AAP//AAD//w8P///IyP//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////4eH//xMT
+ //8AAP//AAD//zU1///4+P//////////////////////////////////////////////////////////
+ ////////////////////////////////////////YmL//wAA//8AAP//sLD/////////////////////
+ ////////////////////////////////////////paX//3l5////////////////////////////////
+ ////////////////////////////////////////8fH//2tr//8CAv//AAD//wAA//8AAP//Kyv//8bG
+ ////////oaH//wAA//8AAP//cHD/////////////////////////////////////////////////////
+ //////////////z8///h4f//vLz//9LS////////////////////////////////////////////////
+ //////////////////+1tf//LS3//wAA//8AAP//AAD//wAA//8AAP//AAD//w8P//++vv//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////f3//81Nf//AAD//wAA//8UFP//4eH/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //9iYv//AAD//wAA//+wsP//////////////////////////////////////////////////////////
+ ///w8P///////////////////////////////////////////////////////////////////////7Gx
+ //8cHP//AAD//wAA//8AAP//BQX//4GB///4+P////////////+amv//AAD//wAA//9wcP//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////Nzf//QkL//wAA//8AAP//AAD//wAA
+ //8QEP//enr//xUV//8AAP//AAD//woK//++vv//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////ZGT//wAA
+ //8AAP//AwP//7y8////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////1FR//8AAP//AAD//7Cw////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////5+f//gID//wwM//8AAP//AAD//wAA//8AAP//UlL//9nZ
+ /////////////5GR//8AAP//AAD//3Bw////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///f3///XFz//wEB//8AAP//AAD//wAA//8JCf//dXX//+3t////////0tL//xUV//8AAP//AAD//woK
+ //+2tv//////////////////////////////////////////////////////////////////////////
+ /////////////////////////////52d//8AAP//AAD//wAA//+Hh///////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////UVH//wAA//8AAP//sLD/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////5+f//2lp//8EBP//AAD//wAA//8AAP//BAT//2pq///o6P//kZH//wAA//8AAP//fX3/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////9vb//0dH//8AAP//AAD//wAA//8AAP//BQX//7u7
+ ////////////////////////09P//x0d//8AAP//AAD//wYG//+zs///////////////////////////
+ ///////////////////////////////////////////////////////////////////Ly///CAj//wAA
+ //8AAP//NDT///39////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////9RUf//AAD//wAA//+ysv//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////9nZ//9SUv//AAD//wAA
+ //8AAP//AAD//w0N//85Of//AAD//wAA//9/f///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////f3//6Wl//8aGv//AAD//wAA//8AAP//BQX//3V1///29v//////////////////29v//wkJ
+ //8AAP//AAD//wkJ///m5v//////////////////////////////////////////////////////////
+ /////////////////////////////9/f//8pKf//AAD//wAA//8AAP//cHD///z8////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////1FR//8AAP//AAD//7+/////////////////////////////////////////////////
+ ////////0dH//wAA//8AAP//AAD//wAA//8AAP//Wlr//+np////////////////////////////////
+ ///////////////////////////////////Fxf//Ozv//wAA//8AAP//AAD//wAA//8AAP//AAD//39/
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////Ly//91df//BQX//wAA
+ //8AAP//CAj///X1//////////////////+Bgf//AAD//wAA//8AAP//j4//////////////////////
+ /////////////////////////////////////////////////////////////////////////////+/v
+ //9HR///AAD//wAA//8AAP//Skr//+/v////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////UVH//wAA//8AAP//v7//////
+ ///////////////////////////////////////////////////g4P//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//EhL//56e///9/f//////////////////////////////////////////////////////////
+ ////////rq7//ycn//8AAP//AAD//wAA//8AAP//Jib//9/f////////////////////////////////
+ ////////09P//9bW///n5///9fX/////////////////////////////////////////////////////
+ //////////////////////////////////+Ojv//AAD//wAA//9KSv//////////////////np7//wEB
+ //8AAP//AAD//25u////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////z8//9qav//AAD//wAA//8AAP//KSn//93d
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////9KSv//AAD//wAA//+/v///////////////////////////////////////////
+ /////////////+Hh//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//z8////X1///////////
+ ////////////////////////////////////////////////////////+/v//5eX//8YGP//AAD//wAA
+ //8AAP//ycn///////////////////////////////////////8vL///AAD//wAA//8AAP//Bwf//xkZ
+ //8pKf//OTn//4OD///u7v///////////////////////////////////////////////////////1NT
+ //8AAP//AAD//5KS/////////////7q6//8GBv//AAD//wAA//9RUf///Pz/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////+UlP//AwP//wAA//8AAP//FBT//8LC////////////////////////////////
+ /////////////////////////////////////////////////////////////z8///8AAP//AAD//7+/
+ ////////////////////////////////////////////////////////7u7//wAA//8AAP//ERH/////
+ //+4uP//ICD//wAA//8AAP//AAD//wcH//+AgP//+Pj/////////////////////////////////////
+ /////////////////////////////35+//8AAP//AAD//wAA///R0f//////////////////////////
+ /////////////xsb//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wwM//9ycv//4uL/////
+ ///////////////////////////////////6+v//Dg7//wAA//8AAP//3Nz////////Q0P//Dw///wAA
+ //8AAP//Njb///X1////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////+3t///Dw///wAA
+ //8AAP//Bgb//52d////////////////////////////////////////////////////////////////
+ ////////////////////////Pz///wAA//8AAP//v7//////////////////////////////////////
+ ///////////////////w8P//AAD//wAA//8AAP/////////////09P//cnL//wMD//8AAP//AAD//wAA
+ //8oKP//wMD/////////////////////////////////////////////////////////////cHD//wAA
+ //8AAP//AAD//97e////////////////////////////////////////BAT//wAA//8AAP//CAj//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8GBv//YWH//+Li/////////////////////////////7+/
+ //8AAP//AAD//yYm////////5OT//x0d//8AAP//AAD//yIi///p6f//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////U1P//IiL//wAA//8AAP//AAD//3Nz///8/P//////////
+ //////////////////////////////////////////////////////////////////8/P///AAD//wAA
+ ///Jyf////////////////////////////////////////////////////////z8//8AAP//AAD//wAA
+ ////////////////////////zMz//zEx//8AAP//AAD//wAA//8BAf//ZGT//+7u////////////////
+ //////////////////////////////////9wcP//AAD//wAA//8AAP//4uL/////////////////////
+ /////////////+vr//8AAP//AAD//wwM////////+Pj//+np///b2///n5///ykp//8AAP//AAD//wAA
+ //8VFf//6+v/////////////////////////////dHT//wAA//8AAP//cHD//+/v//8vL///AAD//wAA
+ //8SEv//2dn/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///p6f//Ozv//wAA//8AAP//AAD//0xM///x8f//////////////////////////////////////////
+ /////////////////////////////z8///8AAP//AAD//9HR////////////////////////////////
+ /////////////////////////////wAA//8AAP//AAD///Dw////////////////////////+/v//4mJ
+ //8KCv//AAD//wAA//8AAP//srL//////////////////////////////////////////////////3Bw
+ //8AAP//AAD//wAA///w8P//////////////////////////////////2Nj//wAA//8AAP//JSX/////
+ ////////////////////////ysr//wEB//8AAP//AAD//6en////////////////////////////////
+ //8qKv//AAD//wAA//+0tP//R0f//wAA//8AAP//Bwf//8PD////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////4+P//XFz//wAA//8AAP//AAD//ysr
+ ///f3///////////////////////////////////////////////////////////////////Pz///wAA
+ //8AAP//0dH/////////////////////////////////////////////////////////////DQ3//wAA
+ //8AAP//8PD//////////////////////////////////9zc//8ODv//AAD//wAA///X1///////////
+ ////////////////////////////////////////bGz//wAA//8AAP//AAD///Pz////////////////
+ ///////////////////AwP//AAD//wAA//85Of////////////////////////j4//8sLP//AAD//wAA
+ //9NTf//////////////////////////////////4OD//wAA//8AAP//CQn//1lZ//8AAP//AAD//wEB
+ //+pqf//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////9/f//hob//wEB//8AAP//AAD//xQU///Cwv//////////////////////////
+ //////////////////////////////////80NP//AAD//wAA///R0f//////////////////////////
+ //////////////////////////////////8REf//AAD//wAA///j4///////////////////////////
+ ////////+vr//wMD//8AAP//AQH///f3////////////////////////////////////////////////
+ //9iYv//AAD//wAA//8AAP///////////////////////////////////////6qq//8AAP//AAD//ycn
+ //+env//wcH//+Xl////////e3v//wAA//8AAP//Dg7//+Hh////////////////////////////////
+ //+Wlv//AAD//wAA//8DA///AAD//wAA//8AAP//ior/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////qqr//woK
+ //8AAP//AAD//wYG//+dnf///////////////////////////////////////////////////////zAw
+ //8AAP//AAD//9HR/////////////////////////////////////////////////////////////xwc
+ //8AAP//AAD//+Hh///////////////////////////////////d3f//AAD//wAA//8eHv//////////
+ /////////////////////////////////////////////2Ji//8AAP//AAD//wgI////////////////
+ ////////////////////////lpb//wAA//8AAP//AAD//wAA//8AAP//AAD//wwM//8DA///AAD//wAA
+ //+Wlv///////////////////////////////////////0xM//8AAP//AAD//wAA//8AAP//AAD//2ho
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////+6uv///Pz/////////////////////////////////////////////////////
+ ////////////////////////////////////////ysr//xkZ//8AAP//AAD//wAA//9zc////Pz/////
+ ////////////////////////////////////////MDD//wAA//8AAP//0dH/////////////////////
+ ////////////////////////////////////////IiL//wAA//8AAP//09P/////////////////////
+ /////////f3//3l5//8AAP//AAD//z4+////////////////////////////////////////////////
+ ////////YmL//wAA//8AAP//ERH///////////////////////////////////////98fP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//PDz///z8////////////////////////////////
+ ///29v//Cgr//wAA//8AAP//AAD//wAA//9MTP///Pz/////////////////////////////////////
+ ////////////////////////////////////////////////////////19f//wcH//9bW////Pz/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////4+P//zEx//8AAP//AAD//wAA//9MTP//8fH/////////////////////////////////////
+ //8wMP//AAD//wAA///h4f//////////////////////////////////////////////////////////
+ //8qKv//AAD//wAA///R0f////////////////////////X1//9ZWf//AAD//wAA//8AAP//Y2P/////
+ //////////////////////////////////////////////////9XV///AAD//wAA//8eHv//////////
+ /////////////////////////////+np//+6uv//mZn//3R0//9SUv//MDD//w0N//8AAP//AAD//wgI
+ ///Y2P///////////////////////////////////////7e3//8AAP//AAD//wAA//8AAP//MjL///Pz
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////z8//84OP//AAD//wAA//9QUP//+fn/////////////////////////////////////
+ ////////////////////////////////////////////////////////8/P//09P//8AAP//AAD//wAA
+ //8rK///39///////////////////////////////////zAw//8AAP//AAD//+Hh////////////////
+ /////////////////////////////////////////////zAw//8AAP//AAD//8LC////////////////
+ ///k5P//NDT//wAA//8AAP//AAD//zg4///m5v//////////////////////////////////////////
+ /////////////1FR//8AAP//AAD//yIi////////////////////////////////////////////////
+ /////////////////////////////+jo///ExP//w8P/////////////////////////////////////
+ ////////bW3//wAA//8AAP//AAD//yAg///m5v//////////////////////////////////////////
+ ////////////////////////////////////////////////////////j4///wAA//8AAP//AAD//wAA
+ //9NTf//9fX/////////////////////////////////////////////////////////////////////
+ ////////////////////////+fn//yQk//8AAP//AAD//wAA//+Fhf//////////////////////////
+ ////////Ly///wAA//8AAP//4eH/////////////////////////////////////////////////////
+ ////////ODj//wAA//8AAP//v7//////////////yMj//xkZ//8AAP//AAD//wAA//9fX///+Pj/////
+ ////////////////////////////////////////////////////////UVH//wAA//8AAP//MDD/////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////+/v//8dHf//AAD//wAA//8PD///1dX/////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////9vb//8KCv//AAD//wAA//8AAP//AAD//wAA//9DQ///9fX/////////////////////
+ //////////////////////////////////////////////////////////////z8//9bW///AAD//wAA
+ //8AAP//cHD///////////////////////////////////////8iIv//AAD//wAA///h4f//////////
+ //////////////////////////////////////////////////8/P///AAD//wAA//+0tP///////6Sk
+ //8ICP//AAD//wAA//8DA///jo7/////////////////////////////////////////////////////
+ //////////////////9RUf//AAD//wAA//80NP//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///5+f//R0f//wAA//8AAP//AAD//5yc////////////////////////////////////////////////
+ ///////////////////////////////////////////////////9/f//QUH//wAA//8AAP//JSX//3p6
+ //8AAP//AAD//wAA//87O///7+//////////////////////////////////////////////////////
+ ///////////////////9/f//YmL//wAA//8AAP//AAD//2lp///9/f//////////////////////////
+ /////////////yIi//8AAP//AAD//+Hh////////////////////////////////////////////////
+ /////////////0dH//8AAP//AAD//yMj//8UFP//AAD//wAA//8AAP//ERH//7m5////////////////
+ /////////////////////////////////////////////////////////////0BA//8AAP//AAD//z8/
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////+fn//09P//8AAP//AAD//wAA//8AAP//DAz//6Cg
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////5WV//8AAP//AAD//wIC///Cwv///////4mJ//8AAP//AAD//wAA//83N///7e3/////
+ /////////////////////////////////////////////////////////f3//2lp//8AAP//AAD//wAA
+ //9eXv///f3/////////////////////////////////////////////IiL//wAA//8AAP//5+f/////
+ ////////////////////////////////////////////////////////UVH//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//ygo///a2v//////////////////////////////////////////////////////////
+ ////////////////////////Pz///wAA//8AAP//SEj/////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////n5
+ //9PT///AAD//wAA//8AAP//BAT//wAA//8AAP//AAD//1pa///x8f//////////////////////////
+ ///////////////////////////////////////////////////h4f//Dg7//wAA//8AAP//b2//////
+ /////////////42N//8BAf//AAD//wAA//8tLf//6ur/////////////////////////////////////
+ //////////////////9zc///AAD//wAA//8AAP//W1v///z8////////////////////////////////
+ //////////////////8iIv//AAD//wAA///w8P//////////////////////////////////////////
+ //////////////////9XV///AAD//wAA//8AAP//AAD//wYG//9SUv//7+//////////////////////
+ //////////////////////////////////////////////////////////////////8/P///AAD//wAA
+ //9RUf//////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////5+f//T0///wAA//8AAP//AAD//4mJ///MzP//Jib//wAA
+ //8AAP//AAD//yMj///Ly///////////////////////////////////////////////////////////
+ /////////////0ZG//8AAP//AAD//yEh///z8////////////////////////5aW//8BAf//AAD//wAA
+ //8rK///5OT/////////////////////////////////////////////eXn//wAA//8AAP//AAD//09P
+ ///8/P///////////////////////////////////////////////////////yIi//8AAP//AAD///Dw
+ /////////////////////////////////////////////////////////////5qa//93d///nJz//7y8
+ ///h4f///Pz/////////////////////////////////////////////////////////////////////
+ /////////////////////////////zg4//8AAP//AAD//wUF//8jI///OTn//1VV//9sbP//h4f//6Gh
+ //+4uP//0tL//+rq////////////////////////////////////////////////////////+fn//09P
+ //8AAP//AAD//wAA//+Jif/////////////z8///YmL//wAA//8AAP//AAD//wUF//+Kiv///f3/////
+ //////////////////////////////////////////////////+goP//AAD//wAA//8BAf//vr7/////
+ /////////////////////////////5mZ//8DA///AAD//wAA//8kJP//5OT/////////////////////
+ /////////////4SE//8AAP//AAD//wAA//9PT///+fn/////////////////////////////////////
+ ////////////////////////Gxv//wAA//8AAP//8PD/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////19f//35+//8jI///AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wYG//8gIP//Nzf//1FR
+ //9qav//g4P//52d//+1tf//zs7//+bm//9PT///AAD//wAA//8BAf//jY3/////////////////////
+ ////////p6f//w8P//8AAP//AAD//wAA//9HR///5+f/////////////////////////////////////
+ ////////5eX//xAQ//8AAP//AAD//2ho/////////////////////////////////////////////6Sk
+ //8DA///AAD//wAA//8eHv//3Nz///////////////////////+Jif//AAD//wAA//8AAP//Q0P///b2
+ //////////////////////////////////////////////////////////////////8REf//AAD//wAA
+ ///w8P//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///m5v//jY3//zMz//8AAP//AAD//wAA//8AAP//AAD//wAA//8CAv//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AQH//5aW////////////////////////////////////////39///zo6//8AAP//AAD//wAA
+ //8WFv//uLj///////////////////////////////////////9RUf//AAD//wAA//8eHv//8fH/////
+ /////////////////////////////////////////////6am//8GBv//AAD//wAA//8dHf//1dX/////
+ ////////k5P//wAA//8AAP//AAD//0FB///19f//////////////////////////////////////////
+ /////////////////////////////xER//8AAP//AAD///Dw////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+/v//+cnP//Q0P//wIC//8AAP//AAD//wAA//8AAP//AAD//wwM
+ //9aWv//tLT///r6///v7///2Nj//7u7//+lpf//iYn//3Bw//9YWP//Ozv//yUl//8JCf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wEB//+Wlv//////////////////////////
+ ////////////////////////+/v//3t7//8DA///AAD//wAA//8BAf//c3P///n5////////////////
+ ////////p6f//wAA//8AAP//AQH//7q6////////////////////////////////////////////////
+ /////////////7Oz//8GBv//AAD//wAA//8VFf//0tL//5aW//8BAf//AAD//wAA//83N///7+//////
+ ////////////////////////////////////////////////////////////////////////ERH//wAA
+ //8AAP///Pz/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////9/f//6ys//9SUv//Bwf//wAA
+ //8AAP//AAD//wAA//8AAP//BQX//0xM//+mpv//8/P/////////////////////////////////////
+ ///////////////////////////////////v7///2Nj//7u7//+lpf//iYn//3Bw//9YWP//Ozv//yUl
+ //8LC///lpb//////////////////////////////////////////////////////////////////8DA
+ //8cHP//AAD//wAA//8AAP//NDT//9vb/////////////+rq//8VFf//AAD//wAA//9hYf//////////
+ /////////////////////////////////////////////////////////////7S0//8KCv//AAD//wAA
+ //8PD///AQH//wAA//8AAP//MzP//+/v////////////////////////////////////////////////
+ //////////////////////////////////8REf//AAD//wAA////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///8/P//u7v//2Fh//8PD///AAD//wAA//8AAP//AAD//wAA//8BAf//PT3//5eX///r6///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////+3t//9RUf//AAD//wAA//8AAP//DQ3//6Oj
+ ////////WVn//wAA//8AAP//Gxv//+/v////////////////////////////////////////////////
+ /////////////////////////////76+//8KCv//AAD//wAA//8AAP//AAD//y0t///q6v//////////
+ /////////////////////////////////////////////////////////////////////////////xER
+ //8AAP//AAD/////////////9vb///Dw///w8P//8PD///Dw///n5///4eH//+Hh///h4f//4eH//9XV
+ ///R0f//0dH//9HR///R0f//wsL//7+///+4uP//cXH//xoa//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8uLv//iIj//+Li////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////+Xl///CQn//wAA//8AAP//AAD//0JC//8AAP//AAD//wAA//+0tP//////////
+ /////////////////////////////////////////////////////////////////////////////76+
+ //8PD///AAD//wAA//8nJ///6ur/////////////////////////////////////////////////////
+ ////////////////////////////////////////AwP//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//yAg//96ev//09P/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////U1P//LS3//wAA
+ //8AAP//AAD//wAA//8AAP//XFz/////////////////////////////////////////////////////
+ /////////////////////////////////////////////8jI//8PD///JCT//+Tk////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//Fhb//2tr///Fxf///f3/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////39///a2v//wEB//8AAP//AAD//xgY///s7P//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////8nJ///j4///////////////////////////////////////////////////////////
+ /////////////////////////////////////////////wAA//8AAP//AgL//xER//8REf//ERH//xER
+ //8REf//Fhb//yIi//8iIv//IiL//yIi//8iIv//KSn//zAw//8wMP//MDD//zAw//8wMP//Ojr//z8/
+ //8/P///Xl7//7e3///6+v//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////srL//xQU//8AAP//ra3/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////5OT//4eH////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAQAAAAIAAAEAIAAAAAAAACAEAAAA
+ AAAAAAAAAAAAAAAAAAD/////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////
+ ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////
+ /////////////39/f/8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////
+ //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////
+ /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////
+ /////////////////////////////////////////////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////9/f3//AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////
+ /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////
+ //////////////////9/f3//AAAA/wAAAP8AAAD/f39/////////////////////////////////////
+ ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////
+ //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////f39//wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////
+ //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////
+ ////////////////////////f39//wAAAP8AAAD/AAAA/39/f///////////////////////////////
+ /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////
+ ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////
+ ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////
+ /////////////////////////////39/f/8AAAD/AAAA/wAAAP9/f3//////////////////////////
+ //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/
+ f////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////
+ //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/f39/////
+ //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/f39/////////////////////
+ ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP9/f3///////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/f39/////////////////////////////////////////////////////////////f39//wAA
+ AP8AAAD/AAAA/39/f///////////////////////////////////////////////////////////////
+ //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////
+ ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/39/
+ f///////////////////////////////////////f39//wAAAP8AAAD/AAAA/39/f///////////////
+ /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/f39///////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/39/f////////////////////////////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////////////////////
+ ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/
+ f////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA
+ AP9/f3///////////////////////////////////////39/f/8AAAD/AAAA/wAAAP9/f3//////////
+ //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/f39/////////////////////////////////////////////////////
+ /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP9/f3////////////////////////////////////////////////////////////9/f3//AAAA/wAA
+ AP8AAAD/f39///////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/f39/////
+ ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/f/8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/39/f///////////////////////////////////////////////
+ //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/
+ f///////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/
+ f///////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/f39/////////////////////////////////////////////////////////////f39//wAA
+ AP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////////9/f3//AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP9/f3//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP9/f3//////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/39/f////////////////////////////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/f/8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/f39/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/
+ f///////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/f39/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/f39///////////////////////////////////////9/f3//AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/39/f///////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP9/f3//////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/39/f///////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/f39/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////
+ //////////////////////////////////////////////////////////////////9/f3//AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/39/f///////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////
+ ////////////////////////////////////////////////////////////////////////f39//wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/f39/////////////////////////////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////
+ /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////9/f3//AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////9/f3//AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////
+ /////////////////////////////////////////////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/39/f///////////////////////////////////////////////
+ /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////
+ //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////f39//wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////f39//wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/
+ f///////////////////////////////////////////////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////
+ /////////////39/f/8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////
+ //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////
+ ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////9/f3//AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////9/f3//AAAA/wAAAP8AAAD/f39/////////////////////////////////////
+ ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////
+ /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/f39//////////////////39/f/8AAAD/AAAA/wAAAP9/f3//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////f39//wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////f39//wAAAP8AAAD/AAAA/39/f///////////////////////////////
+ /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////
+ //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/
+ f///////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////9/f3//AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////9/f3//AAAA/wAAAP8AAAD/f39/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////39/f/8AAAD/AAAA/wAAAP9/f3//////////////////////////
+ //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/
+ f///////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP9/f3//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////f39//wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////f39//wAAAP8AAAD/AAAA/39/
+ f///////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/f39/////////////////////
+ ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP9/f3///////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/f39/////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39//////////////////39/f/8AAAD/AAAA/wAA
+ AP9/f3//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////
+ ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/39/
+ f///////////////////////////////////////f39//wAAAP8AAAD/AAAA/39/f///////////////
+ /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/f39///////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/39/f////////////////////////////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/f/8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/39/f///////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/
+ f////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA
+ AP9/f3///////////////////////////////////////39/f/8AAAD/AAAA/wAAAP9/f3//////////
+ //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/f39///////////////////////////////////////9/f3//AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////////////////////
+ /////////////39/f/8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP9/f3////////////////////////////////////////////////////////////9/f3//AAAA/wAA
+ AP8AAAD/f39///////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/f39/////
+ ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/f/8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////
+ //////////////////9/f3//AAAA/wAAAP8AAAD/f39/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/
+ f///////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/f39/////////////////////////////////////////////////////////////f39//wAA
+ AP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAAAP8AAAD/AAAA/39/
+ f////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////////9/f3//AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////////////////////
+ /////////////39/f/8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////
+ ////////////////////////f39//wAAAP8AAAD/AAAA/39/f///////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/f39/////////////////////////////////////////////////////////////f39//wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/
+ f///////////////////////////////////////////////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/f39/////////////////////////////////////////////////////////////////////
+ /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////
+ /////////////////////////////39/f/8AAAD/AAAA/wAAAP9/f3//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/
+ f///////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/39/f////////////////////////////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP9/f3//////////////////////////////////////////////////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/39/f///////////////////////////////////////////////////////////////
+ //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////
+ //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/f39/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP9/f3//////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/f39/////////////////////////////////////////////////////////////////////
+ /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////////////////////
+ ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////////////////////
+ /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////
+ ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/39/f///////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/f39/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/39/f///////////////////////////////////////////////////////////////
+ //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////////////////////
+ /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////
+ //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////
+ /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP9/f3//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/39/f///////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////9/f3//AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////f39//wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////39/
+ f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////90dP//dHT/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////6+v//v7///11d//8NDf//Ghr//ycn//9ERP//U1P//2Fh//96ev//iIj//6Oj
+ //+3t///xMT//+Hh///r6///////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////6en//z8///+hof//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////90dP//AAD//wAA//9VVf//+vr/////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////9LS//9xcf//Ghr//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//Jyf//0RE//9TU///YWH//3p6//+IiP//o6P//7y8
+ ///Hx///4eH///Dw////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////8/P//zg4//8AAP//AAD//0FB
+ ///c3P//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////90dP//AAD//wAA//8AAP//AAD//0FB
+ ///z8///////////////////////////////////////////////////////////////////////////
+ ///k5P//hIT//ysr//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//x4e//8sLP//RET//1ZW//9hYf//f3///4yM//+jo///vLz//8fH
+ ///h4f//8PD/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////+vr//0xM//8AAP//AAD//wAA
+ //8AAP//CAj//4aG///6+v//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////r6//9ra///AAD//wAA//8AAP//AAD//wAA
+ //8AAP//Li7//+np////////////////////////////////////////////////////////8PD//56e
+ //9DQ///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//Hh7//yws//9ERP//Wlr//2Rk//9/f///kZH//+Xl////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////2dn//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//Kir//8jI////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////r6//9VVf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8iIv//2dn///////////////////////////////////r6//+ysv//VVX//wgI
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+Hh///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////4OD//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//amr///Dw////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////r6//9VVf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//xUV///Cwv//////////////////x8f//2lp//8VFf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//S0v/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////52d//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//qKj/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////r6//9VVf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//DQ3//6+v///r6///Jyf//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//CAj//1VV//+ysv//9vb//+Tk
+ ///a2v//xMT//6+v//+env//f3///3Bw//9hYf//RET//zg4//8jI///CAj//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N
+ ///29v///////////////////////////////////////////////////////8LC//9iYv//8/P/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////7Oz//8EBP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9NTf//4eH/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////Pz//9ISP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8EBP//e3v//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9HR///np7///Pz////////////////
+ ///////////////////////////////////////////////////////////////////29v//4eH//8/P
+ ///AwP//o6P//5GR//9/f///ZGT//1ZW//9ERP//LCz//x4e//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//w8P//////////////////////////////////////////////////8LC//8NDf//AAD//zU1
+ ///p6f//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////8zM//8NDf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//Jib//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N
+ //+Pj///+vr/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////5GR//9/f///f3///39///9/f///f3///39/
+ //9/f///f3///39///9/f///f3///39///9/f///f3///39///9/f///f3///39///9/f///f3///39/
+ //9/f///f3///39///9/f///f3///39///9/f///f3///39///9/f///f3///39////R0f//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////Pz//88PP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//ykp//+Dg///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//MzP//5CQ///k5P//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////+vr///h4f//xMT//7Oz
+ //+jo///g4P//3d3//9hYf//TEz//0BA//8jI///DQ3//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//39//////////////////////////////////////////////6+v//8NDf//AAD//wAA
+ //8AAP//Ghr//8zM////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////93d//8aGv//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//NTX///Pz///Q0P//Njb//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//zEx///MzP//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////8jI///AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//lZX/////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////Pz//88PP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//ykp///p6f///////6Gh//8EBP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//yIi//98fP//2dn/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////4eH//9bW//9aWv//AAD//wAA
+ //8AAP//AAD//wAA//9ERP///////////////////////////////////////6ys//8EBP//AAD//wAA
+ //8AAP//AAD//wAA//8NDf//qKj/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////+np//8pKf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//IiL//+np//////////////r6//+Skv//DQ3//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//BAT//3Jy///z8///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////IyP//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//39/
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////Pz//88PP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//ykp///p6f//////////////////s7P//w0N//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//Jib//8fH////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////s7P//wAA
+ //8AAP//AAD//wAA//8AAP//CAj///b2/////////////////////////////6Wl//8EBP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//+Dg///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////Pz//88PP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//FRX//9nZ/////////////////////////////+Hh//9NTf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//Hh7//7Cw////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////yMj//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //96ev//////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//zg4///p6f/////////////////////////////Cwv//FRX//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//0RE////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////Dw
+ //8AAP//AAD//wAA//8AAP//AAD//wAA///Dw////////////////////////5OT//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//1lZ///z8///////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////r6//9QUP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//DQ3//8LC/////////////////////////////////////////////6io
+ //8aGv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//VVX//+Xl////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////8jI///AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//YWH/////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//zw8///z8////////////////////////////////////////9nZ//8eHv//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//9ERP//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////NDT//wAA//8AAP//AAD//wAA//8AAP//f3///////////////////5OT//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//NTX//+np////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////9ra///AAD//wAA
+ //8AAP//AAD//wAA//8AAP//BAT//6ys////////////////////////////////////////////////
+ ////////8PD//2Zm//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8REf//lpb///r6
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////IyP//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//2Fh////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//zw8///z8///////////////////////////////////////////////////6en//ykp
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//FRX//8zM////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////3R0//8AAP//AAD//wAA//8AAP//AAD//0RE/////////////3h4//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//zMz/////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////+IiP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//5OT////////////////////////////////////////////////
+ ////////////////////////xcX//yoq//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //85Of//1NT/////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////wQE
+ //8AAP//AAD//wAA//8AAP//AAD//39///9/f///f3///39///9/f///f3///39///9/f///f3///39/
+ //9/f///f3///39///9/f///f3///39///9/f///f3///39///9/f///f3///39///9RUf//AAD//wAA
+ //8AAP//AAD//wAA//9ISP//////////////////////////////////////////////////////////
+ /////////////////////////////////////////////+Hh//8pKf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//0hI///z8///////////////////////////////////////////////////////////
+ ///z8///PDz//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8NDf//u7v/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////+7u///AAD//wAA//8AAP//AAD//wAA//8EBP//8/P//3R0//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//Ghr//7S0//8iIv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N
+ //+oqP//////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////+hof//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//3h4////////////////////////////////////////////////
+ ///////////////////////////////////29v//goL//wgI//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wQE//97e///9vb/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //8AAP//AAD//wAA//8AAP//AAD//wAA////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////r6///wAA
+ //8AAP//AAD//wAA//8AAP//RET/////////////////////////////////////////////////////
+ /////////////////////////////////////////////9nZ//8aGv//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//1VV///6+v//////////////////////////////////////////////////////////
+ //////////////b2//9VVf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wQE//+lpf//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////8/P//wQE//8AAP//AAD//wAA//8AAP//AAD//0BA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//Ghr//9nZ////////6en//zw8//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//4OD////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////+3t///BAT//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//1lZ////////////////////////////////////////////////
+ ///////////////////////////////////////////////////Z2f//PT3//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//yIi//+5uf//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////AAD//wAA//8AAP//AAD//wAA//8AAP//////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////8TE
+ //8AAP//AAD//wAA//8AAP//AAD//zAw////////////////////////////////////////////////
+ /////////////////////////////////////////////9nZ//8aGv//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//1VV///6+v//////////////////////////////////////////////////////////
+ ////////////////////////xMT//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//4+P
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////87O///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//KSn//9nZ///////////////////6+v//YmL//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//WVn///Pz////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////MzP//DQ3//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//0FB///6+v//////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////+dnf//ERH//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//11d///s7P//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////wAA//8AAP//AAD//wAA//8AAP//AAD/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///ExP//AAD//wAA//8AAP//AAD//wAA//8jI///////////////////////////////////////////
+ /////////////////////////////////////////////9nZ//8aGv//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//1lZ///6+v//////////////////////////////////////////////////////////
+ /////////////////////////////7Oz//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//dHT///r6////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////eHj//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//KSn//+np//////////////////////////////////+Li///BAT//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//81Nf//6en/////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////d3f//Ghr//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//ykp///z8///////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////+np
+ //9VVf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//ERH//52d////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////8AAP//AAD//wAA//8AAP//AAD//wAA////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////4eH//wAA//8AAP//AAD//wAA//8AAP//Fhb/////////////////////////////////////
+ /////////////////////////////////////////////8LC//8aGv//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//3R0////////////////////////////////////////////////////////////////
+ //////////////////////////////////+jo///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//9VVf//+vr/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////7u7//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//MTH//+np/////////////////////////////////////////////7Oz
+ //8NDf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//xoa///MzP//////////////////////////
+ ///////////////////////////////////////////////////////////////////p6f//KSn//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//xoa///p6f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////7S0//8iIv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//a2v/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////AAD//wAA//8AAP//AAD//wAA//8AAP//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////+Hh//8AAP//AAD//wAA//8AAP//AAD//wAA////////////////////////////////
+ /////////////////////////////////////////////8LC//8NDf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//3R0////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//zw8///z8///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////z8///BAT//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//PDz///Pz////////////////////////////////////////////////
+ ////////1NT//yIi//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//DQ3//6io////////////////
+ ///////////////////////////////////////////////////////////////////z8///PDz//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//w0N///Z2f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////8/P//3Jy//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//ERH//93d
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////wAA//8AAP//AAD//wAA//8AAP//Hh7/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////29v//AAD//wAA//8AAP//AAD//wAA//8AAP//9vb/////////////////////
+ /////////////////////////////////////////////8LC//8NDf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//3R0////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//KSn//+np////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////9ra//+zs///iIj//7e3////////////////////////////////
+ ////////////////////////////////////////////////////////6en//xER//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//PDz///Pz////////////////////////////////////////////////
+ ///////////////////p6f//PDz//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//g4P/////
+ ///////////////////////////////////////////////////////////////////6+v//UFD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wQE//+/v///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////+Dg///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//7e3
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////8AAP//AAD//wAA//8AAP//AAD//yMj////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////wAA//8AAP//AAD//wAA//8AAP//AAD//+Hh////////////////
+ /////////////////////////////////////////////8LC//8NDf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//5OT////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////+jo///AAD//wAA//8AAP//AAD//wAA
+ //9RUf//Ghr//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//2dn/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///g4P//t7f//4yM//9hYf//ODj//w0N//8AAP//AAD//wAA//9aWv//////////////////////////
+ ////////////////////////////////////////////////////////6en//ykp//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//VVX///b2////////////////////////////////////////////////
+ //////////////////////////////r6//9iYv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //9ZWf//8/P/////////////////////////////////////////////////////////////b2///wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//+oqP//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////+3t///BAT//wAA//8AAP//AAD//wAA//8AAP//AAD//4OD
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////AAD//wAA//8AAP//AAD//wAA//8jI///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////8REf//AAD//wAA//8AAP//AAD//wAA///h4f//////////
+ /////////////////////////////////////////////6ys//8ICP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//5OT////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA
+ //8AAP//f3///+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//xER///Cwv//////////
+ ////////////////////////////////////////////////////////5+f//7y8//+Rkf//ZGT//zg4
+ //8NDf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//FRX/////////////////////
+ ////////////////////////////////////////////////////////3d3//ykp//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//+vr////////////////////////////////////////////////
+ /////////////////////////////////////////////4uL//8EBP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//zU1///p6f//////////////////////////////////////////////////i4v//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//+Pj///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////h4f//FRX//wAA//8AAP//AAD//wAA//8AAP//AAD//0hI
+ ///6+v//////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////wAA//8AAP//AAD//wAA//8AAP//IyP/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////IyP//wAA//8AAP//AAD//wAA//8AAP//xMT/////
+ /////////////////////////////////////////////6ys//8EBP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//5OT////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////6Oj//8AAP//AAD//wAA
+ //8AAP//AAD//39/////////8PD//zw8//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//CAj//6ys
+ /////////////////////////////+vr//+/v///kZH//2ho//88PP//ERH//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA///S0v//////////
+ ////////////////////////////////////////////////////////2dn//xoa//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//+zs///////////////////////////////////////////
+ ////////////////////////////////////////////////////////s7P//w0N//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//Ghr//8zM////////////////////////////////////////paX//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//9vb///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////29v//MTH//wAA//8AAP//AAD//wAA//8AAP//AAD//yIi
+ ///w8P//////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////8AAP//AAD//wAA//8AAP//AAD//yMj
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////ycn//8AAP//AAD//wAA//8AAP//AAD//8TE
+ /////////////////////////////////////////////6ys//8EBP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//BAT//6Wl////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////+env//AAD//wAA
+ //8AAP//AAD//wAA//9/f//////////////z8///UFD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8EBP//lpb////////Z2f//RET//xYW//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//kZH/////
+ ////////////////////////////////////////////////////////2dn//xoa//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//cHD/////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////U1P//IiL//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8NDf//qKj/////////////////////////////u7v//wQE
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//9VVf//+vr/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////YmL//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N
+ ///Q0P//////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////r6///AAD//wAA//8AAP//AAD//wAA
+ //8jI///////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////9ERP//AAD//wAA//8AAP//AAD//wAA
+ //+rq////////////////////////////////////////6Wl//8EBP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//BAT//6ys////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////f3///wAA
+ //8AAP//AAD//wAA//8AAP//f3////////////////////r6//9nZ///AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//98fP//4eH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//1NT
+ ////////////////////////////////////////////////////////wsL//w0N//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//zQ0////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////+zs
+ //9BQf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+Dg///////////////////0ND//w0N
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//88PP//8/P/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////nZ3//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //+hof//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////4eH//wAA//8AAP//AAD//wAA
+ //8AAP//IyP/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////RET//wAA//8AAP//AAD//wAA
+ //8AAP//o6P//////////////////////////////////5OT//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//BAT//6ys////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////39/
+ //8AAP//AAD//wAA//8AAP//AAD//39//////////////////////////////0tL//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//15e//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8NDf//+vr/////////////////////////////////////////////wsL//w0N//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//8PD/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////+vr//2dn//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//1lZ///z8///4eH//xoa
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8pKf//7Oz/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////zMz//wgI//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //9ra///////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////+Hh//8AAP//AAD//wAA
+ //8AAP//AAD//yMj////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////15e//8AAP//AAD//wAA
+ //8AAP//AAD//5GR/////////////////////////////5OT//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//DQ3//7Oz////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //9/f///AAD//wAA//8AAP//AAD//wAA//9/f///////////////////6en//1VV//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8ICP//CAj//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8EBP//MDD//1pa//+IiP//q6v//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//8vL////////////////////////////////////////r6///w0N//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//i4v//wgI//8AAP//AAD//wAA//8AAP//AAD//7Oz////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////k5P//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//NTX//ykp
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//3d3/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////7Oz//x4e//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //84OP//+vr/////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////h4f//AAD//wAA
+ //8AAP//AAD//wAA//8jI///////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////9hYf//AAD//wAA
+ //8AAP//AAD//wAA//9/f////////////////////////5OT//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//DQ3//8LC////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////f3///wAA//8AAP//AAD//wAA//8AAP//jIz/////////////nZ3//xER//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//9FRf//4eH//zg4//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//zAw//9WVv//f3///6+v///W1v//+vr///////////////////////80NP//AAD//wAA
+ //8AAP//AAD//wAA//+Hh////////////////////////////////////////8LC//8NDf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//5OT//9ERP//AAD//wAA//8AAP//AAD//wAA//9tbf//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////+3t///DQ3//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8NDf//zMz/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////+vr//0VF//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8aGv//5eX/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////4eH//wAA
+ //8AAP//AAD//wAA//8AAP//IyP/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////c3P//wAA
+ //8AAP//AAD//wAA//8AAP//d3f//////////////////4OD//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//DQ3//8LC////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////39///8AAP//AAD//wAA//8AAP//AAD//6Oj///Z2f//QUH//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//xER//+hof////////////9TU///AAD//wAA//8AAP//AAD//wAA
+ //9wcP//0tL///b2////////////////////////////////////////////////////////cHD//wAA
+ //8AAP//AAD//wAA//8AAP//R0f/////////////////////////////////////////////wsL//w0N
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//IiL//wAA//8AAP//AAD//wAA//8AAP//Kyv/////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////9nZ//8mJv//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8EBP//t7f/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////4CA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8EBP//v7//////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////+Hh
+ //8AAP//AAD//wAA//8AAP//AAD//yMj////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////39/
+ //8AAP//AAD//wAA//8AAP//AAD//2Fh/////////////3R0//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//Ghr//8LC////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////9/f///AAD//wAA//8AAP//AAD//wAA//9CQv//CAj//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//1VV///s7P//////////////////aGj//wAA//8AAP//AAD//wAA
+ //8AAP//f3///////////////////////////////////////////////////////////////////7u7
+ //8AAP//AAD//wAA//8AAP//AAD//wgI///29v//////////////////////////////////////////
+ ///Cwv//DQ3//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ ///n5///////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////7Oz//0FB//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//oaH/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////6+v//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//j4//////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///h4f//AAD//wAA//8AAP//AAD//wAA//88PP//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //+IiP//AAD//wAA//8AAP//AAD//wAA//9hYf///////3R0//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//Ghr//9nZ////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////f3///wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//Hh7//7S0/////////////////////////////4OD//8AAP//AAD//wAA
+ //8AAP//AAD//2Rk////////////////////////////////////////////////////////////////
+ ///z8///BAT//wAA//8AAP//AAD//wAA//8AAP//w8P/////////////////////////////////////
+ /////////////8LC//8aGv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//q6v/////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////6+v//Z2f//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//g4P/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////93d//8NDf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//WVn/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////4eH//wAA//8AAP//AAD//wAA//8AAP//RET/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////o6P//wAA//8AAP//AAD//wAA//8AAP//RET//3R0//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//Ghr//9nZ////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////2ho//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//b2////Pz//////////////////////////////////+jo///AAD//wAA
+ //8AAP//AAD//wAA//9MTP//////////////////////////////////////////////////////////
+ /////////////zs7//8AAP//AAD//wAA//8AAP//AAD//39/////////////////////////////////
+ ////////////////////////2dn//xoa//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//2ho////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //+Tk///BAT//wAA//8AAP//AAD//wAA//8AAP//Z2f/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////Pz//8uLv//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//Li7///Pz////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////+Hh//8AAP//AAD//wAA//8AAP//AAD//0RE////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//Hh7//9nZ////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////9hYf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8qKv//yMj/////////////////////////////////////////////xMT//wAA
+ //8AAP//AAD//wAA//8AAP//MDD/////////////////////////////////////////////////////
+ /////////////8zM//8aGv//AAD//wAA//8AAP//AAD//wAA//8/P///////////////////////////
+ ///////////////////////////////////Z2f//Ghr//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8rK///////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////7e3//8NDf//AAD//wAA//8AAP//TEz///r6////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////9ZWf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//DQ3//9nZ////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////h4f//AAD//wAA//8AAP//AAD//wAA//9ERP//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////ExP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//KSn//+np////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////p6f//NTX//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wQE//+Cgv//+vr//////////////////////////////////////////////////93d
+ //8AAP//AAD//wAA//8AAP//AAD//xER////////////////////////////////////////////////
+ /////////////52d//8ICP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT///Pz////////////////
+ /////////////////////////////////////////////9nZ//8aGv//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//+fn////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////2dn//yYm//8AAP//NTX///Pz////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////+Skv//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//6+v////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////4eH//wAA//8AAP//AAD//wAA//8AAP//RET/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////xMT//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//KSn//+np////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////+dnf//ERH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//zk5///Z2f//////////////////////////////////////////////////////////
+ ///29v//AAD//wAA//8AAP//AAD//wAA//8AAP//8/P/////////////////////////////////////
+ ////////+vr//2dn//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//x4e///p6f//////////
+ ////////////////////////////////////////////////////////2dn//xoa//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//+rq///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////s7P//YmL//+np////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////+/v///BAT//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//4CA////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////9ra//8AAP//AAD//wAA//8AAP//AAD//0RE////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////9ra//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//KSn//+np////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////9nZ//9BQf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//DQ3//5aW///6+v//////////////////////////////////////////////////////////
+ /////////////xYW//8AAP//AAD//wAA//8AAP//AAD//9ra////////////////////////////////
+ ////////6en//zg4//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//0FB///p6f//////////
+ ///////////////////////////////////////////////////////////////////Z2f//KSn//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//YWH/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////p6f//Ghr//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//0VF///6+v//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////ExP//AAD//wAA//8AAP//AAD//wAA//9ERP//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////h4f//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//PDz///Pz////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////+vr//4aG//8ICP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//SEj//+Xl////////////////////////////////////////////////////////////////
+ //////////////////8wMP//AAD//wAA//8AAP//AAD//wAA//9VVf//kZH//7y8///g4P//////////
+ ////////v7///xoa//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//3Bw///6+v//////////
+ /////////////////////////////////////////////////////////////////////////////+np
+ //8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//yMj///6+v//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////6+v//PDz//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//x4e///s7P//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////xMT//wAA//8AAP//AAD//wAA//8AAP//RET/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////6+v//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//PDz///Pz////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////yMj//y4u//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//8TE////////////////////////////////////////////////////////////////
+ ////////////////////////TEz//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wgI
+ //80NP//U1P//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//CAj//6Gh////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////6en//ykp//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//VVX///r6////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////c3P//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wgI///MzP//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////8TE//8AAP//AAD//wAA//8AAP//AAD//0RE
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//PDz///Pz////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////z8///b2///wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA///ExP//////////////////////////////////////////////////////////
+ /////////////////////////////2Rk//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//Hh7//8zM////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////p6f//KSn//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9VVf//+vr/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////paX//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//+dnf//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////ExP//AAD//wAA//8AAP//AAD//wAA
+ //9ERP//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////BAT//wAA//8AAP//AAD//wAA
+ //8AAP//VVX///Pz////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////+0tP//Hh7//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//xMT/////////////////////////////////////////////////////
+ //////////////////////////////////9/f///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//RUX//+zs////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+np//8mJv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//0xM
+ ///z8///////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////1NT//w0N//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//9nZ///////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////xMT//wAA//8AAP//AAD//wAA
+ //8AAP//RET/////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////yMj//8AAP//AAD//wAA
+ //8AAP//VVX///r6////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////+np//9VVf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//w0N
+ //8AAP//AAD//wAA//8AAP//AAD//8TE////////////////////////////////////////////////
+ ////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//d3f///r6////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////kZH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//PDz///Pz////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////8/P//yYm//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//81Nf//9vb/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////8TE//8AAP//AAD//wAA
+ //8AAP//AAD//1NT////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////8jI///AAD//wAA
+ //8AAP//VVX///r6////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////52d//8REf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//MTH//8zM
+ //9ERP//AAD//wAA//8AAP//AAD//wAA///ExP//////////////////////////////////////////
+ /////////////////////////////////////////////87O//8nJ///AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8NDf//paX/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////8TE//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//88PP//8/P/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////0xM//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8VFf//5eX/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////ExP//AAD//wAA
+ //8AAP//AAD//wAA//9hYf//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////QED//wAA
+ //8AAP//a2v///r6////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////2dn//0FB//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8ICP//ior///r6
+ ////////RET//wAA//8AAP//AAD//wAA//8AAP//4eH/////////////////////////////////////
+ //////////////////////////////////////////////////////////////r6///a2v//t7f//5GR
+ //9ra///TEz//x4e//8AAP//AAD//wAA//8AAP//AAD//wAA//8iIv//0ND/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////8/P//4KC//8NDf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//zw8///z8///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////4iI//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8EBP//u7v/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////xMT//wAA
+ //8AAP//AAD//wAA//8AAP//YWH/////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////0RE
+ //8AAP//dHT/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///6+v//hob//wgI//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9BQf//3Nz/////
+ /////////////0RE//8AAP//AAD//wAA//8AAP//AAD//+Hh////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////9vb//9bW//+zs///jIz//2ho//9eXv//7Oz/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////6+v//nZ3//xoa//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//PDz//+np////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////7u7//8EBP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//iIj/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////8TE
+ //8AAP//AAD//wAA//8AAP//AAD//2Fh////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //9TU///dHT/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///IyP//Li7//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//xER//+dnf//////////
+ //////////////////9ERP//AAD//wAA//8AAP//AAD//wAA///h4f//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////+ysv//Kir//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8pKf//6en/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////+Hh//8VFf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//UVH/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///ExP//AAD//wAA//8AAP//AAD//wAA//9hYf//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////xcX/////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////Pz
+ //9vb///BAT//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//1VV///l5f//////////
+ ////////////////////////RET//wAA//8AAP//AAD//wAA//8AAP//4eH/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////8jI//9CQv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8nJ///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ykp///p6f//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////b2//81Nf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//KSn///Pz////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////xMT//wAA//8AAP//AAD//wAA//8AAP//YWH/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////7S0
+ //8eHv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//FRX//7Cw////////////////
+ /////////////////////////////ycn//8AAP//AAD//wAA//8AAP//AAD//+Hh////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////3Nz//1lZ//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//0JC///IyP//+vr//1VV//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//KSn//+np
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////9nZ///AAD//wAA
+ //8AAP//AAD//wAA//8AAP//DQ3//9TU////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//2Fh////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////+np
+ //9FRf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9dXf//4eH/////
+ //////////////////////////////////8jI///AAD//wAA//8AAP//AAD//wAA///h4f//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////s7P//cnL//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//MjL//7m5///////////////////6+v//VVX//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8pKf//5eX/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////+hof//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//6io////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////+jo///AAD//wAA//8AAP//AAD//wAA//9hYf//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////729//8yMv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wgI
+ //92dv//8PD/////////////////////////////IyP//wAA//8AAP//AAD//wAA//8AAP//4eH/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////b2//+Kiv//ERH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8mJv//paX///////////////////////////////////r6//9VVf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//xoa///Z2f//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////MzP//CAj//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//3d3////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////o6P//wAA//8AAP//AAD//wAA//8AAP//YWH/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////6Gh//8iIv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//xER//+Ojv//9vb//////////////////yMj//8AAP//AAD//wAA//8AAP//AAD///b2
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////9zc//8eHv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//xER
+ //+Zmf//+vr/////////////////////////////////////////////+vr//1VV//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//Ghr//9nZ////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////s7P//IiL//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//0FB///6+v//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//2Fh////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////9vb//46O//8REf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//yYm//+lpf////////////8jI///AAD//wAA//8AAP//AAD//wAA
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////yMj//zY2//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8EBP//amr///Dw////////////////////////////////////////////////////////dHT//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//2dn/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////6+v//SEj//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//+QkP//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////+jo///AAD//wAA//8AAP//AAD//wAA//9hYf//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////8PD//3Z2//8ICP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//zY2///Cwv//IyP//wAA//8AAP//AAD//wAA
+ //8AAP//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////6+v//mZn//xER//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8VFf//nZ3/////////////////////////////////////////////////////
+ //90dP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//xoa///Z2f//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////4CA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//3x8///6+v//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA//8AAP//a2v/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////4eH//2Fh
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////s7P//Zmb//wQE//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//85Of//3d3/////////////////////////////////////
+ ////////+vr//ycn//8AAP//AAD//wAA//8AAP//AAD//wAA//8NDf//wsL/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////oaH//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//TEz///Pz////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//39/
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//9mZv//8PD/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////0dH//0VF//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////MzP//OTn//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//9nZ////////////////////////////////
+ /////////////3R0//8AAP//AAD//wAA//8AAP//AAD//wAA//8EBP//rKz/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////Cwv//FRX//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8uLv//4eH/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////+jo///AAD//wAA//8AAP//AAD//wAA
+ //9/f///////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//xUV//+oqP//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////vb3//zIy//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //+dnf//FRX//wAA//8AAP//AAD//wAA//8AAP//AAD//yMj////////////////////////////////
+ /////////////5OT//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//j4//////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////93d//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//xoa
+ ///Cwv//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA
+ //8AAP//f3//////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////AwP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//0lJ///h4f//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////oaH//yIi//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//5mZ///6+v//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////Dw//8yMv//AAD//wAA//8AAP//AAD//wAA//9tbf//////////////////////////
+ /////////////6ys//8EBP//AAD//wAA//8AAP//AAD//wAA//8AAP//b2//////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////8/P//0VF//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//BAT//6Gh////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////6Oj//8AAP//AAD//wAA
+ //8AAP//AAD//39/////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////xMT//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//CAj//4+P///6+v//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////29v//jo7//xER//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//g4P/////////////////////////////////////
+ /////////////////////////////////////////////7+///+Rkf//o6P//7e3///ExP//2tr//+Hh
+ ///29v//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////Ghr//wAA//8AAP//AAD//wAA//8AAP//u7v/////////////////////
+ /////////////8LC//8NDf//AAD//wAA//8AAP//AAD//wAA//8AAP//UFD///r6////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////6+v//a2v//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//fHz///r6////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////+jo///AAD//wAA
+ //8AAP//AAD//wAA//9/f///////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////8TE//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//MTH//8jI
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////w8P//dnb//wgI
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//4OD////////////////////////////////
+ //////////////////////////////////////////////////9oaP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8eHv//IyP//0BA//9ERP//YWH//2Rk//9/f///zc3/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////zs7//wAA//8AAP//AAD//wAA//8AAP//CAj///b2////////////////
+ /////////////9nZ//8aGv//AAD//wAA//8AAP//AAD//wAA//8AAP//ODj///Pz////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////+Wlv//BAT//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//9QUP//8/P/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////iIj//wAA
+ //8AAP//AAD//wAA//8AAP//f3//////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////ExP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8EBP//b2////Dw////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///h4f//YWH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+jo///////////////////////////
+ ////////////////////////////////////////////////////////Vlb//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9CQv//u7v/////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////39///8AAP//AAD//wAA//8AAP//AAD//0tL////////////////
+ /////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//Jib//+np////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////7e3
+ //8NDf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//zEx///l5f//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////39/
+ //8AAP//AAD//wAA//8AAP//AAD//39/////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////2tr//wAA
+ //8AAP//AAD//wAA//8AAP//IyP/////////////wMD//yoq//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8eHv//sLD/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//o6P/////////////////////
+ /////////////////////////////////////////////////////////////0RE//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8yMv//qqr///r6////////////////////////////////////////////////////////////////
+ //////////////////////////////////87O///AAD//wAA//8AAP//AAD//wAA//+Vlf//////////
+ //////////////Pz//88PP//AAD//wAA//8AAP//AAD//wAA//8AAP//ERH//9nZ////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////1NT//yIi//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//Ghr//8fH////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //9/f///AAD//wAA//8AAP//AAD//wAA//9/f///////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////+Hh
+ //8AAP//AAD//wAA//8AAP//AAD//yMj///////////////////29v//fn7//wQE//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//9RUf//5eX/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////6+v//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//6Oj////////////////
+ //////////////////////////////////////////////////////////////////8nJ///AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8mJv//lZX///b2////////////////////////////////////////////////
+ ///////////////////////////////////s7P//AAD//wAA//8AAP//AAD//wAA//8AAP//3Nz/////
+ //////////////r6//9VVf//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//8LC////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////p6f//PDz//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8ICP//paX/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////f3///wAA//8AAP//AAD//wAA//8AAP//f3//////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///h4f//AAD//wAA//8AAP//AAD//wAA//8AAP/////////////////////////////U1P//OTn//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N//+Wlv//+vr/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////4eH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+3t///////////
+ ////////////////////////////////////////////////////////////////////////ERH//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//hYX///Dw////////////////////////////////
+ ////////////////////////////////////////pqb//wAA//8AAP//AAD//wAA//8AAP//Jyf/////
+ //////////////////90dP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//6io////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////b2//9dXf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //+AgP//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////39///8AAP//AAD//wAA//8AAP//AAD//39/////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////4eH//wAA//8AAP//AAD//wAA//8AAP//AAD///////////////////////////////////r6
+ //+Wlv//DQ3//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//zk5///Q0P//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+Hh//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//xMT/////
+ /////////////////////////////////////////////////////////////////////////////wAA
+ //8AAP//AAD//wAA//8AAP//AAD//yMj//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8REf//i4v/////////////////////
+ /////////////////////////////////////////////1pa//8AAP//AAD//wAA//8AAP//AAD//3Fx
+ //////////////////+Tk///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//4uL////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////4iI//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//1BQ///z8///////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////9/f///AAD//wAA//8AAP//AAD//wAA//+Dg///////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////Pz//8AAP//AAD//wAA//8AAP//AAD//wAA////////////////////////////////
+ /////////////+Xl//9NTf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//3d3
+ ///29v//////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////h4f//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//8TE
+ /////////////////////////////////////////////////////////////////////////////+Hh
+ //8AAP//AAD//wAA//8AAP//AAD//w0N///////////////////k5P//4eH//8fH///ExP//q6v//319
+ //8REf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//7Cw////////////////
+ //////////////////////////////////////////////r6//8REf//AAD//wAA//8AAP//AAD//wAA
+ //+/v/////////////+srP//BAT//wAA//8AAP//AAD//wAA//8AAP//AAD//2tr////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////qKj//w0N//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//MTH//+Xl////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////f3///wAA//8AAP//AAD//wAA//8AAP//o6P/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////AAD//wAA//8AAP//AAD//wAA//8AAP//////////////////////////
+ /////////////////////////////6ys//8aGv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//IiL//7y8////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////4eH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ ///Hx///////////////////////////////////////////////////////////////////////////
+ ///Pz///AAD//wAA//8AAP//AAD//wAA//8jI///////////////////////////////////////////
+ ////////8PD//4yM//8aGv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//1VV////////////////
+ ///////////////////////////////////////////////////Hx///AAD//wAA//8AAP//AAD//wAA
+ //8NDf//9vb////////Cwv//DQ3//wAA//8AAP//AAD//wAA//8AAP//AAD//0hI///6+v//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////Hx///Ghr//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//x8f/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////39///8AAP//AAD//wAA//8AAP//AAD//6Oj////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////wAA//8AAP//AAD//wAA//8AAP//AAD//+Tk////////////////
+ ////////////////////////////////////////8PD//2Zm//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//9WVv//////////////////////////////////////////////////////////
+ /////////////////////////////////////////////+Hh//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//4eH/////////////////////////////////////////////////////////////////////
+ ////////wMD//wAA//8AAP//AAD//wAA//8AAP//RET/////////////////////////////////////
+ ////////////////////////3Nz//wQE//8AAP//AAD//wAA//8AAP//AAD//xER///s7P//////////
+ ////////////////////////////////////////////////////////fHz//wAA//8AAP//AAD//wAA
+ //8AAP//T0/////////Z2f//Ghr//wAA//8AAP//AAD//wAA//8AAP//AAD//zEx///z8///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////+Xl
+ //8xMf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wgI//+lpf//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////9/f///AAD//wAA//8AAP//AAD//wAA//+jo///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////8AAP//AAD//wAA//8AAP//AAD//wAA///h4f//////////
+ ////////////////////////////////////////////////////////wMD//yoq//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//d3f/////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////h4f//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//+Hh////////////////////////////////////////////////////////////////
+ /////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//1NT////////////////////////////////
+ /////////////////////////////01N//8AAP//AAD//wAA//8AAP//AAD//wAA//+hof//////////
+ /////////////////////////////////////////////////////////////y8v//8AAP//AAD//wAA
+ //8AAP//AAD//5mZ///p6f//KSn//wAA//8AAP//AAD//wAA//8AAP//AAD//x4e///p6f//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////8/P//0xM//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//4CA////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////f3///wAA//8AAP//AAD//wAA//8AAP//o6P/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////ERH//wAA//8AAP//AAD//wAA//8AAP//4eH/////
+ ///////////////////////////////////////////////////////////////////29v//fn7//wQE
+ //8AAP//AAD//wAA//8AAP//AAD//56e////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////4eH//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA///h4f//////////////////////////////////////////////////////////
+ //////////////////+MjP//AAD//wAA//8AAP//AAD//wAA//9kZP//////////////////////////
+ /////////////////////////////6Gh//8AAP//AAD//wAA//8AAP//AAD//wAA//9FRf//////////
+ /////////////////////////////////////////////////////////////+Tk//8AAP//AAD//wAA
+ //8AAP//AAD//wAA///U1P//PDz//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N///Z2f//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////6+v//fHz//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//UFD///Pz
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////39///8AAP//AAD//wAA//8AAP//AAD//6Oj
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////yMj//8AAP//AAD//wAA//8AAP//AAD//+Hh
+ ////////////////////////////////////////////////////////////////////////////////
+ //80NP//AAD//wAA//8AAP//AAD//wAA///AwP//////////////////////////////////////////
+ /////////////////////////////////////////////////////////////8/P//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//8PD/////////////////////////////////////////////////////
+ ////////////////////////d3f//wAA//8AAP//AAD//wAA//8AAP//f3//////////////////////
+ /////////////////////////////+Xl//8REf//AAD//wAA//8AAP//AAD//wAA//8NDf//4eH/////
+ //////////////////////////////////////////////////////////////////+env//AAD//wAA
+ //8AAP//AAD//wAA//8nJ///VVX//wAA//8AAP//AAD//wAA//8AAP//AAD//wQE//+/v///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////+dnf//BAT//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8xMf//5eX/////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////9wcP//AAD//wAA//8AAP//AAD//wAA
+ //+jo///////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////8jI///AAD//wAA//8AAP//AAD//wAA
+ ///Ly///////////////////////////////////////////////////////////////////////////
+ ////////DQ3//wAA//8AAP//AAD//wAA//8AAP//4eH/////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////ExP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD/////////////////////////////////////////////////////
+ /////////////////////////////2Fh//8AAP//AAD//wAA//8AAP//AAD//5qa////////////////
+ //////////////////////////////////9NTf//AAD//wAA//8AAP//AAD//wAA//8AAP//j4//////
+ ////////////////////////////////////////////////////////////////////////Vlb//wAA
+ //8AAP//AAD//wAA//8AAP//DQ3//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+lpf//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////7+///8REf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//xoa///Hx///////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////YWH//wAA//8AAP//AAD//wAA
+ //8AAP//o6P/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////IyP//wAA//8AAP//AAD//wAA
+ //8AAP//xMT/////////////////////////////////////////////////////////////////////
+ ////////6+v//wAA//8AAP//AAD//wAA//8AAP//BAT/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////xMT//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA////////////////////////////////////////////////
+ //////////////////////////////////9MTP//AAD//wAA//8AAP//AAD//wAA//8EBP//LCz//09P
+ //9wcP//lZX//7y8///d3f////////////+hof//AAD//wAA//8AAP//AAD//wAA//8AAP//OTn///r6
+ ////////////////////////////////////////////////////////////////////////9vb//w0N
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+Dg///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////2dn//ykp//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//CAj//6Wl////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////2Fh//8AAP//AAD//wAA
+ //8AAP//AAD//6Oj////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////yws//8AAP//AAD//wAA
+ //8AAP//AAD//8TE////////////////////////////////////////////////////////////////
+ /////////////8vL//8AAP//AAD//wAA//8AAP//AAD//yws////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////8TE
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//////////////////////////////////////////
+ ////////////////////////////////////////ODj//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wQE//8sLP//DQ3//wAA//8AAP//AAD//wAA//8AAP//BAT//9TU
+ /////////////////////////////////////////////////////////////////////////////7+/
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9iYv//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////r6////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////w8P//QUH//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//gID/////////////////////////////////////
+ //////////////////////////////////////////////////////////////////9hYf//AAD//wAA
+ //8AAP//AAD//wAA//+jo///////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////9ERP//AAD//wAA
+ //8AAP//AAD//wAA///ExP//////////////////////////////////////////////////////////
+ //////////////////+rq///AAD//wAA//8AAP//AAD//wAA//9MTP//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///ExP//AAD//wAA//8AAP//AAD//wAA//8AAP//IyP/////////////////////////////////////
+ /////////////////////////////////////////////yMj//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//4KC
+ ////////////////////////////////////////////////////////////////////////////////
+ //90dP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9FRf//+vr/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////7S0//88PP//8/P/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////r6
+ //9nZ///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9QUP//8/P/////////////////////
+ ////////////////////////////////////////////////////////////////////////YWH//wAA
+ //8AAP//AAD//wAA//8AAP//o6P/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////RET//wAA
+ //8AAP//AAD//wAA//8AAP//q6v/////////////////////////////////////////////////////
+ ////////////////////////bW3//wAA//8AAP//AAD//wAA//8AAP//a2v/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////xMT//wAA//8AAP//AAD//wAA//8AAP//AAD//yMj////////////////////////////////
+ //////////////////////////////////////////////////8EBP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//yoq
+ ///29v//////////////////////////////////////////////////////////////////////////
+ ////////Kyv//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8uLv//8/P/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////Dw//8eHv//AAD//zw8///z8///////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////4+P//8EBP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//zEx///l5f//////////
+ /////////////////////////////////////////////////////////////////////////////2Fh
+ //8AAP//AAD//wAA//8AAP//AAD//6Oj////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////0RE
+ //8AAP//AAD//wAA//8AAP//AAD//6Oj////////////////////////////////////////////////
+ ///////////////////6+v//d3f//wAA//8AAP//AAD//wAA//8AAP//AAD//4yM////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////8TE//8AAP//AAD//wAA//8AAP//AAD//wAA//8jI///////////////////////////
+ ///////////////////////////////////////////////////w8P//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ ///IyP//////////////////////////////////////////////////////////////////////////
+ ////////3Nz//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//6en/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////9vb///AAD//wAA//8AAP//PDz///Pz////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////s7P//w0N//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//Ghr//8fH
+ ////////////////////////////////////////////////////////////////////////////////
+ //9hYf//AAD//wAA//8AAP//AAD//wAA///ExP//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //9ISP//AAD//wAA//8AAP//AAD//wAA//+jo///////////////////////////////////////////
+ ///////////////////z8///SEj//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+zs///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////+8vP//AAD//wAA//8AAP//AAD//wAA//8AAP//NDT/////////////////////
+ ////////////////////////////////////////////////////////9vb//6+v//+IiP//ZGT//0hI
+ //8eHv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //9vb///////////////////////////////////////////////////////////////////////////
+ /////////////5WV//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8NDf//0ND/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////AwP//AAD//wAA//8AAP//AAD//wAA//8uLv//6en/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////Q0P//Hh7//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8ICP//paX/////////////////////////////////////////////////////////////////////
+ ////////YWH//wAA//8AAP//AAD//wAA//8AAP//xMT/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////YWH//wAA//8AAP//AAD//wAA//8AAP//o6P/////////////////////////////////////
+ ///////////////////Z2f//KSn//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//2dn/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////o6P//wAA//8AAP//AAD//wAA//8AAP//AAD//0RE////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////b2///a2v//t7f//5GR//9wcP//T0///yws//8ICP//AAD//wAA//8AAP//AAD//wAA
+ //8iIv//8/P/////////////////////////////////////////////////////////////////////
+ //////////////////9LS///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8EBP//t7f/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////z8///IiL//wAA//8AAP//AAD//wAA//8AAP//AAD//ykp
+ ///p6f//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////+np//84OP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//+AgP//////////////////////////////////////////////////////////
+ /////////////2Fh//8AAP//AAD//wAA//8AAP//AAD//8TE////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////2Fh//8AAP//AAD//wAA//8AAP//AAD//4yM////////////////////////////////
+ //////////////////+7u///ERH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8EBP//nZ3/////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//wAA//9ERP//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////+Tk///AwP//np7//3d3
+ //9WVv//t7f/////////////////////////////////////////////////////////////////////
+ ///////////////////29v//CAj//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//nZ3/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////cnL//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//KSn//+np////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////8/P//1VV//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//6Ki////////////////////////////////////////////////
+ //////////////////9hYf//AAD//wAA//8AAP//AAD//wAA///ExP//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////9hYf//AAD//wAA//8AAP//AAD//wAA//9/f///////////////////////////
+ //////////////////+Tk///BAT//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//wsL/////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////+jo///AAD//wAA//8AAP//AAD//wAA//8AAP//RET/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////t7f//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//gID/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////yMj//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8iIv//2dn/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////Pz//88PP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//3R0////////////////////////////////////////////////
+ ////////////////////////YWH//wAA//8AAP//AAD//wAA//8AAP//xMT/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////YWH//wAA//8AAP//AAD//wAA//8AAP//f3//////////////////////
+ //////////////r6//9nZ///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8xMf//5eX/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA//8AAP//AAD//2Fh
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////2ho//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//XV3/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////9vb//yoq//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//xoa///Z2f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////Pz//88PP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//3R0////////////////////////////////////////////////
+ /////////////////////////////1pa//8AAP//AAD//wAA//8AAP//AAD//8TE////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////39///8AAP//AAD//wAA//8AAP//AAD//39/////////////////
+ /////////////+np//9BQf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9ZWf//8/P/////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //9hYf//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////8LC//8NDf//AAD//wAA//8AAP//AAD//wAA//8AAP//PDz///r6
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////3d3//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//Ghr//9nZ////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////Pz//88PP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//1VV///6+v//////////////////////////////////////////
+ //////////////////////////////////9ERP//AAD//wAA//8AAP//AAD//wAA///ExP//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////9/f///AAD//wAA//8AAP//AAD//wAA//9wcP//////////
+ /////////////9TU//8iIv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+IiP//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////+jo///AAD//wAA//8AAP//AAD//wAA
+ //8AAP//YWH/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////9nZ//8aGv//AAD//wAA//8AAP//AAD//wAA//8AAP//KSn///Dw
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////9DQ//8EBP//AAD//wAA//8AAP//AAD//wAA
+ //8ICP//Xl7//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//x8f/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////r6//88PP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//1VV///6+v//////////////////////////////////////////
+ ////////////////////////////////////////RET//wAA//8AAP//AAD//wAA//8AAP//xMT/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////f3///wAA//8AAP//AAD//wAA//8AAP//YWH/////
+ /////////////6+v//8NDf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N//+zs///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//3Bw////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//2Nj
+ ///29v//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////r6//8xMf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//j4////////+Li///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N///Cwv//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////r6//9VVf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//1VV///6+v//////////////////////////////////////////
+ /////////////////////////////////////////////0RE//8AAP//AAD//wAA//8AAP//AAD//8TE
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////39///8AAP//AAD//wAA//8AAP//AAD//zAw
+ //9eXv//PDz//xYW//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//yYm///U1P//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////4OD//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//9/f///////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//MTH//9nZ////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////+Cgv//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//OTn///r6/////////////5OT//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//DQ3//8LC
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////r6//9VVf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//0hI///6+v//////////////////////////////////////////
+ //////////////////////////////////////////////////9ERP//AAD//wAA//8AAP//AAD//wAA
+ ///ExP//////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////+env//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//0VF///s7P//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////9/f///AAD//wAA
+ //8AAP//AAD//wAA//8AAP//f3//////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8NDf//np7/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////Q0P//BAT//wAA//8AAP//AAD//wAA
+ //8AAP//CAj//9nZ////////////////////////k5P//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8NDf//t7f/////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////r6//9VVf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//zw8///z8///////////////////////////////////////////
+ ////////////////////////////////////////////////////////RET//wAA//8AAP//AAD//wAA
+ //8AAP//xMT/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//3Bw///6+v//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////f3///wAA
+ //8AAP//AAD//wAA//8AAP//AAD//39/////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//9ZWf//8PD/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////6+v//OTn//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//4+P//////////////////////////////////+Tk///AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wQE//+srP//////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////9ZWf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//zw8///z8///////////////////////////////////////////
+ /////////////////////////////////////////////////////////////0RE//8AAP//AAD//wAA
+ //8AAP//AAD//9ra////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////6Oj//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//52d////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////39/
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//+jo///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//xER
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//yIi///IyP//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////j4///wAA//8AAP//AAD//wAA
+ //8AAP//AAD//zY2///6+v///////////////////////////////////////6Wl//8EBP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//BAT//6ys////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////90dP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//zw8///z8///////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////9ERP//AAD//wAA
+ //8AAP//AAD//wAA///h4f//////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////+jo///AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//Ghr//8LC////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //9/f///AAD//wAA//8AAP//AAD//wAA//8AAP//o6P/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//5OT
+ ///s7P//SEj//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//4uL////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////2dn//wgI//8AAP//AAD//wAA
+ //8AAP//AAD//wQE///Q0P//////////////////////////////////////////////////rKz//wQE
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8EBP//qKj/////////////////////////////////////
+ //////////////////////////////////////////////////////////////////90dP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//ykp///z8///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////RET//wAA
+ //8AAP//AAD//wAA//8AAP//4eH/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////vLz//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//S0v//+Xl////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////f3///wAA//8AAP//AAD//wAA//8AAP//AAD//6Oj////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//5OT
+ //////////////////+Skv//CAj//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//RUX//+np
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////zk5//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//+Cgv//////////////////////////////////////////////////////////
+ //+srP//BAT//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+Tk///////////////////////////
+ //////////////////////////////////////////////////////////////////90dP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//ykp///p6f//////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////0RE
+ //8AAP//AAD//wAA//8AAP//AAD//+Hh////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////8TE
+ //8AAP//AAD//wAA//8nJ///TEz//2ho//+MjP//s7P//9bW///z8///////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////39///8AAP//AAD//wAA//8AAP//AAD//wAA//8WFv//PDz//1NT//9oaP//f3///56e
+ //+3t///z8///+Tk////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//5OT
+ /////////////////////////////9DQ//8qKv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8VFf//t7f/////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////5aW//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8xMf//+vr/////////////////////////////////////////////////////
+ /////////////6ys//8EBP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//5OT////////////////
+ //////////////////////////////////////////////////////////////////+AgP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//ykp///p6f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //9ERP//AAD//wAA//8AAP//AAD//wAA///h4f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///p6f//vLz//93d////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////9iYv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//x4e//84OP//T0///2Rk//9/f///mpr//7Oz///Ly///4eH/////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//5OT
+ ////////////////////////////////////////8/P//2tr//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//9zc///+vr/////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////+Hh//8NDf//AAD//wAA
+ //8AAP//AAD//wAA//8EBP//0ND/////////////////////////////////////////////////////
+ ////////////////////////t7f//w0N//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//k5P/////
+ //////////////////////////////////////////////////////////////////+Tk///AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//ykp///p6f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////RET//wAA//8AAP//AAD//wAA//8AAP//4eH/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////0tL//3Fx//8eHv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//Ghr//zQ0//9MTP//YWH//3p6//+Vlf//r6///8fH///h4f//+vr/////////////////////
+ /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//5OT
+ ////////////////////////////////////////////////////////rKz//xER//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//zEx///d3f//////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////9BQf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//goL/////////////////////////////////////////////////////
+ ///////////////////////////////////Cwv//DQ3//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //94eP////////////////////////////////////////////////////////////+Tk///AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//xoa///d3f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////ycn//8AAP//AAD//wAA//8AAP//AAD//+Hh////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////9zc
+ //+EhP//Jyf//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8WFv//MDD//0hI
+ //9hYf//d3f//5GR//+rq///xMT//9bW//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//6Gh
+ ///////////////////////////////////////////////////////////////////h4f//PDz//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//DQ3//6Gh////////////////////////////////
+ //////////////////////////////////////////////////////////////////+Zmf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//Kir///b2////////////////////////////////////////////////
+ /////////////////////////////////////////////8LC//8NDf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//3R0//////////////////////////////////////////////////+Tk///AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//xoa///Z2f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////8jI///AAD//wAA//8AAP//AAD//wAA///h4f//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////s7P//kJD//zs7
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//6ys
+ //////////////////////////////////////////////////////////////////////////////r6
+ //+Dg///BAT//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//WVn///Pz////////////////
+ ///////////////////////////////////////////////////////////////////l5f//ERH//wAA
+ //8AAP//AAD//wAA//8AAP//BAT//8jI////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////wsL//w0N//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//dHT///////////////////////////////////////+dnf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//xoa///Z2f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////IyP//wAA//8AAP//AAD//wAA//8AAP//4eH/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////8/P//6am//9HR///BAT//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//wQE
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//6ys
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////8PD//8iIv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8iIv//zMz/////
+ ////////////////////////////////////////////////////////////////////////TU3//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//3d3////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////MzP//Ghr//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//9dXf//+vr///////////////////////+srP//BAT//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//xER///Z2f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////yMj//8AAP//AAD//wAA//8AAP//AAD//+Hh////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////b2//+ysv//WVn//wgI//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8/P///lZX//+zs
+ ////////6+v//9bW///AwP//o6P//4OD//9ra///Vlb//0BA//8jI///BAT//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//6ys
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////8PD//1VV//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wQE
+ //+Li///////////////////////////////////////////////////////////////////oaH//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//yoq///29v//////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////9nZ
+ //8aGv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//1VV///6+v////////////+srP//BAT//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//w0N///Cwv//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////8jI///AAD//wAA//8AAP//AAD//wAA///h4f//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////wsL//2Rk//8VFf//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//MzP//4SE///k5P//////////
+ ///////////////////////////////////////////////////////////////////r6///1tb//8DA
+ //+jo///g4P//2tr//9WVv//QED//yMj//8EBP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//6ys
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////mZn//w0N//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//0VF///p6f//////////////////////////////////////////////////7Oz//xER
+ //8AAP//AAD//wAA//8AAP//AAD//wQE///IyP//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////2dn//xoa//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//VVX///r6//+srP//BAT//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//w0N///Cwv//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////IyP//wAA//8AAP//AAD//wAA//8AAP//8/P/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////9LS//95ef//Hh7//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//x4e//98fP//0tL/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////+vr///W1v//wMD//6Oj//+Dg///a2v//1ZW
+ //9AQP//IyP//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//6ys
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////Z2f//MTH//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//Ghr//7e3/////////////////////////////////////////////1VV
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//9vb///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////Z2f//Ghr//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//89Pf//BAT//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//w0N///Cwv//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////yMj//8AAP//AAD//wAA//8AAP//AAD/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////g4P//hIT//y4u//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8VFf//aWn//8fH////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////6+v//9bW///AwP//o6P//4OD//9ra///Vlb//0BA//8jI///CAj//6ys
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////b2//9zc///AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//d3f///r6/////////////////////////////6ys
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8iIv//8/P/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////93d//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wQE//+7u///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////8jI///AAD//wAA//8AAP//AAD//wAA
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////7Oz//5WV//8/P///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//DQ3//11d//+2tv//+vr/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////7e3
+ //8VFf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//81Nf//3d3//////////////////+zs
+ //8VFf//AAD//wAA//8AAP//AAD//wAA//8AAP//wMD/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////6en//ykp//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wQE//+srP//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////IyP//wAA//8AAP//AAD//wAA
+ //8AAP//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////Pz
+ //+mpv//S0v//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wQE//9OTv//pqb///Pz////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////6en//0VF//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N//+lpf//////////
+ //9iYv//AAD//wAA//8AAP//AAD//wAA//8AAP//b2//////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////p6f//KSn//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wQE//+srP//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////yMj//8AAP//AAD//wAA
+ //8AAP//AAD/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////6+v//trb//11d
+ //8NDf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//Pz///56e///s7P//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////j4///wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//15e
+ //+qqv//AAD//wAA//8AAP//AAD//wAA//8AAP//IiL///Pz////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////+np//8pKf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wQE//+srP//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////8jI///AAD//wAA
+ //8AAP//AAD//wAA////////////////////////+vr//+Hh///h4f//4eH//+Hh///h4f//4eH//+Hh
+ ///h4f//4eH//9ra///ExP//xMT//8TE///ExP//xMT//8TE///ExP//xMT//8TE//+zs///o6P//6Oj
+ //+jo///o6P//6Oj//+jo///o6P//6Oj//+jo///jIz//39///9/f///f3///39///9kZP//FRX//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//zMz
+ //+IiP//5OT/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////MzP//Jib//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//729////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////6en//zw8
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//+amv//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////DQ3//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8iIv//fHz//9XV
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////Pz//9iYv//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//2Ji////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///z8///PDz//wAA//8AAP//AAD//wAA//+Tk///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//FRX//21t///Hx///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////6io//8NDf//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//x4e///w8P//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////Pz//88PP//AAD//wAA//+Tk///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N//9dXf//u7v///r6////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////4eH//zk5
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+0tP//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////8/P//zw8//+Pj///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8ICP//UlL//6qq///29v//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///6+v//e3v//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//9iYv//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////29v//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//0ND//+env//7Oz/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////AwP//Hh7//wAA//8AAP//AAD//wAA//8aGv//8PD/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////8AAP//AAD//wAA//8AAP//AAD//wgI//8jI///IyP//yMj//8jI///IyP//yMj
+ //8jI///IyP//yMj//8jI///IyP//zg4//9ERP//RET//0RE//9ERP//RET//0RE//9ERP//RET//0RE
+ //9ERP//RET//2Fh//9hYf//YWH//2Fh//9hYf//YWH//2Fh//9hYf//YWH//2Fh//9hYf//a2v//39/
+ //9/f///f3///39///9/f///lZX//+Tk////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+zs//9RUf//AAD//wAA//8AAP//rKz/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////5aW//8ICP//VVX/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////1NT//+zs////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+
+
+
\ No newline at end of file
diff --git a/sudppipe_modified/acpdump2.h b/sudppipe_modified/acpdump2.h
new file mode 100644
index 0000000..24a8ada
--- /dev/null
+++ b/sudppipe_modified/acpdump2.h
@@ -0,0 +1,363 @@
+/*
+ Copyright 2008,2009 Luigi Auriemma
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ http://www.gnu.org/licenses/gpl-2.0.txt
+*/
+
+#include
+#include
+#include
+#include
+#include "ip2.h"
+
+#if defined ACPDUMP_LOCK && WIN32
+ #include
+ #define ACPDUMP_LOCK_VAR static LONG is_writing = 0;
+ #define ACPDUMP_LOCK_START while(InterlockedExchange(&is_writing, 1)) Sleep(0);
+ #define ACPDUMP_LOCK_END InterlockedExchange(&is_writing, 0);
+#else
+ #define ACPDUMP_LOCK_VAR
+ #define ACPDUMP_LOCK_START
+ #define ACPDUMP_LOCK_END
+#endif
+
+
+
+#define ACPDUMP_VER "0.2c"
+
+
+
+#ifdef ACPDUMP_ADDR_STRUCT // define this one if you don't have the following struct
+
+struct in_addr {
+ union {
+ struct { uint8_t s_b1,s_b2,s_b3,s_b4; } S_un_b;
+ struct { uint16_t s_w1,s_w2; } S_un_w;
+ uint32_t S_addr;
+ } S_un;
+#define s_addr S_un.S_addr
+#define s_host S_un.S_un_b.s_b2
+#define s_net S_un.S_un_b.s_b1
+#define s_imp S_un.S_un_w.s_w2
+#define s_impno S_un.S_un_b.s_b4
+#define s_lh S_un.S_un_b.s_b3
+};
+
+struct sockaddr_in {
+ int16_t sin_family;
+ uint16_t sin_port;
+ struct in_addr sin_addr;
+ char sin_zero[8];
+};
+
+struct sockaddr {
+ uint16_t sa_family;
+ char sa_data[14];
+};
+
+#endif
+
+struct timevalx {
+ int32_t tv_sec;
+ int32_t tv_usec;
+};
+
+
+
+uint32_t str2ip(uint8_t *data) {
+ unsigned a, b, c, d;
+
+ if(!data[0]) return(0);
+ sscanf((char *)data, "%u.%u.%u.%u", &a, &b, &c, &d);
+ return((a & 0xff) | ((b & 0xff) << 8) | ((c & 0xff) << 16) | ((d & 0xff) << 24));
+}
+
+
+
+uint8_t *ip2str(uint32_t ip) {
+ static uint8_t data[16];
+
+ sprintf((char *)data, "%u.%u.%u.%u",
+ (ip & 0xff), ((ip >> 8) & 0xff), ((ip >> 16) & 0xff), ((ip >> 24) & 0xff));
+ return(data);
+}
+
+
+uint16_t net16(uint16_t num) {
+ int endian = 1; // big endian
+
+ if(!*(char *)&endian) return(num);
+ return((num << 8) | (num >> 8));
+}
+
+
+
+uint32_t net32(uint32_t num) {
+ int endian = 1; // big endian
+
+ if(!*(char *)&endian) return(num);
+ return(((num & 0xff000000) >> 24) |
+ ((num & 0x00ff0000) >> 8) |
+ ((num & 0x0000ff00) << 8) |
+ ((num & 0x000000ff) << 24));
+}
+
+
+
+uint16_t in_cksum(void *data, int len, uint32_t *ret_sum) {
+ uint32_t sum = 0;
+ int i = len >> 1,
+ endian = 1; // big endian
+ uint16_t crc,
+ *p = (uint16_t *)data;
+
+ if(*(char *)&endian) endian = 0;
+ if(ret_sum) sum = *ret_sum;
+ while(i--) sum += *p++;
+ if(len & 1) sum += *p & (endian ? 0xff00 : 0xff);
+ if(ret_sum) *ret_sum = sum;
+ crc = sum = (sum >> 16) + (sum & 0xffff);
+ if(sum >>= 16) crc += sum;
+ if(!endian) crc = (crc >> 8) | (crc << 8);
+ return(~crc);
+}
+
+
+
+void putxx(FILE *fd, uint32_t num, int bits) {
+ int i,
+ bytes;
+
+ bytes = bits >> 3;
+ for(i = 0; i < bytes; i++) {
+ fputc(num >> (i << 3), fd);
+ }
+}
+
+
+
+void create_acp(FILE *fd) {
+ if(!fd) return;
+ putxx(fd, 0xa1b2c3d4, 32);
+ putxx(fd, 2, 16);
+ putxx(fd, 4, 16);
+ putxx(fd, 0, 32);
+ putxx(fd, 0, 32);
+ putxx(fd, 65535, 32);
+ putxx(fd, 1, 32);
+ fflush(fd);
+}
+
+
+
+void acp_dump(FILE *fd, int type, int protocol, uint32_t src_ip, uint16_t src_port, uint32_t dst_ip, uint16_t dst_port, uint8_t *data, int len, uint32_t *seq1, uint32_t *ack1, uint32_t *seq2, uint32_t *ack2) {
+ ACPDUMP_LOCK_VAR
+ struct {
+ struct timevalx ts;
+ uint32_t caplen;
+ uint32_t len;
+ } acp_pck;
+ static const uint8_t ethdata[14] =
+ "\x00\x00\x00\x00\x00\x00" /* dest */
+ "\x00\x00\x00\x00\x00\x00" /* source */
+ "\x08\x00"; /* type */
+ udph_pseudo udp_ps;
+ uint32_t crc;
+ iph ip;
+ udph udp;
+ tcph tcp;
+ icmph icmp;
+ igmph igmp;
+ int size,
+ tpsize,
+ close_tcp;
+ uint8_t *tp;
+
+ if(!fd) return;
+ if(!type && !protocol) {
+ protocol = 6;
+ } else if((type == 1) && !protocol) {
+ protocol = 6;
+ } else if((type == 2) && !protocol) {
+ protocol = 17;
+ } else if((type == 3) && !protocol) {
+ protocol = 255;
+ }
+ tp = NULL;
+ tpsize = 0;
+ if(type == 3) {
+ // SOCK_RAW
+ } else if(protocol == 6) {
+ tp = (uint8_t *)&tcp;
+ tpsize = sizeof(tcph);
+ } else if(protocol == 17) {
+ tp = (uint8_t *)&udp;
+ tpsize = sizeof(udph);
+ } else if(protocol == 1) {
+ tp = (uint8_t *)&icmp;
+ tpsize = sizeof(icmph);
+ } else if(protocol == 2) {
+ tp = (uint8_t *)&igmp;
+ tpsize = sizeof(igmph);
+ }
+
+ close_tcp = 0;
+ if(len < 0) {
+ close_tcp = 1;
+ len = 0;
+ }
+
+ if((type == 3) && (protocol == 255)) {
+ // SOCK_RAW, IPPROTO_RAW
+ size = len;
+ } else {
+ size = sizeof(iph) + tpsize + len;
+ }
+
+ if((sizeof(acp_pck) + sizeof(ethdata) + size) > 0xffff) { // divides the packet if it's too big
+ size = len; // use size as new "len" so acp_dump can be called with the same arguments
+ if((type == 3) && (protocol == 255)) {
+ len = 0xffff - (sizeof(acp_pck) + sizeof(ethdata));
+ } else {
+ len = 0xffff - (sizeof(acp_pck) + sizeof(ethdata) + sizeof(iph) + tpsize);
+ }
+ while(size > 0) {
+ if(size < len) len = size;
+ acp_dump(fd, type, protocol, src_ip, src_port, dst_ip, dst_port, data, len, seq1, ack1, seq2, ack2);
+ size -= len;
+ data += len;
+ }
+ return;
+ }
+
+ // use the following if gettimeofday doesn't exist on Windows
+ acp_pck.ts.tv_sec = time(NULL);
+ //acp_pck.ts.tv_usec = GetTickCount();
+
+ acp_pck.caplen = sizeof(ethdata) + size;
+ acp_pck.len = sizeof(ethdata) + size;
+
+ ip.ihl_ver = 0x45;
+ ip.tos = 0;
+ ip.tot_len = net16(size);
+ ip.id = net16(1);
+ ip.frag_off = net16(0);
+ ip.ttl = 128;
+ ip.protocol = protocol;
+ ip.check = net16(0);
+ ip.saddr = src_ip;
+ ip.daddr = dst_ip;
+ ip.check = net16(in_cksum((uint8_t *)&ip, sizeof(iph), NULL));
+
+ if(!tp) {
+ // SOCK_RAW
+ } else if(protocol == 6) {
+ tcp.source = src_port;
+ tcp.dest = dst_port;
+ tcp.seq = net32(*seq1);
+ tcp.ack_seq = net32(*ack1);
+ tcp.doff = sizeof(tcph) << 2;
+ if(close_tcp) {
+ tcp.flags = TH_RST | TH_FIN | TH_ACK;
+ } else if((*seq1 == 1) && (*ack1 == 0)) {
+ tcp.flags = TH_SYN;
+ } else if((*seq1 == 1) && (*ack1 == 2)) {
+ tcp.flags = TH_SYN | TH_ACK;
+ } else if((*seq1 == 2) && (*ack1 == 2) && !data) {
+ tcp.flags = TH_ACK;
+ } else {
+ tcp.flags = TH_PSH | TH_ACK;
+ *ack2 = *seq1;
+ (*seq1) += len;
+ }
+ tcp.window = net16(65535);
+ tcp.check = net16(0);
+ tcp.urg_ptr = net16(0);
+
+ } else if(protocol == 17) {
+ udp.source = src_port;
+ udp.dest = dst_port;
+ udp.check = net16(0);
+ udp.len = net16(sizeof(udph) + len);
+
+ udp_ps.saddr = ip.saddr;
+ udp_ps.daddr = ip.daddr;
+ udp_ps.zero = 0;
+ udp_ps.protocol = 17;
+ udp_ps.length = udp.len;
+ crc = 0; in_cksum(&udp_ps, sizeof(udph_pseudo), &crc);
+ in_cksum(&udp, sizeof(udph), &crc);
+ udp.check = net16(in_cksum(data, len, &crc));
+
+ } else if(protocol == 1) {
+ memset(&icmp, 0, sizeof(icmph));
+ icmp.icmp_type = 8;
+ icmp.icmp_code = 0;
+ crc = 0; in_cksum(&icmp, sizeof(udph_pseudo), &crc);
+ icmp.icmp_cksum = net16(in_cksum(data, len, &crc));
+
+ } else if(protocol == 2) {
+ igmp.igmp_type = 0x11;
+ igmp.igmp_code = 0;
+ igmp.igmp_cksum = net16(0);
+ igmp.igmp_group = net32(0);
+ crc = 0; in_cksum(&igmp, sizeof(udph_pseudo), &crc);
+ igmp.igmp_cksum = net16(in_cksum(data, len, &crc));
+ }
+
+ ACPDUMP_LOCK_START
+ fwrite(&acp_pck, sizeof(acp_pck), 1, fd);
+ fwrite(ethdata, sizeof(ethdata), 1, fd);
+ if(!((type == 3) && (protocol == 255))) {
+ fwrite(&ip, sizeof(iph), 1, fd);
+ }
+ if(tp) fwrite(tp, tpsize, 1, fd);
+ fwrite(data, len, 1, fd);
+ fflush(fd);
+ ACPDUMP_LOCK_END
+}
+
+
+
+void acp_dump_handshake(FILE *fd, int type, int protocol, uint32_t src_ip, uint16_t src_port, uint32_t dst_ip, uint16_t dst_port, uint8_t *data, int len, uint32_t *seq1, uint32_t *ack1, uint32_t *seq2, uint32_t *ack2) {
+ if(!fd) return;
+ if(!seq1 || !ack1 || !seq2 || !ack2) return;
+
+ *seq1 = 0; // useless initialization
+ *ack1 = 0;
+ *seq2 = 0;
+ *ack2 = 0;
+ if(!((!type && !protocol) || ((type == 1) && !protocol) || (protocol == 6))) {
+ return; // if it's not tcp don't make handshake
+ }
+
+ *seq1 = 1;
+ *ack1 = 0;
+ acp_dump(fd, type, protocol, src_ip, src_port, dst_ip, dst_port, NULL, 0, seq1, ack1, seq2, ack2);
+
+ *ack2 = *seq1 + 1;
+ *seq2 = 1;
+ acp_dump(fd, type, protocol, dst_ip, dst_port, src_ip, src_port, NULL, 0, seq2, ack2, seq1, ack1);
+
+ *ack1 = *seq2 + 1;
+ (*seq1)++;
+ acp_dump(fd, type, protocol, src_ip, src_port, dst_ip, dst_port, data, len, seq1, ack1, seq2, ack2);
+
+ (*seq2)++;
+}
+
+
diff --git a/sudppipe_modified/ip2.h b/sudppipe_modified/ip2.h
new file mode 100644
index 0000000..00e048f
--- /dev/null
+++ b/sudppipe_modified/ip2.h
@@ -0,0 +1,138 @@
+/*
+ Copyright 2008,2009 Luigi Auriemma
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ http://www.gnu.org/licenses/gpl-2.0.txt
+*/
+
+#define TH_FIN 0x01
+#define TH_SYN 0x02
+#define TH_RST 0x04
+#define TH_PSH 0x08
+#define TH_ACK 0x10
+#define TH_URG 0x20
+#define TH_ECN 0x40
+#define TH_CWR 0x80
+
+
+
+#pragma pack(1)
+
+typedef struct {
+ uint8_t ihl_ver;
+ uint8_t tos;
+ uint16_t tot_len;
+ uint16_t id;
+ uint16_t frag_off;
+ uint8_t ttl;
+ uint8_t protocol;
+ uint16_t check;
+ uint32_t saddr;
+ uint32_t daddr;
+} iph;
+
+typedef struct {
+ uint16_t source;
+ uint16_t dest;
+ uint16_t len;
+ uint16_t check;
+} udph;
+
+typedef struct {
+ uint32_t saddr;
+ uint32_t daddr;
+ uint8_t zero;
+ uint8_t protocol;
+ uint16_t length;
+} udph_pseudo;
+
+typedef struct {
+ uint16_t source;
+ uint16_t dest;
+ uint32_t seq;
+ uint32_t ack_seq;
+ uint8_t doff;
+ uint8_t flags;
+ uint16_t window;
+ uint16_t check;
+ uint16_t urg_ptr;
+} tcph;
+
+typedef struct {
+ uint8_t icmp_type;
+ uint8_t icmp_code;
+ uint16_t icmp_cksum;
+ union {
+ uint8_t ih_pptr;
+ uint32_t ih_gwaddr;
+ struct {
+ uint16_t icd_id;
+ uint16_t icd_seq;
+ } ih_idseq;
+ uint32_t ih_void;
+ struct {
+ uint16_t ipm_void;
+ uint16_t ipm_nextmtu;
+ } ih_pmtu;
+ struct {
+ uint8_t irt_num_addrs;
+ uint8_t irt_wpa;
+ uint16_t irt_lifetime;
+ } ih_rtradv;
+ } icmp_hun;
+ #define icmp_pptr icmp_hun.ih_pptr
+ #define icmp_gwaddr icmp_hun.ih_gwaddr
+ #define icmp_id icmp_hun.ih_idseq.icd_id
+ #define icmp_seq icmp_hun.ih_idseq.icd_seq
+ #define icmp_void icmp_hun.ih_void
+ #define icmp_pmvoid icmp_hun.ih_pmtu.ipm_void
+ #define icmp_nextmtu icmp_hun.ih_pmtu.ipm_nextmtu
+ #define icmp_num_addrs icmp_hun.ih_rtradv.irt_num_addrs
+ #define icmp_wpa icmp_hun.ih_rtradv.irt_wpa
+ #define icmp_lifetime icmp_hun.ih_rtradv.irt_lifetime
+ union {
+ struct {
+ uint32_t its_otime;
+ uint32_t its_rtime;
+ uint32_t its_ttime;
+ } id_ts;
+ struct {
+ iph idi_ip;
+ } id_ip;
+ struct {
+ uint32_t ira_addr;
+ uint32_t ira_preference;
+ } id_radv;
+ uint32_t id_mask;
+ uint8_t id_data[1];
+ } icmp_dun;
+ #define icmp_otime icmp_dun.id_ts.its_otime
+ #define icmp_rtime icmp_dun.id_ts.its_rtime
+ #define icmp_ttime icmp_dun.id_ts.its_ttime
+ #define icmp_ip icmp_dun.id_ip.idi_ip
+ #define icmp_radv icmp_dun.id_radv
+ #define icmp_mask icmp_dun.id_mask
+ #define icmp_data icmp_dun.id_data
+} icmph;
+
+typedef struct {
+ uint8_t igmp_type;
+ uint8_t igmp_code;
+ uint16_t igmp_cksum;
+ uint32_t igmp_group;
+} igmph;
+
+#pragma pack()
diff --git a/sudppipe_modified/show_dump.h b/sudppipe_modified/show_dump.h
new file mode 100644
index 0000000..7548eaf
--- /dev/null
+++ b/sudppipe_modified/show_dump.h
@@ -0,0 +1,68 @@
+/*
+
+Show_dump 0.1.1a
+
+ Copyright 2004,2005,2006 Luigi Auriemma
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ http://www.gnu.org/licenses/gpl.txt
+
+This function, optimized for performace, shows the hex dump of a buffer and
+places it in a stream
+
+Usage:
+ show_dump(buffer, buffer_length, stdout);
+ show_dump(buffer, buffer_length, fd);
+*/
+
+#include
+
+
+
+void show_dump(unsigned char *data, unsigned int len, FILE *stream) {
+ const static char hex[] = "0123456789abcdef";
+ static unsigned char buff[67]; /* HEX CHAR\n */
+ unsigned char chr,
+ *bytes,
+ *p,
+ *limit,
+ *glimit = data + len;
+
+ memset(buff + 2, ' ', 48);
+
+ while(data < glimit) {
+ limit = data + 16;
+ if(limit > glimit) {
+ limit = glimit;
+ memset(buff, ' ', 48);
+ }
+
+ p = buff;
+ bytes = p + 50;
+ while(data < limit) {
+ chr = *data;
+ *p++ = hex[chr >> 4];
+ *p++ = hex[chr & 15];
+ p++;
+ *bytes++ = ((chr < ' ') || (chr >= 0x7f)) ? '.' : chr;
+ data++;
+ }
+ *bytes++ = '\n';
+
+ fwrite(buff, bytes - buff, 1, stream);
+ }
+}
+
diff --git a/sudppipe_modified/sudppipe.c b/sudppipe_modified/sudppipe.c
new file mode 100644
index 0000000..8d81e64
--- /dev/null
+++ b/sudppipe_modified/sudppipe.c
@@ -0,0 +1,741 @@
+/*
+ Copyright 2005,2006,2007,2008,2009 Luigi Auriemma
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ http://www.gnu.org/licenses/gpl-2.0.txt
+*/
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include "acpdump2.h"
+#include "show_dump.h"
+
+#ifdef WIN32
+ #include
+ #include "winerr.h"
+
+ #define close closesocket
+ #define in_addr_t uint32_t
+ #define LOADDLL hLib = LoadLibrary(fname); \
+ if(!hLib) winerr();
+ #define GETFUNC(x,y) x = (void *)GetProcAddress(hLib, y); \
+ if(!quiet) printf(" %-10s %p\n", y, x);
+ //if(!x) winerr();
+ #define CLOSEDLL FreeLibrary(hLib);
+ #define set_priority SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS)
+ HINSTANCE hLib = NULL;
+
+ void winerr(void);
+#else
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include // -ldl
+
+ #define LOADDLL hLib = dlopen(fname, RTLD_LAZY); \
+ if(!hLib) { \
+ fprintf(stderr, "\nError: %s\n\n", dlerror()); \
+ exit(1); \
+ }
+ #define GETFUNC(x,y) x = (void *)dlsym(hLib, y); \
+ if(!quiet) printf(" %-10s %08x\n", y, (uint32_t)x);
+ //error = dlerror();
+ //if(error || !x) {
+ //fprintf(stderr, "\nError: %s\n\n", error);
+ //exit(1);
+ #define CLOSEDLL dlclose(hLib);
+ #define set_priority nice(-10)
+ void *hLib = NULL;
+ #define SOCKET int
+ #define SOCKET_ERROR (-1)
+#endif
+
+typedef uint8_t u8;
+typedef uint16_t u16;
+typedef uint32_t u32;
+
+
+
+#define VER "0.4.1"
+#define BUFFSZ 0xffff
+#define RECVFROMF(X) \
+ psz = sizeof(struct sockaddr_in); \
+ len = recvfrom(X, buff, BUFFSZ, 0, (struct sockaddr *)&peerl, &psz); \
+ if(len < 0) continue;
+#define SENDTOFC(X,Y) \
+ if(sendtof(sdl, buff, len, &c->peer, X) != len) { \
+ c = check_sd(&c->peer, 1); /* it's ever c->peer */ \
+ Y; \
+ if(!c) break; \
+ }
+
+#ifndef IP_TOS
+ #define IP_TOS 3
+#endif
+
+
+
+// default: __cdecl
+static int (* sudp_init)(u8 *) = NULL; // initialization
+static int (* sudp_pck)(u8 *, int) = NULL; // modification of the packet
+static int (* sudp_vis)(u8 *, int) = NULL; // modification for visualization only
+
+//static SOCKET (*mysocket)(int af, int type, int protocol) = NULL;
+//static int (*myconnect)(SOCKET s, const struct sockaddr *name, int namelen) = NULL;
+//static SOCKET (*myaccept)(SOCKET s, const struct sockaddr *name, int *namelen) = NULL;
+//static int (*mybind)(SOCKET s, const struct sockaddr *name, int namelen) = NULL;
+//static int (*myclose)(SOCKET s) = NULL;
+//static int (*myrecv)(SOCKET s, char *buf, int len, int flags) = NULL;
+static int (*myrecvfrom)(SOCKET s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen) = NULL;
+//static int (*mysend)(SOCKET s, char **retbuf, int len, int flags) = NULL;
+static int (*mysendto)(SOCKET s, char **retbuf, int len, int flags, const struct sockaddr *to, int tolen) = NULL;
+
+
+
+struct clients_struct {
+ int sd; // it's needed to use a different source port for each packet
+ struct sockaddr_in peer;
+ time_t timez;
+ struct clients_struct *next;
+} *clients = NULL;
+
+struct sockaddr_in *dhost = NULL;
+in_addr_t lhost = INADDR_ANY,
+ Lhost = INADDR_ANY;
+int multisock = 0,
+ samesock = 0,
+ quiet = 0,
+ timeout = 60; // NAT uses a timeout of 5 minutes (300 seconds)
+
+
+
+int sendtof(int s, char *buf, int len, struct sockaddr_in *to, int do_mysendto);
+int bind_udp_socket(struct sockaddr_in *peer, in_addr_t iface, u16 port);
+struct clients_struct *check_sd(struct sockaddr_in *peer, int force_remove);
+struct sockaddr_in *create_peer_array(u8 *list, u16 default_port);
+void show_peer_array(u8 *str, struct sockaddr_in *peer);
+void loaddll(u8 *fname, u8 *par);
+in_addr_t resolv(char *host);
+void std_err(void);
+
+
+
+int main(int argc, char *argv[]) {
+ struct clients_struct *c = NULL,
+ *tmpc;
+ struct sockaddr_in peerl,
+ peer0,
+ *psrc = NULL,
+ *pdst = NULL;
+ struct timeval tout;
+ FILE *fdcap = NULL;
+ fd_set readset;
+ int sdl = 0,
+ sdi = 0,
+ sd0 = 0,
+ selsock = 0,
+ i,
+ len = 0,
+ psz = 0,
+ hexdump = 0,
+ t,
+ everyone = 0,
+ priority = 0;
+ u16 port,
+ lport,
+ inject = 0;
+ u8 tmp[16],
+ *buff = NULL,
+ *acpfile = NULL,
+ *dllname = NULL,
+ *dllpar = NULL;
+
+#ifdef WIN32
+ WSADATA wsadata;
+ WSAStartup(MAKEWORD(1,0), &wsadata);
+#endif
+
+ setbuf(stdout, NULL);
+ setbuf(stderr, NULL);
+ if(argc < 4) {
+ fputs("\n"
+ "Simple UDP proxy/pipe "VER"\n"
+ "by Luigi Auriemma\n"
+ "e-mail: aluigi@autistici.org\n"
+ "web: aluigi.org\n"
+ "\n", stderr);
+
+
+ printf("\n"
+ "Usage: %s [options] \n"
+ "\n"
+ "Options:\n"
+ "-x show the hex dump of each packet\n"
+ "-a FILE create a CAP (tcpdump) file in which storing all the packets\n"
+ "-b IP bind only the input interface identified with IP\n"
+ "-B IP as above but works only for the outgoing socket, this means you can\n"
+ " decide to use a secondary interface for connecting to the host (for\n"
+ " example using a wireless connection instead of the main one)\n"
+ "-l LIB load a dll/so file which will be used to process all the incoming\n"
+ " packets. The library must contain the following __cdecl functions:\n"
+ " int sudp_init(char *data); // if you need initialization\n"
+ " int sudp_pck(char *data, int len); // each packet goes here\n"
+ " int sudp_vis(char *data, int len); // for visualization only\n"
+ " int myrecvfrom(...cut...); // proxocket plugin\n"
+ " int mysendto(...cut...); // proxocket plugin\n"
+ "-L PAR parameter for the initialization of the above function,\n"
+ " if the plugin library supports parameters use -L \"\" for help/list\n"
+ "-e forward each packet to anyone (clients and server) except the sender,\n"
+ " it works just like a chat or a broadcaster\n"
+ "-i PORT injection option, listen on the port PORT and each packet received\n"
+ " here is sent to the server from all the connected clients\n"
+ "-X in case of multiple hosts assigns a new socket to each client, this\n"
+ " is useful if the hosts are the same for using multiple source ports\n"
+ "-Y just the opposite of the above one, ANY client has the same port\n"
+ "-t SECS seconds of inactivity after which closing the client socket (%d)\n"
+ "-p increase process priority\n"
+ "-q quiet output\n"
+ "\n"
+ "* can be also a sequence of hostnames and IP addresses separated by\n"
+ " comma to which will be sent and received all the packets at the same time.\n"
+ " can also contain the port using the syntax IP:PORT, such port will\n"
+ " override the default one set by .\n"
+ " if is 0 the tool will consider as a local port and\n"
+ " will act just like a double binding mode (experimental!)\n"
+ "\n", argv[0], timeout);
+ exit(1);
+ }
+
+ argc -= 3;
+ for(i = 1; i < argc; i++) {
+ if(((argv[i][0] != '-') && (argv[i][0] != '/')) || (strlen(argv[i]) != 2)) {
+ printf("\nError: wrong argument (%s)\n", argv[i]);
+ exit(1);
+ }
+ switch(argv[i][1]) {
+ case 'x': hexdump = 1; break;
+ case 'a': acpfile = argv[++i]; break;
+ case 'b': lhost = resolv(argv[++i]); break;
+ case 'B': Lhost = resolv(argv[++i]); break;
+ case 'l': dllname = argv[++i]; break;
+ case 'L': dllpar = argv[++i]; break;
+ case 'e': everyone = 1; break;
+ case 'i': inject = atoi(argv[++i]); break;
+ case 'p': priority = 1; break;
+ case 'q': quiet = 1; break;
+ case 'X': multisock = 1; break;
+ case 'Y': samesock = 1; break;
+ case 't': timeout = atoi(argv[++i]); break;
+ default: {
+ fprintf(stderr, "\nError: wrong command-line argument (%s)\n\n", argv[i]);
+ exit(1);
+ } break;
+ }
+ }
+
+ port = atoi(argv[argc + 1]);
+ lport = atoi(argv[argc + 2]);
+ dhost = create_peer_array(argv[argc], port);
+
+ if(lhost == INADDR_NONE) std_err();
+ if(Lhost == INADDR_NONE) std_err();
+
+ sdl = bind_udp_socket(NULL, lhost, lport);
+
+ if(inject) sdi = bind_udp_socket(NULL, lhost, inject);
+
+ if(samesock) {
+ if(!quiet) fprintf(stderr, "- same socket/port mode\n");
+ samesock = bind_udp_socket(NULL, Lhost, 0);
+ }
+ if(multisock) {
+ if(!quiet) fprintf(stderr, "- multi socket/port mode\n");
+ }
+
+ if(!quiet) {
+ if(dhost[0].sin_addr.s_addr) {
+ show_peer_array("- remote hosts: ", dhost);
+ } else {
+ fprintf(stderr, "- double binding\n");
+ fprintf(stderr, "- dest_port %hu\n", port);
+ }
+ }
+
+ if(dllname) loaddll(dllname, dllpar);
+
+ if(acpfile) {
+ if(!quiet) printf("- create ACP file %s\n", acpfile);
+ fdcap = fopen(acpfile, "rb");
+ if(fdcap) {
+ fclose(fdcap);
+ fprintf(stderr, "- do you want to overwrite (Y) or append (A) the file? (y/a/N)\n ");
+ fgets(tmp, sizeof(tmp), stdin);
+ t = tmp[0];
+ if(t == 'a') {
+ } else if(t == 'y') {
+ } else return(0);
+ } else {
+ t = 0;
+ }
+ fdcap = fopen(acpfile, (t == 'a') ? "ab" : "wb");
+ if(!fdcap) std_err();
+ if(t != 'a') create_acp(fdcap);
+ }
+
+ if(priority) set_priority;
+
+ if(!dhost[0].sin_addr.s_addr) {
+ sd0 = bind_udp_socket(&peer0, Lhost, port);
+ printf("- wait first packet from the server (double-binding mode)\n");
+ FD_ZERO(&readset); // wait first client's packet, this is NEEDED!
+ FD_SET(sd0, &readset);
+ if(select(sd0 + 1, &readset, NULL, NULL, NULL)
+ < 0) std_err();
+ }
+
+ printf("- ready\n");
+ FD_ZERO(&readset); // wait first client's packet, this is NEEDED!
+ FD_SET(sdl, &readset);
+ if(select(sdl + 1, &readset, NULL, NULL, NULL)
+ < 0) std_err();
+
+ buff = malloc(BUFFSZ);
+ if(!buff) std_err();
+ clients = NULL;
+
+ for(;;) {
+ FD_ZERO(&readset);
+ FD_SET(sdl, &readset);
+ selsock = sdl;
+ if(sd0) {
+ FD_SET(sd0, &readset);
+ if(sd0 > selsock) selsock = sd0;
+ }
+ if(sdi) {
+ FD_SET(sdi, &readset);
+ if(sdi > selsock) selsock = sdi;
+ }
+ for(c = clients; c; c = c->next) {
+ FD_SET(c->sd, &readset);
+ if(c->sd > selsock) selsock = c->sd;
+ }
+
+ tout.tv_sec = timeout; // this is useful if we want to free memory
+ tout.tv_usec = 0; // ...rarely used but I think it's good here
+ t = select(selsock + 1, &readset, NULL, NULL, &tout);
+ if(t < 0) std_err();
+ if(!t) { // timeout reached, call check_sd for removing the old clients
+ memset(&peerl, 0, sizeof(struct sockaddr_in));
+ check_sd(&peerl, 0);
+ continue;
+ }
+
+ if(sdi && (FD_ISSET(sdi, &readset))) {
+ RECVFROMF(sdi)
+
+ if(!quiet) printf("- packet injection from %s:%hu (%d bytes)\n",
+ inet_ntoa(peerl.sin_addr), ntohs(peerl.sin_port), len);
+
+ psrc = &peerl;
+ pdst = &dhost[0]; // the first one is enough, it's used only for the CAP file
+
+ if(sudp_pck) len = sudp_pck(buff, len); // packets modification
+
+ for(c = clients; c; c = c->next) {
+ if(sd0) sendtof(sd0, buff, len, &peer0, 1);
+ for(i = 0; dhost[i].sin_addr.s_addr; i++) {
+ sendtof(c->sd, buff, len, &dhost[i], 1);
+ }
+ }
+
+ if(everyone) {
+ for(c = clients; c; c = c->next) {
+ SENDTOFC(1,)
+ }
+ }
+
+ } else if(sd0 && FD_ISSET(sd0, &readset)) { // experimental and useless
+ RECVFROMF(sd0)
+
+ psrc = &peerl;
+ pdst = &peer0; // yes it's wrong but it's not necessary
+
+ if(sudp_pck) len = sudp_pck(buff, len); // packets modification
+
+ for(c = clients; c; c = c->next) {
+ SENDTOFC(1,)
+ }
+
+ if(everyone) {
+ // nothing to do here
+ }
+ } else if(FD_ISSET(sdl, &readset)) {
+ RECVFROMF(sdl)
+
+ c = check_sd(&peerl, 0); // check if this is a new or existent client
+ if(!c) continue;
+
+ psrc = &c->peer;
+ pdst = &dhost[0]; // the first one is enough, it's used only for the CAP file
+
+ if(sudp_pck) len = sudp_pck(buff, len); // packets modification
+
+ if(sd0) sendtof(sd0, buff, len, &peer0, 1);
+ if(multisock) {
+ i = 0;
+ for(c = clients; c; c = c->next) {
+ if(!dhost[i].sin_addr.s_addr) break;
+ if(memcmp(&c->peer, &peerl, sizeof(struct sockaddr_in))) continue;
+ sendtof(c->sd, buff, len, &dhost[i], 1);
+ i++;
+ }
+ } else {
+ for(i = 0; dhost[i].sin_addr.s_addr; i++) {
+ sendtof(c->sd, buff, len, &dhost[i], 1);
+ }
+ }
+
+ if(everyone) {
+ tmpc = c;
+ for(c = clients; c; c = c->next) {
+ if(c == tmpc) continue;
+ SENDTOFC(1,)
+ }
+ }
+ } else {
+ for(c = clients; c; c = c->next) {
+ if(!FD_ISSET(c->sd, &readset)) continue;
+ RECVFROMF(c->sd)
+
+ psrc = &peerl;
+ pdst = &c->peer;
+
+ if(sudp_pck) len = sudp_pck(buff, len); // packets modification
+ if(myrecvfrom) len = myrecvfrom(c->sd, buff, len, 0, (struct sockaddr *)psrc, &psz);
+
+ SENDTOFC(0, pdst = NULL) // like SENDTOFC but without the handling of mysendto
+
+ if(everyone || samesock) {
+ tmpc = c;
+ for(c = clients; c; c = c->next) {
+ if(c == tmpc) continue;
+ SENDTOFC(1,)
+ }
+ }
+ break;
+ }
+ }
+
+ if(!psrc || !pdst) continue; // the following is only for visualization
+
+ if(fdcap) acp_dump(
+ fdcap, SOCK_DGRAM, IPPROTO_UDP,
+ psrc->sin_addr.s_addr, psrc->sin_port, pdst->sin_addr.s_addr, pdst->sin_port,
+ buff, len,
+ NULL, NULL, NULL, NULL);
+
+ if(sudp_vis) len = sudp_vis(buff, len);
+
+ if(hexdump) {
+ if(!quiet) {
+ printf("\n%s:%hu -> ", inet_ntoa(psrc->sin_addr), ntohs(psrc->sin_port));
+ printf("%s:%hu\n", inet_ntoa(pdst->sin_addr), ntohs(pdst->sin_port));
+ }
+ show_dump(buff, len, stdout);
+ }
+ }
+
+ close(sdl);
+ if(sdi) close(sdi);
+ if(sd0) close(sd0);
+ if(fdcap) fclose(fdcap);
+ if(hLib) CLOSEDLL
+ free(buff);
+ return(0);
+}
+
+
+
+int sendtof(int s, char *buf, int len, struct sockaddr_in *to, int do_mysendto) {
+ int oldlen = 0,
+ ret;
+ char *oldbuf = NULL;
+
+ if(!do_mysendto) {
+ return(sendto(s, buf, len, 0, (struct sockaddr *)to, sizeof(struct sockaddr_in)));
+ }
+
+ if(mysendto) {
+ oldbuf = buf;
+ oldlen = len;
+ ret = mysendto(s, &buf, len, 0, (struct sockaddr *)to, sizeof(struct sockaddr_in));
+ if(ret >= 0) {
+ // call real function
+ } else if(ret == SOCKET_ERROR) {
+ goto quit_and_free;
+ } else {
+ ret = oldlen;
+ goto quit_and_free;
+ }
+ len = ret;
+ }
+ ret = sendto(s, buf, len, 0, (struct sockaddr *)to, sizeof(struct sockaddr_in));
+quit_and_free:
+ if(mysendto) {
+ if(oldbuf != buf) free(buf);
+ if(ret == len) ret = oldlen;
+ }
+ return(ret);
+}
+
+
+
+struct clients_struct *check_sd(struct sockaddr_in *peer, int force_remove) {
+ struct clients_struct *c,
+ *tmp,
+ *prev,
+ *ret;
+ time_t curr;
+ int multi = 0;
+
+ curr = time(NULL);
+ prev = NULL;
+ ret = NULL;
+
+ for(c = clients; c; ) {
+ if((c->peer.sin_addr.s_addr == peer->sin_addr.s_addr) && (c->peer.sin_port == peer->sin_port)) {
+ c->timez = curr;
+ ret = c;
+ if(force_remove) {
+ c->timez = (curr - timeout) - 1;
+ ret = prev;
+ }
+ }
+ if((curr - c->timez) >= timeout) {
+ if(!quiet) printf("- remove %s:%hu\n",
+ inet_ntoa(c->peer.sin_addr), ntohs(c->peer.sin_port));
+
+ tmp = c->next;
+ if(samesock) {
+ // do NOT close c->sd!
+ } else {
+ close(c->sd);
+ }
+ free(c);
+ if(prev) { // second, third and so on
+ prev->next = tmp;
+ } else { // the first only
+ clients = tmp;
+ }
+ c = tmp; // already the next
+ } else {
+ prev = c;
+ c = c->next; // get the next
+ }
+ }
+
+ if(force_remove) return(ret);
+ if(ret) return(ret);
+ if((peer->sin_addr.s_addr == INADDR_ANY) || (peer->sin_addr.s_addr == INADDR_NONE) || !peer->sin_port) return(NULL);
+
+multisock_doit:
+ c = malloc(sizeof(struct clients_struct));
+ if(!c) return(NULL);
+ if(prev) {
+ prev->next = c;
+ } else {
+ clients = c;
+ }
+
+ if(samesock) {
+ c->sd = samesock;
+ } else {
+ c->sd = bind_udp_socket(NULL, Lhost, 0);
+ }
+ memcpy(&c->peer, peer, sizeof(struct sockaddr_in));
+ c->timez = curr;
+ c->next = NULL;
+
+ if(!quiet) printf("- add %s:%hu\n",
+ inet_ntoa(c->peer.sin_addr), ntohs(c->peer.sin_port));
+
+ if(multisock) {
+ prev = c;
+ multi++;
+ if(dhost[multi].sin_addr.s_addr) goto multisock_doit;
+ }
+
+ return(c);
+}
+
+
+
+struct sockaddr_in *create_peer_array(u8 *list, u16 default_port) {
+ struct sockaddr_in *ret;
+ int i,
+ size = 1;
+ u16 port;
+ u8 *p1,
+ *p2;
+
+ for(p2 = list; (p1 = strchr(p2, ',')); size++, p2 = p1 + 1);
+
+ ret = calloc(size + 1, sizeof(struct sockaddr_in));
+ if(!ret) std_err();
+
+ for(i = 0;;) {
+ p1 = strchr(list, ',');
+ if(p1) *p1 = 0;
+
+ port = default_port;
+ p2 = strchr(list, ':');
+ if(p2) {
+ *p2 = 0;
+ port = atoi(p2 + 1);
+ }
+
+ while(*list == ' ') list++;
+ ret[i].sin_addr.s_addr = resolv(list);
+ ret[i].sin_port = htons(port);
+ ret[i].sin_family = AF_INET;
+
+ i++;
+ if(!p1) break;
+ list = p1 + 1;
+ }
+ return(ret);
+}
+
+
+
+void show_peer_array(u8 *str, struct sockaddr_in *peer) {
+ int i;
+
+ fputs(str, stderr);
+ for(i = 0; peer[i].sin_addr.s_addr; i++) {
+ if(i) fprintf(stderr, ", ");
+ fprintf(stderr, "%s:%hu", inet_ntoa(peer[i].sin_addr), ntohs(peer[i].sin_port));
+ }
+ fputc('\n', stderr);
+}
+
+
+
+int bind_udp_socket(struct sockaddr_in *peer, in_addr_t iface, u16 port) {
+ struct sockaddr_in peer_tmp;
+ int sd;
+ static const int
+ on = 1,
+ tos = 0x10;
+ static const struct
+ linger ling = {1,1};
+
+ if(!peer) peer = &peer_tmp;
+ peer->sin_addr.s_addr = iface;
+ peer->sin_port = htons(port);
+ peer->sin_family = AF_INET;
+
+ if((iface != INADDR_ANY) || port) {
+ if(!quiet) printf("- bind UDP port %hu on interface %s\n",
+ ntohs(peer->sin_port), inet_ntoa(peer->sin_addr));
+ }
+
+ sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ if(sd < 0) std_err();
+ setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on));
+ if(bind(sd, (struct sockaddr *)peer, sizeof(struct sockaddr_in))
+ < 0) std_err();
+
+ setsockopt(sd, SOL_SOCKET, SO_LINGER, (char *)&ling, sizeof(ling));
+ setsockopt(sd, SOL_SOCKET, SO_BROADCAST, (char *)&on, sizeof(on));
+ setsockopt(sd, IPPROTO_IP, IP_TOS, (char *)&tos, sizeof(tos));
+ return(sd);
+}
+
+
+
+void loaddll(u8 *fname, u8 *par) {
+ if(!fname) return;
+
+ printf("- load library %s\n", fname);
+
+ LOADDLL;
+ GETFUNC(sudp_init, "sudp_init");
+ GETFUNC(sudp_pck, "sudp_pck");
+ GETFUNC(sudp_vis, "sudp_vis");
+ GETFUNC(myrecvfrom, "myrecvfrom");
+ GETFUNC(mysendto, "mysendto");
+
+ if(sudp_init && sudp_init(par)) {
+ fprintf(stderr, "\nError: plugin initialization failed\n\n");
+ CLOSEDLL
+ exit(1);
+ }
+}
+
+
+
+in_addr_t resolv(char *host) {
+ struct hostent *hp;
+ in_addr_t host_ip;
+
+ host_ip = inet_addr(host);
+ if(host_ip == INADDR_NONE) {
+ hp = gethostbyname(host);
+ if(!hp) {
+ fprintf(stderr, "\nError: unable to resolv hostname (%s)\n", host);
+ exit(1);
+ } else host_ip = *(in_addr_t *)hp->h_addr;
+ }
+ return(host_ip);
+}
+
+
+
+#ifndef WIN32
+ void std_err(void) {
+ perror("\nError");
+ exit(1);
+ }
+#else
+void winerr(void) {
+ char *error;
+
+ if(!FormatMessage(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL,
+ GetLastError(),
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (LPTSTR)&error,
+ 0,
+ NULL)) {
+ error = strerror(errno);
+ }
+ printf("\nError: %s\n", error);
+ //LocalFree(error);
+ exit(1);
+}
+#endif
+
+
diff --git a/sudppipe_modified/winerr.h b/sudppipe_modified/winerr.h
new file mode 100644
index 0000000..edfc525
--- /dev/null
+++ b/sudppipe_modified/winerr.h
@@ -0,0 +1,71 @@
+/*
+ Header file used for manage errors in Windows
+ It support socket and errno too
+ (this header replace the previous sock_errX.h)
+*/
+
+#include
+#include
+
+
+
+void std_err(void) {
+ char *error;
+
+ switch(WSAGetLastError()) {
+ case 10004: error = "Interrupted system call"; break;
+ case 10009: error = "Bad file number"; break;
+ case 10013: error = "Permission denied"; break;
+ case 10014: error = "Bad address"; break;
+ case 10022: error = "Invalid argument (not bind)"; break;
+ case 10024: error = "Too many open files"; break;
+ case 10035: error = "Operation would block"; break;
+ case 10036: error = "Operation now in progress"; break;
+ case 10037: error = "Operation already in progress"; break;
+ case 10038: error = "Socket operation on non-socket"; break;
+ case 10039: error = "Destination address required"; break;
+ case 10040: error = "Message too long"; break;
+ case 10041: error = "Protocol wrong type for socket"; break;
+ case 10042: error = "Bad protocol option"; break;
+ case 10043: error = "Protocol not supported"; break;
+ case 10044: error = "Socket type not supported"; break;
+ case 10045: error = "Operation not supported on socket"; break;
+ case 10046: error = "Protocol family not supported"; break;
+ case 10047: error = "Address family not supported by protocol family"; break;
+ case 10048: error = "Address already in use"; break;
+ case 10049: error = "Can't assign requested address"; break;
+ case 10050: error = "Network is down"; break;
+ case 10051: error = "Network is unreachable"; break;
+ case 10052: error = "Net dropped connection or reset"; break;
+ case 10053: error = "Software caused connection abort"; break;
+ case 10054: error = "Connection reset by peer"; break;
+ case 10055: error = "No buffer space available"; break;
+ case 10056: error = "Socket is already connected"; break;
+ case 10057: error = "Socket is not connected"; break;
+ case 10058: error = "Can't send after socket shutdown"; break;
+ case 10059: error = "Too many references, can't splice"; break;
+ case 10060: error = "Connection timed out"; break;
+ case 10061: error = "Connection refused"; break;
+ case 10062: error = "Too many levels of symbolic links"; break;
+ case 10063: error = "File name too long"; break;
+ case 10064: error = "Host is down"; break;
+ case 10065: error = "No Route to Host"; break;
+ case 10066: error = "Directory not empty"; break;
+ case 10067: error = "Too many processes"; break;
+ case 10068: error = "Too many users"; break;
+ case 10069: error = "Disc Quota Exceeded"; break;
+ case 10070: error = "Stale NFS file handle"; break;
+ case 10091: error = "Network SubSystem is unavailable"; break;
+ case 10092: error = "WINSOCK DLL Version out of range"; break;
+ case 10093: error = "Successful WSASTARTUP not yet performed"; break;
+ case 10071: error = "Too many levels of remote in path"; break;
+ case 11001: error = "Host not found"; break;
+ case 11002: error = "Non-Authoritative Host not found"; break;
+ case 11003: error = "Non-Recoverable errors: FORMERR, REFUSED, NOTIMP"; break;
+ case 11004: error = "Valid name, no data record of requested type"; break;
+ default: error = strerror(errno); break;
+ }
+ fprintf(stderr, "\nError: %s\n", error);
+ exit(1);
+}
+