66 Commits
Author SHA1 Message Date
Yorick Rommers 96683d3b57 merge gui to dev 2015-11-02 21:52:47 +01:00
Yorick Rommers 5a07e6251b added reset button 2015-11-02 21:40:28 +01:00
Yorick Rommers b9b300b14d Merge remote-tracking branch 'origin/search' into developer 2015-11-02 21:38:32 +01:00
Yorick Rommers 4e9d2222cf Merge branch 'developer' of https://github.com/yorickr/musicplayer into developer 2015-11-02 21:37:41 +01:00
Yorick Rommers 4a869f3399 added advanced search 2015-11-02 21:37:24 +01:00
kennyboy55 0d0a92f33a Fix albumart interface 2015-11-02 21:27:33 +01:00
kennyboy55 66c5285418 Merge remote-tracking branch 'origin/gui' into gui 2015-11-02 21:15:46 +01:00
kennyboy55 292405cf4d Remove playlist and songs from playlist 2015-11-02 21:15:24 +01:00
Janco Kock 8d7d8eaabc Some album art edits, bigger covers and current playing cover 2015-11-02 20:37:39 +01:00
kennyboy55 40cb55d7f6 Implemented Advanced Search interface 2015-11-02 18:17:22 +01:00
yorickr 56586355d3 Merge remote-tracking branch 'origin/gui' into developer 2015-11-02 17:38:12 +01:00
yorickr 56a2cb91a4 Removed useless arguments 2015-11-02 17:37:50 +01:00
kennyboy55 a4031daae8 Playlist based on server 2015-11-02 17:25:52 +01:00
kennyboy55 a1bfb15e6b Implemented song searching in application. API does not support it yet. 2015-11-02 17:03:31 +01:00
kennyboy55 c2229db72a Handle server error's 2015-11-02 12:18:09 +01:00
kennyboy55 f81c526255 Translate to english 2015-11-02 11:14:43 +01:00
kennyboy55 7b712460d2 Small GUI changes 2015-11-02 11:09:39 +01:00
kennyboy55 57229fc8b9 Added todo 2015-11-02 07:06:44 +01:00
kennyboy55 515f17eb62 Made genre/artist box larger 2015-11-01 20:16:55 +01:00
kennyboy55 98f6ab9bc0 Better handling of radiostation 2015-11-01 19:51:43 +01:00
kennyboy55 90f35de242 Better naming and buffering 2015-11-01 19:10:30 +01:00
kennyboy55 aa85ca5d26 Clear playlist when starting radio 2015-11-01 19:03:55 +01:00
kennyboy55 270db2d1a4 Added Slam-FM 2015-11-01 18:59:59 +01:00
Janco Kock fd629f54ff Fixed 3fm radio 2015-11-01 14:39:11 +01:00
kennyboy55 d774e250c5 Calculate length if unknown. 2015-11-01 14:24:16 +01:00
Janco Kock 93f9879c14 Fixed cross thread bug 2015-11-01 14:07:09 +01:00
kennyboy55 a6514189b0 Fix bufferbar not filling completely 2015-11-01 14:05:14 +01:00
Yorick Rommers 192e132f1d Changed artwork folder and server 2015-11-01 14:00:27 +01:00
Yorick Rommers d8a900ecb9 Changed artwork folder and server 2015-11-01 13:59:15 +01:00
kennyboy55 7e5dcb3cef Fix 3FM url and name 2015-11-01 13:55:34 +01:00
kennyboy55 17eaac40bf Added 3FM, added custom Radio URL 2015-11-01 13:39:37 +01:00
kennyboy55 dad829d1dd Added URL tools 2015-11-01 13:39:24 +01:00
kennyboy55 e218b58421 Faster buffering of radio station 2015-11-01 13:39:06 +01:00
Janco Kock 7f45afe80f Added support for radio stations 2015-11-01 13:07:11 +01:00
kennyboy55 05bf1bce21 Merge pull request #1 from yorickr/gui
Merge gui into develop
2015-11-01 12:12:52 +01:00
kennyboy55 740264099d Merge branch 'developer' into gui 2015-11-01 12:07:35 +01:00
kennyboy55 70bed9b661 Switch between server (untested) 2015-11-01 12:05:22 +01:00
kennyboy55 aa769cfad9 Easier switching when testing 2015-11-01 12:04:18 +01:00
kennyboy55 2f0b1915a3 Merge remote-tracking branch 'origin/gui' into gui 2015-11-01 01:00:58 +01:00
kennyboy55 cbf8588855 Improve dragging 2015-11-01 01:00:38 +01:00
kennyboy55 d665d0466d Press enter to create playlist. Handle / and \. Clear textbox on create. 2015-11-01 01:00:26 +01:00
Janco Kock e6683f0478 Changed image key 2015-11-01 00:29:10 +01:00
kennyboy55 46410149b1 Merge remote-tracking branch 'origin/gui' into gui 2015-11-01 00:22:33 +01:00
kennyboy55 34771e43c8 Catch negative position 2015-11-01 00:22:17 +01:00
Janco Kock 918bfd8871 Dragable songs to playlist working. We only need a better cursor 2015-11-01 00:18:11 +01:00
Janco Kock 68ca3af5ff Fixed albumcover load on startup 2015-10-31 22:23:39 +01:00
Yorick Rommers bc75eb9d34 Using URL Encoding now with the AntiXSS Library 2015-10-31 20:56:29 +01:00
kennyboy55 a8b618cd46 Don't keep selection when showing current playlist 2015-10-31 20:03:04 +01:00
kennyboy55 00dfd2a78b Search through all songs when creating playlist 2015-10-31 19:33:05 +01:00
kennyboy55 29eb193aea Bugfix gui anchor 2015-10-31 19:22:50 +01:00
kennyboy55 78cb6ccee7 Possible fix for handling broken songs 2015-10-31 19:19:51 +01:00
kennyboy55 88681a04e6 Add button to view current playlist 2015-10-31 19:16:30 +01:00
kennyboy55 5af3b29a84 Removed old code 2015-10-31 19:16:05 +01:00
kennyboy55 2a699353d2 Player now remembers playlist and allows previous/next 2015-10-31 19:09:44 +01:00
Janco Kock 6a9b2956de Fixed seeking on specific click on trackbar 2015-10-31 16:09:44 +01:00
kennyboy55 3ccfdbe282 Add icon. Add minimum size and Controls Anchors 2015-10-31 12:24:25 +01:00
kennyboy55 60f7d41279 Changed minimum size 2015-10-31 12:23:33 +01:00
kennyboy55 c99d3955d3 Bugfixes in loop song 2015-10-31 12:03:15 +01:00
kennyboy55 87404b0f85 Implemented play next, shuffle and loop. Implemented Artist and Genre search 2015-10-31 11:57:05 +01:00
kennyboy55 f9d92de0ab Visual Studio NewLine Change 2015-10-31 11:56:27 +01:00
kennyboy55 6190a6f0da Switch api 2015-10-31 11:56:15 +01:00
kennyboy55 a902b8c370 Disable album loading for testing 2015-10-31 11:56:05 +01:00
kennyboy55 c20a20534b Merge remote-tracking branch 'origin/gui' into gui 2015-10-31 00:05:46 +01:00
kennyboy55 9d56e2e3b4 Switch to new playlist automatically 2015-10-31 00:05:30 +01:00
Janco Kock 006bba7980 Added artwork download!! This is only a bottleneck at startup. 2015-10-31 00:03:24 +01:00
kennyboy55 d5bc7df7e1 Redesigned and fixed Playlist Maker 2015-10-30 23:57:02 +01:00
33 changed files with 4226 additions and 699 deletions
+88 -5
View File
@@ -5,16 +5,29 @@ using System.Text;
using System.Threading.Tasks;
using MusicPlayer;
using Newtonsoft.Json.Linq;
using System.IO;
using System.Drawing;
namespace MusicPlayer
{
public class APIHandler
{
private NetworkHandler nw;
private Image defaultCover;
public APIHandler(NetworkHandler nw)
{
this.nw = nw;
defaultCover = Image.FromStream(nw.downloadArtwork("default-cover.png"));
}
public JObject GetAllBySearch(string search, string album, string artist, string genre)
{
// Q artist genre album
JObject o = nw.SendString($"search?q={search}&album={album}&genre={genre}&artist={artist}");
Console.WriteLine(o.PropertyValues().ToString());
if (o["result"].ToString() == "OK") { return o; }
return null;
}
public string GetSongURLByID(string id)
@@ -46,6 +59,66 @@ namespace MusicPlayer
return GetSongsByArgs("album=" + year);
}
public List<Song> GetSongsBySearch(string search)
{
return GetSongsByArgs("search=" + search);
}
public List<Genre> Genrify(JObject o)
{
List<Genre> genreslist = new List<Genre>();
if (o["result"].ToString() == "OK")
{
for (int i = 0; i < o["genres"].Count(); i++)
{
genreslist.Add(new Genre(o["genres"][i][0].ToString()));
}
}
return genreslist;
}
public List<Artist> Artistify(JObject o)
{
List<Artist> artistlist = new List<Artist>();
if (o["result"].ToString() == "OK")
{
for (int i = 0; i < o["artists"].Count(); i++)
{
artistlist.Add(new Artist(o["artists"][i][0].ToString()));
}
}
return artistlist;
}
public List<Song> Songify(JObject o)
{
List<Song> allsongslist = new List<Song>();
if (o["result"].ToString() == "OK")
{
dynamic songs = o["songs"];
for (int i = 0; i < songs.Count; i++)
{
allsongslist.Add(new Song(songs[i][0].ToString(), songs[i][3].ToString(), songs[i][5].ToString(), songs[i][4].ToString(), songs[i][1].ToString(), (int)songs[i][9], this));
}
}
return allsongslist;
}
public List<Album> Albumify(JObject o)
{
List<Album> albumlist = new List<Album>();
if (o["result"].ToString() == "OK")
{
for (int i = 0; i < o["albums"].Count(); i++)
{
albumlist.Add(new Album(o["albums"][i][0].ToString()));
}
}
return albumlist;
}
public List<Song> GetAllSongs()
{
List<Song> allsongslist = new List<Song>();
@@ -82,7 +155,7 @@ namespace MusicPlayer
{
List<Artist> artistlist = new List<Artist>();
JObject o = nw.SendString("getartists?id=hallo");
JObject o = nw.SendString("getartists?");
if (o["result"].ToString() == "OK")
{
for (int i = 0; i < o["artists"].Count(); i++) {
@@ -92,11 +165,21 @@ namespace MusicPlayer
return artistlist;
}
public Image getAlbumCover(string album)
{
MemoryStream stream = nw.downloadArtwork(album + ".jpg");
if(stream != null)
{
return Image.FromStream(stream);
}
return defaultCover;
}
public List<Album> GetAlbums()
{
List<Album> albumlist = new List<Album>();
JObject o = nw.SendString("getalbums?id=hallo");
JObject o = nw.SendString("getalbums?");
if (o["result"].ToString() == "OK")
{
for (int i = 0; i < o["albums"].Count(); i++)
@@ -111,7 +194,7 @@ namespace MusicPlayer
public List<Year> GetYears()
{
List<Year> yearlist = new List<Year> ();
JObject o = nw.SendString("getyears?id=hallo");
JObject o = nw.SendString("getyears?");
if (o["result"].ToString() == "OK")
{
for (int i = 0; i < o["years"].Count(); i++)
@@ -125,7 +208,7 @@ namespace MusicPlayer
public List<Genre> GetGenres()
{
List<Genre> genreslist = new List<Genre>();
JObject o = nw.SendString("getgenres?id=hallo");
JObject o = nw.SendString("getgenres?");
if (o["result"].ToString() == "OK")
{
for (int i = 0; i < o["genres"].Count(); i++)
+177
View File
@@ -0,0 +1,177 @@
using System.Windows.Forms;
namespace MusicPlayer
{
partial class AdvancedSearch
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AdvancedSearch));
this.SearchTermTextBox = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.AlbumTextBox = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.ArtistTextBox = new System.Windows.Forms.TextBox();
this.GenreTextBox = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.SearchButton = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// SearchTermTextBox
//
this.SearchTermTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.SearchTermTextBox.Location = new System.Drawing.Point(12, 29);
this.SearchTermTextBox.Name = "SearchTermTextBox";
this.SearchTermTextBox.Size = new System.Drawing.Size(210, 20);
this.SearchTermTextBox.TabIndex = 0;
this.SearchTermTextBox.KeyDown += TextBox_KeyDown;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 13);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(68, 13);
this.label1.TabIndex = 1;
this.label1.Text = "Search Term";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(12, 70);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(36, 13);
this.label2.TabIndex = 2;
this.label2.Text = "Album";
//
// AlbumTextBox
//
this.AlbumTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.AlbumTextBox.Location = new System.Drawing.Point(12, 86);
this.AlbumTextBox.Name = "AlbumTextBox";
this.AlbumTextBox.Size = new System.Drawing.Size(210, 20);
this.AlbumTextBox.TabIndex = 3;
this.AlbumTextBox.KeyDown += TextBox_KeyDown;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(12, 119);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(30, 13);
this.label3.TabIndex = 4;
this.label3.Text = "Artist";
//
// ArtistTextBox
//
this.ArtistTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.ArtistTextBox.Location = new System.Drawing.Point(12, 135);
this.ArtistTextBox.Name = "ArtistTextBox";
this.ArtistTextBox.Size = new System.Drawing.Size(210, 20);
this.ArtistTextBox.TabIndex = 5;
this.ArtistTextBox.KeyDown += TextBox_KeyDown;
//
// GenreTextBox
//
this.GenreTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.GenreTextBox.Location = new System.Drawing.Point(12, 187);
this.GenreTextBox.Name = "GenreTextBox";
this.GenreTextBox.Size = new System.Drawing.Size(210, 20);
this.GenreTextBox.TabIndex = 6;
this.GenreTextBox.KeyDown += TextBox_KeyDown;
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(13, 168);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(36, 13);
this.label4.TabIndex = 7;
this.label4.Text = "Genre";
//
// SearchButton
//
this.SearchButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.SearchButton.Location = new System.Drawing.Point(12, 226);
this.SearchButton.Name = "SearchButton";
this.SearchButton.Size = new System.Drawing.Size(210, 23);
this.SearchButton.TabIndex = 8;
this.SearchButton.Text = "Search";
this.SearchButton.UseVisualStyleBackColor = true;
this.SearchButton.Click += new System.EventHandler(this.SearchButton_Click);
//
// AdvancedSearch
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(234, 261);
this.Controls.Add(this.SearchButton);
this.Controls.Add(this.label4);
this.Controls.Add(this.GenreTextBox);
this.Controls.Add(this.ArtistTextBox);
this.Controls.Add(this.label3);
this.Controls.Add(this.AlbumTextBox);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.SearchTermTextBox);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximumSize = new System.Drawing.Size(450, 300);
this.MinimumSize = new System.Drawing.Size(250, 300);
this.Name = "AdvancedSearch";
this.Text = "Advanced Search";
this.ResumeLayout(false);
this.PerformLayout();
}
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Enter)
{
SearchButton_Click(sender, new System.EventArgs());
}
}
#endregion
private TextBox SearchTermTextBox;
private Label label1;
private Label label2;
private TextBox AlbumTextBox;
private Label label3;
private TextBox ArtistTextBox;
private TextBox GenreTextBox;
private Label label4;
private Button SearchButton;
}
}
+38
View File
@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MusicPlayer
{
public partial class AdvancedSearch : Form
{
private Main main;
public AdvancedSearch(Main main)
{
this.main = main;
InitializeComponent();
}
private void SearchButton_Click(object sender, EventArgs e)
{
if(SearchTermTextBox.Text.Length > 1)
{
SearchTermTextBox.ForeColor = Color.Black;
main.AdvancedSearchFilter(SearchTermTextBox.Text, AlbumTextBox.Text, ArtistTextBox.Text, GenreTextBox.Text);
this.Close();
}
else
{
SearchTermTextBox.ForeColor = Color.Red;
}
}
}
}
File diff suppressed because it is too large Load Diff
Executable → Regular
+4 -1
View File
@@ -1,4 +1,7 @@
namespace MusicPlayer
using System.Drawing;
namespace MusicPlayer
{
public class Album
{
+43 -14
View File
@@ -17,7 +17,13 @@ namespace MusicPlayer
public AudioState AState { get; set; }
public BufferState BState { get; set; }
public int Buffered { get { return Math.Min((int)((bufpos / (double)LengthBuffer) * 1000), 1000); } }
public int Buffered { get
{
if(CurrentSong is RadioStation)
return Math.Min((int)((bufpos - ms.Position) / 1000), 1000);
else
return Math.Min((int)((bufpos / (double)LengthBuffer) * 1000), 1000);
} }
private long LengthBuffer { get; set; }
private long bufpos = 0;
@@ -33,16 +39,19 @@ namespace MusicPlayer
private long seek = 0;
private Stream ms;
private MemoryStream ms;
private Thread network;
private Thread audio;
public Song CurrentSong;
public AudioHandler()
private Main main;
public AudioHandler(Main main)
{
CreateThreads();
this.main = main;
CreateThreads();
}
private void CreateThreads()
@@ -52,7 +61,7 @@ namespace MusicPlayer
CurrentSong = null;
Thread.Sleep(11);
Thread.Sleep(10);
ms = new MemoryStream();
@@ -119,6 +128,7 @@ namespace MusicPlayer
catch(Exception e)
{
AState = AudioState.STOPPED;
main.form.SongFinished();
return;
}
@@ -131,7 +141,10 @@ namespace MusicPlayer
waveOut.Init(blockAlignedStream);
waveOut.Play();
Length = CurrentSong.Seconds * waveOut.OutputWaveFormat.AverageBytesPerSecond;
if (CurrentSong.Seconds == 0)
Length = ms.Length / waveOut.OutputWaveFormat.AverageBytesPerSecond;
else
Length = CurrentSong.Seconds * waveOut.OutputWaveFormat.AverageBytesPerSecond;
CurrentTime = (int)(ms.Position / waveOut.OutputWaveFormat.AverageBytesPerSecond);
while (waveOut.PlaybackState != PlaybackState.Stopped)
@@ -160,10 +173,17 @@ namespace MusicPlayer
}
if (BState == BufferState.DONE && firstrun )
{
position = mp3fr.Position;
mp3fr.Close();
StreamFromMP3(ms,position, false);
break;
if( ! (CurrentSong is RadioStation))
{
position = mp3fr.Position;
mp3fr.Close();
StreamFromMP3(ms, position, false);
break;
}
else
{
AState = AudioState.STOPPED;
}
}
playpos = blockAlignedStream.Position;
@@ -171,6 +191,8 @@ namespace MusicPlayer
}
if(AState == AudioState.PLAYING && !firstrun)
main.form.SongFinished();
AState = AudioState.STOPPED;
playpos = 0;
CurrentTime = 0;
@@ -181,7 +203,14 @@ namespace MusicPlayer
private void PlayAudio()
{
AState = AudioState.WAITING;
while (ms.Length < 65536 * 10 && BState != BufferState.DONE)
int buffertime = 0;
if (CurrentSong is RadioStation)
buffertime = 32768 * 10;
else
buffertime = 65536 * 10;
while (ms.Length < buffertime && BState != BufferState.DONE)
Thread.Sleep(1000);
AState = AudioState.PLAYING;
@@ -202,6 +231,7 @@ namespace MusicPlayer
{
BState = BufferState.EMPTY;
AState = AudioState.STOPPED;
main.form.SongFinished();
return;
}
@@ -210,8 +240,8 @@ namespace MusicPlayer
LengthBuffer = response.ContentLength;
using (var stream = response.GetResponseStream())
{
//byte[] buffer = new byte[65536]; // 64KB chunks
byte[] buffer = new byte[65536*4]; // 256KB chunks
byte[] buffer = new byte[65536]; // 64KB chunks
int read;
BState = BufferState.BUFFERING;
AState = AudioState.WAITING;
@@ -223,7 +253,6 @@ namespace MusicPlayer
ms.Write(buffer, 0, read);
ms.Position = pos;
this.bufpos = ms.Length;
}
}
@@ -0,0 +1,48 @@
namespace MusicPlayer
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 261);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
}
}
@@ -0,0 +1,39 @@
namespace MusicPlayer
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "Form1";
}
#endregion
}
}
@@ -0,0 +1,48 @@
namespace MusicPlayer
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 261);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
}
}
@@ -0,0 +1,48 @@
namespace MusicPlayer
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 261);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
}
}
Executable → Regular
+212 -6
View File
@@ -1,8 +1,11 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft.Json.Linq;
namespace MusicPlayer
{
@@ -14,7 +17,12 @@ namespace MusicPlayer
public PlaylistHandler pl;
public AudioHandler audio;
private SongsTable table;
public SongsTable table;
private List<string> genres;
private List<string> artists;
public List<Song> currentPlayingList;
public Main(NetworkHandler nw, APIHandler api, MainForm form, PlaylistHandler pl)
{
@@ -22,21 +30,84 @@ namespace MusicPlayer
this.api = api;
this.form = form;
form.main = this;
pl.main = this;
pl.Populate();
this.pl = pl;
audio = new AudioHandler();
audio = new AudioHandler(this);
table = new SongsTable();
form.SongsTableView.DataSource = table;
form.SongsTableView.Columns[5].Visible = false;
genres = new List<string>();
artists = new List<string>();
currentPlayingList = new List<Song>();
Populate();
}
public void SwitchServer(string server)
{
Clear();
nw.ip = server;
Populate();
}
private void Clear()
{
form.GenreListBox.Items.Clear();
form.ArtistListBox.Items.Clear();
form.AlbumListView.Items.Clear();
form.PlaylistBox.Items.Clear();
table.Clear();
genres = new List<string>();
artists = new List<string>();
currentPlayingList = new List<Song>();
}
private void Populate()
{
this.api.GetAlbums().ForEach(a => form.AlbumListView.Items.Add(a.albumnaam));
this.api.GetArtists().ForEach(a => form.ArtistListBox.Items.Add(a.naam));
this.api.GetGenres().ForEach(g => form.GenreListBox.Items.Add(g.name));
this.pl.GetPlaylists().ForEach(p => form.PlaylistBox.Items.Add(p.name));
this.api.GetAlbums().ForEach(a => { form.AlbumListView.Items.Add(a.albumnaam);});
this.api.GetArtists().ForEach(a => { artists.Add(a.naam); form.ArtistListBox.Items.Add(a.naam); });
this.api.GetGenres().ForEach(g => { genres.Add(g.name); form.GenreListBox.Items.Add(g.name); });
this.pl.GetPlaylists().ForEach(p => form.PlaylistBox.Items.Add(p.name));
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(
delegate (object o, DoWorkEventArgs args)
{
BackgroundWorker b = o as BackgroundWorker;
ImageList imagelist = new ImageList();
List<string> templist = new List<string>();
Action action = () =>
{
foreach (ListViewItem item in form.AlbumListView.Items)
{
templist.Add(item.Text);
}
};
form.Invoke(action);
foreach (string item in templist)
{
imagelist.Images.Add(item, api.getAlbumCover(item));
}
action = () => {
imagelist.ImageSize = new System.Drawing.Size(64,64);
imagelist.ColorDepth = ColorDepth.Depth32Bit;
form.AlbumListView.View = View.LargeIcon;
form.AlbumListView.LargeImageList = imagelist;
foreach (ListViewItem item in form.AlbumListView.Items)
{
item.ImageKey = item.Text;
}
};
form.Invoke(action);
});
bw.RunWorkerAsync();
}
public void Repopulate()
@@ -60,6 +131,129 @@ namespace MusicPlayer
});
}
public void SearchFilter(string search)
{
table.Clear();
api.GetSongsBySearch(search).ForEach(s =>
{
table.Add(s);
});
}
public void AdvancedSearchFilter(string search, string album, string artist, string genre)
{
JObject o = api.GetAllBySearch(search, album, artist, genre);
if (o != null)
{
//q
form.AlbumListView.Items.Clear();
form.ArtistListBox.Items.Clear();
form.GenreListBox.Items.Clear();
form.PlaylistBox.Items.Clear();
table.Clear();
api.Songify(o).ForEach(s => table.Add(s));
//albums
api.Albumify(o).ForEach(a => form.AlbumListView.Items.Add(a.albumnaam));
//artists
api.Artistify(o).ForEach(a => form.ArtistListBox.Items.Add(a.naam));
//genres
api.Genrify(o).ForEach(g => form.GenreListBox.Items.Add(g.name));
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(
delegate (object x, DoWorkEventArgs args)
{
BackgroundWorker b = x as BackgroundWorker;
ImageList imagelist = new ImageList();
List<string> templist = new List<string>();
Action action = () =>
{
foreach (ListViewItem item in form.AlbumListView.Items)
{
templist.Add(item.Text);
}
};
form.Invoke(action);
foreach (string item in templist)
{
imagelist.Images.Add(item, api.getAlbumCover(item));
}
action = () => {
form.AlbumListView.LargeImageList = imagelist;
foreach (ListViewItem item in form.AlbumListView.Items)
{
item.ImageKey = item.Text;
}
};
form.Invoke(action);
});
bw.RunWorkerAsync();
}
}
public void FilterCurrentPlaying()
{
table.Clear();
currentPlayingList.ForEach(s =>
{
table.Add(s);
});
form.GenreListBox.ClearSelected();
form.ArtistListBox.ClearSelected();
form.PlaylistBox.ClearSelected();
form.AlbumListView.SelectedIndices.Clear();
}
public void SearchArtist(string search)
{
form.ArtistListBox.Items.Clear();
if (search.Length > 1)
{
string sPattern = search;
foreach (string s in artists)
{
if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
form.ArtistListBox.Items.Add(s);
}
}
}
else
{
artists.ForEach(a => form.ArtistListBox.Items.Add(a));
}
}
public void SearchGenre(string search)
{
form.GenreListBox.Items.Clear();
if (search.Length > 1)
{
string sPattern = search;
foreach (string s in genres)
{
if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
form.GenreListBox.Items.Add(s);
}
}
}
else
{
genres.ForEach(g => form.GenreListBox.Items.Add(g));
}
}
public void GenreFilter(string genre)
{
table.Clear();
@@ -102,6 +296,18 @@ namespace MusicPlayer
return str;
}
public static bool CheckURLValid(string source)
{
Uri uriResult;
return Uri.TryCreate(source, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp;
}
public static string GetDomain(string url)
{
Uri uri = new Uri(url);
return uri.Host;
}
}
}
+468 -88
View File
@@ -1,4 +1,6 @@
namespace MusicPlayer
using System;
namespace MusicPlayer
{
partial class MainForm
{
@@ -29,6 +31,7 @@
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.SongsTableView = new System.Windows.Forms.DataGridView();
this.GenreListBox = new System.Windows.Forms.ListBox();
@@ -37,10 +40,10 @@
this.MainPanel = new System.Windows.Forms.Panel();
this.SplitContainer = new System.Windows.Forms.SplitContainer();
this.PlaylistBox = new System.Windows.Forms.ListBox();
this.PlaylistListLabel = new System.Windows.Forms.Label();
this.AlbumListLabel = new System.Windows.Forms.Label();
this.ArtistListLabel = new System.Windows.Forms.Label();
this.GenreListLabel = new System.Windows.Forms.Label();
this.PlaylistListLabel = new System.Windows.Forms.Label();
this.MenuStrip = new System.Windows.Forms.MenuStrip();
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
@@ -48,13 +51,45 @@
this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.overviewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.playlistsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
this.ViewQueueButton = new System.Windows.Forms.ToolStripMenuItem();
this.playbackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.PlayNextSongButton = new System.Windows.Forms.ToolStripMenuItem();
this.LoopSongButton = new System.Windows.Forms.ToolStripMenuItem();
this.ShuffleSongButton = new System.Windows.Forms.ToolStripMenuItem();
this.playlistToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.loadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.makeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
this.viewPlaylistToolstripMenuButton = new System.Windows.Forms.ToolStripMenuItem();
this.searchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.SearchGenresToolStripLabel = new System.Windows.Forms.ToolStripMenuItem();
this.SearchGenresTextBox = new System.Windows.Forms.ToolStripTextBox();
this.ClearGenreSearchButton = new System.Windows.Forms.ToolStripMenuItem();
this.SearchArtistToolStripLabel = new System.Windows.Forms.ToolStripMenuItem();
this.SearchArtistsTextBox = new System.Windows.Forms.ToolStripTextBox();
this.ClearArtistSearchButton = new System.Windows.Forms.ToolStripMenuItem();
this.songsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.SearchSongsTextBox = new System.Windows.Forms.ToolStripTextBox();
this.SearchSongsButton = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
this.AdvancedSearchButton = new System.Windows.Forms.ToolStripMenuItem();
this.serverToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.SelectServerJancoButton = new System.Windows.Forms.ToolStripMenuItem();
this.SelectServerYorickButton = new System.Windows.Forms.ToolStripMenuItem();
this.radioToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
this.fMToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.slamFMToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.qDanceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
this.customToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.RadioStationTextBox = new System.Windows.Forms.ToolStripTextBox();
this.SetRadioStationButton = new System.Windows.Forms.ToolStripMenuItem();
this.ControlsPanel = new System.Windows.Forms.Panel();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.NextButton = new System.Windows.Forms.Button();
this.PreviousButton = new System.Windows.Forms.Button();
this.CurrentSongLabel = new System.Windows.Forms.Label();
this.SeperatorLabel = new System.Windows.Forms.Label();
this.LabelTotalTime = new System.Windows.Forms.Label();
this.LabelCurrentTime = new System.Windows.Forms.Label();
this.PositionTrackBar = new System.Windows.Forms.TrackBar();
@@ -72,6 +107,10 @@
this.NotifyMenuStripPlayButton = new System.Windows.Forms.ToolStripMenuItem();
this.NotifyMenuStripPauseButton = new System.Windows.Forms.ToolStripMenuItem();
this.NotifyMenuStripStopButton = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.NotifyMenuStripNextButton = new System.Windows.Forms.ToolStripMenuItem();
this.NotifyMenuStripPreviousButton = new System.Windows.Forms.ToolStripMenuItem();
this.resetToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
((System.ComponentModel.ISupportInitialize)(this.SongsTableView)).BeginInit();
this.MainPanel.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.SplitContainer)).BeginInit();
@@ -80,6 +119,7 @@
this.SplitContainer.SuspendLayout();
this.MenuStrip.SuspendLayout();
this.ControlsPanel.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.PositionTrackBar)).BeginInit();
this.NotifyMenuStrip.SuspendLayout();
this.SuspendLayout();
@@ -91,6 +131,14 @@
this.SongsTableView.AllowUserToResizeRows = false;
this.SongsTableView.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
this.SongsTableView.BackgroundColor = System.Drawing.SystemColors.Control;
dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.ControlLight;
dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText;
dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.SongsTableView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle4;
this.SongsTableView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.SongsTableView.Dock = System.Windows.Forms.DockStyle.Fill;
this.SongsTableView.Location = new System.Drawing.Point(0, 0);
@@ -100,9 +148,12 @@
this.SongsTableView.RowHeadersVisible = false;
this.SongsTableView.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.SongsTableView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.SongsTableView.Size = new System.Drawing.Size(760, 175);
this.SongsTableView.Size = new System.Drawing.Size(760, 174);
this.SongsTableView.TabIndex = 0;
this.SongsTableView.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.SongsTableView_CellDoubleClick);
this.SongsTableView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.SongsTableView_MouseDown);
this.SongsTableView.MouseMove += new System.Windows.Forms.MouseEventHandler(this.SongsTableView_MouseMove);
this.SongsTableView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.SongsTableView_MouseUp);
//
// GenreListBox
//
@@ -110,9 +161,9 @@
| System.Windows.Forms.AnchorStyles.Left)));
this.GenreListBox.BackColor = System.Drawing.SystemColors.Control;
this.GenreListBox.FormattingEnabled = true;
this.GenreListBox.Location = new System.Drawing.Point(3, 3);
this.GenreListBox.Location = new System.Drawing.Point(0, 0);
this.GenreListBox.Name = "GenreListBox";
this.GenreListBox.Size = new System.Drawing.Size(150, 121);
this.GenreListBox.Size = new System.Drawing.Size(175, 121);
this.GenreListBox.Sorted = true;
this.GenreListBox.TabIndex = 1;
this.GenreListBox.SelectedIndexChanged += new System.EventHandler(this.GenreListBox_SelectedIndexChanged);
@@ -123,13 +174,13 @@
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.AlbumListView.BackColor = System.Drawing.SystemColors.Control;
this.AlbumListView.Location = new System.Drawing.Point(309, 3);
this.AlbumListView.Location = new System.Drawing.Point(362, 0);
this.AlbumListView.MultiSelect = false;
this.AlbumListView.Name = "AlbumListView";
this.AlbumListView.Size = new System.Drawing.Size(451, 121);
this.AlbumListView.Size = new System.Drawing.Size(398, 121);
this.AlbumListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
this.AlbumListView.TabIndex = 2;
this.AlbumListView.TileSize = new System.Drawing.Size(140, 30);
this.AlbumListView.TileSize = new System.Drawing.Size(185, 30);
this.AlbumListView.UseCompatibleStateImageBehavior = false;
this.AlbumListView.View = System.Windows.Forms.View.Tile;
this.AlbumListView.SelectedIndexChanged += new System.EventHandler(this.AlbumListView_SelectedIndexChanged);
@@ -140,9 +191,9 @@
| System.Windows.Forms.AnchorStyles.Left)));
this.ArtistListBox.BackColor = System.Drawing.SystemColors.Control;
this.ArtistListBox.FormattingEnabled = true;
this.ArtistListBox.Location = new System.Drawing.Point(156, 3);
this.ArtistListBox.Location = new System.Drawing.Point(181, 0);
this.ArtistListBox.Name = "ArtistListBox";
this.ArtistListBox.Size = new System.Drawing.Size(150, 121);
this.ArtistListBox.Size = new System.Drawing.Size(175, 121);
this.ArtistListBox.Sorted = true;
this.ArtistListBox.TabIndex = 3;
this.ArtistListBox.SelectedIndexChanged += new System.EventHandler(this.ArtistListBox_SelectedIndexChanged);
@@ -154,13 +205,13 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.MainPanel.BackColor = System.Drawing.SystemColors.Window;
this.MainPanel.Controls.Add(this.SplitContainer);
this.MainPanel.Controls.Add(this.PlaylistListLabel);
this.MainPanel.Controls.Add(this.AlbumListLabel);
this.MainPanel.Controls.Add(this.ArtistListLabel);
this.MainPanel.Controls.Add(this.GenreListLabel);
this.MainPanel.Controls.Add(this.PlaylistListLabel);
this.MainPanel.Location = new System.Drawing.Point(0, 24);
this.MainPanel.Name = "MainPanel";
this.MainPanel.Size = new System.Drawing.Size(784, 352);
this.MainPanel.Size = new System.Drawing.Size(784, 351);
this.MainPanel.TabIndex = 5;
//
// SplitContainer
@@ -182,13 +233,14 @@
// SplitContainer.Panel2
//
this.SplitContainer.Panel2.Controls.Add(this.SongsTableView);
this.SplitContainer.Size = new System.Drawing.Size(760, 314);
this.SplitContainer.Size = new System.Drawing.Size(760, 313);
this.SplitContainer.SplitterDistance = 131;
this.SplitContainer.SplitterWidth = 8;
this.SplitContainer.TabIndex = 9;
//
// PlaylistBox
//
this.PlaylistBox.BackColor = System.Drawing.SystemColors.Control;
this.PlaylistBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.PlaylistBox.FormattingEnabled = true;
this.PlaylistBox.Location = new System.Drawing.Point(0, 0);
@@ -198,20 +250,10 @@
this.PlaylistBox.Visible = false;
this.PlaylistBox.SelectedIndexChanged += new System.EventHandler(this.PlaylistBox_SelectedIndexChanged);
//
// PlaylistListLabel
//
this.PlaylistListLabel.AutoSize = true;
this.PlaylistListLabel.Location = new System.Drawing.Point(12, 8);
this.PlaylistListLabel.Name = "PlaylistListLabel";
this.PlaylistListLabel.Size = new System.Drawing.Size(39, 13);
this.PlaylistListLabel.TabIndex = 7;
this.PlaylistListLabel.Text = "Playlist";
this.PlaylistListLabel.Visible = false;
//
// AlbumListLabel
//
this.AlbumListLabel.AutoSize = true;
this.AlbumListLabel.Location = new System.Drawing.Point(321, 9);
this.AlbumListLabel.Location = new System.Drawing.Point(371, 9);
this.AlbumListLabel.Name = "AlbumListLabel";
this.AlbumListLabel.Size = new System.Drawing.Size(36, 13);
this.AlbumListLabel.TabIndex = 6;
@@ -220,7 +262,7 @@
// ArtistListLabel
//
this.ArtistListLabel.AutoSize = true;
this.ArtistListLabel.Location = new System.Drawing.Point(165, 9);
this.ArtistListLabel.Location = new System.Drawing.Point(190, 9);
this.ArtistListLabel.Name = "ArtistListLabel";
this.ArtistListLabel.Size = new System.Drawing.Size(30, 13);
this.ArtistListLabel.TabIndex = 5;
@@ -229,19 +271,33 @@
// GenreListLabel
//
this.GenreListLabel.AutoSize = true;
this.GenreListLabel.Location = new System.Drawing.Point(12, 9);
this.GenreListLabel.Location = new System.Drawing.Point(9, 9);
this.GenreListLabel.Name = "GenreListLabel";
this.GenreListLabel.Size = new System.Drawing.Size(36, 13);
this.GenreListLabel.TabIndex = 4;
this.GenreListLabel.Text = "Genre";
//
// PlaylistListLabel
//
this.PlaylistListLabel.AutoSize = true;
this.PlaylistListLabel.Location = new System.Drawing.Point(12, 9);
this.PlaylistListLabel.Name = "PlaylistListLabel";
this.PlaylistListLabel.Size = new System.Drawing.Size(39, 13);
this.PlaylistListLabel.TabIndex = 7;
this.PlaylistListLabel.Text = "Playlist";
this.PlaylistListLabel.Visible = false;
//
// MenuStrip
//
this.MenuStrip.BackColor = System.Drawing.SystemColors.WindowFrame;
this.MenuStrip.BackColor = System.Drawing.SystemColors.GrayText;
this.MenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fileToolStripMenuItem,
this.viewToolStripMenuItem,
this.playlistToolStripMenuItem});
this.playbackToolStripMenuItem,
this.playlistToolStripMenuItem,
this.searchToolStripMenuItem,
this.serverToolStripMenuItem,
this.radioToolStripMenuItem});
this.MenuStrip.Location = new System.Drawing.Point(0, 0);
this.MenuStrip.Name = "MenuStrip";
this.MenuStrip.Size = new System.Drawing.Size(784, 24);
@@ -273,7 +329,9 @@
//
this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.overviewToolStripMenuItem,
this.playlistsToolStripMenuItem});
this.playlistsToolStripMenuItem,
this.toolStripSeparator4,
this.ViewQueueButton});
this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
this.viewToolStripMenuItem.Text = "View";
@@ -292,40 +350,273 @@
this.playlistsToolStripMenuItem.Text = "Playlists";
this.playlistsToolStripMenuItem.Click += new System.EventHandler(this.playlistsToolStripMenuItem_Click);
//
// toolStripSeparator4
//
this.toolStripSeparator4.Name = "toolStripSeparator4";
this.toolStripSeparator4.Size = new System.Drawing.Size(120, 6);
//
// ViewQueueButton
//
this.ViewQueueButton.Name = "ViewQueueButton";
this.ViewQueueButton.Size = new System.Drawing.Size(123, 22);
this.ViewQueueButton.Text = "Queue";
this.ViewQueueButton.Click += new System.EventHandler(this.ViewCurrentPlaylistButton_Click);
//
// playbackToolStripMenuItem
//
this.playbackToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.PlayNextSongButton,
this.LoopSongButton,
this.ShuffleSongButton});
this.playbackToolStripMenuItem.Name = "playbackToolStripMenuItem";
this.playbackToolStripMenuItem.Size = new System.Drawing.Size(66, 20);
this.playbackToolStripMenuItem.Text = "Playback";
//
// PlayNextSongButton
//
this.PlayNextSongButton.Checked = true;
this.PlayNextSongButton.CheckOnClick = true;
this.PlayNextSongButton.CheckState = System.Windows.Forms.CheckState.Checked;
this.PlayNextSongButton.Name = "PlayNextSongButton";
this.PlayNextSongButton.Size = new System.Drawing.Size(123, 22);
this.PlayNextSongButton.Text = "Play Next";
//
// LoopSongButton
//
this.LoopSongButton.Checked = true;
this.LoopSongButton.CheckOnClick = true;
this.LoopSongButton.CheckState = System.Windows.Forms.CheckState.Checked;
this.LoopSongButton.Name = "LoopSongButton";
this.LoopSongButton.Size = new System.Drawing.Size(123, 22);
this.LoopSongButton.Text = "Loop";
//
// ShuffleSongButton
//
this.ShuffleSongButton.CheckOnClick = true;
this.ShuffleSongButton.Enabled = false;
this.ShuffleSongButton.Name = "ShuffleSongButton";
this.ShuffleSongButton.Size = new System.Drawing.Size(123, 22);
this.ShuffleSongButton.Text = "Shuffle";
//
// playlistToolStripMenuItem
//
this.playlistToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.saveToolStripMenuItem1,
this.loadToolStripMenuItem,
this.makeToolStripMenuItem});
this.makeToolStripMenuItem,
this.toolStripSeparator6,
this.viewPlaylistToolstripMenuButton});
this.playlistToolStripMenuItem.Name = "playlistToolStripMenuItem";
this.playlistToolStripMenuItem.Size = new System.Drawing.Size(56, 20);
this.playlistToolStripMenuItem.Text = "Playlist";
//
// saveToolStripMenuItem1
//
this.saveToolStripMenuItem1.Name = "saveToolStripMenuItem1";
this.saveToolStripMenuItem1.Size = new System.Drawing.Size(103, 22);
this.saveToolStripMenuItem1.Text = "Save";
//
// loadToolStripMenuItem
//
this.loadToolStripMenuItem.Name = "loadToolStripMenuItem";
this.loadToolStripMenuItem.Size = new System.Drawing.Size(103, 22);
this.loadToolStripMenuItem.Text = "Load";
//
// makeToolStripMenuItem
//
this.makeToolStripMenuItem.Name = "makeToolStripMenuItem";
this.makeToolStripMenuItem.Size = new System.Drawing.Size(103, 22);
this.makeToolStripMenuItem.Text = "Make";
this.makeToolStripMenuItem.Size = new System.Drawing.Size(139, 22);
this.makeToolStripMenuItem.Text = "Create / Edit";
this.makeToolStripMenuItem.Click += new System.EventHandler(this.makeToolStripMenuItem_Click);
//
// toolStripSeparator6
//
this.toolStripSeparator6.Name = "toolStripSeparator6";
this.toolStripSeparator6.Size = new System.Drawing.Size(136, 6);
//
// viewPlaylistToolstripMenuButton
//
this.viewPlaylistToolstripMenuButton.Name = "viewPlaylistToolstripMenuButton";
this.viewPlaylistToolstripMenuButton.Size = new System.Drawing.Size(139, 22);
this.viewPlaylistToolstripMenuButton.Text = "View";
this.viewPlaylistToolstripMenuButton.Click += new System.EventHandler(this.playlistsToolStripMenuItem_Click);
//
// searchToolStripMenuItem
//
this.searchToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.SearchGenresToolStripLabel,
this.SearchArtistToolStripLabel,
this.songsToolStripMenuItem,
this.toolStripSeparator7,
this.AdvancedSearchButton,
this.resetToolStripMenuItem});
this.searchToolStripMenuItem.Name = "searchToolStripMenuItem";
this.searchToolStripMenuItem.Size = new System.Drawing.Size(54, 20);
this.searchToolStripMenuItem.Text = "Search";
//
// SearchGenresToolStripLabel
//
this.SearchGenresToolStripLabel.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.SearchGenresTextBox,
this.ClearGenreSearchButton});
this.SearchGenresToolStripLabel.Name = "SearchGenresToolStripLabel";
this.SearchGenresToolStripLabel.Size = new System.Drawing.Size(127, 22);
this.SearchGenresToolStripLabel.Text = "Genres";
//
// SearchGenresTextBox
//
this.SearchGenresTextBox.Name = "SearchGenresTextBox";
this.SearchGenresTextBox.Size = new System.Drawing.Size(100, 23);
this.SearchGenresTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchGenresTextBox_KeyUp);
//
// ClearGenreSearchButton
//
this.ClearGenreSearchButton.Enabled = false;
this.ClearGenreSearchButton.Name = "ClearGenreSearchButton";
this.ClearGenreSearchButton.Size = new System.Drawing.Size(160, 22);
this.ClearGenreSearchButton.Text = "Clear Search";
this.ClearGenreSearchButton.Click += new System.EventHandler(this.ClearGenreSearchButton_Click);
//
// SearchArtistToolStripLabel
//
this.SearchArtistToolStripLabel.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.SearchArtistsTextBox,
this.ClearArtistSearchButton});
this.SearchArtistToolStripLabel.Name = "SearchArtistToolStripLabel";
this.SearchArtistToolStripLabel.Size = new System.Drawing.Size(127, 22);
this.SearchArtistToolStripLabel.Text = "Artists";
//
// SearchArtistsTextBox
//
this.SearchArtistsTextBox.Name = "SearchArtistsTextBox";
this.SearchArtistsTextBox.Size = new System.Drawing.Size(100, 23);
this.SearchArtistsTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchArtistsTextBox_KeyUp);
//
// ClearArtistSearchButton
//
this.ClearArtistSearchButton.Enabled = false;
this.ClearArtistSearchButton.Name = "ClearArtistSearchButton";
this.ClearArtistSearchButton.Size = new System.Drawing.Size(160, 22);
this.ClearArtistSearchButton.Text = "Clear Search";
this.ClearArtistSearchButton.Click += new System.EventHandler(this.ClearArtistSearchButton_Click);
//
// songsToolStripMenuItem
//
this.songsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.SearchSongsTextBox,
this.SearchSongsButton});
this.songsToolStripMenuItem.Name = "songsToolStripMenuItem";
this.songsToolStripMenuItem.Size = new System.Drawing.Size(127, 22);
this.songsToolStripMenuItem.Text = "Songs";
//
// SearchSongsTextBox
//
this.SearchSongsTextBox.Name = "SearchSongsTextBox";
this.SearchSongsTextBox.Size = new System.Drawing.Size(100, 23);
//
// SearchSongsButton
//
this.SearchSongsButton.Enabled = false;
this.SearchSongsButton.Name = "SearchSongsButton";
this.SearchSongsButton.Size = new System.Drawing.Size(160, 22);
this.SearchSongsButton.Text = "Search";
this.SearchSongsButton.Click += new System.EventHandler(this.SearchSongsButton_Click);
//
// toolStripSeparator7
//
this.toolStripSeparator7.Name = "toolStripSeparator7";
this.toolStripSeparator7.Size = new System.Drawing.Size(124, 6);
//
// AdvancedSearchButton
//
this.AdvancedSearchButton.Name = "AdvancedSearchButton";
this.AdvancedSearchButton.Size = new System.Drawing.Size(127, 22);
this.AdvancedSearchButton.Text = "Advanced";
this.AdvancedSearchButton.Click += new System.EventHandler(this.AdvancedSearchButton_Click);
//
// serverToolStripMenuItem
//
this.serverToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.SelectServerJancoButton,
this.SelectServerYorickButton});
this.serverToolStripMenuItem.Name = "serverToolStripMenuItem";
this.serverToolStripMenuItem.Size = new System.Drawing.Size(51, 20);
this.serverToolStripMenuItem.Text = "Server";
//
// SelectServerJancoButton
//
this.SelectServerJancoButton.Name = "SelectServerJancoButton";
this.SelectServerJancoButton.Size = new System.Drawing.Size(148, 22);
this.SelectServerJancoButton.Text = "jancokock.me";
this.SelectServerJancoButton.Click += new System.EventHandler(this.SelectServerJancoButton_Click);
//
// SelectServerYorickButton
//
this.SelectServerYorickButton.Name = "SelectServerYorickButton";
this.SelectServerYorickButton.Size = new System.Drawing.Size(148, 22);
this.SelectServerYorickButton.Text = "imegumii.nl";
this.SelectServerYorickButton.Click += new System.EventHandler(this.SelectServerYorickButton_Click);
//
// radioToolStripMenuItem
//
this.radioToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripMenuItem2,
this.fMToolStripMenuItem,
this.slamFMToolStripMenuItem,
this.qDanceToolStripMenuItem,
this.toolStripSeparator5,
this.customToolStripMenuItem});
this.radioToolStripMenuItem.Name = "radioToolStripMenuItem";
this.radioToolStripMenuItem.Size = new System.Drawing.Size(49, 20);
this.radioToolStripMenuItem.Text = "Radio";
//
// toolStripMenuItem2
//
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
this.toolStripMenuItem2.Size = new System.Drawing.Size(122, 22);
this.toolStripMenuItem2.Text = "538";
this.toolStripMenuItem2.Click += new System.EventHandler(this.toolStripMenuItem2_Click);
//
// fMToolStripMenuItem
//
this.fMToolStripMenuItem.Name = "fMToolStripMenuItem";
this.fMToolStripMenuItem.Size = new System.Drawing.Size(122, 22);
this.fMToolStripMenuItem.Text = "3FM";
this.fMToolStripMenuItem.Click += new System.EventHandler(this.fMToolStripMenuItem_Click);
//
// slamFMToolStripMenuItem
//
this.slamFMToolStripMenuItem.Name = "slamFMToolStripMenuItem";
this.slamFMToolStripMenuItem.Size = new System.Drawing.Size(122, 22);
this.slamFMToolStripMenuItem.Text = "Slam-FM";
this.slamFMToolStripMenuItem.Click += new System.EventHandler(this.slamFMToolStripMenuItem_Click);
//
// qDanceToolStripMenuItem
//
this.qDanceToolStripMenuItem.Name = "qDanceToolStripMenuItem";
this.qDanceToolStripMenuItem.Size = new System.Drawing.Size(122, 22);
this.qDanceToolStripMenuItem.Text = "Q-Dance";
this.qDanceToolStripMenuItem.Click += new System.EventHandler(this.qDanceToolStripMenuItem_Click);
//
// toolStripSeparator5
//
this.toolStripSeparator5.Name = "toolStripSeparator5";
this.toolStripSeparator5.Size = new System.Drawing.Size(119, 6);
//
// customToolStripMenuItem
//
this.customToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.RadioStationTextBox,
this.SetRadioStationButton});
this.customToolStripMenuItem.Name = "customToolStripMenuItem";
this.customToolStripMenuItem.Size = new System.Drawing.Size(122, 22);
this.customToolStripMenuItem.Text = "Custom";
//
// RadioStationTextBox
//
this.RadioStationTextBox.Name = "RadioStationTextBox";
this.RadioStationTextBox.Size = new System.Drawing.Size(100, 23);
//
// SetRadioStationButton
//
this.SetRadioStationButton.Name = "SetRadioStationButton";
this.SetRadioStationButton.Size = new System.Drawing.Size(160, 22);
this.SetRadioStationButton.Text = "Set";
this.SetRadioStationButton.Click += new System.EventHandler(this.SetRadioStationButton_Click);
//
// ControlsPanel
//
this.ControlsPanel.BackColor = System.Drawing.SystemColors.WindowFrame;
this.ControlsPanel.BackColor = System.Drawing.SystemColors.GrayText;
this.ControlsPanel.Controls.Add(this.pictureBox1);
this.ControlsPanel.Controls.Add(this.NextButton);
this.ControlsPanel.Controls.Add(this.PreviousButton);
this.ControlsPanel.Controls.Add(this.CurrentSongLabel);
this.ControlsPanel.Controls.Add(this.SeperatorLabel);
this.ControlsPanel.Controls.Add(this.LabelTotalTime);
this.ControlsPanel.Controls.Add(this.LabelCurrentTime);
this.ControlsPanel.Controls.Add(this.PositionTrackBar);
@@ -335,33 +626,55 @@
this.ControlsPanel.Controls.Add(this.PauseButton);
this.ControlsPanel.Controls.Add(this.PlayButton);
this.ControlsPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
this.ControlsPanel.Location = new System.Drawing.Point(0, 379);
this.ControlsPanel.Location = new System.Drawing.Point(0, 378);
this.ControlsPanel.Name = "ControlsPanel";
this.ControlsPanel.Size = new System.Drawing.Size(784, 83);
this.ControlsPanel.TabIndex = 4;
//
// pictureBox1
//
this.pictureBox1.BackColor = System.Drawing.SystemColors.Control;
this.pictureBox1.Location = new System.Drawing.Point(5, 5);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(72, 72);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox1.TabIndex = 14;
this.pictureBox1.TabStop = false;
//
// NextButton
//
this.NextButton.Location = new System.Drawing.Point(295, 54);
this.NextButton.Name = "NextButton";
this.NextButton.Size = new System.Drawing.Size(31, 23);
this.NextButton.TabIndex = 13;
this.NextButton.Text = ">";
this.NextButton.UseVisualStyleBackColor = true;
this.NextButton.Click += new System.EventHandler(this.NextButton_Click);
//
// PreviousButton
//
this.PreviousButton.Location = new System.Drawing.Point(258, 54);
this.PreviousButton.Name = "PreviousButton";
this.PreviousButton.Size = new System.Drawing.Size(31, 23);
this.PreviousButton.TabIndex = 12;
this.PreviousButton.Text = "<";
this.PreviousButton.UseVisualStyleBackColor = true;
this.PreviousButton.Click += new System.EventHandler(this.PreviousButton_Click);
//
// CurrentSongLabel
//
this.CurrentSongLabel.AutoSize = true;
this.CurrentSongLabel.Location = new System.Drawing.Point(256, 56);
this.CurrentSongLabel.Location = new System.Drawing.Point(338, 59);
this.CurrentSongLabel.Name = "CurrentSongLabel";
this.CurrentSongLabel.Size = new System.Drawing.Size(111, 13);
this.CurrentSongLabel.TabIndex = 11;
this.CurrentSongLabel.Text = "Not playing any songs";
//
// SeperatorLabel
//
this.SeperatorLabel.AutoSize = true;
this.SeperatorLabel.Location = new System.Drawing.Point(67, 35);
this.SeperatorLabel.Name = "SeperatorLabel";
this.SeperatorLabel.Size = new System.Drawing.Size(12, 13);
this.SeperatorLabel.TabIndex = 10;
this.SeperatorLabel.Text = "/";
//
// LabelTotalTime
//
this.LabelTotalTime.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.LabelTotalTime.AutoSize = true;
this.LabelTotalTime.Location = new System.Drawing.Point(90, 35);
this.LabelTotalTime.Location = new System.Drawing.Point(723, 26);
this.LabelTotalTime.Name = "LabelTotalTime";
this.LabelTotalTime.Size = new System.Drawing.Size(49, 13);
this.LabelTotalTime.TabIndex = 9;
@@ -370,7 +683,7 @@
// LabelCurrentTime
//
this.LabelCurrentTime.AutoSize = true;
this.LabelCurrentTime.Location = new System.Drawing.Point(12, 35);
this.LabelCurrentTime.Location = new System.Drawing.Point(93, 29);
this.LabelCurrentTime.Name = "LabelCurrentTime";
this.LabelCurrentTime.Size = new System.Drawing.Size(49, 13);
this.LabelCurrentTime.TabIndex = 8;
@@ -381,18 +694,19 @@
this.PositionTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.PositionTrackBar.Enabled = false;
this.PositionTrackBar.Location = new System.Drawing.Point(3, 3);
this.PositionTrackBar.Location = new System.Drawing.Point(83, 3);
this.PositionTrackBar.Maximum = 1000;
this.PositionTrackBar.Name = "PositionTrackBar";
this.PositionTrackBar.Size = new System.Drawing.Size(778, 45);
this.PositionTrackBar.Size = new System.Drawing.Size(698, 45);
this.PositionTrackBar.TabIndex = 7;
this.PositionTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
this.PositionTrackBar.MouseDown += new System.Windows.Forms.MouseEventHandler(this.PositionTrackBar_MouseDown);
//
// BufferLabel
//
this.BufferLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.BufferLabel.AutoSize = true;
this.BufferLabel.Location = new System.Drawing.Point(597, 56);
this.BufferLabel.Location = new System.Drawing.Point(601, 56);
this.BufferLabel.Name = "BufferLabel";
this.BufferLabel.Size = new System.Drawing.Size(35, 13);
this.BufferLabel.TabIndex = 5;
@@ -401,17 +715,17 @@
// BufferBar
//
this.BufferBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.BufferBar.Location = new System.Drawing.Point(638, 51);
this.BufferBar.Location = new System.Drawing.Point(642, 51);
this.BufferBar.Name = "BufferBar";
this.BufferBar.Size = new System.Drawing.Size(134, 23);
this.BufferBar.Size = new System.Drawing.Size(130, 23);
this.BufferBar.TabIndex = 3;
//
// StopButton
//
this.StopButton.Enabled = false;
this.StopButton.Location = new System.Drawing.Point(174, 51);
this.StopButton.Location = new System.Drawing.Point(203, 54);
this.StopButton.Name = "StopButton";
this.StopButton.Size = new System.Drawing.Size(75, 23);
this.StopButton.Size = new System.Drawing.Size(49, 23);
this.StopButton.TabIndex = 2;
this.StopButton.Text = "Stop";
this.StopButton.UseVisualStyleBackColor = true;
@@ -420,9 +734,9 @@
// PauseButton
//
this.PauseButton.Enabled = false;
this.PauseButton.Location = new System.Drawing.Point(93, 51);
this.PauseButton.Location = new System.Drawing.Point(148, 54);
this.PauseButton.Name = "PauseButton";
this.PauseButton.Size = new System.Drawing.Size(75, 23);
this.PauseButton.Size = new System.Drawing.Size(49, 23);
this.PauseButton.TabIndex = 1;
this.PauseButton.Text = "Pause";
this.PauseButton.UseVisualStyleBackColor = true;
@@ -430,9 +744,9 @@
//
// PlayButton
//
this.PlayButton.Location = new System.Drawing.Point(12, 51);
this.PlayButton.Location = new System.Drawing.Point(93, 54);
this.PlayButton.Name = "PlayButton";
this.PlayButton.Size = new System.Drawing.Size(75, 23);
this.PlayButton.Size = new System.Drawing.Size(49, 23);
this.PlayButton.TabIndex = 0;
this.PlayButton.Text = "Play";
this.PlayButton.UseVisualStyleBackColor = true;
@@ -440,14 +754,14 @@
//
// UpdateTimer
//
this.UpdateTimer.Interval = 150;
this.UpdateTimer.Interval = 200;
this.UpdateTimer.Tick += new System.EventHandler(this.UpdateTimer_Tick);
//
// NotifyIcon
//
this.NotifyIcon.ContextMenuStrip = this.NotifyMenuStrip;
this.NotifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("NotifyIcon.Icon")));
this.NotifyIcon.Text = "NotifyIcon";
this.NotifyIcon.Text = "YJMPD Music Player";
this.NotifyIcon.Visible = true;
this.NotifyIcon.MouseUp += new System.Windows.Forms.MouseEventHandler(this.NotifyIcon_Click);
//
@@ -458,9 +772,12 @@
this.toolStripSeparator2,
this.NotifyMenuStripPlayButton,
this.NotifyMenuStripPauseButton,
this.NotifyMenuStripStopButton});
this.NotifyMenuStripStopButton,
this.toolStripSeparator3,
this.NotifyMenuStripNextButton,
this.NotifyMenuStripPreviousButton});
this.NotifyMenuStrip.Name = "NotifyMenuStrip";
this.NotifyMenuStrip.Size = new System.Drawing.Size(119, 98);
this.NotifyMenuStrip.Size = new System.Drawing.Size(120, 148);
//
// NotifyMenuStripPlayingLabel
//
@@ -468,7 +785,7 @@
this.NotifyMenuStripPlayingSongLabel});
this.NotifyMenuStripPlayingLabel.Enabled = false;
this.NotifyMenuStripPlayingLabel.Name = "NotifyMenuStripPlayingLabel";
this.NotifyMenuStripPlayingLabel.Size = new System.Drawing.Size(118, 22);
this.NotifyMenuStripPlayingLabel.Size = new System.Drawing.Size(119, 22);
this.NotifyMenuStripPlayingLabel.Text = "Stopped";
//
// NotifyMenuStripPlayingSongLabel
@@ -482,12 +799,12 @@
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(115, 6);
this.toolStripSeparator2.Size = new System.Drawing.Size(116, 6);
//
// NotifyMenuStripPlayButton
//
this.NotifyMenuStripPlayButton.Name = "NotifyMenuStripPlayButton";
this.NotifyMenuStripPlayButton.Size = new System.Drawing.Size(118, 22);
this.NotifyMenuStripPlayButton.Size = new System.Drawing.Size(119, 22);
this.NotifyMenuStripPlayButton.Text = "Play";
this.NotifyMenuStripPlayButton.Click += new System.EventHandler(this.NotifyMenuStripPlayButton_Click);
//
@@ -495,7 +812,7 @@
//
this.NotifyMenuStripPauseButton.Enabled = false;
this.NotifyMenuStripPauseButton.Name = "NotifyMenuStripPauseButton";
this.NotifyMenuStripPauseButton.Size = new System.Drawing.Size(118, 22);
this.NotifyMenuStripPauseButton.Size = new System.Drawing.Size(119, 22);
this.NotifyMenuStripPauseButton.Text = "Pause";
this.NotifyMenuStripPauseButton.Click += new System.EventHandler(this.NotifyMenuStripPauseButton_Click);
//
@@ -503,15 +820,41 @@
//
this.NotifyMenuStripStopButton.Enabled = false;
this.NotifyMenuStripStopButton.Name = "NotifyMenuStripStopButton";
this.NotifyMenuStripStopButton.Size = new System.Drawing.Size(118, 22);
this.NotifyMenuStripStopButton.Size = new System.Drawing.Size(119, 22);
this.NotifyMenuStripStopButton.Text = "Stop";
this.NotifyMenuStripStopButton.Click += new System.EventHandler(this.NotifyMenuStripStopButton_Click);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(116, 6);
//
// NotifyMenuStripNextButton
//
this.NotifyMenuStripNextButton.Name = "NotifyMenuStripNextButton";
this.NotifyMenuStripNextButton.Size = new System.Drawing.Size(119, 22);
this.NotifyMenuStripNextButton.Text = "Next";
this.NotifyMenuStripNextButton.Click += new System.EventHandler(this.NotifyMenuStripNextButton_Click);
//
// NotifyMenuStripPreviousButton
//
this.NotifyMenuStripPreviousButton.Name = "NotifyMenuStripPreviousButton";
this.NotifyMenuStripPreviousButton.Size = new System.Drawing.Size(119, 22);
this.NotifyMenuStripPreviousButton.Text = "Previous";
this.NotifyMenuStripPreviousButton.Click += new System.EventHandler(this.NotifyMenuStripPreviousButton_Click);
//
// resetToolStripMenuItem
//
this.resetToolStripMenuItem.Name = "resetToolStripMenuItem";
this.resetToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.resetToolStripMenuItem.Text = "Reset";
this.resetToolStripMenuItem.Click += new System.EventHandler(this.resetToolStripMenuItem_Click);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(784, 462);
this.ClientSize = new System.Drawing.Size(784, 461);
this.Controls.Add(this.ControlsPanel);
this.Controls.Add(this.MainPanel);
this.Controls.Add(this.MenuStrip);
@@ -533,6 +876,7 @@
this.MenuStrip.PerformLayout();
this.ControlsPanel.ResumeLayout(false);
this.ControlsPanel.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.PositionTrackBar)).EndInit();
this.NotifyMenuStrip.ResumeLayout(false);
this.ResumeLayout(false);
@@ -562,7 +906,6 @@
private System.Windows.Forms.Label LabelCurrentTime;
private System.Windows.Forms.NotifyIcon NotifyIcon;
private System.Windows.Forms.Label CurrentSongLabel;
private System.Windows.Forms.Label SeperatorLabel;
private System.Windows.Forms.Label AlbumListLabel;
private System.Windows.Forms.Label ArtistListLabel;
private System.Windows.Forms.Label GenreListLabel;
@@ -572,8 +915,6 @@
private System.Windows.Forms.Label PlaylistListLabel;
private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem playlistToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem1;
private System.Windows.Forms.ToolStripMenuItem loadToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ContextMenuStrip NotifyMenuStrip;
private System.Windows.Forms.ToolStripMenuItem NotifyMenuStripPlayButton;
@@ -584,6 +925,45 @@
private System.Windows.Forms.ToolStripMenuItem NotifyMenuStripPlayingSongLabel;
private System.Windows.Forms.SplitContainer SplitContainer;
private System.Windows.Forms.ToolStripMenuItem makeToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem searchToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem SearchArtistToolStripLabel;
private System.Windows.Forms.ToolStripTextBox SearchArtistsTextBox;
private System.Windows.Forms.ToolStripMenuItem SearchGenresToolStripLabel;
private System.Windows.Forms.ToolStripTextBox SearchGenresTextBox;
private System.Windows.Forms.ToolStripMenuItem ClearArtistSearchButton;
private System.Windows.Forms.ToolStripMenuItem ClearGenreSearchButton;
private System.Windows.Forms.ToolStripMenuItem playbackToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem ShuffleSongButton;
private System.Windows.Forms.ToolStripMenuItem LoopSongButton;
private System.Windows.Forms.ToolStripMenuItem PlayNextSongButton;
private System.Windows.Forms.Button NextButton;
private System.Windows.Forms.Button PreviousButton;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
private System.Windows.Forms.ToolStripMenuItem NotifyMenuStripNextButton;
private System.Windows.Forms.ToolStripMenuItem NotifyMenuStripPreviousButton;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
private System.Windows.Forms.ToolStripMenuItem ViewQueueButton;
private System.Windows.Forms.ToolStripMenuItem serverToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem SelectServerJancoButton;
private System.Windows.Forms.ToolStripMenuItem SelectServerYorickButton;
private System.Windows.Forms.ToolStripMenuItem radioToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2;
private System.Windows.Forms.ToolStripMenuItem qDanceToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem customToolStripMenuItem;
private System.Windows.Forms.ToolStripTextBox RadioStationTextBox;
private System.Windows.Forms.ToolStripMenuItem SetRadioStationButton;
private System.Windows.Forms.ToolStripMenuItem fMToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
private System.Windows.Forms.ToolStripMenuItem slamFMToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator6;
private System.Windows.Forms.ToolStripMenuItem viewPlaylistToolstripMenuButton;
private System.Windows.Forms.ToolStripMenuItem songsToolStripMenuItem;
private System.Windows.Forms.ToolStripTextBox SearchSongsTextBox;
private System.Windows.Forms.ToolStripMenuItem SearchSongsButton;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator7;
private System.Windows.Forms.ToolStripMenuItem AdvancedSearchButton;
private System.Windows.Forms.ToolStripMenuItem resetToolStripMenuItem;
private System.Windows.Forms.PictureBox pictureBox1;
}
}
+337 -21
View File
@@ -18,7 +18,11 @@ namespace MusicPlayer
{
public partial class MainForm : Form
{
NotificationPopup p;
bool songFinished;
bool draggedstarted = false;
bool draggedcompleted = false;
int startx = 0;
int starty = 0;
public Main main
{
@@ -46,7 +50,7 @@ namespace MusicPlayer
this.PositionTrackBar_ValueChanged();
};
p = new NotificationPopup(this);
songFinished = false;
}
private void MainForm_Load(object sender, EventArgs e)
@@ -56,7 +60,10 @@ namespace MusicPlayer
private void PlayButton_Click(object sender, EventArgs e)
{
SongsTableView_CellDoubleClick(sender, new DataGridViewCellEventArgs(0, 0));
if (main.audio.AState == AudioHandler.AudioState.PAUSED)
main.audio.Play(main.audio.CurrentSong);
else
SongsTableView_CellDoubleClick(sender, new DataGridViewCellEventArgs(0, 0));
}
private void PauseButton_Click(object sender, EventArgs e)
@@ -69,6 +76,11 @@ namespace MusicPlayer
main.audio.Stop();
}
public void SongFinished()
{
songFinished = true;
}
private void UpdateTimer_Tick(object sender, EventArgs e)
{
//Trackbar
@@ -77,10 +89,11 @@ namespace MusicPlayer
else
PositionTrackBar.Enabled = false;
if (!clicked)
PositionTrackBar.Value = main.audio.Position;
PositionTrackBar.Value = Math.Max(main.audio.Position, 0);
//Buffer display
BufferBar.Value = main.audio.Buffered / 10;
if(main.audio.Buffered / 10 >= BufferBar.Minimum && main.audio.Buffered / 10 <= BufferBar.Maximum)
BufferBar.Value = main.audio.Buffered / 10;
//Time labels
if (!clicked)
@@ -91,10 +104,21 @@ namespace MusicPlayer
if (main.audio.CurrentSong == null)
CurrentSongLabel.Text = "Not playing any songs";
else
{
if (main.audio.CurrentSong.Seconds < 1)
PositionTrackBar.Enabled = false;
CurrentSongLabel.Text = "Currently playing: " + main.audio.CurrentSong.Name;
}
//Buttons and context menu
if (main.audio.AState == AudioHandler.AudioState.PLAYING)
//image box
if (AlbumListView.LargeImageList != null && main.audio.CurrentSong != null)
{
//Console.WriteLine(AlbumListView.LargeImageList.Images["Get Wet"]);
pictureBox1.Image = AlbumListView.LargeImageList.Images[main.audio.CurrentSong.Album];
}
//Buttons and context menu
if (main.audio.AState == AudioHandler.AudioState.PLAYING)
{
PlayButton.Enabled = false;
NotifyMenuStripPlayButton.Enabled = false;
@@ -110,6 +134,21 @@ namespace MusicPlayer
NotifyMenuStripPlayingSongLabel.Visible = false;
}
if (main.nw.ip == "http://jancokock.me")
SelectServerJancoButton.Enabled = false;
else
SelectServerJancoButton.Enabled = true;
if (main.nw.ip == "http://imegumii.nl")
SelectServerYorickButton.Enabled = false;
else
SelectServerYorickButton.Enabled = true;
if (SearchSongsTextBox.Text.Length == 0)
SearchSongsButton.Enabled = false;
else
SearchSongsButton.Enabled = true;
if (main.audio.AState == AudioHandler.AudioState.PAUSED)
{
PauseButton.Enabled = false;
@@ -139,6 +178,71 @@ namespace MusicPlayer
StopButton.Enabled = true;
NotifyMenuStripStopButton.Enabled = true;
}
if (RadioStationTextBox.Text.Length <= 10)
SetRadioStationButton.Enabled = false;
else
SetRadioStationButton.Enabled = true;
if(PlayNextSongButton.Checked)
{
ShuffleSongButton.Enabled = true;
}
else
{
ShuffleSongButton.Enabled = false;
ShuffleSongButton.Checked = false;
}
if (main.currentPlayingList.Count <= 1)
{
PreviousButton.Enabled = false;
NextButton.Enabled = false;
NotifyMenuStripPreviousButton.Enabled = false;
NotifyMenuStripNextButton.Enabled = false;
}
else
{
if (main.audio.CurrentSong is RadioStation)
{
main.currentPlayingList.Clear();
}
else
{
NextButton.Enabled = true;
NotifyMenuStripNextButton.Enabled = true;
if (ShuffleSongButton.Checked)
{
PreviousButton.Enabled = false;
NotifyMenuStripPreviousButton.Enabled = false;
}
else
{
PreviousButton.Enabled = true;
NotifyMenuStripPreviousButton.Enabled = true;
}
}
}
if (songFinished)
{
if (! (main.audio.CurrentSong is RadioStation) )
{
Thread.Sleep(20);
if (PlayNextSongButton.Checked)
{
NextButton_Click(this, new EventArgs());
}
else if (LoopSongButton.Checked)
{
main.audio.Play(main.audio.CurrentSong);
}
}
songFinished = false;
}
}
private void GenreListBox_SelectedIndexChanged(object sender, EventArgs e)
@@ -187,15 +291,19 @@ namespace MusicPlayer
private void SongsTableView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
SongsTable s = new SongsTable();
if (SongsTableView.SelectedRows.Count > 0)
if (e.RowIndex != -1)
{
var drv = SongsTableView.SelectedRows[0].DataBoundItem as DataRowView;
var row = drv.Row as DataRow;
s.ImportRow(row);
main.audio.Play((s.Rows[0][5] as Song));
}
SongsTable s = new SongsTable();
if (SongsTableView.SelectedRows.Count > 0)
{
main.currentPlayingList = main.table.AsEnumerable().Select(x => x[5] as Song).ToList();
var drv = SongsTableView.SelectedRows[0].DataBoundItem as DataRowView;
var row = drv.Row as DataRow;
s.ImportRow(row);
main.audio.Play((s.Rows[0][5] as Song));
}
}
}
private void PositionTrackBar_ValueChanged()
@@ -208,13 +316,6 @@ namespace MusicPlayer
private void NotifyIcon_Click(object sender, MouseEventArgs e)
{
/*
if (p.Visible)
p.Visible = false;
else
p.Visible = true;
*/
if (e.Button == MouseButtons.Left)
{
MethodInfo mi = typeof(NotifyIcon).GetMethod("ShowContextMenu", BindingFlags.Instance | BindingFlags.NonPublic);
@@ -284,7 +385,222 @@ namespace MusicPlayer
PlaylistMaker p = new PlaylistMaker(main.pl, main.api);
p.ShowDialog();
main.Repopulate();
}
private void SearchArtistsTextBox_KeyUp(object sender, KeyEventArgs e)
{
main.SearchArtist(SearchArtistsTextBox.Text);
if (SearchArtistsTextBox.Text.Length < 1)
ClearArtistSearchButton.Enabled = false;
else
ClearArtistSearchButton.Enabled = true;
}
private void SearchGenresTextBox_KeyUp(object sender, KeyEventArgs e)
{
main.SearchGenre(SearchGenresTextBox.Text);
if (SearchGenresTextBox.Text.Length < 1)
ClearGenreSearchButton.Enabled = false;
else
ClearGenreSearchButton.Enabled = true;
}
private void ClearArtistSearchButton_Click(object sender, EventArgs e)
{
main.SearchArtist("");
SearchArtistsTextBox.Text = "";
ClearArtistSearchButton.Enabled = false;
}
private void ClearGenreSearchButton_Click(object sender, EventArgs e)
{
main.SearchGenre("");
SearchGenresTextBox.Text = "";
ClearGenreSearchButton.Enabled = false;
}
private void PositionTrackBar_MouseDown(object sender, MouseEventArgs e)
{
double dblValue;
dblValue = ((double)(e.X+PositionTrackBar.Location.X) / (double)(PositionTrackBar.Width + PositionTrackBar.Location.X)) * (PositionTrackBar.Maximum - PositionTrackBar.Minimum);
PositionTrackBar.Value = Convert.ToInt32(dblValue);
}
private void PreviousButton_Click(object sender, EventArgs e)
{
int selected = 0;
selected = main.currentPlayingList.IndexOf(main.audio.CurrentSong) - 1;
if (selected < 0)
{
if (LoopSongButton.Checked)
selected = main.currentPlayingList.Count-1;
}
main.FilterCurrentPlaying();
SongsTableView.CurrentCell = SongsTableView.Rows[selected].Cells[0];
main.audio.Play(main.currentPlayingList[selected]);
}
private void NextButton_Click(object sender, EventArgs e)
{
int selected = 0;
if (ShuffleSongButton.Checked)
{
Random r = new Random();
selected = r.Next(0, main.currentPlayingList.Count);
while (selected == main.currentPlayingList.IndexOf(main.audio.CurrentSong) && main.currentPlayingList.Count > 1)
selected = r.Next(0, main.currentPlayingList.Count);
}
else
selected = main.currentPlayingList.IndexOf(main.audio.CurrentSong) + 1;
if (selected >= main.currentPlayingList.Count)
{
if (LoopSongButton.Checked)
selected = 0;
else
{
songFinished = false;
return;
}
}
main.FilterCurrentPlaying();
SongsTableView.CurrentCell = SongsTableView.Rows[selected].Cells[0];
main.audio.Play(main.currentPlayingList[selected]);
}
private void NotifyMenuStripNextButton_Click(object sender, EventArgs e)
{
NextButton_Click(sender, e);
}
private void NotifyMenuStripPreviousButton_Click(object sender, EventArgs e)
{
PreviousButton_Click(sender, e);
}
private void ViewCurrentPlaylistButton_Click(object sender, EventArgs e)
{
main.FilterCurrentPlaying();
int selected = main.currentPlayingList.IndexOf(main.audio.CurrentSong);
if(main.currentPlayingList.Count >= 1)
SongsTableView.CurrentCell = SongsTableView.Rows[selected].Cells[0];
}
private void SongsTableView_MouseDown(object sender, MouseEventArgs e)
{
draggedstarted = true;
draggedcompleted = false;
startx = e.X;
starty = e.Y;
}
private void SongsTableView_MouseUp(object sender, MouseEventArgs e)
{
if (draggedcompleted)
{
Cursor.Current = Cursors.Default;
Point point = PlaylistBox.PointToClient(Cursor.Position);
int index = PlaylistBox.IndexFromPoint(point);
if (index < 0) //nope, niet op een playlist gesleept
{
draggedstarted = false;
draggedcompleted = false;
return;
}
Playlist currentPlaylist = main.pl.GetPlaylistByName(PlaylistBox.Items[index].ToString());
SongsTable s = new SongsTable();
if (SongsTableView.SelectedRows.Count > 0)
{
var drv = SongsTableView.SelectedRows[0].DataBoundItem as DataRowView;
var row = drv.Row as DataRow;
s.ImportRow(row);
currentPlaylist.AddSong((s.Rows[0][5] as Song));
currentPlaylist.WriteToFile();
}
}
draggedcompleted = false;
draggedstarted = false;
}
private void SongsTableView_MouseMove(object sender, MouseEventArgs e)
{
int deltax = Math.Abs(startx - e.X);
int deltay = Math.Abs(starty - e.Y);
if ((deltax > 5 || deltay > 5) && draggedstarted && !draggedcompleted)
{
draggedcompleted = true;
playlistsToolStripMenuItem_Click(this, new EventArgs());
Cursor.Current = Cursors.Hand;
}
}
private void SelectServerJancoButton_Click(object sender, EventArgs e)
{
main.SwitchServer("http://jancokock.me");
}
private void SelectServerYorickButton_Click(object sender, EventArgs e)
{
main.SwitchServer("http://imegumii.nl");
}
private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
main.audio.Play(new RadioStation("538", main.api, "http://vip-icecast.538.lw.triple-it.nl:80/RADIO538_MP3"));
}
private void qDanceToolStripMenuItem_Click(object sender, EventArgs e)
{
main.audio.Play(new RadioStation("Q-Dance", main.api, "http://stream01.platform02.true.nl:8000/qdance-hard"));
}
private void fMToolStripMenuItem_Click(object sender, EventArgs e)
{
main.audio.Play(new RadioStation("3FM", main.api, "http://icecast.omroep.nl:80/3fm-bb-mp3"));
}
private void slamFMToolStripMenuItem_Click(object sender, EventArgs e)
{
main.audio.Play(new RadioStation("Slam-FM", main.api, "http://vip-icecast.538.lw.triple-it.nl/SLAMFM_MP3"));
}
private void SetRadioStationButton_Click(object sender, EventArgs e)
{
string input = RadioStationTextBox.Text;
if(Main.CheckURLValid(input))
{
main.audio.Play(new RadioStation(Main.GetDomain(input), main.api, input));
}
RadioStationTextBox.Text = "";
}
private void SearchSongsButton_Click(object sender, EventArgs e)
{
if(SearchSongsTextBox.Text.Length > 0)
{
main.SearchFilter(SearchSongsTextBox.Text);
SearchSongsTextBox.Text = "";
}
}
private void AdvancedSearchButton_Click(object sender, EventArgs e)
{
AdvancedSearch av = new AdvancedSearch(main);
av.ShowDialog();
}
private void resetToolStripMenuItem_Click(object sender, EventArgs e)
{
main.Repopulate();
}
}
}
+17 -8
View File
@@ -33,6 +33,14 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="AntiXssLibrary, Version=4.3.0.0, Culture=neutral, PublicKeyToken=d127efab8a9c114f, processorArchitecture=MSIL">
<HintPath>..\packages\AntiXSS.4.3.0\lib\net40\AntiXssLibrary.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="HtmlSanitizationLibrary, Version=4.3.0.0, Culture=neutral, PublicKeyToken=d127efab8a9c114f, processorArchitecture=MSIL">
<HintPath>..\packages\AntiXSS.4.3.0\lib\net40\HtmlSanitizationLibrary.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
@@ -67,14 +75,14 @@
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="NetworkHandler.cs" />
<Compile Include="NotificationPopup.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="NotificationPopup.Designer.cs">
<DependentUpon>NotificationPopup.cs</DependentUpon>
</Compile>
<Compile Include="Playlist.cs" />
<Compile Include="PlaylistHandler.cs" />
<Compile Include="AdvancedSearch.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="AdvancedSearch.Designer.cs">
<DependentUpon>AdvancedSearch.cs</DependentUpon>
</Compile>
<Compile Include="PlaylistMaker.cs">
<SubType>Form</SubType>
</Compile>
@@ -83,6 +91,7 @@
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RadioStation.cs" />
<Compile Include="Song.cs" />
<Compile Include="SongsTable.cs">
<SubType>Component</SubType>
@@ -91,8 +100,8 @@
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="NotificationPopup.resx">
<DependentUpon>NotificationPopup.cs</DependentUpon>
<EmbeddedResource Include="AdvancedSearch.resx">
<DependentUpon>AdvancedSearch.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="PlaylistMaker.resx">
<DependentUpon>PlaylistMaker.cs</DependentUpon>
@@ -0,0 +1,99 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{E2B99339-3251-48BE-91C9-FAB21CD07A39}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>MusicPlayer</RootNamespace>
<AssemblyName>MusicPlayer</AssemblyName>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="MainForm.cs" >
<SubType>Form</SubType>
</Compile>
<Compile Include="Album.cs" />
<Compile Include="APIHandler.cs" />
<Compile Include="Artist.cs" />
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="NetworkHandler.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<<<<<<< HEAD
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
=======
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
>>>>>>> origin/api
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
+75 -18
View File
@@ -2,8 +2,10 @@
using System.Text;
using System.Net.Sockets;
using System.Threading;
using System.Web;
using System.Net;
using System.IO;
using Microsoft.Security.Application;
using Newtonsoft.Json.Linq;
@@ -12,7 +14,7 @@ namespace MusicPlayer
public class NetworkHandler
{
private int port = 8585;
private string ip;
public string ip { get; set; }
public NetworkHandler(string ip)
{
@@ -21,25 +23,80 @@ namespace MusicPlayer
public JObject SendString(string m)
{
HttpWebRequest server = (HttpWebRequest)WebRequest.Create(ip+":"+port+"/"+m);
string encodedstring = Microsoft.Security.Application.Encoder.HtmlEncode(m);
HttpWebRequest server = (HttpWebRequest)WebRequest.Create(ip+":"+port+"/"+encodedstring);
server.KeepAlive = false;
HttpWebResponse respond = (HttpWebResponse)server.GetResponse();
Stream streamResponse = respond.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
Char[] readBuff = new Char[256];
int count = streamRead.Read(readBuff, 0, 256);
string data = "";
while (count > 0)
{
String outputData = new String(readBuff, 0, count);
data +=outputData;
count = streamRead.Read(readBuff, 0, 256);
try {
HttpWebResponse respond = (HttpWebResponse)server.GetResponse();
Stream streamResponse = respond.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
Char[] readBuff = new Char[256];
int count = streamRead.Read(readBuff, 0, 256);
string data = "";
while (count > 0)
{
String outputData = new String(readBuff, 0, count);
data += outputData;
count = streamRead.Read(readBuff, 0, 256);
}
JObject o = JObject.Parse(data);
respond.Close();
streamResponse.Close();
streamRead.Close();
return o;
}
catch(WebException e)
{
Console.WriteLine("Server is offline");
}
catch(Exception e)
{
Console.WriteLine("Er is iets fout gegaan bij het communiceren met de server.");
}
return null;
}
public MemoryStream downloadArtwork(string album)
{
try
{
string encodedstring = Microsoft.Security.Application.Encoder.HtmlEncode(ip + "/music/.artwork/" + album);
WebRequest req = WebRequest.Create(encodedstring);
//WebRequest req = WebRequest.Create((ip + "/music/.artwork/" + album).Replace(" ","%20"));
WebResponse response = req.GetResponse();
Stream stream = response.GetResponseStream();
//Download in chuncks
byte[] buffer = new byte[1024];
//Get Total Size
int dataLength = (int)response.ContentLength;
//Download to memory
MemoryStream memStream = new MemoryStream();
while (true)
{
//Try to read the data
int bytesRead = stream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0)
{
break;
}
else
{
memStream.Write(buffer, 0, bytesRead);
}
}
//Clean up
stream.Close();
//Convert the downloaded stream to a byte array
return memStream;
}
catch (Exception)
{
return null;
}
JObject o = JObject.Parse(data);
respond.Close();
streamResponse.Close();
streamRead.Close();
return o;
}
}
}
-111
View File
@@ -1,111 +0,0 @@
namespace MusicPlayer
{
partial class NotificationPopup
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NotificationPopup));
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.pictureBox4 = new System.Windows.Forms.PictureBox();
this.pictureBox3 = new System.Windows.Forms.PictureBox();
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// groupBox1
//
this.groupBox1.BackColor = System.Drawing.Color.White;
this.groupBox1.Controls.Add(this.pictureBox4);
this.groupBox1.Controls.Add(this.pictureBox3);
this.groupBox1.Controls.Add(this.pictureBox2);
this.groupBox1.Controls.Add(this.pictureBox1);
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
// pictureBox4
//
resources.ApplyResources(this.pictureBox4, "pictureBox4");
this.pictureBox4.Name = "pictureBox4";
this.pictureBox4.TabStop = false;
this.pictureBox4.Click += new System.EventHandler(this.pictureBox4_Click);
//
// pictureBox3
//
resources.ApplyResources(this.pictureBox3, "pictureBox3");
this.pictureBox3.Name = "pictureBox3";
this.pictureBox3.TabStop = false;
//
// pictureBox2
//
resources.ApplyResources(this.pictureBox2, "pictureBox2");
this.pictureBox2.Name = "pictureBox2";
this.pictureBox2.TabStop = false;
//
// pictureBox1
//
resources.ApplyResources(this.pictureBox1, "pictureBox1");
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.TabStop = false;
//
// NotificationPopup
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ControlBox = false;
this.Controls.Add(this.groupBox1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "NotificationPopup";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.Shown += new System.EventHandler(this.NotificationPopup_Shown);
this.Leave += new System.EventHandler(this.NotificationPopup_Leave);
this.groupBox1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.PictureBox pictureBox3;
private System.Windows.Forms.PictureBox pictureBox2;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.PictureBox pictureBox4;
}
}
@@ -1,40 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MusicPlayer
{
public partial class NotificationPopup : Form
{
MainForm f;
public NotificationPopup(MainForm f)
{
InitializeComponent();
this.f = f;
}
private void NotificationPopup_Shown(object sender, EventArgs e)
{
System.Drawing.Rectangle workingRectangle = Screen.PrimaryScreen.WorkingArea;
this.Left = workingRectangle.Width - this.Width -10;
this.Top = workingRectangle.Height - this.Height -10;
this.Show();
}
private void pictureBox4_Click(object sender, EventArgs e)
{
f.WindowState = FormWindowState.Normal;
}
private void NotificationPopup_Leave(object sender, EventArgs e)
{
this.Visible = false;
}
}
}
@@ -1,313 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pictureBox4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EwAACxMBAJqcGAAAAcVJREFUWEftlWlOwzAQhSvBvXqBxE6AsF6Fnb9IRaq4AQK1qBywRSpv7HGapON4
+Uuf9KTW45n5so0nSlXbBD9MAipL/SjkeZ0CcM89gkqBiAJAwTuuHa1YiBiAW66ZrBiIAIBacK1sKaVX
cm3rUYCiUL9a6wuulSyl6huqIdV2Dj6CXIiY5mQBQC2GiakQnuYbPI7lYG0PwLxw1CwXwte8KPQpxYcv
Zgsw/NTKsjrHOqh3m+EZh73CVc67OYBZo9YJh426EA5AHDK4mgYxA4EreOPloLD/3eaoNR5pzcs9OQja
PDpeUeAMe175b7SQM/M1dyII/nnQQQf9Z4WGAWbJJfZ8NE1zxEtBTafTY0zOLxpivCTK9KZx6IPADL/a
HSxqQYU55BXtQd63zaExXjcc6gk9n2iPASAPIXDyXe+fauqTw17ZK+/mVBs62DhshLVnF28ByA4C1J7z
fPyWkuiK7d5+roNAj5durAdgrVe5zZ2omc3Z1aCaWP/prpEFgD0nNXeSICSHALKaOxGEcDd7DgDoJdfK
lnTbuw4+At8nGqPhCyc55h3IgkBe+6mNOQqAnAKBvWbIxDgagBwDQXukXNnV9g9jjBoLjmDoxgAAAABJ
RU5ErkJggg==
</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="pictureBox4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="pictureBox4.Location" type="System.Drawing.Point, System.Drawing">
<value>227, 158</value>
</data>
<data name="pictureBox4.Size" type="System.Drawing.Size, System.Drawing">
<value>33, 32</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="pictureBox4.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;pictureBox4.Name" xml:space="preserve">
<value>pictureBox4</value>
</data>
<data name="&gt;&gt;pictureBox4.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pictureBox4.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;pictureBox4.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="pictureBox3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EwAACxMBAJqcGAAAAAd0SU1FB98KHRQhOHjNNWgAAAGvSURBVFhHxZdBbsIwFETDFVj0AD0PSThBeoKu
qqpqq0o9A5VYc6ByDJYcgcKM+aZxGOI4ichITwH/7/EX2LGdpagolhVYg1+wBweDn9nGWGXp4wiGc7AB
x0TYZ242aUJH/1yZ2RBWdc+okDgDD2AHlGEf6EXPmQ2jxQTwCJTJGNBbF4EAYZWq45hwDBu1IQTG/Nlv
sbPhQiHQd8L9ibYYbmJehAYuNZUY40m0deV/ieJL8jrP8+WL9ZXxDmzc4JQIxni1rkMKOHoDvl5lwg3e
XEeTiKdQ0YDvbxVUvNu4F4mcFNY04Caigg3KTxszkM4NaFslWxpwJ1PBOl82XiC0t79aoYZPkz0TuJ2q
oOfqZ0+R8KtziBaQ5+WHefWS8qzhCoj+BSji2/wCITbKX9BpErYUIfNrRCdh52WoilB5CbhlmPQiahah
chI4nx9FoJV6ESreFbNwJj02o3MRKtaRYDPquR2Xz7o9zmJRhCdmNN7zQPJjw4ZCYNIjGZn8UDrdsdyL
CYBV3v9i4oVE/xzjauYmHJ7OM1no2PtyerXUhgqm/nq+Bc3rOdsSr+dZdgKmWYbeZBkdmgAAAABJRU5E
rkJggg==
</value>
</data>
<data name="pictureBox3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="pictureBox3.Location" type="System.Drawing.Point, System.Drawing">
<value>75, 158</value>
</data>
<data name="pictureBox3.Size" type="System.Drawing.Size, System.Drawing">
<value>33, 32</value>
</data>
<data name="pictureBox3.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;pictureBox3.Name" xml:space="preserve">
<value>pictureBox3</value>
</data>
<data name="&gt;&gt;pictureBox3.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pictureBox3.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;pictureBox3.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="pictureBox2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EwAACxMBAJqcGAAAAAd0SU1FB98KHRQhFT0SaR0AAAHHSURBVFhHzVdLboMwEOUQkZJ1pd6guQbQLsq1
kgNklZN02UrpLbLMDZq27w0z1LgmfIxLn/Q0xjN+M4AxdtaHoii1xfZjBR7Ad/ACXpVss4++SsMZr60J
sMGwG/AIfo0kx2yokec/NzEIGGh2p2Ix3LuavWAguALPYEhwCqm1KssnzdIBBJF3IN9rSCiG1IR2RxFw
2p2nSG6kNnNoVkWeN+98zsfexXOd05uYcNyacJ+BvhjuNG3z6PmphQJd3oNvXl8M181TwEXvd15HSuwW
nKOQo0qKaCigRQ2VJ6aWhbyafwpNiMtrMMClBDtAn9mYQioKcP0OOVuUbAHAZ3ZKIQcO5E8k5GxRstwA
YsyOKeTEAfyThZwtivoAINbsA9hXyIWBg1Y+UR0BjDHLJ/JiOh6v/6KAVK9gyFyQV7D4JFz8M1xyIXo2
kZCzRQkE0DYbk1goQgQulvsZoUEu8jsGpQYBLvaO02e6DQlhGwM4/mxLVhSF5GwAB5l6U/oB/t6UGrhl
hjPVtpzJqa3ZOqBFJDmYgJqlBxYIO8fRTCYcrGgOhnNW4Ocy9XC6rjW8CTcG7gECgnY8P4H+8Zx99NXL
K4C2trqQZd9yFXIx9jsiUwAAAABJRU5ErkJggg==
</value>
</data>
<data name="pictureBox2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="pictureBox2.Location" type="System.Drawing.Point, System.Drawing">
<value>114, 158</value>
</data>
<data name="pictureBox2.Size" type="System.Drawing.Size, System.Drawing">
<value>33, 32</value>
</data>
<data name="pictureBox2.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;pictureBox2.Name" xml:space="preserve">
<value>pictureBox2</value>
</data>
<data name="&gt;&gt;pictureBox2.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pictureBox2.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;pictureBox2.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EwAACxMBAJqcGAAAAAd0SU1FB98KHRQfHXIM+lIAAAGjSURBVFhHxZdNbsIwEIXDFVj0AD0PhJwgPUFX
VVUVVKlnoBJrDkSPwZIjUPredEwTayL/xJAnfSJ4xs8jsGO7SlFdNy3YgW9wAmeFz2xjrNX0Mlos6jlM
9+CSCPvM1SZN6Og+v9RsDNuuZ1BInIEHcASWYQ70oudMh7HFBPAILJMS0NsuAgHCKq2OJeEYOqonBEr+
7EMcdbi+EMiZcD9GWwwyMa/SpWYlRrB6ttuD/C9RfMlZ5wL7L5erTysWYC+DU0YwGrXIKkI64oGvVzMh
BjFRZRTRsgC+v61gFDr2VYlF7FgANxErSIKzXMftKaGIAwvgTmYFBfUcFHLMN1tkEScacDu1goL6ZQlF
rC3PDuebFoD+776fhxRwk78A7R9dnwHkLyg+CfF23Fi5BjIJiy5DtIV+9i6yDIu9iPD9zY8H+Ds/GoFo
xADC86sfC6FdpfPIzah5sWIBepvRiO24eTLaYuifmNGw9RJiKHMgcUJg0iMZmfxQOt2x3IkJgFXe/2Li
hET3mTMxfdKuZr7Q8f6X0yHB0F3PD8C/nrMt8XpeVb8brobeDcJ+rQAAAABJRU5ErkJggg==
</value>
</data>
<data name="pictureBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>153, 158</value>
</data>
<data name="pictureBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>33, 32</value>
</data>
<data name="pictureBox1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;pictureBox1.Name" xml:space="preserve">
<value>pictureBox1</value>
</data>
<data name="&gt;&gt;pictureBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pictureBox1.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;pictureBox1.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 12</value>
</data>
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>266, 196</value>
</data>
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>290, 220</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>NotificationPopup</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>NotificationPopup</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
+24 -1
View File
@@ -9,14 +9,16 @@ namespace MusicPlayer
public string name { get; }
private string basedir;
public List<Song> songs;
public string server;
private APIHandler api;
public Playlist(string name, string basedir, APIHandler api)
public Playlist(string name, string basedir, string server, APIHandler api)
{
this.songs = new List<Song>();
this.name = name;
this.api = api;
this.basedir = basedir;
this.server = server;
this.ReadFromFile();
}
@@ -35,6 +37,8 @@ namespace MusicPlayer
try {
using (StreamReader str = new StreamReader(basedir + name + ".txt"))
{
server = str.ReadLine();
string readline;
while ((readline = str.ReadLine()) != null)
{
@@ -48,6 +52,7 @@ namespace MusicPlayer
{
FileStream fs = new FileStream(basedir + name + ".txt", FileMode.CreateNew);
fs.Close();
File.WriteAllText(basedir + name + ".txt", server);
ReadFromFile();
}
@@ -57,6 +62,8 @@ namespace MusicPlayer
{
using (StreamWriter stw = new StreamWriter(basedir + name + ".txt"))
{
stw.WriteLine(server.ToString());
this.songs.ForEach(s =>
{
stw.WriteLine(s.ToString());
@@ -64,5 +71,21 @@ namespace MusicPlayer
stw.Flush();
}
}
public void Delete()
{
try {
System.IO.File.Move(basedir + name + ".txt", basedir + name + ".txt.old");
}
catch(Exception)
{
//Already removed.
}
}
internal void RemoveSong(Song s)
{
this.songs.Remove(s);
}
}
}
+32 -8
View File
@@ -8,23 +8,26 @@ namespace MusicPlayer
public class PlaylistHandler
{
private List<Playlist> playlists;
private APIHandler api;
public Main main
{
get; set;
}
private readonly string basedir = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\.mpplaylists\\";
public PlaylistHandler(APIHandler api)
public PlaylistHandler()
{
this.playlists = new List<Playlist>();
this.api = api;
Populate();
}
private void Populate()
public void Populate()
{
playlists.Clear();
try {
Directory.GetFiles(basedir).ToList().ForEach(f =>
{
if (f.EndsWith(".txt"))
{
playlists.Add(new Playlist(Path.GetFileName(f.Replace(".txt","")) ,basedir, api));
playlists.Add(new Playlist(Path.GetFileName(f.Replace(".txt","")) ,basedir, main.nw.ip, main.api));
}
});
}
@@ -39,7 +42,7 @@ namespace MusicPlayer
public void MakeNewPlaylistByName(string name)
{
playlists.Add(new Playlist(name, basedir, api));
playlists.Add(new Playlist(name, basedir, main.nw.ip, main.api));
}
public Playlist GetPlaylistByName(string name)
@@ -54,7 +57,28 @@ namespace MusicPlayer
public List<Playlist> GetPlaylists()
{
return playlists;
List<Playlist> currentPlaylists = new List<Playlist>();
foreach(Playlist pl in playlists)
{
if (pl.server == main.nw.ip)
currentPlaylists.Add(pl);
}
return currentPlaylists;
}
internal void RemovePlaylistByName(string name)
{
Playlist toRemove = null;
playlists.ForEach(p =>
{
if (p.name == name) { toRemove = p; }
});
if(toRemove != null)
{
toRemove.Delete();
playlists.Remove(toRemove);
}
}
}
}
+132 -14
View File
@@ -30,53 +30,73 @@ namespace MusicPlayer
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PlaylistMaker));
this.PlaylistSelectBox = new System.Windows.Forms.ComboBox();
this.PlaylistSongSelector = new System.Windows.Forms.ListBox();
this.PlaylistAddSongsButton = new System.Windows.Forms.Button();
this.PlaylistSongContainer = new System.Windows.Forms.ListBox();
this.PlaylistNewButton = new System.Windows.Forms.Button();
this.PlaylistNewInputfield = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.FilterTextBox = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.DeletePlaylistButton = new System.Windows.Forms.Button();
this.DeleteSongsButton = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// PlaylistSelectBox
//
this.PlaylistSelectBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.PlaylistSelectBox.FormattingEnabled = true;
this.PlaylistSelectBox.Location = new System.Drawing.Point(12, 12);
this.PlaylistSelectBox.Location = new System.Drawing.Point(10, 96);
this.PlaylistSelectBox.Name = "PlaylistSelectBox";
this.PlaylistSelectBox.Size = new System.Drawing.Size(354, 21);
this.PlaylistSelectBox.Size = new System.Drawing.Size(306, 21);
this.PlaylistSelectBox.TabIndex = 0;
this.PlaylistSelectBox.SelectedIndexChanged += new System.EventHandler(this.PlaylistSelectBox_SelectedIndexChanged);
//
// PlaylistSongSelector
//
this.PlaylistSongSelector.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.PlaylistSongSelector.FormattingEnabled = true;
this.PlaylistSongSelector.Location = new System.Drawing.Point(13, 39);
this.PlaylistSongSelector.Location = new System.Drawing.Point(11, 149);
this.PlaylistSongSelector.Name = "PlaylistSongSelector";
this.PlaylistSongSelector.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
this.PlaylistSongSelector.Size = new System.Drawing.Size(353, 160);
this.PlaylistSongSelector.Size = new System.Drawing.Size(305, 108);
this.PlaylistSongSelector.TabIndex = 1;
//
// PlaylistAddSongsButton
//
this.PlaylistAddSongsButton.Location = new System.Drawing.Point(12, 293);
this.PlaylistAddSongsButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.PlaylistAddSongsButton.Location = new System.Drawing.Point(10, 263);
this.PlaylistAddSongsButton.Name = "PlaylistAddSongsButton";
this.PlaylistAddSongsButton.Size = new System.Drawing.Size(354, 23);
this.PlaylistAddSongsButton.Size = new System.Drawing.Size(306, 23);
this.PlaylistAddSongsButton.TabIndex = 2;
this.PlaylistAddSongsButton.Text = "Add";
this.PlaylistAddSongsButton.Text = "Add selected to playlist";
this.PlaylistAddSongsButton.UseVisualStyleBackColor = true;
this.PlaylistAddSongsButton.Click += new System.EventHandler(this.PlaylistAddSongsButton_Click);
//
// PlaylistSongContainer
//
this.PlaylistSongContainer.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.PlaylistSongContainer.FormattingEnabled = true;
this.PlaylistSongContainer.Location = new System.Drawing.Point(12, 205);
this.PlaylistSongContainer.Location = new System.Drawing.Point(10, 319);
this.PlaylistSongContainer.Name = "PlaylistSongContainer";
this.PlaylistSongContainer.Size = new System.Drawing.Size(354, 82);
this.PlaylistSongContainer.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
this.PlaylistSongContainer.Size = new System.Drawing.Size(306, 82);
this.PlaylistSongContainer.TabIndex = 3;
//
// PlaylistNewButton
//
this.PlaylistNewButton.Location = new System.Drawing.Point(118, 342);
this.PlaylistNewButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.PlaylistNewButton.Location = new System.Drawing.Point(242, 23);
this.PlaylistNewButton.Name = "PlaylistNewButton";
this.PlaylistNewButton.Size = new System.Drawing.Size(75, 23);
this.PlaylistNewButton.TabIndex = 4;
@@ -86,24 +106,114 @@ namespace MusicPlayer
//
// PlaylistNewInputfield
//
this.PlaylistNewInputfield.Location = new System.Drawing.Point(12, 342);
this.PlaylistNewInputfield.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.PlaylistNewInputfield.Location = new System.Drawing.Point(11, 25);
this.PlaylistNewInputfield.Name = "PlaylistNewInputfield";
this.PlaylistNewInputfield.Size = new System.Drawing.Size(100, 20);
this.PlaylistNewInputfield.Size = new System.Drawing.Size(225, 20);
this.PlaylistNewInputfield.TabIndex = 5;
this.PlaylistNewInputfield.KeyUp += new System.Windows.Forms.KeyEventHandler(this.PlaylistNewInputfield_KeyUp);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(95, 13);
this.label1.TabIndex = 6;
this.label1.Text = "Create new playlist";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(8, 75);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(97, 13);
this.label2.TabIndex = 7;
this.label2.Text = "Edit existing playlist";
//
// label3
//
this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(11, 297);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(82, 13);
this.label3.TabIndex = 8;
this.label3.Text = "Songs in playlist";
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(11, 130);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(49, 13);
this.label4.TabIndex = 9;
this.label4.Text = "All songs";
//
// FilterTextBox
//
this.FilterTextBox.Location = new System.Drawing.Point(172, 127);
this.FilterTextBox.Name = "FilterTextBox";
this.FilterTextBox.Size = new System.Drawing.Size(144, 20);
this.FilterTextBox.TabIndex = 10;
this.FilterTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.FilterTextBox_KeyUp);
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(137, 130);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(29, 13);
this.label5.TabIndex = 11;
this.label5.Text = "Filter";
//
// DeletePlaylistButton
//
this.DeletePlaylistButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.DeletePlaylistButton.Location = new System.Drawing.Point(225, 70);
this.DeletePlaylistButton.Name = "DeletePlaylistButton";
this.DeletePlaylistButton.Size = new System.Drawing.Size(92, 23);
this.DeletePlaylistButton.TabIndex = 12;
this.DeletePlaylistButton.Text = "Delete Playlist";
this.DeletePlaylistButton.UseVisualStyleBackColor = true;
this.DeletePlaylistButton.Click += new System.EventHandler(this.DeletePlaylistButton_Click);
//
// DeleteSongsButton
//
this.DeleteSongsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.DeleteSongsButton.Location = new System.Drawing.Point(172, 292);
this.DeleteSongsButton.Name = "DeleteSongsButton";
this.DeleteSongsButton.Size = new System.Drawing.Size(143, 23);
this.DeleteSongsButton.TabIndex = 13;
this.DeleteSongsButton.Text = "Delete Selected Songs";
this.DeleteSongsButton.UseVisualStyleBackColor = true;
this.DeleteSongsButton.Click += new System.EventHandler(this.DeleteSongsButton_Click);
//
// PlaylistMaker
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(382, 400);
this.ClientSize = new System.Drawing.Size(334, 411);
this.Controls.Add(this.DeleteSongsButton);
this.Controls.Add(this.DeletePlaylistButton);
this.Controls.Add(this.label5);
this.Controls.Add(this.FilterTextBox);
this.Controls.Add(this.label4);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.PlaylistNewInputfield);
this.Controls.Add(this.PlaylistNewButton);
this.Controls.Add(this.PlaylistSongContainer);
this.Controls.Add(this.PlaylistAddSongsButton);
this.Controls.Add(this.PlaylistSongSelector);
this.Controls.Add(this.PlaylistSelectBox);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MinimumSize = new System.Drawing.Size(300, 425);
this.Name = "PlaylistMaker";
this.Text = "PlaylistMaker";
this.Text = "Create / Edit playlists";
this.Shown += new System.EventHandler(this.PlaylistMaker_Load);
this.ResumeLayout(false);
this.PerformLayout();
@@ -117,5 +227,13 @@ namespace MusicPlayer
private System.Windows.Forms.ListBox PlaylistSongContainer;
private Button PlaylistNewButton;
private TextBox PlaylistNewInputfield;
private Label label1;
private Label label2;
private Label label3;
private Label label4;
private TextBox FilterTextBox;
private Label label5;
private Button DeletePlaylistButton;
private Button DeleteSongsButton;
}
}
+106 -5
View File
@@ -5,6 +5,7 @@ using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
@@ -25,7 +26,6 @@ namespace MusicPlayer
this.allPlaylistSongs = new List<Song>();
this.allsongs = new List<Song>();
InitializeComponent();
Populate();
}
public void PlaylistSelectBox_SelectedIndexChanged(object sender, EventArgs e)
@@ -38,23 +38,46 @@ namespace MusicPlayer
}
}
public void Repopulate()
public void Repopulate(bool lastIndex)
{
PlaylistSelectBox.Items.Clear();
int selection = PlaylistSelectBox.SelectedIndex;
PlaylistSelectBox.Items.Clear();
pl.GetPlaylists().ForEach(p => PlaylistSelectBox.Items.Add(p.name));
if (lastIndex)
PlaylistSelectBox.SelectedIndex = PlaylistSelectBox.Items.Count - 1;
else
PlaylistSelectBox.SelectedIndex = selection;
PlaylistSongContainer.Items.Clear();
if (PlaylistSelectBox.SelectedItem != null)
{
PlaylistSongContainer.Items.Clear();
allPlaylistSongs = pl.GetPlaylistByName(PlaylistSelectBox.SelectedItem.ToString()).GetSongs();
allPlaylistSongs.ForEach(s => PlaylistSongContainer.Items.Add(s.Name));
}
else
{
PlaylistSelectBox.SelectedIndex = -1;
PlaylistSelectBox.Text = "";
}
}
public void Repopulate()
{
Repopulate(false);
}
public void Populate()
{
pl.GetPlaylists().ForEach(p => PlaylistSelectBox.Items.Add(p.name));
if (PlaylistSelectBox.Items.Count > 0)
PlaylistSelectBox.SelectedIndex = 0;
allsongs = api.GetAllSongs();
allsongs.ForEach(s => PlaylistSongSelector.Items.Add(s.Name));
if (PlaylistSelectBox.SelectedItem != null)
{
allPlaylistSongs = pl.GetPlaylistByName(PlaylistSelectBox.SelectedItem.ToString()).GetSongs();
allPlaylistSongs.ForEach(s => PlaylistSongContainer.Items.Add(s.Name));
}
}
private void PlaylistAddSongsButton_Click(object sender, EventArgs e)
@@ -74,12 +97,90 @@ namespace MusicPlayer
}
currentPlaylist.WriteToFile();
}
Thread.Sleep(10);
Repopulate();
}
public void SearchAllSongs(string search)
{
PlaylistSongSelector.Items.Clear();
if (search.Length > 1)
{
string sPattern = search;
foreach (Song s in allsongs)
{
if (System.Text.RegularExpressions.Regex.IsMatch(s.Name, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
PlaylistSongSelector.Items.Add(s.Name);
}
}
}
else
{
allsongs.ForEach(s => PlaylistSongSelector.Items.Add(s.Name));
}
}
private void PlaylistNewButton_Click(object sender, EventArgs e)
{
pl.MakeNewPlaylistByName(PlaylistNewInputfield.Text);
string name = PlaylistNewInputfield.Text;
PlaylistNewInputfield.Text = "";
name = name.Replace('/', '-');
name = name.Replace('\\', '-');
pl.MakeNewPlaylistByName(name);
Repopulate(true);
}
private void PlaylistMaker_Load(object sender, EventArgs e)
{
Populate();
}
private void FilterTextBox_KeyUp(object sender, KeyEventArgs e)
{
SearchAllSongs(FilterTextBox.Text);
}
private void PlaylistNewInputfield_KeyUp(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Enter)
{
PlaylistNewButton_Click(sender, new EventArgs());
}
}
private void DeletePlaylistButton_Click(object sender, EventArgs e)
{
if (PlaylistSelectBox.SelectedItem != null)
if (MessageBox.Show("Are you sure to delete " + PlaylistSelectBox.SelectedItem.ToString() + "?", "Confirm Delete!", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
pl.RemovePlaylistByName(PlaylistSelectBox.SelectedItem.ToString());
Repopulate(true);
}
}
private void DeleteSongsButton_Click(object sender, EventArgs e)
{
if (PlaylistSelectBox.SelectedItem != null)
{
Playlist currentPlaylist = pl.GetPlaylistByName(PlaylistSelectBox.SelectedItem.ToString());
foreach (string song in PlaylistSongSelector.SelectedItems)
{
for (int i = currentPlaylist.GetSongs().Count - 1; i > 0; i--)
{
Song s = currentPlaylist.GetSongs()[i];
if (s.Name == song)
{
currentPlaylist.RemoveSong(s);
break;
}
}
}
currentPlaylist.WriteToFile();
}
Thread.Sleep(10);
Repopulate();
}
}
+992
View File
@@ -117,4 +117,996 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAgHAAAAEAIAAo5wAAFgAAACgAAACAAAAA4AAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABLSEgGUU1NQ1BOTrpQTk76UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/09OTvpPTk64UE9PQUpHRwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT0tLFlBOTqdQTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE1NpU9J
SRUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFZS
UgVQTk6mUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE1NpE5LSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUU1NQlBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE9PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABPTk65UE5O/1BOTv9QTk7/UE5O/1BOTv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/UE5O/1BOTv9QTk7/UE5O/1BOTv9PTk62AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5NTfpQTk7/UE5O/1BOTv9QTk7/UE5O/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/09OTvkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+
fv9+fn7/fn5+/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPTU3/UE5O/1BOTv9QTk7/UE5O/1BOTv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9+fn7/fn5+/35+
fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9O
Tu5QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/09OTusAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5OnVBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UU5OmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABPT08rUE5O+1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTvpSTU0pAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8+PgJRTk53UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/T01NdUE1NQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABQTk51UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1FNTXEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOT08ZUE5OiE5N
TcJQTk7QUE5O0VBOTtFQTk7RUE5O0VBOTtFQTk7oUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7oUE5O0VBOTtFQTk7RUE5O0VBOTtFQTk7QTkxMwU9N
TYdTSkoXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBO
TndQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
TncAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5Of1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5OfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABQTk5/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk5/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTn9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTn8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAUE5Of1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5OfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk5/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk5/AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFBOTn9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTn8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5Of1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5OfwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABQTk5/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk5/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTn9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTn8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAUE5Of1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5OfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk5/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk5/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9MTH1QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/05MTH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATk1NdVBO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/3qAgAQAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABPVFQGUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5OdAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOTk5rUE5O/FBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/U0xMFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9NTRdQTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTvxRT09qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5O
TmJQTk75UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9RT083AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAUU1NOlBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O+VBO
TmIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT09PUlBOTvRQTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/09NTWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTk5qUE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk70UE1NUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABQTk42UE5O61BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE1NnQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFBNTaBQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
TupQTk41AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFRPTxpQTk7hUE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9PTU3eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT01N4VBOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O4VFTUxkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFBOTtlQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
TvBPT08pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAE9NTStQTk7wUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5Oq1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O+1BNTXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE1NdVBOTvxQTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BNTaoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABRT09hUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5OtlBQUAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFhQUAlQTk63UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/T01NYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE1QUBRPTU3/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7xUE1NMQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE9PM1BOTvJQTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9STk4TAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBMTNlQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk6TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABQTk6XUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/T05O2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5OaVBO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9OTk4aAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT05OHU9NTf9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9PTU1nAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZWVkMT05O/FBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTsUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABPTk7JUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/FlaWgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5b
WwJQTk6kUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/09M
THQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUExMeFBOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9RTk6jX1lZAgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTkdQTk79UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O609PTzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFBOTj1QTk7sUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/E5NTUcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAT1BQEFBOTsFQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE1Nx1JPTxYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABRTk4YUE5OyVBOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7BVFBQDwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATkxMalBOTvxQTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/T01NtVBMTA4AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAASEtLD1BOTrhQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/E9OTmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABYWVkBUE5O2lBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/TkxMwFVQUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBLSxdQTk7CUE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTU3ZOz4+AgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUFAzUE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5OzVFO
ThgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABOTU0aUE5OzlBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1JNTTEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPTEyXUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O5E5MTDlFODgDAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJUFACUU9PO1BOTudQTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTU2VAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5N
TRVPTU3aUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/T01N/VFOToxOS0seAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUExMH1BO
To5QTk7+UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/T01N2VFRURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFPT09QTk70UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTuBQTk53AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9NTXlPTU3iUE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTvRQTk5NAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAE5NTZZQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTEzzUE9PblBQUBBKSkoDVkxMAQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFSUgFMSkoDUFFREFBNTXBOTEz0UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UExMlQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBOTrtQTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/E9OTqdRTk5gTUtLNk9NTSJQTU0TU1RUBQAAAAAAAAAAAAAAAAAAAABTVFQFUE1NE09N
TSNNTU02UE9PYVBOTqhQTk78UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/05OTroAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAVk5ODE9MTLZQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTU32UE5O2VBO
TsNQTk6vUE5OplBOTp9QTk6fUE5OplBOTq9QTk7DUE5O2VBOTvdQTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9OTU21UlJSDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU1BQGk9M
TM1QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/Tk1NzFBQUBoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVFBQHU5MTNhQTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/05M
TNdRU1McAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAVE5OE05MTLtQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9OTEy6TlBQEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVVBQD09OTpZQTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE1NlVFS
Ug8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFPT2lQTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1FOTmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFN
TTJOTEzXUE5O/VBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/U5MTNdOT08xAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9NTQtRTk52T05O6VBOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTuhQTk52UVFRCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABNTk4dUE5OkFBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk6PUU1NHQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUVJSF05O
TqhQTk74UE5O/VBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/VBO
TvhOTk6nUU1NFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJMTCNOT0+DUE5OyVBOTu5PTU3/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9PTU3/UE5O7lBOTslOT0+DUkxMIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABTUlILUExMP05MTG1QTk6mUE5O4VBOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BO
Tv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7/UE5O/1BOTv9QTk7hUE5Opk5MTG1QTEw/U1JSCwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBP
TwhRT08QTk1NIlFNTVFQTk6AT05OsU5OTtVPTk7lTk5O9U5MTP9OTEz/Tk5O9U9OTuVOTk7VT05OsVBO
ToBRTU1RTk1NIlFPTxBQT08IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////////////////8AAAf///////4AAA/////8AAAH///////+AAAD////+AAAB////////gAAA
f////gAAAf///////4AAAH////wAAAH///////+AAAA////8AAAB////////gAAAP////AAAAf//////
/4AAAD////wAAAH///////+AAAA////8AAAB////////gAAAP////AAAAf///////4AAAD////wAAAH/
//////+AAAA////8AAAB////////gAAAP////AAAAf///////4AAAD////wAAAH///////+AAAA////8
AAAB////////gAAAP////AAAAf///////4AAAD////wAAAH///////+AAAA////8AAAB////////gAAA
P////AAAAf///////4AAAD////wAAAH///////+AAAA////8AAAB////////gAAAP////AAAAf//////
/4AAAD////wAAAH///////+AAAA////8AAAB////////gAAAP////AAAAf///////4AAAD////wAAAH/
//////+AAAA////8AAAB////////gAAAP////AAAAf///////4AAAD////wAAAH///////+AAAA////8
AAAB////////gAAAP////AAAAf///////4AAAD////wAAAH///////+AAAA////8AAAB////////gAAA
P////AAAAf///////4AAAD////4AAAH///////+AAAB/////AAAB////////gAAA/////4AAAf//////
/4AAAf/////AAAH///////+AAAP//////+AB////////gAf////////gAf///////4AH////////4AH/
//////+AB////////+AB////////gAf////////gAf///////4AH////////4AH///////+AB///////
/+AB////////gAf////////gAf///////4AH////////4AH///////+AB////////+AB////////gAf/
///////gAf///////4AH////////4AH///////+AB////////+AB////////gAf////////gAf//////
/4AH////////4AH///////+AB////////+AB////////gAf////////gAf///////4AH////////4AD/
//////8AB////////+AA////////AAf////////gAP///////wAH////////4AD///////8AB///////
//AAf//////+AA/////////wAH///////gAP////////8AA///////wAD/////////gAP//////8AB//
///////4AB//////+AAf////////+AAf//////gAH/////////wAD//////wAD/////////8AAf/////
4AA//////////gAD/////8AAf/////////4AAf////+AAH//////////AAD/////AAD//////////wAA
f////gAA//////////+AAB////gAAf//////////wAAP///wAAP//////////8AAA///wAAD////////
///gAAB//gAAB///////////8AAAAAAAAA////////////gAAAAAAAAf///////////8AAAAAAAAP///
/////////gAAAAAAAH////////////8AAAAAAAD/////////////wAAAAAAD/////////////+AAAAAA
B//////////////4AAAAAB///////////////AAAAAA///////////////8AAAAA////////////////
wAAAA/////////////////wAAD//////////////////wAP/////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////8=
</value>
</data>
</root>
+2 -2
View File
@@ -17,10 +17,10 @@ namespace MusicPlayer
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
NetworkHandler nw = new NetworkHandler("http://www.imegumii.nl");
NetworkHandler nw = new NetworkHandler("http://imegumii.nl");
APIHandler api = new APIHandler(nw);
MainForm form = new MainForm();
PlaylistHandler pl = new PlaylistHandler(api);
PlaylistHandler pl = new PlaylistHandler();
new Main(nw, api, form,pl);
Application.Run(form);
+17 -25
View File
@@ -8,10 +8,10 @@
// </auto-generated>
//------------------------------------------------------------------------------
namespace MusicPlayer.Properties
{
namespace MusicPlayer.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
@@ -22,48 +22,40 @@ namespace MusicPlayer.Properties
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MusicPlayer.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set
{
set {
resourceCulture = value;
}
}
+8 -5
View File
@@ -46,7 +46,7 @@
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
@@ -60,6 +60,7 @@
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
@@ -68,9 +69,10 @@
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
@@ -85,9 +87,10 @@
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
@@ -109,9 +112,9 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+23
View File
@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MusicPlayer
{
class RadioStation :Song
{
string radiourl;
public RadioStation(string name, APIHandler api, string url):base("-1", name,"","","",0,api)
{
radiourl = url;
}
protected override string GetURL()
{
return radiourl;
}
}
}
Executable → Regular
+25 -1
View File
@@ -34,7 +34,7 @@ namespace MusicPlayer
url = "";
}
private string GetURL()
protected virtual string GetURL()
{
if (url == "")
{
@@ -53,5 +53,29 @@ namespace MusicPlayer
{
return $"{this.SongID}|{this.Name}|{this.Album}|{this.Artist}|{this.Genre}|{this.Seconds}";
}
public override bool Equals(System.Object obj)
{
// If parameter is null return false.
if (obj == null)
{
return false;
}
// If parameter cannot be cast to Point return false.
Song s = obj as Song;
if ((System.Object)s == null)
{
return false;
}
// Return true if the fields match:
return (s.Name == Name) && (s.SongID == SongID);
}
public override int GetHashCode()
{
return int.Parse(this.SongID);
}
}
}
+3 -3
View File
@@ -7,14 +7,14 @@ using System.Threading.Tasks;
namespace MusicPlayer
{
class SongsTable : DataTable
public class SongsTable : DataTable
{
public SongsTable() : base()
{
this.Columns.Clear();
this.Columns.Add("Naam", typeof(string));
this.Columns.Add("Name", typeof(string));
this.Columns.Add("Album", typeof(string));
this.Columns.Add("Artiest", typeof(string));
this.Columns.Add("Artist", typeof(string));
this.Columns.Add("Genre", typeof(string));
this.Columns.Add("Duration", typeof(string));
this.Columns.Add("song", typeof(Song));
+1
View File
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AntiXSS" version="4.3.0" targetFramework="net452" />
<package id="NAudio" version="1.7.3" targetFramework="net452" />
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net452" />
</packages>
+8 -10
View File
@@ -1,12 +1,10 @@
# musicplayer
##Onderdelen
- Server/Client
- Threading/Threadpools
- File IO
- Socket communicatie
- Klasse Structuur
- Forms Applicatie
- Specifieke C# - Delegates/Lambda...
## todo
- afvangen server niet online
- server opslaan bij playlist
- doorzoeken van alle liedjes via API
- doorzoeken van albums
- playlist verwijderen
- liedjes uit playlist verwijderen
- presentatie