From 682444778db5759212f06597de6ce35ffa790178 Mon Sep 17 00:00:00 2001 From: SeNS Date: Tue, 18 Dec 2018 12:50:04 -0500 Subject: [PATCH] removed "releases" folder --- releases/1.1/Data/Book.cs | 82 - releases/1.1/Data/CoverImage.cs | 132 -- releases/1.1/Data/Genre.cs | 27 - releases/1.1/Data/ImagesCache.cs | 47 - releases/1.1/Data/Library.cs | 593 ------- releases/1.1/Icons/..svnbridge/Thumbs.db | 1 - releases/1.1/Icons/..svnbridge/TinyOPDS.ico | 1 - releases/1.1/Icons/..svnbridge/authors.ico | 1 - releases/1.1/Icons/..svnbridge/authors.png | 1 - releases/1.1/Icons/..svnbridge/book.png | 1 - releases/1.1/Icons/..svnbridge/book2.png | 1 - releases/1.1/Icons/..svnbridge/book3.png | 1 - releases/1.1/Icons/..svnbridge/books.ico | 1 - releases/1.1/Icons/..svnbridge/books.png | 1 - releases/1.1/Icons/..svnbridge/favicon.ico | 1 - releases/1.1/Icons/..svnbridge/folder.png | 1 - releases/1.1/Icons/..svnbridge/genres.ico | 1 - releases/1.1/Icons/..svnbridge/genres.png | 1 - releases/1.1/Icons/..svnbridge/genres2.png | 1 - releases/1.1/Icons/..svnbridge/lib.png | 1 - releases/1.1/Icons/Thumbs.db | Bin 15360 -> 0 bytes releases/1.1/Icons/TinyOPDS.ico | Bin 115963 -> 0 bytes releases/1.1/Icons/authors.ico | Bin 32988 -> 0 bytes releases/1.1/Icons/authors.png | Bin 2112 -> 0 bytes releases/1.1/Icons/book.png | Bin 1692 -> 0 bytes releases/1.1/Icons/book2.png | Bin 5112 -> 0 bytes releases/1.1/Icons/book3.png | Bin 6682 -> 0 bytes releases/1.1/Icons/books.ico | Bin 32988 -> 0 bytes releases/1.1/Icons/books.png | Bin 8881 -> 0 bytes releases/1.1/Icons/favicon.ico | Bin 1150 -> 0 bytes releases/1.1/Icons/folder.png | Bin 493 -> 0 bytes releases/1.1/Icons/genres.ico | Bin 32988 -> 0 bytes releases/1.1/Icons/genres.png | Bin 23529 -> 0 bytes releases/1.1/Icons/genres2.png | Bin 23917 -> 0 bytes releases/1.1/Icons/lib.png | Bin 1506 -> 0 bytes releases/1.1/Libs/..svnbridge/FB2Library.dll | 1 - .../1.1/Libs/..svnbridge/FB2Library.dll.gz | 1 - .../Libs/..svnbridge/Ionic.Zip.Reduced.dll | 1 - .../Libs/..svnbridge/Ionic.Zip.Reduced.dll.gz | 1 - .../1.1/Libs/..svnbridge/eBdb.EpubReader.dll | 1 - .../Libs/..svnbridge/eBdb.EpubReader.dll.gz | 1 - releases/1.1/Libs/..svnbridge/gzip.exe | 1 - releases/1.1/Libs/FB2Library.dll | Bin 68096 -> 0 bytes releases/1.1/Libs/FB2Library.dll.gz | Bin 35125 -> 0 bytes releases/1.1/Libs/Ionic.Zip.Reduced.dll | Bin 244736 -> 0 bytes releases/1.1/Libs/Ionic.Zip.Reduced.dll.gz | Bin 126895 -> 0 bytes releases/1.1/Libs/eBdb.EpubReader.dll | Bin 30208 -> 0 bytes releases/1.1/Libs/eBdb.EpubReader.dll.gz | Bin 16017 -> 0 bytes releases/1.1/Libs/gzip.cs | 64 - releases/1.1/Libs/gzip.exe | Bin 5120 -> 0 bytes releases/1.1/License.txt | 29 - releases/1.1/MainForm.Designer.cs | 1418 ----------------- releases/1.1/MainForm.cs | 824 ---------- releases/1.1/MainForm.resx | 123 -- releases/1.1/Misc/Crypt.cs | 155 -- releases/1.1/Misc/CustomSettingsProvider.cs | 268 ---- releases/1.1/Misc/Localizer.cs | 217 --- releases/1.1/Misc/Log.cs | 118 -- releases/1.1/Misc/OPDSComparer.cs | 64 - releases/1.1/Misc/ProcessHelper.cs | 157 -- releases/1.1/Misc/StringUtils.cs | 177 -- releases/1.1/Misc/UPnP.cs | 313 ---- releases/1.1/Misc/Utils.cs | 279 ---- releases/1.1/OPDS/AuthorsCatalog.cs | 112 -- releases/1.1/OPDS/BooksCatalog.cs | 286 ---- releases/1.1/OPDS/GenresCatalog.cs | 87 - releases/1.1/OPDS/Links.cs | 39 - releases/1.1/OPDS/Namespaces.cs | 24 - releases/1.1/OPDS/OpenSearch.cs | 113 -- releases/1.1/OPDS/RootCatalog.cs | 77 - releases/1.1/OPDS/SequencesCatalog.cs | 90 -- releases/1.1/Parsers/BookParser.cs | 63 - releases/1.1/Parsers/ePubParser.cs | 155 -- releases/1.1/Parsers/fb2Parser.cs | 246 --- releases/1.1/ProcessHelper.cs | 157 -- releases/1.1/Program.cs | 110 -- releases/1.1/Properties/AssemblyInfo.cs | 36 - releases/1.1/Properties/Resources.Designer.cs | 91 -- releases/1.1/Properties/Resources.resx | 133 -- releases/1.1/Properties/Settings.Designer.cs | 315 ---- releases/1.1/Properties/Settings.settings | 78 - releases/1.1/Properties/app.manifest | 47 - .../1.1/Resources/..svnbridge/trayIcon.ico | 1 - releases/1.1/Resources/trayIcon.ico | Bin 1078 -> 0 bytes releases/1.1/Scanner/FileScanner.cs | 166 -- releases/1.1/Scanner/ScannerEvents.cs | 62 - releases/1.1/Scanner/Watcher.cs | 235 --- releases/1.1/Scanner/ZipScanner.cs | 139 -- releases/1.1/Server/HttpServer.cs | 533 ------- releases/1.1/Server/OPDSServer.cs | 395 ----- releases/1.1/TinyOPDS.csproj | 253 --- releases/1.1/TinyOPDS.ico | Bin 115963 -> 0 bytes releases/1.1/TinyOPDS.png | Bin 8089 -> 0 bytes releases/1.1/TinyOPDS.sln | 34 - releases/1.1/TinyOPDS.v11.suo | Bin 138240 -> 0 bytes releases/1.1/app.config | 88 - releases/1.1/convertGenres.cs | 74 - releases/1.1/donate.png | Bin 2392 -> 0 bytes releases/1.1/genres.rus.txt | 290 ---- releases/1.1/genres.xml | 313 ---- releases/1.1/translation.xml | 438 ----- 101 files changed, 10389 deletions(-) delete mode 100644 releases/1.1/Data/Book.cs delete mode 100644 releases/1.1/Data/CoverImage.cs delete mode 100644 releases/1.1/Data/Genre.cs delete mode 100644 releases/1.1/Data/ImagesCache.cs delete mode 100644 releases/1.1/Data/Library.cs delete mode 100644 releases/1.1/Icons/..svnbridge/Thumbs.db delete mode 100644 releases/1.1/Icons/..svnbridge/TinyOPDS.ico delete mode 100644 releases/1.1/Icons/..svnbridge/authors.ico delete mode 100644 releases/1.1/Icons/..svnbridge/authors.png delete mode 100644 releases/1.1/Icons/..svnbridge/book.png delete mode 100644 releases/1.1/Icons/..svnbridge/book2.png delete mode 100644 releases/1.1/Icons/..svnbridge/book3.png delete mode 100644 releases/1.1/Icons/..svnbridge/books.ico delete mode 100644 releases/1.1/Icons/..svnbridge/books.png delete mode 100644 releases/1.1/Icons/..svnbridge/favicon.ico delete mode 100644 releases/1.1/Icons/..svnbridge/folder.png delete mode 100644 releases/1.1/Icons/..svnbridge/genres.ico delete mode 100644 releases/1.1/Icons/..svnbridge/genres.png delete mode 100644 releases/1.1/Icons/..svnbridge/genres2.png delete mode 100644 releases/1.1/Icons/..svnbridge/lib.png delete mode 100644 releases/1.1/Icons/Thumbs.db delete mode 100644 releases/1.1/Icons/TinyOPDS.ico delete mode 100644 releases/1.1/Icons/authors.ico delete mode 100644 releases/1.1/Icons/authors.png delete mode 100644 releases/1.1/Icons/book.png delete mode 100644 releases/1.1/Icons/book2.png delete mode 100644 releases/1.1/Icons/book3.png delete mode 100644 releases/1.1/Icons/books.ico delete mode 100644 releases/1.1/Icons/books.png delete mode 100644 releases/1.1/Icons/favicon.ico delete mode 100644 releases/1.1/Icons/folder.png delete mode 100644 releases/1.1/Icons/genres.ico delete mode 100644 releases/1.1/Icons/genres.png delete mode 100644 releases/1.1/Icons/genres2.png delete mode 100644 releases/1.1/Icons/lib.png delete mode 100644 releases/1.1/Libs/..svnbridge/FB2Library.dll delete mode 100644 releases/1.1/Libs/..svnbridge/FB2Library.dll.gz delete mode 100644 releases/1.1/Libs/..svnbridge/Ionic.Zip.Reduced.dll delete mode 100644 releases/1.1/Libs/..svnbridge/Ionic.Zip.Reduced.dll.gz delete mode 100644 releases/1.1/Libs/..svnbridge/eBdb.EpubReader.dll delete mode 100644 releases/1.1/Libs/..svnbridge/eBdb.EpubReader.dll.gz delete mode 100644 releases/1.1/Libs/..svnbridge/gzip.exe delete mode 100644 releases/1.1/Libs/FB2Library.dll delete mode 100644 releases/1.1/Libs/FB2Library.dll.gz delete mode 100644 releases/1.1/Libs/Ionic.Zip.Reduced.dll delete mode 100644 releases/1.1/Libs/Ionic.Zip.Reduced.dll.gz delete mode 100644 releases/1.1/Libs/eBdb.EpubReader.dll delete mode 100644 releases/1.1/Libs/eBdb.EpubReader.dll.gz delete mode 100644 releases/1.1/Libs/gzip.cs delete mode 100644 releases/1.1/Libs/gzip.exe delete mode 100644 releases/1.1/License.txt delete mode 100644 releases/1.1/MainForm.Designer.cs delete mode 100644 releases/1.1/MainForm.cs delete mode 100644 releases/1.1/MainForm.resx delete mode 100644 releases/1.1/Misc/Crypt.cs delete mode 100644 releases/1.1/Misc/CustomSettingsProvider.cs delete mode 100644 releases/1.1/Misc/Localizer.cs delete mode 100644 releases/1.1/Misc/Log.cs delete mode 100644 releases/1.1/Misc/OPDSComparer.cs delete mode 100644 releases/1.1/Misc/ProcessHelper.cs delete mode 100644 releases/1.1/Misc/StringUtils.cs delete mode 100644 releases/1.1/Misc/UPnP.cs delete mode 100644 releases/1.1/Misc/Utils.cs delete mode 100644 releases/1.1/OPDS/AuthorsCatalog.cs delete mode 100644 releases/1.1/OPDS/BooksCatalog.cs delete mode 100644 releases/1.1/OPDS/GenresCatalog.cs delete mode 100644 releases/1.1/OPDS/Links.cs delete mode 100644 releases/1.1/OPDS/Namespaces.cs delete mode 100644 releases/1.1/OPDS/OpenSearch.cs delete mode 100644 releases/1.1/OPDS/RootCatalog.cs delete mode 100644 releases/1.1/OPDS/SequencesCatalog.cs delete mode 100644 releases/1.1/Parsers/BookParser.cs delete mode 100644 releases/1.1/Parsers/ePubParser.cs delete mode 100644 releases/1.1/Parsers/fb2Parser.cs delete mode 100644 releases/1.1/ProcessHelper.cs delete mode 100644 releases/1.1/Program.cs delete mode 100644 releases/1.1/Properties/AssemblyInfo.cs delete mode 100644 releases/1.1/Properties/Resources.Designer.cs delete mode 100644 releases/1.1/Properties/Resources.resx delete mode 100644 releases/1.1/Properties/Settings.Designer.cs delete mode 100644 releases/1.1/Properties/Settings.settings delete mode 100644 releases/1.1/Properties/app.manifest delete mode 100644 releases/1.1/Resources/..svnbridge/trayIcon.ico delete mode 100644 releases/1.1/Resources/trayIcon.ico delete mode 100644 releases/1.1/Scanner/FileScanner.cs delete mode 100644 releases/1.1/Scanner/ScannerEvents.cs delete mode 100644 releases/1.1/Scanner/Watcher.cs delete mode 100644 releases/1.1/Scanner/ZipScanner.cs delete mode 100644 releases/1.1/Server/HttpServer.cs delete mode 100644 releases/1.1/Server/OPDSServer.cs delete mode 100644 releases/1.1/TinyOPDS.csproj delete mode 100644 releases/1.1/TinyOPDS.ico delete mode 100644 releases/1.1/TinyOPDS.png delete mode 100644 releases/1.1/TinyOPDS.sln delete mode 100644 releases/1.1/TinyOPDS.v11.suo delete mode 100644 releases/1.1/app.config delete mode 100644 releases/1.1/convertGenres.cs delete mode 100644 releases/1.1/donate.png delete mode 100644 releases/1.1/genres.rus.txt delete mode 100644 releases/1.1/genres.xml delete mode 100644 releases/1.1/translation.xml diff --git a/releases/1.1/Data/Book.cs b/releases/1.1/Data/Book.cs deleted file mode 100644 index 3fe6b92..0000000 --- a/releases/1.1/Data/Book.cs +++ /dev/null @@ -1,82 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module defines the Book class - * - ************************************************************/ - -using System; -using System.IO; -using System.Linq; -using System.Text; -using System.Collections.Generic; -using System.Drawing; - -namespace TinyOPDS.Data -{ - /// - /// Supported book types - /// - public enum BookType - { - FB2, - EPUB, - } - - /// - /// Base data class - /// - public class Book - { - public Book(string fileName = "") - { - Version = 1; - FileName = fileName; - if (!string.IsNullOrEmpty(FileName) && FileName.IndexOf(Library.LibraryPath)==0) - { - FileName = FileName.Substring(Library.LibraryPath.Length+1); - } - Title = Sequence = Annotation = Language = string.Empty; - HasCover = false; - BookDate = DocumentDate = DateTime.MinValue; - NumberInSequence = 0; - Authors = new List(); - Translators = new List(); - Genres = new List(); - } - private string _id = string.Empty; - public string ID - { - get { return _id; } - set - { - // Book ID always must be in GUID form - Guid guid; - if (!string.IsNullOrEmpty(value) && Guid.TryParse(value, out guid)) _id = value; else _id = Utils.CreateGuid(Utils.IsoOidNamespace, FileName).ToString(); - } - } - public float Version { get; set; } - public string FileName { get; private set; } - public string FilePath { get { return Path.Combine(Library.LibraryPath, FileName); } } - public string Title { get; set; } - public string Language { get; set; } - public bool HasCover { get; set; } - public DateTime BookDate { get; set; } - public DateTime DocumentDate { get; set; } - public string Sequence { get; set; } - public UInt32 NumberInSequence { get; set; } - public string Annotation { get; set; } - public UInt32 DocumentSize { get; set; } - public List Authors { get; set; } - public List Translators { get; set; } - public List Genres { get; set; } - public BookType BookType { get { return Path.GetExtension(FilePath).ToLower().Contains("epub") ? BookType.EPUB : Data.BookType.FB2; } } - public bool IsValid { get { return (!string.IsNullOrEmpty(Title) && Title.IsValidUTF() && Authors.Count > 0 && Genres.Count > 0); } } - public DateTime AddedDate { get; set; } - } -} diff --git a/releases/1.1/Data/CoverImage.cs b/releases/1.1/Data/CoverImage.cs deleted file mode 100644 index e147c83..0000000 --- a/releases/1.1/Data/CoverImage.cs +++ /dev/null @@ -1,132 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module defines the CoverImage class and Image extensions - * - ************************************************************/ - -using System; -using System.IO; -using System.Collections.Generic; -using System.Linq; -using System.Drawing; -using System.Drawing.Imaging; -using System.Drawing.Drawing2D; - -using Ionic.Zip; -using TinyOPDS.Parsers; - -namespace TinyOPDS.Data -{ - /// - /// - /// - public class CoverImage - { - public static Size CoverSize = new Size(480, 800); - public static Size ThumbnailSize = new Size(48, 80); - - private Image _cover; - private Image _thumbnail { get { return (_cover != null) ? _cover.Resize(ThumbnailSize) : null; } } - public Stream CoverImageStream { get { return _cover.ToStream(ImageFormat.Jpeg); } } - public Stream ThumbnailImageStream { get { return _thumbnail.ToStream(ImageFormat.Jpeg); } } - public bool HasImages { get { return _cover != null; } } - public string ID { get; set; } - - public CoverImage(Book book) - { - _cover = null; - ID = book.ID; - try - { - using (MemoryStream memStream = new MemoryStream()) - { - if (book.FilePath.ToLower().Contains(".zip@")) - { - string[] pathParts = book.FilePath.Split('@'); - using (ZipFile zipFile = new ZipFile(pathParts[0])) - { - ZipEntry entry = zipFile.Entries.First(e => e.FileName.Contains(pathParts[1])); - if (entry != null) entry.Extract(memStream); - } - } - else - { - using (FileStream stream = new FileStream(book.FilePath, FileMode.Open, FileAccess.Read, FileShare.Read)) - stream.CopyTo(memStream); - } - - _cover = (book.BookType == BookType.EPUB) ? new ePubParser().GetCoverImage(memStream, book.FilePath) - : new FB2Parser().GetCoverImage(memStream, book.FilePath); - } - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, "file {0}, exception {1}", book.FilePath, e.Message); - } - } - } - - public static class ImageExtensions - { - public static Stream ToStream(this Image image, ImageFormat format) - { - MemoryStream stream = null; - try - { - stream = new MemoryStream(); - if (image != null) - { - image.Save(stream, format); - stream.Position = 0; - } - } - catch - { - if (stream != null) stream.Dispose(); - } - return stream; - } - - public static Image Resize(this Image image, Size size, bool preserveAspectRatio = true) - { - if (image == null) return null; - int newWidth, newHeight; - if (preserveAspectRatio) - { - int originalWidth = image.Width; - int originalHeight = image.Height; - float percentWidth = (float)size.Width / (float)originalWidth; - float percentHeight = (float)size.Height / (float)originalHeight; - float percent = percentHeight < percentWidth ? percentHeight : percentWidth; - newWidth = (int)(originalWidth * percent); - newHeight = (int)(originalHeight * percent); - } - else - { - newWidth = size.Width; - newHeight = size.Height; - } - Image newImage = null; - try - { - newImage = new Bitmap(newWidth, newHeight); - using (Graphics graphicsHandle = Graphics.FromImage(newImage)) - { - graphicsHandle.InterpolationMode = InterpolationMode.HighQualityBicubic; - graphicsHandle.DrawImage(image, 0, 0, newWidth, newHeight); - } - } - catch - { - if (newImage != null) newImage.Dispose(); - } - return newImage; - } - } -} diff --git a/releases/1.1/Data/Genre.cs b/releases/1.1/Data/Genre.cs deleted file mode 100644 index 5e4c1fa..0000000 --- a/releases/1.1/Data/Genre.cs +++ /dev/null @@ -1,27 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module defines the Genre class (book genre) - * - ************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace TinyOPDS.Data -{ - public class Genre - { - public string Tag { get; set; } - public string Name { get; set; } - public string Translation { get; set; } - public List Subgenres = new List(); - } -} diff --git a/releases/1.1/Data/ImagesCache.cs b/releases/1.1/Data/ImagesCache.cs deleted file mode 100644 index 51739b7..0000000 --- a/releases/1.1/Data/ImagesCache.cs +++ /dev/null @@ -1,47 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * Simple image caching class - * - * TODO: add disk caching - * - ************************************************************/ - -using System; -using System.IO; -using System.Collections.Generic; -using System.Linq; -using System.ComponentModel; -using System.Threading; -using System.Drawing; - -namespace TinyOPDS.Data -{ - public static class ImagesCache - { - private static Dictionary _cache; - - static ImagesCache() - { - _cache = new Dictionary(); - } - - public static void Add(CoverImage image) - { - if (!_cache.ContainsKey(image.ID)) - { - if (_cache.Count >= 1000) _cache.Remove(_cache.First().Key); - _cache[image.ID] = image; - } - } - - public static bool HasImage(string id) { return _cache.ContainsKey(id); } - - public static CoverImage GetImage(string id) { return _cache[id]; } - } -} diff --git a/releases/1.1/Data/Library.cs b/releases/1.1/Data/Library.cs deleted file mode 100644 index fe415f6..0000000 --- a/releases/1.1/Data/Library.cs +++ /dev/null @@ -1,593 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * One of the base project classes, the Library class - * We are using static dictionaries instead of database - * - ************************************************************/ - -using System; -using System.IO; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Xml.Linq; -using System.Reflection; - -namespace TinyOPDS.Data -{ - public static class Library - { - public static event EventHandler LibraryLoaded; - private static Dictionary _paths = new Dictionary(); - private static Dictionary _books = new Dictionary(); - private static string _databaseFullPath; - private static List _genres; - private static Dictionary _soundexedGenres; - private static bool _converted = false; - - /// - /// Default constructor - /// Opens library"books.db" from the executable file location - /// - static Library() - { - LoadAsync(); - - // Load and parse genres - try - { - var doc = XDocument.Load(Assembly.GetExecutingAssembly().GetManifestResourceStream("TinyOPDS.genres.xml")); - _genres = doc.Root.Descendants("genre").Select(g => - new Genre() - { - Name = g.Attribute("name").Value, - Translation = g.Attribute("ru").Value, - Subgenres = g.Descendants("subgenre").Select(sg => - new Genre() - { - Name = sg.Value, - Tag = sg.Attribute("tag").Value, - Translation = sg.Attribute("ru").Value, - }).ToList() - }).ToList(); - - _soundexedGenres = new Dictionary(); - foreach (Genre genre in _genres) - foreach (Genre subgenre in genre.Subgenres) - { - _soundexedGenres[subgenre.Name.SoundexByWord()] = subgenre.Tag; - string reversed = string.Join(" ", subgenre.Name.Split(' ', ',').Reverse()).Trim(); - _soundexedGenres[reversed.SoundexByWord()] = subgenre.Tag; - } - - } - catch { } - } - - /// - /// Load library database in background - /// - public static void LoadAsync() - { - // Clear library and free memory - FB2Count = EPUBCount = 0; - _books.Clear(); - _paths.Clear(); - GC.Collect(); - - // Create unique database name, based on library path - LibraryPath = Properties.Settings.Default.LibraryPath; - string databaseFileName = Utils.CreateGuid(Utils.IsoOidNamespace, LibraryPath).ToString() + ".db"; - _databaseFullPath = Path.Combine(Utils.ServiceFilesLocation, databaseFileName); - - // Load database in the background thread - BackgroundWorker worker = new BackgroundWorker(); - worker.DoWork += (_, __) => - { - _converted = false; - Load(); - if (LibraryLoaded != null) LibraryLoaded(null, null); - if (_converted) - { - Save(); - Log.WriteLine(LogLevel.Info, "Database successfully converted to the format 1.1"); - } - worker.Dispose(); - }; - worker.RunWorkerAsync(); - } - - /// - /// Full path to the library folder - /// - public static string LibraryPath { get; set; } - - /// - /// Library changed flag (we should save!) - /// - public static bool IsChanged { get; set; } - - /// - /// - /// - /// - /// - public static bool Contains(string bookPath) - { - lock (_paths) - { - return _paths.ContainsKey(bookPath); - } - } - - /// - /// - /// - /// - /// - public static Book GetBook(string id) - { - lock (_books) - { - Book book = null; - if (_books.ContainsKey(id)) - { - book = _books[id]; - } - return book; - } - } - - /// - /// Add unique book descriptor to the library and saves the library - /// - /// - public static bool Add(Book book) - { - lock (_books) - { - // Prevent incorrect duplicates detection (same ID but different titles) - if (_books.ContainsKey(book.ID) && !book.Title.Equals(_books[book.ID].Title)) - { - book.ID = Utils.CreateGuid(Utils.IsoOidNamespace, book.FileName).ToString(); - } - - // Check for duplicates - if (!_books.ContainsKey(book.ID) || (_books.ContainsKey(book.ID) && _books[book.ID].Version < book.Version)) - { - // Remember duplicate flag - bool isDuplicate = _books.ContainsKey(book.ID); - book.AddedDate = DateTime.Now; - // Make relative path - _books[book.ID] = book; - lock (_paths) _paths[book.FileName] = book.ID; - if (!isDuplicate) - { - IsChanged = true; - if (book.BookType == BookType.FB2) FB2Count++; else EPUBCount++; - } - else - { - Log.WriteLine(LogLevel.Warning, "Replaced duplicate. File name {0}, book version {1}", book.FileName, book.Version); - } - return !isDuplicate; - } - Log.WriteLine(LogLevel.Warning, "Found duplicate. File name {0}, book version {1}", book.FileName, book.Version); - return false; - } - } - - /// - /// Delete all books with specific file path from the library - /// - /// - public static bool Delete(string fileName) - { - bool result = false; - lock (_books) - { - if (!string.IsNullOrEmpty(fileName) && fileName.Length > Library.LibraryPath.Length + 1) - { - // Extract relative file name - fileName = fileName.Substring(Library.LibraryPath.Length + 1); - string ext = Path.GetExtension(fileName.ToLower()); - - // Assume it's a single file - if (ext.Equals(".epub") || ext.Equals(".fb2") || (ext.Equals(".zip") && fileName.ToLower().Contains(".fb2.zip"))) - { - if (Contains(fileName)) - { - Book book = _books[_paths[fileName]]; - if (book != null) - { - _books.Remove(book.ID); - _paths.Remove(book.FileName); - if (book.BookType == BookType.FB2) FB2Count--; else EPUBCount--; - result = IsChanged = true; - } - } - } - // removed object should be archive or directory: let's remove all books with that path or zip - else - { - List booksForRemove = _books.Where(b => b.Value.FileName.Contains(fileName)).Select(b => b.Value).ToList(); - foreach (Book book in booksForRemove) - { - _books.Remove(book.ID); - _paths.Remove(book.FileName); - if (book.BookType == BookType.FB2) FB2Count--; else EPUBCount--; - } - if (booksForRemove.Count > 0) - { - result = IsChanged = true; - } - } - } - } - return result; - } - - - /// - /// Total number of books in library - /// - public static int Count - { - get - { - lock (_books) return _books.Count; - } - } - - /// - /// Returns FB2 books count - /// - public static int FB2Count { get; private set; } - - /// - /// Returns EPUB books count - /// - public static int EPUBCount { get; private set; } - - /// - /// Returns list of the books titles sorted in alphabetical order - /// - public static List Titles - { - get - { - lock (_books) - { - return _books.Values.Select(b => b.Title).Distinct().OrderBy(a => a, new OPDSComparer(Localizer.Language.Equals("ru"))).ToList(); - } - } - } - - /// - /// Returns list of the authors sorted in alphabetical order - /// - public static List Authors - { - get - { - lock (_books) - { - return ((_books.Values.SelectMany(b => b.Authors)).ToList()).Distinct().OrderBy(a => a, new OPDSComparer(Localizer.Language.Equals("ru"))).Where(с => с.Length > 1).ToList(); - } - } - } - - /// - /// Returns list of the library books series sorted in alphabetical order - /// - public static List Sequences - { - get - { - lock (_books) - { - return ((_books.Values.Select(b => b.Sequence)).ToList()).Distinct().OrderBy(a => a, new OPDSComparer(Localizer.Language.Equals("ru"))).Where(с => с.Length > 1).ToList(); - } - } - } - - /// - /// All genres supported by fb2 format - /// - public static List FB2Genres - { - get - { - return _genres; - } - } - - public static Dictionary SoundexedGenres - { - get - { - return _soundexedGenres; - } - } - - /// - /// Returns sorted in alphabetical order list of library books genres - /// - public static List Genres - { - get - { - lock (_books) - { - var libGenres = _books.Values.SelectMany(b => b.Genres).ToList().Distinct().OrderBy(a => a, new OPDSComparer(Localizer.Language.Equals("ru"))).Where(с => с.Length > 1).Select(g => g.ToLower().Trim()).ToList(); - return _genres.SelectMany(g => g.Subgenres).Where(sg => libGenres.Contains(sg.Tag) || libGenres.Contains(sg.Name.ToLower()) || libGenres.Contains(sg.Translation.ToLower())).ToList(); - } - } - } - - /// - /// Search authors by name - /// - /// - /// - public static List GetAuthorsByName(string name, bool isOpenSearch) - { - List authors = new List(); - lock (_books) - { - if (isOpenSearch) authors = Authors.Where(a => a.IndexOf(name, StringComparison.OrdinalIgnoreCase) >= 0).ToList(); - else authors = Authors.Where(a => a.StartsWith(name, StringComparison.OrdinalIgnoreCase)).ToList(); - if (isOpenSearch && authors.Count == 0) - { - string reversedName = name.Reverse(); - authors = Authors.Where(a => a.IndexOf(reversedName, StringComparison.OrdinalIgnoreCase) >= 0).ToList(); - } - return authors; - } - } - - /// - /// Return books by title - /// - /// - /// - public static List GetBooksByTitle(string title) - { - lock (_books) return _books.Values.Where(b => b.Title.IndexOf(title, StringComparison.OrdinalIgnoreCase) >= 0 || b.Sequence.IndexOf(title, StringComparison.OrdinalIgnoreCase) >= 0).ToList(); - } - - /// - /// Return books by selected author(s) - /// - /// - /// - public static List GetBooksByAuthor(string author) - { - lock (_books) return _books.Values.Where(b => b.Authors.Contains(author)).ToList(); - } - - /// - /// Return books by selected sequence - /// - /// - /// - public static List GetBooksBySequence(string sequence) - { - lock (_books) return _books.Values.Where(b => b.Sequence.Contains(sequence)).ToList(); - } - - /// - /// Return books by selected genre - /// - /// - /// - public static List GetBooksByGenre(string genre) - { - lock (_books) return _books.Values.Where(b => b.Genres.Contains(genre)).ToList(); - } - - #region Serialization and deserialization - - /// - /// Load library - /// - public static void Load() - { - int numRecords = 0; - DateTime start = DateTime.Now; - - // MemoryStream can save us about 1 second on 106 Mb database load time - MemoryStream memStream = null; - if (File.Exists(_databaseFullPath)) - { - _books.Clear(); - memStream = new MemoryStream(); - - try - { - using (Stream fileStream = new FileStream(_databaseFullPath, FileMode.Open, FileAccess.Read, FileShare.Read)) - { - fileStream.CopyTo(memStream); - } - memStream.Position = 0; - using (BinaryReader reader = new BinaryReader(memStream)) - { - bool newFormat = reader.ReadString().Equals("VER1.1"); - if (!newFormat) - { - reader.BaseStream.Position = 0; - _converted = true; - } - - DateTime now = DateTime.Now; - - while (reader.BaseStream.Position < reader.BaseStream.Length) - { - try - { - string fileName = reader.ReadString(); - Book book = new Book(Path.Combine(LibraryPath,fileName)); - book.ID = reader.ReadString(); - book.Version = reader.ReadSingle(); - book.Title = reader.ReadString(); - book.Language = reader.ReadString(); - book.HasCover = reader.ReadBoolean(); - book.BookDate = DateTime.FromBinary(reader.ReadInt64()); - book.DocumentDate = DateTime.FromBinary(reader.ReadInt64()); - book.Sequence = reader.ReadString(); - book.NumberInSequence = reader.ReadUInt32(); - book.Annotation = reader.ReadString(); - book.DocumentSize = reader.ReadUInt32(); - int count = reader.ReadInt32(); - for (int i = 0; i < count; i++) book.Authors.Add(reader.ReadString()); - count = reader.ReadInt32(); - for (int i = 0; i < count; i++) book.Translators.Add(reader.ReadString()); - count = reader.ReadInt32(); - for (int i = 0; i < count; i++) book.Genres.Add(reader.ReadString()); - lock (_books) _books[book.ID] = book; - lock (_paths) _paths[book.FileName] = book.ID; - book.AddedDate = newFormat ? DateTime.FromBinary(reader.ReadInt64()) : now; - - numRecords++; - } - catch (EndOfStreamException) - { - break; - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, e.Message); - break; - } - } - } - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, "Load books exception {0}", e.Message); - } - finally - { - if (memStream != null) - { - memStream.Dispose(); - memStream = null; - } - // Call garbage collector now - GC.Collect(); - - FB2Count = _books.Count(b => b.Value.BookType == BookType.FB2); - EPUBCount = _books.Count(b => b.Value.BookType == BookType.EPUB); - - IsChanged = false; - } - } - - Log.WriteLine(LogLevel.Info, "Database load time = {0}, {1} book records loaded", DateTime.Now.Subtract(start), numRecords); - } - - /// - /// Save whole library - /// - /// Remark: new database format is used! - public static void Save() - { - // Do nothing if we have no records - if (_books.Count == 0) return; - - int numRecords = 0; - DateTime start = DateTime.Now; - - Stream fileStream = null; - try - { - fileStream = new FileStream(_databaseFullPath, FileMode.Create, FileAccess.Write, FileShare.Write); - using (BinaryWriter writer = new BinaryWriter(fileStream)) - { - fileStream = null; - writer.Write("VER1.1"); - - // Create shallow copy (to prevent exception on dictionary modifications during foreach loop) - Dictionary shallowCopy = null; - lock (_books) shallowCopy = new Dictionary(_books); - foreach (Book book in shallowCopy.Values) - { - writeBook(book, writer); - numRecords++; - } - } - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, "Save books exception {0}", e.Message); - } - finally - { - if (fileStream != null) fileStream.Dispose(); - IsChanged = false; - Log.WriteLine(LogLevel.Info, "Database save time = {0}, {1} book records written to disk", DateTime.Now.Subtract(start), numRecords); - } - } - - /// - /// Append one book descriptor to the library file - /// - /// - public static void Append(Book book) - { - Stream fileStream = null; - try - { - fileStream = new FileStream(_databaseFullPath, FileMode.Append, FileAccess.Write, FileShare.Write); - using (BinaryWriter writer = new BinaryWriter(fileStream)) - { - fileStream = null; - writeBook(book, writer); - } - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, "Can't append book {0}, exception {1}", book.FilePath, e.Message); - } - finally - { - if (fileStream != null) - { - fileStream.Dispose(); - } - IsChanged = false; - } - } - - private static void writeBook(Book book, BinaryWriter writer) - { - writer.Write(book.FileName); - writer.Write(book.ID); - writer.Write(book.Version); - writer.Write(book.Title); - writer.Write(book.Language); - writer.Write(book.HasCover); - writer.Write(book.BookDate.ToBinary()); - writer.Write(book.DocumentDate.ToBinary()); - writer.Write(book.Sequence); - writer.Write(book.NumberInSequence); - writer.Write(book.Annotation); - writer.Write(book.DocumentSize); - writer.Write((Int32)book.Authors.Count); - foreach (string author in book.Authors) writer.Write(author); - writer.Write((Int32)book.Translators.Count); - foreach (string translator in book.Translators) writer.Write(translator); - writer.Write((Int32)book.Genres.Count); - foreach (string genre in book.Genres) writer.Write(genre); - writer.Write(book.AddedDate.ToBinary()); - } - - #endregion - } -} diff --git a/releases/1.1/Icons/..svnbridge/Thumbs.db b/releases/1.1/Icons/..svnbridge/Thumbs.db deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Icons/..svnbridge/Thumbs.db +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Icons/..svnbridge/TinyOPDS.ico b/releases/1.1/Icons/..svnbridge/TinyOPDS.ico deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Icons/..svnbridge/TinyOPDS.ico +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Icons/..svnbridge/authors.ico b/releases/1.1/Icons/..svnbridge/authors.ico deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Icons/..svnbridge/authors.ico +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Icons/..svnbridge/authors.png b/releases/1.1/Icons/..svnbridge/authors.png deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Icons/..svnbridge/authors.png +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Icons/..svnbridge/book.png b/releases/1.1/Icons/..svnbridge/book.png deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Icons/..svnbridge/book.png +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Icons/..svnbridge/book2.png b/releases/1.1/Icons/..svnbridge/book2.png deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Icons/..svnbridge/book2.png +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Icons/..svnbridge/book3.png b/releases/1.1/Icons/..svnbridge/book3.png deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Icons/..svnbridge/book3.png +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Icons/..svnbridge/books.ico b/releases/1.1/Icons/..svnbridge/books.ico deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Icons/..svnbridge/books.ico +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Icons/..svnbridge/books.png b/releases/1.1/Icons/..svnbridge/books.png deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Icons/..svnbridge/books.png +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Icons/..svnbridge/favicon.ico b/releases/1.1/Icons/..svnbridge/favicon.ico deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Icons/..svnbridge/favicon.ico +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Icons/..svnbridge/folder.png b/releases/1.1/Icons/..svnbridge/folder.png deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Icons/..svnbridge/folder.png +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Icons/..svnbridge/genres.ico b/releases/1.1/Icons/..svnbridge/genres.ico deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Icons/..svnbridge/genres.ico +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Icons/..svnbridge/genres.png b/releases/1.1/Icons/..svnbridge/genres.png deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Icons/..svnbridge/genres.png +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Icons/..svnbridge/genres2.png b/releases/1.1/Icons/..svnbridge/genres2.png deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Icons/..svnbridge/genres2.png +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Icons/..svnbridge/lib.png b/releases/1.1/Icons/..svnbridge/lib.png deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Icons/..svnbridge/lib.png +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Icons/Thumbs.db b/releases/1.1/Icons/Thumbs.db deleted file mode 100644 index 5c4c23d34b61a2206b6a683f00c31d0bf16b3122..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15360 zcmeIYWmFu|x+Yw7kl^l4f;$9v2mun@9RdUk?oJbe1PBt`CAbsZ-4dL}gOlLyKE=6n zXPvpT&djX!eLrSq-QDZys=ceaYWJ2`p7$La#a_v-B3T9gLlFg@0S}MJ0OCKj!-3~d z_(#D400?;URDXDUeEhdY002+_v;1E)0{38FpXTog@ZcmOfOwj7BoNO*AcJ_ih6*0h zK%j%b0D%btTmk?#2pkZ&An-uogCGDw2!aR%F$fY6q#(#ZJU#0_%l|nepbFT79~XcM zkOu6)qZ8l>&eH#WAplp*zyF*6CL8|6&sUtWzP_v+fqMpC7k^qvVBrFI0A9cdFb7P) zb5pSP0pJ5TfcM~s8@%$=E&#UttHK08;GX2rzxUx^-S;2c+5W@(Ujh8!`=5Hi0rr6d ztZ@LZz#csH#2oC?zbfGS|J%Et`tYyr`{#BPutM#Q8R`N}t5o5u zB3{f;qQN9|F<4cz<6h(`A4ErI{iW$QkKJ3m^gQj`J6>RJmPmzW9X_3x&rFBfMHs)5+W`RB98gBc3Lhqp_0f~74{<;b=A=wJ1_D+IVMCVySXKxSDZb$gEx zx)XlkJGF8T5mT9Bk`xYGNd>dTUh?RWQd>yA{1|&|>4crXNnmRETbYRU4QydId;DY8 zL=jcuuPhkTb%>Mpq8QSbzb-#S>2O+Qa-*5ej7{y(7a&{D>J}Ep&F$Bp8GNh8d$CSo z7HBUSR76&_qrI`^40mx-&@T8jA_DDfbSJ8n&&_nBh>kgyT~ zn|>&!*qw4s3o(y19s#TF=TDy?!Y2bSa`^a*=b5UG=NB5RnvPqm^Q18G^{STMM` zk_Xv;-J&~t5a-l~oAyV(zq>ll`JXo_KFYpJBqt5v%`XV zu&y&}oD*%0lWoT~b^@@mV))bWlbo2>+cOu(vn`dOGyz;!SJ#~W)Wv4^?+p#wH8fJy zwZw#}Z>#F9F`1I6IDZng)3~5e5$@{|9D1rr5_Qn*_>JRr8a?oNkdW^fdudAxFD znZ_%%C{e`F-7i}se*DY=uzIRZW=QaQkU^iG>qKZvK-&VxDL9y@)+L{z~Paz zk$WJN1w+~qBW1=g{cgU?wo7EAY`Bi9r0NtnE;Jf zv&UiU<<+A9`IOf9(h{4OH%8z@$9*TeD%}r{-mOXM;FnN+I*XW0bUl0fRqA49)4m7^ zLqiJ6mMLreR)c6$Vebo;zOSS+%#+ZpS!1h_3QitZl2ZfQoSF1!_$;iN$g)}^7}@&i zFZ@=+C?(PB&oWTeG=4{jf`WqIdSHghLC3YM1v1Hp+>FmJfn;pYX}FsJB69}3R`T3} zf>X}}<^}yuV+Gf zow?xTq(}uO0jh(eGe-VjTfHyC68HoJ1hngHk}c0goi3h(TN}Y8jA7g`$e^YB!;J(KEf_9YIrCEUPgOIz~9v!pG@f~F>2eK~HkP?v)-J+w&T2$}?DkH60) zki}PDBH+fV`41+u#yX)bf}ZWq|xxZzm~Au|Bz8O7|L zfrwu;mt*kbzw&F8F1&iq0F>RvJ+PTvi{X<93wWNq zj5_v>iH?Sz@6Lp4E=y7iE5Id}GE1N^KnKmc_J%gE$xd>ss<2Q04(~GP-5O8kEBF%J zd7NbCtFi%Q&(p8)vYeO1(l`*+R5J-$50n=V{|=|-{2AVxtG*t+?>bK?vFSM2uF3^o zU1{L<%5zH_$Kw`(0zfJt#ad&jX~kZ%UM(e#W8*eXl%>J$=Wh_KmkMZq}rRcLuef#66dG>3!oz@8`i5CoSNEzGPc2{G z@mGr%?mX*5=&*0oY1@G)Htd2QJ!L0=aURbSkAx2TY`oaAhk3o~bU*#-@0I&lO0C1s zbf1Ni>}*q^u&^vrKD&(>5d;B?l+BP5F_|zr1Sxc>akGzoa&Fz0scD}C8IdSXt^qG> z(o-b7cdMI_k0)nnYpE@EA5^Vg^yYzp3X}sOO-gj)8I5X zDT!#yMbPi9S$`zC$4UTF5BK8cNHU3e*GTuWY|1R~w?<7^i z5lDwmeP#7+bPYM3IDazRx>on>vy5Y({D$=AskJ5psFDOoQ$7y!n)Xv$BD)>@-gf^U z_trWuFE2^R-L8j5x(ONehu}_}j}^wZXoRdCth@pC5A1zgSL2|_KHVG*XSOP|na1rm zLqS9MjZ>IL$wG}PPKr8eE*wIlu@AmJmS$jM#3ehV+s8F6M}IF|Rl zrjz9>HL|#S=1;R%mwDPvE{qp@bKRp5If>p0wE{(I&T;SFP`p=LiOz-+X-tunThCw1 zLdH4^vxDD%qox-S@^=+yN>H_nj*p*OC#E4^)=4|%YJNWreW0?0W0+-(AnzRVPuOy_ zczn3`Q(OOnOE1ZW>DlL+I)03~J{VWfAa=xu|LNxStIQ193@Cc{(%Qm@jJ^3b47s7gP%Y+0Q@q#pc{Rm*YM1K)k2cx>QKwPd*Gox4vP z_s4>LdoJ%Vbw<%F-0vB#0Z_=8*w`YwV&<3aZSL3hgaok&w4?FHj{*0f`68?Sc}tJ# z)$Aj$(Z;z*)1=GhALXOwxAfCZvFM1j0HYlKd)=F@JCSsPD3kWdS5~v9)1rIxE${AX z`JxEF_FH5=;_J3v7UB3S$LY*ze%ZAdvmhC%T%H*l;!-F+8(Ykk2ocm~{8avYyc~;_ zUL7g7o>q!R%{e7axrWKuwo0NruG{)Ym$ubsau!Wx+O=U%dlQEpEPfmH*Um=~!>2yf zz5B21cUdnR1SXAt$=6?9LM?X~XVde3B)}Sb9FTPZqX9gw0ga)v4S9lmlzTeRvMpGI zVWg||r{m}-rWI3~sB^}>3DW|slTLH+gMaYjq&y`4Www3)4quyQ@DlR+;nyVjNXWzo z5`OeVmJlJv3x^;Kqj7`$Yk7az`}u>B;sPqTp2PzG0i#U!>3d2)u3Bu2RlP3Iw*lm& z6v;84pL&`J5lFMH)BF4J5cN z%3wkmIka(4*Ry*l_^5BsHk%?~##tG7&)g!RBa?pEEP!>*4s&c?*} z>2A$uJmZHum;Qhf?tTevoe?4dQn+O^f0Mq|jJkv)99{xm7p^yD$m#WFQDRm5I=u2b zL&c@aLIWCp{uNpyuW_y1o*Rvr-TPJ^*Xv9HxBfz>{^xJQ-cgBFzml*`t0ZP4lPBCS zSv+2TSXujn7O5DyVsjr){EQx|8+u}ephlC4dDOXhq&528~0Ir$KP4XmB zrZ>ol^sBu!yy4dtDleChl?|{1*PxG0)+!4R*FPSpEIp#x}c?n{1` zEv)l|!@sHah~as6;m5lb?fD6|Q@dF3381 z$26dr@i#LBho<0DK`j0G06ql;MhGTlzHBBL899}U_;VM(8^oQW6eN;<$wcTxL1I(6 z#M(^BDp6l!i~6`>Mhn`7`5v~dIcXZeG|tyR`Fq9^OFECN%!r?_B8W~QrQ>+LpHX#m zVS!XtRh0n}`sGUi=pKjh(gnETnr8K`$YN`m$=!ZfdHwj1MwV90vk<^d+B;owEVNG5 z%#iA(W9tB6=Q$pi;NajYjXNQsU%%#2_|7L>yeJjEVap}d&!W&IPXkJI zJ?f#@)ZeoM^q%dE_uU@0V=mO$elLW9e*gPl39NWUs~a0H{p>H7{l(6=79!7#-VesS zZqQDW6Dcj`htpoffgw>O93|;u`?SbhJ?LMg>$3COFQJKeU*rymk~O*zorI$rPakp@ zhG+zB;{u{5qjvW+9=aP*JMKF$WRPV*r&mnNqPU*}=>?<1Q#S?yA>xb&TPEo}FL@(O zW4p7G6#cvU-%hA^C%@R6+O8abQws{F(A>g?z7w}hI@12uJapT6AJ6Fu>1ebdJ5RLj z`iy)u%(pBq_hmkWHLVX79UVWD+hQbiS!qsbrre-61JOHVvZgyl6rOK-JKu%3pCU;R zuEnJF_E&JYhq}^ccFYTzuDk2g-a{lY2?=Wpp&BeoUWyxpOC%X2HXjY_$%oWV*Sm&7 znS4}2wop`i(20V5@5_-6H{PDeGw~X?aj0G0imt+|DoJ+2axfdP+@hG3x>1QcPS_88oo&qQLWxP7X~~)*Jkm z^$MeQ3a`rp+t2_J;!54gDLU=gu0IIUCJu2Z#YFK|I32g?qPYn^NEl>Tq#vA|U}Y-) z`?WL16S)&6Ii==pBK5>={PzOVK)>@@HRmr)P{7UZOqINc6{?s7Mldx5dCdLz;8vfa zbhspRQSL#*ALlx7!?=iGb?D*O^Tus&mYR1Yf|O5jyEn>#6VvFfj<05r!=rN0fipCM zwEr&cep~1wJQJ`13T_46_MXc`l4Vo4?!by(Xp-@MoR08HVkvM^l$4Om*7mZgFh$7s zfM{dAxXeN$JDThUA9)wR?q|EgsGuN{682}~;wK)mcu7}!aYIwnr;rdNkUa?Zy_45F zU)%&kIr`FF;+_iRPGcss+^J+LNIsmE1Y7k*z?@+nLqTw2cRvAkFbV4?6 zN75Mo5nqQodNsSP&-c}!X?B%d`(OnikVFJ{95WX4SnvDV`%R_qXV=X)=Y^r~vh8Sz zfJ3@i#&2htz~)!P@xw#vTA@FbGDVLzVwF^T&ic9spXrkuFiy~S(?Un!45-*%8OEZE ziQOG_$4d!ntbP@}31UW&35v*;%|wd_4(vQejAvdg zZ$9|6XTw7eYiMrnmckTyjcv+fS_nTTc7W*Y4_E7N zXYQIC8#`Az0~t-crX~t#Yc6-iV;+d;;Do14NE&pR{Fdi48#8rlt9@_XlK35I(nP!y zyogGO+7Kf!$e(3ryoY^f50(Q0*aGm|E~6GXQ*^0{dxJfL)zn3vh{{yECb_i5g8A|9 zGDW>-7*R3q>AAVRP1M_XR&pqOwGybTug@Y%O-+49 zzJQ8`hWGKIs)w(dae_)}hEBD)3aat(TCb`h_K_KNny0eChoq_Bq0uTP6&)RjkGT}*Xt6+>P(3k9_|(wg zdN5gBQqprJvHMqMW@e$Yn!2^tv=8l7FfGq~#dH+DWuNM+qvF@T-CASKrN~+SN5GEC zucHbeQH1oItahUl*WK**y|0f?kE7wAWFdF9mg7FswIl2)r0B|GM@N@{X3`~814xr< zlwj~%z)?s>OFKnw8bHga3OT$7$qL+f4_kCpUv;(H#9JKd$`zgg_C2ni~DyvCG~ z0ZcyzCGtc;Sg}A$wI0jN0c!_>!1I12Ggj2TFtI<^J0%t6Hqv%uS#V|_J{(UN3w@$j z8@4`gDb&&#t))1({xwzscynKf+c{FS;Mm>@IqNhwHdZ>WzX^j~T`bslPO3d{Zpue` z+HOjD`|oR^kubrn&}9A!52!1!4eZI4j@Ix{>8U%~DfvU_-y>8J(f{~!g#zB^QpV%1 zfmrdDhwHA992bY4x7un@89B?sn0*%^6M_3eDI{J-t0U+R6`XnHs%ykdHnvf&xcJ0G zq)dN9FKdP6Hs4-x>S}xK7B}t5)v>;M^z#9WLU<0((U-EbLc|#6sm9S58DhfA$^oZq`!pW$}VNxX2ko%SYTg3Be$m3q^;yt!iZH3PGvpCxyo?x?Fr z$o}nHlygga(1CPVu&r0=iRhRdRExu#%t>p_MuHnRoi2drqu8J}Y!F_q%DjFZD$zb& zrZ?%nadX^H*$er8vVz=WE_S;dTA89@a{FN-5hHbt-eP^uzEDF5WVi7r?L2NU4p3V5 zRzoQB6Y44{-rrvAGn$m%$j1Ph6nYY6^EwRj3!(#FAB1ltQ=82DyIO@bn&C z{_)K#QfXEJ@Ln^vXOZFIfl*=)Ni+fu(b!7lZKYZjhLzS+Okqheu4T?IYBxBfA(nrs z4=aa2Uc`DZ5Y>l-*M=dV+Oh4i`LON#A%~_=up+=8eWJU-*Yg)OSutG@e0H7f0^-QX zNX}nzYwMkOa{r{~4%}F#JRi2;Icl%fur`?dgMPR9-WJj#86Gu^X6v+VKN^jkRjWkmD4b;DzT`>Ya=GMnGgYkKMV z?k-Ag@+&6^oIdL=2V`TzvyWQVkb!S$X)O8c>O0HrVx@+yDKvf7eagry<%rMnjP5LZ z!|*FzcQwOc+RbjPwL~QXQnXN^UCi7B;Rb}OKupmr*{@*0Bl_bbXDY`ARTfLbHWFp4 z44nUyXq56w!HT3Zx_T+j&rr+9$(U3VPNPd$si<11-1l6Fg=ka_8 zDy7WB^}(o3kP%$5#GfiX?Vzn+?CqZi24r{MmtOG0sgFkxbH}mWG#<9yW_{E;myzS# zM`(ftSuWS%%@NQ;nYu{siZg(moSe9La?_pb<|`@G!-S_xfDrWX9zPvzNEk6^)!p<%wVFVBD;syxcEMKBvk<5@{^*c)Ca^dYHg zzC+7U&(^DY7anR+IOQ1AE@%%@b2$w3re0X9ADVlO-BJNz){G+$Gl=vF8Zj5V-|aqM z7!fx?vjXsiJRu+!9ZBkEY(@r~C{rT9_mS>U8P~l1Xhm7C@)!J=LExodjmx&GcD)_B zw6*cRf1g>^FL;j9ZK(<7M=}vF^_yh>nbVuyiqrAsQvGrQtu4aenK>!d&6(xMtB(*q zna0}(R1_5B4k+9aXhEw*k?=os==tk-9-Yq+kbd4{f{VZ)MoqsH3iuxQdzts(Mor|X z9t^}BU2Y;M%Cj}g0apW2lYWsH1UoS@=RqM+_W=O`cUPmi)!~^OgfdzlmD>(mTmH|^ z2LkE$SD2wp+OAumjtZ=^{j>LIUdqxe3pBtk>%8jKUXB)Pl&l1k+9@|}S!|7Ek5w3n zg%QQRyF><%gbu7c*rlC7S58U&K_ky`y^q6YmLrU)MBC7j;_lF8e>8Z^7vfPqWn;Nc zst_YQDtwA|_i%fNR}>H=HeYYAgl&q?%)<8hKKYiRSOAz9A)Eo12?Uf>EIJ!hmM<`@1^^lTxSa z-fLJfxd9#2xc-Kt;9Oq;2PnVrK2y0aK-S6!rQFKio;p~iZy3(V!e}REvu?o-_r(Fz<@LIcKj^4}c99yU>HMSuqyt6lhtj3=)xiCfmJy@K zU*=b@@RmF`$sHW43>;wS^;(96ghX^&ntTk& z?o35UFuJXGIVpER&_2OjDP8_Ic&xwp7^afzJpmzHAmjUmwXUeB2y{$7A)sb~rls&v zzfD&{#ZU@8P`Y!f53>QqFepSj!dqf@{mep+mRr6ykaC?KZv`ooAe}LhhKNeT+TVrrf zT*R9P;%cN6T4-&-bjL|<-jUl6+en@^61%eD;o&@4@A2{RN}p>d%c)}gbB=s}jH(4B zt2Rc_F6M8#c@$Cdg|7GQASd!+(ocKH8MLCtetdYh^IpFET~MO&StK^zRN6OAXrK<# z!-X7ZPlUY<+iJc*+PyyR9o>szLxkf-;WFN+z*JM`2KBa@rk>KdwUoK&adV$)iJJ>I zs21Ei0;>v&Xc7;*OlhJmB;zDd(ZW>k7(3J?Z1#$YWBn4jY_iW1+I zj(~Pw2MsFIJ>4cbfNMBYjMC8eTqDfJ9@LdE6M4}zFuJJYkbKZ~YiB*T^o{mi&$g)c zaR}#}pKyD;Zf!vcyaU(eOCO)L7hyIfpucHi)P~joY=gngAW&F*iH9bNfviH_BZ6ri z=jo*db-{pJiGgc8;6MftqWSvUg%49WvUN|ogN7)>xAlpM9(wf5B7Xf({8;uH9l2tUIag1HR$sbsRQ7 zvnF_GrEEcUHMexcww9lxXv^7VINn?a8!qsW?f6EVKsXh16d8s?A%D_O>95=~d;W*u zPgkK4Wz}}g@{~(5kU&TK)_X&ONfEKnpYDL@4pbLKAyr}IjV|zghhezhW@Z!n%pH6d z?F34YH-Si>IW&_qC+fPHkqi^OHrwU`99uXg6obIR26(COL2Z#g<+;G4i?5fEh+Az z`RvvHnMKzF{yI&HKzZbe%(j~9hCGjEer_)O$?4bnpD`Mk83(Zjai)_fVpDmyTELvw z*_H&WExD)<5txJ^iOu~TGqN2?raG2UwHt;E5)g8*iKTpnRAVqkjmKHt=);m>ov#S! zmqZmg(QLw})j0aLr*PbZ>Jwz&g28yWO3%=S{)2$F>z!{HY{C^n)b5=2<631-SVW{Z zBpLHTejUi7*b;=pi^CJQHe{0S!zLj?d6&qR7n&?*y`*FHYvH5hWd(rjP2Zgl`034xZ5PBomfQB>$&?ASS?;CAba)ZT@} zjwUrsIn=_kR_pnVz-@eU1>lZgjcx?zKn_%6+EW+;7AGUnlJCsIi)+L?Wlf_>kCZ-M zJGcW=Sv^{=a~~ju$nr!>ic5I+e~u!%kEUd8FP}L;Dlv^R?@=@}?_Q_%hq&7z?P|^8 zmSlYO!q{n?{=TKV?iN}5Pz&!A=H#lkH1Y~LOLAJw*HMMj#{a=W*3iGErbPCj9Y-EO z!lZzgky&gHNXCd9BTT^S7%-9vWo?Qdmee6*nQl)ImFTq=4w=mk&8DYL=~Q0+h^nQF7dp5i-xEzOMa8Pne7d=Z&UW<0wyOdd z%4)kk5E=kgR;U4b;@un1R8wC>dLY(%?gyNF)BTD*P~(Xx#fyxCQV;N5N?O-iVlPT ziT=sfRs`@Jei)uz@_C8B<;nU1rm0|@?`X8%@lQrJ_Zp-jnwg~mKgU@sg?`Viur-u) zitof&EH=5e@MslyAuU2U{q`BS=*p3`5e<)A^&zW&vzAPh8VD+1U4gFL>zKNelaq!w zE3S75RfGiete;S?`&hENlmJb>EB8;tDx+WEp*lt-;g7w9MxXC*FV%8eGeo>q!!>ei z?MaV*c&M5Q=lesRJE4Et)EkAv3`aV*TnGIwD5&VZ1WKxR?evs7B?l#QcwW97U{k$a zev3Fs55?zep+~%{+1S}(V!9?EC>9aM3IF8bZRBmj)l86p;(wL+KAwWWI!gW)1?uis z#`XY)GQuXIpq0h`Gr*LQZHiEgLhkS1zi+UcDeeT2i~HVJU3AqT8+*az71;b*jt<)& z{X!!mKF7u3?P%;CG#>_&3%P}^4`@#fTitWH939HWa2`=*y(VPS$0~UAx!tdaeb=nF zTQq)hCq0f$L?dbt)5z1a?H$CzA_8!suUoy&Ke6i7Dd$eJx8Fg)e3;MgyMrabK`u(v z&MS*fi{MjW;Og1-BpxU0o#QcP z()le~*k1T*CSYiD&&6WZPDawqSLH_%9yNaH!EMWPX@>y@H&o4xKoY@WyssuCb%xD|pCoN$`(t7SD4RFDc-QWV7^B*A2D{az?j4(1%rws@Y#NBx9Q zf_!%t!K5k}t0S5|qi$}VBXU9mE-%-gmk~H9iLqU$gS6XuVNf%g=Z;dkfWIgvNO`H| z`UiVMI?#Ly5c66q4zFPtD&AzqtkOfRZ$Qc@uKjcw z^pQ-z1|bS(CW09;UGIm&%RZIrCI}F`LQv#-f;!}qr*Bi zUeO14l7)463cHR2e^g zU&|_O29q~6=XaQuTLY=e`Z@QbX$P4A3kHD#+e0$9h2-W)`f6GI(nN1>6q2XiavM1r z`My(Hf=2g~F^v(%CcP*I$6`}2dn4d?*m8;i#$+&@oSX_}Smh=8_d_;sId6ZgjO`xX z_TJ-Z7`zEc(V;V-2gn$7#*am|H!E268~K58c3c9%z+-Oa8n^BIE02fkO~#3(XPCmky95^OaNi_hqkJEUGSx?s zYt9Y44{BzHP4YlP3*j&3kB$SMc76)-kIfXR(T63K`S{zR?u}gSenF9$pQ{Cp__c1j z&={4uqpsWQ%}ns2Aj^V^jErnjg;~-{d|M#p$Ej(}7Jzz9NL9^IeMVX;2~rKMfp*w3 zELM&qByH{`Ec>mX%c!yjvic80zDGCN*LZOHOhZ3P;P^#Ahs~kBAzaNzI!|vfNaT1= zl%>pd?Q;`cCiaUrq2$5(zpJesI?5|^Yw&J+4347}4iA|KMv1=I{Y}AHV8@;G)m1;= zUu>?Q2wxr^R)C#vhPOM(u#pFYK4yWi*_`^OqShr3U;5itB*?8xWGYZm#)<% zZ;R56kJt^EL}|P?Tjj7f%egadXlcnnChC(!qdEP4SNf5Zyu9%*%z9VIH^Y)!AdVio znPV=Mq{T0N0_K=@C2^Ye=zFWG;+z*(`Q3YMO%`BE+sI9r?B3qej*G^+BSu=3yc;q9 zE(`~AMTaDo)V=QGr9gSo=ReT(_X5NH)EB_$Nl#CYvYDY+o^8lu#$A+U=7<6|^H$P@ z3m+;}pUj|hF#ASm#bH@o8a3qXr0wf1x&vBAY2QBCGlX6Q6Y&a{pOHnmzu=YC{-9Gm z9A-WuC93|2KRD|4^hgiDnCAPCd_*WA;WSGHDSs_fN-`SJjd>rMaU zRMP`4O@ZY7%{e;vR>_!0Ovinns@!$mXH?j6sY;T=US?B zhX0|y|B!1oH7u$wrelUA(6a`WSGIzt#MA%}lz-(d*D;bMeV=lb{&k+y)7Aeh|L={!e*qXs BEVlpv diff --git a/releases/1.1/Icons/TinyOPDS.ico b/releases/1.1/Icons/TinyOPDS.ico deleted file mode 100644 index 901fcc4cee1de202b4c6a3879fc687641116ef10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115963 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 b}J^7j`y(`}kozvlW=gdTg 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 z zr0yf#uQ-WEFx$oQo+UP(Jn^Mo<{Ns5O zCuU2CNJNu76o~O#wg!p6B(mI@+>MYp?B>6^MWD%yOUI`Tx|YWqKXU$<3|yWj1RuLIr^D6N+3-@nHoY#@ zjZlxorbn<8OFy^+b-xoao3bvHX&mJ9rcT9kz#f(^$tE24z}2U-4)l(HDNl=3C7Sr^ zK4Se}+$ofo+a)C9H1a##++7XdEIvryC_KlKF_ds{5LUqa&5A?ukNl5{l*{9!{reozqg>n)7#7Ny-I8V zzTBAMTIFHF&x>KLtois3ocN1~*;;V9Ovf~fH)F;zOy=9oiWS8q+CO6TYem?Ie9!pr zRvaQt=~ljayEpbf|Gg#hn3$G~+h5$_85pU2wbuLZx2s(V<*i!3KMP8em)Mh zz9CzXZRfusu8o(X{UR#ujZM#y0|sY_9^&kJ>>B|uaq6p;zCVe_f2YoioGSD+G~BP+ z@BGJTmdp1fgzeCANr%>gfXS^QAB9$tufnOqz=<{GDG=WB%4q-NmleE^zp4<_a(Q-m z^DD#Rl4~F;vT9}sr&=L2tXd%|s&Y(08Xry;28^TQ(rIA-^i##buy1?+>yHUIRRVNmHl6M9P%zF8w@t(qx!8VPY?nCQgDWlPAK|$@h;x zZ3>=%KjIG)K#tg8+m^D{`lRdPgZLWXApFr(emI+9;#u9q_Gu9LCx8wo=1GR{9p=;V z+Y~;-`BLbfI255v(0iQ%`zFeDU#p-$4gC#8;8{js*|KHKwWtFJ4oKal*Gc{tpx5}G zCO$N_gZ0;+$NvRC|DV^fzq0kHazo1^9q(Vf-otR&#L#Qn|7OI?NxT2bm`aurS}vZ^ za!RiE!~BfE`HbvA2D?wnC>-_$gkI05_ZI#?K$n#+GhOy4UC)s?EQQADVezBiNyhkD zd3)S+#Pbv{)5API%F!5H?s3Qjgx(*Tg3xbtEK->pvy{^nJznB z2f8kgTi>ZT42=!FXC;q}MQH3EEbk91TO)Beie%XldwZN;$=~TXV!yK3PwySla!i+j zE)QKUx_opw>GINbdX%GO_`4#q3ZeH3>Al9Sh#I2)7`EZ>JCS{e9%78p`+DXG`(FxO zHoA;-S?My`OXES=f+!(tkrl{teho^Ow)>G=0KIgX(q4#*{^3dg?%SV@!F7J~#vcTbN5EsM;2|_{;&SMD0-?>N} zl8R&_`G^n^{Y#|BJd%j4EJ7>Dsk=(CUxh$V6uVfSE;-Tum!8vZ6( zb`q+B4p)qMe8j&i5{uLmi9v)S;s0+!mLtPz04j_9FT0UMzXg#L&nwEo+2=p)pyK|6D z2;FYkBY{W^B0zEw>aiTDM~)*W5xU%GkXMig9nn~bU44lCpCF$iUm#y1Um;&VhHvoq z+sF^dkI2tG{DR$oBjV+w%SxA-E<0U^N3AD~1BJ%qbL1v+9qB;CF%)+t%NC6}jXiZh zT~H^~4Rs_!GLa;Ni})foh&HkTnTfoJ3`YQ&fG8sLcMl{Pp?^&XExQ+yD+n#ubh&OI zbUCTd&yX(*3W~l-JJp!1^hr1SpN z#W&@9Iebo^K3_D%;KpG5Qun{y{rPnJ@)1I}4{suuk+TThpHw4x2;G)DA-j>q$T&po zUk>|cAsZ20#1`>GA`!YRpxY8!hDwkcx;9&-O*Ec-HZUH;;yDCM&}~0u7(%xN zqYzpSCL+_3*~ol^ZZDQ0s}Oqppn_~g)Q&hOxIb)phQ1rzGGXhL6^1^j;}rOLGq#S^9dbRm zt{;r|3k$tTNL+(0`k=>jV>7Y}TNV4i;P65Q}Om*?E6W&v`mQ01yeSn|CFBhgii)VSC-E!w zFd>oYU}75w>bl`DV~v;EqkNB4a3i}c>WMw~+7Qnn23DLm$O?^&_ML_aaL|em4&E6M z5t|SB!Xl}?K52Qu^F7#Y$b~iAgJ9w^57wjnE9(~#r2~b3$SVd`jalj^e3p#G>HQmc zmg^+#v=%A{Iji?Qfgk7^dV!vi2k05P!2tso#2IuC z4j~x>8WS2DJwsQFl{*|T@&p}2AJ8%k0BxgS&@l-EU9%|AF^>b?!+g-U&IVhb0!Ys; z>8<|{dKLSA>h4S@z&bDHk^aXm^$DE6(I3`t4}e{|fpCZ&0RBF~qvFE@*T;tXuwpr$ zte6mYR&=l%D>{hcI>du9z}UnDyECzh!PFOv+dDiaq6Ukr%KAB zlu23CCQ=spFqH87|0Nz4gH23~XsoK@)JSd8UXsVvCAmD?du6F^ssfG)q=s2QN~k^L z#QWpRPBWjqbIB=6;a`4{BYOkO9`yAsp*}aHDmzS{H1hZ0`fS476>IPvrd6aU1mA-i z;_)%SSkai3V|{4A7-okZB=xz$Rb_DoP!ewnqF8IF&Oraq`%eo06BawNRkqoJiP2#w zPI9|m#M2?Q@oJ_@2g~#R zlj8V)@=|;D_T5%s!!~F9m+>^o*{pp;oSSc`i#ZKxUPCFNF)WSJWc=4B9)QYt1IURm zfq$LHe;CCTp3 zyY`FE`^4Qxp8rjz{`cB}gQXR7{9hffM_wz?Bd_Lb4KaWi&=}HK;x)j|;~8eqkZJ)1 z(MO;x^?|&9&!aR*v;AM@i2fbG!O9lT{~bC{ON6y-YPXF zr*bTr^ZyfBme81P4MlM_Q2sAF|DU+jk*&Vl5p0h*&|}k%*Q$fad({@??NUSXc8S3d zPZI---Fr1h$ZOTX^!i^%YmO}(&9sM-M0==6^LZXM{{Cr7QUAv;c4DjUZ~_aq6JGxh zE@~A9k}obKl8+jl$p^L8q@%`ih$oD}2RIy!*+)&z7{eseDhj06|BFuMIl{4QCn!&L zf~s`C`&~VcPyg`mOkn228MoM(t+dSr%*|XNH!(;N_W{40FApc*Tqz*mzg05CQ^bJA zj>eG2vaL8s@ubiVj^}wmmB0;ZG6&)Q&n#!aT(V+VG_P!bj9cu&etDZKn3%c&*UuG> z<_9WOW%#|78f-=)U9?A?-8GxSW0O+#-Lv+W0#)U#-6l%YlM7e4a8ao=p z*1|xg6L~JslJ5b{dEQW)=|k_aK93rI|1|sD(=xz<*)F6%sQ(S>ZeVQU3SmAjP|0_M zrVLv+F7%z$kmasWpW&iVm+q*5xr-HQ1oqve+9}i^)&Ilv#sXtfi_jR=XE-Y~WVtCc zW9*tTY?yuiQQYny%W(&qd$}gl4~`W^-0$jne46b7=vxeH7`EZkALACgve&D*fPt|y z1baF_rNDheW45PBO;$ioLA?c!$O^6^s zlL-8_lO)eAB;HMh#Jeh!IM+=i&gDUr@Voyd9$0^j35`v>n=(oC*i2F}W`e-|M1V1@ z%?>+l&M`W(>eAs!inH5jY4q%>k96T6xuZIT*vh&1H*dX~l;LumpV3gT>W z9}w_7w)po?a}M5P>Vq{*!JYKSgk`SmO*F(Ad=_Y$N&j3?M%5alSP6AU^+Ng3te04a)f+x&{eY!{&OB{+Oib#@?#o0OqDg z0QdKu1>F7k?9vuefzN*p@$@mMiQSCte(fcqIH%6i7(IOc=Md!cjtt86A9M{8JktN< zm2PbHJ@#N>b{O(w>^p^c&$=G{Kg+gX{uif3pa04a)gbhlsq7D zkLAFVMcY;Bk16PX8{Yr1G-m_7S0Th_R+L>XG{+P1Lz1#m`HuL;P5qB?X73{=kz|@BrKn!RM z>9ch7`LC)tt?uW)LXGhGkLUmV*Rc8CAOUOm0`%VxQ&+pQckIWu3bFlY`utZ()P8b0 zV-IP=w%3Mu`WVm{mf*8=)PGHa4wU0LKz8_{L3#cMU4sPZ-v|9aoT+O(*gLfx!Oqf> z@n0UTMb78YXTbIhF@PA*7?$z082=5)`cRc`NHN3-v^87ct1_>VR zf2|jLmyRnq+B!gfw0&n|iZOY;=pcDbq%*_-VnAcqkYdD~|FvWuhK4jtD2%bf&IM_Mk^&h9s^F=P?oibDM7Pi?n#M8&%opMuh0b?nO zbL>2kZH3Q&*+Ox=?V!B>CE=cy0~T#pv_B@V@nx%NdSP4DZuH%xE0?Om$cK$igtnQ6 z?VAtr6ft<5lx-gKm6$CJx!tN0F$3PsLwt_&6RS-E-f^jS1kfK<7LStE#;XkS<$pdoZy&y5% z6Cyc*FnsdX=U}~Wk|UM`f&?sV+nMx-+{!@91zQ3@Wq$zZoBBa$P{@elG>#)~x2o`X zpdF71+wr<^J6;=T$7`7kcuw2?zm7N-Ok6NFG)8#;q#f^}wc|a%s5BC5#Z0!#_^n+pKvS1jYVBRO}8TX-UkO2J$q5pn4IelXgEZY_Yo3#Q#=TIP+ zSq6ZOy+1fR`+=LQFL<~iuHN7-#s&Lby#B|bG3bklhpP{`W1L)F{J_Dn*dC;?YDbX5>YbE8g;kUtL);ewj0uemjnOJ(CB|#{wjhNi>KI2>u)+e2 z<%Yc>uzY(k%vK48F{{x(x__?z>Gq|MC-MKd@-g)LqwCM(;&Xlcx{xJf*Kj~)1tk<- zT=V>%1C?-3%K;0^8X4lh9)l~RR)xXnRpBsZZ6r+Job-(M`hAldf!h}eSR)lVWQhNM z490DUh6x*EVTx)Z%-JUB6ZVYz&^1Va{zK9K5dX~>$gPVala&)-ib^6(!@56P{dxKi zMgP69My^2jL;P1`utK|lOi@XIsaW@?ZBBl^{_*$%eTzZ=VYu#(X57m$WV}+`5YIRU z6F0>Z>R#8i{r2=N$v}CD#RrA$Y0r48-#59DE5kqnmdwg<(jU~jzQ?(t-2dF?*Zu*z zCoi#5EoZ3-n0l|UJslS9$>|gJjQd8e3`hUHuw+(6kp9@pt|zMw6yKJAnU^$8HJUS< z70sEa&f_fD7R6b-J(9CzM+9dnLpXN(VP^zq@eVF$Ar3!(8;>(rJ(@E|EtWG&EuJ$| zJ(2U0dNSvwZ7H0YJNTSgI}wdk&aB-6hM5`y&cmR;&!)reO6APNab|8$!D--h)RH(e zSvbwD37nU<;PjDMTjCgIV|VrzobTpX&P>(&q2E!uhv^=kj!UP(OlK=jhZV;xH(h?Z z9&~-^dM(BE>v!F0Oz`(5JGnS)B#sls#7{vj24jiKur)q#+Lna%^LA#!yj@waKqDI# z@6CnP2a2At^}flCTonNlJktN7y?LEeRb!?t)rbcr-FVP2!94XAJTSD308?uYnA-#a z+lF4t@&j{gUj*+JG59jyF~8a1HA9;aFt!Q@{UcGJbvPFGvXf!g;S5l-5Q3^@32d^i zfK7H)pzK%!$}V-FQenfcR9L^0&#++^A6~}KO1o1* zd0#51;&3Wj={Q~nDC=axX8lZ1H_Currm3*kJPEYevCMkV^`Yy<#`XJW4CwkJHhxF| zux*2J*ibOCiU7SM(HMhx*khgo+f8t}46|X4Zays65&`ZDV9kMI*mS6>PuMf=!@3R< zuw+(qNq>yr6zjQQM?7rQiGzJ+(O}`gg|N^Fd44QjzvlUKk|TW(FHREIz&eD1MSjUIo5)coFjr( zjzwxK=kNm@!OvFsyDbjqn10gNE4xi`Tfhm>@M{K5?>f+RE(0yg0@!mX57>5jque~R zO&nd*Id+Z$jh8$_Cyz+5!D$_K zNri)UIk3y31U4E~GQ4b9!IXn%ti5+~=o%zo$*hSa{UNW!V=vW+0kwl%FtHAX%%pIo zvQ&@T8DXX*muo;WLv=}duog)V(qu>r+D|CV=U`2e5u#19!VZv}2t$$)#wIn{0qv=A zL2_Z?Vc-*)2G+a^(2H(`n5r{zfucHcB&(SiWSkxrH+DbI}Cm8nkbm?dMJ^h^y zcO-*w07F|L*gEA+ON!=SbFvE|X2ucZ;DIo5K$}B!G(#A) z_XiV-_%r>D4r6A_B~Ess1jqf%!a94&LDO`waYzOqA0FQS3WBO!t{&!Y_#-3K7-Mjd zWO8)=5d(2NXl&^3IS~g*UX%&u`>`V@N+XN7!5%m*e+Uc=2UqU|IOLQE>kgK|N}WQO zvpoYwFShRW^{ji)HAsN|qtO4u8MiT#y=-SF>^$fT{=VKLD$=| z_>i8IUdJ{KA!=I$WX19%vS5B3nX3>>=FCQB#oP~mr!Xg$ESML^49nV_M$8X|6G431 z75xK|;DlvA!WW-`$?#VY#yR{Uiqazusr#6G{{6+EyWIoK{f{xKie-`d6wIA1FeEuq zR-`^Z$TEw22r{FNKyri=#BzgR_%!uip0#ty>7i@%-wR82Z4~K`@k){GRl9>h`;a>% zM|rFA@txJWl>JPb4h6w0i7;?Evh0zFf)q&+=Dla$8IIQ{Uolm3{b63JH5 z^amrh10+Q_v7_Dgl8R`|T_5!LdM~-|w7)of9jQv(kIy_hkn99Yh~$TZouCjx3LDxt zCbSW`@is&@5}b~3UsOHldWyiqPoQ9+?@SgiiX!92amko55mGUBESD@? zkVy1&9f_xNEX$tl2a#TOP?+Gr$--lvr;R~L_y&@T@BI}dICd6BY2q`#1|W<%g3o~$4^i&v_G zuC_gH`ynQ-T>tjFy^dE!%9}e}uNz)gM%xoYr%#I!Dyo)*Bd$4Xl z$>&1qKYkA$1KX2~ST=ByLV=CPf9S1!RqQD;iuzBK9$6f3MR+~&%dZuxh1J0>Cn26+ zr7BQ&3JTPJ6uOrVI*!7eM54LRhB({sSQgmUVTiL8-^v_GzM8g z+h`rYcjD;hvTQmh6UD(jQYcNA>u(X8d!VsDGuWUiXR~ z|7o%25S+*Xv*ZHsNB=9a{>$<|C6FXNvMHYu#qb8k{}xUyY;(v52Y0@L7WF?T3jOn* z3WYgIWdB|p;%LodnIH6oAjcz^1Hpzv&*=sd1L~jVQpgY64*3!LAuHS%k1GeE-3M{~ z-w+GvTMYV-L;nwF%4Qzp-_T6#f9HVKy&{gbd1Ft~V$2{2{hLt#`L*5tQ$Hh+EIl&( z&lvx{SpPS3YCz3CAMD-G|9)FCXAX5ABSAFwKN)joC-?c+_k=+7pBH0|{_)+t0n~xa zAoXtlq1zxYd_QD{89^z35dFU#2eN&zM!g(I`eVu#^snU$hPeGt2(@K%ot~ZlK*oPz zpMSyU1X9qyl*puh-s@jg!oMc^S5Sz??wa0(-Km89N2ARG7w@cLjLCE_r z-u`by_kE!M1oZ!Krffz3+LHcvVVj@Ic-=!$YD(z&A0GeH?SDG%|C#N-*nj+KBAbE! z1=1svF5y4)LI1HtUOoZ+O9vfCK|#>#-(25IV*9T(pcshv|3bR|@7?|no_}-=60k-o zC6fM_vNZ<%)AN7Z?&Ci^{;$OI|02BpQxvj7DoQc$S#{z*^l#VWKNL(P{bznjAWeE? zGQK2=+{W(uPyIUxd+YyPg*fz|_*BeQNbA}EN3*E^AV*7P|DO?}HJ}(|2X`O;3Bz_U z$A8`X|3UPxlnCfs3~SUT^xqFtSh0+Mdj3z(|G4PCI(7@TW4aol?U_C~<=mG^P11hG zKRy2o!t*~9eo^=KKLP81)>i~Fq(=tF>+@d+YWMk%NB2oj#axAS3IE=Ve|r2+&;JJ! zgY1y)GzQp~-VP8(X!acc4Wj=|=)Mp1pM?G&4&z@Z0E`c#|8RT8e{I}WQW~}fSuGV6 zQ5#8JvSzpcxWf>f6b2@#J^mBXfA-e|GSR=3$l!R2c>Ryr|Ks_8xBpaT|37bTA{jqE z<*ArAH?zlo4Ay^d2zJ8rfApWp(Z(EzPalKakR6Qwf(ShS=l(bRC!zmdSfiDbNqP8qKb!YhNfsS{xk9VUoc+(Gwt=?PGobwA&`Y- zKuTnAy!-u&aQiRzpM>uDPsO~sS-t+*`abC2nz{Z%@8=FA2DzM_jQ>LJE)Yd(VY_ei z{BIEJzj88+>f`bLbpzp$1z!KB*MD*QU!REWzH`@0O?8Yispo4m{<9J+AS5LmOa;Z= z+y5l=pNIZw8ITeg98WQ-sk{D%*Mpj)g#UTTc<)bu{-tBWgjBqCoZaUi?|+9lTVoqY zwwx^VKad#Y;q`yI{V$5tfC9Y!NAtc7uKyJD-wSKBN($+Zsp|1;W%O@y#1ZfRQ2!dF zF=-pAihLQtHlU@THdYnyo9Z(DvlEUy;QtJf&Ht7_uJp*@c=!7+!0SKV^?&}n6!f3= zRLq~3)8jvu#b*55boV5CEfKu8T|`y6UdVu862aQ zbEN(S%>IA=JU*E?F&+I&&-{6L68`;wPeuO^XX>^@whH<;wRFP!|L7m@{~b%&Nou1vAxcuwfH_Z(rs;M2PeT8A|NlP! zqVEXgqkk!p!SNJ%N4vNG5e=Z`)aQS}{8aRx`BW^JpWo~Muz^4Nw`K1CW#jW~1Bn4` zLz~wB(&)YDUl;TK4es_IU8DP6Sfe)!NPkS-j{fz6!PJUA|IzLLc&Y}ek5xf%e=Y@0 z*yi=IbbZEuZn71GrgFhFy{G=CoF%e_-xHu^KuTl^zVGwTrTz=S-o3m2FPNW(?z5hX z1@nbH{^MBGf2fNc<39)e4m(7x4MG{+PBS3H^tF znYA;daGjX?e?qXEG-Ceh#yAzJIEFcIk7pcY{O2WGLnuD~Wtvgiz5VB-|048{E~P~V z$5V{%ssI1*pH3!C%6TXgCuU>0=${4iMH2o4Ak@_kbD-IAa>Dh7H#iS#|BDPaqO`*SI1=5He{ znFfsi{1h7q6GTe*KSyMXe;`mOJu*0+V)U`@?SEt=*8d``|7pzrf5H3=bf5cFEL>2? z_;<37XB{>SgfKUI^l#6}rTzyHgF-HI4YacY+kG#=-2XWdgY7>J{rAFpVQV_+k7+xT z*{b?@pWen5_>sV$P%J$% zC3lEojD&yZKK~0BWTN}Lr()rPqHg~-@%a1)_3zN@e;_d^!o0t<{#Vkx&$0SUyWfL) z{J%9FM)&a;|0!(MgZQ40tsC&8sQ=xhEo(pKfLB9UQbBWGw`LnN{zZIS2v3g!GfDqt zKN3Kf(jtT9rq_Q|BdFi!KMUOpA3;9;_HY(0ESB&e1mW%u`23$eCoe*OKrtxBcHgQ0 zs(5WE`!D!^VQU6RzL3Y*hpFZ|4rFQRv@w zH#w7|O>(n9`Y-R^{tM0%*$VVuCOtAZo?>jz_MeCT zU8w(bX8*rvVGfx*x!|c-w6Lt#{}Ig372)B;_|M08eg+bQQp}-F>pzqCJ>CHGeh;#L zwM;rC8zUDnfhOthVTDmM1xs& zkN-6EU-dJA3h9xl{2Bc>cOU;T{!1kM=b`(eC!i3Axu3<0$|d}V02loiB|31Z|AEAy zESk9n-dUTd3l;wr|5@n17uJjF*`z^2F9a&3M+V1JjO+0qeH7GPCHybSBU7dnqg&~q z<1AiO+2cQvb;KwHB0ZhazavK&X)vG|l*i~W^}jCZ08}OzGI{?8^Z4%t^=y#f(f)S} z*qhP6g@Y#uqN)EqoF4heDJW`cI29K?2r`+jB{OOy85v-fYZ;BaYsX*5m)xLPK&Mx8>)v_e#Y@Z1duLVYmNM>OVWS z&ws`%M7I7n0=3d3Q}-MCKi<9nk2wbFZhiijEG{5ZrpzzIFYB%UOBNTR`^p|F zu>0gJSyI>Q-^w@)c;2p1LjCiM1{8zpc;+5h=h0LHs7*eE{>=t;`!C_1mI2m_JMu_> zOy8Tq-f}1sES>uNzg}{PT*}izG^OIz0zL9dv1PaaEEkB%i9`QY-P?cazY*QnOOFhW zrOrKu&R4iM1wAa7&p$Lfa@#wDq(T4^UgSsSo56r%^CH)XI@XbIt$o|na z^dUn3BJ}@oX6(;qZ#CtCwJZ9M^JMZryi>_0Z({pjZx-oE#nn<{@>+Sf|EgSf^q&Z9 zQB6<%NB_tFBydc6WN?$kt-E;O#QFU^?;cCL^zE8nfHHl(0>cMZb6_|<@mPY#p+WBIZwbbs`zSfPly2hqQq zLn_PBA_kI!{h?Ce&MApC9Z(FKQt3TV`_9w3hoL#s3X0+^G5>?7I6cR6?@G9*Wq>ti zPZ8;lm$dWPYM86k-YXQc6aCn+9{b4$^)}=^Z2$4S3S+70sAiL^HO@@_pT(P zp{$`h|4;s_Wb~=O3A9QN9d9+imC66JJN*>shSY;cKpvC-XXT0-GIM4#dFiG8nK7do z%g6oD;a9CZ$>jg>a!F^o+a^F-cra9_d2veP%m);MV`*kg{+}~KYdDc(52cB=gPQ+G zZch&3j>-R}n|%rn;WOZVAwnkqm#WH1GHX@~ z`adoebe#2T+la{_FXHc&$?|nc#$1gYsLAl*)Th~zj~bsY1|Qa0lGFLNO#ZKPg${5c z&k5Uobb#ut!OQ<9x2G8W_re;p7v1;6bZsGf3p)jDyrLi{C74|hV@*D3@gyJC93~%B zn@WKhx!!0?K06mpijrK&u@c;$l%;`pWdm?an%Yf{ze6US?IOcYbrFz);cZ=H>bWj* zr2Z0<|IaAz6ddL?KnS;x$^U1@ew)mn*NX0G8F+H$&21&x+OH8u2QK0GXS0Gl`H&M6 z26fqfoRbB9Ek7?Qk>`mqZu<(q9+|+QT+(=9E_2o2js(n6re8I8Def1p0ygHXM;@ zCuG7oLJoKQLPDC_NmN5S&s@|7HgQeh7g{0b@5Q~BU-1>$w*3;8fs{i?swBr8Y z;n3e^BlB=rRn-e5ul#%B;~7b!!$k_Az5>XL=R#9{uw!ky2l?`qB*x`Obrw$;1B>qR z-yTLTRECrKyx`;KirwI($OEbbu27c~_}usV;u)Z8kO2LcqW_08MZ1u_-YgRixg`QW zDQX1fsq1Jf3MSvZSxCOQoKC*El=gUVxNl#}CSScOB;_eCq_re0uB9vt@+&eSq^1!f zkDX%$6gH5|4?iOO&%Y&MH@_#G#}JCYha(wZenV2`Q?gln$b#C}=4N znTFf1U#`^0klU||q>I6oTypC|4k=4Cy5WGwuhe2es!mq--DY@6Apfd`D6b`X}zd-r1@=dE^7y$^k(o1t%Hz|TDi2u z^!AXTWD*r!LBb=;NGP|IgoKwc1cwz9iuf}pqLdjXDyEVI_$Sf)-*5T()K2rl>&bE9 zSx_Q~ffi99oUVw}z%p>B0?TqeZVMh717`i5nb^?Z>2P%zg91GEIaM0QyIAfG7s`C$ zbg@4)@zT?@z9tb1g}&Ek7_Rs-gl}f zAn;V7AE&L*mvgGn=O47;cWp)ZdyzlqbV-ow`KoZG%awj`u`&o+E25yRIvWxi8o;~d zGT5}e2fWj7D1@AN%{JipYaE~BS2!NWU+1_z1do>2Io?P>%N0&&>lL2(x1!BvnNn+p|L@o=J$1Fw_^;5vlJx0i+(VhnJ-9~A@N?ids^ zF>t(49kJk2r9WJ(2!IO}L2$Y>1otU{&{7g9*7MxEV>HV_f=BuvuT{pLbFdIpEOWui zFBNm&hr{{uAh=K-h;ayH*5h(z0KAIp^eVc2wW0^wPrs`QgiDolxF94LUO~=Rgrfgw zsI1C_^oCmCwq5}L({F)y``h5r{tmddUjxT8?}P2x55Vf|hj2s!OYFBf_aQi(>j2j? z?}EpfYv6_B__bdJPTT7cUEc;tMMohatr4Q}UT_4r8A8KbASCnz1ctPNe^48E`<(_4 zpSJt(^f?Va0jD7#=oAEnoB&Q(3xtIq2X5psNQkS2oYXw1%0d4{bp1nc{jnb4I=xcS z9fMb&BnDXSFIHjy3y(jVir%GpzO zOJSLb2sE8DAx{tmr;0hyCP8}%2hQN}+!-v(lAL9}LSFnT?Ag+C5UQ&6(Y~P23+ilp`W7=Ui)Q;IeiIYakw}f zJ^{x~I(Z)W^)0{`RYQ7qHKe82fXq9ESdmVMG4tI-?V6B`rF%unicL;<%_?qh;g8VLg-Ci7o?9M^R z>=>AU+5&9P!~OI)dVC@FEAG32er`ey`f3pOKuu*Mlo!`PiKrTi3aUVqUj@RvN;sWU z3AuuEkdsvb*_q=AP*OV&+Y53l<;T(EX+PTkEc$7#s)XJq5&oW@j=9=Xpr;1s0MCh@ z8=VKq3+4cS-y5F;oU`ugMC^;d^VOx`9Ax0N&xJFBs5gGiRR>t@B?UeAUXZT?evh>_ zAFur^=}(kMT@9w!ogTXe*UeJPx7Yv8U77juY#ulW#(ua4@Otiz zxo^#Q^|Lx|ebZRsDP{M?-VZj!wL*_I#&xrNv)}v#`F4~yHUk?%hQKUf5KR0BU`yCd zu4n33tZCpNyUORv1SSE4tVhb1?53kP4$`$kk6nxFX2n+jHx}1h$MZ7-RuQ*geee*N z2VIk2(`^yAZ-wPNnpESL+8;#Sxwppesye;y^jHgAH!H0I=O@Uwqr9;h*cbZ=eci*R z&>OHJaa5(-U?25h% z+{oKt6>%H3;&r8LQIS+v+S~AcL64<<)@%=%pCI3kGUpj!UuTnhS6B4Rc|MjF%aZ37 zYHIBLNjB(CHbMO*w%U~auWC>8e}A$=qsj5&IZbL1%w%Ju%0}SN6E5kL5cu7MttPkc zPuTGP!k&8mKTVuJu8+6#15?+-)cL|mQrRZ0M{J*DThFsCpyS~Wm5r`{-TROYYCnN4 zw$t^ml>>VK+sCi>eb53h0Bj$BeaP*V03mN}`Fy>d4_qJr*Vlu}`klJI{|rX=LGXP2 ztGqbm*LQwxmcGfTZuCuP_H8}hoVOw&h#DBC;Mop;^=b8~aB zu&|J`Z{I$!v$LB7pU;QL$jD!ufPjEWB(bMSAYKYpPiiz<>lqj z*474Mu^8Ih+vO;9HMG@GUw~2_r3T6g(AGkG5e0R*d{rI$X)1jx{HvqA0CoA;sMGN$ z#Z_Bd3k3xQ5D^hUW2VQ^ICN2e7v&nn40TJC+mW59??>r`(gmdwPqf3)K8D1g9z*3T z>QUIw2mA057lnUk)DNJ(6D1vgE9&MbjS&X*r6}oK(K)5@uSRGrSx6-!L8Q3vc57?< zXUG@GBjlfv->UFE>VH7~^mp*@*!Opcs$V+JV}y?TIdZ?Pt^EqdbP=gRa*#k|Ekdso zJ+ElwJnENF-fM1Y`+Dt%sejd77ymZ}1m%1qA6o}wSg|qTzteK6{}E%mj4{@uOhh&# z$~C@H%X0Zxpn_-&(l9`Rd`suby#SO z_0f=H^Fml?taW5W;_iUZbWT8o5In+a!QK6cJYF+1Gg!1}(epO|rKY_DaLr7_uel~x z#`lQRX)Ox+eN*-xwk~x$IiLE0680C+XZ2B+ww<)(+K{%=sLR!PVe*x9U zCz?jFve1x|%kPOZ{`9RhnSFdIi9GI`fc*vZ*?r(x-(F55H(N9A4A#fN5r^F`pMM=( zV+O|=Fo== z{dEcQ?`pjC1ax)+7@lC%)|_N13r$bReEni|+lu^0o3lS;>(i{*`qX&<$7x98vKMl& zCRtg;^^P+kaKv#A^RJ8dD5H2r%{YMt;{>v3ZM-bvXf#(+U`yz|4DX*riK_j&`pf#^ ze$p=T7!wzI&u#rL{Seel5*amtW9ASn5VKR$zqFS zS#0zP?!AV9U+w-mSQ|d)`={FSJ+R>YG)DdXG!`XUWRWKG4@p^eyDj~Xk1r*&k9re{ z3aa+&>a+Kw_i1S=xz?P1i#`wJ!aMlV+mD*wUQl0`!Kkm#WGNaJnIr3MGM0u$W$K@b zPjW~;8Si-NT zRgZa9UDfA{be#_h@4dGhYkV#>e_{L!-m?LXO}UJQWiCtMSP9v!9+JOUd5C|s@)ZBb z^=wyRyltC@xwvD^JM}oA|9+YYtSy;^pgJ96z%k zG&bimnw#@kltgDo@yJH|Vx7DpTdtz%s2IpEQ7s%EwI%cpRd)UpUlm^Enp6S=GFoRVG**} zsz7$wJAFY*ao9hI3-+;T)2B}{sASg`USXl@fR3#~*fg|l5KI}&(;)0E45 zHnsNqh0Kktq||3ba83mFwGT$sN=8_i!p^e~p7`Wk)N*&t8`jp&XE_{I@>r{F0yZf+ zlW7tLNL#V~^wcr%??+Z#;?K>Db(<;NX>IDO4uK}Oh*`)jVo?&#jzXDNU<{`|>)=!B zyE%P5Q9|q8w-Ta@{gMeXH?VC*9wVpDoCX^jf5pEN1*}rHEPF7YwV(_?btm@D<`Wu%mU98Aa`6qP_c!%sb>brzywoX=mP679kU0t=x`M?~&xQ zLa?cojbe>sB8S$xRp^!#565_Eofv=4Fs)gut6M=7$aTw2`Q%tg8q<*PBfW_AS0{Wc z#=4MeP1pypx*4$jWbTXEkgzT}9bf)pNpR`Z3bCQ2LmiY7mR$O#s&hcv) z+S59A%%VM5yKqk>(cV`f^9_sVV11>hmuaopqFrPHtXJ24)_)|evIuPIG5(hSBnnui zZdvu&7%#m`%bu4%tf(1BP*Q09II`KY5MRHUOta8m+F!C;)xTWt6xtF=u{Sq0%4ynK zpQ%A(jRUR2#n9SYSdWS5*i_2=!V@@HALi)*{{1p=W)D$9>n-(G1dOCt7lTdXr=!sR z15v;#b<3L1$9Ngt82{;ETJvi8@j?FP7)O zc*4uX`0WcY{^>PawrnnCV~+|L{CrYM>yJ$MR*cbC>cDoL@x%M)9OvKIiPk}26typi z?!j7FKvXgZ^Rqv_Q*Fy4LdC z4lC*n5R?>Je}Zh?Qbvx4zAW5B={J~5cj{-8H*35|e`P2)J$jDwZ{|w#05Xc)e`KkBi!3xQn}hkuo<5Rbem}_( zqU5o}i@nkK@km}v71)S}M`7q^qJUNEmKVMmbIiM}<>Xj8tjM=VP*Q0AJ;JrBB?(bN zru%G^^l^ues(-nDr_PsLtqH^UU1qvnPHWR#>qhfeG0NOk%N$!}Ve$E#q1xbQ(s7)9;~qU+otvyZL@X=A4I-S&*`J8fywJ8h}byX|Sxdy=fqyB(RkTY8%z zedzPO*|)yDn0k9yntW?mnu1br=d142>tETYwB7GCZ--2^vUv&?R{XS7hia{oBSJxONY9dSnVgU)mir36ijb*6@e>pbc6&y2P+ zKL1Q{>5{GUYlG&>To`Ijh3m~JFw}GkuD7Hh>6rT?3p%^%py=8skatZ6nM0pK+O<#R zGI!`9h=%a_cQt_dmz7{7YYlzptPhDpCdmHgZRAnP)i#6PeuR9 zC=qI7Zi(xdUm(KYex`7zwdrj1fpt*&eTf`|TQ=zEn|9=&msK5N1;oWuXlW^+1^?ex3w z7&HCuwA+r4@1EEgdc%U+%Z%sn+50@ksT^wj8$J z=-XGp@+TC%Sw29aP(1O(mCtu66cbq4gAZQ$+*P4i?xj%N#mf2bJ1Z3XgA|J1tPcB` zBAPuYmrDVO!MVX{s;0zUoWQI}5 zu`mkF8bV=t!$_4kl!oLDr@)k88mbPb@RX4}e>dabG&3ifKFGfMM5d0Rkfbp3iuWbg zI1d^e=g!~#6O`?OrM$j(UX#&KX4NvJ`4ye{~n?sP;lFUA%meOjF~yKm*1ZLP7>yp`WEu`^p?dRw3#$%l4RZX6jn7?(c!a4=!?STG%9T@Umq@PowzZY zfF77Dw$Q{9{-7b&A=c%u6~9S>Tv}R6x7>1zEDdhG^;Rk@ER?KkOJUQ+Cd#hOrXR|F zq`7(XX>{5+3Q7tkkE1^Nb?Fl4#@|67z>f8cd2Bi-tid03Kx53on${XgkfWlaWbwxw z=-$0MZQZ(6vaY>_&6irJqN##1YL3ya%H8yR=@0Z{*-x~j;B)%;_#&2nMw2tAavIo* zKk9*w;7u1UUyuZO^XARety?#)I5fq{W^=bd-T&VvUYcz~*^swC?>qVO_Zrs-MlbDkx| z_XQ1X#UJ}E_M9!Jzom068cC4D!opqHxRUZ}^%Qc*^Cr;t!gF25%nf zOWS4U!IC9Q%;N9v?oJwwH0|u60b~OYCacS>c|%&*ioa-MFxwNCvVB%6X|-Ak2naAs zgGV2Ilwx9H9L5WpFEw*n9rz0v&E@vuACM5l=fQWSTM2zjrS03do0SV5d+af4ZkDbq z)t7XMdX zdBv1uHhorCr*OV!4c_86j>I2xprqlHB<#I=_m;)KfB*iHb=q5)q)lcv8ZWEHy(94V zS1YNswX6-;=gys@PMta#;eY$>x6}Ri-%l^S^b)0~r?;tNOTo|OzYuH!0yk^&_KrWs z7`ilcDae(cOy_n_U^LGTp%KXuRHiMX`ucjRsHmXit z#mC1}Nl6J+S64f1--EpOe)df2cVqzPLy%8(c0@l(y+_cdJ@{jd17FxHCuF=!b8$9{fzAL{l*H|qXScY5TJN9gXm@79mEBkVtx<^%BGUv+>cWlo{RCqAW}%ntBf z>GurAxA~folYyBnG(E0Tw!jZQ_`nkQ9rk@~Yb~>- zzQ=7tV$2P5Yw?FXH6vRZkF2aLvpVmKFTUuod2S1#GHbKA?OMt{Xf6KUY|Tfej+V85 z_36_`b`DIOIMEic9a?7^(*>pW25a&6PgHV#S6pA*2Cl=04^!vPoh9+V`R1D)YWr-{ zxs?S6st(dyM+UXA5nGEtXg4Qs9^*1?Z59y`5t6ur7Xbg`$B$bHWyk((P4QQJPq1bE z!+s{G=Z+dRN)~@lPfvpU_eV*efr<%9_E21{ITz0-Hb?yG_reNym*n)($Z+`*s+qhuU@^{VLGj&3HJ5L z_4;*S4u9aTN*+qHaz3P^ns_5HHf-1+iMN;s@Q3_S6Z9nTGwg@v@Q3{PS-}^QXyoMN zn6+tu4r|t|k*s^Y3sb67xt?eVf2xpigzTp>yFV7nO2O3}<%+8(D zrX5k>@9%Gx1}c?G{PYiz&pW<=>xkCiFJuM8dSKp2CFrrwJoAiM8mwQxUaIPKDT8kq zW7;14VN-*?pL;%666PaEj?fJ^+#pMXd+)usL;XFHK*q|CBg1mI;QnUCkTeeKH-nA+O|APGzvMq3G&-@oO0PjRhg;avPBj&qQ z4nIgujdTo=RC|stTgS$2AR9k{i!J!W_KP@9saQt9Ysu#cTk!QtF(vDaY~;4!584fm zb*Ep-w@IRL;=~EM=bn3H=K=KP%F0T~x*c7({?tZ?;15{Ts3iW6KmIsD zChiEozZ4v%Ws6w+s_RityXHS+0q~E19O}p7b@v)|ar*RW%E-tdH#av){3lG9K=6lO zuYGWA+ITL<*|Ywk7mi^um(U5|b2Ci9>xCCyATKX3N&FE5i5S2yzL3_d4cl_```Y3d zuFnbFk=wHVG56vB5iz-ja3YoidN1}l$UCNcz`=tDxn0Q5&+nS8ffg1YiWpGrTc$n$ zTkwbda7EEd?gLuN+C^-;NYHbD^ZfbqY4G5|ZSaSmpuD`CuuiUpUW}Og$(hrP_B?yX zUuO%S&r$xhd^;s*k_7q$yWr^2qq#057Y7O6aIMnn;3Bu+?w*J3<~t@wj}&;x!gmp&7)XU`ss_R(*?`NrWSfNpz;os$^D_Bq(Nuvd$* zmdfqH-;3=7Z!_QWsYdCTm%V%UnwZd|ubt6@um!BKEm@h6U5ocbki}Mt)n&$S5zi10G z1!STbSu<%>(Q3-CE70R%_)>79fJB@C_JBUm_o1h{KV?LdzdrjCMGT9eK@(g^6+4t> zBsEV)_x2V9gvCa7yKlz#r{`1{e$Y3UM|dQJcj5h38t% zky@KV`Sn+5a*-(hKs=Qelv3-ZR$8C8k^X;GUwUrD^K}2;9-w>Q>_&ZN|Ao8~{0Q-6 zXcM+)&=>vSv+!L>;nUtSN8vB}#dwJLFq|2L{|IrRSeH1bwW4Gt#Wy9;uiEW2F>4C> zB>PiHb{Ic18j?ALR5?Q_l$}XcCK>Z>&=-5Isr)MXwKaD%{sIob2_7u?5k6xKu_r+e z$Aj<1?|GhNUCgRc9X2QI`7H2v^!aDB``_@0^Uwe5=ihNpz!U80%N}$01o$Te7X+n* zYS^4Jdf5EdpgcG&R1=b+(u5pSXX9vbh209HT9s14IL4L_r8 z^v%lZaMm1W<%3gIg!A<7$=>Wdy&nzyZ7_NM?n5r$v$LO@-DyMlM*88*kF;B}mkw4R zq8*xD6jSy!&CZ`o;TaL+ne0PuNsKqC1Nb?8e*PY3@FgDfiM|07zQ=mT+J@W}r#VXS zDU6>q-e@nI`u0@A?a$~PdMRutUot&1XNNz0iDtdiCgK1jD9HoAlqyy+C$@9)p-(x*s4#VCc{G+h*82SSN zLu+fR08uiBtqQcn{1<&&(?5QL^@#ZFie{Zn8s{r<-juO4{yg;1Ll)1TRxo=u{CmPb zBw#Q{f6Pzd?h)@z!}G45?}dE}ap156-gVbq6dW9Ek^b4WIb7a@oPc(Pd@I*Kegkf8uI{iORj&&m$*LzsjBjfQQW+{CMNN&yjxKGB&>g+5I@aiAtmX7oGS- zfXHJ@OwSnY*s(+Zy*)4BhhE8$)phd9mAT064(m%c>YGM9DB_*P9KiV=NBH@Yv}z`+ zwC$hUAek=`gVyrZzM^oO}`j_4F5f5%U1HwuUS70QT>mJ$o9# zfPKK8l*4@X{Ej3O`U@Cf`$@0K(02ix#TX#B*UpGLZ`_l(9MA@TzyMy2*m99@uG{cF z6r69h$Jc>#O}hDK%zp&_mrWDY*g@yBm^$1+ zf;45y6z<~%?Qt$*=gysEs|*O+5B78^{x9%%V`~6Bs*uHXAsGP-)8>6`U_WO%m*KQ&}a^}_x>C39G(2HJIiXWf6xIoBAoFM$uvG2XG|^K zHvxZU?75=^ywN7+l%TPt{viwCd{{|Ci2#A-&7Mbp?)hgu9iD&Yd0ISwF}2h-Q{DNi zK0{R4TeXkdGldRhDEj~gOZ{U%#5h0}!WoBitr}`&f2Gx>6g54HpFjLt(Em}VM>_N$XT>r${Mmwl)*q-6L&_Ct$Zw4n{n<9sP4StOr`nG$# z7yCX)qf8Fb1ST2(R@5<<3;i2*0(Rw~;xFtmXD0}VR~81UL$zp=$;BGiSa*$gN`OX{ zKU5QXe28X9?g$OD@o7|Q_BlCBgo_betWDmwfgNDxiD+6-vXE3U zL+Gi%r|C)0r|83&IaJU7YT2LmvX%;(3%DI%aq*`#;#eft{auqh$b;DqFb+OfYyhFm z2Fd!<>-m@$;_k1Cq6)gZi|$Y#N_MX|t?GNC8a_|H8 z5vh?hEO`V4e;G<^*Q}+5A1~y7p>5l?nT-Y7QMr@GvUA4Jv%sHB;RkN8)jHkG~ZtN zJ2f^m(yUptIP8$)akiwr3AjvVJl%uyx?m0LdpHY?lz%*5e^v$dDO=^SRj1bw?3us; zynZ+v7h(5VxpJj`&bzp{v=@B-`+0>Q5qKrq$9{ly_1>|G1iJ_l;)Wns;aR?XIWKF^ zzxB)}3Y#q2$6Ugkh5vLbyE6_6v5TU8(5XEM^j}c4h_K&?_F2x?-xOv`Ljpg8EP_68 zc4*(eeO7m&ZP8LlT9~9B0^T5WfW?a!^Y-Cm#F$u{V8_6i8tR#VAM!1H+y%{rRI9C} z0RskbxfZd!(D^Lcw9r5N^ij-K>&@)dpp7AYAh&?OmNl1COG^tsCm_baT0MFJyOXm& z^F2!0DKN%ZXFrww%t?`dBA>^op%3V&#l^+E-1MK=$8hH#Y#pG5DgQwk9wDzKGhG!a zZf_iUyyZci6rHHY<2@*PN;IWsr_;&CliWV2X1^PmGK$-~VM7+}7_@IBX8|wpCamfC zg$wA{`t9_~*=@8o?kgJd!!UYw@^dusTNf^0jm{j$^+osw(4OHV z++#ht-@=XgFO(TfUP=$k1?_gb%bA8mj-gvnMx zMSk&t^?n(Fw6AVIrRQhR?f2bIy?Xbey6UU)^|?#uxc}qxl4UeCZ#qrPolHZrhZE{D z8?V-v*_Pm&McTS)D_=Y2_!rh0?lfk5o)+~nHqbvlDbU%w!c@9@&lW9O)MnqWZ9UKW z8p~y1)Ww7G!TkB>k+&$}Vj_n_%zslpy_wx>_K(B;_&gW&AyYx_4`%TYQQM+v_qN^i z&O7fA&LWt~Pl$iVJ)W?q1zhRhmF-F2p81{{>l!)kh})A(u=T;GKQtqp=^H*;zr;YT zH}gGZwPe$tU-t0&vuDqitFAAPtzqkfjV04+S?sJXtGdiLtcV-GFq+mMMduQ&}E&qFK;(v}TdI1Y&4Hkb07^O?NhryoDqU=GwA zqM9?+)U|6@u75W+>g=*o?d;aCN=U^^jJ-EbqXh&v6 zYTqxKsf|b*qwTw`pLXCOH(rkMW_38sI^9TF#OAp(IVs?zfRh4F3OFg?q=1tGP6{|F z;G}?)0!|7zDd41llLAf(I4R(yfRh4F3OFg?q=1tGP6{|F;G}?)0!|7zDd41llLAf( LI4SU7MuGnTrCXmG diff --git a/releases/1.1/Icons/authors.png b/releases/1.1/Icons/authors.png deleted file mode 100644 index cfc64cd8bf37d20a35b447ed66122b595be67e3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2112 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 diff --git a/releases/1.1/Icons/book2.png b/releases/1.1/Icons/book2.png deleted file mode 100644 index 116ec3877f5399f8a29ae795ccd01fa88ac5cc78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5112 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 XCa)hC`;7no?EoMrr7T$`ZXEc37YFYZ diff --git a/releases/1.1/Icons/books.ico b/releases/1.1/Icons/books.ico deleted file mode 100644 index 57d6e9fe862f6383770f6d81f55bbd0ac6c946f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32988 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

<2&1vb6vp1a@kSqN%xIc%nKizmP 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 UB+w#(774USphW`z$0YFo0pq$<*#H0l diff --git a/releases/1.1/Icons/books.png b/releases/1.1/Icons/books.png deleted file mode 100644 index 4593e0bfaab9ed05fef0580e6693958af2ebbba2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8881 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 WW%x+UuH*!eewu1}_sdnWLH`GkhiTLR diff --git a/releases/1.1/Icons/favicon.ico b/releases/1.1/Icons/favicon.ico deleted file mode 100644 index d8f35aa4f66bfc9c7805d810e6e3aa08a3cf6ddf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmajbZ%h(l90%|RrA{DIl<8Wlsj2B$ZlE)C5-yhnnM_oKX!Xvt-Z;srpdp!_D0*7R zh^B{v;A-kBSG}-hsqgx;UY)JBdR1-p#@cGVaKE0r%%p5Qx6kdl=X>9Kb`L^4d?h9# zZZz-_O2M-nj9p5@c-$RNaQ63*N~K7v)uQ_PdXCLzL;us**vP%3*Xxl|sYGJ27zKkt zGdADS>3)TMz&>JY+xWDRzizXSKE)j`CZs3|S!~zhcBVJ4%hUs5nc5juzIG_+^-Us+ z#q#TS;tL7>{tL`(p8{sc!l=Te=3B%$Z1i7-&F~^f9;!yzPOkmvRjzt8z*4Nr;Y0FNX_@HeV#-~@N+xXDoyQ8I^)IGXf$;;Q;bBp z`H7g6QbHsr*OkWWbg9WhA2!gm{PZ-P&#IoF<+^dYpvq5|7=1V&r4@!TIytNIPk&Dt zAt)f3iA#Av+j60g>QEuqJ785B`$>`L3S=JW0>53s<^JB9*3B}W#O^I8ghhkQltTsq z`yuEaw5pKjJ+O{dImv_s3NkW!VbW2=d?vD= zRZYZKgqW3ZYu`%9LWRS_$>xPs>g>bSA&2u;LBsibRJ(P~`Xtn5UkNo+3jwQi>-i<+ zo#LmP=K~@EfrOYyC_n;{h$9pTksuB~3j}!mcOJJ{2SBKchtOi|zuw}EU0)`)aUUTz F{|T`1rjP&t diff --git a/releases/1.1/Icons/folder.png b/releases/1.1/Icons/folder.png deleted file mode 100644 index 3241bb301c4c5013adecb5e7398bf17460e888cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 493 zcmVnA z1PcjhA=-$bqP?Y+jgT^}e?lzOQV>M2vC~d1v{6WnI)EGp_3(~H~F>>j$o8N=G(ZAO$#^Qbp>isYJ;s&GzddW`dUSn zQIaIYazPY}687(VIqDv#w#VYg?FJVgi5;w1hT#aA@I3Bz7MAID)h5tQ@TRJQnUlr2 z-C&x=8PLMKscT^7ECT`4G!obZx(>r}0o!5X^bCJw3TnOPZ2H_?cugg)6&*=I(}{~01JGm%hUTP| z1oiiP@$D&-qrZ_A$`X8HPl(Qe@(aIx7dfPp=NU!AC1EsG84riMTPOdyK(uly(uV|X j2uP>5kwb^;Q-A>g4)3FnKrYta00000NkvXXu0mjf@i*7f diff --git a/releases/1.1/Icons/genres.ico b/releases/1.1/Icons/genres.ico deleted file mode 100644 index 45c3d605630a66c9333d6e0b5f21b9d97fb6d39b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32988 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 diff --git a/releases/1.1/Icons/genres.png b/releases/1.1/Icons/genres.png deleted file mode 100644 index b698c8f8e615b6a90e3160ba67c2123460c555c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23529 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 IM6N<$f{H!VnE(I) diff --git a/releases/1.1/Libs/..svnbridge/FB2Library.dll b/releases/1.1/Libs/..svnbridge/FB2Library.dll deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Libs/..svnbridge/FB2Library.dll +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Libs/..svnbridge/FB2Library.dll.gz b/releases/1.1/Libs/..svnbridge/FB2Library.dll.gz deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Libs/..svnbridge/FB2Library.dll.gz +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Libs/..svnbridge/Ionic.Zip.Reduced.dll b/releases/1.1/Libs/..svnbridge/Ionic.Zip.Reduced.dll deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Libs/..svnbridge/Ionic.Zip.Reduced.dll +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Libs/..svnbridge/Ionic.Zip.Reduced.dll.gz b/releases/1.1/Libs/..svnbridge/Ionic.Zip.Reduced.dll.gz deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Libs/..svnbridge/Ionic.Zip.Reduced.dll.gz +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Libs/..svnbridge/eBdb.EpubReader.dll b/releases/1.1/Libs/..svnbridge/eBdb.EpubReader.dll deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Libs/..svnbridge/eBdb.EpubReader.dll +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Libs/..svnbridge/eBdb.EpubReader.dll.gz b/releases/1.1/Libs/..svnbridge/eBdb.EpubReader.dll.gz deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Libs/..svnbridge/eBdb.EpubReader.dll.gz +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Libs/..svnbridge/gzip.exe b/releases/1.1/Libs/..svnbridge/gzip.exe deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Libs/..svnbridge/gzip.exe +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Libs/FB2Library.dll b/releases/1.1/Libs/FB2Library.dll deleted file mode 100644 index 88553b9d1d66a4ce14f99bab0ffa670724a0267c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68096 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 diff --git a/releases/1.1/Libs/FB2Library.dll.gz b/releases/1.1/Libs/FB2Library.dll.gz deleted file mode 100644 index 8b309d0e7093f6fd0d8f113f0191520fe977bdc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35125 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 H*x~;G;^Q#* diff --git a/releases/1.1/Libs/Ionic.Zip.Reduced.dll b/releases/1.1/Libs/Ionic.Zip.Reduced.dll deleted file mode 100644 index 606c3332f8930f7f50340a08313d305bb6779b74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244736 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 z z)TRHTe0Ak&^g;$pM7q7*UR>zve-OysN+J{8B<&Q2n@&$nHj!iIOo;_4oZvEvOglWsy^rt7% z>z0>G*GYT!Xy>O?u9a)kB|^L?j#r!FYnHxm*4sL^NRd<1<`0%aZmz zgU6Lv5q!L76uG8nCe=@8=1@8yS%)ACp3c9-b737A>keUy{U6pC)Tid{P3Yv6q;t!9 zcZu#W5BiW6vKj{nLrKIP=R@~*Yb~*m>6QW(jR!=d7Puaqg>HgKv7q#4SRn&`KPkC1 z-5KXu7jPB|$emY9W^BwP8!}9%N+grM0;@_CwXQY5 zAW;xGL_`be!;F-WuUF85ggwc-8bq}BfC5?IZYU5nMg6}wC^#pGjsJwMgiEChEHf4O zNBo(LSr0c`e1Cy*vaIqh+;iJ+ua%9G_FDZAH=oweA=j#PIV{eM>6_+L_dFBMl&k{7VRC%oNW6gXze$q`xPhcgJbk)Rg5- zGII$Al+96=;CZjr^tvdYLE<%$!noopSsgL2d+4ke4B;b00%>U6LCvnTkHI3WuH_ff zwG(}BFEUMDx){7e(=LLGz+0A>=Shqz7A zn1t7Izy^W&=k`i4-4CzEmDer{L)LgY;4p!#-CCGu+bzbk7@6#UEe&bsx-{8=PS_MV zgjc8ux?m?Q8!WmicMwV-Rb%4z&UPe`Ds8GSjVHa+^~<<4wfPjbb#d_BiqBTlvW=Zcp+VOmfD*MUAK8HIo9p6 zC$3JEyA-%QA8FbNcwz)>9hE|VMn>iqYny6*)!_1bYH7^36u8PAo&~SLQ&In#0ty-GENw1--0V`fF60^_Flcj+B-N zcl0FSS^j5vAnPjIxp-Aq)%`fXRjvhJPY=o8t4HZD<=U-3$4iG2sgrz()7;)9XOeg^ z?t%8Q!N1WfRt2%7J5~NMVN+|Tl)sbbr3g?Ft$Bv_W=&?KdF4bp$CqlM>6^*BR1e8Q z73CGABjeeVbAi9r-!-nwf~j=y{Pwp0Pw(?7V`4eyb*k2WY?{|Ld4_x85KX>`l4;=Z<=lk|Xl}t3=(>IXI_7$>yrEFih zw=ZhEq0NW0eZ}6sN@Go%&7P_&@So|cW-^t=tG(4sA*)RxSIriv%3-CkY`e8Q*Ql6{ z_k}{WN9ToX(QeRQjtT?0JU0e%g+k8|t@l-S_WsMfbG`pcn>X0>^hLUSpCDM)=GAOp zmW%zsSN}S9_Lr-840wGYjsKCazo>A+4)oiI$83x=;i4tZ0OMNbzDM$Tz zb^|%TFKb_L*@2u6fGFELq?U$giL+9#d$p&ixuCUPzl9Vmkbw$adT*Q@=} zXd*7i{9kmy<3+n@sGV&#I>=`QKI{|~1OVw4Hn8&rrAp4>qTpXBM?j1j0~6z zj&hMht1D1Iri1&8i(x`e*6d_WC-pb{N&OAVG7w$)mR{M-{%_&ZVkJ5l|+ zARrnCI)85>FgZC-2i0xHF$!QQ@sXf)=yH~l_pyam5y zqDy758vF`28($Y*|138oF7w+pZR>CN?YHs>pl2do`*v?Z+@qpjM-*WgU44tKScH4i z1<9-Df+5gW$Z1>9W0nL_sd(dNf$>}&` zbJ;@FKalH1gbS!auGPPp%{l2cza3|=Qr3A8NXb6!q+P4M+Vz#h`TJqiOl3c0WvgE= z17FguEB+Q+#`tBlTp#~xm=X1Z0udq@t1VBvbpsdAV za4{EQG&DP<#nb4QsDHPv%4SwGrQK2gE^maQ`kN|3L-$qtD9xSvo80w(^=|-yZkL3H zXmF=T@BuHZ`$YWxp7>wV;T3=QWt4p%|NT;%`#uZ`_c*mNAJz8J?;aP;qtcgp9V)Z; z{4=AYY(NH^Je!=3dV1O93v4pk-rtqYsSASdLog)?x1b_%dQgRUfzp_~_9xi2#2VpcE85~~s{ODkRywJWFq^6B7h z@nsneP%gQgm;3^DRaSfuf3U#d3k8VH9ps;VK?5xm{cv--T`aQ6C%m4=- z8`vvwf~Pj%?HgP#X<`Qth$d2D8dI!J}<^1;N_P9O-&KRzUl|zqwQ)+F3eYxy#dGQG`es;ZAr-dTU zLcywttzx6p52VpNVvpqI)Z08;G=nT2m%TW0a~>2xNSRI**NuD?Vy;E=YV3QxIJB;} zs11vbUGENU`n4%*vrC(bHjy@aw7E~4z1n<8oBP=axg2@g02DAVt0=;LCK`uE@m z9K&(}0&6deh%|B}_31B^O8(y4&3kVHFK!nE#;&T=JKRDGs@^*o_`djFS@jx@o8meh z`9}SfQVAjrmQ7V2dXO~jZQ zmHN-Ct*4D~z959+#1k=~QP^a&(2o|M77(sC0~}}{*OTK%j;7r~X1F8sSJY~J{ zN8wjb+2z%*etYO!?bEJ+Ebh)^2L?Xkz>b5M1!!4_>c1oqLDWExfQcHvP=eS4$TvU8 zeufbiiz)+vy$0GF1+>FJUtyrH_iu<-djDFR|Emq~d{G-2*T$Erfis0e5jDP|&94Z} z)GHDnu`8%OoHV-UI;}AX;1as&AMZi;h>ehtFQV8`m5|ibqa75`;PDYEyuXT)@X(R6~q`{p{*P~TjMK|5_}%%md2an%xN#h)9~!H#DGn zjq(4m`A~I-*iSr|{uKz}JSyy|7TZchgMkA3)?E`0H5;WToICr}sy3l)Q(wE5DOyiP4B#`N@gh(Bm1L2yinXzoG~8Q7G)l z_xgLP#{J6v{+;=}uZOyqZck=M zUXhI5gVcNE(d99GDDZEF>(O{oO^E^};=6%dUpcR8jWbzVRmiqGFDpkxK8}~A3xEu% zC0$SoO5=IO@g2lgk@6mTS@SoraOJYUhTba|pae0vM!QDqin|N>*kda}0AN)II~062 zZf7+HY$ZpiUR|s-?!*^$#6?7HPv)U~3Be}hEBgXm9@saqud+X!`2+ww_2GPhQ5>Kf z74<#Ywm*+HW_)%ArlLlpobyrCt~>^(!L86CJfl${Cxhbo*xMYBs%o|xnpFU1t>qYN zV-R)*a0DlsC_f0kX-_3=V?*&L_vHye?6Se961{NiC8Q{7{OVp13!rWA3!j6Yr+;! zyYe|eQZu&U29h2%eg~XX_G{dV9|}F_B_d?hjf5TH|2&K_(1XtLHcSdj0d%HvrMx$f z&KO5iA=ZrM%0QXJ!VVeu-?P7+yE8o>al1d_^jj=}&M{hi=l*<8eAK#=>Djl(?aV`P zUy!oRTHkNh`o7%_yJqq4<1>Zg4Ht?xKqrkgccFL#CP-j@(l348iT51q6MDcMp$R9bBg7s}%uLyty%QZle zzlt7+E)MLA9zb9!cQgI@yqe`mD&wQ5h*6)oNH*yUv|ayi8CU=PCu=vBR#y0scJ-B| z&70Mi$3`Yb#zu}+SFcy6RyWVqHb1kpcA&a>b7`Zxw!XSnTi?7><#_el#_Doyvo=z# z&TLY3dAWM6R$Z^%T79{;SY2AF&R4JB*0=1dFW1&L_)fhV+`L(rrH}lks%R>WU-GLzYp&{A(uf)MhCg5@h!O{mHj1Jp%=KR za_pZ;-K{PAq9#U72#swuiOWF zkor_Em_J+r{Yo}S_2@9lmwaSPof45GAx;&G+-J4-7xO)p{o+Y1e3o20n?fbO(_@F> z_Aw)(V=)_=OMVrxQ?_#V0m1fAez)DA2<{92{y=yAUvCwU9i?69DeTPm0lfam`R&1H zsK2Swpt6tus9G!u*T6?4>yvrwuX*^zZAs{K*B;FUJ()o%87uZ`WK_d zT=e1l@;g;g-gY!dMp)j7kOEqXNa!$+cZ*NisrGRX;cJBG-0EQ z#-aPpDlVx1ftX7fw=lPr991`#Ru&MJSo}t+7vHZCm^U2Vec0=zyZhw@+#M|R62IW= z0gP@jJ~n;0%O?qwGcJ4b1Wq)kPuS@b@hLmqeVBce;T0dX<=VpL>U!`#u~2u9=5VDe z=W$*k^|Qu`_@Fw$;KF%#C&Vq}+4Hj$^h02$k=uN1%7VyV5{$v zD%!MtG^d+fleRKKY+fRt2|xVj2rR0Xs&?dz$fR+ z(N9&*M~l(TXgRtZy$~%A0BL1EoaL3LSy;2LyJb9;We!eOCHM&#WAhSZTwd~6KO^TF z$$BZz0VtHS55hd=^bd1h2cTzsGGo zi6Y-xR`SzSXAjVjaZ0HvAw&o}5mS?v{aF+gvPDD%CNq`0w@?g3z-XZ8?ots2gS^VA z`}Q`q`6TQuwPo^Mv%pB0Z6;(-p$Hyi#-gkiTOTB?i%xIJtyxAR7hr zX8pG@pI`f-&FA~Hp6^>dICnDRCc4|mZJAj4Id@<8%=uFEl2`Sj2e$6V^Y=wn6!GVY zTfELBsFPWU?%rYcs*uOIc~0Io8hFAK{4TiC>q~Syd{Wx!187-KQf~x(xa-05hT*^O z+5T<6eMb(ocOrGl%#}`wczZ?4LNQB9!jVN)xc{;Ij~Q2`(hXb)*$J|3N>2E55uEfi zeDz1#{0Z5BxGFp3ZclzUWQ!?u(H9q%MD{UsdtVHQS6Y^yBAK zk&Xq#E)Yf=9)4}mzd)=WJ&Ows0vaz-Wh9h^`}6(k%MVD&C66BpiFLo*Q_AG{FPK?s zoL6pXkSPv{92Q?^RN%PqfR_}GutZ-#1r+2sdn;2Bgy+*{N8IkoN^=O#PhqggzsL?@ zSMojn2UjH}dYJe8{p5BNZt#$@0dk<`pP{RO&-AkC8O)Q;T=c_@%f|S(Gq9x}kG{nq z)8NH7q68qr_NJ`RL!LPM5yxPC#(0~2JZ<&{*yO)JP~r2>wE3PiRM9)nq;{M1>{A|+ zv^nZTDPM!qZ^;rvFK-%|zpXU>r#9c$=51}>F=YeA@=Wl8z);mY0GwdsbV<4`>#d*o zp&!RK{Lm{-S>sD02Pxp7(7qV%vzJjPiJ4J~I6?`w{Q$>ZO z#A+=oK>Qr_=hqi*F1=ja7^&Xe++2J7;K5g3d1ZtEvbMHddzFJ*2b)1Hk*oK{31;UB zTzz*TSp7tGX|uXKzwqKlb@ucN)s5S0Ypd&&X59V}9HrCi^S5fRtggR!;L{cupLqGm z$moId>#Nt7mTM;_mzQcQn;AD(zOPwwYH4F_dH&8>Dn6tps?9sqBUP(VjqC5uxE)hV zE34JXn@hEgdFMWqah2wf19}ba$q|FoZdU)pSF5Q?)kCAB$Ew5Z#&|gc`E`DF zWn9TZlL^x9IHv>!x~>CF2|M=@rQYYVA9{X$e(mh)%Ji!XwKawHb2rylU)k`D%pd&K z=TuZR*ZBXH|I*`rW-l*>{KRFkPRucvSFio_-KX}$JKDwx*u(pyE?hLKDE4jW`1df6|xJf>$Td*;xY`$&)*KZ>ZknC zKW_d$Vj!bc3hu)wmsaR)DhXcixUOS$CQR*ZTRL-oN}CrV||#=x&INRoL?y4F97hO}gR>?56n7(5jwtI?Xa-Eef7t zk+2@f)z70&wdT01Me7@WxwjT9>v<&md8?Nk0By|rWw2UWd!tKB-$fiUECmn0M_8;3 z4%~svKjHeMU#za>>RL$6a#?!Q5?U>FR?qg(a(Eq}Jzb@*Zdh;O`?pnJQjdt)=e+f8 zjw)w*Va*y3B0#AU{CTb~lBUlzX`%<0!b0-od!?#BWSmD6g|9%I~i31 zQ}_~|eZ?&4eT4Dp**nMoqqL>RC+vkB;;PoqaiRM=u5ITNUB|$wUPTc;(M^b$LAEGgRCzD(Pq~OTTR*IoU_$im{AS&=^qtVg@d6srp|y>6YHUS|Px-p1 mpuJv75WXT;MLV=obF2EI=RfEl?7EhQotI+!$De<282Eo2toiZ) diff --git a/releases/1.1/Libs/Ionic.Zip.Reduced.dll.gz b/releases/1.1/Libs/Ionic.Zip.Reduced.dll.gz deleted file mode 100644 index b2ae06481ee3eb78d8533262f68e983a5c585b1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126895 zcmYhjd0b5G|38i>Te62_B8i(MWGEWTt&n89EyepF`^a#UP@R*CL`j7x8H8+^EHyW& zt3(NDQ|3}N7Hi7oO8{&Uf1jOd_AAf3+L+KetrK2_WP4% zvS;$zTQ)Q7eZK_|>on^m4W}Or4&F0nde!yiBmd-HE^3SYV|m2Qde)1-E_^$%?ZEDX zSm)ye)65TQ= z?;B;2j_65Yrkdq4S@JO_h~03Qigp6|g1=z~Y!ac-Z+I;VzxV6m&tk!Hf~YYB)V9gI zD1Dot?Bw2;SH$N!nt6M6aW!L!e%uC~w6qv>OWI^bs(><>@AtoLzvSE|&l|>sr>HKj z!RY)M*5-(+8#5AZv<0mq4gVcMiu8Osq3)765YH89t`50~wR`h4d}ae^;Xc9eRI-)J z*nlDUapnxj7sUihB|1BQJQZsmmu{^C=iU{HvKVjZOX$-633m8hLDnvta=Yd|q zYz{rUEfl+30+PuzHqq`8CY2ny{1w#O>rM51Rx5eMZlGGciOckR#-h>__ozwWQRy$h zFjL%gN^_+scZ)pHEaMeB;^O+A3uk=~t3> z0N#3i1t=tBRcuylr1yL@~7p{BF^7Dd`O4&R&)cN(B(QA@o~7)eAp;r zip4>$%~coll%j{X_KGeKGqaBh_hQcjZM|Sr2BX1cnE{&ZVV?4D9RD?CO%L)2 z0nzl-?3MPgUSRGhnS}DqUY$nxUSRm% zRTV9oGcF(e!0sVM* z9Hxz@N9goYI+nZ!X+OMBa8(F;>>s?>`=Nuj%+<@swRj%(La%+AiG^GPs|Vlj6sQO$ zfuv9vcVj-rlW)6#aUG+lGppaAT*MY+R!ziE{kKmxk2oSyX(VF=kt!Wc1SLs4c-IlMU4CYjNn|6_1ioE zKP>GA9uGT?GaDv!i1>i@y|L=RoSYudnPEd5NE8=>BiWyhZTIyPLPhPrA`sQND{;U@GKEUY9ir^- zx;L#+aO7YoA*2%~Oe(ff<=9@yiw+PmApr_4o)r#Tp@x7Y+4TM_%YXZuOZR_lw2w#G zUVe@xo&^zs8t1`vxV0+&`X8~SC(e}0I5xipp3`flRZpjejyY}+r^-s&QF0{zSqD}G zWnB0i^qgIk3FPhfl!WOfR`MJ-@A>ixCB-8<1{yDL(v1Bon4@E>#s|gHi$LhK0t~9u z8bKD#TqTu~m_)(@h&cO=#g`w>4!*k;w5lye)bml_^`@iUE-sfCu|Y1TRN2;_VCV*)rz~% zmu>}vUTi(k(^as;kKOh%2xu%~lm0vOXW*EtSPF(`!3KXOJ>&A;%a`U2ssRrIcQeQL zTq3U&eFj>TktKA|9uwk^L}!Ytux9^3k;{AsZ7@{IO6VSSvx)HAA#g@B?6=1ZJ@mt) zBCBKP!M36T^-g8YOgSbs&zr_90(QkE0<{I5(M+agr!|+`!~SSRNt*{7pleO12-eVr;JfT!8P}je%XfbV&_`w@@r66@poPnw$N$<(XJ z*w2M;z`VJt+fCX;==4h=Vx)JjjZ@p}7$P@|?2u6D892A&8#&IB?j@8mWg^3Z?}9cL zW{nHejYIO1c-We|Iu9>k85h28Am2vfY)plY%rl}Ot3aI(9QuKrcWi*l`LNW!$@_XdkfID?(s zT#U7&8u>g^JuFBk{9s1Zk%=z#4={fw14ON>6Ls&rjupJM0_9CiMSdxUKtph)N32gYTkjx2>oUo1y1+CJ?Z~BflIhdZo{1 z7iGQKRIO2)n>9&LW~&K!KB{Ud{h^sGG>uTK{`dxq&U%B%yj_!n$8>W7SdNzF^)CC8 z%){MciOtKt?xfqiwGXnNdp_{PyGgl()!>O(^g+`nQl6EiQp!-{JWi}U>Y=F?DEV|g zs)jMkMg5IUZ!WA8DH36IA%Z_BC~pPHBo@qh@W1vf1Os$Y#1?IR2wuhk=Z4DSTAlYU z#Pizvw@{M4SnbcL~Y${i{Of)hMjbX2+ot*cC-s7 zG<}(XmU^#1FAY@s09K@}p^cYC;@0_>t71R2-ou$IZCrg+P#1GsY7kS7c#37YR>1QA z2-lI(2t66%*>Euab;Wp(N|9Skp2!z>BxxsQN>>liOB!m6(Wy)?2)pfNbPH>bXH9;c zka2Z>x{Gyn=hxNF=s%sX226MxcYJt@TZFPzoI@Z@!ap4P;(2h8_)uR6* z%Cgn=*~jo>yA@N0SXykGKKQ>|w?jy*`tk z`*v`7Yk2(}+qZP?e>Ghu4Erfm|9bBv#!(s3Vj#a1H4=LpEsj zreEr+^ySZ{mKx0(MC-OGYZ{1eXToX(I-jtb*Q>U_dvUZZ8n?r>Db7O|(F(qmo9?$L zSB;87H%iE>4id1mzH&&=&SeK2=s_gh9ZLpCZ{Q+=E{Ke&I&b`%^%J|KaJ)%ZQS`Cn zP0QO5hH*T68coVjptv*84}=ZuMr)nu?ixm^Bq-?@j$)~Fyl@r02G2r|wg0dXEj~X` zCXUnM7Uw)M)HfB%az%oma3{tldSJeNelexBnj^;Tsk3Se_PoY{$;D8L@z9LZTAjb* zbZD7|59gMffW1MKPd@J%(E7})4yO3N%L+Q4N?K56BV@cD+sFk%`aEC+u;y4+&i#l5 z(GJzoYgQ=i)wzds5yxiYQ(w7!CW+4oFDgzM#3(}Tj15xXtT40C;uedK`UyP3^s7On z;@^G#qdy=+0!NQbKOWo`KcWa5zIpH~C4X|GfEm;W$(H3#u~!s%!g}re=(yi=@OYC%q-B!^Y&dNesSSn6ut-8&QZ>FY7gd5+N*k9@L?MIM@@D zk9@~oJj{+oIM~ol*!46;8?rj1&~G*8HT=t?!&s+E#o!sqqidIjoC3o`%q!L*ef7nZdl%}Rn1L(38dcBQcC`)0mlcrg2IxIJ0Zpb}`MFk+UYO;_0#+E`p*I5b;pXpFQ-49#j_7 z_h|bB0n@#)wf3Mvd~-utJdlW>#j(fW()WHd?chgjRSR}lU$exERb0E(@CFm8tF0SE z(g~f82eean2?O0+6kg*%^yWz$ra4tSK_hazG3`rlBIC8`x-$`;JS~}W9(@naZqz5b z?av6;@Gf;@dX?t3qiY~!+F%4LK}?MUv)p=RY;4&4Ui1$brvsDv74+63fB zqq30)kYA2`*;xi|snQ*H=+jrHE%Ifd&rii2oTrC2l^&7RK&HCvs!d$`f&ukE3N=8GJjY!5n z{_%#*kM}S6d$tP2e|uYKu_jcIXqIiq`TC(jjJoYEF_oH8zj7iwXz+2k`$X9y9|M2; zg2B7|e!>k_k+mb{tNCyenSvAURWG4hvV5yXO83;DzPOgM?a+2{9us&L`HCt~^mRxJ z1$}6V&y3zDL_p(lutLJv@N!Hl$Pt}=^$?2`N#S^}rxf#4f(c%H;)8B`JyWvowRin! z=i?@|xa&znddE#t$z3R#`Q%FMDqZ|modLCHvqSf#Yxtu_Jgg=Xg;St0*rwX@xdt^3 zXyNIzN|a)~%@%GLxjtO(;J1Zgj}M#!2&Y+p$f0Mqf&sh7l!p!nEtzMN?!+m#d7B1l zWcGx|gqwl~WGbfS=M1rG)kxX%TD*>cra`J2+7%QDXsLr6I~TNjqF`wiSp(IT!oDBf zmF3<+EiP!PlAW zi=T>1q%ML=0V{=PyeAISf5(hMB8hTnfcewbGZliv3&*@aqiYf~S??=kN(<%|$n859 zH3XFdpTa5u>jN}dWP_yIYefostM5WSpvCU6IuTZF4p;DfD|B556(5V76=pCy6O;Wp zFcM)9skzU2S8$OYJBvy^`>hMxu!C+}s}jwh0*dVQMppe7erzV!w#XzY&{}0MltF*O z^jbJxM8>ws1dm99&n28_guV>B*;FCxd-Ee;1*%N?;L3{_G(R?K%8kb`b)p`Va&Zll<5^Zr32he=Ojk(u9zBg<%90u2TA*CIeMyi~3Y&o0R+x_0v~aIS6SFVx zSMnKSZ#aZeWWq}|#Hh!E(b9QE8LDOkU&RxJ^^D!chm`nENv|ZW4(dezFi|5rhYgO% zZRN31_h-o8H%#-`!t`?4s79*+Sw}~lkL7CkM>7$Pq|o4Qli-$wX7XD5*s@-};~?F5 z!L0w1uou*ePTM7~2K43%UWPCcD|{|o`)^bz^gZ(Ur1{BG+W^aI=GiZ~L|V4NMW?xa z28FE7f~LI5{&!-#i5n@Q|5_B3^%S&x5$1;@@W4v1;VFH+}K}XeD-S= z{h>nW0qC~sT}M2nQ`XbuS%ZK%xR&Lhx+LeJ`rJs!`7_tXxam>y>?( z5rGqGK3je0FJ5#+CCG{sVgjkib{lO<%q}|!SkJeUQ8??xBZJ8U!rzl7(-splSkuYn zaBi~jNn{tMv+!Q6w4iSvPPAWsne5TBQQao?AI-%;LRWUMsMeCGIAn-%R6cw}9F zSe(Hbr_Jp}$zNOETq@FL(i~UwUnKNcv+cI5X_{}pp-YxNeK=n{M1VyfPbEw<4xv1> z;tWTR+G=s!(%T^XCcVvP@vC8ctEGI%~+a-5QcjoDkr#%>5FSFusTfXy@H#%fua( zP6I)yXql7F^f`>e4R%DGC+;0nv|pFR#mg{H^hBq8%|VxFLv|AV~aP$C06@|Wk@7u10Y!CQ^{ zij@Yf$eM_r6>&JbnIv{=4Wbu9;tENO`R2&x)?*-*PN&nQ#Eq|;OaF^Q%pad{XIob9 zRW87@PY~Peq|V>yP9)TzgcV$Rr2@)zY-}(YQ%|C&HvIQ=6f5 z>ujn+%mh8h5UKeVwNoeMViKGT?wiQ#_G8 zDD}_XelQz$oyaCqQ{9gBN6BosO3y{5&k%)s-1Dx=b71H}FO%mIrjP3MCOfOThL$NT zB2i~0^+tiBkuG@u*FN3fPv^>F1!x}T-gQ%UD*69_#7Cpw7YW7)RMM>=bKy$X#CLOp z9C6PNu0KQ1qJ{!fA6KMHrQ&p7JSmkor>w*O*T+g(SHo6b&PEq~HxYEpv`cLcUDB=* zRy9HpX192Yl=o+j{mdl18BGScK(E8Ds@#IAz^dWBqAkqh5jtYz?o3@25rv&C&SBG+ zRn5;3UHvbI^+0f-E|dxQyw`0M^m_pUN1ik?nD;nW6`ZUBTgEP0`yFe%4+Bmnz!@OF zGGzcXXT4CrnW?c|P6-j({8gDNxJ^egR>r5|PRAL;UKJ{@ZlnJ>!H%<>Dd;rE8& z4pqH}&>7Xa4o4yoi&96~G)NJm3%XfZyw;0w+i-5Gi_W);7sImdh%%CiQ{gdvtM~=< zLa!otM&IiH6zkEGqr0oA8~hxyfLnDWND_gm~7-e zef3c=F^&wbvu*}!M79Grxg2s-Tbx~>yZ9ema*s7H*nSwsC;Ln9)q#l3I!SqHUq@u*P_0-eZ@bFR|PS| zrT(uDl9WrvG&54m`~Lf8WRM^`P$%Vl%n6_71|BEv=PulFk4FzF|% zD)MMWuRvwNI3=fIDL*65D?NUgX)iW)KU0JPKO3luBuQtEq_7CsxK(=jNw&K=lRLg1BV)-a6l_+NP1 z(m_+`xQ@3VQ>7QVK`85di}mvVog2=nn)>jP(0}OStN6Sb>~pP1pV+@1AznHIye+SJ zG&HTJFxyV`Fs)8N7e>Pgr)m+odHFKC4Xn^CP{;i;auy;=R5JhO&I?cqS15g~sn7t$ z%_U22GHk}0BqU~d*ZlhwzOJnmy3#cSK>wGxK$B13M{EkoekEmAG z&bT+2~dg!)>e2HWui{%Z+^6l?1&>1mTsB3dGQhG;Bom~ve{0Cv3D<9}eS;X95{c-I-B{w=nuQm@cl(#bti5R(w-R9|Z*?ke#A;J; zSt>8qMUN8A^q+Vr273^Z8pSS2Xv2)s9*pW+XS&@p)a|nW5c@a@sQS>}B+jsCMB7ad zKf?Org`N!smG)svep6V)%dtHOt~g$Fh7-fn?@pe~^eEr5^#b1?p9Fe7(=@y49+~zt zE1&4+LMbr5)aQ~h-{hpXoj*#9 zJ}dVsZ8O+FtMzA;#C@S~Xh~h zDf?W6^XM4<8Kog1iLNWz@Fs3u9x0C#pw8yOgr)y}#udDE^HRjS_M`U)-{~Q&J8(9R&rJek1-qiK?}O=!(EjH?WL{}8gD+~ zOf_qby$}ihqzuaAQ3YZ~Q%#q)oSM2K);e}ND@fBEnx_q#^V!A^ z5fdiwt}uskotB@ucIcrD4x@NT&Cz}IG09#Hm*)6`TZYNSL@!@a{avI0WuBuQ2eyDV z(PNUS1Q|4xNC4sXEgVpajS6s=G+mF?Bmj<_EGEl<2y*9CDsgUTl}M_gmGM z1#D;moB3SjJl~}Q%4@7lbp>Vqv8xP@JIovPmj6fBF0=kftct3WKb>^nudH3CPb~Dj z7dTZa(74Mls25XF2vG3Gv@ogo5cc$k4z9rwZzgvt$AU$z+i|DhEXHSO^O%=Qo5%bw z=KjqG!u>f*zf_2FCx)7%)%^N7F$vP^sFVk}iE}8y_W=+4-5$QQ4pdeOS$!1C@X%u7+d_I4(-6>R#I}}WSL1KuFA%h%eOVEv@+L>wFbM7Z z^Y`tpXzP8AQL_7uGA;kR{kvZ}K2m0td|zg})##mr6Fy-nY|!P8-o(oO3H5Fi>T;e()51^Es#s;@nA&ah0^FD zX{4OD=GmYc9g%d57IoL?NY@Vr4X~jhpPA%IL}f;W%?)!Js}%>^51~bh)F|C?Mv!(? zcnli5F1Zo*O@P|Gr_Qc)0iFl2~_7|LI9- zZ-$K~q~d+Oa@z*;4lbv&UAO0eO9O^tiMpy*El}z2;PY~ed7&;j_Mo>{q_-xjLZvmN6DD5MXp0B^v-g?G`7ri9 z4&4&2v1^zH8=P&BYF$P{_7R%N0=O?ZIAk}%AL$_*+^XrdH#*Y_5uO- z)2ft)(CEl8$VIu;5O6hMDQik}cavMk(EGLcpfNi0RgEkno>=>_NlN~At+()MSIc6G zd@K~s6OC6_lJ<2;l%*zhOcy7-WWjdCIVniChZE%$czW5p&F{||d$hU6YIiKo#fkOa~}WmHO1U632k?S6sa`(G*v zHR$EOPSGrUA+YSv+AKg#I$S9F2YPAziSXr_%;pfeG_4oSP&^rVNG+juv$PO-4JLqN zjT+PE*l=z4WD7n;unM5sv2gw3|L0=cJz7=*+x>1C8Ry|TPBl?IJ_?aHYy55 zZ}*P>F`2%O(4(n-|CmcbF8!~8oQAWrrzA&@KBpD`O8?~hb2Uslwm5^`O0jX6`GeK5 zwAVggHxTiPKzvU&jr6>>;vBiWRE+z+DI$V{8OKNqN}9HM!H5P_1kLyE0_BxhIA>N! zx3HcP%bhcw@e-9YvhomfgZ|!7uua8Z^K__RO5@-=`Pll5HpzqGuiHZw5;IQZwkz%Q zm^U=dQuDVH6PC(d3A||M7ONzq zBvKbg{ypH-es`9}jMo0Wtr$iLvnkWlO{m*dpvKc*XVcLjF_@wxCnK$ci?HS7c4F${ z`_$F{Jb&;iQJC+xm_M^v(G3Q8LLO}ynIby=;kfUShX_adH!$*8bz?}Y9XXMeUp%HT=gvmNFj zf2;`aF4ZITV5(0txgt+SuFMlq^HYE1#R|S_Olg{@G~Iw6=>E-aSQRe-?w~ zKJ)dbq&47D#N&4rl{^n&AO9P3rs(P`MDL%tD(r8Q!Jdh9p9II!FG=YC4!>1$A?QeK z6Y>Y_g)NvZt~Vu^a?E0I8C+Y1nGx&G9r}$B3J^-H12TX$JW+CZTcgHCoU-n+=Tb=ttvNYpR>{@s{)1 zgOQ|2QNWyxHMTN0OGDnBg@nz7i01g{fd?#&Y~l#vmdFOlFGvg<*}o>$j_q@oX`I94 zQzj`f4o`4U?;G1N(8YEh$RD8$DI%28oJ1t74Y_P&o0w&9P?@hB1v$EIBwMY1 z%}n@3!Hb@!V}v}N<=P$D|G;kG(@~?UsU81;ua#{4P5J$uf$Tm4sVC!D_lXg_inv0m z{ij*I*#)HtO9dPFYwl`0B-d+)JTkbBhnG=xf6%NgSS5Qjn7jES3Xt{t>snfg43)e5k+=h zaBIheYbkzk!DZfOm%pN)u`>?XlpneikI@cENQg$hxuou0%q3knx$*cR?$wz2e|`$- z2}D`5)=k$V`f`lU|0d3f_|qghX_ler@2ZzFABwQ>y^sPMG?MaSq?TGB+muYK?N{T|)#mOl{CSch@t*0vYj?X6>7_ zyj?ilt}t+H0JPRIp4Um}K(n?A+3^TQa%=rcjeDy~_^F);rrBk*OaI=cDRi|r2!>To zpE=~eD!uom7oqRa&Bm&P*vSxst;)wNg)b=e+E{2old;Xd)*tQsdfke;U zIN2q5h!IkSfa1Rmvqc03xxSBUi@R-f%;SamrBov5Aiq+?+c1x3a~q7XakLn)9V&wL z6Xp>~ZGyc+7W`i_wFPc#8W~QyeqPZI%@g$`wdHJY)-&|kcm_$!)A|h|5psti zn_Tpoj}vwO_l0L-O0$(R=KRu8;NJSrqJlAfw#SsO;3;9|#nTnxb{l)ejBf^RZnfhD zUn||ZWI}3l33KZms}a!&cg3*irt_B8pWyDyRlh?h87k%U2MzJ#hu4@$vPFVCfJUZs zsN*R8p^D`fOLlQ-54?^%sC|oNdTshnb|5B@X!gVluuPWIS=S|aY=*?}UhM<;4`GpQ zc#VG4M-hL-zxBur==JbL{RK73_XS52oOHft5PcS2FyKaPsk4tU5fuFjWV@AOWO9e7 zSj}pdjbJ7Mxw7M9lHVBZy z^M9g{6Jqz3QhEmZW(ZIXho4BAJMAkn2yFQ7K2Xnj^m|jDN=is=D`d2$3tO?^{{K3} zk@uYU5M2o_>n^|P3l`Wtl{EEBE*7tlx^|OXLPQ1UEy%8l+W&(F@9l4HVwlMyWIVJj0VrIo+ z9>^$}C>)(cq*l?VNkf1@G3A7_y8i8d%qU|qAe$Cd^+tDPFn(1+)9QqC@$^y6Xs09m zNHP2>_sx~=)G~QkfI)0N5?teUdlQSZ=t6-trW3-w{Y!`jWW9X!l(1a)wbqbC*hO%~ zh~B4CczRRE9P0b)gp1?LHnf{A4EnK{UccBJTq_wX9PL4LSMB=0fgt_$5Ye_kmQ|X? z1{1zz{fdOgjkRWBOZ|_ZFn>R6&$)lK?Siumy2pTl^RnwMDjFn@m%b1AO`Te?FPxsb9pI9 zR^4zcJ5$DFiO-rjwQA+{Z=G7B7d&M`r`pV&Y>LPCWV()rXW{Oc8n?O(|EM|V2dE0_ zYi;xO0rT%-lgip9aVOc$6Wc`=$)4IQpuMCW$%#44PAcflDs2a*5zGX$uqVMGr89w5^Dn3ggD52B~JT^4OA|rD5 zy9&XRRMzY0KMcF{HB^f(46hQwVP6Vh6!8-89rktB(y3SIONf(ObJ!~4-d6Zo)W7(p z-d54m_jbX@g~Xa+?LZDGU)&<|1e=KTb`Onxa-%?AvkkGiwC{7`Ch;bD7sFQ@ zDun~DuT_ON79fj}2KruJ-LrQy`~ZeI8l5_J^Y02W_OiZ0_K<|Gs37~7(hI2#dco$Rr>z2m0cL3Na+JUHb*<4azjYP}*hJd60^7hNjE>v8&?p_! zJr!UD_yume#ICMN#rnPJ=lL)Trk|OTp)We3SCWr}E0tt#y?~GDRizQWsN}%N+(3hW zhA)d7e<$e;Bc>6yp^tu3sV(KmTn!y=KX4_Uv37w;(D==GD7EnFh+i7SA>J_Ffpf~W ziHQ5x3%(g4qu+vmyNSNB)i@ciz(c!8;|_9tyV~bYIdQ2?-F#xh zx$zi-Z289DSLyN;?YyWVjpUgvjIWdox7LiwC=~hvoy7%7rQr2HuuffC$=UBs$3OXE zPy0P5evB5ZUq)y$LyqZQvKF1&8(;D)WOOQc5nW(Uqa6~J1Vr)>y=wf=%h~#$Zow+E zy5a3;*^M$Z31$+hGSI8zS;n^B#@G!NM(4k(Z2%ap6z9Vd2@M;-Qu5qtjE|0Xo2 znz^vZd2odQ=ThaHZ=5UJLz!)~2Njh-#oyCd25v#QCw_*ZQK&`wVyzJt$|4EV=I)zrM9VHu(?Y zVUZukyLMC?or*$J$Azgo0$+d;>l(yt5h3j+LsCDXcb+@gh>j!@=0!weD1egSCC?B> z($tLp1bz$Hno9D?EA;M_P6ppjnbN-?4Z7^nr;<(HR{u0*)2DRb!7vP0dIvTUdNlPn zlCsDvUaVv7XyJP?v}6Csa%+;weeX1!v-b)2{8p~+V%T@V5f_6gT2kBEhR=U^1NuIP z*Ku}HG>-vL1`}i708^U-gvHHtv@Jw!o^VE8A@IPMO69oHVM=`m#{fDWlP%)^ny+>c zatrii9Mb71(~jkWH+LvTcxZrvRk2S-kWZ*|u(+~Ct z@c5Dcy%;YjXp=)R?1dJ-&S7;=CLng3t#+QLf74Lk%~FJxPdU*91iV{k^+DoNd*6I@!| zxV|^p{YRC6NtAuPufJJ@ba?gcMWkS^U zlt+anWrzOUD_+mj*P(PLPlR*(o@D0Ja+UWJcCSN6oUIbd*y8feodWZdX`$P7bxkUDJOYC(T zarW#~yjGxTu0{gU|MNf40i@GhBn!nFZa-x+%ZuC9Dy{=-!$6=*U;GL>mSN5`ErWhY za&5+*2#HUkf+ax)J+@r9B^EK$FPw#Ng?hP4kk?z$2lyLxp+sOak9ATHHv_rhj7Xj?`%n zb+peiyg=IEVufcu4_Y%Si{p&vo*2||-5;0ByBwVM5xQ#37ajtkmp_XP$e-L-YWwuo z9>MHhjl^Jwl%>~?dvCh1-MA6eE{5ryoHhlilTZ#PFXPJ&hIfMw$(Vws;*~CFD~RL0 zQC|;*xiP!F7L!zSXCkk|JZ6z6VH(nFl9f#2nY?>nmHb?H#y6oH8}s@rk}KGm6fNPi zhxQnx5@MQWH)F3hh%ngNBO%IJ%AGx2Lvbn7E?6GOTKodVmIf)tCm0(d($|A+6ft%T zUC>orDe}gQzk;ETFZ_u zV-@ljuhmAd5GK#4`x>oR!t8vtJxpP*d?s@k!w7+T3sgG zhiDCC`N|@O;4~t%SkbeHl)up)JX}Gp6-ukiWXfR+uQiEwJwj%&c%(p68p7zxP&}Ep zlX%qdQAlOAgOhYKxjBG(jT}>c73)}(6_ZlU)y?MLFmP{Y+2+XvCx4StNmvy&iI-#} zULy6|G{!ynC7q?=(q4lriEz?cuMz+3kd^wksK{10FNj4{<17~vIdYwX^a0EVQ12N{ z>}9m0^>|Qa^^_7`kM;==;{jBv-v9n4B2j>>(njTt+*ns+B2!t+w8Wb^$z(oiG*qdW ztN@p_h##!zD~Y1e9i0+=T(|wD0ieac-xG^$IBZFi<#Bl?yah__^;hTR{oglkNEe;e zxrOP8rz>i;_W9ANVB8VFGv&}dKqt(bL-z**c}PzmK5&$r?nUGS@@Vy-Izqd%Q>|1M zFqW8ru^FI6KtDN2@xk8U@0fCXVDm`$*Nou}b8)Fds~7th+dXCU9D>6*Exm)3-pt0# zKFH)}Qe}E<#+aCucOXm4`gU|wfAA!g)y3!*iZ^D3UpWGd89%VK_|R5`Ac;8$F11W@ zMJ>DsN;v?-uAS=taDu z*(*$VE6BoW=;Bx5qN7+hQ+-!|f}p)B247YhrbmzUW{WG$e8GX0r087!D%O$Lwt^v<{mk1GT--cd!w`oB9MN#!$yJelkHaGhYryetk=)G>!vVf_s@`x4);C({Zm47X-zz0kByyK zb=E39av_-FUQasf(XOt3+*-8ttF>q$!-8`l^Jha|U?N3jJryCtcMGymNk_%o5O3Ix zEEV5pK9juHN|D2^PNqujkf>1OZ7@ZPtIzi>!>%fC!yG};JYoygw!|~ORWBQ3W`73kIjt|YvL63wpgRYUoAaF z9f-m0z&FCVf&~h0Cb#W5%EP59N#Xyfr&e9gH7m zw|^W#hmeN&1{3DXa$Jaoa4uUS+BNj7RC4x$;}!Tv(jPL_V4xMwVBs~07c3O1+)JVp zS~0D^KIshV&%mP|qK?;N_TU~7WEMfzPg6+YhvAF_0<`_@uGJ!Nw{*`nCN*A*TYGKN zkINr0*vBAzQ@`J>8jd9(wRFTy$ZL{}T&9%9Ds{UNu{w`Ul42ixuTvi92bVS#L@yXk zH1N#k$9oI=bqGi7gCiDl6e2iW<>;m>wAU{nOlRZ?HT-$w8mpKA3fZT#jgmIq4Zm7@ z*6iF|*80cA)ACFe2js~ZcX=pFX%!OW5|-!5yid0ZAphSvR3aCC5g9#z>BNv6#LtcZ z2Bffq7KC0LI6$E@XFq`N(W6Xpw}-j1#Z#W-qBZj`7vw^Xl!?E60~-=3rvz&L$D>;rU=V)umo-VoZ$fQ)D!E6x zeP_OY(5J<@=0tvpIq^h4ZU24p=Llu-L6=YG8xR?e=$Y$oyeAxDE>2hSipFzjaBq&>jjf9@>?qg^b&cfL0vLA5tLdtw{ z)N-_KH=ez!qu_ux5IUmKtR-4rlZCMiX;|o~1NiQ0WIQO1UrLc5SI3 zU1OWKebi!5Un#q24BEsYRV_sRfVYNV7yY1ykCw!$pglo2(~9uK!?sq>bDWRO zX4zT;J+=X+R~KWKghJK}=r~V=AWElEck)^epM0LgR4Zq-HT(akwWuVT1?_Ds)OREI zHZKMmVpB5_?A=Iqlgs^D#9;((2$+72Xcj$a`dX5KN33rZ%4S*}Q`i|3r)C?pMM&?r>#!=`i1sNY{dG8@DU}z4Y!uHl|9>0B z=671b>}rFgdKwEg11@f8fJR0vZ{sd@l`5Bb%AwtmjpO3!9JG%9(32h-^$861tRJ4* z5{KPi34OqLd*yT?osXO}2V;wgap4OWz9HMhXbTBD=QM-18H$}60qZs?7z#yt43zNf8I@AsvTn}t+ZbreQeR?i|o$4mGt+w6ft%9;s1}ME02q5{r@Tosccu2 z3`%iH+*C+SltL1^*OnZFkj%v;ROdt~TMeR+j4Wl#*lLhEk~T>j4Wd)pn`&BSn(dtP z{66#j{Ucs#rZeX}&-3}bw@>%(wDEDgyeG8lmr`EIk!H?4&swVYRDYn9AAP9?jgpPL zc8;9D87*LsPrOI;)zX`ObWe&_hN?2zKf~TGzS{;ZkV28QM?*E6R$%0Us;L#n{fQ|K${e2`P12^k29p&@beGbyxFh*B z=%(W+btvP|Ef}?lq=cD1d!AwvQI6L@yT6>18FaJ@!%#sZ2`FF%nR z!Y#n=R&+FSG!E;mE)mWieKtS|he=EdM0x2HxCtL&wX8Zg*;l}9BI93X3dV0Gvw}4e zkA{x)Nzs^CeivhBruy}*@7$PU_eL2?v2l2+<7*TgI7H8mnG$8k{HSuHZ*oRXqvlYw zdmAp{?6AsWx1|~S4}PvhdRy3XtGn#E_7|1B$!X`8jQl)wMtZwitFJMwBpn|O0C}4u zYqe9Y-+8b%P$E@15JqPkK>5I(a)PeG>d$@P@s6haO2?A%-@k~_{r#A-%e9wP7I?4R z)mlbny$PaZ?M{DPKFDL&<((sqNTneuZ&lhcN2c`brQYY#nH%O#`9}%WXFJE^%TIOY zGH|-Rb!9TpJA;EoqJj^n$w||u=lBl&DfH4~?~(dNpPw3_HdwE;8MaYy*}7Me+uD*R z_{r_KnX*~&x?_y<8FW5OC9YE^&+#RVOd3Qh0PXG(rOx}iScfzoG7l9COJolP-N@__ zmDp*YQN4B(BTAJQQvXVLV_a3q?L{Oq#BE2kn6k&;I6?{F34IzP31L#mw8viTkyz9z zJOc*eFsYb{~~gvEI%ka}9*EBdb)0$nE+g)Ccdqb12D zAfGw*7v^F!c0<0-+=ThUc%cc;XVQ;$3zT<{^nUF&l8(_hKNu%^X`@7`~I_f#mo+UM4ri2W)uZxa#u!wFmK`k zBVbWhHNXRdU=nGh2R{C}KhMa-5M?uJdg{u0-fzOAaLdUV4STM2qsVBrXy<1YiN~UP z(~qybK;G)4w!kAkPU+uzWfVBgzgZg$IoKnOkcj8k#eN1~Vca1#5}n3aD>dkkg6Z-5 z_&7U*>1(Y-MCv@ofsMobZ#4DV$kEcl4~c&{*IdKjduNc2sC0r+T0lQ1GH`oT~5-?WRl%;A^j|0$fS5aFvvHZS02#daruhjkQ1wTM;TxZcg3&u!#9`2*E& zCw6ZBU~bDHkl_PDAo|XfNv36L4!^Z>iO`7V9Jn?QnqEc5mU9^Yd5MAF#|x|s(tB#Z z5MR?zP?OuQ@y-Mw!LSl($NUXNtUC4hFZFCDRpS0Qx#Uhz%6Zwy|75&H_fKdKg>~P7 z`K85sSj$;gnd5@Dg@4L?rSwAXy70c>Y91UHz8mYH148oe6#zj%un@2o{)B0cJlNg< zeU?p_+po3n0W&M9;#0{x6!1*m%g-Py<0CX+ilSQ5L)kw!nb39(Gmrt0r>tZYw7Gw@ zu$0CGnnQvyuh@5CHT?}J=Q85)aj@8Ad=se@TW{iVAO?EB1I!iQxjLeWBv^HN%h}*X zq4TuC5xv70I%gwydwtX5IOzNMQsAnnXGG(mw}$o>DqiqoKT~&&AlVC zA7bX-jbmzbo<+-jm{0AsCGay8a>DUGgD<{&wwBnGs-5Znw|D`UAl2#0R^OUwD0~fC z%c>r;hm@^rn9!bb-%REeyI$F9_ZZo;D#H%!GnYtKqoaeE6Bp3|u1=ZGw){m=u7uGP zxeMQw7**XGs`5E9Kty8z(ToOZ_4MUO)mj1PNtozjOb-o z+1hyW0_K_iS4E}tZ#37S<`<>b$20`J^|}p6k{3tLpu~6lq=QS6x4-!mPMN z-qH2=lmnVqtkXm*_QD#-X<>E#du9GklNsXbewT0WI5j4WbX;IhmRlxw^!;2uOK6tj zwMNNZMxoKmX2}NcxSkdlsK7K0WZsuS)^e^o`NG%Yksq1wD_>B}qmn`7Qm2Jij(l}y zm*ukVlW)Hq|0hSiaD$*vsE3jvdLSzmS76Lxlu zzmYqgS&_z0n@l+}OcbVfKGg80yOp^#CWjUB2u@29tnwtgbB)vsl z%6r5moS6r?gGyS3y&74L zf5GK|5`7%W@++T$fPbJoK|q#iuh@pXM>sAMBgRQ-feVNN$8l$VsC|ZI!dVGI#iw%T z)k5xoAugph+2UGeTO>1y3E=)Sl9~NL(E!?>&rcYhc`#dhjKgl?=5LYl;#dCFZm{&~ z-;?fmaS7h^5^m$T5cZRKZFCd^jWuD6FZHYsRXu~31cmerzff@I%!-=)U8*Teq5_A`O1p!4X-)Yun19DuR zz&o-bN1jZNBTI~U%fo-?^d+<7$aW*)^eNMYy^?>(KZa)3(vBlo}TT~VU#xvA4*3K;j*$O=L;3y)yL&P{-bVM0@j&=LSSPmq;8wKG+S|!;! zH|NFF1D$zk`)zM|q*Q|q20I5@&NGDfVo+vkdcUy;j$`YK-la~Aiil-VQ6(w?pN=uR zY*#Tk)}8s)WE1N3-E-s4>T=gpKGB}le2@;FrBq^!Ptu9Hsso&29^}?kkwd!P%u)L3 z=aDl8OBK`w0u&#~u)P`YURlEPNOi5dJ5Nj*zY}NzPz+{@FyueUdU%u5K;%A1uwzAU z^ptTby^UW6?drJ<2mG|DriJ_LK6I{I21-e##Ig?ZEaJ|AS#S*rSlU2!=(Ejv@iumw zi?=Tz^j&6^-7VuTBbg%`5}2Zj+DZID0`y?~H{P_FpN7U+$)CGZOxC4FW!M9f((SF_ zWoyjamMBG52gkoA50@y!FD>Hk-Kn$}=2yBiftC5t!6eYY-_N^fV8MmwLDnSJFm`ga!)mc#eUk|=LN)g^D0_OuQeRiX^-E9=Vv z2V=|Pe1-aO{hw#V(+5oF8s8rKe6;mS)nPnouI;h8KdGM!R}b)7J5I$vdfezYRFQq? zMqf6Kk%&&JPx8h6m?jaU*AxZVS(M-*6+bq=CSu7sB3t3V_Yu_WMo{kMzr1|EN6f$r zw&z&rDc1k_b3gaxYSw$PirOnNxyupIS%0;JRBP;3U;Qh7PVR8m{>>XNjh*$9Nz?LZ z)nxQFrIuGR!s&(nXzbx_b?S3dFR-@ynBq~KJ9IzKa?*U2R@KsD?si}4%NiX$=)@`UeL2Ts#ms)wOxoyZ znM!=*SX&V+P7ta~<-uEDH#^)n7Rbx&%>Eub=Rv3V%gIFk2B)Vl!@c{i62C#N%SR#|-^bmiW|AA;GrZFKla7i^Zmg)-cIWCM>5{@8X%QT0CQDx05ltCtBcNk0meNu znT$>AbArX0EU;d|e5)ai13mX42@RSqv)WA9+BrZ^mSRa0(=ml8gbm!{^H-KnR<0#*iqxc(9R7 zm;Bc>gi$Zd^hbYXvg3r@yma;%6ab*|8M4m_&lXauG|ns@#DM{hPZ}mgR+2)1d7k`He>#DH>d-dwK?y2!$NR~dUJv^ zUnw8wk&HnuZy4ZZO#-z89zq*mQyKof3y08xJ`FHdrIPpX=L`1KJY^-Hu_lcXQ{oCK zB|`+^9)j>c!uyf|x|j*VYfGWr2K5szzQoeinjUBGTaQnj^;#15 zcs~t|g6+-iH;YW8^S|`Z-ME)X7O*ZT=;lLm39Bsce9NrroD=wdQk4L-ME&MwA$<_K z1wHZZ>vUp=9}^=dc4wZMT}IyoXcn?5zWAc7=U01!&%FhgU-V{h^@~w^2WPTX$(X2} zAame2u9lgO2g0(Q@)|D_si&dH@ZllbbKX#AW^q0(`w%Q48fM9OmJ3&I20h~XI9oi- z{yug7jn1&?AC)=R;>miaal3E$4G(z3nr0p2ll@_uJ8VeAWg?jix(DZQ!z~H367UJWr9-eui!=@v zE66ME?V&2$B~u#@OZw&Hfq1ORxs@r%mC^pvQgZK8lHBV~5MR?+nYUep^YKX|2Sl2j z!z|t@LOH(%uf5#?Rc3cYlW(~ouKi5-paYY$eHTAI-7QsxR<};gF#*{6&$=ni?>tG; zsOl%Vy z*C{gt?daoosK2kNeW!c;L;v_|#zWuEqj)(sVp7BXp31X01AWTYoVe|^*sV#20Yolr zFQp`6@mPv?bN32G5pH0){+Zodd76Q%VC_u735!qzY$EOMu|aM1KCK}=e&<4g^O1JE zVM9UqsHZ!Xdj{i47TMSaB|H@IYuevlNQ|ELo+6!Ut)APGEj&;Ap5V92!>(JE-@)$SigonIhUXM-31* zvJb{izAfZ+I=px~Cm8Z{XA~-3h8pzk(F(mbXA35eabhiC(X@)+Z=d(#BaVcsSDB;Z{c+jI4ap%*Xr(bvOy8tgpV14Arg) z5u#}ibo<6w!^h zxjabb0 zaepmaNE$tVw&6FFlwAPFUHpu9We{FCZCEt}k}b!1Nfm77hT$cCQ>Mk6hJvmNGSogO zw=027hfSvh8)G%m0;z#Q7MsS|o?cJg%O#+AS?*aP_*iqdg z#zcTq!V|H=$u-l&+ax9$hfz9}*ZK4t$Zf>PD0-kap0I@E5RD6(wYRo(=lfzBxHsw4 z-K0sUfe+gz_FS@LWJ4OcbM#c1IjB~kgh{p``SatdN^&&hI>2HW0KMZ!SKY1KbFWD> z%89j0y^;XewRDqZDkfqbFGxlIG;xnD1FbH{*tBPM!KUnSK~D!|L^0;G!nfWSwW<2} z{KRx)++gZE$VsC0O^^!pBbFo&)6Qr1Ys%V?!54+79o-t%ehurd#=P|hyxo5A7#A|} zt{YLp1p(Bv3q2}rJs3qRCB2QJ*6}L;TQl1q6X)=o{bobw6SYSh%)*%g5JqGCZ(j<0 zhgBwR-dP+oOnI#njzp2%Wb(xKre#u(tac|l0JqGFhV|t;rA>I|luP3n`u!GTfVcy2 z_Yw|!^1%U&tFiz)IuT>WEMblH6Fx=thg6n9VRzx0((8UTr4%O~)_0h&^%p0q;GG@y z-mHe}C1idqDkR4T(nb>E6L2Nl3>4K_Z+?;+b7=nYN)rVvgLF3~#BL)+y10HOIV@&H9u-Wql z!lRVm8Wc*m*55&{PZO)Ez%0Y5RiSTvcNtXE|w{ z#)_Z$@kKcg(!;?4G`@?rrKUQo!NiVL9UX3FvQrQ5B|RZi1CI0F;QbfRdS|V=^;n=Q z6DkZr!UxeCe(FqM+4)!?s6!6K&g;ksy44|kAz$zVPi9pnmoUQPyO4;+8O3x1d2(JX z@Rith2#nTrRe3fQH=w7 zMLB-}!3D2wX|C#UeC3pR!V6!vE!S(2Zf!=d1a0wdV{5xX`rC2czd>r;i788@G6+bi zt{1@@QoW(Xw&)}NzCC5sY2K539)6ZoJ<=#^h!|#V?Kd!717R3*GRwC5lunNEyKqze6^i2K7yi+BR6&FbAUsel2 z7g$ja6*Tr}Dh^)id~KduP{U8P@1Aj5@s$cAe!G zLK`Nx{rGAg?^f%KH%R`7djbalF`{>5v1b2~ZPmz;javI2bY1a_J_$N;`v)hmJ|Xq9 z$?nzb671-q1hOs7`j?3#{up~cX31(IqR8s)5fEsrNsXN~)gV@dph&E*oOvwMh}nH^ z0S7&MgLFEvo%f@cZ!PbODN&2|@9*Qm>rt;C42yMi8l-Z<9hdcavt1Nqv7*X2{mD;@QdzWmsvAXM^&O#c#cqpFqvE1x!}{@5ls?I z2KgE9aX#p)JS-tu2f6!jkNNAAneyZg(+dV9!-J;@mvfeQG2@xOp!_1nLKfD#bZwna zZs7f`9$V~Jf7m@sf!l=l*H$g5wo}FS6!6|P3|~l_-?Nzi8+fjqP7NtPNY_>hi7WKk zDGwzhNL7;Co-qr_o4FfuZarBXyQ;OVLzJUPcE8m-toawg;n+n_6I4h$o!N1_<%-*1 zdFlJV@pf@lWldvZs8pF!%*wftY}TDW>-0FL>mhf!wb2N=wiCZcMs&4nyia`Ob@))& z$E)GNQt{LT@H=k;%zAn1;F@(r6xLWGoZ`#;qE1X4+{d}ZZR6?uB%8(QZAip~Kqys< zC7;NX}$RAbIV}nl7cBlZ$S38q7y*rm5=}cm6cFV%hVr3o)<-W_YkHo|Y zw_`SEHW`r60emgudfw>Co;rw@6Ou47DdVQC19|2shB0UKH(2?2`Vvtcp%6bCBF_#y ztTL_Q`g0nkl=B00YK-Jv-diXf#$`x&sbB4GllVS~X$1)qK!}3dwj(9&?Z11?=m%fi z76K0&fnU+YR*o5Qv)WGNaiV5(!-q{)P~P#YW=PwTGN>~e7{Za`ghy1*{9b;mODN9} zJVb^S9md6mG;W^OB!ZbDney7aV5K&o*V?E@5-x%H8xT!OmkNW(_luxFC=?NK6;j&h z=0kuLnC-(a;wjv2(MhrB)Zj@P7qHiC&tFz{<2!2F+|wCz(*_a*^N6};F4u|Z z?hzQYln1c=@v45b{Vs0M-&!a9Ua&^lbbjIHg5AC5RVZ(VfR2agE5CW;M!W`oAc^V_ zKfy7!+37JRi|H)u68bFo%54-wfJfcbvo@DcW)Rr%X7Ll7tDK?V>{N3*OgEac&Ekip z={;Y2H8n2pUvH_Th4E6vMo29<*jlhqJ}Q03^|!-Q{4rp#Z=cC5#I637;wdA+#__Jvyb0Uvp7g$-F+{fv=+S2{f= z68xMms(bD7YCl=pSg2P{)WP%PZoiTTUo*)Vq+4gvqgSmPFwz>>?HqXmslRsY`)R|I zJdtGamHRi9nH%;DkuovlkyB012M>@p=^tTVSL;bp`w9{=wFA9u3Cq2zT86z`^dxEC zR7ZDpyY!u)CdHTVXJya(+ohNKinwjzH()Gruzyl9YvHgO~915?p zi)AHti#1sGo4eL8jSuvQE0ZoK6?9r%&O!n4CMaO9475TbLQst*;i?cAg=Ega#@mcO zESEJuqFTrH(GwWL2XQA?G7g>Jw2q|tr!43(aTbq}^_=&CyP~OpO^nX@f;^jn9BN>l z6comFb{dCIVPt+royJ0zLyB_^hEu-_sA*rF&{j>_CG|MFL*B(m* z#?Tx>N3%X{*lqBl#x3;pBsT6|HnsR|If##>+XrZQ7HCk;?QDj)6`X4s41KN$a`ZNB zaC19LhxXtoq)e)vCWK}`P&GP%ZaTzzXOBV{$kuFe$Gtd7@NOf6T z29KG$!?LGT=;J+sgiu|d9_@&o-aw5w{hm4NzvI5uQCrCw>T*FVF|r_X95C#lym77h zkoT5Z0-_8Bky9B2F;G0ul)a6Q!>Hpf`*r|S3mz`L-+3|{5)T< zf;P|)xU1~DYX_CUW;gy|#CSb}SR^xJr2&>!G9}|IQwsLqF3Q1pF9SVG!G9J&c~CjuI;1D#toptT;=@%+*La%B<;KG?&AKXdbB0hLzQ$_K(S z3;&a>P>?CO@5~7>_30895XxG$A^~gDP+Q2NhdW*1+d4%VcFm@0Hnc)IW|QlEG?|^R z3XyPE;Hgr=iHdhmi8AplvtZT3`|p~JGLd)X2@`W|WNlP^@5(+hxO?Dr;Y)NwA)pgTiz z)xb|2$}+BRd3uSKv(ek7Sl}E|7V2g{{sS}xsYkC(S>c{|qFd}Nkcg>Ea?N^J1--$W zPnKUx&cbcB$5Ak?CDSAPNm~Y`uH$W%67e5id)y$$*@I-W$o&OqXXN0*1X96U-3k{e z=V`L(@r=LA4oi*ASdt0&nEw0%998#QMmaNOAp5vDBco(d8Z~`FSWmg%g;f*ft$zy| zX8um07!e&ZiG3n#Kmhhuky7olN%2Bz;fb$LTTbV)za;6=g%C#@)*~$kX~;T)a3|3b zwey!Eo{)5ZP8cvu`u#HLeNs>@B@@^!@aGFi4Q*Fow@7qArjhmqs*40CxTBdy;d>65 z%Jz!t`P4F`H0UYfJtiPErqQXAJ2?iPtd9f`Jk6Zwi|vDmeyD|%A)@Kc7Z%acw}E36 zxiDqB-;qxgh}7pUpXi%|NL6MN@+B-(NZKQLgOIZfMWG8U+}f0mtM&ggqQntlH+^o~ zmwf`E5aa6a+ji)mJSC(X=7h%h)84Be`J?&F$Ns_T9im?gQ-$bYc(1tw>CjusQziR7 zZ%=abffiN8`-f?fmGD+QctS-Z(4_Wbtwl%QXupV(V5F1~bGaul5Jp&ekrF;L&`5zQ zvo`r(#=@~dos1TewxI`lNM_*(_1IgP=X@??w%gHKC)=tzl-(AwUtSy1(Jjtb5XJ^& z;OezkL++&!8%0S?JJL~JYh8Nzr*yJTl;c~}Qcaa0nP{${TP0x4`Y4dn(MSA|frm;2 zHb3Y1TSO^!OZ9b!EB^ofU-lkVC76+76+YmNTYUP!>$PLn)hR%|&$RCQm3l^9+S_2K z%6zR;_FY&?(lKt4^KzyXVN5U;GZ7{vp+v6refQ<|>0c-|Yxxy+|6NhL-_axRuQO-hW9~pnVcq8R%Ze8~w4<|YS$cOD z_j{N|k;$WSe5i57HkjE^!fnL+f06Nf-mJe{!R5(!Kr@vMBKT}dwS;ns@Kif(>$H-F zoa8tCOenf8x+dNBbk2LSQE3XBOoR04@*AiADW2qQR&SD59Qp}c8OtyBfTeKJ*C1=l z_GEUSx?e=cUB||#W6wKgYPh@WWw3d9Ul^h+BO1H!v(;Fmp4ZYe&K^xI;)=b29ZookYM8K7)7m2qYnLW0c4%DNG)Hw z4Xqi|3E|rkcG$?ik;N~T>BsI?` zwCWsm)jhy(vaeX87YD|!q&`KPsLBaB!z2$llp+78_2|X75(rwheD%3WJ8)3nM=Ct9 zbK5=?Bj@al{SJ}sys0`=K6gk&2xCF&kETJ?=WSeSLyobvM#l+lCOky2lcmB_#&9y+ zQe(K$-H$tapcnMs|D9Aoh6SZPsc8qd|BckrhAPx2_-!gy8nF{U*76wRp-XYU6%+~} zV}{G5B$GWgrMw>3yS_I@A%ScLW6RAcqYjk(!{#(BfKT1^1oB5wU|$E}+khQy(v~fy zuRmwmV0P85exUZ~Q-l~cR^O{PWg1EY5v@Tzl~d%XhAF#UEfDM|E zb!`MODIrx&E!&0P@x^PYTYoN&hVOxiUK0jDjH;65@mAZuYel`p1zO+o_Tbl6C1k8p zCWep=b0(fFd&%?brJo}Df&tHM5OUQ4uBtMep*;I^9(sfJ z1^eN)cppkXSr2iCQdQvjdY%kEoCe;zW4X3w>-r?8$FqrbUS#fIcXEQyt@tLV`iu0{ z^G#B<$t8|CbDX=&b86$!{@_LE+>VLFQieCOg{a{9dORjx*sG0l4+Alq7c4~cX?>x~ zhEkx@;;5)PMyCy9w#*AOyXT4=8fGGIV&Y#`6;4p$4vDB@XL~%MF0`niZGMI!k?PRX z!lZETx{m1Fm=pUuQQZPY^CC0&Dt~eS79#o?kzr zgr|h-U@$=~8$+@}+Yida@F28tl^cfj*nxxlD?fv9d0HlPUp-^X$hGt)t7Sbl5X?T^ z2d~9ove3k5G%%na93MljzU&nV2)kWN&E+xH@gw7|)g0GGC-VdxopJ zO)ElSE}s-wf~L@XAvqqc-P&VbZ9{@92~@mh%q7e;*k7$PnZ1OK;Q-t4*>3sbR!Dsf zMytT0{vuQFHe|2ID>PDBExoW#N7Wm%bg;~DQ*mlM-<_pzs3m4mqw zOcVM_ll&D5vz3g5HFk6ufc!?^m!mGIYdC$uFXC^-K%xN4llk`B?9IRE_*Tf}G}yE> z0^PxOU{P1z!RRLk?&5?2Z{wp@v;_1rf8fkjoViC{V80*tA=t5r7b+Ar<~_|o2I2>y znJL&k^(yqiR}EfgdIzfI$-cL)=IYKw+W{MRB!KY`3gT9@sYgbiS(g*Lsh3DwH&wnxK6hLe%oC^XqK3@fHUTuX5!bMbBv8l@nNbW29hm=3eU0Km zKE_{qkyXo;LT;*Z8tICwEFMx5rL_Lotqkby)7X2_pM>Zf(J8LD5mmo54(`bL8nT@C zLQ@MKrSaSQC5&Tten)7`t|z!*A^_s1QT`7Jo$&m}84F{^H;9$@_T}q-Ru+WznC{wQ z?dY)i9QWAu3uZ$qFV80jAZH)OV^A>@z*)U8`ZT;?96jT81GxIPv@vA{$7VlUq>!vp zDD{6KM}PiOa!{ePU%s`t7{>S|p3rs**LP@~#-99#H2?22Pvc$D;txWE5&`*#H!Psq zb);RV-nw$7={Gr<_^(p$+Ll?P2bs96X7F|UvvXw4c;JErT>RLb!3r}IV=U++Q==7%g0 zknclvKy~XfBglqJ8+uKCAGmsr4FM-VDCJ-) zJQ{KvC244^j?!pK@Av^B>2S~5WX4}mw|LF!Bg>ws&Yfbo6=W7WYD9;VG6d%n$(f5M z_uqoiL+4I_WIl{vj+^&&D6eR%<->da(Qw{B?x9GX>MpJ_?%R3xjV{crFzRM@O##jL zZ%iu64V9Z)3FeW9r}oo<`v&l2j;4Sczl*fb*Ied;($we9$cKb!XK(h4k054JD|Wp> z-+1|Z8^xn%ohn>(h1-(W2M-Yhw%x5GpaF1#O*gp+={$(R!eq&%M`6jF|E_ca1?Tx) zMjkPC3g>OBa3R(h`sUqVlW}wi>V%%q66sX|ipSZ!9?6f(xhtcC@G0foYkD=CwcN@E z^yr;hTzh;47oT$M!mQupzwq4uj?HAWq7bP_nRzvuyt#IQvSLJu;L}V53)_683z3sS z43^O$c%Zumjt6C?%a5@08V()9_3R=dQpqY@{|7QKfmdi1scfNXl$dhnMpE@6<>4Wb zqrOLP{`bn7>mRVBNLpVPT(1tfr(U&)Zx`gP$(zZ_G|j@^Mj}haKw*G4kan`vQ$<*# zknzXkV!3Jf(NzL^%B?>%_9epgYmNg2EcYk_qR?^7nZsQ|n-z(!x_0-|0Btv~c?oM& zQ?R?Qwv*gR|zpH78sN*n6mE1t&)tvh2>g za@8-wa&*x7W0Gk0!A;hz$BW2Q5P8y^!z;)dqA>JnWav~n3EP9_ zrE#zllW@R5whw~jC+*0>q1|@#h;`)1SI@Y85xR=l=iPb1XJkrq{I5%CTG4y$wMmaA zK9q&F))o7`<73ElCD0a-9PjE;nT@K1a>y?ynCf|o+bU<2Gd|^EhO#ZeG57}r=@t?2SuIcxNkYb;$r z3|eiiKee?evGX^Tu1)7vk0dkYEDX2ip532o*iH!za;{_%IxLQUDH zJ`f|)nQzNCM@n*9rf$+@d>8OOYu36kEyMRpc#eZ2_rwT>;&?i>EBKy{$!ok@LA8so zP{H;D{OZZ<(!0)h0+z1o8g+un9ppA9Qb2-Y&|zfg2hWcbl+w}WS8K>I>|`_M2U*B@ zdcw16AT&A)1QJMJV27tbC8Nm`+UEIelG0mX9ISZPKly^wRa3r<-V=1Z<@3!MFR8QO zM z=7U-Ue=S;e@c5NqXYzS_i>~)389Rr^OujN>Sm6MVvS8o?p0RLpY`y=M zN8lr{YrEuwtf$`U0s&;2046h9F#j&%77zKe)hd|e+z*Q_j=?V9Ag_W<2WF9#w;6C6 zqE5nGqm^8Bqc}30`4IOuYB7C8fv>+;Ds_9|p!R{SDp+E2%J4)3zP(W=YSJQ`GZw&| zHI`2nNlk)&Ii;I=k_C1ty6f3HQwdH2dr-DuAXj4~cNy%W?N>{L%h|K@SUC~F z)H|^Om#BILNW{#Sk1>8Uf8*)D8>I1X>!qL$JvN|_@u%JRDIn|1K~`RhVR?Qa-BXo4 z2Vlrh1}GI8qO5jg%Ls-G<Q3a4@N+3f;#J)R*5m^%@hvlrEk|(`G31SAK*{ z`~bpbf4})RM{=!D=V_d>j*v90-F zrnk!tPOOjXK#hyO@(7!+*C+sfv^P|KPW!y z{u}&k(9?umqwz--?)xHTjI$~N&34-M(dgzL$-C{Zd~v-AgZ34!ibMlaI+%}pgK@&B zIepms-prt>JL=#}YHZ|ZM2w&6CU)JoFQ_x$?as{zrHd^)BC0E&S7-i6(Zvh1Q(iyQ zxH6Apzw&#$AoP)`hownz8>io>wWka#QF5EePujku}=MDxeHyYYfk~J8kt^&_3(!&`*3kj-&C|dP!0WM?bwu zPRPQpIn;2#;+oxI!N9a%GZ36$73qfuk{@`hwf~fv{YYgw6|a;Iuj4L;d{_d;26O;geRXYDD@ z`m1VD89Z<658j=svY(8+4t@G)eKqmn0IU?X-jWcB&~v7`(G*>m6=AX5dg0`aGV=o( zFeywe?Xx}R^_!y1=6kPt%~H4KBkSWcFAkY!Z?d~LncfA4NoELh@-@A*G8E5|HA^A$ zL0?e^4L~VRR!wFUo=*{KtE6xQS%>DiObApK&E(mLUq!9y-g!Y%@k1i6^~cIK@ZXqy zuz(#aU&$DE?jM=NI5wR%M_PbbtBHZU&(J1wNR?e<#8;`brsxL3o(QA z7eK$65>mtt)c&CGWUflV#=X1I25DQa?1rAH`ODWvHywVah+-OVN9 zkVdRzh$LzR!5op99y215-8&AMqkl*HJ(7NJ0C6o_~vP6C#JJ za#D7orZB}_r-LVU+sfhOoOLgYJ#OZ*&W-3o=fVMNfq+_=1q5HkuYNtrVHbuGrp0ued4{@icR1NDd?tU?uAv4d&0n~U-{ExkZL$A$ zai!D^`we**JED>yb#hY$x5S2XD4#lA^$*SP(v22~9vdZ*)`uEk?uj{V=Koclkh}Rz91-!+8cd0wg-NU#g6LeMbO2v8l6$C9SWYpCj zSOz8T9xx>IJlpH4Ip&pg2vJBdS!4*=OT`wdGc2r$f={dz9g{IOq;Up_)N~I>lNyCo zEUV_U2`$tTKtL&t6Kv8)q(nZXF=%IRmhxWq&*ZA)gEy)}rR#e*qzMaxC!4)UGGUc6 zMEMBg=iVlWBzN}gx^%Y@st$3w&~1YH&xNZ!VZfaO-p{GMDdzgTSNt#a?uMGuj!p;j zNu))BmS`{{YB~1cj)1*35NEmoofXsIGi)KjjuQ%?Vnn~BX6EYo50K7Db+XOWt7!P( ze)uUoI|D^MKwv_>fkELJhnmI85NO2cOo3Yu9!GSEl_{tdv%I367|;)f(NC>J8EndM zJ%z+M>SE)b_6+XgqiQ0^!kc`2D;}O<0j^mptCh|lHK5XKlU`?ceFQ^mDc>hLpN%9I zq}rLOe~UCX-+t-vCUbLN>c67?ow`zCK$pUH1@rQDC1A*8a)yrPFcQx>-k*RioBM@Y zyd-<+!da>_(9j-J)jEg8?Z-;br5#0}S!&sxl`&hchv zmvr+mWJM?>^Rd7E?|J}fK5+{dALAHGpFZmwzAlZC@N*mV*wy(tVT4V!H0D^hL zwuzUIt95qJ(g$e5$!|YT*qC_x6N=C|Hy1tjXEgMYmU4^^em~=s?{JO*|8PCgB5s;* z&fV~Wxx^j$xs9hZd^Yf&WX*mcFmKa|;6F5Hum9vac|C7SYAeUi3ee1H%APzxLg~@; z1s=$#bAzMyyv<~z7Z#1yVR!cy2?H3t?dP}JtW7zjs+*>dhj#xK-#ImmRb_BJYl3_% z=STg}2)#qbXSi7WkzLfncR~CxmP4LH20y2)7=^a4b}Q@+tChM<+cEt$&tb&wnXh^v zB>{phJEdNv%tY@7H?DBm#`9Psrp`QS3lA0l%vGXY==1RmOZp%rY=7a~o{cT%q7bzP zyF;O4YDN%wx{^W=kXKIFF6#pblkSo!NN`p}s5N0SO_J;v*OT<~PzFz|L}2QS14R%E z32#M{EWKuwi_YV6lKPkrBUDP>J-2m6Axy zOx02{@m>05!*w8)qGc9hm=rZZ%3Dkz7g_(z zy(qLwN}hE^nszCcjHAZ(7t|G;jgld50*>~m5$R5SmGvi8`+i)H%Ovl5|z_7?=d zj`40oiZ%stjzvQv*x)LJy!L9cD=1=aghEqAp+OAm9~drEfKHd0vZ9nqcGdW_*&G0~ zX$+1G+gdU25ZpqYav5Sy#TAgTgR^J8w1{pC#;CiEBLu`I5NS>%5ff1)dPu zvBd~I!~AzI?f~n7bGw2(oqOjGDLg@`h*(ad{j%>IH!j+DTq;N_XBVoItMti23?7dO zYQ$Y8;8da+i$A{Am{x{9!t{)tn!n<<4RTI8@*6(V)v{>#t;)-Ix8690d*=vg%+QD0 zUQoJ$D09cYHZqN}Yex`LiumaW8Os>N1`p$&6cZxzt75Unq^fc% z7Vdo;8vE|~Cp}V-T882`x9#fZ-4O^X6~ah6hR%jdpU~z(B!m_| z*H+1tv0YZ{T7dgv6m5wunI)n zVA;b^U7f~RLs@?)awyocb-$aG%ZNvRS0#Zer9l|?^UAjiT(x){(}%%Y+qPE`Jje+? zB_PJ7Ip2-8N_lCfnjsUvMdQqf52v@b?Y z%S-GKCt;sBB`F!5*=Xu`G^ME{$bL;j$TUB4nbf4L^1y>X8 za9vODI5g16gfn3N6^;}N^%%&xkCLOS{T=~E387F=jt->SVy0+_kzbnnKxQ_G|MAsU z+AnROnZse&+#0bju|HDezQ2ZHK z6IE$bcV%|ZSQr~GxjmYX=yU5c;mM=B+Wewudi{K1x8J4v^gU~~1SW7=Wq|2t zV@M4*eKvIvWNI(sfrnj9lu)3~a3sQcx@_Wnt!`t^>7bcyw}jDDt}CYzPYUF0#{LlX zT5@zTUlZ-31?LXnE|9;1EsW>^zy%Ga=Xts$SKYE1RgY#|7Jk>pTz*An#_ft?iZF!? zEOXl^@?=~@4^)H}Yrb(326(hS%x>=F?OI3fpJm*<@bCHaUUIuk5R9l&VH$moBg_QGm-8)gYr92zCZ{sq_LGo`D6SU&^ zuyY(^vfDx24B^R{L?eczm$oy8Bp9d4nHTyVqgZqb9NJp>Nlacuis$O|H8X8$bQ0)U z6*6jy8f?M9fD(%#xCQXXdtK;~>(=0=1@F&bYL8_ZHD}i}ci#2Fy9E-;_X(?J2MMpT zaEXZy&Ads2o~rr)tBY;$CNk!-Zs-x>zy!&(OU8qd>q>^z>qHluFbl|m1Mi;fj;Sl< z?B{BiC$5>RtmevvSMkXKDsf|!UOYO4+Y0nXhStiU9&VuW(iJ9*&Do()SOs-uji=Vm zgZ3U8Ry;unV+zIMH*L&CSAFn3F@XaL;uZxCGrH3yq=$lu6HeqY3(DI-j!H~9bZ6FZ z@dmWeY!1N~Yr>U$spj3>KNmS@9lr&El%S>wh_;jYZkCE;hnjk`;qug8Wm-a2I{itL z=qiGs=O&X9PSpYc&74TtMTA2zir`WpoVi}hKi0ejLzhak#?&nP9Cr^QQdL*&l(?u}$@OP%Qw zi^qe&9T5%Rlr-)@Q_SMqTh=usF!Pf>Dgf7rBfqb%lCafmA88_Swcd3az+Eg_isDKn zu_fA!w0g;@fPor=W7DGg#X(*k8Q81-oB#zN(CXTXu1|{RD*1XBpw0|^gpoYG6fS?VQiK;&UX-!T0Q~1K$%*?r+XdE_1KOEdKrjod?8p6TI{U9;yUEv-9Ux>b_if z`T(FKQQAE0f`I$aFaEQ^YS5+~K5&RGXmaEhq*7rUG+YRMhcn%#%jv)UTrM{Xw?YTe zpz{`9!|=~bN<=dV)L&cYgNkRRVZf^H6|$CuvuTb&myEgbzKn>*yJR;^xy@{ycVVe; z&(x>HQzusbF^jkb4`sRam@Yt8N`(87a9!S^W?2ZFbI0IX$@{XHej%R~C;PVT_#EttrJr?fa@jR)kNGPeQ+)-j0XK$Ugy5&a0swa_L0y<~6#2Asc`uhI~HoZ-KYg zCwnv#F9AsT!L)ytyOYn7sW{gU7B?gQ*s@|9nrmp9Q!s1X+c5>+{p)=;C75IWa}?b7 z>b^XJmZh3X$34TC^quE_3DEb1z%kmy^GAf_?eIWlc_^EZEXKrX7nfXu``qdh4f6Ku zTk1!@&SCwAZY5tlwBRCD3grAU$7udOdC(ba^xbD}C8kK|XPVn0+aKtlAgU$XT{JaB zH@2KaVZv>kC$~g5PO?>>A%x;lMrw!jp4t1%ojKIt_k~Hl1&VDs*XoR|-t+s7 zgT}Zg;qZ)*9&n>;m9>7`)Iyg&$7Z#*NwkvOPNd(`Uyy3P_St_XoEPFBp#uq{OWOpk zM3mrOnCYfY@KMYp62Zxd+P#^r7~VxT!_Y27+hQ_7X+Rly!h$MvxkaBUOX^eFMx_D?LBw ziMl+w9on&0BR-J^mA%mRB_7_hhjS!Veld^qY}TuTXv*%L;WKR?r2IEU>%V&tfRzKW zIo_gB-USm!t&dIl?cNT68iceLWH2ji#;n5GpN`pdv4l_A?#O)s`(2FC_QHQLR9`|r zV~vG|68XIjUu2W-IruK#C%^QfS~ui|7Q2vi@NeM@(l4A`Z1oNcW-UkBg8O$r1`Ey( z2RWveb;MC3?zI-C4Y>RuiVkj4l!>f`56ByFqBN!~P$?gB%=fQ5vr5p)Zw$ny!(`3t zxhT4+m4A2A1aZC1m~|a_+5fa>k5Wz^B=>GlQd+3j(*8Lr**|8!3$MY>vHKO8VNg1k zjc#t0u%6F5sDBkGnwczM-4<*?)#Z*cC@5c(Wx`oWauuT{uTdqOcsJwJeJD{5^V#tZ z{}OkMRI>Aqn&9j~=%jTJEP`8MpJIT*D^X zBvJ)GH~#lz1L;_}{865y*O_(lDaHL+R;I$yEqseM`^D;3poI)cmphP88p*td8-Xdg z76W?%tOI<`f7Z?~HB?w9_$Q3BuG^#;^#3D?G>&yyoWTY({Ixdfo+yN)Le98gW}k$U zEE;55z@@T$vwMRtU2nazl*`YUzS6m3PEg;fWOjqHh|dL_5Ho``1O39C4P2_pIX7(& z8qJ6h|LTc9@NLQ27FC%d67Gf%bm(>U(h!pdkzC@mVLnhv+I#L`iPpX|3Y zCvG0)j`rK>Wxnj({W1vxZ}G2+WfE9MS<9ZWL@Jg=8?YLC;)7nr#Yi8nq*VY${){=f zSE~2Uz;)IfK$m}%#*=%)F}Afweg@2e9l&Oiwy z+CBFhHCr1%WOa*liFWPCtFx?z0>JVKb>bx;#4Vt7$!17AL+|y}2M8?j0DxI|OL=F| zIFmkEjSJ(SD4uMo_2CLZiuyM@k~X}(y@#LcdXR1W(oxCN_&tr+>B3_6O$YOw#o4;| z45&`&FaAC910eS5735-MCs=rZ=m}gG4ze(Rr+@bFwIC{KA&bRp;2o5~S728ARZz+x zZ3*b{U?=dBa+AVz)$k~IHYT#eeaHdJyWl$+^b0Zzx+5#eD*o9VsL=F(5We;L3o$ch z?Q1BSP3JkRL_Hv&MZ?KvQFkJ0@gZh~YoqaAszDmR8jqqn)e|{J25%yjid>vzKI@$* zZ&*(viu|~qG(YweaD<@XK0n62?w($sXN5;geyis^3CfK`LpLSbZpz4dhH z-Y!^HgcXT;{Qe}3zHl(1ce~T0$4`VdgJKp)#w_|Woi?`x)JE$O)!!LTOQ7n^wiMic zZnFhp(iF0BVARb|6eG|EOb<}$4BqNXc70}v(uXaCZ&3QeQEQXxpg7#WOcH|wpn(tg zOlgWh&ke3z3&>oM6*BlWLc(}>vjD+C!HAUn$1?i%ZxAAo~pbPGj3On-dl=jo4 z=W*TBLzxP|Tze8#E)YPgXjUK~0k|S^1Min)bU5v|>=d`zWz~%$Ud8brTt~xPlm>A5 zEw~qS~@ z4lCltCg)!jzXPr{2>d(7R9}P0d${|y8S8tu9ovsNvaRXr{e6$V#QdJaSOxgBb@SozD68R{L3=X0xu95_^pku@q}a zH+l7y_xmElS-9PR)R-r^t$g<^>V%(#UdmS{Pa{!c+9wyAm5 z3StI}H~!6p!Oj}KE2*29BD}I@5F#gN(6S3~saFqeSTH;a5%)Fb!n;-ZP$3!Cs+gbW$;&quLVlpKJW_ zVq`7k_A*eTCsM3{u|YE;dpvPNjw|Tr-rkIT1koJ{*5%a)wv60=`Cb25sxBcmT_vA& zD-LTk)p!v=noD+R_UWQlIKxWugj;>PQsUOB=DS;rT9x8<{zI9`DoDqTD*HMy^ppWC z)}0EFyG`SjNl5#ub8vJ9tnC>}M6G}KLF|geBma4So*hqomw*m>JjJQ>&t4{S6%I+D zV1I-vg8&@543<-7ypf`fH#-@2j^0G}hByS)8P)EShd9n@`3_V>bf#Tz&Yh<^8i!XQty(NU9=)Ad; zz~N~Oo4!FuTJ#ffut;Gjh+}=9$fYbx6eHJ;CzEtOupu{359smx?0T%3iLoeA`b}U? z>|?9Fi98BMIrNDdCu?aHv8ca00qaSrXsN@zX-B%m9PG=;ewfmSqv>A2!_cww{ZK$`FMwG7ed|(!7kXO4MBzp10y}6+nCj`PU{6gaJErr5?ufPUe%h&ST^Qe{}K$hHkCUwdC;Ha}Zx-7$FSZk2J!RXjE z20cZMa8zIq*{jGi>>u!0RbNR5E(CnS>M|$(;t6_%Ov>|ar8Wk8u$} z8o+-}{G&nf=@6bxwFV)3Vg`T&-+RQS>_^-M8W9W5yo( zsaTA$oe+^BnKgVr7$SahhEmXZwN_g5NcoW%TprJDj+i$~n{60PCGKe^wT?FIIWe)M zTVBKJLxEdRFfPkPC>D}Ef3~V`-#Q5v?$TzP8{ggU|eSGu9n5DZ*eYATUO5pEG!E)&oXZ?(_*B^A5Yi+>ki@r^@mVXqHGl%Y&Pt<#odUUM`o<^ z7y*!5uYTT6KV7#lwvQ-V9=!Amku7#ya1ZGcV->nY&WX4&2|nbWK0!J5Ysdp5#%pTs zEjVj|D#24Bv<)vBsW){6+$qBzFGKHNW{mszPAeuF8JA@KH;7l~Q_L&JnP)a%0LtDr zm#7vyx*ST;l!S96Uip}tZt`=*-}5?A#=Oy!{7k3+y=R>i5V@&ao1j{J-|$hQlEa3 zvnaddW$|?iOysQ1BoeSth0Jyp|gmcH~)KEE9nq=RtPQy^SojZ3M7lD)qUMEu2M9}ayd{{VCb~Z^*KHL zgZCH9R)b5Rif%`9(d(1TKw`}l&K8q{cF%_V_joLP-S1>!Q;^pFF9p|$%7tBi>z8^D zNoq0;=0$t{tSoEH+?da;2X*c45;e6O&j}Cr%;u84R)I)Eaf$9erI43dBat(2KZGaQ&^*)mG|e z<+e>%iQc768i7%Hj@kMsEWrkBB0zLYK}kL;?!rpHUqbJA3nHy0=qe^lCQPz)`@1s zvr%Q!w2;HpLQeeqB_@wogv?t61yg$YDuV+r!2B<#&3AtKIqknc}=}-dv-%4!q+#0J1F?zN>)*Ovl1L z=OHUN-=1(h9F{5_>jC0w8gh&&r5f3g(Xnq|uqEAUk)1yZIj9Tfxa#TcL3b$-ff1#d zZ1(j)qm4g)W8q(wN$%__t@pchCR~X3rg5bUrSLp0)4=d%M;(W5RMC)?w!HOj)O77m z^7be5I7{;C;M4U>&xY489enywg9xEHtA9W`kUhs)MeOdwRsNeg1oT&fo$P86j?Wr1 zxY=P08aJy_F>O@xH#3TLfqBAESSVYBwkLYjoIP)1~G5bb(?5@;xmN5i6aK z)Zia@>vK7Og10uBDM}?rM=o0!5&i&0KOG>P^81o3Y=++QB5M0FZnVw)$ucQnb0m}O z?G!COaPfjd;^8$t#>)$@F`aahncPuC)m@wBGN6*|5ZuFZ{_5oSVcoT;)3lN8u_VEd{OFXVoT-uO_mx%_h7x!hM!fJ>>#?IjDA4CK-f#|DjS1n`G zj}aur6hAZ*absf_Xk@rmlVVUUi2ww!RMxSS#@2%mP-xStf z7~MVaNja%2=KpF`?mS-+*71R^-!?r>XaIMSPBUOj{w>8TTZji+2QKSC+g3fa_p=%JqHXme`O z&R+^ML5XOrkv3Qer-ddxdo((PLjVs{k4;?L6phW5_r&Ll z?~bTW15Q!H$m)KKw2=`T1M|BSpc}v3oBDB3GxIq;MC0R74?v)wTx1*d0_IXb>Dimz0$vL2NQSEpk;`l?=dq4Wljr_@W~k41b^$;eGByC# zoPX3XbMk^4-Y z@K_V>KezX9{X>^NvyTAd%VNc9@kFL_LI5Pf&0-Co|JQ$W=fr=K7`rh;$D6p)d+YC^ z7tD9afu+dK$7kGG`SrDyy4!+V4S!6llJtgv!>`Y9 zS4nBJKa38uDw9VfCuRT>iWjdQQiFoEIzC>k7^K95+qI=yp)jeHVlC$Uo6HddDv+ql z4oruttd~8y+VB_N928qiq>Bq`iH}NdC(*-C`sDj`RV$hL4`;#ggu%D$?)EONTAJ13 zPL3gGv@_JX!`hCVuiF#TuL20M2Yf&geRbL+7!sbb{M?!peVy%76_i$zOP+lAz7J|J zWszFPJ@;abGls*)p=7E2Sx-?-h#nQj>=hj9`&la{{{lF~P`dm4aMxX2|u?nwrBK zv65HxPkQ6zA$z|yOW6&qU5MeLk6Ti#1Y|L5mhH)YeKoes;p5AvMXdgd4_Wz7GjRk&bcSJtQgs_{?#ZL5GKPtrVN5BQPFh~_iWt%Zm+Oqv31dK z``@?p{o%%Zy=kI>q6-iii_bUNvZbk1eN6i9r`Q~=3U}UfO9PIf3SXdFe zJ+PY~gIG#3qk*VFMQETz!n*AV?MPTSaDF18kfmG?j=&0<^ZsY@q*xWpo%orm)!nOZ zl1(97#ReXXr4qz~V6aAew5PY&>R-7uO-u}^B#3U|%Ci+Ke~I$XvT;O{%(eeu#6=Ek z5e&^`1`Tb2QSCm-ipv@kAPkWAwEM(07i}~FRK1Bd&`Uqv{YBI{`UnO2bi{Ar3=MBunkq- ztUj>9{(10<4$k(%={2GKCsi+v2hl+O%PjIQ)>DWaH>ecR-e@WJM;mx|M(S;q{->w zY=!-XpmwZuRjFh~zFy_z3a~1aU1H1Y7MxB&c@nlr(NwMPKb z%ss&f1wpIIN&%r7^`(^BuhW8PCQ>Dy^QEj$0{QX3>9a?k^)0t9{K6~%2$8k>@Hct| zm7N_xm$&xG$b+hwS=Dp40y5ugX-1$=W=}-E-U!?xGn%9h1nZ=fNz@rsvUWyU*E&DW1}6OZs(3 zkwwE)t(X4N)WlOQokaMtaoLTnig5ASL`YMvOaExZ82bjk(fJdi`X@$TkmxPjs1KDK zQ1w4GN~I_sj#VcJ!$&Tg77Rj=%|uTn8Wsr@LShYeCgmE88>$rCf~IL)(S0@A6xJ=D zHLQ;Hp+MolpO~xQqP+i`F>&zx3n0Y_Rh(iQf{=;!0VXWC@vc*$?}~lU2Z>4M#5HxY zYPbl&!6C3ocufMvN1`z=G%yHx%F^5uEaR4~R-fHPSaw0J-+jIA6mNEUldR&&MZBZK zSw(mpQOOVgJx$yrA^Uhi(XNLrX6xjFx;Eas!OO3_|NRR&#>d-vDx6jwgv2bI{m^d* zID5wt|7NTx&eAr+oOYjw>2>keR|7LXlc8PTYJ^b%rk;R@>J1|Qs>mM6S> znDr8on`)EKKxa9ictcsqDAQMu;b)BKh(;qt6kiaEey^u7T=^yhA-ud~Zo>CzE*pcVJnft=@puLzXvhb@GTg zErzr6$wKPW!u`INk3G{^zTbpT9rFxsAgI1{Pbl}eEV85q1Fus+T4BH8UXdmR3Mf2K zu^Q_1y}BT%yKBHsA7K1TB5PadhH6H|pI`O{OBn1uXR&+@F=bRYoaHWlsMDTb+?8LL zHoV)Q*@*~MJs_%u3IS40C;H?&#{nw{X&W`<*?HsgM!bfmeCLWVRnVr_puDpn4POA< zKl4&cL=mHQbcJt}XH%G~drp@}QCmZ`w*Q#GT8ys@4HBd9xVYrCy64=foIq1^>>(hT5Fnnz%0g!bKHE4|{8)o>+Mobm5iTG1* zY)wjKNMGWJp=2@t8nn_?u$WAoT>~YoE*Rx%fVkXq*(n{gZzAAR??Nl_Sm&*m!il(I zk1w1+eWRgNzl&EWPg6I?L(Q)h-JTNhjg|RceEo;`FhIzxt#RWpoe#Wp0ld*)Y$y|V!K?1G?uB^f&8+^do$yP>@Z&akMHM(| zfS0C71+1a|!}+i+<#;Xs&ooM)z9;#q$-!UbPa%Mv=r5fv_9~b;H9fWdirDl z1||wSq>TT)BC1cyW)rzh-g$gwqgrbZkR2nn4b;KF3XZdwC z+*ma2KVh97j5OG;G=}Sc(pa{P1Twc#%na8PwvAs}iiVt`s`_#8C@(!w2;I+r&vokd z;3aEFctrtI>;@SZYVRDcXX-50mu%*z4Pj1Sb%azuCApFKhF{-kgmDV@)*)k1Dyljhop-tQmQG~J4EDCHqIVI{n&7r58( zCk>Aj+^NYqK2{+_Zw9oquR&&Um73B`k5R#P$9xiT_P+^w8P3o5z>;{v&)p7qI?1kvc9kBGViY%;+XSH9RpymIm)DYIHLUf}OoErzHG@X--S@HgjfcN6rnS{$GZ_#G$XS~B-Y4qvV`-*a`t1&D z5{P^Xdd)JhB!~*4}@AZQw@nxo}1hG z`Fzsx_;@nFD0)a}xBkx7rpK+;ttU#&PdC;pEsOOoUD0Ed3WZjT#xJs-zQ!Ywx>yZX ztgXCz{u3(IThZ99iwDr^+ASgKEH^>{M8kYmr~51+M}ssNDyyMlX2bJZb#TQ}c5nZh zoDk(kvz11|USc~NoAr5gQ2TOj9_{wIMSa)FWvj=UG9zzg2~|r}aEF!t&$Wgg6#f=TC{dSz+8GuZ+SCF4uvN^Fu# zL0HXvCp&A2z6>E0S($1ajQeF(P!nZfdx0R%gti`_2u`1%`l}2Jre%`J+;^U9KXkBZ z0p2~~{4W_-V907rK;6q!r0h!adl(1pP$Jd}{?wp_Rr8?g zPqqU0JYv>P!D{%1e2%ZY$#@n&VFUIB^a(U~ghNi#K7e5KiG~O1TZ1cU3wWGIz9SVj zr^ko;rswMPUtmen#w^~y&q2nyX8@}d_?|e({&vEnWGj>|C*WdVKC?}5MnUpjSqOMOuTv_Q=TR zltw+-<`hrNykg2=_d2y4$SK(9T;M%rs>odEHDQNpQcpe!a=iv4$9z2`>BUxvNXNet z;q|WGh1Sk13HRAI!FLq~1X-qAlXS;Ye894SV)MjaK~t{b@`fzxyIbw+aLuJ9(Ns$} z>9#~=-=(nJkw6v|c8>o9pWnqu0Lu=)tX;x?@UxsGWM326HXXt(RShdn|sYR=6eQM7Y*_-tZkd z=4>z=kT&V5*d0@Vvu^1`8o=EQ2a*O=vqo+V+qonR)l0Xl!FS7^covSGdZ|&J!{9^z z@?PJmi9aU*aJR)9inl2JMr{w5cGBqOchH!n<{X++1w%F|u9s%%_6-_!t%!k{wc}5CES&WU>zIBcG=&eyx&sW1&Q6yz>vG zejYi!OkeZR)g3lU@ZYFjJv~-C$9LYb(cicaeSb2eqjt4bQ?MbH;Mu8I;sn1*K5Xoz z-Kz+BXzfj}jw^+>Wh}&gj8ZzD7K8zr1B&=oIDwbB`0Nx2Sa8+1` zKMw4+)Jv^u2^xCq_@!~tS?D(sm9GCl$_jp5pEZ3`t8}XAFX4a$yvLb60sV5XB_Nf} zlHTH&5q3|omH_!hFTHb%}P%#WW8 zChu_FMqrlN4fbDRYqHS}8p$sG2n7KEVjw)NPET}pg3&vXTawSe{0Me=Pra({gb%DC zsSxCMbFL<{*_&>VIe)+$D#p?EWmHJF&Bon!Jrnu3J)7gXy6B9nQVR z2F$FJ^uoR(yL0oc2s~-v0+Pi1o-67aQar9baF-dLEi~yC4q>;nf!t6*LIsn}tM&r0 zzEw66U3@o@ae|d$bxwyu7-x~xi7z_O0m@;TMjypL@KQH%@u1=G#t$f@lfb1o5T82x zXfZ!@z-BzIOR+>Y@Si*X)RPxoh@DSo0LE?IeqP`2_`B#rkw~Q@Kwjx>Th6hEczE~7 zJUReBe0l`nNXOvoE3(^;ERcA|AwTp@>_i8&^H%yXVZ~U|%Q(~^y;Bw!#rduI)Ff-x z^P<&^)2>F`^66oKpH&u3opko0B;af2L5dot`XY(%GxRzG9KPu$|bI&h=+N z;W22}6Z9OzT(lK^oH=c{e_fnS{vM)w@v`ylGM#_17P<+a{(b2NGtD&u#vh($uoxAl z#n~RXh-csO?pD-Lk#8=YqbvIL3787*c@_f}WR~k%mI$kKUdt2erR2#!tA(xvoYiiu z-!`(iG|(=kZH3|bcc4;y1tksmE$a(dkE@fQtouM+zA&_E>!#Dx?ql5-8YubG zd*MJQkmz|fT6Kw0;nk(wz9SBV&&oSLkpI%f=80@&+TFjlgCqvZ`*arYV%SN4unOFM zM7Z%wj>o8Lw;aP>7*NebpWya>8%u4B96kL)m8 z`~ErHS|#G}Rn^dBo25Xd=J6I#&J!dn9w2B7(j4746!zinQdpj*UfMEy z`s=&IWks>M%^t3VcqVL>riB30)je}@m;h9Xj;f*ZB0hvu2DQy1 zttaZmjK@8tjNA{&P3~NRvkDeC9qM52YJN6Z!80xKoctAb0?x?@S;M@D9&jaovkAuK zRAH$IDxQ~KGtX^B8H5j#Q%P!-sFh%MW=n`*Bu`VT6mvi zrutM0Sp%Pdu`#LVrbi4^C}+7oB6#HW9g)iH2wHHtN7W{uG#%%g*tqp;L39&sJj z_6n~FS*vbNp@Gx75q^6+mex00oB(A6qT3WLWo`i?-xIVN0rXWmKkdMnm!V{@c*(to zz_=pAAU(_xlpIo_SXC8EjpK8lpxH-F0$3i>&;EIO9DD2RlPb-+J-V0rMwE zkwMxKj_F^jB-v`-wS{ebmfzJd|Lp@R!ry;I9%mGKecqW>P&bv?!SaYKnL+5iIQ^g`PJ+!R{qpYz`w(#akfmSUZ3T z+~~jVFadqsBhlh97GD&?reE7Ss}>LbAzHpQua~m1Sqm!>OV#PGxGiz6DI@;c7#|p3 zrV9w1K5uGs7bv-5afPQLcK*BZ>DkM+Q$YtdrKnC;MGMak|K-bk4<_P^+mVN|mlqhS zo6j06S@2iTzj>Yh%{vhgn+(4Ysw{!h7G5Bw2~Qu~knw zFs*Ia!hb%Rk2$F(EI0SxFdG$$+oH&fhq1G4hyx1pt0`g0tx4!W_e9C0@cLGrhcjnl zz+T4`GIVs`xX&lAsEH!p`jN~6@oQT_(W(xK-vSUEIdiwQd-MyQFk6jPiSS^yMSV#W z$UW#c^+pn93GNZk)Ega+kbSkhT`ipGju>tFf%=+a|sZQWZy2!A%*1pn~$h2Z}aC@KPdlx%|f|M6ll!+VA&*1k@;q_g@5XEJGH5bwmJJ7kef8Gj2zaM5F$n# zzgs{cT>!_i&I)9}u*4op{EAHeOcZ})OFEKUV4|p5V7_an<^%ekvrxfo`G<2~=kDA} zQi0se8t}f!RqQ-O)+p@luXe_Z;*p6QU=Iyp~6*23_JQ-<=j6P`e)W(y7e;yRWt;rj zZphI5yIz5{CNKc1RdaE|Q9``t|IS*fB$``z^jE$%{N(;EXzjojK)VUEa1YPF#Hgd4 z6|s7K?|^)%OA4n2Wsa$U*Tsj4dl;ZKqvzB1gE^i%`32<~FZl@`2M=fA^R&}4cQp>?u3w4VGttqV@@%u-)cp7f~C+w5f zZW@#OWTR}U(QFH1()T}&1~yu7G&S;XH21Aay6x}9zsjU(zI2b8&IH3T@_HSN!-%|& zu^VWuqK9CVq8SRJ#~C_5&3F-Wbwu6LX}32W?5>6Z#Fok+*Cn?1X6Jjxnu*N(A2l0I zTQabD{@x$H6C+NNkk`~vrU1L;2H`3^VLru~j4t=w4tk4xByOB^QDAdL6T^ z9$5Z%!j)98gUI1-KWZ}4VSx4t9l*_-Hi2`;b*3dEpR9!qGfc7r=>kqTN|Pi`b=w25Nujk_CRoqpkd^LSP6<5_owrwf&S zJ=gHCJ&g%W`$98LRa%FkeGI*~TtX^i?hr4wR)~dH%=&FMVpQM4^44oLaBc2e;uqNV zOk2~Q^)n_}0ayF5NsvtxuXJ`E4X72#0X|j|WYAk`sG;ZtrnslkJC;YJFq(MWeuPFi zT=@Sv0Gl}c&jEO%m*xXZyZnHex0%_hD0%;9OFN2@BdKFiQW{jW|icfPdd@Fgm?U=7u4u`|Kg$@ zr#mnt^@76JRzURW-q>&f@A_OPPFwVGM=sNwXsp=g+aPNY5yiaI-bBsMqI>E3#pB6O z0)i>`-1(zL138xjd!kO#608KZF3e-)kay<|q9%{TdB1HOr;q`LuxRs99n^Pv9sL<( zOX$?etC}T1W4VJUJ*4mC(;*Q>Vh=GIBxHlpNQS9YEI-;?eF<7!!w{|-u6md`L*T7> zcG#5sS1FD^n=H7>Vo5fHaeeBO07}n6xM({51*3K;w}?1OcUxK;4e9d4 zFLW49D~(g{Jb=y1QdR8#fhURq;s_tLeW0A zZss$g>s&_hi9lnYEmKh=y?3?r3VE@BtLPFKZU1hQq`}%v9RReko)MR~<%4DKtk@JO zq-c>7?`hy}xVuK#J)(IE(NQLvsRX9eL8(+|ed?cK%f}2l(3OGp28A7DvhirDz5m^j z5Z??HizcfnsO=|l4d*I0J@cnNClpKU&T_MtD5aA{18lEU)`0VI{N7GkMe#C0{@5Nn z%QL7>kl(*oGNVFMJuP9)L>PO_d_5hheoW%RsV+fMA9?$^Y`S>+dlYU&Iz0O*E>R#l za`%Oc+9#O2=#TVitqk420sPXw4ga+>1XQIC^dcgfT2n|DfWPjHUL6lC@jHpA3qV@` zZ>-W(n@U6*H9-PX)66o2-~00bSs!!hkBQHA9PPXH;}&JbyR>;%?ooo%){5&*@9=ko z_gAv;+5e8E2&GNi(DbGt6n*)jkDbz6rIeja?1p^8ENfC-Ii1~#=56nhpGygLClCWCe1S%S$FfzA=VOBw`xXrXc;$V z6(}4$LEfkFCyJ?4yzymB9BD#8-O?nfFWowhXevdH`4UuBSqD0AcXVoZvh0bbZzqT? zyp3zg$u>QJk|-ek+3!zcLido78_-t?l3xJ&7J*k_j>^Z9h^?g^xp9@J(b!zN0KJtI z93R247?U}V=P~^a)c_o;&=(?;IFaitB9&JWvGsja7AlaaEa9Du{wExDrJFw_u5M>L zhQT~X0Rfg>{wq`stx%^degzX7Le}J3ruA+Esxc@DnHyZQQdA&eDk6^b_z(|l-9K*! zPH(f%oRnU>M$B(UQ7JYyB;aBUaAbb+{zAe{@c=XZMQ?PQfaiVRyU{E*b#-%FvhBw* z%bdNu!YA_zE%zSIYbPgnYd=A{`N zaMoQojjW%2Rgi9H#J}Xr=5y5hO9jz!E>w^h&Gg0-Gh~l-RWG%#>2Xbp*_MCr`yt7lsYi|{n&W{vNd2^1@m^2r`csRaOyLkT^ zeB@iQBb#Dj4CH5UJM?HbAyo=gJoEnpe5s{LR+D;Ry7ND3IIn(kyHj@2idqG1I5UgX zuu|0pX+t~L2C6J-r!LZFz0UC{gaGHzLUHV${TeI1$ukG~$28b%R~NCh?uWL!Ul|E? zwR&(9U+cWsxTk;+(T!4;1RsSS!EBw|zb}ZRPftwxbB;$Iap7E_Zcah+p8LpbjMwFl z(rb8$B)R*Blg1+H5_d4ND4W^AxYXW9V+)7#*u%obXNy~z8FmXtM%DAVVBG%6OHHwp z1sVI0TQuhHLf(qu3cCYn_H)uWBVx*^zh`meHDROLeu`%K2yO63iNTa>K5Zu$#^D36 zSR$ae=qrtYSKwcL;v+lZJ+rgia`U_z$dClidfSc!3^bUWWcv}wN|zM;_De)(J}y-I zQ8nH3Vm=~$@~JpyuXUXa8OBp}rWz9>8|w--_v~a7K{A6pyY%+Y?02%1ZxD-#@#K#> zrIgLQL?D=%q%cjljCRE5O!b?cS1j?kXH4^|E@E$Z%!g6RcOr6I3JJNm)WBLmOc|aM zxYlFjko1p)#peE6dnoejyjfKz6mu8%b(1G66lAePss=+TJ`g4GSdg01-9ZkMHI@Wy zN#FGoSBB&m7OSiX;_RBfz|@3J#+DGbgdpt5p6a*q2G4E{>J$N5_zG~)-t@IAby5JF zvh@%^0Gj)L0s6jaU)i!|*dv-}_5mE)B%4fh!oIXG+0eL?f({b3pBwvE7-h}(7yoJ{js+qND7(PyhG)T5sh(UOJ#w=Z6L9RWCV^9U%AFV# z5k1o0`tyk|5}2tzK6m71$z&g$aB2YIDq&6>YgY3@S3QuLPaHGDUBMMo zOh+U}x_Y`c)xAPIfCUZJ6ZYCmsC?c#`9B?L--~mpMpvmaIG}Q zChv>NTa;4IF+8L66e+js_soh?s-I^e0b|JoAaoZtBm{B5pGu)lIr@LN`trD%^8bH( zOvoOR%UBwN3CW$2y7mwgV+J2h4#QZc$+Zm8atqG_*Y3S%dB4A}Ykq(I9uGNn&pq$=dGD{~`Fg&V{w^fl9V`9TN9>4MC$fV{4!C-y z79z4l$axD`{3Uo1nBBlHk;rsSO)p-`=fa;?zQrY|$qUsgL4HZB)e>;DrrsJTcoWCg z@Rr6@+kFW4Q)Uv)9LEFVb6ELZ^c+(G^I>EbOg z^v(TaVAFwj%CFji?d~zyNyYfx!|hgipG_4ycKV-_s~}SGs*5|C5HIKmcxGb8;Q0C^ za-4SflbMeU>7R!M7y|OG*FHnFS3_rF=t9)5)5AOOuTHQV($5w^4{I`{Ju^xNS%47q zcC#bxCf_dXf9=5B=JaOoIx`{VVD@a3Uk*M$Fgh;>mti8)YW4?})aKaV!O_;alUhO= zrOiva!qRgsd;(Qm`1|C$zOo`$4cIPsJuBHMIgur4aB+hG2pitc@10!miEnpygBv2U z$>$j$+?B(+Jg5k-^Y+RUQ)m4Mzc&F;X5Wha5SF2&4e1O2wCisv=U%I1fG42z*=;B= zzFThby`h&;`k!UNKx74@8MXHKj>C|3>vV%$C>xyZw0c&7gCmx08>tESN4%O($7Zqx z!jYOiL%~8Ge#LJJOxf@)bNJKcf2{Su+n0EhJI=NO>=9UT;~5EjgqO&aatJ;8lr8`_ znhW2U4nD<@Xk_&mvI;OMn~U}+!X6k(_nNJKV8Mz#rD0bbai^m`?qQd0uS}OeF!-7F zzH~+Y#;GnX9E7EP-=T&3!^c}ZJQ#kEgPR2pyTY$eTv4W>P5UZTr?xQjBOBnQ^Qgek zqXDbbl{!A3X}k5yZ@Y?n_fIDWG(D$eQ6aN!9$(yByZz^{EKc|XWYt)C@gn2-Qzvxe z?|l@Pkks+sqZQq|_U&`8FAOemS^o57oK+tOZkn;9E_}N^8ht1J&$G|GYNcT%Q}T)e z&8ZgMxG3qzmW)#(tOnI=;y4IVQ=32!2|*8ULX1agqqMqq@w!#xM|v6Gon5i15xY9wp7I7gTbm9Z?U3ga^JM7UL(moj zm=bExybH<*((^Z?YucV%2j9teQTGi>apdlz;CkEcBIOF&cN^FIT45DVzuf6KMvnCP zW;_hZ%iJ?N$%);sR2i@G^+$JZGBck2Rz;dRwg^2c67nJcm45{`q=rca*!IjtVWjo0l+ae+zA-CshP)AMQD^c-7;&%@)pR^Mj)^D4xa9vK_P!{#&c4T^j1WHsv@?Wc&G(P&3HN8el!0+QJcwrN`c-pwzOko+%Hg+NpMK&m-3STd zrSO-34;PIPX)6w7V(0!6-Hn*M9f9&LmC4BuSqMvywHy8F4UTJ3XoT-ng2JzE+wib1 zWc8|XL$BLJ$VkB1!kz(t$1ib@HDzTJ%ug==diuG`)FrzP=ZtS_Uy&VWzIbdU-zJmE zG3^fI*e5+A`+Hf+8+2FxDT?!1I`gZYxwcUQ%TGqMzxHIzaqaBN9bg;#-=@xO+xB_y z5>A4rg}n7(MBk02-cy!bWmcwEBxOAXIkbV9O`fylhdPcqwE}N__G@0q{I#fts$4|+ zNkR}A!mrWmQm(V!j>RiwIP8`i*&93BobPJU?7@70@6sj11~WXo--ni)K7 zVmBRuT$~ybMvSsz8Pmyo2w56ME>*JWbE+-g{17LVmfO@i)FiXW0Cw|2B~3Z*#&0R2 z4t6lQv~FM_J|MQ+ad1c#Fpt739+2;uZZ}D23m$ZL9eOOYQ1DDB?=EG+YR;x%j&O>O z#o%jL1mABzne?8~5q^p94)#r89h~#f+I?8>6&LE;uKI3uV|w(QyQ0T4pyPiE0T89p z2Wb)L4dPYrKIt4=t|=;Y(|4_hu#;4XB^75nF&l8^0W}Tt37P6@+eZRA*q?E z!pVjM=ZCha6bty}!|iW1nK0P>m4CbhLpSdtMc#fOWQd7Ofkq`m6>fZ&dY9l*nPsKD zA_B+u;Eh2LX$U~bA4E7}rl7%+;0KrP4{<&|&-R5NK1ID8682WP@$(vT({Z0)?@*vb zzqNRMtYbVr8{U)$A^ZvKaNu_U@YgXG>k{ut@n6OBxrIaxY@Xlo1oAKI3P})8m_S0# z))Qu+L~Ow48f785KgG7MEhrneaPuM90!8bG(!os_F6%Yzu zr#(+jVj?dfN$`q0fi)JMY7H%emvgbe3@3`ogj|7p@J>$l;^jOUD-qdMLT*5-Phw}) zD|w>)o{)qFqJVmn8b}7*I)%x>dI*J-NG=pPULuDu2`(la)cG6ld_PSCLHUn0=*aV3hrdcW8>VQ5N$+NepSIW9KM5`1b``YNmqeCy8Ae>Xfq-WC`!c1%}{* zG+t>HBdBN)mU|^i%~|$~$yL+H{Kc?6=W9g2rSZS8|vzymdk1~R1#0p^jrm* z!#friX6=+?c7P#RhJ-Db|4BXj8 zT57g}SqS(mc(0>CFKsbHDZ?bu9iEt_;EJ>vz(xyC43VzaubH7B&;$k4v4_UrSj^sV zW3VJj4Rsv6<22qOgIlpQ9teI+c*#MM*tVfg2EC-@9ZYfX^>BR7LXKnN0`nS%0G3l% ziJ3v1G#2btqAVnJFgp)p67@ONIag1B@Yy*BA}$dv{Lxz?T_i@0*&@P(?=tKyBEc}y zU%?y$j^7ayGl!61m{uJ&8k9Ldi~1goR8oa>zg@L%Sf)jPtl6<;HUuMHo<@fj^+ew^ z?4putB;Bx6c+2ed;Iz$$KRMm7e!`Y@XK-XtvopTKwdT4(3)OydF$bKd2w( zo${b|1l8i@QEHAlCO77i!DCjEBE_7@jR&t&CKqXS!QU!tHS>}dlcx=<&Y*bLNgq3> zi9r`$CMSN_tEf-UQhzW-Twnl+$9wFipzu%3CA_sj;^4#|W zqD=Z1TF@^gz~5wirI|6}VyDqT;woOzGn@>HK7r>UU#Y`COZ8HUxb*jPHu@R`9I2zP z@;W#_>r#i!`@l(FF$Wbw8XlVWl%6`us=S3Pu1xr{g!h0;?K{CCf6cBq36sn7twa8n zU2zI*qjl+1=16j&*$~ng<7o^6I-tq4^1SV}m&%Aq=lpb-WC|ly5f%>QKMD9Oqu_XZ zDDE6~sO@xl(XO|0Sk0X7(%gU&afGO9b#d)PNB)RTBg49vfZW}smVspLV?X9vYG2)J zkb+l@u+OmDKyj~Q#?W}e@iDv=ph&+C~( zE387tMYWK=$Ob<25#T`eCuXab@-hK>+5-SxZf}2~lg}y!*4QuK30=_A5EZxY!I?)5 z-osvj^aLTV9?BDk`C}d zhf?N{A%B7~A7vg@R%A;vk?*3LbYAbiJN{}38e;^oxtLc?ak+oKDD?dGFbn>uPX8pL z0QuFA9r{0|z(-c4r#u>X1qXSZnzAR(`bT=Fgy6iGO@&cb`H{s=z=uw1YWXV9pkH~v z<8uxJ_|u8@f2aKGjJ3}7CEOOm@uZKf4s7`K6BBke(#MG0f_Y88fyu~JblQGbRp!D9 zz>*aYUN|oIZ^fbA2a1j%qe{9HK~g|@|8YGDC%4%pOsAWd4~@0vEEx_$JiJ#V8jZr2 zIYu*{r6-@p4mZhHMS?C-sgl}fYUm-31BuzB&A@&=kBjC!&<`W*Uch;stuezT zgz4dMfP5Tdtm`z}(ff20rNkMaoEp`j&F3%=FM=KtiTo0$P8zlSor($kMHn~^?H^=L zK6ycG-|HW-mFqarZbr_%Z}sVM&WF1W92V0aJnmlwbLjma3oO=B4AM>__!0p3G4aVd z=8MsjUoke;pshPOqgNjD{m*8D?w8}FSIx}85PP-Gb?Baj8^0cPJh+S>_PXKcCAGS8 zDKPxy-jibb?6qBpjkG-m7X7n$_3>V(hJwmnEf;*5GW89QxJN!5iR1}I5#j-d@LZyX|ED?G{b5tH5*gq3105p)_&9&WMQ{{1>Vm)! zX3#muf(0MqJUXBK@uA%pkOSZt+5#I*(s&8NVv5Zk^+2>W^lY8HaS|%*qE$veHYZ0{ zn3L&>$H&2%_5#c*7wgim)}$<+vr@6b8JIfHS1_AJ4Yy+POy%x zJ{jt>ChiV86@cyqpgjTTN&xz)&XMY;y09kc#xzUj{&IGV#CY{-9lY#NXOH(%7rM*Q zh0ki0ZN9rm$fD2Zg(?Z;n?4e=7c(HP_%{&93c$4be6qwsle>cu0pAToGwpu}Gt?+s zGdMUnX2br+2t%U=x!VIf*aNE9@8Kr zY4cw0n)MMd7`#!jLNW7qNaK|Vzphh!|FIgZqBx~77wI)!R7nM|m3W;HZ`}j7upHW4 z9S}gSOZEt}(NPCq5j0KrN>JP(qvrKkNCo9R?2W?rI9LRCB^3WW%w8Uc#XsOM4KTjE-?u_xdZo2klShIfTFCL>Ozy&4U~{GI^49ajNBMP z$KW|Tq@pA=VKtC$nPFN2e{~tNa_cDOP}%pQ6oSFg0%-{<&q&AAjl}TlExMSB5d$C2%clzc%|9IWpA<>YDr35Xjxz_aKl+zsE zMG-iF=$JM)&PRYSiFJbOm|(*xS`I*n)=59BpBWr2Hf3$qunw!*EZq0-7$ zz|Gi{7mT-L9fd9GEM}jyhx00708spc|1fa0jEn#j{Hp-}_TwYKR8*1Mb;KJ$MAX)3 z%cZlUPc?Zn&%s%HBsa>CyD$N`K*2q0%|!{)*FD^xN1$FK8tQH8Xr~>TPFhtrB;1zV z`A$&UQ{}|hyE;G+SDfOG7dYbF!=yx+B- zzu@+b-!LZK8aTOmcc&R09;jw?_?w!Gd^qV23O3~_Q)b~C7MsTAHTKtZrtKG>j)5~3 z32JF+k5*F4?nlAWVPJ!@M*;6<`t7Wb11Z5xe1qa__HO zm#0~Ce{e_N<$moXnK$QIm1FJ)A2Nji&T{l@MXc`w71#g(SKI`ygTsNQys>8RfTo=s zeLsBF?dcs??>CeJ07{IZ*IalljCsnnx@zx9hwrkU9!$?5_&zXhTi5Z2=~)*>G2xE5 z#52Q9yy$lFV4vQ9wA;g;{b$^vb`5UP4uBz4>VQaH@_430%jZB2>*je`Bw$I=4|kCt zP@Ndlk(SHa6_xqn;|6R%h;tzm_|8jB{ zD@4qum9bhCO#Joc;iI)x^R7rHU9ZT~fAK&EZE-*vE+^{1b#>yXO8IfJkrlIOb5!gh zNe8jI_?LcfSQ#jlqUbF4Xl>uNmREAcjOy42zgmyaY z@^)8I`BtE@53*FTy5raEhD0eBkAF26&TtGVwe1?VPAFPma*D7!qN43T6qTGgGyz`j!JQJi_U@Vf@_4gs3 zqsWKXCs4K|I+^}iJf^nr*fmYryO?b(PrA^5){kAp$c>{57kqhrSevA#kT!PrM*s3Z zmo53d-PH2~>1=Mu{JuKH&@8KaV}N7+kBav_=A-;(Zd1>#mFIVFEx1Pp8{YE^$7EKW z!S^qHY_;@p-%e#!eZ`4&Wg2>=^eLAZu>65mIio&E`I9=!q^raoY`I>8R!{4Cu<;bj z=f?OCmbHIg#qnuluJmbQ+m_HncAdW2ce2@5%@{L!D7sg9lt{fwI^^SM;=OKWf~gqg z2diu~KwfC;KI`G>_k+)c6nUdEyBy5WsX)}Iz0!S7ZH;?1)h|zG4KvNUOpU4Hs$&G< zcd3)*mGaMGFY3>7;c1(%Qh>EXHk(AZC~^P6`|<2T&Dxpzg&+6`-Mya8_&YE4(`JB> z^hIn%VepjEE=vZAd&YHceQ43!xrQSTr!-47*&uvP&uYKWQ2MpC?EpsFn?csRJ|lJ| zbu%|R)7&?GmHErdJk4N}G2&>nn45mw%}ZvZn~3~*u4b4|&UcTgpu0lS&lM3(XHyKi zDEnTYx=llJwGsL*o2&`RHJ>6rY#&59$pqgdT!}(qgMNhsa>)_^j+>PO&VM#2+^HO*+8NyIkd7Efp@l@X~p{588roy-wb0 zYFY0&ms~`(sOW1~j(iust)W7jl6c?=cc*(NpVy`P$3_$N@Gz_Trs{E{7+9>>zXNyK z(}@o9>oRa*LN*x<0H1(;fAo7P+vCpopSlMk(BgsiUD%Nc-oMEODR(Wl;Wf+)8320n z(62rAy_HQNjSEJ7JCEL+b|(Yv6fawvltTf5xs3zAm6m!kKp8MN3prHMIRJ=Ac_lB@ zVia8(Gi!k8amssEK0a4!fmK*4l@Hilsse>Cov;JS<)%)}{ukWC9UuV9EQmR*fK%fH682^%r$>H3tx5u3 z1J!~y=C$VEr_5o1kyJ;dpVmWNkfsq1q_W+fS%DB+`~$l8_4%`uAP;O8Ppzx` zj_%ec=+KB(kZ7_v6?Hpj>)Ea?viR`!^!NNhW44cw4W#JLyq08uDi-g(_8&vHZX50z zAQT6XX?-P~6be=go#doN`@<%`PEN5lz&g7|>Rp_s?b2pY+)aA1DEIa6wunEO436|4 zi6zzJW4gD2HEVe$}g?9YdBn3-Kf6XlQZV zsdaXjS&tQy`+r~K9sT0BeShXDkS*wH*FmXAJXh>#jA|b8zj4CDXoJf;wun2jnNNRI$jo6w8ozt`rO(OE*H~FG0s0JS zDFLFEl%A{esV=uwbokIc^_LVGq)^?HwuBUYODlF6)PHH(6_Ju^PAqwF9#jVY!v&rE zt!hbFY(Y(0SSxGkA`nyq(Ve+v8cwqtPn;D0PaJ3z{nhIRkTBAz{jXI3o>n&Y7Kfdx{6gx`8`o8h3Y{!+J81>v4tlr?ebS#8jtDz(B#oglOP{>p`va?-auLk6ne% zJ-Nu2js8&1PN*F+f5OIz1z7&BF=WG;$V;w9kC(sZ|JXqk8u4F?`UG5>ZP%ub604}B zKgaRYiQRX_PqBs;x$UH}{G0dh!yPS2VBpnqhPs<~U;7mK^F46$2-&T-=wDkccU_79 z$42zR5L?H<;?Ay-_qrhfA>rU6rJocJZgLtpo14IJ zNkHEi&g_`|GmJDyUjAS^Hb8HI20oPtn430YbYkxlA$>;9D~EMJh`Q=5)kBZ0Y3 z8x1%w-rluBhC@f?O!=2$#|u{f;dB2gBa#3yGiO8o9RvRCVo}~PnXuqd1ZMfwQmtb3 zX|kkXK;rX|Zevp+@N*&gr z{&nU9?CM_0Jk>leGq%Nbywy@Fmbj7rDMMQu4cbZsR^6sgnhQ3%S|&8*z@8wr*w)T5 z`Uf|t;_0*SS+g`D;4OOil+UG0qmWi3m6ij16=a-q%g8E#$xj%+?Q#RyVK5|Yez8w2 zuKscgX!gLk;8=p6Ox*SE&rI^mj-iUxJ4d#EH}lZi2`k3Ud{EWn<^H@;1k7Nm_Qyk$ z0sm9KNLPrgNYgP3PKn2@nM#F7c|v$udw!`i*E=y4j6Cqi{@MHsz?JT{L(#Q^3to(1N04|8X;ZgS>-Px<#60p{H5F zZPyfg6WySkMT)8lWR_t|AI0G*-c0zoSmp)ztV^@Ui6yArIsf;gp1i7AIe5t+uTM#0 zp=j1g!*1?m`T8V$%Wl?oFM-*XqnHBjlY(y?)y(O>$-5ZhbaW5O{$ThD=P|IjWo zH*lgWo%CbC)3q;CTBday0tsh4ZTXyOrKLCXH6^WXzNYB-c$b^#W%_D=U*;lh@H*v& zheF<`2{JK{&sP5uU|(p7RlJEdqq34_MNlkcXI9Wq5Ws3&iHLSUq&ae^I5Vb zvzZ1KZ@KRu(&u1j@0(*fHbd-vv-H@M<5Xc+qdQ_tX}19MikiFuEIklRXf?CP2H|jV zM9guBivFnFbhBc-yc(#TfP~wXPZ)%qq69?O^UjD^4-C?W(k?*vL1U5u+k?A~co__) zBvI!jIlwG!88NtHByL{fDD&s74Xjf$1sHz+Vh!}z@Q7Ts2n>nJAa+Cr+wqw+lPLid zqCVMe?QD;BUW1_Me{7ml_Z;)+gqm~+A9k`7d{4eKX}9kAkkyiF`0jr#Xa~*jCi8Z8 zRZN(ebgM@{u!HH{Norpf`gU2p1~tKz0`#Lp6Wdw}2np)3Y?a*bRO#ZjGn?E&T6K#6 zFWt1>p=zvJm-aJW`91Pg2o#llyY}^fOv)C9dxWG_>h;VHt2FmkINF z&*I&V&T+T~jDXGt9#6SrOY`9_8^nAb^1VAk@eXHNjGPKbX=O6&nczqP8i>YIZvoju z1aTdDp=^nQNmR!*EhYDF_&>z1?K%}0|oUc=lztgd?rMQ;=OK3v%3rnKp32gzABh(y90@FW7x6uTic6JZB17FTLov zmo~CPuLFm034(U*laJqrr5rAh} zjQZj;Gllcn3uJ27A2QJ12K}klVqW^%2R3>$U+-q(H}w@qw}$L}>4_jOK`H@o`9NMc zR838mi0|t{a2f){$)b50+_I4lH*Lf_sc8eJtPz}+X>9D4Mm>5am6-hIgH0ugor`z; z4B};`h|^8(=r5q-ainJTVvl7@ot|nSd+ZmJjkzdalWE-x_Q%kD@gN@iNC&su)5m@p zP6HXYtKMhMq}h*ASyX%nvr9o=ItJpxjvK`e7Lqh^f{2p~30u!~k;sWVB=o_Ak(|v_ zI{T+1Oq_<|vZe}8!ptt)P|7j^Jrh1mvP*6zn)q8IZW9&V#f9k1C1QCwhtBG7@I`{& zw(MP&98u1>EEAahnDi_GZmp7+nQZ!l7AC>wP*zAda64j3!-zua-<43gVdfmc^M9u_ zmWbzNOGJgS1E34ze?mk@LX-<|e=Rc~t||5A@Dwd1ab z)6WGd!caoip}0$AzpmD$oP)YZiKeoighYnZC4v;f`<0OJ^16o)$k=j@HI@()JWTX( zw@5hq<-E5;?4GI%#9xzt#U`XUo4wgtnDSHFcQ%^rfvR5#A9P;KZkynvkr-Rpw<2>$ zabf~e+XQc@db{)6ufxninXI$wa%a_kk>QEu+)9na*1_(w4X{V$oHyLe)pXYp#b9LO z3Zmi&DWHbjAk0yla07R>lV{GGr=T}KrIDZq+TNa6a%-WTJ?VvJ{tSQ+7~)JAVux=P zPoQBJbeMAfjtn%aP9u=$g{sz#Q469WFbb)+H<2V~@d!FCHLVLBc*L`qgmJdd1MA}~ zunx-0&|!@+!1mGTW}}^>DtF#sSm;!!_Pfv3_TX$FjbHt?1`1^u?e{_SlPmdlsZ|1gzxDv^SN*vyl5y)z-(s=nDfxVm1)F{ zj=zgF4_Gd;iL~Z6GY^=HHX#Wrf(%*jt&l63s+L58-u-{ejfuCJ390#flX2*_DF{)v z1duKdSn?HTQ${tBI;wh&j*yi9zWE!sS*BLJ6r{fZzkq$qwS@fp-yNV}byiR+h;kUA zYM9nhP0SmO@n1b5)hI`B5ayoEq4_A`y|A2M*4F*^A+IsgfX2dM57dODN2vu9&fSKX z+%Phdj#q~gq9&iK(PwI7VoZVXtht2P{(Bb2+W9Q`{H!fXO@^0q%r2YYs*wonHH|zW z^`E~&LGbP78G9K5h+tJ_OTk`mCjKENF|ZFrX(ToOxd09B&(#r<3S+Af3(L7R%LED# z{LWGu|0_iw)BK`Z)-2I5qm}9zZoO! zhmI3Jx5($e5&%f(?6_j#gN&2uB^$+GP*3SQRBA zUM8?l!-)HTrSJXxMRMMDPf@NY6r>>dq7>EHNft$O;D4iQ(Z)yf%{i^o9g~L^q?<6r|00xv} zWhL?WPK0?l|cd`@qHDs<)d zFOQ}5mnb2$c^k}h8#K4;qLYiwf%Q^^|hRN0jh%h;ki_AL+~<@u}+7Fpp? zoHTwXGU!fh=M(68x01oVHaNh{5gsBxe?k{l0iV+p8NcWP7N|3DgCH@hv3US-{Gl%fppw0KV1>Cl_H1m8&aUffXl{PY zii0b~D5*OF%Tk!wByuu)k8U}N{S5o60PDWS#gN`EOe}QGA_u`ObA(8?K6a6*Vu+^w z(!)vU%`tvyRjFbJ$*g6_cx+SFFk}R_DQX!e;S-rE{Dycr6VLs0zA|`mR-LMnA?Ln0 zLVCkDG_45w$S}Q$puZ0EqB-QSgLTEWBm-i!U)aeDQF!a!<~CyHRd6FD}U;OY;xEW8(# zp8oroBBifgN}2%Mv<-Hgq;7jD=`_Q{8u3EWfr^*kAb}XNn=tD19b4a2l_{=0^&)>9 zbnx;97WPl-ZB-e&Jzh(h(PEKfBKI#4KLvs0N9|nirfF5DMUT9gr@d#|R0f1TeeqzU zy*Y$~oMmE}D{s?AMo7&z-nZSg;2Xxb>TU5rwc`6w(%V^L=TAehPQA@JLaB^FU677S z-3(Du+bqC*u}B4UyMSz$rqN?7#I2h}>?d}{(qHPv%=9ZCxKxJ}y9opP|d*kiIi!@)9jNjt_7e*)IdAEGz41dY9+u3g!X8{_SWwfiM6VNJ zYbkogewmtezfm{+XY1%94)v?+$@n~P6MgWuLpg(y?xU;ru8Ntbc9&6Y`A=@=qYIRC zSq>I!i)O?vNwr{6eLrLiT+rF#k)YxaA>oB1!|S-)qbN`?Z2BU(Nyk2A&Mvs_2rH&Y zx3E7IpLCE6VFibK^Ub+mU9&>9FUZLdoM&-gj^(JsFE@x?XV)_G9@rG-C}PwYDRP?W z7GF;)5()S*SmSxn1jVy-z6=(am!uzp^^5B%=l_Ki(`|~wzuvn@g@(rjGMPa6)NK!T z$9lI4r-RbG*hB?ka2xv)H>_V{*8mbS?fhjXUJ*w?OUh?=5Z)F1xbSg4J^E0kvT7jM z4$bL~v@vl=_6}C)M~%akNmU%biBsr#hbq%k5Z#5>vsH=6tZ|H;=1?*7UKVm<82xBI zOst;&nli}gOVo=65TF{J2i6Sg+SNp*MFV#JN0Y>I5Y~-R@Z=sF{YiJmOofO#XxSxZ zbOB#Xx!wj)71@OKrJ`;s;YVP-dm(jxy)kU(ePHK4|MO-yNEn6vKbTZiPRzSQyXl2O zwbAjo-ut$AkV!@0B;Eoo6Ln&pLxWCXJ|6yR(TOU%hBk@R&7(HRBR{ zvtq?0QcIa@bRAxjb4UnbAP~Exo?E<$Vf32sDxDqZ!APMN_u3XYSR81nIpPAMLEMrR zp*vR1W~@Jot;M1)-KrTztb)&Rre1fwUs59GLz#Fcgz%RdG^9aiSJC;3-O$lijp8)n zOD!73PQt@rz_5$3W0B*84`%XFy)I`iIY4=A20X}V=DjBVy_m*$zN{rU3~!lK!hX_a zgEp(N>NdUzcaCWqj>P)z#Og`|9|`MMZF>ktcL`1S$}ZrE=ZmI^GuX3aV&BKWimoz8 zK=G|pRrMOmN6H60_eso`G4a)uo`ROO$3a)Q_Xmc> zG`dn#ZRfp(v~z|CH+u#;jUPp@c#E-2fy43}oRh!K-o5sx=h2~AqK!#a<1J$t zGv&@VB1hUBd<|X`roP)pFylyiZH;qqGHNiM!|Nl6FYV8}Zo^IJn}t}nY?B+giQkA5 z&o`szjIJ+H_6C_#g_RAk1}{)bvr_B0Zi!?$$rk4oW zinB450)KBe=umeNgtoz$N~q8%{Ox-6ZN_>0NEDHKaTRtQNo`=2W`wlh@he1i;`YaC z@fU1U)oIBGibM>}uqJ_LVF#ANXi1jBzye_o29PLP3a$_~ykM+4*5ONMQk=%oh1OHm zUgSLbD7X7Guqc5@EA!7}Q8f7Z!EpU_OAV!~yr#zTpVDhPzTrOU~OT{w5vw=+!xnSv?Vg{*wjbRVR zz&WXTWb~yyAByDWzWt5m)MRmF)bc`lgQRx<^-ldEqRb1;@nQErQyU^5;EZ!zrc|5aJd4K z1PefeYiKmjE18hV_7frphW(=*1YbG`+Y;EWnb9q!7m{?M@KI?~7S=IOlzY>$$TqW= zSaN`ER=`l)V7uOx+KQaQTDoF2`4vm-$3)VF2-j%8`GO8Nk*MDwO+|~n=9N-4LFEAc zT9z|UJe`5hYiks%E%UR+QI>m36DGV+uJmb7Fw>4>L6P?4_0ui=%% zwq^qyo@0tMuxcQ)TRs!tp5P!rbKqO=m3;GhYNEGn%Fr*TB{vc;Mr|l)+ED52n&WyeqiDMylM;YpCjo%I-$Q zWN~deGGhpg@i*!ML_TmPVLqfmif~AD=z%<1Brt(40p#?VMhtbZ!A8xiviB-5{Imq) zDU=B*?W~&LSRgj3+SanfsBq{DuLH`n1V0R7ACvV~5!mf(Yy%MoxXBcUK}kywxS%8>&SfBVrRWoazKby_7t~|OcuqhZ z4EvCc&{NL}vtL>3n&9RgaZwRq46Ld2d|>s&5s%0X5K}(A0`F=vfvl~bFCVFc2!_Z# zDyojU44j~T=bIEUE}5c-D0o*hOuVv^WgA24he>@ZINEi?VU%{|1LUgckF@F7_mNBl zgJS>p=?2c4-l{HG?DMU|yMiJ2l~U>J7mCLm2EkHO!7xq1*hYoi{Rk_CE)6#1ai%;5 zvY*$Yob&)kN=L0A!o)aV$5{b&-HrZ~K;nRN!lWodDMKbdjBpnnDdp|Ua1WR($n|#+ zktG&nXb-%2HCbHtbkZ)DS<1#8UDal!$ZU(n$2PpK=s5Fw;I<0QhuB2B3&@DT+%}r4 zWHY1eEhC5@G%SnY{UWD+Oz;UC-cof6opA0J)Z@jZF_Q&)i#$a=1$Fph8+)0_PbbZp z?7jep%E6Lj*jG)!qT<8XEH)yP7l5TE2OExUkP-|usDEP&S>6{|2CN&ZcciHi7#Oi~ zI>GmZ^Oe+X5)2LmSkOsLq|Vk%~ju5#oKtYD!pxq0M=p|(~n z_0ab=y7Qu1CB1_o-(#B$1o@w^En5jEeg6!U!vvy*XSVJ*C53mz6CSmmu;*LSir{9K zirwg}Z;mpzrRrlgOFa6PKf5>YDZx8CR|bQo5{+$|N=C8bJ6`CD7i@Udx}3Ll#Vf#n zZbn3EeYrvx+0oNvuT;!XKiJlB?fYrB&nQH9NP}%Tx@7jPQKZd+3Ui>{HjD^@0WHK4 z*<=~$dV>fo^}bjd;;<>8dH;gw4hqvXJBxOfiut0z<`Uc%4dx-G!W2CosoH_wWsu_x z@#(tL=X#G{r*EYZ$fF?WSh|@6jpsRX@|Gtl9E>HITYP4>i62%rWZ1$E$)+jJOPbWT zU6kMHTVztC!r>y-tQ3WXBDb4lo@YXn$vHc5D0eWxN69F!R48Fb^Zo5!r? zq7F_qGF%i6I?N2@oY&2A6St@as|psw4q{YHiaUdq>edOA)NiJ3B{VY~0RiQtdyqHl$aF>yfyYtv51$Y@u1CVp-6PSaj_Y17>oR*WZwRp+I4d-wDfpU7j zvuV|0e7j0pq$#}!d8@_H{R$!O7xV%WM(D*FnPn`=$R`1pnX+^=oDsrI|6NLyj5dLV zbkwkLK%#WiOJU^F9~Rg9D*e`4%>8*2N=c$MfQMm^_jQWy~fRxQYY(+G}-d6z?Q*@s%0IN>@_SFNLE!RI*xf}>FbM@1FmC35YFkVry}sHxvgKDJ-F8cxacJ{4rInPYkoA;pZC2}E#O zN8Y@b&Ff|NfE5y7O8iBKA{&v-ogE0w2T%J6>sXx344HO~s`gv!&@(Q*?5Pe`M!J?n z>%qcLJ!kO>*5OBADg&ZsND9&XO9Ch6k1t2bun~f>;t-M6z-2#y5HFSiB{~@PzBnSO z;Sx_Wqv9AF>`Z3eHfz)r1!z(_#cxrk$THGBCIjX;m?+D*_KNxAi)2sKvyK~s#btII zRmo(xT{X{cBOh%*l2Of`7~)|#&7W9B)d&k8Sz<|f|W25+u)4J3(j(}doqu<4=Po(R#XNM!S02J_J3gv z&XR9?MIKf$i1akfrUka!JDj32Xr^C(eCrcPe}1YeEspPgt%^mJxdu)#8F_?#+2<3( zcgpHT_k7j;+ebmf7F+?AlQ&8!tZ&y|5BYfN0?V3ugTG*z^i#XdmM`oBOo#%5jEsbA zPNrZD4~EqUTk!}uJ>f_g2DYLX1gB~Ot{8Es2J`H@XRkEoTFsX)nYOS1su4beI)z1pn(uMNRpNAT_C0W+_RzhoO|2 zg&00eWR-Ln5BYDtAh^xvrL=>@w7f~F$-v7*E(q7yVAeC(wu^+LU7_|%^;BJyI2r;E zrQTR7ei+M;UjRmTK^vM3CPY*GA3^5@5q*rwLOP?V`qJd5Cn}$B+|nF&aRPg zfs;&NHd#GbFqMqPHe}Bu@o*$LSZW3-`r8t*7{LFg(E1j(Iio-;Golc7&o`0wQ2XLQ zi=bE3?^bNbpnuN(jp20P)-fzdq;^Q1#;yXbre{4H1zRHQuD^;7_Sq4#uK6Ri;u!(x ztGp_K6>YV*%qTb1In6EW0j!L?8%E9S4ILDsm7Ke%hJ!MF6n| z6a?bWM?e)SMp;1=xV*wZnQhyrssS^gt+ROl{vP6PGXQ^R3lX^(n4^ZeV7txR!Lmuj zzm9<#4v^l@#cWZK!Q5yNxy@MgmSWC$8+EXWm2z!KC0ETlO`Q~pp`GR)?2D&i3Beh# z1~&g{<|%7O4hY3dnViSMPL#?(_L0LN*t{a;9~qem1v6g^iE%9S?r4f|B=jR8&@UiA z1j401oOQ58gQ*h?+wZsFgrZI4ozhxiS-E?>E{;m&Q zI?Bw*j}=lIN`oCX=rYiPY?X{Fwz(TWZv`u0zKi~=e#F326 zSH&AR;NYORuQ+^4TJw;w@3xbqhlIiRYX%pfUhPE;f&gy2oC>IBv@l8P-CC{6`&v9D z3JR->*a3}rdPr>2Bv-Pq?Lm8?XOap~)lazH=EmSLxt}lM6ts31gKAht0qTHa`wK)W zd(J9Qzao%IiKD*TIY8Rd^Vu^N{&wnQaM=u}?ZnnU5l;|e>liW(J1xs(AzV_J&}O~u z!Y#$QD%M@(U?&Ig&LqbSWYri$aDP2zT0;&yZEbbZPNtlL3?HXaxyCX<`t-YO5Ev8Bn|0o#=h zv3>dvPH0?LsEjb`Aix8brHjY5#y zSAwl?I)+y>th6!l;3l&x?A`^9>Px5(^27XNCRWjyi{bE(;C;)D6k|{t)`;(*7o^3! zPHkIB`bky~X{u-q7W*@gRg%u4Q(JF=NmjT8zC#Wg6wDq&AWiBcgy~Chtho3ZBUOt! z*>y(pP_+CXS??YfRki*BcQfmlQF%_JrjwO%I%Z?Xi1Na&EUid6olaU(?b1`$k8CP` zM2hT{noNH#Fc06fiSjy>VVXwieTidzeL(q}y>Hysrpf5*+voY}OA<^-xw ziu~{k43j(N2I8o;Df{IMq8m6A;7s6@T3B|*+a_B82>A zKO9B7IQFa9zK@0T?x6MZK5XI3xQ}(1S@Z;(+ILJOuVc;!px}1zdHSF?g?0hsp3o-> z;mlS$ncZm4n^}2LcohbEYZP$g8-+QG{+5e9S!^gm9kFw8V^-$9bR08E`j3hf5b0jv zrZX#>7j32o-PY(<0MRKdt*fU2D@wiOo{eMKs0>3X1tH8(MlfIWBz%}C7L3M}XM4rXJG@ds_TaZ!t7+Q>uXYHrWJ1OEfATZ> zYz7^Wuz|k!CgF(cJ1Dzm`$-q7(ipC50XNE|GU1#OGh?y;xX20w~*f6zdqmkzO5w?s#MRM!L3F?owjw@wM&Bd#LKxl>Y%l1jgP_YrYQw z;{C~_gwLOcNV1wBM~UuC#dk|(_>H=koT3;=SHSC7xL+~0i0x!Au}_M=BAmav$w9?| z#?#nu*Q?xU$K3%CA7acyD(Wd(^&vM_;cG%Eb_0IXuf%?2m@=}9ptVpnFs0MoD>2x( zm|?228%kn^yC#R9aT)XYd?b|p?k36_#X%un<*E_+QJ0Zm%_oiWJ>L_12mZy*-2Xde zDWeX#vDaAEgLAdOKGDT z%G}>TQ_-q$x9D@RWNAmyHNlkF0kW3|l~@LDy(j64S7+LG86^FWg*8%gVo()yrv4XZ ztS1Ey>s5Y8Mw7`=q7}iMX(>n+-A z(MQqoV-;TPAi1Fo&<7OyUot&5QEC=V$M(nOFyp)@Rs!2}9Lc+w0Nn;XtcB!{Ut)(~ zAigB_dG)*sjrBGoPMUV+ z_1jhC2!k%Y!al=KqlDzOn)IFupfs`P`7*d9&tdUdrp1hTGgW&8t#Y2C(mlD+xQROe zDdwAycp(8L)*O~;zh{3Mv1b?x9mtT3O#U>jvZ9|+b{osYiXbgW8mMHe7oaHkogW|T zkjwCVCzWQ|K5P-#PY#7j#OQakPjF)+J%!D%me8tbSnlw=XwBzmWq%(0g2{H+i$gb& zhllbjRili1#da~4%;wtt2VGDaEb*_$*3(L>jI3iubx6)v4USwj0xs#)8zHQ9%XaHBcS92(~!v+!aqW65Ue?UuOcX%C&t|FN+Hp zcz95(D0NxFmDoJ&P&)q^RS>R_;`o+KHy2B_NNXVmde6>$Vj?dG<^bh8pmq_Y4e`p= zMi1Y}eUKX@oJP`vYOL8BhYQ7K`QjU#Y28L^XBhng%vf0MD*Q^5O4WJHkV&zC9D0gW zP#+z6$8)7NvdcM)LqzwgEN65AIwvLx6(vu<`xJN^o?FwXWZ z`cIVGO04^$2y&AS0vtY{J!bSnzes(*TF51r#QBJ`;cEr6pSR}Y5AN}+i5p}1 zX|WsmVty$Y5-2xmR(sQV){jtkUMbpbPf=k2wjq~4`VD&y^4o7m6{{%b{Qh8Rrd*>50~n&YruoA`CVR$wL=6W%pudQWPaOX-SspwW?imOeuvE0@hQj` zpAg&Uu{r#>Z1*V3Atq;NkQ%<5p}Ri$!5S`E*({mVdLe_WI65D$(yTh168Nb5;OS6@ zofXR56n8o^zaiZm?Dy%gT>0FX0pofxo0(Dx{C$q2{=2HrV^i=sMFm!Po?XYI@{&j< zd%a+PG-}o1l!6fiHmpzFPPf5zAH&1(z^*~FirLSiwUuT}Ag~ALQtYhwE7ydH1Y?2+ z;@N!*?mL|L>i8*Aelmx#Eux9maw+p`a=g;PLjJRp)Rr1brr}GHYTeJJ)$}@V;y=r{ zqsJ>Dy642VV!lc}ne0vrDhNK-(=K-v`K($WCdncUYjVScUd^#XtBhtMM>&ZZPs7sb ziTha=Tus(WuJTxYkxDZ@qL9lFoiDF>bo)v%=rU(?9uTee*lzm}n%xB3QIr`q8x~YN zs5cPHqldp2gKdrpsy$p_!=wYfvcA~v*G#{IhhL>#1WI~@kZOeMNUhpaxPBAwD%9*{ ziL|Rim{Vy&&7V_>u}nAfa31`;dM%Q}mbnNNMPX4ZCIv-w*#l$tgYXbr7O6N83;$OP zHe=XGIM>*%C(k15&OZ(!=vEi|x9;8l*U&kL}poA3q#J> zOQb{A9~pduZIwf^X7yv(#VmWPuoLIHKiN*Mr+1U+1j9G<58t7UnsM`5PrDr3ReKBG zghanW&GU+}11s5^UPM`!YKt)72(-XNWNoTli+jceHB#28+Hr^Fv>4pU!UEt6T-`$a z9|$)fMhY94ae2u3-sj|^{D4Bwz0LN}uBrC0ZD$>jjfV_{Ahe3Z2BBg6gs2so$>Ayur5NIVhzV1Yl*BPq_}pGiMlL)K@NJ25mN0$dzjRS4}fQhQIm(opw>kX zL!P06HpdU-Dq-^%ajFviYGPZb9e=Wu9IT1|oikMR z;`%%+%9j1n(N?8{r_qRLXQuKc{*_z*;qJ$Ymdf&^1JqDHx0fP7;K;`&^Q~fV zQOp_GnHu-5lCiIVkPx<=N=oRJ>1h^TkBz7PR;+!m4H@F@0HzTft_SvhQO zP{0a2X!N`Ac|%R50wIi%Og7rSA}mP_Hi79~GH+MRX0Yu}v9OOBq+5Of$MN@cX@|%) zmOR;1z^Arf{=@GY5>nJ)<{jkH!ZsyVEa-j2rcvcA4#86wY>g+ULHq8c2nK>qoQ1!A zzmP*4#3S?oqP^t-H=EDFjT3vaIfkOvpp=wv?G^uuAR-+sEM5pHXckuv8kCfqZ5M46 z{F$the6&1Tv6j_~KDU*OFZ>r<_K1q0t_yx>uIpYF=38L#teTDk!FnchFWZU`LVTFm zORzA|f=742Ch7e`GsDUg6YRv0%(qN3vq>%KaeRu&68>z- zCXnwaduXYaJ(eGqxdy`K@51e*4|9{Z@}sg|!>@i_|F;Fx2WFpJPwK2FYX4-xc5=bJ zLHphh+yNBNYW{Xl>VPgsO(98UX{m~TbG!}runJ6W5nUQu?7soLY z4Mjaj`m80m^4SM?0^EeKci09ri8UOsEOWT=3KlAq$s8PpWOPd|1lWsH8+F2+Zf;RK z6)sA(tH_ow0gzU=#N$~+$mzd{a6d^D5K=q6JrBThtTw zcmCl@E{qDGuJwsNq5O}3L{DX}Rdi1G;phzIl?jVRlrg1CACE--q@lllhmc^o96l<^ZDU5zT6;jDN^4JC19fBbBLr z!aI}5A<;L4kH-ia(U*j)K|IlE@+3PMVeu*x?p2CW&Ze=nWw8QM#_Jx|Tcp8`gDq^~ z&|r#QE{QDdCANz;e!_3qOnYSz{gSTja-n>39{+k3oa*^Q`Id7_-{SGv4+!)wiGS2Y zsZ4mBnhT@pWR(h73mzXeT>}|#>HA2(VV03Hb@ia>(Nqq&8?Ot)a=z*6k-PamNVr)} zibbEJoqmN1PsPaP!-k@DP&s=%elhRjj$h;Ru?8&&1)C{=9}f&vf)03jMn4Ctsl_tw zO?;;nUQ{2Gszo2Lla#ZiVJiAovv7J#e1GBE8wYgf$<`>>MV`&dw=pH4U?fPC50|jE zF57$UUWl&IIjB4?@x`Cd=85iNSDay#>F+T>qi7zuFUs_c!hk?U>Q6q*&p9RVF06%4gyOjNyK6WF3v~bF4UM{V$ zCz#2CU0(SLH=r608R{R5aV;ImN_JmJT5$krp=2#&>(>{^f2N05nF$F)56 zX{Cwa<+xq7wII_f$h0lY1sKj6PFfr}_~)fo(KpL-ad)c?1u->!gfD~HEie-29;md+*|mdk zJ^2^^^}m?8+$h{e{L9YP0Pkp|-(4Ar<2oVdH!E_%bk4Ji-oljM`Ft`TA7ty}9ZWJG z{PLeyM0%pe9*xaM%6Q|=tvneZw*BT{eyE_sx&4Z=I(t5OpJlxj8-E}QUn2clYV1+- z-YE(w!9x^&!PlY>VPvQCA1sG9KE{m;*OBBvVtW88ApIQu_aju3!-+lO=4O>EMop)4 zR};FgWrXB(sIGqu-pp;rSflt;@2%>JZP*YMu+_)haEF{HmOu^tOgHTx`X_7zT<3pG z;^qAVBJd4;-t~>$wDDVMX#WGed~86xVRy-h=rQrbQ+1?F^NAn+*(sG_=O6RKNe-h+ z-mvFWAze@F`G55{2>0RXEOTCPpo6T8}q ztoeKc8?r676N8)NytuUP`0^A7PGEFPxlj|JoyhZ(_ioZgLB z{rPykJCZpa0PH;G8_<36(;Swk@y56Rh2LEQ}Fvg}q{WOy=|1`3H;!Qsyv+x7=*^ z(nbUU_McHAZ~^%y!B(~&6Q|80RZt(0qub^eouZRw5y0Z5@q83qXQLwK+_Dh`T}HBW zTgn6iMYGr*wl|PCxLHWVq)BDuac&%P@DT#K&djIHuDgi+b>S?y(~-;qM1Wfw8{)du z$;+Rx`^8<9eGExF53f^fFPhF4AvnTegTpEs3*nQ8cZU&1@1?!fY%8o#Y<7pNw(TY1 zY6gKp0G6s>RP8;KK~0C{Jb0)BFgb>@#PGTBF)7T4Xry&{#KBLi=+RP1zh0hVU&Ohh zoysz+7@kMZUhc1EKO!pt&-XhoQygY9HtM2h17#sED|DDsVWvLf#$>60p5H4@(5FIG zJ;{w(sb;}C+N}TEUVBu4aakNlT;db(y^E}(9xv%pM%j(X zpbfOoLLHo)z~@8a?Hve>tUOXyZ77qO?`x!-_dj5$QXCF90Nre92HvUVDB}Joi_>7aMxo`RQ1ee4)(^vw1%tt7$(Y8VN!i z?~Y?Bf!8b_$14#zf>E^EvyQYWXZQ=)pNrAcX>6zH`;c!xJrKSBF}4x#OrzFskL6$$ z$T%14Sym`#d3Yi3lEZf-lQHAr^oF%RLWMrH{q+DWoyuOQ6&D?)P?FcgLG4j4sSsIH zB=YQZ13vD1pIK0YTIe$?%g$N8(Hcq{8wvrHm^sS@y-+F>Cz3rypwQ2!b%n*0eS?4q zehM(Sd-ZfuW(E>7x`4J$`CdJsC-Wd|e%v1NIFhuNOk4-Z)L3Efo{iEWpZ7arKN(Q5 zA`|!!N3ifo)-C$zXPUICBZ{D;R)lqY!XEY-}pTioLx-7B`MLGSiWbPON= zd6=^KE~tOKeg<9jD9TOxE@x@?11Bwa4~P#V1)xZ8 z4*Eb{vR!?eB7jwla(*AII!l%`HJJXmR3e%g^dB$XIx`j~eXgLmt{pbAPk13tX-tWg z^X2xirW5cgSqh-n&EFg;w9jDfM7VT)d2Ekp(%b|Hs zoqyhuVwIEU`NKa(;Y14c^wT~Y{i<`ZVCU7CB7H-~rCFo-nNq+R#VQCu2=HCOV(ZKV zd$%=Rv(CVs1Q=;-QG;01Zq)l+e{uKXy1fGDyB?X8%qD5Ixj zdkBZNzY^;a&auzXuxy(>+0Pd9GAztv{MR#_Z z2V7G4GN0~HZH3**hTSl*TUsT?GWqoZD6CWKsemEHY(z-DcvL`iJ<>?*3E(If`o!Nb zWIB^;aDa|Nl-fnJ?%6xjZ-5_Y1C+nqZ9RQOCj#DvZPqa4Lw1putA4~jo!vic@{dS% zB^rqxuVG&J810z&>E~!$zUTjvZ+LDRiSNCRUn0(>o47F{>>N1RDBCj9R2N;QvtFc6 zvIXMX_zT)6))waC$?)vsA~{#Mn4h6#0J_80NK8&4f5X}S_p{gWQco~^|R@5KIo~&Ugndpcb<Hx%(Oxr-E{Pn6o#p;)5(=*?6X=P;GZoNz$D7`4EP0jXjBAQBi z|8zE-zklw)@f_`_>;7=78FAeoY&Abp2X1}OH8vD&c!<1mLjBu&TH;d8Zly1`ABYaM z)?{i2+-$f^`nn4zoe?(Vu5nmrTo*;cT`??1DdNTRDKQO|TD!<085b!*h&WekdCgsyibX(!sa43 z?(3-#@a4#Ekk2d488~!xqg5by@p{gLF2DUHXn${iIOu;2Ad8-29U^`I;>!X$F-Eh` zXavccW;c)0HU}=e(okx=1P!0yf5cf$(~bUgT-nMQ${{yS>REB@gXrgIc~ z-HFWQt1q+DF1TW6c*$zaqNsQKGx_|&;TzP8DaK^dmwr)9AO-NPDi?9XB!}>fO?TAf zI0ZgN+JR))n_<~SSOpk1X#Q5+E2=wae4W4_h#UAKNkX2rM(U%D50A8G5-3J(=_DYC zCLJ(LA8z;YFRd|d0aKTMh8{4VWJW1KM8Cq|Fp*+rWJrAi)T>JnSOJS*{Q>Bu8$J!U zgOhjZON~R4Hr9;XPV8S@+zlWZ2JGNjQ{|cb-C2QF$3UNIrr=ik z)U=Ejm*;?9G=n0L8`kt0Tp)IN%=wZH`T_sUdNj4q4Iq05)SRC4o5=e-pga+rMc<2n zeJ(a*U68e6$X1J(;tAdvhp*xKph?hCYa}AE7Aq`?J6&nkc&P=h4WB8r@o+^@e0VRp zptQzQ1jKi-&@6yMQ~@-!*~Oou^>iT9Wmg6iN+OB&%(!08n-i1ObG_LNBshf8{8_jH zb#ZY-^%jyj9}VRgdQHBDnE~G0hvUC~)4i1lg()Or*VDSM(7u+9LOp7`D;Q-nd7W%` z_X4(Z4SVb2AuQtui}D729dbTfDzZ!g(dk;GeC?dm@ocsnE2oRO;l{0m73m0hd1o)d9s!w(LL;GI zYD=`0vrH$tSB2%=&I3_`!}cBCgBaGg=D_K(OW)Jrbk@1M55OIqLRLpx(bUZv-kL)} zInQ1O)|uGth|FgOtrPmn;n0+jBboYWYYN|{{9VstljT>?TQxfNZrUaXCmcZ6M-dG@ z9_^|Sc?z3NO4Q>lTx@|IBu@rw?4`Aj!hz^^ZG_7wZ29~D(j#&(id&BD5javZQVIDN z_=luENKw4pjZAQtZj0?6D~l!D{f=b}%8+)-LCu%Vugr~R*i-n%II}d{i&<2e|4Jh~ z7*xAb*kW8I0tDAkQ4>ZIZkFTff6~l)lehu*H4_`_(ve;L`i$H;UD`sJP{7E?JiFP=q z=rFBn>=(@6Aq(mGj-5hspkIH+4rB^+9xH6rT2&?$I)6rmj%QoFyoy&aI0VDDJPu{@=URlKY z#BO&3y{=C}6E!95JbZi+t>e3{gEABy`6vo}^;4KB(Q+T@<7t+-*m*e#n&z8c?H7ZAIt8SId$og|%d zy@k6?CzZt;(FhgN0DOi&Gw4X&M^+5JITb0hBgF1E5?_6V`96Vqf+vwj&MQ`OzPL!N zY+w3UsRV9na3G>A-A-2I922`A;Hx)QAeH|u&K=<9-v3}%=e!h{_B+nV%lw#B+ok9Q z?BStUb?XK4<%7B@g1yiR5vvn#2iZ&R2P1i(bz}#6Vp#2iVYIMwFpQp%o3Mf4%`3^C z(Po9%odWb50NLWO^An&&!C@WFv3+4VSm6_I>T|NJnYilCMN&yFOZy6hoh)_>JPI&w zAN|!x04h*HLD5uRv?o%(BjmH-I*=z+phb0>T?E^OSiuFGF#&b+MUN+(+X*K{U&a2e z_j4(0Cb6^QV3?sIoqPfp603=mKf`KxH2)HmmM@9DR_2x%Ot7=Y1_v{26$hBvQ&CD* zFOLp{vD<|@noiRv(22n?k2-L~ky(cS(+>8_1sQ4VFO)?gg#i6&Lc*Qi`W%R2G1;wWbjSprF%szf13up_3n)%Nxf5C1yiUhmVSOGsQcHhIt?++zGQTWt1TjLDLqqI(i7i3|?nH(&{xvG-=!$?3d z3iyV>vpJS^5dUcYI&LxZYzy|1(_8m)uBtco3sn2(qv4%`MA)nH0e{HCj=)n z$uACE!o6zD3myM0RdS<=YzmF4Nz<+I^q}hzVkZ*13K-rLep1y?-iKp95KSXQ%_h+f zr=2D3CYKD7=!w5YWhr`%RMO2qwZZ~K1~NR$zU^dy$KEuGt-nB(1q;D-z;rf;T?MEr zID-G+Llft$R{QC1^JqlTbM*@0U(~E+BfkW)KHUl@0U8|2!&B|OCspClpz@~C18VUX zH(N_iszg7aVhE{^l;}c|YCA(MDpdG0d_U~hat*XJ51TR-MF|_N$|J4-UJzs~nt3IS zVvV3gy!5ZO9n(w^JU|8N%FYk8M6?QHHfx0l8AToPP^v}OQ?BUP%XT%|Ci@exJ{ko? z_aa5&Pj)olms~mLNXoo@4iJcE4A8~*xbRjz3Oa`iyq(&M9+<3FiDJz zBjYXrGb#~4Jp!fqycz4~C$vVDqr$?X8|ZamD+v-C5s!-AJ8v~$VZ?S?E&e*4H_0<7 z8+FH$1?=IjjzV)b1HhCWVfAVUMSF{mRyt5@r9f0{;VmuHO8v!_ht^#iM;Au%o+xiu zJBX1rmM46h$8`n#@>y1#xI_acA7O`^!J}-{q7;fhpW*0BV1D_jHO1i*GpGu@U6e}3 z*uD=c%~xn0Fd4HUn_g5N01^x;YYi!xj1YLcCP8pP9c>`Od=W|kPlx^S6hr@3sRmec zludD=w1W8DU(xxtPu>-k;I2$Y;w4?Pp>Y$y(Ck(7ByX;)#n75VnRB&6-M~CI7jeY{AAfTG$+~{s-?8o@lliAcz^wO}r zrqUFk%%4N9ueSoQm!1u|+K4w{<`2I#TeaQrZ2+;a3bn)?AEdm5FK`}298LOcx~0aC zqTsh|^lIwJMwUl|sItyjen;**1I2gHei&l==Y~bJ*Jb!vJH2dBJ8AdZU#lUHnZ@^t z@3-77D%m10UK{Wr)^vRU|BHmxc~y9neP@zUEPYP)DN1`Jw1qfbgQ zt3^_Es-4AOuzf-GVkv1*!Nl-}aN3%%M}9F%5mLo^6&4~oVleA(GA!5p1#RSRk)wKU_-Bh|LXYh8~=Cra@{B4&rL-6P5k>2O7iTeax$I0%%bieI0NTW&}`;-7islyhOQg{ zG&>484yJ+(Fq#C&Tc((~CS9^ers}g_ja|_fKPHLjThcG@u}7b8rURE&+AVtX^&Z}` z&mPO!TQ|CHbMvuh1D76pAR_SzKiNmWG0lASgcbi}XI~QCwBS6lNkiXWk6}pT{t91Z zlyJoTZ|kVzHy3CrN8N3?fug09myLZ=pO>l+y>gjeJv6mCBXD$59bX_jQ8@VH;B}Mp zHd7~AJaf%RE4*Ym%V;9A)1YnxiSKbX_UuW1m@Ar{4Ll_mZ9PpS(lV{Ft(pwC^vnSl z=@S>;V0S1ZUwb`u=#Mj0hLuY8=!as>!ZvC*snEQu$?qP&L1Z|dj+t#+Tc!d+?|MKPZ6`A^TCZcjIE4va%j1%p9*CtiGyQvZMcwXK-cPBRYFB#{&Q%xL-rEAz~68mZgY z<{4;CJx={+t;|&2^wuKpN>&nHRCh?NeXn!9sG7DXI-g~n4G10SEdSaMUVd%HbwB5B zNoPKovA69%VQOU0Ws`);Uy`;9;v*CWvA{p%t7q;i@g^bUEIk|epl$!YNpDGjccY!@ zyAtg?w?pT^ei2{^XGJ<=;r`>_cqC0WX>q*yw(7B;72AoW)RG zT=7#a#PhcbzWrgd{HinbsC(FO(r_7P@4cL=mxrQiUi0!}_ve3=mb1b+QTy{ReGQlW zYju+D``aBS|9QsRHe{K#lG$0{F+aL^thFYdH})-^SYLG@JY9pRyd9I;q$0BViIEw_VGbkkpdSf*+ZO^9GV`^m|b% zc~@13^Ukv#(pcqL?&@|$-r7Wn!*!*(BUbdMpzJrU=%P<=CI!o{{(-+Q=+69sC_;Z! z3$7RQ$8kd_NWX5MHRXSr9)0nH<|F_7O}k;(Pu|)8dyd@tR!6Y%${w?uhSS?c|1UdL zwX<~JaFW_ZvUOFu`JOBGYHh=&JMQ_n-m#h6=}G;~sh>B`n$GCM!#_%C(dfGmKCT}w z-Ih6GM=R~IrDA`i`L~;1`TfHyYN;^#G<&1na^P_O52oAKoX9M!HH*h{#oY9ZC4&O^%`jHyjoaR29*_R- zp6u84$z!gm?Ixp0AQ9>7DK&~%<+iFZ@T8}zBk$4CHQi*0hwoO;2kF}Ca7y4O_O0h8 zMXkAxeW!g8gp`9%1WvE3*tF^HD!u%7fIa&T^h7vXTa%Zs z;z@kM4InW7GV6yEd9S(l)WnMZ-aTI8CFmXblwP|$r#OAhEsxFZ_AD|UyRoI{dv?>K zW^TUP^78$8<145C?VijV`dG^w<%N2%)Y><&=HC-9X;T`HfAwJO^NiH)O~S!X>3Q#w zb?nb%+s1Qw50H$YCt!L%Z;Lu6eIR_AQMd1v#>_h@zuv>1Pt^~Q8J0ON;z>UgEq^4S zX`Qw8=C`?5UGdS=#`MUJjpOF@)8@k0r1p7T;wo?7_*XuhOWyg&%Rj$?4s+T&t)t=# z+dI`~7qlLnNbg=!BUkU`KHoHaMJ?rvE&2G@kJ)OqielP*r=#Qp;j{4fWGms>KPA4l zPn@;KDBNfBUpSkhK8loC#cRRl+{DGH#@&;ejJqps^`^`A51!m&$GMER?rI}l%g`O? zmaY!6y3InVd(y2#PQF-a(0j+c zuNL9@vDf9^y=|LmD~%(2B|vSXh?bru@TnNzapUG8&(&U(-*|#nR-YgEXz3%~%?pHs zF`oKlaO9!HinHEF$*Xv3+RBg`&c# z_ZCw`G1}g>8@Je#o8ILQs8@dAnAEkvL9Q7_Kh z(3q>f$X~EFEjRN5Z#?n8h+Lj`8{Uzgy~z^qyPM3ofILbvx=e5v!0tCgyduOgAp1s} zPZ)gbENbXFwSi_n1^Elqm*NU4*w$yq(?h)fBt=$Y9M3`H#(GM?e;{Q=XJi=9OrVBEbtt zU4bX!pDM2^=kFmnvvWbfwm8aIOfrjKtB6by;u#t8_VzKqrlY7P>_|G3p@b@>RBPJ1c|jP zkH}dv8!oNSToWA1=gSueQ+Oe%eccxA`A8K#Q?KDCm?UFm(jw@Jk#~V&v~tDBGx1&j zbDNIhVeTJoyQh6jw$5Df90MhXP^OT*WNWi^^!6*&9fa6jz>diJE)`M!8-^u(xhe4| zFg2^;Y+|bs4}`ZgC(^1C1KrusTw^|u$XT9!yqIH;UR?4RPknRS30hj4Zg-_`Iph84 z4Ba5X9|G%YNH}0A&!Q%*cZnWBHO|urvX~NkF_^$WgeVZc(3^>k@aeC`q-fyzlz2Ge zm^?TBpRc^*PStm8CGH$RZ$Y(aoK<;v4{va#wtER$BttPw-; ztfo|~29WI@o_GL+&@OS|Ny(qVYH5|DvC^1G6r>0<0p)ZccAocRt!rtw!pvUrL>o>{ zJE;-YGP|Z%Mb~eaH8FljkWqNou$1Tdfsm<{W2u@!7I9RcHA}J0?J}>1EdF8$rQTqe zKQeKi4-6mcg{ALGZqXd-!-W{TQGI84#@)HYk9g{ts)cvPR9xqb^K9C#<8j8WY@xZ;Teo#2jA^e;xqbo{?;$RR5`9bofVpgFAG<2=3&K1wRN<_L)2Ot*?UR=jVkNjpT%$n zUwnKt8ST9&+L=6GW58KtR?a7*)eBm6_JvnYBJY)0_W}OOeb*-cEY=#5$e1N{_-pxF zZmLEhOa6GbYI#=NMfGGTonYY?_wkTC`~ky5W@BCv-%7f|NS28B&`O`mJh}&I+f`>c zEMI&t`)SfC*pyd z3zc`9@Eef8PXxU>g!;3@BHDt&V5&P=zZ}JGdnEr+0N!Abn? zIcPg#X&-ZYGVu%OQqoDm-0Z`q`84d^QX?vKrL%7*AlSNvSUa!sNWv>#%@YruN$^& zT#N_ggIhPO8 zQA>IM8um_C2QrLSJ?)UUZz5gEq0?@b#=5|SfIYl8l+?Qh)VEE3QHd>)u6{M>ij5~; zErtsvkyYe;HJi#hWB`l3VxWj`B4cV;A@<;yb6<2SPH7b~YS&7o*h0iHM>YRc;A}qC zeGyr#(e_EVRl$wQQWgL=v!H5HX9&tp|c%$0u#{LAvV?PE4c00@xd|wwRLkq@|QgOtRKmE<_`=)ay z4MKWJa{1YvFMh0EadTh@+yLvJmMPi>xx_ZT)=BfLe1=|oDjJO~VS_FAlI@(T8!w1= zTt$AX-8uSO)<|pj}KdFXx}A`>xw(W<40h8Pt>5FY5VhJs-GUZ^9Kvc7{YqT%?cYWbQ;8V@A!1BnO2F9@KkK}JLnB> zCXcnYqGhJN8RkJMSonQCzd0AAiz@nv+q%i0nyP!Gf=nZlVkFlGQcV2t7|Dgbsx1z4 z-)zl~b@=7g=@RI5)zSe6#NsE>6!kDj2(k52A3>|H20RopK-_&irj%CV0U>)n9yZ|% zV=7b-bN8sUUtxamI zz-yoB=@j8FT~y5BQUS>qcr+H|9|~NKt>n=vK#LC&_({)I-gSI&8oBZZnf z6YHP#keBu-L+&6=@~|h_f5pVjRu;W`z$*R^(0V0S5o@M}gy%^u6w6l{TTj+D^R%-} zG_$r`Yc@qXz$jA3e$;4?QJkKk4RamJWA}WmtXq+e_;RV$6AP zLaW_8-O@Q;Ve%d_*^`fpZqz`;A}MCLK7O~CGi1_tL~*0Dv|iLc#0R!jX%XM$!7`CA z>WS9N99DWNJeG%eKR0fw!Ti|jlUgCMg^!p$9SElZp` zU}g-0hRQkIAeY;w$qX{VHizQPMB7ZVjePaP?_T+aB~@K0f^#-{VVF#s3lHg%Z=gUg zc@|Q9>32qfbooo+V*AQpE_lr01N~ZP^tqN$$}bgQPQRb+kuKjq^?Y`AtR+{9zOUvU z*D4_xIR-j1uBU6;tl8IeyB6M05)bL-O?ATIx7a;vg6a2sPS&bM(M@$UG8*Fv8eNwh zvvTOAe?>;<$}f)d!;|1DUy^Dy+%VAL-iXmG&P&tTqgThe@%Def(Rsr_S~8 zO>8Da&0!Su*HaE2)ioQeg2;n2-sJMzCdqH+IrRDg%Zo$uvB0$$3b8&&KIK}Oen!3G z^B@k)NY;^H%s$bTV9tKf!?+zj2D|pw85I_<1erP^P zNuT@~e){CM^BA}(*0@j~qQj&U6#pSw#cL7v0EK@+YKtlF)l!09emm4sXoJUiB~rcP z43D0S4lmI}cr#tqNoN_Fo#c=Lx`NpUq=MaQNI-7@=gC72;s|#-nY}y}Rfx^v1iQAB z4mNO-X_Iiwjmkii8qI9S*{%-dA(L<5_HKkYQH5udViHo0bn_m$1|*sIwd9lTy`tu| z!@Nq3WZT18#z{S1koDQjP$DE06&9G1$S0A20}fwTA-X`X=l10>wYTv4)LsWXoFly= ze(vp!dpjS8;^9yc5+HLVbg{UYZOHA_Txtlpk_C5AB%okWLo9 z6n3*Js>pBiY>t=bbdgv6qAP6nKwqJK2aOaWJ$a}wsG%n+?qx>YV@f$h>4bQg{i>xo z(01>Lr3rYb#;bvhzuy5#I?UM&Xb3!vqJQzAq2Mhn>V&|K(=AUITJJf`K7Ll@*|8zn zJt_$&T94A{@jrWCUC}&1o3!6H15dq&n+eEn-~k2KG4vXEVUE;-6nZRsslAXh?Ndl) zlQsYq!dtX~L^O=Qm>tVQKU90FRSo1WJe6&|v(SH=lnorJZ7f25+;RRNH=g{ip24CC zxFp~L4m_Ywta5tc=IF@y+i1{-?)SZy{&e0k<%)UML+*R7K*GR4*iybuef!-HTwp1U zfGSQpn}~~>cEm%QpI*K#b>TE!r9I8>2MbHuf@(N=Uc&3xc+N(A(u{yhFlioapWhZ~0iB#9sH=#k;qPNn}MiK2KFZuu7acuIw z>HqJw4E0ljYx%!RvYtD;joZ`lMeqNA#U`1(@unB|j|~SBHiPs}$CT0ASc)AS(6pnt z(9b`8{^_|ILfcGhR8c5+r@eo>n_h1(pCu&pbSK-^DhcT+C3Y#^K>%+g&o}hRm|p#r zn|>hOI^9h3uV>Mr=N-ev|##Y!^{ohHUSGZZ!mZ7d_;<&!|PC zs28nQ0R$XVFB&Q4ZDg;|mSQ3qL3&e67jhDvDa|@sVFWLx5VM$HPj$Cl%(JMj`T+w` zU5FNQmFli&hP6@!f$PWt^i#^Pdg&2$Aj4{)M+hDkp{-H|n?pMfy7U~rsYVTW5dmT# z>u5e#HOizy^+Gc}rP&!JeC}?zO?)n?LvEMNJuig<)aT|C3O zwpT;#V_v;B;Iyu#K`qu!+e=h`gX#}uTXkA&1Z_`eYbjKGp}m$@Ye1ytP@fjEvJG1* z6++o)VNfcdg<%aTrDnEKDq$=^wvjHC@<2B76)Chvi&oqP1qV3r2(5AG6_%gY zxQz;{iPngiJN^u@jT04Iw9{{Y-K z52yoC^a)gn&f=&lx4enKcF=Jj06!rh8v6@U?ij+Mz!|$LGy!kmDOb=5Fc@|L9U_YA zb>ct2KM0)4Gd7OJZFiP}l*y;pqWkb5noafs%q(cY?jsu;)C}CF0B9Z%Ead?@06-T8 zxiY=t4{Sp~3E6^U0FrNkFs7RgBU129UqJHfmZHFlk%~XfFVSoXoL)|!SMZjEg2B`n_swe< zjuZkrAX&ATI{%NsR|;OnA({T*HfBv{cD8Z$gGAsuo~4mZ7fe}U54Qf_2>$zbHJEM> zS9*EYZ#S@$RZQxF-$X< z{}N_@_$FeF5ljNgntKlbvH&`?x@#V;jZ}qx|3w)QSmzore{kN5^CK>~NWr(9Pm#ab z4wnKkmA|Z7(i)+y(dPq~`yp6%l;tK=~t-CZ8yk2g{N;#$F~L;+vAotX&R!6wc>xbiV7kUQgkr4BlH0i$vZEOroOfLu)HFi@eND%| z)DIlIZ}M|O0wobWGLg)m-2Z_LUl<70sZ^RM<_yCxr%pN4fY5;Y4GRQi#ztKbR zjqpa!VDuTp-7p=@%?wz8I{gugehxG3y?uPpZtY(tg)7vd4~nCAaK<|!fTPWSG4&F3 zMvmgGztREx(|=r6+l#3uX=J>3E^}ps$lk^IaAyNA&SgUVh?=cNDHWKW0u!sF-?s=! zEGCFiBrFl$0VJ##LrfA}_Zsrt@HPmK?_#Iac72=$$Z3bSA*^x68^BpA8mF&;FuIQp zx)rB8&I~Nb=mhrWIs}7RLtxh>ii(U~2ZTy`w(gZoj>VvEApgbOfwB=u)PU5k{tE*W z7Vr}#7))$qG%9YK5>Un@>JQPtJ%wSxEJ@}JWD1%7Cq&qVNnj_@s(@7IzvKILDKA5yJ*Hg54zlgk$=EX)MHeSmx`kd!<+d7W0e3oj6_fr-(%|^aN}JyMbAh z8cVol2gJpU|4lssmYZfu0fAxYDT`U##Z8Mv!$1F>oKZjoK8jSrHeMoz6%J02>k9;n z08b>iG7+$~kgj|Q&?Dl$pV>T(9yfu7+&xdNFssl0~W3Tj#Xi? zfmcrhd9yFhvLyfa_3jJle}EL~wL8e5QejzwuM5{^2;ixL7f+B7`B#9=E)mI5$Ffze|cEP&Zh1`FVe4S@yt?E{Gj1Jq>$EUrz?{JRNLU>=QN z7H3W!D)n+JG7k--r~ngT0PQFMUb&4dAOV?mJ&6tg2SB!h1W%<2(+4GKz~Mj|CIhvF zC?P}7%rs}GC|A0Bp|2ojGiSj0Sot``=At!Y;gC0+!Xk0p0q$vtW--fFoF4C zMh>8$2?beK38e0q;4PsOKxicwNI!u_2W}N`>edYdAB zMrMcRk>GjFfaqH(1_N^H1%cDD>BZ_9W&Kl>0MtFWVJQp`OlJoty2zwIW8}bR!dcJ2 zZxkHW8^HX>V7floc#cWeXXU^e;Vk|Cy={GPfEbh22^!Nc990DD2~Lkf9XypRne6Ssq1MyaQ(xdPn$f7%0T^jg63G^YlnIOw2p zN+fLm1kn`0%j#ueM8EW3Tl@ez+Gi3SAY9;qlF{!_STq4V7w`&LKu3;5Fa7U^Nx@LNWyFXX%k!mzZk9o&7ObF8judq0JvtIRtUjYSc<#DMkt!?<9?<{nrqvIR9tpQhyAMS&DgQ zx=0565*uG|wO{}*M6H|)Hy?qN0q5;G=HxJ>3{HE6M&87KHiesC3kc`@0WoMMs8n15 z1~VJAqU1?61Q!^IhJi|hh^efavLFf3*NXGkf?$LHnFEGW42Aqf78Qz;IF%TThV1Q-k#Sh)5a@V}?=XBP?Z3_b)j zNfAiT38 z2qtiN+_oV|t_5C|3T6$Nq(M~yu{=;68o88;%Kh)z0*sNRy+lT3vWkPY@T@lQ70hTr zJ#%7_DS9t>Zy@~N2G&Xl{Gj>JKuH*AKL6{Ifb9kj0{RooT382c1TkRHNYp^pt_zJ> z_df##Ty*#*SOfAW;I}#uzj_4L3jVhSjxz#l|2q!EKjC{cav(Usfi@Qi1hPQ2)j+8! zT8ag<{c2$?+Q0t+Gd@sPizvp_q1T|7tR_%)mJXU6SjqX32tG5=a1{KT4s`!$pb(0w zHVgr3SAr2d3C?asBZIn9?^28i;|E5H8M^KT|0a!V(=sa-a7^+r1QOK=rmzOMMxaAi zjiQT`V8AIsZ6osvSOAlB1;pb(%LY3Ds{twyf$he^Kj6z(DXK6XRQ#ffO#3MW0(iWc zON0ez2f7Y7Q)*#<8W|Lrfl5~t>jw-7{sAx^xJ1B%-%Y)nrZM0P<{Gw!K?Lc?z(fGc z3aVJK!%{>F0bD2yq|D-$P&1P#It04#zp)XRIZzmgTOuQqSdwc1Sg#||MT}s+OmKQ& zCj`Mkz)lE)HDD()89)Bn2~gtv&rbXcB^G61xR{1kpqkJUG)_<|=t(1E!9AIR1$fTh zU_q}1W+jdSYVB$<@>SPK2-_qS9bb$A02>`&YRbAq%M1dwnF=%}<`t$p0{jK&V!5n~ zkV5!o?hy2KFQ`=jQ;VYvBA}IF%mYOkP=JyFR6XDo#yAKR0!;oRSWs3NJ757SLSBFc zNbv6;1&LD-h>vVF3`!yU;eY8em89ul& z!Jx3}W7!`urr{Q4+Y7?MeOrnZzW{?-~SC z|JUV>p?)_K9ki2wLj(c*>nX7I4Q8!D{ot1B020%Q^8->Jc?=>5O}zxe0YI9_jEn!Q zH-c$s4zIifv2`TV@N>?%Ai59C3yLrxg`r=NL`MRo=rz=z3FZaB3%LXJn+{6B7ht+6 z>mqImP+fmDUfvzngmmM@FD@|We@yS zFri}o*dj!C(7fQ?i2o)|pkv4YG#hmH$D4SGep)0;M|cItTtoho|79hE?pL^LT7+4P z8Gy+6qT1CwOxnMr|Fzi-uTuC}0tN2`Oz0?%2?kpbM`!9Y`R7EKKQN<6gFE1`1k5sC z!i15_!lP0zYA5XzCbCVFP+$3)1CD0=uvtV9o zKY+IRH?=`@7T5KfVX%1$3-5Q%RZ6I-8l{*bAFB;M41w# z_B|x__&3y_f%d;|eo7kR@%`BDtcbOx|TOhn%W`!s8_gFg3 zmh(r9xf*Is1^b&BRi|iBJUqK_ihDqI??U?{R*B6VY1uh_OxHplD#9x*lkh=#nd)j9 zWpS#wjq#Nk_If%O;xpvr!a{jhT2G=n@7oKe`sb?sRU+BE%TywB?3d3oCnBnal?Utw z=fyFBzm$XJN$QT3f~Zv#m?C$Ht z-m#jq4mX4qb=nu7qvHhb*ew`q=V6lTwme;bHdc;rE5j;I1JxI?yNe6uH=~_w5DK?B zHy)|K!v#M`?1_tgn2kUuSbz83@p{>KvA(Xf@u9gX<`4}wurk3*E)oYhqEGYxbZu7@ zoLv3b=8gT!h1e+F{JC*&=Pq;1Q*W>3-`j65ONO8xcPXzK(mM@oRsPC4BNO*U-B#}| z@!n0p>*zQ&J7Vbkz$lp5Hk&hXwD&ihc77Q{x!BN4$G(*yLFe~OYpC0Ax@gFhFa2Cc zWK=8hwT5J;)1IdC(p%)}Fk#8^)m-9!6sfir@q%{e=kze^rfdSv#0lM%ieFPESr2m!NK4KtF>jX7Pl$W*QGJ?pF)|N zB*!7m<${izU*B+zb;h~cjlD6vkQbKOXk`t$c|sg@s_3lcUbQ=}dxj_6 zf+8nwo6i@m(+`2}((!$y(AM%0z^d>RXGgxZs*>7>HLk1zq$wkHo2o9x6vyE6lb1jB z#`0>j$ z6rtvC-8orEr=KV>o49DCbdZUn;@|>LG68#YHU8Kf{*^&KlLamgcU$jab~-5MhMAyS zhoE=n@IfK8Rq95rMb!;A1n^^FcHs6CE@aM<-8AQ|T?ar6>pHd2vHk8Dn?p)UcQ%DB;4CV{q(NjLT?u1S#RldA)lrn;_V{J#EnW~4R zaS9FhXh8wj5{A0ge-bgez8)oMNa}9*xO4mbBK`s*Lstn_@wL%ECT4a{r;o9g>F;AE zN435|4sLFAUjPX?b~pW<9(#T7XWVqM_TCIJlT-4k(_ANr5KbW6kOqF7T$K9uYyxjs zbuoM?@HNEcNzuO4jzg4}+=}sFAbZc(-q|XBu~A-}EytV;e}-`iipVv0L2+ui{e{_7>CFEm%IaclfzCszQ+ed5d@`o@(*? zQF6RmG#pOe44i(`E*wdl}OT&MM&Wc4QLKMx&% zHMH-E5+B=lwWwm6%MPxjzS-q}@&L=_CW)w~Vv7`R;on@WtOA^Y&$|H}(|K|0+-3jEXn8J3>!S%Z)S4YVx>A>OqVe6#ZO_@_nhwHZ^YFUdHF%Yd|E-=>(r@cslO7`GEo5-V@_){S8k#+lVju zKC?m9Z_de|*eavl*(;)rv(YAo2Ph7ddh;eDWhaNYpFO6w1`&Ie=X7pD`%lPhp5tH= z&2Ny;>PsJHPfoM3e~I$yr0g4x`53Dp@gycl%QLXv=_Ho_;*8zf@`1d|_L+ZHJkFfy zV70`f#-b0HZu%)cCRN>@E+BrroAdoic%8K2a7(5-+YgL0_s1U$pSonWdzn|2B|?d|G`@r8b+|Zfz)yca zVy?|Hv0&c(c~Q3#s&;y^TZeD@p3JFx+RGuywS>F{L+{TIhAQ^1mEYa?d*;TF>f^1{ z;44qicnPh&CcGheqTT6;=}Qjtx8}vApqtSGFsFC;*xab#Qa$5SaI$GZyJvPhMU8fN zrTQ=}IT6J(;#G0FV_NWCjLh)|9oXlvrg#4@w-c>{`c6vbA2ZqJ?FRow~`c}FFZ10D^;85o;8YxoAt(OmN7 z5nX}!Uym$9D`oWyoi1|`YR{{FiPOShls}wn_sh{vm+eij(Ri@_;W_W-5yktXP|Shj zbTeMo;p)`m37?$Ag(J)SXzg2C8>Pgjs(BE5aOgFDChI_%%5x?YH#pAlktt$CIHySA zcLoH5HC|^GD`w1*v9_MAY1rNiClX(Kn z2rjs=i)iy%6Kn*eUPBm@w=CVz$@iZ#kp-LEre5rkbC0ts2=EDN8Q&nz_C?v1KGNGg zv-O`a*LQaBRSqN52b6rJY!qg3FH|?qkmLC-e;pfuE>oMNaZ_|pxmYJm7ysGa>uLp!C!w)TPH)9%mlYxeh4i4p-V8%-wo@HCYprU-#D=Zm@A0 zG8BB#Cb)zXqzXt$cMH1Q)kNCPUh3Yzcct{qu0>WQ^qHCj9nu`)9v7>_UX!K%9+5aV zw{voIDp3mG+v4=o?Irx_+YQ&EXRZd zwBgr?%meoF(~I2f`H|;)j&y|IezU{P<^i*OJ{xTh?`sw>6Xam1 zysxa!5)~9r=*rkCoXL%S`ivS^#PV;*X9$1h`#L?_Q;}Dl7j$n=+qD$&Qye?TC(ll- zK;tp9v_t#%)Ez52e;{tooR;tA^5qFMLC=p2IIhp#-d!giUHTN0@ZiFwBbC?B8QrJK zw>IatsvrN>9$py45a6h4ee?FXnSWtf!joZn4PLMB3I5THrWd)lnOK_>GwK|9pTvZP zf1Nmb@W)~wE3ESwkve{l`ZdcI`(whKS=L;$@%o+9PWW6_d+Zxu$FC9zsTPL=at3Zr zzp6|1^f!L}c3jZ!bwHBE2tj(}n)1H8L-Wh{AZA9&os_wY_D)vbes!DY`p=qvv$#Gw zAmqjx`E#jhJA*j?-CoU})^4jkbQm$%I9^dC?QFmeF`5DboW^U=8zxAKXEtQ-gC=^6 zo8$Uw&RN~~P%}Q|e}8!B>&K*B+@+IJh~!=D{^ft3b{aMXSRHOnEO1zq-S`qpxVX?r zPLGAcdiH0JyF;S&7ZASPm)Jxe@>F2fogGG)kD1vr7dPzoi9AfwvxwgP<7f*zZkmga zdeVwvpDUjvTD+@JQZKJ!`p(0^zXN9&sq8n6tB0eHQogc=D42(%9R9OUpRx#fL?~B< zATt&0a8yaM*UQzBW%Ha!KT|{t1#u0 zH5mRUMKLMe^w=!R+CuKgw7blmPfC^5(V51=e1T@ov36TANVyv2#9RvJVFWiEx_8U9$}%F;hyd6YeN%k&io;{B?a1^SCdh*7;7DgVW8g z54PHc63oWpGcymkDS1wzVYwv1V#ifPMUTMTE%iNJbtj*a>4KIL))CY*AIEv;j)gBy z34xp)G2y}?46Kq}I%27kXR%XZGx>9bfJwrS)s?NFw5$AVh@T(7pfJk_#q^aT3AIs{ zhl?df9P7$dZ6se`Yl@zp)E~FpnNjiSb9~cfmP1XQJl&Fh_rmOnmgJf*#@Z=2uNU#9 zvg5YCIrXM9nAGF9o<{L(d>wfyHL`3UzSMKKf9WVSPPpuo0qtwJ9C34|LFtXc{4#pT zT4Gf!26?|Xp4t@{Tvl4^`OVEFJSU@&{M7k(MOKhw&1D@vDF2(N&bubfT@j2b%h+QQ zIyOhRHTVu~|GxJ-TXSEAIO!pOoa?D$ntXLuO-hnHyKiNSNzn># z8$}2P-Rdm23_huMeBQ$Qg+t*~gP&Hb3)l0h;5P%x3q-f4Y1LaYWuqC-4*y;aC4PP8 z`eW6tO5)H931kJmJ?{EVI_~P*L=xu|Qfdu^nOFjeMD;g9G=H}qTZKNxdlMXjiCcYh|NGqFAo-0wk(d?EE3rK6My$ZRq9Sk z$QQdKZuQB}VR5X$cU()XeummbVPSK})7Q^LpDzAbAUUy5uSYfEBd4g4*;*Li{_lV3 z`0^_EzB#IQusKfT)IuLIJx)pws_Ib13`*qp1&|N_B65>giJ@eW+vpTVogv{bpf`Y? z+a^GQLPubwfEB_2(*9n)&ZHgM$c5>d+e-*>{Vii%IUPAULIdhIeqKuE+?H(X$<#ZS zisOF>Pxf)J+whpU1I4@#s*5q7gIupst5!S+Qro8a0*0!=V-%zh$A>GSEhv|@Bh#mX zW>xO0J-Xenb(*&e82>?7z~PUAY>F{BuHEdF;nQ^qnhwd)vE35Fb?LxptmkcMZ%| zqjDX&=iKA0Wi~u`B&MY*ygn*HjW8nqb5>gG%DF{uB@G^@lv~8C_x+hKdh)HNPc%v} zTPBBJ3MvTYJ0|zOcawjGlmGhnk*d!>1|v>LWMPI6pHg<&d9X`u z^lPO4xx%62S!}N6`9No`Rec22mYs=;+c!P1snb?m!KyigElUv zcGQ?ZM!GAHUzvX%+T<{NsY`jOZZ(bh^&)EFD+a>Yd+fY^Dk-y(8sS(HOMCy=c~MfG zt(vA&@|-kaGt#iV(%3AQM7!c8EvfZZfOqivu{8kC;GdG!H!G+0)n`fck$tCSL{r$* z|GIq5W$C|6ToDcZC~;?ChLKXT*t12n+Wx7em8Cpf?fbj8{VpCE6P}u!nQUCT!ZxhzVwll6&pp!|L5j|O zbXPLgR7Yiji?d1dxN@76L@AS-@O3itIj8Ylofm&ZQeCAFKL@4fU~ss|E!;C{5~wP0 zRZEi}$UoZm)>E|q4mEw^;RB0jGgp}`ez^dT{wTH=d$}{}&bJ*r^JGuvk!oho3);OU zG`o|o#mN)DFc*4qfIjNt0axVD#{>r&8a;851#VEpg{``Hj}cs z_*(j&`s<26t07g*pXx%_AA(qCmZg_4dF1U~oKI%s{#d5;;jjReP~#lu7cYyH0x5A? zZq7YQU(;V!+te+vL(w){Y61rW9PmQHbEFSpu?N%N*Q;)6?BdNUjfO7vAJ=Fl!7R!j zAvPYq#XBF`x7J;eO%E=#UG1CrX1kEV=zN)XYO5#rdh>9NlERS+5nhtuyWsHLPM20~ z@j`06)Uj*V!s6Vw$ncJAzmH9=PR^|vpFGyxVf6|Z<%#|5VRijU?@8mw!ZQ3t*6E5m z4T_qq;oeQ31Jb)@c9AASs2RRLt{tQ8?!|2^w_BqcSt?HQ_#)=zwsBs&=&nzqmW2ge zyoQQW^O<)z)Q#{t%PKX8G{PM#SJEXcn(cf{md3hq1%BP)%;4rIlwm9s(%{r|`)8<6 zGmz%`_QV%N#FZ>RZ2DFAE#+<3;aFxacanm9!ZD;7-s+UQtRz141-s(b%#M9r=18+HB zE#^)?`hsgo8}EMdEbZzeC(Tvq=?(E`ZK-C}vzuod9$drw{AxpbnXyyycqmMDr|yEo zRMY;qBgEDVv;qUvH;|8(LACd#kN=n$5ORQLH8hPcUq}}Xw)~mQl3`vzD`5SQ%tS{d z`jSiet*G8*)GoTfg4Ai$$_>@<@&^~5#xCTP>W^y*pLco?L~B~X%Q>B=P1dm#^@)Zs zFcmAlJCX`t1oZjQvOjChc4;@Yb)Q_!g|yD>kn!<#W@jr<2Gi?R=`jy)5*IIK%QaLj zm2^3OPr{m?HhQQ*%>5QtK*R6-{RnwWX=$adguc6uCrX$stF6cAEb!uIJS9H5F7&fx zt8V)wW4H1LZf&kVhbn|<;>R4$AJ+Xh$o>z1KE9$Pux8~LF-P*^n$mE@M4#x2hR>%E>3TF(n;JJ#{64Ko@Av+i zeF~OBmb*Hrj2TKham&l7tBY^?=mF8|5`A_%E{kxQV7?JLAz;(%)>s8qC28Mdm3*_K z-sUyl8v}FrEZjgh+vge4$VPEHeJ{+R3{#qV`?oo&IokZi+{@m>zM3cAv4jWK*;@_! zWtpHn8Jk%OG^0lZahL?WcXOCO4TLNF7;{umA~DxjJ_0JYWZ=-vKO-X`M{~p);$~A# zyA$rqII{cD+(ukQup#jz6tb6x0xuDn^8m^PJf1BgQmAG?ahR~+=8aAuo`P6_wD&sI zHbjKSW3&eqsnCXmAc=rmA2Eln3*Jfkde3DLogmb=h%=iZqV9CS84UBKCY4!J*GZ{W zv`or?=9f&I2@2axWn%O58bOXIXFYbI)7$+$7m)Vhn^=vK$$(zRmodGP$GoT2A3ivZ z@z?kr9)!{V#li9Ld_Cb5t?E1Jk3gc^9@OWnlX>)+daBBP0+_q>)j?r2FCG>a7Cr_t z!b3q??(9Dn6p(7(y@fDE5|1&{NUXs z#H}sFdqo}whcNa?x%yFin>iVO(^EWfPcs!aExJ^`Uwoswkpk*N15-?J$!x{PtmdRC zTu(?iu?I)G1thQ7R~#%e{dUF7+-R@I<_UG9tADvT8eE-{FR4koIppv%Wk%;4ccGKd zKi*sxPQVfL$A`#eq+NjiN@yQ6NOLZErcK|x!qc+pDQ3}u_R?e+39@(Q{g z3TG{+1+9z`F#(%@yt>*~@H>fk)CnYpMTe-W3bS>Xgwj$3A?zn(<2M2Y>Neo&S^ku( zDH9%fZRDdn$?xOVo_F6>locHr)IsXnW6Vr0Jo9^8aXMfM!&^(ZIg@!^+0Eg0EZb8V zPbFXKDUV$Ikq}N>iW=*H$MctPr#D2+;>JVqQQcv_MyJT_ zn^6J|+Cmq}j_dftD$EE)2Y2b}A0F?Iv+4y|!3c&QlCg!RER;@Txv#0Ds#%-uclln3 z5%2Nx)D+u0f4ZvqXI`{ZDl6?sum0CqDk8+9sUO2DZ=IKlX6Z)7R_IKin%xKJQ4A&y zr(MK56rfQyz?KhxSGTfkODw6G`$2af_o&s6@yUNYK13ofD6H~r+X=4_P36u&y$iIS zd#>u8E)~#`5jTxI@vU2M&JjVm)U<87^u6MXl6=4z{fs`)2S6oeYAI|LgpMGAfJ zG|VY<#5tJs#XaTn9-@;`_ieu8qY9e$dwtb3K#f^!X=HqQe{vpw*GaKYKCTnlIhF zH(u4P4;s#s{iv>2u4eKFCF|_+`)04muOg8FULS?bW8Yr(R{vnIa*Xw~ox5IVHS2yeWQ|sg9mF0( zw5oo1@D%^XmLEzjm_^NpZbn*-p4+f*!NAI}JtPX3&JZRWqbA;AU@Hu33NPxH%M>1r zN4bp8y#{%$B` z?M%WKj=E@v{v}C_=7~ZPm{)Q4zEfY6#E=#QOoK8 z*5#ayY2BP^CVMZx_vHEGjp7z5@(6dIYm-cstS>l&W6&!()2o*^ymW5@=TAV{?36%AAPQDQ4oTKg0*l%zbf912oGAL7@)X9BAl^?fFwMb z8s5^MC^2{xUzz(+6Eq^2-y(9~dbLVM=X+&?!}1nb9_W!9$N{%D)!@el{9Wb5Z``ykqcy}8v8rX zKP_w|(8(Czop}}NGz970plzu?_hm3tW{Sb+F>1Ok1(6+`!u@HRWQa`1#A1=U(CXhV z?}i2l{@b*7-whq+9l0WYnyrCCXn&=7+tpNhPZ;bqm?MOfN^zD`7MKLONNc`P?<;ub z)Xqy8AD3}cyl@deD?^tweSsPw@m1O&0pt4m*E-Wg)VDbwX}L8aVfa2RU>yU;MER#~ zk~42n$m~C60=s@n{k7KXXkCY=^r~0>5C_aeZ@O`ZKmfL@EcsPv9Ox94pxP$;O5tglzqer7=-2^EFhGi>WhXvc7XN zgO|~M_uyB$!pxKNW#{9Dd8GF?li9jwaZkc1f?c)m&sSwIQ?s~yNWp7rV7#ZyMgD?-n|7n1n_RlL^fJ7>O?(Y$ zyiP=6?BS$}CvQ!{9tCXDPkU*uvgnP21ouTZ#0weBx&`18SxK!{qEW}<2rKQGgzyco zFrS@>^Pzs5_vb^I2^yiSKba6-!DrN>=-`oyu8)2nGky9iF3{DV5OzkE`}_+C6IXH6 z;T1saE8B2Bl13rhbfq50WG>w@u5N6Xn(V}_3dz)tduUjlitKY}o+f~*{{%vsx2^1Z zZ5mxIi>s=lXKN-R>wR9oe{jrhn8k=e=VxDgqIa_=bn_|0Y522k$Mf}E&UWe3ITGV` zEcQ9g;S){{)km&{?1K#KqKbN4Z7amTh?odXAxy;vkAr^CwvZHo5$mR@xXy9*_qAr9 zOEUjFPsUaZWZyJ;IOlDXw%hTzWw})Zf5vrIdS?YkB>{;$!w`!RZ)r_5+~jj}72-NP zyS2)WN1YdH;ua&AP9F@$e#qj%GQ@L!Ny*_ML3&-b{gp5=S-N|ki9y^3*MJ+nB<1%k5kPdI)_c%r>>A$7lWm;v;dOQu8f zSkZl|ER{*deLeOetNHQs*Qb3nYE?AWCpGt(XB2*}2-6l@BvuH1^9;V)af52UWwd$> zdu~deA4u3MjA?%Mnksjt$ZmdKwL8juu`RDCyEg%edz+nee7H4>jGEO|P?_8xmZ+{9 zM=O<6f`zMijD!kG&Th?)y_HkuHjH|;I$pSeY&({p{=Hbwg(j;Z$=xt!bWWXfjw{K> z@%lJ=O180h*&gzb^XQ8vu1^XraXFp2$3U+4nO4LB-+c49MritJ$&E2z-P^Y{v`6$t zeo-GK?D})`e$X6g$uy;QuVhX?!6@=`&QNS2p=c{vr?z}0=k?YZis9mr(TY}K2bkXC zBOQ4*;0`iwfWX_@+UkAlQ@tf@VG=uJF22j{WqWDCC=SOtB-b~O6X|IrTc~ej|E)Wo z^#iS~RLk@Z3ZRP+&L=Ph8`b0ErLvk>Ua@zN)U!)(04-k?b z+S>9h)f=1*<5+zE`OZCTOnCHK^`HIubeW*Xh~^^fdV9RvbN9v79zhy8c;khC1NCXf z*i>UT>K*k{u|$8Yb=>-1+jRj%`XDz$1;rB1ggQw0H<$#VS@gm>4vqO3XmdE?=ussp zRXN7<%k0-HO)p`6u_p{$b+44%fbs7QTX7yy*Cd(3rsaZ`D^{@s8JT1D)kgY98XjMn zlLQ*+71T0kwzrr%_k|yOz8|2Gf)&cDX+H*0NAK)8UGU&IJD;aAUADdNvTk2xyD+dk;dcthQt?gQ{<;Uu3<2HNQ-ea*6a%jrFwmPg zSIF^$10)-DU9OPvRP?oeI9H}f`NMbTAqMLGLH%xy&knA18M`KP{R8W)SMm$VH|2`C z-=6y}{j6B2GO|xP{8H7A^YN`APM#0Wj=ihbKkO+;uH5|G)Nu_fbdfg_n+J7$(Ba%) z&&T<$s-&R3Kxib@&2TgK`m1vF@CvWS_6F2mu5tWDj#LD`AXD;J^*T!s`2+uE;U3 z^UWV@mv|E{opQHhGnjR*Q~bSLC_{KkP3%l!di0ZEsY3^Txq5OOG`tfYb0MFH(sDCp zu2mvwKCouODU~Q{H*@a{;eCNwsreot3Q?+_;qu|NjH73)pB`x!b`Vh$X8Tf*)T1c+ zXBE$L8FOgaRS;ff3a9pVcdKZ4_Uhk~vDDOAP!T%hw9bD-9&=7||MZD%r_4-rLgDT1 zU0<^`YY+iPtz};4^1~xedVQj}=kGK;&M#-xb8}=L1D|DHqbwE|@1eUn3$oct?}-?m>tL@*vUGK{ zkpE-an!vAe6tY&AKde%dbK_RiXqBo4=wA9(2bJSds(-X((BoqB>DD2C}UA85gT1sbdhkly<$fy{_?aqOP zX98|yxP`}NyY%9473r=?s|Xn8tSmkVVX+*G7uGyDSC z6&NFTjr6!l_Vq>dA>r3K>{h?AfA1()Tq-yyZBkhO%7rKXcjiLV_bcsttcVtBKaWTc zD+k+|qc?6wG7i=XbyrCZ&HI_BNyq>`usMgP-m#LWvon94yC626&l0um2K$pv?SZb5u-P(`oe+a?cGI<5xB3^{Vwj;p5@-NYEHU2`ZNwN zD2zimHZ~ua-Hz$~5w`6m2V822xs)sK@0gdy83gwouCcf_Kg-`={?2PYiG|Pi`r9l) zpi6n=1^f3eVHC{7$c_>{_OM)?q%~rFO|Op*VF5 zmWN46!MzvgjkYHGKz`ok%ilGEXiG~wtc|7WHK|Jtoj(Tx0#D_yY6OQcmPSG$9XA9n z0Wr@pMBHhR-wbf-3z!W5tUb`g{WudQ7ap z`4NQaMz>jP;I7a{(y|}_oZfbQ@kY(4%S?Jh5 zr?g|B{zvn0_~f@|b7M|HatE(Nn4`s zX^i3`2Cg6rI=2PdbXaZgxH7xS#+1>4l||>!mNZ`d{F)dY2NY!tLSJ{+IaWaGKZ4E4AGT$Xmc$ zS32P)%GfQD%4Z1+M|nPbN#c;yPAmb%>fA$TtG&hx8g}#PM&A4jP_TGGlQC@hds>h( zm5G4?D3oKl&t|x`)MO}1kL%o=uKyuFB(gvV>C<2I!T1- zxk2V@FSMJ5sxOMSJ)Cz6TQy>1iex#7B!sKRKi+T>sSdK}1RfP}VDh{1TKHgM;tmFo z3giib?88MCI3Dn`af5Vs_-(%xc?sVRwrsigte7HQ&exrI?r|pILaAKqy^PQftc`%* z7r(^`ffEnsJp$e3_*|^+AA4*2=IB~cuteBKgoCqb6H|CV{kgM{hLe*vSHAq#i&OW) z?%Q@@KY9&a7tGqDy3ke8@|P=@x5Muk=kQq#eF?@jY!{9Zho?j zQWS|jn^NmWquf)M$4AN8%-xfbG2GiJ$}B#^^R7w{C}u<{iA{T2kq>E7Q~dU1#8zDC zde0*plCAKD{o^~+vx==k#rQ488m_>lW>jSg<@51NP+I-=Lys9J!|^|@0Todsxu;Kj z?eJ-<2ROp)@XuR*m72bCjZ}-8bp4%ZS1Gvp*LLf7#k_Qj*09_=X6~%1jwsX-$B4zC z)t}&pLjKB1`gZ5@WR=>Cc5ucWJCll~$>>lDecLm3)2!Ey%-}7i>Abs8@^OJ(TFSe8 ziTGV(qOp|cUy`V7O6f04&vV2PxMB{f9-%z_PGaO>r0z7yB_$52U5gea%Q?^Qoj+1o zOwjC=$L#6bEGcyI$f!6Pa&qwrUX14z^)pu|eQ@U#9ZWYC_PrL9x?#lNe{=LOTT%_L z9YdJ1pu*-i=rEV}Ft&A_L+V1j_duBDTTM))#$z{8lQ!J$XZjHbOvPHW3n|%3yBXsv zwHE>y2G3+vP!ChyUC8Zj?BK1j6pOR0l`!T;d>~nuov^-rQ|_a3)_|?=idvCIw`HW> z->_IDHnQS2*VYiu=Z8_X0Aq?vI4+iEds=&s7#bwqe-Kp_Gv-vtBny*!DEtbg20s!XB8;9M(eR{p z2nLWZB7WtrI?LH;o%RzcF^+EeMHI^+@?`b9g_0MQ-m8@t9lEwQNi3{|mzc*pKJW+M z@xCJ!{*p-c>EB%pe{Vv~sw}vwe!(0IzK`KQ6zcax?XS0U`+@I7?@oR+` zC&lefl`3Y-TgJaxlKMkgBBwOJ*8POK!^roZ{W-N3>PG4={+MSLhn*pufjYcApFAy% z-~2H^NidAQN@QHc%n-Gq$})v_Rc19gKl)1#z9}N~i@U#M%kyRm2flIC!%pFTgdV@< zbnr`%@IjID2MR+%AGc+(E3Bmgm7JJbQ_01eRzytM~^=AA#}5tIFM)japo zzxp51xi3V%fTuHa7Rv&DsVjiH!hho@Zeu0lHAqSyj@M}p*I5JKlo{YWj{C~>#v*|J^IXIf~<69R}%HSeh#c9|(>2!s0h7tP>7>qrgkMhp0g5-)`6nU_RzwX{uILk3KyM1T|6a z2q7jR^E_FvZItJ?fj6TvIwbNubiC78!aJ9CsT4Di{<*Gm8y~hFjpR^RHt*5wdA@fy zcD-KYdQEoXjeKqO*LCPwjv?ktRvQ^q_dl=aa|EP59Re5=!z#*3!9y+7%#)r`&!dc{ zSApj!saI&A0AOmRaU%3m6M5GX-sX-=4a=y!2A3Y`=vA=);eG0YdRx!25SG^o#Tpe0 z9>ts$NZ#jezmkjcjc>$Wig(9O-71;p^~+PQGOcPdp3xCO0IWtT0pTGf`S-Sct`x#V zhA`COsCK;06Rsyj5++-G6ypNJ=^u)Zh}up*@K%_-{tm>Le`<)CoLj^-eF62!X#F9( zOAHZd<|aN!%a@*m2EwnPWDb9Z#u!(MrtaW_u1?4Y$*Hs`{n%oEJCgscHw@p~I_!0S zp2Z%2_1hijmABt1`Sqrm51D6kiO-Kt?P6>vu};gKx`z3`lFmFHs`u^Vq>?10tYxyL z#gcWDWr#$!%C}9+WC=x$7TM>>z6&L5mO`Z(QX$KcL@K))CC0vF8N*<zKLEy?n0gT-WS>2o!j`FDMO*bQ<>51b)2t$I4ezt|D<;G01j zx;dm2%}rvLoerG3@Xfit$l*LFb5lqnHww8JnvCCn((R$DtkP)acyl;Pk$2!QarO;! zv^Ekn*lyqUbJqEQLx`flLbV8atZ^GN#Ve>K<%mJA=QV-Kq1Nz3?cf{Du4DIpesRH;=UpA4Njqry|jvAqt0!T(0Jayn2TiWW1Ic)uhcY zR%*)uEZbK5$hJ=gTL{vZufGE&O#zMc#IKHjTyqcHlZJ3p#MLQE2zqJ4kH-CFit0hL z8qUR!xB)Fn>8U3|Boa<5b`xtlTR^y3e$|^5=Ryp z%M=Cd1}01Fg!*lNgW@TDWHn}dvWvp63GlPI{LUwe$#XT&bWwjPBlV1FNu$txGX&?i zXN^v4t4)2?G?wCn37Fo{kI>)sua79Z_w3v0{NR$yi7o4r>Ya0q>2lisZEbyDeR4`Q zCpu$>s8dV-CQOE-{LB+X=lw$NzysxR`N5wa=IKbR1P$V*{D^@FdLuCM=tI**;{q&c z9kS}t<=>(!Te=_7o8N36jYaDJ(DKmkB*$dFK+JQU|Zt7iul&nMyJmYAva=r^W#_`a>Qec}^Lst;NG6+Lc8VNCpzW<;!=Mng+O zlirk>#i3EHmGZQO0MABxfBh;3=F1#M@->t7Tdw1J}0$QL&TvO}8k4~&l zDlJ=D>qkfy$3F$p#yhS>elwRE3oXB_^(wvO)U%Fi)h8t!ub3w(p;ubh7ZjlACA$SH zuGs6{!$lG2nhjTetBgZZpDYZl6MZXGtdBExg+>>n;=+P(oWMC60=S z%bI+l1WZ^C;>k3=q7dho z4+z9E=_@&o?mJBvTc)F33q0oIn@d73H5f|ZWJr&5YYzoVRtTFPNKl34^tZ>6D$WY( z#X(1hlEUiAZJ*nWL(B*?kSnd-Df7owLpH7k>h6A;m-f5T_})=)u+DKuo?WJqf-OTr z%;d!O5SyiMavMkm?2qTcQ0qk9h<%fZ?l9cw-M-aT@D=DXDE zzq}-8p4)c0{#crd?gr9SNZ;vang^X;6-FE`5>mWfa?SR`#@>%t&Zn&*JiX2+G~InS zu|)gxqrS;~PnOA6pGOQOaYfK!3UF4lz`|?>Hf^QFQKl!t|Z_9XmC0 zP%rOz;h8g+EnGec>&*xfiXT?D3Vi&S6PkMghCCn`S3o_Wq^hQ&(5IZtayWKG^<1%d+{Ami&Q09aK|mj6z9jr@OcaRcv2M z<58}G&bB_4fJIkX&e~iVrd>Uxb@(Tq`GC(&X#=}w?_yy}x#VlA&(R4(YnEKuDe z+~>82AMae>>S2@Bo4g%Pj>(x`qxyu-y$A>!KK@l#m|%8$A4JhFxmQ)imw+#?o{P;m2BH& zJ!typ6JHc3!g`S#vAI!QYWJBcca=c1zOZZPKcczOoxQ^E8l-nuoiGT3H>Ue-C5t?3 zzxVaWEI>_8tisjebv!+>njcoCopB6w0u{Xbl!qCG{;lZhX#qi=exulf>h zr#6bz4U*r>Y#no0kj*K&TUzU*===T`(yabHBxzhT8`)x5ux7MYD~kpT`U3d)X3 z8lo@;#E#)gZ@wI#X!XfJW&OBYRUf{NjUDiOkI)qfmA(=Eha1b2=Bd0(iEWZWB3^ZE zA7s=snX03=BQa>yPn72WO{u>7R^J&~JUe9F zz$e`&p0ppJ@~+ae z`tl3v@?n3!fTruCQ*-e|0Y-TI%UwIu1Xiipxr3>FiXKkMH)kCr_mdL|Qx3--FB}-P zp=rcQZM#8?y%+TGreZjJ8>|+fq&njq*&p`Gc>J!Ke!QNSZ8lFqe8wVTBb~?Wnq*RU zHoDnpAlarXa`|Jz?dM=r?~1xeDs9Vc$YpAunUS3~`k+SV(>vZwcchiaYiVPhj4;EL zR&3ExN2fz{Oo9@|Y-`dP-?VD%qx?y`;lJ5KX zl8N-E}f30T~4aTDV})cqLyUw^&ARO^6@ zvbcpF_p36xKb~RYXJ1{Z-Tmj)mT%rd4ikfNQSw?jqonh6W|faXehT8$^((bCKJCa-DZR;Vh|e_`4v^??Ux<=gy?`HoXu~HZGEv>Tcbj z_L<8`9Okhy)ZU+ymuY*P+jLmv1jG<(`_oDpUizaHC3C#&L~EyV(>Jvdn=Gl})D$bF zamT0&74@kruAp$vV1u2x`A^@6yIWd#h||@=$-=t%(d&B!jJ|xo*7vPS4f2aMdw0ug z?<)7Nd@&r;>(I@0%2puE{<9R68BLSPVemM{W**r`m3o@1^0b~9V0za-tPhF5;$B)| zyZW0=x&Ni}6pS~zI{U~#Kry;lN+?Kt0_zTTx%A2@vY zEs}qAVJPj=^(8MfNpl~pXr@1eTdHJDgfj2)YNA7TAvcq^ZOl6bJM?Y6sFhfr0emQm zNd{NmLOM}g<;t?Bq=2mye>bhwDJn~ZsAJsO15o;429{m9v;dG9q_{4lrwtnpX?)v^ zqyszA}Y5#TAe+>&u0FpbLJpTAe$H+O$VDG0Ju8LDi_1r!TAK>49c;lfbzG!&y zeoP>~e19(@qR2^0jnPudN9+6*pQqmSE0v+r2w^auZdJf@I7=ApPp}-;WPIzU{nZy4y;$#<*onki>d&9BWf(jjIpn!%=2-)pr{w zo#uivE;)r$bt1QP-M4Jpr1M|2Qg5}{J5R~PrYEcq&-=5LQ+K|huYMSjm6?>7aLXiG zd;8J`l9L<__TQ~0C;Q}_e3>%Dpu8%%n6OIqv2B4+3+#7?a;#5^)0vRk=~$^VQ%|k*Z)-|6u}tR=}8} z?5FC(kF|U9D>FA36lidyrY-N8zLKA92hAks<~(}Sx-xouCEfEvRvV4!r=&69VnoI_-GZkjomFy{xZ3tC z`5e$s*Sv_*ZJw-~*i0Jk2NW*-Jcb-0s-p^_VBA(!_)YDc(~aL}E^Jv&5?oHY&*>+f zyevTro=qHe9pcG-t4W}@Xg_%dvn zPE~5MDm$htJ3y{bxDIS_NzL&ORO}~xy~}Y^CK6=ha%%yI5Yk?`IqmWo3rp0MKC>*HXhZF&}S`Oh zfBD{pbj>NkbQhf%X4{}q?UyMWduMMB@AdslN45P-v4N6{yR~CM6vyg)>LTAAIXiSI zHNFPkh`A+lYElTGBadUlF?_m1yl?Zl^%B1d2|BljHafU{lb`$W!N+D9o}ut3dwO+N zGLU@Yl5dsMyUtgSczUDo3X^gO^VRgcCg~-I&eWg#OqV5j7rVkm?eX6fzVF;&HH{xjp=_iAb9Pu&T3 zFpB>Wu){4Tx~5bHo@hSZ{@AulYD@L<;<~rpG2&Y(8$bRKbdt!G?df^A@5+R(_vD@M zR>jSA!TYPm-gGsT&#qr)3)Zvs+};O$I`PKXKvC$yc(%@^>}u~H54EltOPRZbEbgdO zz@}P;Dt044aQ-5E`7bNt+^y2x9n!KoYi$T6-BX}))DzPA zTDUT&m_CTt?&SYY28G?BB$v4P9Pw=U+LQ)2htC_Tz)Ip|>-62hQs>v50JdMxxR-H; z{VRTY>C#?%W1^HHXGPh<1yv6?s$8v}{`=B3K0y$?N-3U&t}Y_!&zk6+kN(E(X?Fci zrG_1M@?0Cc1bosDetBi}GeM*@nRXkTHi)I%l@)pAO-s*{*1PMY1oJS>U0CFxq_Uks zN3!rhhNHg0&~exE!+Jbf!mS{G1-V211-L~ow|cUE^)C)J^v!RVj-5{r>|2LViTREe zKa}Cv?o+(IK3C~v+R`B?G5Qu%VQ9W6q8r+`r*JT{Pqjn|{?NgdGvVqDRj&ijO!0TO zo9YXm52I^K)sB~^8MD=|#{Q)mfU#Q)t1c|7dR9QZvwDD2Y#1dnS5ok6vs6sp^Q$18 z<6^^1t_qR2%uC;_treAN6a9?bU%+>Vo?Y-KMtW^82~vX>VP;iT#&A#WU0XPJ+f7Og_i~rtXQ17KwRnR{&D$AjRg*!-5qibg{qD}d zRPMpIEMP2LU?Jo6(LHwZQNLzzjmC`AP{o_sg2W#0&dZ%|Scn3nDT4!in)m9?j!^yW zF_-_wgUtS1wbGaKq3dZlH^Pud1IuLe`}Cp2?Q;q~021n{Q0Aga&<(^bJawep@p?x9l!FBtFKfY+u zDgI7>i2xnoYjCF#P}50s+6qZ6Kt9y>{~|A4FoasUOxF_?C;v4p?Uy!bKCq;E@(Va` zqt9;=4O?#8t>@C8U?Oo-zaG$ji-t)|d;#QqtMiXPnd(iDOgQ#eQ}F%O;Ad9}t3j3r zx-94-lXrD4XNQCck5?GzR|a#3?cPl{i>$N_DD2--e=FzCg(kP`Ke2h5{!#CMSyC-F zx{5ibLp+R?3s3v8@}OB9%EjU!0BaXP+i|>l0=u7%9fOz@0BnP-fFSvw!(Ei4(%aTjgbcY(!WM+Oo=Mb1-lvY?X?yNM zZ4pkqJxpwj3iR1);u0RP2S)*Fme&qzU_85pB|P|>uK_>*i)KU@7zl6vZb`F3I2GVZ z^CzinJw^v55{j{KxZi?1=FhX&-Pss^7(hk^*bJ|NAkGZ6unUX|o6gJz7wn-dK|SWL zAwcwB(}?j*Ji8pHq&ziA3dO+;(xPjFsL~K|K@?)T=KCzV3KcB4GBMg%3*huuqU!g+ zc#ep2#)b5Hh*}fegwG*7&I2ffCC3Zo=%oO{3a0SdAxp~BbCuEY84M%PF!5caBcp(s z8~>UH9%uS4ETJUE2{`}~%$g3v!C!unk~T8qz0CNY1DvO;t|pLGY%g%90p8yWae`YZ zN5czG-aiKPUIf5dqkCXUQ0>ACv`C~y)KB2R@AJ^Zto!b8D``=#(``gFaFtq|r~98Q z&7&zFwoXNzfV^8*EYLvX)0AkS@kG%YvTbN5$>Q9NYztTAG$16oAPn?kd3U^FEm7Ns>BlVz-ru{(ik z++Xw)XG2RN4{+G2@1Q^(wPUuBKyvjg2>*uOJ6>mA;58FAUS`{ooM^H znfrdKpD0I1Bt@Z+jizc!1S}t-vg|5BINjRqRn$IZTJS~B8?ReiEx{7Ah6%qv=inJ zOgsB20G1@nPGQ;MD4e+p?OH_vtMkqhZNv}rCD+l|m3=3ZxHGItFi@CX6A7LmF}S=v zSM*#=J)gtEcM%GCK;1_Mt7(M6O#ps9HZYp5Esk=iWMGr^H{24EidEFwVuEB(5z97( z_;KXCWicxhlvNT@BqRd=;6I;D0eriN%k1bWS?3($XD$09 zfs>)E5lvvor+Ug7=I;{PYyjBabwttiSWClKD6`BjjD{HnbLhi)*d~nUk#SIQiPX3* zifC~R+oP5a;i?uzIoxx0DnfTg=sZJ&qZa4M@N#)4c4k3$`Y~+;kG3uB^LFQW?SX%T zjRq_Bj#&E~6myAn%nL=ZJYq)!Q)pMncZ?g3nv@xZEHz@_P?*$xNFP@~#3uahxyfl5B{=UK-6VsZ? zBj%y(wK@i5rjr1pBvb6c56rymJS2ty8u^|{0KW#0))Du~XPWhP7-Ww@?3sp-$YEFm z`5eXYi!uX)eHC?TU{N`3bRO9EDRv^T=q*+o+)-go5DLe4%98y5BQ?a54wjJe)iP`f z)W|b57yd_i(!S`01hVUK)21s~N1Fs;eKNR~g7Vqg4Zk)hZvwe} z3*$GR>Z#AZfh~Rfv8e{MM3_qEi1_QjP&Y`10E=5GFdKSG1=Uhc-tne2#Q33u@u(TJ z{na8Vv;cEwseU0OFLcmjArK%-V89!2lKP1N^P}vx1&283xd>x{BHRb__j^|ffjz9l zmX%FYuz+;Jf7Q@VbOlZpu-Xe_9Dctk6F3^|w9ObCGLOebs1Z8rMmph6iE+x3T=|Sb zpNg2w^_E8A)eX%%e|#(4Qht0WkteGb4{MNl8$C@It*_7E`HASBXZ++e;H~0&ei0IQ zTUs^(8?wV;{`;5+Ih>fMf>iPer#_8_poD1d%*YImtHqh5BEHra$+LcFIW9aDX=e&M zj^c-)R!43wWILuNPTZ>?&+=udR+CseHg!`LflWhpj6Sv$b64=eA9yRq3t>_>!8~&@ z*5uF!aho{;Se4E$r?7)%gE6Nk|MwG^D2$nu2BF7@^oz^gN|?0ncXJLq8}#9AtgaoC zNM)pTK)ZP0)RjIY4By}Xlh`3!M9VmcsB3eqQ(JR%-uI z30q>}PwdlcRt*-ug-0o&A$$DkqQEd$;@s|kk!06=o^@)cGBPhD%R3AU$=Ni{`w3o# zxfI}R{qaiQ+98v8Fa+L#vito%LgBR7!YCjmlv!)Gj)qHEMnA}~4dGdB-QerNye`^U zSkDYBF&N=t2YudEh%;q~?pc-Tdj<;`?huo@iPpq6bxAR6Y)9!^E5|EAeZ>&?3!KmV zGyRPQ&|gYN9(oJr=Y1neagxFw5~FvM<*XjSnBl1Ep=Yp$v5)S!T&fIbqxO;<&yuxF zMRFklG)yJZC7qU;^NN<4un!4`$;KRvB0@&O^KMseJH+c6>LsvV{QE#)sfb~9=e3Ye zFn+rP!WQKFDbqAf1()%{K(Q4inarS3>~`^^6p;%|prZ&Y*+>>3+4BssFk-k5OD|Nw zuAKzzsmvgw7Q(Y*1upLTVyW9lh~M5%YS20G?tH2rw8jzp#Ljg?&C#B4Y%d=4kaG zk0uLWFv*-B$a?~PM11^69zhU&XmDk0IJ|Bymj@gqa({0%1{v-V)pPOzz%W~cB^rZK z9L4~J909^`XllxjliT12f59;ikOg?SJj|&V_zsBl-45OGTxgaLVPvBmSR7b(-}gCS z3~ThwQ8$Q?LEXORlHq3x5PTBBTsiQHtxz;|ic90QlX!9n2R4C^{aeJtOEYON3zG`g zJLi&t_38aZa9*e7l#3zF@R!d(y^ea&6WKet2ciL0&A-shDpXj%!B_k2q|9(;76Cg9;?q|6M=l z{h{%&LoOSFn<^igoBkT2MpuCJj+0o{+M5;G7Y3X&Hy}r&BqXI^@F6v3_l2#1%ki{g zzmiLcwDs=mmnuPO?K>D)-m-YoSHFeHp)Q2u#XvK)l-uUrK-8I9XYHaF#lQ(?*G1-S(h92?Ba#y(Lw3S_RGK@LwH zNbPZ|gH_qSF|OT@7I=xyG{o#-_O2xsZMR@n;{M)BQzY z`9&YFX;Ro2$jas=S&(ihV4K{~(MrxTlsj}IwkY-jg!?rMEt2dab}cUm8bf{)(*&f_ zRveFgg7nj3$?TDrO|t_Fmy-qBuDUNgrcniO8mi>AB)}oklCv;Jxk-0 zc>w41&5EL>TCVF>Da|$h*Z7Mi81AXOPgsV+{er)Ai>8 zIQEy)_5vo#{rU&Woy1KYy}<|k1;oh~cnqH}It9V(RcMkHK}JN#=F%+a9J(rpxPz&M ztntNXr9hc8y=7aPBuWMQA+ zsB2&*%MOe7@I;Fb-7`Q)k{nDDE$hVaoV-YM=G+u)&k|ttfoKebHzxiFmHpoBI9fag zX8F0Nse4$sbW)N`A`-E}mYQU0#N2grL<#?%+k)W@wh$P&xHd^1|FI$mSL2QQC zg5za}PD2u85D(cB&>`$e>N(~pHdc1TN73vlc5>@D{z3gX@yvQ=ni`dEYllwKMu3N3 zJtr3`0pF?KXSZPwz}i8Vp^(rbTE4c4;*Rpq0=IzmoY*X3ipbW3z!T}bpj6`a?^nxf zttfH#o?Mfi6CmiX2`*H}95q}HQmOst$a?4Y^yaohadOKdGb4)fc~fvtFOMs@3Ln zz4KXHt<&QQ-Anj@z>6OO>VEv;0o=H|spf@tP9FKEo75p+>bn5_r$yB`47@+07&P#{ zy69FvrU&kLsI8(JIEgNxoPXPRfe%+4zSf^O9@!U{RwHWNwGB?W5$+2Fb6b42Y3*8rv_-`$QB74<%u8V~ToR+6iUrVTeG=#^NA*JGWQs^L%h{AAqrNO4?qpD-r1DgCfL<200J;buJj~aF~ zX|mF>V_9_Sgy#?y6(K(b+osYOgYb=wq>t&W#Sl(d;8a+I0aCvH-5%cFZSJ4bL$|=U zQmYcSb>GyzdujnpwgSG;G0L&a;v&gb_Wbm8m@<#F=ma+MnoPGUA{$`O*{Uo}C#d4rd)(y|A;h7PFkD zbddF%IdW29y=sN%C?C7#s8&+F1HQ%iN!_uI5e00r$Na9=F{A$u6Uct;Cm&QCdp=Z3 zi@?~+UoV*y9%NI&-v9b($CMst2~Zx+VLV%ucWD}gqid%$W2W{;$&J%;^t31>`mbs! z%L|#%Yz-)SLDulLGTDoYQ5Qu6Hr*`90kRLMp@TkF-Xo7lm=nB2TI`|#lbLo{M@Jcn z!H%(dl8M>g%eW&i3eSM)K_Z8oq-A}^MD{8xnq%2W`ljwHVvs<@va+&nXAiiQBnQr7 z8ws7G)t=tHc@)39d5=i|5YUoP0|{NM%s?cUXoWm=GL1H}imHF3WgbM@=wcqRZ+LcN zP#Fc5QR|SY*)Sr(n`m}m*}al5cf*d_E^7{5OmjnkLlBjn3kJq*wdLysra&CR_Z1MP z&hjMTy$YiLTE6-saSshjrpX~`)!~cxi`eF5oJ$MH<8ai;ew#0$yBGAz<=Ol`BIs_d zt<3MFEgmDH+E9uR=RLUuOfCg|L}a0x@+A~HFw#bt5>+fv$N;i<*^uEe`wH8*=@B_W z8KM5X_?LvvsP2CrlW29g^(gj!xU|7&ngk1lJT$FGhcv|!Y7Ii}EG8(0(#ELG>(k0m zP7Vr8IuVPAsIarCxYBkqm&W&RJ*INzNX$E+Lj-da)cwfn&rXBMlC8LZ>m2%E!@ejQ z-@arTQpqxp!;SXtdYcKh&3iUC$VYfvMp6K&eL9c0+LGVsd6Gdbd4RT%69Nm}c9|5E z%~OwEPkKV*!%6&sh3u+*Z|@7{E{j`$DL;T?`lYgY*@V7evfT{({m;)}74Jl{;O5Vw z2g_fbCJX6IYJ!0hFXiAyA@E*Uz#bevniXoc)xzV{3Bd{=gcYd06L{7#B#)(F>Kq{xj)VeOU5B9!e2LP%^Ea=^^h!Z7-+9h`5@dpA<6~Qx-yLcwbS8=d<<(Mab|>} z(v>JwC80~Hf<@`@j_Td9_!{PqSj4X#+BE49M(Bf!9Fe=cD+3_CW$&50N6UR$lpOoF zn{IEjbI9{8i#3Bc9b}J_7Wylmb&}j-QG>CvA%luXU@s0q`*aM4?maoP?pWB8;BNj^ z!%q~R$k#XEZR!)oUiudba!d-*~1vv-GHNCeM!7L%+L$sYQNusk2nfi?MfG!GNOc(_7uvVim=kxo@w zm$ga`*>FUEE1}QvYTJ4;E3vg)uY(f*pFmNV)~<)^^f%9SycOZg&M6}%qXl$G_*7VK z^a9Jg%!d(urIjaIt)BSxDhoKr>5(TZuAjFh+&uO6;q;wy()6$YH%a+l1B)CAW<6zf zKdGV+yl}1TOgWo-%%gcr@#N{;_SWl<$}SV~S1SS!YicaH=d}0VTb`O9C@n43`duD; zdV)Un_{%`a=>umn70<3TPeU@9m*?9v`ai$(?9tAyztK(YAk*KSr<^%Gkks?qae2T-Fy$#js1fD-Tc{CHccS@4|7C3+<;z7>%>ID<^tkap7;Cuok6>2qy zpC<3ue8xdZz=}^69`12DU!=OENP0^I1r;~e8Z+>fNihnPp^#Ir-^`4-3>ITwiMfHA zML}-ox^HmGYreC61J{gYsa8$z1FR&DwNF!Giw23|5L<-xm>Am2%_h!NvTx?TzWm?! z9>1R8$TGC8_RSmFjj01j8nlkUn219$RU{r>p)gdDHHRw3zvUh()~Ly~OCtZP-9 z|Da#6BXd?mj@~-{YYf(`_$8h8nwE67qLos_Qz);C?vJ9xNr(sYMN4)< ziLY^f1V}Ve-~pVD-jsKmE<6KV7TsV=JD)h>Q=Z=Kuxg$jFyM)Uu>sa=JoAQSo<1{V z#p_+~n?iVuolV~LjbAK*$_%ih0W+WYP0z3`!nwNFmuM(Oi(iDC*hOKtbWW=Fx|?C+ zz4b+xt%|MvkB4awKLPJA3*GoEi`*{rSO!WS1kXDJnf-C(!tsaon&d>Au%A3x*P8>~ z5GafX-H4CTnh~tI_od>dLm^v@Xw#~~*BKAVA1r+J>hNmT^QEAkj;O&4U68cn_Ym(cyk|gbUWnz=mYv$g zD!(I$qeE0yqT1^-w&7llI<6mEFNVqQFgxsg(TxAp&xqfe`Kv#2jK(`kjLw!`(db}R zhShU3v>tV>QTE!6ytUkK{tfFVO)WFh_;)SLc5lLUW8)8=y&r+%bX0r$_CLyYzLp{EWsN-Nb}F=6Q`<`u!sL^~|GM+4DYk?wJr zuDpSGJx0SV_~@ED>`J|I#v?NA-bCg1%mIME12r^8q6!J~-k{^3 z-b$Bu{2n!UPV8^$B=-XytA)P4!7Q1h7*w8vYJ`B65oO+tCR)FvS0Gv+W AzW@LL diff --git a/releases/1.1/Libs/eBdb.EpubReader.dll b/releases/1.1/Libs/eBdb.EpubReader.dll deleted file mode 100644 index f6a1dd32a5d2853b3fb042f0bdbbc25f5ca4aa9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30208 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 Ht%3gu>fg&x diff --git a/releases/1.1/Libs/eBdb.EpubReader.dll.gz b/releases/1.1/Libs/eBdb.EpubReader.dll.gz deleted file mode 100644 index ef0fc648cb5ab46484221b12401a131b4ec746ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16017 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

- /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - if (_watcher != null) _watcher.Dispose(); - if (_upnpController != null) _upnpController.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.databaseFileName = new System.Windows.Forms.TextBox(); - this.label21 = new System.Windows.Forms.Label(); - this.useWatcher = new System.Windows.Forms.CheckBox(); - this.duplicates = new System.Windows.Forms.Label(); - this.label16 = new System.Windows.Forms.Label(); - this.label15 = new System.Windows.Forms.Label(); - this.status = new System.Windows.Forms.Label(); - this.label14 = new System.Windows.Forms.Label(); - this.rate = new System.Windows.Forms.Label(); - this.label12 = new System.Windows.Forms.Label(); - this.elapsedTime = new System.Windows.Forms.Label(); - this.label10 = new System.Windows.Forms.Label(); - this.startTime = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.booksProcessed = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.invalidBooks = new System.Windows.Forms.Label(); - this.label9 = new System.Windows.Forms.Label(); - this.skippedBooks = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.booksFound = new System.Windows.Forms.Label(); - this.booksInDB = new System.Windows.Forms.Label(); - this.folderButton = new System.Windows.Forms.Button(); - this.label2 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.scannerButton = new System.Windows.Forms.Button(); - this.libraryPath = new System.Windows.Forms.TextBox(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.useAbsoluteUri = new System.Windows.Forms.CheckBox(); - this.interfaceCombo = new System.Windows.Forms.ComboBox(); - this.label29 = new System.Windows.Forms.Label(); - this.statUniqueClients = new System.Windows.Forms.Label(); - this.label26 = new System.Windows.Forms.Label(); - this.statImages = new System.Windows.Forms.Label(); - this.label27 = new System.Windows.Forms.Label(); - this.statBooks = new System.Windows.Forms.Label(); - this.label25 = new System.Windows.Forms.Label(); - this.statRequests = new System.Windows.Forms.Label(); - this.label23 = new System.Windows.Forms.Label(); - this.extLink = new System.Windows.Forms.LinkLabel(); - this.intLink = new System.Windows.Forms.LinkLabel(); - this.label13 = new System.Windows.Forms.Label(); - this.extIPlabel = new System.Windows.Forms.Label(); - this.intIPlabel = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.serverButton = new System.Windows.Forms.Button(); - this.openPort = new System.Windows.Forms.CheckBox(); - this.serverPort = new System.Windows.Forms.TextBox(); - this.useUPnP = new System.Windows.Forms.CheckBox(); - this.rootPrefix = new System.Windows.Forms.TextBox(); - this.serverName = new System.Windows.Forms.TextBox(); - this.tabPage5 = new System.Windows.Forms.TabPage(); - this.statBannedClients = new System.Windows.Forms.Label(); - this.label31 = new System.Windows.Forms.Label(); - this.label24 = new System.Windows.Forms.Label(); - this.statWrongLogins = new System.Windows.Forms.Label(); - this.label30 = new System.Windows.Forms.Label(); - this.statGoodLogins = new System.Windows.Forms.Label(); - this.label28 = new System.Windows.Forms.Label(); - this.dataGridView1 = new System.Windows.Forms.DataGridView(); - this.wrongAttemptsCount = new System.Windows.Forms.NumericUpDown(); - this.banClients = new System.Windows.Forms.CheckBox(); - this.rememberClients = new System.Windows.Forms.CheckBox(); - this.useHTTPAuth = new System.Windows.Forms.CheckBox(); - this.tabPage3 = new System.Windows.Forms.TabPage(); - this.label32 = new System.Windows.Forms.Label(); - this.updateCombo = new System.Windows.Forms.ComboBox(); - this.label22 = new System.Windows.Forms.Label(); - this.logVerbosity = new System.Windows.Forms.ComboBox(); - this.converterLinkLabel = new System.Windows.Forms.LinkLabel(); - this.label11 = new System.Windows.Forms.Label(); - this.langCombo = new System.Windows.Forms.ComboBox(); - this.label8 = new System.Windows.Forms.Label(); - this.convertorFolder = new System.Windows.Forms.Button(); - this.convertorPath = new System.Windows.Forms.TextBox(); - this.saveLog = new System.Windows.Forms.CheckBox(); - this.closeToTray = new System.Windows.Forms.CheckBox(); - this.startMinimized = new System.Windows.Forms.CheckBox(); - this.startWithWindows = new System.Windows.Forms.CheckBox(); - this.tabPage4 = new System.Windows.Forms.TabPage(); - this.linkLabel5 = new System.Windows.Forms.LinkLabel(); - this.linkLabel4 = new System.Windows.Forms.LinkLabel(); - this.linkLabel3 = new System.Windows.Forms.LinkLabel(); - this.label20 = new System.Windows.Forms.Label(); - this.label19 = new System.Windows.Forms.Label(); - this.linkLabel2 = new System.Windows.Forms.LinkLabel(); - this.label18 = new System.Windows.Forms.Label(); - this.linkLabel1 = new System.Windows.Forms.LinkLabel(); - this.label17 = new System.Windows.Forms.Label(); - this.appVersion = new System.Windows.Forms.Label(); - this.appName = new System.Windows.Forms.Label(); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.donateButton = new System.Windows.Forms.Button(); - this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.windowMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.serverMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); - this.exitMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.tabControl1.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.tabPage2.SuspendLayout(); - this.tabPage5.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.wrongAttemptsCount)).BeginInit(); - this.tabPage3.SuspendLayout(); - this.tabPage4.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - this.contextMenuStrip.SuspendLayout(); - this.SuspendLayout(); - // - // tabControl1 - // - this.tabControl1.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.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Controls.Add(this.tabPage2); - this.tabControl1.Controls.Add(this.tabPage5); - this.tabControl1.Controls.Add(this.tabPage3); - this.tabControl1.Controls.Add(this.tabPage4); - this.tabControl1.ItemSize = new System.Drawing.Size(91, 30); - this.tabControl1.Location = new System.Drawing.Point(-3, -1); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(481, 327); - this.tabControl1.TabIndex = 8; - // - // tabPage1 - // - this.tabPage1.BackColor = System.Drawing.SystemColors.Control; - this.tabPage1.Controls.Add(this.databaseFileName); - this.tabPage1.Controls.Add(this.label21); - this.tabPage1.Controls.Add(this.useWatcher); - this.tabPage1.Controls.Add(this.duplicates); - this.tabPage1.Controls.Add(this.label16); - this.tabPage1.Controls.Add(this.label15); - this.tabPage1.Controls.Add(this.status); - this.tabPage1.Controls.Add(this.label14); - this.tabPage1.Controls.Add(this.rate); - this.tabPage1.Controls.Add(this.label12); - this.tabPage1.Controls.Add(this.elapsedTime); - this.tabPage1.Controls.Add(this.label10); - this.tabPage1.Controls.Add(this.startTime); - this.tabPage1.Controls.Add(this.label6); - this.tabPage1.Controls.Add(this.booksProcessed); - this.tabPage1.Controls.Add(this.label5); - this.tabPage1.Controls.Add(this.invalidBooks); - this.tabPage1.Controls.Add(this.label9); - this.tabPage1.Controls.Add(this.skippedBooks); - this.tabPage1.Controls.Add(this.label7); - this.tabPage1.Controls.Add(this.booksFound); - this.tabPage1.Controls.Add(this.booksInDB); - this.tabPage1.Controls.Add(this.folderButton); - this.tabPage1.Controls.Add(this.label2); - this.tabPage1.Controls.Add(this.label1); - this.tabPage1.Controls.Add(this.scannerButton); - this.tabPage1.Controls.Add(this.libraryPath); - this.tabPage1.Location = new System.Drawing.Point(4, 34); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(473, 289); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "Scanner settings"; - // - // databaseFileName - // - this.databaseFileName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.databaseFileName.Location = new System.Drawing.Point(125, 62); - this.databaseFileName.Name = "databaseFileName"; - this.databaseFileName.ReadOnly = true; - this.databaseFileName.Size = new System.Drawing.Size(336, 20); - this.databaseFileName.TabIndex = 32; - // - // label21 - // - this.label21.AutoSize = true; - this.label21.Location = new System.Drawing.Point(15, 66); - this.label21.Name = "label21"; - this.label21.Size = new System.Drawing.Size(104, 13); - this.label21.TabIndex = 31; - this.label21.Text = "Database file name: "; - // - // useWatcher - // - this.useWatcher.AutoSize = true; - this.useWatcher.Checked = global::TinyOPDS.Properties.Settings.Default.WatchLibrary; - this.useWatcher.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::TinyOPDS.Properties.Settings.Default, "WatchLibrary", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.useWatcher.Location = new System.Drawing.Point(329, 34); - this.useWatcher.Name = "useWatcher"; - this.useWatcher.Size = new System.Drawing.Size(135, 17); - this.useWatcher.TabIndex = 30; - this.useWatcher.Text = "Monitor library changes"; - this.useWatcher.UseVisualStyleBackColor = true; - this.useWatcher.CheckedChanged += new System.EventHandler(this.useWatcher_CheckedChanged); - // - // duplicates - // - this.duplicates.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.duplicates.AutoSize = true; - this.duplicates.Location = new System.Drawing.Point(122, 209); - this.duplicates.MinimumSize = new System.Drawing.Size(50, 0); - this.duplicates.Name = "duplicates"; - this.duplicates.Size = new System.Drawing.Size(50, 13); - this.duplicates.TabIndex = 29; - this.duplicates.Text = "0"; - // - // label16 - // - this.label16.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label16.AutoSize = true; - this.label16.Location = new System.Drawing.Point(15, 209); - this.label16.Name = "label16"; - this.label16.Size = new System.Drawing.Size(60, 13); - this.label16.TabIndex = 28; - this.label16.Text = "Duplicates:"; - // - // label15 - // - this.label15.AutoSize = true; - this.label15.Location = new System.Drawing.Point(14, 16); - this.label15.Name = "label15"; - this.label15.Size = new System.Drawing.Size(105, 13); - this.label15.TabIndex = 27; - this.label15.Text = "Path to books folder:"; - // - // status - // - this.status.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.status.AutoSize = true; - this.status.Location = new System.Drawing.Point(360, 209); - this.status.MinimumSize = new System.Drawing.Size(50, 0); - this.status.Name = "status"; - this.status.Size = new System.Drawing.Size(58, 13); - this.status.TabIndex = 26; - this.status.Text = "STOPPED"; - // - // label14 - // - this.label14.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(253, 209); - this.label14.Name = "label14"; - this.label14.Size = new System.Drawing.Size(40, 13); - this.label14.TabIndex = 25; - this.label14.Text = "Status:"; - // - // rate - // - this.rate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.rate.AutoSize = true; - this.rate.Location = new System.Drawing.Point(360, 183); - this.rate.MinimumSize = new System.Drawing.Size(50, 0); - this.rate.Name = "rate"; - this.rate.Size = new System.Drawing.Size(66, 13); - this.rate.TabIndex = 24; - this.rate.Text = "0 books/min"; - // - // label12 - // - this.label12.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(253, 183); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(33, 13); - this.label12.TabIndex = 23; - this.label12.Text = "Rate:"; - // - // elapsedTime - // - this.elapsedTime.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.elapsedTime.AutoSize = true; - this.elapsedTime.Location = new System.Drawing.Point(360, 157); - this.elapsedTime.MinimumSize = new System.Drawing.Size(50, 0); - this.elapsedTime.Name = "elapsedTime"; - this.elapsedTime.Size = new System.Drawing.Size(50, 13); - this.elapsedTime.TabIndex = 22; - this.elapsedTime.Text = "00:00:00"; - // - // label10 - // - this.label10.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(253, 157); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(70, 13); - this.label10.TabIndex = 21; - this.label10.Text = "Elapsed time:"; - // - // startTime - // - this.startTime.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.startTime.AutoSize = true; - this.startTime.Location = new System.Drawing.Point(360, 131); - this.startTime.MinimumSize = new System.Drawing.Size(50, 0); - this.startTime.Name = "startTime"; - this.startTime.Size = new System.Drawing.Size(50, 13); - this.startTime.TabIndex = 20; - this.startTime.Text = "00:00:00"; - // - // label6 - // - this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(253, 131); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(54, 13); - this.label6.TabIndex = 19; - this.label6.Text = "Start time:"; - // - // booksProcessed - // - this.booksProcessed.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.booksProcessed.AutoSize = true; - this.booksProcessed.Location = new System.Drawing.Point(123, 235); - this.booksProcessed.MinimumSize = new System.Drawing.Size(50, 0); - this.booksProcessed.Name = "booksProcessed"; - this.booksProcessed.Size = new System.Drawing.Size(50, 13); - this.booksProcessed.TabIndex = 18; - this.booksProcessed.Text = "0"; - // - // label5 - // - this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(15, 235); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(92, 13); - this.label5.TabIndex = 17; - this.label5.Text = "Books processed:"; - // - // invalidBooks - // - this.invalidBooks.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.invalidBooks.AutoSize = true; - this.invalidBooks.Location = new System.Drawing.Point(123, 157); - this.invalidBooks.MinimumSize = new System.Drawing.Size(50, 0); - this.invalidBooks.Name = "invalidBooks"; - this.invalidBooks.Size = new System.Drawing.Size(50, 13); - this.invalidBooks.TabIndex = 16; - this.invalidBooks.Text = "0"; - // - // label9 - // - this.label9.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(15, 157); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(73, 13); - this.label9.TabIndex = 15; - this.label9.Text = "Invalid books:"; - // - // skippedBooks - // - this.skippedBooks.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.skippedBooks.AutoSize = true; - this.skippedBooks.Location = new System.Drawing.Point(123, 183); - this.skippedBooks.MinimumSize = new System.Drawing.Size(50, 0); - this.skippedBooks.Name = "skippedBooks"; - this.skippedBooks.Size = new System.Drawing.Size(50, 13); - this.skippedBooks.TabIndex = 14; - this.skippedBooks.Text = "0"; - // - // label7 - // - this.label7.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(15, 183); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(81, 13); - this.label7.TabIndex = 13; - this.label7.Text = "Skipped books:"; - // - // booksFound - // - this.booksFound.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.booksFound.AutoSize = true; - this.booksFound.Location = new System.Drawing.Point(123, 131); - this.booksFound.MinimumSize = new System.Drawing.Size(50, 0); - this.booksFound.Name = "booksFound"; - this.booksFound.Size = new System.Drawing.Size(79, 13); - this.booksFound.TabIndex = 12; - this.booksFound.Text = "fb2: 0 epub: 0"; - // - // booksInDB - // - this.booksInDB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.booksInDB.AutoSize = true; - this.booksInDB.Location = new System.Drawing.Point(123, 92); - this.booksInDB.MinimumSize = new System.Drawing.Size(50, 0); - this.booksInDB.Name = "booksInDB"; - this.booksInDB.Size = new System.Drawing.Size(127, 13); - this.booksInDB.TabIndex = 11; - this.booksInDB.Text = "0 fb2: 0 epub: 0"; - // - // folderButton - // - this.folderButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.folderButton.Image = global::TinyOPDS.Properties.Resources.folder; - this.folderButton.Location = new System.Drawing.Point(287, 30); - this.folderButton.Name = "folderButton"; - this.folderButton.Size = new System.Drawing.Size(29, 23); - this.folderButton.TabIndex = 10; - this.folderButton.UseVisualStyleBackColor = true; - this.folderButton.Click += new System.EventHandler(this.folderButton_Click); - // - // label2 - // - this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(15, 92); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(101, 13); - this.label2.TabIndex = 9; - this.label2.Text = "Books in database: "; - // - // label1 - // - this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(15, 131); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(70, 13); - this.label1.TabIndex = 8; - this.label1.Text = "Books found:"; - // - // scannerButton - // - this.scannerButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.scannerButton.Location = new System.Drawing.Point(255, 241); - this.scannerButton.Name = "scannerButton"; - this.scannerButton.Size = new System.Drawing.Size(210, 40); - this.scannerButton.TabIndex = 7; - this.scannerButton.Text = "Start scanning"; - this.scannerButton.UseVisualStyleBackColor = true; - this.scannerButton.Click += new System.EventHandler(this.scannerButton_Click); - // - // libraryPath - // - this.libraryPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.libraryPath.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::TinyOPDS.Properties.Settings.Default, "LibraryPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.libraryPath.Location = new System.Drawing.Point(17, 32); - this.libraryPath.Name = "libraryPath"; - this.libraryPath.Size = new System.Drawing.Size(268, 20); - this.libraryPath.TabIndex = 6; - this.libraryPath.Text = global::TinyOPDS.Properties.Settings.Default.LibraryPath; - this.libraryPath.Validated += new System.EventHandler(this.libraryPath_Validated); - // - // tabPage2 - // - this.tabPage2.BackColor = System.Drawing.SystemColors.Control; - this.tabPage2.Controls.Add(this.useAbsoluteUri); - this.tabPage2.Controls.Add(this.interfaceCombo); - this.tabPage2.Controls.Add(this.label29); - this.tabPage2.Controls.Add(this.statUniqueClients); - this.tabPage2.Controls.Add(this.label26); - this.tabPage2.Controls.Add(this.statImages); - this.tabPage2.Controls.Add(this.label27); - this.tabPage2.Controls.Add(this.statBooks); - this.tabPage2.Controls.Add(this.label25); - this.tabPage2.Controls.Add(this.statRequests); - this.tabPage2.Controls.Add(this.label23); - this.tabPage2.Controls.Add(this.extLink); - this.tabPage2.Controls.Add(this.intLink); - this.tabPage2.Controls.Add(this.label13); - this.tabPage2.Controls.Add(this.extIPlabel); - this.tabPage2.Controls.Add(this.intIPlabel); - this.tabPage2.Controls.Add(this.label4); - this.tabPage2.Controls.Add(this.label3); - this.tabPage2.Controls.Add(this.serverButton); - this.tabPage2.Controls.Add(this.openPort); - this.tabPage2.Controls.Add(this.serverPort); - this.tabPage2.Controls.Add(this.useUPnP); - this.tabPage2.Controls.Add(this.rootPrefix); - this.tabPage2.Controls.Add(this.serverName); - this.tabPage2.Location = new System.Drawing.Point(4, 34); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(3); - this.tabPage2.Size = new System.Drawing.Size(473, 289); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = "OPDS server settings"; - // - // useAbsoluteUri - // - this.useAbsoluteUri.AutoSize = true; - this.useAbsoluteUri.Checked = global::TinyOPDS.Properties.Settings.Default.UseAbsoluteUri; - this.useAbsoluteUri.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::TinyOPDS.Properties.Settings.Default, "UseAbsoluteUri", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.useAbsoluteUri.Location = new System.Drawing.Point(294, 126); - this.useAbsoluteUri.Name = "useAbsoluteUri"; - this.useAbsoluteUri.Size = new System.Drawing.Size(91, 17); - this.useAbsoluteUri.TabIndex = 48; - this.useAbsoluteUri.Text = "Absolute links"; - this.useAbsoluteUri.UseVisualStyleBackColor = true; - // - // interfaceCombo - // - this.interfaceCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.interfaceCombo.FormattingEnabled = true; - this.interfaceCombo.Location = new System.Drawing.Point(294, 35); - this.interfaceCombo.Name = "interfaceCombo"; - this.interfaceCombo.Size = new System.Drawing.Size(113, 21); - this.interfaceCombo.TabIndex = 47; - this.interfaceCombo.SelectedIndexChanged += new System.EventHandler(this.interfaceCombo_SelectedIndexChanged); - // - // label29 - // - this.label29.AutoSize = true; - this.label29.Location = new System.Drawing.Point(292, 16); - this.label29.Name = "label29"; - this.label29.Size = new System.Drawing.Size(94, 13); - this.label29.TabIndex = 46; - this.label29.Text = "Network interface:"; - // - // statUniqueClients - // - this.statUniqueClients.AutoSize = true; - this.statUniqueClients.Location = new System.Drawing.Point(144, 229); - this.statUniqueClients.Name = "statUniqueClients"; - this.statUniqueClients.Size = new System.Drawing.Size(13, 13); - this.statUniqueClients.TabIndex = 45; - this.statUniqueClients.Text = "0"; - // - // label26 - // - this.label26.AutoSize = true; - this.label26.Location = new System.Drawing.Point(20, 229); - this.label26.Name = "label26"; - this.label26.Size = new System.Drawing.Size(77, 13); - this.label26.TabIndex = 44; - this.label26.Text = "Unique clients:"; - // - // statImages - // - this.statImages.AutoSize = true; - this.statImages.Location = new System.Drawing.Point(445, 201); - this.statImages.Name = "statImages"; - this.statImages.Size = new System.Drawing.Size(13, 13); - this.statImages.TabIndex = 43; - this.statImages.Text = "0"; - // - // label27 - // - this.label27.AutoSize = true; - this.label27.Location = new System.Drawing.Point(352, 201); - this.label27.Name = "label27"; - this.label27.Size = new System.Drawing.Size(67, 13); - this.label27.TabIndex = 42; - this.label27.Text = "Images sent:"; - // - // statBooks - // - this.statBooks.AutoSize = true; - this.statBooks.Location = new System.Drawing.Point(297, 201); - this.statBooks.Name = "statBooks"; - this.statBooks.Size = new System.Drawing.Size(13, 13); - this.statBooks.TabIndex = 41; - this.statBooks.Text = "0"; - // - // label25 - // - this.label25.AutoSize = true; - this.label25.Location = new System.Drawing.Point(200, 201); - this.label25.Name = "label25"; - this.label25.Size = new System.Drawing.Size(63, 13); - this.label25.TabIndex = 40; - this.label25.Text = "Books sent:"; - // - // statRequests - // - this.statRequests.AutoSize = true; - this.statRequests.Location = new System.Drawing.Point(144, 201); - this.statRequests.Name = "statRequests"; - this.statRequests.Size = new System.Drawing.Size(13, 13); - this.statRequests.TabIndex = 39; - this.statRequests.Text = "0"; - // - // label23 - // - this.label23.AutoSize = true; - this.label23.Location = new System.Drawing.Point(20, 201); - this.label23.Name = "label23"; - this.label23.Size = new System.Drawing.Size(77, 13); - this.label23.TabIndex = 38; - this.label23.Text = "Total requests:"; - // - // extLink - // - this.extLink.Location = new System.Drawing.Point(112, 152); - this.extLink.Name = "extLink"; - this.extLink.Size = new System.Drawing.Size(176, 13); - this.extLink.TabIndex = 37; - this.extLink.TabStop = true; - this.extLink.Text = "- - - - - -"; - this.extLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel_LinkClicked); - // - // intLink - // - this.intLink.Location = new System.Drawing.Point(112, 126); - this.intLink.Name = "intLink"; - this.intLink.Size = new System.Drawing.Size(176, 13); - this.intLink.TabIndex = 36; - this.intLink.TabStop = true; - this.intLink.Text = "- - - - - -"; - this.intLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel_LinkClicked); - // - // label13 - // - this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(19, 72); - this.label13.Name = "label13"; - this.label13.Size = new System.Drawing.Size(127, 13); - this.label13.TabIndex = 18; - this.label13.Text = "OPDS root catalog prefix:"; - // - // extIPlabel - // - this.extIPlabel.AutoSize = true; - this.extIPlabel.Location = new System.Drawing.Point(19, 153); - this.extIPlabel.Name = "extIPlabel"; - this.extIPlabel.Size = new System.Drawing.Size(73, 13); - this.extIPlabel.TabIndex = 14; - this.extIPlabel.Text = "External URL:"; - // - // intIPlabel - // - this.intIPlabel.AutoSize = true; - this.intIPlabel.Location = new System.Drawing.Point(19, 127); - this.intIPlabel.Name = "intIPlabel"; - this.intIPlabel.Size = new System.Drawing.Size(61, 13); - this.intIPlabel.TabIndex = 13; - this.intIPlabel.Text = "Local URL:"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(17, 16); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(70, 13); - this.label4.TabIndex = 11; - this.label4.Text = "Server name:"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(419, 16); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(29, 13); - this.label3.TabIndex = 9; - this.label3.Text = "Port:"; - // - // serverButton - // - this.serverButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.serverButton.Location = new System.Drawing.Point(255, 241); - this.serverButton.Name = "serverButton"; - this.serverButton.Size = new System.Drawing.Size(210, 40); - this.serverButton.TabIndex = 8; - this.serverButton.Text = "Start server"; - this.serverButton.Click += new System.EventHandler(this.serverButton_Click); - // - // openPort - // - this.openPort.AutoSize = true; - this.openPort.Checked = global::TinyOPDS.Properties.Settings.Default.OpenNATPort; - this.openPort.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::TinyOPDS.Properties.Settings.Default, "OpenNATPort", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.openPort.Enabled = false; - this.openPort.Location = new System.Drawing.Point(294, 97); - this.openPort.Name = "openPort"; - this.openPort.Size = new System.Drawing.Size(130, 17); - this.openPort.TabIndex = 15; - this.openPort.Text = "Forward port on router"; - this.openPort.UseVisualStyleBackColor = true; - this.openPort.CheckedChanged += new System.EventHandler(this.openPort_CheckedChanged); - // - // serverPort - // - this.serverPort.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::TinyOPDS.Properties.Settings.Default, "ServerPort", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.serverPort.Location = new System.Drawing.Point(421, 35); - this.serverPort.Name = "serverPort"; - this.serverPort.Size = new System.Drawing.Size(44, 20); - this.serverPort.TabIndex = 10; - this.serverPort.Text = global::TinyOPDS.Properties.Settings.Default.ServerPort; - this.serverPort.Validated += new System.EventHandler(this.serverPort_Validated); - // - // useUPnP - // - this.useUPnP.AutoSize = true; - this.useUPnP.Checked = global::TinyOPDS.Properties.Settings.Default.UseUPnP; - this.useUPnP.CheckState = System.Windows.Forms.CheckState.Checked; - this.useUPnP.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::TinyOPDS.Properties.Settings.Default, "UseUPnP", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.useUPnP.Location = new System.Drawing.Point(294, 68); - this.useUPnP.Name = "useUPnP"; - this.useUPnP.Size = new System.Drawing.Size(76, 17); - this.useUPnP.TabIndex = 35; - this.useUPnP.Text = "Use UPnP"; - this.useUPnP.UseVisualStyleBackColor = true; - this.useUPnP.CheckStateChanged += new System.EventHandler(this.useUPnP_CheckStateChanged); - // - // rootPrefix - // - this.rootPrefix.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::TinyOPDS.Properties.Settings.Default, "RootPrefix", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.rootPrefix.Location = new System.Drawing.Point(22, 92); - this.rootPrefix.Name = "rootPrefix"; - this.rootPrefix.Size = new System.Drawing.Size(254, 20); - this.rootPrefix.TabIndex = 19; - this.rootPrefix.Text = global::TinyOPDS.Properties.Settings.Default.RootPrefix; - this.rootPrefix.TextChanged += new System.EventHandler(this.rootPrefix_TextChanged); - // - // serverName - // - this.serverName.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::TinyOPDS.Properties.Settings.Default, "ServerName", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.serverName.Location = new System.Drawing.Point(20, 35); - this.serverName.Name = "serverName"; - this.serverName.Size = new System.Drawing.Size(256, 20); - this.serverName.TabIndex = 12; - this.serverName.Text = global::TinyOPDS.Properties.Settings.Default.ServerName; - // - // tabPage5 - // - this.tabPage5.BackColor = System.Drawing.SystemColors.Control; - this.tabPage5.Controls.Add(this.statBannedClients); - this.tabPage5.Controls.Add(this.label31); - this.tabPage5.Controls.Add(this.label24); - this.tabPage5.Controls.Add(this.statWrongLogins); - this.tabPage5.Controls.Add(this.label30); - this.tabPage5.Controls.Add(this.statGoodLogins); - this.tabPage5.Controls.Add(this.label28); - this.tabPage5.Controls.Add(this.dataGridView1); - this.tabPage5.Controls.Add(this.wrongAttemptsCount); - this.tabPage5.Controls.Add(this.banClients); - this.tabPage5.Controls.Add(this.rememberClients); - this.tabPage5.Controls.Add(this.useHTTPAuth); - this.tabPage5.Location = new System.Drawing.Point(4, 34); - this.tabPage5.Name = "tabPage5"; - this.tabPage5.Padding = new System.Windows.Forms.Padding(3); - this.tabPage5.Size = new System.Drawing.Size(473, 289); - this.tabPage5.TabIndex = 4; - this.tabPage5.Text = "Authentication"; - // - // statBannedClients - // - this.statBannedClients.AutoSize = true; - this.statBannedClients.Location = new System.Drawing.Point(429, 254); - this.statBannedClients.Name = "statBannedClients"; - this.statBannedClients.Size = new System.Drawing.Size(13, 13); - this.statBannedClients.TabIndex = 48; - this.statBannedClients.Text = "0"; - this.statBannedClients.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // label31 - // - this.label31.AutoSize = true; - this.label31.Location = new System.Drawing.Point(334, 254); - this.label31.Name = "label31"; - this.label31.Size = new System.Drawing.Size(80, 13); - this.label31.TabIndex = 47; - this.label31.Text = "Banned clients:"; - // - // label24 - // - this.label24.AutoSize = true; - this.label24.Location = new System.Drawing.Point(329, 51); - this.label24.Name = "label24"; - this.label24.Size = new System.Drawing.Size(75, 13); - this.label24.TabIndex = 46; - this.label24.Text = "failed attempts"; - // - // statWrongLogins - // - this.statWrongLogins.AutoSize = true; - this.statWrongLogins.Location = new System.Drawing.Point(279, 254); - this.statWrongLogins.Name = "statWrongLogins"; - this.statWrongLogins.Size = new System.Drawing.Size(13, 13); - this.statWrongLogins.TabIndex = 43; - this.statWrongLogins.Text = "0"; - this.statWrongLogins.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // label30 - // - this.label30.AutoSize = true; - this.label30.Location = new System.Drawing.Point(185, 254); - this.label30.Name = "label30"; - this.label30.Size = new System.Drawing.Size(68, 13); - this.label30.TabIndex = 42; - this.label30.Text = "Failed logins:"; - // - // statGoodLogins - // - this.statGoodLogins.AutoSize = true; - this.statGoodLogins.Location = new System.Drawing.Point(128, 254); - this.statGoodLogins.Name = "statGoodLogins"; - this.statGoodLogins.Size = new System.Drawing.Size(13, 13); - this.statGoodLogins.TabIndex = 41; - this.statGoodLogins.Text = "0"; - this.statGoodLogins.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // label28 - // - this.label28.AutoSize = true; - this.label28.Location = new System.Drawing.Point(23, 254); - this.label28.Name = "label28"; - this.label28.Size = new System.Drawing.Size(92, 13); - this.label28.TabIndex = 40; - this.label28.Text = "Successful logins:"; - // - // dataGridView1 - // - this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.dataGridView1.Location = new System.Drawing.Point(26, 83); - this.dataGridView1.Name = "dataGridView1"; - this.dataGridView1.Size = new System.Drawing.Size(419, 150); - this.dataGridView1.TabIndex = 1; - this.dataGridView1.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.dataGridView1_CellFormatting); - // - // wrongAttemptsCount - // - this.wrongAttemptsCount.DataBindings.Add(new System.Windows.Forms.Binding("Value", global::TinyOPDS.Properties.Settings.Default, "WrongAttemptsCount", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.wrongAttemptsCount.Location = new System.Drawing.Point(283, 46); - this.wrongAttemptsCount.Minimum = new decimal(new int[] { - 3, - 0, - 0, - 0}); - this.wrongAttemptsCount.Name = "wrongAttemptsCount"; - this.wrongAttemptsCount.Size = new System.Drawing.Size(40, 20); - this.wrongAttemptsCount.TabIndex = 45; - this.wrongAttemptsCount.Value = global::TinyOPDS.Properties.Settings.Default.WrongAttemptsCount; - // - // banClients - // - this.banClients.AutoSize = true; - this.banClients.Checked = global::TinyOPDS.Properties.Settings.Default.BanClients; - this.banClients.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::TinyOPDS.Properties.Settings.Default, "BanClients", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.banClients.Location = new System.Drawing.Point(283, 23); - this.banClients.Name = "banClients"; - this.banClients.Size = new System.Drawing.Size(102, 17); - this.banClients.TabIndex = 44; - this.banClients.Text = "Ban clients after"; - this.banClients.UseVisualStyleBackColor = true; - this.banClients.CheckedChanged += new System.EventHandler(this.banClients_CheckedChanged); - // - // rememberClients - // - this.rememberClients.AutoSize = true; - this.rememberClients.Checked = global::TinyOPDS.Properties.Settings.Default.RememberClients; - this.rememberClients.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::TinyOPDS.Properties.Settings.Default, "RememberClients", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.rememberClients.Location = new System.Drawing.Point(26, 51); - this.rememberClients.Name = "rememberClients"; - this.rememberClients.Size = new System.Drawing.Size(162, 17); - this.rememberClients.TabIndex = 2; - this.rememberClients.Text = "Remember authorized clients"; - this.rememberClients.UseVisualStyleBackColor = true; - // - // useHTTPAuth - // - this.useHTTPAuth.AutoSize = true; - this.useHTTPAuth.Checked = global::TinyOPDS.Properties.Settings.Default.UseHTTPAuth; - this.useHTTPAuth.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::TinyOPDS.Properties.Settings.Default, "UseHTTPAuth", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.useHTTPAuth.Location = new System.Drawing.Point(26, 23); - this.useHTTPAuth.Name = "useHTTPAuth"; - this.useHTTPAuth.Size = new System.Drawing.Size(175, 17); - this.useHTTPAuth.TabIndex = 0; - this.useHTTPAuth.Text = "Use HTTP basic authentication"; - this.useHTTPAuth.UseVisualStyleBackColor = true; - this.useHTTPAuth.CheckedChanged += new System.EventHandler(this.useHTTPAuth_CheckedChanged); - // - // tabPage3 - // - this.tabPage3.BackColor = System.Drawing.SystemColors.Control; - this.tabPage3.Controls.Add(this.label32); - this.tabPage3.Controls.Add(this.updateCombo); - this.tabPage3.Controls.Add(this.label22); - this.tabPage3.Controls.Add(this.logVerbosity); - this.tabPage3.Controls.Add(this.converterLinkLabel); - this.tabPage3.Controls.Add(this.label11); - this.tabPage3.Controls.Add(this.langCombo); - this.tabPage3.Controls.Add(this.label8); - this.tabPage3.Controls.Add(this.convertorFolder); - this.tabPage3.Controls.Add(this.convertorPath); - this.tabPage3.Controls.Add(this.saveLog); - this.tabPage3.Controls.Add(this.closeToTray); - this.tabPage3.Controls.Add(this.startMinimized); - this.tabPage3.Controls.Add(this.startWithWindows); - this.tabPage3.Location = new System.Drawing.Point(4, 34); - this.tabPage3.Name = "tabPage3"; - this.tabPage3.Padding = new System.Windows.Forms.Padding(3); - this.tabPage3.Size = new System.Drawing.Size(473, 289); - this.tabPage3.TabIndex = 2; - this.tabPage3.Text = "Miscellaneous"; - // - // label32 - // - this.label32.AutoSize = true; - this.label32.Location = new System.Drawing.Point(298, 143); - this.label32.Name = "label32"; - this.label32.Size = new System.Drawing.Size(92, 13); - this.label32.TabIndex = 38; - this.label32.Text = "Check for update:"; - // - // updateCombo - // - this.updateCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.updateCombo.FormattingEnabled = true; - this.updateCombo.Items.AddRange(new object[] { - "Never", - "Once a week", - "Once a month"}); - this.updateCombo.Location = new System.Drawing.Point(299, 166); - this.updateCombo.Name = "updateCombo"; - this.updateCombo.Size = new System.Drawing.Size(127, 21); - this.updateCombo.TabIndex = 37; - this.updateCombo.SelectedIndexChanged += new System.EventHandler(this.updateCombo_SelectedIndexChanged); - // - // label22 - // - this.label22.AutoSize = true; - this.label22.Location = new System.Drawing.Point(13, 195); - this.label22.Name = "label22"; - this.label22.Size = new System.Drawing.Size(95, 13); - this.label22.TabIndex = 36; - this.label22.Text = "Log verbosity level"; - // - // logVerbosity - // - this.logVerbosity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.logVerbosity.FormattingEnabled = true; - this.logVerbosity.Items.AddRange(new object[] { - "Info, warnings and errors", - "Warnings and errors", - "Errors only"}); - this.logVerbosity.Location = new System.Drawing.Point(14, 218); - this.logVerbosity.Name = "logVerbosity"; - this.logVerbosity.Size = new System.Drawing.Size(246, 21); - this.logVerbosity.TabIndex = 35; - this.logVerbosity.SelectedIndexChanged += new System.EventHandler(this.logVerbosity_SelectedIndexChanged); - // - // converterLinkLabel - // - this.converterLinkLabel.AutoSize = true; - this.converterLinkLabel.Location = new System.Drawing.Point(12, 55); - this.converterLinkLabel.Name = "converterLinkLabel"; - this.converterLinkLabel.Size = new System.Drawing.Size(268, 13); - this.converterLinkLabel.TabIndex = 34; - this.converterLinkLabel.TabStop = true; - this.converterLinkLabel.Text = "Click here to download latest version of ePub converter"; - this.converterLinkLabel.Visible = false; - this.converterLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel3_LinkClicked); - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(296, 82); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(130, 13); - this.label11.TabIndex = 32; - this.label11.Text = "GUI and OPDS language:"; - // - // langCombo - // - this.langCombo.DisplayMember = "Value"; - this.langCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.langCombo.FormattingEnabled = true; - this.langCombo.Location = new System.Drawing.Point(299, 107); - this.langCombo.Name = "langCombo"; - this.langCombo.Size = new System.Drawing.Size(127, 21); - this.langCombo.TabIndex = 31; - this.langCombo.ValueMember = "Key"; - this.langCombo.SelectedValueChanged += new System.EventHandler(this.langCombo_SelectedValueChanged); - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(8, 12); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(138, 13); - this.label8.TabIndex = 30; - this.label8.Text = "Path to the ePub converter:"; - // - // convertorFolder - // - this.convertorFolder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.convertorFolder.Image = global::TinyOPDS.Properties.Resources.folder; - this.convertorFolder.Location = new System.Drawing.Point(430, 26); - this.convertorFolder.Name = "convertorFolder"; - this.convertorFolder.Size = new System.Drawing.Size(29, 23); - this.convertorFolder.TabIndex = 29; - this.convertorFolder.UseVisualStyleBackColor = true; - this.convertorFolder.Click += new System.EventHandler(this.folderButton_Click); - // - // convertorPath - // - this.convertorPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.convertorPath.Location = new System.Drawing.Point(11, 28); - this.convertorPath.Name = "convertorPath"; - this.convertorPath.Size = new System.Drawing.Size(415, 20); - this.convertorPath.TabIndex = 28; - this.convertorPath.Validated += new System.EventHandler(this.convertorPath_Validated); - // - // saveLog - // - this.saveLog.AutoSize = true; - this.saveLog.Checked = global::TinyOPDS.Properties.Settings.Default.SaveLogToDisk; - this.saveLog.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::TinyOPDS.Properties.Settings.Default, "SaveLogToDisk", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.saveLog.Location = new System.Drawing.Point(14, 166); - this.saveLog.Name = "saveLog"; - this.saveLog.Size = new System.Drawing.Size(96, 17); - this.saveLog.TabIndex = 33; - this.saveLog.Text = "Save log to file"; - this.saveLog.UseVisualStyleBackColor = true; - this.saveLog.CheckedChanged += new System.EventHandler(this.saveLog_CheckedChanged); - // - // closeToTray - // - this.closeToTray.AutoSize = true; - this.closeToTray.Checked = global::TinyOPDS.Properties.Settings.Default.CloseToTray; - this.closeToTray.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::TinyOPDS.Properties.Settings.Default, "CloseToTray", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.closeToTray.Location = new System.Drawing.Point(14, 138); - this.closeToTray.Name = "closeToTray"; - this.closeToTray.Size = new System.Drawing.Size(138, 17); - this.closeToTray.TabIndex = 2; - this.closeToTray.Text = "Close or minimize to tray"; - this.closeToTray.UseVisualStyleBackColor = true; - this.closeToTray.CheckedChanged += new System.EventHandler(this.closeToTray_CheckedChanged); - // - // startMinimized - // - this.startMinimized.AutoSize = true; - this.startMinimized.Checked = global::TinyOPDS.Properties.Settings.Default.StartMinimized; - this.startMinimized.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::TinyOPDS.Properties.Settings.Default, "StartMinimized", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.startMinimized.Location = new System.Drawing.Point(14, 110); - this.startMinimized.Name = "startMinimized"; - this.startMinimized.Size = new System.Drawing.Size(96, 17); - this.startMinimized.TabIndex = 1; - this.startMinimized.Text = "Start minimized"; - this.startMinimized.UseVisualStyleBackColor = true; - // - // startWithWindows - // - this.startWithWindows.AutoSize = true; - this.startWithWindows.Checked = global::TinyOPDS.Properties.Settings.Default.StartWithWindows; - this.startWithWindows.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::TinyOPDS.Properties.Settings.Default, "StartWithWindows", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.startWithWindows.Location = new System.Drawing.Point(14, 82); - this.startWithWindows.Name = "startWithWindows"; - this.startWithWindows.Size = new System.Drawing.Size(117, 17); - this.startWithWindows.TabIndex = 0; - this.startWithWindows.Text = "Start with Windows"; - this.startWithWindows.UseVisualStyleBackColor = true; - this.startWithWindows.CheckedChanged += new System.EventHandler(this.startWithWindows_CheckedChanged); - // - // tabPage4 - // - this.tabPage4.BackColor = System.Drawing.SystemColors.Control; - this.tabPage4.Controls.Add(this.linkLabel5); - this.tabPage4.Controls.Add(this.linkLabel4); - this.tabPage4.Controls.Add(this.linkLabel3); - this.tabPage4.Controls.Add(this.label20); - this.tabPage4.Controls.Add(this.label19); - this.tabPage4.Controls.Add(this.linkLabel2); - this.tabPage4.Controls.Add(this.label18); - this.tabPage4.Controls.Add(this.linkLabel1); - this.tabPage4.Controls.Add(this.label17); - this.tabPage4.Controls.Add(this.appVersion); - this.tabPage4.Controls.Add(this.appName); - this.tabPage4.Controls.Add(this.pictureBox1); - this.tabPage4.Controls.Add(this.donateButton); - this.tabPage4.Location = new System.Drawing.Point(4, 34); - this.tabPage4.Name = "tabPage4"; - this.tabPage4.Padding = new System.Windows.Forms.Padding(3); - this.tabPage4.Size = new System.Drawing.Size(473, 289); - this.tabPage4.TabIndex = 3; - this.tabPage4.Text = "About program"; - // - // linkLabel5 - // - this.linkLabel5.AutoSize = true; - this.linkLabel5.Location = new System.Drawing.Point(195, 212); - this.linkLabel5.Name = "linkLabel5"; - this.linkLabel5.Size = new System.Drawing.Size(97, 13); - this.linkLabel5.TabIndex = 12; - this.linkLabel5.TabStop = true; - this.linkLabel5.Text = "ePubReader library"; - this.linkLabel5.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel3_LinkClicked); - // - // linkLabel4 - // - this.linkLabel4.AutoSize = true; - this.linkLabel4.Location = new System.Drawing.Point(195, 235); - this.linkLabel4.Name = "linkLabel4"; - this.linkLabel4.Size = new System.Drawing.Size(86, 13); - this.linkLabel4.TabIndex = 11; - this.linkLabel4.TabStop = true; - this.linkLabel4.Text = "DotNetZip library"; - this.linkLabel4.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel3_LinkClicked); - // - // linkLabel3 - // - this.linkLabel3.AutoSize = true; - this.linkLabel3.Location = new System.Drawing.Point(193, 190); - this.linkLabel3.Name = "linkLabel3"; - this.linkLabel3.Size = new System.Drawing.Size(267, 13); - this.linkLabel3.TabIndex = 10; - this.linkLabel3.TabStop = true; - this.linkLabel3.Text = "Lord KiRon, author of fb2librarynet library and converter"; - this.linkLabel3.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel3_LinkClicked); - // - // label20 - // - this.label20.Location = new System.Drawing.Point(9, 190); - this.label20.Name = "label20"; - this.label20.Size = new System.Drawing.Size(161, 13); - this.label20.TabIndex = 9; - this.label20.Text = "Special thanks:"; - this.label20.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // label19 - // - this.label19.AutoSize = true; - this.label19.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.label19.Location = new System.Drawing.Point(192, 89); - this.label19.Name = "label19"; - this.label19.Size = new System.Drawing.Size(220, 20); - this.label19.TabIndex = 8; - this.label19.Text = "Copyright © 2013, SeNSSoFT"; - // - // linkLabel2 - // - this.linkLabel2.AutoSize = true; - this.linkLabel2.Location = new System.Drawing.Point(193, 167); - this.linkLabel2.Name = "linkLabel2"; - this.linkLabel2.Size = new System.Drawing.Size(184, 13); - this.linkLabel2.TabIndex = 7; - this.linkLabel2.TabStop = true; - this.linkLabel2.Text = "http://tinyopds.codeplex.com/license"; - this.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel_LinkClicked); - // - // label18 - // - this.label18.Location = new System.Drawing.Point(11, 167); - this.label18.Name = "label18"; - this.label18.Size = new System.Drawing.Size(159, 13); - this.label18.TabIndex = 6; - this.label18.Text = "Project license:"; - this.label18.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // linkLabel1 - // - this.linkLabel1.AutoSize = true; - this.linkLabel1.Location = new System.Drawing.Point(193, 144); - this.linkLabel1.Name = "linkLabel1"; - this.linkLabel1.Size = new System.Drawing.Size(151, 13); - this.linkLabel1.TabIndex = 5; - this.linkLabel1.TabStop = true; - this.linkLabel1.Text = "http://tinyopds.codeplex.com/"; - this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel_LinkClicked); - // - // label17 - // - this.label17.Location = new System.Drawing.Point(8, 144); - this.label17.Name = "label17"; - this.label17.Size = new System.Drawing.Size(162, 13); - this.label17.TabIndex = 4; - this.label17.Text = "Project home page:"; - this.label17.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // appVersion - // - this.appVersion.AutoSize = true; - this.appVersion.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.appVersion.Location = new System.Drawing.Point(262, 58); - this.appVersion.Name = "appVersion"; - this.appVersion.Size = new System.Drawing.Size(85, 20); - this.appVersion.TabIndex = 3; - this.appVersion.Text = "version 1.0"; - // - // appName - // - this.appName.AutoSize = true; - this.appName.Font = new System.Drawing.Font("Microsoft Sans Serif", 20F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.appName.Location = new System.Drawing.Point(190, 14); - this.appName.Name = "appName"; - this.appName.Size = new System.Drawing.Size(226, 31); - this.appName.TabIndex = 2; - this.appName.Text = "TinyOPDS server"; - // - // pictureBox1 - // - this.pictureBox1.ErrorImage = null; - this.pictureBox1.Image = global::TinyOPDS.Properties.Resources.TinyOPDS; - this.pictureBox1.Location = new System.Drawing.Point(8, 9); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(103, 103); - this.pictureBox1.TabIndex = 1; - this.pictureBox1.TabStop = false; - // - // donateButton - // - this.donateButton.Image = global::TinyOPDS.Properties.Resources.donate; - this.donateButton.Location = new System.Drawing.Point(9, 223); - this.donateButton.Name = "donateButton"; - this.donateButton.Size = new System.Drawing.Size(157, 56); - this.donateButton.TabIndex = 0; - this.donateButton.UseVisualStyleBackColor = true; - this.donateButton.Click += new System.EventHandler(this.donateButton_Click); - // - // contextMenuStrip - // - this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.windowMenuItem, - this.serverMenuItem, - this.toolStripMenuItem1, - this.exitMenuItem}); - this.contextMenuStrip.Name = "contextMenuStrip1"; - this.contextMenuStrip.Size = new System.Drawing.Size(145, 76); - // - // windowMenuItem - // - this.windowMenuItem.Name = "windowMenuItem"; - this.windowMenuItem.Size = new System.Drawing.Size(144, 22); - this.windowMenuItem.Text = "Hide window"; - this.windowMenuItem.Click += new System.EventHandler(this.windowMenuItem_Click); - // - // serverMenuItem - // - this.serverMenuItem.Name = "serverMenuItem"; - this.serverMenuItem.Size = new System.Drawing.Size(144, 22); - this.serverMenuItem.Text = "Stop server"; - this.serverMenuItem.Click += new System.EventHandler(this.serverButton_Click); - // - // toolStripMenuItem1 - // - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(141, 6); - // - // exitMenuItem - // - this.exitMenuItem.Name = "exitMenuItem"; - this.exitMenuItem.Size = new System.Drawing.Size(144, 22); - this.exitMenuItem.Text = "Exit"; - this.exitMenuItem.Click += new System.EventHandler(this.exitMenuItem_Click); - // - // MainForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(474, 322); - this.Controls.Add(this.tabControl1); - this.DoubleBuffered = true; - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.MaximizeBox = false; - this.Name = "MainForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "TinyOPDS server"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); - this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.MainForm_FormClosed); - this.Resize += new System.EventHandler(this.MainForm_Resize); - this.tabControl1.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.tabPage1.PerformLayout(); - this.tabPage2.ResumeLayout(false); - this.tabPage2.PerformLayout(); - this.tabPage5.ResumeLayout(false); - this.tabPage5.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.wrongAttemptsCount)).EndInit(); - this.tabPage3.ResumeLayout(false); - this.tabPage3.PerformLayout(); - this.tabPage4.ResumeLayout(false); - this.tabPage4.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - this.contextMenuStrip.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TabControl tabControl1; - private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.Button folderButton; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Button scannerButton; - private System.Windows.Forms.TextBox libraryPath; - private System.Windows.Forms.TabPage tabPage2; - private System.Windows.Forms.TextBox serverPort; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Button serverButton; - private System.Windows.Forms.TabPage tabPage3; - private System.Windows.Forms.Label invalidBooks; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.Label skippedBooks; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label booksFound; - private System.Windows.Forms.Label booksInDB; - private System.Windows.Forms.Label label15; - private System.Windows.Forms.Label status; - private System.Windows.Forms.Label label14; - private System.Windows.Forms.Label rate; - private System.Windows.Forms.Label label12; - private System.Windows.Forms.Label elapsedTime; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.Label startTime; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label booksProcessed; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.TextBox serverName; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.CheckBox closeToTray; - private System.Windows.Forms.CheckBox startMinimized; - private System.Windows.Forms.CheckBox startWithWindows; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.Button convertorFolder; - private System.Windows.Forms.TextBox convertorPath; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.ComboBox langCombo; - private System.Windows.Forms.CheckBox openPort; - private System.Windows.Forms.Label extIPlabel; - private System.Windows.Forms.Label intIPlabel; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip; - private System.Windows.Forms.ToolStripMenuItem windowMenuItem; - private System.Windows.Forms.ToolStripMenuItem serverMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem exitMenuItem; - private System.Windows.Forms.CheckBox saveLog; - private System.Windows.Forms.Label duplicates; - private System.Windows.Forms.Label label16; - private System.Windows.Forms.TextBox rootPrefix; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.CheckBox useWatcher; - private System.Windows.Forms.TabPage tabPage4; - private System.Windows.Forms.CheckBox useUPnP; - private System.Windows.Forms.LinkLabel converterLinkLabel; - private System.Windows.Forms.Button donateButton; - private System.Windows.Forms.PictureBox pictureBox1; - private System.Windows.Forms.Label label19; - private System.Windows.Forms.LinkLabel linkLabel2; - private System.Windows.Forms.Label label18; - private System.Windows.Forms.LinkLabel linkLabel1; - private System.Windows.Forms.Label label17; - private System.Windows.Forms.Label appVersion; - private System.Windows.Forms.Label appName; - private System.Windows.Forms.Label label20; - private System.Windows.Forms.LinkLabel intLink; - private System.Windows.Forms.LinkLabel extLink; - private System.Windows.Forms.LinkLabel linkLabel5; - private System.Windows.Forms.LinkLabel linkLabel4; - private System.Windows.Forms.LinkLabel linkLabel3; - private System.Windows.Forms.TextBox databaseFileName; - private System.Windows.Forms.Label label21; - private System.Windows.Forms.TabPage tabPage5; - private System.Windows.Forms.CheckBox useHTTPAuth; - private System.Windows.Forms.DataGridView dataGridView1; - private System.Windows.Forms.CheckBox rememberClients; - private System.Windows.Forms.Label label22; - private System.Windows.Forms.ComboBox logVerbosity; - private System.Windows.Forms.Label statImages; - private System.Windows.Forms.Label label27; - private System.Windows.Forms.Label statBooks; - private System.Windows.Forms.Label label25; - private System.Windows.Forms.Label statRequests; - private System.Windows.Forms.Label label23; - private System.Windows.Forms.Label statUniqueClients; - private System.Windows.Forms.Label label26; - private System.Windows.Forms.Label statGoodLogins; - private System.Windows.Forms.Label label28; - private System.Windows.Forms.Label statWrongLogins; - private System.Windows.Forms.Label label30; - private System.Windows.Forms.Label label24; - private System.Windows.Forms.NumericUpDown wrongAttemptsCount; - private System.Windows.Forms.CheckBox banClients; - private System.Windows.Forms.Label statBannedClients; - private System.Windows.Forms.Label label31; - private System.Windows.Forms.Label label32; - private System.Windows.Forms.ComboBox updateCombo; - private System.Windows.Forms.ComboBox interfaceCombo; - private System.Windows.Forms.Label label29; - private System.Windows.Forms.CheckBox useAbsoluteUri; - } -} - diff --git a/releases/1.1/MainForm.cs b/releases/1.1/MainForm.cs deleted file mode 100644 index eda26ff..0000000 --- a/releases/1.1/MainForm.cs +++ /dev/null @@ -1,824 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * TinyOPDS main UI thread - * - ************************************************************/ - -using System; -using System.IO; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using System.Xml.Linq; -using System.Threading; -using System.Net; - -using TinyOPDS.Data; -using TinyOPDS.Scanner; -using TinyOPDS.OPDS; -using TinyOPDS.Server; -using UPnP; - -namespace TinyOPDS -{ - public partial class MainForm : Form - { - OPDSServer _server; - Thread _serverThread; - FileScanner _scanner = new FileScanner(); - Watcher _watcher; - DateTime _scanStartTime; - UPnPController _upnpController = new UPnPController(); - NotifyIcon _notifyIcon = new NotifyIcon(); - BindingSource bs = new BindingSource(); - System.Windows.Forms.Timer _updateChecker = new System.Windows.Forms.Timer(); - string _updateUrl = string.Empty; - - #region Statistical information - int _fb2Count, _epubCount, _skippedFiles, _invalidFiles, _duplicates; - #endregion - - private const string urlTemplate = "http://{0}:{1}/{2}"; - - #region Initialization and startup - - public MainForm() - { - Log.SaveToFile = Properties.Settings.Default.SaveLogToDisk; - - AppDomain currentDomain = AppDomain.CurrentDomain; - currentDomain.UnhandledException += currentDomain_UnhandledException; - - InitializeComponent(); - - // Assign combo data source to the list of all available interfaces - interfaceCombo.DataSource = UPnPController.LocalInterfaces; - interfaceCombo.DataBindings.Add(new Binding("SelectedIndex", Properties.Settings.Default, "LocalInterfaceIndex", false, DataSourceUpdateMode.OnPropertyChanged)); - - logVerbosity.DataBindings.Add(new Binding("SelectedIndex", Properties.Settings.Default, "LogLevel", false, DataSourceUpdateMode.OnPropertyChanged)); - updateCombo.DataBindings.Add(new Binding("SelectedIndex", Properties.Settings.Default, "UpdatesCheck", false, DataSourceUpdateMode.OnPropertyChanged)); - - this.PerformLayout(); - - // Manually assign icons from resources (fix for Mono) - this.Icon = Properties.Resources.trayIcon; - _notifyIcon.ContextMenuStrip = this.contextMenuStrip; - _notifyIcon.Icon = Properties.Resources.trayIcon; - _notifyIcon.MouseClick += notifyIcon1_MouseClick; - _notifyIcon.BalloonTipClicked += _notifyIcon_BalloonTipClicked; - _notifyIcon.BalloonTipClosed += _notifyIcon_BalloonTipClosed; - - // Init localization service - Localizer.Init(); - Localizer.AddMenu(contextMenuStrip); - langCombo.DataSource = Localizer.Languages.ToArray(); - - // Load application settings - LoadSettings(); - - // Initialize update checker timer - _updateChecker.Interval = 1000 * 30; - _updateChecker.Tick += _updateChecker_Tick; - - // Setup credentials grid - bs.AddingNew += bs_AddingNew; - bs.AllowNew = true; - bs.DataSource = HttpProcessor.Credentials; - dataGridView1.DataSource = bs; - bs.CurrentItemChanged += bs_CurrentItemChanged; - foreach (DataGridViewColumn col in dataGridView1.Columns) col.Width = 180; - - Library.LibraryPath = Properties.Settings.Default.LibraryPath; - Library.LibraryLoaded += (_, __) => - { - UpdateInfo(); - _watcher.DirectoryToWatch = Library.LibraryPath; - _watcher.IsEnabled = Properties.Settings.Default.WatchLibrary; - }; - - // Create file watcher - _watcher = new Watcher(Library.LibraryPath); - _watcher.OnBookAdded += (object sender, BookAddedEventArgs e) => - { - if (e.BookType == BookType.FB2) _fb2Count++; else _epubCount++; - UpdateInfo(); - Log.WriteLine(LogLevel.Info, "Added: \"{0}\"", e.BookPath); - }; - _watcher.OnInvalidBook += (_, __) => - { - _invalidFiles++; - UpdateInfo(); - }; - _watcher.OnFileSkipped += (object _sender, FileSkippedEventArgs _e) => - { - _skippedFiles = _e.Count; - UpdateInfo(); - }; - - _watcher.OnBookDeleted += (object sender, BookDeletedEventArgs e) => - { - UpdateInfo(); - Log.WriteLine(LogLevel.Info, "Deleted: \"{0}\"", e.BookPath); - }; - _watcher.IsEnabled = false; - - intLink.Text = string.Format(urlTemplate, _upnpController.LocalIP.ToString(), Properties.Settings.Default.ServerPort, Properties.Settings.Default.RootPrefix); - _upnpController.DiscoverCompleted += _upnpController_DiscoverCompleted; - _upnpController.DiscoverAsync(Properties.Settings.Default.UseUPnP); - - Log.WriteLine("TinyOPDS version {0}.{1} started", Utils.Version.Major, Utils.Version.Minor); - - // Start OPDS server - StartHttpServer(); - - // Set server statistics handler - HttpServer.ServerStatistics.StatisticsUpdated += (_, __) => - { - this.BeginInvoke((MethodInvoker)delegate - { - statRequests.Text = HttpServer.ServerStatistics.GetRequests.ToString(); - statBooks.Text = HttpServer.ServerStatistics.BooksSent.ToString(); - statImages.Text = HttpServer.ServerStatistics.ImagesSent.ToString(); - statUniqueClients.Text = HttpServer.ServerStatistics.UniqueClientsCount.ToString(); - statGoodLogins.Text = HttpServer.ServerStatistics.SuccessfulLoginAttempts.ToString(); - statWrongLogins.Text = HttpServer.ServerStatistics.WrongLoginAttempts.ToString(); - statBannedClients.Text = HttpServer.ServerStatistics.BannedClientsCount.ToString(); - }); - }; - - _scanStartTime = DateTime.Now; - _notifyIcon.Visible = Properties.Settings.Default.CloseToTray; - } - - /// - /// Process unhandled exceptions - /// - /// - /// - void currentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs args) - { - Exception e = (Exception) args.ExceptionObject; - Log.WriteLine(LogLevel.Error, "{2}: {0}\nStack trace: {1}", e.Message, e.StackTrace, args.IsTerminating ? "Fatal exception" : "Unhandled exception"); - } - - void _upnpController_DiscoverCompleted(object sender, EventArgs e) - { - if (!IsDisposed && _upnpController != null) - { - this.BeginInvoke((MethodInvoker)delegate - { - extLink.Text = string.Format(urlTemplate, _upnpController.ExternalIP.ToString(), Properties.Settings.Default.ServerPort, Properties.Settings.Default.RootPrefix); - if (_upnpController.UPnPReady) - { - openPort.Enabled = true; - if (Properties.Settings.Default.OpenNATPort) openPort_CheckedChanged(this, null); - } - }); - } - } - - #endregion - - #region Application settings - - private void LoadSettings() - { - // Setup link labels - converterLinkLabel.Links.Add(0, converterLinkLabel.Text.Length, "http://fb2epub.net/files/Fb2ePubSetup_1_1_3.zip"); - linkLabel3.Links.Add(0, linkLabel3.Text.Length, "https://code.google.com/p/fb2librarynet/"); - linkLabel5.Links.Add(0, linkLabel5.Text.Length, "http://epubreader.codeplex.com/"); - linkLabel4.Links.Add(0, linkLabel4.Text.Length, "http://dotnetzip.codeplex.com/"); - // Setup settings controls - if (!string.IsNullOrEmpty(Properties.Settings.Default.LibraryPath)) - { - databaseFileName.Text = Utils.CreateGuid(Utils.IsoOidNamespace, Properties.Settings.Default.LibraryPath).ToString() + ".db"; - } - if (Utils.IsLinux) startWithWindows.Enabled = false; - if (string.IsNullOrEmpty(Properties.Settings.Default.ConvertorPath)) - { - if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("ProgramFiles"))) - { - if (File.Exists(Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles"), "FB2ePub\\Fb2ePub.exe"))) - { - convertorPath.Text = Properties.Settings.Default.ConvertorPath = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles"), "FB2ePub"); - } - } - } - else convertorPath.Text = Properties.Settings.Default.ConvertorPath; - converterLinkLabel.Visible = string.IsNullOrEmpty(convertorPath.Text); - - // We should update all invisible controls - interfaceCombo.SelectedIndex = Math.Min(UPnPController.LocalInterfaces.Count-1, Properties.Settings.Default.LocalInterfaceIndex); - logVerbosity.SelectedIndex = Math.Min(2, Properties.Settings.Default.LogLevel); - updateCombo.SelectedIndex = Math.Min(2, Properties.Settings.Default.UpdatesCheck); - langCombo.SelectedValue = Properties.Settings.Default.Language; - - openPort.Checked = Properties.Settings.Default.UseUPnP ? Properties.Settings.Default.OpenNATPort : false; - banClients.Enabled = rememberClients.Enabled = dataGridView1.Enabled = Properties.Settings.Default.UseHTTPAuth; - wrongAttemptsCount.Enabled = banClients.Checked && useHTTPAuth.Checked; - - _notifyIcon.Visible = Properties.Settings.Default.CloseToTray; - if (Properties.Settings.Default.UpdatesCheck > 0) _updateChecker.Start(); - - // Load saved credentials - try - { - HttpProcessor.Credentials.Clear(); - string[] pairs = Crypt.DecryptStringAES(Properties.Settings.Default.Credentials, urlTemplate).Split(';'); - foreach (string pair in pairs) - { - string[] cred = pair.Split(':'); - if (cred.Length == 2) HttpProcessor.Credentials.Add( new Credential(cred[0], cred[1])); - } - } - catch { } - } - - private void SaveSettings() - { - Properties.Settings.Default.Language = langCombo.SelectedValue as string; - Properties.Settings.Default.Save(); - } - - #endregion - - #region Credentials handling - - private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) - { - if (dataGridView1.Columns[e.ColumnIndex].Name == "Password" && e.Value != null) - { - dataGridView1.Rows[e.RowIndex].Tag = e.Value; - e.Value = new String('*', e.Value.ToString().Length); - } - } - - void bs_AddingNew(object sender, AddingNewEventArgs e) - { - e.NewObject = new Credential("", ""); - } - - void bs_CurrentItemChanged(object sender, EventArgs e) - { - string s = string.Empty; - foreach (Credential cred in HttpProcessor.Credentials) s += cred.User + ":" + cred.Password + ";"; - try - { - Properties.Settings.Default.Credentials = string.IsNullOrEmpty(s) ? string.Empty : Crypt.EncryptStringAES(s, urlTemplate); - } - finally - { - Properties.Settings.Default.Save(); - } - } - - #endregion - - #region Library scanning support - - private void libraryPath_Validated(object sender, EventArgs e) - { - if (!string.IsNullOrEmpty(Properties.Settings.Default.LibraryPath) && - !Library.LibraryPath.Equals(Properties.Settings.Default.LibraryPath) && - Directory.Exists(Properties.Settings.Default.LibraryPath)) - { - if (Library.IsChanged) Library.Save(); - Library.LibraryPath = Properties.Settings.Default.LibraryPath; - booksInDB.Text = string.Format("{0} fb2: {1} epub: {2}", 0, 0, 0); - databaseFileName.Text = Utils.CreateGuid(Utils.IsoOidNamespace, Properties.Settings.Default.LibraryPath).ToString() + ".db"; - _watcher.IsEnabled = false; - // Reload library - Library.LoadAsync(); - } - else libraryPath.Undo(); - } - - private void folderButton_Click(object sender, EventArgs e) - { - using (FolderBrowserDialog dialog = new FolderBrowserDialog()) - { - dialog.SelectedPath = (sender as Button == folderButton) ? libraryPath.Text : convertorPath.Text; - if (dialog.ShowDialog() == DialogResult.OK) - { - if (sender as Button == folderButton) - { - libraryPath.Text = dialog.SelectedPath; - libraryPath_Validated(sender, e); - } - else - { - convertorPath.Text = dialog.SelectedPath; - convertorPath_Validated(sender, e); - } - } - } - } - - private void scannerButton_Click(object sender, EventArgs e) - { - if (_scanner.Status != FileScannerStatus.SCANNING) - { - _scanner.OnBookFound += scanner_OnBookFound; - _scanner.OnInvalidBook += (_, __) => { _invalidFiles++; }; - _scanner.OnFileSkipped += (object _sender, FileSkippedEventArgs _e) => - { - _skippedFiles = _e.Count; - UpdateInfo(); - }; - _scanner.OnScanCompleted += (_, __) => - { - Library.Save(); - UpdateInfo(true); - - Log.WriteLine("Directory scanner completed"); - }; - _fb2Count = _epubCount = _skippedFiles = _invalidFiles = _duplicates = 0; - _scanStartTime = DateTime.Now; - startTime.Text = _scanStartTime.ToString(@"hh\:mm\:ss"); - _scanner.Start(libraryPath.Text); - scannerButton.Text = Localizer.Text("Stop scanning"); - - Log.WriteLine("Directory scanner started"); - } - else - { - _scanner.Stop(); - Library.Save(); - UpdateInfo(true); - scannerButton.Text = Localizer.Text("Start scanning"); - - Log.WriteLine("Directory scanner stopped"); - } - } - - void scanner_OnBookFound(object sender, BookFoundEventArgs e) - { - if (Library.Add(e.Book)) - { - if (e.Book.BookType == BookType.FB2) _fb2Count++; else _epubCount++; - } - else _duplicates++; - if (Library.Count % 500 == 0) Library.Save(); - UpdateInfo(); - } - - private void UpdateInfo(bool IsScanFinished = false) - { - if (this.InvokeRequired) { this.BeginInvoke((MethodInvoker)delegate { internalUpdateInfo(IsScanFinished); }); } - else { internalUpdateInfo(IsScanFinished); } - } - - private void internalUpdateInfo(bool IsScanFinished) - { - booksInDB.Text = string.Format("{0} fb2: {1} epub: {2}", Library.Count, Library.FB2Count, Library.EPUBCount); - booksFound.Text = string.Format("fb2: {0} epub: {1}", _fb2Count, _epubCount); - skippedBooks.Text = _skippedFiles.ToString(); - invalidBooks.Text = _invalidFiles.ToString(); - duplicates.Text = _duplicates.ToString(); - int totalBooksProcessed = _fb2Count + _epubCount + _skippedFiles + _invalidFiles + _duplicates; - booksProcessed.Text = totalBooksProcessed.ToString(); - - TimeSpan dt = DateTime.Now.Subtract(_scanStartTime); - elapsedTime.Text = dt.ToString(@"hh\:mm\:ss"); - rate.Text = (dt.TotalSeconds) > 0 ? string.Format("{0:0.} books/min", totalBooksProcessed / dt.TotalSeconds * 60) : "---"; - if (scannerButton.Enabled) - { - status.Text = IsScanFinished ? Localizer.Text("FINISHED") : (_scanner.Status == FileScannerStatus.SCANNING ? Localizer.Text("SCANNING") : Localizer.Text("STOPPED")); - scannerButton.Text = (_scanner.Status == FileScannerStatus.SCANNING) ? Localizer.Text("Stop scanning") : Localizer.Text("Start scanning"); - } - } - - #endregion - - #region HTTP (OPDS) server & network support - - private void serverButton_Click(object sender, EventArgs e) - { - if (_server == null) StartHttpServer(); else StopHttpServer(); - } - - private void StartHttpServer() - { - // Create and start HTTP server - HttpProcessor.AuthorizedClients.Clear(); - HttpProcessor.BannedClients.Clear(); - _server = new OPDSServer(_upnpController.LocalIP, int.Parse(Properties.Settings.Default.ServerPort)); - - _serverThread = new Thread(new ThreadStart(_server.Listen)); - _serverThread.Priority = ThreadPriority.BelowNormal; - _serverThread.Start(); - _server.ServerReady.WaitOne(TimeSpan.FromMilliseconds(500)); - if (!_server.IsActive) - { - if (_server.ServerException != null) - { - if (_server.ServerException is System.Net.Sockets.SocketException) - { - MessageBox.Show(string.Format(Localizer.Text("Probably, port {0} is already in use. Please try different port value."), Properties.Settings.Default.ServerPort)); - } - else - { - MessageBox.Show(_server.ServerException.Message); - } - _server.StopServer(); - _serverThread = null; - _server = null; - } - } - else - { - serverButton.Text = serverMenuItem.Text = Localizer.Text("Stop server"); - Log.WriteLine("HTTP server started"); - } - } - - private void StopHttpServer() - { - if (_server != null) - { - _server.StopServer(); - _serverThread = null; - _server = null; - Log.WriteLine("HTTP server stopped"); - } - serverButton.Text = serverMenuItem.Text = Localizer.Text("Start server"); - } - - private void RestartHttpServer() - { - StopHttpServer(); - StartHttpServer(); - } - - private void useUPnP_CheckStateChanged(object sender, EventArgs e) - { - if (useUPnP.Checked) - { - // Re-detect IP addresses using UPnP - _upnpController.DiscoverAsync(true); - } - else - { - openPort.Enabled = openPort.Checked = false; - } - } - - private void openPort_CheckedChanged(object sender, EventArgs e) - { - if (_upnpController != null && _upnpController.UPnPReady) - { - int port = int.Parse(Properties.Settings.Default.ServerPort); - if (openPort.Checked) - { - _upnpController.ForwardPort(port, System.Net.Sockets.ProtocolType.Tcp, "TinyOPDS server"); - - Log.WriteLine("Port {0} forwarded by UPnP", port); - } - else - { - _upnpController.DeleteForwardingRule(port, System.Net.Sockets.ProtocolType.Tcp); - - Log.WriteLine("Port {0} closed", port); - } - } - } - - private void interfaceCombo_SelectedIndexChanged(object sender, EventArgs e) - { - if (_upnpController != null && _upnpController.InterfaceIndex != interfaceCombo.SelectedIndex) - { - _upnpController.InterfaceIndex = interfaceCombo.SelectedIndex; - intLink.Text = string.Format(urlTemplate, _upnpController.LocalIP.ToString(), Properties.Settings.Default.ServerPort, Properties.Settings.Default.RootPrefix); - if (Properties.Settings.Default.UseUPnP && openPort.Checked) - { - int port = int.Parse(Properties.Settings.Default.ServerPort); - _upnpController.DeleteForwardingRule(port, System.Net.Sockets.ProtocolType.Tcp); - _upnpController.ForwardPort(port, System.Net.Sockets.ProtocolType.Tcp, "TinyOPDS server"); - } - RestartHttpServer(); - } - } - - #endregion - - #region Form minimizing and closing - - private void MainForm_Resize(object sender, EventArgs e) - { - if (Properties.Settings.Default.CloseToTray) - { - Visible = (WindowState == FormWindowState.Normal); - windowMenuItem.Text = Localizer.Text("Show window"); - } - } - - private void windowMenuItem_Click(object sender, EventArgs e) - { - if (!ShowInTaskbar) ShowInTaskbar = true; else Visible = !Visible; - if (Visible) WindowState = FormWindowState.Normal; - windowMenuItem.Text = Localizer.Text(Visible ? "Hide window" : "Show window"); - } - - private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) - { - if (e.Button == System.Windows.Forms.MouseButtons.Left) windowMenuItem_Click(this, null); - } - - private bool realExit = false; - private void MainForm_FormClosing(object sender, FormClosingEventArgs e) - { - if (Properties.Settings.Default.CloseToTray && !realExit) - { - e.Cancel = true; - Visible = false; - WindowState = FormWindowState.Minimized; - windowMenuItem.Text = Localizer.Text("Show window"); - } - } - - private void MainForm_FormClosed(object sender, FormClosedEventArgs e) - { - SaveSettings(); - if (_server != null && _server._isActive) - { - _server.StopServer(); - _serverThread = null; - _server = null; - } - - if (_scanner.Status == FileScannerStatus.SCANNING) _scanner.Stop(); - if (Library.IsChanged) Library.Save(); - - if (_upnpController != null) - { - _upnpController.DiscoverCompleted -= _upnpController_DiscoverCompleted; - _upnpController.Dispose(); - } - - _notifyIcon.Visible = false; - - // Remove port forwarding - openPort.Checked = false; - - Log.WriteLine("TinyOPDS closed\n"); - } - - private void exitMenuItem_Click(object sender, EventArgs e) - { - realExit = true; - Close(); - } - - #endregion - - #region Form controls handling - - private void convertorPath_Validated(object sender, EventArgs e) - { - if (!string.IsNullOrEmpty(convertorPath.Text) && Directory.Exists(convertorPath.Text) && File.Exists(Path.Combine(convertorPath.Text, Utils.IsLinux ? "fb2toepub" : "Fb2ePub.exe"))) - { - Properties.Settings.Default.ConvertorPath = convertorPath.Text; - } - else - { - convertorPath.Text = Properties.Settings.Default.ConvertorPath; - } - } - - private void useWatcher_CheckedChanged(object sender, EventArgs e) - { - if (_watcher != null && _watcher.IsEnabled != useWatcher.Checked) - { - _watcher.IsEnabled = useWatcher.Checked; - } - } - - private void closeToTray_CheckedChanged(object sender, EventArgs e) - { - _notifyIcon.Visible = closeToTray.Checked; - } - - private void startWithWindows_CheckedChanged(object sender, EventArgs e) - { - Microsoft.Win32.RegistryKey registryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); - bool exists = (registryKey.GetValue("TinyOPDS") != null); - if (startWithWindows.Checked && !exists) registryKey.SetValue("TinyOPDS", Application.ExecutablePath); - else if (exists && !startWithWindows.Checked) registryKey.DeleteValue("TinyOPDS"); - } - - private void saveLog_CheckedChanged(object sender, EventArgs e) - { - Log.SaveToFile = label22.Enabled = logVerbosity.Enabled = saveLog.Checked; - } - - private void UpdateServerLinks() - { - if (_upnpController != null) - { - if (_upnpController.LocalIP != null) - intLink.Text = string.Format(urlTemplate, _upnpController.LocalIP.ToString(), Properties.Settings.Default.ServerPort, rootPrefix.Text); - if (_upnpController.ExternalIP != null) - extLink.Text = string.Format(urlTemplate, _upnpController.ExternalIP.ToString(), Properties.Settings.Default.ServerPort, rootPrefix.Text); - } - } - - /// - /// Handle server's root prefix change - /// - /// - /// - private void rootPrefix_TextChanged(object sender, EventArgs e) - { - if (_upnpController != null && _upnpController.UPnPReady) - { - while (rootPrefix.Text.IndexOf("/") >= 0) rootPrefix.Text = rootPrefix.Text.Replace("/", ""); - UpdateServerLinks(); - } - } - - /// - /// Validate server port - /// - /// - /// - private void serverPort_Validated(object sender, EventArgs e) - { - int port = 8080; - bool valid = int.TryParse(serverPort.Text, out port); - if (valid && port >= 1 && port <= 65535) - { - if (_upnpController != null && _upnpController.UPnPReady && openPort.Checked) - { - openPort.Checked = false; - Properties.Settings.Default.ServerPort = port.ToString(); - openPort.Checked = true; - } - else Properties.Settings.Default.ServerPort = port.ToString(); - if (_server != null && _server.IsActive) - { - RestartHttpServer(); - } - } - else - { - MessageBox.Show(Localizer.Text("Invalid port value: value must be numeric and in range from 1 to 65535")); - serverPort.Text = Properties.Settings.Default.ServerPort.ToString(); - } - // Update link labels - UpdateServerLinks(); - } - - /// - /// Set UI language - /// - /// - /// - private void langCombo_SelectedValueChanged(object sender, EventArgs e) - { - Localizer.SetLanguage(this, langCombo.SelectedValue as string); - appVersion.Text = string.Format(Localizer.Text("version {0}.{1} {2}"), Utils.Version.Major, Utils.Version.Minor, Utils.Version.Major == 0?" (beta)":""); - scannerButton.Text = Localizer.Text( (_scanner.Status == FileScannerStatus.STOPPED) ? "Start scanning" : "Stop scanning"); - serverButton.Text = Localizer.Text((_server == null) ? "Start server" : "Stop server"); - serverMenuItem.Text = Localizer.Text((_server == null) ? "Start server" : "Stop server"); - windowMenuItem.Text = Localizer.Text(Visible || ShowInTaskbar ? "Hide window" : "Show window"); - logVerbosity.Items[0] = Localizer.Text("Info, warnings and errors"); - logVerbosity.Items[1] = Localizer.Text("Warnings and errors"); - logVerbosity.Items[2] = Localizer.Text("Errors only"); - updateCombo.Items[0] = Localizer.Text("Never"); - updateCombo.Items[1] = Localizer.Text("Once a week"); - updateCombo.Items[2] = Localizer.Text("Once a month"); - } - - /// - /// Handle PayPal donation - /// - /// - /// - private void donateButton_Click(object sender, EventArgs e) - { - const string business = "sens.boston@gmail.com", description = "Donation%20for%20the%20TinyOPDS", country = "US", currency = "USD"; - string url = string.Format("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business={0}&lc={1}&item_name={2}¤cy_code={3}&bn=PP%2dDonationsBF", - business, country, description, currency); - System.Diagnostics.Process.Start(url); - } - - private bool checkUrl(string uriName) - { - Uri uriResult; - bool result = Uri.TryCreate(uriName, UriKind.Absolute, out uriResult); - return result && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps); - } - - private void linkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - if (sender is LinkLabel && checkUrl((sender as LinkLabel).Text)) - { - System.Diagnostics.Process.Start((sender as LinkLabel).Text); - } - } - - private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - if (sender is LinkLabel && checkUrl((sender as LinkLabel).Links[0].LinkData as string)) - { - System.Diagnostics.Process.Start((sender as LinkLabel).Links[0].LinkData as string); - } - } - - private void useHTTPAuth_CheckedChanged(object sender, EventArgs e) - { - dataGridView1.Enabled = banClients.Enabled = rememberClients.Enabled = useHTTPAuth.Checked; - wrongAttemptsCount.Enabled = banClients.Enabled && banClients.Checked; - } - - private void banClients_CheckedChanged(object sender, EventArgs e) - { - wrongAttemptsCount.Enabled = banClients.Checked; - } - - private void logVerbosity_SelectedIndexChanged(object sender, EventArgs e) - { - Log.VerbosityLevel = (LogLevel)logVerbosity.SelectedIndex; - } - - private void updateCombo_SelectedIndexChanged(object sender, EventArgs e) - { - if (Properties.Settings.Default.UpdatesCheck == 0) _updateChecker.Stop(); else _updateChecker.Start(); - } - - #endregion - - #region TinyOPDS updates checker - - /// - /// This timer event should be raised every hour - /// - /// - /// - static int[] checkIntervals = new int[] { 0, 60 * 24 * 7, 60 * 24 * 30, 1}; - void _updateChecker_Tick(object sender, EventArgs e) - { - if (Properties.Settings.Default.UpdatesCheck >= 0) - { - _updateUrl = string.Empty; - int minutesFromLastCheck = (int) Math.Round(DateTime.Now.Subtract(Properties.Settings.Default.LastCheck).TotalMinutes); - if (minutesFromLastCheck >= checkIntervals[Properties.Settings.Default.UpdatesCheck]) - { - Log.WriteLine(LogLevel.Info, "Checking software update. Minutes from the last check: {0}", minutesFromLastCheck); - WebClient wc = new WebClient(); - wc.DownloadStringCompleted += wc_DownloadStringCompleted; - wc.DownloadStringAsync(new Uri("http://senssoft.com/tinyopds.txt")); - } - } - } - - void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) - { - if (e.Error == null) - { - Properties.Settings.Default.LastCheck = DateTime.Now; - Properties.Settings.Default.Save(); - - string[] s = e.Result.Split('\n'); - if (s.Length == 2) - { - s[0] = s[0].Replace("\r", ""); - double currentVersion = 0, newVersion = 0; - if (double.TryParse(string.Format("{0}.{1}", Utils.Version.Major, Utils.Version.Minor), out currentVersion)) - { - if (double.TryParse(s[0], out newVersion)) - { - if (newVersion > currentVersion) - { - _updateUrl = s[1]; - _notifyIcon.Visible = true; - _notifyIcon.ShowBalloonTip(30000, Localizer.Text("TinyOPDS: update found"), string.Format(Localizer.Text("Click here to download update v {0}"), s[0]), ToolTipIcon.Info); - } - } - } - } - } - } - - void _notifyIcon_BalloonTipClicked(object sender, EventArgs e) - { - System.Diagnostics.Process.Start(_updateUrl); - } - - void _notifyIcon_BalloonTipClosed(object sender, EventArgs e) - { - _notifyIcon.Visible = Properties.Settings.Default.CloseToTray; - } - - #endregion - } -} diff --git a/releases/1.1/MainForm.resx b/releases/1.1/MainForm.resx deleted file mode 100644 index acce9e6..0000000 --- a/releases/1.1/MainForm.resx +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - \ No newline at end of file diff --git a/releases/1.1/Misc/Crypt.cs b/releases/1.1/Misc/Crypt.cs deleted file mode 100644 index b383fc4..0000000 --- a/releases/1.1/Misc/Crypt.cs +++ /dev/null @@ -1,155 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module contains string extensions and some helpers - * - ************************************************************/ - -using System; -using System.IO; -using System.Text; -using System.Security.Cryptography; - -namespace TinyOPDS -{ - public class Crypt - { - private static byte[] _salt = Encoding.ASCII.GetBytes("o6806642kbM7c5"); - - /// - /// Encrypt the given string using AES. The string can be decrypted using - /// DecryptStringAES(). The sharedSecret parameters must match. - /// - /// The text to encrypt. - /// A password used to generate a key for encryption. - public static string EncryptStringAES(string plainText, string sharedSecret) - { - if (string.IsNullOrEmpty(plainText)) - throw new ArgumentNullException("plainText"); - if (string.IsNullOrEmpty(sharedSecret)) - throw new ArgumentNullException("sharedSecret"); - - string outStr = null; // Encrypted string to return - RijndaelManaged aesAlg = null; // RijndaelManaged object used to encrypt the data. - - try - { - // generate the key from the shared secret and the salt - Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt); - - // Create a RijndaelManaged object - aesAlg = new RijndaelManaged(); - aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); - - // Create a decrytor to perform the stream transform. - ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); - - // Create the streams used for encryption. - using (MemoryStream msEncrypt = new MemoryStream()) - { - // prepend the IV - msEncrypt.Write(BitConverter.GetBytes(aesAlg.IV.Length), 0, sizeof(int)); - msEncrypt.Write(aesAlg.IV, 0, aesAlg.IV.Length); - using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) - { - using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) - { - //Write all data to the stream. - swEncrypt.Write(plainText); - } - } - outStr = Convert.ToBase64String(msEncrypt.ToArray()); - } - } - finally - { - // Clear the RijndaelManaged object. - if (aesAlg != null) - aesAlg.Clear(); - } - - // Return the encrypted bytes from the memory stream. - return outStr; - } - - /// - /// Decrypt the given string. Assumes the string was encrypted using - /// EncryptStringAES(), using an identical sharedSecret. - /// - /// The text to decrypt. - /// A password used to generate a key for decryption. - public static string DecryptStringAES(string cipherText, string sharedSecret) - { - if (string.IsNullOrEmpty(cipherText)) - throw new ArgumentNullException("cipherText"); - if (string.IsNullOrEmpty(sharedSecret)) - throw new ArgumentNullException("sharedSecret"); - - // Declare the RijndaelManaged object - // used to decrypt the data. - RijndaelManaged aesAlg = null; - - // Declare the string used to hold - // the decrypted text. - string plaintext = null; - - try - { - // generate the key from the shared secret and the salt - Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt); - - // Create the streams used for decryption. - byte[] bytes = Convert.FromBase64String(cipherText); - using (MemoryStream msDecrypt = new MemoryStream(bytes)) - { - // Create a RijndaelManaged object - // with the specified key and IV. - aesAlg = new RijndaelManaged(); - aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); - // Get the initialization vector from the encrypted stream - aesAlg.IV = ReadByteArray(msDecrypt); - // Create a decrytor to perform the stream transform. - ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); - using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) - { - using (StreamReader srDecrypt = new StreamReader(csDecrypt)) - - // Read the decrypted bytes from the decrypting stream - // and place them in a string. - plaintext = srDecrypt.ReadToEnd(); - } - } - } - finally - { - // Clear the RijndaelManaged object. - if (aesAlg != null) - aesAlg.Clear(); - } - - return plaintext; - } - - private static byte[] ReadByteArray(Stream s) - { - byte[] rawLength = new byte[sizeof(int)]; - if (s.Read(rawLength, 0, rawLength.Length) != rawLength.Length) - { - throw new SystemException("Stream did not contain properly formatted byte array"); - } - - byte[] buffer = new byte[BitConverter.ToInt32(rawLength, 0)]; - if (s.Read(buffer, 0, buffer.Length) != buffer.Length) - { - throw new SystemException("Did not read byte array properly"); - } - - return buffer; - } - } -} diff --git a/releases/1.1/Misc/CustomSettingsProvider.cs b/releases/1.1/Misc/CustomSettingsProvider.cs deleted file mode 100644 index 3b5830e..0000000 --- a/releases/1.1/Misc/CustomSettingsProvider.cs +++ /dev/null @@ -1,268 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module defines custom settings provider, to define - * straightforward settings folder - * - * That code was copied from the StackOverflow site: - * http://stackoverflow.com/questions/2265271/custom-path-of-the-user-config - * - * - ************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Configuration; -using System.Reflection; -using System.Xml.Linq; -using System.IO; - -namespace TinyOPDS -{ - class CustomSettingsProvider : SettingsProvider - { - const string NAME = "name"; - const string SERIALIZE_AS = "serializeAs"; - const string CONFIG = "configuration"; - const string USER_SETTINGS = "userSettings"; - const string SETTING = "setting"; - - /// - /// Loads the file into memory. - /// - public CustomSettingsProvider() - { - SettingsDictionary = new Dictionary(); - } - - /// - /// Override. - /// - public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) - { - base.Initialize(ApplicationName, config); - } - - /// - /// Override. - /// - public override string ApplicationName - { - get - { - return System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name; - } - set - { - //do nothing - } - } - - /// - /// Must override this, this is the bit that matches up the designer properties to the dictionary values - /// - /// - /// - /// - public override SettingsPropertyValueCollection GetPropertyValues(SettingsContext context, SettingsPropertyCollection collection) - { - //load the file - if (!_loaded) - { - _loaded = true; - LoadValuesFromFile(); - } - - //collection that will be returned. - SettingsPropertyValueCollection values = new SettingsPropertyValueCollection(); - - //iterate thought the properties we get from the designer, checking to see if the setting is in the dictionary - foreach (SettingsProperty setting in collection) - { - SettingsPropertyValue value = new SettingsPropertyValue(setting); - value.IsDirty = false; - - //need the type of the value for the strong typing - var t = Type.GetType(setting.PropertyType.FullName); - - if (SettingsDictionary.ContainsKey(setting.Name)) - { - value.SerializedValue = SettingsDictionary[setting.Name].value; - value.PropertyValue = Convert.ChangeType(SettingsDictionary[setting.Name].value, t); - } - else //use defaults in the case where there are no settings yet - { - value.SerializedValue = setting.DefaultValue; - value.PropertyValue = Convert.ChangeType(setting.DefaultValue, t); - } - - values.Add(value); - } - return values; - } - - /// - /// Must override this, this is the bit that does the saving to file. Called when Settings.Save() is called - /// - /// - /// - public override void SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection collection) - { - //grab the values from the collection parameter and update the values in our dictionary. - foreach (SettingsPropertyValue value in collection) - { - var setting = new SettingStruct() - { - value = (value.PropertyValue == null ? String.Empty : value.PropertyValue.ToString()), - name = value.Name, - serializeAs = value.Property.SerializeAs.ToString() - }; - - if (!SettingsDictionary.ContainsKey(value.Name)) - { - SettingsDictionary.Add(value.Name, setting); - } - else - { - SettingsDictionary[value.Name] = setting; - } - } - - //now that our local dictionary is up-to-date, save it to disk. - SaveValuesToFile(); - } - - /// - /// Loads the values of the file into memory. - /// - private void LoadValuesFromFile() - { - if (!File.Exists(UserConfigPath)) - { - //if the config file is not where it's supposed to be create a new one. - CreateEmptyConfig(); - } - - //load the xml - var configXml = XDocument.Load(UserConfigPath); - - //get all of the elements. - var settingElements = configXml.Element(CONFIG).Element(USER_SETTINGS).Element(typeof(Properties.Settings).FullName).Elements(SETTING); - - //iterate through, adding them to the dictionary, (checking for nulls, xml no likey nulls) - //using "String" as default serializeAs...just in case, no real good reason. - foreach (var element in settingElements) - { - var newSetting = new SettingStruct() - { - name = element.Attribute(NAME) == null ? String.Empty : element.Attribute(NAME).Value, - serializeAs = element.Attribute(SERIALIZE_AS) == null ? "String" : element.Attribute(SERIALIZE_AS).Value, - value = element.Value ?? String.Empty - }; - SettingsDictionary.Add(element.Attribute(NAME).Value, newSetting); - } - } - - /// - /// Creates an empty user.config file...looks like the one MS creates. - /// This could be overkill a simple key/value pairing would probably do. - /// - private void CreateEmptyConfig() - { - var doc = new XDocument(); - var declaration = new XDeclaration("1.0", "utf-8", "true"); - var config = new XElement(CONFIG); - var userSettings = new XElement(USER_SETTINGS); - var group = new XElement(typeof(Properties.Settings).FullName); - userSettings.Add(group); - config.Add(userSettings); - doc.Add(config); - doc.Declaration = declaration; - string dirName = Path.GetDirectoryName(UserConfigPath); - try - { - if (!Directory.Exists(dirName)) Directory.CreateDirectory(dirName); - doc.Save(UserConfigPath); - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, e.Message); - } - } - - /// - /// Saves the in memory dictionary to the user config file - /// - private void SaveValuesToFile() - { - //load the current xml from the file. - var import = XDocument.Load(UserConfigPath); - - //get the settings group (e.g. ) - var settingsSection = import.Element(CONFIG).Element(USER_SETTINGS).Element(typeof(Properties.Settings).FullName); - - //iterate though the dictionary, either updating the value or adding the new setting. - foreach (var entry in SettingsDictionary) - { - var setting = settingsSection.Elements().FirstOrDefault(e => e.Attribute(NAME).Value == entry.Key); - if (setting == null) //this can happen if a new setting is added via the .settings designer. - { - var newSetting = new XElement(SETTING); - newSetting.Add(new XAttribute(NAME, entry.Value.name)); - newSetting.Add(new XAttribute(SERIALIZE_AS, entry.Value.serializeAs)); - newSetting.Value = (entry.Value.value ?? String.Empty); - settingsSection.Add(newSetting); - } - else //update the value if it exists. - { - setting.Value = (entry.Value.value ?? String.Empty); - } - } - try - { - import.Save(UserConfigPath); - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, e.Message); - } - } - - /// - /// The setting key this is returning must set before the settings are used. - /// e.g. Properties.Settings.Default.SettingsKey = @"C:\temp\user.config"; - /// - private string UserConfigPath - { - get - { - return Path.Combine(Utils.ServiceFilesLocation, "user.config"); - } - } - - /// - /// In memory storage of the settings values - /// - private Dictionary SettingsDictionary { get; set; } - - /// - /// Helper structure - /// - internal struct SettingStruct - { - internal string name; - internal string serializeAs; - internal string value; - } - - bool _loaded; - } -} - diff --git a/releases/1.1/Misc/Localizer.cs b/releases/1.1/Misc/Localizer.cs deleted file mode 100644 index 1551237..0000000 --- a/releases/1.1/Misc/Localizer.cs +++ /dev/null @@ -1,217 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * Very simple but very effective application localization - * - ************************************************************/ - -using System; -using System.IO; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Linq; -#if !CONSOLE -using System.Windows.Forms; -#endif -using System.Reflection; - -namespace TinyOPDS -{ - public static class Localizer - { - private static string _lang = "en"; - private static Dictionary _translations = new Dictionary(); - private static XDocument _xml = null; -#if !CONSOLE - private static List _menuItems = new List(); -#endif - /// - /// Static classes don't have a constructors but we need to initialize translations - /// - /// Name of xml translations, added to project as an embedded resource - public static void Init(string xmlFile = "translation.xml") - { - try - { - _xml = XDocument.Load(Assembly.GetExecutingAssembly().GetManifestResourceStream("TinyOPDS."+xmlFile)); - } - catch (Exception e) - { - Log.WriteLine("Localizer.Init({0}) exception: {1}", xmlFile, e.Message); - } - } - -#if !CONSOLE - /// - /// Add menu to translator - /// - /// - public static void AddMenu(ContextMenuStrip menu) - { - foreach (ToolStripItem item in menu.Items) _menuItems.Add(item); - } -#endif - /// - /// Returns supported translations in Dictionary - /// - public static Dictionary Languages - { - get - { - return _xml != null ? _xml.Descendants("language").ToDictionary(d => d.Attribute("id").Value, d => d.Value) : null; - } - } - - /// - /// Current selected language - /// - public static string Language { get { return _lang; } } - -#if !CONSOLE - /// - /// Sets current language - /// - /// - /// - public static void SetLanguage(Form form, string lang) - { - if (_lang != lang && _xml != null) - { - _lang = lang; - try - { - // Update localized string dictionary - List t = _xml.Descendants("property") // .Where(a => !a.HasAttributes) - .Descendants("text").Where(b => b.Attribute("lang").Value == "en" || b.Attribute("lang").Value == _lang) - .Select(c => c.Value).ToList(); - _translations.Clear(); - - if (lang.Equals("en")) - { - for (int i = 0; i < t.Count; i++) - if (!string.IsNullOrEmpty(t[i])) - _translations.Add(t[i], t[i]); - } - else - { - for (int i = 0; i < t.Count / 2; i++) - if (!string.IsNullOrEmpty(t[i * 2])) - _translations.Add(t[i * 2], t[i * 2 + 1]); - } - - // Update form controls - UpdateControls(form); - } - catch (Exception e) - { - Log.WriteLine(".SetLanguage({0},{1}) exception: {2}", form, lang, e.Message); - } - } - } -#endif - - /// - /// Translation helper - /// - /// - /// - public static string Text(string source) - { - return (_translations.ContainsKey(source)) ? _translations[source] : source; - } - -#if !CONSOLE - /// - /// Updates texts for all form controls (if translation exists) - /// - /// Form to be updated - private static void UpdateControls(Form form) - { - // Find all controls - var controls = GetAllControls(form); - - foreach (Control ctrl in new IteratorIsolateCollection(controls)) - { - var xmlProp = _xml.Descendants("property").Where(e => e.Attribute("form") != null && e.Attribute("form").Value.Equals(form.Name) && - e.Attribute("ctrl") != null && e.Attribute("ctrl").Value == ctrl.Name); - if (xmlProp != null && xmlProp.Count() > 0) - { - var trans = xmlProp.FirstOrDefault().Descendants("text").Where(p => p.Attribute("lang").Value == _lang).Select(p => p.Value); - if (trans != null && trans.Count() > 0) ctrl.Text = trans.First() as string; - } - } - - foreach (ToolStripItem ctrl in _menuItems) - { - var xmlProp = _xml.Descendants("property").Where(e => e.Attribute("ctrl") != null && e.Attribute("ctrl").Value == ctrl.Name); - if (xmlProp != null && xmlProp.Count() > 0) - { - var trans = xmlProp.First().Descendants("text").Where(p => p.Attribute("lang").Value == _lang).Select(p => p.Value); - if (trans != null && trans.Count() > 0) ctrl.Text = trans.First() as string; - } - - } - } - - /// - /// Localization helper: scans form and return xml document with controls names and texts - /// - /// Form to localize - /// Current form language - /// Xml document - public static XDocument Setup(Form form, string srcLang = "en") - { - XDocument doc = new XDocument(); - doc.Add(new XElement("root", new XElement("languages"), new XElement("properties"))); - - if (form != null) - { - - var controls = GetAllControls(form); - - foreach (Control ctrl in controls) - { - foreach (var propInfo in ctrl.GetType().GetProperties()) - { - if (propInfo.Name == "Text") - { - try - { - var value = propInfo.GetValue(ctrl, null); - doc.Root.Element("properties").Add( - new XElement("property", - new XAttribute("form", form.Name), - new XAttribute("ctrl", ctrl.Name), - new XElement("text", - new XAttribute("lang", srcLang), value)) - ); - } - catch - { } - } - } - } - } - - return doc; - } - - /// - /// Enums all controls on the form - /// - /// - /// - private static List GetAllControls(Control control) - { - var controls = control.Controls.Cast(); - return (controls.SelectMany(ctrl => GetAllControls(ctrl)).Concat(controls)).ToList(); - } -#endif - } -} diff --git a/releases/1.1/Misc/Log.cs b/releases/1.1/Misc/Log.cs deleted file mode 100644 index 39628a9..0000000 --- a/releases/1.1/Misc/Log.cs +++ /dev/null @@ -1,118 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module defines the Log class - * - * TODO: add threading for performance reason (may be, should check) - * - ************************************************************/ - -using System; -using System.IO; -using System.Diagnostics; - -namespace TinyOPDS -{ - /// - /// A lightweight logging class for Silverlight. - /// - internal static class Log - { - private static string _logFileName = "TinyOPDS.log"; - - /// - /// - /// - internal static LogLevel VerbosityLevel = LogLevel.Info; - - /// - /// Enable or disable logging to file - /// - private static bool _saveToFile = false; - internal static bool SaveToFile - { - get { return _saveToFile; } - set - { - _logFileName = Path.Combine(Utils.ServiceFilesLocation, "TinyOPDS.log"); - _saveToFile = value; - } - } - - /// - /// Writes the args to the default logging output using the format provided. - /// - internal static void WriteLine(string format, params object[] args) - { - WriteLine(LogLevel.Info, format, args); - } - - /// - /// Writes the args to the default logging output using the format provided. - /// - internal static void WriteLine(LogLevel level, string format, params object[] args) - { - if (level >= VerbosityLevel) - { - string caller = new StackTrace().GetFrame(2).GetMethod().ReflectedType.Name; - if (caller.StartsWith("<>")) caller = new StackTrace().GetFrame(1).GetMethod().ReflectedType.Name; - string prefix = string.Format("{0}\t{1}\t{2}", (level == LogLevel.Info) ? 'I' : ((level == LogLevel.Warning) ? 'W' : 'E'), caller, (caller.Length > 7 ? "" : "\t")); - - string message = string.Format(prefix + format, args); - Debug.WriteLine(message); - if (SaveToFile) WriteToFile(message); - } - } - - private static object fileSyncObject = new object(); - - /// - /// Writes a line to the current log file. - /// - /// - private static void WriteToFile(string message) - { - lock (fileSyncObject) - { - FileStream fileStream = null; - try - { - fileStream = new FileStream(_logFileName, (File.Exists(_logFileName) ? FileMode.Append : FileMode.Create), FileAccess.Write, FileShare.ReadWrite); - using (StreamWriter writer = new StreamWriter(fileStream)) - { - fileStream = null; - writer.WriteLine(string.Format("{0:MM/dd/yyyy HH:mm:ss.f}\t{1}", DateTime.Now, message), _logFileName); - } - } - finally - { - if (fileStream != null) fileStream.Dispose(); - } - } - } - } - - /// - /// The type of error to log - /// - public enum LogLevel - { - /// - /// A message containing information only. - /// - Info = 0, - /// - /// A non-critical warning error message. - /// - Warning = 1, - /// - /// A fatal error message. - /// - Error = 2 - } -} \ No newline at end of file diff --git a/releases/1.1/Misc/OPDSComparer.cs b/releases/1.1/Misc/OPDSComparer.cs deleted file mode 100644 index 391327a..0000000 --- a/releases/1.1/Misc/OPDSComparer.cs +++ /dev/null @@ -1,64 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module defines the custom comparer class - * - * TODO: should sort down some rare used chars - * - ************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -using TinyOPDS.Data; - -namespace TinyOPDS -{ - public class OPDSComparer : IComparer - { - private bool _cyrillcFirst; - - public OPDSComparer(bool cyrillicFirst = true) - { - _cyrillcFirst = cyrillicFirst; - } - - public int Compare(object x, object y) - { - string x1 = string.Empty, y1 = string.Empty; - if (x is string) - { - x1 = x as string; - y1 = y as string; - } - else if (x is Genre) - { - x1 = _cyrillcFirst ? (x as Genre).Translation : (x as Genre).Name; - y1 = _cyrillcFirst ? (y as Genre).Translation : (y as Genre).Name; - } - // Shift "garbage" characters and digits to the end - if (x1.Length > 0 && y1.Length > 0) - { - if (char.IsLetter(x1[0]) && !char.IsLetter(y1[0])) return -1; - else if (!char.IsLetter(x1[0]) && char.IsLetter(y1[0])) return 1; - else if (char.IsLetterOrDigit(x1[0]) && !char.IsLetterOrDigit(y1[0])) return -1; - else if (!char.IsLetterOrDigit(x1[0]) && char.IsLetterOrDigit(y1[0])) return 1; - } - if (_cyrillcFirst && x1.Length > 0 && y1.Length > 0) - { - // Cyrillic letter came first - if (x1[0] > 400 && y1[0] < 400) return -1; - if (x1[0] < 400 && y1[0] > 400) return 1; - } - return string.Compare(x1, y1, true); - } - } - -} diff --git a/releases/1.1/Misc/ProcessHelper.cs b/releases/1.1/Misc/ProcessHelper.cs deleted file mode 100644 index aa70483..0000000 --- a/releases/1.1/Misc/ProcessHelper.cs +++ /dev/null @@ -1,157 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module defines helper to run console processes in - * background, with output (including errout) collection - * - ************************************************************/ - -using System; -using System.Collections.ObjectModel; -using System.Linq; -using System.Text; -using System.ComponentModel; -using System.Windows; -using System.Threading; -using System.Security.Permissions; -using System.Diagnostics; - -namespace TinyOPDS -{ - /// - /// Helper for the external console apps execution in background (no visible window) - /// Stores process output to the observable collection (so, we can bind output to the ListBox) - /// - public class ProcessHelper : IDisposable - { - private bool _disposed = false; - private Process _process = null; - private ObservableCollection _output = new ObservableCollection(); - - /// - /// Default constructor - /// - /// - /// - /// - /// - [PermissionSetAttribute(SecurityAction.LinkDemand, Unrestricted = true)] - public ProcessHelper(string commandPath, string arguments) - { - _process = new Process(); - _process.StartInfo.FileName = commandPath; - _process.StartInfo.Arguments = arguments; - - // set up output redirection - _process.StartInfo.RedirectStandardOutput = true; - _process.StartInfo.RedirectStandardError = true; - _process.EnableRaisingEvents = true; - _process.StartInfo.CreateNoWindow = true; - _process.StartInfo.UseShellExecute = false; - // see below for output handler - _process.ErrorDataReceived += proc_DataReceived; - _process.OutputDataReceived += proc_DataReceived; - _process.Exited += (__, ____) => { if (OnExited != null) OnExited(this, new EventArgs()); }; - } - - [PermissionSetAttribute(SecurityAction.LinkDemand, Unrestricted = true)] - protected virtual void Dispose(bool disposing) - { - if (!this._disposed && disposing) - { - if (_process != null) - { - if (!_process.HasExited && IsRunning) _process.Kill(); - _process.Dispose(); - } - _disposed = true; - } - } - - [PermissionSetAttribute(SecurityAction.LinkDemand, Unrestricted = true)] - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - private void proc_DataReceived(object sender, DataReceivedEventArgs e) - { - if (e.Data != null) - { - _output.Add(e.Data); - } - } - - public void Run() - { - if (_process.Start()) - { - _process.PriorityClass = ProcessPriorityClass.Normal; - _process.BeginErrorReadLine(); - _process.BeginOutputReadLine(); - _isRunning = true; - _process.WaitForExit(); - ExitCode = _process.ExitCode; - _isRunning = false; - } - } - - public void RunAsync(AutoResetEvent waitEvent) - { - BackgroundWorker worker = new BackgroundWorker(); - worker.DoWork += (_, __) => - { - try - { - if (_process.Start()) - { - _process.PriorityClass = ProcessPriorityClass.Normal; - _process.BeginErrorReadLine(); - _process.BeginOutputReadLine(); - _isRunning = true; - _process.WaitForExit(); - ExitCode = _process.ExitCode; - } - } - catch(Exception e) - { - Log.WriteLine(LogLevel.Error, "exception {0}", e.Message); - } - finally - { - if (waitEvent != null) waitEvent.Set(); - _isRunning = false; - worker.Dispose(); - } - }; - worker.RunWorkerAsync(); - } - - /// - /// Raised on process completion - /// - public event EventHandler OnExited; - - /// - /// Process output to stdout - /// - public ObservableCollection ProcessOutput { get { return _output; } } - - /// - /// Return current state of process - /// - private bool _isRunning = false; - public bool IsRunning { get { return _isRunning; } } - - /// - /// Return process exit code - /// - public int ExitCode { get; private set; } - } -} diff --git a/releases/1.1/Misc/StringUtils.cs b/releases/1.1/Misc/StringUtils.cs deleted file mode 100644 index b22970f..0000000 --- a/releases/1.1/Misc/StringUtils.cs +++ /dev/null @@ -1,177 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module defines some specific String extensions classes: - * Soundex and Transliteration - * - ************************************************************/ - -using System; -using System.Text; -using System.Collections.Generic; - -namespace TinyOPDS -{ - public static class StringExtensions - { - public static string Reverse(this string sentence) - { - string[] words = sentence.Split(' '); - Array.Reverse(words); - return string.Join(" ", words); - } - - public static string DecodeFromBase64(this string encodedData) - { - byte[] encodedDataAsBytes = Convert.FromBase64String(encodedData); - return Encoding.UTF8.GetString(encodedDataAsBytes); - } - - public static string SanitizeFileName(this string fileName) - { - return String.Join("", fileName.Split(System.IO.Path.GetInvalidFileNameChars())); - } - - public static int WordsCount(this string s) - { - return s.Split(' ', ',').Length; - } - - public static string UrlCombine(this string uri1, string uri2) - { - uri1 = uri1.TrimEnd('/'); - uri2 = uri2.TrimStart('/'); - return string.Format("{0}/{1}", uri1, uri2).TrimEnd('/'); - } - - public static bool IsValidUTF(this string s) - { - bool valid = true; - foreach (char c in s) valid &= c != 0xFFFD; - return valid; - } - - public static string SoundexByWord(this string data) - { - var soundexes = new List(); - foreach (var str in data.Split(' ', ',')) - { - soundexes.Add(Soundex(str)); - } - return string.Join(" ", soundexes); - } - - public static string Soundex(string word) - { - word = Transliteration.Front(word, TransliterationType.ISO); - StringBuilder result = new StringBuilder(); - if (word != null && word.Length > 0) - { - string previousCode = "", currentCode = "", currentLetter = ""; - result.Append(word.Substring(0, 1)); - for (int i = 1; i < word.Length; i++) - { - currentLetter = word.Substring(i, 1).ToLower(); - currentCode = ""; - - if ("bfpv".IndexOf(currentLetter) > -1) currentCode = "1"; - else if ("cgjkqsxz".IndexOf(currentLetter) > -1) currentCode = "2"; - else if ("dt".IndexOf(currentLetter) > -1) currentCode = "3"; - else if (currentLetter == "l") currentCode = "4"; - else if ("mn".IndexOf(currentLetter) > -1) currentCode = "5"; - else if (currentLetter == "r") currentCode = "6"; - - if (currentCode != previousCode) result.Append(currentCode); - if (result.Length == 4) break; - if (currentCode != "") previousCode = currentCode; - } - } - - if (result.Length < 4) - result.Append(new String('0', 4 - result.Length)); - - return result.ToString().ToUpper(); - } - } - - #region Transliteration - - public enum TransliterationType - { - GOST, - ISO - } - - public static class Transliteration - { - //ГОСТ 16876-71 - private static Dictionary gostFront = new Dictionary() { - {'Є', "Eh"}, {'І', "I"}, {'і', "i"}, {'№', "#"}, {'є', "eh"}, {'А', "A"}, {'Б', "B"}, {'В', "V"}, {'Г', "G"}, {'Д', "D"}, {'Е', "E"}, {'Ё', "Jo"}, - {'Ж', "Zh"}, {'З', "Z"}, {'И', "I"}, {'Й', "JJ"}, {'К', "K"}, {'Л', "L"}, {'М', "M"}, {'Н', "N"}, {'О', "O"}, {'П', "P"}, {'Р', "R"}, {'С', "S"}, - {'Т', "T"}, {'У', "U"}, {'Ф', "F"}, {'Х', "Kh"}, {'Ц', "C"}, {'Ч', "Ch"}, {'Ш', "Sh"}, {'Щ', "Shh"}, {'Ъ', "'"}, {'Ы', "Y"}, {'Ь', ""}, {'Э', "Eh"}, - {'Ю', "Yu"}, {'Я', "Ya"}, {'а', "a"}, {'б', "b"}, {'в', "v"}, {'г', "g"}, {'д', "d"}, {'е', "e"}, {'ё', "jo"}, {'ж', "zh"}, {'з', "z"}, {'и', "i"}, - {'й', "jj"}, {'к', "k"}, {'л', "l"}, {'м', "m"}, {'н', "n"}, {'о', "o"}, {'п', "p"}, {'р', "r"}, {'с', "s"}, {'т', "t"}, {'у', "u"}, {'ф', "f"}, - {'х', "kh"}, {'ц', "c"}, {'ч', "ch"}, {'ш', "sh"}, {'щ', "shh"}, {'ъ', ""}, {'ы', "y"}, {'ь', ""}, {'э', "eh"}, {'ю', "yu"}, {'я', "ya"}, - {'«', ""}, {'»', ""}, {'—', "-"}, {' ', "_"} - }; - - private static Dictionary gostBack = new Dictionary(); - - //ISO 9-95 - private static Dictionary isoFront = new Dictionary() { - { 'Є', "Ye" }, { 'І', "I" }, { 'Ѓ', "G" }, { 'і', "i" }, { '№', "#" }, { 'є', "ye" }, { 'ѓ', "g" }, { 'А', "A" }, { 'Б', "B" }, { 'В', "V" }, { 'Г', "G" }, - { 'Д', "D" }, { 'Е', "E" }, { 'Ё', "Yo" }, { 'Ж', "Zh" }, { 'З', "Z" }, { 'И', "I" }, { 'Й', "J" }, { 'К', "K" }, { 'Л', "L" }, { 'М', "M" }, { 'Н', "N" }, - { 'О', "O" }, { 'П', "P" }, { 'Р', "R" }, { 'С', "S" }, { 'Т', "T" }, { 'У', "U" }, { 'Ф', "F" }, { 'Х', "X" }, { 'Ц', "C" }, { 'Ч', "Ch" }, { 'Ш', "Sh" }, - { 'Щ', "Shh" }, { 'Ъ', "'" }, { 'Ы', "Y" }, { 'Ь', "" }, { 'Э', "E" }, { 'Ю', "YU" }, { 'Я', "YA" }, { 'а', "a" }, { 'б', "b" }, { 'в', "v" }, { 'г', "g" }, - { 'д', "d" }, { 'е', "e" }, { 'ё', "yo" }, { 'ж', "zh" }, { 'з', "z" }, { 'и', "i" }, { 'й', "j" }, { 'к', "k" }, { 'л', "l" }, { 'м', "m" }, { 'н', "n" }, - { 'о', "o" }, { 'п', "p" }, { 'р', "r" }, { 'с', "s" }, { 'т', "t" }, { 'у', "u" }, { 'ф', "f" }, { 'х', "x" }, { 'ц', "c" }, { 'ч', "ch" }, { 'ш', "sh" }, - { 'щ', "shh" }, { 'ъ', "" }, { 'ы', "y" }, { 'ь', "" }, { 'э', "e" }, { 'ю', "yu" }, { 'я', "ya" }, { '«', "" }, { '»', "" }, { '—', "-" }, { ' ', "_" } - }; - - private static Dictionary isoBack = new Dictionary(); - - static Transliteration() - { - foreach (KeyValuePair pair in gostFront) gostBack[pair.Value] = pair.Key; - foreach (KeyValuePair pair in isoFront) isoBack[pair.Value] = pair.Key; - } - - public static string Front(string text, TransliterationType type = TransliterationType.GOST) - { - string output = string.Empty; - Dictionary dict = (type == TransliterationType.ISO) ? isoFront : gostFront; - foreach (char c in text) output += dict.ContainsKey(c) ? dict[c] : c.ToString(); - return output; - } - - public static string Back(string text, TransliterationType type = TransliterationType.GOST) - { - int l = text.Length; - string output = string.Empty; - Dictionary dict = (type == TransliterationType.ISO) ? isoBack : gostBack; - int i = 0; - while (i < l) - { - string s = text.Substring(i, Math.Min(3, l - i)); - do - { - if (dict.ContainsKey(s)) - { - output += dict[s]; - i += s.Length; - break; - } - s = s.Remove(s.Length - 1); - } while (s.Length > 0); - i += s.Length == 0 ? 3 : 0; - } - return output; - } - } - #endregion -} diff --git a/releases/1.1/Misc/UPnP.cs b/releases/1.1/Misc/UPnP.cs deleted file mode 100644 index 830bc50..0000000 --- a/releases/1.1/Misc/UPnP.cs +++ /dev/null @@ -1,313 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * Simple implementation of UPnP controller. Works fine with - * some D-Link and NetGear router models (need more tests) - * - * Based on the Harold Aptroot article & code - * http://www.codeproject.com/Articles/27992/ - * - * TODO: check compatibility with other routers - * - ************************************************************/ - -using System; -using System.Linq; -using System.Collections.Generic; -using System.Text; -using System.Text.RegularExpressions; -using System.Net.Sockets; -using System.Net; -using System.Xml; -using System.IO; -using System.Net.NetworkInformation; -using System.ComponentModel; - -namespace UPnP -{ - public class UPnPController : IDisposable - { - private bool _disposed = false; - private string _serviceUrl; - private BackgroundWorker _worker; - private WebClient _webClient; - - public bool Discovered { get; private set; } - public event EventHandler DiscoverCompleted; - - public bool UPnPReady { get { return !string.IsNullOrEmpty(_serviceUrl); } } - - public UPnPController () - { - Discovered = false; - } - - protected virtual void Dispose(bool disposing) - { - if (!this._disposed && disposing) - { - if (_webClient != null && _webClient.IsBusy) - { - _webClient.CancelAsync(); - _webClient.Dispose(); - } - if (_worker != null) - { - _worker.Dispose(); - } - DiscoverCompleted = null; - _disposed = true; - } - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - public void DiscoverAsync(bool useUPnP) - { - _worker = new BackgroundWorker(); - _worker.DoWork += new DoWorkEventHandler(_worker_DoWork); - _worker.RunWorkerAsync(useUPnP); - } - - void _worker_DoWork(object sender, DoWorkEventArgs e) - { - bool detectUPnP = (bool) e.Argument; - if (detectUPnP) - { - NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); - foreach (NetworkInterface adapter in adapters) - { - IPInterfaceProperties properties = adapter.GetIPProperties(); - if (properties.GatewayAddresses != null && properties.GatewayAddresses.Count > 0) - { - foreach (IPAddressInformation uniAddr in properties.UnicastAddresses) - { - if (uniAddr.Address.AddressFamily == AddressFamily.InterNetwork) - { - using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) - { - socket.Bind(new IPEndPoint(uniAddr.Address, 0)); - socket.ReceiveTimeout = 2000; - socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1); - string req = "M-SEARCH * HTTP/1.1\r\n" + - "HOST: 239.255.255.250:1900\r\n" + - "ST:upnp:rootdevice\r\n" + - "MAN:\"ssdp:discover\"\r\n" + - "MX:3\r\n\r\n"; - byte[] data = Encoding.ASCII.GetBytes(req); - IPEndPoint ipe = new IPEndPoint(IPAddress.Broadcast, 1900); - byte[] buffer = new byte[0x1000]; - - for (int i = 0; i < 3; i++) socket.SendTo(data, ipe); - - int length = 0; - do - { - try { length = socket.Receive(buffer); } - catch { break; } - string resp = Encoding.ASCII.GetString(buffer, 0, length).ToLower(); - if (resp.Contains("upnp:rootdevice")) - { - resp = resp.Substring(resp.ToLower().IndexOf("location:") + 9); - resp = resp.Substring(0, resp.IndexOf("\r")).Trim(); - if (!string.IsNullOrEmpty(_serviceUrl = GetServiceUrl(resp))) - { - break; - } - } - } while (length > 0); - } - if (UPnPReady) - { - string ip = "127.0.0.0"; - XmlDocument xdoc = SOAPRequest(_serviceUrl, - "" + - "", "GetExternalIPAddress"); - if (xdoc.OuterXml.Contains("NewExternalIPAddress")) - { - XmlNamespaceManager nsMgr = new XmlNamespaceManager(xdoc.NameTable); - nsMgr.AddNamespace("tns", "urn:schemas-upnp-org:device-1-0"); - ip = xdoc.SelectSingleNode("//NewExternalIPAddress/text()", nsMgr).Value; - } - ExternalIP = IPAddress.Parse(ip); - } - Discovered = true; - if (UPnPReady && DiscoverCompleted != null) DiscoverCompleted(this, new EventArgs()); - } - } - } - } - } - // Just detect external IP address - else - { - _webClient = new WebClient(); - _webClient.DownloadStringCompleted += (object o, DownloadStringCompletedEventArgs ea) => - { - if (!_disposed && ea.Error == null && ea.Result != null) - { - Regex ip = new Regex(@"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"); - MatchCollection result = ip.Matches(ea.Result); - try { ExternalIP = IPAddress.Parse(result[0].Value); } - catch { ExternalIP = IPAddress.Parse("0.0.0.0"); } - if (DiscoverCompleted != null) DiscoverCompleted(this, new EventArgs()); - } - }; - _webClient.DownloadStringAsync(new Uri("http://myip.dnsdynamic.org")); //new Uri("http://checkip.dyndns.org")); - } - } - - private string GetServiceUrl(string resp) - { -#if false - // UPDATE: registry fix eliminate the IOException but completely ruins UPnP detection (after reboot) - // Prevent IOException - // See https://connect.microsoft.com/VisualStudio/feedback/details/773666/webrequest-create-eats-an-ioexception-on-the-first-call#details - RegistryKey registryKey = null; - registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Wow6432Node\\Microsoft\\.NETFramework", true); - if (registryKey == null) registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\.NETFramework", true); - if (registryKey.GetValue("LegacyWPADSupport") == null) registryKey.SetValue("LegacyWPADSupport", 0); -#endif - try - { - XmlDocument desc = new XmlDocument(); - desc.Load(WebRequest.Create(resp).GetResponse().GetResponseStream()); - XmlNamespaceManager nsMgr = new XmlNamespaceManager(desc.NameTable); - nsMgr.AddNamespace("tns", "urn:schemas-upnp-org:device-1-0"); - XmlNode typen = desc.SelectSingleNode("//tns:device/tns:deviceType/text()", nsMgr); - if (!typen.Value.Contains("InternetGatewayDevice")) return null; - XmlNode node = desc.SelectSingleNode("//tns:service[tns:serviceType=\"urn:schemas-upnp-org:service:WANIPConnection:1\"]/tns:controlURL/text()", nsMgr); - if (node == null) return null; - return CombineUrls(resp, node.Value); - } - catch - { - return null; - } - } - - private string CombineUrls(string resp, string p) - { - int n = resp.IndexOf("://"); - n = resp.IndexOf('/', n + 3); - return resp.Substring(0, n) + p; - } - - public void ForwardPort(int port, ProtocolType protocol, string description) - { - if (UPnPReady) - { - SOAPRequest(_serviceUrl, - "" + - "" + port.ToString() + "" + protocol.ToString().ToUpper() + "" + - "" + port.ToString() + "" + LocalIP.ToString() + - "1" + description + - "0", "AddPortMapping"); - } - } - - public void DeleteForwardingRule(int port, ProtocolType protocol) - { - if (UPnPReady) - { - SOAPRequest(_serviceUrl, - "" + - "" + - "" + - "" + port + "" + - "" + protocol.ToString().ToUpper() + "" + - "", "DeletePortMapping"); - } - } - - /// - /// Local network interface index - /// - private int _interfaceIndex = 0; - public int InterfaceIndex - { - get { return _interfaceIndex; } - set { if (value >= 0 && value < LocalInterfaces.Count) _interfaceIndex = value; } - } - - /// - /// Local IP address - /// - /// - public IPAddress LocalIP { get { return LocalInterfaces[InterfaceIndex]; } } - - /// - /// List of all local network interfaces with gateways - /// - private static List _localInterfaces = null; - public static List LocalInterfaces - { - get - { - if (_localInterfaces == null) - { - _localInterfaces = new List(); - foreach (NetworkInterface netif in NetworkInterface.GetAllNetworkInterfaces()) - { - IPInterfaceProperties properties = netif.GetIPProperties(); - foreach (GatewayIPAddressInformation gw in properties.GatewayAddresses) - { - if (!gw.Address.ToString().Equals("0.0.0.0")) - { - foreach (IPAddressInformation unicast in properties.UnicastAddresses) - { - // Lets skip "link local" addresses (RFC 3927), probably this address is disabled - if (unicast.Address.ToString().StartsWith("169.254")) break; - if (unicast.Address.AddressFamily == AddressFamily.InterNetwork) - { - _localInterfaces.Add(unicast.Address); - } - } - } - } - } - // If no network interface detected, add at least a local loopback (127.0.0.1) - if (_localInterfaces.Count == 0) _localInterfaces.Add(IPAddress.Loopback); - } - return _localInterfaces; - } - } - - public IPAddress ExternalIP { get; private set;} - - private static XmlDocument SOAPRequest(string url, string soap, string function) - { - XmlDocument resp = new XmlDocument(); - try - { - string req = "" + - "" + - "" + - soap + - "" + - ""; - WebRequest r = HttpWebRequest.Create(url); - r.Method = "POST"; - byte[] b = Encoding.UTF8.GetBytes(req); - r.Headers.Add("SOAPACTION", "\"urn:schemas-upnp-org:service:WANIPConnection:1#" + function + "\""); - r.ContentType = "text/xml; charset=\"utf-8\""; - r.ContentLength = b.Length; - r.GetRequestStream().Write(b, 0, b.Length); - WebResponse wres = r.GetResponse(); - Stream ress = wres.GetResponseStream(); - resp.Load(ress); - } - catch { } - return resp; - } - } -} diff --git a/releases/1.1/Misc/Utils.cs b/releases/1.1/Misc/Utils.cs deleted file mode 100644 index 468d2de..0000000 --- a/releases/1.1/Misc/Utils.cs +++ /dev/null @@ -1,279 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module contains string extensions and some helpers - * - ************************************************************/ - -using System; -using System.IO; -using System.Collections; -using System.Collections.Generic; -using System.Security.Cryptography; -using System.Linq; -using System.Text; - -namespace TinyOPDS -{ - public static class StringExtension - { - /// - /// Capitalize words in the string (for example, author's name: first, middle last), by converting first char of every word to uppercase - /// - /// source string - /// capitalize first word only - /// - public static string Capitalize(this string str, bool onlyFirstWord = false) - { - string[] words = str.Split(' '); - str = string.Empty; - for (int i = 0; i < words.Length; i++) - { - if (!onlyFirstWord || (onlyFirstWord && i == 0)) - { - if (words[i].Length > 1) - { - if (words[i].IsUpper()) words[i] = words[i].ToLower(); - words[i] = char.ToUpper(words[i][0]) + words[i].Substring(1); - } - else - { - words[i] = words[i].ToUpper(); - } - } - str += words[i] + " "; - } - return str.Trim(); - } - - public static bool IsUpper(this string str) - { - bool isUpper = true; - foreach (char c in str) isUpper &= char.IsUpper(c); - return isUpper; - } - } - - public class Utils - { - private static string[] fb2Clients = new string[] { "fbreader", "moon+ reader" }; - /// - /// Detect eBook readers with fb2 support - /// - /// - /// true if reader supports fb2 format - public static bool DetectFB2Reader(string userAgent) - { - if (!string.IsNullOrEmpty(userAgent)) - { - foreach (string s in fb2Clients) - { - if (userAgent.IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0) return true; - } - } - return false; - } - - private static string[] browsers = new string[] { "opera", "aol", "msie", "firefox", "chrome", "mozilla", "safari", "netscape", "navigator", "mosaic", "lynx", - "amaya", "omniweb", "avant", "camino", "flock", "seamonkey", "konqueror", "gecko", "yandex.browser" }; - /// - /// Detect browsers by User-Agent - /// - /// - /// true if it's browser request - public static bool DetectBrowser(string userAgent) - { - if (!string.IsNullOrEmpty(userAgent)) - { - foreach (string s in browsers) - { - if (userAgent.IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0) return true; - } - } - return false; - } - - /// - /// Helper for project Mono - /// - public static bool IsLinux - { - get - { - int p = (int)Environment.OSVersion.Platform; - return (p == 4) || (p == 6) || (p == 128); - } - } - - // Default path to service files: databases, log, setting - public static string ServiceFilesLocation - { - get - { - //return Properties.Settings.Default.ServiceFilesPath; - return Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); - } - } - - // Assembly version - public static Version Version - { - get - { - return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; - } - } - - public static string ServerVersionName - { - get - { - return string.Format("running on TinyOPDS server version {0}.{1}", Version.Major, Version.Minor); - } - } - - /// - /// Creates a name-based UUID using the algorithm from RFC 4122 §4.3. - /// - /// The ID of the namespace. - /// The name (within that namespace). - /// The version number of the UUID to create; this value must be either - /// A UUID derived from the namespace and name. - public static Guid CreateGuid(Guid namespaceId, string name) - { - if (name == null) throw new ArgumentNullException("name"); - // convert the name to a sequence of octets (as defined by the standard or conventions of its namespace) (step 3) - // ASSUME: UTF-8 encoding is always appropriate - byte[] nameBytes = Encoding.UTF8.GetBytes(name); - - // convert the namespace UUID to network order (step 3) - byte[] namespaceBytes = namespaceId.ToByteArray(); - SwapByteOrder(namespaceBytes); - - // compute the hash of the name space ID concatenated with the name (step 4) - byte[] hash = namespaceId.ToByteArray(); - using (SHA256 algorithm = new SHA256Managed()) - { - algorithm.TransformBlock(namespaceBytes, 0, namespaceBytes.Length, hash, 0); - algorithm.TransformFinalBlock(nameBytes, 0, nameBytes.Length); - hash = algorithm.Hash; - } - - // most bytes from the hash are copied straight to the bytes of the new GUID (steps 5-7, 9, 11-12) - byte[] newGuid = new byte[16]; - Array.Copy(hash, 0, newGuid, 0, 16); - - // set the four most significant bits (bits 12 through 15) of the time_hi_and_version field to the appropriate 4-bit version number from Section 4.1.3 (step 8) - newGuid[6] = (byte) ((newGuid[6] & 0x0F) | (5 << 4)); - - // set the two most significant bits (bits 6 and 7) of the clock_seq_hi_and_reserved to zero and one, respectively (step 10) - newGuid[8] = (byte) ((newGuid[8] & 0x3F) | 0x80); - - // convert the resulting UUID to local byte order (step 13) - SwapByteOrder(newGuid); - return new Guid(newGuid); - } - - /// - /// The namespace for fully-qualified domain names (from RFC 4122, Appendix C). - /// - public static readonly Guid DnsNamespace = new Guid("6ba7b810-9dad-11d1-80b4-00c04fd430c8"); - - /// - /// The namespace for URLs (from RFC 4122, Appendix C). - /// - public static readonly Guid UrlNamespace = new Guid("6ba7b811-9dad-11d1-80b4-00c04fd430c8"); - - /// - /// The namespace for ISO OIDs (from RFC 4122, Appendix C). - /// - public static readonly Guid IsoOidNamespace = new Guid("6ba7b812-9dad-11d1-80b4-00c04fd430c8"); - - // Converts a GUID (expressed as a byte array) to/from network order (MSB-first). - internal static void SwapByteOrder(byte[] guid) - { - SwapBytes(guid, 0, 3); - SwapBytes(guid, 1, 2); - SwapBytes(guid, 4, 5); - SwapBytes(guid, 6, 7); - } - - private static void SwapBytes(byte[] guid, int left, int right) - { - byte temp = guid[left]; - guid[left] = guid[right]; - guid[right] = temp; - } - } - - /// - /// Gives us a handy way to modify a collection while we're iterating through it. - /// - /// - /// Example of usage: - /// foreach (Book book in new IteratorIsolateCollection(Library.Books.Values)) - /// { - /// book.Title = book.Title.ToUpper(); - /// } - public class IteratorIsolateCollection : IEnumerable - { - IEnumerable _enumerable; - - public IteratorIsolateCollection(IEnumerable enumerable) - { - _enumerable = enumerable; - } - - public IEnumerator GetEnumerator() - { - return new IteratorIsolateEnumerator(_enumerable.GetEnumerator()); - } - - internal class IteratorIsolateEnumerator : IEnumerator - { - ArrayList items = new ArrayList(); - int currentItem; - - internal IteratorIsolateEnumerator(IEnumerator enumerator) - { - while (enumerator.MoveNext() != false) - { - items.Add(enumerator.Current); - } - IDisposable disposable = enumerator as IDisposable; - if (disposable != null) - { - disposable.Dispose(); - } - currentItem = -1; - } - - public void Reset() - { - currentItem = -1; - } - - public bool MoveNext() - { - currentItem++; - if (currentItem == items.Count) - return false; - - return true; - } - - public object Current - { - get - { - return items[currentItem]; - } - } - } - } -} diff --git a/releases/1.1/OPDS/AuthorsCatalog.cs b/releases/1.1/OPDS/AuthorsCatalog.cs deleted file mode 100644 index 471ee39..0000000 --- a/releases/1.1/OPDS/AuthorsCatalog.cs +++ /dev/null @@ -1,112 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module defines the OPDS AuthorsCatalog class - * - ************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Linq; -using System.Web; - -using TinyOPDS.Data; - -namespace TinyOPDS.OPDS -{ - /// - /// Authors acquisition feed class - /// - public class AuthorsCatalog - { - /// - /// - /// - /// - /// - /// - public XDocument GetCatalog(string searchPattern, bool isOpenSearch = false, int threshold = 50) - { - if (!string.IsNullOrEmpty(searchPattern)) searchPattern = Uri.UnescapeDataString(searchPattern).Replace('+', ' ').ToLower(); - - XDocument doc = new XDocument( - // Add root element and namespaces - new XElement("feed", new XAttribute(XNamespace.Xmlns + "dc", Namespaces.dc), new XAttribute(XNamespace.Xmlns + "os", Namespaces.os), new XAttribute(XNamespace.Xmlns + "opds", Namespaces.opds), - new XElement("title", Localizer.Text("Books by authors")), - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("icon", "/authors.ico"), - // Add links - Links.opensearch, Links.search, Links.start) - ); - - // Get all authors names starting with searchPattern - List Authors = Library.GetAuthorsByName(searchPattern, isOpenSearch); - - // For search, also check transliterated names - if (isOpenSearch) - { - // Try transliteration - string translit = Transliteration.Back(searchPattern, TransliterationType.GOST); - if (!string.IsNullOrEmpty(translit)) - { - List transAuthors = Library.GetAuthorsByName(translit, isOpenSearch); - if (transAuthors.Count > 0) Authors.AddRange(transAuthors); - } - } - - if (Authors.Count > threshold) - { - Dictionary authors = null; - do - { - authors = (from a in Authors - group a by (a.Length > searchPattern.Length ? a.Substring(0, searchPattern.Length + 1) : a) into g - where g.Count() > 1 - select new { Name = g, Count = g.Count() }).ToDictionary(x => x.Name.Key, y => y.Count); - if (authors.Count == 1) searchPattern = authors.First().Key; - } while (authors.Count <= 1); - - // Add catalog entries - foreach (KeyValuePair author in authors) - { - doc.Root.Add( - new XElement("entry", - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("id", "tag:authors:" + author.Key), - new XElement("title", author.Key), - new XElement("content", string.Format(Localizer.Text("Total authors on {0}: {1}"), author.Key, author.Value), new XAttribute("type", "text")), - new XElement("link", new XAttribute("href", "/authorsindex/" + Uri.EscapeDataString(author.Key)), new XAttribute("type", "application/atom+xml;profile=opds-catalog")) - ) - ); - } - } - // - else - { - // Add catalog entries - foreach (string author in Authors) - { - var booksCount = Library.GetBooksByAuthor(author).Count; - - doc.Root.Add( - new XElement("entry", - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("id", "tag:authors:" + author), - new XElement("title", author), - new XElement("content", string.Format(Localizer.Text("Books: {0}"), booksCount), new XAttribute("type", "text")), - new XElement("link", new XAttribute("href", "/author/" + Uri.EscapeDataString(author)), new XAttribute("type", "application/atom+xml;profile=opds-catalog")) - ) - ); - } - } - return doc; - } - } -} diff --git a/releases/1.1/OPDS/BooksCatalog.cs b/releases/1.1/OPDS/BooksCatalog.cs deleted file mode 100644 index b8d6d5d..0000000 --- a/releases/1.1/OPDS/BooksCatalog.cs +++ /dev/null @@ -1,286 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module defines the OPDS BookCatalog class - * - * - ************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Linq; -using System.Web; - -using TinyOPDS.Data; - -namespace TinyOPDS.OPDS -{ - public class BooksCatalog - { - private enum SearchFor - { - Author = 0, - Sequence, - Genre, - Title - } - - /// - /// Returns books catalog by selected author - /// - /// - /// - public XDocument GetCatalogByAuthor(string author, bool fb2Only) - { - return GetCatalog(author, SearchFor.Author, fb2Only); - } - - /// - /// Returns books catalog by selected sequence (series) - /// - /// - /// - public XDocument GetCatalogBySequence(string sequence, bool fb2Only) - { - return GetCatalog(sequence, SearchFor.Sequence, fb2Only); - } - - /// - /// Returns books catalog by selected genre - /// - /// - /// - public XDocument GetCatalogByGenre(string genre, bool fb2Only) - { - return GetCatalog(genre, SearchFor.Genre, fb2Only); - } - - - /// - /// Returns books catalog by selected genre - /// - /// - /// - public XDocument GetCatalogByTitle(string title, bool fb2Only, int pageNumber = 0, int threshold = 50) - { - return GetCatalog(title, SearchFor.Title, fb2Only, threshold); - } - - /// - /// Returns books catalog for specific search - /// - /// Keyword to search - /// Type of search - /// Client can accept fb2 files - /// Items per page - /// - private XDocument GetCatalog(string searchPattern, SearchFor searchFor, bool acceptFB2, int threshold = 50) - { - if (!string.IsNullOrEmpty(searchPattern)) searchPattern = Uri.UnescapeDataString(searchPattern).Replace('+', ' '); - - XDocument doc = new XDocument( - // Add root element and namespaces - new XElement("feed", new XAttribute(XNamespace.Xmlns + "dc", Namespaces.dc), new XAttribute(XNamespace.Xmlns + "os", Namespaces.os), new XAttribute(XNamespace.Xmlns + "opds", Namespaces.opds), - new XElement("title", Localizer.Text("Books by author ") + searchPattern), - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("icon", "/icons/books.ico"), - // Add links - Links.opensearch, Links.search, Links.start) - ); - - int pageNumber = 0; - // Extract and remove page number from the search patter - int j = searchPattern.IndexOf('/'); - if (j > 0) - { - int.TryParse(searchPattern.Substring(j + 1), out pageNumber); - searchPattern = searchPattern.Substring(0, j); - } - - // Get author's books - string catalogType = string.Empty; - List books = new List(); - switch (searchFor) - { - case SearchFor.Author: - books = Library.GetBooksByAuthor(searchPattern); - catalogType = "/author/" + Uri.EscapeDataString(searchPattern); - break; - case SearchFor.Sequence: - books = Library.GetBooksBySequence(searchPattern); - catalogType = "/sequence/" + Uri.EscapeDataString(searchPattern); - break; - case SearchFor.Genre: - books = Library.GetBooksByGenre(searchPattern); - catalogType = "/genre/" + Uri.EscapeDataString(searchPattern); - break; - case SearchFor.Title: - books = Library.GetBooksByTitle(searchPattern); - // For search, also return books by - if (threshold > 50) - { - string translit = Transliteration.Back(searchPattern, TransliterationType.GOST); - if (!string.IsNullOrEmpty(translit)) - { - List transTitles = Library.GetBooksByTitle(translit); - if (transTitles.Count > 0) books.AddRange(transTitles); - } - } - break; - } - - // For sequences, sort books by sequence number - if (searchFor == SearchFor.Sequence) - { - books = books.OrderBy(b => b.NumberInSequence).ToList(); - } - // else sort by title - else - { - books = books.OrderBy(b => b.Title, new OPDSComparer(Localizer.Language.Equals("ru"))).ToList(); - } - - int startIndex = pageNumber * threshold; - int endIndex = startIndex + ((books.Count / threshold == 0) ? books.Count : Math.Min(threshold, books.Count - startIndex)); - - if (searchFor == SearchFor.Title) - { - if ((pageNumber + 1) * threshold < books.Count) - { - catalogType = string.Format("/search?searchType=books&searchTerm={0}&pageNumber={1}", Uri.EscapeDataString(searchPattern), pageNumber + 1); - doc.Root.Add(new XElement("link", - new XAttribute("href", catalogType), - new XAttribute("rel", "next"), - new XAttribute("type", "application/atom+xml;profile=opds-catalog"))); - } - } - else if ((pageNumber + 1) * threshold < books.Count) - { - catalogType += "/" + (pageNumber + 1); - doc.Root.Add(new XElement("link", - new XAttribute("href", catalogType), - new XAttribute("rel", "next"), - new XAttribute("type", "application/atom+xml;profile=opds-catalog"))); - - } - - bool useCyrillic = Localizer.Language.Equals("ru"); - - List genres = Library.Genres; - - // Add catalog entries - for (int i = startIndex; i < endIndex; i++) - { - Book book = books.ElementAt(i); - - XElement entry = - new XElement("entry", - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("id", "tag:book:" + book.ID), - new XElement("title", book.Title) - ); - - foreach (string author in book.Authors) - { - entry.Add( - new XElement("author", - new XElement("name", author), - new XElement("uri", "/author/" + Uri.EscapeDataString(author) - ))); - } - - foreach (string genreStr in book.Genres) - { - Genre genre = genres.Where(g => g.Tag.Equals(genreStr)).FirstOrDefault(); - if (genre != null) - entry.Add(new XElement("category", new XAttribute("term", (useCyrillic ? genre.Translation : genre.Name)), new XAttribute("label", (useCyrillic ? genre.Translation : genre.Name)))); - } - - // Build a content entry (translator(s), year, size, annotation etc.) - string bookInfo = string.Empty; - - if (!string.IsNullOrEmpty(book.Annotation)) - { - bookInfo += string.Format("

{0}


", book.Annotation); - } - if (book.Translators.Count > 0) - { - bookInfo += string.Format("{0} ", Localizer.Text("Translation:")); - foreach (string translator in book.Translators) bookInfo += translator + " "; - bookInfo += "
"; - } - if (book.BookDate != DateTime.MinValue) - { - bookInfo += string.Format("{0} {1}
", Localizer.Text("Year of publication:"), book.BookDate.Year); - } - bookInfo += string.Format("{0} {1}
", Localizer.Text("Format:"), book.BookType == BookType.EPUB ? "epub" : "fb2"); - bookInfo += string.Format("{0} {1} Kb
", Localizer.Text("Size:"), (int) book.DocumentSize / 1024); - if (!string.IsNullOrEmpty(book.Sequence)) - { - bookInfo += string.Format("{0} {1} #{2}
", Localizer.Text("Series:"), book.Sequence, book.NumberInSequence); - } - - entry.Add( - new XElement(Namespaces.dc + "language", book.Language), - new XElement(Namespaces.dc + "format", book.BookType == BookType.FB2 ? "fb2+zip" : "epub+zip"), - new XElement("content", new XAttribute("type", "text/html"), bookInfo)); - - if (book.HasCover) - { - entry.Add( - // Adding cover page and thumbnail links - new XElement("link", new XAttribute("href", "/cover/" + book.ID + ".jpeg"), new XAttribute("rel", "http://opds-spec.org/image"), new XAttribute("type", "image/jpeg")), - new XElement("link", new XAttribute("href", "/cover/" + book.ID + ".jpeg"), new XAttribute("rel", "x-stanza-cover-image"), new XAttribute("type", "image/jpeg")), - new XElement("link", new XAttribute("href", "/thumbnail/" + book.ID + ".jpeg"), new XAttribute("rel", "http://opds-spec.org/thumbnail"), new XAttribute("type", "image/jpeg")), - new XElement("link", new XAttribute("href", "/thumbnail/" + book.ID + ".jpeg"), new XAttribute("rel", "x-stanza-cover-image-thumbnail"), new XAttribute("type", "image/jpeg")) - // Adding download links - ); - } - - string fileName = Uri.EscapeDataString(Transliteration.Front(string.Format("{0}_{1}", book.Authors.First(), book.Title)).SanitizeFileName()); - string url = "/" + string.Format("{0}/{1}", book.ID, fileName); - if (book.BookType == BookType.EPUB || (book.BookType == BookType.FB2 && !acceptFB2 && !string.IsNullOrEmpty(Properties.Settings.Default.ConvertorPath))) - { - entry.Add(new XElement("link", new XAttribute("href", url+".epub"), new XAttribute("rel", "http://opds-spec.org/acquisition/open-access"), new XAttribute("type", "application/epub+zip"))); - } - - if (book.BookType == BookType.FB2) - { - entry.Add(new XElement("link", new XAttribute("href", url+".fb2.zip"), new XAttribute("rel", "http://opds-spec.org/acquisition/open-access"), new XAttribute("type", "application/fb2+zip"))); - } - - // For search requests, lets add navigation links for author and series (if any) - if (searchFor != SearchFor.Author) - { - foreach (string author in book.Authors) - { - entry.Add(new XElement("link", - new XAttribute("href", "/author/" + Uri.EscapeDataString(author)), - new XAttribute("rel", "related"), - new XAttribute("type", "application/atom+xml;profile=opds-catalog"), - new XAttribute("title", string.Format(Localizer.Text("All books by author {0}"), author)))); - } - } - - if (searchFor != SearchFor.Sequence && !string.IsNullOrEmpty(book.Sequence)) - { - entry.Add(new XElement("link", - new XAttribute("href", "/sequence/" + Uri.EscapeDataString(book.Sequence)), - new XAttribute("rel", "related"), - new XAttribute("type", "application/atom+xml;profile=opds-catalog"), - new XAttribute("title", string.Format(Localizer.Text("All books by series {0}"), book.Sequence)))); - } - - doc.Root.Add(entry); - } - return doc; - } - } -} \ No newline at end of file diff --git a/releases/1.1/OPDS/GenresCatalog.cs b/releases/1.1/OPDS/GenresCatalog.cs deleted file mode 100644 index a2cd066..0000000 --- a/releases/1.1/OPDS/GenresCatalog.cs +++ /dev/null @@ -1,87 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module defines the OPDS GenresCatalog class - * - ************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Linq; -using System.Web; - -using TinyOPDS.Data; - -namespace TinyOPDS.OPDS -{ - /// - /// Genres acquisition feed class - /// - public class GenresCatalog - { - public XDocument GetCatalog(string searchPattern, int threshold = 50) - { - if (!string.IsNullOrEmpty(searchPattern)) searchPattern = Uri.UnescapeDataString(searchPattern).Replace('+', ' '); - - XDocument doc = new XDocument( - // Add root element and namespaces - new XElement("feed", new XAttribute(XNamespace.Xmlns + "dc", Namespaces.dc), new XAttribute(XNamespace.Xmlns + "os", Namespaces.os), new XAttribute(XNamespace.Xmlns + "opds", Namespaces.opds), - new XElement("title", Localizer.Text("Books by genres")), - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("icon", "/genres.ico"), - // Add links - Links.opensearch, Links.search, Links.start) - ); - - bool topLevel = true; - bool useCyrillic = Localizer.Language.Equals("ru"); - - List libGenres = Library.Genres; - List genres = null; - - // Is it top level (main genres)? - if (string.IsNullOrEmpty(searchPattern)) - { - genres = (from g in Library.FB2Genres from sg in g.Subgenres where libGenres.Contains(sg) select g).Distinct().ToList(); - } - // Is it a second level (subgenres)? - else - { - Genre genre = Library.FB2Genres.Where(g => g.Name.Equals(searchPattern) || g.Translation.Equals(searchPattern)).FirstOrDefault(); - if (genre != null) - { - genres = (from g in libGenres where genre.Subgenres.Contains(g) select g).Distinct().ToList(); - topLevel = false; - } - } - - if (genres != null) - { - genres.Sort(new OPDSComparer(useCyrillic)); - - // Add catalog entries - foreach (Genre genre in genres) - { - doc.Root.Add( - new XElement("entry", - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("id", "tag:root:genre:" + (useCyrillic ? genre.Translation : genre.Name)), - new XElement("title", (useCyrillic ? genre.Translation : genre.Name)), - new XElement("content", string.Format(Localizer.Text("Books in genre «{0}»"), (useCyrillic ? genre.Translation : genre.Name)), new XAttribute("type", "text")), - new XElement("link", new XAttribute("href", "/" + (topLevel ? "genres/" : "genre/") + (topLevel ? Uri.EscapeDataString((useCyrillic ? genre.Translation : genre.Name)) : genre.Tag)), new XAttribute("type", "application/atom+xml;profile=opds-catalog")) - ) - ); - } - } - - return doc; - } - } -} diff --git a/releases/1.1/OPDS/Links.cs b/releases/1.1/OPDS/Links.cs deleted file mode 100644 index 41c22ee..0000000 --- a/releases/1.1/OPDS/Links.cs +++ /dev/null @@ -1,39 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module defines static OPDS links - * - ************************************************************/ - -using System.Xml.Linq; - -namespace TinyOPDS.OPDS -{ - public class Links - { - public static XElement opensearch = new XElement("link", - new XAttribute("href", "/opds-opensearch.xml"), - new XAttribute("rel", "search"), - new XAttribute("type", "application/opensearchdescription+xml")); - - public static XElement search = new XElement("link", - new XAttribute("href","/search?searchTerm={searchTerms}"), - new XAttribute("rel","search"), - new XAttribute("type","application/atom+xml")); - - public static XElement start = new XElement("link", - new XAttribute("href", ""), - new XAttribute("rel","start"), - new XAttribute("type","application/atom+xml")); - - public static XElement self = new XElement("link", - new XAttribute("href", ""), - new XAttribute("rel","self"), - new XAttribute("type","application/atom+xml")); - } -} diff --git a/releases/1.1/OPDS/Namespaces.cs b/releases/1.1/OPDS/Namespaces.cs deleted file mode 100644 index 5ffdae4..0000000 --- a/releases/1.1/OPDS/Namespaces.cs +++ /dev/null @@ -1,24 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * OPDS xml namespaces - * - ************************************************************/ - -using System.Xml.Linq; - -namespace TinyOPDS.OPDS -{ - internal class Namespaces - { - internal static XNamespace xmlns = XNamespace.Get("http://www.w3.org/2005/Atom"); - internal static XNamespace dc = XNamespace.Get("http://purl.org/dc/terms/"); - internal static XNamespace os = XNamespace.Get("http://a9.com/-/spec/opensearch/1.1/"); - internal static XNamespace opds = XNamespace.Get("http://opds-spec.org/2010/catalog"); - } -} diff --git a/releases/1.1/OPDS/OpenSearch.cs b/releases/1.1/OPDS/OpenSearch.cs deleted file mode 100644 index 62c9783..0000000 --- a/releases/1.1/OPDS/OpenSearch.cs +++ /dev/null @@ -1,113 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module contains OPDS OpenSearch implementation - * - * TODO: implement SOUNDEX search - * - ************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Linq; -using System.Web; - -using TinyOPDS.Data; - -namespace TinyOPDS.OPDS -{ - public class OpenSearch - { - public XDocument OpenSearchDescription() - { - XDocument doc = new XDocument( - // Add root element and namespaces - new XElement("OpenSearchDescription", - new XElement("ShortName", "TinyOPDS"), - new XElement("LongName", "TinyOPDS"), - new XElement("Url", new XAttribute("type", "application/atom+xml"), new XAttribute("template", "/search?searchTerm={searchTerms}")), - new XElement("Image", "/favicon.ico", new XAttribute("width", "16"), new XAttribute("height", "16")), - new XElement("Tags"), - new XElement("Contact"), - new XElement("Developer"), - new XElement("Attribution"), - new XElement("SyndicationRight", "open"), - new XElement("AdultContent", "false"), - new XElement("Language", "*"), - new XElement("OutputEncoding", "UTF-8"), - new XElement("InputEncoding", "UTF-8"))); - - return doc; - } - - public XDocument Search(string searchPattern, string searchType = "", bool fb2Only = false, int pageNumber = 0, int threshold = 50) - { - if (!string.IsNullOrEmpty(searchPattern)) searchPattern = Uri.UnescapeDataString(searchPattern).Replace('+', ' ').ToLower(); - - XDocument doc = new XDocument( - // Add root element and namespaces - new XElement("feed", new XAttribute(XNamespace.Xmlns + "dc", Namespaces.dc), new XAttribute(XNamespace.Xmlns + "os", Namespaces.os), new XAttribute(XNamespace.Xmlns + "opds", Namespaces.opds), - new XElement("id", "tag:search:"+searchPattern), - new XElement("title", Localizer.Text("Search results")), - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("icon", "/series.ico"), - // Add links - Links.opensearch, Links.search, Links.start, Links.self) - ); - - List authors = new List(); - List titles = new List(); - - if (string.IsNullOrEmpty(searchType)) - { - string transSearchPattern = Transliteration.Back(searchPattern, TransliterationType.GOST); - authors = Library.GetAuthorsByName(searchPattern, true); - if (authors.Count == 0 && !string.IsNullOrEmpty(transSearchPattern)) - { - authors = Library.GetAuthorsByName(transSearchPattern, true); - } - titles = Library.GetBooksByTitle(searchPattern); - if (titles.Count == 0 && !string.IsNullOrEmpty(transSearchPattern)) - { - titles = Library.GetBooksByTitle(transSearchPattern); - } - } - - if (string.IsNullOrEmpty(searchType) && authors.Count > 0 && titles.Count > 0) - { - // Add two navigation entries: search by authors name and book title - doc.Root.Add( - new XElement("entry", - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("id", "tag:search:author"), - new XElement("title", Localizer.Text("Search authors")), - new XElement("content", Localizer.Text("Search authors by name"), new XAttribute("type", "text")), - new XElement("link", new XAttribute("href", "/search?searchType=authors&searchTerm=" + Uri.EscapeDataString(searchPattern)), new XAttribute("type", "application/atom+xml;profile=opds-catalog"))), - new XElement("entry", - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("id", "tag:search:title"), - new XElement("title", Localizer.Text("Search books")), - new XElement("content", Localizer.Text("Search books by title"), new XAttribute("type", "text")), - new XElement("link", new XAttribute("href", "/search?searchType=books&searchTerm=" + Uri.EscapeDataString(searchPattern)), new XAttribute("type", "application/atom+xml;profile=opds-catalog"))) - ); - } - else if (searchType.Equals("authors") || (authors.Count > 0 && titles.Count == 0)) - { - return new AuthorsCatalog().GetCatalog(searchPattern, true); - } - else if (searchType.Equals("books") || (titles.Count > 0 && authors.Count == 0)) - { - if (pageNumber > 0) searchPattern += "/" + pageNumber; - return new BooksCatalog().GetCatalogByTitle(searchPattern, fb2Only, 0, 1000); - } - return doc; - } - } -} diff --git a/releases/1.1/OPDS/RootCatalog.cs b/releases/1.1/OPDS/RootCatalog.cs deleted file mode 100644 index 2e9717d..0000000 --- a/releases/1.1/OPDS/RootCatalog.cs +++ /dev/null @@ -1,77 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module defines the OPDS RootCatalog class - * - ************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Linq; - -using TinyOPDS.Data; - -namespace TinyOPDS.OPDS -{ - /// - /// Root catalog class - /// - class RootCatalog - { - public XDocument Catalog - { - get - { - return new XDocument( - // Add root element with namespaces - new XElement("feed", new XAttribute(XNamespace.Xmlns + "dc", Namespaces.dc), - new XAttribute(XNamespace.Xmlns + "os", Namespaces.os), - new XAttribute(XNamespace.Xmlns + "opds", Namespaces.opds), - - new XElement("id", "tag:root"), - new XElement("title", Properties.Settings.Default.ServerName), - new XElement("subtitle", Utils.ServerVersionName), - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("icon", "/favicon.ico"), - - // Add links - Links.opensearch, - Links.search, - Links.start, - Links.self, - - // Add catalog entries - new XElement("entry", - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("id", "tag:root:authors"), - new XElement("title", Localizer.Text("By authors"), new XAttribute("type", "text")), - new XElement("content", string.Format(Localizer.Text("{0} books by {1} authors"), Library.Count, Library.Authors.Count), new XAttribute("type", "text")), - new XElement("link", new XAttribute("href", "/authorsindex"), new XAttribute("type", "application/atom+xml;profile=opds-catalog")) - ), - new XElement("entry", - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("id", "tag:root:sequences"), - new XElement("title", Localizer.Text("By series"), new XAttribute("type", "text")), - new XElement("content", string.Format(Localizer.Text("{0} books by {1} series"), Library.Count, Library.Sequences.Count), new XAttribute("type", "text")), - new XElement("link", new XAttribute("href", "/sequencesindex"), new XAttribute("type", "application/atom+xml;profile=opds-catalog")) - ), - new XElement("entry", - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("id", "tag:root:genre"), - new XElement("title", Localizer.Text("By genres"), new XAttribute("type", "text")), - new XElement("content", Localizer.Text("Books grouped by genres"), new XAttribute("type", "text")), - new XElement("link", new XAttribute("href", "/genres"), new XAttribute("type", "application/atom+xml;profile=opds-catalog")) - ) - ) - ); - } - } - } -} diff --git a/releases/1.1/OPDS/SequencesCatalog.cs b/releases/1.1/OPDS/SequencesCatalog.cs deleted file mode 100644 index f81d263..0000000 --- a/releases/1.1/OPDS/SequencesCatalog.cs +++ /dev/null @@ -1,90 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module defines the OPDS SequencesCatalog class (book series) - * - ************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Linq; -using System.Web; - -using TinyOPDS.Data; - -namespace TinyOPDS.OPDS -{ - /// - /// Sequences acquisition feed class - /// - public class SequencesCatalog - { - public XDocument GetCatalog(string searchPattern, int threshold = 50) - { - if (!string.IsNullOrEmpty(searchPattern)) searchPattern = Uri.UnescapeDataString(searchPattern).Replace('+', ' '); - - XDocument doc = new XDocument( - // Add root element and namespaces - new XElement("feed", new XAttribute(XNamespace.Xmlns + "dc", Namespaces.dc), new XAttribute(XNamespace.Xmlns + "os", Namespaces.os), new XAttribute(XNamespace.Xmlns + "opds", Namespaces.opds), - new XElement("title", Localizer.Text("Book series")), - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("icon", "/series.ico"), - // Add links - Links.opensearch, Links.search, Links.start) - ); - - // Get all authors names starting with searchPattern - List Sequences = (from s in Library.Sequences where s.StartsWith(searchPattern) && s.Length > searchPattern.Length + 1 select s).ToList(); - - if (Sequences.Count > threshold) - { - Dictionary sequences = (from a in Sequences - group a by (a.Length > searchPattern.Length ? a.Substring(0, searchPattern.Length + 1) : a) into g - where g.Count() > 1 - select new { Name = g, Count = g.Count() }).ToDictionary(x => x.Name.Key, y => y.Count); - - // Add catalog entries - foreach (KeyValuePair sequence in sequences) - { - doc.Root.Add( - new XElement("entry", - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("id", "tag:sequences:" + sequence.Key), - new XElement("title", sequence.Key), - new XElement("content", string.Format(Localizer.Text("Total series on {0}: {1}"), sequence.Key, sequence.Value), new XAttribute("type", "text")), - new XElement("link", new XAttribute("href", "/sequencesindex/" + Uri.EscapeDataString(sequence.Key)), new XAttribute("type", "application/atom+xml;profile=opds-catalog")) - ) - ); - } - } - // - else - { - List sequences = (from s in Sequences where s.StartsWith(searchPattern) select s).ToList(); - // Add catalog entries - foreach (string sequence in sequences) - { - var seriesCount = Library.GetBooksBySequence(sequence).Count; - - doc.Root.Add( - new XElement("entry", - new XElement("updated", DateTime.UtcNow.ToUniversalTime()), - new XElement("id", "tag:sequences:" + sequence), - new XElement("title", sequence), - new XElement("content", string.Format(Localizer.Text("{0} books in {1}"), seriesCount, sequence), new XAttribute("type", "text")), - new XElement("link", new XAttribute("href", "/sequence/" + Uri.EscapeDataString(sequence)), new XAttribute("type", "application/atom+xml;profile=opds-catalog")) - ) - ); - } - } - return doc; - } - } -} diff --git a/releases/1.1/Parsers/BookParser.cs b/releases/1.1/Parsers/BookParser.cs deleted file mode 100644 index 40146be..0000000 --- a/releases/1.1/Parsers/BookParser.cs +++ /dev/null @@ -1,63 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * Base class for book parsers - * - ************************************************************/ - -using System; -using System.IO; -using System.Collections.Generic; -using System.Linq; -using System.Drawing; - -using TinyOPDS.Data; - -namespace TinyOPDS.Parsers -{ - public abstract class BookParser - { - /// - /// - /// - /// - /// - /// - public abstract Book Parse(Stream stream, string fileName); - - /// - /// - /// - /// - /// - public Book Parse(string fileName) - { - using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) - return Parse(stream, fileName); - } - - /// - /// - /// - /// - /// - public abstract Image GetCoverImage(Stream stream, string fileName); - /// - /// - /// - /// - /// - /// - public Image GetCoverImage(string fileName) - { - using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) - return GetCoverImage(stream, fileName); - } - - } -} diff --git a/releases/1.1/Parsers/ePubParser.cs b/releases/1.1/Parsers/ePubParser.cs deleted file mode 100644 index 93cf32e..0000000 --- a/releases/1.1/Parsers/ePubParser.cs +++ /dev/null @@ -1,155 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * ePub parser class implementation - * - ************************************************************/ - -using System; -using System.IO; -using System.Collections.Generic; -using System.Linq; -using System.Drawing; -using System.Drawing.Imaging; - -using TinyOPDS.Data; -using eBdb.EpubReader; - -namespace TinyOPDS.Parsers -{ - public class ePubParser : BookParser - { - /// - /// - /// - /// - /// - /// - public override Book Parse(Stream stream, string fileName) - { - Book book = new Book(fileName); - try - { - book.DocumentSize = (UInt32)stream.Length; - stream.Position = 0; - Epub epub = new Epub(stream); - book.ID = epub.UUID; - if (epub.Date != null && epub.Date.Count > 0) - { - try { book.BookDate = DateTime.Parse(epub.Date.First().Date); } - catch - { - int year; - if (int.TryParse(epub.Date.First().Date, out year)) book.BookDate = new DateTime(year, 1, 1); - } - } - book.Title = epub.Title[0]; - book.Authors = new List(); - book.Authors.AddRange(epub.Creator); - for (int i = 0; i < book.Authors.Count; i++) book.Authors[i] = book.Authors[i].Capitalize(); - book.Genres = LookupGenres(epub.Subject); - if (epub.Description != null && epub.Description.Count > 0) book.Annotation = epub.Description.First(); - if (epub.Language != null && epub.Language.Count > 0) book.Language = epub.Language.First(); - - // Lookup cover - if (epub.ExtendedData != null) - { - foreach (ExtendedData value in epub.ExtendedData.Values) - { - string s = value.FileName.ToLower(); - if (s.Contains(".jpeg") || s.Contains(".jpg") || s.Contains(".png")) - { - if (value.ID.ToLower().Contains("cover") || s.Contains("cover")) - { - book.HasCover = true; - break; - } - } - } - } - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, "exception {0}" , e.Message); - } - return book; - } - - /// - /// Epub's "subjects" are non-formal and extremely messy :( - /// This function will try to find a corresponding genres from the FB2 standard genres by using Soundex algorithm - /// - /// - /// - private List LookupGenres(List subjects) - { - List genres = new List(); - if (subjects == null || subjects.Count < 1) - { - genres.Add("prose"); - } - else - { - foreach (string subj in subjects) - { - var genre = Library.SoundexedGenres.Where(g => g.Key.StartsWith(subj.SoundexByWord()) && g.Key.WordsCount() <= subj.WordsCount()+1).FirstOrDefault(); - if (genre.Key != null) genres.Add(genre.Value); - } - if (genres.Count < 1) genres.Add("prose"); - } - return genres; - } - - /// - /// - /// - /// - /// - /// - public override Image GetCoverImage(Stream stream, string fileName) - { - Image image = null; - try - { - stream.Position = 0; - Epub epub = new Epub(stream); - if (epub.ExtendedData != null) - { - foreach (ExtendedData value in epub.ExtendedData.Values) - { - string s = value.FileName.ToLower(); - if (s.Contains(".jpeg") || s.Contains(".jpg") || s.Contains(".png")) - { - if (value.ID.ToLower().Contains("cover") || s.Contains("cover")) - { - using (MemoryStream memStream = new MemoryStream(value.GetContentAsBinary())) - { - image = Image.FromStream(memStream); - // Convert image to jpeg - string mimeType = value.MimeType.ToLower(); - ImageFormat fmt = mimeType.Contains("png") ? ImageFormat.Png : ImageFormat.Gif; - if (!mimeType.Contains("jpeg")) - { - image = Image.FromStream(image.ToStream(fmt)); - } - image = image.Resize(CoverImage.CoverSize); - } - break; - } - } - } - } - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, "GetCoverImage exception {0}", e.Message); - } - return image; - } - } -} diff --git a/releases/1.1/Parsers/fb2Parser.cs b/releases/1.1/Parsers/fb2Parser.cs deleted file mode 100644 index 83f91be..0000000 --- a/releases/1.1/Parsers/fb2Parser.cs +++ /dev/null @@ -1,246 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * FB2 parser implementation - * - ************************************************************/ - -using System; -using System.IO; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Linq; -using System.Drawing; -using System.Drawing.Imaging; - -using FB2Library; -using FB2Library.HeaderItems; -using FB2Library.Elements; -using TinyOPDS.Data; - -namespace TinyOPDS.Parsers -{ - public class FB2Parser : BookParser - { - /// - /// - /// - /// - /// - /// - public override Book Parse(Stream stream, string fileName) - { - XDocument xml = null; - Book book = new Book(fileName); - book.DocumentSize = (UInt32)stream.Length; - - try - { - FB2File fb2 = new FB2File(); - // Load header only - stream.Position = 0; - - // Project Mono has a bug: Xdocument.Load() can't detect encoding - string encoding = string.Empty; - if (Utils.IsLinux) - { - using (StreamReader sr = new StreamReader(stream)) - { - encoding = sr.ReadLine(); - int idx = encoding.ToLower().IndexOf("encoding=\""); - if (idx > 0) - { - encoding = encoding.Substring(idx + 10); - encoding = encoding.Substring(0, encoding.IndexOf('"')); - stream.Position = 0; - using (StreamReader esr = new StreamReader(stream, Encoding.GetEncoding(encoding))) - { - string xmlStr = esr.ReadToEnd(); - try - { - xml = XDocument.Parse(xmlStr, LoadOptions.PreserveWhitespace); - } - catch (Exception e) - { - if (e.Message.IndexOf("nbsp", StringComparison.InvariantCultureIgnoreCase) > 0) - { - xmlStr = xmlStr.Replace(" ", " ").Replace("&NBSP;", " "); - xml = XDocument.Parse(xmlStr, LoadOptions.PreserveWhitespace); - } - else if (e.Message.IndexOf("is an invalid character", StringComparison.InvariantCultureIgnoreCase) > 0) - { - xml = XDocument.Parse(this.SanitizeXmlString(xmlStr), LoadOptions.PreserveWhitespace); - } - else throw e; - } - } - } - } - } - - if (xml == null) - { - try - { - xml = XDocument.Load(stream); - } - // This code will try to improve xml loading - catch (Exception e) - { - stream.Position = 0; - if (e.Message.IndexOf("nbsp", StringComparison.InvariantCultureIgnoreCase) > 0) - { - using (StreamReader sr = new StreamReader(stream)) - { - string xmlStr = sr.ReadToEnd(); - xmlStr = xmlStr.Replace(" ", " ").Replace("&NBSP;", " "); - xml = XDocument.Parse(xmlStr, LoadOptions.PreserveWhitespace); - } - } - else if (e.Message.IndexOf("is an invalid character", StringComparison.InvariantCultureIgnoreCase) > 0) - { - using (StreamReader sr = new StreamReader(stream)) - { - string xmlStr = sr.ReadToEnd(); - xml = XDocument.Parse(this.SanitizeXmlString(xmlStr), LoadOptions.PreserveWhitespace); - } - } - else throw e; - } - } - - if (xml != null) - { - fb2.Load(xml, true); - - if (fb2.DocumentInfo != null) - { - book.ID = fb2.DocumentInfo.ID; - if (fb2.DocumentInfo.DocumentVersion != null) book.Version = (float)fb2.DocumentInfo.DocumentVersion; - if (fb2.DocumentInfo.DocumentDate != null) book.DocumentDate = fb2.DocumentInfo.DocumentDate.DateValue; - } - - if (fb2.TitleInfo != null) - { - if (fb2.TitleInfo.Cover != null && fb2.TitleInfo.Cover.HasImages()) book.HasCover = true; - if (fb2.TitleInfo.BookTitle != null) book.Title = fb2.TitleInfo.BookTitle.Text; - if (fb2.TitleInfo.Annotation != null) book.Annotation = fb2.TitleInfo.Annotation.ToString(); - if (fb2.TitleInfo.Sequences != null && fb2.TitleInfo.Sequences.Count > 0) - { - book.Sequence = fb2.TitleInfo.Sequences.First().Name.Capitalize(true); - if (fb2.TitleInfo.Sequences.First().Number != null) - { - book.NumberInSequence = (UInt32)(fb2.TitleInfo.Sequences.First().Number); - } - } - if (fb2.TitleInfo.Language != null) book.Language = fb2.TitleInfo.Language; - if (fb2.TitleInfo.BookDate != null) book.BookDate = fb2.TitleInfo.BookDate.DateValue; - if (fb2.TitleInfo.BookAuthors != null && fb2.TitleInfo.BookAuthors.Count() > 0) - { - book.Authors = new List(); - book.Authors.AddRange(from ba in fb2.TitleInfo.BookAuthors select string.Concat(ba.LastName, " ", ba.FirstName, " ", ba.MiddleName).Replace(" ", " ").Capitalize()); - } - if (fb2.TitleInfo.Translators != null && fb2.TitleInfo.Translators.Count() > 0) - { - book.Translators = new List(); - book.Translators.AddRange(from ba in fb2.TitleInfo.Translators select string.Concat(ba.LastName, " ", ba.FirstName, " ", ba.MiddleName).Replace(" ", " ").Capitalize()); - } - if (fb2.TitleInfo.Genres != null && fb2.TitleInfo.Genres.Count() > 0) - { - book.Genres = new List(); - book.Genres.AddRange((from g in fb2.TitleInfo.Genres select g.Genre).ToList()); - } - } - } - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, "Book.Parse() exception {0} on file: {1}", e.Message, fileName); - } - finally - { - // Dispose xml document - xml = null; - } - - return book; - } - - /// - /// - /// - /// - /// - public override Image GetCoverImage(Stream stream, string fileName) - { - Image image = null; - XDocument xml = null; - try - { - FB2File fb2 = new FB2File(); - stream.Position = 0; - xml = XDocument.Load(stream); - fb2.Load(xml, false); - - if (fb2.TitleInfo != null && fb2.TitleInfo.Cover != null && fb2.TitleInfo.Cover.HasImages() && fb2.Images.Count > 0) - { - string coverHRef = fb2.TitleInfo.Cover.CoverpageImages.First().HRef.Substring(1); - var binaryObject = fb2.Images.First(item => item.Value.Id == coverHRef); - if (binaryObject.Value.BinaryData != null && binaryObject.Value.BinaryData.Length > 0) - { - using (MemoryStream memStream = new MemoryStream(binaryObject.Value.BinaryData)) - { - image = Image.FromStream(memStream); - // Convert image to jpeg - ImageFormat fmt = binaryObject.Value.ContentType == ContentTypeEnum.ContentTypePng ? ImageFormat.Png : ImageFormat.Gif; - if (binaryObject.Value.ContentType != ContentTypeEnum.ContentTypeJpeg) - { - image = Image.FromStream(image.ToStream(fmt)); - } - image = image.Resize(CoverImage.CoverSize); - } - } - } - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, "Book.GetCoverImage() exception {0} on file: {1}", e.Message, fileName); - } - // Dispose xml document - xml = null; - return image; - } - - /// - /// Remove illegal XML characters from a string. - /// - public string SanitizeXmlString(string xml) - { - StringBuilder buffer = new StringBuilder(xml.Length); - foreach (char c in xml) if (IsLegalXmlChar(c)) buffer.Append(c); - return buffer.ToString(); - } - - /// - /// Whether a given character is allowed by XML 1.0. - /// - public bool IsLegalXmlChar(int character) - { - return - ( - character == 0x9 /* == '\t' == 9 */ || - character == 0xA /* == '\n' == 10 */ || - character == 0xD /* == '\r' == 13 */ || - (character >= 0x20 && character <= 0xD7FF) || - (character >= 0xE000 && character <= 0xFFFD) || - (character >= 0x10000 && character <= 0x10FFFF) - ); - } - } -} diff --git a/releases/1.1/ProcessHelper.cs b/releases/1.1/ProcessHelper.cs deleted file mode 100644 index 29c8b13..0000000 --- a/releases/1.1/ProcessHelper.cs +++ /dev/null @@ -1,157 +0,0 @@ -using System; -using System.Collections.ObjectModel; -using System.Linq; -using System.Text; -using System.ComponentModel; -using System.Windows; -using System.Threading; -using System.Diagnostics; - -namespace TinyOPDS -{ - /// - /// Helper for the external console apps execution in background (no visible window) - /// Stores process output to the observable collection (so, we can bind output to the ListBox) - /// - public class ProcessHelper : IDisposable - { - private bool disposed = false; - private Process process = new Process(); - private ObservableCollection output = new ObservableCollection(); - ProcessPriorityClass priority; - public AutoResetEvent WaitForOutput = new AutoResetEvent(false); - - /// - /// Default constructor - /// - /// - /// - /// - /// - public ProcessHelper(string CommandPath, string Arguments, bool ParseOutput = false, ProcessPriorityClass Priority = ProcessPriorityClass.Normal) - { - process.StartInfo.FileName = CommandPath; - process.StartInfo.Arguments = Arguments; - - DoParseOutput = ParseOutput; - - // set up output redirection - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.RedirectStandardError = true; - process.EnableRaisingEvents = true; - process.StartInfo.CreateNoWindow = true; - process.StartInfo.UseShellExecute = false; - priority = Priority; - // see below for output handler - process.ErrorDataReceived += proc_DataReceived; - process.OutputDataReceived += proc_DataReceived; - process.Exited += (__, ____) => - { - if (OnExited != null) - { - if (DoParseOutput) WaitForOutput.WaitOne(3000); - OnExited(this, new EventArgs()); - } - }; - } - - /// - /// Default destructor - /// - ~ProcessHelper() - { - Dispose(); - } - - protected virtual void Dispose(bool disposing) - { - if (!this.disposed && disposing) - { - if (!process.HasExited && IsRunning) process.Kill(); - disposed = true; - } - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - public bool DoParseOutput { set; get; } - - public virtual void ParseOutput(string outString) { } - - private void proc_DataReceived(object sender, DataReceivedEventArgs e) - { - if (e.Data != null) - { - output.Add(e.Data); - ParseOutput(e.Data); - } - } - - public void RunAsync() - { - BackgroundWorker worker = new BackgroundWorker(); - worker.DoWork += (_, __) => - { - try - { - if (process.Start()) - { - process.PriorityClass = priority; - process.BeginErrorReadLine(); - process.BeginOutputReadLine(); - _isRunning = true; - process.WaitForExit(); - } - } - catch(Exception e) - { - Debug.WriteLine("ProcessHelper exception: " + e.ToString()); - } - finally - { - _isRunning = false; - } - }; - worker.RunWorkerAsync(); - } - - /// - /// Raised on process completion - /// - public event EventHandler OnExited; - - /// - /// Process output to stdout - /// - public ObservableCollection ProcessOutput { get { return output; } } - - /// - /// Return current state of process - /// - bool _isRunning = false; - public bool IsRunning { get { return _isRunning; } } - - /// - /// Return status of the current process - /// - public bool IsCompleted { get { return IsRunning?process.HasExited:false; } } - - /// - /// Return process exit code - /// - public int ExitCode { get { return IsCompleted ? process.ExitCode : 0; } } - - /// - /// Associated process priority class - /// - public ProcessPriorityClass PriorityClass - { - get { return process.PriorityClass; } - set { process.PriorityClass = value; } - } - } -} diff --git a/releases/1.1/Program.cs b/releases/1.1/Program.cs deleted file mode 100644 index 96298c8..0000000 --- a/releases/1.1/Program.cs +++ /dev/null @@ -1,110 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * TinyOPDS application entry point - * - ************************************************************/ - -using System; -using System.IO; -using System.IO.Compression; -using System.Collections.Generic; -using System.Linq; -using System.Windows.Forms; -using System.Reflection; -using System.Threading; -using System.Diagnostics; - -namespace TinyOPDS -{ - static class Program - { - static Mutex mutex = new Mutex(false, "tiny_opds_mutex"); - - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main() - { - AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - - // Check for single instance - if (Utils.IsLinux) - { - if (IsApplicationRunningOnMono("TinyOPDS.exe")) return; - } - else - { - if (!mutex.WaitOne(TimeSpan.FromSeconds(1), false)) return; - } - - try - { - using (MainForm mainForm = new MainForm()) - { - mainForm.WindowState = (Properties.Settings.Default.StartMinimized) ? FormWindowState.Minimized : FormWindowState.Normal; - mainForm.ShowInTaskbar = (Properties.Settings.Default.StartMinimized && Properties.Settings.Default.CloseToTray) ? false : true; - Application.Run(mainForm); - } - } - finally - { - if (!Utils.IsLinux) mutex.ReleaseMutex(); - } - } - - static bool IsApplicationRunningOnMono(string processName) - { - var processFound = 0; - - Process[] monoProcesses; - ProcessModuleCollection processModuleCollection; - - // find all processes called 'mono', that's necessary because our app runs under the mono process! - monoProcesses = Process.GetProcessesByName("mono"); - - for (var i = 0; i <= monoProcesses.GetUpperBound(0); ++i) - { - processModuleCollection = monoProcesses[i].Modules; - - for (var j = 0; j < processModuleCollection.Count; ++j) - { - if (processModuleCollection[j].FileName.EndsWith(processName)) - { - processFound++; - } - } - } - - //we don't find the current process, but if there is already another one running, return true! - return (processFound == 1); - } - - static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) - { - Assembly asm = Assembly.GetExecutingAssembly(); - String resourceName = asm.GetName().Name + ".Libs." + new AssemblyName(args.Name).Name + ".dll.gz"; - using (var stream = asm.GetManifestResourceStream(resourceName)) - { - if (stream != null) - { - using (MemoryStream memStream = new MemoryStream()) - { - GZipStream decompress = new GZipStream(stream, CompressionMode.Decompress); - decompress.CopyTo(memStream); - return Assembly.Load(memStream.GetBuffer()); - } - } - else return null; - } - } - } -} diff --git a/releases/1.1/Properties/AssemblyInfo.cs b/releases/1.1/Properties/AssemblyInfo.cs deleted file mode 100644 index 7ce19c8..0000000 --- a/releases/1.1/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("TinyOPDS server")] -[assembly: AssemblyDescription("Standalone and small OPDS server for Windows")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("SeNSSoFT")] -[assembly: AssemblyProduct("TinyOPDS server")] -[assembly: AssemblyCopyright("Copyright © 2013, SeNSSoFT Ltd.")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("627a3331-e8e6-4085-8a68-64322d5d4c3e")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.1.0.0")] -[assembly: AssemblyFileVersion("1.1.0.0")] diff --git a/releases/1.1/Properties/Resources.Designer.cs b/releases/1.1/Properties/Resources.Designer.cs deleted file mode 100644 index 27ac690..0000000 --- a/releases/1.1/Properties/Resources.Designer.cs +++ /dev/null @@ -1,91 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.586 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace TinyOPDS.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [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 { - - 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() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TinyOPDS.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - internal static System.Drawing.Bitmap donate { - get { - object obj = ResourceManager.GetObject("donate", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap folder { - get { - object obj = ResourceManager.GetObject("folder", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Bitmap TinyOPDS { - get { - object obj = ResourceManager.GetObject("TinyOPDS", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Icon trayIcon { - get { - object obj = ResourceManager.GetObject("trayIcon", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - } -} diff --git a/releases/1.1/Properties/Resources.resx b/releases/1.1/Properties/Resources.resx deleted file mode 100644 index 89d56a5..0000000 --- a/releases/1.1/Properties/Resources.resx +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\TinyOPDS.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Icons\folder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\donate.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\TinyOPDS.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file diff --git a/releases/1.1/Properties/Settings.Designer.cs b/releases/1.1/Properties/Settings.Designer.cs deleted file mode 100644 index 0242218..0000000 --- a/releases/1.1/Properties/Settings.Designer.cs +++ /dev/null @@ -1,315 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18046 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace TinyOPDS.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] - [System.Configuration.SettingsProvider(typeof(TinyOPDS.CustomSettingsProvider))] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string LibraryPath { - get { - return ((string)(this["LibraryPath"])); - } - set { - this["LibraryPath"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("Моя домашняя библиотека")] - public string ServerName { - get { - return ((string)(this["ServerName"])); - } - set { - this["ServerName"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("8080")] - public string ServerPort { - get { - return ((string)(this["ServerPort"])); - } - set { - this["ServerPort"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool StartWithWindows { - get { - return ((bool)(this["StartWithWindows"])); - } - set { - this["StartWithWindows"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool StartMinimized { - get { - return ((bool)(this["StartMinimized"])); - } - set { - this["StartMinimized"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool CloseToTray { - get { - return ((bool)(this["CloseToTray"])); - } - set { - this["CloseToTray"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string ConvertorPath { - get { - return ((string)(this["ConvertorPath"])); - } - set { - this["ConvertorPath"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("en")] - public string Language { - get { - return ((string)(this["Language"])); - } - set { - this["Language"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool OpenNATPort { - get { - return ((bool)(this["OpenNATPort"])); - } - set { - this["OpenNATPort"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string ServiceFilesPath { - get { - return ((string)(this["ServiceFilesPath"])); - } - set { - this["ServiceFilesPath"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool SaveLogToDisk { - get { - return ((bool)(this["SaveLogToDisk"])); - } - set { - this["SaveLogToDisk"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string RootPrefix { - get { - return ((string)(this["RootPrefix"])); - } - set { - this["RootPrefix"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool WatchLibrary { - get { - return ((bool)(this["WatchLibrary"])); - } - set { - this["WatchLibrary"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("True")] - public bool UseUPnP { - get { - return ((bool)(this["UseUPnP"])); - } - set { - this["UseUPnP"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool UseHTTPAuth { - get { - return ((bool)(this["UseHTTPAuth"])); - } - set { - this["UseHTTPAuth"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string Credentials { - get { - return ((string)(this["Credentials"])); - } - set { - this["Credentials"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool BanClients { - get { - return ((bool)(this["BanClients"])); - } - set { - this["BanClients"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("0")] - public int LogLevel { - get { - return ((int)(this["LogLevel"])); - } - set { - this["LogLevel"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool RememberClients { - get { - return ((bool)(this["RememberClients"])); - } - set { - this["RememberClients"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("1")] - public int UpdatesCheck { - get { - return ((int)(this["UpdatesCheck"])); - } - set { - this["UpdatesCheck"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("2013-01-01")] - public global::System.DateTime LastCheck { - get { - return ((global::System.DateTime)(this["LastCheck"])); - } - set { - this["LastCheck"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("5")] - public decimal WrongAttemptsCount { - get { - return ((decimal)(this["WrongAttemptsCount"])); - } - set { - this["WrongAttemptsCount"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("0")] - public int LocalInterfaceIndex { - get { - return ((int)(this["LocalInterfaceIndex"])); - } - set { - this["LocalInterfaceIndex"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool UseAbsoluteUri { - get { - return ((bool)(this["UseAbsoluteUri"])); - } - set { - this["UseAbsoluteUri"] = value; - } - } - } -} diff --git a/releases/1.1/Properties/Settings.settings b/releases/1.1/Properties/Settings.settings deleted file mode 100644 index a162b81..0000000 --- a/releases/1.1/Properties/Settings.settings +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - Моя домашняя библиотека - - - 8080 - - - False - - - False - - - False - - - - - - en - - - False - - - - - - False - - - - - - False - - - True - - - False - - - - - - False - - - 0 - - - False - - - 1 - - - 2013-01-01 - - - 5 - - - 0 - - - False - - - \ No newline at end of file diff --git a/releases/1.1/Properties/app.manifest b/releases/1.1/Properties/app.manifest deleted file mode 100644 index 8df6208..0000000 --- a/releases/1.1/Properties/app.manifest +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/releases/1.1/Resources/..svnbridge/trayIcon.ico b/releases/1.1/Resources/..svnbridge/trayIcon.ico deleted file mode 100644 index 81efb3c..0000000 --- a/releases/1.1/Resources/..svnbridge/trayIcon.ico +++ /dev/null @@ -1 +0,0 @@ -svn:mime-typeapplication/octet-stream \ No newline at end of file diff --git a/releases/1.1/Resources/trayIcon.ico b/releases/1.1/Resources/trayIcon.ico deleted file mode 100644 index f1282c694b1641c6a5ab3bf2413cf56ba49a1824..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1078 zcmds#J#ND=427SQ03PET#8Z%4v?u6Ux>=jGIh(KKqh!nt;!XXi9|T4-#6i%ZG#@EG zS`_>&snSMG)5z>pNk?+qruw>(zTi%9#NWY}r$TebT9A{3j?nc{F@% z9#QC^OH4$T>vUp!v^wgO15AyYbN2Zi^{@G^SV;4S;ha3zrR|>U|C{+-riI@9Y|Q BookFoundEventHandlers() { return from d in OnBookFound.GetInvocationList() select (BookFoundEventHandler)d; } - - public event InvalidBookEventHandler OnInvalidBook; - private IEnumerable InvalidBookEventHandlers() { return from d in OnInvalidBook.GetInvocationList() select (InvalidBookEventHandler)d; } - - public event FileSkippedEventHandler OnFileSkipped; - private IEnumerable FileSkippedEventHandlers() { return from d in OnFileSkipped.GetInvocationList() select (FileSkippedEventHandler)d; } - - public event ScanCompletedEventHandler OnScanCompleted; - private IEnumerable ScanCompletedEventHandlers() { return from d in OnScanCompleted.GetInvocationList() select (ScanCompletedEventHandler)d; } - - private ZipScanner _zipScanner = null; - private bool _isRecursive; - - public FileScanner(bool IsRecursive = true) - { - Status = FileScannerStatus.STOPPED; - _isRecursive = IsRecursive; - } - - public void Stop() - { - Status = FileScannerStatus.STOPPED; - if (_zipScanner != null) _zipScanner.Status = FileScannerStatus.STOPPED; - - if (OnBookFound != null) OnBookFound -= BookFoundEventHandlers().Last(); - if (OnInvalidBook != null) OnInvalidBook -= InvalidBookEventHandlers().Last(); - if (OnFileSkipped != null) OnFileSkipped -= FileSkippedEventHandlers().Last(); - if (OnScanCompleted != null) OnScanCompleted -= ScanCompletedEventHandlers().Last(); - } - - /// - /// - /// - /// - public void Start(string Path) - { - SkippedFiles = 0; - - BackgroundWorker scanner = new BackgroundWorker(); - scanner.DoWork += (__, ___) => - { - ScanDirectory(new DirectoryInfo(Path)); - Status = FileScannerStatus.STOPPED; - if (OnScanCompleted != null) OnScanCompleted(this, new EventArgs()); - }; - Status = FileScannerStatus.SCANNING; - scanner.RunWorkerAsync(); - } - - /// - /// - /// - /// - /// - private void ScanDirectory(DirectoryInfo directory) - { - foreach (FileInfo file in directory.GetFiles()) - { - if (!Utils.IsLinux && Status == FileScannerStatus.STOPPED) break; - ScanFile(file.FullName); - } - - // Recursively scan all subdirectories - DirectoryInfo[] subDirectories = directory.GetDirectories(); - if (_isRecursive) - foreach (DirectoryInfo subDirectory in subDirectories) - if (Status == FileScannerStatus.SCANNING) - ScanDirectory(subDirectory); - } - - /// - /// - /// - /// - public void ScanFile(string fullName) - { - Book book = null; - string ext = Path.GetExtension(fullName).ToLower(); - - // Process accepted files - try - { - if (Library.Contains(fullName.Substring(Library.LibraryPath.Length + 1))) - { - SkippedFiles++; - if (OnFileSkipped != null) OnFileSkipped(this, new FileSkippedEventArgs(SkippedFiles)); - } - else if (ext.Contains(".epub")) - { - book = new ePubParser().Parse(fullName); - } - else if (ext.Contains(".fb2")) - { - book = new FB2Parser().Parse(fullName); - } - else if (ext.Contains(".zip")) - { - _zipScanner = new ZipScanner(fullName); - _zipScanner.OnBookFound += (object sender, BookFoundEventArgs e) => { if (OnBookFound != null) OnBookFound(sender, e); }; - _zipScanner.OnInvalidBook += (object sender, InvalidBookEventArgs e) => { if (OnInvalidBook != null) OnInvalidBook(sender, e); }; - _zipScanner.OnFileSkipped += (object sender, FileSkippedEventArgs e) => - { - SkippedFiles++; - if (OnFileSkipped != null) OnFileSkipped(sender, new FileSkippedEventArgs(SkippedFiles)); - }; - _zipScanner.Scan(); - } - - // Inform caller - if (book != null) - { - if (book.IsValid && OnBookFound != null) OnBookFound(this, new BookFoundEventArgs(book)); - else if (!book.IsValid && OnInvalidBook != null) OnInvalidBook(this, new InvalidBookEventArgs(fullName)); - } - - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, ".ScanFile: exception {0} on file: {1}", e.Message, fullName); - if (OnInvalidBook != null) OnInvalidBook(this, new InvalidBookEventArgs(fullName)); - } - } - } -} diff --git a/releases/1.1/Scanner/ScannerEvents.cs b/releases/1.1/Scanner/ScannerEvents.cs deleted file mode 100644 index 57a4c79..0000000 --- a/releases/1.1/Scanner/ScannerEvents.cs +++ /dev/null @@ -1,62 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * Events and handlers classes for scanners - * - ************************************************************/ - -using System; -using TinyOPDS.Data; - -namespace TinyOPDS.Scanner -{ - /// - /// Scanner delegated events and arguments declarations - /// - - public class BookFoundEventArgs : EventArgs - { - public Book Book; - public BookFoundEventArgs(Book book) { Book = book; } - } - - public class InvalidBookEventArgs : EventArgs - { - public string BookName; - public InvalidBookEventArgs(string bookName) { BookName = bookName; } - } - - public class FileSkippedEventArgs : EventArgs - { - public int Count; - public FileSkippedEventArgs(int count) { Count = count; } - } - - public class BookAddedEventArgs : EventArgs - { - public string BookPath; - public BookType BookType; - public BookAddedEventArgs(string bookPath) - { - BookPath = bookPath; - BookType = BookPath.ToLower().Contains(".epub") ? BookType.EPUB : BookType.FB2; - } - } - - public class BookDeletedEventArgs : BookAddedEventArgs - { - public BookDeletedEventArgs(string bookPath) : base(bookPath) {} - } - - public delegate void BookFoundEventHandler(object sender, BookFoundEventArgs e); - public delegate void InvalidBookEventHandler(object sender, InvalidBookEventArgs e); - public delegate void FileSkippedEventHandler(object sender, FileSkippedEventArgs e); - public delegate void ScanCompletedEventHandler(object sender, EventArgs e); - public delegate void BookAddedEventHandler(object sender, BookAddedEventArgs e); - public delegate void BookDeletedEventHandler(object sender, BookDeletedEventArgs e); -} diff --git a/releases/1.1/Scanner/Watcher.cs b/releases/1.1/Scanner/Watcher.cs deleted file mode 100644 index 626b9df..0000000 --- a/releases/1.1/Scanner/Watcher.cs +++ /dev/null @@ -1,235 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This is a file watcher class - * - * TODO: should disable UI "scan" button during Watcher's - * operations - * - ************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.IO; -using System.Threading; -using System.ComponentModel; -using System.Security.Permissions; - -using TinyOPDS.Data; - -namespace TinyOPDS.Scanner -{ - public class Watcher : IDisposable - { - private FileSystemWatcher _fileWatcher; - private bool _disposed = false; - - private List _addedBooks = new List(); - private List _deletedBooks = new List(); - private BackgroundWorker _booksManager; - private FileScanner _scanner; - - public event BookAddedEventHandler OnBookAdded; - public event BookDeletedEventHandler OnBookDeleted; - public event InvalidBookEventHandler OnInvalidBook; - public event FileSkippedEventHandler OnFileSkipped; - - [PermissionSetAttribute(SecurityAction.LinkDemand, Unrestricted = true)] - public Watcher(string path = "") - { - DirectoryToWatch = path; - _booksManager = new BackgroundWorker(); - _booksManager.DoWork += _booksManager_DoWork; - _scanner = new FileScanner(false); - _scanner.OnBookFound += (object s, BookFoundEventArgs be) => - { - if (Library.Add(be.Book)) - { - //Library.Append(be.Book); - if (OnBookAdded != null) OnBookAdded(this, new BookAddedEventArgs(be.Book.FileName)); - } - }; - _scanner.OnInvalidBook += (object _sender, InvalidBookEventArgs _e) => { if (OnInvalidBook != null) OnInvalidBook(_sender, _e); }; - _scanner.OnFileSkipped += (object _sender, FileSkippedEventArgs _e) => { if (OnFileSkipped != null) OnFileSkipped(_sender, _e); }; - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - // Check to see if Dispose has already been called. - if (!this._disposed) - { - if (disposing) - { - if (_booksManager != null) - { - _isEnabled = false; - _booksManager.Dispose(); - } - if (_fileWatcher != null) _fileWatcher.Dispose(); - } - _disposed = true; - } - } - - public string DirectoryToWatch - { - [PermissionSetAttribute(SecurityAction.LinkDemand, Unrestricted=true)] - get - { - return (_fileWatcher == null) ? string.Empty : _fileWatcher.Path; - } - - [PermissionSetAttribute(SecurityAction.LinkDemand, Unrestricted = true)] - set - { - if (!string.IsNullOrEmpty(value) && Directory.Exists(value)) - { - if (_fileWatcher != null) - { - _fileWatcher.Created -= _fileWatcher_Created; - _fileWatcher.Deleted -= _fileWatcher_Deleted; - _fileWatcher.Renamed -= _fileWatcher_Renamed; - _fileWatcher.Dispose(); - } - _fileWatcher = new FileSystemWatcher(value, "*"); - _fileWatcher.InternalBufferSize = 1024 * 64; - _fileWatcher.Created += new FileSystemEventHandler(_fileWatcher_Created); - _fileWatcher.Deleted += new FileSystemEventHandler(_fileWatcher_Deleted); - _fileWatcher.Renamed += new RenamedEventHandler(_fileWatcher_Renamed); - _fileWatcher.IncludeSubdirectories = true; - _fileWatcher.EnableRaisingEvents = _isEnabled; - } - } - } - - private bool _isEnabled = false; - public bool IsEnabled - { - get { return _isEnabled; } - set - { - if (_fileWatcher != null) - { - _fileWatcher.EnableRaisingEvents = _isEnabled = value; - if (_isEnabled) _booksManager.RunWorkerAsync(); - else - { - _addedBooks.Clear(); - _deletedBooks.Clear(); - } - } - } - } - - /// - /// Book manager thread - /// - /// - /// - void _booksManager_DoWork(object sender, DoWorkEventArgs e) - { - string fileName = string.Empty; - while (_isEnabled && !_disposed) - { - // First, check added books - if (_addedBooks.Count > 0) - { - fileName = _addedBooks.First(); - // If book scheduled for deletion, do not add it - if (_deletedBooks.Contains(fileName)) - { - _deletedBooks.Remove(fileName); - _addedBooks.Remove(fileName); - } - else - { - if (!IsFileInUse(fileName)) - { - _scanner.ScanFile(fileName); - _addedBooks.Remove(fileName); - } - else - { - _addedBooks.Remove(fileName); - _addedBooks.Add(fileName); - } - } - } - // Delete book from library (we don't care about actual file existence) - else if (_deletedBooks.Count > 0) - { - fileName = _deletedBooks.First(); - if (Library.Delete(fileName)) - { - if (OnBookDeleted != null) OnBookDeleted(this, new BookDeletedEventArgs(fileName)); - } - _deletedBooks.Remove(fileName); - } - // Get some rest for UI - else - { - Thread.Sleep(100); - } - } - } - - /// - /// New file (book or zip archive) added to the library - /// - /// - /// - private void _fileWatcher_Created(object sender, FileSystemEventArgs e) - { - lock (_addedBooks) _addedBooks.Add(e.FullPath); - } - - /// - /// Library file (book or zip archive) is renamed - /// - /// - /// - private void _fileWatcher_Renamed(object sender, RenamedEventArgs e) - { - lock (_deletedBooks) _deletedBooks.Add(e.FullPath); - } - - /// - /// Library file (book or zip archive) deleted from the library - /// - /// - /// - private void _fileWatcher_Deleted(object sender, FileSystemEventArgs e) - { - lock (_deletedBooks) _deletedBooks.Add(e.FullPath); - } - - - private bool IsFileInUse(string path) - { - if (string.IsNullOrEmpty(path)) throw new ArgumentException("'path' cannot be null or empty.", "path"); - - try - { - using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read)) { } - } - catch (IOException) - { - return true; - } - return false; - } - } -} diff --git a/releases/1.1/Scanner/ZipScanner.cs b/releases/1.1/Scanner/ZipScanner.cs deleted file mode 100644 index 5bd11a6..0000000 --- a/releases/1.1/Scanner/ZipScanner.cs +++ /dev/null @@ -1,139 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module defines the ZipScanner class (FileScanner analog - * for zip archives) - * - ************************************************************/ - -using System; -using System.IO; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using System.Xml; -using System.Xml.Linq; -using System.Text; -using System.ComponentModel; -using System.Threading; - -using Ionic.Zip; -using TinyOPDS.Data; -using TinyOPDS.Parsers; - -namespace TinyOPDS.Scanner -{ - public class ZipScanner - { - public string ZipFileName { get; set; } - public FileScannerStatus Status { get; set; } - public int SkippedFiles { get; set; } - - public event BookFoundEventHandler OnBookFound; - private IEnumerable BookFoundEventHandlers() { return from d in OnBookFound.GetInvocationList() select (BookFoundEventHandler)d; } - - public event InvalidBookEventHandler OnInvalidBook; - private IEnumerable InvalidBookEventHandlers() { return from d in OnInvalidBook.GetInvocationList() select (InvalidBookEventHandler)d; } - - public event FileSkippedEventHandler OnFileSkipped; - private IEnumerable FileSkippedEventHandlers() { return from d in OnFileSkipped.GetInvocationList() select (FileSkippedEventHandler)d; } - - public ZipScanner(string zipFileName) - { - ZipFileName = zipFileName; - Status = FileScannerStatus.STOPPED; - SkippedFiles = 0; - } - - public void Stop() - { - Status = FileScannerStatus.STOPPED; - if (OnBookFound != null) OnBookFound -= BookFoundEventHandlers().Last(); - if (OnFileSkipped != null) OnFileSkipped -= FileSkippedEventHandlers().Last(); - } - - /// - /// Scan zip file - /// - public void Scan() - { - Status = FileScannerStatus.SCANNING; - ZipFile zipFile = null; - string entryFileName = string.Empty; - MemoryStream memStream = null; - - try - { - zipFile = new ZipFile(ZipFileName); - - foreach (ZipEntry entry in zipFile.Entries) - { - if (Status != FileScannerStatus.SCANNING) break; - - if (!string.IsNullOrEmpty(entry.FileName)) - { - entryFileName = entry.FileName; - - // Process accepted files - try - { - Book book = null; - memStream = new MemoryStream(); - - string ext = Path.GetExtension(entry.FileName).ToLower(); - - if (Library.Contains(ZipFileName.Substring(Library.LibraryPath.Length+1) + "@" + entryFileName)) - { - SkippedFiles++; - if (OnFileSkipped != null) OnFileSkipped(this, new FileSkippedEventArgs(SkippedFiles)); - } - else if (ext.Contains(".epub")) - { - entry.Extract(memStream); - book = new ePubParser().Parse(memStream, ZipFileName + "@" + entryFileName); - } - else if (ext.Contains(".fb2")) - { - entry.Extract(memStream); - book = new FB2Parser().Parse(memStream, ZipFileName + "@" + entryFileName); - } - - if (book != null) - { - if (book.IsValid && OnBookFound != null) { OnBookFound(this, new BookFoundEventArgs(book)); } - else if (!book.IsValid && OnInvalidBook != null) OnInvalidBook(this, new InvalidBookEventArgs(ZipFileName + "@" + entryFileName)); - } - - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, ".ScanDirectory: exception {0} on file: {1}", e.Message, ZipFileName + "@" + entryFileName); - if (OnInvalidBook != null) OnInvalidBook(this, new InvalidBookEventArgs(ZipFileName + "@" + entryFileName)); - } - finally - { - if (memStream != null) - { - memStream.Dispose(); - memStream = null; - } - } - } - } - } - finally - { - if (zipFile != null) - { - zipFile.Dispose(); - zipFile = null; - } - } - } - } -} diff --git a/releases/1.1/Server/HttpServer.cs b/releases/1.1/Server/HttpServer.cs deleted file mode 100644 index 4b011bb..0000000 --- a/releases/1.1/Server/HttpServer.cs +++ /dev/null @@ -1,533 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module contains simple HTTP processor implementation - * and abstract class for HTTP server - * Also, couple additional service classes are specified - * - * - ************************************************************/ - -using System; -using System.Linq; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Net; -using System.Net.Sockets; -using System.Threading; -using System.ComponentModel; - -namespace TinyOPDS.Server -{ - /// - /// Basic credentials (unencrypted) - /// - public class Credential - { - public string User { get; set; } - public string Password { get; set; } - public Credential(string user, string password) { User = user; Password = password; } - } - - /// - /// Simple HTTP processor - /// - public class HttpProcessor : IDisposable - { - public TcpClient Socket; - public HttpServer Server; - - private Stream _inputStream; - public StreamWriter OutputStream; - - public String HttpMethod; - public String HttpUrl; - public String HttpProtocolVersion; - public Hashtable HttpHeaders = new Hashtable(); - - public static BindingList Credentials = new BindingList(); - public static List AuthorizedClients = new List(); - public static Dictionary BannedClients = new Dictionary(); - - // Maximum post size, 1 Mb - private const int MAX_POST_SIZE = 1024 * 1024; - - // Output buffer size, 64 Kb max - private const int OUTPUT_BUFFER_SIZE = 1024 * 1024; - - private bool _disposed = false; - - public HttpProcessor(TcpClient socket, HttpServer server) - { - this.Socket = socket; - this.Server = server; - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - // Check to see if Dispose has already been called. - - if (!this._disposed) - { - if (disposing) - { - if (OutputStream != null) OutputStream.Dispose(); - if (_inputStream != null) _inputStream.Dispose(); - } - _disposed = true; - } - } - - private string StreamReadLine(Stream inputStream) - { - int next_char = -1; - string data = string.Empty; - if (inputStream.CanRead) - { - while (true) - { - try { next_char = inputStream.ReadByte(); } catch { break; } - if (next_char == '\n') { break; } - if (next_char == '\r') { continue; } - if (next_char == -1) { Thread.Sleep(10); continue; }; - data += Convert.ToChar(next_char); - } - } - return data; - } - - public void Process(object param) - { - // We can't use a StreamReader for input, because it buffers up extra data on us inside it's - // "processed" view of the world, and we want the data raw after the headers - _inputStream = new BufferedStream(Socket.GetStream()); - - if (ParseRequest()) - { - // We probably shouldn't be using a StreamWriter for all output from handlers either - OutputStream = new StreamWriter(new BufferedStream(Socket.GetStream(), OUTPUT_BUFFER_SIZE)); - OutputStream.AutoFlush = true; - - try - { - ReadHeaders(); - - bool authorized = true; - bool checkLogin = true; - - // Compute client hash string based on User-Agent + IP address - string clientHash = string.Empty; - if (HttpHeaders.ContainsKey("User-Agent")) clientHash += HttpHeaders["User-Agent"]; - string remoteIP = (Socket.Client.RemoteEndPoint as IPEndPoint).Address.ToString(); - clientHash += remoteIP; - clientHash = Utils.CreateGuid(Utils.IsoOidNamespace, clientHash).ToString(); - - if (Properties.Settings.Default.UseHTTPAuth) - { - authorized = false; - - // Is remote IP banned? - if (Properties.Settings.Default.BanClients) - { - if (BannedClients.ContainsKey(remoteIP) && BannedClients[remoteIP] >= Properties.Settings.Default.WrongAttemptsCount) - { - checkLogin = false; - } - } - - if (checkLogin) - { - // First, check authorized client list (if enabled) - if (Properties.Settings.Default.RememberClients) - { - if (AuthorizedClients.Contains(clientHash)) - { - authorized = true; - } - } - - if (!authorized && HttpHeaders.ContainsKey("Authorization")) - { - string hash = HttpHeaders["Authorization"].ToString(); - if (hash.StartsWith("Basic ")) - { - try - { - string[] credential = hash.Substring(6).DecodeFromBase64().Split(':'); - if (credential.Length == 2) - { - foreach (Credential cred in Credentials) - if (cred.User.Equals(credential[0])) - { - authorized = cred.Password.Equals(credential[1]); - if (authorized) - { - AuthorizedClients.Add(clientHash); - HttpServer.ServerStatistics.SuccessfulLoginAttempts++; - } - break; - } - if (!authorized) - Log.WriteLine(LogLevel.Warning, "Authentication failed! IP: {0} user: {1} pass: {2}", remoteIP, credential[0], credential[1]); - } - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, "Authentication exception: IP: {0}, {1}", remoteIP, e.Message); - } - } - } - } - } - - if (authorized) - { - HttpServer.ServerStatistics.AddClient(clientHash); - - if (HttpMethod.Equals("GET")) - { - HttpServer.ServerStatistics.GetRequests++; - HandleGETRequest(); - } - else if (HttpMethod.Equals("POST")) - { - HttpServer.ServerStatistics.PostRequests++; - HandlePOSTRequest(); - } - } - else - { - if (Properties.Settings.Default.BanClients) - { - if (!BannedClients.ContainsKey(remoteIP)) BannedClients[remoteIP] = 0; - BannedClients[remoteIP]++; - if (!checkLogin) - { - Log.WriteLine(LogLevel.Warning, "IP address {0} is banned!", remoteIP); - WriteForbidden(); - } - } - if (checkLogin) - { - HttpServer.ServerStatistics.WrongLoginAttempts++; - WriteNotAuthorized(); - } - } - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, ".Process(object param) exception: {0}", e.Message); - WriteFailure(); - } - } - - try - { - if (OutputStream != null && OutputStream.BaseStream.CanWrite) - { - try - { - OutputStream.Flush(); - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, ".Process(object param): outputStream.Flush() exception: {0}", e.Message); - } - } - } - finally - { - Socket.Close(); - _inputStream = null; - OutputStream = null; - Socket = null; - } - } - - public bool ParseRequest() - { - String request = StreamReadLine(_inputStream); - if (string.IsNullOrEmpty(request)) return false; - string[] tokens = request.Split(' '); - if (tokens.Length != 3) return false; - HttpMethod = tokens[0].ToUpper(); - HttpUrl = tokens[1]; - HttpProtocolVersion = tokens[2]; - return true; - } - - public void ReadHeaders() - { - string line = string.Empty; - while ((line = StreamReadLine(_inputStream)) != null) - { - if (string.IsNullOrEmpty(line)) return; - - int separator = line.IndexOf(':'); - if (separator == -1) - { - throw new Exception("ReadHeaders(): invalid HTTP header line: " + line); - } - String name = line.Substring(0, separator); - int pos = separator + 1; - // strip spaces - while ((pos < line.Length) && (line[pos] == ' ')) pos++; - - string value = line.Substring(pos, line.Length - pos); - HttpHeaders[name] = value; - } - } - - public void HandleGETRequest() - { - Server.HandleGETRequest(this); - } - - private const int BUF_SIZE = 1024; - public void HandlePOSTRequest() - { - int content_len = 0; - MemoryStream memStream = null; - - try - { - memStream = new MemoryStream(); - if (this.HttpHeaders.ContainsKey("Content-Length")) - { - content_len = Convert.ToInt32(this.HttpHeaders["Content-Length"]); - if (content_len > MAX_POST_SIZE) - { - throw new Exception(String.Format("POST Content-Length({0}) too big for this simple server", content_len)); - } - byte[] buf = new byte[BUF_SIZE]; - int to_read = content_len; - while (to_read > 0) - { - int numread = this._inputStream.Read(buf, 0, Math.Min(BUF_SIZE, to_read)); - if (numread == 0) - { - if (to_read == 0) break; - else throw new Exception("Client disconnected during post"); - } - to_read -= numread; - memStream.Write(buf, 0, numread); - } - memStream.Seek(0, SeekOrigin.Begin); - } - using (StreamReader reader = new StreamReader(memStream)) - { - memStream = null; - Server.HandlePOSTRequest(this, reader); - } - } - finally - { - if (memStream != null) memStream.Dispose(); - } - } - - public void WriteSuccess(string contentType = "text/xml", bool isGZip = false) - { - try - { - OutputStream.Write("HTTP/1.1 200 OK\n"); - OutputStream.Write("Content-Type: " + contentType + "\n"); - if (isGZip) OutputStream.Write("Content-Encoding: gzip\n"); - OutputStream.Write("Connection: close\n\n"); - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, ".WriteSuccess() exception: {0}", e.Message); - } - } - - public void WriteFailure() - { - try - { - OutputStream.Write("HTTP/1.1 404 Bad request\n"); - OutputStream.Write("Connection: close\n\n"); - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, ".WriteFailure() exception: {0}", e.Message); - } - } - - public void WriteNotAuthorized() - { - try - { - OutputStream.Write("HTTP/1.1 401 Unauthorized\n"); - OutputStream.Write("WWW-Authenticate: Basic realm=TinyOPDS\n"); - OutputStream.Write("Connection: close\n\n"); - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, ".WriteNotAuthorized() exception: {0}", e.Message); - } - } - - public void WriteForbidden() - { - try - { - OutputStream.Write("HTTP/1.1 403 Forbidden\n"); - OutputStream.Write("Connection: close\n\n"); - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, ".WriteForbidden() exception: {0}", e.Message); - } - } - } - - /// - /// Server statistics class - /// - public class Statistics - { - public event EventHandler StatisticsUpdated; - private int _booksSent = 0; - private int _imagesSent = 0; - private int _getRequests = 0; - private int _postRequests = 0; - private int _successfulLoginAttempts = 0; - private int _wrongLoginAttempts = 0; - public int BooksSent { get { return _booksSent; } set { _booksSent = value; if (StatisticsUpdated != null) StatisticsUpdated(this, null); } } - public int ImagesSent { get { return _imagesSent; } set { _imagesSent = value; if (StatisticsUpdated != null) StatisticsUpdated(this, null); } } - public int GetRequests { get { return _getRequests; } set { _getRequests = value; if (StatisticsUpdated != null) StatisticsUpdated(this, null); } } - public int PostRequests { get { return _postRequests; } set { _postRequests = value; if (StatisticsUpdated != null) StatisticsUpdated(this, null); } } - public int SuccessfulLoginAttempts { get { return _successfulLoginAttempts; } set { _successfulLoginAttempts = value; if (StatisticsUpdated != null) StatisticsUpdated(this, null); } } - public int WrongLoginAttempts { get { return _wrongLoginAttempts; } set { _wrongLoginAttempts = value; if (StatisticsUpdated != null) StatisticsUpdated(this, null); } } - public int UniqueClientsCount { get { return _uniqueClients.Count; } } - public int BannedClientsCount { get { return HttpProcessor.BannedClients.Count(сlient => сlient.Value >= Properties.Settings.Default.WrongAttemptsCount); } } - public void AddClient(string newClient) { _uniqueClients[newClient] = true; } - private Dictionary _uniqueClients = new Dictionary(); - public void Clear() - { - _booksSent = _imagesSent = _getRequests = _postRequests = _successfulLoginAttempts = _wrongLoginAttempts = 0; - _uniqueClients.Clear(); - if (StatisticsUpdated != null) StatisticsUpdated(this, null); - } - } - - /// - /// Simple HTTP server - /// - public abstract class HttpServer - { - protected int _port; - protected int _timeout; - protected IPAddress _interfaceIP = IPAddress.Any; - TcpListener _listener; - internal bool _isActive = false; - public bool IsActive { get { return _isActive; } } - public Exception ServerException = null; - public AutoResetEvent ServerReady = null; - public static Statistics ServerStatistics = new Statistics(); - - public HttpServer(int Port, int Timeout = 10000) - { - _port = Port; - _timeout = Timeout; - ServerReady = new AutoResetEvent(false); - ServerStatistics.Clear(); - } - - public HttpServer(IPAddress InterfaceIP, int Port, int Timeout = 10000) - { - _interfaceIP = InterfaceIP; - _port = Port; - _timeout = Timeout; - ServerReady = new AutoResetEvent(false); - ServerStatistics.Clear(); - } - - ~HttpServer() - { - StopServer(); - } - - public virtual void StopServer() - { - _isActive = false; - if (_listener != null) - { - _listener.Stop(); - _listener = null; - } - if (ServerReady != null) - { - ServerReady.Dispose(); - ServerReady = null; - } - } - - /// - /// Server listener - /// - public void Listen() - { - HttpProcessor processor = null; - ServerException = null; - try - { - _listener = new TcpListener(_interfaceIP, _port); - _listener.Start(); - _isActive = true; - ServerReady.Set(); - while (_isActive) - { - if (_listener.Pending()) - { - TcpClient socket = _listener.AcceptTcpClient(); - socket.SendTimeout = socket.ReceiveTimeout = _timeout; - socket.SendBufferSize = 1024 * 1024; - socket.NoDelay = true; - processor = new HttpProcessor(socket, this); - ThreadPool.QueueUserWorkItem(new WaitCallback(processor.Process)); - } - else Thread.Sleep(10); - } - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, ".Listen() exception: {0}", e.Message); - ServerException = e; - _isActive = false; - ServerReady.Set(); - } - finally - { - if (processor != null) processor.Dispose(); - _isActive = false; - } - } - - /// - /// Abstract method to handle GET request - /// - /// - public abstract void HandleGETRequest(HttpProcessor processor); - - /// - /// Abstract method to handle POST request - /// - /// - /// - public abstract void HandlePOSTRequest(HttpProcessor processor, StreamReader inputData); - } -} diff --git a/releases/1.1/Server/OPDSServer.cs b/releases/1.1/Server/OPDSServer.cs deleted file mode 100644 index fd346af..0000000 --- a/releases/1.1/Server/OPDSServer.cs +++ /dev/null @@ -1,395 +0,0 @@ -/*********************************************************** - * This file is a part of TinyOPDS server project - * - * Copyright (c) 2013 SeNSSoFT - * - * This code is licensed under the Microsoft Public License, - * see http://tinyopds.codeplex.com/license for the details. - * - * This module defines OPDS HTTP server class - * - ************************************************************/ - -using System; -using System.IO; -using System.IO.Compression; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading; -using System.Net; - -using Ionic.Zip; -using TinyOPDS.OPDS; -using TinyOPDS.Data; - -namespace TinyOPDS.Server -{ - public class OPDSServer : HttpServer - { - public OPDSServer(IPAddress interfaceIP, int port, int timeout = 5000) : base(interfaceIP, port, timeout) { } - - /// - /// Dummy for POST requests - /// - /// - /// - public override void HandlePOSTRequest(HttpProcessor processor, StreamReader inputData) - { - Log.WriteLine(LogLevel.Warning, "HTTP POST request from {0}: {1} : NOT IMPLEMENTED", ((System.Net.IPEndPoint)processor.Socket.Client.RemoteEndPoint).Address, processor.HttpUrl); - } - - /// - /// POST requests handler - /// - /// - public override void HandleGETRequest(HttpProcessor processor) - { - Log.WriteLine("HTTP GET request from {0}: {1}", ((System.Net.IPEndPoint)processor.Socket.Client.RemoteEndPoint).Address, processor.HttpUrl); - try - { - // Parse request - string xml = string.Empty; - string request = processor.HttpUrl; - // Remove prefix if any - if (!string.IsNullOrEmpty(Properties.Settings.Default.RootPrefix)) - { - request = request.Replace(Properties.Settings.Default.RootPrefix, "/"); - } - - while (request.IndexOf("//") >= 0) request = request.Replace("//", "/"); - - string ext = Path.GetExtension(request); - string[] http_params = request.Split(new Char[] { '?', '=', '&' }); - - // User-agent check: some e-book readers can handle fb2 files (no conversion is needed) - string userAgent = processor.HttpHeaders["User-Agent"] as string; - bool acceptFB2 = Utils.DetectFB2Reader(userAgent); - - // Is it OPDS request? - if (string.IsNullOrEmpty(ext)) - { - try - { - // Is it root node requested? - if (request.Equals("/")) - { - xml = new RootCatalog().Catalog.ToString(); - } - else if (request.StartsWith("/authorsindex")) - { - int numChars = request.StartsWith("/authorsindex/") ? 14 : 13; - xml = new AuthorsCatalog().GetCatalog(request.Substring(numChars)).ToString(); - } - else if (request.StartsWith("/author/")) - { - xml = new BooksCatalog().GetCatalogByAuthor(request.Substring(8), acceptFB2).ToString(); - } - else if (request.StartsWith("/sequencesindex")) - { - int numChars = request.StartsWith("/sequencesindex/") ? 16 : 15; - xml = new SequencesCatalog().GetCatalog(request.Substring(numChars)).ToString(); - } - else if (request.Contains("/sequence/")) - { - xml = new BooksCatalog().GetCatalogBySequence(request.Substring(10), acceptFB2).ToString(); - } - else if (request.StartsWith("/genres")) - { - int numChars = request.Contains("/genres/") ? 8 : 7; - xml = new GenresCatalog().GetCatalog(request.Substring(numChars)).ToString(); - } - else if (request.StartsWith("/genre/")) - { - xml = new BooksCatalog().GetCatalogByGenre(request.Substring(7), acceptFB2).ToString(); - } - else if (request.StartsWith("/search")) - { - if (http_params[1].Equals("searchTerm")) - { - xml = new OpenSearch().Search(http_params[2], "", acceptFB2).ToString(); - } - else if (http_params[1].Equals("searchType")) - { - int pageNumber = 0; - if (http_params.Length > 6 && http_params[5].Equals("pageNumber")) - { - int.TryParse(http_params[6], out pageNumber); - } - xml = new OpenSearch().Search(http_params[4], http_params[2], acceptFB2, pageNumber).ToString(); - } - } - - if (string.IsNullOrEmpty(xml)) - { - processor.WriteFailure(); - return; - } - - // Modify and send xml back to the client app - xml = "\n" + xml.Insert(5, " xmlns=\"http://www.w3.org/2005/Atom\""); - - if (Properties.Settings.Default.UseAbsoluteUri) - { - try - { - string host = processor.HttpHeaders["Host"].ToString(); - xml = xml.Replace("href=\"", "href=\"http://" + host.UrlCombine(Properties.Settings.Default.RootPrefix)); - } - catch { } - } - -#if USE_GZIP_ENCODING - /// Unfortunately, current OPDS-enabled apps don't support this feature, even those that pretend to (like FBReader for Android) - - // Compress xml if compression supported - if (!processor.HttpHeaders.ContainsValue("gzip")) - { - - byte[] temp = Encoding.UTF8.GetBytes(xml); - using (MemoryStream inStream = new MemoryStream(temp)) - using (MemoryStream outStream = new MemoryStream()) - using (GZipStream gzipStream = new GZipStream(outStream, CompressionMode.Compress)) - { - inStream.CopyTo(gzipStream); - outStream.Position = 0; - processor.WriteSuccess("application/atom+xml;charset=utf=8",true); - outStream.CopyTo(processor.OutputStream.BaseStream); - } - } - else -#endif - { - processor.WriteSuccess("application/atom+xml;charset=utf-8"); - processor.OutputStream.Write(xml); - } - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, "OPDS catalog exception {0}", e.Message); - } - return; - } - else if (request.Contains("opds-opensearch.xml")) - { - xml = new OpenSearch().OpenSearchDescription().ToString(); - xml = "\n" + xml.Insert(22, " xmlns=\"http://a9.com/-/spec/opensearch/1.1/\""); - - if (Properties.Settings.Default.UseAbsoluteUri) - { - try - { - string host = processor.HttpHeaders["Host"].ToString(); - xml = xml.Replace("href=\"", "href=\"http://" + host.UrlCombine(Properties.Settings.Default.RootPrefix)); - } - catch { } - } - - processor.WriteSuccess("application/atom+xml;charset=utf-8"); - processor.OutputStream.Write(xml); - return; - } - // fb2.zip book request - else if (request.Contains(".fb2.zip")) - { - MemoryStream memStream = null; - try - { - memStream = new MemoryStream(); - Book book = Library.GetBook(request.Substring(1, request.IndexOf('/', 1) - 1)); - - if (book.FilePath.ToLower().Contains(".zip@")) - { - string[] pathParts = book.FilePath.Split('@'); - using (ZipFile zipFile = new ZipFile(pathParts[0])) - { - ZipEntry entry = zipFile.Entries.First(e => e.FileName.Contains(pathParts[1])); - if (entry != null) entry.Extract(memStream); - } - } - else - { - using (FileStream stream = new FileStream(book.FilePath, FileMode.Open, FileAccess.Read, FileShare.Read)) - stream.CopyTo(memStream); - } - memStream.Position = 0; - - // Compress fb2 document to zip - using (ZipFile zip = new ZipFile()) - { - zip.AddEntry(Transliteration.Front(string.Format("{0}_{1}.fb2", book.Authors.First(), book.Title)), memStream); - using (MemoryStream outputStream = new MemoryStream()) - { - zip.Save(outputStream); - outputStream.Position = 0; - processor.WriteSuccess("application/fb2+zip"); - outputStream.CopyTo(processor.OutputStream.BaseStream); - } - } - HttpServer.ServerStatistics.BooksSent++; - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, "FB2 file exception {0}", e.Message); - } - finally - { - processor.OutputStream.BaseStream.Flush(); - if (memStream != null) memStream.Dispose(); - } - return; - } - // epub book request - else if (ext.Contains(".epub")) - { - MemoryStream memStream = null; - try - { - memStream = new MemoryStream(); - Book book = Library.GetBook(request.Substring(1, request.IndexOf('/', 1) - 1)); - - if (book.FilePath.ToLower().Contains(".zip@")) - { - string[] pathParts = book.FilePath.Split('@'); - using (ZipFile zipFile = new ZipFile(pathParts[0])) - { - ZipEntry entry = zipFile.Entries.First(e => e.FileName.Contains(pathParts[1])); - if (entry != null) entry.Extract(memStream); - entry = null; - } - } - else - { - using (FileStream stream = new FileStream(book.FilePath, FileMode.Open, FileAccess.Read, FileShare.Read)) - stream.CopyTo(memStream); - } - memStream.Position = 0; - // At this moment, memStream has a copy of requested book - // For fb2, we need convert book to epub - if (book.BookType == BookType.FB2) - { - // No convertor found, return an error - if (string.IsNullOrEmpty(Properties.Settings.Default.ConvertorPath)) - { - Log.WriteLine(LogLevel.Error, "No FB2 to EPUB convertor found, file request can not be completed!"); - processor.WriteFailure(); - return; - } - - // Save fb2 book to the temp folder - string inFileName = Path.Combine(Path.GetTempPath(), book.ID + ".fb2"); - using (FileStream stream = new FileStream(inFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) - memStream.CopyTo(stream); - - // Run converter - string outFileName = Path.Combine(Path.GetTempPath(), book.ID + ".epub"); - string command = Path.Combine(Properties.Settings.Default.ConvertorPath, Utils.IsLinux ? "fb2toepub" : "Fb2ePub.exe"); - string arguments = string.Format(Utils.IsLinux ? "{0} {1}" : "\"{0}\" \"{1}\"", inFileName, outFileName); - - using (ProcessHelper converter = new ProcessHelper(command, arguments)) - { - converter.Run(); - - if (File.Exists(outFileName)) - { - memStream = new MemoryStream(); - using (FileStream fileStream = new FileStream(outFileName, FileMode.Open, FileAccess.Read, FileShare.Read)) - fileStream.CopyTo(memStream); - - // Cleanup temp folder - try { File.Delete(inFileName); } - catch { } - try { File.Delete(outFileName); } - catch { } - } - else - { - string converterError = string.Empty; - foreach (string s in converter.ProcessOutput) converterError += s + " "; - Log.WriteLine(LogLevel.Error, "EPUB conversion error on file {0}. Error description: {1}", inFileName, converterError); - processor.WriteFailure(); - return; - } - } - } - - // At this moment, memStream has a copy of epub - processor.WriteSuccess("application/epub+zip"); - memStream.Position = 0; - memStream.CopyTo(processor.OutputStream.BaseStream); - HttpServer.ServerStatistics.BooksSent++; - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, "EPUB file exception {0}", e.Message); - } - finally - { - processor.OutputStream.BaseStream.Flush(); - if (memStream != null) memStream.Dispose(); - } - return; - } - // Cover image or thumbnail request - else if (ext.Contains(".jpeg")) - { - bool getCover = true; - string bookID = string.Empty; - if (request.Contains("/cover/")) - { - bookID = Path.GetFileNameWithoutExtension(request.Substring(request.IndexOf("/cover/") + 7)); - } - else if (request.Contains("/thumbnail/")) - { - bookID = Path.GetFileNameWithoutExtension(request.Substring(request.IndexOf("/thumbnail/") + 11)); - getCover = false; - } - - if (!string.IsNullOrEmpty(bookID)) - { - CoverImage image = null; - Book book = Library.GetBook(bookID); - - if (book != null) - { - if (ImagesCache.HasImage(bookID)) image = ImagesCache.GetImage(bookID); - else - { - image = new CoverImage(book); - if (image != null && image.HasImages) ImagesCache.Add(image); - } - - if (image != null && image.HasImages) - { - processor.WriteSuccess("image/jpeg"); - (getCover ? image.CoverImageStream : image.ThumbnailImageStream).CopyTo(processor.OutputStream.BaseStream); - processor.OutputStream.BaseStream.Flush(); - HttpServer.ServerStatistics.ImagesSent++; - return; - } - } - } - } - // favicon.ico request - else if (ext.Contains(".ico")) - { - string icon = Path.GetFileName(request); - Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("TinyOPDS.Icons." + icon); - if (stream != null && stream.Length > 0) - { - processor.WriteSuccess("image/x-icon"); - stream.CopyTo(processor.OutputStream.BaseStream); - processor.OutputStream.BaseStream.Flush(); - return; - } - } - processor.WriteFailure(); - } - catch (Exception e) - { - Log.WriteLine(LogLevel.Error, ".HandleGETRequest() exception {0}", e.Message); - processor.WriteFailure(); - } - } - } -} diff --git a/releases/1.1/TinyOPDS.csproj b/releases/1.1/TinyOPDS.csproj deleted file mode 100644 index 1f192c6..0000000 --- a/releases/1.1/TinyOPDS.csproj +++ /dev/null @@ -1,253 +0,0 @@ - - - - Debug - AnyCPU - 8.0.30703 - 2.0 - {D4508020-1E2C-4D8E-B879-77D5C213E8EC} - WinExe - Properties - TinyOPDS - TinyOPDS - v4.0 - 512 - false - Client - Svn - Svn - Svn - SubversionScc - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - true - - - true - bin\Debug\ - DEBUG;TRACE - full - AnyCPU - bin\Debug\TinyOPDS.exe.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - MinimumRecommendedRules.ruleset - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - true - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules - true - false - - - bin\Release\ - TRACE - true - pdbonly - AnyCPU - bin\Release\TinyOPDS.exe.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - MinimumRecommendedRules.ruleset - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - true - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules - true - true - false - 4 - - - TinyOPDS.ico - - - true - bin\Debug\ - CODE_ANALYSIS;DEBUG;TRACE - full - AnyCPU - false - bin\Debug\TinyOPDS.exe.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - MinimumRecommendedRules.ruleset - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - true - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules - true - - - TinyOPDS.Program - - - false - - - - - - - LocalIntranet - - - false - - - Properties\app.manifest - - - - False - Libs\eBdb.EpubReader.dll - - - False - Libs\FB2Library.dll - - - False - Libs\Ionic.Zip.Reduced.dll - - - - - - - - - - - - - - - - - - Form - - - MainForm.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MainForm.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - SQL Server Compact 3.5 SP2 - true - - - False - Windows Installer 3.1 - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/releases/1.1/TinyOPDS.ico b/releases/1.1/TinyOPDS.ico deleted file mode 100644 index 901fcc4cee1de202b4c6a3879fc687641116ef10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115963 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 b}J^7j`y(`}kozvlW=gdTg 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 z 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 diff --git a/releases/1.1/TinyOPDS.sln b/releases/1.1/TinyOPDS.sln deleted file mode 100644 index 3a225a2..0000000 --- a/releases/1.1/TinyOPDS.sln +++ /dev/null @@ -1,34 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TinyOPDS", "TinyOPDS.csproj", "{D4508020-1E2C-4D8E-B879-77D5C213E8EC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TinyOPDSConsole", "..\TinyOPDSConsole\TinyOPDSConsole.csproj", "{5A92FA9B-B91C-48F4-9488-77103868D226}" -EndProject -Global - GlobalSection(SubversionScc) = preSolution - Svn-Managed = True - Manager = AnkhSVN - Subversion Support for Visual Studio - EndGlobalSection - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Full debug|Any CPU = Full debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D4508020-1E2C-4D8E-B879-77D5C213E8EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4508020-1E2C-4D8E-B879-77D5C213E8EC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4508020-1E2C-4D8E-B879-77D5C213E8EC}.Full debug|Any CPU.ActiveCfg = Full debug|Any CPU - {D4508020-1E2C-4D8E-B879-77D5C213E8EC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4508020-1E2C-4D8E-B879-77D5C213E8EC}.Release|Any CPU.Build.0 = Release|Any CPU - {5A92FA9B-B91C-48F4-9488-77103868D226}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5A92FA9B-B91C-48F4-9488-77103868D226}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5A92FA9B-B91C-48F4-9488-77103868D226}.Full debug|Any CPU.ActiveCfg = Release|Any CPU - {5A92FA9B-B91C-48F4-9488-77103868D226}.Full debug|Any CPU.Build.0 = Release|Any CPU - {5A92FA9B-B91C-48F4-9488-77103868D226}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5A92FA9B-B91C-48F4-9488-77103868D226}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/releases/1.1/TinyOPDS.v11.suo b/releases/1.1/TinyOPDS.v11.suo deleted file mode 100644 index f28106c3fd5c90b97afe36d03590c3229af5842b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138240 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 - - - -
- - - - - - - - - - - - - Моя домашняя библиотека - - - 8080 - - - False - - - False - - - False - - - - - - en - - - False - - - - - - False - - - - - - False - - - True - - - False - - - - - - False - - - 0 - - - False - - - 1 - - - 2013-01-01 - - - 5 - - - 0 - - - False - - - - diff --git a/releases/1.1/convertGenres.cs b/releases/1.1/convertGenres.cs deleted file mode 100644 index 17c0b2e..0000000 --- a/releases/1.1/convertGenres.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using System.IO; - -namespace convertGenres -{ - // Simple program to convert genres from text file to xml - public class Program - { - static bool firstTime = true; - - public static void Main(string[] args) - { - if (args.Length < 1) - { - Console.WriteLine("Usage: convertGenres file"); - return; - } - - if (File.Exists(args[0])) - { - using (StreamReader sr = new StreamReader(args[0])) - { - using (StreamWriter sw = new StreamWriter(Path.GetFileNameWithoutExtension(args[0]) + ".xml")) - { - sw.WriteLine("\n"); - - while (!sr.EndOfStream) - { - string s = sr.ReadLine().Replace("&", "&"); - - if (!s.Contains("codepage")) - { - // Is it multilingual file (en+ru)? - int lang_div = s.IndexOf((char)65533); - //Console.WriteLine("lang_div = {0}", lang_div); - - if (s[0] != ' ') - { - if (lang_div > 0) - { - string ru_name = s.Substring(0, lang_div - 1).Trim(); - string en_name = s.Substring(lang_div + 1).Trim(); - sw.WriteLine( (firstTime ? "" :"\t\n") + "\t"); - } - else sw.WriteLine("\t"); - firstTime = false; - } - else - { - int name_idx = s.IndexOf(' ', 2); - string subgenre = s.Substring(1, name_idx - 1); - - if (lang_div > 0) - { - string ru_name = s.Substring(name_idx + 1, lang_div - name_idx - 2).Trim(); - string en_name = s.Substring(lang_div + 1).Trim(); - sw.WriteLine("\t\t" + en_name + ""); - } - else - { - string name = s.Substring(name_idx + 1); - sw.WriteLine("\t\t" + name + ""); - } - } - } - } - - sw.WriteLine("\t\n"); - } - } - } - } - } -} \ No newline at end of file diff --git a/releases/1.1/donate.png b/releases/1.1/donate.png deleted file mode 100644 index 2cac7937d9a36dabf4c24f9da939e60ad5b78ee7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2392 zcmV-e38(gnP)%&W_DNC zFmi5Yw~K0CUD4%0)cb;S`xZKPY?pJVPex_w;9BQ?em6pu2GZcxDMJALdnl?^{q{u! zDzQjdqJjNU?T8Dp%s?4Pm}@#Bs(tluD<@Dkwe9(6r~{&kRoQ?VTr_sbDn%8pLp$cV za#^Lyf_w1K?+epA@4e-^x*x64rPoe$FHV{2`gbiT^jNLx=e6_P!ud1K>M=`Wo!nQ~ z*%rXyfhC0rXaMM%JD+vq9+_+cCejEOd8}3hzB_Gbtz{SF34-tj*cJJRh!{?6(RPYtdGxk>m-;=Om%;J zQHV6Pv0m`gWwEdjVVXZ3`uPm9tlWc>rqq*FaL1bfPEV}Ip570wjKBV3peaXrza7&2c61z@Qmgs0 zmXskMV3fvr`0X0ZZT17Q<%9aRY%nDjs*MiR;4?sZFae7!h*^T5j0RM|2@F3C_|ndS z^sr6{avJo4(yw<$VwgVaoXCP~!^UBl=x>v{U zz*5>Fj_)t>CAE>(j*d?q-6*Jx0d@wz-5{!3qq;sVElgD(H3B(orBVB`t**kY0sBgye59DEem*#$pi69Kjrmh zIbiyHbfMBfE8hQcx10LZZAtp#X*XEvQR!?Frs7KkbOqdqNsVBH- zFKk!s==c*KzN4mX)hS%1fNB2Kg-HXOB?eGs{Xu6yk>V;R2yMWt^};lPqBL0`13EY_ z+NVBsIKIm2__9>w71=MQGHhHH2^52dg$Shq49k;7z6PIxG|T0IL%yYbaz$>MUth=d zkL4dn=Mo+tpwiAWg47C33`$hzRHlc$jTYijZK!N-4fu~$q6$`7-)XX2+^FJI_O~r< z--MUrquNt^58MNacfq4tmThK6kb)^sQ1QlKeEqhus$ZpW_ZA7tfhsC~gc)6Q(M19mmH|#_WeEJ#=W}KJ@oc! z_vD;j3m+ahWnnHBrgHLd3pXFIe3S(f0KK{HV2ymJCd}E9h<1_MOoM6UWf$4&ytj`X zV`0SCEBLRy{ES)TqaQr(j(+l-g`a==VG~OW>hV<$b%}=qEtppKt}j%nFagZ1(|<8> z7106s0t=9QG3dJ=nve^VEy@F!s7pOy!Ow%qfSPf$bsl~VOqIBAow6(wgTYJt_Kzt` zb{a6R%-=p_9V%g^5eF*raLPvjmj+Yc@&6n;e(JROy}SDjSfwkzz3;e%X$K!=!2|^O zKmjNU+x4+xhWlsLJa=OI7I%2=Y=Z^?5x&afXH9coFI`~$w?=Pl~1uF_coh99|N`#!rWj~*MajwMbflSY^{8re8=mUR^V;cph% zkNb7gX4m)n>j_Y{7!P1#Jw!R?Tbw%P(A4-;Y3yK$Sfm1>!=LcqdY%UsM4rlUy%EUqpNqBMi3 zGT^@~SYYDEVQILs1XG%20w&s%^TWsb`Vz<#2O2C8=VVhAeq{a1|iz zL&z#Xf`w@ZYhlxl2M+1J)snT!+8RLNbcd)PindU*3vl|A4?HD4{L~srUn{q=02fR? zPy$8Pi88WM_ z_*f&Hrb=0}W?|BIc0faa(5F} - - - Alternative history - Action SF - Epic SF - Heroic SF - Detective SF - Cyberpunk - Space SF - Social SF - Horror - Humor SF - Fantasy - Science Fiction - Science Fiction for Kids - Fantasy city - Postapocalyptic - Love SF - Gothic novel - Non Science Fiction - Fairy SF - Other SF - Ironical SF - Ironyc female fantasy - Mystic - Space Opera - Stimpank - Technofantasy - popadanec - Historical fantasy - humor_fantasy - - - Detective SF - Classical Detective - Police Stories - Action - Ironical Detective - Historical Detective - Espionage Detective - Crime Detective - Political Detective - Maniacs - Hard-boiled Detective - Thrillers - Detective - Detective Romance - Detective for Kids - Legal thriller - Medical thriller - Techno Thriller - Cozy Mysteries - - - Prose - Classical Prose - Historical Prose - Contemporary Prose - Counterculture - Russian Classics - Soviet Classics - Military - Aphorisms - Essay - Story - Great story - Short story - Roman - Extravaganza - Epistolary - Epic - Magic realism - Sagas - Anti-Soviet fiction - prose_sentimental - - - Contemporary Romance - Historical Romance - Detective Romance - Short Romance - Erotica - About love - Love SF - Porno - Cozy Mysteries - - - Western - History - Indians - Maritime Fiction - Travel & Geography - Nature & Animals - Misk Adventures - Kids Adventures - - - Fairy Tales - Verses for Kids - Prose for Kids - Science Fiction for Kids - Detective for Kids - Kids Adventures - Education for Kids - For Kids: Misk - Child Folklore - Game book - - - Verses for Kids - Poetry - Humor Verses - Fable - Vers libre - Visual Poetry - Lyrics - Palindromes - Song Poetry - Experimental Poetry - Epic Poetry - In verse - - - Antique Literature - Antique European Literature - Antique Russian Literature - Antique East Literature - Myths. Legends. Epos - Other Antique - - - History - Psychology - Cultural Science - Religious Studies - Philosophy - Politics - Business - Jurisprudence - Linguistics - Medicine - Physics - Mathematics - Chemistry - Biology - Technical - Misk Science, Education - Biochemistry - Physical chemistry - Analitic Chemistry - Organic Chemistry - Economy - State science - Biophysics - Geology - Cosmos - Alternative medicine - Philology - Pedagogy - Social studies - Ecology - Military History - Veterinary - Zoology - Botany - Textbook - Cribs - Abstract - Foreign languages - psy_childs - psy_theraphy - Sex and family - - - Internet - Programming - Hardware - Software - Databases - OS & Networking - Computers: Misk - DSP - - - Encyclopedias - Dictionaries - Reference - Guidebooks - Misk References - Art, Design - Guides - - - Religion - Esoterics - Self-perfection - Religion: Other - Buddha - Christianity - Orthodoxy - Catholicism - Protestantism - Hinduism - Islam - Judaism - Astrology - Palmistry - Paganism - - - Humor SF - Anecdote - Humor Prose - Humor Verses - Misk Humor - Comedy - Satire - - - Cooking - Pets - Hobbies & Crafts - Entertaining - Health - Garden - Do it yourself - Sports - Erotica, Sex - Home: Other - Collecting - - - Technical - Transport - Metallurgy - Radio - Building - Auto regulations - Architecture - - - Other - Notes - Periodic - Music - Cine - Theatre - Fan fiction - Unfinished - Visual Arts - - - Banking - Accounting - Global Economy - Paper Work - Corporate Culture - Personal Finance - Small Business - Marketing, PR, Adv - Real Estate - Popular Business - Industries - Job Hunting - Young-adult fiction - Management - Stock - Economics - Trade - - - Travel & Geography - Nature & Animals - Biography & Memoirs - Publicism - Criticism - Misk Nonfiction - Military docs - Science popular - - - Dramaturgy - Drama - Screenplays - Comedy - Mystery - Scenarios - Tragedy - Vaudeville - - - Anecdote - Epic - Child Folklore - Riddles - Folk Songs - Folk tales - Proverbs - Folklore - Limerick - - - Military - Military docs - Military History - Weapon - Military Arts - Military special - Military - - diff --git a/releases/1.1/translation.xml b/releases/1.1/translation.xml deleted file mode 100644 index 263a9c5..0000000 --- a/releases/1.1/translation.xml +++ /dev/null @@ -1,438 +0,0 @@ - - - - English - Русский - - - - Path to books folder: - Путь к книжному каталогу: - - - Monitor library changes - Следить за каталогом - - - Duplicates: - Дубликаты: - - - STOPPED - ОСТАНОВЛЕН - - - Status: - Статус - - - 0 books/min - 0 книг/мин - - - {0} books/min - {0} книг/мин - - - Rate: - Скорость: - - - Elapsed time: - Прошло времени: - - - Start time: - Стартовал в: - - - Books in database: - Всего книг в базе: - - - Books found: - Найдено книг: - - - Books processed: - Обработано книг: - - - Invalid books: - Ошибочных книг: - - - Skipped books: - Пропущено книг: - - - Start scanning - Начать сканирование - - - Server name: - Название сервера: - - - Port: - Порт: - - - Start server - Стартовать сервер - - - SCANNING - СКАНИРУЮ - - - FINISHED - ЗАКОНЧИЛ - - - Stop scanning - Остановить сканирование - - - Stop server - Остановить сервер - - - Path to the ePub converter: - Путь к ePub конвертору: - - - GUI and OPDS language: - Язык программы и OPDS: - - - Close or minimize to tray - Скрывать в трей - - - Start minimized - Стартовать минимизированным - - - Start with Windows - Стартовать вместе с Windows - - - Save log to file - Сохранять лог в файл - - - Use UPnP - Использовать UPnP - - - Scanner settings - Настройки сканера - - - OPDS server settings - Настройки OPDS сервера - - - Miscellaneous - Разное - - - About program - О программе - - - Authentication - Авторизация - - - Exit - Выход - - - Forward port on router - Открыть порт на роутере - - - Absolute links - Абсолютные ссылки - - - OPDS root catalog prefix: - Префикс корневого каталога OPDS: - - - Local URL: - Локальный URL: - - - External URL: - Внешний URL: - - - Click here to download latest version of ePub converter - Кликните для закачки последней версии конвертера ePub - - - TinyOPDS server - TinyOPDS сервер - - - Project home page: - Домашняя страница: - - - Project license: - Лицензия проекта: - - - Special thanks: - Отдельное спасибо: - - - Database file name: - Файл базы данных: - - - Books by authors - Книги по авторам - - - Total authors on {0}: {1} - Всего авторов на {0}: {1} - - - Books: {0} - Книг: {0} - - - Books by author - Книги автора - - - By authors - По авторам - - - {0} books by {1} authors - {0} книг от {1} авторов - - - By series - По сериям - - - {0} books by {1} series - {0} книг в {1} сериях - - - By genres - По жанрам - - - Books grouped by genres - Книги, сгруппированные по жанрам - - - Book series - Книжные серии - - - Total series on {0}: {1} - Всего серий на {0}: {1} - - - {0} books in {1} - {0} книг в {1} - - - Books in genre «{0}» - Книги в жанре «{0}» - - - Hide window - Скрыть окно - - - Show window - Показать окно - - - Minimize window - Свернуть окно - - - Restore window - Показать окно - - - Can't find UPnP router, forwarding is not available - Не могу найти UPnP роутер, форвардинг не доступен - - - Invalid port value: value must be numeric and in range from 1 to 65535 - Неверный номер порта: значение должно быть в интервале от 1 до 65535 - - - Invalid port value. Default value 8080 will be used - Неверный номер порта. Будет использован номер 8080 - - - version {0}.{1} {2} - версия {0}.{1} {2} - - - Search authors - Поиск авторов - - - Search authors by name - Поиск авторов по имени - - - Search books - Поиск книг - - - Search books by title - Поиск книг по названию - - - Translation: - Перевод: - - - Year of publication: - Год публикации: - - - Format: - Формат: - - - Size: - Размер: - - - Series: - Серия: - - - All books by author {0} - Все книги автора {0} - - - All books by series {0} - Все книги серии {0} - - - Use HTTP basic authentication - Использовать базовую авторизацию HTTP - - - Remember authorized clients - Помнить авторизованных клиентов - - - Probably, port {0} is already in use. Please try different port value. - Вероятно, порт {0} уже используется. Попробуйте другое значение. - - - Log verbosity level - Детализация лог-файла - - - Info, warnings and errors - Информация, предупреждения и ошибки - - - Warnings and errors - Предупреждения и ошибки - - - Errors only - Только ошибки - - - Total requests: - Всего запросов: - - - Books sent: - Отдано книг: - - - Images sent: - Отдано картинок: - - - Unique clients: - Уникальных клиентов: - - - Successful logins: - Успешных входов: - - - Failed logins: - Неверных входов: - - - Banned clients: - Заблокировано: - - - Ban clients after - Блокировать клиентов после - - - failed attempts - неверных попыток - - - Check for update: - Проверять обновление: - - - Never - Никогда - - - Once a week - Раз в неделю - - - Once a month - Раз в месяц - - - TinyOPDS: update found - TinyOPDS: обнаружено обновление - - - Click here to download update v {0} - Кликните для загрузки обновления v {0} - - - New version {0} is available!\nWould you like to download now? - Новая версия [OK} доступна для загрузки.\nЖелаете загрузить сейчас? - - - - - - - - - - - - - - - - - - - - \ No newline at end of file