From ccd4b3cd02dc706382f08c35a26ea656d98d0929 Mon Sep 17 00:00:00 2001 From: MayNL Date: Tue, 30 Jun 2026 11:47:30 -0400 Subject: [PATCH] Renamed Audio PCK members to in game names --- PCK-Studio/Controls/Editor/PckEditor.cs | 6 +- .../Forms/Editor/AudioEditor.Designer.cs | 83 ++- PCK-Studio/Forms/Editor/AudioEditor.cs | 182 +++--- PCK-Studio/Forms/Editor/AudioEditor.resx | 616 +++++++++--------- PckStudio.Core/FileFormats/PckAudioFile.cs | 74 +-- .../IO/PckAudio/PckAudioFileReader.cs | 12 +- .../IO/PckAudio/PckAudioFileWriter.cs | 10 +- 7 files changed, 466 insertions(+), 517 deletions(-) diff --git a/PCK-Studio/Controls/Editor/PckEditor.cs b/PCK-Studio/Controls/Editor/PckEditor.cs index 14879a4c..78d7645a 100644 --- a/PCK-Studio/Controls/Editor/PckEditor.cs +++ b/PCK-Studio/Controls/Editor/PckEditor.cs @@ -981,9 +981,9 @@ namespace PckStudio.Controls private static PckAudioFile CreateNewAudioFile() { PckAudioFile audioFile = new PckAudioFile(); - audioFile.AddCategory(PckAudioFile.AudioCategory.EAudioType.Overworld); - audioFile.AddCategory(PckAudioFile.AudioCategory.EAudioType.Nether); - audioFile.AddCategory(PckAudioFile.AudioCategory.EAudioType.End); + audioFile.AddTrackList(PckAudioFile.AudioTrackList.EAudioType.Overworld); + audioFile.AddTrackList(PckAudioFile.AudioTrackList.EAudioType.Nether); + audioFile.AddTrackList(PckAudioFile.AudioTrackList.EAudioType.End); return audioFile; } diff --git a/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs b/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs index a89cca7d..7118e326 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs @@ -32,25 +32,25 @@ namespace PckStudio.Forms.Editor this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AudioEditor)); this.trackListTreeView = new System.Windows.Forms.TreeView(); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.trackListContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); this.addCategoryStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.removeCategoryStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.changeCategoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.catImages = new System.Windows.Forms.ImageList(this.components); + this.trackListIcons = new System.Windows.Forms.ImageList(this.components); this.menuStrip = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.trackTreeView = new System.Windows.Forms.TreeView(); - this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.trackContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); this.addEntryMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.editEntryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.removeEntryMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.playOverworldInCreative = new MetroFramework.Controls.MetroCheckBox(); this.compressionUpDown = new System.Windows.Forms.NumericUpDown(); this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); - this.contextMenuStrip1.SuspendLayout(); + this.trackListContextMenuStrip.SuspendLayout(); this.menuStrip.SuspendLayout(); - this.contextMenuStrip2.SuspendLayout(); + this.trackContextMenuStrip.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.compressionUpDown)).BeginInit(); this.SuspendLayout(); // @@ -58,54 +58,54 @@ namespace PckStudio.Forms.Editor // resources.ApplyResources(this.trackListTreeView, "trackListTreeView"); this.trackListTreeView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.trackListTreeView.ContextMenuStrip = this.contextMenuStrip1; + this.trackListTreeView.ContextMenuStrip = this.trackListContextMenuStrip; this.trackListTreeView.ForeColor = System.Drawing.Color.White; - this.trackListTreeView.ImageList = this.catImages; + this.trackListTreeView.ImageList = this.trackListIcons; this.trackListTreeView.LabelEdit = true; this.trackListTreeView.Name = "trackListTreeView"; - this.trackListTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); - this.trackListTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView1_KeyDown); + this.trackListTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.trackListTreeView_AfterSelect); + this.trackListTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.trackListTreeView_KeyDown); // - // contextMenuStrip1 + // trackListContextMenuStrip // - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.trackListContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.addCategoryStripMenuItem, this.removeCategoryStripMenuItem, this.changeCategoryToolStripMenuItem}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - resources.ApplyResources(this.contextMenuStrip1, "contextMenuStrip1"); + this.trackListContextMenuStrip.Name = "contextMenuStrip1"; + resources.ApplyResources(this.trackListContextMenuStrip, "trackListContextMenuStrip"); // // addCategoryStripMenuItem // - resources.ApplyResources(this.addCategoryStripMenuItem, "addCategoryStripMenuItem"); this.addCategoryStripMenuItem.Name = "addCategoryStripMenuItem"; - this.addCategoryStripMenuItem.Click += new System.EventHandler(this.addCategoryStripMenuItem_Click); + resources.ApplyResources(this.addCategoryStripMenuItem, "addCategoryStripMenuItem"); + this.addCategoryStripMenuItem.Click += new System.EventHandler(this.addTrackListStripMenuItem_Click); // // removeCategoryStripMenuItem // this.removeCategoryStripMenuItem.Name = "removeCategoryStripMenuItem"; resources.ApplyResources(this.removeCategoryStripMenuItem, "removeCategoryStripMenuItem"); - this.removeCategoryStripMenuItem.Click += new System.EventHandler(this.removeCategoryStripMenuItem_Click); + this.removeCategoryStripMenuItem.Click += new System.EventHandler(this.removeTrackListStripMenuItem_Click); // // changeCategoryToolStripMenuItem // this.changeCategoryToolStripMenuItem.Name = "changeCategoryToolStripMenuItem"; resources.ApplyResources(this.changeCategoryToolStripMenuItem, "changeCategoryToolStripMenuItem"); - this.changeCategoryToolStripMenuItem.Click += new System.EventHandler(this.setCategoryToolStripMenuItem_Click); + this.changeCategoryToolStripMenuItem.Click += new System.EventHandler(this.setTrackListToolStripMenuItem_Click); // - // catImages + // trackListIcons // - this.catImages.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("catImages.ImageStream"))); - this.catImages.TransparentColor = System.Drawing.Color.Transparent; - this.catImages.Images.SetKeyName(0, "0_overworld.png"); - this.catImages.Images.SetKeyName(1, "1_nether.png"); - this.catImages.Images.SetKeyName(2, "2_end.png"); - this.catImages.Images.SetKeyName(3, "3_creative.png"); - this.catImages.Images.SetKeyName(4, "4_menu.png"); - this.catImages.Images.SetKeyName(5, "5_mg01.png"); - this.catImages.Images.SetKeyName(6, "6_mg02.png"); - this.catImages.Images.SetKeyName(7, "7_mg03.png"); - this.catImages.Images.SetKeyName(8, "8_mg04.png"); + this.trackListIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("trackListIcons.ImageStream"))); + this.trackListIcons.TransparentColor = System.Drawing.Color.Transparent; + this.trackListIcons.Images.SetKeyName(0, "0_overworld.png"); + this.trackListIcons.Images.SetKeyName(1, "1_nether.png"); + this.trackListIcons.Images.SetKeyName(2, "2_end.png"); + this.trackListIcons.Images.SetKeyName(3, "3_creative.png"); + this.trackListIcons.Images.SetKeyName(4, "4_menu.png"); + this.trackListIcons.Images.SetKeyName(5, "5_mg01.png"); + this.trackListIcons.Images.SetKeyName(6, "6_mg02.png"); + this.trackListIcons.Images.SetKeyName(7, "7_mg03.png"); + this.trackListIcons.Images.SetKeyName(8, "8_mg04.png"); // // menuStrip // @@ -134,27 +134,27 @@ namespace PckStudio.Forms.Editor this.trackTreeView.AllowDrop = true; resources.ApplyResources(this.trackTreeView, "trackTreeView"); this.trackTreeView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.trackTreeView.ContextMenuStrip = this.contextMenuStrip2; + this.trackTreeView.ContextMenuStrip = this.trackContextMenuStrip; this.trackTreeView.ForeColor = System.Drawing.Color.White; this.trackTreeView.Name = "trackTreeView"; this.trackTreeView.DragDrop += new System.Windows.Forms.DragEventHandler(this.Binka_DragDrop); this.trackTreeView.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView2_DragEnter); this.trackTreeView.DoubleClick += new System.EventHandler(this.trackTreeView_DoubleClick); - this.trackTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView2_KeyDown); + this.trackTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.trackTreeView_KeyDown); // - // contextMenuStrip2 + // trackContextMenuStrip // - this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.trackContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.addEntryMenuItem, this.editEntryToolStripMenuItem, this.removeEntryMenuItem}); - this.contextMenuStrip2.Name = "contextMenuStrip1"; - resources.ApplyResources(this.contextMenuStrip2, "contextMenuStrip2"); + this.trackContextMenuStrip.Name = "contextMenuStrip1"; + resources.ApplyResources(this.trackContextMenuStrip, "trackContextMenuStrip"); // // addEntryMenuItem // - resources.ApplyResources(this.addEntryMenuItem, "addEntryMenuItem"); this.addEntryMenuItem.Name = "addEntryMenuItem"; + resources.ApplyResources(this.addEntryMenuItem, "addEntryMenuItem"); this.addEntryMenuItem.Click += new System.EventHandler(this.addEntryMenuItem_Click); // // editEntryToolStripMenuItem @@ -224,11 +224,10 @@ namespace PckStudio.Forms.Editor this.Style = MetroFramework.MetroColorStyle.Silver; this.Theme = MetroFramework.MetroThemeStyle.Dark; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.AudioEditor_FormClosing); - this.Shown += new System.EventHandler(this.AudioEditor_Shown); - this.contextMenuStrip1.ResumeLayout(false); + this.trackListContextMenuStrip.ResumeLayout(false); this.menuStrip.ResumeLayout(false); this.menuStrip.PerformLayout(); - this.contextMenuStrip2.ResumeLayout(false); + this.trackContextMenuStrip.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.compressionUpDown)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -242,13 +241,13 @@ namespace PckStudio.Forms.Editor private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem1; private System.Windows.Forms.TreeView trackTreeView; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ContextMenuStrip trackListContextMenuStrip; private System.Windows.Forms.ToolStripMenuItem removeCategoryStripMenuItem; private System.Windows.Forms.ToolStripMenuItem addCategoryStripMenuItem; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip2; + private System.Windows.Forms.ContextMenuStrip trackContextMenuStrip; private System.Windows.Forms.ToolStripMenuItem addEntryMenuItem; private System.Windows.Forms.ToolStripMenuItem removeEntryMenuItem; - private System.Windows.Forms.ImageList catImages; + private System.Windows.Forms.ImageList trackListIcons; private MetroFramework.Controls.MetroCheckBox playOverworldInCreative; private System.Windows.Forms.NumericUpDown compressionUpDown; private MetroFramework.Controls.MetroLabel metroLabel1; diff --git a/PCK-Studio/Forms/Editor/AudioEditor.cs b/PCK-Studio/Forms/Editor/AudioEditor.cs index af171210..ecd6cfcd 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.cs +++ b/PCK-Studio/Forms/Editor/AudioEditor.cs @@ -24,9 +24,8 @@ namespace PckStudio.Forms.Editor public partial class AudioEditor : EditorForm { public string defaultType = "yes"; - MainForm parent = null; - private static readonly List Categories = new List + private static readonly List TrackLists = new List { "Overworld", "Nether", @@ -40,7 +39,7 @@ namespace PckStudio.Forms.Editor /* If the SetMusicID function within the game is ever set to 0x9, * it actually plays a tracklist for MG04, with all of the Creative - * Tracks and the "MG04_01.binka" file in it. The 9th category is MG04 - May + * Tracks and the "MG04_01.binka" file in it. The 9th track list ID is MG04 - May */ }; @@ -52,15 +51,15 @@ namespace PckStudio.Forms.Editor SetUpTree(); } - private string GetCategoryFromId(PckAudioFile.AudioCategory.EAudioType categoryId) - => categoryId >= PckAudioFile.AudioCategory.EAudioType.Overworld && - categoryId <= PckAudioFile.AudioCategory.EAudioType.BuildOff - ? Categories[(int)categoryId] + private string GetTrackListFromId(PckAudioFile.AudioTrackList.EAudioType trackListID) + => trackListID >= PckAudioFile.AudioTrackList.EAudioType.Overworld && + trackListID <= PckAudioFile.AudioTrackList.EAudioType.BuildOff + ? TrackLists[(int)trackListID] : "Not valid"; - private PckAudioFile.AudioCategory.EAudioType GetCategoryId(string category) + private PckAudioFile.AudioTrackList.EAudioType GetTrackListId(string trackList) { - return (PckAudioFile.AudioCategory.EAudioType)Categories.IndexOf(category); + return (PckAudioFile.AudioTrackList.EAudioType)TrackLists.IndexOf(trackList); } public void SetUpTree() @@ -68,60 +67,42 @@ namespace PckStudio.Forms.Editor trackListTreeView.BeginUpdate(); trackListTreeView.Nodes.Clear(); - foreach (PckAudioFile.AudioCategory category in EditorValue.Categories) + foreach (PckAudioFile.AudioTrackList trackList in EditorValue.TrackLists) { - // fix songs with directories using backslash instead of forward slash - // Songs with a backslash instead of a forward slash would not play in RPCS3 - foreach (string songname in category.SongNames.FindAll(s => s.Contains('\\'))) - category.SongNames[category.SongNames.IndexOf(songname)] = songname.Replace('\\', '/'); + // fix tracks with directories using backslash instead of forward slash + // Tracks with a backslash instead of a forward slash would not play in RPCS3 + foreach (string trackName in trackList.TrackNames.FindAll(s => s.Contains('\\'))) + trackList.TrackNames[trackList.TrackNames.IndexOf(trackName)] = trackName.Replace('\\', '/'); - if (category.AudioType == PckAudioFile.AudioCategory.EAudioType.Creative) + if (trackList.AudioType == PckAudioFile.AudioTrackList.EAudioType.Creative) { - if (category.Name == "include_overworld" && - EditorValue.TryGetCategory(PckAudioFile.AudioCategory.EAudioType.Overworld, out PckAudioFile.AudioCategory overworldCategory)) + if (trackList.Name == "include_overworld" && + EditorValue.TryGetTrackList(PckAudioFile.AudioTrackList.EAudioType.Overworld, out PckAudioFile.AudioTrackList overworldTrackList)) { - foreach (var name in category.SongNames.ToList()) + foreach (var name in trackList.TrackNames.ToList()) { - if (overworldCategory.SongNames.Contains(name)) - category.SongNames.Remove(name); + if (overworldTrackList.TrackNames.Contains(name)) + trackList.TrackNames.Remove(name); } playOverworldInCreative.Checked = true; } playOverworldInCreative.Visible = true; } - TreeNode treeNode = new TreeNode(GetCategoryFromId(category.AudioType), (int)category.AudioType, (int)category.AudioType); - treeNode.Tag = category; + TreeNode treeNode = new TreeNode(GetTrackListFromId(trackList.AudioType), (int)trackList.AudioType, (int)trackList.AudioType); + treeNode.Tag = trackList; trackListTreeView.Nodes.Add(treeNode); } - playOverworldInCreative.Enabled = EditorValue.HasCategory(PckAudioFile.AudioCategory.EAudioType.Creative); + playOverworldInCreative.Enabled = EditorValue.HasTrackList(PckAudioFile.AudioTrackList.EAudioType.Creative); trackListTreeView.EndUpdate(); } - private void verifyFileLocationToolStripMenuItem_Click(object sender, EventArgs e) - { - /* - if (treeView1.SelectedNode == null || treeView2.SelectedNode == null) - return; - TreeNode entry = treeView2.SelectedNode; - - string fileName = Path.Combine(parent., entry.Text + ".binka"); - - if (File.Exists(fileName)) - MessageBox.Show(this, $"\"{entry.Text}.binka\" exists in the \"Data\" folder", "File found"); - else - MessageBox.Show(this, $"\"{entry.Text}.binka\" does not exist in the \"Data\" folder. The game will crash when attempting to load this track.", "File missing"); - */ - - // Disabling this for now until location stuff is fixed - } - - private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) + private void trackListTreeView_AfterSelect(object sender, TreeViewEventArgs e) { trackTreeView.Nodes.Clear(); - if (e.Node.Tag is PckAudioFile.AudioCategory category) + if (e.Node.Tag is PckAudioFile.AudioTrackList trackList) { - foreach (var name in category.SongNames) + foreach (var name in trackList.TrackNames) { trackTreeView.Nodes.Add(name); } @@ -130,80 +111,80 @@ namespace PckStudio.Forms.Editor trackTreeView.SelectedNode = trackTreeView.Nodes[0]; } - private void addCategoryStripMenuItem_Click(object sender, EventArgs e) + private void addTrackListStripMenuItem_Click(object sender, EventArgs e) { - string[] available = Categories.FindAll(str => !EditorValue.HasCategory(GetCategoryId(str))).ToArray(); + string[] available = TrackLists.FindAll(str => !EditorValue.HasTrackList(GetTrackListId(str))).ToArray(); // array needed for popup form down below if (available.Length == 0) { - MessageBox.Show(this, "There are no more categories that could be added", "All possible categories are used"); + MessageBox.Show(this, "There are no more track lists that could be added", "All possible track lists are used"); } using ItemSelectionPopUp add = new ItemSelectionPopUp(available); if (add.ShowDialog(this) != DialogResult.OK) return; - EditorValue.AddCategory(GetCategoryId(add.SelectedItem)); - PckAudioFile.AudioCategory category = EditorValue.GetCategory(GetCategoryId(add.SelectedItem)); + EditorValue.AddTrackList(GetTrackListId(add.SelectedItem)); + PckAudioFile.AudioTrackList trackList = EditorValue.GetTrackList(GetTrackListId(add.SelectedItem)); - if (GetCategoryId(add.SelectedItem) == PckAudioFile.AudioCategory.EAudioType.Creative) + if (GetTrackListId(add.SelectedItem) == PckAudioFile.AudioTrackList.EAudioType.Creative) { playOverworldInCreative.Visible = true; playOverworldInCreative.Checked = false; } - TreeNode treeNode = new TreeNode(GetCategoryFromId(category.AudioType), (int)category.AudioType, (int)category.AudioType); - treeNode.Tag = category; + TreeNode treeNode = new TreeNode(GetTrackListFromId(trackList.AudioType), (int)trackList.AudioType, (int)trackList.AudioType); + treeNode.Tag = trackList; trackListTreeView.Nodes.Add(treeNode); SetUpTree(); } - private void addTrack(PckAudioFile.AudioCategory category, String trackname) + private void addTrack(PckAudioFile.AudioTrackList trackList, String trackname) { - category.SongNames.Add(trackname); + trackList.TrackNames.Add(trackname); trackTreeView.Nodes.Add(trackname); } private void addEntryMenuItem_Click(object sender, EventArgs e) { - if (trackListTreeView.SelectedNode is TreeNode t && t.Tag is PckAudioFile.AudioCategory category) + if (trackListTreeView.SelectedNode is TreeNode t && t.Tag is PckAudioFile.AudioTrackList trackList) { TextPrompt audioEntry = new TextPrompt(); - audioEntry.contextLabel.Text = "Please enter the relative file path without an extension. (i.e; \"music/song\" => \"DLC/{Pack}/Data/music/song.binka\")"; + audioEntry.contextLabel.Text = "Please enter the relative file path without an extension. (i.e; \"music/track\" => \"DLC/{Pack}/Data/music/track.binka\")"; audioEntry.LabelText = "Path"; audioEntry.OKButtonText = "Add"; if (audioEntry.ShowDialog() == DialogResult.OK) { - addTrack(category, audioEntry.NewText); + addTrack(trackList, audioEntry.NewText); } } } private void editEntryToolStripMenuItem_Click(object sender, EventArgs e) { - if (trackListTreeView.SelectedNode is TreeNode t && t.Tag is PckAudioFile.AudioCategory category && trackTreeView.SelectedNode is TreeNode track) + if (trackListTreeView.SelectedNode is TreeNode t && t.Tag is PckAudioFile.AudioTrackList trackList && trackTreeView.SelectedNode is TreeNode track) { TextPrompt audioEntry = new TextPrompt(track.Text); - audioEntry.contextLabel.Text = "Please enter the relative file path without an extension. (i.e; \"music/song\" => \"DLC/{Pack}/Data/music/song.binka\")"; + audioEntry.contextLabel.Text = "Please enter the relative file path without an extension. (i.e; \"music/track\" => \"DLC/{Pack}/Data/music/track.binka\")"; audioEntry.LabelText = "Path"; audioEntry.OKButtonText = "Save"; if (audioEntry.ShowDialog() == DialogResult.OK) { - int index = category.SongNames.IndexOf(track.Text); + int index = trackList.TrackNames.IndexOf(track.Text); if (index != -1) // Check if the item was found { - track.Text = category.SongNames[index] = audioEntry.NewText; + track.Text = trackList.TrackNames[index] = audioEntry.NewText; } } } } - private void removeCategoryStripMenuItem_Click(object sender, EventArgs e) + private void removeTrackListStripMenuItem_Click(object sender, EventArgs e) { if (trackListTreeView.SelectedNode is TreeNode main && - EditorValue.RemoveCategory(GetCategoryId(trackListTreeView.SelectedNode.Text))) + EditorValue.RemoveTrackList(GetTrackListId(trackListTreeView.SelectedNode.Text))) { - if(GetCategoryId(trackListTreeView.SelectedNode.Text) == PckAudioFile.AudioCategory.EAudioType.Creative) + if(GetTrackListId(trackListTreeView.SelectedNode.Text) == PckAudioFile.AudioTrackList.EAudioType.Creative) { playOverworldInCreative.Visible = false; playOverworldInCreative.Checked = false; @@ -213,13 +194,13 @@ namespace PckStudio.Forms.Editor } } - private void treeView1_KeyDown(object sender, KeyEventArgs e) + private void trackListTreeView_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Delete) - removeCategoryStripMenuItem_Click(sender, e); + removeTrackListStripMenuItem_Click(sender, e); } - public void treeView2_KeyDown(object sender, KeyEventArgs e) + public void trackTreeView_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Delete) removeEntryMenuItem_Click(sender, e); @@ -227,66 +208,59 @@ namespace PckStudio.Forms.Editor private void removeEntryMenuItem_Click(object sender, EventArgs e) { - if (trackTreeView.SelectedNode != null && trackListTreeView.SelectedNode.Tag is PckAudioFile.AudioCategory category) + if (trackTreeView.SelectedNode != null && trackListTreeView.SelectedNode.Tag is PckAudioFile.AudioTrackList trackList) { - category.SongNames.Remove(trackTreeView.SelectedNode.Text); + trackList.TrackNames.Remove(trackTreeView.SelectedNode.Text); trackTreeView.SelectedNode.Remove(); } } private void Binka_DragDrop(object sender, DragEventArgs e) { - if (trackListTreeView.SelectedNode is TreeNode t && t.Tag is PckAudioFile.AudioCategory category) + if (trackListTreeView.SelectedNode is TreeNode t && t.Tag is PckAudioFile.AudioTrackList trackList) { foreach(String s in (string[])e.Data.GetData(DataFormats.FileDrop, false)) { - addTrack(category, Path.GetFileNameWithoutExtension(s)); + addTrack(trackList, Path.GetFileNameWithoutExtension(s)); } } } private void saveToolStripMenuItem1_Click(object sender, EventArgs e) { - if (!EditorValue.HasCategory(PckAudioFile.AudioCategory.EAudioType.Overworld) || - !EditorValue.HasCategory(PckAudioFile.AudioCategory.EAudioType.Nether) || - !EditorValue.HasCategory(PckAudioFile.AudioCategory.EAudioType.End)) + if (!EditorValue.HasTrackList(PckAudioFile.AudioTrackList.EAudioType.Overworld) || + !EditorValue.HasTrackList(PckAudioFile.AudioTrackList.EAudioType.Nether) || + !EditorValue.HasTrackList(PckAudioFile.AudioTrackList.EAudioType.End)) { - MessageBox.Show(this, "Your changes were not saved. The game will crash when loading your pack if the Overworld, Nether and End categories don't all exist with at least one valid song.", "Mandatory Categories Missing"); + MessageBox.Show(this, "Your changes were not saved. The game will crash when loading your pack if an Overworld, Nether and End track list don't all exist with at least one valid track.", "Mandatory Track Lists Missing"); return; } - PckAudioFile.AudioCategory overworldCategory = EditorValue.GetCategory(PckAudioFile.AudioCategory.EAudioType.Overworld); + PckAudioFile.AudioTrackList overworldTrackList = EditorValue.GetTrackList(PckAudioFile.AudioTrackList.EAudioType.Overworld); - bool songs_missing = false; - foreach (PckAudioFile.AudioCategory category in EditorValue.Categories) + foreach (PckAudioFile.AudioTrackList trackList in EditorValue.TrackLists) { - if (category.SongNames.Count < 1) + if (trackList.TrackNames.Count < 1) { - MessageBox.Show(this, "The game will crash upon loading your pack if any of the categories are empty. Please remove or occupy the category.", "Empty Category"); + MessageBox.Show(this, "The game will crash upon loading your pack if any of the track lists are empty. Please remove or occupy the track list.", "Empty Track List"); return; } - category.Name = ""; - if (playOverworldInCreative.Checked && category.AudioType == PckAudioFile.AudioCategory.EAudioType.Creative) + trackList.Name = ""; + if (playOverworldInCreative.Checked && trackList.AudioType == PckAudioFile.AudioTrackList.EAudioType.Creative) { - foreach (var name in overworldCategory.SongNames) + foreach (var name in overworldTrackList.TrackNames) { - if (!category.SongNames.Contains(name)) + if (!trackList.TrackNames.Contains(name)) { - category.SongNames.Add(name); + trackList.TrackNames.Add(name); Console.WriteLine(name); } } - category.Name = "include_overworld"; + trackList.Name = "include_overworld"; } } - if (songs_missing) - { - MessageBox.Show(this, "Failed to save AudioData file because there are missing song entries", "Error"); - return; - } - Save(); DialogResult = DialogResult.OK; } @@ -296,20 +270,12 @@ namespace PckStudio.Forms.Editor e.Effect = DragDropEffects.All; } - private void AudioEditor_Shown(object sender, EventArgs e) + private void setTrackListToolStripMenuItem_Click(object sender, EventArgs e) { - if (Owner.Owner is MainForm p) - parent = p; - else - Close(); - } - - private void setCategoryToolStripMenuItem_Click(object sender, EventArgs e) - { - if (!(trackListTreeView.SelectedNode is TreeNode t && t.Tag is PckAudioFile.AudioCategory category)) + if (!(trackListTreeView.SelectedNode is TreeNode t && t.Tag is PckAudioFile.AudioTrackList trackList)) return; - string[] available = Categories.FindAll(str => !EditorValue.HasCategory(GetCategoryId(str))).ToArray(); + string[] available = TrackLists.FindAll(str => !EditorValue.HasTrackList(GetTrackListId(str))).ToArray(); if (available.Length > 0) { using ItemSelectionPopUp add = new ItemSelectionPopUp(available); @@ -317,19 +283,19 @@ namespace PckStudio.Forms.Editor if (add.ShowDialog(this) != DialogResult.OK) return; - EditorValue.RemoveCategory(category.AudioType); + EditorValue.RemoveTrackList(trackList.AudioType); - EditorValue.AddCategory(category.parameterType, GetCategoryId(add.SelectedItem), category.AudioType == PckAudioFile.AudioCategory.EAudioType.Overworld && playOverworldInCreative.Checked ? "include_overworld" : ""); + EditorValue.AddTrackList(trackList.parameterType, GetTrackListId(add.SelectedItem), trackList.AudioType == PckAudioFile.AudioTrackList.EAudioType.Overworld && playOverworldInCreative.Checked ? "include_overworld" : ""); - PckAudioFile.AudioCategory newCategory = EditorValue.GetCategory(GetCategoryId(add.SelectedItem)); + PckAudioFile.AudioTrackList newTrackList = EditorValue.GetTrackList(GetTrackListId(add.SelectedItem)); - category.SongNames.ForEach(c => newCategory.SongNames.Add(c)); + trackList.TrackNames.ForEach(c => newTrackList.TrackNames.Add(c)); SetUpTree(); } else { - MessageBox.Show(this, "There are no categories that aren't already used", "All possible categories are used"); + MessageBox.Show(this, "There are no track lists that aren't already used", "All possible track lists are used"); } } diff --git a/PCK-Studio/Forms/Editor/AudioEditor.resx b/PCK-Studio/Forms/Editor/AudioEditor.resx index de99ddd3..ffdbc9f2 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.resx +++ b/PCK-Studio/Forms/Editor/AudioEditor.resx @@ -121,256 +121,274 @@ Top, Bottom, Left - + 127, 8 - - 169, 70 + + 169, 22 - - contextMenuStrip1 + + Add Track List - + + 169, 22 + + + Remove Track List + + + 169, 22 + + + Set Track List + + + 170, 70 + + + trackListContextMenuStrip + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 - + 437, 8 - + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACI - NAAAAk1TRnQBSQFMAgEBCQIAAQEBAAEBARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMA - ATADAAEBAQABIAYAATASAAE5AV4BcwH/ATkBXgFzAf8BOQFeAXMB/wE+AWIBfAH/ATMBVAFpAf8BMwFU - AWkB/wE+AWIBfAH/ATMBVAFpAf8BOQFeAXMB/wE5AV4BcwH/ATkBXgFzAf8BMwFUAWkB/wEmAT0BTAH/ - ATMBVAFpAf8BMwFUAWkB/wE5AV4BcwH/wAABYgGYAbwB/wFiAZgBvAH/AU0BhAGfAf8BTQGEAZ8B/wFN - AYQBnwH/AWIBmAG8Af8BYgGYAbwB/wFNAYQBnwH/AWIBmAG8Af8BYgGYAbwB/wFNAYQBnwH/AVoBkAG0 - Af8BYgGYAbwB/wFiAZgBvAH/AWIBmAG8Af8BYgGYAbwB/8AAAVoBkAG0Af8BTQGEAZ8B/wE5AV4BcwH/ - AWIBmAG8Af8BYgGYAbwB/wFiAZgBvAH/AWIBmAG8Af8BTQGEAZ8B/wFiAZgBvAH/AVoBkAG0Af8BWgGQ - AbQB/wFNAYQBnwH/AU0BhAGfAf8BTQGEAZ8B/wFNAYQBnwH/AVoBkAG0Af/AAAFiAZgBvAH/AWIBmAG8 - Af8BYgGYAbwB/wFiAZgBvAH/AWIBmAG8Af8BTQGEAZ8B/wFiAZgBvAH/AU0BhAGfAf8BTQGEAZ8B/wE5 - AV4BcwH/AU0BhAGfAf8BTQGEAZ8B/wFaAZABtAH/AWIBmAG8Af8BYgGYAbwB/wFiAZgBvAH/wAABOQFe - AXMB/wEzAVQBaQH/ATkBXgFzAf8BOQFeAXMB/wEzAVQBaQH/ATMBVAFpAf8BMwFUAWkB/wE5AV4BcwH/ - ATkBXgFzAf8BOQFeAXMB/wE5AV4BcwH/ATkBXgFzAf8BMwFUAWkB/wEzAVQBaQH/ATMBVAFpAf8BOQFe - AXMB/8AAAWIBmAG8Af8BWgGQAbQB/wFaAZABtAH/AVoBkAG0Af8BYgGYAbwB/wFiAZgBvAH/AU0BhAGf - Af8BTQGEAZ8B/wFNAYQBnwH/AU0BhAGfAf8BWgGQAbQB/wFaAZABtAH/AVoBkAG0Af8BWgGQAbQB/wFa - AZABtAH/AU0BhAGfAf/AAAFNAYQBnwH/AU0BhAGfAf8BTQGEAZ8B/wFNAYQBnwH/AU0BhAGfAf8BYgGY - AbwB/wFaAZABtAH/AVoBkAG0Af8BTQGEAZ8B/wFNAYQBnwH/AU0BhAGfAf8BOQFeAXMB/wFiAZgBvAH/ - AU0BhAGfAf8BTQGEAZ8B/wFNAYQBnwH/wAABYgGYAbwB/wFiAZgBvAH/AWIBmAG8Af8BYgGYAbwB/wFi - AZgBvAH/ATkBXgFzAf8BTQGEAZ8B/wFiAZgBvAH/AWIBmAG8Af8BWgGQAbQB/wFaAZABtAH/AVoBkAG0 - Af8BYgGYAbwB/wFiAZgBvAH/AWIBmAG8Af8BTQGEAZ8B/8AAATkBXgFzAf8BOQFeAXMB/wEzAVQBaQH/ - ATMBVAFpAf8BMwFUAWkB/wEzAVQBaQH/ATMBVAFpAf8BOQFeAXMB/wE5AV4BcwH/ATkBXgFzAf8BMwFU - AWkB/wEzAVQBaQH/ATMBVAFpAf8BMwFUAWkB/wE5AV4BcwH/ATkBXgFzAf/AAAFiAZgBvAH/AWIBmAG8 - Af8BYgGYAbwB/wFaAZABtAH/AWIBmAG8Af8BYgGYAbwB/wFiAZgBvAH/AU0BhAGfAf8BTQGEAZ8B/wFN - AYQBnwH/ATkBXgFzAf8BYgGYAbwB/wFiAZgBvAH/AWIBmAG8Af8BYgGYAbwB/wFiAZgBvAH/wAABTQGE - AZ8B/wFNAYQBnwH/ATkBXgFzAf8BWgGQAbQB/wFaAZABtAH/AVoBkAG0Af8BYgGYAbwB/wFNAYQBnwH/ - AVoBkAG0Af8BWgGQAbQB/wFaAZABtAH/AVoBkAG0Af8BTQGEAZ8B/wFNAYQBnwH/AU0BhAGfAf8BTQGE - AZ8B/8AAAWIBmAG8Af8BTQGEAZ8B/wFNAYQBnwH/AU0BhAGfAf8BTQGEAZ8B/wFiAZgBvAH/AWIBmAG8 - Af8BTQGEAZ8B/wFiAZgBvAH/AU0BhAGfAf8BTQGEAZ8B/wE5AV4BcwH/AVoBkAG0Af8BWgGQAbQB/wFa - AZABtAH/AWIBmAG8Af/AAAEzAVQBaQH/ATMBVAFpAf8BMwFUAWkB/wE5AV4BcwH/ATkBXgFzAf8BOQFe - AXMB/wE5AV4BcwH/ATkBXgFzAf8BOQFeAXMB/wE5AV4BcwH/ATMBVAFpAf8BMwFUAWkB/wEzAVQBaQH/ - ATMBVAFpAf8BOQFeAXMB/wE5AV4BcwH/wAABYgGYAbwB/wFiAZgBvAH/AU0BhAGfAf8BTQGEAZ8B/wFN - AYQBnwH/AU0BhAGfAf8BWgGQAbQB/wFaAZABtAH/ATkBXgFzAf8BYgGYAbwB/wFiAZgBvAH/AVoBkAG0 - Af8BYgGYAbwB/wFiAZgBvAH/AWIBmAG8Af8BTQGEAZ8B/8AAAWIBmAG8Af8BYgGYAbwB/wFaAZABtAH/ - ATkBXgFzAf8BWgGQAbQB/wFaAZABtAH/AU0BhAGfAf8BTQGEAZ8B/wFNAYQBnwH/AU0BhAGfAf8BTQGE - AZ8B/wFaAZABtAH/AU0BhAGfAf8BWgGQAbQB/wFiAZgBvAH/AU0BhAGfAf/AAAFiAZgBvAH/AU0BhAGf - Af8BTQGEAZ8B/wFNAYQBnwH/AU0BhAGfAf8BYgGYAbwB/wFiAZgBvAH/AVoBkAG0Af8BTQGEAZ8B/wFi - AZgBvAH/AWIBmAG8Af8BYgGYAbwB/wFiAZgBvAH/AWIBmAG8Af8BYgGYAbwB/wFNAYQBnwH//wABAAEg - ASUBCAH/ASABJQEIAf8BIAElAQgB/ygAAygB/wMoAf8DKAH/lAABBQEQARYB/wEFARABFgH/AQUBEAEW - Af8gAAEgASUBCAH/AXcBigEeAf8BIAElAQgB/ygAAygB/wOWAf8DKAH/CAABFQE2AUkB/wELAR4BKAH/ - IAABCwEeASgB/wEVATYBSQH/WAABBQEQARYB/wETAT4BVAH/AQwBKAE4Af8BDAEoATgB/wEFARABFgH/ - AQUBEAEWAf8YAAEgASUBCAH/ASABJQEIAf8BHgFOAWgB/wELAR4BKAH/CAADKAH/AygB/xAAAQsBHgEo - Af8BHgFOAWgB/wMoAf8DKAH/BAABFQE2AUkB/wEnAWcBiQH/AQsBHgEoAf8gAAELAR4BKAH/AScBZwGJ - Af8BFQE2AUkB/xAAAzUB/wM1Af8YAAM1Af8DNQH/GAABBQEQARYB/wETAT4BVAH/A9YB/wOZAf8DmQH/ - AQwBKAE4Af8BDAEoATgB/wEFARABFgH/AQUBEAEWAf8YAAEVATYBSQH/AScBZwGJAf8BCwEeASgB/wQA - AygB/wNrAf8DKAH/AygB/wQAAQsBHgEoAf8BJwFnAYkB/wEVATYBSQH/DAABCwEeASgB/wEVATYBSQH/ - AScBZwGJAf8BCwEeASgB/xgAAQsBHgEoAf8BJwFnAYkB/wEVATYBSQH/AQsBHgEoAf8QAAM1Af8DwQH/ - AzUB/xAAAzUB/wGaAbIBJwH/AzUB/xQAAQUBEAEWAf8BEwE+AVQB/wPWAf8DtwH/A7cB/wO3Af8DmQH/ - A7cB/wEMASgBOAH/AQwBKAE4Af8BBQEQARYB/wEFARABFgH/FAABFQE2AUkB/wEeAU4BaAH/ASABJQEI - Af8BdwGKAR4B/wMoAf8DawH/A5YB/wMoAf8BHgFOAWgB/wEVATYBSQH/GAABFQE2AUkB/wEeAU4BaAH/ - AQsBHgEoAf8QAAELAR4BKAH/AR4BTgFoAf8BFQE2AUkB/xQAAzUB/wPBAf8DwQH/A9gB/wM1Af8IAAM1 - Af8BrAHHASsB/wGaAbIBJwH/AZoBsgEnAf8DNQH/DAABBQEQARYB/wETAT4BVAH/A9YB/wO3Af8BEwE+ - AVQB/wEMASgBOAH/AQwBKAE4Af8DtwH/A5kB/wOZAf8DtwH/AQwBKAE4Af8BDAEoATgB/wEFARABFgH/ - AQUBEAEWAf8QAAEgASUBCAH/AXcBigEeAf8BIAElAQgB/wEgASUBCAH/AygB/wMoAf8DlgH/AygB/yAA - ARUBNgFJAf8BJwFnAYkB/wELAR4BKAH/CAABCwEeASgB/wEnAWcBiQH/ARUBNgFJAf8YAAM1Af8D2AH/ - A9gF/wM1Af8IAAM1Af8BywHrATMB/wGsAccBKwH/AawBxwErAf8DNQH/CAABBQEQARYB/wETAT4BVAH/ - A9YB/wO3Af8BEwE+AVQB/wEXAUsBZQH/ARcBSwFlAf8BFwFLAWUB/wEMASgBOAH/AQwBKAE4Af8DtwH/ - A5kB/wO3Af8DmQH/AQwBKAE4Af8BBQEQARYB/wwAASABJQEIAf8BdwGKAR4B/wEgASUBCAH/AawBxwEr - Af8DRAX/A9gB/wMoAf8DlgH/AygB/yAAARUBNgFJAf8BJwFnAYkB/wELAR4BKAH/AQsBHgEoAf8BHgFO - AWgB/wEVATYBSQH/HAADNQH/A8EJ/wM1Af8IAAM1Af8BywHrATMB/wHLAesBMwH/AZoBsgEnAf8DNQH/ - CAABCAEbASYB/wETAT4BVAH/A7cB/wETAT4BVAH/ARcBSwFlAf8BFwFLAWUB/wEXAUsBZQH/ARcBSwFl - Af8BFwFLAWUB/wEXAUsBZQH/AQwBKAE4Af8BDAEoATgB/wOZAf8DtwH/A5kB/wNbAf8MAAEgASUBCAH/ - AXcBigEeAf8BIAElAQgB/wNEBf8D2AX/AygB/wOWAf8DKAH/JAABFQE2AUkB/wELAR4BKAH/AScBZwGJ - Af8BFQE2AUkB/xwAAzUB/wPBAf8D2AH/A9gF/wM1Af8IAAM1Af8BywHrATMB/wGsAccBKwH/AawBxwEr - Af8BmgGyAScB/wM1Af8EAAEIARsBJgH/ARMBPgFUAf8BEwE+AVQB/wEXAUsBZQH/ARcBSwFlAf8BFwFL - AWUB/wEXAUsBZQH/ARcBSwFlAf8BFwFLAWUB/wEXAUsBZQH/ARcBSwFlAf8BFwFLAWUB/wEMASgBOAH/ - AQwBKAE4Af8DtwH/A1sB/wgAASABJQEIAf8BVQFjARUB/wEgASUBCAH/A0QF/wPYBf8DRAH/ATYBPwEO - Af8DKAH/A2sB/wMoAf8gAAELAR4BKAH/AScBZwGJAf8BFQE2AUkB/wELAR4BKAH/HAADNQH/A8EB/wPB - Af8DwQX/AzUB/wgAAzUB/wHLAesBMwH/AZoBsgEnAf8BmgGyAScB/wGaAbIBJwH/AzUB/wQAAQgBGwEm - Af8BEwE+AVQB/wEXAUsBZQH/ARcBSwFlAf8BFwFLAWUB/wEXAUsBZQH/AQwBKAE4Af8BFwFLAWUB/wEX - AUsBZQH/ARcBSwFlAf8BFwFLAWUB/wEXAUsBZQH/ARcBSwFlAf8BFwFLAWUB/wEMASgBOAH/AQUBEAEW - Af8IAAEgASUBCAH/ASABJQEIAf8DRAX/A9gF/wNEAf8BrAHHASsB/wHLAesBMwH/ATYBPwEOAf8DKAH/ - AygB/xQAA0QB/wQAAQsBHgEoAf8BJwFnAYkB/wEVATYBSQH/ARUBNgFJAf8BJwFnAYkB/wELAR4BKAH/ - BAABNgE/AQ4B/xAAAzUB/wPBAf8D2AH/A9gF/wM1Af8IAAM1Af8BywHrATMB/wGsAccBKwH/AawBxwEr - Af8BmgGyAScB/wM1Af8EAAEIARsBJgH/AQgBGwEmAf8BFwFLAWUB/wEXAUsBZQH/ARcBSwFlAf8BDAEo - ATgB/wEXAUsBZQH/ARcBSwFlAf8BFwFLAWUB/wEMASgBOAH/AQwBKAE4Af8BDAEoATgB/wEXAUsBZQH/ - ARcBSwFlAf8BCAEbASYB/xAAA0QF/wPYBf8DRAH/ATYBPwEOAf8BywHrATMB/wGsAccBKwH/AcsB6wEz - Af8BNgE/AQ4B/xQAA0QF/wELAR4BKAH/AScBZwGJAf8BFQE2AUkB/wgAARUBNgFJAf8BJwFnAYkB/wEL - AR4BKAH/AcsB6wEzAf8BNgE/AQ4B/wwAAzUB/wPBAf8DwQH/A8EF/wM1Af8IAAM1Af8BywHrATMB/wGa - AbIBJwH/AZoBsgEnAf8BmgGyAScB/wM1Af8MAAEIARsBJgH/AQgBGwEmAf8BFwFLAWUB/wEXAUsBZQH/ - ARcBSwFlAf8BFwFLAWUB/wEMASgBOAH/AQwBKAE4Af8BDAEoATgB/wEXAUsBZQH/ARcBSwFlAf8BCAEb - ASYB/xAAA0QF/wPYBf8DRAH/CAABNgE/AQ4B/wHLAesBMwH/AawBxwErAf8BywHrATMB/wE2AT8BDgH/ - DAADRAX/A9gB/wPBAf8BFQE2AUkB/xAAARUBNgFJAf8BmgGyAScB/wGsAccBKwH/AcsB6wEzAf8BNgE/ - AQ4B/wgAAzUB/wPBAf8D2AH/A9gF/wM1Af8IAAM1Af8BywHrATMB/wGsAccBKwH/AawBxwErAf8BmgGy - AScB/wM1Af8UAAEIARsBJgH/AQgBGwEmAf8BFwFLAWUB/wEXAUsBZQH/AQwBKAE4Af8BFwFLAWUB/wEX - AUsBZQH/ARcBSwFlAf8BCAEbASYB/xAAA0QF/wPYBf8DRAH/EAABNgE/AQ4B/wHLAesBMwH/AawBxwEr - Af8BywHrATMB/wE2AT8BDgH/BAADRAX/A9gB/wPBAf8D2AX/A0QB/wgAATYBPwEOAf8BywHrATMB/wGs - AccBKwH/AZoBsgEnAf8BrAHHASsB/wHLAesBMwH/ATYBPwEOAf8IAAM1Af8DNQH/A9gF/wM1Af8DNQH/ - AzUB/wM1Af8BywHrATMB/wGsAccBKwH/AzUB/wM1Af8gAAEIARsBJgH/AQgBGwEmAf8BFwFLAWUB/wEX - AUsBZQH/ARcBSwFlAf8BCAEbASYB/xAAA0QF/wPYBf8DRAH/GAABNgE/AQ4B/wHLAesBMwH/AawBxwEr - Af8BywHrATMB/wE2AT8BDgH/A0QF/wPBAf8D2AX/A0QB/xAAATYBPwEOAf8BywHrATMB/wGsAccBKwH/ - AZoBsgEnAf8BywHrATMB/wE2AT8BDgH/EAADNQH/AzUB/wM1Af8DNQH/AzUB/wM1Af8DNQH/AzUB/zAA - AQgBGwEmAf8BCAEbASYB/wEIARsBJgH/FAADRAH/A9gF/wNEAf8gAAE2AT8BDgH/AcsB6wEzAf8BrAHH - ASsB/wE2AT8BDgH/A0QB/wPBCf8DRAH/GAABNgE/AQ4B/wHLAesBMwH/AcsB6wEzAf8BmgGyAScB/wE2 - AT8BDgH/gAADRAH/A0QB/wNEAf8oAAE2AT8BDgH/ATYBPwEOAf8BNgE/AQ4B/wQAA0QB/wNEAf8DRAH/ - IAABNgE/AQ4B/wE2AT8BDgH/ATYBPwEOAf9EAAFKAWwBlgH/AToBVQF5Af8BXAGFAbkB/wFKAWwBlgH/ - AUoBbAGWAf8BOgFVAXkB/wOHAf8BOgFVAXkB/wFKAWwBlgH/AUoBbAGWAf8BOgFVAXkB/wE6AVUBeQH/ - AUoBbAGWAf8BSgFsAZYB/wE6AVUBeQH/ASkBPQFZAf8CWQGmAf8CWQGmAf8CTAGDAf8CHgE/Af8BFgEe - AV0B/wIJARkB/wIRASkB/wIIATwB/wJYAaQB/wFZAXIBrwH/AiQBSQH/AUABUgGQAf8CGgE4Af8CHAE8 - Af8CHQE4Af8CcwHCAf8BmQLVAf8BxQL5Af8BpgHmAd8B/wGZAtUB/wGeAdwB2QH/AcUC+QH/AbUB9wHo - Af8BiQG9AcMB/wGeAdwB2QH/AZ4B3AHZAf8B0AL6Af8BtQH3AegB/wGJAb0BwwH/AYkBvQHDAf8BtgH4 - AesB/wGeAdwB2QH/AU8BfgHHAf8BTwF+AccB/wFKAXcBvAH/ATYBVAGAAf8BdAGWAcwB/wE2AVQBgAH/ - AWYBjQHJAf8BTwF+AccB/wFPAX4BxwH/AU8BfgHHAf8BSgF3AbwB/wE2AVQBgAH/AXQBlgHMAf8BNgFU - AYAB/wFmAY0ByQH/AU8BfgHHAf8BSgFsAZYB/wE6AVUBeQH/ASkBPQFZAf8BXAGFAbkB/wE6AVUBeQH/ - ASkBPQFZAf8BOgFVAXkB/wEpAT0BWQH/AVwBhQG5Af8BXAGFAbkB/wE6AVUBeQH/AUoBbAGWAf8BOgFV - AXkB/wE6AVUBeQH/AUoBbAGWAf8BSgFsAZYB/wI1AWgB/wIRASkB/wIJASYB/wJnAa8B/wIGAV4B/wI4 - AWwB/wIGAVkB/wIIATwB/wInAU4B/wIIATwB/wFZAXIBrwH/AggBaAH/AlgBlQH/AkgBiAH/AhQBLwH/ - AhkBMgH/AbUB9wHoAf8BlAHQAdQB/wGJAb0BwwH/AZ4B3AHZAf8BpgHmAd4B/wGeAdwB2QH/AZ4B3gHZ - Af8BvQH5AfQB/wG8AfgB8gH/Ab0B+QH0Af8BngHcAdkB/wG2AfgB6wH/Aa0B7QHgAf8BxQL5Af8BxQL5 - Af8BtAH4AewB/wFPAX4BxwH/AUoBdwG8Af8BNgFUAYAB/wGLAaYBzwH/AYsBpgHPAf8BdAGWAcwB/wE2 - AVQBgAH/AVcBewGyAf8BRwFxAbEB/wFDAWwBqQH/ATYBVAGAAf8BiwGmAc8B/wGLAaYBzwH/AXQBlgHM - Af8BNgFUAYAB/wFmAY0ByQH/AToBVQF5Af8BSgFsAZYB/wE6AVUBeQH/AToBVQF5Af8BRAFYAXQB/wE6 - AVUBeQH/AUoBbAGWAf8BSgFsAZYB/wE6AVUBeQH/ASkBPQFZAf8BXAGFAbkB/wEpAT0BWQH/AToBVQF5 - Af8BXAGFAbkB/wFKAWwBlgH/AUoBbAGWAf8CeAHKAf8CTAGDAf8CMgFjAf8CdwHJAf8CDAF8Af8CXAGq - Af8CNgFfAf8CCQEcAf8COgFnAf8CEwGaAf8CaQGyAf8CBgFaAf8CXQGeAf8CBgFaAf8CQQF8Af8CGQEx - Af8BiQG9AcMB/wGJAb0BwwH/AZUBzQHTAf8BmQLVAf8BtQH3AegB/wG2AfgB6wH/AdAC+gH/AbUB9wHo - Af8BpgHmAd4B/wGZAtcB/wGeAd4B2QH/AbYB+AHrAf8BngHeAdkB/wGUAdMB1AH/AZ4B3AHZAf8BxQL5 - Af8BZgGNAckB/wE2AVQBgAH/AYsBpgHPAf8BeQGRAbUB/wE8AUgBWgH/ATwBSAFaAf8BMgFBAVkB/wEX - ASQBNwH/ASYBNQFNAf8BFwEkATcB/wE8AUgBWgH/ATwBSAFaAf8BPAFIAVoB/wF5AZEBtQH/AXQBlgHM - Af8BNgFUAYAB/wE6AVUBeQH/ASkBPQFZAf8BSgFsAZYB/wE6AVUBeQH/AUoBbAGWAf8BSgFsAZYB/wFc - AYUBuQH/AToBVQF5Af8BOgFVAXkB/wE6AVUBeQH/AToBVQF5Af8BOgFVAXkB/wE6AVUBeQH/AToBVQF5 - Af8BXAGFAbkB/wFcAYUBuQH/AnMBwgH/AlkBpgH/AhEBKQH/AhkBMgH/AhEBKQH/AgkBHAH/AjoBZwH/ - AgYBWgH/AiUBRQH/AgkBGwH/AnMBwgH/AgsBdQH/Ak8BiAH/AjwBcwH/AT4BUAGNAf8CNgFfAf8BtgH4 - AesB/wGJAb0BwwH/AYwBwAHGAf8BjAHAAcYB/wHFAvkB/wGeAd4B2QH/AYkBvQHDAf8BlQHNAdMB/wGJ - Ab0BwwH/AYkBvQHDAf8BtgH4AesB/wG2AfgB6wH/AYkBvQHDAf8BmQLXAf8BmQLXAf8BxQL5Af8BNgFU - AYAB/wGLAaYBzwH/AYsBpgHPAf8BPAFIAVoB/wHNAcIBxQH/Aa8BpQGoAf8BpwGdAZ8B/wGZAY8BkQH/ - AYABdAF3Af8BgAF0AXcB/wGAAXQBdwH/AYABdAF3Af8BgAF0AXcB/wE8AUgBWgH/AYsBpgHPAf8BdAGW - AcwB/wFKAWwBlgH/AToBVQF5Af8BOgFVAXkB/wFKAWwBlgH/AUoBbAGWAf8BXAGFAbkB/wE6AVUBeQH/ - AUoBbAGWAf8DbAH/AUoBbAGWAf8BSgFsAZYB/wE6AVUBeQH/ASkBPQFZAf8BSgFsAZYB/wE6AVUBeQH/ - ASkBPQFZAf8CNgFfAf8CCAE8Af8CZgGtAf8CTgGGAf8CMAFgAf8CCQEcAf8CTwGIAf8CPAFzAf8CXQGe - Af8CPAFzAf8CEQEpAf8CCAEyAf8CbwG8Af8CJwFOAf8CCAE8Af8CGQEyAf8BxQL5Af8BtgH4AesB/wHF - AvkB/wHFAvkB/wG2AfgB6wH/AYkBvQHDAf8BiQG9AcMB/wGeAdwB2QH/AaYB5gHeAf8BxgH6AfkB/wG2 - AfgB6wH/AbYB+AHrAf8BiQG9AcMB/wGZAtUB/wGTAckBzwH/AZ4B3AHZAf8BPwFjAZoB/wE2AVQBgAH/ - AYsBpgHPAf8BPAFIAVoB/wHNAcIBxQH/AbkBsAGzAf8BuQGwAbMB/wG5AbABswH/AbkBsAGzAf8BuQGw - AbMB/wG5AbABswH/AbkBsAGzAf8BgAF0AXcB/wE8AUgBWgH/AYsBpgHPAf8BNgFUAYAB/wE6AVUBeQH/ - AUoBbAGWAf8BOgFVAXkB/wFcAYUBuQH/AVwBhQG5Af8BOgFVAXkB/wFcAYUBuQH/AUoBbAGWAf8BKQE9 - AVkB/wFcAYUBuQH/AVwBhQG5Af8BKQE9AVkB/wFKAWwBlgH/AUoBbAGWAf8DhwH/AToBVQF5Af8CJwFO - Af8CDAF7Af8BUwFrAagB/wJPAYgB/wI8AXMB/wIJARcB/wJZAaYB/wI8AXMB/wJPAYgB/wI8AXMB/wJA - AXoB/wIJARwB/wI3AWIB/wInAU4B/wIKAXIB/wI/AXgB/wHFAvkB/wG9AfkB9AH/AZQB0wHUAf8BngHc - AdkB/wHQAvoB/wG2AfgB6wH/AbYB+AHrAf8BtQH3AegB/wHFAvkB/wGeAdwB2QH/AZ4B3AHZAf8B0AL6 - Af8BtgH4AesB/wGJAb0BwwH/AYkBvQHDAf8BngHcAdkB/wFPAX4BxwH/AT8BYwGaAf8BNgFUAYAB/wE8 - AUgBWgH/Ac0BwgHFAf8BuQGwAbMB/wEjASUBggH/AbkBsAGzAf8BdwF6Ac4B/wG5AbABswH/AWcBaQGs - Af8BuQGwAbMB/wGAAXQBdwH/ATwBSAFaAf8BNgFUAYAB/wFKAXcBvAH/AToBVQF5Af8BSgFsAZYB/wEp - AT0BWQH/AToBVQF5Af8BOgFVAXkB/wEpAT0BWQH/ASkBPQFZAf8BOgFVAXkB/wE6AVUBeQH/AToBVQF5 - Af8BOgFVAXkB/wE6AVUBeQH/AVwBhQG5Af8BXAGFAbkB/wE6AVUBeQH/AUoBbAGWAf8CQgF+Af8CJwFO - Af8CcwHCAf8CDwGHAf8CBgFgAf8CHAE3Af8CWQGmAf8CBwFGAf8BhgGqAeUB/wJFAYMB/wFmAYIBvwH/ - AjYBXwH/AigBUAH/An0B0wH/AgYBWgH/AgYBWgH/AbYB+AHrAf8BngHcAdkB/wGZAtUB/wGeAdwB2QH/ - AZUBzQHTAf8B0AL6Af8BtQH3AegB/wGmAeYB3gH/AYkBvQHDAf8BiQG9AcMB/wGtAe0B4AH/AZ4B3AHZ - Af8B0AL6Af8BtgH4AesB/wGJAb0BwwH/AYkBvQHDAf8BTwF+AccB/wFPAX4BxwH/AT8BYwGaAf8BFwEk - ATcB/wHVAcoBzQH/AbkBsAGzAf8BuQGwAbMB/wG5AbABswH/AbkBsAGzAf8BuQGwAbMB/wG5AbABswH/ - AbkBsAGzAf8BgAF0AXcB/wEXASQBNwH/AUoBdwG8Af8BTwF+AccB/wFKAWwBlgH/AToBVQF5Af8BOgFV - AXkB/wFKAWwBlgH/AToBVQF5Af8BSgFsAZYB/wE6AVUBeQH/ASkBPQFZAf8BOgFVAXkB/wFKAWwBlgH/ - AUoBbAGWAf8BOgFVAXkB/wE6AVUBeQH/AToBVQF5Af8BKQE9AVkB/wE6AVUBeQH/AjoBcAH/AgoBFAH/ - AjYBXwH/Ag8BigH/Ag0BgwH/AVkBcgGvAf8BSwFhAZ4B/wJZAaYB/wJrAbYB/wI6AXEB/wIoAVEB/wIm - AUcB/wIVAS8B/wMKAf8CggHZAf8BfwGiAd4B/wG2AfgB6wH/AYkBvQHDAf8BiQG9AcMB/wGJAb0BwwH/ - AZ4B3AHZAf8BvQH5AfQB/wGJAb0BwwH/AYwBwAHGAf8BiQG9AcMB/wGJAb0BwwH/AZMBywHTAf8BrQHt - AeAB/wGJAb0BwwH/AZQB0AHUAf8BtAH4AewB/wG2AfgB6wH/AU8BfgHHAf8BTwF+AccB/wFPAX4BxwH/ - ARoBKQE/Af8B1QHKAc0B/wG5AbABswH/AT4BhwHCAf8BuQGwAbMB/wF3AXoBzgH/AbkBsAGzAf8BNgE6 - Ac0B/wG5AbABswH/AYABdAF3Af8BJgE1AU0B/wFPAX4BxwH/AU8BfgHHAf8BOgFVAXkB/wE6AVUBeQH/ - AVwBhQG5Af8BXAGFAbkB/wFKAWwBlgH/AUoBbAGWAf8BOgFVAXkB/wE6AVUBeQH/AUoBbAGWAf8BKQE9 - AVkB/wFKAWwBlgH/AUoBbAGWAf8BOgFVAXkB/wE6AVUBeQH/AUoBbAGWAf8BSgFsAZYB/wI8AXMB/wJP - AYgB/wITASkB/wIuAVQB/wJVAZ8B/wJzAcIB/wInAU4B/wIgAUMB/wI3AWEB/wIIAS0B/wIZATIB/wJW - AZIB/wIGAVoB/wIZATIB/wIHAUAB/wIRAZEB/wGiAeIB2QH/AaYB5gHfAf8BpgHmAd4B/wHFAvkB/wHQ - AvoB/wHQAvoB/wHFAvkB/wGUAdMB1AH/AYkBvQHDAf8BngHcAdkB/wG9AfkB9AH/AbQB+AHsAf8BpgHm - Ad4B/wHFAvkB/wG9AfkB9AH/AbUB9wHoAf8BTwF+AccB/wFPAX4BxwH/AU8BfgHHAf8BFwEkATcB/wHa - Ac8B0gH/AbkBsAGzAf8BuQGwAbMB/wG5AbABswH/AbkBsAGzAf8BuQGwAbMB/wG5AbABswH/AbkBsAGz - Af8BmQGPAZEB/wEXASQBNwH/AWYBjQHJAf8BTwF+AccB/wFcAYUBuQH/AToBVQF5Af8BOgFVAXkB/wE6 - AVUBeQH/A4cB/wE6AVUBeQH/AToBVQF5Af8BXAGFAbkB/wFcAYUBuQH/AToBVQF5Af8BXAGFAbkB/wFc - AYUBuQH/AToBVQF5Af8BSgFsAZYB/wE6AVUBeQH/AUoBbAGWAf8CBgFaAf8CTwGIAf8CPAFzAf8CNgFf - Af8CLgFbAf8CCQEcAf8CGQEyAf8CKAFSAf8COAFkAf8CCAFnAf8CZwGwAf8CTwGIAf8CNAFlAf8CTwGI - Af8CBgFZAf8CCAE3Af8BpgHmAd8B/wGZAtUB/wG8AfgB8gH/AYkBvQHDAf8BngHcAdkB/wGeAd4B2QH/ - AZ4B3gHZAf8BtgH4AesB/wG2AfgB6wH/AbYB+AHrAf8BngHcAdkB/wGVAc0B0wH/AZQB0wHUAf8BkwHJ - Ac8B/wG8AfgB8gH/AcUC+QH/AU8BfgHHAf8BTwF+AccB/wE2AVQBgAH/ATwBSAFaAf8B1gHLAc4B/wG5 - AbABswH/AVEBVAGoAf8BuQGwAbMB/wEsAS4BogH/AbkBsAGzAf8BMgFsAU4B/wG5AbABswH/AacBnQGf - Af8BMgFBAVkB/wE2AVQBgAH/AWYBjQHJAf8BOgFVAXkB/wEpAT0BWQH/AUoBbAGWAf8BSgFsAZYB/wE6 - AVUBeQH/AUoBbAGWAf8BKQE9AVkB/wEpAT0BWQH/ASkBPQFZAf8BOgFVAXkB/wE6AVUBeQH/ASkBPQFZ - Af8BOgFVAXkB/wE6AVUBeQH/AToBVQF5Af8BXAGFAbkB/wIHAU8B/wJUAY8B/wI6AXAB/wI2AV8B/wI4 - AWwB/wIHAWMB/wJPAYgB/wIZATIB/wJtAbgB/wKCAdkB/wJKAYEB/wJWAZIB/wFEAVcBlQH/AjQBXQH/ - AgoBFAH/AhIBKwH/AYkBvQHDAf8BngHeAdkB/wGmAeYB3gH/AYkBvQHDAf8BiQG9AcMB/wGJAb0BwwH/ - AbYB+AHrAf8BxQL5Af8BtQH3AegB/wGJAb0BwwH/AYkBvQHDAf8BngHcAdkB/wGVAc0B0wH/AZ4B3AHZ - Af8BmQLVAf8BtQH3AegB/wFmAY0ByQH/ATYBVAGAAf8BiwGmAc8B/wE8AUgBWgH/AdYBywHOAf8BuQGw - AbMB/wG5AbABswH/AbkBsAGzAf8BuQGwAbMB/wG5AbABswH/AbkBsAGzAf8BuQGwAbMB/wGvAaUBqAH/ - ATwBSAFaAf8BdAGWAcwB/wE2AVQBgAH/AUoBbAGWAf8BOgFVAXkB/wFKAWwBlgH/AVwBhQG5Af8BKQE9 - AVkB/wFKAWwBlgH/AToBVQF5Af8BOgFVAXkB/wEpAT0BWQH/ASkBPQFZAf8BKQE9AVkB/wNsAf8BOgFV - AXkB/wFKAWwBlgH/ASkBPQFZAf8BOgFVAXkB/wGBAaUB4QH/AnMBwgH/AT4BUAGNAf8CNgFfAf8CcwHC - Af8CVAGPAf8CVAGPAf8CCQEhAf8CNgFfAf8CUQGXAf8CTgGSAf8CYwGoAf8CIAFEAf8BVQFtAaoB/wIN - AX4B/wI2AV8B/wGMAcABxgH/AYkBvQHDAf8BxQL5Af8BxQL5Af8BxQL5Af8BxQL5Af8BtQH3AegB/wGe - AdwB2QH/AdAC+gH/AcUC+QH/AYkBvQHDAf8BiQG9AcMB/wGeAdwB2QH/AZ4B3AHZAf8BtgH4AesB/wGr - Ae0B3gH/ATYBVAGAAf8BiwGmAc8B/wGLAaYBzwH/ATwBSAFaAf8B3QHSAdUB/wHaAc8B0gH/AdoBzwHS - Af8B2gHPAdIB/wHVAcoBzQH/Ac0BwgHFAf8BzQHCAcUB/wHNAcIBxQH/Ac0BwgHFAf8BPAFIAVoB/wGL - AaYBzwH/AXQBlgHMAf8BKQE9AVkB/wNsAf8BKQE9AVkB/wEpAT0BWQH/AUcBsQFxAf8BKQE9AVkB/wEp - AT0BWQH/ASkBPQFZAf8BNQGfAV8B/wEpAT0BWQH/AUMBrQFtAf8BKQE9AVkB/wE6AVUBeQH/ASkBPQFZ - Af8BKQE9AVkB/wE6AVUBeQH/AkQBdwH/AiYBRgH/AgkBFwH/AjYBXwH/AlwBrAH/Aj0BawH/Al4BoAH/ - AVkBcgGvAf8CGQEyAf8CJAFLAf8CEQEpAf8CHQE5Af8CJwFOAf8CbQG4Af8CDwGJAf8CNAFdAf8BtgH4 - AesB/wG2AfgB6wH/AYkBvQHDAf8BngHeAdkB/wGpAekB3gH/AcUC+QH/AZ4B3AHZAf8BngHcAdkB/wGV - Ac0B0wH/AZ4B3AHZAf8BxQL5Af8BxQL5Af8BiQG9AcMB/wG2AfgB6wH/AbYB+AHrAf8BxQL5Af8BPwFj - AZoB/wE2AVQBgAH/AYsBpgHPAf8BeQGRAbUB/wE8AUgBWgH/ATwBSAFaAf8BPAFIAVoB/wEXASQBNwH/ - ARsBKwFDAf8BFwEkATcB/wE8AUgBWgH/ATwBSAFaAf8BPAFIAVoB/wF5AZEBtQH/AYsBpgHPAf8BNgFU - AYAB/wFdAbwBjQH/ASkBPQFZAf8BbAHLAZwB/wE6AaQBZAH/AT8BqQFpAf8BKQE9AVkB/wFGAbABcAH/ - ASkBPQFZAf8BSgG0AXQB/wFVAb8BfwH/AWIBwQGSAf8BZwHGAZcB/wEpAT0BWQH/AS0BlwFXAf8BNgGg - AWAB/wEpAT0BWQH/AjIBWwH/AjwBcwH/Ak8BiAH/AhMBKAH/AiUBTQH/Ag0BgwH/AnMBwgH/AgYBXgH/ - Ag4BJAH/AgoBFwH/AkIBfgH/AgYBWgH/AhEBKQH/AjYBXwH/AggBPAH/AlIBjQH/AbYB+AHrAf8BiQG9 - AcMB/wGeAd4B2QH/AZ4B3AHZAf8BngHcAdkB/wHFAvkB/wGJAb0BwwH/AZMByQHPAf8BngHcAdkB/wGe - AdwB2QH/AZkC1QH/AcUC+QH/AbQB+AHsAf8BtgH4AesB/wGMAcABxgH/AZkC1wH/AU8BfgHHAf8BPwFj - AZoB/wE2AVQBgAH/AYsBpgHPAf8BiwGmAc8B/wGLAaYBzwH/ATYBVAGAAf8BSgF3AbwB/wFPAX4BxwH/ - AT8BYwGaAf8BNgFUAYAB/wGLAaYBzwH/AYsBpgHPAf8BiwGmAc8B/wE2AVQBgAH/AUoBdwG8Af8BSwG1 - AXUB/wFCAawBbAH/AVoBuQGKAf8BUQGwAYEB/wFTAbIBgwH/ASkBPQFZAf8BPgGoAWgB/wE4AaIBYgH/ - ATUBnwFfAf8BYwHCAZMB/wFgAb8BkAH/AUkBswFzAf8BNwGhAWEB/wFCAawBbAH/AT0BpwFnAf8BQQGr - AWsB/wJzAcIB/wJZAaYB/wIHAUUB/wJPAYgB/wIKAR0B/wInAU4B/wJzAcIB/wINAYMB/wInAU4B/wIG - AVoB/wJWAZIB/wIGAVoB/wIIAWgB/wEjAS8BbQH/AjIBYgH/AmMBqQH/AZQB0wHUAf8BtgH4AesB/wGJ - Ab0BwwH/AYkBvQHDAf8BmQLVAf8BtQH3AegB/wGJAb0BwwH/AZkC1QH/AYkBvQHDAf8BlQHNAdMB/wGV - Ac0B0wH/AbYB+AHrAf8BtAH4AewB/wGJAb0BwwH/AZ4B3AHZAf8BngHcAdkB/wFPAX4BxwH/AU8BfgHH - Af8BPwFjAZoB/wE2AVQBgAH/AYsBpgHPAf8BNgFUAYAB/wFKAXcBvAH/AU8BfgHHAf8BTwF+AccB/wFP - AX4BxwH/AT8BYwGaAf8BNgFUAYAB/wGLAaYBzwH/ATYBVAGAAf8BSgF3AbwB/wFPAX4BxwH/AUoBtAF0 - Af8BTAG2AXYB/wFJAbMBcwH/ATwBpgFmAf8BPAGmAWYB/wFFAa8BbwH/ATUBnwFfAf8BQgGsAWwB/wFU - Ab4BfgH/AUwBtgF2Af8BQAGqAWoB/wE9AacBZwH/AT8BqQFpAf8BNwGhAWEB/wEmAZABUAH/AUMBrQFt - Af8CcwHCAf8CWQGmAf8CWQGmAf8CUwGaAf8BaQGGAcIB/wI8AXMB/wIoAVIB/wInAU4B/wInAU4B/wIN - AYMB/wJzAcIB/wJZAaYB/wI9AXQB/wInAU4B/wJcAakB/wJzAcIB/wGeAd4B2QH/AbQB+AHsAf8BtgH4 - AesB/wGJAb0BwwH/AYkBvQHDAf8BngHcAdkB/wGpAekB3gH/AYkBvQHDAf8BiQG9AcMB/wGeAd4B2QH/ - AbQB+AHsAf8BxQL5Af8BxQL5Af8BrQHtAeAB/wGJAb0BwwH/AYkBvQHDAf8BTwF+AccB/wFPAX4BxwH/ - AU8BfgHHAf8BPwFjAZoB/wE2AVQBgAH/AWYBjQHJAf8BTwF+AccB/wFPAX4BxwH/AU8BfgHHAf8BTwF+ - AccB/wFPAX4BxwH/AT8BYwGaAf8BNgFUAYAB/wFmAY0ByQH/AU8BfgHHAf8BTwF+AccB/wFCAU0BPgcA - AT4DAAEoAwABQAMAATADAAEBAQABAQUAAYABARYAA/+BAAL/AR8B+AT/AfgB/wEfAfgBzwHzAv8B8AE/ - AQwB8AGPAfEC5wHgAQ8BxAEjAYcB4QHjAccBwAEDAeABBwHjAccBwQGDAYABAAHwAQ8B8QGPAcEBgwIA - AeABBwH4AR8BwQGDAgAB4AEHAfwBPwKBAgABwAEDAfwBPwKBAgABwAEDAegBFwKBAQABAQHgAQcBwQGD - AoEBwAEDAcECgwHBAoEB8AEHAYMBwQEBAYABwAEDAfwBDwEHAeABAwHAAfABDwH/AR8BDwHwAQcB4AT/ - AR8B+AGPAfEC/4AACw== + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACK + NAAAAk1TRnQBSQFMAgEBCQEAARgBAQEYAQEBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABMAMAAQEBAAEgBgABMBIAATkBXgFzAf8BOQFeAXMB/wE5AV4BcwH/AT4BYgF8Af8BMwFUAWkB/wEz + AVQBaQH/AT4BYgF8Af8BMwFUAWkB/wE5AV4BcwH/ATkBXgFzAf8BOQFeAXMB/wEzAVQBaQH/ASYBPQFM + Af8BMwFUAWkB/wEzAVQBaQH/ATkBXgFzAf/AAAFiAZgBvAH/AWIBmAG8Af8BTQGEAZ8B/wFNAYQBnwH/ + AU0BhAGfAf8BYgGYAbwB/wFiAZgBvAH/AU0BhAGfAf8BYgGYAbwB/wFiAZgBvAH/AU0BhAGfAf8BWgGQ + AbQB/wFiAZgBvAH/AWIBmAG8Af8BYgGYAbwB/wFiAZgBvAH/wAABWgGQAbQB/wFNAYQBnwH/ATkBXgFz + Af8BYgGYAbwB/wFiAZgBvAH/AWIBmAG8Af8BYgGYAbwB/wFNAYQBnwH/AWIBmAG8Af8BWgGQAbQB/wFa + AZABtAH/AU0BhAGfAf8BTQGEAZ8B/wFNAYQBnwH/AU0BhAGfAf8BWgGQAbQB/8AAAWIBmAG8Af8BYgGY + AbwB/wFiAZgBvAH/AWIBmAG8Af8BYgGYAbwB/wFNAYQBnwH/AWIBmAG8Af8BTQGEAZ8B/wFNAYQBnwH/ + ATkBXgFzAf8BTQGEAZ8B/wFNAYQBnwH/AVoBkAG0Af8BYgGYAbwB/wFiAZgBvAH/AWIBmAG8Af/AAAE5 + AV4BcwH/ATMBVAFpAf8BOQFeAXMB/wE5AV4BcwH/ATMBVAFpAf8BMwFUAWkB/wEzAVQBaQH/ATkBXgFz + Af8BOQFeAXMB/wE5AV4BcwH/ATkBXgFzAf8BOQFeAXMB/wEzAVQBaQH/ATMBVAFpAf8BMwFUAWkB/wE5 + AV4BcwH/wAABYgGYAbwB/wFaAZABtAH/AVoBkAG0Af8BWgGQAbQB/wFiAZgBvAH/AWIBmAG8Af8BTQGE + AZ8B/wFNAYQBnwH/AU0BhAGfAf8BTQGEAZ8B/wFaAZABtAH/AVoBkAG0Af8BWgGQAbQB/wFaAZABtAH/ + AVoBkAG0Af8BTQGEAZ8B/8AAAU0BhAGfAf8BTQGEAZ8B/wFNAYQBnwH/AU0BhAGfAf8BTQGEAZ8B/wFi + AZgBvAH/AVoBkAG0Af8BWgGQAbQB/wFNAYQBnwH/AU0BhAGfAf8BTQGEAZ8B/wE5AV4BcwH/AWIBmAG8 + Af8BTQGEAZ8B/wFNAYQBnwH/AU0BhAGfAf/AAAFiAZgBvAH/AWIBmAG8Af8BYgGYAbwB/wFiAZgBvAH/ + AWIBmAG8Af8BOQFeAXMB/wFNAYQBnwH/AWIBmAG8Af8BYgGYAbwB/wFaAZABtAH/AVoBkAG0Af8BWgGQ + AbQB/wFiAZgBvAH/AWIBmAG8Af8BYgGYAbwB/wFNAYQBnwH/wAABOQFeAXMB/wE5AV4BcwH/ATMBVAFp + Af8BMwFUAWkB/wEzAVQBaQH/ATMBVAFpAf8BMwFUAWkB/wE5AV4BcwH/ATkBXgFzAf8BOQFeAXMB/wEz + AVQBaQH/ATMBVAFpAf8BMwFUAWkB/wEzAVQBaQH/ATkBXgFzAf8BOQFeAXMB/8AAAWIBmAG8Af8BYgGY + AbwB/wFiAZgBvAH/AVoBkAG0Af8BYgGYAbwB/wFiAZgBvAH/AWIBmAG8Af8BTQGEAZ8B/wFNAYQBnwH/ + AU0BhAGfAf8BOQFeAXMB/wFiAZgBvAH/AWIBmAG8Af8BYgGYAbwB/wFiAZgBvAH/AWIBmAG8Af/AAAFN + AYQBnwH/AU0BhAGfAf8BOQFeAXMB/wFaAZABtAH/AVoBkAG0Af8BWgGQAbQB/wFiAZgBvAH/AU0BhAGf + Af8BWgGQAbQB/wFaAZABtAH/AVoBkAG0Af8BWgGQAbQB/wFNAYQBnwH/AU0BhAGfAf8BTQGEAZ8B/wFN + AYQBnwH/wAABYgGYAbwB/wFNAYQBnwH/AU0BhAGfAf8BTQGEAZ8B/wFNAYQBnwH/AWIBmAG8Af8BYgGY + AbwB/wFNAYQBnwH/AWIBmAG8Af8BTQGEAZ8B/wFNAYQBnwH/ATkBXgFzAf8BWgGQAbQB/wFaAZABtAH/ + AVoBkAG0Af8BYgGYAbwB/8AAATMBVAFpAf8BMwFUAWkB/wEzAVQBaQH/ATkBXgFzAf8BOQFeAXMB/wE5 + AV4BcwH/ATkBXgFzAf8BOQFeAXMB/wE5AV4BcwH/ATkBXgFzAf8BMwFUAWkB/wEzAVQBaQH/ATMBVAFp + Af8BMwFUAWkB/wE5AV4BcwH/ATkBXgFzAf/AAAFiAZgBvAH/AWIBmAG8Af8BTQGEAZ8B/wFNAYQBnwH/ + AU0BhAGfAf8BTQGEAZ8B/wFaAZABtAH/AVoBkAG0Af8BOQFeAXMB/wFiAZgBvAH/AWIBmAG8Af8BWgGQ + AbQB/wFiAZgBvAH/AWIBmAG8Af8BYgGYAbwB/wFNAYQBnwH/wAABYgGYAbwB/wFiAZgBvAH/AVoBkAG0 + Af8BOQFeAXMB/wFaAZABtAH/AVoBkAG0Af8BTQGEAZ8B/wFNAYQBnwH/AU0BhAGfAf8BTQGEAZ8B/wFN + AYQBnwH/AVoBkAG0Af8BTQGEAZ8B/wFaAZABtAH/AWIBmAG8Af8BTQGEAZ8B/8AAAWIBmAG8Af8BTQGE + AZ8B/wFNAYQBnwH/AU0BhAGfAf8BTQGEAZ8B/wFiAZgBvAH/AWIBmAG8Af8BWgGQAbQB/wFNAYQBnwH/ + AWIBmAG8Af8BYgGYAbwB/wFiAZgBvAH/AWIBmAG8Af8BYgGYAbwB/wFiAZgBvAH/AU0BhAGfAf//AAEA + ASABJQEIAf8BIAElAQgB/wEgASUBCAH/KAADKAH/AygB/wMoAf+UAAEFARABFgH/AQUBEAEWAf8BBQEQ + ARYB/yAAASABJQEIAf8BdwGKAR4B/wEgASUBCAH/KAADKAH/A5YB/wMoAf8IAAEVATYBSQH/AQsBHgEo + Af8gAAELAR4BKAH/ARUBNgFJAf9YAAEFARABFgH/ARMBPgFUAf8BDAEoATgB/wEMASgBOAH/AQUBEAEW + Af8BBQEQARYB/xgAASABJQEIAf8BIAElAQgB/wEeAU4BaAH/AQsBHgEoAf8IAAMoAf8DKAH/EAABCwEe + ASgB/wEeAU4BaAH/AygB/wMoAf8EAAEVATYBSQH/AScBZwGJAf8BCwEeASgB/yAAAQsBHgEoAf8BJwFn + AYkB/wEVATYBSQH/EAADNQH/AzUB/xgAAzUB/wM1Af8YAAEFARABFgH/ARMBPgFUAf8D1gH/A5kB/wOZ + Af8BDAEoATgB/wEMASgBOAH/AQUBEAEWAf8BBQEQARYB/xgAARUBNgFJAf8BJwFnAYkB/wELAR4BKAH/ + BAADKAH/A2sB/wMoAf8DKAH/BAABCwEeASgB/wEnAWcBiQH/ARUBNgFJAf8MAAELAR4BKAH/ARUBNgFJ + Af8BJwFnAYkB/wELAR4BKAH/GAABCwEeASgB/wEnAWcBiQH/ARUBNgFJAf8BCwEeASgB/xAAAzUB/wPB + Af8DNQH/EAADNQH/AZoBsgEnAf8DNQH/FAABBQEQARYB/wETAT4BVAH/A9YB/wO3Af8DtwH/A7cB/wOZ + Af8DtwH/AQwBKAE4Af8BDAEoATgB/wEFARABFgH/AQUBEAEWAf8UAAEVATYBSQH/AR4BTgFoAf8BIAEl + AQgB/wF3AYoBHgH/AygB/wNrAf8DlgH/AygB/wEeAU4BaAH/ARUBNgFJAf8YAAEVATYBSQH/AR4BTgFo + Af8BCwEeASgB/xAAAQsBHgEoAf8BHgFOAWgB/wEVATYBSQH/FAADNQH/A8EB/wPBAf8D2AH/AzUB/wgA + AzUB/wGsAccBKwH/AZoBsgEnAf8BmgGyAScB/wM1Af8MAAEFARABFgH/ARMBPgFUAf8D1gH/A7cB/wET + AT4BVAH/AQwBKAE4Af8BDAEoATgB/wO3Af8DmQH/A5kB/wO3Af8BDAEoATgB/wEMASgBOAH/AQUBEAEW + Af8BBQEQARYB/xAAASABJQEIAf8BdwGKAR4B/wEgASUBCAH/ASABJQEIAf8DKAH/AygB/wOWAf8DKAH/ + IAABFQE2AUkB/wEnAWcBiQH/AQsBHgEoAf8IAAELAR4BKAH/AScBZwGJAf8BFQE2AUkB/xgAAzUB/wPY + Af8D2AX/AzUB/wgAAzUB/wHLAesBMwH/AawBxwErAf8BrAHHASsB/wM1Af8IAAEFARABFgH/ARMBPgFU + Af8D1gH/A7cB/wETAT4BVAH/ARcBSwFlAf8BFwFLAWUB/wEXAUsBZQH/AQwBKAE4Af8BDAEoATgB/wO3 + Af8DmQH/A7cB/wOZAf8BDAEoATgB/wEFARABFgH/DAABIAElAQgB/wF3AYoBHgH/ASABJQEIAf8BrAHH + ASsB/wNEBf8D2AH/AygB/wOWAf8DKAH/IAABFQE2AUkB/wEnAWcBiQH/AQsBHgEoAf8BCwEeASgB/wEe + AU4BaAH/ARUBNgFJAf8cAAM1Af8DwQn/AzUB/wgAAzUB/wHLAesBMwH/AcsB6wEzAf8BmgGyAScB/wM1 + Af8IAAEIARsBJgH/ARMBPgFUAf8DtwH/ARMBPgFUAf8BFwFLAWUB/wEXAUsBZQH/ARcBSwFlAf8BFwFL + AWUB/wEXAUsBZQH/ARcBSwFlAf8BDAEoATgB/wEMASgBOAH/A5kB/wO3Af8DmQH/A1sB/wwAASABJQEI + Af8BdwGKAR4B/wEgASUBCAH/A0QF/wPYBf8DKAH/A5YB/wMoAf8kAAEVATYBSQH/AQsBHgEoAf8BJwFn + AYkB/wEVATYBSQH/HAADNQH/A8EB/wPYAf8D2AX/AzUB/wgAAzUB/wHLAesBMwH/AawBxwErAf8BrAHH + ASsB/wGaAbIBJwH/AzUB/wQAAQgBGwEmAf8BEwE+AVQB/wETAT4BVAH/ARcBSwFlAf8BFwFLAWUB/wEX + AUsBZQH/ARcBSwFlAf8BFwFLAWUB/wEXAUsBZQH/ARcBSwFlAf8BFwFLAWUB/wEXAUsBZQH/AQwBKAE4 + Af8BDAEoATgB/wO3Af8DWwH/CAABIAElAQgB/wFVAWMBFQH/ASABJQEIAf8DRAX/A9gF/wNEAf8BNgE/ + AQ4B/wMoAf8DawH/AygB/yAAAQsBHgEoAf8BJwFnAYkB/wEVATYBSQH/AQsBHgEoAf8cAAM1Af8DwQH/ + A8EB/wPBBf8DNQH/CAADNQH/AcsB6wEzAf8BmgGyAScB/wGaAbIBJwH/AZoBsgEnAf8DNQH/BAABCAEb + ASYB/wETAT4BVAH/ARcBSwFlAf8BFwFLAWUB/wEXAUsBZQH/ARcBSwFlAf8BDAEoATgB/wEXAUsBZQH/ + ARcBSwFlAf8BFwFLAWUB/wEXAUsBZQH/ARcBSwFlAf8BFwFLAWUB/wEXAUsBZQH/AQwBKAE4Af8BBQEQ + ARYB/wgAASABJQEIAf8BIAElAQgB/wNEBf8D2AX/A0QB/wGsAccBKwH/AcsB6wEzAf8BNgE/AQ4B/wMo + Af8DKAH/FAADRAH/BAABCwEeASgB/wEnAWcBiQH/ARUBNgFJAf8BFQE2AUkB/wEnAWcBiQH/AQsBHgEo + Af8EAAE2AT8BDgH/EAADNQH/A8EB/wPYAf8D2AX/AzUB/wgAAzUB/wHLAesBMwH/AawBxwErAf8BrAHH + ASsB/wGaAbIBJwH/AzUB/wQAAQgBGwEmAf8BCAEbASYB/wEXAUsBZQH/ARcBSwFlAf8BFwFLAWUB/wEM + ASgBOAH/ARcBSwFlAf8BFwFLAWUB/wEXAUsBZQH/AQwBKAE4Af8BDAEoATgB/wEMASgBOAH/ARcBSwFl + Af8BFwFLAWUB/wEIARsBJgH/EAADRAX/A9gF/wNEAf8BNgE/AQ4B/wHLAesBMwH/AawBxwErAf8BywHr + ATMB/wE2AT8BDgH/FAADRAX/AQsBHgEoAf8BJwFnAYkB/wEVATYBSQH/CAABFQE2AUkB/wEnAWcBiQH/ + AQsBHgEoAf8BywHrATMB/wE2AT8BDgH/DAADNQH/A8EB/wPBAf8DwQX/AzUB/wgAAzUB/wHLAesBMwH/ + AZoBsgEnAf8BmgGyAScB/wGaAbIBJwH/AzUB/wwAAQgBGwEmAf8BCAEbASYB/wEXAUsBZQH/ARcBSwFl + Af8BFwFLAWUB/wEXAUsBZQH/AQwBKAE4Af8BDAEoATgB/wEMASgBOAH/ARcBSwFlAf8BFwFLAWUB/wEI + ARsBJgH/EAADRAX/A9gF/wNEAf8IAAE2AT8BDgH/AcsB6wEzAf8BrAHHASsB/wHLAesBMwH/ATYBPwEO + Af8MAANEBf8D2AH/A8EB/wEVATYBSQH/EAABFQE2AUkB/wGaAbIBJwH/AawBxwErAf8BywHrATMB/wE2 + AT8BDgH/CAADNQH/A8EB/wPYAf8D2AX/AzUB/wgAAzUB/wHLAesBMwH/AawBxwErAf8BrAHHASsB/wGa + AbIBJwH/AzUB/xQAAQgBGwEmAf8BCAEbASYB/wEXAUsBZQH/ARcBSwFlAf8BDAEoATgB/wEXAUsBZQH/ + ARcBSwFlAf8BFwFLAWUB/wEIARsBJgH/EAADRAX/A9gF/wNEAf8QAAE2AT8BDgH/AcsB6wEzAf8BrAHH + ASsB/wHLAesBMwH/ATYBPwEOAf8EAANEBf8D2AH/A8EB/wPYBf8DRAH/CAABNgE/AQ4B/wHLAesBMwH/ + AawBxwErAf8BmgGyAScB/wGsAccBKwH/AcsB6wEzAf8BNgE/AQ4B/wgAAzUB/wM1Af8D2AX/AzUB/wM1 + Af8DNQH/AzUB/wHLAesBMwH/AawBxwErAf8DNQH/AzUB/yAAAQgBGwEmAf8BCAEbASYB/wEXAUsBZQH/ + ARcBSwFlAf8BFwFLAWUB/wEIARsBJgH/EAADRAX/A9gF/wNEAf8YAAE2AT8BDgH/AcsB6wEzAf8BrAHH + ASsB/wHLAesBMwH/ATYBPwEOAf8DRAX/A8EB/wPYBf8DRAH/EAABNgE/AQ4B/wHLAesBMwH/AawBxwEr + Af8BmgGyAScB/wHLAesBMwH/ATYBPwEOAf8QAAM1Af8DNQH/AzUB/wM1Af8DNQH/AzUB/wM1Af8DNQH/ + MAABCAEbASYB/wEIARsBJgH/AQgBGwEmAf8UAANEAf8D2AX/A0QB/yAAATYBPwEOAf8BywHrATMB/wGs + AccBKwH/ATYBPwEOAf8DRAH/A8EJ/wNEAf8YAAE2AT8BDgH/AcsB6wEzAf8BywHrATMB/wGaAbIBJwH/ + ATYBPwEOAf+AAANEAf8DRAH/A0QB/ygAATYBPwEOAf8BNgE/AQ4B/wE2AT8BDgH/BAADRAH/A0QB/wNE + Af8gAAE2AT8BDgH/ATYBPwEOAf8BNgE/AQ4B/0QAAUoBbAGWAf8BOgFVAXkB/wFcAYUBuQH/AUoBbAGW + Af8BSgFsAZYB/wE6AVUBeQH/A4cB/wE6AVUBeQH/AUoBbAGWAf8BSgFsAZYB/wE6AVUBeQH/AToBVQF5 + Af8BSgFsAZYB/wFKAWwBlgH/AToBVQF5Af8BKQE9AVkB/wJZAaYB/wJZAaYB/wJMAYMB/wIeAT8B/wEW + AR4BXQH/AgkBGQH/AhEBKQH/AggBPAH/AlgBpAH/AVkBcgGvAf8CJAFJAf8BQAFSAZAB/wIaATgB/wIc + ATwB/wIdATgB/wJzAcIB/wGZAtUB/wHFAvkB/wGmAeYB3wH/AZkC1QH/AZ4B3AHZAf8BxQL5Af8BtQH3 + AegB/wGJAb0BwwH/AZ4B3AHZAf8BngHcAdkB/wHQAvoB/wG1AfcB6AH/AYkBvQHDAf8BiQG9AcMB/wG2 + AfgB6wH/AZ4B3AHZAf8BTwF+AccB/wFPAX4BxwH/AUoBdwG8Af8BNgFUAYAB/wF0AZYBzAH/ATYBVAGA + Af8BZgGNAckB/wFPAX4BxwH/AU8BfgHHAf8BTwF+AccB/wFKAXcBvAH/ATYBVAGAAf8BdAGWAcwB/wE2 + AVQBgAH/AWYBjQHJAf8BTwF+AccB/wFKAWwBlgH/AToBVQF5Af8BKQE9AVkB/wFcAYUBuQH/AToBVQF5 + Af8BKQE9AVkB/wE6AVUBeQH/ASkBPQFZAf8BXAGFAbkB/wFcAYUBuQH/AToBVQF5Af8BSgFsAZYB/wE6 + AVUBeQH/AToBVQF5Af8BSgFsAZYB/wFKAWwBlgH/AjUBaAH/AhEBKQH/AgkBJgH/AmcBrwH/AgYBXgH/ + AjgBbAH/AgYBWQH/AggBPAH/AicBTgH/AggBPAH/AVkBcgGvAf8CCAFoAf8CWAGVAf8CSAGIAf8CFAEv + Af8CGQEyAf8BtQH3AegB/wGUAdAB1AH/AYkBvQHDAf8BngHcAdkB/wGmAeYB3gH/AZ4B3AHZAf8BngHe + AdkB/wG9AfkB9AH/AbwB+AHyAf8BvQH5AfQB/wGeAdwB2QH/AbYB+AHrAf8BrQHtAeAB/wHFAvkB/wHF + AvkB/wG0AfgB7AH/AU8BfgHHAf8BSgF3AbwB/wE2AVQBgAH/AYsBpgHPAf8BiwGmAc8B/wF0AZYBzAH/ + ATYBVAGAAf8BVwF7AbIB/wFHAXEBsQH/AUMBbAGpAf8BNgFUAYAB/wGLAaYBzwH/AYsBpgHPAf8BdAGW + AcwB/wE2AVQBgAH/AWYBjQHJAf8BOgFVAXkB/wFKAWwBlgH/AToBVQF5Af8BOgFVAXkB/wFEAVgBdAH/ + AToBVQF5Af8BSgFsAZYB/wFKAWwBlgH/AToBVQF5Af8BKQE9AVkB/wFcAYUBuQH/ASkBPQFZAf8BOgFV + AXkB/wFcAYUBuQH/AUoBbAGWAf8BSgFsAZYB/wJ4AcoB/wJMAYMB/wIyAWMB/wJ3AckB/wIMAXwB/wJc + AaoB/wI2AV8B/wIJARwB/wI6AWcB/wITAZoB/wJpAbIB/wIGAVoB/wJdAZ4B/wIGAVoB/wJBAXwB/wIZ + ATEB/wGJAb0BwwH/AYkBvQHDAf8BlQHNAdMB/wGZAtUB/wG1AfcB6AH/AbYB+AHrAf8B0AL6Af8BtQH3 + AegB/wGmAeYB3gH/AZkC1wH/AZ4B3gHZAf8BtgH4AesB/wGeAd4B2QH/AZQB0wHUAf8BngHcAdkB/wHF + AvkB/wFmAY0ByQH/ATYBVAGAAf8BiwGmAc8B/wF5AZEBtQH/ATwBSAFaAf8BPAFIAVoB/wEyAUEBWQH/ + ARcBJAE3Af8BJgE1AU0B/wEXASQBNwH/ATwBSAFaAf8BPAFIAVoB/wE8AUgBWgH/AXkBkQG1Af8BdAGW + AcwB/wE2AVQBgAH/AToBVQF5Af8BKQE9AVkB/wFKAWwBlgH/AToBVQF5Af8BSgFsAZYB/wFKAWwBlgH/ + AVwBhQG5Af8BOgFVAXkB/wE6AVUBeQH/AToBVQF5Af8BOgFVAXkB/wE6AVUBeQH/AToBVQF5Af8BOgFV + AXkB/wFcAYUBuQH/AVwBhQG5Af8CcwHCAf8CWQGmAf8CEQEpAf8CGQEyAf8CEQEpAf8CCQEcAf8COgFn + Af8CBgFaAf8CJQFFAf8CCQEbAf8CcwHCAf8CCwF1Af8CTwGIAf8CPAFzAf8BPgFQAY0B/wI2AV8B/wG2 + AfgB6wH/AYkBvQHDAf8BjAHAAcYB/wGMAcABxgH/AcUC+QH/AZ4B3gHZAf8BiQG9AcMB/wGVAc0B0wH/ + AYkBvQHDAf8BiQG9AcMB/wG2AfgB6wH/AbYB+AHrAf8BiQG9AcMB/wGZAtcB/wGZAtcB/wHFAvkB/wE2 + AVQBgAH/AYsBpgHPAf8BiwGmAc8B/wE8AUgBWgH/Ac0BwgHFAf8BrwGlAagB/wGnAZ0BnwH/AZkBjwGR + Af8BgAF0AXcB/wGAAXQBdwH/AYABdAF3Af8BgAF0AXcB/wGAAXQBdwH/ATwBSAFaAf8BiwGmAc8B/wF0 + AZYBzAH/AUoBbAGWAf8BOgFVAXkB/wE6AVUBeQH/AUoBbAGWAf8BSgFsAZYB/wFcAYUBuQH/AToBVQF5 + Af8BSgFsAZYB/wNsAf8BSgFsAZYB/wFKAWwBlgH/AToBVQF5Af8BKQE9AVkB/wFKAWwBlgH/AToBVQF5 + Af8BKQE9AVkB/wI2AV8B/wIIATwB/wJmAa0B/wJOAYYB/wIwAWAB/wIJARwB/wJPAYgB/wI8AXMB/wJd + AZ4B/wI8AXMB/wIRASkB/wIIATIB/wJvAbwB/wInAU4B/wIIATwB/wIZATIB/wHFAvkB/wG2AfgB6wH/ + AcUC+QH/AcUC+QH/AbYB+AHrAf8BiQG9AcMB/wGJAb0BwwH/AZ4B3AHZAf8BpgHmAd4B/wHGAfoB+QH/ + AbYB+AHrAf8BtgH4AesB/wGJAb0BwwH/AZkC1QH/AZMByQHPAf8BngHcAdkB/wE/AWMBmgH/ATYBVAGA + Af8BiwGmAc8B/wE8AUgBWgH/Ac0BwgHFAf8BuQGwAbMB/wG5AbABswH/AbkBsAGzAf8BuQGwAbMB/wG5 + AbABswH/AbkBsAGzAf8BuQGwAbMB/wGAAXQBdwH/ATwBSAFaAf8BiwGmAc8B/wE2AVQBgAH/AToBVQF5 + Af8BSgFsAZYB/wE6AVUBeQH/AVwBhQG5Af8BXAGFAbkB/wE6AVUBeQH/AVwBhQG5Af8BSgFsAZYB/wEp + AT0BWQH/AVwBhQG5Af8BXAGFAbkB/wEpAT0BWQH/AUoBbAGWAf8BSgFsAZYB/wOHAf8BOgFVAXkB/wIn + AU4B/wIMAXsB/wFTAWsBqAH/Ak8BiAH/AjwBcwH/AgkBFwH/AlkBpgH/AjwBcwH/Ak8BiAH/AjwBcwH/ + AkABegH/AgkBHAH/AjcBYgH/AicBTgH/AgoBcgH/Aj8BeAH/AcUC+QH/Ab0B+QH0Af8BlAHTAdQB/wGe + AdwB2QH/AdAC+gH/AbYB+AHrAf8BtgH4AesB/wG1AfcB6AH/AcUC+QH/AZ4B3AHZAf8BngHcAdkB/wHQ + AvoB/wG2AfgB6wH/AYkBvQHDAf8BiQG9AcMB/wGeAdwB2QH/AU8BfgHHAf8BPwFjAZoB/wE2AVQBgAH/ + ATwBSAFaAf8BzQHCAcUB/wG5AbABswH/ASMBJQGCAf8BuQGwAbMB/wF3AXoBzgH/AbkBsAGzAf8BZwFp + AawB/wG5AbABswH/AYABdAF3Af8BPAFIAVoB/wE2AVQBgAH/AUoBdwG8Af8BOgFVAXkB/wFKAWwBlgH/ + ASkBPQFZAf8BOgFVAXkB/wE6AVUBeQH/ASkBPQFZAf8BKQE9AVkB/wE6AVUBeQH/AToBVQF5Af8BOgFV + AXkB/wE6AVUBeQH/AToBVQF5Af8BXAGFAbkB/wFcAYUBuQH/AToBVQF5Af8BSgFsAZYB/wJCAX4B/wIn + AU4B/wJzAcIB/wIPAYcB/wIGAWAB/wIcATcB/wJZAaYB/wIHAUYB/wGGAaoB5QH/AkUBgwH/AWYBggG/ + Af8CNgFfAf8CKAFQAf8CfQHTAf8CBgFaAf8CBgFaAf8BtgH4AesB/wGeAdwB2QH/AZkC1QH/AZ4B3AHZ + Af8BlQHNAdMB/wHQAvoB/wG1AfcB6AH/AaYB5gHeAf8BiQG9AcMB/wGJAb0BwwH/Aa0B7QHgAf8BngHc + AdkB/wHQAvoB/wG2AfgB6wH/AYkBvQHDAf8BiQG9AcMB/wFPAX4BxwH/AU8BfgHHAf8BPwFjAZoB/wEX + ASQBNwH/AdUBygHNAf8BuQGwAbMB/wG5AbABswH/AbkBsAGzAf8BuQGwAbMB/wG5AbABswH/AbkBsAGz + Af8BuQGwAbMB/wGAAXQBdwH/ARcBJAE3Af8BSgF3AbwB/wFPAX4BxwH/AUoBbAGWAf8BOgFVAXkB/wE6 + AVUBeQH/AUoBbAGWAf8BOgFVAXkB/wFKAWwBlgH/AToBVQF5Af8BKQE9AVkB/wE6AVUBeQH/AUoBbAGW + Af8BSgFsAZYB/wE6AVUBeQH/AToBVQF5Af8BOgFVAXkB/wEpAT0BWQH/AToBVQF5Af8COgFwAf8CCgEU + Af8CNgFfAf8CDwGKAf8CDQGDAf8BWQFyAa8B/wFLAWEBngH/AlkBpgH/AmsBtgH/AjoBcQH/AigBUQH/ + AiYBRwH/AhUBLwH/AwoB/wKCAdkB/wF/AaIB3gH/AbYB+AHrAf8BiQG9AcMB/wGJAb0BwwH/AYkBvQHD + Af8BngHcAdkB/wG9AfkB9AH/AYkBvQHDAf8BjAHAAcYB/wGJAb0BwwH/AYkBvQHDAf8BkwHLAdMB/wGt + Ae0B4AH/AYkBvQHDAf8BlAHQAdQB/wG0AfgB7AH/AbYB+AHrAf8BTwF+AccB/wFPAX4BxwH/AU8BfgHH + Af8BGgEpAT8B/wHVAcoBzQH/AbkBsAGzAf8BPgGHAcIB/wG5AbABswH/AXcBegHOAf8BuQGwAbMB/wE2 + AToBzQH/AbkBsAGzAf8BgAF0AXcB/wEmATUBTQH/AU8BfgHHAf8BTwF+AccB/wE6AVUBeQH/AToBVQF5 + Af8BXAGFAbkB/wFcAYUBuQH/AUoBbAGWAf8BSgFsAZYB/wE6AVUBeQH/AToBVQF5Af8BSgFsAZYB/wEp + AT0BWQH/AUoBbAGWAf8BSgFsAZYB/wE6AVUBeQH/AToBVQF5Af8BSgFsAZYB/wFKAWwBlgH/AjwBcwH/ + Ak8BiAH/AhMBKQH/Ai4BVAH/AlUBnwH/AnMBwgH/AicBTgH/AiABQwH/AjcBYQH/AggBLQH/AhkBMgH/ + AlYBkgH/AgYBWgH/AhkBMgH/AgcBQAH/AhEBkQH/AaIB4gHZAf8BpgHmAd8B/wGmAeYB3gH/AcUC+QH/ + AdAC+gH/AdAC+gH/AcUC+QH/AZQB0wHUAf8BiQG9AcMB/wGeAdwB2QH/Ab0B+QH0Af8BtAH4AewB/wGm + AeYB3gH/AcUC+QH/Ab0B+QH0Af8BtQH3AegB/wFPAX4BxwH/AU8BfgHHAf8BTwF+AccB/wEXASQBNwH/ + AdoBzwHSAf8BuQGwAbMB/wG5AbABswH/AbkBsAGzAf8BuQGwAbMB/wG5AbABswH/AbkBsAGzAf8BuQGw + AbMB/wGZAY8BkQH/ARcBJAE3Af8BZgGNAckB/wFPAX4BxwH/AVwBhQG5Af8BOgFVAXkB/wE6AVUBeQH/ + AToBVQF5Af8DhwH/AToBVQF5Af8BOgFVAXkB/wFcAYUBuQH/AVwBhQG5Af8BOgFVAXkB/wFcAYUBuQH/ + AVwBhQG5Af8BOgFVAXkB/wFKAWwBlgH/AToBVQF5Af8BSgFsAZYB/wIGAVoB/wJPAYgB/wI8AXMB/wI2 + AV8B/wIuAVsB/wIJARwB/wIZATIB/wIoAVIB/wI4AWQB/wIIAWcB/wJnAbAB/wJPAYgB/wI0AWUB/wJP + AYgB/wIGAVkB/wIIATcB/wGmAeYB3wH/AZkC1QH/AbwB+AHyAf8BiQG9AcMB/wGeAdwB2QH/AZ4B3gHZ + Af8BngHeAdkB/wG2AfgB6wH/AbYB+AHrAf8BtgH4AesB/wGeAdwB2QH/AZUBzQHTAf8BlAHTAdQB/wGT + AckBzwH/AbwB+AHyAf8BxQL5Af8BTwF+AccB/wFPAX4BxwH/ATYBVAGAAf8BPAFIAVoB/wHWAcsBzgH/ + AbkBsAGzAf8BUQFUAagB/wG5AbABswH/ASwBLgGiAf8BuQGwAbMB/wEyAWwBTgH/AbkBsAGzAf8BpwGd + AZ8B/wEyAUEBWQH/ATYBVAGAAf8BZgGNAckB/wE6AVUBeQH/ASkBPQFZAf8BSgFsAZYB/wFKAWwBlgH/ + AToBVQF5Af8BSgFsAZYB/wEpAT0BWQH/ASkBPQFZAf8BKQE9AVkB/wE6AVUBeQH/AToBVQF5Af8BKQE9 + AVkB/wE6AVUBeQH/AToBVQF5Af8BOgFVAXkB/wFcAYUBuQH/AgcBTwH/AlQBjwH/AjoBcAH/AjYBXwH/ + AjgBbAH/AgcBYwH/Ak8BiAH/AhkBMgH/Am0BuAH/AoIB2QH/AkoBgQH/AlYBkgH/AUQBVwGVAf8CNAFd + Af8CCgEUAf8CEgErAf8BiQG9AcMB/wGeAd4B2QH/AaYB5gHeAf8BiQG9AcMB/wGJAb0BwwH/AYkBvQHD + Af8BtgH4AesB/wHFAvkB/wG1AfcB6AH/AYkBvQHDAf8BiQG9AcMB/wGeAdwB2QH/AZUBzQHTAf8BngHc + AdkB/wGZAtUB/wG1AfcB6AH/AWYBjQHJAf8BNgFUAYAB/wGLAaYBzwH/ATwBSAFaAf8B1gHLAc4B/wG5 + AbABswH/AbkBsAGzAf8BuQGwAbMB/wG5AbABswH/AbkBsAGzAf8BuQGwAbMB/wG5AbABswH/Aa8BpQGo + Af8BPAFIAVoB/wF0AZYBzAH/ATYBVAGAAf8BSgFsAZYB/wE6AVUBeQH/AUoBbAGWAf8BXAGFAbkB/wEp + AT0BWQH/AUoBbAGWAf8BOgFVAXkB/wE6AVUBeQH/ASkBPQFZAf8BKQE9AVkB/wEpAT0BWQH/A2wB/wE6 + AVUBeQH/AUoBbAGWAf8BKQE9AVkB/wE6AVUBeQH/AYEBpQHhAf8CcwHCAf8BPgFQAY0B/wI2AV8B/wJz + AcIB/wJUAY8B/wJUAY8B/wIJASEB/wI2AV8B/wJRAZcB/wJOAZIB/wJjAagB/wIgAUQB/wFVAW0BqgH/ + Ag0BfgH/AjYBXwH/AYwBwAHGAf8BiQG9AcMB/wHFAvkB/wHFAvkB/wHFAvkB/wHFAvkB/wG1AfcB6AH/ + AZ4B3AHZAf8B0AL6Af8BxQL5Af8BiQG9AcMB/wGJAb0BwwH/AZ4B3AHZAf8BngHcAdkB/wG2AfgB6wH/ + AasB7QHeAf8BNgFUAYAB/wGLAaYBzwH/AYsBpgHPAf8BPAFIAVoB/wHdAdIB1QH/AdoBzwHSAf8B2gHP + AdIB/wHaAc8B0gH/AdUBygHNAf8BzQHCAcUB/wHNAcIBxQH/Ac0BwgHFAf8BzQHCAcUB/wE8AUgBWgH/ + AYsBpgHPAf8BdAGWAcwB/wEpAT0BWQH/A2wB/wEpAT0BWQH/ASkBPQFZAf8BRwGxAXEB/wEpAT0BWQH/ + ASkBPQFZAf8BKQE9AVkB/wE1AZ8BXwH/ASkBPQFZAf8BQwGtAW0B/wEpAT0BWQH/AToBVQF5Af8BKQE9 + AVkB/wEpAT0BWQH/AToBVQF5Af8CRAF3Af8CJgFGAf8CCQEXAf8CNgFfAf8CXAGsAf8CPQFrAf8CXgGg + Af8BWQFyAa8B/wIZATIB/wIkAUsB/wIRASkB/wIdATkB/wInAU4B/wJtAbgB/wIPAYkB/wI0AV0B/wG2 + AfgB6wH/AbYB+AHrAf8BiQG9AcMB/wGeAd4B2QH/AakB6QHeAf8BxQL5Af8BngHcAdkB/wGeAdwB2QH/ + AZUBzQHTAf8BngHcAdkB/wHFAvkB/wHFAvkB/wGJAb0BwwH/AbYB+AHrAf8BtgH4AesB/wHFAvkB/wE/ + AWMBmgH/ATYBVAGAAf8BiwGmAc8B/wF5AZEBtQH/ATwBSAFaAf8BPAFIAVoB/wE8AUgBWgH/ARcBJAE3 + Af8BGwErAUMB/wEXASQBNwH/ATwBSAFaAf8BPAFIAVoB/wE8AUgBWgH/AXkBkQG1Af8BiwGmAc8B/wE2 + AVQBgAH/AV0BvAGNAf8BKQE9AVkB/wFsAcsBnAH/AToBpAFkAf8BPwGpAWkB/wEpAT0BWQH/AUYBsAFw + Af8BKQE9AVkB/wFKAbQBdAH/AVUBvwF/Af8BYgHBAZIB/wFnAcYBlwH/ASkBPQFZAf8BLQGXAVcB/wE2 + AaABYAH/ASkBPQFZAf8CMgFbAf8CPAFzAf8CTwGIAf8CEwEoAf8CJQFNAf8CDQGDAf8CcwHCAf8CBgFe + Af8CDgEkAf8CCgEXAf8CQgF+Af8CBgFaAf8CEQEpAf8CNgFfAf8CCAE8Af8CUgGNAf8BtgH4AesB/wGJ + Ab0BwwH/AZ4B3gHZAf8BngHcAdkB/wGeAdwB2QH/AcUC+QH/AYkBvQHDAf8BkwHJAc8B/wGeAdwB2QH/ + AZ4B3AHZAf8BmQLVAf8BxQL5Af8BtAH4AewB/wG2AfgB6wH/AYwBwAHGAf8BmQLXAf8BTwF+AccB/wE/ + AWMBmgH/ATYBVAGAAf8BiwGmAc8B/wGLAaYBzwH/AYsBpgHPAf8BNgFUAYAB/wFKAXcBvAH/AU8BfgHH + Af8BPwFjAZoB/wE2AVQBgAH/AYsBpgHPAf8BiwGmAc8B/wGLAaYBzwH/ATYBVAGAAf8BSgF3AbwB/wFL + AbUBdQH/AUIBrAFsAf8BWgG5AYoB/wFRAbABgQH/AVMBsgGDAf8BKQE9AVkB/wE+AagBaAH/ATgBogFi + Af8BNQGfAV8B/wFjAcIBkwH/AWABvwGQAf8BSQGzAXMB/wE3AaEBYQH/AUIBrAFsAf8BPQGnAWcB/wFB + AasBawH/AnMBwgH/AlkBpgH/AgcBRQH/Ak8BiAH/AgoBHQH/AicBTgH/AnMBwgH/Ag0BgwH/AicBTgH/ + AgYBWgH/AlYBkgH/AgYBWgH/AggBaAH/ASMBLwFtAf8CMgFiAf8CYwGpAf8BlAHTAdQB/wG2AfgB6wH/ + AYkBvQHDAf8BiQG9AcMB/wGZAtUB/wG1AfcB6AH/AYkBvQHDAf8BmQLVAf8BiQG9AcMB/wGVAc0B0wH/ + AZUBzQHTAf8BtgH4AesB/wG0AfgB7AH/AYkBvQHDAf8BngHcAdkB/wGeAdwB2QH/AU8BfgHHAf8BTwF+ + AccB/wE/AWMBmgH/ATYBVAGAAf8BiwGmAc8B/wE2AVQBgAH/AUoBdwG8Af8BTwF+AccB/wFPAX4BxwH/ + AU8BfgHHAf8BPwFjAZoB/wE2AVQBgAH/AYsBpgHPAf8BNgFUAYAB/wFKAXcBvAH/AU8BfgHHAf8BSgG0 + AXQB/wFMAbYBdgH/AUkBswFzAf8BPAGmAWYB/wE8AaYBZgH/AUUBrwFvAf8BNQGfAV8B/wFCAawBbAH/ + AVQBvgF+Af8BTAG2AXYB/wFAAaoBagH/AT0BpwFnAf8BPwGpAWkB/wE3AaEBYQH/ASYBkAFQAf8BQwGt + AW0B/wJzAcIB/wJZAaYB/wJZAaYB/wJTAZoB/wFpAYYBwgH/AjwBcwH/AigBUgH/AicBTgH/AicBTgH/ + Ag0BgwH/AnMBwgH/AlkBpgH/Aj0BdAH/AicBTgH/AlwBqQH/AnMBwgH/AZ4B3gHZAf8BtAH4AewB/wG2 + AfgB6wH/AYkBvQHDAf8BiQG9AcMB/wGeAdwB2QH/AakB6QHeAf8BiQG9AcMB/wGJAb0BwwH/AZ4B3gHZ + Af8BtAH4AewB/wHFAvkB/wHFAvkB/wGtAe0B4AH/AYkBvQHDAf8BiQG9AcMB/wFPAX4BxwH/AU8BfgHH + Af8BTwF+AccB/wE/AWMBmgH/ATYBVAGAAf8BZgGNAckB/wFPAX4BxwH/AU8BfgHHAf8BTwF+AccB/wFP + AX4BxwH/AU8BfgHHAf8BPwFjAZoB/wE2AVQBgAH/AWYBjQHJAf8BTwF+AccB/wFPAX4BxwH/AUIBTQE+ + BwABPgMAASgDAAFAAwABMAMAAQEBAAEBBQABgAEBFgAD/4EAAv8BHwH4BP8B+AH/AR8B+AHPAfMC/wHw + AT8BDAHwAY8B8QLnAeABDwHEASMBhwHhAeMBxwHAAQMB4AEHAeMBxwHBAYMBgAEAAfABDwHxAY8BwQGD + AgAB4AEHAfgBHwHBAYMCAAHgAQcB/AE/AoECAAHAAQMB/AE/AoECAAHAAQMB6AEXAoEBAAEBAeABBwHB + AYMCgQHAAQMBwQKDAcECgQHwAQcBgwHBAQEBgAHAAQMB/AEPAQcB4AEDAcAB8AEPAf8BHwEPAfABBwHg + BP8BHwH4AY8B8QL/gAAL @@ -400,38 +418,34 @@ 5 - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xMkMEa+wAAABPSURBVDhP5ZAx - DgAgCAMZ/f+HMcbYYOmg0UmHY2ibGzB3txNSgMKsHcD9ksBL5wcBPwyPCwLFJBjjVe4LFHGsgEDBAu6x - 4+AxAT9MkYJdKi90axNkwjxWAAAAAElFTkSuQmCC - - - - 168, 22 - - - Add Category - - - 168, 22 - - - Remove Category - - - 168, 22 - - - Set Category - 19, 8 False + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADdSURBVDhPzZJB + CoJQEIa9jy0iPFAnCDpAtG3ZooUE4b6oVtIuClpJIAgqZEVlKpqEHUAm5pGPmhTbRA18G//5P5iHgvA3 + I7ZniiQ7aVM9QZzcOKYbwVDbw8I6A2YAICBvg2VJdtjSs2Cse1Dt6tCYbliGO0UCFlLBxAj590yA0D4X + 1Ec7CK8JF9j+lUmWzoVlpYJaz4JKZ5ULZqWCT6F9Jhhowcv9eeBOoQBvPXoBrA0zF8yyR6V9LvCjGLYH + NxfMvipIMaQ3Ux6ClPYFsaUq/bmd0rspuIO/Pe3/bu5p+sr3gTvFEQAAAABJRU5ErkJggg== + + + + 98, 22 + + + Save + + + 37, 20 + + + File + 20, 60 @@ -456,41 +470,37 @@ 7 - - 37, 20 - - - File - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADdSURBVDhPzZJB - CoJQEIa9jy0iPFAnCDpAtG3ZooUE4b6oVtIuClpJIAgqZEVlKpqEHUAm5pGPmhTbRA18G//5P5iHgvA3 - I7ZniiQ7aVM9QZzcOKYbwVDbw8I6A2YAICBvg2VJdtjSs2Cse1Dt6tCYbliGO0UCFlLBxAj590yA0D4X - 1Ec7CK8JF9j+lUmWzoVlpYJaz4JKZ5ULZqWCT6F9Jhhowcv9eeBOoQBvPXoBrA0zF8yyR6V9LvCjGLYH - NxfMvipIMaQ3Ux6ClPYFsaUq/bmd0rspuIO/Pe3/bu5p+sr3gTvFEQAAAABJRU5ErkJggg== - - - - 98, 22 - - - Save - Top, Bottom, Left, Right - + 282, 8 - + + 148, 22 + + + Add Track + + + 148, 22 + + + Edit Track + + + 148, 22 + + + Remove Track + + 149, 70 - - contextMenuStrip2 + + trackContextMenuStrip - + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -514,32 +524,6 @@ 6 - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xMkMEa+wAAABPSURBVDhP5ZAx - DgAgCAMZ/f+HMcbYYOmg0UmHY2ibGzB3txNSgMKsHcD9ksBL5wcBPwyPCwLFJBjjVe4LFHGsgEDBAu6x - 4+AxAT9MkYJdKi90axNkwjxWAAAAAElFTkSuQmCC - - - - 148, 22 - - - Add Track - - - 148, 22 - - - Edit Track - - - 148, 22 - - - Remove Track - True @@ -3166,10 +3150,10 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - catImages + + trackListIcons - + System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/PckStudio.Core/FileFormats/PckAudioFile.cs b/PckStudio.Core/FileFormats/PckAudioFile.cs index 848d69b6..be018c01 100644 --- a/PckStudio.Core/FileFormats/PckAudioFile.cs +++ b/PckStudio.Core/FileFormats/PckAudioFile.cs @@ -7,20 +7,20 @@ namespace PckStudio.Core.FileFormats { public class PckAudioFile { - public class InvalidCategoryException : Exception + public class InvalidTrackListException : Exception { - public InvalidCategoryException(string message) : base(message) + public InvalidTrackListException(string message) : base(message) { } } public readonly int type = 1; - public AudioCategory[] Categories => Array.FindAll(_categories, c => c is not null); - private AudioCategory[] _categories { get; } = new AudioCategory[9]; + public AudioTrackList[] TrackLists => Array.FindAll(_trackLists, c => c is not null); + private AudioTrackList[] _trackLists { get; } = new AudioTrackList[9]; public Dictionary Credits { get; } = new Dictionary(); - public class AudioCategory + public class AudioTrackList { public enum EAudioType : int { @@ -43,10 +43,10 @@ namespace PckStudio.Core.FileFormats public string Name { get; set; } = string.Empty; public EAudioType AudioType { get; } - public List SongNames { get; } = new List(); + public List TrackNames { get; } = new List(); public EAudioParameterType parameterType { get; } - public AudioCategory(string name, EAudioParameterType parameterType, EAudioType audioType) + public AudioTrackList(string name, EAudioParameterType parameterType, EAudioType audioType) { this.Name = name; this.parameterType = parameterType; @@ -101,55 +101,55 @@ namespace PckStudio.Core.FileFormats public void AddCreditId(string creditId) => Credits.Add(creditId, string.Empty); - /// - public bool HasCategory(AudioCategory.EAudioType category) => GetCategory(category) is AudioCategory; + /// + public bool HasTrackList(AudioTrackList.EAudioType trackList) => GetTrackList(trackList) is AudioTrackList; - /// - public AudioCategory GetCategory(AudioCategory.EAudioType category) + /// + public AudioTrackList GetTrackList(AudioTrackList.EAudioType trackList) { - if (category < AudioCategory.EAudioType.Overworld || - category > AudioCategory.EAudioType.BuildOff) - throw new InvalidCategoryException(nameof(category)); - return _categories[(int)category]; + if (trackList < AudioTrackList.EAudioType.Overworld || + trackList > AudioTrackList.EAudioType.BuildOff) + throw new InvalidTrackListException(nameof(trackList)); + return _trackLists[(int)trackList]; } - /// - public bool TryGetCategory(AudioCategory.EAudioType category, out AudioCategory audioCategory) + /// + public bool TryGetTrackList(AudioTrackList.EAudioType trackList, out AudioTrackList audioTrackList) { - if (GetCategory(category) is AudioCategory a) + if (GetTrackList(trackList) is AudioTrackList a) { - audioCategory = a; + audioTrackList = a; return true; } - audioCategory = null; + audioTrackList = null; return false; } - /// True when category was created, otherwise false - /// - public bool AddCategory(AudioCategory.EAudioParameterType parameterType, AudioCategory.EAudioType category, string name = "") + /// True when track list was created, otherwise false + /// + public bool AddTrackList(AudioTrackList.EAudioParameterType parameterType, AudioTrackList.EAudioType trackList, string name = "") { - if (category < AudioCategory.EAudioType.Overworld || - category > AudioCategory.EAudioType.BuildOff) - throw new InvalidCategoryException(nameof(category)); - bool exists = HasCategory(category); + if (trackList < AudioTrackList.EAudioType.Overworld || + trackList > AudioTrackList.EAudioType.BuildOff) + throw new InvalidTrackListException(nameof(trackList)); + bool exists = HasTrackList(trackList); if (!exists) - _categories[(int)category] = new AudioCategory(name, parameterType, category); + _trackLists[(int)trackList] = new AudioTrackList(name, parameterType, trackList); return !exists; } - /// True when category was created, otherwise false - /// - public bool AddCategory(AudioCategory.EAudioType category) - => AddCategory(AudioCategory.EAudioParameterType.unk0, category); + /// True when track list was created, otherwise false + /// + public bool AddTrackList(AudioTrackList.EAudioType trackList) + => AddTrackList(AudioTrackList.EAudioParameterType.unk0, trackList); - /// True when category was removed, otherwise false - /// - public bool RemoveCategory(AudioCategory.EAudioType category) + /// True when track list was removed, otherwise false + /// + public bool RemoveTrackList(AudioTrackList.EAudioType trackList) { - bool exists = HasCategory(category); + bool exists = HasTrackList(trackList); if (exists) - _categories[(int)category] = null; + _trackLists[(int)trackList] = null; return exists; } diff --git a/PckStudio.Core/IO/PckAudio/PckAudioFileReader.cs b/PckStudio.Core/IO/PckAudio/PckAudioFileReader.cs index d1b8165a..f65a579a 100644 --- a/PckStudio.Core/IO/PckAudio/PckAudioFileReader.cs +++ b/PckStudio.Core/IO/PckAudio/PckAudioFileReader.cs @@ -21,7 +21,7 @@ namespace PckStudio.Core.IO.PckAudio private PckAudioFile _file; private ByteOrder _endianness; private List LUT = new List(); - private List _OriginalAudioTypeOrder = new List(); + private List _OriginalAudioTypeOrder = new List(); public PckAudioFileReader(ByteOrder endianness) { @@ -80,13 +80,13 @@ namespace PckStudio.Core.IO.PckAudio int categoryEntryCount = reader.ReadInt32(); for (; 0 < categoryEntryCount; categoryEntryCount--) { - var parameterType = (PckAudioFile.AudioCategory.EAudioParameterType)reader.ReadInt32(); - var audioType = (PckAudioFile.AudioCategory.EAudioType)reader.ReadInt32(); + var parameterType = (PckAudioFile.AudioTrackList.EAudioParameterType)reader.ReadInt32(); + var audioType = (PckAudioFile.AudioTrackList.EAudioType)reader.ReadInt32(); string name = ReadString(reader); // AddCategory puts the file's categories out of order and causes some songs to be put in the wrong categories // This is my simple fix for the issue. _OriginalAudioTypeOrder.Add(audioType); - _file.AddCategory(parameterType, audioType, name); + _file.AddTrackList(parameterType, audioType, name); } } @@ -94,7 +94,7 @@ namespace PckStudio.Core.IO.PckAudio { List credits = new List(); List creditIds = new List(); - foreach (PckAudioFile.AudioCategory.EAudioType c in _OriginalAudioTypeOrder) + foreach (PckAudioFile.AudioTrackList.EAudioType c in _OriginalAudioTypeOrder) { int audioCount = reader.ReadInt32(); for (; 0 < audioCount; audioCount--) @@ -104,7 +104,7 @@ namespace PckStudio.Core.IO.PckAudio switch (key) { case "CUENAME": - _file.GetCategory(c).SongNames.Add(value); + _file.GetTrackList(c).TrackNames.Add(value); break; case "CREDIT": credits.Add(value); diff --git a/PckStudio.Core/IO/PckAudio/PckAudioFileWriter.cs b/PckStudio.Core/IO/PckAudio/PckAudioFileWriter.cs index 73c343bb..b573f574 100644 --- a/PckStudio.Core/IO/PckAudio/PckAudioFileWriter.cs +++ b/PckStudio.Core/IO/PckAudio/PckAudioFileWriter.cs @@ -67,8 +67,8 @@ namespace PckStudio.Core.IO.PckAudio private void WriteCategories(EndiannessAwareBinaryWriter writer) { - writer.Write(_file.Categories.Length); - foreach (PckAudioFile.AudioCategory category in _file.Categories) + writer.Write(_file.TrackLists.Length); + foreach (PckAudioFile.AudioTrackList category in _file.TrackLists) { writer.Write((int)category.parameterType); writer.Write((int)category.AudioType); @@ -79,10 +79,10 @@ namespace PckStudio.Core.IO.PckAudio private void WriteCategorySongs(EndiannessAwareBinaryWriter writer) { bool addCredit = true; - foreach (PckAudioFile.AudioCategory category in _file.Categories) + foreach (PckAudioFile.AudioTrackList category in _file.TrackLists) { - writer.Write(category.SongNames.Count + (addCredit ? _file.Credits.Count * 2 : 0)); - foreach (var name in category.SongNames) + writer.Write(category.TrackNames.Count + (addCredit ? _file.Credits.Count * 2 : 0)); + foreach (var name in category.TrackNames) { writer.Write(LUT.IndexOf("CUENAME")); WriteString(writer, name);