Renamed Audio PCK members to in game names

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